diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..5840ad78 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +custom: ['https://jrsoftware.org/isdonate.php'] diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..3f18d859 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,140 @@ +name: build + +on: + push: + +env: + HOME: "${{github.workspace}}\\home" + +jobs: + build: + # Only set the topic `has-issrc-build-env` if the secrets are available + if: contains(github.event.repository.topics, 'has-issrc-build-env') + runs-on: windows-latest + steps: + - uses: actions/checkout@v3 + with: + submodules: true + - name: initialize build environment + env: + ISSRC_BUILD_ENV_ZIP_PASSWORD: ${{ secrets.ISSRC_BUILD_ENV_ZIP_PASSWORD }} + ISSRC_BUILD_ENV_ZIP_URL: ${{ secrets.ISSRC_BUILD_ENV_ZIP_URL }} + run: | + (New-Object Net.WebClient).DownloadFile($env:ISSRC_BUILD_ENV_ZIP_URL, "issrc-build-env.zip") + & "C:\\Program Files\\7-Zip\\7z.exe" x -oissrc-build-env -p"$env:ISSRC_BUILD_ENV_ZIP_PASSWORD" issrc-build-env.zip + if (!(Test-Path issrc-build-env\bin\dcc32.exe)) { + Write-Host "Failed to extract dcc32.exe" + Exit 1 + } + Remove-Item issrc-build-env.zip + $DELPHIXEROOT = (Get-Item .\issrc-build-env).FullName + "DELPHIXEROOT=$DELPHIXEROOT" | Out-File -NoNewLine -Encoding ascii -Append "$env:GITHUB_ENV" + - name: Prepare home directory for code-signing + env: + CODESIGN_P12: ${{secrets.CODESIGN_P12}} + CODESIGN_PASS: ${{secrets.CODESIGN_PASS}} + if: env.CODESIGN_P12 != '' && env.CODESIGN_PASS != '' + shell: bash + run: | + mkdir -p home/bin && + echo -n "$CODESIGN_P12" | tr % '\n' | base64 -d >home/.codesign.p12 && + printf '%s ' >home/bin/run-signtool.bat \ + '"C:\Program Files (x86)\Windows Kits\10\App Certification Kit\signtool.exe" sign' \ + '/v /fd SHA256 /du "https://jrsoftware.org" /d "Inno Setup"' \ + '/tr http://timestamp.comodoca.com?td=sha256 /td SHA256' \ + '/f "${{github.workspace}}\home\.codesign.p12"' \ + "/p \"$CODESIGN_PASS\" \"%1\"" && + printf '%s\n' >setup-sign.bat \ + 'mkdir tmp-unsigned' \ + 'copy files tmp-unsigned' \ + 'tmp-unsigned\iscc /Sissigntool256="${{github.workspace}}\home\bin\run-signtool.bat $f" /DSIGNTOOL setup.iss' + - name: build issrc + run: | + "set DELPHIXEROOT=$env:DELPHIXEROOT" | Out-File -NoNewline -Encoding ascii compilesettings.bat + "set DELPHIXEROOT=$env:DELPHIXEROOT" | Out-File -NoNewline -Encoding ascii ISHelp\ISHelpGen\compilesettings.bat + "set HHCEXE=%ProgramFiles(x86)%\HTML Help Workshop\hhc.exe" | Out-File -NoNewline -Encoding ascii ISHelp\compilesettings.bat + "set HHCEXE=%ProgramFiles(x86)%\HTML Help Workshop\hhc.exe" | Out-File -NoNewline -Encoding ascii Projects\ISPP\Help\compilesettings.bat + .\build.bat + - name: Clean up temporary files + if: always() + shell: bash + run: rm -rf home setup-sign.bat + - name: copy license.txt into all artifacts + run: | + copy license.txt Files + copy license.txt Output + copy license.txt Projects/ISPP/Help/Staging + copy license.txt ISHelp/Staging + - name: upload Files + uses: actions/upload-artifact@v3 + with: + name: Files + path: Files + - name: upload installer + uses: actions/upload-artifact@v3 + with: + name: Output + path: Output + - name: upload ISPP/Help + uses: actions/upload-artifact@v3 + with: + name: Help + path: Projects/ISPP/Help/Staging + - name: upload ISHelp + uses: actions/upload-artifact@v3 + with: + name: ISHelp + path: ISHelp/Staging + - name: find mt.exe + shell: bash + run: | + set -x && + mt=$(ls -t /c/Program\ Files*/Windows\ Kits/10/bin/*/x64/mt.exe) && + test -n "$mt" && + echo "${mt%%/mt.exe*}" >>$GITHUB_PATH + - name: verify installer + shell: bash + run: | + set -x && + ver="$(sed -n 's/^set VER=//p' trace/ver && + curl -LO https://download.sysinternals.com/files/ProcessMonitor.zip && + unzip ProcessMonitor.zip && + # Need to start the background process via PowerShell because it would + # block for some reason if started as a Bash background process. + powershell -command 'start-process -NoNewWindow -FilePath .\Procmon.exe -ArgumentList "-AcceptEula -Quiet -BackingFile trace/procmon.pml -RunTime 60"' && + test $? = 0 && + ps -W && + ./Procmon.exe -AcceptEula -WaitForIdle && + ./Output/innosetup-$ver.exe //verysilent //dir=InnoSetup //noicons \ + //tasks= //portable=1 && + test -x InnoSetup/ISCC.exe && + ./Procmon.exe -Terminate -Quiet && + powershell -command 'start-process -NoNewWindow -Wait -FilePath .\Procmon.exe -ArgumentList "-OpenLog trace\procmon.pml -SaveAs trace\procmon.csv"' + - name: upload trace + uses: actions/upload-artifact@v3 + with: + name: trace + path: trace + - name: check trace + shell: bash + run: | + set -x && + curdir="$(cygpath -aw Output | sed 's/\\/&&/g')" && + ver="$(sed 's/\./\\&/g' trace/filtered.csv && + if test -s trace/filtered.csv + then + echo ":error:Unexpected filesystem access" >&2 + cat trace/filtered.csv >&2 + exit 1 + fi diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..421505b8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +c.bat +compilesettings.bat +setup-sign.bat +Output \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..6188ca76 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "Components/UniPs"] + path = Components/UniPs + url = https://github.com/remobjects/pascalscript.git diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..d88a7b42 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,61 @@ +Inno Setup +========== + +Copyright (C) 1997-2024 Jordan Russell. All rights reserved. +Portions Copyright (C) 2000-2024 Martijn Laan. All rights reserved. +For conditions of distribution and use, see LICENSE.TXT. + +Contributing issues +------------------- + +To report bugs or request new features use the [forum](https://jrsoftware.org/forums.php). + +Contributing new code or documentation updates +---------------------------------------------- + +To contribute new code or documentation updates to Inno Setup clone your own +fork instead of cloning the main Inno Setup repository, commit your work on topic +branches and make pull requests. In detail: + +1. [Fork](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) the project. + +2. Clone your fork (`git clone https://github.com//issrc.git`). + +3. Add an `upstream` remote (`git remote add upstream + https://github.com/jrsoftware/issrc.git`). + +4. Get the latest changes from upstream (e.g. `git pull upstream main`). + +5. Create a new topic branch to contain your feature, change, or fix (`git + checkout -b `). + +6. Make sure that your changes adhere to the current coding conventions used + throughout the project - indentation, accurate comments, etc. + + Do not make mass whitespace, copyright date or $jrsoftware$ tag changes to + files. The only time is it ok to make such changes is when you already needed + to change the file to implement your feature, change, or fix. + +7. Commit your changes to your topic branch. + +8. Push your topic branch up to your fork (`git push origin + `). + +9. [Open a Pull Request](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests) with a + clear title and description. Please include your name and email address if + you are contributing a translation. + +10. Sign our [Contributor License Agreement](https://gist.github.com/c6a4b3ca5e370d65b49746df848e12a2) when asked. + +If you don't have the Git client (`git`), get it from: + +https://git-scm.com/ + +Contributing translations +------------------------- + +To contribute translations please see https://jrsoftware.org/files/istrans/send.php. + +Please do NOT use GitHub's web editor to edit ANSI translations and create pull +requests. This editor doesn't work since it automatically turns ANSI files into +UTF8 files without a BOM which are not supported before Inno Setup 6.3. diff --git a/Components/.gitignore b/Components/.gitignore new file mode 100644 index 00000000..45239335 --- /dev/null +++ b/Components/.gitignore @@ -0,0 +1 @@ +*.dcu \ No newline at end of file diff --git a/Components/ASMInline.pas b/Components/ASMInline.pas new file mode 100644 index 00000000..880c38f8 --- /dev/null +++ b/Components/ASMInline.pas @@ -0,0 +1,402 @@ +unit ASMInline; + +interface + +{ASM Inliner + Nicholas Sherlock + + This is incomplete, I've only implemented enough to support InnoCallback. + + Instructions are stored in a TMemoryStream internally + + Instructions usually accept some combination of Registers, Immediates and + Memory References. Memory References can either be of the simple form [EAX] + (Where [EAX] is really a Delphi set), or the user can build the address with + the TASMInline.addr() function. It'd be nice to have a function which builds + the address from a string, too, allowing the more intuitive '[EAX+EBX*4+1000]' + style. + + The generation of instruction-relative addresses generates Relocations, using + SaveToMemory() automatically rebases using the relocations to make these correct + in the final block of memory. + + !!!! Not all special cases have been implemented in WriteRegRef(). + + Further reduced to just what's needed for Inno Setup by Martijn Laan +} + +uses Sysutils, Windows, Classes, Contnrs; + +type + TModMode = (mmNaked, mmDeref, mmDisp8, mmDisp32); + + TRegister32 = (EAX, EBX, ECX, EDX, ESP, EBP, ESI, EDI); + TRegister32Set = set of TRegister32; + TRegister16 = (AX, BX, CX, DX, SP, BP, SI, DI); + TRegister16Set = set of TRegister16; + TRegister8 = (AH, AL, BH, BL, CH, CL, DH, DL); + + TCLRegister = CL..CL; + + TMemSize = (ms8, ms16, ms32, ms64); + + TMemoryAddress = record + size: TMemSize; + usebase: boolean; + base, index: TRegister32; + offset: integer; + scale: byte; + end; + + EOperandSizeMismatch = class(exception) + public + constructor create; + end; + + TRelocType = (rt32Bit); + + TReloc = class + public + position: longword; + relocType: TRelocType; + end; + + TASMInline = class + private + fbuffer: TMemoryStream; + frelocs: TObjectList; + fbase: longword; + + procedure AddRelocation(position: longword; relocType: TRelocType); + + function GetReloc(index: integer): TReloc; + function RelocCount: integer; + property Relocs[index: integer]: TReloc read GetReloc; + + procedure WriteByte(b: byte); + procedure WriteInteger(i: integer); + procedure WriteLongWord(l: longword); + procedure WriteRegRef(reg: byte; base: TRegister32; deref: boolean; index: TRegister32; Offset: integer; Scale: byte; usebase: boolean); overload; + procedure WriteRegRef(mem: TMemoryAddress; reg: TRegister32); overload; + procedure WriteRegRef(reg: TRegister32; base: TRegister32; deref: boolean; index: TRegister32 = EAX; Offset: integer = 0; Scale: byte = 0; usebase: boolean = true); overload; + public + function Size: integer; + + procedure Relocate(base: pointer); + + function SaveAsMemory: pointer; + procedure SaveToMemory(target: pointer); + + constructor create; + destructor Destroy; override; + + function Addr(base: TRegister32; offset: Integer; size: TMemSize = ms32): TMemoryAddress; overload; + + //PUSH reg + procedure Push(reg: TRegister32); overload; + + //POP reg + procedure Pop(reg: TRegister32); + + //JUMP rel32 + procedure Jmp(target: pointer); overload; + + //MOV reg, imm + procedure Mov(reg: TRegister32; b: longword); overload; + //MOV reg, mem and MOV mem, reg + procedure Mov(mem: TMemoryAddress; reg: TRegister32); overload; + procedure Mov(reg: TRegister32; mem: TMemoryAddress); overload; + end; + +implementation + +constructor EOperandSizeMismatch.create; +begin + inherited create('Operand size mismatch'); +end; + +{Throw an exception if test<>match. Poor man's assert(). + Could overload to add other sorts of tests} + +procedure require(test: TMemSize; match: TMemSize); +begin + if test <> match then + raise EOperandSizeMismatch.create; +end; + +function regnum(reg: TRegister32): byte; overload; +begin + case reg of + EAX: result := 0; + EBX: result := 3; + ECX: result := 1; + EDX: result := 2; + ESP: result := 4; + EBP: result := 5; + ESI: result := 6; + EDI: result := 7; + else raise exception.create('Unknown register...'); + end; +end; + +function ModModeNum(m: TModMode): byte; +begin + case m of + mmDeref: result := 0; + mmDisp8: result := 1; + mmDisp32: result := 2; + mmNaked: result := 3; + else raise exception.create('Invalid mod mode: ' + inttostr(ord(m))); + end; +end; + +function EncodeSIB(scale, index, base: byte): byte; +begin + result := base or (index shl 3) or (scale shl 6); +end; + +function EncodeModRM(aMod, aReg, aRM: byte): byte; overload; +begin + result := (aMod shl 6) or (areg shl 3) or aRM; +end; + +{$IFOPT R+} +{$DEFINE RESTORER} +{$R-} +{$ENDIF} +{$IFOPT Q+} +{$DEFINE RESTOREQ} +{$Q-} +{$ENDIF} +procedure TASMInline.Relocate(base: pointer); +var oldpos, diff, orig: integer; + i: integer; + reloc: TReloc; +begin + oldpos := fbuffer.Position; + try + + diff := -(longword(base) - fbase); + + for i := 0 to RelocCount - 1 do begin + reloc := Relocs[i]; + case reloc.relocType of + rt32Bit: begin + fbuffer.Seek(reloc.position, soBeginning); + fbuffer.Read(orig, sizeof(orig)); + fbuffer.seek(-sizeof(orig), soCurrent); + orig := LongWord(orig + diff); + fbuffer.write(orig, sizeof(orig)); + end; + end; + end; + fbase := longword(base); + finally + fbuffer.position := oldpos; + end; +end; +{$IFDEF RESTORER} +{$R+} +{$ENDIF} +{$IFDEF RESTOREQ} + {Q+} +{$ENDIF} + +function TASMInline.GetReloc(index: integer): TReloc; +begin + result := TReloc(frelocs[index]); +end; + +function TASMInline.RelocCount: integer; +begin + result := frelocs.Count; +end; + +procedure TASMInline.AddRelocation(position: longword; relocType: TRelocType); +var reloc: TReloc; +begin + reloc := TReloc.Create; + reloc.position := position; + reloc.relocType := relocType; + frelocs.add(reloc); +end; + +function TASMInline.SaveAsMemory: pointer; +var buf: pointer; + oldprotect: Cardinal; +begin + GetMem(buf, size); + VirtualProtect(buf, Size, PAGE_EXECUTE_READWRITE, oldprotect); + SaveToMemory(buf); + result := buf; +end; + +procedure TASMInline.SaveToMemory(target: pointer); +begin + Relocate(target); + Move(fbuffer.memory^, target^, size); +end; + +function TASMInline.Addr(base: TRegister32; offset: Integer; size: TMemSize = ms32): TMemoryAddress; +begin + result.base := base; + result.scale := 0; //don't use Index + result.offset := offset; + result.size := size; + result.usebase := true; +end; + +function TASMInline.Size: integer; +begin + result := fbuffer.size; +end; + +procedure TASMInline.WriteInteger(i: integer); +begin + fbuffer.write(i, 4); +end; + +procedure TASMInline.writelongword(l: longword); +begin + fbuffer.write(l, 4); +end; + +procedure TASMInline.writebyte(b: byte); +begin + fbuffer.write(b, 1); +end; + +procedure TASMInline.Pop(reg: TRegister32); +begin + writebyte($58 + regnum(reg)); +end; + +procedure TASMInline.Jmp(target: pointer); +begin + writebyte($E9); + AddRelocation(fbuffer.position, rt32bit); + WriteInteger(integer(target) - (integer(fBase) + fbuffer.Position + 4)); +end; + +procedure TASMInline.Push(reg: TRegister32); +begin + writebyte($50 + regnum(reg)); +end; + +procedure TASMInline.WriteRegRef(mem: TMemoryAddress; reg: TRegister32); +begin + writeregref(reg, mem.base, true, mem.index, mem.offset, mem.scale, mem.usebase); +end; + +//Write the MODR/M and SIB byte for the given register or memory reference + +procedure TASMInline.WriteRegRef(reg: TRegister32; base: TRegister32; deref: boolean; index: TRegister32 = EAX; Offset: integer = 0; Scale: byte = 0; usebase: boolean = true); +begin + WriteRegRef(regnum(reg), base, deref, index, Offset, scale, usebase); +end; + +procedure TASMInline.WriteRegRef(reg: byte; base: TRegister32; deref: boolean; index: TRegister32; Offset: integer; Scale: byte; usebase: boolean); +type TOffSize = (osNone, os8, os32); +var mode: TModMode; + offsize: TOffSize; + useSIB: boolean; + areg, arm: Byte; +begin + if not deref then begin + mode := mmNaked; + offsize := osNone; + end else + if usebase = false then begin + offsize := os32; + mode := mmDeref; + base := EBP; //the "no base" value + end else + if Offset = 0 then begin + mode := mmDeref; + offsize := osNone; + end else + if (offset >= -128) and (offset < 128) then begin //signed byte + mode := mmDisp8; + offsize := os8; + end else begin + mode := mmDisp32; + offsize := os32; + end; + + if (mode <> mmnaked) then begin + usesib := (Scale > 0) or (base = ESP); + end else usesib := false; + + if useSIB then begin //calculate scale, easiest just to use a case statement.. + case scale of + 0: begin //dont want an index value + index := ESP; //"none" value + end; + 1: scale := 0; + 2: scale := 1; + 4: scale := 2; + 8: scale := 3; + else raise exception.create('Invalid scale, valid values are 1,2,4,8.'); + end; + end; + + if (not useSIB) and (mode = mmDeref) and (base = EBP) then begin + //not available, use [EBP+0] instead + mode := mmDisp8; + offsize := os8; + Offset := 0; + end; + + arm := regnum(base); + areg := reg; + + if usesib then + WriteByte(EncodeModRM(ModModeNum(mode), areg, 4)) else + WriteByte(EncodeModRM(ModModeNum(mode), areg, arm)); + + if usesib then begin + WriteByte(EncodeSIB(Scale, regnum(index), regnum(base))); + end; + + //Do we have to append an offset? + case offsize of + os8: WriteByte(byte(offset)); //ignore sign.. + os32: writelongword(longword(offset)); + end; +end; + +procedure TASMInline.Mov(mem: TMemoryAddress; reg: TRegister32); +begin + require(mem.size, ms32); + WriteByte($89); + WriteRegRef(mem, reg); +end; + +procedure TASMInline.Mov(reg: TRegister32; mem: TMemoryAddress); +begin + require(mem.size, ms32); + WriteByte($8B); + WriteRegRef(mem, reg); +end; + +procedure TASMInline.Mov(reg: TRegister32; b: longword); +begin + writebyte($B8 + regnum(reg)); + writelongword(b); +end; + +constructor TASMInline.create; +begin + fbuffer := tmemorystream.create; + frelocs := tobjectlist.create; +end; + +destructor TASMInline.destroy; +begin + fbuffer.free; + frelocs.free; + inherited; +end; + +end. + diff --git a/Components/BidiCtrls.pas b/Components/BidiCtrls.pas new file mode 100644 index 00000000..4c0a1955 --- /dev/null +++ b/Components/BidiCtrls.pas @@ -0,0 +1,148 @@ +unit BidiCtrls; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + RTL-capable versions of standard controls +} + +interface + +uses + Windows, SysUtils, Messages, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, ExtCtrls; + +type + TNewEdit = class(TEdit) + protected + procedure CreateParams(var Params: TCreateParams); override; + end; + + TNewMemo = class(TMemo) + protected + procedure CreateParams(var Params: TCreateParams); override; + end; + + TNewComboBox = class(TComboBox) + protected + procedure CreateParams(var Params: TCreateParams); override; + end; + + TNewListBox = class(TListBox) + protected + procedure CreateParams(var Params: TCreateParams); override; + end; + + TNewButton = class(TButton) + protected + procedure CreateParams(var Params: TCreateParams); override; + end; + + TNewCheckBox = class(TCheckBox) + protected + procedure CreateParams(var Params: TCreateParams); override; + end; + + TNewRadioButton = class(TRadioButton) + protected + procedure CreateParams(var Params: TCreateParams); override; + end; + + TNewLinkLabel = class(TLinkLabel) + protected + procedure CreateParams(var Params: TCreateParams); override; + public + function AdjustHeight: Integer; + end; + +procedure Register; + +implementation + +uses + CommCtrl, BidiUtils; + +procedure Register; +begin + RegisterComponents('JR', [TNewEdit, TNewMemo, TNewComboBox, TNewListBox, + TNewButton, TNewCheckBox, TNewRadioButton]); +end; + +{ TNewEdit } + +procedure TNewEdit.CreateParams(var Params: TCreateParams); +begin + inherited; + SetBiDiStyles(Self, Params); +end; + +{ TNewMemo } + +procedure TNewMemo.CreateParams(var Params: TCreateParams); +begin + inherited; + SetBiDiStyles(Self, Params); +end; + +{ TNewComboBox } + +procedure TNewComboBox.CreateParams(var Params: TCreateParams); +begin + inherited; + SetBiDiStyles(Self, Params); +end; + +{ TNewListBox } + +procedure TNewListBox.CreateParams(var Params: TCreateParams); +begin + inherited; + SetBiDiStyles(Self, Params); +end; + +{ TNewButton } + +procedure TNewButton.CreateParams(var Params: TCreateParams); +begin + inherited; + SetBiDiStyles(Self, Params); + Params.ExStyle := Params.ExStyle and not WS_EX_RIGHT; +end; + +{ TNewCheckBox } + +procedure TNewCheckBox.CreateParams(var Params: TCreateParams); +begin + inherited; + SetBiDiStyles(Self, Params); +end; + +{ TNewRadioButton } + +procedure TNewRadioButton.CreateParams(var Params: TCreateParams); +begin + inherited; + SetBiDiStyles(Self, Params); +end; + +{ TNewLinkLabel } + +procedure TNewLinkLabel.CreateParams(var Params: TCreateParams); +begin + inherited; + SetBiDiStyles(Self, Params); +end; + +function TNewLinkLabel.AdjustHeight: Integer; +begin + var OldHeight := Height; + var IdealSize: TSize; + SendMessage(Handle, LM_GETIDEALSIZE, Width, LPARAM(@IdealSize)); + Height := IdealSize.cy; + Result := Height - OldHeight; +end; + +end. diff --git a/Components/BidiUtils.pas b/Components/BidiUtils.pas new file mode 100644 index 00000000..45cc2eb7 --- /dev/null +++ b/Components/BidiUtils.pas @@ -0,0 +1,99 @@ +unit BidiUtils; + +{ + Inno Setup + Copyright (C) 1997-2018 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + Bidi utility functions +} + +interface + +uses + Windows, SysUtils, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; + +procedure FlipControls(const AParentCtl: TWinControl); +procedure FlipRect(var Rect: TRect; const ParentRect: TRect; const UseRightToLeft: Boolean); +function IsParentFlipped(const AControl: TControl): Boolean; +function IsParentRightToLeft(const AControl: TControl): Boolean; +function SetBiDiStyles(const AControl: TControl; var AParams: TCreateParams): Boolean; + +var + { These are set by the SetupForm unit: } + IsParentFlippedFunc: function(AControl: TControl): Boolean; + IsParentRightToLeftFunc: function(AControl: TControl): Boolean; + +implementation + +procedure FlipRect(var Rect: TRect; const ParentRect: TRect; const UseRightToLeft: Boolean); +var + W: Integer; +begin + if UseRightToLeft then begin + W := Rect.Right - Rect.Left; + Rect.Left := ParentRect.Right - (Rect.Left - ParentRect.Left) - W; + Rect.Right := Rect.Left + W; + end; +end; + +function IsParentFlipped(const AControl: TControl): Boolean; +begin + if Assigned(IsParentFlippedFunc) then + Result := IsParentFlippedFunc(AControl) + else + Result := False; +end; + +function IsParentRightToLeft(const AControl: TControl): Boolean; +begin + if Assigned(IsParentRightToLeftFunc) then + Result := IsParentRightToLeftFunc(AControl) + else + Result := False; +end; + +function SetBiDiStyles(const AControl: TControl; var AParams: TCreateParams): Boolean; +begin + Result := IsParentRightToLeft(AControl); + if Result then + AParams.ExStyle := AParams.ExStyle or (WS_EX_RTLREADING or WS_EX_LEFTSCROLLBAR or WS_EX_RIGHT); +end; + +type + TControlAccess = class(TControl); + +procedure FlipControls(const AParentCtl: TWinControl); +var + ParentWidth, I: Integer; + Ctl: TControl; +begin + if AParentCtl.ControlCount = 0 then + Exit; + AParentCtl.DisableAlign; + try + ParentWidth := AParentCtl.ClientWidth; + for I := 0 to AParentCtl.ControlCount-1 do begin + Ctl := AParentCtl.Controls[I]; + if (akLeft in Ctl.Anchors) and not (akRight in Ctl.Anchors) then + Ctl.Anchors := Ctl.Anchors - [akLeft] + [akRight] + else if not (akLeft in Ctl.Anchors) and (akRight in Ctl.Anchors) then begin + { Before we can set Anchors to [akLeft, akTop] (which has a special + 'no anchors' meaning to VCL), we first need to update the Explicit* + properties so the control doesn't get moved back to an old position. } + if Ctl.Anchors = [akTop, akRight] then + TControlAccess(Ctl).UpdateExplicitBounds; + Ctl.Anchors := Ctl.Anchors - [akRight] + [akLeft]; + end; + Ctl.Left := ParentWidth - Ctl.Width - Ctl.Left; + end; + finally + AParentCtl.EnableAlign; + end; + for I := 0 to AParentCtl.ControlCount-1 do + if AParentCtl.Controls[I] is TWinControl then + FlipControls(TWinControl(AParentCtl.Controls[I])); +end; + +end. diff --git a/Components/BitmapImage.pas b/Components/BitmapImage.pas new file mode 100644 index 00000000..8fd9a5ac --- /dev/null +++ b/Components/BitmapImage.pas @@ -0,0 +1,302 @@ +unit BitmapImage; + +{ + Inno Setup + Copyright (C) 1997-2019 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + A TImage-like component for bitmaps without the TPicture bloat +} + +interface + +uses + Windows, Controls, Graphics, Classes; + +type + TBitmapImage = class(TGraphicControl) + private + FAutoSize: Boolean; + FBackColor: TColor; + FBitmap: TBitmap; + FCenter: Boolean; + FReplaceColor: TColor; + FReplaceWithColor: TColor; + FStretch: Boolean; + FStretchedBitmap: TBitmap; + FStretchedBitmapValid: Boolean; + procedure BitmapChanged(Sender: TObject); + procedure SetBackColor(Value: TColor); + procedure SetBitmap(Value: TBitmap); + procedure SetCenter(Value: Boolean); + procedure SetReplaceColor(Value: TColor); + procedure SetReplaceWithColor(Value: TColor); + procedure SetStretch(Value: Boolean); + function GetBitmap: TBitmap; + protected + function GetPalette: HPALETTE; override; + procedure Paint; override; + procedure SetAutoSize(Value: Boolean); override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + function InitializeFromIcon(const Instance: HINST; const Name: PChar; const BkColor: TColor; const AscendingTrySizes: array of Integer): Boolean; + published + property Align; + property Anchors; + property AutoSize: Boolean read FAutoSize write SetAutoSize default False; + property BackColor: TColor read FBackColor write SetBackColor default clBtnFace; + property Center: Boolean read FCenter write SetCenter default False; + property DragCursor; + property DragMode; + property Enabled; + property ParentShowHint; + property Bitmap: TBitmap read GetBitmap write SetBitmap; + property PopupMenu; + property ShowHint; + property Stretch: Boolean read FStretch write SetStretch default False; + property ReplaceColor: TColor read FReplaceColor write SetReplaceColor default clNone; + property ReplaceWithColor: TColor read FReplaceWithColor write SetReplaceWithColor default clNone; + property Visible; + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnStartDrag; + end; + +procedure Register; + +implementation + +uses + Math, Resample; + +procedure Register; +begin + RegisterComponents('JR', [TBitmapImage]); +end; + +function TBitmapImage.InitializeFromIcon(const Instance: HINST; const Name: PChar; const BkColor: TColor; const AscendingTrySizes: array of Integer): Boolean; +var + Flags: Cardinal; + Handle: THandle; + Icon: TIcon; + I, Size: Integer; +begin + { Find the largest regular icon size smaller than the scaled image } + Size := 0; + for I := Length(AscendingTrySizes)-1 downto 0 do begin + if (Width >= AscendingTrySizes[I]) and (Height >= AscendingTrySizes[I]) then begin + Size := AscendingTrySizes[I]; + Break; + end; + end; + if Size = 0 then + Size := Min(Width, Height); + + { Load the desired icon } + Flags := LR_DEFAULTCOLOR; + if Instance = 0 then + Flags := Flags or LR_LOADFROMFILE; + Handle := LoadImage(Instance, Name, IMAGE_ICON, Size, Size, Flags); + if Handle = 0 then + Handle := LoadImage(Instance, Name, IMAGE_ICON, 0, 0, Flags); + if Handle <> 0 then begin + Icon := TIcon.Create; + try + Icon.Handle := Handle; + + { Set sizes (overrides any scaling) } + Width := Icon.Width; + Height := Icon.Height; + + { Draw icon into bitmap } + Bitmap.Canvas.Brush.Color := BkColor; + Bitmap.Width := Width; + Bitmap.Height := Height; + Bitmap.Canvas.Draw(0, 0, Icon); + + Result := True; + finally + Icon.Free; + end; + end else + Result := False; +end; + +constructor TBitmapImage.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + ControlStyle := ControlStyle + [csReplicatable]; + FBackColor := clBtnFace; + FBitmap := TBitmap.Create; + FBitmap.OnChange := BitmapChanged; + FReplaceColor := clNone; + FReplaceWithColor := clNone; + FStretchedBitmap := TBitmap.Create; + Height := 105; + Width := 105; +end; + +destructor TBitmapImage.Destroy; +begin + FStretchedBitmap.Free; + FBitmap.Free; + inherited Destroy; +end; + +procedure TBitmapImage.BitmapChanged(Sender: TObject); +begin + FStretchedBitmapValid := False; + if FAutoSize and (FBitmap.Width > 0) and (FBitmap.Height > 0) then + SetBounds(Left, Top, FBitmap.Width, FBitmap.Height); + if (FBitmap.Width >= Width) and (FBitmap.Height >= Height) then + ControlStyle := ControlStyle + [csOpaque] + else + ControlStyle := ControlStyle - [csOpaque]; + Invalidate; +end; + +procedure TBitmapImage.SetAutoSize(Value: Boolean); +begin + FAutoSize := Value; + BitmapChanged(Self); +end; + +procedure TBitmapImage.SetBackColor(Value: TColor); +begin + if FBackColor <> Value then begin + FBackColor := Value; + BitmapChanged(Self); + end; +end; + +procedure TBitmapImage.SetBitmap(Value: TBitmap); +begin + FBitmap.Assign(Value); +end; + +procedure TBitmapImage.SetCenter(Value: Boolean); +begin + if FCenter <> Value then begin + FCenter := Value; + BitmapChanged(Self); + end; +end; + +procedure TBitmapImage.SetReplaceColor(Value: TColor); +begin + if FReplaceColor <> Value then begin + FReplaceColor := Value; + BitmapChanged(Self); + end; +end; + +procedure TBitmapImage.SetReplaceWithColor(Value: TColor); +begin + if FReplaceWithColor <> Value then begin + FReplaceWithColor := Value; + BitmapChanged(Self); + end; +end; + +procedure TBitmapImage.SetStretch(Value: Boolean); +begin + if FStretch <> Value then begin + FStretch := Value; + FStretchedBitmap.Assign(nil); + BitmapChanged(Self); + end; +end; + +function TBitmapImage.GetBitmap: TBitmap; +begin + Result := FBitmap; +end; + +function TBitmapImage.GetPalette: HPALETTE; +begin + Result := FBitmap.Palette; +end; + +procedure TBitmapImage.Paint; +var + R: TRect; + Bmp: TBitmap; + X, Y, W, H: Integer; + Is32bit: Boolean; +begin + with Canvas do begin + R := ClientRect; + Is32bit := (FBitmap.PixelFormat = pf32bit) and + (FBitmap.AlphaFormat in [afDefined, afPremultiplied]); + + if Stretch then begin + W := R.Right; + H := R.Bottom; + Bmp := FStretchedBitmap; + if not FStretchedBitmapValid or (FStretchedBitmap.Width <> W) or + (FStretchedBitmap.Height <> H) then begin + FStretchedBitmapValid := True; + if (FBitmap.Width = W) and (FBitmap.Height = H) then + FStretchedBitmap.Assign(FBitmap) + else begin + FStretchedBitmap.Assign(nil); + if not StretchBmp(FBitmap, FStretchedBitmap, W, H, Is32bit) then begin + if Is32bit then begin + FStretchedBitmapValid := False; + Bmp := FBitmap; + end else begin + FStretchedBitmap.Palette := CopyPalette(FBitmap.Palette); + FStretchedBitmap.Width := W; + FStretchedBitmap.Height := H; + FStretchedBitmap.Canvas.StretchDraw(R, FBitmap); + end; + end; + end; + end; + end else begin + Bmp := FBitmap; + W := Bmp.Width; + H := Bmp.Height; + end; + + if (FBackColor <> clNone) and (Is32Bit or (Bmp.Width < Width) or (Bmp.Height < Height)) then begin + Brush.Style := bsSolid; + Brush.Color := FBackColor; + FillRect(R); + end; + + if csDesigning in ComponentState then begin + Pen.Style := psDash; + Brush.Style := bsClear; + Rectangle(0, 0, Width, Height); + end; + + if Center then begin + X := R.Left + ((R.Right - R.Left) - W) div 2; + if X < 0 then + X := 0; + Y := R.Top + ((R.Bottom - R.Top) - H) div 2; + if Y < 0 then + Y := 0; + end else begin + X := 0; + Y := 0; + end; + + if not Is32bit and (FReplaceColor <> clNone) and (FReplaceWithColor <> clNone) then begin + Brush.Color := FReplaceWithColor; + BrushCopy(Rect(X, Y, X + W, Y + H), Bmp, Rect(0, 0, Bmp.Width, Bmp.Height), FReplaceColor); + end else + Draw(X, Y, Bmp); + end; +end; + +end. \ No newline at end of file diff --git a/Components/Components.dpk b/Components/Components.dpk new file mode 100644 index 00000000..5129c95b --- /dev/null +++ b/Components/Components.dpk @@ -0,0 +1,52 @@ +package Components; + +{$R *.res} +{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO OFF} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION OFF} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES ON} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST OFF} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DEFINE DEBUG} +{$ENDIF IMPLICITBUILDING} +{$DESCRIPTION 'Inno Setup Components'} +{$IMPLICITBUILD ON} + +requires + rtl, + designide, + vcl, + vclactnband, + vclx, + xmlrtl; + +contains + BidiCtrls in 'BidiCtrls.pas', + BitmapImage in 'BitmapImage.pas', + DropListBox in 'DropListBox.pas', + FolderTreeView in 'FolderTreeView.pas', + NewCheckListBox in 'NewCheckListBox.pas', + NewNotebookReg in 'NewNotebookReg.pas', + NewProgressBar in 'NewProgressBar.pas', + NewStaticText in 'NewStaticText.pas', + NewTabSet in 'NewTabSet.pas', + PasswordEdit in 'PasswordEdit.pas', + RichEditViewer in 'RichEditViewer.pas'; + +end. diff --git a/Components/DropListBox.pas b/Components/DropListBox.pas new file mode 100644 index 00000000..e35f3aa9 --- /dev/null +++ b/Components/DropListBox.pas @@ -0,0 +1,118 @@ +unit DropListBox; + +{ + Inno Setup + Copyright (C) 1997-2019 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + This unit provides a listbox with drop files support. +} + +interface + +uses + StdCtrls, + Messages; + +type + TDropListBox = class; + + TDropFileEvent = procedure(Sender: TDropListBox; const FileName: String) of object; + + TDropListBox = class(TCustomListBox) + private + FOnDropFile: TDropFileEvent; + protected + procedure CreateWnd; override; + procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES; + published + property Align; + property Anchors; + property BorderStyle; + property Color; + property Columns; + property Ctl3D; + property DragCursor; + property DragMode; + property Enabled; + property ExtendedSelect; + property Font; + property ImeMode; + property ImeName; + property IntegralHeight; + property ItemHeight; + property Items; + property MultiSelect; + property ParentColor; + property ParentCtl3D; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShowHint; + property Sorted; + property Style; + property TabOrder; + property TabStop; + property TabWidth; + property Visible; + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnDrawItem; + property OnDropFile: TDropFileEvent read FOnDropFile write FOnDropFile; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnKeyDown; + property OnKeyPress; + property OnKeyUp; + property OnMeasureItem; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnStartDrag; + end; + +procedure Register; + +implementation + +uses + Classes, + Windows, ShellAPI; + +procedure TDropListBox.CreateWnd; +begin + inherited; + if csDesigning in ComponentState then + Exit; + + DragAcceptFiles(Handle, True); +end; + +procedure TDropListBox.WMDropFiles(var Msg: TWMDropFiles); +var + FileName: array[0..MAX_PATH] of Char; + I, FileCount: Integer; +begin + try + if Assigned(FOnDropFile) then begin + FileCount := DragQueryFile(Msg.Drop, $FFFFFFFF, nil, 0); + for I := 0 to FileCount-1 do + if DragQueryFile(Msg.Drop, I, FileName, SizeOf(FileName)) > 0 then + FOnDropFile(Self, FileName); + end; + Msg.Result := 0; + finally + DragFinish(Msg.Drop); + end; +end; + +procedure Register; +begin + RegisterComponents('JR', [TDropListBox]); +end; + +end. \ No newline at end of file diff --git a/Components/FolderTreeView.pas b/Components/FolderTreeView.pas new file mode 100644 index 00000000..67cb2142 --- /dev/null +++ b/Components/FolderTreeView.pas @@ -0,0 +1,1140 @@ +unit FolderTreeView; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + TFolderTreeView component +} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, CommCtrl; + +type + TCustomFolderTreeView = class; + + TFolderRenameEvent = procedure(Sender: TCustomFolderTreeView; + var NewName: String; var Accept: Boolean) of object; + + TCustomFolderTreeView = class(TWinControl) + private + FDestroyingHandle: Boolean; + FDirectory: String; + FItemExpanding: Boolean; + FOnChange: TNotifyEvent; + FOnRename: TFolderRenameEvent; + procedure Change; + procedure DeleteObsoleteNewItems(const ParentItem, ItemToKeep: HTREEITEM); + function FindItem(const ParentItem: HTREEITEM; const AName: String): HTREEITEM; + function FindOrCreateItem(const ParentItem: HTREEITEM; const AName: String): HTREEITEM; + function GetItemFullPath(Item: HTREEITEM): String; virtual; + function InsertItem(const ParentItem: HTREEITEM; const AName, ACustomDisplayName: String; + const ANewItem: Boolean): HTREEITEM; + procedure SelectItem(const Item: HTREEITEM); + procedure SetItemHasChildren(const Item: HTREEITEM; const AHasChildren: Boolean); + procedure SetDirectory(const Value: String); + function TryExpandItem(const Item: HTREEITEM): Boolean; + procedure CNKeyDown(var Message: TWMKeyDown); message CN_KEYDOWN; + procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY; + procedure WMCtlColorEdit(var Message: TMessage); message WM_CTLCOLOREDIT; + procedure WMDestroy(var Message: TWMDestroy); message WM_DESTROY; + procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND; + protected + function ItemChildrenNeeded(const Item: HTREEITEM): Boolean; virtual; abstract; + procedure CreateParams(var Params: TCreateParams); override; + procedure CreateWnd; override; + function GetItemImageIndex(const Item: HTREEITEM; + const NewItem, SelectedImage: Boolean): Integer; virtual; abstract; + function GetRootItem: HTREEITEM; virtual; + function ItemHasChildren(const Item: HTREEITEM): Boolean; virtual; abstract; + procedure KeyDown(var Key: Word; Shift: TShiftState); override; + property OnChange: TNotifyEvent read FOnChange write FOnChange; + property OnRename: TFolderRenameEvent read FOnRename write FOnRename; + public + constructor Create(AOwner: TComponent); override; + procedure ChangeDirectory(const Value: String; const CreateNewItems: Boolean); + procedure CreateNewDirectory(const ADefaultName: String); + property Directory: String read FDirectory write SetDirectory; + end; + + TFolderTreeView = class(TCustomFolderTreeView) + private + procedure RefreshDriveItem(const Item: HTREEITEM; const ANewDisplayName: String); + protected + function ItemChildrenNeeded(const Item: HTREEITEM): Boolean; override; + function ItemHasChildren(const Item: HTREEITEM): Boolean; override; + function GetItemFullPath(Item: HTREEITEM): String; override; + function GetItemImageIndex(const Item: HTREEITEM; + const NewItem, SelectedImage: Boolean): Integer; override; + published + property Anchors; + property TabOrder; + property TabStop default True; + property Visible; + property OnChange; + property OnRename; + end; + + TStartMenuFolderTreeView = class(TCustomFolderTreeView) + private + FUserPrograms, FCommonPrograms: String; + FUserStartup, FCommonStartup: String; + FImageIndexes: array[Boolean] of Integer; + protected + procedure CreateParams(var Params: TCreateParams); override; + function GetRootItem: HTREEITEM; override; + function ItemChildrenNeeded(const Item: HTREEITEM): Boolean; override; + function ItemHasChildren(const Item: HTREEITEM): Boolean; override; + function GetItemImageIndex(const Item: HTREEITEM; + const NewItem, SelectedImage: Boolean): Integer; override; + public + procedure SetPaths(const AUserPrograms, ACommonPrograms, + AUserStartup, ACommonStartup: String); + published + property Anchors; + property TabOrder; + property TabStop default True; + property Visible; + property OnChange; + property OnRename; + end; + +procedure Register; + +implementation + +{ + Notes: + 1. Don't call TreeView_SelectItem without calling TreeView_Expand on the + item's parents first. Otherwise infinite recursion can occur: + a. TreeView_SelectItem will first set the selected item. It will then try + to expand the parent node, causing a TVN_ITEMEXPANDING message to be + sent. + b. If the TVN_ITEMEXPANDING handler calls TreeView_SortChildren, TV_SortCB + will call TV_EnsureVisible if the selected item was one of the items + affected by the sorting (which will always be the case). + c. TV_EnsureVisible will expand parent nodes if necessary. However, since + we haven't yet returned from the original TVN_ITEMEXPANDING message + handler, the parent node doesn't yet have the TVIS_EXPANDED state, + thus it thinks the node still needs expanding. + d. Another, nested TVN_ITEMEXPANDING message is sent, bringing us back to + step b. + (Reproducible on Windows 95 and 2000.) + The recursion can be seen if you comment out the ExpandParents call in + the SelectItem method, then click "New Folder" on a folder with no + children. + (Note, however, that because of the ChildrenAdded check in our + TVN_ITEMEXPANDING handler, it can only recurse once. That won't cause a + fatal stack overflow (like it did before the ChildrenAdded check was + added), but it's still wrong to allow that to happen.) +} + +uses + PathFunc, ShellApi, NewUxTheme, Types; + +const + SHPPFW_NONE = $00000000; +var + SHPathPrepareForWriteFunc: function(hwnd: HWND; punkEnableModless: Pointer; + pszPath: PChar; dwFlags: DWORD): HRESULT; stdcall; + +const + TVM_SETEXTENDEDSTYLE = TV_FIRST + 44; + TVS_EX_DOUBLEBUFFER = $0004; + +procedure Register; +begin + RegisterComponents('JR', [TFolderTreeView, TStartMenuFolderTreeView]); +end; + +function IsListableDirectory(const FindData: TWin32FindData): Boolean; +begin + Result := (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY <> 0) and + (FindData.dwFileAttributes and (FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM) <> + (FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM)) and + (StrComp(FindData.cFileName, '.') <> 0) and + (StrComp(FindData.cFileName, '..') <> 0); +end; + +function HasSubfolders(const Path: String): Boolean; +var + H: THandle; + FindData: TWin32FindData; +begin + Result := False; + H := FindFirstFile(PChar(AddBackslash(Path) + '*'), FindData); + if H <> INVALID_HANDLE_VALUE then begin + try + repeat + if IsListableDirectory(FindData) then begin + Result := True; + Break; + end; + until not FindNextFile(H, FindData); + finally + Windows.FindClose(H); + end; + end; +end; + +function GetFileDisplayName(const Filename: String): String; +var + FileInfo: TSHFileInfo; +begin + if SHGetFileInfo(PChar(Filename), 0, FileInfo, SizeOf(FileInfo), + SHGFI_DISPLAYNAME) <> 0 then + Result := FileInfo.szDisplayName + else + Result := ''; +end; + +function GetFileImageIndex(const Filename: String; const OpenIcon: Boolean): Integer; +const + OpenFlags: array[Boolean] of UINT = (0, SHGFI_OPENICON); +var + FileInfo: TSHFileInfo; +begin + if SHGetFileInfo(PChar(Filename), 0, FileInfo, SizeOf(FileInfo), + SHGFI_SYSICONINDEX or SHGFI_SMALLICON or OpenFlags[OpenIcon]) <> 0 then + Result := FileInfo.iIcon + else + Result := 0; +end; + +function GetDefFolderImageIndex(const OpenIcon: Boolean): Integer; +const + OpenFlags: array[Boolean] of UINT = (0, SHGFI_OPENICON); +var + FileInfo: TSHFileInfo; +begin + if SHGetFileInfo('c:\directory', FILE_ATTRIBUTE_DIRECTORY, FileInfo, SizeOf(FileInfo), + SHGFI_USEFILEATTRIBUTES or SHGFI_SYSICONINDEX or SHGFI_SMALLICON or OpenFlags[OpenIcon]) <> 0 then + Result := FileInfo.iIcon + else + Result := 0; +end; + +function IsNetworkDrive(const Drive: Char): Boolean; +{ Returns True if Drive is a network drive. Unlike GetLogicalDrives and + GetDriveType, this will find the drive even if it's currently in an + unavailable/disconnected state (i.e. showing a red "X" on the drive icon + in Windows Explorer). } +var + LocalName: String; + RemoteName: array[0..MAX_PATH-1] of Char; + RemoteNameLen, ErrorCode: DWORD; +begin + LocalName := Drive + ':'; + RemoteNameLen := SizeOf(RemoteName) div SizeOf(RemoteName[0]); + ErrorCode := WNetGetConnection(PChar(LocalName), RemoteName, RemoteNameLen); + Result := (ErrorCode = NO_ERROR) or (ErrorCode = ERROR_CONNECTION_UNAVAIL); +end; + +function MoveAppWindowToActiveWindowMonitor(var OldRect: TRect): Boolean; +{ This moves the application window (Application.Handle) to the same monitor + as the active window, so that a subsequent Windows dialog will display on + the same monitor. Based on code from D4+'s TApplication.MessageBox. + NOTE: This function was copied from CmnFunc.pas. } +type + HMONITOR = type THandle; + TMonitorInfo = record + cbSize: DWORD; + rcMonitor: TRect; + rcWork: TRect; + dwFlags: DWORD; + end; +const + MONITOR_DEFAULTTONEAREST = $00000002; +var + ActiveWindow: HWND; + Module: HMODULE; + MonitorFromWindow: function(hwnd: HWND; dwFlags: DWORD): HMONITOR; stdcall; + GetMonitorInfo: function(hMonitor: HMONITOR; var lpmi: TMonitorInfo): BOOL; stdcall; + MBMonitor, AppMonitor: HMONITOR; + Info: TMonitorInfo; +begin + Result := False; + ActiveWindow := GetActiveWindow; + if ActiveWindow = 0 then Exit; + Module := GetModuleHandle(user32); + MonitorFromWindow := GetProcAddress(Module, 'MonitorFromWindow'); + GetMonitorInfo := GetProcAddress(Module, 'GetMonitorInfoA'); + if Assigned(MonitorFromWindow) and Assigned(GetMonitorInfo) then begin + MBMonitor := MonitorFromWindow(ActiveWindow, MONITOR_DEFAULTTONEAREST); + AppMonitor := MonitorFromWindow(Application.Handle, MONITOR_DEFAULTTONEAREST); + if MBMonitor <> AppMonitor then begin + Info.cbSize := SizeOf(Info); + if GetMonitorInfo(MBMonitor, Info) then begin + GetWindowRect(Application.Handle, OldRect); + SetWindowPos(Application.Handle, 0, + Info.rcMonitor.Left + ((Info.rcMonitor.Right - Info.rcMonitor.Left) div 2), + Info.rcMonitor.Top + ((Info.rcMonitor.Bottom - Info.rcMonitor.Top) div 2), + 0, 0, SWP_NOACTIVATE or SWP_NOREDRAW or SWP_NOSIZE or SWP_NOZORDER); + Result := True; + end; + end; + end; +end; + +procedure MoveAppWindowBack(const OldRect: TRect); +{ Moves the application window back to its previous position after a + successful call to MoveAppWindowToActiveWindowMonitor } +begin + SetWindowPos(Application.Handle, 0, + OldRect.Left + ((OldRect.Right - OldRect.Left) div 2), + OldRect.Top + ((OldRect.Bottom - OldRect.Top) div 2), + 0, 0, SWP_NOACTIVATE or SWP_NOREDRAW or SWP_NOSIZE or SWP_NOZORDER); +end; + +function EnsurePathIsAccessible(const Path: String): Boolean; +{ Calls SHPathPrepareForWrite which ensures the specified path is accessible by + reconnecting network drives (important) and prompting for media on removable + drives (not so important for our purposes). (Note that despite its name, + the function does not test for write access.) } +var + ActiveWindow: HWND; + DidMove: Boolean; + OldRect: TRect; + WindowList: Pointer; +begin + { SHPathPrepareForWrite only exists on Windows 2000, Me, and later. + Do nothing on older versions of Windows. } + if @SHPathPrepareForWriteFunc = nil then begin + Result := True; + Exit; + end; + + { Note: The SHPathPrepareForWrite documentation claims that "user interface + windows will not be created" when hwnd is NULL, however I found that on + Windows 2000, it would still display message boxes for network errors. + (To reproduce: Disable your Local Area Connection and try expanding a + network drive.) So to avoid bugs from having unowned message boxes floating + around, go ahead and pass a proper owner window. } + ActiveWindow := GetActiveWindow; + DidMove := MoveAppWindowToActiveWindowMonitor(OldRect); + WindowList := DisableTaskWindows(0); + try + Result := SUCCEEDED(SHPathPrepareForWriteFunc(Application.Handle, nil, + PChar(Path), SHPPFW_NONE)); + finally + if DidMove then + MoveAppWindowBack(OldRect); + EnableTaskWindows(WindowList); + SetActiveWindow(ActiveWindow); + end; +end; + +{ TCustomFolderTreeView } + +type + PItemData = ^TItemData; + TItemData = record + Name: String; + NewItem: Boolean; + ChildrenAdded: Boolean; + end; + +constructor TCustomFolderTreeView.Create(AOwner: TComponent); +var + LogFont: TLogFont; +begin + inherited; + ControlStyle := ControlStyle - [csCaptureMouse]; + Width := 121; + Height := 97; + ParentColor := False; + TabStop := True; + if SystemParametersInfo(SPI_GETICONTITLELOGFONT, SizeOf(LogFont), @LogFont, 0) then + Font.Handle := CreateFontIndirect(LogFont); +end; + +procedure TCustomFolderTreeView.CreateParams(var Params: TCreateParams); +const + TVS_TRACKSELECT = $0200; + TVS_SINGLEEXPAND = $0400; +begin + InitCommonControls; + inherited; + CreateSubClass(Params, WC_TREEVIEW); + with Params do begin + Style := Style or WS_CLIPCHILDREN or WS_CLIPSIBLINGS or TVS_LINESATROOT or + TVS_HASBUTTONS or TVS_SHOWSELALWAYS or TVS_EDITLABELS; + Style := Style or TVS_TRACKSELECT; + ExStyle := ExStyle or WS_EX_CLIENTEDGE; + WindowClass.style := WindowClass.style and not (CS_HREDRAW or CS_VREDRAW); + end; +end; + +procedure TCustomFolderTreeView.CreateWnd; +var + ImageList: HIMAGELIST; + FileInfo: TSHFileInfo; + SaveCursor: HCURSOR; +begin + FDestroyingHandle := False; + inherited; + FDirectory := ''; + if csDesigning in ComponentState then + Exit; + + { Enable the new Explorer-style look } + if Assigned(SetWindowTheme) then begin + SetWindowTheme(Handle, 'Explorer', nil); + { Like Explorer, enable double buffering to avoid flicker when the mouse + is moved across the items } + SendMessage(Handle, TVM_SETEXTENDEDSTYLE, TVS_EX_DOUBLEBUFFER, + TVS_EX_DOUBLEBUFFER); + end; + + { Initialize the image list } + ImageList := SHGetFileInfo('', 0, FileInfo, SizeOf(FileInfo), + SHGFI_USEFILEATTRIBUTES or SHGFI_SYSICONINDEX or SHGFI_SMALLICON); + TreeView_SetImageList(Handle, ImageList, TVSIL_NORMAL); + + { Add the root items } + SaveCursor := SetCursor(LoadCursor(0, IDC_WAIT)); + try + ItemChildrenNeeded(nil); + finally + SetCursor(SaveCursor); + end; +end; + +procedure TCustomFolderTreeView.WMDestroy(var Message: TWMDestroy); +begin + { Work around bug in pre-v6 COMCTL32: If we have the TVS_SINGLEEXPAND style + and there is a selected item when the window is destroyed, we end up + getting a bunch of TVN_SINGLEEXPAND messages because it keeps moving the + selection as it's destroying items, resulting in a stream of "Please + insert a disk in drive X:" message boxes as the selection moves across + removable drives. + Currently, however, this problem isn't seen in practice because we don't + use TVS_SINGLEEXPAND on pre-XP Windows. } + FDestroyingHandle := True; { disables our TVN_SELCHANGED handling } + SelectItem(nil); + inherited; +end; + +procedure TCustomFolderTreeView.KeyDown(var Key: Word; Shift: TShiftState); +var + Item: HTREEITEM; +begin + inherited; + if (Key = VK_F2) and (Shift * [ssShift, ssAlt, ssCtrl] = []) then begin + Key := 0; + Item := TreeView_GetSelection(Handle); + if Assigned(Item) then + TreeView_EditLabel(Handle, Item); + end; +end; + +procedure TCustomFolderTreeView.CNKeyDown(var Message: TWMKeyDown); +var + FocusWnd: HWND; +begin + { On Delphi 5+, if a non-VCL control is focused, TApplication.IsKeyMsg will + send the CN_KEYDOWN message to the nearest VCL control. This means that + when the edit control is focused, the tree view itself gets CN_KEYDOWN + messages. Don't let the VCL handle Enter and Escape; if we're on a dialog, + those keys will close the window. } + FocusWnd := GetFocus; + if (FocusWnd <> 0) and (TreeView_GetEditControl(Handle) = FocusWnd) then + if (Message.CharCode = VK_RETURN) or (Message.CharCode = VK_ESCAPE) then + Exit; + inherited; +end; + +procedure TCustomFolderTreeView.WMEraseBkgnd(var Message: TWMEraseBkgnd); +begin + { For TVS_EX_DOUBLEBUFFER to be truly flicker-free, we must use + comctl32's default WM_ERASEBKGND handling, not the VCL's (which calls + FillRect). } + DefaultHandler(Message); +end; + +procedure TCustomFolderTreeView.WMCtlColorEdit(var Message: TMessage); +begin + { We can't let TWinControl.DefaultHandler handle this message. It tries to + send a CN_CTLCOLOREDIT message to the tree view's internally-created edit + control, which it won't understand because it's not a VCL control. Without + this special handling, the border is painted incorrectly on Windows XP + with themes enabled. } + Message.Result := DefWindowProc(Handle, Message.Msg, Message.WParam, + Message.LParam); +end; + +function TCustomFolderTreeView.GetItemFullPath(Item: HTREEITEM): String; +var + TVItem: TTVItem; +begin + Result := ''; + while Assigned(Item) do begin + TVItem.mask := TVIF_PARAM; + TVItem.hItem := Item; + if not TreeView_GetItem(Handle, TVItem) then begin + Result := ''; + Exit; + end; + if Result = '' then + Result := PItemData(TVItem.lParam).Name + else + Insert(AddBackslash(PItemData(TVItem.lParam).Name), Result, 1); + Item := TreeView_GetParent(Handle, Item); + end; +end; + +procedure TCustomFolderTreeView.Change; +var + Item: HTREEITEM; +begin + Item := TreeView_GetSelection(Handle); + if Assigned(Item) then + FDirectory := GetItemFullPath(Item) + else + FDirectory := ''; + if Assigned(FOnChange) then + FOnChange(Self); +end; + +procedure TCustomFolderTreeView.CNNotify(var Message: TWMNotify); +const + TVN_SINGLEEXPAND = (TVN_FIRST-15); + TVNRET_SKIPOLD = 1; + TVNRET_SKIPNEW = 2; + + procedure HandleClick; + var + Item: HTREEITEM; + HitTestInfo: TTVHitTestInfo; + begin + HitTestInfo.pt := ScreenToClient(SmallPointToPoint(TSmallPoint(GetMessagePos()))); + Item := TreeView_HitTest(Handle, HitTestInfo); + if Assigned(Item) then begin + if HitTestInfo.flags and TVHT_ONITEMBUTTON <> 0 then + TreeView_Expand(Handle, Item, TVE_TOGGLE) + else if TreeView_GetSelection(Handle) <> Item then + SelectItem(Item); + end; + end; + +var + Hdr: PNMTreeView; + SaveCursor: HCURSOR; + DispItem: PTVItem; + TVItem: TTVItem; + S: String; + Accept: Boolean; +begin + inherited; + case Message.NMHdr.code of + TVN_DELETEITEM: + begin + Dispose(PItemData(PNMTreeView(Message.NMHdr).itemOld.lParam)); + end; + TVN_ITEMEXPANDING: + begin + { Sanity check: Make sure this message isn't sent recursively. + (See top of source code for details.) } + if FItemExpanding then + raise Exception.Create('Internal error: Item already expanding'); + FItemExpanding := True; + try + Hdr := PNMTreeView(Message.NMHdr); + if (Hdr.action = TVE_EXPAND) and + not PItemData(Hdr.itemNew.lParam).ChildrenAdded and + not PItemData(Hdr.itemNew.lParam).NewItem then begin + PItemData(Hdr.itemNew.lParam).ChildrenAdded := True; + SaveCursor := SetCursor(LoadCursor(0, IDC_WAIT)); + try + if ItemChildrenNeeded(Hdr.itemNew.hItem) then begin + { If no subfolders were found, and there are no 'new' items + underneath the parent item, remove the '+' sign } + if TreeView_GetChild(Handle, Hdr.itemNew.hItem) = nil then + SetItemHasChildren(Hdr.itemNew.hItem, False); + end + else begin + { A result of False means no children were added due to a + temporary error and that it should try again next time } + PItemData(Hdr.itemNew.lParam).ChildrenAdded := False; + { Return 1 to cancel the expansion process (although it seems + to do that anyway when it sees no children were added) } + Message.Result := 1; + end; + finally + SetCursor(SaveCursor); + end; + end; + finally + FItemExpanding := False; + end; + end; + TVN_GETDISPINFO: + begin + DispItem := @PTVDispInfo(Message.NMHdr).item; + if DispItem.mask and TVIF_IMAGE <> 0 then begin + DispItem.iImage := GetItemImageIndex(DispItem.hItem, + PItemData(DispItem.lParam).NewItem, False); + end; + if DispItem.mask and TVIF_SELECTEDIMAGE <> 0 then begin + DispItem.iSelectedImage := GetItemImageIndex(DispItem.hItem, + PItemData(DispItem.lParam).NewItem, True); + end; + if DispItem.mask and TVIF_CHILDREN <> 0 then begin + DispItem.cChildren := Ord(Assigned(TreeView_GetChild(Handle, DispItem.hItem))); + if (DispItem.cChildren = 0) and not PItemData(DispItem.lParam).NewItem then + DispItem.cChildren := Ord(ItemHasChildren(DispItem.hItem)); + end; + { Store the values with the item so the callback isn't called again } + DispItem.mask := DispItem.mask or TVIF_DI_SETITEM; + end; + TVN_SELCHANGED: + begin + if not FDestroyingHandle then + Change; + end; + TVN_BEGINLABELEDIT: + begin + DispItem := @PTVDispInfo(Message.NMHdr).item; + { Only 'new' items may be renamed } + if not PItemData(DispItem.lParam).NewItem then + Message.Result := 1; + end; + TVN_ENDLABELEDIT: + begin + DispItem := @PTVDispInfo(Message.NMHdr).item; + { Only 'new' items may be renamed } + if PItemData(DispItem.lParam).NewItem and + Assigned(DispItem.pszText) then begin + S := DispItem.pszText; + Accept := True; + if Assigned(FOnRename) then + FOnRename(Self, S, Accept); + if Accept then begin + PItemData(DispItem.lParam).Name := S; + { Instead of returning 1 to let the tree view update the text, + set the text ourself. This will downconvert any Unicode + characters to ANSI (if we're compiled as an ANSI app). } + TVItem.mask := TVIF_TEXT; + TVItem.hItem := DispItem.hItem; + TVItem.pszText := PChar(S); + TreeView_SetItem(Handle, TVItem); + TreeView_SortChildren(Handle, TreeView_GetParent(Handle, DispItem.hItem), False); + Change; + end; + end; + end; + NM_CLICK: + begin + { Use custom click handler to work more like Windows XP Explorer: + - Items can be selected by clicking anywhere on their respective + rows, except for the button. + - In 'friendly tree' mode, clicking an item's icon or caption causes + the item to expand, but never to collapse. } + HandleClick; + Message.Result := 1; + end; + end; +end; + +procedure TCustomFolderTreeView.SetItemHasChildren(const Item: HTREEITEM; + const AHasChildren: Boolean); +var + TVItem: TTVItem; +begin + TVItem.mask := TVIF_CHILDREN; + TVItem.hItem := Item; + TVItem.cChildren := Ord(AHasChildren); + TreeView_SetItem(Handle, TVItem); +end; + +procedure TCustomFolderTreeView.DeleteObsoleteNewItems(const ParentItem, + ItemToKeep: HTREEITEM); +{ Destroys all 'new' items except for ItemToKeep and its parents. (ItemToKeep + doesn't necessarily have to be a 'new' item.) Pass nil in the ParentItem + parameter when calling this method. } + + function EqualsOrContains(const AParent: HTREEITEM; AChild: HTREEITEM): Boolean; + begin + Result := False; + repeat + if AChild = AParent then begin + Result := True; + Break; + end; + AChild := TreeView_GetParent(Handle, AChild); + until AChild = nil; + end; + +var + Item, NextItem: HTREEITEM; + TVItem: TTVItem; +begin + Item := TreeView_GetChild(Handle, ParentItem); + while Assigned(Item) do begin + { Determine the next item in advance since Item might get deleted } + NextItem := TreeView_GetNextSibling(Handle, Item); + TVItem.mask := TVIF_PARAM; + TVItem.hItem := Item; + if TreeView_GetItem(Handle, TVItem) then begin + if PItemData(TVItem.lParam).NewItem and not EqualsOrContains(Item, ItemToKeep) then begin + TreeView_DeleteItem(Handle, Item); + { If there are no children left on the parent, remove its '+' sign } + if TreeView_GetChild(Handle, ParentItem) = nil then + SetItemHasChildren(ParentItem, False); + end + else + DeleteObsoleteNewItems(Item, ItemToKeep); + end; + Item := NextItem; + end; +end; + +function TCustomFolderTreeView.InsertItem(const ParentItem: HTREEITEM; + const AName, ACustomDisplayName: String; const ANewItem: Boolean): HTREEITEM; +var + InsertStruct: TTVInsertStruct; + ItemData: PItemData; +begin + if ANewItem then + DeleteObsoleteNewItems(nil, ParentItem); + InsertStruct.hParent := ParentItem; + if ANewItem then + InsertStruct.hInsertAfter := TVI_SORT + else + InsertStruct.hInsertAfter := TVI_LAST; + InsertStruct.item.mask := TVIF_TEXT or TVIF_IMAGE or + TVIF_SELECTEDIMAGE or TVIF_CHILDREN or TVIF_PARAM; + InsertStruct.item.hItem := nil; { not used } + if ANewItem then begin + InsertStruct.item.mask := InsertStruct.item.mask or TVIF_STATE; + InsertStruct.item.stateMask := TVIS_CUT; + InsertStruct.item.state := TVIS_CUT; + end; + { Note: There's no performance advantage in using a callback for the text. + During a TreeView_InsertItem call, the tree view will try to read the + new item's text in order to update the horizontal scroll bar range. + (It doesn't wait until the item is painted.) + In addition, the caller may sort newly-inserted subitems, which obviously + requires reading their text. } + if ACustomDisplayName = '' then + InsertStruct.item.pszText := PChar(AName) + else + InsertStruct.item.pszText := PChar(ACustomDisplayName); + InsertStruct.item.iImage := I_IMAGECALLBACK; + InsertStruct.item.iSelectedImage := I_IMAGECALLBACK; + if ANewItem then + InsertStruct.item.cChildren := 0 + else begin + if ParentItem = nil then + InsertStruct.item.cChildren := 1 + else + InsertStruct.item.cChildren := I_CHILDRENCALLBACK; + end; + InsertStruct.item.lParam := 0; + New(ItemData); + ItemData.Name := AName; + ItemData.NewItem := ANewItem; + ItemData.ChildrenAdded := False; + Pointer(InsertStruct.item.lParam) := ItemData; + Result := TreeView_InsertItem(Handle, InsertStruct); +end; + +function TCustomFolderTreeView.FindItem(const ParentItem: HTREEITEM; + const AName: String): HTREEITEM; +var + TVItem: TTVItem; +begin + Result := TreeView_GetChild(Handle, ParentItem); + while Assigned(Result) do begin + TVItem.mask := TVIF_PARAM; + TVItem.hItem := Result; + if TreeView_GetItem(Handle, TVItem) then + if PathCompare(PItemData(TVItem.lParam).Name, AName) = 0 then + Break; + Result := TreeView_GetNextSibling(Handle, Result); + end; +end; + +function TCustomFolderTreeView.FindOrCreateItem(const ParentItem: HTREEITEM; + const AName: String): HTREEITEM; +begin + Result := FindItem(ParentItem, AName); + if Result = nil then begin + if Assigned(ParentItem) then + SetItemHasChildren(ParentItem, True); + Result := InsertItem(ParentItem, AName, '', True); + end; +end; + +function TCustomFolderTreeView.GetRootItem: HTREEITEM; +begin + Result := nil; +end; + +procedure TCustomFolderTreeView.SelectItem(const Item: HTREEITEM); + + procedure ExpandParents(Item: HTREEITEM); + begin + Item := TreeView_GetParent(Handle, Item); + if Assigned(Item) then begin + ExpandParents(Item); + TreeView_Expand(Handle, Item, TVE_EXPAND); + end; + end; + +begin + { Must manually expand parents prior to calling TreeView_SelectItem; + see top of source code for details } + if Assigned(Item) then + ExpandParents(Item); + TreeView_SelectItem(Handle, Item); +end; + +function TCustomFolderTreeView.TryExpandItem(const Item: HTREEITEM): Boolean; +{ Tries to expand the specified item. Returns True if the item's children were + initialized (if any), or False if the initialization failed due to a + temporary error (i.e. ItemChildrenNeeded returned False). } +var + TVItem: TTVItem; +begin + TreeView_Expand(Handle, Item, TVE_EXPAND); + TVItem.mask := TVIF_CHILDREN or TVIF_PARAM; + TVItem.hItem := Item; + Result := TreeView_GetItem(Handle, TVItem) and + (PItemData(TVItem.lParam).ChildrenAdded or (TVItem.cChildren = 0)); +end; + +procedure TCustomFolderTreeView.ChangeDirectory(const Value: String; + const CreateNewItems: Boolean); +{ Changes to the specified directory. Value must begin with a drive letter + (e.g. "C:\directory"); relative paths and UNC paths are not allowed. + If CreateNewItems is True, new items will be created if one or more elements + of the path do not exist. } +var + PStart, PEnd: PChar; + S: String; + ParentItem, Item: HTREEITEM; +begin + SelectItem(nil); + + ParentItem := GetRootItem; + PStart := PChar(Value); + while PStart^ <> #0 do begin + if Assigned(ParentItem) then + if not TryExpandItem(ParentItem) then + Break; + + { Extract a single path component } + PEnd := PStart; + while (PEnd^ <> #0) and not PathCharIsSlash(PEnd^) do + PEnd := PathStrNextChar(PEnd); + SetString(S, PStart, PEnd - PStart); + + { Find that component under ParentItem } + if CreateNewItems and Assigned(ParentItem) then + Item := FindOrCreateItem(ParentItem, S) + else + Item := FindItem(ParentItem, S); + if Item = nil then + Break; + ParentItem := Item; + + PStart := PEnd; + while PathCharIsSlash(PStart^) do + Inc(PStart); + end; + + if Assigned(ParentItem) then + SelectItem(ParentItem); +end; + +procedure TCustomFolderTreeView.SetDirectory(const Value: String); +begin + ChangeDirectory(Value, False); +end; + +procedure TCustomFolderTreeView.CreateNewDirectory(const ADefaultName: String); +{ Creates a new node named AName underneath the selected node. Does nothing + if there is no selected node. } +var + ParentItem, Item: HTREEITEM; + I: Integer; + S: String; +begin + ParentItem := TreeView_GetSelection(Handle); + if ParentItem = nil then + Exit; + + DeleteObsoleteNewItems(nil, ParentItem); + + { Expand and find a unique name } + if not TryExpandItem(ParentItem) then + Exit; + I := 0; + repeat + Inc(I); + if I = 1 then + S := ADefaultName + else + S := ADefaultName + Format(' (%d)', [I]); + until FindItem(ParentItem, S) = nil; + + SetItemHasChildren(ParentItem, True); + Item := InsertItem(ParentItem, S, '', True); + SelectItem(Item); + + if CanFocus then + SetFocus; + TreeView_EditLabel(Handle, Item); +end; + +{ TFolderTreeView } + +function TFolderTreeView.ItemChildrenNeeded(const Item: HTREEITEM): Boolean; + + procedure AddDrives; + var + Drives: DWORD; + Drive: Char; + begin + Drives := GetLogicalDrives; + for Drive := 'A' to 'Z' do begin + if (Drives and 1 <> 0) or IsNetworkDrive(Drive) then + InsertItem(nil, Drive + ':', GetFileDisplayName(Drive + ':\'), False); + Drives := Drives shr 1; + end; + end; + + function AddSubdirectories(const ParentItem: HTREEITEM; + const Path: String): Boolean; + var + OldErrorMode: UINT; + H: THandle; + FindData: TWin32FindData; + S: String; + begin + OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS); + try + { The path might be on a disconnected network drive. Ensure it's + connected before attempting to enumerate subdirectories. } + if Length(Path) = 3 then begin { ...only do this on the root } + if not EnsurePathIsAccessible(Path) then begin + Result := False; + Exit; + end; + { Refresh the icon and text in case the drive was indeed reconnected } + RefreshDriveItem(ParentItem, GetFileDisplayName(Path)); + end; + Result := True; + + H := FindFirstFile(PChar(AddBackslash(Path) + '*'), FindData); + if H <> INVALID_HANDLE_VALUE then begin + try + repeat + if IsListableDirectory(FindData) then begin + S := FindData.cFileName; + InsertItem(ParentItem, S, GetFileDisplayName(AddBackslash(Path) + S), + False); + end; + until not FindNextFile(H, FindData); + finally + Windows.FindClose(H); + end; + end; + finally + SetErrorMode(OldErrorMode); + end; + end; + +begin + if Item = nil then begin + AddDrives; + Result := True; + end + else begin + Result := AddSubdirectories(Item, GetItemFullPath(Item)); + if Result then begin + { When a text callback is used, sorting after all items are inserted is + exponentially faster than using hInsertAfter=TVI_SORT } + TreeView_SortChildren(Handle, Item, False); + end; + end; +end; + +function TFolderTreeView.GetItemFullPath(Item: HTREEITEM): String; +begin + Result := inherited GetItemFullPath(Item); + if (Length(Result) = 2) and (Result[2] = ':') then + Result := Result + '\'; +end; + +function TFolderTreeView.GetItemImageIndex(const Item: HTREEITEM; + const NewItem, SelectedImage: Boolean): Integer; +begin + if NewItem then + Result := GetDefFolderImageIndex(SelectedImage) + else + Result := GetFileImageIndex(GetItemFullPath(Item), SelectedImage); +end; + +function TFolderTreeView.ItemHasChildren(const Item: HTREEITEM): Boolean; +var + Path: String; + OldErrorMode: UINT; +begin + Path := GetItemFullPath(Item); + OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS); + try + Result := (GetDriveType(PChar(AddBackslash(PathExtractDrive(Path)))) = DRIVE_REMOTE) or + HasSubfolders(Path); + finally + SetErrorMode(OldErrorMode); + end; +end; + +procedure TFolderTreeView.RefreshDriveItem(const Item: HTREEITEM; + const ANewDisplayName: String); +var + TVItem: TTVItem; +begin + TVItem.mask := TVIF_IMAGE or TVIF_SELECTEDIMAGE; + TVItem.hItem := Item; + TVItem.iImage := I_IMAGECALLBACK; + TVItem.iSelectedImage := I_IMAGECALLBACK; + if ANewDisplayName <> '' then begin + TVItem.mask := TVItem.mask or TVIF_TEXT; + TVItem.pszText := PChar(ANewDisplayName); + end; + TreeView_SetItem(Handle, TVItem); +end; + +{ TStartMenuFolderTreeView } + +procedure TStartMenuFolderTreeView.CreateParams(var Params: TCreateParams); +begin + inherited; + Params.Style := Params.Style and not TVS_LINESATROOT; +end; + +function TStartMenuFolderTreeView.GetItemImageIndex(const Item: HTREEITEM; + const NewItem, SelectedImage: Boolean): Integer; +begin + Result := FImageIndexes[SelectedImage]; +end; + +function TStartMenuFolderTreeView.GetRootItem: HTREEITEM; +begin + { The top item ('Programs') is considered the root } + Result := TreeView_GetRoot(Handle); +end; + +function TStartMenuFolderTreeView.ItemChildrenNeeded(const Item: HTREEITEM): Boolean; + + procedure AddSubfolders(const ParentItem: HTREEITEM; const Path, StartupPath: String); + var + StartupName: String; + OldErrorMode: UINT; + H: THandle; + FindData: TWin32FindData; + S: String; + begin + { Determine the name of the Startup folder so that we can hide it from the + list } + if StartupPath <> '' then + if PathCompare(AddBackslash(Path), PathExtractPath(StartupPath)) = 0 then + StartupName := PathExtractName(StartupPath); + + OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS); + try + H := FindFirstFile(PChar(AddBackslash(Path) + '*'), FindData); + if H <> INVALID_HANDLE_VALUE then begin + try + repeat + if IsListableDirectory(FindData) then begin + S := FindData.cFileName; + if PathCompare(S, StartupName) <> 0 then + if FindItem(ParentItem, S) = nil then + InsertItem(ParentItem, S, GetFileDisplayName(AddBackslash(Path) + S), False); + end; + until not FindNextFile(H, FindData); + finally + Windows.FindClose(H); + end; + end; + finally + SetErrorMode(OldErrorMode); + end; + end; + +var + Root, S: String; + NewItem: HTREEITEM; + Path: String; +begin + Result := True; + if Item = nil then begin + Root := FUserPrograms; + if Root = '' then begin + { User programs folder doesn't exist for some reason? } + Root := FCommonPrograms; + if Root = '' then + Exit; + end; + FImageIndexes[False] := GetFileImageIndex(Root, False); + FImageIndexes[True] := FImageIndexes[False]; + S := GetFileDisplayName(Root); + if S = '' then + S := PathExtractName(Root); + NewItem := InsertItem(nil, '', S, False); + TreeView_Expand(Handle, NewItem, TVE_EXPAND); + end + else begin + Path := GetItemFullPath(Item); + if FCommonPrograms <> '' then + AddSubfolders(Item, AddBackslash(FCommonPrograms) + Path, FCommonStartup); + if FUserPrograms <> '' then + AddSubfolders(Item, AddBackslash(FUserPrograms) + Path, FUserStartup); + TreeView_SortChildren(Handle, Item, False); + end; +end; + +function TStartMenuFolderTreeView.ItemHasChildren(const Item: HTREEITEM): Boolean; +var + Path: String; +begin + Path := GetItemFullPath(Item); + if (FCommonPrograms <> '') and HasSubfolders(AddBackslash(FCommonPrograms) + Path) then + Result := True + else if (FUserPrograms <> '') and HasSubfolders(AddBackslash(FUserPrograms) + Path) then + Result := True + else + Result := False; +end; + +procedure TStartMenuFolderTreeView.SetPaths(const AUserPrograms, ACommonPrograms, + AUserStartup, ACommonStartup: String); +begin + FUserPrograms := AUserPrograms; + FCommonPrograms := ACommonPrograms; + FUserStartup := AUserStartup; + FCommonStartup := ACommonStartup; + RecreateWnd; +end; + +function GetSystemDir: String; +var + Buf: array[0..MAX_PATH-1] of Char; +begin + GetSystemDirectory(Buf, SizeOf(Buf) div SizeOf(Buf[0])); + Result := StrPas(Buf); +end; + +initialization + InitThemeLibrary; + SHPathPrepareForWriteFunc := GetProcAddress(LoadLibrary(PChar(AddBackslash(GetSystemDir) + shell32)), + 'SHPathPrepareForWriteW'); +end. diff --git a/Components/ModernColors.pas b/Components/ModernColors.pas new file mode 100644 index 00000000..e8c502ee --- /dev/null +++ b/Components/ModernColors.pas @@ -0,0 +1,121 @@ +unit ModernColors; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + Colors for modern dark and light themes, with classic theme support +} + +interface + +uses + Graphics; + +type + TThemeType = (ttModernLight, ttModernDark, ttClassic); + TThemeColor = (tcFore, tcBack, tcToolBack, tcSelBack, + tcWordAtCursorOccurrenceBack, tcSelTextOccurrenceBack, + tcMarginFore, tcMarginBack, tcSplitterBack, tcBraceBack, tcIdentGuideFore, + tcRed, tcGreen, tcBlue, tcOrange, tcPurple, tcYellow, tcTeal, tcGray); + + TTheme = class + private + FType: TThemeType; + function FGetDark: Boolean; + function FGetModern: Boolean; + function FGetColor(Color: TThemeColor): TColor; + public + property Colors[Color: TThemeColor]: TCOlor read FGetColor; + property Dark: Boolean read FGetDark; + property Modern: Boolean read FGetModern; + property Typ: TThemeType read FType write FType; + end; + +implementation + +function TTheme.FGetColor(Color: TThemeColor): TColor; +const + { D = Dark, L = Light, M = Modern, C = Classic } + + DFore = $D6D6D6; { VSCode Modern Dark, 2 tints lightened using color-hex.com } + DBack = $1F1F1F; { VSCode Modern Dark } + DToolBack = $413E40; { Monokai Pro } + DSelBack = $764F1D; { VSCode Modern Dark } + DWACOBack = $4A4A4A; { VSCode Modern Dark } + DSTOBACK = $403A33; { VSCode Modern Dark } + DMarginFore = $716F71; { Monokai Pro } + DMarginBack = $413E40; { Monokai Pro } + DSplitterBack = $413E40; { Monokai Pro } + DBraceBack = DWACOBack; + DIdentGuideFore = $716F71; { Monokai Pro } + //Monokai Pro's dark control color: $221F22 + + LFore = $3B3B3B; { VSCode Modern Light } + LBack = clWhite; + LToolBack = clBtnFace; + LSelBack = $FDD6A7; { VSCode Modern Light } + LWACOBack = $ECECEC; { Inno Setup 5, 4 tints lightened using color-hex.com } + LSTOBACK = $FEEAD3; { VSCode Modern Light } + LMarginFore = $716F71; { Monokai Pro } + LMarginBack = $F9FBFB; { Monokai Pro } + LSplitterBack = clBtnFace; + LBraceBack = LWACOBack; + LIdentGuideFore = clSilver; + + CFore = clBlack; + CBack = clWhite; + CToolBack = clBtnFace; + CSelBack = $FDD6A7; { VSCode Modern Light } + CWACOBack = $ECECEC; { Inno Setup 5, 4 tints lightened using color-hex.com } + CSTOBACK = $FEEAD3; { VSCode Modern Light } + CMarginFore = clWindowText; + CMarginBack = clBtnFace; + CSplitterBack = clBtnFace; + CBraceBack = CWACOBack; + CIdentGuideFore = clSilver; + + { The Microsoft Azure DevOps work well as foreground colors on both dark and light backgrounds. + Its red and blue also fit well with the colors used by Microsoft's VS Image Library. } + + MRed = $6353D6; { Azure DevOps, 2 tints lightened using color-hex.com } + MGreen = $339933; { Azure DevOps } + MBlue = $D47800; { Azure DevOps } + MOrange = $5E88E5; { Azure DevOps } + MPurple = $A86292; { Azure DevOps, 2 tints lightened using color-hex.com } + MYellow = $1DCBF2; { Azure DevOps } + MTeal = $B0C94E; { Visual Studio 2017 } + MGray = $707070; { Inno Setup 5 } + + CRed = clRed; + CGreen = clGreen; + CBlue = clBlue; + COrange = clOlive; + CPurple = $C00080; { Inno Setup 5 } + CYellow = clYellow; + CTeal = clTeal; + CGray = $707070; { Inno Setup 5 } + + Colors: array [TThemeType, TThemeColor] of TColor = ( + (LFore, LBack, LToolBack, LSelBack, LWACOBack, LSTOBack, LMarginFore, LMarginBack, LSplitterBack, LBraceBack, LIdentGuideFore, MRed, MGreen, MBlue, MOrange, MPurple, MYellow, MTeal, MGray), + (DFore, DBack, DToolBack, DSelBack, DWACOBack, DSTOBack, DMarginFore, DMarginBack, DSplitterBack, DBraceBack, DIdentGuideFore, MRed, MGreen, MBlue, MOrange, MPurple, MYellow, MTeal, MGray), + (CFore, CBack, CToolBack, CSelBack, CWACOBack, CSTOBack, CMarginFore, CMarginBack, CSplitterBack, CBraceBack, CIdentGuideFore, CRed, CGreen, CBlue, COrange, CPurple, CYellow, CTeal, CGray) + ); + +begin + Result := Colors[FType, Color]; +end; + +function TTheme.FGetDark: Boolean; +begin + Result := FType = ttModernDark; +end; + +function TTheme.FGetModern: Boolean; +begin + Result := FType <> ttClassic; +end; + +end. diff --git a/Components/NewCheckListBox.pas b/Components/NewCheckListBox.pas new file mode 100644 index 00000000..91d69a07 --- /dev/null +++ b/Components/NewCheckListBox.pas @@ -0,0 +1,2128 @@ +unit NewCheckListBox; + +{ TNewCheckListBox by Martijn Laan for Inno Setup + + Based on TPBCheckListBox by Patrick Brisacier and TCheckListBox by Borland + + Group item support, child item support, exclusive item support, + ShowLines support and 'WantTabs mode' by Alex Yackimoff. + + Note: TNewCheckListBox uses Items.Objects to store the item state. Don't use + Item.Objects yourself, use ItemObject instead. +} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, NewUxTheme; + +const + WM_UPDATEUISTATE = $0128; + +type + TItemType = (itGroup, itCheck, itRadio); + TCheckBoxState2 = (cb2Normal, cb2Hot, cb2Pressed, cb2Disabled); + + TItemState = class (TObject) + public + Enabled: Boolean; + HasInternalChildren: Boolean; + CheckWhenParentChecked: Boolean; + IsLastChild: Boolean; + ItemType: TItemType; + Level: Byte; + Obj: TObject; + State: TCheckBoxState; + SubItem: string; + ThreadCache: set of Byte; + MeasuredHeight: Integer; + ItemFontStyle: TFontStyles; + SubItemFontStyle: TFontStyles; + end; + + TCheckItemOperation = (coUncheck, coCheck, coCheckWithChildren); + TEnumChildrenProc = procedure(Index: Integer; HasChildren: Boolean; Ext: Longint) of object; + + TNewCheckListBox = class (TCustomListBox) + private + FAccObjectInstance: TObject; + FCaptureIndex: Integer; + FSpaceDown: Boolean; + FCheckHeight: Integer; + FCheckWidth: Integer; + FFormFocusChanged: Boolean; + FFlat: Boolean; + FLastMouseMoveIndex: Integer; + FMinItemHeight: Integer; + FOffset: Integer; + FOnClickCheck: TNotifyEvent; + FRequireRadioSelection: Boolean; + FShowLines: Boolean; + FStateList: TList; + FWantTabs: Boolean; + FThemeData: HTHEME; + FThreadsUpToDate: Boolean; + FHotIndex: Integer; + FDisableItemStateDeletion: Integer; + FWheelAccum: Integer; + FUseRightToLeft: Boolean; + procedure UpdateThemeData(const Close, Open: Boolean); + function CanFocusItem(Item: Integer): Boolean; + function CheckPotentialRadioParents(Index, ALevel: Integer): Boolean; + procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR; + procedure CMEnter(var Message: TCMEnter); message CM_ENTER; + procedure CMExit(var Message: TCMExit); message CM_EXIT; + procedure CMFocusChanged(var Message: TCMFocusChanged); message CM_FOCUSCHANGED; + procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED; + procedure CMWantSpecialKey(var Message: TMessage); message CM_WANTSPECIALKEY; + procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM; + procedure EndCapture(Cancel: Boolean); + function AddItem2(AType: TItemType; const ACaption, ASubItem: string; + ALevel: Byte; AChecked, AEnabled, AHasInternalChildren, + ACheckWhenParentChecked: Boolean; AObject: TObject): Integer; + function FindAccel(VK: Word): Integer; + function FindCheckedSibling(const AIndex: Integer): Integer; + function FindNextItem(StartFrom: Integer; GoForward, + SkipUncheckedRadios: Boolean): Integer; + function GetItemState(Index: Integer): TItemState; + procedure InvalidateCheck(Index: Integer); + function RemeasureItem(Index: Integer): Integer; + procedure Toggle(Index: Integer); + procedure UpdateScrollRange; + procedure LBDeleteString(var Message: TMessage); message LB_DELETESTRING; + procedure LBResetContent(var Message: TMessage); message LB_RESETCONTENT; + procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE; + procedure WMGetObject(var Message: TMessage); message WM_GETOBJECT; + procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN; + procedure WMMouseMove(var Message: TWMMouseMove); message WM_MOUSEMOVE; + procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST; + procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS; + procedure WMSize(var Message: TWMSize); message WM_SIZE; + procedure WMThemeChanged(var Message: TMessage); message WM_THEMECHANGED; + procedure WMUpdateUIState(var Message: TMessage); message WM_UPDATEUISTATE; + protected + procedure CreateParams(var Params: TCreateParams); override; + procedure CreateWnd; override; + procedure MeasureItem(Index: Integer; var Height: Integer); override; + procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); + override; + function GetCaption(Index: Integer): String; + function GetChecked(Index: Integer): Boolean; + function GetItemEnabled(Index: Integer): Boolean; + function GetItemFontStyle(Index: Integer): TFontStyles; + function GetLevel(Index: Integer): Byte; + function GetObject(Index: Integer): TObject; + function GetState(Index: Integer): TCheckBoxState; + function GetSubItem(Index: Integer): string; + function GetSubItemFontStyle(Index: Integer): TFontStyles; + procedure KeyDown(var Key: Word; Shift: TShiftState); override; + procedure KeyUp(var Key: Word; Shift: TShiftState); override; + procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + override; + procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; + procedure UpdateHotIndex(NewHotIndex: Integer); + procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; + procedure SetCaption(Index: Integer; const Value: String); + procedure SetChecked(Index: Integer; const AChecked: Boolean); + procedure SetFlat(Value: Boolean); + procedure SetItemEnabled(Index: Integer; const AEnabled: Boolean); + procedure SetItemFontStyle(Index: Integer; const AItemFontStyle: TFontStyles); + procedure SetObject(Index: Integer; const AObject: TObject); + procedure SetOffset(AnOffset: Integer); + procedure SetShowLines(Value: Boolean); + procedure SetSubItem(Index: Integer; const ASubItem: String); + procedure SetSubItemFontStyle(Index: Integer; const ASubItemFontStyle: TFontStyles); + property ItemStates[Index: Integer]: TItemState read GetItemState; + public + constructor Create(AOwner: TComponent); override; + procedure CreateWindowHandle(const Params: TCreateParams); override; + destructor Destroy; override; + function AddCheckBox(const ACaption, ASubItem: string; ALevel: Byte; + AChecked, AEnabled, AHasInternalChildren, ACheckWhenParentChecked: Boolean; + AObject: TObject): Integer; + function AddGroup(const ACaption, ASubItem: string; ALevel: Byte; + AObject: TObject): Integer; + function AddRadioButton(const ACaption, ASubItem: string; + ALevel: Byte; AChecked, AEnabled: Boolean; AObject: TObject): Integer; + function CheckItem(const Index: Integer; const AOperation: TCheckItemOperation): Boolean; + procedure EnumChildrenOf(Item: Integer; Proc: TEnumChildrenProc; Ext: Longint); + function GetParentOf(Item: Integer): Integer; + procedure UpdateThreads; + property Checked[Index: Integer]: Boolean read GetChecked write SetChecked; + property ItemCaption[Index: Integer]: String read GetCaption write SetCaption; + property ItemEnabled[Index: Integer]: Boolean read GetItemEnabled write SetItemEnabled; + property ItemFontStyle[Index: Integer]: TFontStyles read GetItemFontStyle write SetItemFontStyle; + property ItemLevel[Index: Integer]: Byte read GetLevel; + property ItemObject[Index: Integer]: TObject read GetObject write SetObject; + property ItemSubItem[Index: Integer]: string read GetSubItem write SetSubItem; + property State[Index: Integer]: TCheckBoxState read GetState; + property SubItemFontStyle[Index: Integer]: TFontStyles read GetSubItemFontStyle write SetSubItemFontStyle; + published + property Align; + property Anchors; + property BorderStyle; + property Color; + property Ctl3D; + property DragCursor; + property DragMode; + property Enabled; + property Flat: Boolean read FFlat write SetFlat default False; + property Font; + property Items; + property MinItemHeight: Integer read FMinItemHeight write FMinItemHeight default 16; + property Offset: Integer read FOffset write SetOffset default 4; + property OnClick; + property OnClickCheck: TNotifyEvent read FOnClickCheck write FOnClickCheck; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnKeyDown; + property OnKeyPress; + property OnKeyUp; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnStartDrag; + property ParentColor; + property ParentCtl3D; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property RequireRadioSelection: Boolean read FRequireRadioSelection write FRequireRadioSelection default False; + property ShowHint; + property ShowLines: Boolean read FShowLines write SetShowLines default True; + property TabOrder; + property Visible; + property WantTabs: Boolean read FWantTabs write FWantTabs default False; + end; + +procedure Register; + +implementation + +uses + TmSchema, PathFunc, ActiveX, BidiUtils, Types; + +const + sRadioCantHaveDisabledChildren = 'Radio item cannot have disabled child items'; + + OBM_CHECKBOXES = 32759; + WM_CHANGEUISTATE = $0127; + WM_QUERYUISTATE = $0129; + UIS_SET = 1; + UIS_CLEAR = 2; + UIS_INITIALIZE = 3; + UISF_HIDEFOCUS = $1; + UISF_HIDEACCEL = $2; + DT_HIDEPREFIX = $00100000; + + OBJID_CLIENT = $FFFFFFFC; + CHILDID_SELF = 0; + ROLE_SYSTEM_OUTLINE = $23; + ROLE_SYSTEM_STATICTEXT = $29; + ROLE_SYSTEM_CHECKBUTTON = $2c; + ROLE_SYSTEM_RADIOBUTTON = $2d; + STATE_SYSTEM_UNAVAILABLE = $1; + STATE_SYSTEM_CHECKED = $10; + STATE_SYSTEM_MIXED = $20; + EVENT_OBJECT_STATECHANGE = $800A; + + IID_IUnknown: TGUID = ( + D1:$00000000; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46)); + IID_IDispatch: TGUID = ( + D1:$00020400; D2:$0000; D3:$0000; D4:($C0,$00,$00,$00,$00,$00,$00,$46)); + IID_IAccessible: TGUID = ( + D1:$618736e0; D2:$3c3d; D3:$11cf; D4:($81,$0c,$00,$aa,$00,$38,$9b,$71)); + +type + TWinControlAccess = class (TWinControl); + + { Note: We have to use TVariantArg for Delphi 2 compat., because D2 passes + Variant parameters by reference (wrong), unlike D3+ which pass + Variant/OleVariant parameters by value } + NewOleVariant = TVariantArg; + NewWideString = Pointer; + + TIUnknown = class + public + function QueryInterface(const iid: TIID; var obj): HRESULT; virtual; stdcall; abstract; + function AddRef: Longint; virtual; stdcall; abstract; + function Release: Longint; virtual; stdcall; abstract; + end; + + TIDispatch = class(TIUnknown) + public + function GetTypeInfoCount(var ctinfo: Integer): HRESULT; virtual; stdcall; abstract; + function GetTypeInfo(itinfo: Integer; lcid: TLCID; var tinfo: ITypeInfo): HRESULT; virtual; stdcall; abstract; + function GetIDsOfNames(const iid: TIID; rgszNames: POleStrList; + cNames: Integer; lcid: TLCID; rgdispid: PDispIDList): HRESULT; virtual; stdcall; abstract; + function Invoke(dispIDMember: TDispID; const iid: TIID; lcid: TLCID; + flags: Word; var dispParams: TDispParams; varResult: PVariant; + excepInfo: PExcepInfo; argErr: PInteger): HRESULT; virtual; stdcall; abstract; + end; + + TIAccessible = class(TIDispatch) + public + function get_accParent(var ppdispParent: IDispatch): HRESULT; virtual; stdcall; abstract; + function get_accChildCount(var pcountChildren: Integer): HRESULT; virtual; stdcall; abstract; + function get_accChild(varChild: NewOleVariant; var ppdispChild: IDispatch): HRESULT; virtual; stdcall; abstract; + function get_accName(varChild: NewOleVariant; var pszName: NewWideString): HRESULT; virtual; stdcall; abstract; + function get_accValue(varChild: NewOleVariant; var pszValue: NewWideString): HRESULT; virtual; stdcall; abstract; + function get_accDescription(varChild: NewOleVariant; var pszDescription: NewWideString): HRESULT; virtual; stdcall; abstract; + function get_accRole(varChild: NewOleVariant; var pvarRole: NewOleVariant): HRESULT; virtual; stdcall; abstract; + function get_accState(varChild: NewOleVariant; var pvarState: NewOleVariant): HRESULT; virtual; stdcall; abstract; + function get_accHelp(varChild: NewOleVariant; var pszHelp: NewWideString): HRESULT; virtual; stdcall; abstract; + function get_accHelpTopic(var pszHelpFile: NewWideString; varChild: NewOleVariant; var pidTopic: Integer): HRESULT; virtual; stdcall; abstract; + function get_accKeyboardShortcut(varChild: NewOleVariant; var pszKeyboardShortcut: NewWideString): HRESULT; virtual; stdcall; abstract; + function get_accFocus(var pvarID: NewOleVariant): HRESULT; virtual; stdcall; abstract; + function get_accSelection(var pvarChildren: NewOleVariant): HRESULT; virtual; stdcall; abstract; + function get_accDefaultAction(varChild: NewOleVariant; var pszDefaultAction: NewWideString): HRESULT; virtual; stdcall; abstract; + function accSelect(flagsSelect: Integer; varChild: NewOleVariant): HRESULT; virtual; stdcall; abstract; + function accLocation(var pxLeft: Integer; var pyTop: Integer; var pcxWidth: Integer; + var pcyHeight: Integer; varChild: NewOleVariant): HRESULT; virtual; stdcall; abstract; + function accNavigate(navDir: Integer; varStart: NewOleVariant; var pvarEnd: NewOleVariant): HRESULT; virtual; stdcall; abstract; + function accHitTest(xLeft: Integer; yTop: Integer; var pvarID: NewOleVariant): HRESULT; virtual; stdcall; abstract; + function accDoDefaultAction(varChild: NewOleVariant): HRESULT; virtual; stdcall; abstract; + function put_accName(varChild: NewOleVariant; const pszName: NewWideString): HRESULT; virtual; stdcall; abstract; + function put_accValue(varChild: NewOleVariant; const pszValue: NewWideString): HRESULT; virtual; stdcall; abstract; + end; + + TAccObject = class(TIAccessible) + private + FControl: TNewCheckListBox; + FRefCount: Integer; + FStdAcc: TIAccessible; + { TIUnknown } + function QueryInterface(const iid: TIID; var obj): HRESULT; override; + function AddRef: Longint; override; + function Release: Longint; override; + { TIDispatch } + function GetTypeInfoCount(var ctinfo: Integer): HRESULT; override; + function GetTypeInfo(itinfo: Integer; lcid: TLCID; var tinfo: ITypeInfo): HRESULT; override; + function GetIDsOfNames(const iid: TIID; rgszNames: POleStrList; + cNames: Integer; lcid: TLCID; rgdispid: PDispIDList): HRESULT; override; + function Invoke(dispIDMember: TDispID; const iid: TIID; lcid: TLCID; + flags: Word; var dispParams: TDispParams; varResult: PVariant; + excepInfo: PExcepInfo; argErr: PInteger): HRESULT; override; + { TIAccessible } + function get_accParent(var ppdispParent: IDispatch): HRESULT; override; + function get_accChildCount(var pcountChildren: Integer): HRESULT; override; + function get_accChild(varChild: NewOleVariant; var ppdispChild: IDispatch): HRESULT; override; + function get_accName(varChild: NewOleVariant; var pszName: NewWideString): HRESULT; override; + function get_accValue(varChild: NewOleVariant; var pszValue: NewWideString): HRESULT; override; + function get_accDescription(varChild: NewOleVariant; var pszDescription: NewWideString): HRESULT; override; + function get_accRole(varChild: NewOleVariant; var pvarRole: NewOleVariant): HRESULT; override; + function get_accState(varChild: NewOleVariant; var pvarState: NewOleVariant): HRESULT; override; + function get_accHelp(varChild: NewOleVariant; var pszHelp: NewWideString): HRESULT; override; + function get_accHelpTopic(var pszHelpFile: NewWideString; varChild: NewOleVariant; var pidTopic: Integer): HRESULT; override; + function get_accKeyboardShortcut(varChild: NewOleVariant; var pszKeyboardShortcut: NewWideString): HRESULT; override; + function get_accFocus(var pvarID: NewOleVariant): HRESULT; override; + function get_accSelection(var pvarChildren: NewOleVariant): HRESULT; override; + function get_accDefaultAction(varChild: NewOleVariant; var pszDefaultAction: NewWideString): HRESULT; override; + function accSelect(flagsSelect: Integer; varChild: NewOleVariant): HRESULT; override; + function accLocation(var pxLeft: Integer; var pyTop: Integer; var pcxWidth: Integer; + var pcyHeight: Integer; varChild: NewOleVariant): HRESULT; override; + function accNavigate(navDir: Integer; varStart: NewOleVariant; var pvarEnd: NewOleVariant): HRESULT; override; + function accHitTest(xLeft: Integer; yTop: Integer; var pvarID: NewOleVariant): HRESULT; override; + function accDoDefaultAction(varChild: NewOleVariant): HRESULT; override; + function put_accName(varChild: NewOleVariant; const pszName: NewWideString): HRESULT; override; + function put_accValue(varChild: NewOleVariant; const pszValue: NewWideString): HRESULT; override; + public + constructor Create(AControl: TNewCheckListBox); + destructor Destroy; override; + procedure ControlDestroying; + end; + +function CoDisconnectObject(unk: TIUnknown; dwReserved: DWORD): HRESULT; + stdcall; external 'ole32.dll'; + +var + NotifyWinEventFunc: procedure(event: DWORD; hwnd: HWND; idObject: DWORD; + idChild: Longint); stdcall; + OleAccInited: BOOL; + OleAccAvailable: BOOL; + LresultFromObjectFunc: function(const riid: TGUID; wParam: WPARAM; + pUnk: TIUnknown): LRESULT; stdcall; + CreateStdAccessibleObjectFunc: function(hwnd: HWND; idObject: Longint; + const riidInterface: TGUID; var ppvObject: Pointer): HRESULT; stdcall; + +function InitializeOleAcc: Boolean; + + function GetSystemDir: String; + var + Buf: array[0..MAX_PATH-1] of Char; + begin + GetSystemDirectory(Buf, SizeOf(Buf) div SizeOf(Buf[0])); + Result := StrPas(Buf); + end; + +var + M: HMODULE; +begin + if not OleAccInited then begin + M := LoadLibrary(PChar(AddBackslash(GetSystemDir) + 'oleacc.dll')); + if M <> 0 then begin + LresultFromObjectFunc := GetProcAddress(M, 'LresultFromObject'); + CreateStdAccessibleObjectFunc := GetProcAddress(M, 'CreateStdAccessibleObject'); + if Assigned(LresultFromObjectFunc) and + Assigned(CreateStdAccessibleObjectFunc) then + OleAccAvailable := True; + end; + OleAccInited := True; + end; + Result := OleAccAvailable; +end; + +{ TNewCheckListBox } + +constructor TNewCheckListBox.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + + with TBitmap.Create do + begin + try + Handle := LoadBitmap(0, PChar(OBM_CHECKBOXES)); + FCheckWidth := Width div 4; + FCheckHeight := Height div 3; + finally + Free; + end; + end; + + FStateList := TList.Create; + FMinItemHeight := 16; + FOffset := 4; + FShowLines := True; + Style := lbOwnerDrawVariable; + FHotIndex := -1; + FCaptureIndex := -1; +end; + +procedure TNewCheckListBox.CreateParams(var Params: TCreateParams); +begin + inherited; + FUseRightToLeft := SetBiDiStyles(Self, Params); +end; + +procedure TNewCheckListBox.CreateWnd; +begin + { TCustomListBox.CreateWnd causes a LB_RESETCONTENT message to be sent when + it's restoring FSaveItems. Increment FDisableItemStateDeletion so that + our LB_RESETCONTENT handler doesn't delete any item states. } + Inc(FDisableItemStateDeletion); + try + inherited; + finally + Dec(FDisableItemStateDeletion); + end; +end; + +procedure TNewCheckListBox.UpdateThemeData(const Close, Open: Boolean); +begin + if Close then begin + if FThemeData <> 0 then begin + CloseThemeData(FThemeData); + FThemeData := 0; + end; + end; + + if Open then begin + if UseThemes then + FThemeData := OpenThemeData(Handle, 'Button') + else + FThemeData := 0; + end; +end; + +procedure TNewCheckListBox.CreateWindowHandle(const Params: TCreateParams); +begin + inherited CreateWindowHandle(Params); + UpdateThemeData(True, True); +end; + +destructor TNewCheckListBox.Destroy; +var + I: Integer; +begin + if Assigned(FAccObjectInstance) then begin + { Detach from FAccObjectInstance if someone still has a reference to it } + TAccObject(FAccObjectInstance).ControlDestroying; + FAccObjectInstance := nil; + end; + if Assigned(FStateList) then begin + for I := FStateList.Count-1 downto 0 do + TItemState(FStateList[I]).Free; + FStateList.Free; + end; + UpdateThemeData(True, False); + inherited Destroy; +end; + +function TNewCheckListBox.AddCheckBox(const ACaption, ASubItem: string; + ALevel: Byte; AChecked, AEnabled, AHasInternalChildren, + ACheckWhenParentChecked: Boolean; AObject: TObject): Integer; +begin + if not AEnabled and CheckPotentialRadioParents(Items.Count, ALevel) then + raise Exception.Create(sRadioCantHaveDisabledChildren); + Result := AddItem2(itCheck, ACaption, ASubItem, ALevel, AChecked, AEnabled, + AHasInternalChildren, ACheckWhenParentChecked, AObject); +end; + +function TNewCheckListBox.AddGroup(const ACaption, ASubItem: string; + ALevel: Byte; AObject: TObject): Integer; +begin + Result := AddItem2(itGroup, ACaption, ASubItem, ALevel, False, True, False, + True, AObject); +end; + +function TNewCheckListBox.AddRadioButton(const ACaption, ASubItem: string; + ALevel: Byte; AChecked, AEnabled: Boolean; AObject: TObject): Integer; +begin + if not AEnabled then + AChecked := False; + Result := AddItem2(itRadio, ACaption, ASubItem, ALevel, AChecked, AEnabled, + False, True, AObject); +end; + +function TNewCheckListBox.CanFocusItem(Item: Integer): Boolean; +begin + with ItemStates[Item] do + Result := Self.Enabled and Enabled and (ItemType <> itGroup); +end; + +function TNewCheckListBox.CheckPotentialRadioParents(Index, ALevel: Integer): Boolean; +begin + Result := True; + Dec(Index); + Dec(ALevel); + while Index >= 0 do + begin + with ItemStates[Index] do + if Level = ALevel then + if ItemType = itRadio then + Exit + else + Break; + Dec(Index); + end; + if Index >= 0 then + begin + Index := GetParentOf(Index); + while Index >= 0 do + begin + if ItemStates[Index].ItemType = itRadio then + Exit; + Index := GetParentOf(Index); + end; + end; + Result := False; +end; + +procedure TNewCheckListBox.CMDialogChar(var Message: TCMDialogChar); +var + I: Integer; +begin + if FWantTabs and CanFocus then + with Message do + begin + I := FindAccel(CharCode); + if I >= 0 then + begin + SetFocus; + if (FCaptureIndex <> I) or FSpaceDown then EndCapture(not FSpaceDown); + ItemIndex := I; + Toggle(I); + Result := 1 + end; + end; +end; + +procedure TNewCheckListBox.CMEnter(var Message: TCMEnter); +var + GoForward, Arrows: Boolean; +begin + if FWantTabs and FFormFocusChanged and (GetKeyState(VK_LBUTTON) >= 0) then + begin + if GetKeyState(VK_TAB) < 0 then begin + Arrows := False; + GoForward := (GetKeyState(VK_SHIFT) >= 0); + end + else if (GetKeyState(VK_UP) < 0) or (GetKeyState(VK_LEFT) < 0) then begin + Arrows := True; + GoForward := False; + end + else if (GetKeyState(VK_DOWN) < 0) or (GetKeyState(VK_RIGHT) < 0) then begin + Arrows := True; + GoForward := True; + end + else begin + { Otherwise, just select the first item } + Arrows := False; + GoForward := True; + end; + if GoForward then + ItemIndex := FindNextItem(-1, True, not Arrows) + else + ItemIndex := FindNextItem(Items.Count, False, not Arrows) + end; + inherited; +end; + +procedure TNewCheckListBox.CMExit(var Message: TCMExit); +begin + EndCapture(not FSpaceDown or (GetKeyState(VK_MENU) >= 0)); + inherited; +end; + +procedure TNewCheckListBox.CMFocusChanged(var Message: TCMFocusChanged); +begin + FFormFocusChanged := True; + inherited; +end; + +procedure TNewCheckListBox.CMFontChanged(var Message: TMessage); +begin + inherited; + Canvas.Font := Font; +end; + +procedure LineDDAProc(X, Y: Integer; Canvas: TCanvas); stdcall; +begin + if ((X xor Y) and 1) = 0 then + begin + Canvas.MoveTo(X, Y); + Canvas.LineTo(X + 1, Y) + end; +end; + +procedure TNewCheckListBox.CMWantSpecialKey(var Message: TMessage); +begin + Message.Result := Ord(FWantTabs and (Message.WParam = VK_TAB)); +end; + +procedure TNewCheckListBox.CNDrawItem(var Message: TWMDrawItem); +var + L: Integer; +begin + with Message.DrawItemStruct^ do + begin + { Note: itemID is -1 when there are no items } + if Integer(itemID) >= 0 then begin + L := ItemStates[itemID].Level; + if ItemStates[itemID].ItemType <> itGroup then Inc(L); + rcItem.Left := rcItem.Left + (FCheckWidth + 2 * FOffset) * L; + FlipRect(rcItem, ClientRect, FUseRightToLeft); + end; + { Don't let TCustomListBox.CNDrawItem draw the focus } + if FWantTabs or + (SendMessage(Handle, WM_QUERYUISTATE, 0, 0) and UISF_HIDEFOCUS <> 0) then + itemState := itemState and not ODS_FOCUS; + inherited; + end; +end; + +function TNewCheckListBox.RemeasureItem(Index: Integer): Integer; +{ Recalculates an item's height. Does not repaint and does not update the + vertical scroll range (as the LB_SETITEMHEIGHT message does neither). } +begin + Result := ItemHeight; + MeasureItem(Index, Result); + SendMessage(Handle, LB_SETITEMHEIGHT, Index, Result); +end; + +procedure TNewCheckListBox.UpdateScrollRange; +{ Updates the vertical scroll range, hiding/showing the scroll bar if needed. + This should be called after any RemeasureItem call. } +begin + { Update the scroll bounds by sending a seemingly-ineffectual LB_SETTOPINDEX + message. This works on Windows 95 and 2000. + NOTE: This causes the selected item to be repainted for no apparent reason! + I wish I knew of a better way to do this... } + SendMessage(Handle, LB_SETTOPINDEX, SendMessage(Handle, LB_GETTOPINDEX, 0, 0), 0); +end; + +procedure TNewCheckListBox.MeasureItem(Index: Integer; var Height: Integer); +var + DrawTextFormat: Integer; + Rect, SubItemRect: TRect; + ItemState: TItemState; + L, SubItemWidth: Integer; + S: String; +begin + with Canvas do begin + ItemState := ItemStates[Index]; + Rect := Classes.Rect(0, 0, ClientWidth, 0); + + L := ItemState.Level; + if ItemState.ItemType <> itGroup then + Inc(L); + Rect.Left := Rect.Left + (FCheckWidth + 2 * FOffset) * L; + Inc(Rect.Left); + + if ItemState.SubItem <> '' then begin + DrawTextFormat := DT_CALCRECT or DT_NOCLIP or DT_NOPREFIX or DT_SINGLELINE; + if FUseRightToLeft then + DrawTextFormat := DrawTextFormat or (DT_RIGHT or DT_RTLREADING); + SetRectEmpty(SubItemRect); + DrawText(Canvas.Handle, PChar(ItemState.SubItem), Length(ItemState.SubItem), + SubItemRect, DrawTextFormat); + SubItemWidth := SubItemRect.Right + 2 * FOffset; + Dec(Rect.Right, SubItemWidth) + end else + Dec(Rect.Right, FOffset); + + if not FWantTabs then + Inc(Rect.Left); + + DrawTextFormat := DT_NOCLIP or DT_CALCRECT or DT_WORDBREAK or DT_WORD_ELLIPSIS; + if not FWantTabs or (ItemState.ItemType = itGroup) then + DrawTextFormat := DrawTextFormat or DT_NOPREFIX; + if FUseRightToLeft then + DrawTextFormat := DrawTextFormat or (DT_RIGHT or DT_RTLREADING); + + S := Items[Index]; { Passing Items[Index] directly into DrawText doesn't work on Unicode build. } + ItemState.MeasuredHeight := DrawText(Canvas.Handle, PChar(S), Length(S), Rect, DrawTextFormat); + if ItemState.MeasuredHeight < FMinItemHeight then + Height := FMinItemHeight + else + Height := ItemState.MeasuredHeight + 4; + + { The height must be an even number for tree lines to be painted correctly } + if Odd(Height) then + Inc(Height); + end; +end; + +procedure TNewCheckListBox.DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState); +const + ButtonStates: array [TItemType] of Integer = + ( + 0, + DFCS_BUTTONCHECK, + DFCS_BUTTONRADIO + ); + ButtonPartIds: array [TItemType] of Integer = + ( + 0, + BP_CHECKBOX, + BP_RADIOBUTTON + ); + ButtonStateIds: array [TCheckBoxState, TCheckBoxState2] of Integer = + ( + //Can be used for both checkboxes and radiobuttons because RBS_... constants + //equal CBS_... constants + (CBS_UNCHECKEDNORMAL, CBS_UNCHECKEDHOT, CBS_UNCHECKEDPRESSED, CBS_UNCHECKEDDISABLED), + (CBS_CHECKEDNORMAL, CBS_CHECKEDHOT, CBS_CHECKEDPRESSED, CBS_CHECKEDDISABLED), + (CBS_MIXEDNORMAL, CBS_MIXEDHOT, CBS_MIXEDPRESSED, CBS_MIXEDDISABLED) + ); +var + SavedClientRect: TRect; + + function FlipX(const X: Integer): Integer; + begin + if FUseRightToLeft then + Result := (SavedClientRect.Right - 1) - X + else + Result := X; + end; + + procedure InternalDrawText(const S: string; var R: TRect; Format: Integer; + Embossed: Boolean); + begin + if Embossed then + begin + Canvas.Brush.Style := bsClear; + OffsetRect(R, 1, 1); + SetTextColor(Canvas.Handle, GetSysColor(COLOR_BTNHIGHLIGHT)); + DrawText(Canvas.Handle, PChar(S), Length(S), R, Format); + OffsetRect(R, -1, -1); + SetTextColor(Canvas.Handle, GetSysColor(COLOR_BTNSHADOW)); + DrawText(Canvas.Handle, PChar(S), Length(S), R, Format); + end + else + DrawText(Canvas.Handle, PChar(S), Length(S), R, Format); + end; + +var + Disabled: Boolean; + uState, I, ThreadPosX, ThreadBottom, ThreadLevel, ItemMiddle, + DrawTextFormat: Integer; + CheckRect, SubItemRect, FocusRect: TRect; + NewTextColor: TColor; + OldColor: TColorRef; + ItemState: TItemState; + UIState: DWORD; + SubItemWidth: Integer; + PartId, StateId: Integer; + Size: TSize; +begin + if FShowLines and not FThreadsUpToDate then begin + UpdateThreads; + FThreadsUpToDate := True; + end; + + SavedClientRect := ClientRect; + { Undo flipping performed by TNewCheckListBox.CNDrawItem } + FlipRect(Rect, SavedClientRect, FUseRightToLeft); + + ItemState := ItemStates[Index]; + UIState := SendMessage(Handle, WM_QUERYUISTATE, 0, 0); + Disabled := not Enabled or not ItemState.Enabled; + with Canvas do begin + if not FWantTabs and (odSelected in State) and Focused then begin + Brush.Color := clHighlight; + NewTextColor := clHighlightText; + end + else begin + Brush.Color := Self.Color; + if Disabled then + NewTextColor := clGrayText + else + NewTextColor := Self.Font.Color; + end; + { Draw threads } + if FShowLines then begin + Pen.Color := clGrayText; + ThreadLevel := ItemLevel[Index]; + for I := 0 to ThreadLevel - 1 do + if I in ItemStates[Index].ThreadCache then begin + ThreadPosX := (FCheckWidth + 2 * FOffset) * I + FCheckWidth div 2 + FOffset; + ItemMiddle := (Rect.Bottom - Rect.Top) div 2 + Rect.Top; + ThreadBottom := Rect.Bottom; + if I = ThreadLevel - 1 then begin + if ItemStates[Index].IsLastChild then + ThreadBottom := ItemMiddle; + LineDDA(FlipX(ThreadPosX), ItemMiddle, FlipX(ThreadPosX + FCheckWidth div 2 + FOffset), + ItemMiddle, @LineDDAProc, Integer(Canvas)); + end; + LineDDA(FlipX(ThreadPosX), Rect.Top, FlipX(ThreadPosX), ThreadBottom, + @LineDDAProc, Integer(Canvas)); + end; + end; + { Draw checkmark} + if ItemState.ItemType <> itGroup then begin + CheckRect := Bounds(Rect.Left - (FCheckWidth + FOffset), + Rect.Top + ((Rect.Bottom - Rect.Top - FCheckHeight) div 2), + FCheckWidth, FCheckHeight); + FlipRect(CheckRect, SavedClientRect, FUseRightToLeft); + if FThemeData = 0 then begin + case ItemState.State of + cbChecked: uState := ButtonStates[ItemState.ItemType] or DFCS_CHECKED; + cbUnchecked: uState := ButtonStates[ItemState.ItemType]; + else + uState := DFCS_BUTTON3STATE or DFCS_CHECKED; + end; + if FFlat then + uState := uState or DFCS_FLAT; + if Disabled then + uState := uState or DFCS_INACTIVE; + if (FCaptureIndex = Index) and (FSpaceDown or (FLastMouseMoveIndex = Index)) then + uState := uState or DFCS_PUSHED; + DrawFrameControl(Handle, CheckRect, DFC_BUTTON, uState) + end else begin + PartId := ButtonPartIds[ItemState.ItemType]; + if Disabled then + StateId := ButtonStateIds[ItemState.State][cb2Disabled] + else if Index = FCaptureIndex then + if FSpaceDown or (FLastMouseMoveIndex = Index) then + StateId := ButtonStateIds[ItemState.State][cb2Pressed] + else + StateId := ButtonStateIds[ItemState.State][cb2Hot] + else if (FCaptureIndex < 0) and (Index = FHotIndex) then + StateId := ButtonStateIds[ItemState.State][cb2Hot] + else + StateId := ButtonStateIds[ItemState.State][cb2Normal]; + GetThemePartSize(FThemeData, Handle, PartId, StateId, @CheckRect, TS_TRUE, Size); + if (Size.cx <> FCheckWidth) or (Size.cy <> FCheckHeight) then begin + CheckRect := Bounds(Rect.Left - (Size.cx + FOffset), + Rect.Top + ((Rect.Bottom - Rect.Top - Size.cy) div 2), + Size.cx, Size.cy); + FlipRect(CheckRect, SavedClientRect, FUseRightToLeft); + end; + //if IsThemeBackgroundPartiallyTransparent(FThemeData, PartId, StateId) then + // DrawThemeParentBackground(Self.Handle, Handle, @CheckRect); + DrawThemeBackGround(FThemeData, Handle, PartId, StateId, CheckRect, @CheckRect); + end; + end; + { Draw SubItem } + FlipRect(Rect, SavedClientRect, FUseRightToLeft); + FillRect(Rect); + FlipRect(Rect, SavedClientRect, FUseRightToLeft); + Inc(Rect.Left); + OldColor := SetTextColor(Handle, ColorToRGB(NewTextColor)); + if ItemState.SubItem <> '' then + begin + DrawTextFormat := DT_NOCLIP or DT_NOPREFIX or DT_SINGLELINE or DT_VCENTER; + if FUseRightToLeft then + DrawTextFormat := DrawTextFormat or (DT_RIGHT or DT_RTLREADING); + Font.Style := ItemState.SubItemFontStyle; + SetRectEmpty(SubItemRect); + InternalDrawText(ItemState.SubItem, SubItemRect, DrawTextFormat or + DT_CALCRECT, False); + SubItemWidth := SubItemRect.Right + 2 * FOffset; + SubItemRect := Rect; + SubItemRect.Left := SubItemRect.Right - SubItemWidth + FOffset; + FlipRect(SubItemRect, SavedClientRect, FUseRightToLeft); + InternalDrawText(ItemState.SubItem, SubItemRect, DrawTextFormat, + FWantTabs and Disabled); + Dec(Rect.Right, SubItemWidth); + end + else + Dec(Rect.Right, FOffset); + { Draw item text } + if not FWantTabs then + Inc(Rect.Left); + OffsetRect(Rect, 0, (Rect.Bottom - Rect.Top - ItemState.MeasuredHeight) div 2); + DrawTextFormat := DT_NOCLIP or DT_WORDBREAK or DT_WORD_ELLIPSIS; + if not FWantTabs or (ItemState.ItemType = itGroup) then + DrawTextFormat := DrawTextFormat or DT_NOPREFIX; + if (UIState and UISF_HIDEACCEL) <> 0 then + DrawTextFormat := DrawTextFormat or DT_HIDEPREFIX; + if FUseRightToLeft then + DrawTextFormat := DrawTextFormat or (DT_RIGHT or DT_RTLREADING); + Font.Style := ItemState.ItemFontStyle; + { When you call DrawText with the DT_CALCRECT flag and there's a word wider + than the rectangle width, it increases the rectangle width and wraps + at the new Right point. On the other hand, when you call DrawText + _without_ the DT_CALCRECT flag, it always wraps at the Right point you + specify -- it doesn't check for long words first. + Therefore, to ensure we wrap at the same place when drawing as when + measuring, pass our rectangle to DrawText with DT_CALCRECT first. + Wrapping at the same place is important because it can affect how many + lines are drawn -- and we mustn't draw too many. } + InternalDrawText(Items[Index], Rect, DrawTextFormat or DT_CALCRECT, False); + FlipRect(Rect, SavedClientRect, FUseRightToLeft); + InternalDrawText(Items[Index], Rect, DrawTextFormat, FWantTabs and Disabled); + { Draw focus rectangle } + if FWantTabs and not Disabled and (odSelected in State) and Focused and + (UIState and UISF_HIDEFOCUS = 0) then + begin + FocusRect := Rect; + InflateRect(FocusRect, 1, 1); + DrawFocusRect(FocusRect); + end; + SetTextColor(Handle, OldColor); + end; +end; + +procedure TNewCheckListBox.EndCapture(Cancel: Boolean); +var + InvalidateItem: Boolean; + Item: Integer; +begin + Item := FCaptureIndex; + if Item >= 0 then + begin + InvalidateItem := FSpaceDown or (FCaptureIndex = FLastMouseMoveIndex) or (FThemeData <> 0); + FSpaceDown := False; + FCaptureIndex := -1; + FLastMouseMoveIndex := -1; + if not Cancel then + Toggle(Item); + if InvalidateItem then + InvalidateCheck(Item); + end; + if MouseCapture then + MouseCapture := False; +end; + +procedure TNewCheckListBox.EnumChildrenOf(Item: Integer; Proc: TEnumChildrenProc; + Ext: Longint); +var + L: Integer; +begin + if (Item < -1) or (Item >= Items.Count) then + Exit; + if Item = -1 then + begin + L := 0; + Item := 0; + end + else + begin + L := ItemLevel[Item] + 1; + Inc(Item); + end; + while (Item < Items.Count) and (ItemLevel[Item] >= L) do + begin + if ItemLevel[Item] = L then + Proc(Item, (Item < Items.Count - 1) and (ItemLevel[Item + 1] > L), Ext); + Inc(Item); + end; +end; + +function TNewCheckListBox.AddItem2(AType: TItemType; + const ACaption, ASubItem: string; ALevel: Byte; + AChecked, AEnabled, AHasInternalChildren, ACheckWhenParentChecked: Boolean; + AObject: TObject): Integer; +var + ItemState: TItemState; + I: Integer; +begin + if Items.Count <> FStateList.Count then { sanity check } + raise Exception.Create('List item and state item count mismatch'); + if Items.Count > 0 then + begin + if ItemLevel[Items.Count - 1] + 1 < ALevel then + ALevel := ItemLevel[Items.Count - 1] + 1; + end + else + ALevel := 0; + FThreadsUpToDate := False; + { Use our own grow code to minimize heap fragmentation } + if FStateList.Count = FStateList.Capacity then begin + if FStateList.Capacity < 64 then + FStateList.Capacity := 64 + else + FStateList.Capacity := FStateList.Capacity * 2; + end; + ItemState := TItemState.Create; + try + ItemState.ItemType := AType; + ItemState.Enabled := AEnabled; + ItemState.Obj := AObject; + ItemState.Level := ALevel; + ItemState.SubItem := ASubItem; + ItemState.HasInternalChildren := AHasInternalChildren; + ItemState.CheckWhenParentChecked := ACheckWhenParentChecked; + except + ItemState.Free; + raise; + end; + FStateList.Add(ItemState); + try + Result := Items.Add(ACaption); + except + FStateList.Delete(FStateList.Count-1); + ItemState.Free; + raise; + end; + { If the first item in a radio group is being added, and it is top-level or + has a checked parent, force it to be checked. (We don't want to allow radio + groups with no selection.) } + if (AType = itRadio) and not AChecked and AEnabled then begin + I := GetParentOf(Result); + { FRequireRadioSelection only affects top-level items; we never allow + child radio groups with no selection (because nobody should need that) } + if FRequireRadioSelection or (I <> -1) then + if (I = -1) or (GetState(I) <> cbUnchecked) then + if FindCheckedSibling(Result) = -1 then + AChecked := True; + end; + SetChecked(Result, AChecked); +end; + +function TNewCheckListBox.FindAccel(VK: Word): Integer; +begin + for Result := 0 to Items.Count - 1 do + if CanFocusItem(Result) and IsAccel(VK, Items[Result]) then + Exit; + Result := -1; +end; + +function TNewCheckListBox.FindNextItem(StartFrom: Integer; GoForward, + SkipUncheckedRadios: Boolean): Integer; + + function ShouldSkip(Index: Integer): Boolean; + begin + with ItemStates[Index] do + Result := (ItemType = itRadio) and (State <> cbChecked) + end; + +var + Delta: Integer; +begin + if StartFrom < -1 then + StartFrom := ItemIndex; + if Items.Count > 0 then + begin + Delta := Ord(GoForward) * 2 - 1; + Result := StartFrom + Delta; + while (Result >= 0) and (Result < Items.Count) and + (not CanFocusItem(Result) or SkipUncheckedRadios and ShouldSkip(Result)) do + Result := Result + Delta; + if (Result < 0) or (Result >= Items.Count) then + Result := -1; + end + else + Result := -1; +end; + +function TNewCheckListBox.GetCaption(Index: Integer): String; +begin + Result := Items[Index]; +end; + +function TNewCheckListBox.GetChecked(Index: Integer): Boolean; +begin + Result := GetState(Index) <> cbUnchecked; +end; + +function TNewCheckListBox.GetItemEnabled(Index: Integer): Boolean; +begin + Result := ItemStates[Index].Enabled; +end; + +function TNewCheckListBox.GetItemFontStyle(Index: Integer): TFontStyles; +begin + Result := ItemStates[Index].ItemFontStyle; +end; + +function TNewCheckListBox.GetItemState(Index: Integer): TItemState; +begin + Result := FStateList[Index]; +end; + +function TNewCheckListBox.GetLevel(Index: Integer): Byte; +begin + Result := ItemStates[Index].Level; +end; + +function TNewCheckListBox.GetObject(Index: Integer): TObject; +begin + Result := ItemStates[Index].Obj; +end; + +function TNewCheckListBox.GetParentOf(Item: Integer): Integer; +{ Gets index of Item's parent, or -1 if there is none. } +var + Level, I: Integer; +begin + Level := ItemStates[Item].Level; + if Level > 0 then + for I := Item-1 downto 0 do begin + if ItemStates[I].Level < Level then begin + Result := I; + Exit; + end; + end; + Result := -1; +end; + +function TNewCheckListBox.GetState(Index: Integer): TCheckBoxState; +begin + Result := ItemStates[Index].State; +end; + +function TNewCheckListBox.GetSubItem(Index: Integer): String; +begin + Result := ItemStates[Index].SubItem; +end; + +function TNewCheckListBox.GetSubItemFontStyle(Index: Integer): TFontStyles; +begin + Result := ItemStates[Index].SubItemFontStyle; +end; + +procedure TNewCheckListBox.InvalidateCheck(Index: Integer); +var + IRect: TRect; +begin + IRect := ItemRect(Index); + Inc(IRect.Left, (FCheckWidth + 2 * Offset) * (ItemLevel[Index])); + IRect.Right := IRect.Left + (FCheckWidth + 2 * Offset); + FlipRect(IRect, ClientRect, FUseRightToLeft); + InvalidateRect(Handle, @IRect, FThemeData <> 0); +end; + +procedure TNewCheckListBox.KeyDown(var Key: Word; Shift: TShiftState); +begin + if (Key = VK_SPACE) and not (ssAlt in Shift) and (ItemIndex >= 0) and + (FCaptureIndex < 0) and CanFocusItem(ItemIndex) then + if FWantTabs then begin + if not FSpaceDown then begin + FCaptureIndex := ItemIndex; + FSpaceDown := True; + InvalidateCheck(ItemIndex); + if (FHotIndex <> ItemIndex) and (FHotIndex <> -1) and (FThemeData <> 0) then + InvalidateCheck(FHotIndex); + end; + end + else + Toggle(ItemIndex); + inherited; +end; + +procedure TNewCheckListBox.KeyUp(var Key: Word; Shift: TShiftState); +begin + if (Key = VK_SPACE) and FWantTabs and FSpaceDown and (FCaptureIndex >= 0) then begin + EndCapture(False); + if (FHotIndex <> -1) and (FThemeData <> 0) then + InvalidateCheck(FHotIndex); + end; + inherited; +end; + +procedure TNewCheckListBox.MouseDown(Button: TMouseButton; Shift: TShiftState; + X, Y: Integer); +var + Index: Integer; +begin + if Button = mbLeft then begin + Index := ItemAtPos(Point(X, Y), True); + if (Index <> -1) and CanFocusItem(Index) then + begin + if FWantTabs then begin + if not FSpaceDown then begin + if not MouseCapture then + MouseCapture := True; + FCaptureIndex := Index; + FLastMouseMoveIndex := Index; + InvalidateCheck(Index); + end; + end + else + Toggle(Index); + end; + end; + inherited; +end; + +procedure TNewCheckListBox.MouseUp(Button: TMouseButton; Shift: TShiftState; + X, Y: Integer); +var + Index: Integer; +begin + if (Button = mbLeft) and FWantTabs and not FSpaceDown and (FCaptureIndex >= 0) then + begin + Index := ItemAtPos(Point(X, Y), True); + EndCapture(Index <> FCaptureIndex); + if (FHotIndex <> -1) and (FThemeData <> 0) then + InvalidateCheck(FHotIndex); + end; +end; + +procedure TNewCheckListBox.UpdateHotIndex(NewHotIndex: Integer); +var + OldHotIndex: Integer; +begin + OldHotIndex := FHotIndex; + if NewHotIndex <> OldHotIndex then + begin + FHotIndex := NewHotIndex; + if FCaptureIndex = -1 then begin + if (OldHotIndex <> -1) and (FThemeData <> 0) then + InvalidateCheck(OldHotIndex); + if (NewHotIndex <> -1) and (FThemeData <> 0) then + InvalidateCheck(NewHotIndex); + end; + end; +end; + +procedure TNewCheckListBox.CMMouseLeave(var Message: TMessage); +begin + UpdateHotIndex(-1); + inherited; +end; + +procedure TNewCheckListBox.SetCaption(Index: Integer; const Value: String); +begin + { Changing an item's text actually involves deleting and re-inserting the + item. Increment FDisableItemStateDeletion so the item state isn't lost. } + Inc(FDisableItemStateDeletion); + try + Items[Index] := Value; + finally + Dec(FDisableItemStateDeletion); + end; +end; + +procedure TNewCheckListBox.SetChecked(Index: Integer; const AChecked: Boolean); +begin + if AChecked then + CheckItem(Index, coCheck) + else + CheckItem(Index, coUncheck); +end; + +function TNewCheckListBox.FindCheckedSibling(const AIndex: Integer): Integer; +{ Finds a checked sibling of AIndex (which is assumed to be a radio button). + Returns -1 if no checked sibling was found. } +var + ThisLevel, I: Integer; +begin + ThisLevel := ItemStates[AIndex].Level; + for I := AIndex-1 downto 0 do begin + if ItemStates[I].Level < ThisLevel then + Break; + if ItemStates[I].Level = ThisLevel then begin + if ItemStates[I].ItemType <> itRadio then + Break; + if GetState(I) <> cbUnchecked then begin + Result := I; + Exit; + end; + end; + end; + for I := AIndex+1 to Items.Count-1 do begin + if ItemStates[I].Level < ThisLevel then + Break; + if ItemStates[I].Level = ThisLevel then begin + if ItemStates[I].ItemType <> itRadio then + Break; + if GetState(I) <> cbUnchecked then begin + Result := I; + Exit; + end; + end; + end; + Result := -1; +end; + +function TNewCheckListBox.CheckItem(const Index: Integer; + const AOperation: TCheckItemOperation): Boolean; +{ Tries to update the checked state of Index. Returns True if any changes were + made to the state of Index or any of its children. } + + procedure SetItemState(const AIndex: Integer; const AState: TCheckBoxState); + begin + if ItemStates[AIndex].State <> AState then begin + ItemStates[AIndex].State := AState; + InvalidateCheck(AIndex); + { Notify MSAA of the state change } + if Assigned(NotifyWinEventFunc) then + NotifyWinEventFunc(EVENT_OBJECT_STATECHANGE, Handle, OBJID_CLIENT, + 1 + AIndex); + end; + end; + + function CalcState(const AIndex: Integer; ACheck: Boolean): TCheckBoxState; + { Determines new state for AIndex based on desired checked state (ACheck) and + current state of the item's immediate children. } + var + RootLevel, I: Integer; + HasChecked, HasUnchecked: Boolean; + begin + HasChecked := False; + HasUnchecked := False; + RootLevel := ItemStates[AIndex].Level; + for I := AIndex+1 to Items.Count-1 do begin + if ItemStates[I].Level <= RootLevel then + Break; + if (ItemStates[I].Level = RootLevel+1) and + (ItemStates[I].ItemType in [itCheck, itRadio]) then begin + case GetState(I) of + cbUnchecked: begin + if (ItemStates[I].ItemType <> itRadio) or + (FindCheckedSibling(I) = -1) then + HasUnchecked := True; + end; + cbChecked: begin + HasChecked := True; + end; + cbGrayed: begin + HasChecked := True; + HasUnchecked := True; + end; + end; + end; + end; + + { If the parent is a check box with children, don't allow it to be checked + if none of its children are checked, unless it "has internal children" } + if HasUnchecked and not HasChecked and + (ItemStates[AIndex].ItemType = itCheck) and + not ItemStates[AIndex].HasInternalChildren then + ACheck := False; + + if ACheck or HasChecked then begin + if HasUnchecked and (ItemStates[AIndex].ItemType = itCheck) then + Result := cbGrayed + else + Result := cbChecked; + end + else + Result := cbUnchecked; + end; + + function RecursiveCheck(const AIndex: Integer; + const AOperation: TCheckItemOperation): Boolean; + { Checks or unchecks AIndex and all enabled child items of AIndex at any + level. In radio button groups, only one item per group is checked. + Returns True if any of the items' states were changed. } + var + RootLevel, I: Integer; + NewState: TCheckBoxState; + begin + Result := False; + RootLevel := ItemStates[AIndex].Level; + for I := AIndex+1 to Items.Count-1 do begin + if ItemStates[I].Level <= RootLevel then + Break; + if (ItemStates[I].Level = RootLevel+1) and ItemStates[I].Enabled and + ((AOperation = coUncheck) or + ((AOperation = coCheckWithChildren) and ItemStates[I].CheckWhenParentChecked) or + (ItemStates[I].ItemType = itRadio)) then + { If checking and I is a radio button, don't recurse if a sibling + already got checked in a previous iteration of this loop. This is + needed in the following case to prevent all three radio buttons from + being checked when "Parent check" is checked. In addition, it + prevents "Child check" from being checked. + [ ] Parent check + ( ) Radio 1 + ( ) Radio 2 + ( ) Radio 3 + [ ] Child check + } + if (AOperation = coUncheck) or (ItemStates[I].ItemType <> itRadio) or + (FindCheckedSibling(I) = -1) then + if RecursiveCheck(I, AOperation) then + Result := True; + end; + NewState := CalcState(AIndex, AOperation <> coUncheck); + if GetState(AIndex) <> NewState then begin + SetItemState(AIndex, NewState); + Result := True; + end; + end; + + procedure UncheckSiblings(const AIndex: Integer); + { Unchecks all siblings (and their children) of AIndex, which is assumed to + be a radio button. } + var + I: Integer; + begin + while True do begin + I := FindCheckedSibling(AIndex); + if I = -1 then + Break; + RecursiveCheck(I, coUncheck); + end; + end; + + procedure EnsureChildRadioItemsHaveSelection(const AIndex: Integer); + { Ensures all radio button groups that are immediate children of AIndex have + a selected item. } + var + RootLevel, I: Integer; + begin + RootLevel := ItemStates[AIndex].Level; + for I := AIndex+1 to Items.Count-1 do begin + if ItemStates[I].Level <= RootLevel then + Break; + if (ItemStates[I].Level = RootLevel+1) and + (ItemStates[I].ItemType = itRadio) and + ItemStates[I].Enabled and + (GetState(I) <> cbChecked) and + (FindCheckedSibling(I) = -1) then + { Note: This uses coCheck instead of coCheckWithChildren (or the value + of AOperation) in order to keep side effects to a minimum. Seems + like the most logical behavior. For example, in this case: + [ ] A + ( ) B + [ ] C + [ ] D + clicking D will cause the radio button B to be checked (out of + necessity), but won't automatically check its child check box, C. + (If C were instead a radio button, it *would* be checked.) } + RecursiveCheck(I, coCheck); + end; + end; + + procedure UpdateParentStates(const AIndex: Integer); + var + I: Integer; + ChildChecked: Boolean; + NewState: TCheckBoxState; + begin + I := AIndex; + while True do begin + ChildChecked := (GetState(I) <> cbUnchecked); + + I := GetParentOf(I); + if I = -1 then + Break; + + { When a child item is checked, must ensure that all sibling radio button + groups have selections } + if ChildChecked then + EnsureChildRadioItemsHaveSelection(I); + + NewState := CalcState(I, GetState(I) <> cbUnchecked); + + { If a parent radio button is becoming checked, uncheck any previously + selected sibling of that radio button } + if (NewState <> cbUnchecked) and (ItemStates[I].ItemType = itRadio) then + UncheckSiblings(I); + + SetItemState(I, NewState); + end; + end; + +begin + if ItemStates[Index].ItemType = itRadio then begin + { Setting Checked to False on a radio button is a no-op. (A radio button + may only be unchecked by checking another radio button in the group, or + by unchecking a parent check box.) } + if AOperation = coUncheck then begin + Result := False; + Exit; + end; + { Before checking a new item in a radio group, uncheck any siblings and + their children } + UncheckSiblings(Index); + end; + + { Check or uncheck this item and all its children } + Result := RecursiveCheck(Index, AOperation); + + { Update state of parents. For example, if a child check box is being + checked, its parent must also become checked if it isn't already. } + UpdateParentStates(Index); +end; + +procedure TNewCheckListBox.SetFlat(Value: Boolean); +begin + if Value <> FFlat then + begin + FFlat := Value; + Invalidate; + end; +end; + +procedure TNewCheckListBox.SetItemEnabled(Index: Integer; const AEnabled: Boolean); +begin + if ItemStates[Index].Enabled <> AEnabled then + begin + ItemStates[Index].Enabled := AEnabled; + InvalidateCheck(Index); + end; +end; + +procedure TNewCheckListBox.SetItemFontStyle(Index: Integer; const AItemFontStyle: TFontStyles); +var + R: TRect; +begin + if ItemStates[Index].ItemFontStyle <> AItemFontStyle then begin + ItemStates[Index].ItemFontStyle := AItemFontStyle; + R := ItemRect(Index); + InvalidateRect(Handle, @R, True); + end; +end; + +procedure TNewCheckListBox.SetObject(Index: Integer; const AObject: TObject); +begin + ItemStates[Index].Obj := AObject; +end; + +procedure TNewCheckListBox.SetOffset(AnOffset: Integer); +begin + if FOffset <> AnOffset then + begin + FOffset := AnOffset; + Invalidate; + end; +end; + +procedure TNewCheckListBox.SetShowLines(Value: Boolean); +begin + if FShowLines <> Value then + begin + FShowLines := Value; + Invalidate; + end; +end; + +procedure TNewCheckListBox.SetSubItem(Index: Integer; const ASubItem: String); +var + OldHeight, NewHeight: Integer; + R, R2: TRect; +begin + if ItemStates[Index].SubItem <> ASubItem then + begin + ItemStates[Index].SubItem := ASubItem; + OldHeight := SendMessage(Handle, LB_GETITEMHEIGHT, Index, 0); + NewHeight := RemeasureItem(Index); + R := ItemRect(Index); + { Scroll subsequent items down or up, if necessary } + if NewHeight <> OldHeight then begin + if Index >= TopIndex then begin + R2 := ClientRect; + R2.Top := R.Top + OldHeight; + if not IsRectEmpty(R2) then + ScrollWindowEx(Handle, 0, NewHeight - OldHeight, @R2, nil, 0, nil, + SW_INVALIDATE or SW_ERASE); + end; + UpdateScrollRange; + end; + InvalidateRect(Handle, @R, True); + end; +end; + +procedure TNewCheckListBox.SetSubItemFontStyle(Index: Integer; const ASubItemFontStyle: TFontStyles); +var + R: TRect; +begin + if ItemStates[Index].SubItemFontStyle <> ASubItemFontStyle then begin + ItemStates[Index].SubItemFontStyle := ASubItemFontStyle; + R := ItemRect(Index); + InvalidateRect(Handle, @R, True); + end; +end; + +procedure TNewCheckListBox.Toggle(Index: Integer); +begin + case ItemStates[Index].ItemType of + itCheck: + case ItemStates[Index].State of + cbUnchecked: CheckItem(Index, coCheckWithChildren); + cbChecked: CheckItem(Index, coUncheck); + cbGrayed: + { First try checking, but if that doesn't work because of children + that are disabled and unchecked, try unchecking } + if not CheckItem(Index, coCheckWithChildren) then + CheckItem(Index, coUncheck); + end; + itRadio: CheckItem(Index, coCheckWithChildren); + end; + if Assigned(FOnClickCheck) then + FOnClickCheck(Self); +end; + +procedure TNewCheckListBox.UpdateThreads; + + function LastImmediateChildOf(Item: Integer): Integer; + var + L: Integer; + begin + Result := -1; + L := ItemLevel[Item] + 1; + Inc(Item); + while (Item < Items.Count) and (ItemLevel[Item] >= L) do + begin + if ItemLevel[Item] = L then + Result := Item; + Inc(Item); + end; + if Result >= 0 then + ItemStates[Result].IsLastChild := True; + end; +var + I, J, LastChild, L: Integer; +begin + for I := 0 to Items.Count - 1 do + begin + ItemStates[I].ThreadCache := [0]; //Doing ':= []' causes a "F2084 Internal Error: C21846" compiler error on Delphi 10.3 Rio } + Exclude(ItemStates[I].ThreadCache, 0); // + ItemStates[I].IsLastChild := False; + end; + for I := 0 to Items.Count - 1 do + begin + LastChild := LastImmediateChildOf(I); + L := ItemLevel[I]; + for J := I + 1 to LastChild do + Include(ItemStates[J].ThreadCache, L); + end; +end; + +procedure TNewCheckListBox.LBDeleteString(var Message: TMessage); +var + I: Integer; + ItemState: TItemState; +begin + inherited; + if FDisableItemStateDeletion = 0 then begin + I := Message.WParam; + if (I >= 0) and (I < FStateList.Count) then begin + ItemState := FStateList[I]; + FStateList.Delete(I); + ItemState.Free; + end; + end; +end; + +procedure TNewCheckListBox.LBResetContent(var Message: TMessage); +var + I: Integer; + ItemState: TItemState; +begin + inherited; + if FDisableItemStateDeletion = 0 then + for I := FStateList.Count-1 downto 0 do begin + ItemState := FStateList[I]; + FStateList.Delete(I); + ItemState.Free; + end; +end; + +procedure TNewCheckListBox.WMGetDlgCode(var Message: TWMGetDlgCode); +begin + inherited; + if FWantTabs then + Message.Result := Message.Result and not DLGC_WANTCHARS; +end; + +procedure TNewCheckListBox.WMKeyDown(var Message: TWMKeyDown); +var + GoForward, Arrows: Boolean; + I: Integer; + Prnt, Ctrl: TWinControl; +begin + { If space is pressed, avoid flickering -- exit now. } + if not FWantTabs or (Message.CharCode = VK_SPACE) then + begin + inherited; + Exit; + end; + Arrows := True; + case Message.CharCode of + VK_TAB: + begin + GoForward := GetKeyState(VK_SHIFT) >= 0; + Arrows := False + end; + VK_DOWN, VK_RIGHT: GoForward := True; + VK_UP, VK_LEFT: GoForward := False + else + if FSpaceDown then EndCapture(True); + inherited; + Exit; + end; + EndCapture(not FSpaceDown); + SendMessage(Handle, WM_CHANGEUISTATE, UIS_CLEAR or (UISF_HIDEFOCUS shl 16), 0); + if Arrows or TabStop then + I := FindNextItem(-2, GoForward, not Arrows) + else + I := -1; + if I < 0 then + begin + Prnt := nil; + if not Arrows then + Prnt := GetParentForm(Self); + if Prnt = nil then Prnt := Parent; + if Prnt <> nil then + begin + Ctrl := TWinControlAccess(Prnt).FindNextControl(Self, GoForward, True, Arrows); + if (Ctrl <> nil) and (Ctrl <> Self) then + begin + Ctrl.SetFocus; + Exit; + end; + end; + if GoForward then + I := FindNextItem(-1, True, not Arrows) + else + I := FindNextItem(Items.Count, False, not Arrows); + end; + ItemIndex := I; + if (I <> -1) and (ItemStates[I].ItemType = itRadio) and Arrows then + Toggle(I); +end; + +procedure TNewCheckListBox.WMMouseMove(var Message: TWMMouseMove); +var + Pos: TPoint; + Index, NewHotIndex: Integer; + Rect: TRect; + Indent: Integer; +begin + Pos := SmallPointToPoint(Message.Pos); + Index := ItemAtPos(Pos, True); + + if FCaptureIndex >= 0 then begin + if not FSpaceDown and (Index <> FLastMouseMoveIndex) then begin + if (FLastMouseMoveIndex = FCaptureIndex) or (Index = FCaptureIndex) then + InvalidateCheck(FCaptureIndex); + FLastMouseMoveIndex := Index; + end + end; + + NewHotIndex := -1; + if (Index <> -1) and CanFocusItem(Index) then + begin + Rect := ItemRect(Index); + Indent := (FOffset * 2 + FCheckWidth); + if FWantTabs or ((Pos.X >= Rect.Left + Indent * ItemLevel[Index]) and + (Pos.X < Rect.Left + Indent * (ItemLevel[Index] + 1))) then + NewHotIndex := Index; + end; + UpdateHotIndex(NewHotIndex); +end; + +procedure TNewCheckListBox.WMNCHitTest(var Message: TWMNCHitTest); +var + I: Integer; +begin + inherited; + if FWantTabs and not (csDesigning in ComponentState) then + begin + if Message.Result = HTCLIENT then + begin + I := ItemAtPos(ScreenToClient(SmallPointToPoint(Message.Pos)), True); + if (I < 0) or not CanFocusItem(I) then + begin + UpdateHotIndex(-1); + Message.Result := 12345; + Exit; + end; + end; + end; +end; + +procedure TNewCheckListBox.WMSetFocus(var Message: TWMSetFocus); +begin + FWheelAccum := 0; + inherited; +end; + +procedure TNewCheckListBox.WMSize(var Message: TWMSize); +var + I: Integer; +begin + inherited; + { When the scroll bar appears/disappears, the client width changes and we + must recalculate the height of the items } + for I := Items.Count-1 downto 0 do + RemeasureItem(I); + UpdateScrollRange; +end; + +procedure TNewCheckListBox.WMThemeChanged(var Message: TMessage); +begin + { Don't Run to Cursor into this function, it will interrupt up the theme change } + UpdateThemeData(True, True); + inherited; +end; + +procedure TNewCheckListBox.WMUpdateUIState(var Message: TMessage); +begin + Invalidate; + inherited; +end; + +procedure TNewCheckListBox.WMGetObject(var Message: TMessage); +begin + if (Message.LParam = Integer(OBJID_CLIENT)) and InitializeOleAcc then begin + if FAccObjectInstance = nil then begin + try + FAccObjectInstance := TAccObject.Create(Self); + except + inherited; + Exit; + end; + end; + Message.Result := LresultFromObjectFunc(IID_IAccessible, Message.WParam, + TAccObject(FAccObjectInstance)); + end + else + inherited; +end; + +{ TAccObject } + +constructor TAccObject.Create(AControl: TNewCheckListBox); +begin + inherited Create; + if CreateStdAccessibleObjectFunc(AControl.Handle, Integer(OBJID_CLIENT), + IID_IAccessible, Pointer(FStdAcc)) <> S_OK then begin + { Note: The user will never actually see this message since the call to + TAccObject.Create in TNewCheckListBox.WMGetObject is protected by a + try..except. } + raise Exception.Create('CreateStdAccessibleObject failed'); + end; + FControl := AControl; +end; + +destructor TAccObject.Destroy; +begin + { If FControl is assigned, then we are being destroyed before the control -- + the usual case. Clear FControl's reference to us. } + if Assigned(FControl) then begin + FControl.FAccObjectInstance := nil; + FControl := nil; + end; + if Assigned(FStdAcc) then + FStdAcc.Release; + inherited; +end; + +procedure TAccObject.ControlDestroying; +begin + { Set FControl to nil, since it's no longer valid } + FControl := nil; + { Take this opportunity to disconnect remote clients, i.e. don't allow them + to call us anymore. This prevents invalid memory accesses if this unit's + code is in a DLL, and the application subsequently unloads the DLL while + remote clients still hold (and are using) references to this TAccObject. } + CoDisconnectObject(Self, 0); + { NOTE: Don't access Self in any way at this point. The CoDisconnectObject + call likely caused all references to be relinquished and Self to be + destroyed. } +end; + +function TAccObject.QueryInterface(const iid: TIID; var obj): HRESULT; +begin + if IsEqualIID(iid, IID_IUnknown) or + IsEqualIID(iid, IID_IDispatch) or + IsEqualIID(iid, IID_IAccessible) then begin + Pointer(obj) := Self; + AddRef; + Result := S_OK; + end + else begin + Pointer(obj) := nil; + Result := E_NOINTERFACE; + end; +end; + +function TAccObject.AddRef: Longint; +begin + Inc(FRefCount); + Result := FRefCount; +end; + +function TAccObject.Release: Longint; +begin + Dec(FRefCount); + Result := FRefCount; + if Result = 0 then + Destroy; +end; + +function TAccObject.GetTypeInfoCount(var ctinfo: Integer): HRESULT; +begin + Result := E_NOTIMPL; +end; + +function TAccObject.GetTypeInfo(itinfo: Integer; lcid: TLCID; var tinfo: ITypeInfo): HRESULT; +begin + Result := E_NOTIMPL; +end; + +function TAccObject.GetIDsOfNames(const iid: TIID; rgszNames: POleStrList; + cNames: Integer; lcid: TLCID; rgdispid: PDispIDList): HRESULT; +begin + Result := E_NOTIMPL; +end; + +function TAccObject.Invoke(dispIDMember: TDispID; const iid: TIID; lcid: TLCID; + flags: Word; var dispParams: TDispParams; varResult: PVariant; + excepInfo: PExcepInfo; argErr: PInteger): HRESULT; +begin + Result := E_NOTIMPL; +end; + +function TAccObject.accDoDefaultAction(varChild: NewOleVariant): HRESULT; +begin + { A list box's default action is Double Click, which is useless for a + list of check boxes. } + Result := DISP_E_MEMBERNOTFOUND; +end; + +function TAccObject.accHitTest(xLeft, yTop: Integer; + var pvarID: NewOleVariant): HRESULT; +begin + Result := FStdAcc.accHitTest(xLeft, yTop, pvarID); +end; + +function TAccObject.accLocation(var pxLeft, pyTop, pcxWidth, + pcyHeight: Integer; varChild: NewOleVariant): HRESULT; +begin + Result := FStdAcc.accLocation(pxLeft, pyTop, pcxWidth, pcyHeight, varChild); +end; + +function TAccObject.accNavigate(navDir: Integer; varStart: NewOleVariant; + var pvarEnd: NewOleVariant): HRESULT; +begin + Result := FStdAcc.accNavigate(navDir, varStart, pvarEnd); +end; + +function TAccObject.accSelect(flagsSelect: Integer; + varChild: NewOleVariant): HRESULT; +begin + Result := FStdAcc.accSelect(flagsSelect, varChild); +end; + +function TAccObject.get_accChild(varChild: NewOleVariant; + var ppdispChild: IDispatch): HRESULT; +begin + Result := FStdAcc.get_accChild(varChild, ppdispChild); +end; + +function TAccObject.get_accChildCount(var pcountChildren: Integer): HRESULT; +begin + Result := FStdAcc.get_accChildCount(pcountChildren); +end; + +function TAccObject.get_accDefaultAction(varChild: NewOleVariant; + var pszDefaultAction: NewWideString): HRESULT; +begin + { A list box's default action is Double Click, which is useless for a + list of check boxes. } + pszDefaultAction := nil; + Result := S_FALSE; +end; + +function TAccObject.get_accDescription(varChild: NewOleVariant; + var pszDescription: NewWideString): HRESULT; +begin + Result := FStdAcc.get_accDescription(varChild, pszDescription); +end; + +function TAccObject.get_accFocus(var pvarID: NewOleVariant): HRESULT; +begin + Result := FStdAcc.get_accFocus(pvarID); +end; + +function TAccObject.get_accHelp(varChild: NewOleVariant; + var pszHelp: NewWideString): HRESULT; +begin + Result := FStdAcc.get_accHelp(varChild, pszHelp); +end; + +function TAccObject.get_accHelpTopic(var pszHelpFile: NewWideString; + varChild: NewOleVariant; var pidTopic: Integer): HRESULT; +begin + Result := FStdAcc.get_accHelpTopic(pszHelpFile, varChild, pidTopic); +end; + +function TAccObject.get_accKeyboardShortcut(varChild: NewOleVariant; + var pszKeyboardShortcut: NewWideString): HRESULT; +begin + Result := FStdAcc.get_accKeyboardShortcut(varChild, pszKeyboardShortcut); +end; + +function TAccObject.get_accName(varChild: NewOleVariant; + var pszName: NewWideString): HRESULT; +begin + Result := FStdAcc.get_accName(varChild, pszName); +end; + +function TAccObject.get_accParent(var ppdispParent: IDispatch): HRESULT; +begin + Result := FStdAcc.get_accParent(ppdispParent); +end; + +function TAccObject.get_accRole(varChild: NewOleVariant; + var pvarRole: NewOleVariant): HRESULT; +begin + pvarRole.vt := VT_EMPTY; + if FControl = nil then begin + Result := E_FAIL; + Exit; + end; + if varChild.vt <> VT_I4 then begin + Result := E_INVALIDARG; + Exit; + end; + if varChild.lVal = CHILDID_SELF then begin + pvarRole.lVal := ROLE_SYSTEM_OUTLINE; + pvarRole.vt := VT_I4; + Result := S_OK; + end + else begin + try + case FControl.ItemStates[varChild.lVal-1].ItemType of + itCheck: pvarRole.lVal := ROLE_SYSTEM_CHECKBUTTON; + itRadio: pvarRole.lVal := ROLE_SYSTEM_RADIOBUTTON; + else + pvarRole.lVal := ROLE_SYSTEM_STATICTEXT; + end; + pvarRole.vt := VT_I4; + Result := S_OK; + except + Result := E_INVALIDARG; + end; + end; +end; + +function TAccObject.get_accSelection(var pvarChildren: NewOleVariant): HRESULT; +begin + Result := FStdAcc.get_accSelection(pvarChildren); +end; + +function TAccObject.get_accState(varChild: NewOleVariant; + var pvarState: NewOleVariant): HRESULT; +var + ItemState: TItemState; +begin + Result := FStdAcc.get_accState(varChild, pvarState); + try + if (Result = S_OK) and (varChild.vt = VT_I4) and + (varChild.lVal <> CHILDID_SELF) and (pvarState.vt = VT_I4) and + Assigned(FControl) then begin + ItemState := FControl.ItemStates[varChild.lVal-1]; + case ItemState.State of + cbChecked: pvarState.lVal := pvarState.lVal or STATE_SYSTEM_CHECKED; + cbGrayed: pvarState.lVal := pvarState.lVal or STATE_SYSTEM_MIXED; + end; + if not ItemState.Enabled then + pvarState.lVal := pvarState.lVal or STATE_SYSTEM_UNAVAILABLE; + end; + except + Result := E_INVALIDARG; + end; +end; + +function TAccObject.get_accValue(varChild: NewOleVariant; + var pszValue: NewWideString): HRESULT; +begin + pszValue := nil; + if FControl = nil then begin + Result := E_FAIL; + Exit; + end; + if varChild.vt <> VT_I4 then begin + Result := E_INVALIDARG; + Exit; + end; + if varChild.lVal = CHILDID_SELF then + Result := S_FALSE + else begin + { Return the level as the value, like standard tree view controls do. + Not sure if any screen readers will actually use this, seeing as we + aren't a real tree view control. } + try + pszValue := StringToOleStr(IntToStr(FControl.ItemStates[varChild.lVal-1].Level)); + Result := S_OK; + except + Result := E_INVALIDARG; + end; + end; +end; + +function TAccObject.put_accName(varChild: NewOleVariant; + const pszName: NewWideString): HRESULT; +begin + Result := S_FALSE; +end; + +function TAccObject.put_accValue(varChild: NewOleVariant; + const pszValue: NewWideString): HRESULT; +begin + Result := S_FALSE; +end; + + +procedure Register; +begin + RegisterComponents('JR', [TNewCheckListBox]); +end; + +{ Note: This COM initialization code based on code from DBTables } +var + SaveInitProc: Pointer; + NeedToUninitialize: Boolean; + +procedure InitCOM; +begin + if SaveInitProc <> nil then TProcedure(SaveInitProc); + NeedToUninitialize := SUCCEEDED(CoInitialize(nil)); +end; + +initialization + if not IsLibrary then begin + SaveInitProc := InitProc; + InitProc := @InitCOM; + end; + InitThemeLibrary; + NotifyWinEventFunc := GetProcAddress(GetModuleHandle(user32), 'NotifyWinEvent'); +finalization + if NeedToUninitialize then + CoUninitialize; +end. diff --git a/Components/NewNotebook.pas b/Components/NewNotebook.pas new file mode 100644 index 00000000..0dce031a --- /dev/null +++ b/Components/NewNotebook.pas @@ -0,0 +1,329 @@ +unit NewNotebook; + +{ + Inno Setup + Copyright (C) 1997-2018 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + TNewNotebook component +} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms; + +type + TNewNotebookPage = class; + + TNewNotebook = class(TWinControl) + private + FActivePage: TNewNotebookPage; + FPages: TList; + function GetPage(Index: Integer): TNewNotebookPage; + function GetPageCount: Integer; + procedure InsertPage(Page: TNewNotebookPage); + procedure RemovePage(Page: TNewNotebookPage); + procedure SetActivePage(Page: TNewNotebookPage); + protected + procedure AlignControls(AControl: TControl; var Rect: TRect); override; + procedure CreateParams(var Params: TCreateParams); override; + procedure ShowControl(AControl: TControl); override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + function FindNextPage(CurPage: TNewNotebookPage; GoForward: Boolean): TNewNotebookPage; + procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override; + property PageCount: Integer read GetPageCount; + property Pages[Index: Integer]: TNewNotebookPage read GetPage; + published + property ActivePage: TNewNotebookPage read FActivePage write SetActivePage; + property Align; + property Anchors; + property Color; + property DragCursor; + property DragMode; + property Enabled; + property Font; + property ParentColor; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShowHint; + property TabOrder; + property TabStop; + property Visible; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnStartDrag; + end; + + TNewNotebookPage = class(TCustomControl) + private + FNotebook: TNewNotebook; + function GetPageIndex: Integer; + procedure SetNotebook(ANotebook: TNewNotebook); + procedure SetPageIndex(Value: Integer); + protected + procedure Paint; override; + procedure ReadState(Reader: TReader); override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + property Notebook: TNewNotebook read FNotebook write SetNotebook; + published + property Color nodefault; { nodefault needed for Color=clWindow to persist } + property DragMode; + property Enabled; + property Font; + property Height stored False; + property Left stored False; + property PageIndex: Integer read GetPageIndex write SetPageIndex stored False; + property ParentColor; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShowHint; + property Top stored False; + property Visible stored False; + property Width stored False; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnStartDrag; + end; + +implementation + +uses + Types; + +{ TNewNotebookPage } + +constructor TNewNotebookPage.Create(AOwner: TComponent); +begin + inherited; + Align := alClient; + ControlStyle := ControlStyle + [csAcceptsControls, csNoDesignVisible]; + Visible := False; +end; + +destructor TNewNotebookPage.Destroy; +begin + if Assigned(FNotebook) then + FNotebook.RemovePage(Self); + inherited; +end; + +function TNewNotebookPage.GetPageIndex: Integer; +begin + if Assigned(FNotebook) then + Result := FNotebook.FPages.IndexOf(Self) + else + Result := -1; +end; + +procedure TNewNotebookPage.Paint; +begin + inherited; + if csDesigning in ComponentState then begin + Canvas.Pen.Style := psDash; + Canvas.Brush.Style := bsClear; + Canvas.Rectangle(0, 0, Width, Height); + end; +end; + +procedure TNewNotebookPage.ReadState(Reader: TReader); +begin + inherited; + if Reader.Parent is TNewNotebook then + Notebook := TNewNotebook(Reader.Parent); +end; + +procedure TNewNotebookPage.SetNotebook(ANotebook: TNewNotebook); +begin + if FNotebook <> ANotebook then begin + if Assigned(FNotebook) then + FNotebook.RemovePage(Self); + Parent := ANotebook; + if Assigned(ANotebook) then + ANotebook.InsertPage(Self); + end; +end; + +procedure TNewNotebookPage.SetPageIndex(Value: Integer); +begin + if Assigned(FNotebook) then begin + if Value >= FNotebook.FPages.Count then + Value := FNotebook.FPages.Count-1; + if Value < 0 then + Value := 0; + FNotebook.FPages.Move(PageIndex, Value); + end; +end; + +{ TNewNotebook } + +constructor TNewNotebook.Create(AOwner: TComponent); +begin + inherited; + Width := 150; + Height := 150; + FPages := TList.Create; +end; + +destructor TNewNotebook.Destroy; +var + I: Integer; +begin + if Assigned(FPages) then begin + for I := 0 to FPages.Count-1 do + TNewNotebookPage(FPages[I]).FNotebook := nil; + FPages.Free; + end; + inherited; +end; + +procedure TNewNotebook.AlignControls(AControl: TControl; var Rect: TRect); +var + I: Integer; + Ctl: TControl; +begin + inherited; + { The default AlignControls implementation in Delphi 2 and 3 doesn't set + the size of invisible controls. Pages that aren't currently visible must + have valid sizes for BidiUtils' FlipControls to work properly. + Note: We loop through Controls and not FPages here because + TNewNotebookPage.SetNotebook sets Parent (causing AlignControls to be + called) before it calls InsertPage. } + if not IsRectEmpty(Rect) then begin + for I := 0 to ControlCount-1 do begin + Ctl := Controls[I]; + if (Ctl is TNewNotebookPage) and not Ctl.Visible then + Ctl.BoundsRect := Rect; + end; + end; +end; + +procedure TNewNotebook.CreateParams(var Params: TCreateParams); +begin + inherited; + Params.Style := Params.Style or WS_CLIPCHILDREN; +end; + +function TNewNotebook.FindNextPage(CurPage: TNewNotebookPage; + GoForward: Boolean): TNewNotebookPage; +var + I, StartIndex: Integer; +begin + if FPages.Count > 0 then begin + StartIndex := FPages.IndexOf(CurPage); + if StartIndex = -1 then begin + if GoForward then + StartIndex := FPages.Count-1 + else + StartIndex := 0; + end; + I := StartIndex; + repeat + if GoForward then begin + Inc(I); + if I = FPages.Count then + I := 0; + end + else begin + if I = 0 then + I := FPages.Count; + Dec(I); + end; + Result := FPages[I]; + Exit; + until I = StartIndex; + end; + Result := nil; +end; + +procedure TNewNotebook.GetChildren(Proc: TGetChildProc {$IFNDEF DELPHI2} ; + Root: TComponent {$ENDIF}); +var + I: Integer; +begin + for I := 0 to FPages.Count-1 do + Proc(TNewNotebookPage(FPages[I])); +end; + +function TNewNotebook.GetPage(Index: Integer): TNewNotebookPage; +begin + Result := FPages[Index]; +end; + +function TNewNotebook.GetPageCount: Integer; +begin + Result := FPages.Count; +end; + +procedure TNewNotebook.InsertPage(Page: TNewNotebookPage); +begin + FPages.Add(Page); + Page.FNotebook := Self; +end; + +procedure TNewNotebook.RemovePage(Page: TNewNotebookPage); +begin + Page.FNotebook := nil; + FPages.Remove(Page); + if FActivePage = Page then + SetActivePage(nil); +end; + +procedure TNewNotebook.ShowControl(AControl: TControl); +begin + if (AControl is TNewNotebookPage) and (TNewNotebookPage(AControl).FNotebook = Self) then + SetActivePage(TNewNotebookPage(AControl)); + inherited; +end; + +procedure TNewNotebook.SetActivePage(Page: TNewNotebookPage); +var + ParentForm: {$IFDEF DELPHI2} TForm {$ELSE} TCustomForm {$ENDIF}; +begin + if Assigned(Page) and (Page.FNotebook <> Self) then + Exit; + if FActivePage <> Page then begin + ParentForm := GetParentForm(Self); + if Assigned(ParentForm) and Assigned(FActivePage) and + FActivePage.ContainsControl(ParentForm.ActiveControl) then + ParentForm.ActiveControl := FActivePage; + if Assigned(Page) then begin + Page.BringToFront; + Page.Visible := True; + if Assigned(ParentForm) and Assigned(FActivePage) and + (ParentForm.ActiveControl = FActivePage) then begin + if Page.CanFocus then + ParentForm.ActiveControl := Page + else + ParentForm.ActiveControl := Self; + end; + end; + if Assigned(FActivePage) then + FActivePage.Visible := False; + FActivePage := Page; + if Assigned(ParentForm) and Assigned(FActivePage) and + (ParentForm.ActiveControl = FActivePage) then + FActivePage.SelectFirst; + end; +end; + +end. diff --git a/Components/NewNotebookReg.pas b/Components/NewNotebookReg.pas new file mode 100644 index 00000000..e7a5ed59 --- /dev/null +++ b/Components/NewNotebookReg.pas @@ -0,0 +1,108 @@ +unit NewNotebookReg; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + TNewNotebook design-time registration +} + +interface + +uses + Classes; + +procedure Register; + +implementation + +uses + NewNotebook, DesignIntf, DesignEditors; + +{ TNewNotebookEditor } + +type + TNewNotebookEditor = class(TComponentEditor) + public + procedure Edit; override; + procedure ExecuteVerb(Index: Integer); override; + function GetVerb(Index: Integer): String; override; + function GetVerbCount: Integer; override; + end; + +procedure TNewNotebookEditor.Edit; +var + Notebook: TNewNotebook; +begin + { When a page is double-clicked, select the parent notebook } + if Component is TNewNotebookPage then begin + Notebook := TNewNotebookPage(Component).Notebook; + if Assigned(Notebook) then + Designer.SelectComponent(Notebook); + end +end; + +procedure TNewNotebookEditor.ExecuteVerb(Index: Integer); +var + Notebook: TNewNotebook; + Page: TNewNotebookPage; +begin + { Find the notebook component to operate on. Note that this same editor class + is used for both TNewNotebook and TNewNotebookPage. } + if Component is TNewNotebookPage then begin + Notebook := TNewNotebookPage(Component).Notebook; + if Notebook = nil then + Exit; { just in case } + end + else + Notebook := Component as TNewNotebook; + + case Index of + 0, 1: + begin + Page := Notebook.FindNextPage(Notebook.ActivePage, Index = 0); + Notebook.ActivePage := Page; + Designer.Modified; + Designer.SelectComponent(Page); + end; + 3: + begin + Page := TNewNotebookPage.Create(Notebook.Owner); + Page.Name := Designer.UniqueName(Page.ClassName); + Page.Notebook := Notebook; + Notebook.ActivePage := Page; + Designer.Modified; + Designer.SelectComponent(Page); + end; + end; +end; + +function TNewNotebookEditor.GetVerbCount: Integer; +begin + Result := 4; +end; + +function TNewNotebookEditor.GetVerb(Index: Integer): String; +begin + case Index of + 0: Result := 'Next Page'; + 1: Result := 'Previous Page'; + 2: Result := '-'; + 3: Result := 'New Page'; + else + Result := ''; + end; +end; + +procedure Register; +begin + RegisterComponents('JR', [TNewNotebook]); + RegisterClass(TNewNotebookPage); + + RegisterComponentEditor(TNewNotebook, TNewNotebookEditor); + RegisterComponentEditor(TNewNotebookPage, TNewNotebookEditor); +end; + +end. diff --git a/Components/NewProgressBar.pas b/Components/NewProgressBar.pas new file mode 100644 index 00000000..8885dc15 --- /dev/null +++ b/Components/NewProgressBar.pas @@ -0,0 +1,155 @@ +unit NewProgressBar; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + TNewProgressBar component - a smooth 32 bit TProgressBar + + Note: themed animated progress bars and don't immediately show changes. + This applies both to Position and State. For example if you set State while the + progress bar is still moving towards a new Position, the new State doesnt show until + the moving animation has finished. +} + +interface + +uses + Messages, Classes, Controls, ComCtrls; + +type + TNewProgressBarState = (npbsNormal, npbsError, npbsPaused); + + TNewProgressBarStyle = (npbstNormal, npbstMarquee); + + TNewProgressBar = class(TWinControl) + private + FMin: LongInt; + FMax: LongInt; + FPosition: LongInt; + FState: TNewProgressBarState; + FStyle: TNewProgressBarStyle; + procedure SetMin(Value: LongInt); + procedure SetMax(Value: LongInt); + procedure SetPosition(Value: LongInt); + procedure SetState(Value: TNewProgressBarState); + procedure SetStyle(Value: TNewProgressBarStyle); + procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND; + protected + procedure CreateParams(var Params: TCreateParams); override; + procedure CreateWnd; override; + public + constructor Create(AOwner: TComponent); override; + published + property Anchors; + property Min: LongInt read FMin write SetMin; + property Max: LongInt read FMax write SetMax; + property Position: LongInt read FPosition write SetPosition default 0; + property State: TNewProgressBarState read FState write SetState default npbsNormal; + property Style: TNewProgressBarStyle read FStyle write SetStyle default npbstMarquee; + property Visible default True; + end; + +procedure Register; + +implementation + +uses + Windows, CommCtrl; + +procedure Register; +begin + RegisterComponents('JR', [TNewProgressBar]); +end; + +constructor TNewProgressBar.Create(AOwner: TComponent); +begin + inherited; + Width := 150; + Height := GetSystemMetrics(SM_CYVSCROLL); + FMin := 0; + FMax := 100; +end; + +procedure TNewProgressBar.CreateParams(var Params: TCreateParams); +const + PBS_SMOOTH = 1; + PBS_MARQUEE = 8; +begin + InitCommonControls; + inherited; + CreateSubClass(Params, PROGRESS_CLASS); + Params.Style := Params.Style or PBS_SMOOTH; + if Style = npbstMarquee then + Params.Style := Params.Style or PBS_MARQUEE; +end; + +procedure TNewProgressBar.CreateWnd; +const + PBM_SETMARQUEE = WM_USER+10; +begin + inherited CreateWnd; + SendMessage(Handle, PBM_SETRANGE, 0, MAKELPARAM(0, 65535)); + SetPosition(FPosition); + SetState(FState); + SendMessage(Handle, PBM_SETMARQUEE, WPARAM(FStyle = npbstMarquee), 0); +end; + +procedure TNewProgressBar.SetMin(Value: LongInt); +begin + FMin := Value; + SetPosition(FPosition); +end; + +procedure TNewProgressBar.SetMax(Value: LongInt); +begin + FMax := Value; + SetPosition(FPosition); +end; + +procedure TNewProgressBar.SetPosition(Value: LongInt); +begin + if Value < FMin then + Value := FMin + else if Value > FMax then + Value := FMax; + FPosition := Value; + if HandleAllocated and (FStyle <> npbstMarquee) then + SendMessage(Handle, PBM_SETPOS, MulDiv(Value - FMin, 65535, FMax - FMin), 0); +end; + +procedure TNewProgressBar.SetState(Value: TNewProgressBarState); +const + PBST_NORMAL = $0001; + PBST_ERROR = $0002; + PBST_PAUSED = $0003; + PBM_SETSTATE = WM_USER+16; + States: array[TNewProgressBarState] of UINT = (PBST_NORMAL, PBST_ERROR, PBST_PAUSED); +begin + FState := Value; + if HandleAllocated then + SendMessage(Handle, PBM_SETSTATE, States[Value], 0); +end; + +procedure TNewProgressBar.SetStyle(Value: TNewProgressBarStyle); +begin + if FStyle <> Value then begin + FStyle := Value; + RecreateWnd; + end; +end; + +procedure TNewProgressBar.WMEraseBkgnd(var Message: TWMEraseBkgnd); +begin + { Bypass TWinControl's default WM_ERASEBKGND handling. + On Windows Vista with COMCTL32 v6, a WM_ERASEBKGND message is sent every + time a progress bar's position changes. TWinControl.WMEraseBkgnd does a + FillRect on the whole client area, which results in ugly flickering. + Previous versions of Windows only sent a WM_ERASEBKGND message when a + progress bar moved backwards, so flickering was rarely apparent. } + DefaultHandler(Message); +end; + +end. diff --git a/Components/NewStaticText.pas b/Components/NewStaticText.pas new file mode 100644 index 00000000..5a2b9faf --- /dev/null +++ b/Components/NewStaticText.pas @@ -0,0 +1,287 @@ +unit NewStaticText; + +{ + TNewStaticText - similar to TStaticText but with multi-line AutoSize + support and a WordWrap property +} + +interface + +uses + Windows, Messages, SysUtils, Classes, Controls, Forms; + +type + TNewStaticText = class(TWinControl) + private + FAutoSize: Boolean; + FFocusControl: TWinControl; + FForceLTRReading: Boolean; + FLastAdjustBoundsRTL: Boolean; + FShowAccelChar: Boolean; + FWordWrap: Boolean; + procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR; + procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED; + procedure CMParentFontChanged(var Message: TMessage); message CM_PARENTFONTCHANGED; + procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED; + procedure AdjustBounds; + function CalcBounds: TPoint; + function GetDrawTextFlags: UINT; + procedure SetFocusControl(Value: TWinControl); + procedure SetForceLTRReading(Value: Boolean); + procedure SetShowAccelChar(Value: Boolean); + procedure SetWordWrap(Value: Boolean); + protected + procedure CreateParams(var Params: TCreateParams); override; + procedure Loaded; override; + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + procedure SetAutoSize(Value: Boolean); override; + public + constructor Create(AOwner: TComponent); override; + function AdjustHeight: Integer; + published + property Align; + property Anchors; + property AutoSize: Boolean read FAutoSize write SetAutoSize default True; + property Caption; + property Color; + property DragCursor; + property DragMode; + property Enabled; + property FocusControl: TWinControl read FFocusControl write SetFocusControl; + property Font; + property ForceLTRReading: Boolean read FForceLTRReading write SetForceLTRReading + default False; + property ParentColor; + property ParentFont; + property ParentShowHint; + property PopupMenu; + property ShowAccelChar: Boolean read FShowAccelChar write SetShowAccelChar + default True; + property ShowHint; + property TabOrder; + property TabStop; + property Visible; + property WordWrap: Boolean read FWordWrap write SetWordWrap default False; + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnStartDrag; + end; + +procedure Register; + +implementation + +uses + BidiUtils; + +procedure Register; +begin + RegisterComponents('JR', [TNewStaticText]); +end; + +{ TNewStaticText } + +constructor TNewStaticText.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + ControlStyle := [csCaptureMouse, csClickEvents, csSetCaption, + csOpaque, csReplicatable, csDoubleClicks]; + Width := 65; + Height := 17; + FAutoSize := True; + FShowAccelChar := True; + AdjustBounds; +end; + +procedure TNewStaticText.CreateParams(var Params: TCreateParams); +begin + inherited CreateParams(Params); + CreateSubClass(Params, 'STATIC'); + with Params do + begin + Style := Style or SS_NOTIFY; + if not SetBiDiStyles(Self, Params) then begin + { Quirk: No style is set for WordWrap=False in RTL mode; WS_EX_RIGHT + overrides SS_LEFTNOWORDWRAP, and there is no SS_RIGHTNOWORDWRAP style. + WordWrap=False still affects AdjustBounds, though. } + if not FWordWrap then Style := Style or SS_LEFTNOWORDWRAP; + end; + if not FShowAccelChar then Style := Style or SS_NOPREFIX; + if FForceLTRReading then ExStyle := ExStyle and not WS_EX_RTLREADING; + end; +end; + +procedure TNewStaticText.CMDialogChar(var Message: TCMDialogChar); +begin + if (FFocusControl <> nil) and Enabled and ShowAccelChar and + IsAccel(Message.CharCode, Caption) then + with FFocusControl do + if CanFocus then + begin + SetFocus; + Message.Result := 1; + end; +end; + +procedure TNewStaticText.CMFontChanged(var Message: TMessage); +begin + inherited; + AdjustBounds; +end; + +procedure TNewStaticText.CMParentFontChanged(var Message: TMessage); +begin + inherited; + { What we're really trapping here is changes to Parent. Recalculate size + if the new Parent's RTL setting is different. } + if IsParentRightToLeft(Self) <> FLastAdjustBoundsRTL then + AdjustBounds; +end; + +procedure TNewStaticText.CMTextChanged(var Message: TMessage); +begin + inherited; + Invalidate; + AdjustBounds; +end; + +procedure TNewStaticText.Loaded; +begin + inherited Loaded; + AdjustBounds; +end; + +function TNewStaticText.GetDrawTextFlags: UINT; +begin + Result := DT_EXPANDTABS or DT_NOCLIP; + if FWordWrap then Result := Result or DT_WORDBREAK; + if not FShowAccelChar then Result := Result or DT_NOPREFIX; + if IsParentRightToLeft(Self) then begin + { Note: DT_RTLREADING must be included even when just calculating the + size, since on certain fonts it can affect the width of characters. + (Consider the Hebrew string: 'a '#$F9' b'. On 2000 with Lucida Console + as the font, the spaces aren't drawn as wide with RTLREADING.) } + Result := Result or DT_RIGHT; + if not FForceLTRReading then + Result := Result or DT_RTLREADING; + end; +end; + +function TNewStaticText.CalcBounds: TPoint; +var + R: TRect; + S: String; + DC: HDC; +begin + { Note: The calculated width/height is actually one pixel wider/taller + than the size of the text, so that when Enabled=False the white shadow + does not get clipped } + R := Rect(0, 0, Width, 0); + if R.Right > 0 then Dec(R.Right); + + S := Caption; + if (S = '') or (FShowAccelChar and (S[1] = '&') and (S[2] = #0)) then + S := S + ' '; + + DC := GetDC(0); + try + SelectObject(DC, Font.Handle); + DrawText(DC, PChar(S), Length(S), R, DT_CALCRECT or GetDrawTextFlags); + finally + ReleaseDC(0, DC); + end; + + Result.X := R.Right + 1; + Result.Y := R.Bottom + 1; +end; + +procedure TNewStaticText.AdjustBounds; +var + NewBounds: TPoint; + NewLeft, NewWidth: Integer; +begin + if not (csLoading in ComponentState) and FAutoSize then + begin + FLastAdjustBoundsRTL := IsParentRightToLeft(Self); + + NewBounds := CalcBounds; + + NewLeft := Left; + NewWidth := Width; + if not FWordWrap then begin + NewWidth := NewBounds.X; + if IsParentFlipped(Self) then + Inc(NewLeft, Width - NewWidth); + end; + SetBounds(NewLeft, Top, NewWidth, NewBounds.Y); + end; +end; + +function TNewStaticText.AdjustHeight: Integer; +var + OldHeight: Integer; +begin + OldHeight := Height; + Height := CalcBounds.Y; + Result := Height - OldHeight; +end; + +procedure TNewStaticText.Notification(AComponent: TComponent; + Operation: TOperation); +begin + inherited Notification(AComponent, Operation); + if (Operation = opRemove) and (AComponent = FFocusControl) then + FFocusControl := nil; +end; + +procedure TNewStaticText.SetAutoSize(Value: Boolean); +begin + if FAutoSize <> Value then + begin + FAutoSize := Value; + if Value then AdjustBounds; + end; +end; + +procedure TNewStaticText.SetFocusControl(Value: TWinControl); +begin + FFocusControl := Value; + if Value <> nil then Value.FreeNotification(Self); +end; + +procedure TNewStaticText.SetForceLTRReading(Value: Boolean); +begin + if FForceLTRReading <> Value then begin + FForceLTRReading := Value; + RecreateWnd; + AdjustBounds; + end; +end; + +procedure TNewStaticText.SetShowAccelChar(Value: Boolean); +begin + if FShowAccelChar <> Value then + begin + FShowAccelChar := Value; + RecreateWnd; + AdjustBounds; + end; +end; + +procedure TNewStaticText.SetWordWrap(Value: Boolean); +begin + if FWordWrap <> Value then + begin + FWordWrap := Value; + RecreateWnd; + AdjustBounds; + end; +end; + +end. diff --git a/Components/NewTabSet.pas b/Components/NewTabSet.pas new file mode 100644 index 00000000..6f06ba2d --- /dev/null +++ b/Components/NewTabSet.pas @@ -0,0 +1,573 @@ +unit NewTabSet; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + TNewTabSet - modern VS-style tabs with theme support +} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Math, Generics.Collections, + ModernColors, NewUxTheme; + +type + TTabPosition = (tpTop, tpBottom); + + TBoolList = TList; + + TCloseButtonClickEvent = procedure(Sender: TObject; Index: Integer) of object; + + TNewTabSet = class(TCustomControl) + private + FCloseButtons: TBoolList; + FHints: TStrings; + FMenuThemeData: HTHEME; + FOnCloseButtonClick: TCloseButtonClickEvent; + FTabs: TStrings; + FTabIndex: Integer; + FTabPosition: TTabPosition; + FTabsOffset: Integer; + FTheme: TTheme; + FThemeDark: Boolean; + FHotIndex: Integer; + function GetTabRect(Index: Integer): TRect; + function GetCloseButtonRect(const TabRect: TRect): TRect; + procedure InvalidateTab(Index: Integer); + procedure CloseButtonsListChanged(Sender: TObject; const Item: Boolean; + Action: TCollectionNotification); + procedure TabsListChanged(Sender: TObject); + procedure HintsListChanged(Sender: TObject); + procedure SetCloseButtons(Value: TBoolList); + procedure SetTabs(Value: TStrings); + procedure SetTabIndex(Value: Integer); + procedure SetTabPosition(Value: TTabPosition); + procedure SetTheme(Value: TTheme); + procedure SetHints(const Value: TStrings); + procedure UpdateThemeData(const Open: Boolean); + procedure EnsureCurrentTabIsFullyVisible; + protected + procedure CMHintShow(var Message: TCMHintShow); message CM_HINTSHOW; + procedure WMMouseMove(var Message: TWMMouseMove); message WM_MOUSEMOVE; + procedure WMThemeChanged(var Message: TMessage); message WM_THEMECHANGED; + procedure CreateParams(var Params: TCreateParams); override; + procedure CreateWnd; override; + procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; + procedure UpdateHotIndex(NewHotIndex: Integer); + procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; + procedure Paint; override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + property CloseButtons: TBoolList read FCloseButtons write SetCloseButtons; + property Theme: TTheme read FTheme write SetTheme; + published + property Align; + property Font; + property Hints: TStrings read FHints write SetHints; + property ParentFont; + property TabIndex: Integer read FTabIndex write SetTabIndex; + property Tabs: TStrings read FTabs write SetTabs; + property TabPosition: TTabPosition read FTabPosition write SetTabPosition default tpBottom; + property PopupMenu; + property OnClick; + property OnCloseButtonClick: TCloseButtonClickEvent read FOnCloseButtonClick write FOnCloseButtonClick; + end; + +procedure Register; + +implementation + +uses + Types; + +procedure Register; +begin + RegisterComponents('JR', [TNewTabSet]); +end; + +procedure RGBToHSV(const R, G, B: Integer; var H, S: Double; var V: Integer); +var + Max, Min, C: Integer; +begin + Max := R; + if G > Max then Max := G; + if B > Max then Max := B; + Min := R; + if G < Min then Min := G; + if B < Min then Min := B; + + C := Max - Min; + if C = 0 then begin + H := 0; + S := 0; + end + else begin + if Max = R then + H := (60 * (G - B)) / C + else if Max = G then + H := (60 * (B - R)) / C + 120 + else if Max = B then + H := (60 * (R - G)) / C + 240; + if H < 0 then + H := H + 360; + S := C / Max; + end; + V := Max; +end; + +procedure HSVtoRGB(const H, S: Double; const V: Integer; var R, G, B: Integer); +var + I, P, Q, T: Integer; + F: Double; +begin + I := Trunc(H / 60); + F := Frac(H / 60); + P := Round(V * (1.0 - S)); + Q := Round(V * (1.0 - S * F)); + T := Round(V * (1.0 - S * (1.0 - F))); + case I of + 0: begin R := V; G := t; B := p; end; + 1: begin R := q; G := V; B := p; end; + 2: begin R := p; G := V; B := t; end; + 3: begin R := p; G := q; B := V; end; + 4: begin R := t; G := p; B := V; end; + 5: begin R := V; G := p; B := q; end; + else + { Should only get here with bogus input } + R := 0; G := 0; B := 0; + end; +end; + +function LightenColor(const Color: TColorRef; const Amount: Integer): TColorRef; +var + H, S: Double; + V, R, G, B: Integer; +begin + RGBtoHSV(Byte(Color), Byte(Color shr 8), Byte(Color shr 16), H, S, V); + Inc(V, Amount); + if V > 255 then + V := 255; + if V < 0 then + V := 0; + HSVtoRGB(H, S, V, R, G, B); + Result := R or (G shl 8) or (B shl 16); +end; + +{ TNewTabSet } + +const + TabPaddingX = 5; + TabPaddingY = 3; + TabSpacing = 1; + CloseButtonSizeX = 12; + +constructor TNewTabSet.Create(AOwner: TComponent); +begin + inherited; + FCloseButtons := TBoolList.Create; + FCloseButtons.OnNotify := CloseButtonsListChanged; + FTabs := TStringList.Create; + TStringList(FTabs).OnChange := TabsListChanged; + FTabPosition := tpBottom; + FHints := TStringList.Create; + TStringList(FHints).OnChange := HintsListChanged; + ControlStyle := ControlStyle + [csOpaque]; + Width := 129; + Height := 21; + FHotIndex := -1; +end; + +procedure TNewTabSet.CreateParams(var Params: TCreateParams); +begin + inherited; + with Params.WindowClass do + style := style and not (CS_HREDRAW or CS_VREDRAW); +end; + +procedure TNewTabSet.CreateWnd; +begin + inherited; + UpdateThemeData(True); +end; + +destructor TNewTabSet.Destroy; +begin + UpdateThemeData(False); + FTabs.Free; + inherited; +end; + +procedure TNewTabSet.CMHintShow(var Message: TCMHintShow); +var + I: Integer; + R: TRect; +begin + inherited; + if Message.HintInfo.HintControl = Self then begin + for I := 0 to FTabs.Count-1 do begin + if I >= FHints.Count then + Break; + R := GetTabRect(I); + if PtInRect(R, Message.HintInfo.CursorPos) then begin + Message.HintInfo.HintStr := FHints[I]; + Message.HintInfo.CursorRect := R; + Break; + end; + end; + end; +end; + +procedure TNewTabSet.WMMouseMove(var Message: TWMMouseMove); +begin + var Pos := SmallPointToPoint(Message.Pos); + var NewHotIndex := -1; + + for var I := 0 to FTabs.Count-1 do begin + if I <> TabIndex then begin + var R := GetTabRect(I); + if PtInRect(R, TPoint.Create(Pos.X, Pos.Y)) then begin + NewHotIndex := I; + Break; + end; + end; + end; + + UpdateHotIndex(NewHotIndex); +end; + +procedure TNewTabSet.WMThemeChanged(var Message: TMessage); +begin + { Don't Run to Cursor into this function, it will interrupt up the theme change } + UpdateThemeData(True); + inherited; +end; + +function TNewTabSet.GetTabRect(Index: Integer): TRect; +var + CR: TRect; + I, SizeX, SizeY: Integer; + Size: TSize; +begin + CR := ClientRect; + Canvas.Font.Assign(Font); + if FTabPosition = tpBottom then + Result.Top := 0; + Result.Right := 4 - FTabsOffset; + for I := 0 to FTabs.Count-1 do begin + Size := Canvas.TextExtent(FTabs[I]); + SizeX := Size.cx + (TabPaddingX * 2) + TabSpacing; + if (I < FCloseButtons.Count) and FCloseButtons[I] then + Inc(SizeX, MulDiv(CloseButtonSizeX, CurrentPPI, 96)); + SizeY := Size.cy + (TabPaddingY * 2); + if FTabPosition = tpTop then + Result.Top := CR.Bottom - SizeY; + Result := Bounds(Result.Right, Result.Top, SizeX, SizeY); + if Index = I then + Exit; + end; + SetRectEmpty(Result); +end; + +function TNewTabSet.GetCloseButtonRect(const TabRect: TRect): TRect; +begin + Result := TRect.Create(TabRect.Right - MulDiv(CloseButtonSizeX, CurrentPPI, 96) - TabPaddingX div 2, + TabRect.Top, TabRect.Right - TabPaddingX div 2, TabRect.Bottom); +end; + +procedure TNewTabSet.InvalidateTab(Index: Integer); +var + R: TRect; +begin + if HandleAllocated and (Index >= 0) and (Index < FTabs.Count) then begin + R := GetTabRect(Index); + { Inc R.Right since the trailing separator of a tab overwrites the first + pixel of the next tab } + Inc(R.Right); + InvalidateRect(Handle, @R, False); + end; +end; + +procedure TNewTabSet.CloseButtonsListChanged(Sender: TObject; const Item: Boolean; + Action: TCollectionNotification); +begin + FHotIndex := -1; + Invalidate; +end; + +procedure TNewTabSet.TabsListChanged(Sender: TObject); +begin + FHotIndex := -1; + Invalidate; +end; + +procedure TNewTabSet.HintsListChanged(Sender: TObject); +begin + ShowHint := FHints.Count > 0; +end; + +procedure TNewTabSet.MouseDown(Button: TMouseButton; Shift: TShiftState; X, + Y: Integer); +var + I: Integer; + R: TRect; +begin + if Button = mbLeft then begin + for I := 0 to FTabs.Count-1 do begin + R := GetTabRect(I); + if (X >= R.Left) and (X < R.Right) then begin + if ((I = TabIndex) or (I = FHotIndex)) and (I < FCloseButtons.Count) and FCloseButtons[I] then begin + var R2 := GetCloseButtonRect(R); + if PtInRect(R2, TPoint.Create(X, Y)) then begin + if Assigned(OnCloseButtonClick) then + OnCloseButtonClick(Self, I); + Break; + end; + end; + TabIndex := I; + Break; + end; + end; + end; +end; + +procedure TNewTabSet.UpdateHotIndex(NewHotIndex: Integer); +begin + var OldHotIndex := FHotIndex; + if NewHotIndex <> OldHotIndex then begin + FHotIndex := NewHotIndex; + if OldHotIndex <> -1 then + InvalidateTab(OldHotIndex); + if NewHotIndex <> -1 then + InvalidateTab(NewHotIndex); + end; +end; + +procedure TNewTabSet.CMMouseLeave(var Message: TMessage); +begin + UpdateHotIndex(-1); + inherited; +end; + +procedure TNewTabSet.Paint; +var + HighColorMode: Boolean; + + procedure DrawCloseButton(const TabRect: TRect; const TabIndex: Integer); + const + MENU_SYSTEMCLOSE = 17; + MSYSC_NORMAL = 1; + begin + if (TabIndex < FCloseButtons.Count) and FCloseButtons[TabIndex] then begin + var R := GetCloseButtonRect(TabRect); + if FMenuThemeData <> 0 then begin + var Offset := MulDiv(1, CurrentPPI, 96); + Inc(R.Left, Offset); + Inc(R.Top, Offset); + DrawThemeBackground(FMenuThemeData, Canvas.Handle, MENU_SYSTEMCLOSE, MSYSC_NORMAL, R, nil); + end else begin + InflateRect(R, -MulDiv(3, CurrentPPI, 96), -MulDiv(6, CurrentPPI, 96)); + Canvas.Pen.Color := Canvas.Font.Color; + Canvas.MoveTo(R.Left, R.Top); + Canvas.LineTo(R.Right, R.Bottom); + Canvas.MoveTo(R.Left, R.Bottom-1); + Canvas.LineTo(R.Right, R.Top-1); + end; + end; + end; + + procedure DrawTabs(const SelectedTab: Boolean); + var + I: Integer; + R: TRect; + begin + for I := 0 to FTabs.Count-1 do begin + R := GetTabRect(I); + if SelectedTab and (FTabIndex = I) then begin + Dec(R.Right, TabSpacing); + if FTheme <> nil then + Canvas.Brush.Color := FTheme.Colors[tcBack] + else + Canvas.Brush.Color := clBtnFace; + Canvas.FillRect(R); + + if FTheme <> nil then + Canvas.Font.Color := FTheme.Colors[tcFore] + else + Canvas.Font.Color := clBtnText; + Canvas.TextOut(R.Left + TabPaddingX, R.Top + TabPaddingY, FTabs[I]); + DrawCloseButton(R, I); + ExcludeClipRect(Canvas.Handle, R.Left, R.Top, R.Right, R.Bottom); + Break; + end; + if not SelectedTab and (FTabIndex <> I) then begin + if FHotIndex = I then begin + if FTheme <> nil then + Canvas.Font.Color := FTheme.Colors[tcFore] + else + Canvas.Font.Color := clBtnText; + end else if FTheme <> nil then + Canvas.Font.Color := FTheme.Colors[tcMarginFore] + else if HighColorMode and (ColorToRGB(clBtnFace) <> clBlack) then + Canvas.Font.Color := LightenColor(ColorToRGB(clBtnShadow), -43) + else begin + { If the button face color is black, or if running in low color mode, + use plain clBtnHighlight as the text color } + Canvas.Font.Color := clBtnHighlight; + end; + Canvas.TextOut(R.Left + TabPaddingX, R.Top + TabPaddingY, FTabs[I]); + if FHotIndex = I then + DrawCloseButton(R, I); + end; + end; + end; + +var + CR: TRect; +begin + Canvas.Font.Assign(Font); + + HighColorMode := (GetDeviceCaps(Canvas.Handle, BITSPIXEL) * + GetDeviceCaps(Canvas.Handle, PLANES)) >= 15; + + CR := ClientRect; + + { Work around an apparent NT 4.0/2000/??? bug. If the width of the DC is + greater than the width of the screen, then any call to ExcludeClipRect + inexplicably shrinks the DC's clipping rectangle to the screen width. + Calling IntersectClipRect first with the entire client area as the + rectangle solves this (don't ask me why). } + IntersectClipRect(Canvas.Handle, CR.Left, CR.Top, CR.Right, CR.Bottom); + + { Selected tab } + DrawTabs(True); + + { Top or bottom line } + if FTheme <> nil then + Canvas.Pen.Color := FTheme.Colors[tcBack] + else + Canvas.Pen.Color := clBtnFace; + if FTabPosition = tpBottom then begin + Canvas.MoveTo(0, 0); + Canvas.LineTo(CR.Right, 0); + end else begin + Canvas.MoveTo(0, CR.Bottom-1); + Canvas.LineTo(CR.Right, CR.Bottom-1); + end; + + { Background fill } + if FTheme <> nil then + Canvas.Brush.Color := FTheme.Colors[tcMarginBack] + else if HighColorMode then + Canvas.Brush.Color := LightenColor(ColorToRGB(clBtnFace), 35) + else + Canvas.Brush.Color := clBtnShadow; + if FTabPosition = tpBottom then + Inc(CR.Top) + else + Dec(CR.Bottom); + Canvas.FillRect(CR); + + { Non-selected tabs } + DrawTabs(False); +end; + +procedure TNewTabSet.SetCloseButtons(Value: TBoolList); +begin + FCloseButtons.Clear; + for var V in Value do + FCloseButtons.Add(V); +end; + +procedure TNewTabSet.SetHints(const Value: TStrings); +begin + FHints.Assign(Value); +end; + +procedure TNewTabSet.SetTabIndex(Value: Integer); +begin + if FTabIndex <> Value then begin + InvalidateTab(FTabIndex); + FTabIndex := Value; + InvalidateTab(Value); + EnsureCurrentTabIsFullyVisible; + Click; + end; +end; + +procedure TNewTabSet.SetTabPosition(Value: TTabPosition); +begin + if FTabPosition <> Value then begin + FTabPosition := Value; + Invalidate; + end; +end; + +procedure TNewTabSet.SetTabs(Value: TStrings); +begin + FTabs.Assign(Value); + if FTabIndex >= FTabs.Count then + SetTabIndex(FTabs.Count-1); +end; + +procedure TNewTabSet.SetTheme(Value: TTheme); +begin + if FTheme <> Value then begin + FTheme := Value; + var NewThemeDark := (FTheme <> nil) and FTheme.Dark; + if FThemeDark <> NewThemeDark then + UpdateThemeData(True); + FThemeDark := NewThemeDark; + Invalidate; + end; +end; + +procedure TNewTabSet.UpdateThemeData(const Open: Boolean); +begin + if FMenuThemeData <> 0 then begin + CloseThemeData(FMenuThemeData); + FMenuThemeData := 0; + end; + + if Open and UseThemes then begin + if (FTheme <> nil) and FTheme.Dark then + FMenuThemeData := OpenThemeData(Handle, 'DarkMode::Menu'); + if FMenuThemeData = 0 then + FMenuThemeData := OpenThemeData(Handle, 'Menu'); + end; +end; + +procedure TNewTabSet.EnsureCurrentTabIsFullyVisible; +var + rcTab, rcCtl, rcLast: TRect; + iExtra, iDelta, iNewOffset: Integer; +begin + rcCtl := ClientRect; + rcTab := GetTabRect(FTabIndex); + + { Check and modify tabs offset so everything fits } + iExtra := Min(rcCtl.Width div 2, rcTab.Width * 4); { arbitrary value, adjust as needed } + iDelta := rcTab.Width div 2; { arbitrary value, adjust as needed } + + { Left side is easy, limit is always 0 } + if rcTab.Left < rcCtl.Left + iDelta then begin + FTabsOffset := Max(0, FTabsOffset - rcCtl.Left - rcTab.Left - iExtra); + Invalidate; + end; + + { Right side limit depends on last tab and total available space } + if rcTab.Right > rcCtl.Right - iDelta then begin + iNewOffset := FTabsOffset + (rcTab.Right - rcCtl.Right) + iExtra; + FTabsOffset := 0; { We need the last tabs leftmost position w/o any offset } + rcLast := GetTabRect(FTabs.Count-1); + FTabsOffset := Max(0, Min(iNewOffset, rcLast.Right - rcCtl.Width + 10)); + Invalidate; + end; +end; + + +end. diff --git a/Components/NewUxTheme.pas b/Components/NewUxTheme.pas new file mode 100644 index 00000000..1fec5942 --- /dev/null +++ b/Components/NewUxTheme.pas @@ -0,0 +1,1297 @@ +{******************************************************************************} +{ } +{ Visual Styles (Themes) API interface Unit for Object Pascal } +{ } +{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft } +{ Corporation. All Rights Reserved. } +{ } +{ The original file is: uxtheme.h, released June 2001. The original Pascal } +{ code is: UxTheme.pas, released July 2001. The initial developer of the } +{ Pascal code is Marcel van Brakel (brakelm@chello.nl). } +{ } +{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 } +{ Marcel van Brakel. All Rights Reserved. } +{ } +{ Portions created by Mike Lischke are Copyright (C) 1999-2002 } +{ Mike Lischke. All Rights Reserved. } +{ } +{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) } +{ } +{ You may retrieve the latest version of this file at the Project JEDI home } +{ page, located at http://delphi-jedi.org or my personal homepage located at } +{ http://members.chello.nl/m.vanbrakel2 } +{ } +{ The contents of this file are used with permission, subject to the Mozilla } +{ Public License Version 1.1 (the "License"); you may not use this file except } +{ in compliance with the License. You may obtain a copy of the License at } +{ http://www.mozilla.org/MPL/MPL-1.1.html } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, } +{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for } +{ the specific language governing rights and limitations under the License. } +{ } +{ Alternatively, the contents of this file may be used under the terms of the } +{ GNU Lesser General Public License (the "LGPL License"), in which case the } +{ provisions of the LGPL License are applicable instead of those above. } +{ If you wish to allow use of your version of this file only under the terms } +{ of the LGPL License and not to allow others to use your version of this file } +{ under the MPL, indicate your decision by deleting the provisions above and } +{ replace them with the notice and other provisions required by the LGPL } +{ License. If you do not delete the provisions above, a recipient may use } +{ your version of this file under either the MPL or the LGPL License. } +{ } +{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html } +{ } +{******************************************************************************} + +{ Simplified by Martijn Laan for Inno Setup + + Cannot be replaced by Delphi's built in Winapi.UxTheme.pas even though it has + the same functions: see the comment at the bottom of this file. For this + reason this unit has been renamed to NewUxTheme. + + Additionally this unit includes SetPreferredAppMode, FlushMenuThemes, and + WM_UAHDRAWMENU(ITEM). } + +unit NewUxTheme; + +{$ALIGN ON} +{$MINENUMSIZE 4} + +interface + +uses + Windows; + +procedure FreeThemeLibrary; +function InitThemeLibrary: Boolean; +function UseThemes: Boolean; + +const + WM_THEMECHANGED = $031A; + +type + HIMAGELIST = THANDLE; // TODO TEMPORARY + HTHEME = THANDLE; // handle to a section of theme data for class + +//---------------------------------------------------------------------------------------------------------------------- +// NOTE: PartId's and StateId's used in the theme API are defined in the +// hdr file using the TM_PART and TM_STATE macros. For +// example, "TM_PART(BP, PUSHBUTTON)" defines the PartId "BP_PUSHBUTTON". +//---------------------------------------------------------------------------------------------------------------------- +// OpenThemeData() - Open the theme data for the specified HWND and +// semi-colon separated list of class names. +// +// OpenThemeData() will try each class name, one at +// a time, and use the first matching theme info +// found. If a match is found, a theme handle +// to the data is returned. If no match is found, +// a "NULL" handle is returned. +// +// When the window is destroyed or a WM_THEMECHANGED +// msg is received, "CloseThemeData()" should be +// called to close the theme handle. +// +// hwnd - window handle of the control/window to be themed +// +// pszClassList - class name (or list of names) to match to theme data +// section. if the list contains more than one name, +// the names are tested one at a time for a match. +// If a match is found, OpenThemeData() returns a +// theme handle associated with the matching class. +// This param is a list (instead of just a single +// class name) to provide the class an opportunity +// to get the "best" match between the class and +// the current theme. For example, a button might +// pass L"OkButton, Button" if its ID=ID_OK. If +// the current theme has an entry for OkButton, +// that will be used. Otherwise, we fall back on +// the normal Button entry. +//---------------------------------------------------------------------------------------------------------------------- + +var + OpenThemeData: function(hwnd: HWND; pszClassList: LPCWSTR): HTHEME; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// CloseTHemeData() - closes the theme data handle. This should be done +// when the window being themed is destroyed or +// whenever a WM_THEMECHANGED msg is received +// (followed by an attempt to create a new Theme data +// handle). +// +// hTheme - open theme data handle (returned from prior call +// to OpenThemeData() API). +//---------------------------------------------------------------------------------------------------------------------- + +var + CloseThemeData: function(hTheme: HTHEME): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// functions for basic drawing support +//---------------------------------------------------------------------------------------------------------------------- +// The following methods are the theme-aware drawing services. +// Controls/Windows are defined in drawable "parts" by their author: a +// parent part and 0 or more child parts. Each of the parts can be +// described in "states" (ex: disabled, hot, pressed). +//---------------------------------------------------------------------------------------------------------------------- +// For the list of all themed classes and the definition of all +// parts and states, see the file "tmschmea.h". +//---------------------------------------------------------------------------------------------------------------------- +// Each of the below methods takes a "iPartId" param to specify the +// part and a "iStateId" to specify the state of the part. +// "iStateId=0" refers to the root part. "iPartId" = "0" refers to +// the root class. +//---------------------------------------------------------------------------------------------------------------------- +// Note: draw operations are always scaled to fit (and not to exceed) +// the specified "Rect". +//---------------------------------------------------------------------------------------------------------------------- + +//---------------------------------------------------------------------------------------------------------------------- +// DrawThemeBackground() +// - draws the theme-specified border and fill for +// the "iPartId" and "iStateId". This could be +// based on a bitmap file, a border and fill, or +// other image description. +// +// hTheme - theme data handle +// hdc - HDC to draw into +// iPartId - part number to draw +// iStateId - state number (of the part) to draw +// pRect - defines the size/location of the part +// pClipRect - optional clipping rect (don't draw outside it) +//---------------------------------------------------------------------------------------------------------------------- + +var + DrawThemeBackground: function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; + pClipRect: PRECT): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +//----- DrawThemeText() flags ---- + +const + DTT_GRAYED = $1; // draw a grayed-out string + +//---------------------------------------------------------------------------------------------------------------------- +// DrawThemeText() - draws the text using the theme-specified +// color and font for the "iPartId" and +// "iStateId". +// +// hTheme - theme data handle +// hdc - HDC to draw into +// iPartId - part number to draw +// iStateId - state number (of the part) to draw +// pszText - actual text to draw +// dwCharCount - number of chars to draw (-1 for all) +// dwTextFlags - same as DrawText() "uFormat" param +// dwTextFlags2 - additional drawing options +// pRect - defines the size/location of the part +//---------------------------------------------------------------------------------------------------------------------- + +var + DrawThemeText: function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; pszText: LPCWSTR; iCharCount: Integer; + dwTextFlags, dwTextFlags2: DWORD; const pRect: TRect): HRESULT; stdcall; + +type + DTT_CALLBACK_PROC = function(hdc: HDC; pszText: LPWSTR; cchText: Integer; + prc: PRect; dwFlags: UINT; lParam: LPARAM): Integer; stdcall; + TFNDTTCallbackProc = DTT_CALLBACK_PROC; + + DTTOPTS = record + dwSize: DWORD; // size of the struct + dwFlags: DWORD; // which options have been specified + crText: COLORREF; // color to use for text fill + crBorder: COLORREF; // color to use for text outline + crShadow: COLORREF; // color to use for text shadow + iTextShadowType: Integer; // TST_SINGLE or TST_CONTINUOUS + ptShadowOffset: TPoint; // where shadow is drawn (relative to text) + iBorderSize: Integer; // Border radius around text + iFontPropId: Integer; // Font property to use for the text instead of TMT_FONT + iColorPropId: Integer; // Color property to use for the text instead of TMT_TEXTCOLOR + iStateId: Integer; // Alternate state id + fApplyOverlay: BOOL; // Overlay text on top of any text effect? + iGlowSize: Integer; // Glow radious around text + pfnDrawTextCallback: TFNDTTCallbackProc;// Callback for DrawText + lParam: LPARAM; // Parameter for callback + end; + TDTTOpts = DTTOPTS; + +var + DrawThemeTextEx: function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; pszText: LPCWSTR; iCharCount: Integer; + dwTextFlags: DWORD; pRect: PRect; var pOptions: TDTTOpts): HResult; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeBackgroundContentRect() +// - gets the size of the content for the theme-defined +// background. This is usually the area inside +// the borders or Margins. +// +// hTheme - theme data handle +// hdc - (optional) device content to be used for drawing +// iPartId - part number to draw +// iStateId - state number (of the part) to draw +// pBoundingRect - the outer RECT of the part being drawn +// pContentRect - RECT to receive the content area +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeBackgroundContentRect: function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; + const pBoundingRect: TRect; pContentRect: PRECT): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeBackgroundExtent() - calculates the size/location of the theme- +// specified background based on the +// "pContentRect". +// +// hTheme - theme data handle +// hdc - (optional) device content to be used for drawing +// iPartId - part number to draw +// iStateId - state number (of the part) to draw +// pContentRect - RECT that defines the content area +// pBoundingRect - RECT to receive the overall size/location of part +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeBackgroundExtent: function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pContentRect: TRect; + var pExtentRect: TRect): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- + +type + THEMESIZE = ( + TS_MIN, // minimum size + TS_TRUE, // size without stretching + TS_DRAW // size that theme mgr will use to draw part + ); + TThemeSize = THEMESIZE; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemePartSize() - returns the specified size of the theme part +// +// hTheme - theme data handle +// hdc - HDC to select font into & measure against +// iPartId - part number to retrieve size for +// iStateId - state number (of the part) +// prc - (optional) rect for part drawing destination +// eSize - the type of size to be retreived +// psz - receives the specified size of the part +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemePartSize: function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; prc: PRECT; eSize: THEMESIZE; + var psz: TSize): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeTextExtent() - calculates the size/location of the specified +// text when rendered in the Theme Font. +// +// hTheme - theme data handle +// hdc - HDC to select font & measure into +// iPartId - part number to draw +// iStateId - state number (of the part) +// pszText - the text to be measured +// dwCharCount - number of chars to draw (-1 for all) +// dwTextFlags - same as DrawText() "uFormat" param +// pszBoundingRect - optional: to control layout of text +// pszExtentRect - receives the RECT for text size/location +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeTextExtent: function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; pszText: LPCWSTR; + iCharCount: Integer; dwTextFlags: DWORD; pBoundingRect: PRECT; var pExtentRect: TRect): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeTextMetrics() +// - returns info about the theme-specified font +// for the part/state passed in. +// +// hTheme - theme data handle +// hdc - optional: HDC for screen context +// iPartId - part number to draw +// iStateId - state number (of the part) +// ptm - receives the font info +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeTextMetrics: function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; + var ptm: TTEXTMETRIC): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeBackgroundRegion() +// - computes the region for a regular or partially +// transparent theme-specified background that is +// bound by the specified "pRect". +// If the rectangle is empty, sets the HRGN to NULL +// and return S_FALSE. +// +// hTheme - theme data handle +// hdc - optional HDC to draw into (DPI scaling) +// iPartId - part number to draw +// iStateId - state number (of the part) +// pRect - the RECT used to draw the part +// pRegion - receives handle to calculated region +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeBackgroundRegion: function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; + var pRegion: HRGN): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +//----- HitTestThemeBackground, HitTestThemeBackgroundRegion flags ---- + +// Theme background segment hit test flag (default). possible return values are: +// HTCLIENT: hit test succeeded in the middle background segment +// HTTOP, HTLEFT, HTTOPLEFT, etc: // hit test succeeded in the the respective theme background segment. + +const + HTTB_BACKGROUNDSEG = $0000; + +// Fixed border hit test option. possible return values are: +// HTCLIENT: hit test succeeded in the middle background segment +// HTBORDER: hit test succeeded in any other background segment + + HTTB_FIXEDBORDER = $0002; // Return code may be either HTCLIENT or HTBORDER. + +// Caption hit test option. Possible return values are: +// HTCAPTION: hit test succeeded in the top, top left, or top right background segments +// HTNOWHERE or another return code, depending on absence or presence of accompanying flags, resp. + + HTTB_CAPTION = $0004; + +// Resizing border hit test flags. Possible return values are: +// HTCLIENT: hit test succeeded in middle background segment +// HTTOP, HTTOPLEFT, HTLEFT, HTRIGHT, etc: hit test succeeded in the respective system resizing zone +// HTBORDER: hit test failed in middle segment and resizing zones, but succeeded in a background border segment + + HTTB_RESIZINGBORDER_LEFT = $0010; // Hit test left resizing border, + HTTB_RESIZINGBORDER_TOP = $0020; // Hit test top resizing border + HTTB_RESIZINGBORDER_RIGHT = $0040; // Hit test right resizing border + HTTB_RESIZINGBORDER_BOTTOM = $0080; // Hit test bottom resizing border + + HTTB_RESIZINGBORDER = (HTTB_RESIZINGBORDER_LEFT or HTTB_RESIZINGBORDER_TOP or + HTTB_RESIZINGBORDER_RIGHT or HTTB_RESIZINGBORDER_BOTTOM); + +// Resizing border is specified as a template, not just window edges. +// This option is mutually exclusive with HTTB_SYSTEMSIZINGWIDTH; HTTB_SIZINGTEMPLATE takes precedence + + HTTB_SIZINGTEMPLATE = $0100; + +// Use system resizing border width rather than theme content margins. +// This option is mutually exclusive with HTTB_SIZINGTEMPLATE, which takes precedence. + + HTTB_SYSTEMSIZINGMARGINS = $0200; + +//---------------------------------------------------------------------------------------------------------------------- +// HitTestThemeBackground() +// - returns a HitTestCode (a subset of the values +// returned by WM_NCHITTEST) for the point "ptTest" +// within the theme-specified background +// (bound by pRect). "pRect" and "ptTest" should +// both be in the same coordinate system +// (client, screen, etc). +// +// hTheme - theme data handle +// hdc - HDC to draw into +// iPartId - part number to test against +// iStateId - state number (of the part) +// pRect - the RECT used to draw the part +// hrgn - optional region to use; must be in same coordinates as +// - pRect and pTest. +// ptTest - the hit point to be tested +// dwOptions - HTTB_xxx constants +// pwHitTestCode - receives the returned hit test code - one of: +// +// HTNOWHERE, HTLEFT, HTTOPLEFT, HTBOTTOMLEFT, +// HTRIGHT, HTTOPRIGHT, HTBOTTOMRIGHT, +// HTTOP, HTBOTTOM, HTCLIENT +//---------------------------------------------------------------------------------------------------------------------- + +var + HitTestThemeBackground: function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; dwOptions: DWORD; + const pRect: TRect; hrgn: HRGN; ptTest: TPoint; var pwHitTestCode: WORD): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// DrawThemeEdge() - Similar to the DrawEdge() API, but uses part colors +// and is high-DPI aware +// hTheme - theme data handle +// hdc - HDC to draw into +// iPartId - part number to draw +// iStateId - state number of part +// pDestRect - the RECT used to draw the line(s) +// uEdge - Same as DrawEdge() API +// uFlags - Same as DrawEdge() API +// pContentRect - Receives the interior rect if (uFlags & BF_ADJUST) +//---------------------------------------------------------------------------------------------------------------------- + +var + DrawThemeEdge: function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pDestRect: TRect; uEdge, + uFlags: UINT; pContentRect: PRECT): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// DrawThemeIcon() - draws an image within an imagelist based on +// a (possible) theme-defined effect. +// +// hTheme - theme data handle +// hdc - HDC to draw into +// iPartId - part number to draw +// iStateId - state number of part +// pRect - the RECT to draw the image within +// himl - handle to IMAGELIST +// iImageIndex - index into IMAGELIST (which icon to draw) +//---------------------------------------------------------------------------------------------------------------------- + +var + DrawThemeIcon: function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId: Integer; const pRect: TRect; himl: HIMAGELIST; + iImageIndex: Integer): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// IsThemePartDefined() - returns TRUE if the theme has defined parameters +// for the specified "iPartId" and "iStateId". +// +// hTheme - theme data handle +// iPartId - part number to find definition for +// iStateId - state number of part +//---------------------------------------------------------------------------------------------------------------------- + +var + IsThemePartDefined: function(hTheme: HTHEME; iPartId, iStateId: Integer): BOOL; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// IsThemeBackgroundPartiallyTransparent() +// - returns TRUE if the theme specified background for +// the part/state has transparent pieces or +// alpha-blended pieces. +// +// hTheme - theme data handle +// iPartId - part number +// iStateId - state number of part +//---------------------------------------------------------------------------------------------------------------------- + +var + IsThemeBackgroundPartiallyTransparent: function(hTheme: HTHEME; iPartId, iStateId: Integer): BOOL; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// lower-level theme information services +//---------------------------------------------------------------------------------------------------------------------- +// The following methods are getter routines for each of the Theme Data types. +// Controls/Windows are defined in drawable "parts" by their author: a +// parent part and 0 or more child parts. Each of the parts can be +// described in "states" (ex: disabled, hot, pressed). +//---------------------------------------------------------------------------------------------------------------------- +// Each of the below methods takes a "iPartId" param to specify the +// part and a "iStateId" to specify the state of the part. +// "iStateId=0" refers to the root part. "iPartId" = "0" refers to +// the root class. +//---------------------------------------------------------------------------------------------------------------------- +// Each method also take a "iPropId" param because multiple instances of +// the same primitive type can be defined in the theme schema. +//---------------------------------------------------------------------------------------------------------------------- + + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeColor() - Get the value for the specified COLOR property +// +// hTheme - theme data handle +// iPartId - part number +// iStateId - state number of part +// iPropId - the property number to get the value for +// pColor - receives the value of the property +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeColor: function(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer; var pColor: COLORREF): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeMetric() - Get the value for the specified metric/size +// property +// +// hTheme - theme data handle +// hdc - (optional) hdc to be drawn into (DPI scaling) +// iPartId - part number +// iStateId - state number of part +// iPropId - the property number to get the value for +// piVal - receives the value of the property +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeMetric: function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId, iPropId: Integer; + var piVal: Integer): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeString() - Get the value for the specified string property +// +// hTheme - theme data handle +// iPartId - part number +// iStateId - state number of part +// iPropId - the property number to get the value for +// pszBuff - receives the string property value +// cchMaxBuffChars - max. number of chars allowed in pszBuff +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeString: function(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer; pszBuff: LPWSTR; + cchMaxBuffChars: Integer): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeBool() - Get the value for the specified BOOL property +// +// hTheme - theme data handle +// iPartId - part number +// iStateId - state number of part +// iPropId - the property number to get the value for +// pfVal - receives the value of the property +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeBool: function(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer; var pfVal: BOOL): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeInt() - Get the value for the specified int property +// +// hTheme - theme data handle +// iPartId - part number +// iStateId - state number of part +// iPropId - the property number to get the value for +// piVal - receives the value of the property +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeInt: function(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer; var piVal: Integer): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeEnumValue() - Get the value for the specified ENUM property +// +// hTheme - theme data handle +// iPartId - part number +// iStateId - state number of part +// iPropId - the property number to get the value for +// piVal - receives the value of the enum (cast to int*) +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeEnumValue: function(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer; var piVal: Integer): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemePosition() - Get the value for the specified position +// property +// +// hTheme - theme data handle +// iPartId - part number +// iStateId - state number of part +// iPropId - the property number to get the value for +// pPoint - receives the value of the position property +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemePosition: function(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer;var pPoint: TPoint): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeFont() - Get the value for the specified font property +// +// hTheme - theme data handle +// hdc - (optional) hdc to be drawn to (DPI scaling) +// iPartId - part number +// iStateId - state number of part +// iPropId - the property number to get the value for +// pFont - receives the value of the LOGFONT property +// (scaled for the current logical screen dpi) +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeFont: function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId, iPropId: Integer; + var pFont: TLOGFONT): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeRect() - Get the value for the specified RECT property +// +// hTheme - theme data handle +// iPartId - part number +// iStateId - state number of part +// iPropId - the property number to get the value for +// pRect - receives the value of the RECT property +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeRect: function(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer; var pRect: TRect): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- + +type + _MARGINS = record + cxLeftWidth: Integer; // width of left border that retains its size + cxRightWidth: Integer; // width of right border that retains its size + cyTopHeight: Integer; // height of top border that retains its size + cyBottomHeight: Integer; // height of bottom border that retains its size + end; + MARGINS = _MARGINS; + PMARGINS = ^MARGINS; + TMargins = MARGINS; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeMargins() - Get the value for the specified MARGINS property +// +// hTheme - theme data handle +// hdc - (optional) hdc to be used for drawing +// iPartId - part number +// iStateId - state number of part +// iPropId - the property number to get the value for +// prc - RECT for area to be drawn into +// pMargins - receives the value of the MARGINS property +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeMargins: function(hTheme: HTHEME; hdc: HDC; iPartId, iStateId, iPropId: Integer; prc: PRECT; + var pMargins: MARGINS): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- + +const + MAX_INTLIST_COUNT = 10; + +type + _INTLIST = record + iValueCount: Integer; // number of values in iValues + iValues: array [0..MAX_INTLIST_COUNT - 1] of Integer; + end; + INTLIST = _INTLIST; + PINTLIST = ^INTLIST; + TIntList = INTLIST; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeIntList() - Get the value for the specified INTLIST struct +// +// hTheme - theme data handle +// iPartId - part number +// iStateId - state number of part +// iPropId - the property number to get the value for +// pIntList - receives the value of the INTLIST property +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeIntList: function(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer; var pIntList: INTLIST): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- + +type + PROPERTYORIGIN = ( + PO_STATE, // property was found in the state section + PO_PART, // property was found in the part section + PO_CLASS, // property was found in the class section + PO_GLOBAL, // property was found in [globals] section + PO_NOTFOUND); // property was not found + TPropertyOrigin = PROPERTYORIGIN; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemePropertyOrigin() +// - searches for the specified theme property +// and sets "pOrigin" to indicate where it was +// found (or not found) +// +// hTheme - theme data handle +// iPartId - part number +// iStateId - state number of part +// iPropId - the property number to search for +// pOrigin - receives the value of the property origin +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemePropertyOrigin: function(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer; + var pOrigin: PROPERTYORIGIN): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// SetWindowTheme() +// - redirects an existing Window to use a different +// section of the current theme information than its +// class normally asks for. +// +// hwnd - the handle of the window (cannot be NULL) +// +// pszSubAppName - app (group) name to use in place of the calling +// app's name. If NULL, the actual calling app +// name will be used. +// +// pszSubIdList - semicolon separated list of class Id names to +// use in place of actual list passed by the +// window's class. if NULL, the id list from the +// calling class is used. +//---------------------------------------------------------------------------------------------------------------------- +// The Theme Manager will remember the "pszSubAppName" and the +// "pszSubIdList" associations thru the lifetime of the window (even +// if themes are subsequently changed). The window is sent a +// "WM_THEMECHANGED" msg at the end of this call, so that the new +// theme can be found and applied. +//---------------------------------------------------------------------------------------------------------------------- +// When "pszSubAppName" or "pszSubIdList" are NULL, the Theme Manager +// removes the previously remember association. To turn off theme-ing for +// the specified window, you can pass an empty string (L"") so it +// won't match any section entries. +//---------------------------------------------------------------------------------------------------------------------- + +var + SetWindowTheme: function(hwnd: HWND; pszSubAppName: LPCWSTR; pszSubIdList: LPCWSTR): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeFilename() - Get the value for the specified FILENAME property. +// +// hTheme - theme data handle +// iPartId - part number +// iStateId - state number of part +// iPropId - the property number to search for +// pszThemeFileName - output buffer to receive the filename +// cchMaxBuffChars - the size of the return buffer, in chars +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeFilename: function(hTheme: HTHEME; iPartId, iStateId, iPropId: Integer; pszThemeFileName: LPWSTR; + cchMaxBuffChars: Integer): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeSysColor() - Get the value of the specified System color. +// +// hTheme - the theme data handle. if non-NULL, will return +// color from [SysMetrics] section of theme. +// if NULL, will return the global system color. +// +// iColorId - the system color index defined in winuser.h +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeSysColor: function(hTheme: HTHEME; iColorId: Integer): COLORREF; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeSysColorBrush() +// - Get the brush for the specified System color. +// +// hTheme - the theme data handle. if non-NULL, will return +// brush matching color from [SysMetrics] section of +// theme. if NULL, will return the brush matching +// global system color. +// +// iColorId - the system color index defined in winuser.h +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeSysColorBrush: function(hTheme: HTHEME; iColorId: Integer): HBRUSH; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeSysBool() - Get the boolean value of specified System metric. +// +// hTheme - the theme data handle. if non-NULL, will return +// BOOL from [SysMetrics] section of theme. +// if NULL, will return the specified system boolean. +// +// iBoolId - the TMT_XXX BOOL number (first BOOL +// is TMT_FLATMENUS) +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeSysBool: function(hTheme: HTHEME; iBoolId: Integer): BOOL; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeSysSize() - Get the value of the specified System size metric. +// (scaled for the current logical screen dpi) +// +// hTheme - the theme data handle. if non-NULL, will return +// size from [SysMetrics] section of theme. +// if NULL, will return the global system metric. +// +// iSizeId - the following values are supported when +// hTheme is non-NULL: +// +// SM_CXBORDER (border width) +// SM_CXVSCROLL (scrollbar width) +// SM_CYHSCROLL (scrollbar height) +// SM_CXSIZE (caption width) +// SM_CYSIZE (caption height) +// SM_CXSMSIZE (small caption width) +// SM_CYSMSIZE (small caption height) +// SM_CXMENUSIZE (menubar width) +// SM_CYMENUSIZE (menubar height) +// +// when hTheme is NULL, iSizeId is passed directly +// to the GetSystemMetrics() function +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeSysSize: function(hTheme: HTHEME; iSizeId: Integer): Integer; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeSysFont() - Get the LOGFONT for the specified System font. +// +// hTheme - the theme data handle. if non-NULL, will return +// font from [SysMetrics] section of theme. +// if NULL, will return the specified system font. +// +// iFontId - the TMT_XXX font number (first font +// is TMT_CAPTIONFONT) +// +// plf - ptr to LOGFONT to receive the font value. +// (scaled for the current logical screen dpi) +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeSysFont: function(hTheme: HTHEME; iFontId: Integer; var plf: TLOGFONT): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeSysString() - Get the value of specified System string metric. +// +// hTheme - the theme data handle (required) +// +// iStringId - must be one of the following values: +// +// TMT_CSSNAME +// TMT_XMLNAME +// +// pszStringBuff - the buffer to receive the string value +// +// cchMaxStringChars - max. number of chars that pszStringBuff can hold +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeSysString: function(hTheme: HTHEME; iStringId: Integer; pszStringBuff: LPWSTR; + cchMaxStringChars: Integer): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeSysInt() - Get the value of specified System int. +// +// hTheme - the theme data handle (required) +// +// iIntId - must be one of the following values: +// +// TMT_DPIX +// TMT_DPIY +// TMT_MINCOLORDEPTH +// +// piValue - ptr to int to receive value +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeSysInt: function(hTheme: HTHEME; iIntId: Integer; var piValue: Integer): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// IsThemeActive() - can be used to test if a system theme is active +// for the current user session. +// +// use the API "IsAppThemed()" to test if a theme is +// active for the calling process. +//---------------------------------------------------------------------------------------------------------------------- + +var + IsThemeActive: function: BOOL; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// IsAppThemed() - returns TRUE if a theme is active and available to +// the current process +//---------------------------------------------------------------------------------------------------------------------- + +var + IsAppThemed: function: BOOL; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetWindowTheme() - if window is themed, returns its most recent +// HTHEME from OpenThemeData() - otherwise, returns +// NULL. +// +// hwnd - the window to get the HTHEME of +//---------------------------------------------------------------------------------------------------------------------- + +var + GetWindowTheme: function(hwnd: HWND): HTHEME; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// EnableThemeDialogTexture() +// +// - Enables/disables dialog background theme. This method can be used to +// tailor dialog compatibility with child windows and controls that +// may or may not coordinate the rendering of their client area backgrounds +// with that of their parent dialog in a manner that supports seamless +// background texturing. +// +// hdlg - the window handle of the target dialog +// dwFlags - ETDT_ENABLE to enable the theme-defined dialog background texturing, +// ETDT_DISABLE to disable background texturing, +// ETDT_ENABLETAB to enable the theme-defined background +// texturing using the Tab texture +//---------------------------------------------------------------------------------------------------------------------- + +const + ETDT_DISABLE = $00000001; + ETDT_ENABLE = $00000002; + ETDT_USETABTEXTURE = $00000004; + ETDT_ENABLETAB = (ETDT_ENABLE or ETDT_USETABTEXTURE); + +var + EnableThemeDialogTexture: function(hwnd: HWND; dwFlags: DWORD): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// IsThemeDialogTextureEnabled() +// +// - Reports whether the dialog supports background texturing. +// +// hdlg - the window handle of the target dialog +//---------------------------------------------------------------------------------------------------------------------- + +var + IsThemeDialogTextureEnabled: function(hwnd: HWND): BOOL; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +//---- flags to control theming within an app ---- + +const + STAP_ALLOW_NONCLIENT = (1 shl 0); + STAP_ALLOW_CONTROLS = (1 shl 1); + STAP_ALLOW_WEBCONTENT = (1 shl 2); + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeAppProperties() +// - returns the app property flags that control theming +//---------------------------------------------------------------------------------------------------------------------- + +var + GetThemeAppProperties: function: DWORD; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// SetThemeAppProperties() +// - sets the flags that control theming within the app +// +// dwFlags - the flag values to be set +//---------------------------------------------------------------------------------------------------------------------- + +var + SetThemeAppProperties: procedure(dwFlags: DWORD); stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetCurrentThemeName() +// - Get the name of the current theme in-use. +// Optionally, return the ColorScheme name and the +// Size name of the theme. +// +// pszThemeFileName - receives the theme path & filename +// cchMaxNameChars - max chars allowed in pszNameBuff +// +// pszColorBuff - (optional) receives the canonical color scheme name +// (not the display name) +// cchMaxColorChars - max chars allowed in pszColorBuff +// +// pszSizeBuff - (optional) receives the canonical size name +// (not the display name) +// cchMaxSizeChars - max chars allowed in pszSizeBuff +//---------------------------------------------------------------------------------------------------------------------- + +var + GetCurrentThemeName: function(pszThemeFileName: LPWSTR; cchMaxNameChars: Integer; pszColorBuff: LPWSTR; + cchMaxColorChars: Integer; pszSizeBuff: LPWSTR; cchMaxSizeChars: Integer): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// GetThemeDocumentationProperty() +// - Get the value for the specified property name from +// the [documentation] section of the themes.ini file +// for the specified theme. If the property has been +// localized in the theme files string table, the +// localized version of the property value is returned. +// +// pszThemeFileName - filename of the theme file to query +// pszPropertyName - name of the string property to retreive a value for +// pszValueBuff - receives the property string value +// cchMaxValChars - max chars allowed in pszValueBuff +//---------------------------------------------------------------------------------------------------------------------- + +const + SZ_THDOCPROP_DISPLAYNAME = 'DisplayName'; + SZ_THDOCPROP_CANONICALNAME = 'ThemeName'; + SZ_THDOCPROP_TOOLTIP = 'ToolTip'; + SZ_THDOCPROP_AUTHOR = 'author'; + +var + GetThemeDocumentationProperty: function(pszThemeName, pszPropertyName: LPCWSTR; pszValueBuff: LPWSTR; + cchMaxValChars: Integer): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// Theme API Error Handling +// +// All functions in the Theme API not returning an HRESULT (THEMEAPI_) +// use the WIN32 function "SetLastError()" to record any call failures. +// +// To retreive the error code of the last failure on the +// current thread for these type of API's, use the WIN32 function +// "GetLastError()". +// +// All Theme API error codes (HRESULT's and GetLastError() values) +// should be normal win32 errors which can be formatted into +// strings using the Win32 API FormatMessage(). +//---------------------------------------------------------------------------------------------------------------------- + +//---------------------------------------------------------------------------------------------------------------------- +// DrawThemeParentBackground() +// - used by partially-transparent or alpha-blended +// child controls to draw the part of their parent +// that they appear in front of. +// +// hwnd - handle of the child control +// hdc - hdc of the child control +// prc - (optional) rect that defines the area to be +// drawn (CHILD coordinates) +//---------------------------------------------------------------------------------------------------------------------- + +var + DrawThemeParentBackground: function(hwnd: HWND; hdc: HDC; prc: PRECT): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- +// EnableTheming() - enables or disables themeing for the current user +// in the current and future sessions. +// +// fEnable - if FALSE, disable theming & turn themes off. +// - if TRUE, enable themeing and, if user previously +// had a theme active, make it active now. +//---------------------------------------------------------------------------------------------------------------------- + +var + EnableTheming: function(fEnable: BOOL): HRESULT; stdcall; + +//---------------------------------------------------------------------------------------------------------------------- + +type + PREFERREDAPPMODE = ( + PAM_DEFAULT, + PAM_ALLOWDARK, + PAM_FORCEDARK, + PAM_FORCELIGHT, + PAM_MAX + ); + TPreferredAppMode = PREFERREDAPPMODE; + +var + SetPreferredAppMode: function(appMode: TPreferredAppMode): TPreferredAppMode; stdcall; + FlushMenuThemes: procedure; stdcall; + +type + UAHMENU = record + hmenu: HMENU; + hdc: HDC; + dwFlags: DWORD; + end; + TUAHMenu = UAHMENU; + PUAHMenu = ^TUAHMenu; + + UAHMENUITEM = record + iPosition: Integer; // 0-based position of menu item in menubar + //UAHMENUITEMMETRICS umim; + //UAHMENUPOPUPMETRICS umpm; + end; + TUAHMenuItem = UAHMENUITEM; + PUAHMenuItem = ^TUAHMenuItem; + + UAHDRAWMENUITEM = record + dis: TDrawItemStruct; // itemID looks uninitialized + um: TUAHMenu; + umi: TUAHMenuItem; + end; + TUAHDrawMenuItem = UAHDRAWMENUITEM; + PUAHDrawMenuItem = ^TUAHDrawMenuItem; + +const + WM_UAHDRAWMENU = $91; + WM_UAHDRAWMENUITEM = $92; + +implementation + +//---------------------------------------------------------------------------------------------------------------------- + +uses + SysUtils, PathFunc; + +const + themelib = 'uxtheme.dll'; + +var + ThemeLibrary: THandle; + ReferenceCount: Integer; // We have to keep track of several load/unload calls. + +procedure FreeThemeLibrary; + +begin + if ReferenceCount > 0 then + Dec(ReferenceCount); + + if (ThemeLibrary <> 0) and (ReferenceCount = 0) then + begin + FreeLibrary(ThemeLibrary); + ThemeLibrary := 0; + + OpenThemeData := nil; + CloseThemeData := nil; + DrawThemeBackground := nil; + DrawThemeText := nil; + DrawThemeTextEx := nil; + GetThemeBackgroundContentRect := nil; + GetThemeBackgroundExtent := nil; + GetThemePartSize := nil; + GetThemeTextExtent := nil; + GetThemeTextMetrics := nil; + GetThemeBackgroundRegion := nil; + HitTestThemeBackground := nil; + DrawThemeEdge := nil; + DrawThemeIcon := nil; + IsThemePartDefined := nil; + IsThemeBackgroundPartiallyTransparent := nil; + GetThemeColor := nil; + GetThemeMetric := nil; + GetThemeString := nil; + GetThemeBool := nil; + GetThemeInt := nil; + GetThemeEnumValue := nil; + GetThemePosition := nil; + GetThemeFont := nil; + GetThemeRect := nil; + GetThemeMargins := nil; + GetThemeIntList := nil; + GetThemePropertyOrigin := nil; + SetWindowTheme := nil; + GetThemeFilename := nil; + GetThemeSysColor := nil; + GetThemeSysColorBrush := nil; + GetThemeSysBool := nil; + GetThemeSysSize := nil; + GetThemeSysFont := nil; + GetThemeSysString := nil; + GetThemeSysInt := nil; + IsThemeActive := nil; + IsAppThemed := nil; + GetWindowTheme := nil; + EnableThemeDialogTexture := nil; + IsThemeDialogTextureEnabled := nil; + GetThemeAppProperties := nil; + SetThemeAppProperties := nil; + GetCurrentThemeName := nil; + GetThemeDocumentationProperty := nil; + DrawThemeParentBackground := nil; + EnableTheming := nil; + SetPreferredAppMode := nil; + FlushMenuThemes := nil; + end; +end; + +//---------------------------------------------------------------------------------------------------------------------- + +var + WindowsVersion: Cardinal; + +function InitThemeLibrary: Boolean; + + function GetSystemDir: String; + var + Buf: array[0..MAX_PATH-1] of Char; + begin + GetSystemDirectory(Buf, SizeOf(Buf) div SizeOf(Buf[0])); + Result := StrPas(Buf); + end; + + function WindowsVersionAtLeast(const AMajor, AMinor: Byte; const ABuild: Word): Boolean; + begin + Result := WindowsVersion >= Cardinal((AMajor shl 24) or (AMinor shl 16) or ABuild); + end; + + function WindowsVersionAtMost(const AMajor, AMinor: Byte; const ABuild: Word): Boolean; + begin + Result := WindowsVersion <= Cardinal((AMajor shl 24) or (AMinor shl 16) or ABuild); + end; + +begin + Inc(ReferenceCount); + + if ThemeLibrary = 0 then begin + ThemeLibrary := LoadLibrary(PChar(AddBackslash(GetSystemDir) + themelib)); + if ThemeLibrary <> 0 then begin + OpenThemeData := GetProcAddress(ThemeLibrary, 'OpenThemeData'); + CloseThemeData := GetProcAddress(ThemeLibrary, 'CloseThemeData'); + DrawThemeBackground := GetProcAddress(ThemeLibrary, 'DrawThemeBackground'); + DrawThemeText := GetProcAddress(ThemeLibrary, 'DrawThemeText'); + DrawThemeTextEx := GetProcAddress(ThemeLibrary, 'DrawThemeTextEx'); + GetThemeBackgroundContentRect := GetProcAddress(ThemeLibrary, 'GetThemeBackgroundContentRect'); + GetThemeBackgroundExtent := GetProcAddress(ThemeLibrary, 'GetThemeBackgroundContentRect'); + GetThemePartSize := GetProcAddress(ThemeLibrary, 'GetThemePartSize'); + GetThemeTextExtent := GetProcAddress(ThemeLibrary, 'GetThemeTextExtent'); + GetThemeTextMetrics := GetProcAddress(ThemeLibrary, 'GetThemeTextMetrics'); + GetThemeBackgroundRegion := GetProcAddress(ThemeLibrary, 'GetThemeBackgroundRegion'); + HitTestThemeBackground := GetProcAddress(ThemeLibrary, 'HitTestThemeBackground'); + DrawThemeEdge := GetProcAddress(ThemeLibrary, 'DrawThemeEdge'); + DrawThemeIcon := GetProcAddress(ThemeLibrary, 'DrawThemeIcon'); + IsThemePartDefined := GetProcAddress(ThemeLibrary, 'IsThemePartDefined'); + IsThemeBackgroundPartiallyTransparent := GetProcAddress(ThemeLibrary, 'IsThemeBackgroundPartiallyTransparent'); + GetThemeColor := GetProcAddress(ThemeLibrary, 'GetThemeColor'); + GetThemeMetric := GetProcAddress(ThemeLibrary, 'GetThemeMetric'); + GetThemeString := GetProcAddress(ThemeLibrary, 'GetThemeString'); + GetThemeBool := GetProcAddress(ThemeLibrary, 'GetThemeBool'); + GetThemeInt := GetProcAddress(ThemeLibrary, 'GetThemeInt'); + GetThemeEnumValue := GetProcAddress(ThemeLibrary, 'GetThemeEnumValue'); + GetThemePosition := GetProcAddress(ThemeLibrary, 'GetThemePosition'); + GetThemeFont := GetProcAddress(ThemeLibrary, 'GetThemeFont'); + GetThemeRect := GetProcAddress(ThemeLibrary, 'GetThemeRect'); + GetThemeMargins := GetProcAddress(ThemeLibrary, 'GetThemeMargins'); + GetThemeIntList := GetProcAddress(ThemeLibrary, 'GetThemeIntList'); + GetThemePropertyOrigin := GetProcAddress(ThemeLibrary, 'GetThemePropertyOrigin'); + SetWindowTheme := GetProcAddress(ThemeLibrary, 'SetWindowTheme'); + GetThemeFilename := GetProcAddress(ThemeLibrary, 'GetThemeFilename'); + GetThemeSysColor := GetProcAddress(ThemeLibrary, 'GetThemeSysColor'); + GetThemeSysColorBrush := GetProcAddress(ThemeLibrary, 'GetThemeSysColorBrush'); + GetThemeSysBool := GetProcAddress(ThemeLibrary, 'GetThemeSysBool'); + GetThemeSysSize := GetProcAddress(ThemeLibrary, 'GetThemeSysSize'); + GetThemeSysFont := GetProcAddress(ThemeLibrary, 'GetThemeSysFont'); + GetThemeSysString := GetProcAddress(ThemeLibrary, 'GetThemeSysString'); + GetThemeSysInt := GetProcAddress(ThemeLibrary, 'GetThemeSysInt'); + IsThemeActive := GetProcAddress(ThemeLibrary, 'IsThemeActive'); + IsAppThemed := GetProcAddress(ThemeLibrary, 'IsAppThemed'); + GetWindowTheme := GetProcAddress(ThemeLibrary, 'GetWindowTheme'); + EnableThemeDialogTexture := GetProcAddress(ThemeLibrary, 'EnableThemeDialogTexture'); + IsThemeDialogTextureEnabled := GetProcAddress(ThemeLibrary, 'IsThemeDialogTextureEnabled'); + GetThemeAppProperties := GetProcAddress(ThemeLibrary, 'GetThemeAppProperties'); + SetThemeAppProperties := GetProcAddress(ThemeLibrary, 'SetThemeAppProperties'); + GetCurrentThemeName := GetProcAddress(ThemeLibrary, 'GetCurrentThemeName'); + GetThemeDocumentationProperty := GetProcAddress(ThemeLibrary, 'GetThemeDocumentationProperty'); + DrawThemeParentBackground := GetProcAddress(ThemeLibrary, 'DrawThemeParentBackground'); + EnableTheming := GetProcAddress(ThemeLibrary, 'EnableTheming'); + if WindowsVersionAtLeast(10, 0, 18362) and { Windows 10 Version 1903 (May 2019 Update) } + WindowsVersionAtMost(10, 0, 22631) then begin { Windows 11 Version 23H2 (2023 Update) } + SetPreferredAppMode := GetProcAddress(ThemeLibrary, MakeIntResource(135)); + FlushMenuThemes := GetProcAddress(ThemeLibrary, MakeIntResource(136)); + end else begin + SetPreferredAppMode := nil; + FlushMenuThemes := nil; + end; + end; + end; + Result := ThemeLibrary <> 0; +end; + +//---------------------------------------------------------------------------------------------------------------------- + +function UseThemes: Boolean; + +begin + Result := ThemeLibrary <> 0; + if Result then + Result := IsAppThemed and IsThemeActive; +end; + +//---------------------------------------------------------------------------------------------------------------------- + + +initialization + var OSVersionInfo: TOSVersionInfo; + OSVersionInfo.dwOSVersionInfoSize := SizeOf(OSVersionInfo); + GetVersionEx(OSVersionInfo); + WindowsVersion := (Byte(OSVersionInfo.dwMajorVersion) shl 24) or (Byte(OSVersionInfo.dwMinorVersion) shl 16) or Word(OSVersionInfo.dwBuildNumber); + +{ Following commented out by JR. Depending on unit deinitialization order, the + FreeThemeLibrary call below could be made while other units are still using + the theme library. This happens with NewCheckListBox when Application.Run + isn't called; this unit gets deinitialized before WizardForm and its + TNewCheckListBoxes are destroyed. This resulted in an AV before because + TNewCheckListBox.Destroy calls theme functions. + And there's really no point in freeing a DLL during shutdown anyway; the + system will do so automatically. } +(* +finalization + while ReferenceCount > 0 do + FreeThemeLibrary; +*) +end. diff --git a/Components/PasswordEdit.pas b/Components/PasswordEdit.pas new file mode 100644 index 00000000..28e02701 --- /dev/null +++ b/Components/PasswordEdit.pas @@ -0,0 +1,106 @@ +unit PasswordEdit; + +{ + Inno Setup + Copyright (C) 1997-2018 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + This unit provides a true password edit. +} + +interface + +uses + Windows, Classes, Controls, StdCtrls; + +type + TPasswordEdit = class(TCustomEdit) + private + FPassword: Boolean; + procedure SetPassword(Value: Boolean); + protected + procedure CreateParams(var Params: TCreateParams); override; + public + constructor Create(AOwner: TComponent); override; + published + property Anchors; + property AutoSelect; + property AutoSize; + property BorderStyle; + property CharCase; + property Color; + property Ctl3D; + property DragCursor; + property DragMode; + property Enabled; + property Font; + property HideSelection; + property MaxLength; + property OEMConvert; + property ParentColor; + property ParentCtl3D; + property ParentFont; + property ParentShowHint; + property Password: Boolean read FPassword write SetPassword default True; + property PopupMenu; + property ReadOnly; + property ShowHint; + property TabOrder; + property TabStop; + property Text; + property Visible; + property OnChange; + property OnClick; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnKeyDown; + property OnKeyPress; + property OnKeyUp; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnStartDrag; + end; + +procedure Register; + +implementation + +uses + BidiUtils; + +procedure Register; +begin + RegisterComponents('JR', [TPasswordEdit]); +end; + +{ TPasswordEdit } + +constructor TPasswordEdit.Create(AOwner: TComponent); +begin + inherited; + FPassword := True; +end; + +procedure TPasswordEdit.CreateParams(var Params: TCreateParams); +begin + inherited; + if FPassword then + Params.Style := Params.Style or ES_PASSWORD; + SetBiDiStyles(Self, Params); +end; + +procedure TPasswordEdit.SetPassword(Value: Boolean); +begin + if FPassword <> Value then begin + FPassword := Value; + RecreateWnd; + end; +end; + +end. diff --git a/Components/PathFunc.pas b/Components/PathFunc.pas new file mode 100644 index 00000000..05f639d5 --- /dev/null +++ b/Components/PathFunc.pas @@ -0,0 +1,532 @@ +unit PathFunc; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + This unit provides some path-related functions. +} + +interface + +function AddBackslash(const S: String): String; +function PathChangeExt(const Filename, Extension: String): String; +function PathCharCompare(const S1, S2: PChar): Boolean; +function PathCharIsSlash(const C: Char): Boolean; +function PathCharIsTrailByte(const S: String; const Index: Integer): Boolean; +function PathCharLength(const S: String; const Index: Integer): Integer; +function PathCombine(const Dir, Filename: String): String; +function PathCompare(const S1, S2: String): Integer; +function PathDrivePartLength(const Filename: String): Integer; +function PathDrivePartLengthEx(const Filename: String; + const IncludeSignificantSlash: Boolean): Integer; +function PathExpand(const Filename: String): String; +function PathExtensionPos(const Filename: String): Integer; +function PathExtractDir(const Filename: String): String; +function PathExtractDrive(const Filename: String): String; +function PathExtractExt(const Filename: String): String; +function PathExtractName(const Filename: String): String; +function PathExtractPath(const Filename: String): String; +function PathIsRooted(const Filename: String): Boolean; +function PathLastChar(const S: String): PChar; +function PathLastDelimiter(const Delimiters, S: string): Integer; +function PathLowercase(const S: String): String; +function PathNormalizeSlashes(const S: String): String; +function PathPathPartLength(const Filename: String; + const IncludeSlashesAfterPath: Boolean): Integer; +function PathPos(Ch: Char; const S: String): Integer; +function PathStartsWith(const S, AStartsWith: String): Boolean; +function PathStrNextChar(const S: PChar): PChar; +function PathStrPrevChar(const Start, Current: PChar): PChar; +function PathStrScan(const S: PChar; const C: Char): PChar; +function RemoveBackslash(const S: String): String; +function RemoveBackslashUnlessRoot(const S: String): String; + +implementation + +uses + Windows, SysUtils; + +function AddBackslash(const S: String): String; +{ Returns S plus a trailing backslash, unless S is an empty string or already + ends in a backslash/slash. } +begin + if (S <> '') and not PathCharIsSlash(PathLastChar(S)^) then + Result := S + '\' + else + Result := S; +end; + +function PathCharLength(const S: String; const Index: Integer): Integer; +{ Returns the length in characters of the character at Index in S. } +begin + Result := 1; +end; + +function PathCharIsSlash(const C: Char): Boolean; +{ Returns True if C is a backslash or slash. } +begin + Result := (C = '\') or (C = '/'); +end; + +function PathCharIsTrailByte(const S: String; const Index: Integer): Boolean; +{ Returns False if S[Index] is a single byte character or a lead byte. + Returns True otherwise (i.e. it must be a trail byte). } +var + I: Integer; +begin + I := 1; + while I <= Index do begin + if I = Index then begin + Result := False; + Exit; + end; + Inc(I, PathCharLength(S, I)); + end; + Result := True; +end; + +function PathCharCompare(const S1, S2: PChar): Boolean; +{ Compares two first characters, and returns True if they are equal. } +var + N, I: Integer; +begin + N := PathStrNextChar(S1) - S1; + if N = PathStrNextChar(S2) - S2 then begin + for I := 0 to N-1 do begin + if S1[I] <> S2[I] then begin + Result := False; + Exit; + end; + end; + Result := True; + end else + Result := False; +end; + +function PathChangeExt(const Filename, Extension: String): String; +{ Takes Filename, removes any existing extension, then adds the extension + specified by Extension and returns the resulting string. } +var + I: Integer; +begin + I := PathExtensionPos(Filename); + if I = 0 then + Result := Filename + Extension + else + Result := Copy(Filename, 1, I - 1) + Extension; +end; + +function PathCombine(const Dir, Filename: String): String; +{ Combines a directory and filename into a path. + If Dir is empty, it just returns Filename. + If Filename is empty, it returns an empty string (ignoring Dir). + If Filename begins with a drive letter or slash, it returns Filename + (ignoring Dir). + If Dir specifies only a drive letter and colon ('c:'), it returns + Dir + Filename. + Otherwise, it returns the equivalent of AddBackslash(Dir) + Filename. } +var + I: Integer; +begin + if (Dir = '') or (Filename = '') or PathIsRooted(Filename) then + Result := Filename + else begin + I := PathCharLength(Dir, 1) + 1; + if ((I = Length(Dir)) and (Dir[I] = ':')) or + PathCharIsSlash(PathLastChar(Dir)^) then + Result := Dir + Filename + else + Result := Dir + '\' + Filename; + end; +end; + +function PathCompare(const S1, S2: String): Integer; +{ Compares two filenames, and returns 0 if they are equal. } +begin + Result := CompareStr(PathLowercase(S1), PathLowercase(S2)); +end; + +function PathDrivePartLength(const Filename: String): Integer; +begin + Result := PathDrivePartLengthEx(Filename, False); +end; + +function PathDrivePartLengthEx(const Filename: String; + const IncludeSignificantSlash: Boolean): Integer; +{ Returns length of the drive portion of Filename, or 0 if there is no drive + portion. + If IncludeSignificantSlash is True, the drive portion can include a trailing + slash if it is significant to the meaning of the path (i.e. 'x:' and 'x:\' + are not equivalent, nor are '\' and ''). + If IncludeSignificantSlash is False, the function works as follows: + 'x:file' -> 2 ('x:') + 'x:\file' -> 2 ('x:') + '\\server\share\file' -> 14 ('\\server\share') + '\file' -> 0 ('') + If IncludeSignificantSlash is True, the function works as follows: + 'x:file' -> 2 ('x:') + 'x:\file' -> 3 ('x:\') + '\\server\share\file' -> 14 ('\\server\share') + '\file' -> 1 ('\') +} +var + Len, I, C: Integer; +begin + Len := Length(Filename); + + { \\server\share } + if (Len >= 2) and PathCharIsSlash(Filename[1]) and PathCharIsSlash(Filename[2]) then begin + I := 3; + C := 0; + while I <= Len do begin + if PathCharIsSlash(Filename[I]) then begin + Inc(C); + if C >= 2 then + Break; + repeat + Inc(I); + { And skip any additional consecutive slashes: } + until (I > Len) or not PathCharIsSlash(Filename[I]); + end + else + Inc(I, PathCharLength(Filename, I)); + end; + Result := I - 1; + Exit; + end; + + { \ } + { Note: Test this before 'x:' since '\:stream' means access stream 'stream' + on the root directory of the current drive, not access drive '\:' } + if (Len >= 1) and PathCharIsSlash(Filename[1]) then begin + if IncludeSignificantSlash then + Result := 1 + else + Result := 0; + Exit; + end; + + { x: } + if Len > 0 then begin + I := PathCharLength(Filename, 1) + 1; + if (I <= Len) and (Filename[I] = ':') then begin + if IncludeSignificantSlash and (I < Len) and PathCharIsSlash(Filename[I+1]) then + Result := I+1 + else + Result := I; + Exit; + end; + end; + + Result := 0; +end; + +function PathIsRooted(const Filename: String): Boolean; +{ Returns True if Filename begins with a slash or drive ('x:'). + Equivalent to: PathDrivePartLengthEx(Filename, True) <> 0 } +var + Len, I: Integer; +begin + Result := False; + Len := Length(Filename); + if Len > 0 then begin + { \ or \\ } + if PathCharIsSlash(Filename[1]) then + Result := True + else begin + { x: } + I := PathCharLength(Filename, 1) + 1; + if (I <= Len) and (Filename[I] = ':') then + Result := True; + end; + end; +end; + +function PathPathPartLength(const Filename: String; + const IncludeSlashesAfterPath: Boolean): Integer; +{ Returns length of the path portion of Filename, or 0 if there is no path + portion. + Note these differences from Delphi's ExtractFilePath function: + - The result will never be less than what PathDrivePartLength returns. + If you pass a UNC root path, e.g. '\\server\share', it will return the + length of the entire string, NOT the length of '\\server\'. + - If you pass in a filename with a reference to an NTFS alternate data + stream, e.g. 'abc:def', it will return the length of the entire string, + NOT the length of 'abc:'. } +var + LastCharToKeep, Len, I: Integer; +begin + Result := PathDrivePartLengthEx(Filename, True); + LastCharToKeep := Result; + Len := Length(Filename); + I := Result + 1; + while I <= Len do begin + if PathCharIsSlash(Filename[I]) then begin + if IncludeSlashesAfterPath then + Result := I + else + Result := LastCharToKeep; + Inc(I); + end + else begin + Inc(I, PathCharLength(Filename, I)); + LastCharToKeep := I-1; + end; + end; +end; + +function PathExpand(const Filename: String): String; +{ Like Delphi's ExpandFileName, but does proper error checking. } +var + Res: Integer; + FilePart: PChar; + Buf: array[0..4095] of Char; +begin + DWORD(Res) := GetFullPathName(PChar(Filename), SizeOf(Buf) div SizeOf(Buf[0]), + Buf, FilePart); + if (Res > 0) and (Res < SizeOf(Buf) div SizeOf(Buf[0])) then + SetString(Result, Buf, Res) + else + Result := Filename; +end; + +function PathExtensionPos(const Filename: String): Integer; +{ Returns index of the last '.' character in the filename portion of Filename, + or 0 if there is no '.' in the filename portion. + Note: Filename is assumed to NOT include an NTFS alternate data stream name + (i.e. 'filename:stream'). } +var + Len, I: Integer; +begin + Result := 0; + Len := Length(Filename); + I := PathPathPartLength(Filename, True) + 1; + while I <= Len do begin + if Filename[I] = '.' then begin + Result := I; + Inc(I); + end + else + Inc(I, PathCharLength(Filename, I)); + end; +end; + +function PathExtractDir(const Filename: String): String; +{ Like PathExtractPath, but strips any trailing slashes, unless the resulting + path is the root directory of a drive (i.e. 'C:\' or '\'). } +var + I: Integer; +begin + I := PathPathPartLength(Filename, False); + Result := Copy(Filename, 1, I); +end; + +function PathExtractDrive(const Filename: String): String; +{ Returns the drive portion of Filename (either 'x:' or '\\server\share'), + or an empty string if there is no drive portion. } +var + L: Integer; +begin + L := PathDrivePartLength(Filename); + if L = 0 then + Result := '' + else + Result := Copy(Filename, 1, L); +end; + +function PathExtractExt(const Filename: String): String; +{ Returns the extension portion of the last component of Filename (e.g. '.txt') + or an empty string if there is no extension. } +var + I: Integer; +begin + I := PathExtensionPos(Filename); + if I = 0 then + Result := '' + else + Result := Copy(Filename, I, Maxint); +end; + +function PathExtractName(const Filename: String): String; +{ Returns the filename portion of Filename (e.g. 'filename.txt'). If Filename + ends in a slash or consists only of a drive part, the result will be an empty + string. + This function is essentially the opposite of PathExtractPath. } +var + I: Integer; +begin + I := PathPathPartLength(Filename, True); + Result := Copy(Filename, I + 1, Maxint); +end; + +function PathExtractPath(const Filename: String): String; +{ Returns the path portion of Filename (e.g. 'c:\dir\'). If Filename contains + no drive part or slash, the result will be an empty string. + This function is essentially the opposite of PathExtractName. } +var + I: Integer; +begin + I := PathPathPartLength(Filename, True); + Result := Copy(Filename, 1, I); +end; + +function PathLastChar(const S: String): PChar; +{ Returns pointer to last character in the string. Returns nil if the string is + empty. } +begin + if S = '' then + Result := nil + else + Result := PathStrPrevChar(Pointer(S), @S[Length(S)+1]); +end; + +function PathLastDelimiter(const Delimiters, S: string): Integer; +{ Returns the index of the last occurrence in S of one of the characters in + Delimiters, or 0 if none were found. + Note: S is allowed to contain null characters. } +var + P, E: PChar; +begin + Result := 0; + if (S = '') or (Delimiters = '') then + Exit; + P := Pointer(S); + E := @P[Length(S)]; + while P < E do begin + if P^ <> #0 then begin + if StrScan(PChar(Pointer(Delimiters)), P^) <> nil then + Result := (P - PChar(Pointer(S))) + 1; + P := PathStrNextChar(P); + end + else + Inc(P); + end; +end; + +function PathLowercase(const S: String): String; +{ Converts the specified path name to lowercase } +begin + Result := AnsiLowerCase(S); +end; + +function PathPos(Ch: Char; const S: String): Integer; +var + Len, I: Integer; +begin + Len := Length(S); + I := 1; + while I <= Len do begin + if S[I] = Ch then begin + Result := I; + Exit; + end; + Inc(I, PathCharLength(S, I)); + end; + Result := 0; +end; + +function PathNormalizeSlashes(const S: String): String; +{ Returns S minus any superfluous slashes, and with any forward slashes + converted to backslashes. For example, if S is 'C:\\\some//path', it returns + 'C:\some\path'. Does not remove a double backslash at the beginning of the + string, since that signifies a UNC path. } +var + Len, I: Integer; +begin + Result := S; + Len := Length(Result); + I := 1; + while I <= Len do begin + if Result[I] = '/' then + Result[I] := '\'; + Inc(I, PathCharLength(Result, I)); + end; + I := 1; + while I < Length(Result) do begin + if (Result[I] = '\') and (Result[I+1] = '\') and (I > 1) then + Delete(Result, I+1, 1) + else + Inc(I, PathCharLength(Result, I)); + end; +end; + +function PathStartsWith(const S, AStartsWith: String): Boolean; +{ Returns True if S starts with (or is equal to) AStartsWith. Uses path casing + rules. } +var + AStartsWithLen: Integer; +begin + AStartsWithLen := Length(AStartsWith); + if Length(S) = AStartsWithLen then + Result := (PathCompare(S, AStartsWith) = 0) + else if (Length(S) > AStartsWithLen) and not PathCharIsTrailByte(S, AStartsWithLen+1) then + Result := (PathCompare(Copy(S, 1, AStartsWithLen), AStartsWith) = 0) + else + Result := False; +end; + +function PathStrNextChar(const S: PChar): PChar; +{ Returns pointer to the character after S, unless S points to a null (#0). } +begin + Result := S; + if Result^ <> #0 then + Inc(Result); +end; + +function PathStrPrevChar(const Start, Current: PChar): PChar; +{ Returns pointer to the character before Current, unless Current = Start. } +begin + Result := Current; + if Result > Start then + Dec(Result); +end; + +function PathStrScan(const S: PChar; const C: Char): PChar; +{ Returns pointer to first occurrence of C in S, or nil if there are no + occurrences. As with StrScan, specifying #0 for the search character is legal. } +begin + Result := S; + while Result^ <> C do begin + if Result^ = #0 then begin + Result := nil; + Break; + end; + Result := PathStrNextChar(Result); + end; +end; + +function RemoveBackslash(const S: String): String; +{ Returns S minus any trailing slashes. Use of this function is discouraged; + use RemoveBackslashUnlessRoot instead when working with file system paths. } +var + I: Integer; +begin + I := Length(S); + while (I > 0) and PathCharIsSlash(PathStrPrevChar(Pointer(S), @S[I+1])^) do + Dec(I); + if I = Length(S) then + Result := S + else + Result := Copy(S, 1, I); +end; + +function RemoveBackslashUnlessRoot(const S: String): String; +{ Returns S minus any trailing slashes, unless S specifies the root directory + of a drive (i.e. 'C:\' or '\'), in which case it leaves 1 slash. } +var + DrivePartLen, I: Integer; +begin + DrivePartLen := PathDrivePartLengthEx(S, True); + I := Length(S); + while (I > DrivePartLen) and PathCharIsSlash(PathStrPrevChar(Pointer(S), @S[I+1])^) do + Dec(I); + if I = Length(S) then + Result := S + else + Result := Copy(S, 1, I); +end; + +end. diff --git a/Components/PathFuncTest.pas b/Components/PathFuncTest.pas new file mode 100644 index 00000000..05c19a6f --- /dev/null +++ b/Components/PathFuncTest.pas @@ -0,0 +1,236 @@ +unit PathFuncTest; + +{ + Inno Setup + Copyright (C) 1997-2010 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + Test unit for PathFunc + + $jrsoftware: issrc/Components/PathFuncTest.pas,v 1.10 2010/04/19 21:43:01 jr Exp $ +} + +interface + +procedure PathFuncRunTests(const AlsoTestJapaneseDBCS: Boolean); + +implementation + +uses + Windows, SysUtils, PathFunc; + +procedure PathFuncRunTests(const AlsoTestJapaneseDBCS: Boolean); + + procedure Test(const Filename: String; + const DrivePartFalse, DrivePartTrue, PathPartFalse, PathPartTrue: Integer); + begin + if PathDrivePartLengthEx(Filename, False) <> DrivePartFalse then + raise Exception.CreateFmt('"%s" drive part(False) test failed', [Filename]); + if PathDrivePartLengthEx(Filename, True) <> DrivePartTrue then + raise Exception.CreateFmt('"%s" drive part(True) test failed', [Filename]); + if PathPathPartLength(Filename, False) <> PathPartFalse then + raise Exception.CreateFmt('"%s" path part(False) test failed', [Filename]); + if PathPathPartLength(Filename, True) <> PathPartTrue then + raise Exception.CreateFmt('"%s" path part(True) test failed', [Filename]); + + if PathIsRooted(Filename) <> (PathDrivePartLengthEx(Filename, True) <> 0) then + raise Exception.CreateFmt('"%s" PathIsRooted test failed', [Filename]); + end; + + procedure TestRemoveBackslash(const Filename, ExpectedResult: String); + begin + if RemoveBackslash(Filename) <> ExpectedResult then + raise Exception.Create('RemoveBackslash test failed'); + end; + + procedure TestRemoveBackslashUnlessRoot(const Filename, ExpectedResult: String); + begin + if RemoveBackslashUnlessRoot(Filename) <> ExpectedResult then + raise Exception.Create('RemoveBackslashUnlessRoot test failed'); + end; + + procedure TestPathChangeExt(const Filename, Extension, ExpectedResult: String); + begin + if PathChangeExt(Filename, Extension) <> ExpectedResult then + raise Exception.Create('PathChangeExt test failed'); + end; + + procedure TestPathExtractExt(const Filename, ExpectedResult: String); + begin + if PathExtractExt(Filename) <> ExpectedResult then + raise Exception.Create('PathExtractExt test failed'); + end; + + procedure TestPathCombine(const Dir, Filename, ExpectedResult: String); + begin + if PathCombine(Dir, Filename) <> ExpectedResult then + raise Exception.Create('PathCombine test failed'); + end; + + procedure TestPathStartsWith(const S, AStartsWith: String; const ExpectedResult: Boolean); + begin + if PathStartsWith(S, AStartsWith) <> ExpectedResult then + raise Exception.Create('PathStartsWith test failed'); + end; + +const + DBChar = #131'\'; { a double-byte character whose 2nd byte happens to be a backslash } +begin + {$IFDEF UNICODE} + if AlsoTestJapaneseDBCS then + raise Exception.Create('DBCS tests not supported in Unicode build'); + {$ENDIF} + if AlsoTestJapaneseDBCS and (GetACP <> 932) then + raise Exception.Create('Must be running in Japanese code page to run these tests'); + + { * = Bogus path case. What the "correct" result should be is debatable. } + { ** = Possible access to NTFS alternate data stream. The characters before + and after the colon must be kept together as a single component. } + + Test('', 0, 0, 0, 0); + Test('\', 0, 1, 1, 1); + Test('\a', 0, 1, 1, 1); + Test('\a\', 0, 1, 2, 3); + Test('\a\b', 0, 1, 2, 3); + Test('a', 0, 0, 0, 0); + Test('a\', 0, 0, 1, 2); + Test('a\\', 0, 0, 1, 3); + Test('a\\\', 0, 0, 1, 4); + Test('a\b', 0, 0, 1, 2); + Test('a\b:c', 0, 0, 1, 2); {**} + + Test('1:', 2, 2, 2, 2); {*} + + Test('\:', 0, 1, 1, 1); {*} + { Yes, the following is a valid path -- it specifies a stream named 'stream' + on the root directory of the current drive. (Yes, directories can have + named streams.) } + Test('\:stream', 0, 1, 1, 1); {**} + + Test('c:', 2, 2, 2, 2); + Test('c:a', 2, 2, 2, 2); + Test('c:\', 2, 3, 3, 3); + Test('c:\\', 2, 3, 3, 4); + Test('c:\\\', 2, 3, 3, 5); + Test('c:\a', 2, 3, 3, 3); + Test('c:\a\', 2, 3, 4, 5); + Test('c:\a\\', 2, 3, 4, 6); + Test('c:\a\\\', 2, 3, 4, 7); + Test('c:\a\b', 2, 3, 4, 5); + Test('c:\a\b:c', 2, 3, 4, 5); {**} + + Test('\\', 2, 2, 2, 2); {*} + { Odd cases follow: The extra slashes are considered to be in the drive part + since PathDrivePartLength keeps slurping slashes looking for a share name + that doesn't exist. } + Test('\\\', 3, 3, 3, 3); {*} + Test('\\\\', 4, 4, 4, 4); {*} + Test('\\\\\', 5, 5, 5, 5); {*} + Test('\\a', 3, 3, 3, 3); {*} + Test('\\a\', 4, 4, 4, 4); {*} + Test('\\a\b', 5, 5, 5, 5); + Test('\\a\b\', 5, 5, 5, 6); + Test('\\a\b\c', 5, 5, 5, 6); + Test('\\a\b\c\', 5, 5, 7, 8); + Test('\\a\b\c\d', 5, 5, 7, 8); + Test('\\a\b\c\d:e', 5, 5, 7, 8); {**} + Test('\\a\\\b', 7, 7, 7, 7); + Test('\\a\\\b\\\', 7, 7, 7, 10); + Test('\\a\\\b\\\c', 7, 7, 7, 10); + Test('\\a\\\b\\\c\\\', 7, 7, 11, 14); + + if AlsoTestJapaneseDBCS then begin + Test('\\'+DBChar+DBChar+'\b', 8, 8, 8, 8); + Test('\\'+DBChar+DBChar+'\b\c', 8, 8, 8, 9); + Test('\\'+DBChar+DBChar+'\b\c\', 8, 8, 10, 11); + Test('c:\'+DBChar+'\b', 2, 3, 5, 6); + Test(DBChar+':', 3, 3, 3, 3); {*} { double-byte drive letter? bogus, but be like Windows... } + end; + + TestRemoveBackslash('', ''); + TestRemoveBackslash('\', ''); + TestRemoveBackslash('\\', ''); + TestRemoveBackslash('\\\', ''); + TestRemoveBackslash('c:', 'c:'); + TestRemoveBackslash('c:\', 'c:'); + TestRemoveBackslash('c:\\', 'c:'); + TestRemoveBackslash('c:\\\', 'c:'); + + if AlsoTestJapaneseDBCS then begin + TestRemoveBackslash(DBChar, DBChar); + TestRemoveBackslash(DBChar+'\', DBChar); + TestRemoveBackslash(DBChar+'\\', DBChar); + end; + + TestRemoveBackslashUnlessRoot('', ''); + TestRemoveBackslashUnlessRoot('\', '\'); + TestRemoveBackslashUnlessRoot('\\', '\\'); {*} + TestRemoveBackslashUnlessRoot('\\\', '\\\'); {*} + TestRemoveBackslashUnlessRoot('\\\\', '\\\\'); {*} + TestRemoveBackslashUnlessRoot('a', 'a'); + TestRemoveBackslashUnlessRoot('a\', 'a'); + TestRemoveBackslashUnlessRoot('a\\', 'a'); + TestRemoveBackslashUnlessRoot('c:', 'c:'); + TestRemoveBackslashUnlessRoot('c:\', 'c:\'); + TestRemoveBackslashUnlessRoot('c:\a', 'c:\a'); + TestRemoveBackslashUnlessRoot('c:\a\', 'c:\a'); + TestRemoveBackslashUnlessRoot('c:\a\\', 'c:\a'); + TestRemoveBackslashUnlessRoot('\\a\b', '\\a\b'); + TestRemoveBackslashUnlessRoot('\\a\b\', '\\a\b'); + TestRemoveBackslashUnlessRoot('\\a\b\\', '\\a\b'); + + TestPathChangeExt('c:', '.txt', 'c:.txt'); {*} { weird, but same as Delphi's ChangeFileExt } + TestPathChangeExt('c:\', '.txt', 'c:\.txt'); {*} + TestPathChangeExt('c:\a', '.txt', 'c:\a.txt'); + TestPathChangeExt('c:\a.', '.txt', 'c:\a.txt'); + TestPathChangeExt('c:\a.tar', '.txt', 'c:\a.txt'); + TestPathChangeExt('c:\a.tar.gz', '.txt', 'c:\a.tar.txt'); + TestPathChangeExt('c:\x.y\a', '.txt', 'c:\x.y\a.txt'); + TestPathChangeExt('\\x.y\a', '.txt', '\\x.y\a.txt'); {*} { ditto above } + TestPathChangeExt('\\x.y\a\', '.txt', '\\x.y\a\.txt'); {*} + + TestPathExtractExt('c:', ''); + TestPathExtractExt('c:\', ''); + TestPathExtractExt('c:\a', ''); + TestPathExtractExt('c:\a.', '.'); + TestPathExtractExt('c:\a.txt', '.txt'); + TestPathExtractExt('c:\a.txt.gz', '.gz'); + TestPathExtractExt('c:\x.y\a', ''); + TestPathExtractExt('\\x.y\a', ''); + TestPathExtractExt('\\x.y\a.b', ''); + TestPathExtractExt('\\x.y\a.b\c', ''); + TestPathExtractExt('\\x.y\a.b\c.txt', '.txt'); + + TestPathCombine('', 'x', 'x'); + TestPathCombine('a', 'x', 'a\x'); + TestPathCombine('a\', 'x', 'a\x'); + TestPathCombine('a\\', 'x', 'a\\x'); + TestPathCombine('c:', 'x', 'c:x'); + TestPathCombine('c:\', 'x', 'c:\x'); + TestPathCombine('c:\\', 'x', 'c:\\x'); + TestPathCombine('c:\a', 'x', 'c:\a\x'); + TestPathCombine('\', 'x', '\x'); + if AlsoTestJapaneseDBCS then begin + TestPathCombine(DBChar+':', 'x', DBChar+':x'); {*} { double-byte drive letter? bogus, but be like Windows... } + TestPathCombine('c:\'+DBChar, 'x', 'c:\'+DBChar+'\x'); + end; + TestPathCombine('c:\', '', ''); + TestPathCombine('c:\', 'e:x', 'e:x'); + TestPathCombine('c:\', 'e:\x', 'e:\x'); + TestPathCombine('c:\', '\x', '\x'); + TestPathCombine('c:\', '\\a\b\c', '\\a\b\c'); + TestPathCombine('c:\', 'ee:x', 'c:\ee:x'); {**} + + TestPathStartsWith('C:', 'c:\', False); + TestPathStartsWith('C:\', 'c:\', True); + TestPathStartsWith('C:\test', 'c:\', True); + if AlsoTestJapaneseDBCS then begin + { Test PathStartsWith's PathCharIsTrailByte call; it shouldn't chop a + double-byte character in half } + TestPathStartsWith('C:'+DBChar, 'c:\', False); + TestPathStartsWith('C:'+DBChar, 'c:'+DBChar[1], False); + end; +end; + +end. diff --git a/Components/Resample.pas b/Components/Resample.pas new file mode 100644 index 00000000..67439011 --- /dev/null +++ b/Components/Resample.pas @@ -0,0 +1,211 @@ +unit Resample; +interface +uses + Windows, Math, Graphics; + +function StretchBmp(SrcBitmap, DstBitmap: TBitmap; + DstWidth, DstHeight: Integer; Is32bit: Boolean): Boolean; + +implementation + +const + FixedBits = 16; + FixedOne = 1 shl FixedBits; + FixedOneHalf = FixedOne shr 1; +type + TWeight = packed record + Offset: Integer; //Byte offset to pixel data + case Integer of + 0: (Weight: Integer); //Pixel weight in Q16.16 fixed point format + 1: (Temp: Single); //same thing in float format + end; + TWeightArray = array [0..MaxInt div SizeOf(TWeight) - 1] of TWeight; + TPutPixelProc = procedure(const Weights: array of TWeight; Bits, Pixel: Pointer); + +procedure ResampleBits(DstSize, SrcSize: Integer; SrcLine, DstLine: Pointer; + PixelSize, LineCount, SrcLineSize, DstLineSize: Integer; PutPixelProc: TPutPixelProc); +var + I, J, Count: Integer; + Limit, Scale, X, Y, Center, Sup, Sum: Single; + Weights: ^TWeightArray; + Src, Dst: Pointer; +const + FilterWidth = 2.0; +begin + Scale := SrcSize / DstSize; + if Scale < 1.0 then + Limit := 1.0 + else + Limit := 1.0 / Scale; + Sup := FilterWidth / Limit; + GetMem(Weights, Trunc(Sup * 2.0 + 2.0) * SizeOf(TWeight)); + try + for I := 0 to DstSize - 1 do begin + Count := 0; + Sum := 0; + Center := (I + 0.5) * Scale; + for J := Floor(Center - Sup) to Ceil(Center + Sup) do begin + X := Abs(J - Center + 0.5); + if X > Sup then Continue; + X := X * Limit; + {Resampling filter} + if X < 1.0 then //SPLINE16 + Y := Sqr(X) * (X - 9 / 5) - 1 / 5 * X + 1 + else + Y := Sqr(X - 1) * (-1 / 3 * (X - 1) + 4 / 5) - 7 / 15 * (X - 1); + {The code from above must be kept in sync with FilterWidth value} + if (Y = 0) or (J < 0) or (J >= SrcSize) then Continue; + with Weights[Count] do begin + Temp := Y; + Offset := J * PixelSize; + end; + Sum := Sum + Y; + Inc(Count); + end; + if Sum <> 0 then begin + Sum := FixedOne / Sum; + for J := 0 to Count - 1 do + with Weights[J] do + Weight := Round(Temp * Sum); + end else + Count := 0; + Src := SrcLine; + Dst := DstLine; + for J := 0 to LineCount - 1 do begin + PutPixelProc(Slice(Weights^, Count), Src, Dst); + Inc(PByte(Src), SrcLineSize); + Inc(PByte(Dst), DstLineSize); + end; + Inc(PByte(DstLine), PixelSize); + end; + finally + FreeMem(Weights); + end; +end; + +//Process pixel in BGR format +procedure PutPixel24(const Weights: array of TWeight; Bits, Pixel: Pointer); +type + PRGBTriple = ^TRGBTriple; +var + I, R, G, B: Integer; +begin + R := FixedOneHalf; + G := FixedOneHalf; + B := FixedOneHalf; + for I := 0 to High(Weights) do + with Weights[I], PRGBTriple(PAnsiChar(Bits) + Offset)^ do begin + Inc(R, rgbtRed * Weight); + Inc(G, rgbtGreen * Weight); + Inc(B, rgbtBlue * Weight); + end; + with PRGBTriple(Pixel)^ do begin + //Clamps all channels to values between 0 and 255 + if R > 0 then if R < 255 shl FixedBits then rgbtRed := R shr FixedBits else rgbtRed := 255 else rgbtRed := 0; + if G > 0 then if G < 255 shl FixedBits then rgbtGreen := G shr FixedBits else rgbtGreen := 255 else rgbtGreen := 0; + if B > 0 then if B < 255 shl FixedBits then rgbtBlue := B shr FixedBits else rgbtBlue := 255 else rgbtBlue := 0; + end; +end; + +//Process pixel in BGRA premultiplied alpha format +procedure PutPixel32P(const Weights: array of TWeight; Bits, Pixel: Pointer); +var + I, R, G, B, A: Integer; + AByte: Byte; +begin + R := FixedOneHalf; + G := FixedOneHalf; + B := FixedOneHalf; + A := FixedOneHalf; + for I := 0 to High(Weights) do + with Weights[I], PRGBQuad(PAnsiChar(Bits) + Offset)^ do begin + Inc(R, rgbRed * Weight); + Inc(G, rgbGreen * Weight); + Inc(B, rgbBlue * Weight); + Inc(A, rgbReserved * Weight); + end; + //Clamps alpha channel to values between 0 and 255 + if A > 0 then if A < 255 shl FixedBits then AByte := A shr FixedBits else AByte := 255 else AByte := 0; + with PRGBQuad(Pixel)^ do begin + rgbReserved := AByte; + I := AByte shl FixedBits; + //Clamps other channels to values between 0 and Alpha + if R > 0 then if R < I then rgbRed := R shr FixedBits else rgbRed := AByte else rgbRed := 0; + if G > 0 then if G < I then rgbGreen := G shr FixedBits else rgbGreen := AByte else rgbGreen := 0; + if B > 0 then if B < I then rgbBlue := B shr FixedBits else rgbBlue := AByte else rgbBlue := 0; + end; +end; + + +function StretchBmp(SrcBitmap, DstBitmap: TBitmap; + DstWidth, DstHeight: Integer; Is32bit: Boolean): Boolean; +var + SrcWidth, SrcHeight, SrcLineSize, DstLineSize, PixelSize: Integer; + SrcBits, DstBits, TmpBits: Pointer; + PixelFormat: TPixelFormat; + Proc: TPutPixelProc; +begin + Result := False; + try + if (DstWidth <= 0) or (DstHeight <= 0) then Exit; + SrcWidth := SrcBitmap.Width; + SrcHeight := SrcBitmap.Height; + if (SrcWidth <= 0) or (SrcHeight <= 0) then Exit; + if Is32bit then begin + PixelFormat := pf32bit; + PixelSize := 4; + Proc := PutPixel32P; + end else begin + PixelFormat := pf24bit; + PixelSize := 3; + Proc := PutPixel24; + end; + //NOTE: Irreversible change of SrcBitmap pixel format + SrcBitmap.PixelFormat := PixelFormat; + SrcLineSize := WPARAM(SrcBitmap.ScanLine[0]) - WPARAM(SrcBitmap.ScanLine[1]); + if SrcLineSize >= 0 then + SrcBits := SrcBitmap.ScanLine[SrcHeight - 1] + else begin + SrcLineSize := -SrcLineSize; + SrcBits := SrcBitmap.ScanLine[0]; + end; + DstBitmap.PixelFormat := PixelFormat; + DstBitmap.AlphaFormat := SrcBitmap.AlphaFormat; + DstBitmap.Width := DstWidth; + DstBitmap.Height := DstHeight; + DstLineSize := WPARAM(DstBitmap.ScanLine[0]) - WPARAM(DstBitmap.ScanLine[1]); + if DstLineSize >= 0 then + DstBits := DstBitmap.ScanLine[DstHeight - 1] + else begin + DstLineSize := -DstLineSize; + DstBits := DstBitmap.ScanLine[0]; + end; + TmpBits := nil; + try + //Minimize temporary allocations by choosing right stretch order + if DstWidth * SrcHeight < DstHeight * SrcWidth then begin + GetMem(TmpBits, SrcHeight * DstLineSize); + //Stretch horizontally + ResampleBits(DstWidth, SrcWidth, SrcBits, TmpBits, PixelSize, + SrcHeight, SrcLineSize, DstLineSize, Proc); + //Stretch vertically + ResampleBits(DstHeight, SrcHeight, TmpBits, DstBits, DstLineSize, + DstWidth, PixelSize, PixelSize, Proc); + end else begin + GetMem(TmpBits, DstHeight * SrcLineSize); + //Stretch vertically + ResampleBits(DstHeight, SrcHeight, SrcBits, TmpBits, SrcLineSize, + SrcWidth, PixelSize, PixelSize, Proc); + //Stretch horizontally + ResampleBits(DstWidth, SrcWidth, TmpBits, DstBits, PixelSize, + DstHeight, SrcLineSize, DstLineSize, Proc); + end; + Result := True; + finally + FreeMem(TmpBits); + end; + except + end; +end; + +end. \ No newline at end of file diff --git a/Components/RestartManager.pas b/Components/RestartManager.pas new file mode 100644 index 00000000..9389a13e --- /dev/null +++ b/Components/RestartManager.pas @@ -0,0 +1,178 @@ +unit RestartManager; + +{ + Basic RestartManager API interface unit by Martijn Laan +} + +interface + +uses + ActiveX, Windows; + +procedure FreeRestartManagerLibrary; +function InitRestartManagerLibrary: Boolean; +function UseRestartManager: Boolean; + +const + RM_SESSION_KEY_LEN = SizeOf(TGUID); + + CCH_RM_SESSION_KEY = RM_SESSION_KEY_LEN*2; + + CCH_RM_MAX_APP_NAME = 255; + + CCH_RM_MAX_SVC_NAME = 63; + + RM_INVALID_TS_SESSION = -1; + + RM_INVALID_PROCESS = -1; + +type + RM_APP_TYPE = DWORD; + +const + RmUnknownApp = 0; + RmMainWindow = 1; + RmOtherWindow = 2; + RmService = 3; + RmExplorer = 4; + RmConsole = 5; + RmCritical = 1000; + +type + RM_SHUTDOWN_TYPE = DWORD; + +const + RmForceShutdown = $01; + RmShutdownOnlyRegistered = $10; + + //RM_APP_STATUS + +type + RM_REBOOT_REASON = DWORD; + +const + RmRebootReasonNone = $0; + RmRebootReasonPermissionDenied = $1; + RmRebootReasonSessionMismatch = $2; + RmRebootReasonCriticalProcess = $4; + RmRebootReasonCriticalService = $8; + RmRebootReasonDetectedSelf = $10; + +type + RM_UNIQUE_PROCESS = record + dwProcessId: DWORD; + ProcessStartTime: TFileTime; + end; + + RM_PROCESS_INFO = record + Process: RM_UNIQUE_PROCESS; + strAppName: array[0..CCH_RM_MAX_APP_NAME] of WideChar; + strServiceShortName: array[0..CCH_RM_MAX_SVC_NAME] of WideChar; + ApplicationType: RM_APP_TYPE; + AppStatus: ULONG; + TSSessionId: DWORD; + bRestartable: BOOL; + end; + + //RM_FILTER_TRIGGER + + //RM_FILTER_ACTION + + //RM_FILTER_INFO + + //RM_WRITE_STATUS_CALLBACK + +var + RmStartSession: function (pSessionHandle: LPDWORD; dwSessionFlags: DWORD; strSessionKey: LPWSTR): DWORD; stdcall; + + RmRegisterResources: function (dwSessionHandle: DWORD; nFiles: UINT; rgsFilenames: Pointer; nApplications: UINT; rgApplications: Pointer; nServices: UINT; rgsServiceNames: Pointer): DWORD; stdcall; + + RmGetList: function (dwSessionHandle: DWORD; pnProcInfoNeeded, pnProcInfo: PUINT; rgAffectedApps: Pointer; lpdwRebootReasons: LPDWORD): DWORD; stdcall; + + RmShutdown: function (dwSessionHandle: DWORD; lActionFlags: ULONG; fnStatus: Pointer): DWORD; stdcall; + + RmRestart: function (dwSessionHandle: DWORD; dwRestartFlags: DWORD; fnStatus: Pointer): DWORD; stdcall; + + RmEndSession: function (dwSessionHandle: DWORD): DWORD; stdcall; + +implementation + +//---------------------------------------------------------------------------------------------------------------------- + +uses + SysUtils, PathFunc; + +const + restartmanagerlib = 'Rstrtmgr.dll'; + +var + RestartManagerLibrary: THandle; + ReferenceCount: Integer; // We have to keep track of several load/unload calls. + +procedure FreeRestartManagerLibrary; +begin + if ReferenceCount > 0 then + Dec(ReferenceCount); + + if (RestartManagerLibrary <> 0) and (ReferenceCount = 0) then + begin + FreeLibrary(RestartManagerLibrary); + RestartManagerLibrary := 0; + + RmStartSession := nil; + RmRegisterResources := nil; + RmGetList := nil; + RmShutdown := nil; + RmRestart := nil; + RmEndSession := nil; + end; +end; + +//---------------------------------------------------------------------------------------------------------------------- + +function InitRestartManagerLibrary: Boolean; + + function GetSystemDir: String; + var + Buf: array[0..MAX_PATH-1] of Char; + begin + GetSystemDirectory(Buf, SizeOf(Buf) div SizeOf(Buf[0])); + Result := StrPas(Buf); + end; + +begin + Inc(ReferenceCount); + + if RestartManagerLibrary = 0 then + begin + RestartManagerLibrary := LoadLibrary(PChar(AddBackslash(GetSystemDir) + restartmanagerlib)); + if RestartManagerLibrary <> 0 then + begin + RmStartSession := GetProcAddress(RestartManagerLibrary, 'RmStartSession'); + RmRegisterResources := GetProcAddress(RestartManagerLibrary, 'RmRegisterResources'); + RmGetList := GetProcAddress(RestartManagerLibrary, 'RmGetList'); + RmShutdown := GetProcAddress(RestartManagerLibrary, 'RmShutdown'); + RmRestart := GetProcAddress(RestartManagerLibrary, 'RmRestart'); + RmEndSession := GetProcAddress(RestartManagerLibrary, 'RmEndSession'); + end; + end; + Result := RestartManagerLibrary <> 0; +end; + +//---------------------------------------------------------------------------------------------------------------------- + +function UseRestartManager: Boolean; + +begin + Result := RestartManagerLibrary <> 0; +end; + +//---------------------------------------------------------------------------------------------------------------------- + + +initialization +finalization + while ReferenceCount > 0 do + FreeRestartManagerLibrary; + +end. diff --git a/Components/RichEditViewer.pas b/Components/RichEditViewer.pas new file mode 100644 index 00000000..68e6b881 --- /dev/null +++ b/Components/RichEditViewer.pas @@ -0,0 +1,416 @@ +unit RichEditViewer; + +{ TRichEditViewer by Jordan Russell and Martijn Laan + + Known problem: + If, after assigning rich text to a TRichEditViewer component, you change + a property that causes the component's handle to be recreated, all text + formatting will be lost (in the interests of code size). +} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, RichEdit, ActiveX; + +type + IRichEditOleCallback = interface(IUnknown) + ['{00020d03-0000-0000-c000-000000000046}'] + function GetNewStorage(out stg: IStorage): HResult; stdcall; + function GetInPlaceContext(out Frame: IOleInPlaceFrame; + out Doc: IOleInPlaceUIWindow; + lpFrameInfo: POleInPlaceFrameInfo): HResult; stdcall; + function ShowContainerUI(fShow: BOOL): HResult; stdcall; + function QueryInsertObject(const clsid: TCLSID; const stg: IStorage; + cp: Longint): HResult; stdcall; + function DeleteObject(const oleobj: IOleObject): HResult; stdcall; + function QueryAcceptData(const dataobj: IDataObject; + var cfFormat: TClipFormat; reco: DWORD; fReally: BOOL; + hMetaPict: HGLOBAL): HResult; stdcall; + function ContextSensitiveHelp(fEnterMode: BOOL): HResult; stdcall; + function GetClipboardData(const chrg: TCharRange; reco: DWORD; + out dataobj: IDataObject): HResult; stdcall; + function GetDragDropEffect(fDrag: BOOL; grfKeyState: DWORD; + var dwEffect: DWORD): HResult; stdcall; + function GetContextMenu(seltype: Word; const oleobj: IOleObject; + const chrg: TCharRange; out menu: HMENU): HResult; stdcall; + end; + + TRichEditViewerCustomShellExecute = procedure(hWnd: HWND; Operation, FileName, Parameters, Directory: LPWSTR; ShowCmd: Integer); stdcall; + + TRichEditViewer = class(TMemo) + private + FUseRichEdit: Boolean; + FRichEditLoaded: Boolean; + FCallback: IRichEditOleCallback; + class var FCustomShellExecute: TRichEditViewerCustomShellExecute; + procedure SetRTFTextProp(const Value: AnsiString); + procedure SetUseRichEdit(Value: Boolean); + procedure UpdateBackgroundColor; + procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED; + procedure CMSysColorChange(var Message: TMessage); message CM_SYSCOLORCHANGE; + procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY; + protected + procedure CreateParams(var Params: TCreateParams); override; + procedure CreateWnd; override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + function SetRTFText(const Value: AnsiString): Integer; + property RTFText: AnsiString write SetRTFTextProp; + class property CustomShellExecute: TRichEditViewerCustomShellExecute read FCustomShellExecute write FCustomShellExecute; + published + property UseRichEdit: Boolean read FUseRichEdit write SetUseRichEdit default True; + end; + +procedure Register; + +implementation + +uses + ShellApi, BidiUtils, PathFunc, ComObj; + +const + RICHEDIT_CLASSW = 'RichEdit20W'; + MSFTEDIT_CLASS = 'RICHEDIT50W'; + EM_AUTOURLDETECT = WM_USER + 91; + ENM_LINK = $04000000; + EN_LINK = $070b; + +type + { Basic implementation of IRichEditOleCallback to enable the viewing of images and other objects. } + TBasicRichEditOleCallback = class(TInterfacedObject, IRichEditOleCallback) + public + function GetNewStorage(out stg: IStorage): HResult; stdcall; + function GetInPlaceContext(out Frame: IOleInPlaceFrame; + out Doc: IOleInPlaceUIWindow; + lpFrameInfo: POleInPlaceFrameInfo): HResult; stdcall; + function ShowContainerUI(fShow: BOOL): HResult; stdcall; + function QueryInsertObject(const clsid: TCLSID; const stg: IStorage; + cp: Longint): HResult; stdcall; + function DeleteObject(const oleobj: IOleObject): HResult; stdcall; + function QueryAcceptData(const dataobj: IDataObject; + var cfFormat: TClipFormat; reco: DWORD; fReally: BOOL; + hMetaPict: HGLOBAL): HResult; stdcall; + function ContextSensitiveHelp(fEnterMode: BOOL): HResult; stdcall; + function GetClipboardData(const chrg: TCharRange; reco: DWORD; + out dataobj: IDataObject): HResult; stdcall; + function GetDragDropEffect(fDrag: BOOL; grfKeyState: DWORD; + var dwEffect: DWORD): HResult; stdcall; + function GetContextMenu(seltype: Word; const oleobj: IOleObject; + const chrg: TCharRange; out menu: HMENU): HResult; stdcall; + end; + + PEnLink = ^TEnLink; + TENLink = record + nmhdr: TNMHdr; + msg: UINT; + wParam: WPARAM; + lParam: LPARAM; + chrg: TCharRange; + end; + + TTextRange = record + chrg: TCharRange; + lpstrText: PWideChar; + end; + +var + RichEditModule: HMODULE; + RichEditUseCount: Integer = 0; + RichEditVersion: Integer; + +procedure LoadRichEdit; + + function GetSystemDir: String; + var + Buf: array[0..MAX_PATH-1] of Char; + begin + GetSystemDirectory(Buf, SizeOf(Buf) div SizeOf(Buf[0])); + Result := StrPas(Buf); + end; + +begin + if RichEditUseCount = 0 then begin + RichEditVersion := 4; + RichEditModule := LoadLibrary(PChar(AddBackslash(GetSystemDir) + 'MSFTEDIT.DLL')); + if RichEditModule = 0 then begin + RichEditVersion := 2; + RichEditModule := LoadLibrary(PChar(AddBackslash(GetSystemDir) + 'RICHED20.DLL')); + end; + end; + Inc(RichEditUseCount); +end; + +procedure UnloadRichEdit; +begin + if RichEditUseCount > 0 then begin + Dec(RichEditUseCount); + if RichEditUseCount = 0 then begin + FreeLibrary(RichEditModule); + RichEditModule := 0; + end; + end; +end; + +{ TBasicRichEditOleCallback } + +function TBasicRichEditOleCallback.GetNewStorage(out stg: IStorage): HResult; stdcall; +var + LockBytes: ILockBytes; +begin + try + OleCheck(CreateILockBytesOnHGlobal(0, True, LockBytes)); + OleCheck(StgCreateDocfileOnILockBytes(LockBytes, STGM_READWRITE + or STGM_SHARE_EXCLUSIVE or STGM_CREATE, 0, stg)); + Result := S_OK; + except + Result := E_OUTOFMEMORY; + end; +end; + +function TBasicRichEditOleCallback.GetInPlaceContext(out Frame: IOleInPlaceFrame; + out Doc: IOleInPlaceUIWindow; lpFrameInfo: POleInPlaceFrameInfo): HResult; +begin + Result := E_NOTIMPL; +end; + +function TBasicRichEditOleCallback.ShowContainerUI(fShow: BOOL): HResult; +begin + Result := E_NOTIMPL; +end; + +function TBasicRichEditOleCallback.QueryInsertObject(const clsid: TCLSID; const stg: IStorage; + cp: Longint): HResult; +begin + Result := S_OK; +end; + +function TBasicRichEditOleCallback.DeleteObject(const oleobj: IOleObject): HResult; +begin + if Assigned(oleobj) then + oleobj.Close(OLECLOSE_NOSAVE); + Result := S_OK; +end; + +function TBasicRichEditOleCallback.QueryAcceptData(const dataobj: IDataObject; + var cfFormat: TClipFormat; reco: DWORD; fReally: BOOL; + hMetaPict: HGLOBAL): HResult; +begin + Result := S_OK; +end; + +function TBasicRichEditOleCallback.ContextSensitiveHelp(fEnterMode: BOOL): HResult; +begin + Result := S_OK; +end; + +function TBasicRichEditOleCallback.GetClipboardData(const chrg: TCharRange; reco: DWORD; + out dataobj: IDataObject): HResult; +begin + Result := E_NOTIMPL; +end; + +function TBasicRichEditOleCallback.GetDragDropEffect(fDrag: BOOL; grfKeyState: DWORD; + var dwEffect: DWORD): HResult; +begin + Result := E_NOTIMPL; +end; + +function TBasicRichEditOleCallback.GetContextMenu(seltype: Word; + const oleobj: IOleObject; const chrg: TCharRange; out Menu: HMENU): HResult; +begin + Result := E_NOTIMPL; +end; + +{ TRichEditViewer } + +constructor TRichEditViewer.Create(AOwner: TComponent); +begin + inherited; + FUseRichEdit := True; + FCallback := TBasicRichEditOleCallback.Create; +end; + +destructor TRichEditViewer.Destroy; +begin + inherited; + { First do all other deinitialization, then decrement the DLL use count } + if FRichEditLoaded then begin + FRichEditLoaded := False; + UnloadRichEdit; + end; +end; + +procedure TRichEditViewer.CreateParams(var Params: TCreateParams); +{ Based on code from TCustomRichEdit.CreateParams } +begin + if UseRichEdit and not FRichEditLoaded then begin + { Increment the DLL use count when UseRichEdit is True, load the DLL } + FRichEditLoaded := True; + LoadRichEdit; + end; + inherited; + if UseRichEdit then begin + if RichEditVersion = 4 then + CreateSubClass(Params, MSFTEDIT_CLASS) + else + CreateSubClass(Params, RICHEDIT_CLASSW); + end else + { Inherited handler creates a subclass of 'EDIT'. + Must have a unique class name since it uses two different classes + depending on the setting of the UseRichEdit property. } + StrCat(Params.WinClassName, '/Text'); { don't localize! } + SetBiDiStyles(Self, Params); +end; + +procedure TRichEditViewer.CreateWnd; +var + Mask: LongInt; +begin + inherited; + UpdateBackgroundColor; + if FUseRichEdit then begin + if RichEditVersion >= 2 then begin + Mask := ENM_LINK or SendMessage(Handle, EM_GETEVENTMASK, 0, 0); + SendMessage(Handle, EM_SETEVENTMASK, 0, LPARAM(Mask)); + SendMessage(Handle, EM_AUTOURLDETECT, WPARAM(True), 0); + end; + SendMessage(Handle, EM_SETOLECALLBACK, 0, LPARAM(FCallback)); + end; +end; + +procedure TRichEditViewer.UpdateBackgroundColor; +begin + if FUseRichEdit and HandleAllocated then + SendMessage(Handle, EM_SETBKGNDCOLOR, 0, ColorToRGB(Color)); +end; + +procedure TRichEditViewer.SetUseRichEdit(Value: Boolean); +begin + if FUseRichEdit <> Value then begin + FUseRichEdit := Value; + RecreateWnd; + if not Value and FRichEditLoaded then begin + { Decrement the DLL use count when UseRichEdit is set to False } + FRichEditLoaded := False; + UnloadRichEdit; + end; + end; +end; + +type + PStreamLoadData = ^TStreamLoadData; + TStreamLoadData = record + Buf: PByte; + BytesLeft: Integer; + end; + +function StreamLoad(dwCookie: Longint; pbBuff: PByte; + cb: Longint; var pcb: Longint): Longint; stdcall; +begin + Result := 0; + with PStreamLoadData(dwCookie)^ do begin + if cb > BytesLeft then + cb := BytesLeft; + Move(Buf^, pbBuff^, cb); + Inc(Buf, cb); + Dec(BytesLeft, cb); + pcb := cb; + end; +end; + +function TRichEditViewer.SetRTFText(const Value: AnsiString): Integer; + + function StreamIn(AFormat: WPARAM): Integer; + var + Data: TStreamLoadData; + EditStream: TEditStream; + begin + Data.Buf := @Value[1]; + Data.BytesLeft := Length(Value); + { Check for UTF-16 BOM } + if (AFormat and SF_TEXT <> 0) and (Data.BytesLeft >= 2) and + (PWord(Pointer(Value))^ = $FEFF) then begin + AFormat := AFormat or SF_UNICODE; + Inc(Data.Buf, 2); + Dec(Data.BytesLeft, 2); + end; + EditStream.dwCookie := Longint(@Data); + EditStream.dwError := 0; + EditStream.pfnCallback := @StreamLoad; + SendMessage(Handle, EM_STREAMIN, AFormat, LPARAM(@EditStream)); + Result := EditStream.dwError; + end; + +begin + if not FUseRichEdit then begin + Text := String(Value); + Result := 0; + end + else begin + SendMessage(Handle, EM_EXLIMITTEXT, 0, LParam($7FFFFFFE)); + Result := StreamIn(SF_RTF); + if Result <> 0 then + Result := StreamIn(SF_TEXT); + end; +end; + +procedure TRichEditViewer.SetRTFTextProp(const Value: AnsiString); +begin + SetRTFText(Value); +end; + +procedure TRichEditViewer.CMColorChanged(var Message: TMessage); +begin + inherited; + UpdateBackgroundColor; +end; + +procedure TRichEditViewer.CMSysColorChange(var Message: TMessage); +begin + inherited; + UpdateBackgroundColor; +end; + +procedure TRichEditViewer.CNNotify(var Message: TWMNotify); +var + EnLink: PEnLink; + CharRange: TCharRange; + TextRange: TTextRange; + Len: Integer; + URL: String; +begin + case Message.NMHdr^.code of + EN_LINK: begin + EnLink := PEnLink(Message.NMHdr); + if EnLink.msg = WM_LBUTTONUP then begin + CharRange := EnLink.chrg; + if (CharRange.cpMin >= 0) and (CharRange.cpMax > CharRange.cpMin) then begin + Len := CharRange.cpMax - CharRange.cpMin; + Inc(Len); { for null terminator } + if Len > 1 then begin + SetLength(URL, Len); + TextRange.chrg := CharRange; + TextRange.lpstrText := PChar(URL); + SetLength(URL, SendMessage(Handle, EM_GETTEXTRANGE, 0, LParam(@TextRange))); + if URL <> '' then begin + if Assigned(FCustomShellExecute) then + FCustomShellExecute(Handle, 'open', PChar(URL), nil, nil, SW_SHOWNORMAL) + else + ShellExecute(Handle, 'open', PChar(URL), nil, nil, SW_SHOWNORMAL); + end; + end; + end; + end; + end; + end; +end; + +procedure Register; +begin + RegisterComponents('JR', [TRichEditViewer]); +end; + +end. diff --git a/Components/ScintEdit.pas b/Components/ScintEdit.pas new file mode 100644 index 00000000..f83f0def --- /dev/null +++ b/Components/ScintEdit.pas @@ -0,0 +1,2349 @@ +unit ScintEdit; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + TScintEdit component: a VCL wrapper for Scintilla +} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Generics.Collections, ScintInt; + +type + TScintEditAutoCompleteSelectionEvent = TNotifyEvent; + TScintEditChangeInfo = record + Inserting: Boolean; + StartPos, Length, LinesDelta: Integer; + end; + TScintEditChangeEvent = procedure(Sender: TObject; + const Info: TScintEditChangeInfo) of object; + TScintEditCharAddedEvent = procedure(Sender: TObject; Ch: AnsiChar) of object; + TScintEditDropFilesEvent = procedure(Sender: TObject; X, Y: Integer; + AFiles: TStrings) of object; + TScintHintInfo = Controls.THintInfo; + TScintEditHintShowEvent = procedure(Sender: TObject; + var Info: TScintHintInfo) of object; + TScintEditMarginClickEvent = procedure(Sender: TObject; MarginNumber: Integer; + Line: Integer) of object; + TScintFindOption = (sfoMatchCase, sfoWholeWord); + TScintFindOptions = set of TScintFindOption; + TScintIndentationGuides = (sigNone, sigReal, sigLookForward, sigLookBoth); + TScintStyleByteIndicatorNumber = 0..2; { These use unused style bits of which there are 3. Assumes SCI_SETSTYLEBITS isn't used to change the default used style bits from 5 to a higher number. } + TScintStyleByteIndicatorNumbers = set of TScintStyleByteIndicatorNumber; + TScintIndicatorNumber = INDIC_CONTAINER..INDIC_MAX; + TScintLineEndings = (sleCRLF, sleCR, sleLF); + TScintLineState = type Integer; + TScintMarkerNumber = 0..31; + TScintMarkerNumbers = set of TScintMarkerNumber; + TScintRange = record + StartPos, EndPos: Integer; + constructor Create(const AStartPos, AEndPos: Integer); + function Overlaps(const ARange: TScintRange): Boolean; + function Within(const ARange: TScintRange): Boolean; + end; + TScintRangeList = TList; + TScintRawCharSet = set of AnsiChar; + TScintRawString = type RawByteString; + TScintRectangle = record + Left, Top, Right, Bottom: Integer; + end; + TScintStyleNumber = 0..31; + TScintVirtualSpaceOption = (svsRectangularSelection, svsUserAccessible); + TScintVirtualSpaceOptions = set of TScintVirtualSpaceOption; + PScintRangeToFormat = ^TScintRangeToFormat; + TScintRangeToFormat = record + hdc, hdcTarget: UINT_PTR; + rc, rcPage: TScintRectangle; + chrg: TScintRange; + end; + + TScintEditStrings = class; + TScintCustomStyler = class; + + TScintEdit = class(TWinControl) + private + FAcceptDroppedFiles: Boolean; + FAutoCompleteFontName: String; + FAutoCompleteFontSize: Integer; + FCodePage: Integer; + FDirectPtr: Pointer; + FEffectiveCodePage: Integer; + FEffectiveCodePageDBCS: Boolean; + FFillSelectionToEdge: Boolean; + FForceModified: Boolean; + FIndentationGuides: TScintIndentationGuides; + FLeadBytes: TScintRawCharSet; + FLineNumbers: Boolean; + FLines: TScintEditStrings; + FOnAutoCompleteSelection: TScintEditAutoCompleteSelectionEvent; + FOnChange: TScintEditChangeEvent; + FOnCharAdded: TScintEditCharAddedEvent; + FOnDropFiles: TScintEditDropFilesEvent; + FOnHintShow: TScintEditHintShowEvent; + FOnMarginClick: TScintEditMarginClickEvent; + FOnModifiedChange: TNotifyEvent; + FOnUpdateUI: TNotifyEvent; + FOnZoom: TNotifyEvent; + FReportCaretPositionToStyler: Boolean; + FStyler: TScintCustomStyler; + FTabWidth: Integer; + FUseStyleAttributes: Boolean; + FUseTabCharacter: Boolean; + FVirtualSpaceOptions: TScintVirtualSpaceOptions; + FWordWrap: Boolean; + procedure ApplyOptions; + function GetAutoCompleteActive: Boolean; + function GetCaretColumn: Integer; + function GetCaretColumnExpandedForTabs: Integer; + function GetCaretLine: Integer; + function GetCaretPosition: Integer; + function GetCaretVirtualSpace: Integer; + function GetInsertMode: Boolean; + function GetLineEndings: TScintLineEndings; + function GetLineEndingString: TScintRawString; + function GetLineHeight: Integer; + function GetLinesInWindow: Integer; + function GetModified: Boolean; + function GetRawSelText: TScintRawString; + function GetRawText: TScintRawString; + function GetReadOnly: Boolean; + function GetSelection: TScintRange; + function GetSelectionAnchorPosition(Selection: Integer): Integer; + function GetSelectionCaretPosition(Selection: Integer): Integer; + function GetSelectionCount: Integer; + function GetSelText: String; + function GetTopLine: Integer; + function GetZoom: Integer; + procedure SetAcceptDroppedFiles(const Value: Boolean); + procedure SetAutoCompleteFontName(const Value: String); + procedure SetAutoCompleteFontSize(const Value: Integer); + procedure SetCodePage(const Value: Integer); + procedure SetCaretColumn(const Value: Integer); + procedure SetCaretLine(const Value: Integer); + procedure SetCaretPosition(const Value: Integer); + procedure SetCaretVirtualSpace(const Value: Integer); + procedure SetFillSelectionToEdge(const Value: Boolean); + procedure SetIndentationGuides(const Value: TScintIndentationGuides); + procedure SetLineNumbers(const Value: Boolean); + procedure SetMainSelection(const Value: Integer); + procedure SetRawSelText(const Value: TScintRawString); + procedure SetRawText(const Value: TScintRawString); + procedure SetReadOnly(const Value: Boolean); + procedure SetSelection(const Value: TScintRange); + procedure SetSelectionAnchorPosition(Selection: Integer; const AnchorPos: Integer); + procedure SetSelectionCaretPosition(Selection: Integer; const CaretPos: Integer); + procedure SetSelText(const Value: String); + procedure SetStyler(const Value: TScintCustomStyler); + procedure SetTabWidth(const Value: Integer); + procedure SetTopLine(const Value: Integer); + procedure SetUseStyleAttributes(const Value: Boolean); + procedure SetUseTabCharacter(const Value: Boolean); + procedure SetVirtualSpaceOptions(const Value: TScintVirtualSpaceOptions); + procedure SetWordWrap(const Value: Boolean); + procedure SetZoom(const Value: Integer); + procedure UpdateCodePage; + procedure UpdateLineNumbersWidth; + procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED; + procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED; + procedure CMHintShow(var Message: TCMHintShow); message CM_HINTSHOW; + procedure CMSysColorChange(var Message: TMessage); message CM_SYSCOLORCHANGE; + procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY; + procedure WMDestroy(var Message: TWMDestroy); message WM_DESTROY; + procedure WMDropFiles(var Message: TWMDropFiles); message WM_DROPFILES; + procedure WMEraseBkgnd(var Message: TMessage); message WM_ERASEBKGND; + procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE; + procedure WMMouseWheel(var Message: TMessage); message WM_MOUSEWHEEL; + protected + procedure Change(const AInserting: Boolean; const AStartPos, ALength, + ALinesDelta: Integer); virtual; + procedure CheckPosRange(const StartPos, EndPos: Integer); + procedure CreateParams(var Params: TCreateParams); override; + procedure CreateWnd; override; + class procedure Error(const S: String); + class procedure ErrorFmt(const S: String; const Args: array of const); + function GetMainSelection: Integer; + function GetTarget: TScintRange; + procedure InitRawString(var S: TScintRawString; const Len: Integer); + procedure Notification(AComponent: TComponent; Operation: TOperation); override; + procedure Notify(const N: TSCNotification); virtual; + procedure SetTarget(const StartPos, EndPos: Integer); + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + procedure AddMarker(const Line: Integer; const Marker: TScintMarkerNumber); + procedure AddIndicator(const StartPos, EndPos: Integer; + const IndicatorNumber: TScintIndicatorNumber); + procedure BeginUndoAction; + function Call(Msg: Cardinal; WParam: Longint; LParam: Longint): Longint; + function CallStr(Msg: Cardinal; WParam: Longint; + const LParamStr: TScintRawString): Longint; + procedure CancelAutoComplete; + function CanRedo: Boolean; + function CanUndo: Boolean; + procedure ChooseCaretX; + procedure ClearAll; + procedure ClearIndicators(const IndicatorNumber: TScintIndicatorNumber); + procedure ClearSelection; + procedure ClearUndo; + function ConvertRawStringToString(const S: TScintRawString): String; + function ConvertPCharToRawString(const Text: PChar; + const TextLen: Integer): TScintRawString; + function ConvertStringToRawString(const S: String): TScintRawString; + procedure CopyToClipboard; + procedure CutToClipboard; + procedure DeleteAllMarkersOnLine(const Line: Integer); + procedure DeleteMarker(const Line: Integer; const Marker: TScintMarkerNumber); + procedure EndUndoAction; + function FindRawText(const StartPos, EndPos: Integer; const S: TScintRawString; + const Options: TScintFindOptions; out MatchRange: TScintRange): Boolean; + function FindText(const StartPos, EndPos: Integer; const S: String; + const Options: TScintFindOptions; out MatchRange: TScintRange): Boolean; + function FormatRange(const Draw: Boolean; + const RangeToFormat: PScintRangeToFormat): Integer; + procedure ForceModifiedState; + function GetCharAtPosition(const Pos: Integer): AnsiChar; + function GetColumnFromPosition(const Pos: Integer): Integer; + function GetDefaultWordChars: AnsiString; + function GetDocLineFromVisibleLine(const VisibleLine: Integer): Integer; + function GetStyleByteIndicatorsAtPosition(const Pos: Integer): TScintStyleByteIndicatorNumbers; + function GetLineEndPosition(const Line: Integer): Integer; + function GetLineFromPosition(const Pos: Integer): Integer; + function GetLineIndentation(const Line: Integer): Integer; + function GetLineIndentPosition(const Line: Integer): Integer; + function GetMarkers(const Line: Integer): TScintMarkerNumbers; + function GetPointFromPosition(const Pos: Integer): TPoint; + function GetPositionAfter(const Pos: Integer): Integer; + function GetPositionBefore(const Pos: Integer): Integer; + function GetPositionFromLine(const Line: Integer): Integer; + function GetPositionFromLineColumn(const Line, Column: Integer): Integer; + function GetPositionFromLineExpandedColumn(const Line, ExpandedColumn: Integer): Integer; + function GetPositionFromPoint(const P: TPoint; + const CharPosition, CloseOnly: Boolean): Integer; + function GetPositionOfMatchingBrace(const Pos: Integer): Integer; + function GetRawTextLength: Integer; + function GetRawTextRange(const StartPos, EndPos: Integer): TScintRawString; + function GetStyleAtPosition(const Pos: Integer): TScintStyleNumber; + function GetTextRange(const StartPos, EndPos: Integer): String; + function GetVisibleLineFromDocLine(const DocLine: Integer): Integer; + function GetWordEndPosition(const Pos: Integer; const OnlyWordChars: Boolean): Integer; + function GetWordStartPosition(const Pos: Integer; const OnlyWordChars: Boolean): Integer; + function IsPositionInViewVertically(const Pos: Integer): Boolean; + procedure PasteFromClipboard; + function RawSelTextEquals(const S: TScintRawString; const MatchCase: Boolean): Boolean; + procedure Redo; + procedure RemoveAdditionalSelections; + function ReplaceRawTextRange(const StartPos, EndPos: Integer; + const S: TScintRawString): TScintRange; + function ReplaceTextRange(const StartPos, EndPos: Integer; const S: String): TScintRange; + procedure RestyleLine(const Line: Integer); + procedure ScrollCaretIntoView; + function SelNotEmpty: Boolean; overload; + function SelNotEmpty(out Sel: TScintRange): Boolean; overload; + procedure SelectAll; + function SelTextEquals(const S: String; const MatchCase: Boolean): Boolean; + procedure SetAutoCompleteFillupChars(const FillupChars: AnsiString); + procedure SetAutoCompleteSeparator(const C: AnsiChar); + procedure SetAutoCompleteSelectedItem(const S: TScintRawString); + procedure SetAutoCompleteStopChars(const StopChars: AnsiString); + procedure SetBraceHighlighting(const Pos1, Pos2: Integer); + procedure SetCursorID(const CursorID: Integer); + procedure SetDefaultWordChars; + procedure SetEmptySelections; + procedure SetLineIndentation(const Line, Indentation: Integer); + procedure SetSavePoint; + procedure SetSingleSelection(const CaretPos, AnchorPos: Integer); + procedure SetWordChars(const S: AnsiString); + procedure ShowAutoComplete(const CharsEntered: Integer; const WordList: AnsiString); + procedure StyleNeeded(const EndPos: Integer); + procedure Undo; + procedure UpdateStyleAttributes; + function WordAtCursor: String; + function WordAtCursorRange: TScintRange; + procedure ZoomIn; + procedure ZoomOut; + property AutoCompleteActive: Boolean read GetAutoCompleteActive; + property CaretColumn: Integer read GetCaretColumn write SetCaretColumn; + property CaretColumnExpandedForTabs: Integer read GetCaretColumnExpandedForTabs; + property CaretLine: Integer read GetCaretLine write SetCaretLine; + property CaretPosition: Integer read GetCaretPosition write SetCaretPosition; + property CaretVirtualSpace: Integer read GetCaretVirtualSpace write SetCaretVirtualSpace; + property EffectiveCodePage: Integer read FEffectiveCodePage; + property InsertMode: Boolean read GetInsertMode; + property LineEndings: TScintLineEndings read GetLineEndings; + property LineEndingString: TScintRawString read GetLineEndingString; + property LineHeight: Integer read GetLineHeight; + property Lines: TScintEditStrings read FLines; + property LinesInWindow: Integer read GetLinesInWindow; + property MainSelection: Integer read GetMainSelection write SetMainSelection; + property Modified: Boolean read GetModified; + property RawSelText: TScintRawString read GetRawSelText write SetRawSelText; + property RawText: TScintRawString read GetRawText write SetRawText; + property RawTextLength: Integer read GetRawTextLength; + property ReadOnly: Boolean read GetReadOnly write SetReadOnly; + property Selection: TScintRange read GetSelection write SetSelection; + property SelectionAnchorPosition[Selection: Integer]: Integer read GetSelectionAnchorPosition write SetSelectionAnchorPosition; + property SelectionCaretPosition[Selection: Integer]: Integer read GetSelectionCaretPosition write SetSelectionCaretPosition; + property SelectionCount: Integer read GetSelectionCount; + property SelText: String read GetSelText write SetSelText; + property Styler: TScintCustomStyler read FStyler write SetStyler; + property TopLine: Integer read GetTopLine write SetTopLine; + published + property AcceptDroppedFiles: Boolean read FAcceptDroppedFiles write SetAcceptDroppedFiles + default False; + property AutoCompleteFontName: String read FAutoCompleteFontName + write SetAutoCompleteFontName; + property AutoCompleteFontSize: Integer read FAutoCompleteFontSize + write SetAutoCompleteFontSize default 0; + property CodePage: Integer read FCodePage write SetCodePage default 0; + property Color; + property FillSelectionToEdge: Boolean read FFillSelectionToEdge write SetFillSelectionToEdge + default False; + property Font; + property IndentationGuides: TScintIndentationGuides read FIndentationGuides + write SetIndentationGuides default sigNone; + property LineNumbers: Boolean read FLineNumbers write SetLineNumbers default False; + property ParentFont; + property PopupMenu; + property ReportCaretPositionToStyler: Boolean read FReportCaretPositionToStyler + write FReportCaretPositionToStyler; + property TabStop default True; + property TabWidth: Integer read FTabWidth write SetTabWidth default 8; + property UseStyleAttributes: Boolean read FUseStyleAttributes write SetUseStyleAttributes + default True; + property UseTabCharacter: Boolean read FUseTabCharacter write SetUseTabCharacter + default True; + property VirtualSpaceOptions: TScintVirtualSpaceOptions read FVirtualSpaceOptions + write SetVirtualSpaceOptions default []; + property WordWrap: Boolean read FWordWrap write SetWordWrap default False; + property Zoom: Integer read GetZoom write SetZoom default 0; + property OnAutoCompleteSelection: TScintEditAutoCompleteSelectionEvent read FOnAutoCompleteSelection write FOnAutoCompleteSelection; + property OnChange: TScintEditChangeEvent read FOnChange write FOnChange; + property OnCharAdded: TScintEditCharAddedEvent read FOnCharAdded write FOnCharAdded; + property OnDropFiles: TScintEditDropFilesEvent read FOnDropFiles write FOnDropFiles; + property OnHintShow: TScintEditHintShowEvent read FOnHintShow write FOnHintShow; + property OnKeyDown; + property OnKeyPress; + property OnKeyUp; + property OnMarginClick: TScintEditMarginClickEvent read FOnMarginClick write FOnMarginClick; + property OnModifiedChange: TNotifyEvent read FOnModifiedChange write FOnModifiedChange; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnUpdateUI: TNotifyEvent read FOnUpdateUI write FOnUpdateUI; + property OnZoom: TNotifyEvent read FOnZoom write FOnZoom; + end; + + TScintEditStrings = class(TStrings) + private + FEdit: TScintEdit; + function GetLineEndingLength(const Index: Integer): Integer; + function GetRawLine(Index: Integer): TScintRawString; + function GetRawLineWithEnding(Index: Integer): TScintRawString; + function GetRawLineLength(Index: Integer): Integer; + function GetRawLineLengthWithEnding(Index: Integer): Integer; + function GetState(Index: Integer): TScintLineState; + procedure PutRawLine(Index: Integer; const S: TScintRawString); + protected + procedure CheckIndexRange(const Index: Integer); + procedure CheckIndexRangePlusOne(const Index: Integer); + function Get(Index: Integer): String; override; + function GetCount: Integer; override; + function GetTextStr: String; override; + procedure Put(Index: Integer; const S: String); override; + procedure SetTextStr(const Value: String); override; + public + procedure Clear; override; + procedure Delete(Index: Integer); override; + procedure Insert(Index: Integer; const S: String); override; + procedure InsertRawLine(Index: Integer; const S: TScintRawString); + procedure SetText(Text: PChar); override; + property RawLineLengths[Index: Integer]: Integer read GetRawLineLength; + property RawLineLengthsWithEnding[Index: Integer]: Integer read GetRawLineLengthWithEnding; + property RawLines[Index: Integer]: TScintRawString read GetRawLine write PutRawLine; + property RawLinesWithEnding[Index: Integer]: TScintRawString read GetRawLineWithEnding; + property State[Index: Integer]: TScintLineState read GetState; + end; + + TScintStyleAttributes = record + FontName: String; + FontSize: Integer; + FontStyle: TFontStyles; + FontCharset: TFontCharset; + ForeColor: TColor; + BackColor: TColor; + end; + + TScintCustomStyler = class(TComponent) + private + FCaretIndex: Integer; + FCurIndex: Integer; + FLineState: TScintLineState; + FStyleStartIndex: Integer; + FStyleStr: AnsiString; + FText: TScintRawString; + FTextLen: Integer; + function GetCurChar: AnsiChar; + function GetEndOfLine: Boolean; + protected + procedure ApplyStyleByteIndicators(const Indicators: TScintStyleByteIndicatorNumbers; + StartIndex, EndIndex: Integer); + procedure ApplyStyle(const Style: TScintStyleNumber; + StartIndex, EndIndex: Integer); + procedure CommitStyle(const Style: TScintStyleNumber); + function ConsumeAllRemaining: Boolean; + function ConsumeChar(const C: AnsiChar): Boolean; + function ConsumeCharIn(const Chars: TScintRawCharSet): Boolean; + function ConsumeChars(const Chars: TScintRawCharSet): Boolean; + function ConsumeCharsNot(const Chars: TScintRawCharSet): Boolean; + function ConsumeString(const Chars: TScintRawCharSet): TScintRawString; + function CurCharIn(const Chars: TScintRawCharSet): Boolean; + function CurCharIs(const C: AnsiChar): Boolean; + procedure GetStyleAttributes(const Style: Integer; + var Attributes: TScintStyleAttributes); virtual; abstract; + function LineTextSpans(const S: TScintRawString): Boolean; virtual; + function NextCharIs(const C: AnsiChar): Boolean; + function PreviousCharIn(const Chars: TScintRawCharSet): Boolean; + procedure ResetCurIndexTo(Index: Integer); + procedure ReplaceText(StartIndex, EndIndex: Integer; const C: AnsiChar); + procedure StyleNeeded; virtual; abstract; + property CaretIndex: Integer read FCaretIndex; + property CurChar: AnsiChar read GetCurChar; + property CurIndex: Integer read FCurIndex; + property EndOfLine: Boolean read GetEndOfLine; + property LineState: TScintLineState read FLineState write FLineState; + property StyleStartIndex: Integer read FStyleStartIndex; + property Text: TScintRawString read FText; + property TextLength: Integer read FTextLen; + end; + + TScintPixmap = class + private + class var ColorCodes: String; + class constructor Create; + type TPixmap = array of AnsiString; + var FPixmap: TPixmap; + function GetPixmap: Pointer; + public + procedure InitializeFromBitmap(const ABitmap: TBitmap; const TransparentColor: TColorRef); + property Pixmap: Pointer read GetPixmap; + end; + + EScintEditError = class(Exception); + +function ScintRawStringIsBlank(const S: TScintRawString): Boolean; + +implementation + +uses + ShellAPI, RTLConsts, UITypes, GraphUtil; + +function ScintRawStringIsBlank(const S: TScintRawString): Boolean; +begin + for var I := 1 to Length(S) do + if not(S[I] in [#9, ' ']) then + Exit(False); + Result := True; +end; + +{ TScintEdit } + +const + AUTOCSETSEPARATOR = #9; + +constructor TScintEdit.Create(AOwner: TComponent); +begin + inherited; + FLines := TScintEditStrings.Create; + FLines.FEdit := Self; + FTabWidth := 8; + FUseStyleAttributes := True; + FUseTabCharacter := True; + SetBounds(0, 0, 257, 193); + ParentColor := False; + TabStop := True; +end; + +destructor TScintEdit.Destroy; +begin + SetStyler(nil); + FLines.Free; + FLines := nil; + inherited; +end; + +procedure TScintEdit.AddIndicator(const StartPos, EndPos: Integer; + const IndicatorNumber: TScintIndicatorNumber); +begin + CheckPosRange(StartPos, EndPos); + Call(SCI_SETINDICATORCURRENT, IndicatorNumber, 0); + Call(SCI_INDICATORFILLRANGE, StartPos, EndPos - StartPos); +end; + +procedure TScintEdit.AddMarker(const Line: Integer; + const Marker: TScintMarkerNumber); +begin + FLines.CheckIndexRange(Line); + Call(SCI_MARKERADD, Line, Marker); +end; + +procedure TScintEdit.ApplyOptions; +const + IndentationGuides: array [TScintIndentationGuides] of Integer = (SC_IV_NONE, SC_IV_REAL, + SC_IV_LOOKFORWARD, SC_IV_LOOKBOTH); +var + Flags: Integer; +begin + if not HandleAllocated then + Exit; + Call(SCI_SETSELEOLFILLED, Ord(FFillSelectionToEdge), 0); + Call(SCI_SETTABWIDTH, FTabWidth, 0); + Call(SCI_SETUSETABS, Ord(FUseTabCharacter), 0); + Flags := 0; + if svsRectangularSelection in VirtualSpaceOptions then + Flags := Flags or SCVS_RECTANGULARSELECTION; + if svsUserAccessible in VirtualSpaceOptions then + Flags := Flags or SCVS_USERACCESSIBLE; + Call(SCI_SETVIRTUALSPACEOPTIONS, Flags, 0); + Call(SCI_SETWRAPMODE, Ord(FWordWrap), 0); + Call(SCI_SETINDENTATIONGUIDES, IndentationGuides[FIndentationGuides], 0); +end; + +procedure TScintEdit.BeginUndoAction; +begin + Call(SCI_BEGINUNDOACTION, 0, 0); +end; + +function TScintEdit.Call(Msg: Cardinal; WParam: Longint; LParam: Longint): Longint; +var + ErrorStatus: LRESULT; +begin + HandleNeeded; + if FDirectPtr = nil then + Error('Call: FDirectPtr is nil'); + Result := Scintilla_DirectFunction(FDirectPtr, Msg, WParam, LParam); + + ErrorStatus := Scintilla_DirectFunction(FDirectPtr, SCI_GETSTATUS, 0, 0); + if ErrorStatus <> 0 then begin + Scintilla_DirectFunction(FDirectPtr, SCI_SETSTATUS, 0, 0); + ErrorFmt('Error status %d returned after Call(%u, %d, %d) = %d', + [ErrorStatus, Msg, WParam, LParam, Result]); + end; +end; + +function TScintEdit.CallStr(Msg: Cardinal; WParam: Longint; + const LParamStr: TScintRawString): Longint; +begin + Result := Call(Msg, WParam, LPARAM(PAnsiChar(LParamStr))); +end; + +procedure TScintEdit.CancelAutoComplete; +begin + Call(SCI_AUTOCCANCEL, 0, 0); +end; + +function TScintEdit.CanRedo: Boolean; +begin + Result := Call(SCI_CANREDO, 0, 0) <> 0; +end; + +function TScintEdit.CanUndo: Boolean; +begin + Result := Call(SCI_CANUNDO, 0, 0) <> 0; +end; + +procedure TScintEdit.Change(const AInserting: Boolean; + const AStartPos, ALength, ALinesDelta: Integer); +var + Info: TScintEditChangeInfo; +begin + inherited Changed; + if Assigned(FOnChange) then begin + Info.Inserting := AInserting; + Info.StartPos := AStartPos; + Info.Length := ALength; + Info.LinesDelta := ALinesDelta; + FOnChange(Self, Info); + end; +end; + +procedure TScintEdit.CheckPosRange(const StartPos, EndPos: Integer); +begin + if (StartPos < 0) or (StartPos > EndPos) or (EndPos > GetRawTextLength) then + ErrorFmt('CheckPosRange: Invalid range (%d, %d)', [StartPos, EndPos]); +end; + +procedure TScintEdit.ChooseCaretX; +begin + Call(SCI_CHOOSECARETX, 0, 0); +end; + +procedure TScintEdit.ClearAll; +begin + Call(SCI_CLEARALL, 0, 0); + ChooseCaretX; +end; + +procedure TScintEdit.ClearIndicators( + const IndicatorNumber: TScintIndicatorNumber); +begin + Call(SCI_SETINDICATORCURRENT, IndicatorNumber, 0); + Call(SCI_INDICATORCLEARRANGE, 0, RawTextLength); +end; + +procedure TScintEdit.ClearSelection; +begin + Call(SCI_CLEAR, 0, 0); +end; + +procedure TScintEdit.ClearUndo; +begin + { SCI_EMPTYUNDOBUFFER resets the save point but doesn't send a + SCN_SAVEPOINTREACHED notification. Call SetSavePoint manually to get + that. SetSavePoint additionally resets FForceModified. } + SetSavePoint; + Call(SCI_EMPTYUNDOBUFFER, 0, 0); +end; + +function TScintEdit.ConvertRawStringToString(const S: TScintRawString): String; +var + SrcLen, DestLen: Integer; + DestStr: UnicodeString; +begin + SrcLen := Length(S); + if SrcLen > 0 then begin + DestLen := MultiByteToWideChar(FCodePage, 0, PAnsiChar(S), SrcLen, nil, 0); + if DestLen <= 0 then + Error('MultiByteToWideChar failed'); + SetString(DestStr, nil, DestLen); + if MultiByteToWideChar(FCodePage, 0, PAnsiChar(S), SrcLen, @DestStr[1], + Length(DestStr)) <> DestLen then + Error('Unexpected result from MultiByteToWideChar'); + end; + Result := DestStr; +end; + +function TScintEdit.ConvertPCharToRawString(const Text: PChar; + const TextLen: Integer): TScintRawString; +var + DestLen: Integer; + DestStr: TScintRawString; +begin + if TextLen > 0 then begin + DestLen := WideCharToMultiByte(FCodePage, 0, Text, TextLen, nil, 0, nil, nil); + if DestLen <= 0 then + Error('WideCharToMultiByte failed'); + InitRawString(DestStr, DestLen); + if WideCharToMultiByte(FCodePage, 0, Text, TextLen, @DestStr[1], Length(DestStr), + nil, nil) <> DestLen then + Error('Unexpected result from WideCharToMultiByte'); + end; + Result := DestStr; +end; + +function TScintEdit.ConvertStringToRawString(const S: String): TScintRawString; +begin + Result := ConvertPCharToRawString(PChar(S), Length(S)); +end; + +procedure TScintEdit.CopyToClipboard; +begin + Call(SCI_COPY, 0, 0); +end; + +procedure TScintEdit.CreateParams(var Params: TCreateParams); +begin + inherited; + CreateSubClass(Params, 'Scintilla'); + //Params.ExStyle := Params.ExStyle or WS_EX_CLIENTEDGE; + Params.WindowClass.style := Params.WindowClass.style and + not (CS_HREDRAW or CS_VREDRAW); +end; + +procedure TScintEdit.CreateWnd; +begin + inherited; + FDirectPtr := Pointer(SendMessage(Handle, SCI_GETDIRECTPOINTER, 0, 0)); + if FDirectPtr = nil then + Error('CreateWnd: FDirectPtr is nil'); + UpdateCodePage; + Call(SCI_SETCARETPERIOD, GetCaretBlinkTime, 0); + Call(SCI_SETSCROLLWIDTHTRACKING, 1, 0); + { The default popup menu conflicts with the VCL's PopupMenu on Delphi 3 } + Call(SCI_USEPOPUP, 0, 0); + SetDefaultWordChars; + ApplyOptions; + UpdateStyleAttributes; + if FAcceptDroppedFiles then + DragAcceptFiles(Handle, True); +end; + +procedure TScintEdit.CutToClipboard; +begin + Call(SCI_CUT, 0, 0); +end; + +procedure TScintEdit.DeleteAllMarkersOnLine(const Line: Integer); +begin + FLines.CheckIndexRange(Line); + Call(SCI_MARKERDELETE, Line, -1); +end; + +procedure TScintEdit.DeleteMarker(const Line: Integer; + const Marker: TScintMarkerNumber); +begin + FLines.CheckIndexRange(Line); + Call(SCI_MARKERDELETE, Line, Marker); +end; + +procedure TScintEdit.EndUndoAction; +begin + Call(SCI_ENDUNDOACTION, 0, 0); +end; + +class procedure TScintEdit.Error(const S: String); +begin + raise EScintEditError.Create('TScintEdit error: ' + S); +end; + +class procedure TScintEdit.ErrorFmt(const S: String; const Args: array of const); +begin + Error(Format(S, Args)); +end; + +function TScintEdit.FindRawText(const StartPos, EndPos: Integer; + const S: TScintRawString; const Options: TScintFindOptions; + out MatchRange: TScintRange): Boolean; +var + Flags: Integer; +begin + Flags := 0; + if sfoMatchCase in Options then + Flags := Flags or SCFIND_MATCHCASE; + if sfoWholeWord in Options then + Flags := Flags or SCFIND_WHOLEWORD; + + SetTarget(StartPos, EndPos); + Call(SCI_SETSEARCHFLAGS, Flags, 0); + Result := Call(SCI_SEARCHINTARGET, Length(S), LPARAM(PAnsiChar(S))) >= 0; + if Result then + MatchRange := GetTarget; +end; + +function TScintEdit.FindText(const StartPos, EndPos: Integer; const S: String; + const Options: TScintFindOptions; out MatchRange: TScintRange): Boolean; +begin + Result := FindRawText(StartPos, EndPos, ConvertStringToRawString(S), + Options, MatchRange); +end; + +procedure TScintEdit.ForceModifiedState; +begin + if not FForceModified then begin + FForceModified := True; + if Assigned(FOnModifiedChange) then + FOnModifiedChange(Self); + end; +end; + +function TScintEdit.FormatRange(const Draw: Boolean; + const RangeToFormat: PScintRangeToFormat): Integer; +begin + Result := Call(SCI_FORMATRANGE, Ord(Draw), LPARAM(RangeToFormat)); +end; + +function TScintEdit.GetAutoCompleteActive: Boolean; +begin + Result := Call(SCI_AUTOCACTIVE, 0, 0) <> 0; +end; + +function TScintEdit.GetCaretColumn: Integer; +begin + Result := GetColumnFromPosition(GetCaretPosition); +end; + +function TScintEdit.GetCaretColumnExpandedForTabs: Integer; +begin + Result := Call(SCI_GETCOLUMN, GetCaretPosition, 0); + Inc(Result, GetCaretVirtualSpace); +end; + +function TScintEdit.GetCaretLine: Integer; +begin + Result := GetLineFromPosition(GetCaretPosition); +end; + +function TScintEdit.GetCaretPosition: Integer; +begin + Result := Call(SCI_GETCURRENTPOS, 0, 0); +end; + +function TScintEdit.GetCaretVirtualSpace: Integer; +begin + Result := Call(SCI_GETSELECTIONNCARETVIRTUALSPACE, GetMainSelection, 0); +end; + +function TScintEdit.GetCharAtPosition(const Pos: Integer): AnsiChar; +begin + Result := AnsiChar(Call(SCI_GETCHARAT, Pos, 0)); +end; + +function TScintEdit.GetColumnFromPosition(const Pos: Integer): Integer; +var + Line: Integer; +begin + Line := GetLineFromPosition(Pos); + Result := Pos - GetPositionFromLine(Line); +end; + +function TScintEdit.GetDefaultWordChars: AnsiString; +begin + Result := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_'; +end; + +function TScintEdit.GetDocLineFromVisibleLine(const VisibleLine: Integer): Integer; +begin + Result := Call(SCI_DOCLINEFROMVISIBLE, VisibleLine, 0); +end; + +function TScintEdit.GetStyleByteIndicatorsAtPosition(const Pos: Integer): TScintStyleByteIndicatorNumbers; +var + Indic: Byte; +begin + Indic := Byte(Call(SCI_GETSTYLEAT, Pos, 0)) shr 5; + Result := TScintStyleByteIndicatorNumbers(Indic); +end; + +function TScintEdit.GetInsertMode: Boolean; +begin + Result := Call(SCI_GETOVERTYPE, 0, 0) = 0; +end; + +function TScintEdit.GetLineEndings: TScintLineEndings; +begin + case Call(SCI_GETEOLMODE, 0, 0) of + SC_EOL_CR: Result := sleCR; + SC_EOL_LF: Result := sleLF; + else + Result := sleCRLF; + end; +end; + +function TScintEdit.GetLineEndingString: TScintRawString; +const + EndingStrs: array[TScintLineEndings] of TScintRawString = + (#13#10, #13, #10); +begin + Result := EndingStrs[LineEndings]; +end; + +function TScintEdit.GetLineEndPosition(const Line: Integer): Integer; +begin + FLines.CheckIndexRange(Line); + Result := Call(SCI_GETLINEENDPOSITION, Line, 0); +end; + +function TScintEdit.GetLineFromPosition(const Pos: Integer): Integer; +begin + Result := Call(SCI_LINEFROMPOSITION, Pos, 0); +end; + +function TScintEdit.GetLineHeight: Integer; +begin + Result := Call(SCI_TEXTHEIGHT, 0, 0); +end; + +function TScintEdit.GetLineIndentation(const Line: Integer): Integer; +begin + FLines.CheckIndexRange(Line); + Result := Call(SCI_GETLINEINDENTATION, Line, 0); +end; + +function TScintEdit.GetLineIndentPosition(const Line: Integer): Integer; +begin + FLines.CheckIndexRange(Line); + Result := Call(SCI_GETLINEINDENTPOSITION, Line, 0); +end; + +function TScintEdit.GetLinesInWindow: Integer; +begin + Result := Call(SCI_LINESONSCREEN, 0, 0); +end; + +function TScintEdit.GetMainSelection: Integer; +begin + Result := Call(SCI_GETMAINSELECTION, 0, 0); +end; + +function TScintEdit.GetMarkers(const Line: Integer): TScintMarkerNumbers; +begin + FLines.CheckIndexRange(Line); + Integer(Result) := Call(SCI_MARKERGET, Line, 0); +end; + +function TScintEdit.GetModified: Boolean; +begin + Result := FForceModified or (Call(SCI_GETMODIFY, 0, 0) <> 0); +end; + +function TScintEdit.GetPointFromPosition(const Pos: Integer): TPoint; +begin + Result.X := Call(SCI_POINTXFROMPOSITION, 0, Pos); + Result.Y := Call(SCI_POINTYFROMPOSITION, 0, Pos); +end; + +function TScintEdit.GetPositionAfter(const Pos: Integer): Integer; +begin + Result := Call(SCI_POSITIONAFTER, Pos, 0); +end; + +function TScintEdit.GetPositionBefore(const Pos: Integer): Integer; +begin + Result := Call(SCI_POSITIONBEFORE, Pos, 0); +end; + +function TScintEdit.GetPositionFromLine(const Line: Integer): Integer; +begin + FLines.CheckIndexRangePlusOne(Line); + Result := Call(SCI_POSITIONFROMLINE, Line, 0); +end; + +function TScintEdit.GetPositionFromLineColumn(const Line, Column: Integer): Integer; +var + Col, Len: Integer; +begin + Col := Column; + Result := GetPositionFromLine(Line); + Len := GetLineEndPosition(Line) - Result; + if Col > Len then + Col := Len; + if Col > 0 then + Inc(Result, Col); +end; + +function TScintEdit.GetPositionFromLineExpandedColumn(const Line, + ExpandedColumn: Integer): Integer; +begin + FLines.CheckIndexRange(Line); + Result := Call(SCI_FINDCOLUMN, Line, ExpandedColumn); +end; + +function TScintEdit.GetPositionFromPoint(const P: TPoint; + const CharPosition, CloseOnly: Boolean): Integer; +begin + if CharPosition then begin + if CloseOnly then + Result := Call(SCI_CHARPOSITIONFROMPOINTCLOSE, P.X, P.Y) + else + Result := Call(SCI_CHARPOSITIONFROMPOINT, P.X, P.Y); + end + else begin + if CloseOnly then + Result := Call(SCI_POSITIONFROMPOINTCLOSE, P.X, P.Y) + else + Result := Call(SCI_POSITIONFROMPOINT, P.X, P.Y); + end; +end; + +function TScintEdit.GetPositionOfMatchingBrace(const Pos: Integer): Integer; +begin + Result := Call(SCI_BRACEMATCH, Pos, 0); +end; + +function TScintEdit.GetRawSelText: TScintRawString; +var + Len: Integer; + S: TScintRawString; +begin + Len := Call(SCI_GETSELTEXT, 0, 0) - 1; + if Len > 0 then begin + InitRawString(S, Len); + Call(SCI_GETSELTEXT, 0, LPARAM(PAnsiChar(@S[1]))); + end; + Result := S; +end; + +function TScintEdit.GetRawText: TScintRawString; +begin + Result := GetRawTextRange(0, GetRawTextLength); +end; + +function TScintEdit.GetRawTextLength: Integer; +begin + Result := Call(SCI_GETLENGTH, 0, 0); +end; + +function TScintEdit.GetRawTextRange(const StartPos, EndPos: Integer): TScintRawString; +var + S: TScintRawString; + Range: TSci_TextRange; +begin + CheckPosRange(StartPos, EndPos); + if EndPos > StartPos then begin + InitRawString(S, EndPos - StartPos); + Range.chrg.cpMin := StartPos; + Range.chrg.cpMax := EndPos; + Range.lpstrText := @S[1]; + if Call(SCI_GETTEXTRANGE, 0, LPARAM(@Range)) <> EndPos - StartPos then + Error('Unexpected result from SCI_GETTEXTRANGE'); + end; + Result := S; +end; + +function TScintEdit.GetReadOnly: Boolean; +begin + Result := Call(SCI_GETREADONLY, 0, 0) <> 0; +end; + +function TScintEdit.GetSelection: TScintRange; +begin + Result.StartPos := Call(SCI_GETSELECTIONSTART, 0, 0); + Result.EndPos := Call(SCI_GETSELECTIONEND, 0, 0); +end; + +function TScintEdit.GetSelectionAnchorPosition(Selection: Integer): Integer; +begin + Result := Call(SCI_GETSELECTIONNANCHOR, Selection, 0); +end; + +function TScintEdit.GetSelectionCaretPosition(Selection: Integer): Integer; +begin + Result := Call(SCI_GETSELECTIONNCARET, Selection, 0); +end; + +function TScintEdit.GetSelectionCount: Integer; +{ Returns the number of selections currently active. Rectangular selections are + handled (and returned) as multiple selections, one for each line. } +begin + Result := Call(SCI_GETSELECTIONS, 0, 0); +end; + +function TScintEdit.GetSelText: String; +begin + Result := ConvertRawStringToString(GetRawSelText); +end; + +function TScintEdit.GetStyleAtPosition(const Pos: Integer): TScintStyleNumber; +begin + Result := Call(SCI_GETSTYLEAT, Pos, 0) and $1F; +end; + +function TScintEdit.GetTarget: TScintRange; +begin + Result.StartPos := Call(SCI_GETTARGETSTART, 0, 0); + Result.EndPos := Call(SCI_GETTARGETEND, 0, 0); +end; + +function TScintEdit.GetTextRange(const StartPos, EndPos: Integer): String; +begin + Result := ConvertRawStringToString(GetRawTextRange(StartPos, EndPos)); +end; + +function TScintEdit.GetTopLine: Integer; +begin + Result := Call(SCI_GETFIRSTVISIBLELINE, 0, 0); +end; + +function TScintEdit.GetVisibleLineFromDocLine(const DocLine: Integer): Integer; +begin + FLines.CheckIndexRange(DocLine); + Result := Call(SCI_VISIBLEFROMDOCLINE, DocLine, 0); +end; + +function TScintEdit.GetWordEndPosition(const Pos: Integer; + const OnlyWordChars: Boolean): Integer; +begin + Result := Call(SCI_WORDENDPOSITION, Pos, Ord(OnlyWordChars)); +end; + +function TScintEdit.GetWordStartPosition(const Pos: Integer; + const OnlyWordChars: Boolean): Integer; +begin + Result := Call(SCI_WORDSTARTPOSITION, Pos, Ord(OnlyWordChars)); +end; + +function TScintEdit.GetZoom: Integer; +begin + Result := Call(SCI_GETZOOM, 0, 0); +end; + +procedure TScintEdit.InitRawString(var S: TScintRawString; const Len: Integer); +begin + SetString(S, nil, Len); + //experimental, dont need this ATM: + if FCodePage <> 0 then + System.SetCodePage(RawByteString(S), FCodePage, False); +end; + +function TScintEdit.IsPositionInViewVertically(const Pos: Integer): Boolean; +var + P: TPoint; +begin + P := GetPointFromPosition(Pos); + Result := (P.Y >= 0) and (P.Y + GetLineHeight <= ClientHeight); +end; + +procedure TScintEdit.Notification(AComponent: TComponent; Operation: TOperation); +begin + inherited; + if Operation = opRemove then + if AComponent = FStyler then + SetStyler(nil); +end; + +procedure TScintEdit.Notify(const N: TSCNotification); +begin + case N.nmhdr.code of + SCN_AUTOCSELECTION: + begin + if Assigned(FOnAutoCompleteSelection) then + FOnAutoCompleteSelection(Self); + end; + SCN_CHARADDED: + begin + if Assigned(FOnCharAdded) then + FOnCharAdded(Self, AnsiChar(N.ch)); + end; + SCN_MARGINCLICK: + begin + if Assigned(FOnMarginClick) then + FOnMarginClick(Self, N.margin, GetLineFromPosition(N.position)); + end; + SCN_MODIFIED: + begin + if N.modificationType and SC_MOD_INSERTTEXT <> 0 then + Change(True, N.position, N.length, N.linesAdded) + else if N.modificationType and SC_MOD_DELETETEXT <> 0 then + Change(False, N.position, N.length, N.linesAdded); + + if (N.linesAdded > 0) and FLineNumbers then + UpdateLineNumbersWidth; + end; + SCN_SAVEPOINTLEFT, + SCN_SAVEPOINTREACHED: + begin + if Assigned(FOnModifiedChange) then + FOnModifiedChange(Self); + end; + SCN_STYLENEEDED: StyleNeeded(N.position); + SCN_UPDATEUI: + begin + if Assigned(FOnUpdateUI) then + FOnUpdateUI(Self); + end; + SCN_ZOOM: + begin + if Assigned(FOnZoom) then + FOnZoom(Self); + if FLineNumbers then + UpdateLineNumbersWidth; + end; + end; +end; + +procedure TScintEdit.PasteFromClipboard; +begin + Call(SCI_PASTE, 0, 0); +end; + +function TScintEdit.RawSelTextEquals(const S: TScintRawString; + const MatchCase: Boolean): Boolean; +var + Flags: Integer; + Target, Sel: TScintRange; +begin + Flags := 0; + if MatchCase then + Flags := Flags or SCFIND_MATCHCASE; + + Call(SCI_TARGETFROMSELECTION, 0, 0); + Call(SCI_SETSEARCHFLAGS, Flags, 0); + Result := False; + if Call(SCI_SEARCHINTARGET, Length(S), LPARAM(PAnsiChar(S))) >= 0 then begin + Target := GetTarget; + Sel := GetSelection; + if (Target.StartPos = Sel.StartPos) and (Target.EndPos = Sel.EndPos) then + Result := True; + end; +end; + +procedure TScintEdit.Redo; +begin + Call(SCI_REDO, 0, 0); +end; + +procedure TScintEdit.RemoveAdditionalSelections; +begin + var MainSel := MainSelection; + var CaretPos := SelectionCaretPosition[MainSel]; + var AnchorPos := SelectionAnchorPosition[MainSel]; + SetSingleSelection(CaretPos, AnchorPos); +end; + +function TScintEdit.ReplaceRawTextRange(const StartPos, EndPos: Integer; + const S: TScintRawString): TScintRange; +begin + CheckPosRange(StartPos, EndPos); + SetTarget(StartPos, EndPos); + Call(SCI_REPLACETARGET, Length(S), LPARAM(PAnsiChar(S))); + Result := GetTarget; +end; + +function TScintEdit.ReplaceTextRange(const StartPos, EndPos: Integer; + const S: String): TScintRange; +begin + Result := ReplaceRawTextRange(StartPos, EndPos, ConvertStringToRawString(S)); +end; + +procedure TScintEdit.RestyleLine(const Line: Integer); +var + StartPos, EndPos, EndStyledPos: Integer; +begin + StartPos := GetPositionFromLine(Line); + EndPos := GetPositionFromLine(Line + 1); + { Back up the 'last styled position' if necessary } + EndStyledPos := Call(SCI_GETENDSTYLED, 0, 0); + if StartPos < EndStyledPos then + Call(SCI_STARTSTYLING, StartPos, 0); + StyleNeeded(EndPos); +end; + +procedure TScintEdit.ScrollCaretIntoView; +begin + Call(SCI_SCROLLCARET, 0, 0); +end; + +function TScintEdit.SelNotEmpty: Boolean; +begin + var Sel: TScintRange; + Result := SelNotEmpty(Sel); +end; + +function TScintEdit.SelNotEmpty(out Sel: TScintRange): Boolean; +begin + Sel := GetSelection; + Result := Sel.EndPos > Sel.StartPos; +end; + +procedure TScintEdit.SelectAll; +begin + Call(SCI_SELECTALL, 0, 0); +end; + +function TScintEdit.SelTextEquals(const S: String; + const MatchCase: Boolean): Boolean; +begin + Result := RawSelTextEquals(ConvertStringToRawString(S), MatchCase); +end; + +procedure TScintEdit.SetAcceptDroppedFiles(const Value: Boolean); +begin + if FAcceptDroppedFiles <> Value then begin + FAcceptDroppedFiles := Value; + if HandleAllocated then + DragAcceptFiles(Handle, Value); + end; +end; + +procedure TScintEdit.SetAutoCompleteFillupChars(const FillupChars: AnsiString); +begin + CallStr(SCI_AUTOCSETFILLUPS, 0, FillupChars); +end; + +procedure TScintEdit.SetAutoCompleteFontName(const Value: String); +begin + if FAutoCompleteFontName <> Value then begin + FAutoCompleteFontName := Value; + UpdateStyleAttributes; + end; +end; + +procedure TScintEdit.SetAutoCompleteFontSize(const Value: Integer); +begin + if FAutoCompleteFontSize <> Value then begin + FAutoCompleteFontSize := Value; + UpdateStyleAttributes; + end; +end; + +procedure TScintEdit.SetAutoCompleteSelectedItem(const S: TScintRawString); +begin + CallStr(SCI_AUTOCSELECT, 0, S); +end; + +procedure TScintEdit.SetAutoCompleteSeparator(const C: AnsiChar); +begin + Call(SCI_AUTOCSETSEPARATOR, WParam(C), 0); +end; + +procedure TScintEdit.SetAutoCompleteStopChars(const StopChars: AnsiString); +begin + CallStr(SCI_AUTOCSTOPS, 0, StopChars); +end; + +procedure TScintEdit.SetBraceHighlighting(const Pos1, Pos2: Integer); +begin + Call(SCI_BRACEHIGHLIGHT, Pos1, Pos2); +end; + +procedure TScintEdit.SetCaretColumn(const Value: Integer); +begin + SetCaretPosition(GetPositionFromLineColumn(GetCaretLine, Value)); +end; + +procedure TScintEdit.SetCaretLine(const Value: Integer); +begin + Call(SCI_GOTOLINE, Value, 0); + ChooseCaretX; +end; + +procedure TScintEdit.SetCaretPosition(const Value: Integer); +begin + Call(SCI_GOTOPOS, Value, 0); + ChooseCaretX; +end; + +procedure TScintEdit.SetCaretVirtualSpace(const Value: Integer); +var + Pos, LineEndPos, MainSel: Integer; +begin + { Weird things happen if a non-zero virtual space is set when the caret + isn't at the end of a line, so don't allow it } + Pos := GetCaretPosition; + LineEndPos := GetLineEndPosition(GetLineFromPosition(Pos)); + if (Pos = LineEndPos) or (Value = 0) then begin + MainSel := GetMainSelection; + Call(SCI_SETSELECTIONNANCHORVIRTUALSPACE, MainSel, Value); + Call(SCI_SETSELECTIONNCARETVIRTUALSPACE, MainSel, Value); + ChooseCaretX; + end; +end; + +procedure TScintEdit.SetCodePage(const Value: Integer); +begin + if FCodePage <> Value then begin + FCodePage := Value; + UpdateCodePage; + end; +end; + +procedure TScintEdit.SetCursorID(const CursorID: Integer); +begin + Call(SCI_SETCURSOR, CursorID, 0); +end; + +procedure TScintEdit.SetDefaultWordChars; +begin + SetWordChars(GetDefaultWordChars); +end; + +procedure TScintEdit.SetEmptySelections; +{ Makes all selections empty without scrolling the caret into view } +begin + for var Selection := 0 to SelectionCount-1 do begin + var Pos := SelectionCaretPosition[Selection]; + SelectionAnchorPosition[Selection] := Pos; + end; +end; + +procedure TScintEdit.SetFillSelectionToEdge(const Value: Boolean); +begin + if FFillSelectionToEdge <> Value then begin + FFillSelectionToEdge := Value; + ApplyOptions; + end; +end; + +procedure TScintEdit.SetLineIndentation(const Line, Indentation: Integer); +begin + FLines.CheckIndexRange(Line); + Call(SCI_SETLINEINDENTATION, Line, Indentation); +end; + +procedure TScintEdit.SetIndentationGuides(const Value: TScintIndentationGuides); +begin + if FIndentationGuides <> Value then begin + FIndentationGuides := Value; + ApplyOptions; + end; +end; + +procedure TScintEdit.SetLineNumbers(const Value: Boolean); +begin + if FLineNumbers <> Value then begin + FLineNumbers := Value; + UpdateLineNumbersWidth; + end; +end; + +procedure TScintEdit.SetMainSelection(const Value: Integer); +begin + Call(SCI_SETMAINSELECTION, Value, 0); +end; + +procedure TScintEdit.SetRawSelText(const Value: TScintRawString); +begin + Call(SCI_REPLACESEL, 0, LPARAM(PAnsiChar(Value))); + ChooseCaretX; +end; + +procedure TScintEdit.SetRawText(const Value: TScintRawString); +begin + { Workaround: Without this call, if the caret is on line 0 and out in + virtual space, it'll remain in virtual space after the replacement } + Call(SCI_CLEARSELECTIONS, 0, 0); + { Using ReplaceRawTextRange instead of SCI_SETTEXT for embedded null support } + ReplaceRawTextRange(0, GetRawTextLength, Value); + ChooseCaretX; +end; + +procedure TScintEdit.SetReadOnly(const Value: Boolean); +begin + Call(SCI_SETREADONLY, Ord(Value), 0); +end; + +procedure TScintEdit.SetSavePoint; +begin + if FForceModified then begin + FForceModified := False; + if Assigned(FOnModifiedChange) then + FOnModifiedChange(Self); + end; + Call(SCI_SETSAVEPOINT, 0, 0); +end; + +procedure TScintEdit.SetSelection(const Value: TScintRange); +begin + Call(SCI_SETSEL, Value.StartPos, Value.EndPos); + ChooseCaretX; +end; + +procedure TScintEdit.SetSelectionAnchorPosition(Selection: Integer; + const AnchorPos: Integer); +begin + Call(SCI_SETSELECTIONNANCHOR, Selection, AnchorPos); +end; + +procedure TScintEdit.SetSelectionCaretPosition(Selection: Integer; + const CaretPos: Integer); +begin + Call(SCI_SETSELECTIONNCARET, Selection, CaretPos); +end; + +procedure TScintEdit.SetSelText(const Value: String); +begin + SetRawSelText(ConvertStringToRawString(Value)); +end; + +procedure TScintEdit.SetSingleSelection(const CaretPos, AnchorPos: Integer); +{ Sets the main selection and removes additional selections without scrolling + the caret into view } +begin + Call(SCI_SETSELECTION, CaretPos, AnchorPos); +end; + +procedure TScintEdit.SetStyler(const Value: TScintCustomStyler); +begin + if FStyler <> Value then begin + if Assigned(Value) then + Value.FreeNotification(Self); + FStyler := Value; + if HandleAllocated then begin + Call(SCI_CLEARDOCUMENTSTYLE, 0, 0); + Call(SCI_STARTSTYLING, 0, 0); + UpdateStyleAttributes; + end; + end; +end; + +procedure TScintEdit.SetTabWidth(const Value: Integer); +begin + if (FTabWidth <> Value) and (Value > 0) and (Value < 100) then begin + FTabWidth := Value; + ApplyOptions; + end; +end; + +procedure TScintEdit.SetTarget(const StartPos, EndPos: Integer); +begin + Call(SCI_SETTARGETSTART, StartPos, 0); + Call(SCI_SETTARGETEND, EndPos, 0); +end; + +procedure TScintEdit.SetTopLine(const Value: Integer); +begin + Call(SCI_SETFIRSTVISIBLELINE, Value, 0); +end; + +procedure TScintEdit.SetUseStyleAttributes(const Value: Boolean); +begin + if FUseStyleAttributes <> Value then begin + FUseStyleAttributes := Value; + UpdateStyleAttributes; + end; +end; + +procedure TScintEdit.SetUseTabCharacter(const Value: Boolean); +begin + if FUseTabCharacter <> Value then begin + FUseTabCharacter := Value; + ApplyOptions; + end; +end; + +procedure TScintEdit.SetVirtualSpaceOptions(const Value: TScintVirtualSpaceOptions); +begin + if FVirtualSpaceOptions <> Value then begin + FVirtualSpaceOptions := Value; + ApplyOptions; + end; +end; + +procedure TScintEdit.SetWordChars(const S: AnsiString); +begin + CallStr(SCI_SETWORDCHARS, 0, S); +end; + +procedure TScintEdit.SetWordWrap(const Value: Boolean); +begin + if FWordWrap <> Value then begin + FWordWrap := Value; + ApplyOptions; + end; +end; + +procedure TScintEdit.SetZoom(const Value: Integer); +begin + Call(SCI_SETZOOM, Value, 0); +end; + +procedure TScintEdit.ShowAutoComplete(const CharsEntered: Integer; + const WordList: AnsiString); +begin + Call(SCI_AUTOCSHOW, CharsEntered, LPARAM(PAnsiChar(WordList))); +end; + +procedure TScintEdit.StyleNeeded(const EndPos: Integer); + + function CalcCaretIndex(const FirstLine, LastLine: Integer): Integer; + var + CaretPos, StartPos, EndPos: Integer; + begin + Result := 0; + if FReportCaretPositionToStyler then begin + CaretPos := GetCaretPosition; + StartPos := GetPositionFromLine(FirstLine); + EndPos := GetLineEndPosition(LastLine); + if (CaretPos >= StartPos) and (CaretPos <= EndPos) then + Result := CaretPos - StartPos + 1; + end; + end; + + procedure MaskDoubleByteCharacters(var S: TScintRawString); + var + Len, I: Integer; + begin + { This replaces all lead and trail bytes in S with #$80 and #$81 to + ensure that stylers do not mistake trail bytes for single-byte ASCII + characters (e.g. #131'A' is a valid combination on CP 932). } + if not FEffectiveCodePageDBCS then + Exit; + Len := Length(S); + I := 1; + while I <= Len do begin + if S[I] in FLeadBytes then begin + S[I] := #$80; + if I < Len then begin + Inc(I); + S[I] := #$81; + end; + end; + Inc(I); + end; + end; + + function LineSpans(const Line: Integer): Boolean; + var + S: TScintRawString; + begin + S := FLines.RawLines[Line]; + MaskDoubleByteCharacters(S); + Result := FStyler.LineTextSpans(S); + end; + + function StyleLine(const FirstLine: Integer): Integer; + var + LastLine, I: Integer; + OldState: TScintLineState; + begin + { Find final line in series of spanned lines } + LastLine := FirstLine; + while (LastLine < Lines.Count - 1) and LineSpans(LastLine) do + Inc(LastLine); + + { We don't pass line endings to the styler, because when the style of a + line ending changes, Scintilla assumes it must be a 'hanging' style and + immediately repaints all subsequent lines. (To see this in the IS IDE, + insert and remove a ';' character before a [Setup] directive, i.e. + toggle comment styling.) } + + FStyler.FCaretIndex := CalcCaretIndex(FirstLine, LastLine); + FStyler.FCurIndex := 1; + FStyler.FStyleStartIndex := 1; + FStyler.FLineState := 0; + if FirstLine > 0 then + FStyler.FLineState := FLines.GetState(FirstLine-1); + FStyler.FText := GetRawTextRange(GetPositionFromLine(FirstLine), + GetLineEndPosition(LastLine)); + MaskDoubleByteCharacters(FStyler.FText); + FStyler.FTextLen := Length(FStyler.FText); + FStyler.FStyleStr := StringOfChar(AnsiChar(0), FStyler.FTextLen + + FLines.GetLineEndingLength(LastLine)); + + FStyler.StyleNeeded; + Call(SCI_SETSTYLINGEX, Length(FStyler.FStyleStr), LPARAM(PAnsiChar(FStyler.FStyleStr))); + + FStyler.FStyleStr := ''; + FStyler.FText := ''; + + for I := FirstLine to LastLine do begin + OldState := FLines.GetState(I); + if FStyler.FLineState <> OldState then + Call(SCI_SETLINESTATE, I, FStyler.FLineState); + end; + + Result := LastLine; + end; + + procedure DefaultStyleLine(const Line: Integer); + var + StyleStr: AnsiString; + begin + { Note: Using SCI_SETSTYLINGEX because it only redraws the part of the + range that changed, whereas SCI_SETSTYLING redraws the entire range. } + StyleStr := StringOfChar(AnsiChar(0), FLines.GetRawLineLengthWithEnding(Line)); + Call(SCI_SETSTYLINGEX, Length(StyleStr), LPARAM(PAnsiChar(StyleStr))); + end; + +var + StartPos, StartLine, EndLine, Line: Integer; +begin + StartPos := Call(SCI_GETENDSTYLED, 0, 0); + StartLine := GetLineFromPosition(StartPos); + { EndPos (always?) points to the position *after* the last character of the + last line needing styling (usually an LF), so subtract 1 to avoid + restyling one extra line unnecessarily. + But don't do this if we're being asked to style all the way to the end. + When the document's last line is empty, 'EndPos - 1' will point to the + line preceding the last line, so StyleLine() will never be called on the + last line, and it will never be assigned a LINESTATE. This causes IS's + autocompletion to think the last line's section is scNone. } + if EndPos < GetRawTextLength then + EndLine := GetLineFromPosition(EndPos - 1) + else + EndLine := GetLineFromPosition(EndPos); + + //outputdebugstring('-----'); + //outputdebugstring(pchar(format('StyleNeeded poses: %d, %d', [StartPos, EndPos]))); + //outputdebugstring(pchar(format('StyleNeeded lines: %d, %d', [StartLine, EndLine]))); + + { If StartLine is within a series of spanned lines, back up } + if Assigned(FStyler) then + while (StartLine > 0) and (LineSpans(StartLine - 1)) do + Dec(StartLine); + + Line := StartLine; + while Line <= EndLine do begin + Call(SCI_STARTSTYLING, GetPositionFromLine(Line), $FF); + if Assigned(FStyler) then + Line := StyleLine(Line) + else + DefaultStyleLine(Line); + Inc(Line); + end; +end; + +procedure TScintEdit.Undo; +begin + Call(SCI_UNDO, 0, 0); +end; + +procedure TScintEdit.UpdateCodePage; + + procedure InitLeadBytes; + var + Info: TCPInfo; + I: Integer; + J: Byte; + begin + FLeadBytes := []; + if FEffectiveCodePageDBCS and GetCPInfo(FEffectiveCodePage, Info) then begin + I := 0; + while (I < MAX_LEADBYTES) and ((Info.LeadByte[I] or Info.LeadByte[I+1]) <> 0) do begin + for J := Info.LeadByte[I] to Info.LeadByte[I+1] do + Include(FLeadBytes, AnsiChar(J)); + Inc(I, 2); + end; + end; + end; + +var + CP: Integer; +begin + if HandleAllocated then begin + { To Scintilla, code page 0 does not mean the current ANSI code page, but + an unspecified single byte code page. So that DBCS support is properly + enabled when running on a DBCS ANSI code page, replace 0 with GetACP. } + CP := FCodePage; + if CP = 0 then + CP := GetACP; + Call(SCI_SETCODEPAGE, CP, 0); + + { Scintilla ignores attempts to set a code page it has no special support + for. But the editor could currently be set for UTF-8 or DBCS, so get it + out of that mode by setting the code page to 0 (a value it does + recognize). } + if Call(SCI_GETCODEPAGE, 0, 0) <> CP then + Call(SCI_SETCODEPAGE, 0, 0); + + FEffectiveCodePage := Call(SCI_GETCODEPAGE, 0, 0); + FEffectiveCodePageDBCS := (FEffectiveCodePage <> 0) and + (FEffectiveCodePage <> SC_CP_UTF8); + InitLeadBytes; + end; +end; + +procedure TScintEdit.UpdateLineNumbersWidth; +var + LineCount, PixelWidth: Integer; + Nines: String; +begin + if FLineNumbers then begin + { Note: Based on SciTE's SciTEBase::SetLineNumberWidth. } + + LineCount := Call(SCI_GETLINECOUNT, 0, 0); + + Nines := '9'; + while LineCount >= 10 do begin + LineCount := LineCount div 10; + Nines := Nines + '9'; + end; + + PixelWidth := 4 + CallStr(SCI_TEXTWIDTH, STYLE_LINENUMBER, AnsiString(Nines)); + end else + PixelWidth := 0; + + Call(SCI_SETMARGINWIDTHN, 0, PixelWidth); +end; + +procedure TScintEdit.UpdateStyleAttributes; +var + DefaultAttr: TScintStyleAttributes; + + procedure SetStyleAttr(const StyleNumber: Integer; + const Attr: TScintStyleAttributes; const Force: Boolean); + begin + if Force or (Attr.FontName <> DefaultAttr.FontName) then + CallStr(SCI_STYLESETFONT, StyleNumber, AnsiString(Attr.FontName)); + if Force or (Attr.FontSize <> DefaultAttr.FontSize) then + { Note: Scintilla doesn't support negative point sizes like the VCL } + Call(SCI_STYLESETSIZE, StyleNumber, Abs(Attr.FontSize)); + if Force or (Attr.FontCharset <> DefaultAttr.FontCharset) then + Call(SCI_STYLESETCHARACTERSET, StyleNumber, Attr.FontCharset); + if Force or (Attr.FontStyle <> DefaultAttr.FontStyle) then begin + Call(SCI_STYLESETBOLD, StyleNumber, Ord(fsBold in Attr.FontStyle)); + Call(SCI_STYLESETITALIC, StyleNumber, Ord(fsItalic in Attr.FontStyle)); + Call(SCI_STYLESETUNDERLINE, StyleNumber, Ord(fsUnderline in Attr.FontStyle)); + end; + if Force or (Attr.ForeColor <> DefaultAttr.ForeColor) then + Call(SCI_STYLESETFORE, StyleNumber, ColorToRGB(Attr.ForeColor)); + if Force or (Attr.BackColor <> DefaultAttr.BackColor) then + Call(SCI_STYLESETBACK, StyleNumber, ColorToRGB(Attr.BackColor)); + end; + + procedure SetStyleAttrFromStyler(const StyleNumber: Integer); + var + Attr: TScintStyleAttributes; + begin + Attr := DefaultAttr; + FStyler.GetStyleAttributes(StyleNumber, Attr); + SetStyleAttr(StyleNumber, Attr, False); + end; + +const + { Note: This style is specific to our patched build } + STYLE_AUTOCOMPLETION = 39; +var + I: Integer; +begin + if not HandleAllocated then + Exit; + + Call(SCI_SETCARETFORE, ColorToRGB(Font.Color), 0); + + DefaultAttr.FontName := Font.Name; + DefaultAttr.FontSize := Font.Size; + DefaultAttr.FontStyle := Font.Style; + DefaultAttr.FontCharset := Font.Charset; + DefaultAttr.ForeColor := Font.Color; + DefaultAttr.BackColor := Color; + + Call(SCI_STYLERESETDEFAULT, 0, 0); + SetStyleAttr(STYLE_DEFAULT, DefaultAttr, True); + Call(SCI_STYLECLEARALL, 0, 0); + + if Assigned(FStyler) and FUseStyleAttributes then begin + for I := 0 to 31 do + SetStyleAttrFromStyler(I); + SetStyleAttrFromStyler(STYLE_LINENUMBER); + SetStyleAttrFromStyler(STYLE_BRACELIGHT); + SetStyleAttrFromStyler(STYLE_INDENTGUIDE); + end; + + if AutoCompleteFontName <> '' then + DefaultAttr.FontName := AutoCompleteFontName; + if AutoCompleteFontSize > 0 then + DefaultAttr.FontSize := AutoCompleteFontSize; + DefaultAttr.FontStyle := []; + { Note: Scintilla doesn't actually use the colors set here } + DefaultAttr.ForeColor := clWindowText; + DefaultAttr.BackColor := clWindow; + SetStyleAttr(STYLE_AUTOCOMPLETION, DefaultAttr, True); +end; + +function TScintEdit.WordAtCursor: String; +begin + var Range := WordAtCursorRange; + Result := GetTextRange(Range.StartPos, Range.EndPos); +end; + +function TScintEdit.WordAtCursorRange: TScintRange; +begin + var Pos := GetCaretPosition; + Result.StartPos := GetWordStartPosition(Pos, True); + Result.EndPos := GetWordEndPosition(Pos, True); +end; + +procedure TScintEdit.ZoomIn; +begin + Call(SCI_ZOOMIN, 0, 0); +end; + +procedure TScintEdit.ZoomOut; +begin + Call(SCI_ZOOMOUT, 0, 0); +end; + +procedure TScintEdit.CMColorChanged(var Message: TMessage); +begin + inherited; + UpdateStyleAttributes; +end; + +procedure TScintEdit.CMFontChanged(var Message: TMessage); +begin + inherited; + UpdateStyleAttributes; +end; + +procedure TScintEdit.CMHintShow(var Message: TCMHintShow); +begin + inherited; + if Assigned(FOnHintShow) then + FOnHintShow(Self, Message.HintInfo^); +end; + +procedure TScintEdit.CMSysColorChange(var Message: TMessage); +begin + inherited; + UpdateStyleAttributes; +end; + +procedure TScintEdit.CNNotify(var Message: TWMNotify); +begin + Notify(PSCNotification(Message.NMHdr)^); +end; + +procedure TScintEdit.WMDestroy(var Message: TWMDestroy); +begin + FDirectPtr := nil; + inherited; +end; + +procedure TScintEdit.WMDropFiles(var Message: TWMDropFiles); +var + FileList: TStringList; + NumFiles, I: Integer; + Filename: array[0..MAX_PATH-1] of Char; + P: TPoint; +begin + FileList := nil; + try + if FAcceptDroppedFiles and Assigned(FOnDropFiles) then begin + FileList := TStringList.Create; + NumFiles := DragQueryFile(Message.Drop, UINT(-1), nil, 0); + for I := 0 to NumFiles-1 do + if DragQueryFile(Message.Drop, I, Filename, + SizeOf(Filename) div SizeOf(Filename[0])) <> 0 then + FileList.Add(Filename); + + if FileList.Count > 0 then begin + if not DragQueryPoint(Message.Drop, P) then begin + P.X := -1; + P.Y := -1; + end; + FOnDropFiles(Self, P.X, P.Y, FileList); + end; + end; + finally + FileList.Free; + DragFinish(Message.Drop); + Message.Drop := 0; + end; +end; + +procedure TScintEdit.WMEraseBkgnd(var Message: TMessage); +begin + { Bypass the VCL's WM_ERASEBKGND handler; it causes flicker when selecting + + scrolling downward using the mouse } + Message.Result := CallWindowProc(DefWndProc, Handle, Message.Msg, + Message.WParam, Message.LParam); +end; + +procedure TScintEdit.WMGetDlgCode(var Message: TWMGetDlgCode); +begin + inherited; + Message.Result := Message.Result or (DLGC_WANTARROWS or DLGC_WANTTAB); +end; + +procedure TScintEdit.WMMouseWheel(var Message: TMessage); +begin + { Bypass TControl's broken WM_MOUSEWHEEL handler: it translates WParamLo + from a combination of MK_* values to a TShiftState -- which is only + meaningful to the VCL -- but it doesn't restore the original value before + passing an unhandled WM_MOUSEWHEEL message up to DefWndProc. This causes + Scintilla to see Ctrl+wheel as Shift+wheel, breaking zoom. (Observed on + Delphi 2009.) } + Message.Result := CallWindowProc(DefWndProc, Handle, Message.Msg, + Message.WParam, Message.LParam); +end; + +{ TScintEditStrings } + +procedure TScintEditStrings.CheckIndexRange(const Index: Integer); +begin + if (Index < 0) or (Index >= GetCount) then + Error(@SListIndexError, Index); +end; + +procedure TScintEditStrings.CheckIndexRangePlusOne(const Index: Integer); +begin + if (Index < 0) or (Index > GetCount) then + Error(@SListIndexError, Index); +end; + +procedure TScintEditStrings.Clear; +begin + FEdit.SetRawText(''); +end; + +procedure TScintEditStrings.Delete(Index: Integer); +var + StartPos, EndPos: Integer; +begin + CheckIndexRange(Index); + StartPos := FEdit.GetPositionFromLine(Index); + EndPos := FEdit.GetPositionFromLine(Index + 1); + FEdit.ReplaceRawTextRange(StartPos, EndPos, ''); +end; + +function TScintEditStrings.Get(Index: Integer): String; +begin + Result := FEdit.ConvertRawStringToString(GetRawLine(Index)); +end; + +function TScintEditStrings.GetCount: Integer; +begin + Result := FEdit.Call(SCI_GETLINECOUNT, 0, 0); +end; + +function TScintEditStrings.GetLineEndingLength(const Index: Integer): Integer; +var + StartPos, EndPos: Integer; +begin + CheckIndexRange(Index); + StartPos := FEdit.GetLineEndPosition(Index); + EndPos := FEdit.GetPositionFromLine(Index + 1); + Result := EndPos - StartPos; +end; + +function TScintEditStrings.GetRawLine(Index: Integer): TScintRawString; +var + StartPos, EndPos: Integer; +begin + CheckIndexRange(Index); + StartPos := FEdit.GetPositionFromLine(Index); + EndPos := FEdit.GetLineEndPosition(Index); + Result := FEdit.GetRawTextRange(StartPos, EndPos); +end; + +function TScintEditStrings.GetRawLineLength(Index: Integer): Integer; +var + StartPos, EndPos: Integer; +begin + CheckIndexRange(Index); + StartPos := FEdit.GetPositionFromLine(Index); + EndPos := FEdit.GetLineEndPosition(Index); + Result := EndPos - StartPos; +end; + +function TScintEditStrings.GetRawLineLengthWithEnding(Index: Integer): Integer; +var + StartPos, EndPos: Integer; +begin + CheckIndexRange(Index); + StartPos := FEdit.GetPositionFromLine(Index); + EndPos := FEdit.GetPositionFromLine(Index + 1); + Result := EndPos - StartPos; +end; + +function TScintEditStrings.GetRawLineWithEnding(Index: Integer): TScintRawString; +var + StartPos, EndPos: Integer; +begin + CheckIndexRange(Index); + StartPos := FEdit.GetPositionFromLine(Index); + EndPos := FEdit.GetPositionFromLine(Index + 1); + Result := FEdit.GetRawTextRange(StartPos, EndPos); +end; + +function TScintEditStrings.GetState(Index: Integer): TScintLineState; +begin + CheckIndexRange(Index); + Result := FEdit.Call(SCI_GETLINESTATE, Index, 0); +end; + +function TScintEditStrings.GetTextStr: String; +begin + Result := FEdit.ConvertRawStringToString(FEdit.GetRawText); +end; + +procedure TScintEditStrings.Insert(Index: Integer; const S: String); +begin + InsertRawLine(Index, FEdit.ConvertStringToRawString(S)); +end; + +procedure TScintEditStrings.InsertRawLine(Index: Integer; const S: TScintRawString); +var + Pos: Integer; + EndingStr, InsertStr: TScintRawString; +begin + CheckIndexRangePlusOne(Index); + EndingStr := FEdit.GetLineEndingString; + Pos := FEdit.GetPositionFromLine(Index); + if (Index = GetCount) and (Pos <> FEdit.GetPositionFromLine(Index - 1)) then + InsertStr := EndingStr + S + EndingStr + else + InsertStr := S + EndingStr; + { Using ReplaceRawTextRange instead of SCI_INSERTTEXT for embedded null support } + FEdit.ReplaceRawTextRange(Pos, Pos, InsertStr); +end; + +procedure TScintEditStrings.Put(Index: Integer; const S: String); +begin + PutRawLine(Index, FEdit.ConvertStringToRawString(S)); +end; + +procedure TScintEditStrings.PutRawLine(Index: Integer; const S: TScintRawString); +var + StartPos, EndPos: Integer; +begin + CheckIndexRange(Index); + StartPos := FEdit.GetPositionFromLine(Index); + EndPos := FEdit.GetLineEndPosition(Index); + FEdit.ReplaceRawTextRange(StartPos, EndPos, S); +end; + +procedure TScintEditStrings.SetText(Text: PChar); +begin + FEdit.SetRawText(FEdit.ConvertPCharToRawString(Text, StrLen(Text))); +end; + +procedure TScintEditStrings.SetTextStr(const Value: String); +begin + FEdit.SetRawText(FEdit.ConvertStringToRawString(Value)); +end; + +{ TScintCustomStyler } + +procedure TScintCustomStyler.ApplyStyleByteIndicators(const Indicators: TScintStyleByteIndicatorNumbers; + StartIndex, EndIndex: Integer); +var + IndByte: Byte; + I: Integer; + P: PAnsiChar; +begin + IndByte := Byte(Indicators) shl 5; + if IndByte <> 0 then begin + if StartIndex < 1 then + StartIndex := 1; + if EndIndex > FTextLen then + EndIndex := FTextLen; + { Note: The PAnsiChar stuff is to avoid UniqueString() on every iteration } + P := @FStyleStr[1]; + for I := StartIndex to EndIndex do + P[I-1] := AnsiChar(Ord(P[I-1]) or IndByte); + end; +end; + +procedure TScintCustomStyler.ApplyStyle(const Style: TScintStyleNumber; + StartIndex, EndIndex: Integer); +const + StyleMask = $1F; +var + P: PAnsiChar; + I: Integer; +begin + if StartIndex < 1 then + StartIndex := 1; + if EndIndex > FTextLen then + EndIndex := FTextLen; + { Note: The PAnsiChar stuff is to avoid UniqueString() on every iteration } + P := @FStyleStr[1]; + for I := StartIndex to EndIndex do + if Ord(P[I-1]) and StyleMask = 0 then + P[I-1] := AnsiChar(Style or (Ord(P[I-1]) and not StyleMask)); +end; + +procedure TScintCustomStyler.CommitStyle(const Style: TScintStyleNumber); +begin + ApplyStyle(Style, FStyleStartIndex, FCurIndex - 1); + FStyleStartIndex := FCurIndex; +end; + +function TScintCustomStyler.ConsumeAllRemaining: Boolean; +begin + Result := FCurIndex <= FTextLen; + if Result then + FCurIndex := FTextLen + 1; +end; + +function TScintCustomStyler.ConsumeChar(const C: AnsiChar): Boolean; +begin + Result := (FCurIndex <= FTextLen) and (FText[FCurIndex] = C); + if Result then + Inc(FCurIndex); +end; + +function TScintCustomStyler.ConsumeCharIn(const Chars: TScintRawCharSet): Boolean; +begin + Result := (FCurIndex <= FTextLen) and (FText[FCurIndex] in Chars); + if Result then + Inc(FCurIndex); +end; + +function TScintCustomStyler.ConsumeChars(const Chars: TScintRawCharSet): Boolean; +begin + Result := False; + while FCurIndex <= FTextLen do begin + if not(FText[FCurIndex] in Chars) then + Break; + Result := True; + Inc(FCurIndex); + end; +end; + +function TScintCustomStyler.ConsumeCharsNot(const Chars: TScintRawCharSet): Boolean; +begin + Result := False; + while FCurIndex <= FTextLen do begin + if FText[FCurIndex] in Chars then + Break; + Result := True; + Inc(FCurIndex); + end; +end; + +function TScintCustomStyler.ConsumeString(const Chars: TScintRawCharSet): TScintRawString; +var + StartIndex: Integer; +begin + StartIndex := FCurIndex; + ConsumeChars(Chars); + Result := Copy(FText, StartIndex, FCurIndex - StartIndex); +end; + +function TScintCustomStyler.CurCharIn(const Chars: TScintRawCharSet): Boolean; +begin + Result := (FCurIndex <= FTextLen) and (FText[FCurIndex] in Chars); +end; + +function TScintCustomStyler.CurCharIs(const C: AnsiChar): Boolean; +begin + Result := (FCurIndex <= FTextLen) and (FText[FCurIndex] = C); +end; + +function TScintCustomStyler.GetCurChar: AnsiChar; +begin + Result := #0; + if FCurIndex <= FTextLen then + Result := FText[FCurIndex]; +end; + +function TScintCustomStyler.GetEndOfLine: Boolean; +begin + Result := FCurIndex > FTextLen; +end; + +function TScintCustomStyler.LineTextSpans(const S: TScintRawString): Boolean; +begin + Result := False; +end; + +function TScintCustomStyler.NextCharIs(const C: AnsiChar): Boolean; +begin + Result := (FCurIndex < FTextLen) and (FText[FCurIndex+1] = C); +end; + +function TScintCustomStyler.PreviousCharIn(const Chars: TScintRawCharSet): Boolean; +begin + Result := (FCurIndex > 1) and (FCurIndex-1 <= FTextLen) and + (FText[FCurIndex-1] in Chars); +end; + +procedure TScintCustomStyler.ReplaceText(StartIndex, EndIndex: Integer; + const C: AnsiChar); +var + P: PAnsiChar; + I: Integer; +begin + if StartIndex < 1 then + StartIndex := 1; + if EndIndex > FTextLen then + EndIndex := FTextLen; + P := @FText[1]; + for I := StartIndex to EndIndex do + P[I-1] := C; +end; + +procedure TScintCustomStyler.ResetCurIndexTo(Index: Integer); +begin + FCurIndex := Index; + FStyleStartIndex := Index; +end; + +{ TScintPixmap } + +const + XPMTransparentChar = ' '; + XPMTerminatorChar = '"'; + +class constructor TScintPixmap.Create; +begin + { Chars 128-255 are supported below but don't work in Scintilla } + for var C := #1 to #127 do + if (C <> XPMTransparentChar) and (C <> XPMTerminatorChar) then + ColorCodes := ColorCodes + C; +end; + +function TScintPixmap.GetPixmap: Pointer; +begin + Result := FPixmap; +end; + +type + TRGBTripleArray = array[0..MaxInt div SizeOf(TRGBTriple) - 1] of TRGBTriple; + PRGBTripleArray = ^TRGBTripleArray; + +procedure TScintPixmap.InitializeFromBitmap(const ABitmap: TBitmap; + const TransparentColor: TColorRef); + + procedure SetNextPixmapLine(const Pixmap: TPixmap; var Index: Integer; const Line: String); + begin + if Index > High(Pixmap) then + TScintEdit.Error('SetNextPixmapLine: Index out of range'); + + { Convert Line to an AnsiString, but copy the exact ordinal values; + i.e. don't do any translation of 128-255 } + var AnsiLine: AnsiString; + SetLength(AnsiLine, Length(Line)); + for var I := 1 to Length(AnsiLine) do + AnsiLine[I] := AnsiChar(Ord(Line[I])); + Pixmap[Index] := AnsiLine; + Inc(Index); + end; + +begin + if ABitmap.PixelFormat <> pf24bit then + TScintEdit.Error('Invalid PixelFormat'); + + var Colors := TDictionary>.Create; { RGB -> Code & WebColor } + try + { Build colors list } + for var Y := 0 to ABitmap.Height-1 do begin + var Pixels: PRGBTripleArray := ABitmap.ScanLine[Y]; + for var X := 0 to ABitmap.Width-1 do begin + var Color := RGB(Pixels[X].rgbtRed, Pixels[X].rgbtGreen, Pixels[X].rgbtBlue); + if (Color <> TransparentColor) and not Colors.ContainsKey(Color) then begin + var ColorCodeIndex := Colors.Count+1; + if ColorCodeIndex > Length(ColorCodes) then + TScintEdit.Error('Too many colors'); + Colors.Add(Color, TPair.Create(ColorCodes[ColorCodeIndex], RGBToWebColorStr(Color))) + end; + end; + end; + + { Build pixmap } + var Line: String; + SetLength(FPixmap, 0); { Not really needed but makes things clearer while debugging } + SetLength(FPixmap, 1 + Colors.Count + ABitmap.Height + 1); + Line := Format('%d %d %d 1', [ABitmap.Width, ABitmap.Height, Colors.Count]); + var Index := 0; + SetNextPixmapLine(FPixmap, Index, Line); + for var Color in Colors do begin + Line := Format('%s c %s', [Color.Value.Key, Color.Value.Value]); + SetNextPixmapLine(FPixmap, Index, Line); + end; + for var Y := 0 to ABitmap.Height-1 do begin + Line := ''; + var Pixels: PRGBTripleArray := ABitmap.ScanLine[Y]; + for var X := 0 to ABitmap.Width-1 do begin + var Color := RGB(Pixels[X].rgbtRed, Pixels[X].rgbtGreen, Pixels[X].rgbtBlue); + if Color = TransparentColor then + Line := Line + XPMTransparentChar + else + Line := Line + Colors[Color].Key; + end; + SetNextPixmapLine(FPixmap, Index, Line); + end; + + { Add terminating nil pointer - Scintilla doesnt really need it but setting it anyway } + SetNextPixmapLine(FPixmap, Index, ''); + finally + Colors.Free; + end; +end; + +{ TScintRange } + +constructor TScintRange.Create(const AStartPos, AEndPos: Integer); +begin + StartPos := AStartPos; + EndPos := AEndPos; +end; + +function TScintRange.Overlaps(const ARange: TScintRange): Boolean; +begin + Result := (StartPos <= ARange.EndPos) and (EndPos >= ARange.StartPos); +end; + +function TScintRange.Within(const ARange: TScintRange): Boolean; +begin + Result := (StartPos >= ARange.StartPos) and (EndPos <= ARange.EndPos); +end; + +end. diff --git a/Components/ScintInt.pas b/Components/ScintInt.pas new file mode 100644 index 00000000..34c674fa --- /dev/null +++ b/Components/ScintInt.pas @@ -0,0 +1,902 @@ +unit ScintInt; + +{ + Delphi translation of Scintilla.h from Scintilla 2.21 + by Jordan Russell + + $jrsoftware: issrc/Components/ScintInt.pas,v 1.3 2011/01/21 05:47:57 jr Exp $ +} + +interface + +uses + Windows; + +const + INVALID_POSITION = -1; + SCI_START = 2000; + SCI_OPTIONAL_START = 3000; + SCI_LEXER_START = 4000; + SCI_ADDTEXT = 2001; + SCI_ADDSTYLEDTEXT = 2002; + SCI_INSERTTEXT = 2003; + SCI_CLEARALL = 2004; + SCI_CLEARDOCUMENTSTYLE = 2005; + SCI_GETLENGTH = 2006; + SCI_GETCHARAT = 2007; + SCI_GETCURRENTPOS = 2008; + SCI_GETANCHOR = 2009; + SCI_GETSTYLEAT = 2010; + SCI_REDO = 2011; + SCI_SETUNDOCOLLECTION = 2012; + SCI_SELECTALL = 2013; + SCI_SETSAVEPOINT = 2014; + SCI_GETSTYLEDTEXT = 2015; + SCI_CANREDO = 2016; + SCI_MARKERLINEFROMHANDLE = 2017; + SCI_MARKERDELETEHANDLE = 2018; + SCI_GETUNDOCOLLECTION = 2019; + SCWS_INVISIBLE = 0; + SCWS_VISIBLEALWAYS = 1; + SCWS_VISIBLEAFTERINDENT = 2; + SCI_GETVIEWWS = 2020; + SCI_SETVIEWWS = 2021; + SCI_POSITIONFROMPOINT = 2022; + SCI_POSITIONFROMPOINTCLOSE = 2023; + SCI_GOTOLINE = 2024; + SCI_GOTOPOS = 2025; + SCI_SETANCHOR = 2026; + SCI_GETCURLINE = 2027; + SCI_GETENDSTYLED = 2028; + SC_EOL_CRLF = 0; + SC_EOL_CR = 1; + SC_EOL_LF = 2; + SCI_CONVERTEOLS = 2029; + SCI_GETEOLMODE = 2030; + SCI_SETEOLMODE = 2031; + SCI_STARTSTYLING = 2032; + SCI_SETSTYLING = 2033; + SCI_GETBUFFEREDDRAW = 2034; + SCI_SETBUFFEREDDRAW = 2035; + SCI_SETTABWIDTH = 2036; + SCI_GETTABWIDTH = 2121; + SC_CP_UTF8 = 65001; + SCI_SETCODEPAGE = 2037; + SCI_SETUSEPALETTE = 2039; + MARKER_MAX = 31; + SC_MARK_CIRCLE = 0; + SC_MARK_ROUNDRECT = 1; + SC_MARK_ARROW = 2; + SC_MARK_SMALLRECT = 3; + SC_MARK_SHORTARROW = 4; + SC_MARK_EMPTY = 5; + SC_MARK_ARROWDOWN = 6; + SC_MARK_MINUS = 7; + SC_MARK_PLUS = 8; + SC_MARK_VLINE = 9; + SC_MARK_LCORNER = 10; + SC_MARK_TCORNER = 11; + SC_MARK_BOXPLUS = 12; + SC_MARK_BOXPLUSCONNECTED = 13; + SC_MARK_BOXMINUS = 14; + SC_MARK_BOXMINUSCONNECTED = 15; + SC_MARK_LCORNERCURVE = 16; + SC_MARK_TCORNERCURVE = 17; + SC_MARK_CIRCLEPLUS = 18; + SC_MARK_CIRCLEPLUSCONNECTED = 19; + SC_MARK_CIRCLEMINUS = 20; + SC_MARK_CIRCLEMINUSCONNECTED = 21; + SC_MARK_BACKGROUND = 22; + SC_MARK_DOTDOTDOT = 23; + SC_MARK_ARROWS = 24; + SC_MARK_PIXMAP = 25; + SC_MARK_FULLRECT = 26; + SC_MARK_LEFTRECT = 27; + SC_MARK_AVAILABLE = 28; + SC_MARK_UNDERLINE = 29; + SC_MARK_CHARACTER = 10000; + SC_MARKNUM_FOLDEREND = 25; + SC_MARKNUM_FOLDEROPENMID = 26; + SC_MARKNUM_FOLDERMIDTAIL = 27; + SC_MARKNUM_FOLDERTAIL = 28; + SC_MARKNUM_FOLDERSUB = 29; + SC_MARKNUM_FOLDER = 30; + SC_MARKNUM_FOLDEROPEN = 31; + SC_MASK_FOLDERS = $FE000000; + SCI_MARKERDEFINE = 2040; + SCI_MARKERSETFORE = 2041; + SCI_MARKERSETBACK = 2042; + SCI_MARKERADD = 2043; + SCI_MARKERDELETE = 2044; + SCI_MARKERDELETEALL = 2045; + SCI_MARKERGET = 2046; + SCI_MARKERNEXT = 2047; + SCI_MARKERPREVIOUS = 2048; + SCI_MARKERDEFINEPIXMAP = 2049; + SCI_MARKERADDSET = 2466; + SCI_MARKERSETALPHA = 2476; + SC_MARGIN_SYMBOL = 0; + SC_MARGIN_NUMBER = 1; + SC_MARGIN_BACK = 2; + SC_MARGIN_FORE = 3; + SC_MARGIN_TEXT = 4; + SC_MARGIN_RTEXT = 5; + SCI_SETMARGINTYPEN = 2240; + SCI_GETMARGINTYPEN = 2241; + SCI_SETMARGINWIDTHN = 2242; + SCI_GETMARGINWIDTHN = 2243; + SCI_SETMARGINMASKN = 2244; + SCI_GETMARGINMASKN = 2245; + SCI_SETMARGINSENSITIVEN = 2246; + SCI_GETMARGINSENSITIVEN = 2247; + SCI_SETMARGINCURSORN = 2248; + SCI_GETMARGINCURSORN = 2249; + STYLE_DEFAULT = 32; + STYLE_LINENUMBER = 33; + STYLE_BRACELIGHT = 34; + STYLE_BRACEBAD = 35; + STYLE_CONTROLCHAR = 36; + STYLE_INDENTGUIDE = 37; + STYLE_CALLTIP = 38; + STYLE_LASTPREDEFINED = 39; + STYLE_MAX = 255; + SC_CHARSET_ANSI = 0; + SC_CHARSET_DEFAULT = 1; + SC_CHARSET_BALTIC = 186; + SC_CHARSET_CHINESEBIG5 = 136; + SC_CHARSET_EASTEUROPE = 238; + SC_CHARSET_GB2312 = 134; + SC_CHARSET_GREEK = 161; + SC_CHARSET_HANGUL = 129; + SC_CHARSET_MAC = 77; + SC_CHARSET_OEM = 255; + SC_CHARSET_RUSSIAN = 204; + SC_CHARSET_CYRILLIC = 1251; + SC_CHARSET_SHIFTJIS = 128; + SC_CHARSET_SYMBOL = 2; + SC_CHARSET_TURKISH = 162; + SC_CHARSET_JOHAB = 130; + SC_CHARSET_HEBREW = 177; + SC_CHARSET_ARABIC = 178; + SC_CHARSET_VIETNAMESE = 163; + SC_CHARSET_THAI = 222; + SC_CHARSET_8859_15 = 1000; + SCI_STYLECLEARALL = 2050; + SCI_STYLESETFORE = 2051; + SCI_STYLESETBACK = 2052; + SCI_STYLESETBOLD = 2053; + SCI_STYLESETITALIC = 2054; + SCI_STYLESETSIZE = 2055; + SCI_STYLESETFONT = 2056; + SCI_STYLESETEOLFILLED = 2057; + SCI_STYLERESETDEFAULT = 2058; + SCI_STYLESETUNDERLINE = 2059; + SC_CASE_MIXED = 0; + SC_CASE_UPPER = 1; + SC_CASE_LOWER = 2; + SCI_STYLEGETFORE = 2481; + SCI_STYLEGETBACK = 2482; + SCI_STYLEGETBOLD = 2483; + SCI_STYLEGETITALIC = 2484; + SCI_STYLEGETSIZE = 2485; + SCI_STYLEGETFONT = 2486; + SCI_STYLEGETEOLFILLED = 2487; + SCI_STYLEGETUNDERLINE = 2488; + SCI_STYLEGETCASE = 2489; + SCI_STYLEGETCHARACTERSET = 2490; + SCI_STYLEGETVISIBLE = 2491; + SCI_STYLEGETCHANGEABLE = 2492; + SCI_STYLEGETHOTSPOT = 2493; + SCI_STYLESETCASE = 2060; + SCI_STYLESETCHARACTERSET = 2066; + SCI_STYLESETHOTSPOT = 2409; + SCI_SETSELFORE = 2067; + SCI_SETSELBACK = 2068; + SCI_GETSELALPHA = 2477; + SCI_SETSELALPHA = 2478; + SCI_GETSELEOLFILLED = 2479; + SCI_SETSELEOLFILLED = 2480; + SCI_SETCARETFORE = 2069; + SCI_ASSIGNCMDKEY = 2070; + SCI_CLEARCMDKEY = 2071; + SCI_CLEARALLCMDKEYS = 2072; + SCI_SETSTYLINGEX = 2073; + SCI_STYLESETVISIBLE = 2074; + SCI_GETCARETPERIOD = 2075; + SCI_SETCARETPERIOD = 2076; + SCI_SETWORDCHARS = 2077; + SCI_BEGINUNDOACTION = 2078; + SCI_ENDUNDOACTION = 2079; + INDIC_PLAIN = 0; + INDIC_SQUIGGLE = 1; + INDIC_TT = 2; + INDIC_DIAGONAL = 3; + INDIC_STRIKE = 4; + INDIC_HIDDEN = 5; + INDIC_BOX = 6; + INDIC_ROUNDBOX = 7; + INDIC_MAX = 31; + INDIC_CONTAINER = 8; + INDIC0_MASK = $20; + INDIC1_MASK = $40; + INDIC2_MASK = $80; + INDICS_MASK = $E0; + SCI_INDICSETSTYLE = 2080; + SCI_INDICGETSTYLE = 2081; + SCI_INDICSETFORE = 2082; + SCI_INDICGETFORE = 2083; + SCI_INDICSETUNDER = 2510; + SCI_INDICGETUNDER = 2511; + SCI_SETWHITESPACEFORE = 2084; + SCI_SETWHITESPACEBACK = 2085; + SCI_SETWHITESPACESIZE = 2086; + SCI_GETWHITESPACESIZE = 2087; + SCI_SETSTYLEBITS = 2090; + SCI_GETSTYLEBITS = 2091; + SCI_SETLINESTATE = 2092; + SCI_GETLINESTATE = 2093; + SCI_GETMAXLINESTATE = 2094; + SCI_GETCARETLINEVISIBLE = 2095; + SCI_SETCARETLINEVISIBLE = 2096; + SCI_GETCARETLINEBACK = 2097; + SCI_SETCARETLINEBACK = 2098; + SCI_STYLESETCHANGEABLE = 2099; + SCI_AUTOCSHOW = 2100; + SCI_AUTOCCANCEL = 2101; + SCI_AUTOCACTIVE = 2102; + SCI_AUTOCPOSSTART = 2103; + SCI_AUTOCCOMPLETE = 2104; + SCI_AUTOCSTOPS = 2105; + SCI_AUTOCSETSEPARATOR = 2106; + SCI_AUTOCGETSEPARATOR = 2107; + SCI_AUTOCSELECT = 2108; + SCI_AUTOCSETCANCELATSTART = 2110; + SCI_AUTOCGETCANCELATSTART = 2111; + SCI_AUTOCSETFILLUPS = 2112; + SCI_AUTOCSETCHOOSESINGLE = 2113; + SCI_AUTOCGETCHOOSESINGLE = 2114; + SCI_AUTOCSETIGNORECASE = 2115; + SCI_AUTOCGETIGNORECASE = 2116; + SCI_USERLISTSHOW = 2117; + SCI_AUTOCSETAUTOHIDE = 2118; + SCI_AUTOCGETAUTOHIDE = 2119; + SCI_AUTOCSETDROPRESTOFWORD = 2270; + SCI_AUTOCGETDROPRESTOFWORD = 2271; + SCI_REGISTERIMAGE = 2405; + SCI_CLEARREGISTEREDIMAGES = 2408; + SCI_AUTOCGETTYPESEPARATOR = 2285; + SCI_AUTOCSETTYPESEPARATOR = 2286; + SCI_AUTOCSETMAXWIDTH = 2208; + SCI_AUTOCGETMAXWIDTH = 2209; + SCI_AUTOCSETMAXHEIGHT = 2210; + SCI_AUTOCGETMAXHEIGHT = 2211; + SCI_SETINDENT = 2122; + SCI_GETINDENT = 2123; + SCI_SETUSETABS = 2124; + SCI_GETUSETABS = 2125; + SCI_SETLINEINDENTATION = 2126; + SCI_GETLINEINDENTATION = 2127; + SCI_GETLINEINDENTPOSITION = 2128; + SCI_GETCOLUMN = 2129; + SCI_SETHSCROLLBAR = 2130; + SCI_GETHSCROLLBAR = 2131; + SC_IV_NONE = 0; + SC_IV_REAL = 1; + SC_IV_LOOKFORWARD = 2; + SC_IV_LOOKBOTH = 3; + SCI_SETINDENTATIONGUIDES = 2132; + SCI_GETINDENTATIONGUIDES = 2133; + SCI_SETHIGHLIGHTGUIDE = 2134; + SCI_GETHIGHLIGHTGUIDE = 2135; + SCI_GETLINEENDPOSITION = 2136; + SCI_GETCODEPAGE = 2137; + SCI_GETCARETFORE = 2138; + SCI_GETUSEPALETTE = 2139; + SCI_GETREADONLY = 2140; + SCI_SETCURRENTPOS = 2141; + SCI_SETSELECTIONSTART = 2142; + SCI_GETSELECTIONSTART = 2143; + SCI_SETSELECTIONEND = 2144; + SCI_GETSELECTIONEND = 2145; + SCI_SETPRINTMAGNIFICATION = 2146; + SCI_GETPRINTMAGNIFICATION = 2147; + SC_PRINT_NORMAL = 0; + SC_PRINT_INVERTLIGHT = 1; + SC_PRINT_BLACKONWHITE = 2; + SC_PRINT_COLOURONWHITE = 3; + SC_PRINT_COLOURONWHITEDEFAULTBG = 4; + SCI_SETPRINTCOLOURMODE = 2148; + SCI_GETPRINTCOLOURMODE = 2149; + SCFIND_WHOLEWORD = 2; + SCFIND_MATCHCASE = 4; + SCFIND_WORDSTART = $00100000; + SCFIND_REGEXP = $00200000; + SCFIND_POSIX = $00400000; + SCI_FINDTEXT = 2150; + SCI_FORMATRANGE = 2151; + SCI_GETFIRSTVISIBLELINE = 2152; + SCI_GETLINE = 2153; + SCI_GETLINECOUNT = 2154; + SCI_SETMARGINLEFT = 2155; + SCI_GETMARGINLEFT = 2156; + SCI_SETMARGINRIGHT = 2157; + SCI_GETMARGINRIGHT = 2158; + SCI_GETMODIFY = 2159; + SCI_SETSEL = 2160; + SCI_GETSELTEXT = 2161; + SCI_GETTEXTRANGE = 2162; + SCI_HIDESELECTION = 2163; + SCI_POINTXFROMPOSITION = 2164; + SCI_POINTYFROMPOSITION = 2165; + SCI_LINEFROMPOSITION = 2166; + SCI_POSITIONFROMLINE = 2167; + SCI_LINESCROLL = 2168; + SCI_SCROLLCARET = 2169; + SCI_REPLACESEL = 2170; + SCI_SETREADONLY = 2171; + SCI_NULL = 2172; + SCI_CANPASTE = 2173; + SCI_CANUNDO = 2174; + SCI_EMPTYUNDOBUFFER = 2175; + SCI_UNDO = 2176; + SCI_CUT = 2177; + SCI_COPY = 2178; + SCI_PASTE = 2179; + SCI_CLEAR = 2180; + SCI_SETTEXT = 2181; + SCI_GETTEXT = 2182; + SCI_GETTEXTLENGTH = 2183; + SCI_GETDIRECTFUNCTION = 2184; + SCI_GETDIRECTPOINTER = 2185; + SCI_SETOVERTYPE = 2186; + SCI_GETOVERTYPE = 2187; + SCI_SETCARETWIDTH = 2188; + SCI_GETCARETWIDTH = 2189; + SCI_SETTARGETSTART = 2190; + SCI_GETTARGETSTART = 2191; + SCI_SETTARGETEND = 2192; + SCI_GETTARGETEND = 2193; + SCI_REPLACETARGET = 2194; + SCI_REPLACETARGETRE = 2195; + SCI_SEARCHINTARGET = 2197; + SCI_SETSEARCHFLAGS = 2198; + SCI_GETSEARCHFLAGS = 2199; + SCI_CALLTIPSHOW = 2200; + SCI_CALLTIPCANCEL = 2201; + SCI_CALLTIPACTIVE = 2202; + SCI_CALLTIPPOSSTART = 2203; + SCI_CALLTIPSETHLT = 2204; + SCI_CALLTIPSETBACK = 2205; + SCI_CALLTIPSETFORE = 2206; + SCI_CALLTIPSETFOREHLT = 2207; + SCI_CALLTIPUSESTYLE = 2212; + SCI_VISIBLEFROMDOCLINE = 2220; + SCI_DOCLINEFROMVISIBLE = 2221; + SCI_WRAPCOUNT = 2235; + SC_FOLDLEVELBASE = $400; + SC_FOLDLEVELWHITEFLAG = $1000; + SC_FOLDLEVELHEADERFLAG = $2000; + SC_FOLDLEVELNUMBERMASK = $0FFF; + SCI_SETFOLDLEVEL = 2222; + SCI_GETFOLDLEVEL = 2223; + SCI_GETLASTCHILD = 2224; + SCI_GETFOLDPARENT = 2225; + SCI_SHOWLINES = 2226; + SCI_HIDELINES = 2227; + SCI_GETLINEVISIBLE = 2228; + SCI_SETFOLDEXPANDED = 2229; + SCI_GETFOLDEXPANDED = 2230; + SCI_TOGGLEFOLD = 2231; + SCI_ENSUREVISIBLE = 2232; + SC_FOLDFLAG_LINEBEFORE_EXPANDED = $0002; + SC_FOLDFLAG_LINEBEFORE_CONTRACTED = $0004; + SC_FOLDFLAG_LINEAFTER_EXPANDED = $0008; + SC_FOLDFLAG_LINEAFTER_CONTRACTED = $0010; + SC_FOLDFLAG_LEVELNUMBERS = $0040; + SCI_SETFOLDFLAGS = 2233; + SCI_ENSUREVISIBLEENFORCEPOLICY = 2234; + SCI_SETTABINDENTS = 2260; + SCI_GETTABINDENTS = 2261; + SCI_SETBACKSPACEUNINDENTS = 2262; + SCI_GETBACKSPACEUNINDENTS = 2263; + SC_TIME_FOREVER = 10000000; + SCI_SETMOUSEDWELLTIME = 2264; + SCI_GETMOUSEDWELLTIME = 2265; + SCI_WORDSTARTPOSITION = 2266; + SCI_WORDENDPOSITION = 2267; + SC_WRAP_NONE = 0; + SC_WRAP_WORD = 1; + SC_WRAP_CHAR = 2; + SCI_SETWRAPMODE = 2268; + SCI_GETWRAPMODE = 2269; + SC_WRAPVISUALFLAG_NONE = $0000; + SC_WRAPVISUALFLAG_END = $0001; + SC_WRAPVISUALFLAG_START = $0002; + SCI_SETWRAPVISUALFLAGS = 2460; + SCI_GETWRAPVISUALFLAGS = 2461; + SC_WRAPVISUALFLAGLOC_DEFAULT = $0000; + SC_WRAPVISUALFLAGLOC_END_BY_TEXT = $0001; + SC_WRAPVISUALFLAGLOC_START_BY_TEXT = $0002; + SCI_SETWRAPVISUALFLAGSLOCATION = 2462; + SCI_GETWRAPVISUALFLAGSLOCATION = 2463; + SCI_SETWRAPSTARTINDENT = 2464; + SCI_GETWRAPSTARTINDENT = 2465; + SC_WRAPINDENT_FIXED = 0; + SC_WRAPINDENT_SAME = 1; + SC_WRAPINDENT_INDENT = 2; + SCI_SETWRAPINDENTMODE = 2472; + SCI_GETWRAPINDENTMODE = 2473; + SC_CACHE_NONE = 0; + SC_CACHE_CARET = 1; + SC_CACHE_PAGE = 2; + SC_CACHE_DOCUMENT = 3; + SCI_SETLAYOUTCACHE = 2272; + SCI_GETLAYOUTCACHE = 2273; + SCI_SETSCROLLWIDTH = 2274; + SCI_GETSCROLLWIDTH = 2275; + SCI_SETSCROLLWIDTHTRACKING = 2516; + SCI_GETSCROLLWIDTHTRACKING = 2517; + SCI_TEXTWIDTH = 2276; + SCI_SETENDATLASTLINE = 2277; + SCI_GETENDATLASTLINE = 2278; + SCI_TEXTHEIGHT = 2279; + SCI_SETVSCROLLBAR = 2280; + SCI_GETVSCROLLBAR = 2281; + SCI_APPENDTEXT = 2282; + SCI_GETTWOPHASEDRAW = 2283; + SCI_SETTWOPHASEDRAW = 2284; + SC_EFF_QUALITY_MASK = $F; + SC_EFF_QUALITY_DEFAULT = 0; + SC_EFF_QUALITY_NON_ANTIALIASED = 1; + SC_EFF_QUALITY_ANTIALIASED = 2; + SC_EFF_QUALITY_LCD_OPTIMIZED = 3; + SCI_SETFONTQUALITY = 2611; + SCI_GETFONTQUALITY = 2612; + SCI_SETFIRSTVISIBLELINE = 2613; + SC_MULTIPASTE_ONCE = 0; + SC_MULTIPASTE_EACH = 1; + SCI_SETMULTIPASTE = 2614; + SCI_GETMULTIPASTE = 2615; + SCI_GETTAG = 2616; + SCI_TARGETFROMSELECTION = 2287; + SCI_LINESJOIN = 2288; + SCI_LINESSPLIT = 2289; + SCI_SETFOLDMARGINCOLOUR = 2290; + SCI_SETFOLDMARGINHICOLOUR = 2291; + SCI_LINEDOWN = 2300; + SCI_LINEDOWNEXTEND = 2301; + SCI_LINEUP = 2302; + SCI_LINEUPEXTEND = 2303; + SCI_CHARLEFT = 2304; + SCI_CHARLEFTEXTEND = 2305; + SCI_CHARRIGHT = 2306; + SCI_CHARRIGHTEXTEND = 2307; + SCI_WORDLEFT = 2308; + SCI_WORDLEFTEXTEND = 2309; + SCI_WORDRIGHT = 2310; + SCI_WORDRIGHTEXTEND = 2311; + SCI_HOME = 2312; + SCI_HOMEEXTEND = 2313; + SCI_LINEEND = 2314; + SCI_LINEENDEXTEND = 2315; + SCI_DOCUMENTSTART = 2316; + SCI_DOCUMENTSTARTEXTEND = 2317; + SCI_DOCUMENTEND = 2318; + SCI_DOCUMENTENDEXTEND = 2319; + SCI_PAGEUP = 2320; + SCI_PAGEUPEXTEND = 2321; + SCI_PAGEDOWN = 2322; + SCI_PAGEDOWNEXTEND = 2323; + SCI_EDITTOGGLEOVERTYPE = 2324; + SCI_CANCEL = 2325; + SCI_DELETEBACK = 2326; + SCI_TAB = 2327; + SCI_BACKTAB = 2328; + SCI_NEWLINE = 2329; + SCI_FORMFEED = 2330; + SCI_VCHOME = 2331; + SCI_VCHOMEEXTEND = 2332; + SCI_ZOOMIN = 2333; + SCI_ZOOMOUT = 2334; + SCI_DELWORDLEFT = 2335; + SCI_DELWORDRIGHT = 2336; + SCI_DELWORDRIGHTEND = 2518; + SCI_LINECUT = 2337; + SCI_LINEDELETE = 2338; + SCI_LINETRANSPOSE = 2339; + SCI_LINEDUPLICATE = 2404; + SCI_LOWERCASE = 2340; + SCI_UPPERCASE = 2341; + SCI_LINESCROLLDOWN = 2342; + SCI_LINESCROLLUP = 2343; + SCI_DELETEBACKNOTLINE = 2344; + SCI_HOMEDISPLAY = 2345; + SCI_HOMEDISPLAYEXTEND = 2346; + SCI_LINEENDDISPLAY = 2347; + SCI_LINEENDDISPLAYEXTEND = 2348; + SCI_HOMEWRAP = 2349; + SCI_HOMEWRAPEXTEND = 2450; + SCI_LINEENDWRAP = 2451; + SCI_LINEENDWRAPEXTEND = 2452; + SCI_VCHOMEWRAP = 2453; + SCI_VCHOMEWRAPEXTEND = 2454; + SCI_LINECOPY = 2455; + SCI_MOVECARETINSIDEVIEW = 2401; + SCI_LINELENGTH = 2350; + SCI_BRACEHIGHLIGHT = 2351; + SCI_BRACEBADLIGHT = 2352; + SCI_BRACEMATCH = 2353; + SCI_GETVIEWEOL = 2355; + SCI_SETVIEWEOL = 2356; + SCI_GETDOCPOINTER = 2357; + SCI_SETDOCPOINTER = 2358; + SCI_SETMODEVENTMASK = 2359; + EDGE_NONE = 0; + EDGE_LINE = 1; + EDGE_BACKGROUND = 2; + SCI_GETEDGECOLUMN = 2360; + SCI_SETEDGECOLUMN = 2361; + SCI_GETEDGEMODE = 2362; + SCI_SETEDGEMODE = 2363; + SCI_GETEDGECOLOUR = 2364; + SCI_SETEDGECOLOUR = 2365; + SCI_SEARCHANCHOR = 2366; + SCI_SEARCHNEXT = 2367; + SCI_SEARCHPREV = 2368; + SCI_LINESONSCREEN = 2370; + SCI_USEPOPUP = 2371; + SCI_SELECTIONISRECTANGLE = 2372; + SCI_SETZOOM = 2373; + SCI_GETZOOM = 2374; + SCI_CREATEDOCUMENT = 2375; + SCI_ADDREFDOCUMENT = 2376; + SCI_RELEASEDOCUMENT = 2377; + SCI_GETMODEVENTMASK = 2378; + SCI_SETFOCUS = 2380; + SCI_GETFOCUS = 2381; + SC_STATUS_OK = 0; + SC_STATUS_FAILURE = 1; + SC_STATUS_BADALLOC = 2; + SCI_SETSTATUS = 2382; + SCI_GETSTATUS = 2383; + SCI_SETMOUSEDOWNCAPTURES = 2384; + SCI_GETMOUSEDOWNCAPTURES = 2385; + SC_CURSORNORMAL = -1; + SC_CURSORARROW = 2; + SC_CURSORWAIT = 4; + SC_CURSORREVERSEARROW = 7; + SCI_SETCURSOR = 2386; + SCI_GETCURSOR = 2387; + SCI_SETCONTROLCHARSYMBOL = 2388; + SCI_GETCONTROLCHARSYMBOL = 2389; + SCI_WORDPARTLEFT = 2390; + SCI_WORDPARTLEFTEXTEND = 2391; + SCI_WORDPARTRIGHT = 2392; + SCI_WORDPARTRIGHTEXTEND = 2393; + VISIBLE_SLOP = $01; + VISIBLE_STRICT = $04; + SCI_SETVISIBLEPOLICY = 2394; + SCI_DELLINELEFT = 2395; + SCI_DELLINERIGHT = 2396; + SCI_SETXOFFSET = 2397; + SCI_GETXOFFSET = 2398; + SCI_CHOOSECARETX = 2399; + SCI_GRABFOCUS = 2400; + CARET_SLOP = $01; + CARET_STRICT = $04; + CARET_JUMPS = $10; + CARET_EVEN = $08; + SCI_SETXCARETPOLICY = 2402; + SCI_SETYCARETPOLICY = 2403; + SCI_SETPRINTWRAPMODE = 2406; + SCI_GETPRINTWRAPMODE = 2407; + SCI_SETHOTSPOTACTIVEFORE = 2410; + SCI_GETHOTSPOTACTIVEFORE = 2494; + SCI_SETHOTSPOTACTIVEBACK = 2411; + SCI_GETHOTSPOTACTIVEBACK = 2495; + SCI_SETHOTSPOTACTIVEUNDERLINE = 2412; + SCI_GETHOTSPOTACTIVEUNDERLINE = 2496; + SCI_SETHOTSPOTSINGLELINE = 2421; + SCI_GETHOTSPOTSINGLELINE = 2497; + SCI_PARADOWN = 2413; + SCI_PARADOWNEXTEND = 2414; + SCI_PARAUP = 2415; + SCI_PARAUPEXTEND = 2416; + SCI_POSITIONBEFORE = 2417; + SCI_POSITIONAFTER = 2418; + SCI_COPYRANGE = 2419; + SCI_COPYTEXT = 2420; + SC_SEL_STREAM = 0; + SC_SEL_RECTANGLE = 1; + SC_SEL_LINES = 2; + SC_SEL_THIN = 3; + SCI_SETSELECTIONMODE = 2422; + SCI_GETSELECTIONMODE = 2423; + SCI_GETLINESELSTARTPOSITION = 2424; + SCI_GETLINESELENDPOSITION = 2425; + SCI_LINEDOWNRECTEXTEND = 2426; + SCI_LINEUPRECTEXTEND = 2427; + SCI_CHARLEFTRECTEXTEND = 2428; + SCI_CHARRIGHTRECTEXTEND = 2429; + SCI_HOMERECTEXTEND = 2430; + SCI_VCHOMERECTEXTEND = 2431; + SCI_LINEENDRECTEXTEND = 2432; + SCI_PAGEUPRECTEXTEND = 2433; + SCI_PAGEDOWNRECTEXTEND = 2434; + SCI_STUTTEREDPAGEUP = 2435; + SCI_STUTTEREDPAGEUPEXTEND = 2436; + SCI_STUTTEREDPAGEDOWN = 2437; + SCI_STUTTEREDPAGEDOWNEXTEND = 2438; + SCI_WORDLEFTEND = 2439; + SCI_WORDLEFTENDEXTEND = 2440; + SCI_WORDRIGHTEND = 2441; + SCI_WORDRIGHTENDEXTEND = 2442; + SCI_SETWHITESPACECHARS = 2443; + SCI_SETCHARSDEFAULT = 2444; + SCI_AUTOCGETCURRENT = 2445; + SCI_AUTOCGETCURRENTTEXT = 2610; + SCI_ALLOCATE = 2446; + SCI_TARGETASUTF8 = 2447; + SCI_SETLENGTHFORENCODE = 2448; + SCI_ENCODEDFROMUTF8 = 2449; + SCI_FINDCOLUMN = 2456; + SCI_GETCARETSTICKY = 2457; + SCI_SETCARETSTICKY = 2458; + SC_CARETSTICKY_OFF = 0; + SC_CARETSTICKY_ON = 1; + SC_CARETSTICKY_WHITESPACE = 2; + SCI_TOGGLECARETSTICKY = 2459; + SCI_SETPASTECONVERTENDINGS = 2467; + SCI_GETPASTECONVERTENDINGS = 2468; + SCI_SELECTIONDUPLICATE = 2469; + SC_ALPHA_TRANSPARENT = 0; + SC_ALPHA_OPAQUE = 255; + SC_ALPHA_NOALPHA = 256; + SCI_SETCARETLINEBACKALPHA = 2470; + SCI_GETCARETLINEBACKALPHA = 2471; + CARETSTYLE_INVISIBLE = 0; + CARETSTYLE_LINE = 1; + CARETSTYLE_BLOCK = 2; + SCI_SETCARETSTYLE = 2512; + SCI_GETCARETSTYLE = 2513; + SCI_SETINDICATORCURRENT = 2500; + SCI_GETINDICATORCURRENT = 2501; + SCI_SETINDICATORVALUE = 2502; + SCI_GETINDICATORVALUE = 2503; + SCI_INDICATORFILLRANGE = 2504; + SCI_INDICATORCLEARRANGE = 2505; + SCI_INDICATORALLONFOR = 2506; + SCI_INDICATORVALUEAT = 2507; + SCI_INDICATORSTART = 2508; + SCI_INDICATOREND = 2509; + SCI_SETPOSITIONCACHE = 2514; + SCI_GETPOSITIONCACHE = 2515; + SCI_COPYALLOWLINE = 2519; + SCI_GETCHARACTERPOINTER = 2520; + SCI_SETKEYSUNICODE = 2521; + SCI_GETKEYSUNICODE = 2522; + SCI_INDICSETALPHA = 2523; + SCI_INDICGETALPHA = 2524; + SCI_SETEXTRAASCENT = 2525; + SCI_GETEXTRAASCENT = 2526; + SCI_SETEXTRADESCENT = 2527; + SCI_GETEXTRADESCENT = 2528; + SCI_MARKERSYMBOLDEFINED = 2529; + SCI_MARGINSETTEXT = 2530; + SCI_MARGINGETTEXT = 2531; + SCI_MARGINSETSTYLE = 2532; + SCI_MARGINGETSTYLE = 2533; + SCI_MARGINSETSTYLES = 2534; + SCI_MARGINGETSTYLES = 2535; + SCI_MARGINTEXTCLEARALL = 2536; + SCI_MARGINSETSTYLEOFFSET = 2537; + SCI_MARGINGETSTYLEOFFSET = 2538; + SCI_ANNOTATIONSETTEXT = 2540; + SCI_ANNOTATIONGETTEXT = 2541; + SCI_ANNOTATIONSETSTYLE = 2542; + SCI_ANNOTATIONGETSTYLE = 2543; + SCI_ANNOTATIONSETSTYLES = 2544; + SCI_ANNOTATIONGETSTYLES = 2545; + SCI_ANNOTATIONGETLINES = 2546; + SCI_ANNOTATIONCLEARALL = 2547; + ANNOTATION_HIDDEN = 0; + ANNOTATION_STANDARD = 1; + ANNOTATION_BOXED = 2; + SCI_ANNOTATIONSETVISIBLE = 2548; + SCI_ANNOTATIONGETVISIBLE = 2549; + SCI_ANNOTATIONSETSTYLEOFFSET = 2550; + SCI_ANNOTATIONGETSTYLEOFFSET = 2551; + UNDO_MAY_COALESCE = 1; + SCI_ADDUNDOACTION = 2560; + SCI_CHARPOSITIONFROMPOINT = 2561; + SCI_CHARPOSITIONFROMPOINTCLOSE = 2562; + SCI_SETMULTIPLESELECTION = 2563; + SCI_GETMULTIPLESELECTION = 2564; + SCI_SETADDITIONALSELECTIONTYPING = 2565; + SCI_GETADDITIONALSELECTIONTYPING = 2566; + SCI_SETADDITIONALCARETSBLINK = 2567; + SCI_GETADDITIONALCARETSBLINK = 2568; + SCI_SETADDITIONALCARETSVISIBLE = 2608; + SCI_GETADDITIONALCARETSVISIBLE = 2609; + SCI_GETSELECTIONS = 2570; + SCI_CLEARSELECTIONS = 2571; + SCI_SETSELECTION = 2572; + SCI_ADDSELECTION = 2573; + SCI_SETMAINSELECTION = 2574; + SCI_GETMAINSELECTION = 2575; + SCI_SETSELECTIONNCARET = 2576; + SCI_GETSELECTIONNCARET = 2577; + SCI_SETSELECTIONNANCHOR = 2578; + SCI_GETSELECTIONNANCHOR = 2579; + SCI_SETSELECTIONNCARETVIRTUALSPACE = 2580; + SCI_GETSELECTIONNCARETVIRTUALSPACE = 2581; + SCI_SETSELECTIONNANCHORVIRTUALSPACE = 2582; + SCI_GETSELECTIONNANCHORVIRTUALSPACE = 2583; + SCI_SETSELECTIONNSTART = 2584; + SCI_GETSELECTIONNSTART = 2585; + SCI_SETSELECTIONNEND = 2586; + SCI_GETSELECTIONNEND = 2587; + SCI_SETRECTANGULARSELECTIONCARET = 2588; + SCI_GETRECTANGULARSELECTIONCARET = 2589; + SCI_SETRECTANGULARSELECTIONANCHOR = 2590; + SCI_GETRECTANGULARSELECTIONANCHOR = 2591; + SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE = 2592; + SCI_GETRECTANGULARSELECTIONCARETVIRTUALSPACE = 2593; + SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE = 2594; + SCI_GETRECTANGULARSELECTIONANCHORVIRTUALSPACE = 2595; + SCVS_NONE = 0; + SCVS_RECTANGULARSELECTION = 1; + SCVS_USERACCESSIBLE = 2; + SCI_SETVIRTUALSPACEOPTIONS = 2596; + SCI_GETVIRTUALSPACEOPTIONS = 2597; + SCI_SETRECTANGULARSELECTIONMODIFIER = 2598; + SCI_GETRECTANGULARSELECTIONMODIFIER = 2599; + SCI_SETADDITIONALSELFORE = 2600; + SCI_SETADDITIONALSELBACK = 2601; + SCI_SETADDITIONALSELALPHA = 2602; + SCI_GETADDITIONALSELALPHA = 2603; + SCI_SETADDITIONALCARETFORE = 2604; + SCI_GETADDITIONALCARETFORE = 2605; + SCI_ROTATESELECTION = 2606; + SCI_SWAPMAINANCHORCARET = 2607; + SCI_CHANGELEXERSTATE = 2617; + SCI_STARTRECORD = 3001; + SCI_STOPRECORD = 3002; + SCI_SETLEXER = 4001; + SCI_GETLEXER = 4002; + SCI_COLOURISE = 4003; + SCI_SETPROPERTY = 4004; + KEYWORDSET_MAX = 8; + SCI_SETKEYWORDS = 4005; + SCI_SETLEXERLANGUAGE = 4006; + SCI_LOADLEXERLIBRARY = 4007; + SCI_GETPROPERTY = 4008; + SCI_GETPROPERTYEXPANDED = 4009; + SCI_GETPROPERTYINT = 4010; + SCI_GETSTYLEBITSNEEDED = 4011; + SCI_GETLEXERLANGUAGE = 4012; + SCI_PRIVATELEXERCALL = 4013; + SCI_PROPERTYNAMES = 4014; + SC_TYPE_BOOLEAN = 0; + SC_TYPE_INTEGER = 1; + SC_TYPE_STRING = 2; + SCI_PROPERTYTYPE = 4015; + SCI_DESCRIBEPROPERTY = 4016; + SCI_DESCRIBEKEYWORDSETS = 4017; + SC_MOD_INSERTTEXT = $1; + SC_MOD_DELETETEXT = $2; + SC_MOD_CHANGESTYLE = $4; + SC_MOD_CHANGEFOLD = $8; + SC_PERFORMED_USER = $10; + SC_PERFORMED_UNDO = $20; + SC_PERFORMED_REDO = $40; + SC_MULTISTEPUNDOREDO = $80; + SC_LASTSTEPINUNDOREDO = $100; + SC_MOD_CHANGEMARKER = $200; + SC_MOD_BEFOREINSERT = $400; + SC_MOD_BEFOREDELETE = $800; + SC_MULTILINEUNDOREDO = $1000; + SC_STARTACTION = $2000; + SC_MOD_CHANGEINDICATOR = $4000; + SC_MOD_CHANGELINESTATE = $8000; + SC_MOD_CHANGEMARGIN = $10000; + SC_MOD_CHANGEANNOTATION = $20000; + SC_MOD_CONTAINER = $40000; + SC_MOD_LEXERSTATE = $80000; + SC_MODEVENTMASKALL = $FFFFF; + SCEN_CHANGE = 768; + SCEN_SETFOCUS = 512; + SCEN_KILLFOCUS = 256; + SCK_DOWN = 300; + SCK_UP = 301; + SCK_LEFT = 302; + SCK_RIGHT = 303; + SCK_HOME = 304; + SCK_END = 305; + SCK_PRIOR = 306; + SCK_NEXT = 307; + SCK_DELETE = 308; + SCK_INSERT = 309; + SCK_ESCAPE = 7; + SCK_BACK = 8; + SCK_TAB = 9; + SCK_RETURN = 13; + SCK_ADD = 310; + SCK_SUBTRACT = 311; + SCK_DIVIDE = 312; + SCK_WIN = 313; + SCK_RWIN = 314; + SCK_MENU = 315; + SCMOD_NORM = 0; + SCMOD_SHIFT = 1; + SCMOD_CTRL = 2; + SCMOD_ALT = 4; + SCMOD_SUPER = 8; + SCN_STYLENEEDED = 2000; + SCN_CHARADDED = 2001; + SCN_SAVEPOINTREACHED = 2002; + SCN_SAVEPOINTLEFT = 2003; + SCN_MODIFYATTEMPTRO = 2004; + SCN_KEY = 2005; + SCN_DOUBLECLICK = 2006; + SCN_UPDATEUI = 2007; + SCN_MODIFIED = 2008; + SCN_MACRORECORD = 2009; + SCN_MARGINCLICK = 2010; + SCN_NEEDSHOWN = 2011; + SCN_PAINTED = 2013; + SCN_USERLISTSELECTION = 2014; + SCN_URIDROPPED = 2015; + SCN_DWELLSTART = 2016; + SCN_DWELLEND = 2017; + SCN_ZOOM = 2018; + SCN_HOTSPOTCLICK = 2019; + SCN_HOTSPOTDOUBLECLICK = 2020; + SCN_CALLTIPCLICK = 2021; + SCN_AUTOCSELECTION = 2022; + SCN_INDICATORCLICK = 2023; + SCN_INDICATORRELEASE = 2024; + SCN_AUTOCCANCELLED = 2025; + SCN_AUTOCCHARDELETED = 2026; + +type + TSci_CharacterRange = record + cpMin: Longint; + cpMax: Longint; + end; + + TSci_TextRange = record + chrg: TSci_CharacterRange; + lpstrText: PAnsiChar; + end; + + PSCNotification = ^TSCNotification; + TSCNotification = record + nmhdr: TNMHdr; + position: Integer; { SCN_STYLENEEDED, SCN_MODIFIED, SCN_DWELLSTART, SCN_DWELLEND } + ch: Integer; { SCN_CHARADDED, SCN_KEY } + modifiers: Integer; { SCN_KEY } + modificationType: Integer; { SCN_MODIFIED } + text: PAnsiChar; { SCN_MODIFIED, SCN_USERLISTSELECTION, SCN_AUTOCSELECTION } + length: Integer; { SCN_MODIFIED } + linesAdded: Integer; { SCN_MODIFIED } + message: Integer; { SCN_MACRORECORD } + wParam: WPARAM; { SCN_MACRORECORD } + lParam: LPARAM; { SCN_MACRORECORD } + line: Integer; { SCN_MODIFIED } + foldLevelNow: Integer; { SCN_MODIFIED } + foldLevelPrev: Integer; { SCN_MODIFIED } + margin: Integer; { SCN_MARGINCLICK } + listType: Integer; { SCN_USERLISTSELECTION } + x: Integer; { SCN_DWELLSTART, SCN_DWELLEND } + y: Integer; { SCN_DWELLSTART, SCN_DWELLEND } + token: Integer; { SCN_MODIFIED with SC_MOD_CONTAINER } + annotationLinesAdded: Integer; { SC_MOD_CHANGEANNOTATION } + end; + +function Scintilla_DirectFunction(ptr: Pointer; iMessage: Cardinal; + wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; external 'isscint.dll'; + +implementation + +end. diff --git a/Components/ScintStylerInnoSetup.pas b/Components/ScintStylerInnoSetup.pas new file mode 100644 index 00000000..12743969 --- /dev/null +++ b/Components/ScintStylerInnoSetup.pas @@ -0,0 +1,1711 @@ +unit ScintStylerInnoSetup; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + TInnoSetupStyler: styler for Inno Setup scripts + + Requires LangOptions+SetupSectionDirectives and MsgIDs from the Inno Setup source code +} + +interface + +uses + SysUtils, Classes, Graphics, ScintEdit, ModernColors; + +const + InnoSetupStylerWordListSeparator = #9; + +type + TInnoSetupStylerSection = ( + scNone, { Not inside a section (start of file, or last section was closed) } + scUnknown, { Inside an unrecognized section } + scThirdParty, { Inside a '_' section (reserved for third-party tools) } + scCode, + scComponents, + scCustomMessages, + scDirs, + scFiles, + scIcons, + scINI, + scInstallDelete, + scLangOptions, + scLanguages, + scMessages, + scRegistry, + scRun, + scSetup, + scTasks, + scTypes, + scUninstallDelete, + scUninstallRun); + + { Internally-used types } + TSectionMapEntry = record + Name: TScintRawString; + Value: TInnoSetupStylerSection; + end; + TInnoSetupStylerParamInfo = record + Name: TScintRawString; + end; + TInnoSetupStylerSpanState = (spNone, spBraceComment, spStarComment); + + { Starts at 1 instead of 0 to make sure ApplyStyle doesn't overwrite already applied stDefault + styles which is needed for PreStyleInlineISPPDirectives to work properly when the inline + directive is inside a comment or string } + TInnoSetupStylerStyle = (stDefault = 1, stCompilerDirective, + stComment, stSection, stSymbol, stKeyword, stParameterValue, + stEventFunction, stConstant, stMessageArg, + stPascalReservedWord, stPascalString, stPascalNumber, + stISPPReservedWord, stISPPString, stISPPNumber); + + TInnoSetupStyler = class(TScintCustomStyler) + private + FEventFunctionsWordList: array[Boolean] of AnsiString; + FKeywordsWordList, FFlagsWordList: array[TInnoSetupStylerSection] of AnsiString; + FISPPDirectivesWordList, FConstantsWordList: AnsiString; + FSectionsWordList: AnsiString; + FISPPInstalled: Boolean; + FTheme: TTheme; + procedure ApplyPendingSquigglyFromToIndex(const StartIndex, EndIndex: Integer); + procedure ApplyPendingSquigglyFromIndex(const StartIndex: Integer); + procedure ApplySquigglyFromIndex(const StartIndex: Integer); + procedure BuildConstantsWordList; + procedure BuildEventFunctionsWordList; + procedure BuildFlagsWordList(const Section: TInnoSetupStylerSection; + const Flags: array of TInnoSetupStylerParamInfo); overload; + procedure BuildISPPDirectivesWordList; + procedure BuildKeywordsWordList(const Section: TInnoSetupStylerSection; + const EnumTypeInfo: Pointer); overload; + procedure BuildKeywordsWordList(const Section: TInnoSetupStylerSection; + const Parameters: array of TInnoSetupStylerParamInfo); overload; + function BuildWordList(const WordStringList: TStringList): AnsiString; + procedure BuildSectionsWordList; + procedure CommitStyleSq(const Style: TInnoSetupStylerStyle; + const Squigglify: Boolean); + procedure CommitStyleSqPending(const Style: TInnoSetupStylerStyle); + function GetEventFunctionsWordList(Procedures: Boolean): AnsiString; + function GetFlagsWordList(Section: TInnoSetupStylerSection): AnsiString; + function GetKeywordsWordList(Section: TInnoSetupStylerSection): AnsiString; + procedure HandleCodeSection(var SpanState: TInnoSetupStylerSpanState); + procedure HandleKeyValueSection(const Section: TInnoSetupStylerSection); + procedure HandleParameterSection(const ValidParameters: array of TInnoSetupStylerParamInfo); + procedure HandleCompilerDirective(const InlineDirective: Boolean; + const InlineDirectiveEndIndex: Integer; var OpenCount: ShortInt); + procedure PreStyleInlineISPPDirectives; + procedure SkipWhitespace; + procedure SquigglifyUntilChars(const Chars: TScintRawCharSet; + const Style: TInnoSetupStylerStyle); + procedure StyleConstsUntilChars(const Chars: TScintRawCharSet; + const NonConstStyle: TInnoSetupStylerStyle; var BraceLevel: Integer); + procedure SetISPPInstalled(const Value: Boolean); + protected + procedure CommitStyle(const Style: TInnoSetupStylerStyle); + procedure GetStyleAttributes(const Style: Integer; + var Attributes: TScintStyleAttributes); override; + function LineTextSpans(const S: TScintRawString): Boolean; override; + procedure StyleNeeded; override; + public + constructor Create(AOwner: TComponent); override; + class function GetSectionFromLineState(const LineState: TScintLineState): TInnoSetupStylerSection; + class function IsParamSection(const Section: TInnoSetupStylerSection): Boolean; + class function IsSymbolStyle(const Style: TScintStyleNumber): Boolean; + property ConstantsWordList: AnsiString read FConstantsWordList; + property EventFunctionsWordList[Procedures: Boolean]: AnsiString read GetEventFunctionsWordList; + property FlagsWordList[Section: TInnoSetupStylerSection]: AnsiString read GetFlagsWordList; + property ISPPDirectivesWordList: AnsiString read FISPPDirectivesWordList; + property ISPPInstalled: Boolean read FISPPInstalled write SetISPPInstalled; + property KeywordsWordList[Section: TInnoSetupStylerSection]: AnsiString read GetKeywordsWordList; + property SectionsWordList: AnsiString read FSectionsWordList; + property Theme: TTheme read FTheme write FTheme; + end; + +implementation + +uses + TypInfo, MsgIDs, SetupSectionDirectives, LangOptionsSectionDirectives; + +type + TInnoSetupStylerLineState = record + Section, NextLineSection: TInnoSetupStylerSection; + SpanState: TInnoSetupStylerSpanState; + OpenCompilerDirectivesCount: ShortInt; + end; + +const + SectionMap: array[0..17] of TSectionMapEntry = ( + (Name: 'Code'; Value: scCode), + (Name: 'Components'; Value: scComponents), + (Name: 'CustomMessages'; Value: scCustomMessages), + (Name: 'Dirs'; Value: scDirs), + (Name: 'Files'; Value: scFiles), + (Name: 'Icons'; Value: scIcons), + (Name: 'INI'; Value: scINI), + (Name: 'InstallDelete'; Value: scInstallDelete), + (Name: 'LangOptions'; Value: scLangOptions), + (Name: 'Languages'; Value: scLanguages), + (Name: 'Messages'; Value: scMessages), + (Name: 'Registry'; Value: scRegistry), + (Name: 'Run'; Value: scRun), + (Name: 'Setup'; Value: scSetup), + (Name: 'Tasks'; Value: scTasks), + (Name: 'Types'; Value: scTypes), + (Name: 'UninstallDelete'; Value: scUninstallDelete), + (Name: 'UninstallRun'; Value: scUninstallRun)); + + ComponentsSectionParameters: array[0..8] of TInnoSetupStylerParamInfo = ( + (Name: 'Check'), + (Name: 'Description'), + (Name: 'ExtraDiskSpaceRequired'), + (Name: 'Flags'), + (Name: 'Languages'), + (Name: 'MinVersion'), + (Name: 'Name'), + (Name: 'OnlyBelowVersion'), + (Name: 'Types')); + + ComponentsSectionFlags: array[0..5] of TInnoSetupStylerParamInfo = ( + (Name: 'checkablealone'), + (Name: 'disablenouninstallwarning'), + (Name: 'dontinheritcheck'), + (Name: 'exclusive'), + (Name: 'fixed'), + (Name: 'restart')); + + DeleteSectionParameters: array[0..9] of TInnoSetupStylerParamInfo = ( + (Name: 'AfterInstall'), + (Name: 'BeforeInstall'), + (Name: 'Check'), + (Name: 'Components'), + (Name: 'Languages'), + (Name: 'MinVersion'), + (Name: 'Name'), + (Name: 'OnlyBelowVersion'), + (Name: 'Tasks'), + (Name: 'Type')); + + DeleteSectionTypes: array[0..2] of TInnoSetupStylerParamInfo = ( + (Name: 'files'), + (Name: 'filesandordirs'), + (Name: 'dirifempty')); + + DirsSectionParameters: array[0..11] of TInnoSetupStylerParamInfo = ( + (Name: 'AfterInstall'), + (Name: 'Attribs'), + (Name: 'BeforeInstall'), + (Name: 'Check'), + (Name: 'Components'), + (Name: 'Flags'), + (Name: 'Languages'), + (Name: 'MinVersion'), + (Name: 'Name'), + (Name: 'OnlyBelowVersion'), + (Name: 'Permissions'), + (Name: 'Tasks')); + + DirsSectionFlags: array[0..4] of TInnoSetupStylerParamInfo = ( + (Name: 'deleteafterinstall'), + (Name: 'setntfscompression'), + (Name: 'uninsalwaysuninstall'), + (Name: 'uninsneveruninstall'), + (Name: 'unsetntfscompression')); + + FilesSectionParameters: array[0..18] of TInnoSetupStylerParamInfo = ( + (Name: 'AfterInstall'), + (Name: 'Attribs'), + (Name: 'BeforeInstall'), + (Name: 'Check'), + (Name: 'Components'), + (Name: 'CopyMode'), + (Name: 'DestDir'), + (Name: 'DestName'), + (Name: 'Excludes'), + (Name: 'ExternalSize'), + (Name: 'Flags'), + (Name: 'FontInstall'), + (Name: 'Languages'), + (Name: 'MinVersion'), + (Name: 'OnlyBelowVersion'), + (Name: 'Permissions'), + (Name: 'Source'), + (Name: 'StrongAssemblyName'), + (Name: 'Tasks')); + + FilesSectionFlags: array[0..40] of TInnoSetupStylerParamInfo = ( + (Name: '32bit'), + (Name: '64bit'), + (Name: 'allowunsafefiles'), + (Name: 'comparetimestamp'), + (Name: 'confirmoverwrite'), + (Name: 'createallsubdirs'), + (Name: 'deleteafterinstall'), + (Name: 'dontcopy'), + (Name: 'dontverifychecksum'), + (Name: 'external'), + (Name: 'fontisnttruetype'), + (Name: 'gacinstall'), + (Name: 'ignoreversion'), + (Name: 'isreadme'), + (Name: 'nocompression'), + (Name: 'noencryption'), + (Name: 'noregerror'), + (Name: 'onlyifdestfileexists'), + (Name: 'onlyifdoesntexist'), + (Name: 'overwritereadonly'), + (Name: 'promptifolder'), + (Name: 'recursesubdirs'), + (Name: 'regserver'), + (Name: 'regtypelib'), + (Name: 'replacesameversion'), + (Name: 'restartreplace'), + (Name: 'setntfscompression'), + (Name: 'sharedfile'), + (Name: 'sign'), + (Name: 'signcheck'), + (Name: 'signonce'), + (Name: 'skipifsourcedoesntexist'), + (Name: 'solidbreak'), + (Name: 'sortfilesbyextension'), + (Name: 'sortfilesbyname'), + (Name: 'touch'), + (Name: 'uninsnosharedfileprompt'), + (Name: 'uninsremovereadonly'), + (Name: 'uninsrestartdelete'), + (Name: 'uninsneveruninstall'), + (Name: 'unsetntfscompression')); + + IconsSectionParameters: array[0..18] of TInnoSetupStylerParamInfo = ( + (Name: 'AfterInstall'), + (Name: 'AppUserModelID'), + (Name: 'AppUserModelToastActivatorCLSID'), + (Name: 'BeforeInstall'), + (Name: 'Check'), + (Name: 'Comment'), + (Name: 'Components'), + (Name: 'Filename'), + (Name: 'Flags'), + (Name: 'HotKey'), + (Name: 'IconFilename'), + (Name: 'IconIndex'), + (Name: 'Languages'), + (Name: 'MinVersion'), + (Name: 'Name'), + (Name: 'OnlyBelowVersion'), + (Name: 'Parameters'), + (Name: 'Tasks'), + (Name: 'WorkingDir')); + + IconsSectionFlags: array[0..9] of TInnoSetupStylerParamInfo = ( + (Name: 'closeonexit'), + (Name: 'createonlyiffileexists'), + (Name: 'dontcloseonexit'), + (Name: 'excludefromshowinnewinstall'), + (Name: 'foldershortcut'), + (Name: 'preventpinning'), + (Name: 'runmaximized'), + (Name: 'runminimized'), + (Name: 'uninsneveruninstall'), + (Name: 'useapppaths')); + + INISectionParameters: array[0..12] of TInnoSetupStylerParamInfo = ( + (Name: 'AfterInstall'), + (Name: 'BeforeInstall'), + (Name: 'Check'), + (Name: 'Components'), + (Name: 'Filename'), + (Name: 'Flags'), + (Name: 'Key'), + (Name: 'Languages'), + (Name: 'MinVersion'), + (Name: 'OnlyBelowVersion'), + (Name: 'Section'), + (Name: 'String'), + (Name: 'Tasks')); + + INISectionFlags: array[0..3] of TInnoSetupStylerParamInfo = ( + (Name: 'createkeyifdoesntexist'), + (Name: 'uninsdeleteentry'), + (Name: 'uninsdeletesection'), + (Name: 'uninsdeletesectionifempty')); + + LanguagesSectionParameters: array[0..4] of TInnoSetupStylerParamInfo = ( + (Name: 'InfoAfterFile'), + (Name: 'InfoBeforeFile'), + (Name: 'LicenseFile'), + (Name: 'MessagesFile'), + (Name: 'Name')); + + RegistrySectionParameters: array[0..14] of TInnoSetupStylerParamInfo = ( + (Name: 'AfterInstall'), + (Name: 'BeforeInstall'), + (Name: 'Check'), + (Name: 'Components'), + (Name: 'Flags'), + (Name: 'Languages'), + (Name: 'MinVersion'), + (Name: 'OnlyBelowVersion'), + (Name: 'Permissions'), + (Name: 'Root'), + (Name: 'Subkey'), + (Name: 'Tasks'), + (Name: 'ValueData'), + (Name: 'ValueName'), + (Name: 'ValueType')); + + RegistrySectionFlags: array[0..9] of TInnoSetupStylerParamInfo = ( + (Name: 'createvalueifdoesntexist'), + (Name: 'deletekey'), + (Name: 'deletevalue'), + (Name: 'dontcreatekey'), + (Name: 'noerror'), + (Name: 'preservestringtype'), + (Name: 'uninsclearvalue'), + (Name: 'uninsdeletekey'), + (Name: 'uninsdeletekeyifempty'), + (Name: 'uninsdeletevalue')); + + RunSectionParameters: array[0..14] of TInnoSetupStylerParamInfo = ( + (Name: 'AfterInstall'), + (Name: 'BeforeInstall'), + (Name: 'Check'), + (Name: 'Components'), + (Name: 'Description'), + (Name: 'Filename'), + (Name: 'Flags'), + (Name: 'Languages'), + (Name: 'MinVersion'), + (Name: 'OnlyBelowVersion'), + (Name: 'Parameters'), + (Name: 'StatusMsg'), + (Name: 'Tasks'), + (Name: 'Verb'), + (Name: 'WorkingDir')); + + RunSectionFlags: array[0..18] of TInnoSetupStylerParamInfo = ( + (Name: '32bit'), + (Name: '64bit'), + (Name: 'dontlogparameters'), + (Name: 'hidewizard'), + (Name: 'logoutput'), + (Name: 'nowait'), + (Name: 'postinstall'), + (Name: 'runascurrentuser'), + (Name: 'runasoriginaluser'), + (Name: 'runhidden'), + (Name: 'runmaximized'), + (Name: 'runminimized'), + (Name: 'shellexec'), + (Name: 'skipifdoesntexist'), + (Name: 'skipifnotsilent'), + (Name: 'skipifsilent'), + (Name: 'unchecked'), + (Name: 'waituntilidle'), + (Name: 'waituntilterminated')); + + UninstallRunSectionParameters: array[0..13] of TInnoSetupStylerParamInfo = ( + (Name: 'AfterInstall'), + (Name: 'BeforeInstall'), + (Name: 'Check'), + (Name: 'Components'), + (Name: 'Filename'), + (Name: 'Flags'), + (Name: 'Languages'), + (Name: 'MinVersion'), + (Name: 'OnlyBelowVersion'), + (Name: 'Parameters'), + (Name: 'RunOnceId'), + (Name: 'Tasks'), + (Name: 'Verb'), + (Name: 'WorkingDir')); + + UninstallRunSectionFlags: array[0..13] of TInnoSetupStylerParamInfo = ( + (Name: '32bit'), + (Name: '64bit'), + (Name: 'dontlogparameters'), + (Name: 'hidewizard'), + (Name: 'logoutput'), + (Name: 'nowait'), + (Name: 'runascurrentuser'), + (Name: 'runhidden'), + (Name: 'runmaximized'), + (Name: 'runminimized'), + (Name: 'shellexec'), + (Name: 'skipifdoesntexist'), + (Name: 'waituntilidle'), + (Name: 'waituntilterminated')); + + TasksSectionParameters: array[0..8] of TInnoSetupStylerParamInfo = ( + (Name: 'Check'), + (Name: 'Components'), + (Name: 'Description'), + (Name: 'Flags'), + (Name: 'GroupDescription'), + (Name: 'Languages'), + (Name: 'MinVersion'), + (Name: 'Name'), + (Name: 'OnlyBelowVersion')); + + TasksSectionFlags: array[0..5] of TInnoSetupStylerParamInfo = ( + (Name: 'checkablealone'), + (Name: 'checkedonce'), + (Name: 'dontinheritcheck'), + (Name: 'exclusive'), + (Name: 'restart'), + (Name: 'unchecked')); + + TypesSectionParameters: array[0..6] of TInnoSetupStylerParamInfo = ( + (Name: 'Check'), + (Name: 'Description'), + (Name: 'Flags'), + (Name: 'Languages'), + (Name: 'MinVersion'), + (Name: 'Name'), + (Name: 'OnlyBelowVersion')); + + TypesSectionFlags: array[0..0] of TInnoSetupStylerParamInfo = ( + (Name: 'iscustom')); + +type + TISPPDirective = record + Name: TScintRawString; + RequiresParameter: Boolean; + OpenCountChange: ShortInt; + end; + +const + ISPPDirectives: array[0..23] of TISPPDirective = ( + (Name: 'preproc'; RequiresParameter: True; OpenCountChange: 0), + (Name: 'define'; RequiresParameter: True; OpenCountChange: 0), + (Name: 'dim'; RequiresParameter: True; OpenCountChange: 0), + (Name: 'redim'; RequiresParameter: True; OpenCountChange: 0), + (Name: 'undef'; RequiresParameter: True; OpenCountChange: 0), + (Name: 'include'; RequiresParameter: True; OpenCountChange: 0), + (Name: 'file'; RequiresParameter: True; OpenCountChange: 0), + (Name: 'emit'; RequiresParameter: True; OpenCountChange: 0), + (Name: 'expr'; RequiresParameter: True; OpenCountChange: 0), + (Name: 'insert'; RequiresParameter: True; OpenCountChange: 0), + (Name: 'append'; RequiresParameter: False; OpenCountChange: 0), + (Name: 'if'; RequiresParameter: True; OpenCountChange: 1), + (Name: 'elif'; RequiresParameter: False { bug in ISPP? }; OpenCountChange: 0), + (Name: 'else'; RequiresParameter: False; OpenCountChange: 0), + (Name: 'endif'; RequiresParameter: False; OpenCountChange: -1), + (Name: 'ifdef'; RequiresParameter: True; OpenCountChange: 1), + (Name: 'ifndef'; RequiresParameter: True; OpenCountChange: 1), + (Name: 'ifexist'; RequiresParameter: True; OpenCountChange: 1), + (Name: 'ifnexist'; RequiresParameter: True; OpenCountChange: 1), + (Name: 'for'; RequiresParameter: True; OpenCountChange: 0), + (Name: 'sub'; RequiresParameter: True; OpenCountChange: 1), + (Name: 'endsub'; RequiresParameter: False; OpenCountChange: -1), + (Name: 'pragma'; RequiresParameter: False; OpenCountChange: 0), + (Name: 'error'; RequiresParameter: False; OpenCountChange: 0)); + + ConstantsWithParam: array[0..5] of TInnoSetupStylerParamInfo = ( + (Name: 'cm'), + (Name: 'code'), + (Name: 'drive'), + (Name: 'ini'), + (Name: 'param'), + (Name: 'reg')); + + Constants: array[0..59] of TInnoSetupStylerParamInfo = ( + { #emit and #file handled separately - also doesnt include constants with non words chars } + (Name: '{'), + (Name: 'app'), + (Name: 'win'), + (Name: 'sys'), + (Name: 'sysnative'), + (Name: 'syswow64'), + (Name: 'src'), + (Name: 'sd'), + (Name: 'commonpf'), + (Name: 'commoncf'), + (Name: 'tmp'), + (Name: 'commonfonts'), + (Name: 'dao'), + (Name: 'dotnet11'), + (Name: 'dotnet20'), + (Name: 'dotnet40'), + (Name: 'group'), + (Name: 'localappdata'), + (Name: 'userappdata'), + (Name: 'commonappdata'), + (Name: 'usercf'), + (Name: 'userdesktop'), + (Name: 'commondesktop'), + (Name: 'userdocs'), + (Name: 'commondocs'), + (Name: 'userfavorites'), + (Name: 'userfonts'), + (Name: 'userpf'), + (Name: 'userprograms'), + (Name: 'commonprograms'), + (Name: 'usersavedgames'), + (Name: 'userstartmenu'), + (Name: 'commonstartmenu'), + (Name: 'userstartup'), + (Name: 'commonstartup'), + (Name: 'usertemplates'), + (Name: 'commontemplates'), + (Name: 'autoappdata'), + (Name: 'autocf'), + (Name: 'autodesktop'), + (Name: 'autodocs'), + (Name: 'autofonts'), + (Name: 'autopf'), + (Name: 'autoprograms'), + (Name: 'autostartmenu'), + (Name: 'cmd'), + (Name: 'computername'), + (Name: 'groupname'), + (Name: 'hwnd'), + (Name: 'wizardhwnd'), + (Name: 'language'), + (Name: 'srcexe'), + (Name: 'uninstallexe'), + (Name: 'sysuserinfoname'), + (Name: 'sysuserinfoorg'), + (Name: 'userinfoname'), + (Name: 'userinfoorg'), + (Name: 'userinfoserial'), + (Name: 'username'), + (Name: 'log')); + + EventFunctions: array[0..22] of TInnoSetupStylerParamInfo = ( + (Name: 'InitializeSetup(): Boolean;'), { The () is needed for the function/procedure detection } + (Name: 'InitializeWizard;'), + (Name: 'DeinitializeSetup;'), + (Name: 'CurStepChanged(CurStep: TSetupStep);'), + (Name: 'CurInstallProgressChanged(CurProgress, MaxProgress: Integer);'), + (Name: 'NextButtonClick(CurPageID: Integer): Boolean;'), + (Name: 'BackButtonClick(CurPageID: Integer): Boolean;'), + (Name: 'CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);'), + (Name: 'ShouldSkipPage(PageID: Integer): Boolean;'), + (Name: 'CurPageChanged(CurPageID: Integer);'), + (Name: 'CheckPassword(Password: String): Boolean;'), + (Name: 'NeedRestart(): Boolean;'), + (Name: 'UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;'), + (Name: 'RegisterPreviousData(PreviousDataKey: Integer);'), + (Name: 'CheckSerial(Serial: String): Boolean;'), + (Name: 'GetCustomSetupExitCode(): Integer;'), + (Name: 'PrepareToInstall(var NeedsRestart: Boolean): String;'), + (Name: 'RegisterExtraCloseApplicationsResources;'), + (Name: 'InitializeUninstall(): Boolean;'), + (Name: 'InitializeUninstallProgressForm;'), + (Name: 'DeinitializeUninstall;'), + (Name: 'CurUninstallStepChanged(CurUninstallStep: TUninstallStep);'), + (Name: 'UninstallNeedRestart(): Boolean;')); + +const + inSquiggly = 0; + inPendingSquiggly = 1; + + AllChars = [#0..#255]; + WhitespaceChars = [#0..' ']; + AlphaChars = ['A'..'Z', 'a'..'z']; + DigitChars = ['0'..'9']; + HexDigitChars = DigitChars + ['A'..'F', 'a'..'f']; + AlphaUnderscoreChars = AlphaChars + ['_']; + AlphaDigitChars = AlphaChars + DigitChars; + AlphaDigitUnderscoreChars = AlphaChars + DigitChars + ['_']; + + PascalIdentFirstChars = AlphaUnderscoreChars; + PascalIdentChars = AlphaDigitUnderscoreChars; + + ISPPIdentFirstChars = AlphaUnderscoreChars; + ISPPIdentChars = AlphaDigitUnderscoreChars; + +function SameRawText(const S1, S2: TScintRawString): Boolean; +var + Len, I: Integer; + C1, C2: AnsiChar; +begin + Len := Length(S1); + if Length(S2) <> Len then begin + Result := False; + Exit; + end; + for I := 1 to Len do begin + C1 := S1[I]; + C2 := S2[I]; + if C1 in ['A'..'Z'] then + Inc(C1, 32); + if C2 in ['A'..'Z'] then + Inc(C2, 32); + if C1 <> C2 then begin + Result := False; + Exit; + end; + end; + Result := True; +end; + +function MapSectionNameString(const S: TScintRawString): TInnoSetupStylerSection; +var + I: Integer; +begin + if (S <> '') and (S[1] = '_') then + Result := scThirdParty + else begin + Result := scUnknown; + for I := Low(SectionMap) to High(SectionMap) do + if SameRawText(S, SectionMap[I].Name) then begin + Result := SectionMap[I].Value; + Break; + end; + end; +end; + +{ TInnoSetupStyler } + +constructor TInnoSetupStyler.Create(AOwner: TComponent); + + procedure BuildFlagsWordLists; + begin + BuildFlagsWordList(scFiles, FilesSectionFlags); + BuildFlagsWordList(scComponents, ComponentsSectionFlags); + BuildFlagsWordList(scDirs, DirsSectionFlags); + BuildFlagsWordList(scFiles, FilesSectionFlags); + BuildFlagsWordList(scIcons, IconsSectionFlags); + BuildFlagsWordList(scINI, INISectionFlags); + BuildFlagsWordList(scRegistry, RegistrySectionFlags); + BuildFlagsWordList(scRun, RunSectionFlags); + BuildFlagsWordList(scTasks, TasksSectionFlags); + BuildFlagsWordList(scTypes, TypesSectionFlags); + BuildFlagsWordList(scUninstallRun, UninstallRunSectionFlags); + BuildFlagsWordList(scComponents, ComponentsSectionFlags); + BuildFlagsWordList(scDirs, DirsSectionFlags); + { Bit of a trick } + BuildFlagsWordList(scInstallDelete, DeleteSectionTypes); + BuildFlagsWordList(scUninstallDelete, DeleteSectionTypes); + end; + + procedure BuildKeywordsWordLists; + begin + BuildKeywordsWordList(scFiles, FilesSectionParameters); + BuildKeywordsWordList(scIcons, IconsSectionParameters); + BuildKeywordsWordList(scINI, INISectionParameters); + BuildKeywordsWordList(scInstallDelete, DeleteSectionParameters); + BuildKeywordsWordList(scLangOptions, TypeInfo(TLangOptionsSectionDirective)); + BuildKeywordsWordList(scLanguages, LanguagesSectionParameters); + BuildKeywordsWordList(scRegistry, RegistrySectionParameters); + BuildKeywordsWordList(scRun, RunSectionParameters); + BuildKeywordsWordList(scSetup, TypeInfo(TSetupSectionDirective)); + BuildKeywordsWordList(scTasks, TasksSectionParameters); + BuildKeywordsWordList(scTypes, TypesSectionParameters); + BuildKeywordsWordList(scUninstallDelete, DeleteSectionParameters); + BuildKeywordsWordList(scUninstallRun, UninstallRunSectionParameters); + end; + +begin + inherited; + BuildConstantsWordList; + BuildEventFunctionsWordList; + BuildFlagsWordLists; + BuildISPPDirectivesWordList; + BuildKeywordsWordLists; + BuildSectionsWordList; +end; + +procedure TInnoSetupStyler.ApplyPendingSquigglyFromToIndex(const StartIndex, EndIndex: Integer); +begin + if (CaretIndex >= StartIndex) and (CaretIndex <= EndIndex + 1) then + ApplyStyleByteIndicators([inPendingSquiggly], StartIndex, EndIndex) + else + ApplyStyleByteIndicators([inSquiggly], StartIndex, EndIndex); +end; + +procedure TInnoSetupStyler.ApplyPendingSquigglyFromIndex(const StartIndex: Integer); +begin + ApplyPendingSquigglyFromToIndex(StartIndex, CurIndex - 1); +end; + +procedure TInnoSetupStyler.ApplySquigglyFromIndex(const StartIndex: Integer); +begin + ApplyStyleByteIndicators([inSquiggly], StartIndex, CurIndex - 1); +end; + +function TInnoSetupStyler.BuildWordList(const WordStringList: TStringList): AnsiString; + + function GetASCIISortedInsertPos(const SL: TStringList; const S: String): Integer; + var + L, H, I, C: Integer; + begin + L := 0; + H := SL.Count - 1; + while L <= H do begin + I := (L + H) div 2; + C := CompareText(SL[I], S); + if C = 0 then begin + L := I; + Break; + end; + if C < 0 then + L := I + 1 + else + H := I - 1; + end; + Result := L; + end; + +var + SortedWordStringList: TStringList; + S: String; + A: AnsiString; + I: Integer; +begin + SortedWordStringList := TStringList.Create; + try + { Scintilla uses an ASCII binary search so the list must be in + ASCII sort order (case-insensitive). (TStringList's Sort method is + not suitable as it uses AnsiCompareText.) } + for I := 0 to WordStringList.Count-1 do begin + S := WordStringList[I]; + SortedWordStringList.Insert(GetASCIISortedInsertPos(SortedWordStringList, S), S); + end; + for I := 0 to SortedWordStringList.Count - 1 do + begin + A := AnsiString(SortedWordStringList[I]); + if I = 0 then + Result := A + else + Result:= Result + InnoSetupStylerWordListSeparator + A; + end; + finally + SortedWordStringList.Free; + end; +end; + +procedure TInnoSetupStyler.BuildSectionsWordList; +var + SL: TStringList; + I: Integer; +begin + SL := TStringList.Create; + try + for I := 0 to High(SectionMap) do + SL.Add('[' + String(SectionMap[I].Name) + ']'); + FSectionsWordList := BuildWordList(SL); + finally + SL.Free; + end; +end; + +procedure TInnoSetupStyler.BuildKeywordsWordList( + const Section: TInnoSetupStylerSection; const EnumTypeInfo: Pointer); +var + SL: TStringList; + I: Integer; +begin + SL := TStringList.Create; + try + for I := 0 to GetTypeData(EnumTypeInfo).MaxValue do + SL.Add(Copy(GetEnumName(EnumTypeInfo, I), 3, Maxint)); + FKeywordsWordList[Section] := BuildWordList(SL); + finally + SL.Free; + end; +end; + +procedure TInnoSetupStyler.BuildKeywordsWordList( + const Section: TInnoSetupStylerSection; + const Parameters: array of TInnoSetupStylerParamInfo); +var + SL: TStringList; + I: Integer; +begin + SL := TStringList.Create; + try + for I := 0 to High(Parameters) do + SL.Add(String(Parameters[I].Name)); + FKeywordsWordList[Section] := BuildWordList(SL); + finally + SL.Free; + end; +end; + +procedure TInnoSetupStyler.BuildFlagsWordList(const Section: TInnoSetupStylerSection; + const Flags: array of TInnoSetupStylerParamInfo); +var + SL: TStringList; + I: Integer; +begin + SL := TStringList.Create; + try + for I := 0 to High(Flags) do + SL.Add(String(Flags[I].Name)); + FFlagsWordList[Section] := BuildWordList(SL); + finally + SL.Free; + end; +end; + +procedure TInnoSetupStyler.BuildISPPDirectivesWordList; +var + SL: TStringList; + I: Integer; +begin + SL := TStringList.Create; + try + for I := 0 to High(ISPPDirectives) do + SL.Add('#' + String(ISPPDirectives[I].Name)); + FISPPDirectivesWordList := BuildWordList(SL); + finally + SL.Free; + end; +end; + +procedure TInnoSetupStyler.BuildConstantsWordList; +var + SL: TStringList; + I: Integer; +begin + SL := TStringList.Create; + try + for I := 0 to High(Constants) do + SL.Add('{' + String(Constants[I].Name) + '}'); + if ISPPInstalled then begin + SL.Add('{#'); + SL.Add('{#file '); + end; + for I := 0 to High(ConstantsWithParam) do + SL.Add('{' + String(ConstantsWithParam[I].Name)); + FConstantsWordList := BuildWordList(SL); + finally + SL.Free; + end; +end; + +procedure TInnoSetupStyler.BuildEventFunctionsWordList; +var + SLFunctions, SLProcedures: TStringList; + S: String; + I: Integer; +begin + SLFunctions := nil; + SLProcedures := nil; + try + SLFunctions := TStringList.Create; + SLProcedures := TStringList.Create; + for I := 0 to High(EventFunctions) do begin + S := String(EventFunctions[I].Name); + if Pos('):', S) <> 0 then + SLFunctions.Add(StringReplace(S, '()', '', [])) + else + SLProcedures.Add(S); + end; + FEventFunctionsWordList[False] := BuildWordList(SLFunctions); + FEventFunctionsWordList[True] := BuildWordList(SLProcedures); + finally + SLProcedures.Free; + SLFunctions.Free; + end; +end; + +procedure TInnoSetupStyler.CommitStyle(const Style: TInnoSetupStylerStyle); +begin + inherited CommitStyle(Ord(Style)); +end; + +procedure TInnoSetupStyler.CommitStyleSq(const Style: TInnoSetupStylerStyle; + const Squigglify: Boolean); +begin + if Squigglify then + ApplySquigglyFromIndex(StyleStartIndex); + CommitStyle(Style); +end; + +procedure TInnoSetupStyler.CommitStyleSqPending(const Style: TInnoSetupStylerStyle); +begin + ApplyPendingSquigglyFromIndex(StyleStartIndex); + CommitStyle(Style); +end; + +function TInnoSetupStyler.GetEventFunctionsWordList(Procedures: Boolean): AnsiString; +begin + Result := FEventFunctionsWordList[Procedures]; +end; + +function TInnoSetupStyler.GetFlagsWordList(Section: TInnoSetupStylerSection): AnsiString; +begin + Result := FFlagsWordList[Section]; +end; + +function TInnoSetupStyler.GetKeywordsWordList(Section: TInnoSetupStylerSection): AnsiString; +begin + Result := FKeywordsWordList[Section]; +end; + +class function TInnoSetupStyler.GetSectionFromLineState( + const LineState: TScintLineState): TInnoSetupStylerSection; +begin + Result := TInnoSetupStylerLineState(LineState).Section; +end; + +procedure TInnoSetupStyler.GetStyleAttributes(const Style: Integer; + var Attributes: TScintStyleAttributes); +const + STYLE_LINENUMBER = 33; + STYLE_BRACELIGHT = 34; + STYLE_IDENTGUIDE = 37; +begin + if FTheme <> nil then begin + if (Style >= 0) and (Style <= Ord(High(TInnoSetupStylerStyle))) then begin + if not FTheme.Modern then begin + { Check for some exceptions } + case TInnoSetupStylerStyle(Style) of + stCompilerDirective, stISPPReservedWord: begin Attributes.ForeColor := $4040C0; Exit; end; + stMessageArg: begin Attributes.ForeColor := $FF8000; Exit; end; + stPascalString, stPascalNumber, stISPPString, stISPPNumber: begin Attributes.ForeColor := clMaroon; Exit; end; + end; + end; + case TInnoSetupStylerStyle(Style) of + stCompilerDirective, stISPPReservedWord: Attributes.ForeColor := FTheme.Colors[tcRed]; + stComment: Attributes.ForeColor := FTheme.Colors[tcGreen]; + stSection: Attributes.FontStyle := [fsBold]; + stSymbol: Attributes.ForeColor := FTheme.Colors[tcGray]; + stKeyword, stPascalReservedWord: Attributes.ForeColor := FTheme.Colors[tcBlue]; + //stParameterValue: Attributes.ForeColor := FTheme.Colors[tcTeal]; + stEventFunction: Attributes.FontStyle := [fsBold]; + stConstant: Attributes.ForeColor := FTheme.Colors[tcPurple]; + stMessageArg: Attributes.ForeColor := FTheme.Colors[tcRed]; + stPascalString, stPascalNumber, stISPPString, stISPPNumber: Attributes.ForeColor := FTheme.Colors[tcOrange]; + end; + end else begin + case Style of + STYLE_LINENUMBER: { Also sets the background colour for the margin with the markers like mmIconBreakpoint } + begin + Attributes.ForeColor := FTheme.Colors[tcMarginFore]; + Attributes.BackColor := FTheme.Colors[tcMarginBack]; + end; + STYLE_BRACELIGHT: Attributes.BackColor := FTheme.Colors[tcBraceBack]; + STYLE_IDENTGUIDE: Attributes.ForeColor := FTheme.Colors[tcIdentGuideFore]; + end; + end; + end; +end; + +procedure TInnoSetupStyler.HandleCodeSection(var SpanState: TInnoSetupStylerSpanState); + + function FinishConsumingBraceComment: Boolean; + begin + ConsumeCharsNot(['}']); + Result := ConsumeChar('}'); + CommitStyle(stComment); + end; + + function FinishConsumingStarComment: Boolean; + begin + Result := False; + while True do begin + ConsumeCharsNot(['*']); + if not ConsumeChar('*') then + Break; + if ConsumeChar(')') then begin + Result := True; + Break; + end; + end; + CommitStyle(stComment); + end; + +const + PascalReservedWords: array[0..42] of TScintRawString = ( + 'and', 'array', 'as', 'begin', 'case', 'const', 'div', + 'do', 'downto', 'else', 'end', 'except', 'external', + 'finally', 'for', 'forward', 'function', 'goto', 'if', 'in', 'is', + 'label', 'mod', 'nil', 'not', 'of', 'or', 'procedure', + 'program', 'record', 'repeat', 'set', 'shl', 'shr', + 'then', 'to', 'try', 'type', 'until', 'var', 'while', + 'with', 'xor'); + EventFunctions: array[0..22] of TScintRawString = ( + 'InitializeSetup', 'DeinitializeSetup', 'CurStepChanged', + 'NextButtonClick', 'BackButtonClick', 'ShouldSkipPage', + 'CurPageChanged', 'CheckPassword', 'NeedRestart', + 'UpdateReadyMemo', 'RegisterPreviousData', 'CheckSerial', + 'InitializeWizard', 'GetCustomSetupExitCode', + 'InitializeUninstall', 'DeinitializeUninstall', + 'CurUninstallStepChanged', 'UninstallNeedRestart', + 'CancelButtonClick', 'InitializeUninstallProgressForm', + 'PrepareToInstall', 'RegisterExtraCloseApplicationsResources', + 'CurInstallProgressChanged'); + EventNamingAttribute = 'event'; +var + S: TScintRawString; + I: Integer; + C: AnsiChar; + PreviousIsAttributeOpen: Boolean; +begin + case SpanState of + spBraceComment: + if not FinishConsumingBraceComment then + Exit; + spStarComment: + if not FinishConsumingStarComment then + Exit; + end; + + SpanState := spNone; + SkipWhitespace; + while not EndOfLine do begin + if CurChar in PascalIdentFirstChars then begin + PreviousIsAttributeOpen := PreviousCharIn(['<']); + S := ConsumeString(PascalIdentChars); + if PreviousIsAttributeOpen and SameRawText(S, EventNamingAttribute) then + CommitStyle(stPascalReservedWord) + else begin + for I := Low(PascalReservedWords) to High(PascalReservedWords) do + if SameRawText(S, PascalReservedWords[I]) then begin + CommitStyle(stPascalReservedWord); + Break; + end; + for I := Low(EventFunctions) to High(EventFunctions) do + if SameRawText(S, EventFunctions[I]) then begin + CommitStyle(stEventFunction); + Break; + end; + CommitStyle(stDefault); + end; + end else if ConsumeChars(DigitChars) then begin + if not CurCharIs('.') or not NextCharIs('.') then begin + if ConsumeChar('.') then + ConsumeChars(DigitChars); + C := CurChar; + if C in ['E', 'e'] then begin + ConsumeChar(C); + if not ConsumeChar('-') then + ConsumeChar('+'); + if not ConsumeChars(DigitChars) then + CommitStyleSqPending(stPascalNumber); + end; + end; + CommitStyle(stPascalNumber); + end else begin + C := CurChar; + ConsumeChar(C); + case C of + ';', ':', '=', '+', '-', '*', '/', '<', '>', ',', '(', ')', + '.', '[', ']', '@', '^': + begin + if (C = '/') and ConsumeChar('/') then begin + ConsumeAllRemaining; + CommitStyle(stComment); + end else if (C = '(') and ConsumeChar('*') then begin + if not FinishConsumingStarComment then begin + SpanState := spStarComment; + Exit; + end; + end else + CommitStyle(stSymbol); + end; + '''': + begin + while True do begin + ConsumeCharsNot([C]); + if not ConsumeChar(C) then begin + CommitStyleSqPending(stPascalString); + Break; + end; + if not ConsumeChar(C) then begin + CommitStyle(stPascalString); + Break; + end; + end; + end; + '{': + begin + if not FinishConsumingBraceComment then begin + SpanState := spBraceComment; + Exit; + end; + end; + '$': + begin + if not ConsumeChars(HexDigitChars) then + CommitStyleSqPending(stPascalNumber); + CommitStyle(stPascalNumber); + end; + '#': + begin + if ConsumeChar('$') then begin + if not ConsumeChars(HexDigitChars) then + CommitStyleSqPending(stPascalString); + end else if not ConsumeChars(DigitChars) then + CommitStyleSqPending(stPascalString); + CommitStyle(stPascalString); + end; + else + { Illegal character } + CommitStyleSq(stSymbol, True); + end; + end; + SkipWhitespace; + end; +end; + +procedure TInnoSetupStyler.HandleCompilerDirective(const InlineDirective: Boolean; const InlineDirectiveEndIndex: Integer; var OpenCount: ShortInt); + + function EndOfDirective: Boolean; + begin + Result := EndOfLine or (InlineDirective and (CurIndex > InlineDirectiveEndIndex)); + end; + + procedure FinishDirectiveNameOrShorthand(const RequiresParameter: Boolean); + begin + if RequiresParameter then begin + ConsumeChars(WhitespaceChars); { This will give the whitespace the stCompilerDirective style instead of stDefault but that's ok } + if EndOfDirective then + CommitStyleSqPending(stCompilerDirective) + else + CommitStyle(stCompilerDirective); + end else + CommitStyle(stCompilerDirective); + end; + + function FinishConsumingStarComment: Boolean; + begin + Result := False; + while True do begin + ConsumeCharsNot(['*']); + if not ConsumeChar('*') then + Break; + if ConsumeChar('/') then begin + Result := True; + Break; + end; + end; + if Result then + CommitStyle(stComment) + else + CommitStyleSqPending(stComment); + end; + + procedure ConsumeISPPString(const Terminator: AnsiChar; const AllowEscapedTerminator: Boolean); + begin + while True do begin + ConsumeCharsNot([Terminator]); + if not ConsumeChar(Terminator) then begin + { Non terminated string found } + CommitStyleSqPending(stISPPString); + Break; + end; + { Terminated string found and consumed. Now check if the terminator is actually escaped by doubling, if allowed } + if not AllowEscapedTerminator or not ConsumeChar(Terminator) then begin + { Doubling not allowed or no double terminator found, so we're done } + CommitStyle(stISPPString); + Break; + end; + { The terminator was doubled so we should continue to find the real terminator } + end; + + end; + +const + ISPPReservedWords: array[0..16] of TScintRawString = ( + 'private', 'protected', 'public', 'any', 'int', + 'str', 'func', 'option', 'parseroption', 'inlinestart', + 'inlineend', 'message', 'warning', 'error', + 'verboselevel', 'include', 'spansymbol'); + ISPPDirectiveShorthands: TScintRawCharSet = + [':' {define}, + 'x' {undef}, + '+' {include}, + '=' {emit}, + '!' {expr}]; +var + S: TScintRawString; + StartIndex, I: Integer; + C: AnsiChar; + NeedIspp, ForDirectiveExpressionsNext, DoIncludeFileNotationCheck: Boolean; +begin + StartIndex := CurIndex; + if InlineDirective then begin + ConsumeChar('{'); + NeedIspp := True; + end else + NeedIspp := False; { Might be updated later to True later } + ForDirectiveExpressionsNext := False; + DoIncludeFileNotationCheck := False; + ConsumeChar('#'); + CommitStyle(stCompilerDirective); + + { Directive name or shorthand } + SkipWhiteSpace; + C := CurChar; + if ConsumeCharIn(ISPPDirectiveShorthands) then begin + DoIncludeFileNotationCheck := C = '+'; { We need to check the include file notation } + NeedIspp := True; + FinishDirectiveNameOrShorthand(True); { All shorthands require a parameter } + end else begin + S := ConsumeString(ISPPIdentChars); + for I := Low(ISPPDirectives) to High(ISPPDirectives) do + if SameRawText(S, ISPPDirectives[I].Name) then begin + if SameRawText(S, 'include') then + DoIncludeFileNotationCheck := True { See above } + else + NeedIspp := True; { Built-in preprocessor only supports '#include' } + ForDirectiveExpressionsNext := SameRawText(S, 'for'); { #for uses ';' as an expressions list separator so we need to remember that ';' doesn't start a comment until the list is done } + Inc(OpenCount, ISPPDirectives[I].OpenCountChange); + if OpenCount < 0 then begin + CommitStyleSq(stCompilerDirective, True); + OpenCount := 0; { Reset so that next doesn't automatically gets error as well } + end; + FinishDirectiveNameOrShorthand(ISPPDirectives[I].RequiresParameter); + Break; + end; + if InlineDirective then + CommitStyle(stDefault) { #emit shorthand was used (='#' directly followed by an expression): not an error } + else + CommitStyleSqPending(stCompilerDirective); + end; + + { Rest of the directive } + SkipWhitespace; + while not EndOfDirective do begin + if DoIncludeFileNotationCheck then begin + if CurChar <> '"' then begin + NeedIspp := True; { Built-in preprocessor requires a '"' quoted string after the '#include' and doesn't support anything else } + if CurChar = '<' then { Check for ISPP's special bracket notation for include files } + ConsumeISPPString('>', False); { Consume now instead of using regular consumption } + end; + DoIncludeFileNotationCheck := False; + end; + if CurChar in ISPPIdentFirstChars then begin + S := ConsumeString(ISPPIdentChars); + for I := Low(ISPPReservedWords) to High(ISPPReservedWords) do + if SameRawText(S, ISPPReservedWords[I]) then begin + CommitStyle(stISPPReservedWord); + Break; + end; + CommitStyle(stDefault) + end else if ConsumeChars(DigitChars) then begin + if not CurCharIs('.') or not NextCharIs('.') then begin + if ConsumeChar('.') then + ConsumeChars(DigitChars); + C := CurChar; + if C in ['X', 'x'] then begin + ConsumeChar(C); + if not ConsumeChars(HexDigitChars) then + CommitStyleSqPending(stISPPNumber); + end; + ConsumeChars(['L', 'U', 'l', 'u']); + end; + CommitStyle(stISPPNumber); + end else begin + C := CurChar; + ConsumeChar(C); + case C of + '!', '&', '=', '|', '^', '>', '<', '+', '-', '/', '%', '*', + '?', ':', ',', '.', '~', '(', '[', '{', ')', ']', '}', '@', + '#': + begin + if (C = '}') and ForDirectiveExpressionsNext then + ForDirectiveExpressionsNext := False; + if (C = '/') and ConsumeChar('*') then + FinishConsumingStarComment + else if InlineDirective and (C = '}') then + CommitStyle(stCompilerDirective) (* Closing '}' of the ISPP inline directive *) + else + CommitStyle(stSymbol); + end; + ';': + begin + if ForDirectiveExpressionsNext then + CommitStyle(stSymbol) + else begin + if not InlineDirective then + ConsumeAllRemaining + else + ConsumeCharsNot(['}']); + CommitStyle(stComment); + end; + end; + '''', '"': + ConsumeISPPString(C, True); + else + { Illegal character } + CommitStyleSq(stSymbol, True); + end; + end; + SkipWhitespace; + end; + + if NeedIspp and not ISPPInstalled then begin + if InlineDirective then + ApplyPendingSquigglyFromToIndex(StartIndex + 1, InlineDirectiveEndIndex - 1) + else + ApplyPendingSquigglyFromIndex(StartIndex + 1); + end; +end; + +procedure TInnoSetupStyler.HandleParameterSection( + const ValidParameters: array of TInnoSetupStylerParamInfo); +var + ParamsSpecified: set of 0..31; + S: TScintRawString; + I, ParamValueIndex, BraceLevel: Integer; + NamePresent, ValidName, DuplicateName, ColonPresent: Boolean; +begin + ParamsSpecified := []; + while not EndOfLine do begin + { Squigglify any bogus characters before the parameter name } + SquigglifyUntilChars(AlphaChars + [':'], stDefault); + + { Parameter name } + S := ConsumeString(AlphaDigitChars); + NamePresent := (S <> ''); + ValidName := False; + DuplicateName := False; + for I := Low(ValidParameters) to High(ValidParameters) do + if SameRawText(S, ValidParameters[I].Name) then begin + ValidName := True; + DuplicateName := (I in ParamsSpecified); + Include(ParamsSpecified, I); + Break; + end; + if DuplicateName then + CommitStyleSqPending(stKeyword) + else if ValidName then + CommitStyle(stKeyword) + else + CommitStyleSqPending(stDefault); + SkipWhitespace; + + { If there's a semicolon with no colon, squigglify the semicolon } + if ConsumeChar(';') then begin + CommitStyleSq(stSymbol, True); + SkipWhitespace; + Continue; + end; + + { Colon } + ColonPresent := ConsumeChar(':'); + CommitStyleSq(stSymbol, not NamePresent); + SkipWhitespace; + + { Parameter value. This consumes until a ';' is found or EOL is reached. } + ParamValueIndex := CurIndex; + BraceLevel := 0; + if ConsumeChar('"') then begin + while True do begin + StyleConstsUntilChars(['"'], stParameterValue, BraceLevel); + { If no closing quote exists, squigglify the whole value and break } + if not ConsumeChar('"') then begin + ApplyPendingSquigglyFromIndex(ParamValueIndex); + Break; + end; + { Quote found, now break, unless there are two quotes in a row } + if not ConsumeChar('"') then + Break; + end; + end else begin + while True do begin + StyleConstsUntilChars([';', '"'], stParameterValue, BraceLevel); + { Squigglify any quote characters inside an unquoted string } + if ConsumeChar('"') then + ApplySquigglyFromIndex(CurIndex - 1) + else + Break; + end; + end; + CommitStyle(stParameterValue); + if not ColonPresent then + ApplySquigglyFromIndex(ParamValueIndex); + { Squigglify any characters between a quoted string and the next ';' } + SquigglifyUntilChars([';'], stDefault); + + { Semicolon } + ConsumeChar(';'); + CommitStyle(stSymbol); + SkipWhitespace; + end; +end; + +procedure TInnoSetupStyler.HandleKeyValueSection(const Section: TInnoSetupStylerSection); + + procedure StyleMessageArgs; + begin + while True do begin + ConsumeCharsNot(['%']); + CommitStyle(stDefault); + if not ConsumeChar('%') then + Break; + if CurCharIn(['1'..'9', '%', 'n']) then begin + ConsumeChar(CurChar); + CommitStyle(stMessageArg); + end; + end; + end; + +var + S: String; + I, BraceLevel: Integer; +begin + { Squigglify any bogus characters at the start of the line } + SquigglifyUntilChars(AlphaUnderscoreChars, stDefault); + if EndOfLine then + Exit; + + S := String(ConsumeString(AlphaDigitUnderscoreChars)); + { Was that a language name? } + if (Section in [scCustomMessages, scLangOptions, scMessages]) and + CurCharIs('.') then begin + CommitStyle(stDefault); + ConsumeChar('.'); + CommitStyle(stSymbol); + { Squigglify any spaces or bogus characters between the '.' and key name } + if ConsumeCharsNot(AlphaUnderscoreChars) then + CommitStyleSq(stDefault, True); + S := String(ConsumeString(AlphaDigitUnderscoreChars)); + end; + + case Section of + scCustomMessages: + I := 0; + scLangOptions: + I := GetEnumValue(TypeInfo(TLangOptionsSectionDirective), 'ls' + S); + scMessages: + I := GetEnumValue(TypeInfo(TSetupMessageID), 'msg' + S); + scSetup: + I := GetEnumValue(TypeInfo(TSetupSectionDirective), 'ss' + S); + else + I := -1; + end; + if I <> -1 then + CommitStyle(stKeyword) + else begin + if Section in [scLangOptions, scMessages, scSetup] then + CommitStyleSqPending(stDefault) + else + CommitStyle(stDefault); + end; + SquigglifyUntilChars(['='], stDefault); + + ConsumeChar('='); + CommitStyle(stSymbol); + SkipWhitespace; + + if Section in [scCustomMessages, scMessages] then + StyleMessageArgs + else begin + BraceLevel := 0; + StyleConstsUntilChars([], stDefault, BraceLevel); + CommitStyle(stDefault); + end; +end; + +class function TInnoSetupStyler.IsParamSection( + const Section: TInnoSetupStylerSection): Boolean; +begin + Result := not (Section in [scCustomMessages, scLangOptions, scMessages, scSetup]); +end; + +class function TInnoSetupStyler.IsSymbolStyle(const Style: TScintStyleNumber): Boolean; +begin + Result := (Style = Ord(stSymbol)); +end; + +function TInnoSetupStyler.LineTextSpans(const S: TScintRawString): Boolean; +var + I: Integer; +begin + { Note: To match ISPP behavior, require length of at least 3 } + I := Length(S); + Result := (I > 2) and (S[I] = '\') and (S[I-1] in WhitespaceChars); +end; + +procedure TInnoSetupStyler.PreStyleInlineISPPDirectives; + + function IsLineCommented: Boolean; + var + I: Integer; + begin + Result := False; + for I := 1 to TextLength do begin + { In ISPP, only ';' and '//' inhibit processing of inline directives } + if (Text[I] = ';') or + ((I < TextLength) and (Text[I] = '/') and (Text[I+1] = '/')) then begin + Result := True; + Break; + end; + if not(Text[I] in WhitespaceChars) then + Break; + end; + end; + +const + LineEndChars = [#10, #13]; +var + I, StartIndex: Integer; + Valid: Boolean; + Dummy: ShortInt; +begin + { Style span symbols, then replace them with spaces to prevent any further + processing } + for I := 3 to TextLength do begin + if ((I = TextLength) or (Text[I+1] in LineEndChars)) and + (Text[I] = '\') and (Text[I-1] in WhitespaceChars) and + not(Text[I-2] in LineEndChars) then begin + ReplaceText(I, I, ' '); + ApplyStyle(Ord(stSymbol), I, I); + if not ISPPInstalled then + ApplyStyleByteIndicators([inSquiggly], I, I); + end; + end; + + { Style all '{#' ISPP inline directives before anything else } + if not IsLineCommented then begin + I := 1; + while I < TextLength do begin + if (Text[I] = '{') and (Text[I+1] = '#') then begin + StartIndex := I; + Valid := False; + while I <= TextLength do begin + Inc(I); + if Text[I-1] = '}' then begin + Valid := True; + Break; + end; + end; + ResetCurIndexTo(StartIndex); + try + HandleCompilerDirective(True, I - 1, Dummy); + finally + ResetCurIndexTo(0); + end; + if not Valid then + ApplyPendingSquigglyFromToIndex(StartIndex, I - 1); + { Replace the directive with spaces to prevent any further processing } + ReplaceText(StartIndex, I - 1, ' '); + end else + Inc(I); + end; + end; +end; + +procedure TInnoSetupStyler.SetISPPInstalled(const Value: Boolean); +begin + if Value <> FISPPInstalled then begin + FISPPInstalled := Value; + BuildConstantsWordList; + end; +end; + +procedure TInnoSetupStyler.SkipWhitespace; +begin + ConsumeChars(WhitespaceChars); + CommitStyle(stDefault); +end; + +procedure TInnoSetupStyler.SquigglifyUntilChars(const Chars: TScintRawCharSet; + const Style: TInnoSetupStylerStyle); +var + IsWhitespace: Boolean; +begin + { Consume and squigglify all non-whitespace characters until one of Chars + is encountered } + while not EndOfLine and not CurCharIn(Chars) do begin + IsWhitespace := CurCharIn(WhitespaceChars); + ConsumeChar(CurChar); + if IsWhitespace then + CommitStyle(stDefault) + else + CommitStyleSq(Style, True); + end; + CommitStyle(stDefault); +end; + +procedure TInnoSetupStyler.StyleConstsUntilChars(const Chars: TScintRawCharSet; + const NonConstStyle: TInnoSetupStylerStyle; var BraceLevel: Integer); +var + C: AnsiChar; +begin + while not EndOfLine and not CurCharIn(Chars) do begin + if BraceLevel = 0 then + CommitStyle(NonConstStyle); + C := CurChar; + ConsumeChar(C); + if C = '{' then begin + if not ConsumeChar('{') then + Inc(BraceLevel); + end; + if (C = '}') and (BraceLevel > 0) then begin + Dec(BraceLevel); + if BraceLevel = 0 then + CommitStyle(stConstant); + end; + end; +end; + +procedure TInnoSetupStyler.StyleNeeded; +var + NewLineState: TInnoSetupStylerLineState; + Section, NewSection: TInnoSetupStylerSection; + SectionEnd: Boolean; + S: TScintRawString; +begin + NewLineState := TInnoSetupStylerLineState(LineState); + if NewLineState.NextLineSection <> scNone then begin + NewLineState.Section := NewLineState.NextLineSection; + NewLineState.NextLineSection := scNone; + end; + Section := NewLineState.Section; + + PreStyleInlineISPPDirectives; + + SkipWhitespace; + if (Section <> scCode) and ConsumeChar(';') then begin + ConsumeAllRemaining; + CommitStyle(stComment); + end else if CurCharIs('/') and NextCharIs('/') then begin + ConsumeAllRemaining; + CommitStyleSq(stComment, not ISPPInstalled and (Section <> scCode)) + end else if ConsumeChar('[') then begin + SectionEnd := ConsumeChar('/'); + S := ConsumeString(AlphaUnderscoreChars); + if ConsumeChar(']') then begin + NewSection := MapSectionNameString(S); + { Unknown section names and erroneously-placed end tags get squigglified } + CommitStyleSq(stSection, (NewSection = scUnknown) or + (SectionEnd and (NewSection <> Section))); + if not SectionEnd then + NewLineState.NextLineSection := NewSection; + end else + CommitStyleSqPending(stDefault); + { Section tags themselves are not associated with any section } + Section := scNone; + SquigglifyUntilChars([], stDefault); + end else if CurCharIs('#') then + HandleCompilerDirective(False, -1, NewLineState.OpenCompilerDirectivesCount) + else begin + case Section of + scUnknown: ; + scThirdParty: ; + scCode: HandleCodeSection(NewLineState.SpanState); + scComponents: HandleParameterSection(ComponentsSectionParameters); + scCustomMessages: HandleKeyValueSection(Section); + scDirs: HandleParameterSection(DirsSectionParameters); + scFiles: HandleParameterSection(FilesSectionParameters); + scIcons: HandleParameterSection(IconsSectionParameters); + scINI: HandleParameterSection(INISectionParameters); + scInstallDelete: HandleParameterSection(DeleteSectionParameters); + scLangOptions: HandleKeyValueSection(Section); + scLanguages: HandleParameterSection(LanguagesSectionParameters); + scMessages: HandleKeyValueSection(Section); + scRegistry: HandleParameterSection(RegistrySectionParameters); + scRun: HandleParameterSection(RunSectionParameters); + scSetup: HandleKeyValueSection(Section); + scTasks: HandleParameterSection(TasksSectionParameters); + scTypes: HandleParameterSection(TypesSectionParameters); + scUninstallDelete: HandleParameterSection(DeleteSectionParameters); + scUninstallRun: HandleParameterSection(UninstallRunSectionParameters); + end; + end; + + NewLineState.Section := Section; + LineState := TScintLineState(NewLineState); +end; + +end. diff --git a/Components/TmSchema.pas b/Components/TmSchema.pas new file mode 100644 index 00000000..438fab2a --- /dev/null +++ b/Components/TmSchema.pas @@ -0,0 +1,1627 @@ +{******************************************************************************} +{ } +{ Visual Styles (Themes) API interface Unit for Object Pascal } +{ } +{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft } +{ Corporation. All Rights Reserved. } +{ } +{ The original file is: tmschema.h, released June 2001. The original Pascal } +{ code is: TmSchema.pas, released July 2001. The initial developer of the } +{ Pascal code is Marcel van Brakel (brakelm@chello.nl). } +{ } +{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 } +{ Marcel van Brakel. All Rights Reserved. } +{ } +{ Portions created by Mike Lischke are Copyright (C) 1999-2001 } +{ Mike Lischke. All Rights Reserved. } +{ } +{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) } +{ } +{ You may retrieve the latest version of this file at the Project JEDI home } +{ page, located at http://delphi-jedi.org or my personal homepage located at } +{ http://members.chello.nl/m.vanbrakel2 } +{ } +{ The contents of this file are used with permission, subject to the Mozilla } +{ Public License Version 1.1 (the "License"); you may not use this file except } +{ in compliance with the License. You may obtain a copy of the License at } +{ http://www.mozilla.org/MPL/MPL-1.1.html } +{ } +{ Software distributed under the License is distributed on an "AS IS" basis, } +{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for } +{ the specific language governing rights and limitations under the License. } +{ } +{ Alternatively, the contents of this file may be used under the terms of the } +{ GNU Lesser General Public License (the "LGPL License"), in which case the } +{ provisions of the LGPL License are applicable instead of those above. } +{ If you wish to allow use of your version of this file only under the terms } +{ of the LGPL License and not to allow others to use your version of this file } +{ under the MPL, indicate your decision by deleting the provisions above and } +{ replace them with the notice and other provisions required by the LGPL } +{ License. If you do not delete the provisions above, a recipient may use } +{ your version of this file under either the MPL or the LGPL License. } +{ } +{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html } +{ } +{******************************************************************************} + +{ Simplified by Martijn Laan for Inno Setup } + +unit TmSchema; + +interface + +//---------------------------------------------------------------------------------------------------------------------- +// TmSchema.h - Theme Manager schema (properties, parts, etc) +//---------------------------------------------------------------------------------------------------------------------- + +const + THEMEMGR_VERSION = 1; // increment if order of props changes or + // any props are deleted (will prevent loading + // of controlsets that use older version + +//---------------------------------------------------------------------------------------------------------------------- +// TM_ENUM (must also be declared in PROPERTIES section) +// +// these cannot be renumbered (part of uxtheme API) +//---------------------------------------------------------------------------------------------------------------------- + +type + BGTYPE = Cardinal; + +const + BT_IMAGEFILE = 0; + BT_BORDERFILL = 1; + BT_NONE = 2; + +type + IMAGELAYOUT = Cardinal; + +const + IL_VERTICAL = 0; + IL_HORIZONTAL = 1; + +type + BORDERTYPE = Cardinal; + +const + BT_RECT = 0; + BT_ROUNDRECT = 1; + BT_ELLIPSE = 2; + +type + FILLTYPE = Cardinal; + +const + FT_SOLID = 0; + FT_VERTGRADIENT = 1; + FT_HORZGRADIENT = 2; + FT_RADIALGRADIENT = 3; + FT_TILEIMAGE = 4; + +type + SIZINGTYPE = Cardinal; + +const + ST_TRUESIZE = 0; + ST_STRETCH = 1; + ST_TILE = 2; + +type + HALIGN = Cardinal; + +const + HA_LEFT = 0; + HA_CENTER = 1; + HA_RIGHT = 2; + +type + CONTENTALIGNMENT = Cardinal; + +const + CA_LEFT = 0; + CA_CENTER = 1; + CA_RIGHT = 2; + +type + VALIGN = Cardinal; + +const + VA_TOP = 0; + VA_CENTER = 1; + VA_BOTTOM = 2; + +type + OFFSETTYPE = Cardinal; + +const + OT_TOPLEFT = 0; + OT_TOPRIGHT = 1; + OT_TOPMIDDLE = 2; + OT_BOTTOMLEFT = 3; + OT_BOTTOMRIGHT = 4; + OT_BOTTOMMIDDLE = 5; + OT_MIDDLELEFT = 6; + OT_MIDDLERIGHT = 7; + OT_LEFTOFCAPTION = 8; + OT_RIGHTOFCAPTION = 9; + OT_LEFTOFLASTBUTTON = 10; + OT_RIGHTOFLASTBUTTON = 11; + OT_ABOVELASTBUTTON = 12; + OT_BELOWLASTBUTTON = 13; + +type + ICONEFFECT = Cardinal; + +const + ICE_NONE = 0; + ICE_GLOW = 1; + ICE_SHADOW = 2; + ICE_PULSE = 3; + ICE_ALPHA = 4; + +type + TEXTSHADOWTYPE = Cardinal; + +const + TST_NONE = 0; + TST_SINGLE = 1; + TST_CONTINUOUS = 2; + +type + GLYPHTYPE = Cardinal; + +const + GT_NONE = 0; + GT_IMAGEGLYPH = 1; + GT_FONTGLYPH = 2; + +type + IMAGESELECTTYPE = Cardinal; + +const + IST_NONE = 0; + IST_SIZE = 1; + IST_DPI = 2; + +type + TRUESIZESCALINGTYPE = Cardinal; + +const + TSST_NONE = 0; + TSST_SIZE = 1; + TSST_DPI = 2; + +type + GLYPHFONTSIZINGTYPE = Cardinal; + +const + GFST_NONE = 0; + GFST_SIZE = 1; + GFST_DPI = 2; + +//---------------------------------------------------------------------------------------------------------------------- +// PROPERTIES - used by uxtheme rendering and controls +// +// these cannot be renumbered (part of uxtheme API) +//---------------------------------------------------------------------------------------------------------------------- + +const + + //---- primitive types ---- + + TMT_STRING = 201; + TMT_INT = 202; + TMT_BOOL = 203; + TMT_COLOR = 204; + TMT_MARGINS = 205; + TMT_FILENAME = 206; + TMT_SIZE = 207; + TMT_POSITION = 208; + TMT_RECT = 209; + TMT_FONT = 210; + TMT_INTLIST = 211; + + //---- special misc. properties ---- + + TMT_COLORSCHEMES = 401; + TMT_SIZES = 402; + TMT_CHARSET = 403; + + //---- [documentation] properties ---- + + TMT_DISPLAYNAME = 601; + TMT_TOOLTIP = 602; + TMT_COMPANY = 603; + TMT_AUTHOR = 604; + TMT_COPYRIGHT = 605; + TMT_URL = 606; + TMT_VERSION = 607; + TMT_DESCRIPTION = 608; + + {$ifndef BCB} + TMT_FIRST_RCSTRING_NAME = TMT_DISPLAYNAME; + TMT_LAST_RCSTRING_NAME = TMT_DESCRIPTION; + {$endif BCB} + + //---- theme metrics: fonts ---- + + TMT_CAPTIONFONT = 801; + TMT_SMALLCAPTIONFONT = 802; + TMT_MENUFONT = 803; + TMT_STATUSFONT = 804; + TMT_MSGBOXFONT = 805; + TMT_ICONTITLEFONT = 806; + + {$ifndef BCB} + TMT_FIRSTFONT = TMT_CAPTIONFONT; + TMT_LASTFONT = TMT_ICONTITLEFONT; + {$endif BCB} + + //---- theme metrics: bools ---- + + TMT_FLATMENUS = 1001; + + {$ifndef BCB} + TMT_FIRSTBOOL = TMT_FLATMENUS; + TMT_LASTBOOL = TMT_FLATMENUS; + {$endif BCB} + + //---- theme metrics: sizes ---- + + TMT_SIZINGBORDERWIDTH = 1201; + TMT_SCROLLBARWIDTH = 1202; + TMT_SCROLLBARHEIGHT = 1203; + TMT_CAPTIONBARWIDTH = 1204; + TMT_CAPTIONBARHEIGHT = 1205; + TMT_SMCAPTIONBARWIDTH = 1206; + TMT_SMCAPTIONBARHEIGHT = 1207; + TMT_MENUBARWIDTH = 1208; + TMT_MENUBARHEIGHT = 1209; + + {$ifndef BCB} + TMT_FIRSTSIZE = TMT_SIZINGBORDERWIDTH; + TMT_LASTSIZE = TMT_MENUBARHEIGHT; + {$endif BCB} + + //---- theme metrics: ints ---- + + TMT_MINCOLORDEPTH = 1301; + + {$ifndef BCB} + TMT_FIRSTINT = TMT_MINCOLORDEPTH; + TMT_LASTINT = TMT_MINCOLORDEPTH; + {$endif BCB} + + //---- theme metrics: strings ---- + + TMT_CSSNAME = 1401; + TMT_XMLNAME = 1402; + + {$ifndef BCB} + TMT_FIRSTSTRING = TMT_CSSNAME; + TMT_LASTSTRING = TMT_XMLNAME; + {$endif BCB} + + //---- theme metrics: colors ---- + + TMT_SCROLLBAR = 1601; + TMT_BACKGROUND = 1602; + TMT_ACTIVECAPTION = 1603; + TMT_INACTIVECAPTION = 1604; + TMT_MENU = 1605; + TMT_WINDOW = 1606; + TMT_WINDOWFRAME = 1607; + TMT_MENUTEXT = 1608; + TMT_WINDOWTEXT = 1609; + TMT_CAPTIONTEXT = 1610; + TMT_ACTIVEBORDER = 1611; + TMT_INACTIVEBORDER = 1612; + TMT_APPWORKSPACE = 1613; + TMT_HIGHLIGHT = 1614; + TMT_HIGHLIGHTTEXT = 1615; + TMT_BTNFACE = 1616; + TMT_BTNSHADOW = 1617; + TMT_GRAYTEXT = 1618; + TMT_BTNTEXT = 1619; + TMT_INACTIVECAPTIONTEXT = 1620; + TMT_BTNHIGHLIGHT = 1621; + TMT_DKSHADOW3D = 1622; + TMT_LIGHT3D = 1623; + TMT_INFOTEXT = 1624; + TMT_INFOBK = 1625; + TMT_BUTTONALTERNATEFACE = 1626; + TMT_HOTTRACKING = 1627; + TMT_GRADIENTACTIVECAPTION = 1628; + TMT_GRADIENTINACTIVECAPTION = 1629; + TMT_MENUHILIGHT = 1630; + TMT_MENUBAR = 1631; + + {$ifndef BCB} + TMT_FIRSTCOLOR = TMT_SCROLLBAR; + TMT_LASTCOLOR = TMT_MENUBAR; + {$endif BCB} + + //---- hue substitutions ---- + + TMT_FROMHUE1 = 1801; + TMT_FROMHUE2 = 1802; + TMT_FROMHUE3 = 1803; + TMT_FROMHUE4 = 1804; + TMT_FROMHUE5 = 1805; + TMT_TOHUE1 = 1806; + TMT_TOHUE2 = 1807; + TMT_TOHUE3 = 1808; + TMT_TOHUE4 = 1809; + TMT_TOHUE5 = 1810; + + //---- color substitutions ---- + + TMT_FROMCOLOR1 = 2001; + TMT_FROMCOLOR2 = 2002; + TMT_FROMCOLOR3 = 2003; + TMT_FROMCOLOR4 = 2004; + TMT_FROMCOLOR5 = 2005; + TMT_TOCOLOR1 = 2006; + TMT_TOCOLOR2 = 2007; + TMT_TOCOLOR3 = 2008; + TMT_TOCOLOR4 = 2009; + TMT_TOCOLOR5 = 2010; + + //---- rendering BOOL properties ---- + + TMT_TRANSPARENT = 2201; + TMT_AUTOSIZE = 2202; + TMT_BORDERONLY = 2203; + TMT_COMPOSITED = 2204; + TMT_BGFILL = 2205; + TMT_GLYPHTRANSPARENT = 2206; + TMT_GLYPHONLY = 2207; + TMT_ALWAYSSHOWSIZINGBAR = 2208; + TMT_MIRRORIMAGE = 2209; + TMT_UNIFORMSIZING = 2210; + TMT_INTEGRALSIZING = 2211; + TMT_SOURCEGROW = 2212; + TMT_SOURCESHRINK = 2213; + + //---- rendering INT properties ---- + + TMT_IMAGECOUNT = 2401; + TMT_ALPHALEVEL = 2402; + TMT_BORDERSIZE = 2403; + TMT_ROUNDCORNERWIDTH = 2404; + TMT_ROUNDCORNERHEIGHT = 2405; + TMT_GRADIENTRATIO1 = 2406; + TMT_GRADIENTRATIO2 = 2407; + TMT_GRADIENTRATIO3 = 2408; + TMT_GRADIENTRATIO4 = 2409; + TMT_GRADIENTRATIO5 = 2410; + TMT_PROGRESSCHUNKSIZE = 2411; + TMT_PROGRESSSPACESIZE = 2412; + TMT_SATURATION = 2413; + TMT_TEXTBORDERSIZE = 2414; + TMT_ALPHATHRESHOLD = 2415; + TMT_WIDTH = 2416; + TMT_HEIGHT = 2417; + TMT_GLYPHINDEX = 2418; + TMT_TRUESIZESTRETCHMARK = 2419; + TMT_MINDPI1 = 2420; + TMT_MINDPI2 = 2421; + TMT_MINDPI3 = 2422; + TMT_MINDPI4 = 2423; + TMT_MINDPI5 = 2424; + + //---- rendering FONT properties ---- + + TMT_GLYPHFONT = 2601; + + //---- rendering INTLIST properties ---- + // start with 2801 + // (from smallest to largest) + //---- rendering FILENAME properties ---- + + TMT_IMAGEFILE = 3001; + TMT_IMAGEFILE1 = 3002; + TMT_IMAGEFILE2 = 3003; + TMT_IMAGEFILE3 = 3004; + TMT_IMAGEFILE4 = 3005; + TMT_IMAGEFILE5 = 3006; + TMT_STOCKIMAGEFILE = 3007; + TMT_GLYPHIMAGEFILE = 3008; + + //---- rendering STRING properties ---- + + TMT_TEXT = 3201; + + //---- rendering POSITION (x and y values) properties ---- + + TMT_OFFSET = 3401; + TMT_TEXTSHADOWOFFSET = 3402; + TMT_MINSIZE = 3403; + TMT_MINSIZE1 = 3404; + TMT_MINSIZE2 = 3405; + TMT_MINSIZE3 = 3406; + TMT_MINSIZE4 = 3407; + TMT_MINSIZE5 = 3408; + TMT_NORMALSIZE = 3409; + + //---- rendering MARGIN properties ---- + + TMT_SIZINGMARGINS = 3601; + TMT_CONTENTMARGINS = 3602; + TMT_CAPTIONMARGINS = 3603; + + //---- rendering COLOR properties ---- + + TMT_BORDERCOLOR = 3801; + TMT_FILLCOLOR = 3802; + TMT_TEXTCOLOR = 3803; + TMT_EDGELIGHTCOLOR = 3804; + TMT_EDGEHIGHLIGHTCOLOR = 3805; + TMT_EDGESHADOWCOLOR = 3806; + TMT_EDGEDKSHADOWCOLOR = 3807; + TMT_EDGEFILLCOLOR = 3808; + TMT_TRANSPARENTCOLOR = 3809; + TMT_GRADIENTCOLOR1 = 3810; + TMT_GRADIENTCOLOR2 = 3811; + TMT_GRADIENTCOLOR3 = 3812; + TMT_GRADIENTCOLOR4 = 3813; + TMT_GRADIENTCOLOR5 = 3814; + TMT_SHADOWCOLOR = 3815; + TMT_GLOWCOLOR = 3816; + TMT_TEXTBORDERCOLOR = 3817; + TMT_TEXTSHADOWCOLOR = 3818; + TMT_GLYPHTEXTCOLOR = 3819; + TMT_GLYPHTRANSPARENTCOLOR = 3820; + TMT_FILLCOLORHINT = 3821; + TMT_BORDERCOLORHINT = 3822; + TMT_ACCENTCOLORHINT = 3823; + + //---- rendering enum properties (must be declared in TM_ENUM section above) ---- + + TMT_BGTYPE = 4001; + TMT_BORDERTYPE = 4002; + TMT_FILLTYPE = 4003; + TMT_SIZINGTYPE = 4004; + TMT_HALIGN = 4005; + TMT_CONTENTALIGNMENT = 4006; + TMT_VALIGN = 4007; + TMT_OFFSETTYPE = 4008; + TMT_ICONEFFECT = 4009; + TMT_TEXTSHADOWTYPE = 4010; + TMT_IMAGELAYOUT = 4011; + TMT_GLYPHTYPE = 4012; + TMT_IMAGESELECTTYPE = 4013; + TMT_GLYPHFONTSIZINGTYPE = 4014; + TMT_TRUESIZESCALINGTYPE = 4015; + + //---- custom properties (used only by controls/shell) ---- + + TMT_USERPICTURE = 5001; + TMT_DEFAULTPANESIZE = 5002; + TMT_BLENDCOLOR = 5003; + +//---------------------------------------------------------------------------------------------------------------------- +// "Window" (i.e., non-client) Parts & States +// +// these cannot be renumbered (part of uxtheme API) +//---------------------------------------------------------------------------------------------------------------------- + +type + WINDOWPARTS = Cardinal; + +const + WINDOWPartFiller0 = 0; + WP_CAPTION = 1; + WP_SMALLCAPTION = 2; + WP_MINCAPTION = 3; + WP_SMALLMINCAPTION = 4; + WP_MAXCAPTION = 5; + WP_SMALLMAXCAPTION = 6; + WP_FRAMELEFT = 7; + WP_FRAMERIGHT = 8; + WP_FRAMEBOTTOM = 9; + WP_SMALLFRAMELEFT = 10; + WP_SMALLFRAMERIGHT = 11; + WP_SMALLFRAMEBOTTOM = 12; + WP_SYSBUTTON = 13; + WP_MDISYSBUTTON = 14; + WP_MINBUTTON = 15; + WP_MDIMINBUTTON = 16; + WP_MAXBUTTON = 17; + WP_CLOSEBUTTON = 18; + WP_SMALLCLOSEBUTTON = 19; + WP_MDICLOSEBUTTON = 20; + WP_RESTOREBUTTON = 21; + WP_MDIRESTOREBUTTON = 22; + WP_HELPBUTTON = 23; + WP_MDIHELPBUTTON = 24; + WP_HORZSCROLL = 25; + WP_HORZTHUMB = 26; + WP_VERTSCROLL = 27; + WP_VERTTHUMB = 28; + WP_DIALOG = 29; + WP_CAPTIONSIZINGTEMPLATE = 30; + WP_SMALLCAPTIONSIZINGTEMPLATE = 31; + WP_FRAMELEFTSIZINGTEMPLATE = 32; + WP_SMALLFRAMELEFTSIZINGTEMPLATE = 33; + WP_FRAMERIGHTSIZINGTEMPLATE = 34; + WP_SMALLFRAMERIGHTSIZINGTEMPLATE = 35; + WP_FRAMEBOTTOMSIZINGTEMPLATE = 36; + WP_SMALLFRAMEBOTTOMSIZINGTEMPLATE = 37; + +type + FRAMESTATES = Cardinal; + +const + FRAMEStateFiller0 = 0; + FS_ACTIVE = 1; + FS_INACTIVE = 2; + +type + CAPTIONSTATES = Cardinal; + +const + CAPTIONStateFiller0 = 0; + CS_ACTIVE = 1; + CS_INACTIVE = 2; + CS_DISABLED = 3; + +type + MAXCAPTIONSTATES = Cardinal; + +const + MAXCAPTIONStateFiller0 = 0; + MXCS_ACTIVE = 1; + MXCS_INACTIVE = 2; + MXCS_DISABLED = 3; + +type + MINCAPTIONSTATES = Cardinal; + +const + MINCAPTIONStateFiller0 = 0; + MNCS_ACTIVE = 1; + MNCS_INACTIVE = 2; + MNCS_DISABLED = 3; + +type + HORZSCROLLSTATES = Cardinal; + +const + HORZSCROLLStateFiller0 = 0; + HSS_NORMAL = 1; + HSS_HOT = 2; + HSS_PUSHED = 3; + HSS_DISABLED = 4; + +type + HORZTHUMBSTATES = Cardinal; + +const + HORZTHUMBStateFiller0 = 0; + HTS_NORMAL = 1; + HTS_HOT = 2; + HTS_PUSHED = 3; + HTS_DISABLED = 4; + +type + VERTSCROLLSTATES = Cardinal; + +const + VERTSCROLLStateFiller0 = 0; + VSS_NORMAL = 1; + VSS_HOT = 2; + VSS_PUSHED = 3; + VSS_DISABLED = 4; + +type + VERTTHUMBSTATES = Cardinal; + +const + VERTTHUMBStateFiller0 = 0; + VTS_NORMAL = 1; + VTS_HOT = 2; + VTS_PUSHED = 3; + VTS_DISABLED = 4; + +type + SYSBUTTONSTATES = Cardinal; + +const + SYSBUTTONStateFiller0 = 0; + SBS_NORMAL = 1; + SBS_HOT = 2; + SBS_PUSHED = 3; + SBS_DISABLED = 4; + +type + MINBUTTONSTATES = Cardinal; + +const + MINBUTTONStateFiller0 = 0; + MINBS_NORMAL = 1; + MINBS_HOT = 2; + MINBS_PUSHED = 3; + MINBS_DISABLED = 4; + +type + MAXBUTTONSTATES = Cardinal; + +const + MAXBUTTONStateFiller0 = 0; + MAXBS_NORMAL = 1; + MAXBS_HOT = 2; + MAXBS_PUSHED = 3; + MAXBS_DISABLED = 4; + +type + RESTOREBUTTONSTATES = Cardinal; + +const + RESTOREBUTTONStateFiller0 = 0; + RBS_NORMAL = 1; + RBS_HOT = 2; + RBS_PUSHED = 3; + RBS_DISABLED = 4; + +type + HELPBUTTONSTATES = Cardinal; + +const + HELPBUTTONStateFiller0 = 0; + HBS_NORMAL = 1; + HBS_HOT = 2; + HBS_PUSHED = 3; + HBS_DISABLED = 4; + +type + CLOSEBUTTONSTATES = Cardinal; + +const + CLOSEBUTTONStateFiller0 = 0; + CBS_NORMAL = 1; + CBS_HOT = 2; + CBS_PUSHED = 3; + CBS_DISABLED = 4; + +//---------------------------------------------------------------------------------------------------------------------- +// "Button" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + BUTTONPARTS = Cardinal; + +const + BUTTONPartFiller0 = 0; + BP_PUSHBUTTON = 1; + BP_RADIOBUTTON = 2; + BP_CHECKBOX = 3; + BP_GROUPBOX = 4; + BP_USERBUTTON = 5; + +type + PUSHBUTTONSTATES = Cardinal; + +const + PUSHBUTTONStateFiller0 = 0; + PBS_NORMAL = 1; + PBS_HOT = 2; + PBS_PRESSED = 3; + PBS_DISABLED = 4; + PBS_DEFAULTED = 5; + +type + RADIOBUTTONSTATES = Cardinal; + +const + RADIOBUTTONStateFiller0 = 0; + RBS_UNCHECKEDNORMAL = 1; + RBS_UNCHECKEDHOT = 2; + RBS_UNCHECKEDPRESSED = 3; + RBS_UNCHECKEDDISABLED = 4; + RBS_CHECKEDNORMAL = 5; + RBS_CHECKEDHOT = 6; + RBS_CHECKEDPRESSED = 7; + RBS_CHECKEDDISABLED = 8; + +type + CHECKBOXSTATES = Cardinal; + +const + CHECKBOXStateFiller0 = 0; + CBS_UNCHECKEDNORMAL = 1; + CBS_UNCHECKEDHOT = 2; + CBS_UNCHECKEDPRESSED = 3; + CBS_UNCHECKEDDISABLED = 4; + CBS_CHECKEDNORMAL = 5; + CBS_CHECKEDHOT = 6; + CBS_CHECKEDPRESSED = 7; + CBS_CHECKEDDISABLED = 8; + CBS_MIXEDNORMAL = 9; + CBS_MIXEDHOT = 10; + CBS_MIXEDPRESSED = 11; + CBS_MIXEDDISABLED = 12; + +type + GROUPBOXSTATES = Cardinal; + +const + GROUPBOXStateFiller0 = 0; + GBS_NORMAL = 1; + GBS_DISABLED = 2; + +//---------------------------------------------------------------------------------------------------------------------- +// "Rebar" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + REBARPARTS = Cardinal; + +const + REBARPartFiller0 = 0; + RP_GRIPPER = 1; + RP_GRIPPERVERT = 2; + RP_BAND = 3; + RP_CHEVRON = 4; + RP_CHEVRONVERT = 5; + +type + CHEVRONSTATES = Cardinal; + +const + CHEVRONStateFiller0 = 0; + CHEVS_NORMAL = 1; + CHEVS_HOT = 2; + CHEVS_PRESSED = 3; + +//---------------------------------------------------------------------------------------------------------------------- +// "Toolbar" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + TOOLBARPARTS = Cardinal; + +const + TOOLBARPartFiller0 = 0; + TP_BUTTON = 1; + TP_DROPDOWNBUTTON = 2; + TP_SPLITBUTTON = 3; + TP_SPLITBUTTONDROPDOWN = 4; + TP_SEPARATOR = 5; + TP_SEPARATORVERT = 6; + +type + TOOLBARSTATES = Cardinal; + +const + TOOLBARStateFiller0 = 0; + TS_NORMAL = 1; + TS_HOT = 2; + TS_PRESSED = 3; + TS_DISABLED = 4; + TS_CHECKED = 5; + TS_HOTCHECKED = 6; + +//---------------------------------------------------------------------------------------------------------------------- +// "Status" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + STATUSPARTS = Cardinal; + +const + STATUSPartFiller0 = 0; + SP_PANE = 1; + SP_GRIPPERPANE = 2; + SP_GRIPPER = 3; + +//---------------------------------------------------------------------------------------------------------------------- +// "Menu" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + MENUPARTS = Cardinal; + +const + MENUPartFiller0 = 0; + MP_MENUITEM = 1; + MP_MENUDROPDOWN = 2; + MP_MENUBARITEM = 3; + MP_MENUBARDROPDOWN = 4; + MP_CHEVRON = 5; + MP_SEPARATOR = 6; + +type + MENUSTATES = Cardinal; + +const + MENUStateFiller0 = 0; + MS_NORMAL = 1; + MS_SELECTED = 2; + MS_DEMOTED = 3; + +//---------------------------------------------------------------------------------------------------------------------- +// "ListView" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + LISTVIEWPARTS = Cardinal; + +const + LISTVIEWPartFiller0 = 0; + LVP_LISTITEM = 1; + LVP_LISTGROUP = 2; + LVP_LISTDETAIL = 3; + LVP_LISTSORTEDDETAIL = 4; + LVP_EMPTYTEXT = 5; + +type + LISTITEMSTATES = Cardinal; + +const + LISTITEMStateFiller0 = 0; + LIS_NORMAL = 1; + LIS_HOT = 2; + LIS_SELECTED = 3; + LIS_DISABLED = 4; + LIS_SELECTEDNOTFOCUS = 5; + +//---------------------------------------------------------------------------------------------------------------------- +// "Header" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + HEADERPARTS = Cardinal; + +const + HEADERPartFiller0 = 0; + HP_HEADERITEM = 1; + HP_HEADERITEMLEFT = 2; + HP_HEADERITEMRIGHT = 3; + HP_HEADERSORTARROW = 4; + +type + HEADERITEMSTATES = Cardinal; + +const + HEADERITEMStateFiller0 = 0; + HIS_NORMAL = 1; + HIS_HOT = 2; + HIS_PRESSED = 3; + +type + HEADERITEMLEFTSTATES = Cardinal; + +const + HEADERITEMLEFTStateFiller0 = 0; + HILS_NORMAL = 1; + HILS_HOT = 2; + HILS_PRESSED = 3; + +type + HEADERITEMRIGHTSTATES = Cardinal; + +const + HEADERITEMRIGHTStateFiller0 = 0; + HIRS_NORMAL = 1; + HIRS_HOT = 2; + HIRS_PRESSED = 3; + +type + HEADERSORTARROWSTATES = Cardinal; + +const + HEADERSORTARROWStateFiller0 = 0; + HSAS_SORTEDUP = 1; + HSAS_SORTEDDOWN = 2; + +//---------------------------------------------------------------------------------------------------------------------- +// "Progress" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + PROGRESSPARTS = Cardinal; + +const + PROGRESSPartFiller0 = 0; + PP_BAR = 1; + PP_BARVERT = 2; + PP_CHUNK = 3; + PP_CHUNKVERT = 4; + +//---------------------------------------------------------------------------------------------------------------------- +// "Tab" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + TABPARTS = Cardinal; + +const + TABPartFiller0 = 0; + TABP_TABITEM = 1; + TABP_TABITEMLEFTEDGE = 2; + TABP_TABITEMRIGHTEDGE = 3; + TABP_TABITEMBOTHEDGE = 4; + TABP_TOPTABITEM = 5; + TABP_TOPTABITEMLEFTEDGE = 6; + TABP_TOPTABITEMRIGHTEDGE = 7; + TABP_TOPTABITEMBOTHEDGE = 8; + TABP_PANE = 9; + TABP_BODY = 10; + +type + TABITEMSTATES = Cardinal; + +const + TABITEMStateFiller0 = 0; + TIS_NORMAL = 1; + TIS_HOT = 2; + TIS_SELECTED = 3; + TIS_DISABLED = 4; + TIS_FOCUSED = 5; + +type + TABITEMLEFTEDGESTATES = Cardinal; + +const + TABITEMLEFTEDGEStateFiller0 = 0; + TILES_NORMAL = 1; + TILES_HOT = 2; + TILES_SELECTED = 3; + TILES_DISABLED = 4; + TILES_FOCUSED = 5; + +type + TABITEMRIGHTEDGESTATES = Cardinal; + +const + TABITEMRIGHTEDGEStateFiller0 = 0; + TIRES_NORMAL = 1; + TIRES_HOT = 2; + TIRES_SELECTED = 3; + TIRES_DISABLED = 4; + TIRES_FOCUSED = 5; + +type + TABITEMBOTHEDGESSTATES = Cardinal; + +const + TABITEMBOTHEDGESStateFiller0 = 0; + TIBES_NORMAL = 1; + TIBES_HOT = 2; + TIBES_SELECTED = 3; + TIBES_DISABLED = 4; + TIBES_FOCUSED = 5; + +type + TOPTABITEMSTATES = Cardinal; + +const + TOPTABITEMStateFiller0 = 0; + TTIS_NORMAL = 1; + TTIS_HOT = 2; + TTIS_SELECTED = 3; + TTIS_DISABLED = 4; + TTIS_FOCUSED = 5; + +type + TOPTABITEMLEFTEDGESTATES = Cardinal; + +const + TOPTABITEMLEFTEDGEStateFiller0 = 0; + TTILES_NORMAL = 1; + TTILES_HOT = 2; + TTILES_SELECTED = 3; + TTILES_DISABLED = 4; + TTILES_FOCUSED = 5; + +type + TOPTABITEMRIGHTEDGESTATES = Cardinal; + +const + TOPTABITEMRIGHTEDGEStateFiller0 = 0; + TTIRES_NORMAL = 1; + TTIRES_HOT = 2; + TTIRES_SELECTED = 3; + TTIRES_DISABLED = 4; + TTIRES_FOCUSED = 5; + +type + TOPTABITEMBOTHEDGESSTATES = Cardinal; + +const + TOPTABITEMBOTHEDGESStateFiller0 = 0; + TTIBES_NORMAL = 1; + TTIBES_HOT = 2; + TTIBES_SELECTED = 3; + TTIBES_DISABLED = 4; + TTIBES_FOCUSED = 5; + +//---------------------------------------------------------------------------------------------------------------------- +// "Trackbar" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + TRACKBARPARTS = Cardinal; + +const + TRACKBARPartFiller0 = 0; + TKP_TRACK = 1; + TKP_TRACKVERT = 2; + TKP_THUMB = 3; + TKP_THUMBBOTTOM = 4; + TKP_THUMBTOP = 5; + TKP_THUMBVERT = 6; + TKP_THUMBLEFT = 7; + TKP_THUMBRIGHT = 8; + TKP_TICS = 9; + TKP_TICSVERT = 10; + +type + TRACKBARSTATES = Cardinal; + +const + TRACKBARStateFiller0 = 0; + TKS_NORMAL = 1; + +type + TRACKSTATES = Cardinal; + +const + TRACKStateFiller0 = 0; + TRS_NORMAL = 1; + +type + TRACKVERTSTATES = Cardinal; + +const + TRACKVERTStateFiller0 = 0; + TRVS_NORMAL = 1; + +type + THUMBSTATES = Cardinal; + +const + THUMBStateFiller0 = 0; + TUS_NORMAL = 1; + TUS_HOT = 2; + TUS_PRESSED = 3; + TUS_FOCUSED = 4; + TUS_DISABLED = 5; + +type + THUMBBOTTOMSTATES = Cardinal; + +const + THUMBBOTTOMStateFiller0 = 0; + TUBS_NORMAL = 1; + TUBS_HOT = 2; + TUBS_PRESSED = 3; + TUBS_FOCUSED = 4; + TUBS_DISABLED = 5; + +type + THUMBTOPSTATES = Cardinal; + +const + THUMBTOPStateFiller0 = 0; + TUTS_NORMAL = 1; + TUTS_HOT = 2; + TUTS_PRESSED = 3; + TUTS_FOCUSED = 4; + TUTS_DISABLED = 5; + +type + THUMBVERTSTATES = Cardinal; + +const + THUMBVERTStateFiller0 = 0; + TUVS_NORMAL = 1; + TUVS_HOT = 2; + TUVS_PRESSED = 3; + TUVS_FOCUSED = 4; + TUVS_DISABLED = 5; + +type + THUMBLEFTSTATES = Cardinal; + +const + THUMBLEFTStateFiller0 = 0; + TUVLS_NORMAL = 1; + TUVLS_HOT = 2; + TUVLS_PRESSED = 3; + TUVLS_FOCUSED = 4; + TUVLS_DISABLED = 5; + +type + THUMBRIGHTSTATES = Cardinal; + +const + THUMBRIGHTStateFiller0 = 0; + TUVRS_NORMAL = 1; + TUVRS_HOT = 2; + TUVRS_PRESSED = 3; + TUVRS_FOCUSED = 4; + TUVRS_DISABLED = 5; + +type + TICSSTATES = Cardinal; + +const + TICSStateFiller0 = 0; + TSS_NORMAL = 1; + +type + TICSVERTSTATES = Cardinal; + +const + TICSVERTStateFiller0 = 0; + TSVS_NORMAL = 1; + +//---------------------------------------------------------------------------------------------------------------------- +// "Tooltips" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + TOOLTIPPARTS = Cardinal; + +const + TOOLTIPPartFiller0 = 0; + TTP_STANDARD = 1; + TTP_STANDARDTITLE = 2; + TTP_BALLOON = 3; + TTP_BALLOONTITLE = 4; + TTP_CLOSE = 5; + +type + CLOSESTATES = Cardinal; + +const + CLOSEStateFiller0 = 0; + TTCS_NORMAL = 1; + TTCS_HOT = 2; + TTCS_PRESSED = 3; + +type + STANDARDSTATES = Cardinal; + +const + STANDARDStateFiller0 = 0; + TTSS_NORMAL = 1; + TTSS_LINK = 2; + +type + BALLOONSTATES = Cardinal; + +const + BALLOONStateFiller0 = 0; + TTBS_NORMAL = 1; + TTBS_LINK = 2; + +//---------------------------------------------------------------------------------------------------------------------- +// "TreeView" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + TREEVIEWPARTS = Cardinal; + +const + TREEVIEWPartFiller0 = 0; + TVP_TREEITEM = 1; + TVP_GLYPH = 2; + TVP_BRANCH = 3; + +type + TREEITEMSTATES = Cardinal; + +const + TREEITEMStateFiller0 = 0; + TREIS_NORMAL = 1; + TREIS_HOT = 2; + TREIS_SELECTED = 3; + TREIS_DISABLED = 4; + TREIS_SELECTEDNOTFOCUS = 5; + +type + GLYPHSTATES = Cardinal; + +const + GLYPHStateFiller0 = 0; + GLPS_CLOSED = 1; + GLPS_OPENED = 2; + +//---------------------------------------------------------------------------------------------------------------------- +// "Spin" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + SPINPARTS = Cardinal; + +const + SPINPartFiller0 = 0; + SPNP_UP = 1; + SPNP_DOWN = 2; + SPNP_UPHORZ = 3; + SPNP_DOWNHORZ = 4; + +type + UPSTATES = Cardinal; + +const + UPStateFiller0 = 0; + UPS_NORMAL = 1; + UPS_HOT = 2; + UPS_PRESSED = 3; + UPS_DISABLED = 4; + +type + DOWNSTATES = Cardinal; + +const + DOWNStateFiller0 = 0; + DNS_NORMAL = 1; + DNS_HOT = 2; + DNS_PRESSED = 3; + DNS_DISABLED = 4; + +type + UPHORZSTATES = Cardinal; + +const + UPHORZStateFiller0 = 0; + UPHZS_NORMAL = 1; + UPHZS_HOT = 2; + UPHZS_PRESSED = 3; + UPHZS_DISABLED = 4; + +type + DOWNHORZSTATES = Cardinal; + +const + DOWNHORZStateFiller0 = 0; + DNHZS_NORMAL = 1; + DNHZS_HOT = 2; + DNHZS_PRESSED = 3; + DNHZS_DISABLED = 4; + +//---------------------------------------------------------------------------------------------------------------------- +// "Page" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + PAGEPARTS = Cardinal; + +const + PAGEPartFiller0 = 0; + PGRP_UP = 1; + PGRP_DOWN = 2; + PGRP_UPHORZ = 3; + PGRP_DOWNHORZ = 4; + +//--- Pager uses same states as Spin --- + +//---------------------------------------------------------------------------------------------------------------------- +// "Scrollbar" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + SCROLLBARPARTS = Cardinal; + +const + SCROLLBARPartFiller0 = 0; + SBP_ARROWBTN = 1; + SBP_THUMBBTNHORZ = 2; + SBP_THUMBBTNVERT = 3; + SBP_LOWERTRACKHORZ = 4; + SBP_UPPERTRACKHORZ = 5; + SBP_LOWERTRACKVERT = 6; + SBP_UPPERTRACKVERT = 7; + SBP_GRIPPERHORZ = 8; + SBP_GRIPPERVERT = 9; + SBP_SIZEBOX = 10; + +type + ARROWBTNSTATES = Cardinal; + +const + ARROWBTNStateFiller0 = 0; + ABS_UPNORMAL = 1; + ABS_UPHOT = 2; + ABS_UPPRESSED = 3; + ABS_UPDISABLED = 4; + ABS_DOWNNORMAL = 5; + ABS_DOWNHOT = 6; + ABS_DOWNPRESSED = 7; + ABS_DOWNDISABLED = 8; + ABS_LEFTNORMAL = 9; + ABS_LEFTHOT = 10; + ABS_LEFTPRESSED = 11; + ABS_LEFTDISABLED = 12; + ABS_RIGHTNORMAL = 13; + ABS_RIGHTHOT = 14; + ABS_RIGHTPRESSED = 15; + ABS_RIGHTDISABLED = 16; + +type + SCROLLBARSTATES = Cardinal; + +const + SCROLLBARStateFiller0 = 0; + SCRBS_NORMAL = 1; + SCRBS_HOT = 2; + SCRBS_PRESSED = 3; + SCRBS_DISABLED = 4; + +type + SIZEBOXSTATES = Cardinal; + +const + SIZEBOXStateFiller0 = 0; + SZB_RIGHTALIGN = 1; + SZB_LEFTALIGN = 2; + +//---------------------------------------------------------------------------------------------------------------------- +// "Edit" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + EDITPARTS = Cardinal; + +const + EDITPartFiller0 = 0; + EP_EDITTEXT = 1; + EP_CARET = 2; + +type + EDITTEXTSTATES = Cardinal; + +const + EDITTEXTStateFiller0 = 0; + ETS_NORMAL = 1; + ETS_HOT = 2; + ETS_SELECTED = 3; + ETS_DISABLED = 4; + ETS_FOCUSED = 5; + ETS_READONLY = 6; + ETS_ASSIST = 7; + +//---------------------------------------------------------------------------------------------------------------------- +// "ComboBox" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + COMBOBOXPARTS = Cardinal; + +const + COMBOBOXPartFiller0 = 0; + CP_DROPDOWNBUTTON = 1; + +type + COMBOBOXSTATES = Cardinal; + +const + COMBOBOXStateFiller0 = 0; + CBXS_NORMAL = 1; + CBXS_HOT = 2; + CBXS_PRESSED = 3; + CBXS_DISABLED = 4; + +//---------------------------------------------------------------------------------------------------------------------- +// "Taskbar Clock" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + CLOCKPARTS = Cardinal; + +const + CLOCKPartFiller0 = 0; + CLP_TIME = 1; + +type + CLOCKSTATES = Cardinal; + +const + CLOCKStateFiller0 = 0; + CLS_NORMAL = 1; + +//---------------------------------------------------------------------------------------------------------------------- +// "Tray Notify" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + TRAYNOTIFYPARTS = Cardinal; + +const + TRAYNOTIFYPartFiller0 = 0; + TNP_BACKGROUND = 1; + TNP_ANIMBACKGROUND = 2; + +//---------------------------------------------------------------------------------------------------------------------- +// "TaskBar" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + TASKBARPARTS = Cardinal; + +const + TASKBARPartFiller0 = 0; + TBP_BACKGROUNDBOTTOM = 1; + TBP_BACKGROUNDRIGHT = 2; + TBP_BACKGROUNDTOP = 3; + TBP_BACKGROUNDLEFT = 4; + TBP_SIZINGBARBOTTOM = 5; + TBP_SIZINGBARRIGHT = 6; + TBP_SIZINGBARTOP = 7; + TBP_SIZINGBARLEFT = 8; + +//---------------------------------------------------------------------------------------------------------------------- +// "TaskBand" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + TASKBANDPARTS = Cardinal; + +const + TASKBANDPartFiller0 = 0; + TDP_GROUPCOUNT = 1; + TDP_FLASHBUTTON = 2; + TDP_FLASHBUTTONGROUPMENU = 3; + +//---------------------------------------------------------------------------------------------------------------------- +// "StartPanel" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + STARTPANELPARTS = Cardinal; + +const + STARTPANELPartFiller0 = 0; + SPP_USERPANE = 1; + SPP_MOREPROGRAMS = 2; + SPP_MOREPROGRAMSARROW = 3; + SPP_PROGLIST = 4; + SPP_PROGLISTSEPARATOR = 5; + SPP_PLACESLIST = 6; + SPP_PLACESLISTSEPARATOR = 7; + SPP_LOGOFF = 8; + SPP_LOGOFFBUTTONS = 9; + SPP_USERPICTURE = 10; + SPP_PREVIEW = 11; + +type + MOREPROGRAMSARROWSTATES = Cardinal; + +const + MOREPROGRAMSARROWStateFiller0 = 0; + SPS_NORMAL = 1; + SPS_HOT = 2; + SPS_PRESSED = 3; + +type + LOGOFFBUTTONSSTATES = Cardinal; + +const + LOGOFFBUTTONSStateFiller0 = 0; + SPLS_NORMAL = 1; + SPLS_HOT = 2; + SPLS_PRESSED = 3; + +//---------------------------------------------------------------------------------------------------------------------- +// "ExplorerBar" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + EXPLORERBARPARTS = Cardinal; + +const + EXPLORERBARPartFiller0 = 0; + EBP_HEADERBACKGROUND = 1; + EBP_HEADERCLOSE = 2; + EBP_HEADERPIN = 3; + EBP_IEBARMENU = 4; + EBP_NORMALGROUPBACKGROUND = 5; + EBP_NORMALGROUPCOLLAPSE = 6; + EBP_NORMALGROUPEXPAND = 7; + EBP_NORMALGROUPHEAD = 8; + EBP_SPECIALGROUPBACKGROUND = 9; + EBP_SPECIALGROUPCOLLAPSE = 10; + EBP_SPECIALGROUPEXPAND = 11; + EBP_SPECIALGROUPHEAD = 12; + +type + HEADERCLOSESTATES = Cardinal; + +const + HEADERCLOSEStateFiller0 = 0; + EBHC_NORMAL = 1; + EBHC_HOT = 2; + EBHC_PRESSED = 3; + +type + HEADERPINSTATES = Cardinal; + +const + HEADERPINStateFiller0 = 0; + EBHP_NORMAL = 1; + EBHP_HOT = 2; + EBHP_PRESSED = 3; + EBHP_SELECTEDNORMAL = 4; + EBHP_SELECTEDHOT = 5; + EBHP_SELECTEDPRESSED = 6; + +type + IEBARMENUSTATES = Cardinal; + +const + IEBARMENUStateFiller0 = 0; + EBM_NORMAL = 1; + EBM_HOT = 2; + EBM_PRESSED = 3; + +type + NORMALGROUPCOLLAPSESTATES = Cardinal; + +const + NORMALGROUPCOLLAPSEStateFiller0 = 0; + EBNGC_NORMAL = 1; + EBNGC_HOT = 2; + EBNGC_PRESSED = 3; + +type + NORMALGROUPEXPANDSTATES = Cardinal; + +const + NORMALGROUPEXPANDStateFiller0 = 0; + EBNGE_NORMAL = 1; + EBNGE_HOT = 2; + EBNGE_PRESSED = 3; + +type + SPECIALGROUPCOLLAPSESTATES = Cardinal; + +const + SPECIALGROUPCOLLAPSEStateFiller0 = 0; + EBSGC_NORMAL = 1; + EBSGC_HOT = 2; + EBSGC_PRESSED = 3; + +type + SPECIALGROUPEXPANDSTATES = Cardinal; + +const + SPECIALGROUPEXPANDStateFiller0 = 0; + EBSGE_NORMAL = 1; + EBSGE_HOT = 2; + EBSGE_PRESSED = 3; + +//---------------------------------------------------------------------------------------------------------------------- +// "TaskBand" Parts & States +//---------------------------------------------------------------------------------------------------------------------- + +type + MENUBANDPARTS = Cardinal; + +const + MENUBANDPartFiller0 = 0; + MDP_NEWAPPBUTTON = 1; + MDP_SEPERATOR = 2; + +type + MENUBANDSTATES = Cardinal; + +const + MENUBANDStateFiller0 = 0; + MDS_NORMAL = 1; + MDS_HOT = 2; + MDS_PRESSED = 3; + MDS_DISABLED = 4; + MDS_CHECKED = 5; + MDS_HOTCHECKED = 6; + +//---------------------------------------------------------------------------------------------------------------------- + +implementation + +//---------------------------------------------------------------------------------------------------------------------- + +end. diff --git a/Components/UniPs b/Components/UniPs new file mode 160000 index 00000000..ecdc4951 --- /dev/null +++ b/Components/UniPs @@ -0,0 +1 @@ +Subproject commit ecdc495151507f14ce57fed0aba260387ccf1d6d diff --git a/Examples/64Bit.iss b/Examples/64Bit.iss new file mode 100644 index 00000000..f6a6a412 --- /dev/null +++ b/Examples/64Bit.iss @@ -0,0 +1,34 @@ +; -- 64Bit.iss -- +; Demonstrates installation of a program built for the x64 (a.k.a. AMD64) +; architecture. +; To successfully run this installation and the program it installs, +; you must have a "x64" edition of Windows or Windows 11 on Arm. + +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! + +[Setup] +AppName=My Program +AppVersion=1.5 +WizardStyle=modern +DefaultDirName={autopf}\My Program +DefaultGroupName=My Program +UninstallDisplayIcon={app}\MyProg.exe +Compression=lzma2 +SolidCompression=yes +OutputDir=userdocs:Inno Setup Examples Output +; "ArchitecturesAllowed=x64compatible" specifies that Setup cannot run +; on anything but x64 and Windows 11 on Arm. +ArchitecturesAllowed=x64compatible +; "ArchitecturesInstallIn64BitMode=x64compatible" requests that the +; install be done in "64-bit mode" on x64 or Windows 11 on Arm, +; meaning it should use the native 64-bit Program Files directory and +; the 64-bit view of the registry. +ArchitecturesInstallIn64BitMode=x64compatible + +[Files] +Source: "MyProg-x64.exe"; DestDir: "{app}"; DestName: "MyProg.exe" +Source: "MyProg.chm"; DestDir: "{app}" +Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme + +[Icons] +Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" diff --git a/Examples/64BitThreeArch.iss b/Examples/64BitThreeArch.iss new file mode 100644 index 00000000..d51afcb2 --- /dev/null +++ b/Examples/64BitThreeArch.iss @@ -0,0 +1,64 @@ +; -- 64BitThreeArch.iss -- +; Demonstrates how to install a program built for three different +; architectures (x86, x64, Arm64) using a single installer. + +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! + +[Setup] +AppName=My Program +AppVersion=1.5 +WizardStyle=modern +DefaultDirName={autopf}\My Program +DefaultGroupName=My Program +UninstallDisplayIcon={app}\MyProg.exe +Compression=lzma2 +SolidCompression=yes +OutputDir=userdocs:Inno Setup Examples Output +; "ArchitecturesInstallIn64BitMode=x64compatible or arm64" instructs +; Setup to use "64-bit install mode" on x64-compatible systems and +; Arm64 systems, meaning Setup should use the native 64-bit Program +; Files directory and the 64-bit view of the registry. On all other +; OS architectures (e.g., 32-bit x86), Setup will use "32-bit +; install mode". +ArchitecturesInstallIn64BitMode=x64compatible or arm64 + +[Files] +; In order of preference, we want to install: +; - Arm64 binaries on Arm64 systems +; - else, x64 binaries on x64-compatible systems +; - else, x86 binaries + +; Place all Arm64-specific files here, using 'Check: PreferArm64Files' on each entry. +Source: "MyProg-Arm64.exe"; DestDir: "{app}"; DestName: "MyProg.exe"; Check: PreferArm64Files + +; Place all x64-specific files here, using 'Check: PreferX64Files' on each entry. +; Only the first entry should include the 'solidbreak' flag. +Source: "MyProg-x64.exe"; DestDir: "{app}"; DestName: "MyProg.exe"; Check: PreferX64Files; Flags: solidbreak + +; Place all x86-specific files here, using 'Check: PreferX86Files' on each entry. +; Only the first entry should include the 'solidbreak' flag. +Source: "MyProg.exe"; DestDir: "{app}"; Check: PreferX86Files; Flags: solidbreak + +; Place all common files here. +; Only the first entry should include the 'solidbreak' flag. +Source: "MyProg.chm"; DestDir: "{app}"; Flags: solidbreak +Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme + +[Icons] +Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" + +[Code] +function PreferArm64Files: Boolean; +begin + Result := IsArm64; +end; + +function PreferX64Files: Boolean; +begin + Result := not PreferArm64Files and IsX64Compatible; +end; + +function PreferX86Files: Boolean; +begin + Result := not PreferArm64Files and not PreferX64Files; +end; diff --git a/Examples/64BitTwoArch.iss b/Examples/64BitTwoArch.iss new file mode 100644 index 00000000..7e7cada1 --- /dev/null +++ b/Examples/64BitTwoArch.iss @@ -0,0 +1,41 @@ +; -- 64BitTwoArch.iss -- +; Demonstrates how to install a program built for two different +; architectures (x86 and x64) using a single installer: on a "x86" +; edition of Windows the x86 version of the program will be +; installed but on a "x64" edition of Windows or Windows 11 on Arm +; the x64 version will be installed. + +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! + +[Setup] +AppName=My Program +AppVersion=1.5 +DefaultDirName={autopf}\My Program +DefaultGroupName=My Program +UninstallDisplayIcon={app}\MyProg.exe +WizardStyle=modern +Compression=lzma2 +SolidCompression=yes +OutputDir=userdocs:Inno Setup Examples Output +; "ArchitecturesInstallIn64BitMode=x64compatible" requests that the +; install be done in "64-bit mode" on x64 or Windows 11 on Arm, +; meaning it should use the native 64-bit Program Files directory and +; the 64-bit view of the registry. +; On all other architectures it will install in "32-bit mode". +ArchitecturesInstallIn64BitMode=x64compatible +; Note: We don't set ArchitecturesAllowed because we want this +; installation to run on all architectures. + +[Files] +; Install MyProg-x64.exe if running in 64-bit mode (see above), and +; MyProg.exe otherwise. +; Place all x64 files here +Source: "MyProg-x64.exe"; DestDir: "{app}"; DestName: "MyProg.exe"; Check: Is64BitInstallMode +; Place all x86 files here, first one should be marked 'solidbreak' +Source: "MyProg.exe"; DestDir: "{app}"; Check: not Is64BitInstallMode; Flags: solidbreak +; Place all common files here, first one should be marked 'solidbreak' +Source: "MyProg.chm"; DestDir: "{app}"; Flags: solidbreak +Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme + +[Icons] +Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" diff --git a/Examples/AllPagesExample.iss b/Examples/AllPagesExample.iss new file mode 100644 index 00000000..37775e73 --- /dev/null +++ b/Examples/AllPagesExample.iss @@ -0,0 +1,130 @@ +; -- AllPagesExample.iss -- +; Same as Example1.iss, but shows all the wizard pages Setup may potentially display + +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! + +[Setup] +AppName=My Program +AppVersion=1.5 +WizardStyle=modern +DefaultDirName={autopf}\My Program +DefaultGroupName=My Program +UninstallDisplayIcon={app}\MyProg.exe +Compression=lzma2 +SolidCompression=yes +OutputDir=userdocs:Inno Setup Examples Output + +DisableWelcomePage=no +LicenseFile=license.txt +#define Password 'password' +Password={#Password} +InfoBeforeFile=readme.txt +UserInfoPage=yes +PrivilegesRequired=lowest +DisableDirPage=no +DisableProgramGroupPage=no +InfoAfterFile=readme.txt + +[Files] +Source: "MyProg.exe"; DestDir: "{app}" +Source: "MyProg.chm"; DestDir: "{app}" +Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme + +[Icons] +Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" + +[Components] +Name: "component"; Description: "Component"; + +[Tasks] +Name: "task"; Description: "Task"; + +[Code] +var + OutputProgressWizardPage: TOutputProgressWizardPage; + OutputMarqueeProgressWizardPage: TOutputMarqueeProgressWizardPage; + OutputProgressWizardPagesAfterID: Integer; + +procedure InitializeWizard; +var + InputQueryWizardPage: TInputQueryWizardPage; + InputOptionWizardPage: TInputOptionWizardPage; + InputDirWizardPage: TInputDirWizardPage; + InputFileWizardPage: TInputFileWizardPage; + OutputMsgWizardPage: TOutputMsgWizardPage; + OutputMsgMemoWizardPage: TOutputMsgMemoWizardPage; + AfterID: Integer; +begin + WizardForm.LicenseAcceptedRadio.Checked := True; + WizardForm.PasswordEdit.Text := '{#Password}'; + WizardForm.UserInfoNameEdit.Text := 'Username'; + + AfterID := wpSelectTasks; + + AfterID := CreateCustomPage(AfterID, 'CreateCustomPage', 'ADescription').ID; + + InputQueryWizardPage := CreateInputQueryPage(AfterID, 'CreateInputQueryPage', 'ADescription', 'ASubCaption'); + InputQueryWizardPage.Add('&APrompt:', False); + AfterID := InputQueryWizardPage.ID; + + InputOptionWizardPage := CreateInputOptionPage(AfterID, 'CreateInputOptionPage', 'ADescription', 'ASubCaption', False, False); + InputOptionWizardPage.Add('&AOption'); + AfterID := InputOptionWizardPage.ID; + + InputDirWizardPage := CreateInputDirPage(AfterID, 'CreateInputDirPage', 'ADescription', 'ASubCaption', False, 'ANewFolderName'); + InputDirWizardPage.Add('&APrompt:'); + InputDirWizardPage.Values[0] := 'C:\'; + AfterID := InputDirWizardPage.ID; + + InputFileWizardPage := CreateInputFilePage(AfterID, 'CreateInputFilePage', 'ADescription', 'ASubCaption'); + InputFileWizardPage.Add('&APrompt:', 'Executable files|*.exe|All files|*.*', '.exe'); + AfterID := InputFileWizardPage.ID; + + OutputMsgWizardPage := CreateOutputMsgPage(AfterID, 'CreateOutputMsgPage', 'ADescription', 'AMsg'); + AfterID := OutputMsgWizardPage.ID; + + OutputMsgMemoWizardPage := CreateOutputMsgMemoPage(AfterID, 'CreateOutputMsgMemoPage', 'ADescription', 'ASubCaption', 'AMsg'); + AfterID := OutputMsgMemoWizardPage.ID; + + OutputProgressWizardPage := CreateOutputProgressPage('CreateOutputProgressPage', 'ADescription'); + OutputMarqueeProgressWizardPage := CreateOutputMarqueeProgressPage('CreateOutputMarqueeProgressPage', 'ADescription'); + OutputProgressWizardPagesAfterID := AfterID; + + { See CodeDownloadFiles.iss for a CreateDownloadPage example } +end; + +function NextButtonClick(CurPageID: Integer): Boolean; +var + I, Max: Integer; +begin + if CurPageID = OutputProgressWizardPagesAfterID then begin + try + Max := 50; + for I := 0 to Max do begin + OutputProgressWizardPage.SetProgress(I, Max); + if I = 0 then + OutputProgressWizardPage.Show; + Sleep(2000 div Max); + end; + finally + OutputProgressWizardPage.Hide; + end; + try + Max := 50; + OutputMarqueeProgressWizardPage.Show; + for I := 0 to Max do begin + OutputMarqueeProgressWizardPage.Animate; + Sleep(2000 div Max); + end; + finally + OutputMarqueeProgressWizardPage.Hide; + end; + end; + Result := True; +end; + +function PrepareToInstall(var NeedsRestart: Boolean): String; +begin + if SuppressibleMsgBox('Do you want to stop Setup at the Preparing To Install wizard page?', mbConfirmation, MB_YESNO, IDNO) = IDYES then + Result := 'Stopped by user'; +end; \ No newline at end of file diff --git a/Examples/CodeAutomation.iss b/Examples/CodeAutomation.iss new file mode 100644 index 00000000..64a1bea2 --- /dev/null +++ b/Examples/CodeAutomation.iss @@ -0,0 +1,353 @@ +; -- CodeAutomation.iss -- +; +; This script shows how to use IDispatch based COM Automation objects. + +[Setup] +AppName=My Program +AppVersion=1.5 +WizardStyle=modern +DisableWelcomePage=no +CreateAppDir=no +DisableProgramGroupPage=yes +DefaultGroupName=My Program +UninstallDisplayIcon={app}\MyProg.exe +OutputDir=userdocs:Inno Setup Examples Output + +[Code] + +{--- SQLDMO ---} + +const + SQLServerName = 'localhost'; + SQLDMOGrowth_MB = 0; + +procedure SQLDMOButtonOnClick(Sender: TObject); +var + SQLServer, Database, DBFile, LogFile: Variant; + IDColumn, NameColumn, Table: Variant; +begin + if MsgBox('Setup will now connect to Microsoft SQL Server ''' + SQLServerName + ''' via a trusted connection and create a database. Do you want to continue?', mbInformation, mb_YesNo) = idNo then + Exit; + + { Create the main SQLDMO COM Automation object } + + try + SQLServer := CreateOleObject('SQLDMO.SQLServer'); + except + RaiseException('Please install Microsoft SQL server connectivity tools first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)'); + end; + + { Connect to the Microsoft SQL Server } + + SQLServer.LoginSecure := True; + SQLServer.Connect(SQLServerName); + + MsgBox('Connected to Microsoft SQL Server ''' + SQLServerName + '''.', mbInformation, mb_Ok); + + { Setup a database } + + Database := CreateOleObject('SQLDMO.Database'); + Database.Name := 'Inno Setup'; + + DBFile := CreateOleObject('SQLDMO.DBFile'); + DBFile.Name := 'ISData1'; + DBFile.PhysicalName := 'c:\program files\microsoft sql server\mssql\data\IS.mdf'; + DBFile.PrimaryFile := True; + DBFile.FileGrowthType := SQLDMOGrowth_MB; + DBFile.FileGrowth := 1; + + Database.FileGroups.Item('PRIMARY').DBFiles.Add(DBFile); + + LogFile := CreateOleObject('SQLDMO.LogFile'); + LogFile.Name := 'ISLog1'; + LogFile.PhysicalName := 'c:\program files\microsoft sql server\mssql\data\IS.ldf'; + + Database.TransactionLog.LogFiles.Add(LogFile); + + { Add the database } + + SQLServer.Databases.Add(Database); + + MsgBox('Added database ''' + Database.Name + '''.', mbInformation, mb_Ok); + + { Setup some columns } + + IDColumn := CreateOleObject('SQLDMO.Column'); + IDColumn.Name := 'id'; + IDColumn.Datatype := 'int'; + IDColumn.Identity := True; + IDColumn.IdentityIncrement := 1; + IDColumn.IdentitySeed := 1; + IDColumn.AllowNulls := False; + + NameColumn := CreateOleObject('SQLDMO.Column'); + NameColumn.Name := 'name'; + NameColumn.Datatype := 'varchar'; + NameColumn.Length := '64'; + NameColumn.AllowNulls := False; + + { Setup a table } + + Table := CreateOleObject('SQLDMO.Table'); + Table.Name := 'authors'; + Table.FileGroup := 'PRIMARY'; + + { Add the columns and the table } + + Table.Columns.Add(IDColumn); + Table.Columns.Add(NameColumn); + + Database.Tables.Add(Table); + + MsgBox('Added table ''' + Table.Name + '''.', mbInformation, mb_Ok); +end; + +{--- IIS ---} + +const + IISServerName = 'localhost'; + IISServerNumber = '1'; + IISURL = 'http://127.0.0.1'; + +procedure IISButtonOnClick(Sender: TObject); +var + IIS, WebSite, WebServer, WebRoot, VDir: Variant; + ErrorCode: Integer; +begin + if MsgBox('Setup will now connect to Microsoft IIS Server ''' + IISServerName + ''' and create a virtual directory. Do you want to continue?', mbInformation, mb_YesNo) = idNo then + Exit; + + { Create the main IIS COM Automation object } + + try + IIS := CreateOleObject('IISNamespace'); + except + RaiseException('Please install Microsoft IIS first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)'); + end; + + { Connect to the IIS server } + + WebSite := IIS.GetObject('IIsWebService', IISServerName + '/w3svc'); + WebServer := WebSite.GetObject('IIsWebServer', IISServerNumber); + WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root'); + + { (Re)create a virtual dir } + + try + WebRoot.Delete('IIsWebVirtualDir', 'innosetup'); + WebRoot.SetInfo(); + except + end; + + VDir := WebRoot.Create('IIsWebVirtualDir', 'innosetup'); + VDir.AccessRead := True; + VDir.AppFriendlyName := 'Inno Setup'; + VDir.Path := 'C:\inetpub\innosetup'; + VDir.AppCreate(True); + VDir.SetInfo(); + + MsgBox('Created virtual directory ''' + VDir.Path + '''.', mbInformation, mb_Ok); + + { Write some html and display it } + + if MsgBox('Setup will now write some HTML and display the virtual directory. Do you want to continue?', mbInformation, mb_YesNo) = idNo then + Exit; + + ForceDirectories(VDir.Path); + SaveStringToFile(VDir.Path + '/index.htm', 'Inno Setup rocks!', False); + if not ShellExecAsOriginalUser('open', IISURL + '/innosetup/index.htm', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode) then + MsgBox('Can''t display the created virtual directory: ''' + SysErrorMessage(ErrorCode) + '''.', mbError, mb_Ok); +end; + +{--- MSXML ---} + +const + XMLURL = 'https://jrsoftware.github.io/issrc/ISHelp/isxfunc.xml'; + XMLFileName = 'isxfunc.xml'; + XMLFileName2 = 'isxfuncmodified.xml'; + +procedure MSXMLButtonOnClick(Sender: TObject); +var + XMLHTTP, XMLDoc, NewNode, RootNode: Variant; + Path: String; +begin + if MsgBox('Setup will now use MSXML to download XML file ''' + XMLURL + ''' and save it to the source folder.'#13#13'Setup will then load, modify and save this XML file. Do you want to continue?', mbInformation, mb_YesNo) = idNo then + Exit; + + { Create the main MSXML COM Automation object } + + try + XMLHTTP := CreateOleObject('MSXML2.ServerXMLHTTP'); + except + RaiseException('Please install MSXML first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)'); + end; + + { Download the XML file } + + XMLHTTP.Open('GET', XMLURL, False); + XMLHTTP.Send(); + + Path := ExpandConstant('{src}\'); + XMLHTTP.responseXML.Save(Path + XMLFileName); + + MsgBox('Downloaded the XML file and saved it as ''' + XMLFileName + '''.', mbInformation, mb_Ok); + + { Load the XML File } + + XMLDoc := CreateOleObject('MSXML2.DOMDocument'); + XMLDoc.async := False; + XMLDoc.resolveExternals := False; + XMLDoc.load(Path + XMLFileName); + if XMLDoc.parseError.errorCode <> 0 then + RaiseException('Error on line ' + IntToStr(XMLDoc.parseError.line) + ', position ' + IntToStr(XMLDoc.parseError.linepos) + ': ' + XMLDoc.parseError.reason); + + MsgBox('Loaded the XML file.', mbInformation, mb_Ok); + + { Modify the XML document } + + NewNode := XMLDoc.createElement('isxdemo'); + RootNode := XMLDoc.documentElement; + RootNode.appendChild(NewNode); + RootNode.lastChild.text := 'Hello, World'; + + { Save the XML document } + + XMLDoc.Save(Path + XMLFileName2); + + MsgBox('Saved the modified XML as ''' + XMLFileName2 + '''.', mbInformation, mb_Ok); +end; + + +{--- Word ---} + +procedure WordButtonOnClick(Sender: TObject); +var + Word: Variant; +begin + if MsgBox('Setup will now check whether Microsoft Word is running. Do you want to continue?', mbInformation, mb_YesNo) = idNo then + Exit; + + { Try to get an active Word COM Automation object } + + try + Word := GetActiveOleObject('Word.Application'); + except + end; + + if VarIsEmpty(Word) then + MsgBox('Microsoft Word is not running.', mbInformation, mb_Ok) + else + MsgBox('Microsoft Word is running.', mbInformation, mb_Ok) +end; + +{--- Windows Firewall ---} + +const + NET_FW_IP_VERSION_ANY = 2; + NET_FW_SCOPE_ALL = 0; + +procedure FirewallButtonOnClick(Sender: TObject); +var + Firewall, Application: Variant; +begin + if MsgBox('Setup will now add itself to Windows Firewall as an authorized application for the current profile (' + GetUserNameString + '). Do you want to continue?', mbInformation, mb_YesNo) = idNo then + Exit; + + { Create the main Windows Firewall COM Automation object } + + try + Firewall := CreateOleObject('HNetCfg.FwMgr'); + except + RaiseException('Please install Windows Firewall first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)'); + end; + + { Add the authorization } + + Application := CreateOleObject('HNetCfg.FwAuthorizedApplication'); + Application.Name := 'Setup'; + Application.IPVersion := NET_FW_IP_VERSION_ANY; + Application.ProcessImageFileName := ExpandConstant('{srcexe}'); + Application.Scope := NET_FW_SCOPE_ALL; + Application.Enabled := True; + + Firewall.LocalPolicy.CurrentProfile.AuthorizedApplications.Add(Application); + + MsgBox('Setup is now an authorized application for the current profile', mbInformation, mb_Ok); +end; + +{--- Unzip ---} + +const + ZipURL = 'https://jrsoftware.org/download.php/iscrypt.zip'; + ZipFileName = 'iscrypt.zip'; + ZipSHA256 = '0569ffe1677ba699d07063a902d48c2f92c8e88669bdc13118f5808c30e998bc'; + SHCONTCH_NOPROGRESSBOX = 4; + SHCONTCH_RESPONDYESTOALL = 16; + +procedure UnzipButtonOnClick(Sender: TObject); +var + Shell, ZipFolder, TargetFolder: Variant; + ZipPath, TargetPath: String; +begin + if MsgBox('Setup will now download Zip file ''' + ZipURL + ''' and save it to a temporary folder.'#13#13'Setup will then unzip this Zip file to the source folder. Do you want to continue?', mbInformation, mb_YesNo) = idNo then + Exit; + + { Download the Zip file } + DownloadTemporaryFile(ZipURL + '?dontcount=1', ZipFileName, ZipSHA256, nil); + ZipPath := ExpandConstant('{tmp}\' + ZipFileName); + + MsgBox('Downloaded the Zip file and saved it as ''' + ZipPath + '''.', mbInformation, mb_Ok); + + { Unzip the Zip file to the source folder } + Shell := CreateOleObject('Shell.Application'); + + ZipFolder := Shell.NameSpace(ZipPath); + if VarIsClear(ZipFolder) then + RaiseException(Format('Zip file ''%s'' does not exist or cannot be opened', [ZipPath])); + + TargetPath := ExpandConstant('{src}'); + TargetFolder := Shell.NameSpace(TargetPath); + if VarIsClear(TargetFolder) then + RaiseException(Format('Target ''%s'' does not exist', [TargetPath])); + + TargetFolder.CopyHere(ZipFolder.Items, SHCONTCH_NOPROGRESSBOX or SHCONTCH_RESPONDYESTOALL); + + MsgBox('Unzipped the Zip file to ''' + TargetPath + '''.', mbInformation, mb_Ok); +end; + +{---} + +procedure CreateButton(ALeft, ATop: Integer; ACaption: String; ANotifyEvent: TNotifyEvent); +begin + with TNewButton.Create(WizardForm) do begin + Left := ALeft; + Top := ATop; + Width := WizardForm.CancelButton.Width; + Height := WizardForm.CancelButton.Height; + Caption := ACaption; + OnClick := ANotifyEvent; + Parent := WizardForm.WelcomePage; + end; +end; + +procedure InitializeWizard(); +var + Left, LeftInc, Top, TopInc: Integer; +begin + Left := WizardForm.WelcomeLabel2.Left; + LeftInc := WizardForm.CancelButton.Width + ScaleX(8); + TopInc := WizardForm.CancelButton.Height + ScaleY(8); + Top := WizardForm.WelcomeLabel2.Top + WizardForm.WelcomeLabel2.Height - 4*TopInc; + + CreateButton(Left, Top, '&SQLDMO...', @SQLDMOButtonOnClick); + Top := Top + TopInc; + CreateButton(Left + LeftInc, Top, '&Firewall...', @FirewallButtonOnClick); + Top := Top + TopInc; + CreateButton(Left, Top, '&IIS...', @IISButtonOnClick); + Top := Top + TopInc; + CreateButton(Left, Top, '&MSXML...', @MSXMLButtonOnClick); + Top := Top + TopInc; + CreateButton(Left, Top, '&Word...', @WordButtonOnClick); + Top := Top + TopInc; + CreateButton(Left, Top, '&Unzip...', @UnzipButtonOnClick); +end; \ No newline at end of file diff --git a/Examples/CodeAutomation2.iss b/Examples/CodeAutomation2.iss new file mode 100644 index 00000000..abfeaa56 --- /dev/null +++ b/Examples/CodeAutomation2.iss @@ -0,0 +1,293 @@ +; -- CodeAutomation2.iss -- +; +; This script shows how to use IUnknown based COM Automation objects. +; +; Note: some unneeded interface functions which had special types have been replaced +; by dummies to avoid having to define those types. Do not remove these dummies as +; that would change the function indices which is bad. Also, not all function +; prototypes have been tested, only those used by this example. + +[Setup] +AppName=My Program +AppVersion=1.5 +WizardStyle=modern +DisableWelcomePage=no +CreateAppDir=no +DisableProgramGroupPage=yes +DefaultGroupName=My Program +UninstallDisplayIcon={app}\MyProg.exe +OutputDir=userdocs:Inno Setup Examples Output + +[Code] + +{--- IShellLink ---} + +const + CLSID_ShellLink = '{00021401-0000-0000-C000-000000000046}'; + +type + IShellLinkW = interface(IUnknown) + '{000214F9-0000-0000-C000-000000000046}' + procedure Dummy; + procedure Dummy2; + procedure Dummy3; + function GetDescription(pszName: String; cchMaxName: Integer): HResult; + function SetDescription(pszName: String): HResult; + function GetWorkingDirectory(pszDir: String; cchMaxPath: Integer): HResult; + function SetWorkingDirectory(pszDir: String): HResult; + function GetArguments(pszArgs: String; cchMaxPath: Integer): HResult; + function SetArguments(pszArgs: String): HResult; + function GetHotkey(var pwHotkey: Word): HResult; + function SetHotkey(wHotkey: Word): HResult; + function GetShowCmd(out piShowCmd: Integer): HResult; + function SetShowCmd(iShowCmd: Integer): HResult; + function GetIconLocation(pszIconPath: String; cchIconPath: Integer; + out piIcon: Integer): HResult; + function SetIconLocation(pszIconPath: String; iIcon: Integer): HResult; + function SetRelativePath(pszPathRel: String; dwReserved: DWORD): HResult; + function Resolve(Wnd: HWND; fFlags: DWORD): HResult; + function SetPath(pszFile: String): HResult; + end; + + IPersist = interface(IUnknown) + '{0000010C-0000-0000-C000-000000000046}' + function GetClassID(var classID: TGUID): HResult; + end; + + IPersistFile = interface(IPersist) + '{0000010B-0000-0000-C000-000000000046}' + function IsDirty: HResult; + function Load(pszFileName: String; dwMode: Longint): HResult; + function Save(pszFileName: String; fRemember: BOOL): HResult; + function SaveCompleted(pszFileName: String): HResult; + function GetCurFile(out pszFileName: String): HResult; + end; + +procedure IShellLinkButtonOnClick(Sender: TObject); +var + Obj: IUnknown; + SL: IShellLinkW; + PF: IPersistFile; +begin + { Create the main ShellLink COM Automation object } + Obj := CreateComObject(StringToGuid(CLSID_ShellLink)); + + { Set the shortcut properties } + SL := IShellLinkW(Obj); + OleCheck(SL.SetPath(ExpandConstant('{srcexe}'))); + OleCheck(SL.SetArguments('')); + OleCheck(SL.SetShowCmd(SW_SHOWNORMAL)); + + { Save the shortcut } + PF := IPersistFile(Obj); + OleCheck(PF.Save(ExpandConstant('{autodesktop}\CodeAutomation2 Test.lnk'), True)); + + MsgBox('Saved a shortcut named ''CodeAutomation2 Test'' on the desktop.', mbInformation, mb_Ok); +end; + +{--- ITaskScheduler ---} + +const + CLSID_TaskScheduler = '{148BD52A-A2AB-11CE-B11F-00AA00530503}'; + CLSID_Task = '{148BD520-A2AB-11CE-B11F-00AA00530503}'; + IID_Task = '{148BD524-A2AB-11CE-B11F-00AA00530503}'; + TASK_TIME_TRIGGER_DAILY = 1; + +type + ITaskScheduler = interface(IUnknown) + '{148BD527-A2AB-11CE-B11F-00AA00530503}' + function SetTargetComputer(pwszComputer: String): HResult; + function GetTargetComputer(out ppwszComputer: String): HResult; + procedure Dummy; + function Activate(pwszName: String; var riid: TGUID; out ppUnk: IUnknown): HResult; + function Delete(pwszName: String): HResult; + function NewWorkItem(pwszTaskName: String; var rclsid: TGUID; var riid: TGUID; out ppUnk: IUnknown): HResult; + procedure Dummy2; + function IsOfType(pwszName: String; var riid: TGUID): HResult; + end; + + TDaily = record + DaysInterval: WORD; + end; + + TWeekly = record + WeeksInterval: WORD; + rgfDaysOfTheWeek: WORD; + end; + + TMonthlyDate = record + rgfDays: DWORD; + rgfMonths: WORD; + end; + + TMonthlyDow = record + wWhichWeek: WORD; + rgfDaysOfTheWeek: WORD; + rgfMonths: WORD; + end; + + { ROPS doesn't support unions, replace this with the type you need and adjust padding (end size has to be 48). } + TTriggerTypeUnion = record + Daily: TDaily; + Pad1: WORD; + Pad2: WORD; + Pad3: WORD; + end; + + TTaskTrigger = record + cbTriggerSize: WORD; + Reserved1: WORD; + wBeginYear: WORD; + wBeginMonth: WORD; + wBeginDay: WORD; + wEndYear: WORD; + wEndMonth: WORD; + wEndDay: WORD; + wStartHour: WORD; + wStartMinute: WORD; + MinutesDuration: DWORD; + MinutesInterval: DWORD; + rgFlags: DWORD; + TriggerType: DWORD; + Type_: TTriggerTypeUnion; + Reserved2: WORD; + wRandomMinutesInterval: WORD; + end; + + ITaskTrigger = interface(IUnknown) + '{148BD52B-A2AB-11CE-B11F-00AA00530503}' + function SetTrigger(var pTrigger: TTaskTrigger): HResult; + function GetTrigger(var pTrigger: TTaskTrigger): HResult; + function GetTriggerString(var ppwszTrigger: String): HResult; + end; + + IScheduledWorkItem = interface(IUnknown) + '{A6B952F0-A4B1-11D0-997D-00AA006887EC}' + function CreateTrigger(out piNewTrigger: Word; out ppTrigger: ITaskTrigger): HResult; + function DeleteTrigger(iTrigger: Word): HResult; + function GetTriggerCount(out pwCount: Word): HResult; + function GetTrigger(iTrigger: Word; var ppTrigger: ITaskTrigger): HResult; + function GetTriggerString(iTrigger: Word; out ppwszTrigger: String): HResult; + procedure Dummy; + procedure Dummy2; + function SetIdleWait(wIdleMinutes: Word; wDeadlineMinutes: Word): HResult; + function GetIdleWait(out pwIdleMinutes: Word; out pwDeadlineMinutes: Word): HResult; + function Run: HResult; + function Terminate: HResult; + function EditWorkItem(hParent: HWND; dwReserved: DWORD): HResult; + procedure Dummy3; + function GetStatus(out phrStatus: HResult): HResult; + function GetExitCode(out pdwExitCode: DWORD): HResult; + function SetComment(pwszComment: String): HResult; + function GetComment(out ppwszComment: String): HResult; + function SetCreator(pwszCreator: String): HResult; + function GetCreator(out ppwszCreator: String): HResult; + function SetWorkItemData(cbData: Word; var rgbData: Byte): HResult; + function GetWorkItemData(out pcbData: Word; out prgbData: Byte): HResult; + function SetErrorRetryCount(wRetryCount: Word): HResult; + function GetErrorRetryCount(out pwRetryCount: Word): HResult; + function SetErrorRetryInterval(wRetryInterval: Word): HResult; + function GetErrorRetryInterval(out pwRetryInterval: Word): HResult; + function SetFlags(dwFlags: DWORD): HResult; + function GetFlags(out pdwFlags: DWORD): HResult; + function SetAccountInformation(pwszAccountName: String; pwszPassword: String): HResult; + function GetAccountInformation(out ppwszAccountName: String): HResult; + end; + + ITask = interface(IScheduledWorkItem) + '{148BD524-A2AB-11CE-B11F-00AA00530503}' + function SetApplicationName(pwszApplicationName: String): HResult; + function GetApplicationName(out ppwszApplicationName: String): HResult; + function SetParameters(pwszParameters: String): HResult; + function GetParameters(out ppwszParameters: String): HResult; + function SetWorkingDirectory(pwszWorkingDirectory: String): HResult; + function GetWorkingDirectory(out ppwszWorkingDirectory: String): HResult; + function SetPriority(dwPriority: DWORD): HResult; + function GetPriority(out pdwPriority: DWORD): HResult; + function SetTaskFlags(dwFlags: DWORD): HResult; + function GetTaskFlags(out pdwFlags: DWORD): HResult; + function SetMaxRunTime(dwMaxRunTimeMS: DWORD): HResult; + function GetMaxRunTime(out pdwMaxRunTimeMS: DWORD): HResult; + end; + + +procedure ITaskSchedulerButtonOnClick(Sender: TObject); +var + Obj, Obj2: IUnknown; + TaskScheduler: ITaskScheduler; + G1, G2: TGUID; + Task: ITask; + iNewTrigger: WORD; + TaskTrigger: ITaskTrigger; + TaskTrigger2: TTaskTrigger; + PF: IPersistFile; +begin + { Create the main TaskScheduler COM Automation object } + Obj := CreateComObject(StringToGuid(CLSID_TaskScheduler)); + + { Create the Task COM automation object } + TaskScheduler := ITaskScheduler(Obj); + G1 := StringToGuid(CLSID_Task); + G2 := StringToGuid(IID_Task); + //This will throw an exception if the task already exists + OleCheck(TaskScheduler.NewWorkItem('CodeAutomation2 Test', G1, G2, Obj2)); + + { Set the task properties } + Task := ITask(Obj2); + OleCheck(Task.SetComment('CodeAutomation2 Test Comment')); + OleCheck(Task.SetApplicationName(ExpandConstant('{srcexe}'))); + + { Set the task account information } + //Uncomment the following and provide actual user info to get a runnable task + //OleCheck(Task.SetAccountInformation('username', 'password')); + + { Create the TaskTrigger COM automation object } + OleCheck(Task.CreateTrigger(iNewTrigger, TaskTrigger)); + + { Set the task trigger properties } + with TaskTrigger2 do begin + cbTriggerSize := SizeOf(TaskTrigger2); + wBeginYear := 2009; + wBeginMonth := 10; + wBeginDay := 1; + wStartHour := 12; + TriggerType := TASK_TIME_TRIGGER_DAILY; + Type_.Daily.DaysInterval := 1; + end; + OleCheck(TaskTrigger.SetTrigger(TaskTrigger2)); + + { Save the task } + PF := IPersistFile(Obj2); + OleCheck(PF.Save('', True)); + + MsgBox('Created a daily task named named ''CodeAutomation2 Test''.' + #13#13 + 'Note: Account information not set so the task won''t actually run, uncomment the SetAccountInfo call and provide actual user info to get a runnable task.', mbInformation, mb_Ok); +end; + +{---} + +procedure CreateButton(ALeft, ATop: Integer; ACaption: String; ANotifyEvent: TNotifyEvent); +begin + with TNewButton.Create(WizardForm) do begin + Left := ALeft; + Top := ATop; + Width := (WizardForm.CancelButton.Width*3)/2; + Height := WizardForm.CancelButton.Height; + Caption := ACaption; + OnClick := ANotifyEvent; + Parent := WizardForm.WelcomePage; + end; +end; + +procedure InitializeWizard(); +var + Left, LeftInc, Top, TopInc: Integer; +begin + Left := WizardForm.WelcomeLabel2.Left; + LeftInc := (WizardForm.CancelButton.Width*3)/2 + ScaleX(8); + TopInc := WizardForm.CancelButton.Height + ScaleY(8); + Top := WizardForm.WelcomeLabel2.Top + WizardForm.WelcomeLabel2.Height - 4*TopInc; + + CreateButton(Left, Top, '&IShellLink...', @IShellLinkButtonOnClick); + Top := Top + TopInc; + CreateButton(Left, Top, '&ITaskScheduler...', @ITaskSchedulerButtonOnClick); +end; \ No newline at end of file diff --git a/Examples/CodeClasses.iss b/Examples/CodeClasses.iss new file mode 100644 index 00000000..9eab297f --- /dev/null +++ b/Examples/CodeClasses.iss @@ -0,0 +1,450 @@ +; -- CodeClasses.iss -- +; +; This script shows how to use the WizardForm object and the various VCL classes. + +[Setup] +AppName=My Program +AppVersion=1.5 +WizardStyle=modern +CreateAppDir=no +DisableProgramGroupPage=yes +DefaultGroupName=My Program +UninstallDisplayIcon={app}\MyProg.exe +OutputDir=userdocs:Inno Setup Examples Output +PrivilegesRequired=lowest + +; Uncomment the following three lines to test the layout when scaling and rtl are active +;[LangOptions] +;RightToLeft=yes +;DialogFontSize=12 + +[Files] +Source: compiler:WizClassicSmallImage.bmp; Flags: dontcopy + +[Code] +procedure ButtonOnClick(Sender: TObject); +begin + MsgBox('You clicked the button!', mbInformation, mb_Ok); +end; + +procedure BitmapImageOnClick(Sender: TObject); +begin + MsgBox('You clicked the image!', mbInformation, mb_Ok); +end; + +procedure FormButtonOnClick(Sender: TObject); +var + Form: TSetupForm; + Edit: TNewEdit; + OKButton, CancelButton: TNewButton; + W: Integer; +begin + Form := CreateCustomForm(); + try + Form.ClientWidth := ScaleX(256); + Form.ClientHeight := ScaleY(128); + Form.Caption := 'TSetupForm'; + + Edit := TNewEdit.Create(Form); + Edit.Top := ScaleY(10); + Edit.Left := ScaleX(10); + Edit.Width := Form.ClientWidth - ScaleX(2 * 10); + Edit.Height := ScaleY(23); + Edit.Anchors := [akLeft, akTop, akRight]; + Edit.Text := 'TNewEdit'; + Edit.Parent := Form; + + OKButton := TNewButton.Create(Form); + OKButton.Parent := Form; + OKButton.Caption := 'OK'; + OKButton.Left := Form.ClientWidth - ScaleX(75 + 6 + 75 + 10); + OKButton.Top := Form.ClientHeight - ScaleY(23 + 10); + OKButton.Height := ScaleY(23); + OKButton.Anchors := [akRight, akBottom] + OKButton.ModalResult := mrOk; + OKButton.Default := True; + + CancelButton := TNewButton.Create(Form); + CancelButton.Parent := Form; + CancelButton.Caption := 'Cancel'; + CancelButton.Left := Form.ClientWidth - ScaleX(75 + 10); + CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10); + CancelButton.Height := ScaleY(23); + CancelButton.Anchors := [akRight, akBottom] + CancelButton.ModalResult := mrCancel; + CancelButton.Cancel := True; + + W := Form.CalculateButtonWidth([OKButton.Caption, CancelButton.Caption]); + OKButton.Width := W; + CancelButton.Width := W; + + Form.ActiveControl := Edit; + { Keep the form from sizing vertically since we don't have any controls which can size vertically } + Form.KeepSizeY := True; + { Center on WizardForm. Without this call it will still automatically center, but on the screen } + Form.FlipSizeAndCenterIfNeeded(True, WizardForm, False); + + if Form.ShowModal() = mrOk then + MsgBox('You clicked OK.', mbInformation, MB_OK); + finally + Form.Free(); + end; +end; + +procedure TaskDialogButtonOnClick(Sender: TObject); +begin + { TaskDialogMsgBox isn't a class but showing it anyway since it fits with the theme } + + case TaskDialogMsgBox('Choose A or B', + 'You can choose A or B.', + mbInformation, + MB_YESNOCANCEL, ['I choose &A'#13#10'A will be chosen.', 'I choose &B'#13#10'B will be chosen.'], + IDYES) of + IDYES: MsgBox('You chose A.', mbInformation, MB_OK); + IDNO: MsgBox('You chose B.', mbInformation, MB_OK); + end; +end; + +procedure LinkLabelOnLinkClick(Sender: TObject; const Link: string; LinkType: TSysLinkType); +var + ErrorCode: Integer; +begin + if (LinkType = sltID) and (Link = 'jrsoftware') then + ShellExecAsOriginalUser('open', 'https://jrsoftware.org', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode) + else if LinkType = sltURL then + ShellExecAsOriginalUser('open', Link, '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode); +end; + +procedure CreateTheWizardPages; +var + Page: TWizardPage; + Button, FormButton, TaskDialogButton: TNewButton; + Panel: TPanel; + CheckBox: TNewCheckBox; + Edit: TNewEdit; + PasswordEdit: TPasswordEdit; + Memo: TNewMemo; + ComboBox: TNewComboBox; + ListBox: TNewListBox; + StaticText, StaticText2, ProgressBarLabel: TNewStaticText; + LinkLabel: TNewLinkLabel; + ProgressBar, ProgressBar2, ProgressBar3: TNewProgressBar; + CheckListBox, CheckListBox2: TNewCheckListBox; + FolderTreeView: TFolderTreeView; + BitmapImage, BitmapImage2, BitmapImage3: TBitmapImage; + BitmapFileName: String; + RichEditViewer: TRichEditViewer; +begin + { TButton and others } + + Page := CreateCustomPage(wpWelcome, 'Custom wizard page controls', 'TButton and others'); + + Button := TNewButton.Create(Page); + Button.Caption := 'TNewButton'; + Button.Width := WizardForm.CalculateButtonWidth([Button.Caption]); + Button.Height := ScaleY(23); + Button.OnClick := @ButtonOnClick; + Button.Parent := Page.Surface; + + Panel := TPanel.Create(Page); + Panel.Width := Page.SurfaceWidth div 2 - ScaleX(8); + Panel.Left := Page.SurfaceWidth - Panel.Width; + Panel.Height := Button.Height * 2; + Panel.Anchors := [akLeft, akTop, akRight]; + Panel.Caption := 'TPanel'; + Panel.Color := clWindow; + Panel.BevelKind := bkFlat; + Panel.BevelOuter := bvNone; + Panel.ParentBackground := False; + Panel.Parent := Page.Surface; + + CheckBox := TNewCheckBox.Create(Page); + CheckBox.Top := Button.Top + Button.Height + ScaleY(8); + CheckBox.Width := Page.SurfaceWidth div 2; + CheckBox.Height := ScaleY(17); + CheckBox.Caption := 'TNewCheckBox'; + CheckBox.Checked := True; + CheckBox.Parent := Page.Surface; + + Edit := TNewEdit.Create(Page); + Edit.Top := CheckBox.Top + CheckBox.Height + ScaleY(8); + Edit.Width := Page.SurfaceWidth div 2 - ScaleX(8); + Edit.Text := 'TNewEdit'; + Edit.Parent := Page.Surface; + + PasswordEdit := TPasswordEdit.Create(Page); + PasswordEdit.Left := Page.SurfaceWidth - Edit.Width; + PasswordEdit.Top := CheckBox.Top + CheckBox.Height + ScaleY(8); + PasswordEdit.Width := Edit.Width; + PasswordEdit.Anchors := [akLeft, akTop, akRight]; + PasswordEdit.Text := 'TPasswordEdit'; + PasswordEdit.Parent := Page.Surface; + + Memo := TNewMemo.Create(Page); + Memo.Top := Edit.Top + Edit.Height + ScaleY(8); + Memo.Width := Page.SurfaceWidth; + Memo.Height := ScaleY(89); + Memo.Anchors := [akLeft, akTop, akRight, akBottom]; + Memo.ScrollBars := ssVertical; + Memo.Text := 'TNewMemo'; + Memo.Parent := Page.Surface; + + FormButton := TNewButton.Create(Page); + FormButton.Caption := 'TSetupForm'; + FormButton.Top := Memo.Top + Memo.Height + ScaleY(8); + FormButton.Width := WizardForm.CalculateButtonWidth([FormButton.Caption]); + FormButton.Height := ScaleY(23); + FormButton.Anchors := [akLeft, akBottom]; + FormButton.OnClick := @FormButtonOnClick; + FormButton.Parent := Page.Surface; + + TaskDialogButton := TNewButton.Create(Page); + TaskDialogButton.Caption := 'TaskDialogMsgBox'; + TaskDialogButton.Top := FormButton.Top; + TaskDialogButton.Left := FormButton.Left + FormButton.Width + ScaleX(8); + TaskDialogButton.Width := WizardForm.CalculateButtonWidth([TaskDialogButton.Caption]); + TaskDialogButton.Height := ScaleY(23); + TaskDialogButton.Anchors := [akLeft, akBottom]; + TaskDialogButton.OnClick := @TaskDialogButtonOnClick; + TaskDialogButton.Parent := Page.Surface; + + { TComboBox and others } + + Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TComboBox and others'); + + ComboBox := TNewComboBox.Create(Page); + ComboBox.Width := Page.SurfaceWidth; + ComboBox.Anchors := [akLeft, akTop, akRight]; + ComboBox.Parent := Page.Surface; + ComboBox.Style := csDropDownList; + ComboBox.Items.Add('TComboBox'); + ComboBox.ItemIndex := 0; + + ListBox := TNewListBox.Create(Page); + ListBox.Top := ComboBox.Top + ComboBox.Height + ScaleY(8); + ListBox.Width := Page.SurfaceWidth; + ListBox.Height := ScaleY(97); + ListBox.Anchors := [akLeft, akTop, akRight, akBottom]; + ListBox.Parent := Page.Surface; + ListBox.Items.Add('TListBox'); + ListBox.ItemIndex := 0; + + StaticText := TNewStaticText.Create(Page); + StaticText.Top := ListBox.Top + ListBox.Height + ScaleY(8); + StaticText.Anchors := [akLeft, akRight, akBottom]; + StaticText.Caption := 'TNewStaticText'; + StaticText.Parent := Page.Surface; + + StaticText2 := TNewStaticText.Create(Page); + StaticText2.AutoSize := False; + StaticText2.Left := StaticText.Width + ScaleX(32); + StaticText2.Top := StaticText.Top; + StaticText2.Anchors := [akLeft, akRight, akBottom]; + StaticText2.WordWrap := True; + StaticText2.Caption := 'TNewStaticText with more text and an adjusted label height so it''s multi-line.'; + StaticText2.Width := 2 * StaticText.Width; + StaticText2.Parent := Page.Surface; + StaticText2.AdjustHeight; + + LinkLabel := TNewLinkLabel.Create(Page); + LinkLabel.AutoSize := False; + LinkLabel.Left := StaticText2.Left; + LinkLabel.Top := StaticText2.Top + StaticText2.Height + ScaleY(8); + LinkLabel.Anchors := [akLeft, akRight, akBottom]; + LinkLabel.Caption := 'TNewLinkLabel with more text and an adjusted label height so it''s multi-line with a second link on the second line.'; + LinkLabel.Width := StaticText2.Width; + LinkLabel.OnLinkClick := @LinkLabelOnLinkClick; + LinkLabel.Parent := Page.Surface; + LinkLabel.AdjustHeight; + + { TNewProgressBar } + + Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TNewProgressBar'); + + ProgressBarLabel := TNewStaticText.Create(Page); + ProgressBarLabel.Anchors := [akLeft, akTop]; + ProgressBarLabel.Caption := 'TNewProgressBar'; + ProgressBarLabel.Parent := Page.Surface; + + ProgressBar := TNewProgressBar.Create(Page); + ProgressBar.Left := ProgressBarLabel.Width + ScaleX(8); + ProgressBar.Top := ProgressBarLabel.Top; + ProgressBar.Width := Page.SurfaceWidth - ProgressBar.Left; + ProgressBar.Height := ProgressBarLabel.Height + ScaleY(8); + ProgressBar.Anchors := [akLeft, akRight, akTop]; + ProgressBar.Parent := Page.Surface; + ProgressBar.Position := 25; + + ProgressBar2 := TNewProgressBar.Create(Page); + ProgressBar2.Left := ProgressBarLabel.Width + ScaleX(8); + ProgressBar2.Top := ProgressBar.Top + ProgressBar.Height + ScaleY(4); + ProgressBar2.Width := Page.SurfaceWidth - ProgressBar.Left; + ProgressBar2.Height := ProgressBarLabel.Height + ScaleY(8); + ProgressBar2.Anchors := [akLeft, akRight, akTop]; + ProgressBar2.Parent := Page.Surface; + ProgressBar2.Position := 50; + ProgressBar2.State := npbsError; + + ProgressBar3 := TNewProgressBar.Create(Page); + ProgressBar3.Left := ProgressBarLabel.Width + ScaleX(8); + ProgressBar3.Top := ProgressBar2.Top + ProgressBar2.Height + ScaleY(4); + ProgressBar3.Width := Page.SurfaceWidth - ProgressBar.Left; + ProgressBar3.Height := ProgressBarLabel.Height + ScaleY(8); + ProgressBar3.Anchors := [akLeft, akRight, akTop]; + ProgressBar3.Parent := Page.Surface; + ProgressBar3.Style := npbstMarquee; + + { TNewCheckListBox } + + Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TNewCheckListBox'); + + CheckListBox := TNewCheckListBox.Create(Page); + CheckListBox.Width := Page.SurfaceWidth; + CheckListBox.Height := ScaleY(97); + CheckListBox.Anchors := [akLeft, akTop, akRight, akBottom]; + CheckListBox.Flat := True; + CheckListBox.Parent := Page.Surface; + CheckListBox.AddCheckBox('TNewCheckListBox', '', 0, True, True, False, True, nil); + CheckListBox.AddRadioButton('TNewCheckListBox', '', 1, True, True, nil); + CheckListBox.AddRadioButton('TNewCheckListBox', '', 1, False, True, nil); + CheckListBox.AddCheckBox('TNewCheckListBox', '', 0, True, True, False, True, nil); + CheckListBox.AddCheckBox('TNewCheckListBox', '', 1, True, True, False, True, nil); + CheckListBox.AddCheckBox('TNewCheckListBox', '123', 2, True, True, False, True, nil); + CheckListBox.AddCheckBox('TNewCheckListBox', '456', 2, False, True, False, True, nil); + CheckListBox.AddCheckBox('TNewCheckListBox', '', 1, False, True, False, True, nil); + CheckListBox.ItemFontStyle[5] := [fsBold]; + CheckListBox.SubItemFontStyle[5] := [fsBold]; + CheckListBox.ItemFontStyle[6] := [fsBold, fsItalic]; + CheckListBox.SubItemFontStyle[6] := [fsBold, fsUnderline]; + + CheckListBox2 := TNewCheckListBox.Create(Page); + CheckListBox2.Top := CheckListBox.Top + CheckListBox.Height + ScaleY(8); + CheckListBox2.Width := Page.SurfaceWidth; + CheckListBox2.Height := ScaleY(97); + CheckListBox2.Anchors := [akLeft, akRight, akBottom]; + CheckListBox2.BorderStyle := bsNone; + CheckListBox2.ParentColor := True; + CheckListBox2.MinItemHeight := WizardForm.TasksList.MinItemHeight; + CheckListBox2.ShowLines := False; + CheckListBox2.WantTabs := True; + CheckListBox2.Parent := Page.Surface; + CheckListBox2.AddGroup('TNewCheckListBox', '', 0, nil); + CheckListBox2.AddRadioButton('TNewCheckListBox', '', 0, True, True, nil); + CheckListBox2.AddRadioButton('TNewCheckListBox', '', 0, False, True, nil); + + { TFolderTreeView } + + Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TFolderTreeView'); + + FolderTreeView := TFolderTreeView.Create(Page); + FolderTreeView.Width := Page.SurfaceWidth; + FolderTreeView.Height := Page.SurfaceHeight; + FolderTreeView.Anchors := [akLeft, akTop, akRight, akBottom]; + FolderTreeView.Parent := Page.Surface; + FolderTreeView.Directory := ExpandConstant('{src}'); + + { TBitmapImage } + + Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TBitmapImage'); + + BitmapFileName := ExpandConstant('{tmp}\WizClassicSmallImage.bmp'); + ExtractTemporaryFile(ExtractFileName(BitmapFileName)); + + BitmapImage := TBitmapImage.Create(Page); + BitmapImage.AutoSize := True; + BitmapImage.Bitmap.LoadFromFile(BitmapFileName); + BitmapImage.Cursor := crHand; + BitmapImage.OnClick := @BitmapImageOnClick; + BitmapImage.Parent := Page.Surface; + + BitmapImage2 := TBitmapImage.Create(Page); + BitmapImage2.BackColor := $400000; + BitmapImage2.Bitmap := BitmapImage.Bitmap; + BitmapImage2.Center := True; + BitmapImage2.Left := BitmapImage.Width + 10; + BitmapImage2.Height := 2*BitmapImage.Height; + BitmapImage2.Width := 2*BitmapImage.Width; + BitmapImage2.Cursor := crHand; + BitmapImage2.OnClick := @BitmapImageOnClick; + BitmapImage2.Parent := Page.Surface; + + BitmapImage3 := TBitmapImage.Create(Page); + BitmapImage3.Bitmap := BitmapImage.Bitmap; + BitmapImage3.Stretch := True; + BitmapImage3.Left := 3*BitmapImage.Width + 20; + BitmapImage3.Height := 4*BitmapImage.Height; + BitmapImage3.Width := 4*BitmapImage.Width; + BitmapImage3.Anchors := [akLeft, akTop, akRight, akBottom]; + BitmapImage3.Cursor := crHand; + BitmapImage3.OnClick := @BitmapImageOnClick; + BitmapImage3.Parent := Page.Surface; + + { TRichViewer } + + Page := CreateCustomPage(Page.ID, 'Custom wizard page controls', 'TRichViewer'); + + RichEditViewer := TRichEditViewer.Create(Page); + RichEditViewer.Width := Page.SurfaceWidth; + RichEditViewer.Height := Page.SurfaceHeight; + RichEditViewer.Anchors := [akLeft, akTop, akRight, akBottom]; + RichEditViewer.BevelKind := bkFlat; + RichEditViewer.BorderStyle := bsNone; + RichEditViewer.Parent := Page.Surface; + RichEditViewer.ScrollBars := ssVertical; + RichEditViewer.UseRichEdit := True; + RichEditViewer.RTFText := '{\rtf1\ansi\ansicpg1252\deff0\deflang1043{\fonttbl{\f0\fswiss\fcharset0 Arial;}}{\colortbl ;\red255\green0\blue0;\red0\green128\blue0;\red0\green0\blue128;}\viewkind4\uc1\pard\f0\fs20 T\cf1 Rich\cf2 Edit\cf3 Viewer\cf0\par}'; + RichEditViewer.ReadOnly := True; +end; + +procedure AboutButtonOnClick(Sender: TObject); +begin + MsgBox('This demo shows some features of the various form objects and control classes.', mbInformation, mb_Ok); +end; + +procedure CreateAboutButtonAndURLLabel(ParentForm: TSetupForm; CancelButton: TNewButton); +var + AboutButton: TNewButton; + URLLabel: TNewLinkLabel; +begin + AboutButton := TNewButton.Create(ParentForm); + AboutButton.Left := ParentForm.ClientWidth - CancelButton.Left - CancelButton.Width; + AboutButton.Top := CancelButton.Top; + AboutButton.Width := CancelButton.Width; + AboutButton.Height := CancelButton.Height; + AboutButton.Anchors := [akLeft, akBottom]; + AboutButton.Caption := '&About...'; + AboutButton.OnClick := @AboutButtonOnClick; + AboutButton.Parent := ParentForm; + + URLLabel := TNewLinkLabel.Create(ParentForm); + URLLabel.Left := AboutButton.Left + AboutButton.Width + ScaleX(20); + URLLabel.Top := AboutButton.Top + AboutButton.Height - URLLabel.Height - 2; + URLLabel.Anchors := [akLeft, akBottom]; + URLLabel.Caption := 'jrsoftware.org'; + URLLabel.OnLinkClick := @LinkLabelOnLinkClick; + URLLabel.UseVisualStyle := True; + URLLabel.Parent := ParentForm; +end; + +procedure InitializeWizard(); +begin + { Custom wizard pages } + + CreateTheWizardPages; + + { Custom controls } + + CreateAboutButtonAndURLLabel(WizardForm, WizardForm.CancelButton); + + { Custom beveled label } + + WizardForm.BeveledLabel.Caption := ' Bevel '; +end; + +procedure InitializeUninstallProgressForm(); +begin + { Custom controls } + + CreateAboutButtonAndURLLabel(UninstallProgressForm, UninstallProgressForm.CancelButton); +end; + diff --git a/Examples/CodeDlg.iss b/Examples/CodeDlg.iss new file mode 100644 index 00000000..bf0a6584 --- /dev/null +++ b/Examples/CodeDlg.iss @@ -0,0 +1,207 @@ +; -- CodeDlg.iss -- +; +; This script shows how to insert custom wizard pages into Setup and how to handle +; these pages. Furthermore it shows how to 'communicate' between the [Code] section +; and the regular Inno Setup sections using {code:...} constants. Finally it shows +; how to customize the settings text on the 'Ready To Install' page. + +[Setup] +AppName=My Program +AppVersion=1.5 +WizardStyle=modern +DisableWelcomePage=no +DefaultDirName={autopf}\My Program +DisableProgramGroupPage=yes +UninstallDisplayIcon={app}\MyProg.exe +OutputDir=userdocs:Inno Setup Examples Output +PrivilegesRequired=lowest + +[Files] +Source: "MyProg.exe"; DestDir: "{app}" +Source: "MyProg.chm"; DestDir: "{app}" +Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme + +[Registry] +Root: HKA; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty +Root: HKA; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey +Root: HKA; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "Name"; ValueData: "{code:GetUser|Name}" +Root: HKA; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "Company"; ValueData: "{code:GetUser|Company}" +Root: HKA; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "DataDir"; ValueData: "{code:GetDataDir}" +; etc. + +[Dirs] +Name: {code:GetDataDir}; Flags: uninsneveruninstall + +[Code] +var + UserPage: TInputQueryWizardPage; + UsagePage: TInputOptionWizardPage; + LightMsgPage: TOutputMsgWizardPage; + KeyPage: TInputQueryWizardPage; + ProgressPage: TOutputProgressWizardPage; + DataDirPage: TInputDirWizardPage; + +procedure InitializeWizard; +begin + { Create the pages } + + UserPage := CreateInputQueryPage(wpWelcome, + 'Personal Information', 'Who are you?', + 'Please specify your name and the company for whom you work, then click Next.'); + UserPage.Add('Name:', False); + UserPage.Add('Company:', False); + + UsagePage := CreateInputOptionPage(UserPage.ID, + 'Personal Information', 'How will you use My Program?', + 'Please specify how you would like to use My Program, then click Next.', + True, False); + UsagePage.Add('Light mode (no ads, limited functionality)'); + UsagePage.Add('Sponsored mode (with ads, full functionality)'); + UsagePage.Add('Paid mode (no ads, full functionality)'); + + LightMsgPage := CreateOutputMsgPage(UsagePage.ID, + 'Personal Information', 'How will you use My Program?', + 'Note: to enjoy all features My Program can offer and to support its development, ' + + 'you can switch to sponsored or paid mode at any time by selecting ''Usage Mode'' ' + + 'in the ''Help'' menu of My Program after the installation has completed.'#13#13 + + 'Click Back if you want to change your usage mode setting now, or click Next to ' + + 'continue with the installation.'); + + KeyPage := CreateInputQueryPage(UsagePage.ID, + 'Personal Information', 'What''s your registration key?', + 'Please specify your registration key and click Next to continue. If you don''t ' + + 'have a valid registration key, click Back to choose a different usage mode.'); + KeyPage.Add('Registration key:', False); + + ProgressPage := CreateOutputProgressPage('Personal Information', + 'What''s your registration key?'); + + DataDirPage := CreateInputDirPage(wpSelectDir, + 'Select Personal Data Directory', 'Where should personal data files be installed?', + 'Select the folder in which Setup should install personal data files, then click Next.', + False, ''); + DataDirPage.Add(''); + + { Set default values, using settings that were stored last time if possible } + + UserPage.Values[0] := GetPreviousData('Name', ExpandConstant('{sysuserinfoname}')); + UserPage.Values[1] := GetPreviousData('Company', ExpandConstant('{sysuserinfoorg}')); + + case GetPreviousData('UsageMode', '') of + 'light': UsagePage.SelectedValueIndex := 0; + 'sponsored': UsagePage.SelectedValueIndex := 1; + 'paid': UsagePage.SelectedValueIndex := 2; + else + UsagePage.SelectedValueIndex := 1; + end; + + DataDirPage.Values[0] := GetPreviousData('DataDir', ''); +end; + +procedure RegisterPreviousData(PreviousDataKey: Integer); +var + UsageMode: String; +begin + { Store the settings so we can restore them next time } + SetPreviousData(PreviousDataKey, 'Name', UserPage.Values[0]); + SetPreviousData(PreviousDataKey, 'Company', UserPage.Values[1]); + case UsagePage.SelectedValueIndex of + 0: UsageMode := 'light'; + 1: UsageMode := 'sponsored'; + 2: UsageMode := 'paid'; + end; + SetPreviousData(PreviousDataKey, 'UsageMode', UsageMode); + SetPreviousData(PreviousDataKey, 'DataDir', DataDirPage.Values[0]); +end; + +function ShouldSkipPage(PageID: Integer): Boolean; +begin + { Skip pages that shouldn't be shown } + if (PageID = LightMsgPage.ID) and (UsagePage.SelectedValueIndex <> 0) then + Result := True + else if (PageID = KeyPage.ID) and (UsagePage.SelectedValueIndex <> 2) then + Result := True + else + Result := False; +end; + +function NextButtonClick(CurPageID: Integer): Boolean; +var + I: Integer; +begin + { Validate certain pages before allowing the user to proceed } + if CurPageID = UserPage.ID then begin + if UserPage.Values[0] = '' then begin + MsgBox('You must enter your name.', mbError, MB_OK); + Result := False; + end else begin + if DataDirPage.Values[0] = '' then + DataDirPage.Values[0] := 'C:\' + UserPage.Values[0]; + Result := True; + end; + end else if CurPageID = KeyPage.ID then begin + { Just to show how 'OutputProgress' pages work. + Always use a try..finally between the Show and Hide calls as shown below. } + ProgressPage.SetText('Authorizing registration key...', ''); + ProgressPage.SetProgress(0, 0); + ProgressPage.Show; + try + for I := 0 to 10 do begin + ProgressPage.SetProgress(I, 10); + Sleep(100); + end; + finally + ProgressPage.Hide; + end; + if GetSHA1OfString('codedlg' + KeyPage.Values[0]) = '8013f310d340dab18a0d0cda2b5b115d2dcd97e4' then + Result := True + else begin + MsgBox('You must enter a valid registration key. (Hint: The key is "inno".)', mbError, MB_OK); + Result := False; + end; + end else + Result := True; +end; + +function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, + MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String; +var + S: String; +begin + { Fill the 'Ready Memo' with the normal settings and the custom settings } + S := ''; + S := S + 'Personal Information:' + NewLine; + S := S + Space + UserPage.Values[0] + NewLine; + if UserPage.Values[1] <> '' then + S := S + Space + UserPage.Values[1] + NewLine; + S := S + NewLine; + + S := S + 'Usage Mode:' + NewLine + Space; + case UsagePage.SelectedValueIndex of + 0: S := S + 'Light mode'; + 1: S := S + 'Sponsored mode'; + 2: S := S + 'Paid mode'; + end; + S := S + NewLine + NewLine; + + S := S + MemoDirInfo + NewLine; + S := S + Space + DataDirPage.Values[0] + ' (personal data files)' + NewLine; + + Result := S; +end; + +function GetUser(Param: String): String; +begin + { Return a user value } + { Could also be split into separate GetUserName and GetUserCompany functions } + if Param = 'Name' then + Result := UserPage.Values[0] + else if Param = 'Company' then + Result := UserPage.Values[1]; +end; + +function GetDataDir(Param: String): String; +begin + { Return the selected DataDir } + Result := DataDirPage.Values[0]; +end; diff --git a/Examples/CodeDll.iss b/Examples/CodeDll.iss new file mode 100644 index 00000000..ec5ebdc3 --- /dev/null +++ b/Examples/CodeDll.iss @@ -0,0 +1,106 @@ +; -- CodeDll.iss -- +; +; This script shows how to call functions in external DLLs (like Windows API functions) +; at runtime and how to perform direct callbacks from these functions to functions +; in the script. + +[Setup] +AppName=My Program +AppVersion=1.5 +WizardStyle=modern +DefaultDirName={autopf}\My Program +DisableProgramGroupPage=yes +DisableWelcomePage=no +UninstallDisplayIcon={app}\MyProg.exe +OutputDir=userdocs:Inno Setup Examples Output + +[Files] +Source: "MyProg.exe"; DestDir: "{app}" +Source: "MyProg.chm"; DestDir: "{app}" +Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme +; Install our DLL to {app} so we can access it at uninstall time. +; Use "Flags: dontcopy" if you don't need uninstall time access. +Source: "MyDll.dll"; DestDir: "{app}" + +[Code] +const + MB_ICONINFORMATION = $40; + +// Importing a Unicode Windows API function. +function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; +external 'MessageBoxW@user32.dll stdcall'; + +// Importing an ANSI custom DLL function, first for Setup, then for uninstall. +procedure MyDllFuncSetup(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal); +external 'MyDllFunc@files:MyDll.dll stdcall setuponly'; + +procedure MyDllFuncUninstall(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal); +external 'MyDllFunc@{app}\MyDll.dll stdcall uninstallonly'; + +// Importing an ANSI function for a DLL which might not exist at runtime. +procedure DelayLoadedFunc(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal); +external 'DllFunc@DllWhichMightNotExist.dll stdcall delayload'; + +function NextButtonClick(CurPage: Integer): Boolean; +var + hWnd: Integer; +begin + if CurPage = wpWelcome then begin + hWnd := StrToInt(ExpandConstant('{wizardhwnd}')); + + MessageBox(hWnd, 'Hello from Windows API function', 'MessageBoxA', MB_OK or MB_ICONINFORMATION); + + MyDllFuncSetup(hWnd, 'Hello from custom DLL function', 'MyDllFunc', MB_OK or MB_ICONINFORMATION); + + try + // If this DLL does not exist (it shouldn't), an exception will be raised. Press F9 to continue. + DelayLoadedFunc(hWnd, 'Hello from delay loaded function', 'DllFunc', MB_OK or MB_ICONINFORMATION); + except + // + end; + end; + Result := True; +end; + +procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); +begin + // Call our function just before the actual uninstall process begins. + if CurUninstallStep = usUninstall then begin + MyDllFuncUninstall(0, 'Hello from custom DLL function', 'MyDllFunc', MB_OK or MB_ICONINFORMATION); + + // Now that we're finished with it, unload MyDll.dll from memory. + // We have to do this so that the uninstaller will be able to remove the DLL and the {app} directory. + UnloadDLL(ExpandConstant('{app}\MyDll.dll')); + end; +end; + +// The following shows how to use callbacks. + +function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: Longword): Longword; +external 'SetTimer@user32.dll stdcall'; + +function KillTimer(hWnd, nIDEvent: Longword): Bool; +external 'KillTimer@user32.dll stdcall'; + +var + TimerID, TimerCount: Integer; + +procedure MyTimerProc(Arg1, Arg2, Arg3, Arg4: Longword); +begin + if WizardForm <> nil then begin + Inc(TimerCount); + WizardForm.BeveledLabel.Caption := ' Timer! ' + IntToStr(TimerCount) + ' '; + WizardForm.BeveledLabel.Visible := True; + end; +end; + +procedure InitializeWizard; +begin + TimerID := SetTimer(0, 0, 1000, CreateCallback(@MyTimerProc)); +end; + +procedure DeinitializeSetup; +begin + if TimerID <> 0 then + KillTimer(0, TimerID); +end; diff --git a/Examples/CodeDownloadFiles.iss b/Examples/CodeDownloadFiles.iss new file mode 100644 index 00000000..0d3107e9 --- /dev/null +++ b/Examples/CodeDownloadFiles.iss @@ -0,0 +1,68 @@ +; -- CodeDownloadFiles.iss -- +; +; This script shows how the CreateDownloadPage support function can be used to +; download temporary files while showing the download progress to the user. + +[Setup] +AppName=My Program +AppVersion=1.5 +WizardStyle=modern +DefaultDirName={autopf}\My Program +DefaultGroupName=My Program +UninstallDisplayIcon={app}\MyProg.exe +OutputDir=userdocs:Inno Setup Examples Output + +[Files] +; Place any regular files here +Source: "MyProg.exe"; DestDir: "{app}"; +Source: "MyProg.chm"; DestDir: "{app}"; +Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme; +; These files will be downloaded +Source: "{tmp}\innosetup-latest.exe"; DestDir: "{app}"; Flags: external +Source: "{tmp}\ISCrypt.dll"; DestDir: "{app}"; Flags: external + +[Icons] +Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" + +[Code] +var + DownloadPage: TDownloadWizardPage; + +function OnDownloadProgress(const Url, FileName: String; const Progress, ProgressMax: Int64): Boolean; +begin + if Progress = ProgressMax then + Log(Format('Successfully downloaded file to {tmp}: %s', [FileName])); + Result := True; +end; + +procedure InitializeWizard; +begin + DownloadPage := CreateDownloadPage(SetupMessage(msgWizardPreparing), SetupMessage(msgPreparingDesc), @OnDownloadProgress); + DownloadPage.ShowBaseNameInsteadOfUrl := True; +end; + +function NextButtonClick(CurPageID: Integer): Boolean; +begin + if CurPageID = wpReady then begin + DownloadPage.Clear; + // Use AddEx to specify a username and password + DownloadPage.Add('https://jrsoftware.org/download.php/is.exe?dontcount=1', 'innosetup-latest.exe', ''); + DownloadPage.Add('https://jrsoftware.org/download.php/iscrypt.dll?dontcount=1', 'ISCrypt.dll', '2f6294f9aa09f59a574b5dcd33be54e16b39377984f3d5658cda44950fa0f8fc'); + DownloadPage.Show; + try + try + DownloadPage.Download; // This downloads the files to {tmp} + Result := True; + except + if DownloadPage.AbortedByUser then + Log('Aborted by user.') + else + SuppressibleMsgBox(AddPeriod(GetExceptionMessage), mbCriticalError, MB_OK, IDOK); + Result := False; + end; + finally + DownloadPage.Hide; + end; + end else + Result := True; +end; \ No newline at end of file diff --git a/Examples/CodeExample1.iss b/Examples/CodeExample1.iss new file mode 100644 index 00000000..99c209fb --- /dev/null +++ b/Examples/CodeExample1.iss @@ -0,0 +1,167 @@ +; -- CodeExample1.iss -- +; +; This script shows various things you can achieve using a [Code] section. + +[Setup] +AppName=My Program +AppVersion=1.5 +WizardStyle=modern +DisableWelcomePage=no +DefaultDirName={code:MyConst}\My Program +DefaultGroupName=My Program +UninstallDisplayIcon={app}\MyProg.exe +InfoBeforeFile=Readme.txt +OutputDir=userdocs:Inno Setup Examples Output + +[Files] +Source: "MyProg.exe"; DestDir: "{app}"; Check: MyProgCheck; BeforeInstall: BeforeMyProgInstall('MyProg.exe'); AfterInstall: AfterMyProgInstall('MyProg.exe') +Source: "MyProg.chm"; DestDir: "{app}"; Check: MyProgCheck; BeforeInstall: BeforeMyProgInstall('MyProg.chm'); AfterInstall: AfterMyProgInstall('MyProg.chm') +Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme + +[Icons] +Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" + +[Code] +var + MyProgChecked: Boolean; + MyProgCheckResult: Boolean; + FinishedInstall: Boolean; + +function InitializeSetup(): Boolean; +begin + Log('InitializeSetup called'); + Result := MsgBox('InitializeSetup:' #13#13 'Setup is initializing. Do you really want to start setup?', mbConfirmation, MB_YESNO) = idYes; + if Result = False then + MsgBox('InitializeSetup:' #13#13 'Ok, bye bye.', mbInformation, MB_OK); +end; + +procedure InitializeWizard; +begin + Log('InitializeWizard called'); +end; + + +procedure InitializeWizard2; +begin + Log('InitializeWizard2 called'); +end; + +procedure DeinitializeSetup(); +var + FileName: String; + ResultCode: Integer; +begin + Log('DeinitializeSetup called'); + if FinishedInstall then begin + if MsgBox('DeinitializeSetup:' #13#13 'The [Code] scripting demo has finished. Do you want to uninstall My Program now?', mbConfirmation, MB_YESNO) = idYes then begin + FileName := ExpandConstant('{uninstallexe}'); + if not Exec(FileName, '', '', SW_SHOWNORMAL, ewNoWait, ResultCode) then + MsgBox('DeinitializeSetup:' #13#13 'Execution of ''' + FileName + ''' failed. ' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK); + end else + MsgBox('DeinitializeSetup:' #13#13 'Ok, bye bye.', mbInformation, MB_OK); + end; +end; + +procedure CurStepChanged(CurStep: TSetupStep); +begin + Log('CurStepChanged(' + IntToStr(Ord(CurStep)) + ') called'); + if CurStep = ssPostInstall then + FinishedInstall := True; +end; + +procedure CurInstallProgressChanged(CurProgress, MaxProgress: Integer); +begin + Log('CurInstallProgressChanged(' + IntToStr(CurProgress) + ', ' + IntToStr(MaxProgress) + ') called'); +end; + +function NextButtonClick(CurPageID: Integer): Boolean; +var + ResultCode: Integer; +begin + Log('NextButtonClick(' + IntToStr(CurPageID) + ') called'); + case CurPageID of + wpSelectDir: + MsgBox('NextButtonClick:' #13#13 'You selected: ''' + WizardDirValue + '''.', mbInformation, MB_OK); + wpSelectProgramGroup: + MsgBox('NextButtonClick:' #13#13 'You selected: ''' + WizardGroupValue + '''.', mbInformation, MB_OK); + wpReady: + begin + if MsgBox('NextButtonClick:' #13#13 'Using the script, files can be extracted before the installation starts. For example we could extract ''MyProg.exe'' now and run it.' #13#13 'Do you want to do this?', mbConfirmation, MB_YESNO) = idYes then begin + ExtractTemporaryFile('myprog.exe'); + if not ExecAsOriginalUser(ExpandConstant('{tmp}\myprog.exe'), '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then + MsgBox('NextButtonClick:' #13#13 'The file could not be executed. ' + SysErrorMessage(ResultCode) + '.', mbError, MB_OK); + end; + BringToFrontAndRestore(); + MsgBox('NextButtonClick:' #13#13 'The normal installation will now start.', mbInformation, MB_OK); + end; + end; + + Result := True; +end; + +function BackButtonClick(CurPageID: Integer): Boolean; +begin + Log('BackButtonClick(' + IntToStr(CurPageID) + ') called'); + Result := True; +end; + +function ShouldSkipPage(PageID: Integer): Boolean; +begin + Log('ShouldSkipPage(' + IntToStr(PageID) + ') called'); + { Skip wpInfoBefore page; show all others } + case PageID of + wpInfoBefore: + Result := True; + else + Result := False; + end; +end; + +procedure CurPageChanged(CurPageID: Integer); +begin + Log('CurPageChanged(' + IntToStr(CurPageID) + ') called'); + case CurPageID of + wpWelcome: + MsgBox('CurPageChanged:' #13#13 'Welcome to the [Code] scripting demo. This demo will show you some possibilities of the scripting support.' #13#13 'The scripting engine used is RemObjects Pascal Script by Carlo Kok. See http://www.remobjects.com/ps for more information.', mbInformation, MB_OK); + wpFinished: + MsgBox('CurPageChanged:' #13#13 'Welcome to final page of this demo. Click Finish to exit.', mbInformation, MB_OK); + end; +end; + +function PrepareToInstall(var NeedsRestart: Boolean): String; +begin + Log('PrepareToInstall() called'); + if MsgBox('PrepareToInstall:' #13#13 'Setup is preparing to install. Using the script you can install any prerequisites, abort Setup on errors, and request restarts. Do you want to return an error now?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = idYes then + Result := '.' + else + Result := ''; +end; + +function MyProgCheck(): Boolean; +begin + Log('MyProgCheck() called'); + if not MyProgChecked then begin + MyProgCheckResult := MsgBox('MyProgCheck:' #13#13 'Using the script you can decide at runtime to include or exclude files from the installation. Do you want to install MyProg.exe and MyProg.chm to ' + ExtractFilePath(CurrentFileName) + '?', mbConfirmation, MB_YESNO) = idYes; + MyProgChecked := True; + end; + Result := MyProgCheckResult; +end; + +procedure BeforeMyProgInstall(S: String); +begin + Log('BeforeMyProgInstall(''' + S + ''') called'); + MsgBox('BeforeMyProgInstall:' #13#13 'Setup is now going to install ' + S + ' as ' + CurrentFileName + '.', mbInformation, MB_OK); +end; + +procedure AfterMyProgInstall(S: String); +begin + Log('AfterMyProgInstall(''' + S + ''') called'); + MsgBox('AfterMyProgInstall:' #13#13 'Setup just installed ' + S + ' as ' + CurrentFileName + '.', mbInformation, MB_OK); +end; + +function MyConst(Param: String): String; +begin + Log('MyConst(''' + Param + ''') called'); + Result := ExpandConstant('{autopf}'); +end; + diff --git a/Examples/CodePrepareToInstall.iss b/Examples/CodePrepareToInstall.iss new file mode 100644 index 00000000..581273bd --- /dev/null +++ b/Examples/CodePrepareToInstall.iss @@ -0,0 +1,122 @@ +; -- CodePrepareToInstall.iss -- +; +; This script shows how the PrepareToInstall event function can be used to +; install prerequisites and handle any reboots in between, while remembering +; user selections across reboots. + +[Setup] +AppName=My Program +AppVersion=1.5 +WizardStyle=modern +DefaultDirName={autopf}\My Program +DefaultGroupName=My Program +UninstallDisplayIcon={app}\MyProg.exe +OutputDir=userdocs:Inno Setup Examples Output + +[Files] +; Place any prerequisite files here, for example: +; Source: "MyProg-Prerequisite-setup.exe"; Flags: dontcopy +; Place any regular files here, so *after* all your prerequisites. +Source: "MyProg.exe"; DestDir: "{app}"; +Source: "MyProg.chm"; DestDir: "{app}"; +Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme; + +[Icons] +Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" + +[Code] +const + (*** Customize the following to your own name. ***) + RunOnceName = 'My Program Setup restart'; + + QuitMessageReboot = 'The installation of a prerequisite program was not completed. You will need to restart your computer to complete that installation.'#13#13'After restarting your computer, Setup will continue next time an administrator logs in.'; + QuitMessageError = 'Error. Cannot continue.'; + +var + Restarted: Boolean; + +function InitializeSetup(): Boolean; +begin + Restarted := ExpandConstant('{param:restart|0}') = '1'; + + if not Restarted then begin + Result := not RegValueExists(HKA, 'Software\Microsoft\Windows\CurrentVersion\RunOnce', RunOnceName); + if not Result then + MsgBox(QuitMessageReboot, mbError, mb_Ok); + end else + Result := True; +end; + +function DetectAndInstallPrerequisites: Boolean; +begin + (*** Place your prerequisite detection and extraction+installation code below. ***) + (*** Return False if missing prerequisites were detected but their installation failed, else return True. ***) + + // + //extraction example: ExtractTemporaryFile('MyProg-Prerequisite-setup.exe'); + + Result := True; + + (*** Remove the following block! Used by this demo to simulate a prerequisite install requiring a reboot. ***) + if not Restarted then + RestartReplace(ParamStr(0), ''); +end; + +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: String; +begin + RunOnceData := Quote(ExpandConstant('{srcexe}')) + ' /restart=1'; + RunOnceData := AddParam(RunOnceData, 'LANG', ExpandConstant('{language}')); + RunOnceData := AddParam(RunOnceData, 'DIR', Quote(WizardDirValue)); + RunOnceData := AddParam(RunOnceData, 'GROUP', Quote(WizardGroupValue)); + if WizardNoIcons then + RunOnceData := AddSimpleParam(RunOnceData, 'NOICONS'); + RunOnceData := AddParam(RunOnceData, 'TYPE', Quote(WizardSetupType(False))); + RunOnceData := AddParam(RunOnceData, 'COMPONENTS', Quote(WizardSelectedComponents(False))); + RunOnceData := AddParam(RunOnceData, 'TASKS', Quote(WizardSelectedTasks(False))); + + (*** Place any custom user selection you want to remember below. ***) + + // + + RegWriteStringValue(HKA, 'Software\Microsoft\Windows\CurrentVersion\RunOnce', RunOnceName, RunOnceData); +end; + +function PrepareToInstall(var NeedsRestart: Boolean): String; +var + ChecksumBefore, ChecksumAfter: String; +begin + ChecksumBefore := MakePendingFileRenameOperationsChecksum; + if DetectAndInstallPrerequisites then begin + ChecksumAfter := MakePendingFileRenameOperationsChecksum; + if ChecksumBefore <> ChecksumAfter then begin + CreateRunOnceEntry; + NeedsRestart := True; + Result := QuitMessageReboot; + end; + end else + Result := QuitMessageError; +end; + +function ShouldSkipPage(PageID: Integer): Boolean; +begin + Result := Restarted; +end; + diff --git a/Examples/Components.iss b/Examples/Components.iss new file mode 100644 index 00000000..3c1ad42b --- /dev/null +++ b/Examples/Components.iss @@ -0,0 +1,34 @@ +; -- Components.iss -- +; Demonstrates a components-based installation. + +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! + +[Setup] +AppName=My Program +AppVersion=1.5 +WizardStyle=modern +DefaultDirName={autopf}\My Program +DefaultGroupName=My Program +UninstallDisplayIcon={app}\MyProg.exe +OutputDir=userdocs:Inno Setup Examples Output + +[Types] +Name: "full"; Description: "Full installation" +Name: "compact"; Description: "Compact installation" +Name: "custom"; Description: "Custom installation"; Flags: iscustom + +[Components] +Name: "program"; Description: "Program Files"; Types: full compact custom; Flags: fixed +Name: "help"; Description: "Help File"; Types: full +Name: "readme"; Description: "Readme File"; Types: full +Name: "readme\en"; Description: "English"; Flags: exclusive +Name: "readme\de"; Description: "German"; Flags: exclusive + +[Files] +Source: "MyProg.exe"; DestDir: "{app}"; Components: program +Source: "MyProg.chm"; DestDir: "{app}"; Components: help +Source: "Readme.txt"; DestDir: "{app}"; Components: readme\en; Flags: isreadme +Source: "Readme-German.txt"; DestName: "Liesmich.txt"; DestDir: "{app}"; Components: readme\de; Flags: isreadme + +[Icons] +Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" diff --git a/Examples/Example1.iss b/Examples/Example1.iss new file mode 100644 index 00000000..7ead96e7 --- /dev/null +++ b/Examples/Example1.iss @@ -0,0 +1,23 @@ +; -- Example1.iss -- +; Demonstrates copying 3 files and creating an icon. + +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! + +[Setup] +AppName=My Program +AppVersion=1.5 +WizardStyle=modern +DefaultDirName={autopf}\My Program +DefaultGroupName=My Program +UninstallDisplayIcon={app}\MyProg.exe +Compression=lzma2 +SolidCompression=yes +OutputDir=userdocs:Inno Setup Examples Output + +[Files] +Source: "MyProg.exe"; DestDir: "{app}" +Source: "MyProg.chm"; DestDir: "{app}" +Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme + +[Icons] +Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" diff --git a/Examples/Example2.iss b/Examples/Example2.iss new file mode 100644 index 00000000..293e86a7 --- /dev/null +++ b/Examples/Example2.iss @@ -0,0 +1,27 @@ +; -- Example2.iss -- +; Same as Example1.iss, but creates its icon in the Programs folder of the +; Start Menu instead of in a subfolder, and also creates a desktop icon. + +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! + +[Setup] +AppName=My Program +AppVersion=1.5 +WizardStyle=modern +DefaultDirName={autopf}\My Program +; Since no icons will be created in "{group}", we don't need the wizard +; to ask for a Start Menu folder name: +DisableProgramGroupPage=yes +UninstallDisplayIcon={app}\MyProg.exe +Compression=lzma2 +SolidCompression=yes +OutputDir=userdocs:Inno Setup Examples Output + +[Files] +Source: "MyProg.exe"; DestDir: "{app}" +Source: "MyProg.chm"; DestDir: "{app}" +Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme + +[Icons] +Name: "{autoprograms}\My Program"; Filename: "{app}\MyProg.exe" +Name: "{autodesktop}\My Program"; Filename: "{app}\MyProg.exe" diff --git a/Examples/Example3.iss b/Examples/Example3.iss new file mode 100644 index 00000000..7b49a2a2 --- /dev/null +++ b/Examples/Example3.iss @@ -0,0 +1,62 @@ +; -- Example3.iss -- +; Same as Example1.iss, but creates some registry entries too and allows the end +; use to choose the install mode (administrative or non administrative). + +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! + +[Setup] +AppName=My Program +AppVersion=1.5 +WizardStyle=modern +DefaultDirName={autopf}\My Program +DefaultGroupName=My Program +UninstallDisplayIcon={app}\MyProg.exe +Compression=lzma2 +SolidCompression=yes +OutputDir=userdocs:Inno Setup Examples Output +ChangesAssociations=yes +UserInfoPage=yes +PrivilegesRequiredOverridesAllowed=dialog + +[Files] +Source: "MyProg.exe"; DestDir: "{app}" +Source: "MyProg.chm"; DestDir: "{app}" +Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme + +[Icons] +Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" + +; NOTE: Most apps do not need registry entries to be pre-created. If you +; don't know what the registry is or if you need to use it, then chances are +; you don't need a [Registry] section. + +[Registry] +; Create "Software\My Company\My Program" keys under CURRENT_USER or +; LOCAL_MACHINE depending on administrative or non administrative install +; mode. The flags tell it to always delete the "My Program" key upon +; uninstall, and delete the "My Company" key if there is nothing left in it. +Root: HKA; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty +Root: HKA; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey +Root: HKA; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "Language"; ValueData: "{language}" +; Associate .myp files with My Program (requires ChangesAssociations=yes) +Root: HKA; Subkey: "Software\Classes\.myp\OpenWithProgids"; ValueType: string; ValueName: "MyProgramFile.myp"; ValueData: ""; Flags: uninsdeletevalue +Root: HKA; Subkey: "Software\Classes\MyProgramFile.myp"; ValueType: string; ValueName: ""; ValueData: "My Program File"; Flags: uninsdeletekey +Root: HKA; Subkey: "Software\Classes\MyProgramFile.myp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\MyProg.exe,0" +Root: HKA; Subkey: "Software\Classes\MyProgramFile.myp\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\MyProg.exe"" ""%1""" +Root: HKA; Subkey: "Software\Classes\Applications\MyProg.exe\SupportedTypes"; ValueType: string; ValueName: ".myp"; ValueData: "" +; HKA (and HKCU) should only be used for settings which are compatible with +; roaming profiles so settings like paths should be written to HKLM, which +; is only possible in administrative install mode. +Root: HKLM; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty; Check: IsAdminInstallMode +Root: HKLM; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey; Check: IsAdminInstallMode +Root: HKLM; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"; Check: IsAdminInstallMode +; User specific settings should always be written to HKCU, which should only +; be done in non administrative install mode. Also see ShouldSkipPage below. +Root: HKCU; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "UserName"; ValueData: "{userinfoname}"; Check: not IsAdminInstallMode +Root: HKCU; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "UserOrganization"; ValueData: "{userinfoorg}"; Check: not IsAdminInstallMode + +[Code] +function ShouldSkipPage(PageID: Integer): Boolean; +begin + Result := IsAdminInstallMode and (PageID = wpUserInfo); +end; diff --git a/Examples/ISPPExample1.iss b/Examples/ISPPExample1.iss new file mode 100644 index 00000000..d9cb43bc --- /dev/null +++ b/Examples/ISPPExample1.iss @@ -0,0 +1,38 @@ +// -- ISPPExample1.iss -- +// +// This script shows various basic things you can achieve using Inno Setup Preprocessor (ISPP). +// To enable commented #define's, either remove the '//' or use ISCC with the /D switch. +// +#pragma verboselevel 9 +// +//#define AppEnterprise +// +#ifdef AppEnterprise + #define AppName "My Program Enterprise Edition" +#else + #define AppName "My Program" +#endif +// +#define AppVersion GetVersionNumbersString(AddBackslash(SourcePath) + "MyProg.exe") +// +[Setup] +AppName={#AppName} +AppVersion={#AppVersion} +WizardStyle=modern +DefaultDirName={autopf}\{#AppName} +DefaultGroupName={#AppName} +UninstallDisplayIcon={app}\MyProg.exe +LicenseFile={#file AddBackslash(SourcePath) + "ISPPExample1License.txt"} +VersionInfoVersion={#AppVersion} +OutputDir=userdocs:Inno Setup Examples Output + +[Files] +Source: "MyProg.exe"; DestDir: "{app}" +#ifdef AppEnterprise +Source: "MyProg.chm"; DestDir: "{app}" +#endif +Source: "Readme.txt"; DestDir: "{app}"; \ + Flags: isreadme + +[Icons] +Name: "{group}\{#AppName}"; Filename: "{app}\MyProg.exe" diff --git a/Examples/ISPPExample1License.txt b/Examples/ISPPExample1License.txt new file mode 100644 index 00000000..a6468eb8 --- /dev/null +++ b/Examples/ISPPExample1License.txt @@ -0,0 +1,4 @@ +#pragma option -e+ +{#AppName} version {#AppVersion} License + +Bla bla bla \ No newline at end of file diff --git a/Examples/Languages.iss b/Examples/Languages.iss new file mode 100644 index 00000000..9304b7a9 --- /dev/null +++ b/Examples/Languages.iss @@ -0,0 +1,57 @@ +; -- Languages.iss -- +; Demonstrates a multilingual installation. + +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! + +[Setup] +AppName={cm:MyAppName} +AppId=My Program +AppVerName={cm:MyAppVerName,1.5} +WizardStyle=modern +DefaultDirName={autopf}\{cm:MyAppName} +DefaultGroupName={cm:MyAppName} +UninstallDisplayIcon={app}\MyProg.exe +VersionInfoDescription=My Program Setup +VersionInfoProductName=My Program +OutputDir=userdocs:Inno Setup Examples Output +MissingMessagesWarning=yes +NotRecognizedMessagesWarning=yes +; Uncomment the following line to disable the "Select Setup Language" +; dialog and have it rely solely on auto-detection. +;ShowLanguageDialog=no + +[Languages] +Name: en; MessagesFile: "compiler:Default.isl" +Name: nl; MessagesFile: "compiler:Languages\Dutch.isl" +Name: de; MessagesFile: "compiler:Languages\German.isl" + +[Messages] +en.BeveledLabel=English +nl.BeveledLabel=Nederlands +de.BeveledLabel=Deutsch + +[CustomMessages] +en.MyDescription=My description +en.MyAppName=My Program +en.MyAppVerName=My Program %1 +nl.MyDescription=Mijn omschrijving +nl.MyAppName=Mijn programma +nl.MyAppVerName=Mijn programma %1 +de.MyDescription=Meine Beschreibung +de.MyAppName=Meine Anwendung +de.MyAppVerName=Meine Anwendung %1 + +[Files] +Source: "MyProg.exe"; DestDir: "{app}" +Source: "MyProg.chm"; DestDir: "{app}"; Languages: en +Source: "Readme.txt"; DestDir: "{app}"; Languages: en; Flags: isreadme +Source: "Readme-Dutch.txt"; DestName: "Leesmij.txt"; DestDir: "{app}"; Languages: nl; Flags: isreadme +Source: "Readme-German.txt"; DestName: "Liesmich.txt"; DestDir: "{app}"; Languages: de; Flags: isreadme + +[Icons] +Name: "{group}\{cm:MyAppName}"; Filename: "{app}\MyProg.exe" +Name: "{group}\{cm:UninstallProgram,{cm:MyAppName}}"; Filename: "{uninstallexe}" + +[Tasks] +; The following task doesn't do anything and is only meant to show [CustomMessages] usage +Name: mytask; Description: "{cm:MyDescription}" diff --git a/Examples/License.txt b/Examples/License.txt new file mode 100644 index 00000000..451df922 --- /dev/null +++ b/Examples/License.txt @@ -0,0 +1 @@ +This is the LICENSE file for My Program. diff --git a/Examples/MyDll.dll b/Examples/MyDll.dll new file mode 100644 index 00000000..18d7f6e3 Binary files /dev/null and b/Examples/MyDll.dll differ diff --git a/Examples/MyDll/C#/MyDll.cs b/Examples/MyDll/C#/MyDll.cs new file mode 100644 index 00000000..497c002d --- /dev/null +++ b/Examples/MyDll/C#/MyDll.cs @@ -0,0 +1,25 @@ +using System; + +using System.Runtime.InteropServices; +using RGiesecke.DllExport; + +namespace Mydll +{ + public class Mydll + { + [DllExport("MyDllFunc", CallingConvention=CallingConvention.StdCall)] + public static void MyDllFunc(IntPtr hWnd, [MarshalAs(UnmanagedType.LPStr)] string text, [MarshalAs(UnmanagedType.LPStr)] string caption, int options) + { + MessageBox(hWnd, text, caption, options); + } + + [DllExport("MyDllFuncW", CallingConvention=CallingConvention.StdCall)] + public static void MyDllFuncW(IntPtr hWnd, string text, string caption, int options) + { + MessageBox(hWnd, text, caption, options); + } + + [DllImport("user32.dll", CharSet=CharSet.Auto)] + static extern int MessageBox(IntPtr hWnd, String text, String caption, int options); + } +} diff --git a/Examples/MyDll/C#/MyDll.csproj b/Examples/MyDll/C#/MyDll.csproj new file mode 100644 index 00000000..12234b19 --- /dev/null +++ b/Examples/MyDll/C#/MyDll.csproj @@ -0,0 +1,63 @@ + + + + + Debug + AnyCPU + {79237A5C-6C62-400A-BBDD-3DA1CA327973} + Library + Properties + MyDll + MyDll + v4.5 + 512 + + + true + full + false + .\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + .\ + TRACE + prompt + 4 + x86 + + + + packages\UnmanagedExports.1.2.7\lib\net\RGiesecke.DllExport.Metadata.dll + False + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Examples/MyDll/C#/MyDll.sln b/Examples/MyDll/C#/MyDll.sln new file mode 100644 index 00000000..6db437f1 --- /dev/null +++ b/Examples/MyDll/C#/MyDll.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.40629.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyDll", "MyDll.csproj", "{79237A5C-6C62-400A-BBDD-3DA1CA327973}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {79237A5C-6C62-400A-BBDD-3DA1CA327973}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {79237A5C-6C62-400A-BBDD-3DA1CA327973}.Debug|Any CPU.Build.0 = Debug|Any CPU + {79237A5C-6C62-400A-BBDD-3DA1CA327973}.Release|Any CPU.ActiveCfg = Release|Any CPU + {79237A5C-6C62-400A-BBDD-3DA1CA327973}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Examples/MyDll/C#/Properties/AssemblyInfo.cs b/Examples/MyDll/C#/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..6b4d07d4 --- /dev/null +++ b/Examples/MyDll/C#/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("MyDll")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MyDll")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("711cc3c2-07db-46ca-b34b-ba06f4edcbcd")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Examples/MyDll/C#/packages.config b/Examples/MyDll/C#/packages.config new file mode 100644 index 00000000..a7c0bc38 --- /dev/null +++ b/Examples/MyDll/C#/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Examples/MyDll/C/MyDll.c b/Examples/MyDll/C/MyDll.c new file mode 100644 index 00000000..b6ff92c0 --- /dev/null +++ b/Examples/MyDll/C/MyDll.c @@ -0,0 +1,6 @@ +#include + +void __stdcall MyDllFunc(HWND hWnd, char *lpText, char *lpCaption, UINT uType) +{ + MessageBox(hWnd, lpText, lpCaption, uType); +} \ No newline at end of file diff --git a/Examples/MyDll/C/MyDll.def b/Examples/MyDll/C/MyDll.def new file mode 100644 index 00000000..4f540231 --- /dev/null +++ b/Examples/MyDll/C/MyDll.def @@ -0,0 +1,2 @@ +EXPORTS + MyDllFunc \ No newline at end of file diff --git a/Examples/MyDll/C/MyDll.dsp b/Examples/MyDll/C/MyDll.dsp new file mode 100644 index 00000000..565ec481 --- /dev/null +++ b/Examples/MyDll/C/MyDll.dsp @@ -0,0 +1,76 @@ +# Microsoft Developer Studio Project File - Name="MyDll" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=MyDll - Win32 Release +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "MyDll.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "MyDll.mak" CFG="MyDll - Win32 Release" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "MyDll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "." +# PROP Intermediate_Dir "." +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYDLL_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MYDLL_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x413 /d "NDEBUG" +# ADD RSC /l 0x413 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# Begin Target + +# Name "MyDll - Win32 Release" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\MyDll.c +# End Source File +# Begin Source File + +SOURCE=.\MyDll.def +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/Examples/MyDll/Delphi/MyDll.dpr b/Examples/MyDll/Delphi/MyDll.dpr new file mode 100644 index 00000000..202ce844 --- /dev/null +++ b/Examples/MyDll/Delphi/MyDll.dpr @@ -0,0 +1,14 @@ +library MyDll; + +uses + Windows; + +procedure MyDllFunc(hWnd: Integer; lpText, lpCaption: PAnsiChar; uType: Cardinal); stdcall; +begin + MessageBoxA(hWnd, lpText, lpCaption, uType); +end; + +exports MyDllFunc; + +begin +end. diff --git a/Examples/MyProg-Arm64.exe b/Examples/MyProg-Arm64.exe new file mode 100644 index 00000000..389416f6 Binary files /dev/null and b/Examples/MyProg-Arm64.exe differ diff --git a/Examples/MyProg-x64.exe b/Examples/MyProg-x64.exe new file mode 100644 index 00000000..f5a9057b Binary files /dev/null and b/Examples/MyProg-x64.exe differ diff --git a/Examples/MyProg.chm b/Examples/MyProg.chm new file mode 100644 index 00000000..1c885354 Binary files /dev/null and b/Examples/MyProg.chm differ diff --git a/Examples/MyProg.exe b/Examples/MyProg.exe new file mode 100644 index 00000000..f8709f58 Binary files /dev/null and b/Examples/MyProg.exe differ diff --git a/Examples/MyProg/Help/hh_contents.hhc b/Examples/MyProg/Help/hh_contents.hhc new file mode 100644 index 00000000..2ad4ee52 --- /dev/null +++ b/Examples/MyProg/Help/hh_contents.hhc @@ -0,0 +1,5 @@ + +
    +
  • +
+ diff --git a/Examples/MyProg/Help/hh_index.hhk b/Examples/MyProg/Help/hh_index.hhk new file mode 100644 index 00000000..3afa3c46 --- /dev/null +++ b/Examples/MyProg/Help/hh_index.hhk @@ -0,0 +1,3 @@ +
    +
  • +
diff --git a/Examples/MyProg/Help/hh_project.hhp b/Examples/MyProg/Help/hh_project.hhp new file mode 100644 index 00000000..cc58bdbb --- /dev/null +++ b/Examples/MyProg/Help/hh_project.hhp @@ -0,0 +1,18 @@ +[OPTIONS] +Compatibility=1.1 or later +Compiled file=MyProg.chm +Contents file=hh_contents.hhc +Default Window=main +Default topic=topic_myprog.htm +Display compile progress=Yes +Full-text search=Yes +Index file=hh_index.hhk +Language=0x409 English (United States) +Title=My Program Help + +[WINDOWS] +main=,"hh_contents.hhc","hh_index.hhk",,,,,,,0x2520,,0x300e,,,,,,,,0 + + +[INFOTYPES] + diff --git a/Examples/MyProg/Help/styles.css b/Examples/MyProg/Help/styles.css new file mode 100644 index 00000000..32fe1e1f --- /dev/null +++ b/Examples/MyProg/Help/styles.css @@ -0,0 +1,125 @@ +/* + Inno Setup + Copyright (C) 1997-2006 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + $jrsoftware: issrc/Examples/MyProg/Help/styles.css,v 1.1 2006/09/28 12:24:33 mlaan Exp $ +*/ + +BODY { + font: small arial, sans-serif; + margin: 0; +} +PRE, TT { + font: small "courier new", monospace; +} +P, H1, H2, H3, H4, H5, BLOCKQUOTE, PRE, FORM, OL, UL, LI, DL, DD, TABLE, .examplebox, DIV.margined { + /* only the end of paragraphs etc. has a margin */ + margin-top: 0; + margin-bottom: 0.6em; +} +UL, DD { + /* specify both of these for firefox compat. */ + margin-left: 0; + padding-left: 2em; +} +TABLE { + /* equivalent of cellspacing="0" */ + border-collapse: collapse; +} +TD { + /* equivalent of cellpadding="0" */ + padding: 0; + /* note: "baseline" is broken on IE6; it only aligns correctly when there's + a single line of text, and that text is directly inside the tag + (not inside a
). otherwise it behaves more like "top". + (firefox 1.5 and opera 9 don't have this problem) */ + vertical-align: baseline; +} +A:link, A:visited, A:active { + color: #008000; +} + +.small { + /* what we want is an 8pt font. 8pt/10pt = 80%, but on firefox that + actually creates a font smaller than 8pt, so use 82% */ + font-size: 82%; +} +.heading { + margin-top: 0.6em; + font-size: 120%; + font-weight: bold; +} +.indent { + margin-left: 2em; +} +PRE.nomargin { + margin: 0; +} +LI.compact { + margin-bottom: 2px; +} + +.topicheading { + background: ButtonFace; + color: WindowText; + padding: 5px 8px; + margin: 0; + border-bottom: 1px solid black; + font-size: 120%; + font-weight: bold; +} +.topicbody { + padding: 8px; +} + +.examplebox { + background: #f8f8f8; + color: black; + padding: 4px; + border: 1px solid #e0e0e0; + /* on IE6, if the content of the box is wider than the page, + the width of the box is increased. on firefox 1.5, by default + the box width stays the same, and the content is drawn outside + the box. that looks ugly. "overflow: auto" tells it to put a + scroll bar on the box when the content is too wide. (IE6 + apparently ignores "overflow: auto", at least here.) */ + overflow: auto; +} +.exampleheader { + font-size: 82%; + font-weight: bold; + margin-bottom: 0.6em; +} + + +DT.paramlist { + margin-bottom: 0.6em; +} +DD.paramlist { + /* give a little extra spacing between items */ + margin-bottom: 1.2em; +} + +DT.flaglist { + font-weight: bold; +} + +TD.cellleft { + white-space: nowrap; +} +TD.cellright { + padding-left: 2em; +} + +TABLE.setuphdr { + margin: 0; +} +TD.setuphdrl { + font-weight: bold; + white-space: nowrap; +} +TD.setuphdrr { + padding-left: 1em; +} diff --git a/Examples/MyProg/Help/topic_myprog.htm b/Examples/MyProg/Help/topic_myprog.htm new file mode 100644 index 00000000..8a6270c0 --- /dev/null +++ b/Examples/MyProg/Help/topic_myprog.htm @@ -0,0 +1,15 @@ + + + + +My Program Help + + + + +

My Program Help Contents

+
+

There is no help! This is just an example.

+
+ + diff --git a/Examples/MyProg/MyProg.c b/Examples/MyProg/MyProg.c new file mode 100644 index 00000000..a6df78b1 --- /dev/null +++ b/Examples/MyProg/MyProg.c @@ -0,0 +1,32 @@ +#include +#include + +#if defined(_X86_) + #define ARCHNOTE TEXT("\n\n(This EXE was compiled for the x86 architecture.)") +#elif defined(_AMD64_) + #define ARCHNOTE TEXT("\n\n(This EXE was compiled for the x64 architecture.)") +#elif defined(_M_ARM64) + #define ARCHNOTE TEXT("\n\n(This EXE was compiled for the Arm64 architecture.)") +#else + #error unknown arch +#endif + +int WinMainCRTStartup(void) +{ + // Work around bug in Windows XP Gold & SP1: If the application manifest + // specifies COMCTL32.DLL version 6.0 (to enable visual styles), we must + // call InitCommonControls() to ensure that we actually link to + // COMCTL32.DLL, otherwise calls to MessageBox() fail. (XP SP2 appears + // to fix this.) + InitCommonControls(); + + MessageBox(NULL, TEXT("Welcome to My Program.") ARCHNOTE, + TEXT("Hello"), MB_OK); + + MessageBox(NULL, TEXT("Thank you for using My Program.\n\n") + TEXT("(You can uninstall this by going to Add/Remove Programs in Control Panel.)"), + TEXT("Goodbye"), MB_OK); + + ExitProcess(0); + return 0; +} \ No newline at end of file diff --git a/Examples/MyProg/MyProg.manifest.txt b/Examples/MyProg/MyProg.manifest.txt new file mode 100644 index 00000000..e9c94c10 --- /dev/null +++ b/Examples/MyProg/MyProg.manifest.txt @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MyProg/MyProg.rc b/Examples/MyProg/MyProg.rc new file mode 100644 index 00000000..830fbaa4 --- /dev/null +++ b/Examples/MyProg/MyProg.rc @@ -0,0 +1,42 @@ +#include "windows.h" + +#ifdef WIN32 +MAINICON ICON "MyProg32.ico" +#else +MAINICON ICON "MyProg64.ico" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,5,0,0 + PRODUCTVERSION 1,5,0,0 + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "CompanyName", "My Company" + VALUE "FileDescription", "My Program" + VALUE "FileVersion", "1.5.0.0" + VALUE "InternalName", "MyProg" + VALUE "LegalCopyright", "Copyright (C) My Company" + VALUE "OriginalFilename", "MyProg.exe" + VALUE "ProductName", "My Program" + VALUE "ProductVersion", "1.5" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +1 24 MyProg.manifest.txt \ No newline at end of file diff --git a/Examples/MyProg/MyProg.sln b/Examples/MyProg/MyProg.sln new file mode 100644 index 00000000..f378dd4b --- /dev/null +++ b/Examples/MyProg/MyProg.sln @@ -0,0 +1,37 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.9.34701.34 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MyProg", "MyProg.vcxproj", "{C9AEC5DE-4091-49DC-9398-B5AC467C4D40}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM64 = Debug|ARM64 + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|ARM64 = Release|ARM64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C9AEC5DE-4091-49DC-9398-B5AC467C4D40}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {C9AEC5DE-4091-49DC-9398-B5AC467C4D40}.Debug|ARM64.Build.0 = Debug|ARM64 + {C9AEC5DE-4091-49DC-9398-B5AC467C4D40}.Debug|Win32.ActiveCfg = Debug|Win32 + {C9AEC5DE-4091-49DC-9398-B5AC467C4D40}.Debug|Win32.Build.0 = Debug|Win32 + {C9AEC5DE-4091-49DC-9398-B5AC467C4D40}.Debug|x64.ActiveCfg = Debug|x64 + {C9AEC5DE-4091-49DC-9398-B5AC467C4D40}.Debug|x64.Build.0 = Debug|x64 + {C9AEC5DE-4091-49DC-9398-B5AC467C4D40}.Release|ARM64.ActiveCfg = Release|ARM64 + {C9AEC5DE-4091-49DC-9398-B5AC467C4D40}.Release|ARM64.Build.0 = Release|ARM64 + {C9AEC5DE-4091-49DC-9398-B5AC467C4D40}.Release|Win32.ActiveCfg = Release|Win32 + {C9AEC5DE-4091-49DC-9398-B5AC467C4D40}.Release|Win32.Build.0 = Release|Win32 + {C9AEC5DE-4091-49DC-9398-B5AC467C4D40}.Release|x64.ActiveCfg = Release|x64 + {C9AEC5DE-4091-49DC-9398-B5AC467C4D40}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {DAD623FF-3B0E-4A30-99B3-DF205695ED1D} + EndGlobalSection +EndGlobal diff --git a/Examples/MyProg/MyProg.vcxproj b/Examples/MyProg/MyProg.vcxproj new file mode 100644 index 00000000..432fdab4 --- /dev/null +++ b/Examples/MyProg/MyProg.vcxproj @@ -0,0 +1,271 @@ + + + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + 17.0 + {C9AEC5DE-4091-49DC-9398-B5AC467C4D40} + Win32Proj + 10.0 + + + + Application + v143 + MultiByte + + + Application + v143 + MultiByte + + + Application + v143 + MultiByte + + + Application + v143 + MultiByte + + + Application + v143 + MultiByte + + + Application + v143 + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>17.0.34511.75 + + + true + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(ShortProjectName)\$(Platform)\$(Configuration)\ + + + true + false + + + true + false + + + false + false + $(SolutionDir)$(Platform)\$(Configuration)\ + $(ShortProjectName)\$(Platform)\$(Configuration)\ + + + false + false + + + false + false + + + + /GS- %(AdditionalOptions) + Disabled + Size + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebug + false + + Level3 + + + $(OutDir)MyProg.exe + comctl32.lib;%(AdditionalDependencies) + true + true + $(OutDir)MyProg.pdb + Windows + + + WIN32 + + + + + /GS- %(AdditionalOptions) + Disabled + Size + _DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebug + false + + + Level3 + + + $(OutDir)MyProg.exe + comctl32.lib;%(AdditionalDependencies) + true + true + $(OutDir)MyProg.pdb + Windows + + + + + X64 + + + /GS- %(AdditionalOptions) + Disabled + Size + _DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebug + false + + Level3 + ProgramDatabase + + + $(OutDir)MyProg.exe + comctl32.lib;%(AdditionalDependencies) + true + true + $(OutDir)MyProg.pdb + Windows + + + + + /GS- %(AdditionalOptions) + MinSpace + Size + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + false + + Level3 + + + + $(OutDir)MyProg.exe + comctl32.lib;%(AdditionalDependencies) + true + false + Windows + true + true + + + WIN32 + + + + + /GS- %(AdditionalOptions) + MinSpace + Size + NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + false + + + Level3 + + + + + $(OutDir)MyProg.exe + comctl32.lib;%(AdditionalDependencies) + true + false + Windows + true + true + + + + + X64 + + + /GS- %(AdditionalOptions) + MinSpace + Size + NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + false + + Level3 + + + + $(OutDir)MyProg.exe + comctl32.lib;%(AdditionalDependencies) + true + false + Windows + true + true + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Examples/MyProg/MyProg32.ico b/Examples/MyProg/MyProg32.ico new file mode 100644 index 00000000..55e3cc5e Binary files /dev/null and b/Examples/MyProg/MyProg32.ico differ diff --git a/Examples/MyProg/MyProg64.ico b/Examples/MyProg/MyProg64.ico new file mode 100644 index 00000000..08357c79 Binary files /dev/null and b/Examples/MyProg/MyProg64.ico differ diff --git a/Examples/PowerShell.iss b/Examples/PowerShell.iss new file mode 100644 index 00000000..1c26f003 --- /dev/null +++ b/Examples/PowerShell.iss @@ -0,0 +1,83 @@ +; -- PowerShell.iss -- +; Demonstrates calling Powershell at compile time and at run time. +; At compile time it first generates a random password and then it shows it and copies it to the clipboard +; At run time it shows the serial number of the system + +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! + +#define PowerShellExe "powershell.exe" +#define PowerShellCommandParam "-ExecutionPolicy Bypass -Command" + +#define ExecPowerShell(str Command) \ + Local[0] = PowerShellCommandParam + " " + AddQuotes(Command), \ + Message("Executing PowerShell command: " + Local[0]), \ + ExecAndGetFirstLine(PowerShellExe, Local[0]) + +#define Password ExecPowerShell( \ + "Add-Type -AssemblyName 'System.Web';" + \ + "[System.Web.Security.Membership]::GeneratePassword(12, 4);") + +#expr ExecPowerShell( \ + "$Password = '" + Password + "';" + \ + "Set-Clipboard -Value $Password;" + \ + "Add-Type -AssemblyName System.Windows.Forms;" + \ + "[System.Windows.Forms.MessageBox]::Show(" + \ + "'The generated password (copied to clipboard) is: ' + $Password + '" + NewLine + NewLine + \ + "Click OK to continue.', 'ISPP')") + +[Setup] +AppName=My Program +AppVersion=1.5 +WizardStyle=modern +DefaultDirName={autopf}\My Program +DefaultGroupName=My Program +UninstallDisplayIcon={app}\MyProg.exe +Compression=lzma2 +SolidCompression=yes +OutputDir=userdocs:Inno Setup Examples Output +Password=={#Password} + +[Files] +Source: "MyProg.exe"; DestDir: "{app}" +Source: "MyProg.chm"; DestDir: "{app}" +Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme + +[Icons] +Name: "{group}\My Program"; Filename: "{app}\MyProg.exe" + +[Code] +var + Line: String; + +procedure ExecAndGetFirstLineLog(const S: String; const Error, FirstLine: Boolean); +begin + if not Error and (Line = '') and (Trim(S) <> '') then + Line := S; { First non-empty line found, store it } + Log('Exec output: ' + S); +end; + +function ExecAndGetFirstLine(const Filename, Params, WorkingDir: String; var ResultCode: Integer): String; +begin + Line := ''; + ExecAndLogOutput(Filename, Params, WorkingDir, SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode, @ExecAndGetFirstLineLog); + Result := Line; +end; + +function ExecPowerShell(const Command: String): String; +var + FullCommand: String; + ResultCode: Integer; +begin + FullCommand := '{#PowerShellCommandParam} ' + AddQuotes(Command); + Log('Executing PowerShell command: ' + FullCommand); + Result := ExecAndGetFirstLine('{#PowerShellExe}', FullCommand, '', ResultCode); +end; + +function InitializeSetup: Boolean; +var + SerialNumber: String; +begin + SerialNumber := ExecPowerShell('Get-WmiObject -Class Win32_BIOS | Select-Object -ExpandProperty SerialNumber'); + MsgBox(Format('Serial number: %s'#10#10'Click OK to continue.', [SerialNumber]), mbInformation, MB_OK); + Result := True; +end; \ No newline at end of file diff --git a/Examples/Readme-Dutch.txt b/Examples/Readme-Dutch.txt new file mode 100644 index 00000000..7f190a69 --- /dev/null +++ b/Examples/Readme-Dutch.txt @@ -0,0 +1 @@ +Dit is het Leesmij bestand voor My Program. \ No newline at end of file diff --git a/Examples/Readme-German.txt b/Examples/Readme-German.txt new file mode 100644 index 00000000..57cf84a8 --- /dev/null +++ b/Examples/Readme-German.txt @@ -0,0 +1 @@ +Dies ist die LIESMICH-Datei fr "My Program". \ No newline at end of file diff --git a/Examples/Readme.txt b/Examples/Readme.txt new file mode 100644 index 00000000..5c16a64f --- /dev/null +++ b/Examples/Readme.txt @@ -0,0 +1 @@ +This is the README file for My Program. diff --git a/Examples/UnicodeExample1.iss b/Examples/UnicodeExample1.iss new file mode 100644 index 00000000..75107233 --- /dev/null +++ b/Examples/UnicodeExample1.iss @@ -0,0 +1,30 @@ +; -- UnicodeExample1.iss -- +; Demonstrates some Unicode functionality. +; +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING .ISS SCRIPT FILES! + +[Setup] +AppName=ɯɐɹƃoɹd ʎɯ +AppVerName=ɯɐɹƃoɹd ʎɯ version 1.5 +WizardStyle=modern +DefaultDirName={autopf}\ɯɐɹƃoɹd ʎɯ +DefaultGroupName=ɯɐɹƃoɹd ʎɯ +UninstallDisplayIcon={app}\ƃoɹdʎɯ.exe +Compression=lzma2 +SolidCompression=yes +OutputDir=userdocs:Inno Setup Examples Output + +[Files] +Source: "MyProg.exe"; DestDir: "{app}"; DestName: "ƃoɹdʎɯ.exe" +Source: "MyProg.chm"; DestDir: "{app}"; DestName: "ƃoɹdʎɯ.chm" +Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme + +[Icons] +Name: "{group}\ɯɐɹƃoɹd ʎɯ"; Filename: "{app}\ƃoɹdʎɯ.exe" + +[Code] +function InitializeSetup: Boolean; +begin + MsgBox('ɯɐɹƃoɹd ʎɯ', mbInformation, MB_OK); + Result := True; +end; \ No newline at end of file diff --git a/Examples/UninstallCodeExample1.iss b/Examples/UninstallCodeExample1.iss new file mode 100644 index 00000000..8e1df551 --- /dev/null +++ b/Examples/UninstallCodeExample1.iss @@ -0,0 +1,46 @@ +; -- UninstallCodeExample1.iss -- +; +; This script shows various things you can achieve using a [Code] section for Uninstall. + +[Setup] +AppName=My Program +AppVersion=1.5 +WizardStyle=modern +DefaultDirName={autopf}\My Program +DefaultGroupName=My Program +UninstallDisplayIcon={app}\MyProg.exe +OutputDir=userdocs:Inno Setup Examples Output + +[Files] +Source: "MyProg.exe"; DestDir: "{app}" +Source: "MyProg.chm"; DestDir: "{app}" +Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme + +[Code] +function InitializeUninstall(): Boolean; +begin + Result := MsgBox('InitializeUninstall:' #13#13 'Uninstall is initializing. Do you really want to start Uninstall?', mbConfirmation, MB_YESNO) = idYes; + if Result = False then + MsgBox('InitializeUninstall:' #13#13 'Ok, bye bye.', mbInformation, MB_OK); +end; + +procedure DeinitializeUninstall(); +begin + MsgBox('DeinitializeUninstall:' #13#13 'Bye bye!', mbInformation, MB_OK); +end; + +procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); +begin + case CurUninstallStep of + usUninstall: + begin + MsgBox('CurUninstallStepChanged:' #13#13 'Uninstall is about to start.', mbInformation, MB_OK) + // ...insert code to perform pre-uninstall tasks here... + end; + usPostUninstall: + begin + MsgBox('CurUninstallStepChanged:' #13#13 'Uninstall just finished.', mbInformation, MB_OK); + // ...insert code to perform post-uninstall tasks here... + end; + end; +end; diff --git a/Files/.gitignore b/Files/.gitignore new file mode 100644 index 00000000..64ff6629 --- /dev/null +++ b/Files/.gitignore @@ -0,0 +1,5 @@ +*.chm +*.chw +*.e32 +*.dll +*.exe diff --git a/Files/Default.isl b/Files/Default.isl new file mode 100644 index 00000000..0b503314 --- /dev/null +++ b/Files/Default.isl @@ -0,0 +1,384 @@ +; *** Inno Setup version 6.1.0+ English messages *** +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=English +LanguageID=$0409 +LanguageCodePage=0 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Setup +SetupWindowTitle=Setup - %1 +UninstallAppTitle=Uninstall +UninstallAppFullTitle=%1 Uninstall + +; *** Misc. common +InformationTitle=Information +ConfirmTitle=Confirm +ErrorTitle=Error + +; *** SetupLdr messages +SetupLdrStartupMessage=This will install %1. Do you wish to continue? +LdrCannotCreateTemp=Unable to create a temporary file. Setup aborted +LdrCannotExecTemp=Unable to execute file in the temporary directory. Setup aborted +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nError %2: %3 +SetupFileMissing=The file %1 is missing from the installation directory. Please correct the problem or obtain a new copy of the program. +SetupFileCorrupt=The setup files are corrupted. Please obtain a new copy of the program. +SetupFileCorruptOrWrongVer=The setup files are corrupted, or are incompatible with this version of Setup. Please correct the problem or obtain a new copy of the program. +InvalidParameter=An invalid parameter was passed on the command line:%n%n%1 +SetupAlreadyRunning=Setup is already running. +WindowsVersionNotSupported=This program does not support the version of Windows your computer is running. +WindowsServicePackRequired=This program requires %1 Service Pack %2 or later. +NotOnThisPlatform=This program will not run on %1. +OnlyOnThisPlatform=This program must be run on %1. +OnlyOnTheseArchitectures=This program can only be installed on versions of Windows designed for the following processor architectures:%n%n%1 +WinVersionTooLowError=This program requires %1 version %2 or later. +WinVersionTooHighError=This program cannot be installed on %1 version %2 or later. +AdminPrivilegesRequired=You must be logged in as an administrator when installing this program. +PowerUserPrivilegesRequired=You must be logged in as an administrator or as a member of the Power Users group when installing this program. +SetupAppRunningError=Setup has detected that %1 is currently running.%n%nPlease close all instances of it now, then click OK to continue, or Cancel to exit. +UninstallAppRunningError=Uninstall has detected that %1 is currently running.%n%nPlease close all instances of it now, then click OK to continue, or Cancel to exit. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Select Setup Install Mode +PrivilegesRequiredOverrideInstruction=Select install mode +PrivilegesRequiredOverrideText1=%1 can be installed for all users (requires administrative privileges), or for you only. +PrivilegesRequiredOverrideText2=%1 can be installed for you only, or for all users (requires administrative privileges). +PrivilegesRequiredOverrideAllUsers=Install for &all users +PrivilegesRequiredOverrideAllUsersRecommended=Install for &all users (recommended) +PrivilegesRequiredOverrideCurrentUser=Install for &me only +PrivilegesRequiredOverrideCurrentUserRecommended=Install for &me only (recommended) + +; *** Misc. errors +ErrorCreatingDir=Setup was unable to create the directory "%1" +ErrorTooManyFilesInDir=Unable to create a file in the directory "%1" because it contains too many files + +; *** Setup common messages +ExitSetupTitle=Exit Setup +ExitSetupMessage=Setup is not complete. If you exit now, the program will not be installed.%n%nYou may run Setup again at another time to complete the installation.%n%nExit Setup? +AboutSetupMenuItem=&About Setup... +AboutSetupTitle=About Setup +AboutSetupMessage=%1 version %2%n%3%n%n%1 home page:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< &Back +ButtonNext=&Next > +ButtonInstall=&Install +ButtonOK=OK +ButtonCancel=Cancel +ButtonYes=&Yes +ButtonYesToAll=Yes to &All +ButtonNo=&No +ButtonNoToAll=N&o to All +ButtonFinish=&Finish +ButtonBrowse=&Browse... +ButtonWizardBrowse=B&rowse... +ButtonNewFolder=&Make New Folder + +; *** "Select Language" dialog messages +SelectLanguageTitle=Select Setup Language +SelectLanguageLabel=Select the language to use during the installation. + +; *** Common wizard text +ClickNext=Click Next to continue, or Cancel to exit Setup. +BeveledLabel= +BrowseDialogTitle=Browse For Folder +BrowseDialogLabel=Select a folder in the list below, then click OK. +NewFolderName=New Folder + +; *** "Welcome" wizard page +WelcomeLabel1=Welcome to the [name] Setup Wizard +WelcomeLabel2=This will install [name/ver] on your computer.%n%nIt is recommended that you close all other applications before continuing. + +; *** "Password" wizard page +WizardPassword=Password +PasswordLabel1=This installation is password protected. +PasswordLabel3=Please provide the password, then click Next to continue. Passwords are case-sensitive. +PasswordEditLabel=&Password: +IncorrectPassword=The password you entered is not correct. Please try again. + +; *** "License Agreement" wizard page +WizardLicense=License Agreement +LicenseLabel=Please read the following important information before continuing. +LicenseLabel3=Please read the following License Agreement. You must accept the terms of this agreement before continuing with the installation. +LicenseAccepted=I &accept the agreement +LicenseNotAccepted=I &do not accept the agreement + +; *** "Information" wizard pages +WizardInfoBefore=Information +InfoBeforeLabel=Please read the following important information before continuing. +InfoBeforeClickLabel=When you are ready to continue with Setup, click Next. +WizardInfoAfter=Information +InfoAfterLabel=Please read the following important information before continuing. +InfoAfterClickLabel=When you are ready to continue with Setup, click Next. + +; *** "User Information" wizard page +WizardUserInfo=User Information +UserInfoDesc=Please enter your information. +UserInfoName=&User Name: +UserInfoOrg=&Organization: +UserInfoSerial=&Serial Number: +UserInfoNameRequired=You must enter a name. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Select Destination Location +SelectDirDesc=Where should [name] be installed? +SelectDirLabel3=Setup will install [name] into the following folder. +SelectDirBrowseLabel=To continue, click Next. If you would like to select a different folder, click Browse. +DiskSpaceGBLabel=At least [gb] GB of free disk space is required. +DiskSpaceMBLabel=At least [mb] MB of free disk space is required. +CannotInstallToNetworkDrive=Setup cannot install to a network drive. +CannotInstallToUNCPath=Setup cannot install to a UNC path. +InvalidPath=You must enter a full path with drive letter; for example:%n%nC:\APP%n%nor a UNC path in the form:%n%n\\server\share +InvalidDrive=The drive or UNC share you selected does not exist or is not accessible. Please select another. +DiskSpaceWarningTitle=Not Enough Disk Space +DiskSpaceWarning=Setup requires at least %1 KB of free space to install, but the selected drive only has %2 KB available.%n%nDo you want to continue anyway? +DirNameTooLong=The folder name or path is too long. +InvalidDirName=The folder name is not valid. +BadDirName32=Folder names cannot include any of the following characters:%n%n%1 +DirExistsTitle=Folder Exists +DirExists=The folder:%n%n%1%n%nalready exists. Would you like to install to that folder anyway? +DirDoesntExistTitle=Folder Does Not Exist +DirDoesntExist=The folder:%n%n%1%n%ndoes not exist. Would you like the folder to be created? + +; *** "Select Components" wizard page +WizardSelectComponents=Select Components +SelectComponentsDesc=Which components should be installed? +SelectComponentsLabel2=Select the components you want to install; clear the components you do not want to install. Click Next when you are ready to continue. +FullInstallation=Full installation +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Compact installation +CustomInstallation=Custom installation +NoUninstallWarningTitle=Components Exist +NoUninstallWarning=Setup has detected that the following components are already installed on your computer:%n%n%1%n%nDeselecting these components will not uninstall them.%n%nWould you like to continue anyway? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Current selection requires at least [gb] GB of disk space. +ComponentsDiskSpaceMBLabel=Current selection requires at least [mb] MB of disk space. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Select Additional Tasks +SelectTasksDesc=Which additional tasks should be performed? +SelectTasksLabel2=Select the additional tasks you would like Setup to perform while installing [name], then click Next. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Select Start Menu Folder +SelectStartMenuFolderDesc=Where should Setup place the program's shortcuts? +SelectStartMenuFolderLabel3=Setup will create the program's shortcuts in the following Start Menu folder. +SelectStartMenuFolderBrowseLabel=To continue, click Next. If you would like to select a different folder, click Browse. +MustEnterGroupName=You must enter a folder name. +GroupNameTooLong=The folder name or path is too long. +InvalidGroupName=The folder name is not valid. +BadGroupName=The folder name cannot include any of the following characters:%n%n%1 +NoProgramGroupCheck2=&Don't create a Start Menu folder + +; *** "Ready to Install" wizard page +WizardReady=Ready to Install +ReadyLabel1=Setup is now ready to begin installing [name] on your computer. +ReadyLabel2a=Click Install to continue with the installation, or click Back if you want to review or change any settings. +ReadyLabel2b=Click Install to continue with the installation. +ReadyMemoUserInfo=User information: +ReadyMemoDir=Destination location: +ReadyMemoType=Setup type: +ReadyMemoComponents=Selected components: +ReadyMemoGroup=Start Menu folder: +ReadyMemoTasks=Additional tasks: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Downloading additional files... +ButtonStopDownload=&Stop download +StopDownload=Are you sure you want to stop the download? +ErrorDownloadAborted=Download aborted +ErrorDownloadFailed=Download failed: %1 %2 +ErrorDownloadSizeFailed=Getting size failed: %1 %2 +ErrorFileHash1=File hash failed: %1 +ErrorFileHash2=Invalid file hash: expected %1, found %2 +ErrorProgress=Invalid progress: %1 of %2 +ErrorFileSize=Invalid file size: expected %1, found %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Preparing to Install +PreparingDesc=Setup is preparing to install [name] on your computer. +PreviousInstallNotCompleted=The installation/removal of a previous program was not completed. You will need to restart your computer to complete that installation.%n%nAfter restarting your computer, run Setup again to complete the installation of [name]. +CannotContinue=Setup cannot continue. Please click Cancel to exit. +ApplicationsFound=The following applications are using files that need to be updated by Setup. It is recommended that you allow Setup to automatically close these applications. +ApplicationsFound2=The following applications are using files that need to be updated by Setup. It is recommended that you allow Setup to automatically close these applications. After the installation has completed, Setup will attempt to restart the applications. +CloseApplications=&Automatically close the applications +DontCloseApplications=&Do not close the applications +ErrorCloseApplications=Setup was unable to automatically close all applications. It is recommended that you close all applications using files that need to be updated by Setup before continuing. +PrepareToInstallNeedsRestart=Setup must restart your computer. After restarting your computer, run Setup again to complete the installation of [name].%n%nWould you like to restart now? + +; *** "Installing" wizard page +WizardInstalling=Installing +InstallingLabel=Please wait while Setup installs [name] on your computer. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Completing the [name] Setup Wizard +FinishedLabelNoIcons=Setup has finished installing [name] on your computer. +FinishedLabel=Setup has finished installing [name] on your computer. The application may be launched by selecting the installed shortcuts. +ClickFinish=Click Finish to exit Setup. +FinishedRestartLabel=To complete the installation of [name], Setup must restart your computer. Would you like to restart now? +FinishedRestartMessage=To complete the installation of [name], Setup must restart your computer.%n%nWould you like to restart now? +ShowReadmeCheck=Yes, I would like to view the README file +YesRadio=&Yes, restart the computer now +NoRadio=&No, I will restart the computer later +; used for example as 'Run MyProg.exe' +RunEntryExec=Run %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=View %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Setup Needs the Next Disk +SelectDiskLabel2=Please insert Disk %1 and click OK.%n%nIf the files on this disk can be found in a folder other than the one displayed below, enter the correct path or click Browse. +PathLabel=&Path: +FileNotInDir2=The file "%1" could not be located in "%2". Please insert the correct disk or select another folder. +SelectDirectoryLabel=Please specify the location of the next disk. + +; *** Installation phase messages +SetupAborted=Setup was not completed.%n%nPlease correct the problem and run Setup again. +AbortRetryIgnoreSelectAction=Select action +AbortRetryIgnoreRetry=&Try again +AbortRetryIgnoreIgnore=&Ignore the error and continue +AbortRetryIgnoreCancel=Cancel installation + +; *** Installation status messages +StatusClosingApplications=Closing applications... +StatusCreateDirs=Creating directories... +StatusExtractFiles=Extracting files... +StatusCreateIcons=Creating shortcuts... +StatusCreateIniEntries=Creating INI entries... +StatusCreateRegistryEntries=Creating registry entries... +StatusRegisterFiles=Registering files... +StatusSavingUninstall=Saving uninstall information... +StatusRunProgram=Finishing installation... +StatusRestartingApplications=Restarting applications... +StatusRollback=Rolling back changes... + +; *** Misc. errors +ErrorInternal2=Internal error: %1 +ErrorFunctionFailedNoCode=%1 failed +ErrorFunctionFailed=%1 failed; code %2 +ErrorFunctionFailedWithMessage=%1 failed; code %2.%n%3 +ErrorExecutingProgram=Unable to execute file:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Error opening registry key:%n%1\%2 +ErrorRegCreateKey=Error creating registry key:%n%1\%2 +ErrorRegWriteKey=Error writing to registry key:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Error creating INI entry in file "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Skip this file (not recommended) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignore the error and continue (not recommended) +SourceIsCorrupted=The source file is corrupted +SourceDoesntExist=The source file "%1" does not exist +ExistingFileReadOnly2=The existing file could not be replaced because it is marked read-only. +ExistingFileReadOnlyRetry=&Remove the read-only attribute and try again +ExistingFileReadOnlyKeepExisting=&Keep the existing file +ErrorReadingExistingDest=An error occurred while trying to read the existing file: +FileExistsSelectAction=Select action +FileExists2=The file already exists. +FileExistsOverwriteExisting=&Overwrite the existing file +FileExistsKeepExisting=&Keep the existing file +FileExistsOverwriteOrKeepAll=&Do this for the next conflicts +ExistingFileNewerSelectAction=Select action +ExistingFileNewer2=The existing file is newer than the one Setup is trying to install. +ExistingFileNewerOverwriteExisting=&Overwrite the existing file +ExistingFileNewerKeepExisting=&Keep the existing file (recommended) +ExistingFileNewerOverwriteOrKeepAll=&Do this for the next conflicts +ErrorChangingAttr=An error occurred while trying to change the attributes of the existing file: +ErrorCreatingTemp=An error occurred while trying to create a file in the destination directory: +ErrorReadingSource=An error occurred while trying to read the source file: +ErrorCopying=An error occurred while trying to copy a file: +ErrorReplacingExistingFile=An error occurred while trying to replace the existing file: +ErrorRestartReplace=RestartReplace failed: +ErrorRenamingTemp=An error occurred while trying to rename a file in the destination directory: +ErrorRegisterServer=Unable to register the DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 failed with exit code %1 +ErrorRegisterTypeLib=Unable to register the type library: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=All users +UninstallDisplayNameMarkCurrentUser=Current user + +; *** Post-installation errors +ErrorOpeningReadme=An error occurred while trying to open the README file. +ErrorRestartingComputer=Setup was unable to restart the computer. Please do this manually. + +; *** Uninstaller messages +UninstallNotFound=File "%1" does not exist. Cannot uninstall. +UninstallOpenError=File "%1" could not be opened. Cannot uninstall +UninstallUnsupportedVer=The uninstall log file "%1" is in a format not recognized by this version of the uninstaller. Cannot uninstall +UninstallUnknownEntry=An unknown entry (%1) was encountered in the uninstall log +ConfirmUninstall=Are you sure you want to completely remove %1 and all of its components? +UninstallOnlyOnWin64=This installation can only be uninstalled on 64-bit Windows. +OnlyAdminCanUninstall=This installation can only be uninstalled by a user with administrative privileges. +UninstallStatusLabel=Please wait while %1 is removed from your computer. +UninstalledAll=%1 was successfully removed from your computer. +UninstalledMost=%1 uninstall complete.%n%nSome elements could not be removed. These can be removed manually. +UninstalledAndNeedsRestart=To complete the uninstallation of %1, your computer must be restarted.%n%nWould you like to restart now? +UninstallDataCorrupted="%1" file is corrupted. Cannot uninstall + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Remove Shared File? +ConfirmDeleteSharedFile2=The system indicates that the following shared file is no longer in use by any programs. Would you like for Uninstall to remove this shared file?%n%nIf any programs are still using this file and it is removed, those programs may not function properly. If you are unsure, choose No. Leaving the file on your system will not cause any harm. +SharedFileNameLabel=File name: +SharedFileLocationLabel=Location: +WizardUninstalling=Uninstall Status +StatusUninstalling=Uninstalling %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Installing %1. +ShutdownBlockReasonUninstallingApp=Uninstalling %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 version %2 +AdditionalIcons=Additional shortcuts: +CreateDesktopIcon=Create a &desktop shortcut +CreateQuickLaunchIcon=Create a &Quick Launch shortcut +ProgramOnTheWeb=%1 on the Web +UninstallProgram=Uninstall %1 +LaunchProgram=Launch %1 +AssocFileExtension=&Associate %1 with the %2 file extension +AssocingFileExtension=Associating %1 with the %2 file extension... +AutoStartProgramGroupDescription=Startup: +AutoStartProgram=Automatically start %1 +AddonHostProgramNotFound=%1 could not be located in the folder you selected.%n%nDo you want to continue anyway? diff --git a/Files/ISPPBuiltins.iss b/Files/ISPPBuiltins.iss new file mode 100644 index 00000000..b2566cc2 --- /dev/null +++ b/Files/ISPPBuiltins.iss @@ -0,0 +1,323 @@ +// Inno Setup Preprocessor +// +// Inno Setup (C) 1997-2024 Jordan Russell. All Rights Reserved. +// Portions Copyright (C) 2000-2024 Martijn Laan. All Rights Reserved. +// Portions Copyright (C) 2001-2004 Alex Yackimoff. All Rights Reserved. +// +// See the ISPP help file for more documentation of the functions defined by this file +// +#if defined(ISPP_INVOKED) && !defined(_BUILTINS_ISS_) +// +#if PREPROCVER < 0x01000000 +# error Inno Setup Preprocessor version is outdated +#endif +// +#define _BUILTINS_ISS_ +// +#ifdef __OPT_E__ +# define private EnableOptE +# pragma option -e- +#endif + +#ifndef __POPT_P__ +# define private DisablePOptP +#else +# pragma parseroption -p- +#endif + +#define NewLine "\n" +#define Tab "\t" + +#pragma parseroption -p+ + +#pragma spansymbol "\" + +#define True 1 +#define False 0 +#define Yes True +#define No False + +#define MaxInt 0x7FFFFFFFFFFFFFFFL +#define MinInt 0x8000000000000000L + +#define NULL +#define void + +// TypeOf constants + +#define TYPE_ERROR 0 +#define TYPE_NULL 1 +#define TYPE_INTEGER 2 +#define TYPE_STRING 3 +#define TYPE_MACRO 4 +#define TYPE_FUNC 5 +#define TYPE_ARRAY 6 + +// Helper macro to find out the type of an array element or expression. TypeOf +// standard function only allows identifier as its parameter. Use this macro +// to convert an expression to identifier. + +#define TypeOf2(any Expr) TypeOf(Expr) + +// ReadReg constants + +#define HKEY_CLASSES_ROOT 0x80000000UL +#define HKEY_CURRENT_USER 0x80000001UL +#define HKEY_LOCAL_MACHINE 0x80000002UL +#define HKEY_USERS 0x80000003UL +#define HKEY_CURRENT_CONFIG 0x80000005UL +#define HKEY_CLASSES_ROOT_64 0x82000000UL +#define HKEY_CURRENT_USER_64 0x82000001UL +#define HKEY_LOCAL_MACHINE_64 0x82000002UL +#define HKEY_USERS_64 0x82000003UL +#define HKEY_CURRENT_CONFIG_64 0x82000005UL + +#define HKCR HKEY_CLASSES_ROOT +#define HKCU HKEY_CURRENT_USER +#define HKLM HKEY_LOCAL_MACHINE +#define HKU HKEY_USERS +#define HKCC HKEY_CURRENT_CONFIG +#define HKCR64 HKEY_CLASSES_ROOT_64 +#define HKCU64 HKEY_CURRENT_USER_64 +#define HKLM64 HKEY_LOCAL_MACHINE_64 +#define HKU64 HKEY_USERS_64 +#define HKCC64 HKEY_CURRENT_CONFIG_64 + +// Exec constants + +#define SW_HIDE 0 +#define SW_SHOWNORMAL 1 +#define SW_NORMAL 1 +#define SW_SHOWMINIMIZED 2 +#define SW_SHOWMAXIMIZED 3 +#define SW_MAXIMIZE 3 +#define SW_SHOWNOACTIVATE 4 +#define SW_SHOW 5 +#define SW_MINIMIZE 6 +#define SW_SHOWMINNOACTIVE 7 +#define SW_SHOWNA 8 +#define SW_RESTORE 9 +#define SW_SHOWDEFAULT 10 +#define SW_MAX 10 + +// Find constants + +#define FIND_MATCH 0x00 +#define FIND_BEGINS 0x01 +#define FIND_ENDS 0x02 +#define FIND_CONTAINS 0x03 +#define FIND_CASESENSITIVE 0x04 +#define FIND_SENSITIVE FIND_CASESENSITIVE +#define FIND_AND 0x00 +#define FIND_OR 0x08 +#define FIND_NOT 0x10 +#define FIND_TRIM 0x20 + +// FindFirst constants + +#define faReadOnly 0x00000001 +#define faHidden 0x00000002 +#define faSysFile 0x00000004 +#define faVolumeID 0x00000008 +#define faDirectory 0x00000010 +#define faArchive 0x00000020 +#define faSymLink 0x00000040 +#define faAnyFile 0x0000003F + +// GetStringFileInfo standard names + +#define COMPANY_NAME "CompanyName" +#define FILE_DESCRIPTION "FileDescription" +#define FILE_VERSION "FileVersion" +#define INTERNAL_NAME "InternalName" +#define LEGAL_COPYRIGHT "LegalCopyright" +#define ORIGINAL_FILENAME "OriginalFilename" +#define PRODUCT_NAME "ProductName" +#define PRODUCT_VERSION "ProductVersion" + +// GetStringFileInfo helpers + +#define GetFileCompany(str FileName) GetStringFileInfo(FileName, COMPANY_NAME) +#define GetFileDescription(str FileName) GetStringFileInfo(FileName, FILE_DESCRIPTION) +#define GetFileVersionString(str FileName) GetStringFileInfo(FileName, FILE_VERSION) +#define GetFileCopyright(str FileName) GetStringFileInfo(FileName, LEGAL_COPYRIGHT) +#define GetFileOriginalFilename(str FileName) GetStringFileInfo(FileName, ORIGINAL_FILENAME) +#define GetFileProductVersion(str FileName) GetStringFileInfo(FileName, PRODUCT_VERSION) + +#define DeleteToFirstPeriod(str *S) \ + Local[1] = Copy(S, 1, (Local[0] = Pos(".", S)) - 1), \ + S = Copy(S, Local[0] + 1), \ + Local[1] + +#define GetVersionComponents(str FileName, *Major, *Minor, *Rev, *Build) \ + Local[1] = Local[0] = GetVersionNumbersString(FileName), \ + Local[1] == "" ? "" : ( \ + Major = Int(DeleteToFirstPeriod(Local[1])), \ + Minor = Int(DeleteToFirstPeriod(Local[1])), \ + Rev = Int(DeleteToFirstPeriod(Local[1])), \ + Build = Int(Local[1]), \ + Local[0]) + +#define GetPackedVersion(str FileName, *Version) \ + Local[0] = GetVersionComponents(FileName, Local[1], Local[2], Local[3], Local[4]), \ + Version = PackVersionComponents(Local[1], Local[2], Local[3], Local[4]), \ + Local[0] + +#define GetVersionNumbers(str FileName, *MS, *LS) \ + Local[0] = GetPackedVersion(FileName, Local[1]), \ + UnpackVersionNumbers(Local[1], MS, LS), \ + Local[0] + +#define PackVersionNumbers(int VersionMS, int VersionLS) \ + VersionMS << 32 | (VersionLS & 0xFFFFFFFF) + +#define PackVersionComponents(int Major, int Minor, int Rev, int Build) \ + Major << 48 | (Minor & 0xFFFF) << 32 | (Rev & 0xFFFF) << 16 | (Build & 0xFFFF) + +#define UnpackVersionNumbers(int Version, *VersionMS, *VersionLS) \ + VersionMS = Version >> 32, \ + VersionLS = Version & 0xFFFFFFFF, \ + void + +#define UnpackVersionComponents(int Version, *Major, *Minor, *Rev, *Build) \ + Major = Version >> 48, \ + Minor = (Version >> 32) & 0xFFFF, \ + Rev = (Version >> 16) & 0xFFFF, \ + Build = Version & 0xFFFF, \ + void + +#define VersionToStr(int Version) \ + Str(Version >> 48 & 0xFFFF) + "." + Str(Version >> 32 & 0xFFFF) + "." + \ + Str(Version >> 16 & 0xFFFF) + "." + Str(Version & 0xFFFF) + +#define StrToVersion(str Version) \ + Local[0] = Version, \ + Local[1] = Int(DeleteToFirstPeriod(Local[0])), \ + Local[2] = Int(DeleteToFirstPeriod(Local[0])), \ + Local[3] = Int(DeleteToFirstPeriod(Local[0])), \ + Local[4] = Int(Local[0]), \ + PackVersionComponents(Local[1], Local[2], Local[3], Local[4]) + +#define EncodeVer(int Major, int Minor, int Revision = 0, int Build = -1) \ + (Major & 0xFF) << 24 | (Minor & 0xFF) << 16 | (Revision & 0xFF) << 8 | (Build >= 0 ? Build & 0xFF : 0) + +#define DecodeVer(int Version, int Digits = 3) \ + Str(Version >> 24 & 0xFF) + (Digits > 1 ? "." : "") + \ + (Digits > 1 ? \ + Str(Version >> 16 & 0xFF) + (Digits > 2 ? "." : "") : "") + \ + (Digits > 2 ? \ + Str(Version >> 8 & 0xFF) + (Digits > 3 && (Local = Version & 0xFF) ? "." : "") : "") + \ + (Digits > 3 && Local ? \ + Str(Version & 0xFF) : "") + +#define FindSection(str Section = "Files") \ + Find(0, "[" + Section + "]", FIND_MATCH | FIND_TRIM) + 1 + +#if VER >= 0x03000000 +# define FindNextSection(int Line) \ + Find(Line, "[", FIND_BEGINS | FIND_TRIM, "]", FIND_ENDS | FIND_AND) +# define FindSectionEnd(str Section = "Files") \ + FindNextSection(FindSection(Section)) +#else +# define FindSectionEnd(str Section = "Files") \ + FindSection(Section) + EntryCount(Section) +#endif + +#define FindCode() \ + Local[1] = FindSection("Code"), \ + Local[0] = Find(Local[1] - 1, "program", FIND_BEGINS, ";", FIND_ENDS | FIND_AND), \ + (Local[0] < 0 ? Local[1] : Local[0] + 1) + +#define ExtractFilePath(str PathName) \ + (Local[0] = \ + !(Local[1] = RPos("\", PathName)) ? \ + "" : \ + Copy(PathName, 1, Local[1] - 1)), \ + Local[0] + \ + ((Local[2] = Len(Local[0])) == 2 && Copy(Local[0], Local[2]) == ":" ? \ + "\" : \ + "") + +#define ExtractFileDir(str PathName) \ + RemoveBackslash(ExtractFilePath(PathName)) + +#define ExtractFileExt(str PathName) \ + Local[0] = RPos(".", PathName), \ + Copy(PathName, Local[0] + 1) + +#define ExtractFileName(str PathName) \ + !(Local[0] = RPos("\", PathName)) ? \ + PathName : \ + Copy(PathName, Local[0] + 1) + +#define ChangeFileExt(str FileName, str NewExt) \ + !(Local[0] = RPos(".", FileName)) ? \ + FileName + "." + NewExt : \ + Copy(FileName, 1, Local[0]) + NewExt + +#define RemoveFileExt(str FileName) \ + !(Local[0] = RPos(".", FileName)) ? \ + FileName : \ + Copy(FileName, 1, Local[0] - 1) + +#define AddBackslash(str S) \ + Copy(S, Len(S)) == "\" ? S : S + "\" + +#define RemoveBackslash(str S) \ + Local[0] = Len(S), \ + Local[0] > 0 ? \ + Copy(S, Local[0]) == "\" ? \ + (Local[0] == 3 && Copy(S, 2, 1) == ":" ? \ + S : \ + Copy(S, 1, Local[0] - 1)) : \ + S : \ + "" + +#define Delete(str *S, int Index, int Count = MaxInt) \ + S = Copy(S, 1, Index - 1) + Copy(S, Index + Count) + +#define Insert(str *S, int Index, str Substr) \ + Index > Len(S) + 1 ? \ + S : \ + S = Copy(S, 1, Index - 1) + SubStr + Copy(S, Index) + +#define YesNo(str S) \ + (S = LowerCase(S)) == "yes" || S == "true" || S == "1" + +#define IsDirSet(str SetupDirective) \ + YesNo(SetupSetting(SetupDirective)) + +#define Power(int X, int P = 2) \ + !P ? 1 : X * Power(X, P - 1) + +#define Min(int A, int B, int C = MaxInt) \ + A < B ? A < C ? Int(A) : Int(C) : Int(B) + +#define Max(int A, int B, int C = MinInt) \ + A > B ? A > C ? Int(A) : Int(C) : Int(B) + +#define SameText(str S1, str S2) \ + LowerCase(S1) == LowerCase(S2) + +#define SameStr(str S1, str S2) \ + S1 == S2 + +#define WarnRenamedVersion(str OldName, str NewName) \ + Warning("Function """ + OldName + """ has been renamed. Use """ + NewName + """ instead.") + +#define ParseVersion(str FileName, *Major, *Minor, *Rev, *Build) \ + WarnRenamedVersion("ParseVersion", "GetVersionComponents"), \ + GetVersionComponents(FileName, Major, Minor, Rev, Build) + +#define GetFileVersion(str FileName) \ + WarnRenamedVersion("GetFileVersion", "GetVersionNumbersString"), \ + GetVersionNumbersString(FileName) + +#ifdef DisablePOptP +# pragma parseroption -p- +#endif + +#ifdef EnableOptE +# pragma option -e+ +#endif +#endif \ No newline at end of file diff --git a/Files/Languages/Armenian.isl b/Files/Languages/Armenian.isl new file mode 100644 index 00000000..990d7e01 --- /dev/null +++ b/Files/Languages/Armenian.isl @@ -0,0 +1,376 @@ +; *** Inno Setup version 6.1.0+ Armenian messages *** +; +; Armenian translation by Hrant Ohanyan +; E-mail: h.ohanyan@haysoft.org +; Translation home page: http://www.haysoft.org +; Last modification date: 2020-10-06 +; +[LangOptions] +LanguageName=Հայերեն +LanguageID=$042B +LanguageCodePage=0 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Տեղադրում +SetupWindowTitle=%1-ի տեղադրում +UninstallAppTitle=Ապատեղադրում +UninstallAppFullTitle=%1-ի ապատեղադրում + +; *** Misc. common +InformationTitle=Տեղեկություն +ConfirmTitle=Հաստատել +ErrorTitle=Սխալ + +; *** SetupLdr messages +SetupLdrStartupMessage=Այս ծրագիրը կտեղադրի %1-ը Ձեր համակարգչում։ Շարունակե՞լ։ +LdrCannotCreateTemp=Հնարավոր չէ ստեղծել ժամանակավոր ֆայլ։ Տեղադրումը կասեցված է +LdrCannotExecTemp=Հնարավոր չէ կատարել ֆայլը ժամանակավոր պանակից։ Տեղադրումը կասեցված է + +; *** Startup error messages +LastErrorMessage=%1.%n%nՍխալ %2: %3 +SetupFileMissing=%1 ֆայլը բացակայում է տեղադրման պանակից։ Ուղղեք խնդիրը կամ ստացեք ծրագրի նոր տարբերակը։ +SetupFileCorrupt=Տեղադրվող ֆայլերը վնասված են։ +SetupFileCorruptOrWrongVer=Տեղադրվող ֆայլերը վնասված են կամ անհամատեղելի են տեղակայիչի այս տարբերակի հետ։ Ուղղեք խնդիրը կամ ստացեք ծրագրի նոր տարբերակը։ +InvalidParameter=Հրամանատողում նշված է սխալ հրաման.%n%n%1 +SetupAlreadyRunning=Տեղակայիչը արդեն աշխատեցված է։ +WindowsVersionNotSupported=Ծրագիրը չի աջակցում այս համակարգչում աշխատող Windows-ի տարբերակը։ +WindowsServicePackRequired=Ծրագիրը պահանջում է %1-ի Service Pack %2 կամ ավելի նոր։ +NotOnThisPlatform=Այս ծրագիրը չի աշխատի %1-ում։ +OnlyOnThisPlatform=Այս ծրագիրը հնարավոր է բացել միայն %1-ում։ +OnlyOnTheseArchitectures=Այս ծրագրի տեղադրումը հնարավոր է միայն Windows-ի մշակիչի հետևյալ կառուցվածքներում՝ %n%n%1 +WinVersionTooLowError=Այս ծրագիրը պահանջում է %1-ի տարբերակ %2 կամ ավելի նորը։ +WinVersionTooHighError=Ծրագիրը չի կարող տեղադրվել %1-ի տարբերակ %2 կամ ավելի նորում +AdminPrivilegesRequired=Ծրագիրը տեղադրելու համար պահանջվում են Վարիչի իրավունքներ։ +PowerUserPrivilegesRequired=Ծրագիրը տեղադրելու համար պետք է մուտք գործել համակարգ որպես Վարիչ կամ «Փորձառու օգտագործող» (Power Users): +SetupAppRunningError=Տեղակայիչը հայտնաբերել է, որ %1-ը աշխատում է։%n%nՓակեք այն և սեղմեք «Լավ»՝ շարունակելու համար կամ «Չեղարկել»՝ փակելու համար։ +UninstallAppRunningError=Ապատեղադրող ծրագիրը հայտնաբերել է, որ %1-ը աշխատում է։%n%nՓակեք այն և սեղմեք «Լավ»՝ շարունակելու համար կամ «Չեղարկել»՝ փակելու համար։ + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Ընտրեք տեղակայիչի տեղադրման կերպը +PrivilegesRequiredOverrideInstruction=Ընտրեք տեղադրման կերպը +PrivilegesRequiredOverrideText1=%1-ը կարող է տեղադրվել բոլոր օգտվողների համար (պահանջում է վարիչի արտոնություններ) կամ միայն ձեզ համար: +PrivilegesRequiredOverrideText2=%1-ը կարող է տեղադրվել միայն ձեզ համար կամ բոլոր օգտվողների համար (պահանջում է վարիչի արտոնություններ): +PrivilegesRequiredOverrideAllUsers=Տեղադրել &բոլոր օգտվողների համար +PrivilegesRequiredOverrideAllUsersRecommended=Տեղադրել &բոլոր օգտվողների համար (հանձնարարելի) +PrivilegesRequiredOverrideCurrentUser=Տեղադրել միայն &ինձ համար +PrivilegesRequiredOverrideCurrentUserRecommended=Տեղադրել միայն &ինձ համար (հանձնարարելի) + +; *** Misc. errors +ErrorCreatingDir=Հնարավոր չէ ստեղծել "%1" պանակը +ErrorTooManyFilesInDir=Հնարավոր չէ ստեղծել ֆայլ "%1" պանակում, որովհետև նրանում կան չափից ավելի շատ ֆայլեր + +; *** Setup common messages +ExitSetupTitle=Տեղակայման ընդհատում +ExitSetupMessage=Տեղակայումը չի ավարատվել։ Եթե ընդհատեք, ապա ծրագիրը չի տեղադրվի։%n%nԱվարտե՞լ։ +AboutSetupMenuItem=&Ծրագրի մասին... +AboutSetupTitle=Ծրագրի մասին +AboutSetupMessage=%1, տարբերակ՝ %2%n%3%n%nՎեբ կայք՝ %1:%n%4 +AboutSetupNote= +TranslatorNote=Armenian translation by Hrant Ohanyan »»» http://www.haysoft.org + +; *** Buttons +ButtonBack=« &Նախորդ +ButtonNext=&Հաջորդ » +ButtonInstall=&Տեղադրել +ButtonOK=Լավ +ButtonCancel=Չեղարկել +ButtonYes=&Այո +ButtonYesToAll=Այո բոլորի &համար +ButtonNo=&Ոչ +ButtonNoToAll=Ո&չ բոլորի համար +ButtonFinish=&Ավարտել +ButtonBrowse=&Ընտրել... +ButtonWizardBrowse=&Ընտրել... +ButtonNewFolder=&Ստեղծել պանակ + +; *** "Select Language" dialog messages +SelectLanguageTitle=Ընտրել տեղակայիչի լեզուն +SelectLanguageLabel=Ընտրեք այն լեզուն, որը օգտագործվելու է տեղադրման ընթացքում: + +; *** Common wizard text +ClickNext=Սեղմեք «Հաջորդ»՝ շարունակելու համար կամ «Չեղարկել»՝ տեղակայիչը փակելու համար։ +BeveledLabel= +BrowseDialogTitle=Ընտրել պանակ +BrowseDialogLabel=Ընտրեք պանակը ցանկից և սեղմեք «Լավ»։ +NewFolderName=Նոր պանակ + +; *** "Welcome" wizard page +WelcomeLabel1=Ձեզ ողջունում է [name]-ի տեղակայման օգնականը +WelcomeLabel2=Ծրագիրը կտեղադրի [name/ver]-ը Ձեր համակարգչում։%n%nՇարունակելուց առաջ խորհուրդ ենք տալիս փակել բոլոր աշխատող ծրագրերը։ + +; *** "Password" wizard page +WizardPassword=Գաղտնաբառ +PasswordLabel1=Ծրագիրը պաշտպանված է գաղտնաբառով։ +PasswordLabel3=Մուտքագրեք գաղտնաբառը և սեղմեք «Հաջորդ»։ +PasswordEditLabel=&Գաղտնաբառ. +IncorrectPassword=Մուտքագրված գաղտնաբառը սխալ է, կրկին փորձեք։ + +; *** "License Agreement" wizard page +WizardLicense=Արտոնագրային համաձայնագիր +LicenseLabel=Խնդրում ենք շարունակելուց առաջ կարդալ հետևյալ տեղեկությունը։ +LicenseLabel3=Կարդացեք արտոնագրային համաձայնագիրը։ Շարունակելուց առաջ պետք է ընդունեք նշված պայմանները։ +LicenseAccepted=&Ընդունում եմ արտոնագրային համաձայնագիրը +LicenseNotAccepted=&Չեմ ընդունում արտոնագրային համաձայնագիրը + +; *** "Information" wizard pages +WizardInfoBefore=Տեղեկություն +InfoBeforeLabel=Շարունակելուց առաջ կարդացեք այս տեղեկությունը։ +InfoBeforeClickLabel=Եթե պատրաստ եք սեղմեք «Հաջորդը»։ +WizardInfoAfter=Տեղեկություն +InfoAfterLabel=Շարունակելուց առաջ կարդացեք այս տեղեկությունը։ +InfoAfterClickLabel=Երբ պատրաստ լինեք շարունակելու՝ սեղմեք «Հաջորդ»։ + +; *** "User Information" wizard page +WizardUserInfo=Տեղեկություն օգտվողի մասին +UserInfoDesc=Գրեք տվյալներ Ձեր մասին +UserInfoName=&Օգտվողի անուն և ազգանուն. +UserInfoOrg=&Կազմակերպություն. +UserInfoSerial=&Հերթական համար. +UserInfoNameRequired=Պետք է գրեք Ձեր անունը։ + +; *** "Select Destination Location" wizard page +WizardSelectDir=Ընտրել տեղակադրման պանակը +SelectDirDesc=Ո՞ր պանակում տեղադրել [name]-ը։ +SelectDirLabel3=Ծրագիրը կտեղադրի [name]-ը հետևյալ պանակում։ +SelectDirBrowseLabel=Սեղմեք «Հաջորդ»՝ շարունակելու համար։ Եթե ցանկանում եք ընտրել այլ պանակ՝ սեղմեք «Ընտրել»։ +DiskSpaceGBLabel=Առնվազն [gb] ԳԲ ազատ տեղ է պահանջվում: +DiskSpaceMBLabel=Առնվազն [mb] ՄԲ ազատ տեղ է պահանջվում: +CannotInstallToNetworkDrive=Հնարավոր չէ տեղադրել Ցանցային հիշասարքում։ +CannotInstallToUNCPath=Հնարավոր չէ տեղադրել UNC ուղիում։ +InvalidPath=Պետք է նշեք ամբողջական ուղին՝ հիշասարքի տառով, օրինակ՝%n%nC:\APP%n%nկամ UNC ուղի՝ %n%n\\սպասարկիչի_անունը\ռեսուրսի_անունը +InvalidDrive=Ընտրված հիշասարքը կամ ցանցային ուղին գոյություն չունեն կամ անհասանելի են։ Ընտրեք այլ ուղի։ +DiskSpaceWarningTitle=Չկա պահանջվող չափով ազատ տեղ +DiskSpaceWarning=Առնվազն %1 ԿԲ ազատ տեղ է պահանջվում, մինչդեռ հասանելի է ընդամենը %2 ԿԲ։%n%nԱյնուհանդերձ, շարունակե՞լ։ +DirNameTooLong=Պանակի անունը կամ ուղին երկար են: +InvalidDirName=Պանակի նշված անունը անընդունելի է։ +BadDirName32=Անվան մեջ չպետք է լինեն հետևյալ գրանշանները՝ %n%n%1 +DirExistsTitle=Թղթապանակը գոյություն ունի +DirExists=%n%n%1%n%n պանակը արդեն գոյություն ունի։ Այնուհանդերձ, տեղադրե՞լ այստեղ։ +DirDoesntExistTitle=Պանակ գոյություն չունի +DirDoesntExist=%n%n%1%n%n պանակը գոյություն չունի։ Ստեղծե՞լ այն։ + +; *** "Select Components" wizard page +WizardSelectComponents=Ընտրել բաղադրիչներ +SelectComponentsDesc=Ո՞ր ֆայլերը պետք է տեղադրվեն։ +SelectComponentsLabel2=Նշեք այն ֆայլերը, որոնք պետք է տեղադրվեն, ապանշեք նրանք, որոնք չպետք է տեղադրվեն։ Սեղմեք «Հաջորդ»՝ շարունակելու համար։ +FullInstallation=Լրիվ տեղադրում +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Սեղմված տեղադրում +CustomInstallation=Ընտրովի տեղադրում +NoUninstallWarningTitle=Տեղակայվող ֆայլերը +NoUninstallWarning=Տեղակայիչ ծրագիրը հայտնաբերել է, որ հետևյալ բաղադրիչները արդեն տեղադրված են Ձեր համակարգչում։ %n%n%1%n%nԱյս բաղադրիչների ընտրության վերակայումը չի ջնջի դրանք։%n%nՇարունակե՞լ։ +ComponentSize1=%1 ԿԲ +ComponentSize2=%1 ՄԲ +ComponentsDiskSpaceGBLabel=Ընթացիկ ընտրումը պահանջում է առնվազն [gb] ԳԲ տեղ հիշասարքում: +ComponentsDiskSpaceMBLabel=Տվյալ ընտրությունը պահանջում է ամենաքիչը [mb] ՄԲ տեղ հիշասարքում: + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Լրացուցիչ առաջադրանքներ +SelectTasksDesc=Ի՞նչ լրացուցիչ առաջադրանքներ պետք է կատարվեն։ +SelectTasksLabel2=Ընտրեք լրացուցիչ առաջադրանքներ, որոնք պետք է կատարվեն [name]-ի տեղադրման ընթացքում, ապա սեղմեք «Հաջորդ». + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Ընտրել «Մեկնարկ» ցանկի պանակը +SelectStartMenuFolderDesc=Որտե՞ղ ստեղծել դյուրանցումներ. +SelectStartMenuFolderLabel3=Ծրագիրը կստեղծի դյուրանցումներ «Մեկնարկ» ցանկի հետևյալ պանակում։ +SelectStartMenuFolderBrowseLabel=Սեղմեք «Հաջորդ»՝ շարունակելու համար։ Եթե ցանկանում եք ընտրեք այլ պանակ՝ սեղմեք «Ընտրել»։ +MustEnterGroupName=Պետք է գրել պանակի անունը։ +GroupNameTooLong=Պանակի անունը կամ ուղին շատ երկար են։ +InvalidGroupName=Նշված անունը անընդունելի է։ +BadGroupName=Անվան մեջ չպետք է լինեն հետևյալ գրանշանները՝ %n%n%1 +NoProgramGroupCheck2=&Չստեղծել պանակ «Մեկնարկ» ցանկում + +; *** "Ready to Install" wizard page +WizardReady=Պատրաստ է +ReadyLabel1=Տեղակայիչը պատրաստ է սկսել [name]-ի տեղադրումը։ +ReadyLabel2a=Սեղմեք «Տեղադրել»՝ շարունակելու համար կամ «Նախորդ»՝ եթե ցանկանում եք դիտել կամ փոփոխել տեղադրելու կարգավորումները։ +ReadyLabel2b=Սեղմեք «Տեղադրել»՝ շարունակելու համար։ +ReadyMemoUserInfo=Տեղեկություն օգտվողի մասին. +ReadyMemoDir=Տեղադրելու պանակ. +ReadyMemoType=Տեղադրման ձև. +ReadyMemoComponents=Ընտրված բաղադրիչներ. +ReadyMemoGroup=Թղթապանակ «Մեկնարկ» ցանկում. +ReadyMemoTasks=Լրացուցիչ առաջադրանքներ. +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Լրացուցիչ ֆայլերի ներբեռնում... +ButtonStopDownload=&Կանգնեցնել ներբեռնումը +StopDownload=Համոզվա՞ծ եք, որ պետք է կանգնեցնել ներբեռնումը: +ErrorDownloadAborted=Ներբեռնումը կասեցված է +ErrorDownloadFailed=Ներբեռնումը ձախողվեց. %1 %2 +ErrorDownloadSizeFailed=Չափի ստացումը ձախողվեց. %1 %2 +ErrorFileHash1=Ֆահլի հաշվեգումարը ձախողվեց. %1 +ErrorFileHash2=Ֆայլի անվավեր հաշվեգումար. ակընկալվում էր %1, գտնվել է %2 +ErrorProgress=Անվավեր ընթացք. %1-ը %2-ից +ErrorFileSize=Ֆայլի անվավեր աչփ. ակընկալվում էր %1, գտնվել է %2 +; *** "Preparing to Install" wizard page +WizardPreparing=Նախատրաստում է տեղադրումը +PreparingDesc=Տեղակայիչը պատրաստվում է տեղադրել [name]-ը ձեր համակարգչում։ +PreviousInstallNotCompleted=Այլ ծրագրի տեղադրումը կամ ապատեղադրումը չի ավարտվել։ Այն ավարտելու համար պետք է վերամեկնարկեք համակարգիչը։%n%nՎերամեկնարկելուց հետո կրկին բացեք տեղակայման փաթեթը՝ [name]-ի տեղադրումը ավարտելու համար։ +CannotContinue=Հնարավոր չէ շարունակել։ Սեղմեք «Չեղարկել»՝ ծրագիրը փակելու համար։ +ApplicationsFound=Հետևյալ ծրագրերը օգտագործում են ֆայլեր, որոնք պետք է թարմացվեն տեղակայիչի կողմից։ Թույլատրեք տեղակայիչին ինքնաբար փակելու այդ ծրագրերը։ +ApplicationsFound2=Հետևյալ ծրագրերը օգտագործում են ֆայլեր, որոնք պետք է թարմացվեն տեղակայիչի կողմից։ Թույլատրեք տեղակայիչին ինքնաբար փակելու այդ ծրագրերը։ Տեղադրումը ավարտելուց հետո տեղակայիչը կփորձի վերամեկնարկել այդ ծրագրերը։ +CloseApplications=&Ինքնաբար փակել ծրագրերը +DontCloseApplications=&Չփակել ծրագրերը +ErrorCloseApplications=Տեղակայիչը չկարողացավ ինքնաբար փակել բոլոր ծրագրերը: Խորհուրդ ենք տալիս փակել այն բոլոր ծրագրերը, որոնք պետք է թարմացվեն տեղակայիչի կողմից: +PrepareToInstallNeedsRestart=Տեղակայիչը պետք է վերամեկնարկի ձեր համակարգիչը: Դրանից հետո կրկին աշխատեցրեք այն՝ ավարտելու համար [name]-ի տեղադրումը:%n%nՑանկանո՞ւմ եք վերամեկնարկել հիմա: + +; *** "Installing" wizard page +WizardInstalling=Տեղադրում +InstallingLabel=Խնդրում ենք սպասել մինչ [name]-ը կտեղադրվի Ձեր համակարգչում։ + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=[name]-ի տեղադրման ավարտ +FinishedLabelNoIcons=[name] ծրագիրը տեղադրվել է Ձեր համակարգչում։ +FinishedLabel=[name] ծրագիրը տեղադրվել է Ձեր համակարգչում։ +ClickFinish=Սեղմեք «Ավարտել»՝ տեղակայիչը փակելու համար։ +FinishedRestartLabel=[name]-ի տեղադրումը ավարտելու համար պետք է վերամեկնարկել համակարգիչը։ վերամեկնարկե՞լ հիմա։ +FinishedRestartMessage=[name]-ի տեղադրումը ավարտելու համար պետք է վերամեկնարկել համակարգիչը։ %n%վերամեկնարկե՞լ հիմա։ +ShowReadmeCheck=Նայել README ֆայլը։ +YesRadio=&Այո, վերամեկնարկել +NoRadio=&Ոչ, ես հետո վերամեկնարկեմ +; used for example as 'Run MyProg.exe' +RunEntryExec=Աշխատեցնել %1-ը +; used for example as 'View Readme.txt' +RunEntryShellExec=Նայել %1-ը + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Տեղակայիչը պահանջում է հաջորդ սկավառակը +SelectDiskLabel2=Զետեղեք %1 սկավառակը և սեղմեք «Լավ»։ %n%nԵթե ֆայլերի պանակը գտնվում է այլ տեղ, ապա ընտրեք ճիշտ ուղին կամ սեղմեք «Ընտրել»։ +PathLabel=&Ուղին. +FileNotInDir2="%1" ֆայլը չի գտնվել "%2"-ում։ Զետեղեք ճիշտ սկավառակ կամ ընտրեք այլ պանակ։ +SelectDirectoryLabel=Խնդրում ենք նշել հաջորդ սկավառակի տեղադրությունը։ + +; *** Installation phase messages +SetupAborted=Տեղակայումը չի ավարտվել։ %n%nՈւղղեք խնդիրը և կրկին փորձեք։ +AbortRetryIgnoreSelectAction=Ընտրեք գործողություն +AbortRetryIgnoreRetry=&Կրկին փորձել +AbortRetryIgnoreIgnore=&Անտեսել սխալը և շարունակել +AbortRetryIgnoreCancel=Չեղարկել տեղադրումը + +; *** Installation status messages +StatusClosingApplications=Փակում է ծրագրերը... +StatusCreateDirs=Պանակների ստեղծում... +StatusExtractFiles=Ֆայլերի դուրս բերում... +StatusCreateIcons=Դյուրանցումների ստեղծում... +StatusCreateIniEntries=INI ֆայլերի ստեղծում... +StatusCreateRegistryEntries=Գրանցամատյանի գրանցումների ստեղծում... +StatusRegisterFiles=Ֆայլերի գրանցում... +StatusSavingUninstall=Ապատեղադրելու տեղեկության պահում... +StatusRunProgram=Տեղադրելու ավարտ... +StatusRestartingApplications=Ծրագրերի վերամեկնարկում... +StatusRollback=Փոփոխությունների հետ բերում... + +; *** Misc. errors +ErrorInternal2=Ներքին սխալ %1 +ErrorFunctionFailedNoCode=%1. վթար +ErrorFunctionFailed=%1. վթար, կոդը՝ %2 +ErrorFunctionFailedWithMessage=%1. վթար, կոդը՝ %2.%n%3 +ErrorExecutingProgram=Հնարավոր չէ կատարել %n%1 ֆայլը + +; *** Registry errors +ErrorRegOpenKey=Գրանցամատյանի բանալին բացելու սխալ՝ %n%1\%2 +ErrorRegCreateKey=Գրանցամատյանի բանալին ստեղծելու սխալ՝ %n%1\%2 +ErrorRegWriteKey=Գրանցամատյանի բանալիում գրանցում կատարելու սխալ՝ %n%1\%2 + +; *** INI errors +ErrorIniEntry=Սխալ՝ "%1" INI ֆայլում գրառում կատարելիս։ + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=Բաց թողնել այս ֆայլը (խորհուրդ չի տրվում) +FileAbortRetryIgnoreIgnoreNotRecommended=Անտեսել սխալը և շարունակել (խորհուրդ չի տրվում) +SourceIsCorrupted=Սկզբնական ֆայլը վնասված է։ +SourceDoesntExist=Սկզբնական "%1" ֆայլը գոյություն չունի +ExistingFileReadOnly2=Առկա ֆայլը չի կարող փոխարինվել, քանի որ այն նշված է որպես միայն կարդալու: +ExistingFileReadOnlyRetry=&Հեռացրեք միայն կարդալ հատկանիշը և կրկին փորձեք +ExistingFileReadOnlyKeepExisting=&Պահել առկա ֆայլը +ErrorReadingExistingDest=Սխալ՝ ֆայլը կարդալիս. +FileExistsSelectAction=Ընտրեք գործողություն +FileExists2=Ֆայլը գոյություն չունի +FileExistsOverwriteExisting=&Վրագրել առկա ֆայլը +FileExistsKeepExisting=&Պահել առկա ֆայլը +FileExistsOverwriteOrKeepAll=&Անել սա հաջորդ բախման ժամանակ +ExistingFileNewerSelectAction=Ընտրեք գործողություն +ExistingFileNewer2=Առկա ֆայլը ավելի նոր է, քան այն, որ տեղակայիչը փորձում է տեղադրել: +ExistingFileNewerOverwriteExisting=&Վրագրել առկա ֆայլը +ExistingFileNewerKeepExisting=&Պահել առկա ֆայլը (հանձնարարելի) +ExistingFileNewerOverwriteOrKeepAll=&Անել սա հաջորդ բախման ժամանակ +ErrorChangingAttr=Սխալ՝ ընթացիկ ֆայլի հատկանիշները փոխելիս. +ErrorCreatingTemp=Սխալ՝ նշված պանակում ֆայլ ստեղծելիս. +ErrorReadingSource=Սխալ՝ ֆայլը կարդալիս. +ErrorCopying=Սխալ՝ ֆայլը պատճենելիս. +ErrorReplacingExistingFile=Սխալ՝ գոյություն ունեցող ֆայլը փոխարինելիս. +ErrorRestartReplace=RestartReplace ձախողում. +ErrorRenamingTemp=Սխալ՝ նպատակակետ պանակում՝ ֆայլը վերանվանելիս. +ErrorRegisterServer=Հնարավոր չէ գրանցել DLL/OCX-ը. %1 +ErrorRegSvr32Failed=RegSvr32-ի ձախողում, կոդ՝ %1 +ErrorRegisterTypeLib=Հնարավոր չէ գրանցել դարանները՝ %1 +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32 բիթային +UninstallDisplayNameMark64Bit=64 բիթային +UninstallDisplayNameMarkAllUsers=Բոլոր օգտվողները +UninstallDisplayNameMarkCurrentUser=Ընթացիկ օգտվողը + +; *** Post-installation errors +ErrorOpeningReadme=Սխալ՝ README ֆայլը բացելիս։ +ErrorRestartingComputer=Հնարավոր չեղավ վերամեկնարկել համակարգիչը։ Ինքներդ փորձեք։ + +; *** Uninstaller messages +UninstallNotFound="%1" ֆայլը գոյություն չունի։ Հնարավոր չէ ապատեղադրել։ +UninstallOpenError="%1" ֆայլը հնարավոր չէ բացել: Հնարավոր չէ ապատեղադրել +UninstallUnsupportedVer=Ապատեղադրելու "%1" մատյանի ֆայլը անճանաչելի է ապատեղադրող ծրագրի այս տարբերակի համար։ Հնարավոր չէ ապատեղադրել +UninstallUnknownEntry=Անհայտ գրառում է (%1)՝ հայնաբերվել ապատեղադրելու մատյանում +ConfirmUninstall=Ապատեղադրե՞լ %1-ը և նրա բոլոր բաղադրիչները։ +UninstallOnlyOnWin64=Հնարավոր է ապատեղադրել միայն 64 բիթանոց Windows-ում։ +OnlyAdminCanUninstall=Հնարավոր է ապատեղադրել միայն Ադմինի իրավունքներով։ +UninstallStatusLabel=Խնդրում ենք սպասել, մինչև %1-ը ապատեղադրվում է Ձեր համակարգչից։ +UninstalledAll=%1 ծրագիրը ապատեղադրվել է համակարգչից։ +UninstalledMost=%1-ը ապատեղադրվեց Ձեր համակարգչից։%n%nՈրոշ ֆայլեր հնարավոր չեղավ հեռացնել։ Ինքներդ հեռացրեք դրանք։ +UninstalledAndNeedsRestart=%1-ի ապատեղադրումը ավարտելու համար պետք է վերամեկնարկել համակարգիչը։%n%nՎերամեկնարկե՞լ։ +UninstallDataCorrupted="%1" ֆայլը վնասված է։ Հնարավոր չէ ապատեղադրել + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Հեռացնե՞լ համատեղ օգտագործվող ֆայլը։ +ConfirmDeleteSharedFile2=Համակարգը նշում է, որ հետևյալ համատեղ օգտագործվող ֆայլը այլևս չի օգտագործվում այլ ծրագրի կողմից։ Ապատեղադրե՞լ այն։ %n%nԵթե համոզված չեք սեղմեք «Ոչ»։ +SharedFileNameLabel=Ֆայլի անուն. +SharedFileLocationLabel=Տեղադրություն. +WizardUninstalling=Ապատեղադրելու վիճակ +StatusUninstalling=%1-ի ապատեղադրում... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=%1-ի տեղադրում։ +ShutdownBlockReasonUninstallingApp=%1-ի ապատեղադրում։ + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 տարբերակ՝ %2 +AdditionalIcons=Լրացուցիչ դյուրանցումներ +CreateDesktopIcon=Ստեղծել դյուրանցում &Աշխատասեղանին +CreateQuickLaunchIcon=Ստեղծել դյուրանցում &Արագ թողարկման գոտում +ProgramOnTheWeb=%1-ի վեբ կայքը +UninstallProgram=%1-ի ապատեղադրում +LaunchProgram=Բացել %1-ը +AssocFileExtension=Հա&մակցել %1-ը %2 ֆայլերի հետ։ +AssocingFileExtension=%1-ը համակցվում է %2 ընդլայնումով ֆայլերի հետ... +AutoStartProgramGroupDescription=Ինքնամեկնարկ. +AutoStartProgram=Ինքնաբար մեկնարկել %1-ը +AddonHostProgramNotFound=%1 չի կարող տեղադրվել Ձեր ընտրած պանակում։%n%nՇարունակե՞լ։ + diff --git a/Files/Languages/BrazilianPortuguese.isl b/Files/Languages/BrazilianPortuguese.isl new file mode 100644 index 00000000..3bcca670 --- /dev/null +++ b/Files/Languages/BrazilianPortuguese.isl @@ -0,0 +1,384 @@ +; *** Inno Setup version 6.1.0+ Brazilian Portuguese messages made by Cesar82 cesar.zanetti.82@gmail.com *** +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Portugus Brasileiro +LanguageID=$0416 +LanguageCodePage=1252 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Instalador +SetupWindowTitle=%1 - Instalador +UninstallAppTitle=Desinstalar +UninstallAppFullTitle=Desinstalar %1 + +; *** Misc. common +InformationTitle=Informao +ConfirmTitle=Confirmar +ErrorTitle=Erro + +; *** SetupLdr messages +SetupLdrStartupMessage=Isto instalar o %1. Voc deseja continuar? +LdrCannotCreateTemp=Incapaz de criar um arquivo temporrio. Instalao abortada +LdrCannotExecTemp=Incapaz de executar o arquivo no diretrio temporrio. Instalao abortada +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nErro %2: %3 +SetupFileMissing=Est faltando o arquivo %1 do diretrio de instalao. Por favor corrija o problema ou obtenha uma nova cpia do programa. +SetupFileCorrupt=Os arquivos de instalao esto corrompidos. Por favor obtenha uma nova cpia do programa. +SetupFileCorruptOrWrongVer=Os arquivos de instalao esto corrompidos ou so incompatveis com esta verso do instalador. Por favor corrija o problema ou obtenha uma nova cpia do programa. +InvalidParameter=Um parmetro invlido foi passado na linha de comando:%n%n%1 +SetupAlreadyRunning=O instalador j est em execuo. +WindowsVersionNotSupported=Este programa no suporta a verso do Windows que seu computador est executando. +WindowsServicePackRequired=Este programa requer o %1 Service Pack %2 ou superior. +NotOnThisPlatform=Este programa no executar no %1. +OnlyOnThisPlatform=Este programa deve ser executado no %1. +OnlyOnTheseArchitectures=Este programa s pode ser instalado em verses do Windows projetadas para as seguintes arquiteturas de processadores:%n%n% 1 +WinVersionTooLowError=Este programa requer a %1 verso %2 ou superior. +WinVersionTooHighError=Este programa no pode ser instalado na %1 verso %2 ou superior. +AdminPrivilegesRequired=Voc deve estar logado como administrador quando instalar este programa. +PowerUserPrivilegesRequired=Voc deve estar logado como administrador ou como um membro do grupo de Usurios Power quando instalar este programa. +SetupAppRunningError=O instalador detectou que o %1 est atualmente em execuo.%n%nPor favor feche todas as instncias dele agora, ento clique em OK pra continuar ou em Cancelar pra sair. +UninstallAppRunningError=O Desinstalador detectou que o %1 est atualmente em execuo.%n%nPor favor feche todas as instncias dele agora, ento clique em OK pra continuar ou em Cancelar pra sair. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Selecione o Modo de Instalao do Instalador +PrivilegesRequiredOverrideInstruction=Selecione o modo de instalao +PrivilegesRequiredOverrideText1=O %1 pode ser instalado pra todos os usurios (requer privilgios administrativos) ou s pra voc. +PrivilegesRequiredOverrideText2=O %1 pode ser instalado s pra voc ou pra todos os usurios (requer privilgios administrativos). +PrivilegesRequiredOverrideAllUsers=Instalar pra &todos os usurios +PrivilegesRequiredOverrideAllUsersRecommended=Instalar pra &todos os usurios (recomendado) +PrivilegesRequiredOverrideCurrentUser=Instalar s &pra mim +PrivilegesRequiredOverrideCurrentUserRecommended=Instalar s &pra mim (recomendado) + +; *** Misc. errors +ErrorCreatingDir=O instalador foi incapaz de criar o diretrio "%1" +ErrorTooManyFilesInDir=Incapaz de criar um arquivo no diretrio "%1" porque ele contm arquivos demais + +; *** Setup common messages +ExitSetupTitle=Sair do Instalador +ExitSetupMessage=A Instalao no est completa. Se voc sair agora o programa no ser instalado.%n%nVoc pode executar o instalador de novo outra hora pra completar a instalao.%n%nSair do instalador? +AboutSetupMenuItem=&Sobre o Instalador... +AboutSetupTitle=Sobre o Instalador +AboutSetupMessage=%1 verso %2%n%3%n%n%1 home page:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< &Voltar +ButtonNext=&Avanar > +ButtonInstall=&Instalar +ButtonOK=OK +ButtonCancel=Cancelar +ButtonYes=&Sim +ButtonYesToAll=Sim pra &Todos +ButtonNo=&No +ButtonNoToAll=N&o pra Todos +ButtonFinish=&Concluir +ButtonBrowse=&Procurar... +ButtonWizardBrowse=P&rocurar... +ButtonNewFolder=&Criar Nova Pasta + +; *** "Select Language" dialog messages +SelectLanguageTitle=Selecione o Idioma do Instalador +SelectLanguageLabel=Selecione o idioma pra usar durante a instalao: + +; *** Common wizard text +ClickNext=Clique em Avanar pra continuar ou em Cancelar pra sair do instalador. +BeveledLabel= +BrowseDialogTitle=Procurar Pasta +BrowseDialogLabel=Selecione uma pasta na lista abaixo, ento clique em OK. +NewFolderName=Nova Pasta + +; *** "Welcome" wizard page +WelcomeLabel1=Bem-vindo ao Assistente do Instalador do [name] +WelcomeLabel2=Isto instalar o [name/ver] no seu computador.%n%n recomendado que voc feche todos os outros aplicativos antes de continuar. + +; *** "Password" wizard page +WizardPassword=Senha +PasswordLabel1=Esta instalao est protegida por senha. +PasswordLabel3=Por favor fornea a senha, ento clique em Avanar pra continuar. As senhas so caso-sensitivo. +PasswordEditLabel=&Senha: +IncorrectPassword=A senha que voc inseriu no est correta. Por favor tente de novo. + +; *** "License Agreement" wizard page +WizardLicense=Acordo de Licena +LicenseLabel=Por favor leia as seguintes informaes importantes antes de continuar. +LicenseLabel3=Por favor leia o seguinte Acordo de Licena. Voc deve aceitar os termos deste acordo antes de continuar com a instalao. +LicenseAccepted=Eu &aceito o acordo +LicenseNotAccepted=Eu &no aceito o acordo + +; *** "Information" wizard pages +WizardInfoBefore=Informao +InfoBeforeLabel=Por favor leia as seguintes informaes importantes antes de continuar. +InfoBeforeClickLabel=Quando voc estiver pronto pra continuar com o instalador, clique em Avanar. +WizardInfoAfter=Informao +InfoAfterLabel=Por favor leia as seguintes informaes importantes antes de continuar. +InfoAfterClickLabel=Quando voc estiver pronto pra continuar com o instalador, clique em Avanar. + +; *** "User Information" wizard page +WizardUserInfo=Informao do Usurio +UserInfoDesc=Por favor insira suas informaes. +UserInfoName=&Nome do Usurio: +UserInfoOrg=&Organizao: +UserInfoSerial=&Nmero de Srie: +UserInfoNameRequired=Voc deve inserir um nome. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Selecione o Local de Destino +SelectDirDesc=Aonde o [name] deve ser instalado? +SelectDirLabel3=O instalador instalar o [name] na seguinte pasta. +SelectDirBrowseLabel=Pra continuar clique em Avanar. Se voc gostaria de selecionar uma pasta diferente, clique em Procurar. +DiskSpaceGBLabel=Pelo menos [gb] MBs de espao livre em disco so requeridos. +DiskSpaceMBLabel=Pelo menos [mb] MBs de espao livre em disco so requeridos. +CannotInstallToNetworkDrive=O instalador no pode instalar em um drive de rede. +CannotInstallToUNCPath=O instalador no pode instalar em um caminho UNC. +InvalidPath=Voc deve inserir um caminho completo com a letra do drive; por exemplo:%n%nC:\APP%n%no um caminho UNC no formulrio:%n%n\\server\share +InvalidDrive=O drive ou compartilhamento UNC que voc selecionou no existe ou no est acessvel. Por favor selecione outro. +DiskSpaceWarningTitle=Sem Espao em Disco o Bastante +DiskSpaceWarning=O instalador requer pelo menos %1 KBs de espao livre pra instalar mas o drive selecionado s tem %2 KBs disponveis.%n%nVoc quer continuar de qualquer maneira? +DirNameTooLong=O nome ou caminho da pasta muito longo. +InvalidDirName=O nome da pasta no vlido. +BadDirName32=Os nomes das pastas no pode incluir quaisquer dos seguintes caracteres:%n%n%1 +DirExistsTitle=A Pasta Existe +DirExists=A pasta:%n%n%1%n%nj existe. Voc gostaria de instalar nesta pasta de qualquer maneira? +DirDoesntExistTitle=A Pasta No Existe +DirDoesntExist=A pasta:%n%n%1%n%nno existe. Voc gostaria quer a pasta fosse criada? + +; *** "Select Components" wizard page +WizardSelectComponents=Selecionar Componentes +SelectComponentsDesc=Quais componentes devem ser instalados? +SelectComponentsLabel2=Selecione os componentes que voc quer instalar; desmarque os componentes que voc no quer instalar. Clique em Avanar quando voc estiver pronto pra continuar. +FullInstallation=Instalao completa +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Instalao compacta +CustomInstallation=Instalao personalizada +NoUninstallWarningTitle=O Componente Existe +NoUninstallWarning=O instalador detectou que os seguintes componentes j esto instalados no seu computador:%n%n%1%n%nNo selecionar estes componentes no desinstalar eles.%n%nVoc gostaria de continuar de qualquer maneira? +ComponentSize1=%1 KBs +ComponentSize2=%1 MBs +ComponentsDiskSpaceGBLabel=A seleo atual requer pelo menos [gb] MBs de espao em disco. +ComponentsDiskSpaceMBLabel=A seleo atual requer pelo menos [mb] MBs de espao em disco. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Selecionar Tarefas Adicionais +SelectTasksDesc=Quais tarefas adicionais devem ser executadas? +SelectTasksLabel2=Selecione as tarefas adicionais que voc gostaria que o instalador executasse enquanto instala o [name], ento clique em Avanar. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Selecionar a Pasta do Menu Iniciar +SelectStartMenuFolderDesc=Aonde o instalador deve colocar os atalhos do programa? +SelectStartMenuFolderLabel3=O instalador criar os atalhos do programa na seguinte pasta do Menu Iniciar. +SelectStartMenuFolderBrowseLabel=Pra continuar clique em Avanar. Se voc gostaria de selecionar uma pasta diferente, clique em Procurar. +MustEnterGroupName=Voc deve inserir um nome de pasta. +GroupNameTooLong=O nome ou caminho da pasta muito longo. +InvalidGroupName=O nome da pasta no vlido. +BadGroupName=O nome da pasta no pode incluir quaisquer dos seguintes caracteres:%n%n%1 +NoProgramGroupCheck2=&No criar uma pasta no Menu Iniciar + +; *** "Ready to Install" wizard page +WizardReady=Pronto pra Instalar +ReadyLabel1=O instalador est agora pronto pra comear a instalar o [name] no seu computador. +ReadyLabel2a=Clique em Instalar pra continuar com a instalao ou clique em Voltar se voc quer revisar ou mudar quaisquer configuraes. +ReadyLabel2b=Clique em Instalar pra continuar com a instalao. +ReadyMemoUserInfo=Informao do usurio: +ReadyMemoDir=Local de destino: +ReadyMemoType=Tipo de instalao: +ReadyMemoComponents=Componentes selecionados: +ReadyMemoGroup=Pasta do Menu Iniciar: +ReadyMemoTasks=Tarefas adicionais: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Baixando arquivos adicionais... +ButtonStopDownload=&Parar download +StopDownload=Tem certeza que deseja parar o download? +ErrorDownloadAborted=Download abortado +ErrorDownloadFailed=Download falhou: %1 %2 +ErrorDownloadSizeFailed=Falha ao obter o tamanho: %1 %2 +ErrorFileHash1=Falha no hash do arquivo: %1 +ErrorFileHash2=Hash de arquivo invlido: esperado %1, encontrado %2 +ErrorProgress=Progresso invlido: %1 de %2 +ErrorFileSize=Tamanho de arquivo invlido: esperado %1, encontrado %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Preparando pra Instalar +PreparingDesc=O instalador est se preparando pra instalar o [name] no seu computador. +PreviousInstallNotCompleted=A instalao/remoo de um programa anterior no foi completada. Voc precisar reiniciar o computador pra completar essa instalao.%n%nAps reiniciar seu computador execute o instalador de novo pra completar a instalao do [name]. +CannotContinue=O instalador no pode continuar. Por favor clique em Cancelar pra sair. +ApplicationsFound=Os aplicativos a seguir esto usando arquivos que precisam ser atualizados pelo instalador. recomendados que voc permita ao instalador fechar automaticamente estes aplicativos. +ApplicationsFound2=Os aplicativos a seguir esto usando arquivos que precisam ser atualizados pelo instalador. recomendados que voc permita ao instalador fechar automaticamente estes aplicativos. Aps a instalao ter completado, o instalador tentar reiniciar os aplicativos. +CloseApplications=&Fechar os aplicativos automaticamente +DontCloseApplications=&No fechar os aplicativos +ErrorCloseApplications=O instalador foi incapaz de fechar automaticamente todos os aplicativos. recomendado que voc feche todos os aplicativos usando os arquivos que precisam ser atualizados pelo instalador antes de continuar. +PrepareToInstallNeedsRestart=A instalao deve reiniciar seu computador. Depois de reiniciar o computador, execute a Instalao novamente para concluir a instalao de [name].%n%nDeseja reiniciar agora? + +; *** "Installing" wizard page +WizardInstalling=Instalando +InstallingLabel=Por favor espere enquanto o instalador instala o [name] no seu computador. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Completando o Assistente do Instalador do [name] +FinishedLabelNoIcons=O instalador terminou de instalar o [name] no seu computador. +FinishedLabel=O instalador terminou de instalar o [name] no seu computador. O aplicativo pode ser iniciado selecionando os atalhos instalados. +ClickFinish=Clique em Concluir pra sair do Instalador. +FinishedRestartLabel=Pra completar a instalao do [name], o instalador deve reiniciar seu computador. Voc gostaria de reiniciar agora? +FinishedRestartMessage=Pra completar a instalao do [name], o instalador deve reiniciar seu computador.%n%nVoc gostaria de reiniciar agora? +ShowReadmeCheck=Sim, eu gostaria de visualizar o arquivo README +YesRadio=&Sim, reiniciar o computador agora +NoRadio=&No, eu reiniciarei o computador depois +; used for example as 'Run MyProg.exe' +RunEntryExec=Executar %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Visualizar %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=O Instalador Precisa do Prximo Disco +SelectDiskLabel2=Por favor insira o Disco %1 e clique em OK.%n%nSe os arquivos neste disco podem ser achados numa pasta diferente do que a exibida abaixo, insira o caminho correto ou clique em Procurar. +PathLabel=&Caminho: +FileNotInDir2=O arquivo "%1" no pde ser localizado em "%2". Por favor insira o disco correto ou selecione outra pasta. +SelectDirectoryLabel=Por favor especifique o local do prximo disco. + +; *** Installation phase messages +SetupAborted=A instalao no foi completada.%n%nPor favor corrija o problema e execute o instalador de novo. +AbortRetryIgnoreSelectAction=Selecionar ao +AbortRetryIgnoreRetry=&Tentar de novo +AbortRetryIgnoreIgnore=&Ignorar o erro e continuar +AbortRetryIgnoreCancel=Cancelar instalao + +; *** Installation status messages +StatusClosingApplications=Fechando aplicativos... +StatusCreateDirs=Criando diretrios... +StatusExtractFiles=Extraindo arquivos... +StatusCreateIcons=Criando atalhos... +StatusCreateIniEntries=Criando entradas INI... +StatusCreateRegistryEntries=Criando entradas do registro... +StatusRegisterFiles=Registrando arquivos... +StatusSavingUninstall=Salvando informaes de desinstalao... +StatusRunProgram=Concluindo a instalao... +StatusRestartingApplications=Reiniciando os aplicativos... +StatusRollback=Desfazendo as mudanas... + +; *** Misc. errors +ErrorInternal2=Erro interno: %1 +ErrorFunctionFailedNoCode=%1 falhou +ErrorFunctionFailed=%1 falhou; cdigo %2 +ErrorFunctionFailedWithMessage=%1 falhou; cdigo %2.%n%3 +ErrorExecutingProgram=Incapaz de executar o arquivo:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Erro ao abrir a chave do registro:%n%1\%2 +ErrorRegCreateKey=Erro ao criar a chave do registro:%n%1\%2 +ErrorRegWriteKey=Erro ao gravar a chave do registro:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Erro ao criar a entrada INI no arquivo "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Ignorar este arquivo (no recomendado) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorar o erro e continuar (no recomendado) +SourceIsCorrupted=O arquivo de origem est corrompido +SourceDoesntExist=O arquivo de origem "%1" no existe +ExistingFileReadOnly2=O arquivo existente no pde ser substitudo porque est marcado como somente-leitura. +ExistingFileReadOnlyRetry=&Remover o atributo somente-leitura e tentar de novo +ExistingFileReadOnlyKeepExisting=&Manter o arquivo existente +ErrorReadingExistingDest=Um erro ocorreu enquanto tentava ler o arquivo existente: +FileExistsSelectAction=Selecione a ao +FileExists2=O arquivo j existe. +FileExistsOverwriteExisting=&Sobrescrever o arquivo existente +FileExistsKeepExisting=&Mantenha o arquivo existente +FileExistsOverwriteOrKeepAll=&Faa isso para os prximos conflitos +ExistingFileNewerSelectAction=Selecione a ao +ExistingFileNewer2=O arquivo existente mais recente do que aquele que o Setup est tentando instalar. +ExistingFileNewerOverwriteExisting=&Sobrescrever o arquivo existente +ExistingFileNewerKeepExisting=&Mantenha o arquivo existente (recomendado) +ExistingFileNewerOverwriteOrKeepAll=&Faa isso para os prximos conflitos +ErrorChangingAttr=Um erro ocorreu enquanto tentava mudar os atributos do arquivo existente: +ErrorCreatingTemp=Um erro ocorreu enquanto tentava criar um arquivo no diretrio destino: +ErrorReadingSource=Um erro ocorreu enquanto tentava ler o arquivo de origem: +ErrorCopying=Um erro ocorreu enquanto tentava copiar um arquivo: +ErrorReplacingExistingFile=Um erro ocorreu enquanto tentava substituir o arquivo existente: +ErrorRestartReplace=ReiniciarSubstituir falhou: +ErrorRenamingTemp=Um erro ocorreu enquanto tentava renomear um arquivo no diretrio destino: +ErrorRegisterServer=Incapaz de registrar a DLL/OCX: %1 +ErrorRegSvr32Failed=O RegSvr32 falhou com o cdigo de sada %1 +ErrorRegisterTypeLib=Incapaz de registrar a biblioteca de tipos: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32 bits +UninstallDisplayNameMark64Bit=64 bits +UninstallDisplayNameMarkAllUsers=Todos os usurios +UninstallDisplayNameMarkCurrentUser=Usurio atual + +; *** Post-installation errors +ErrorOpeningReadme=Um erro ocorreu enquanto tentava abrir o arquivo README. +ErrorRestartingComputer=O instalador foi incapaz de reiniciar o computador. Por favor faa isto manualmente. + +; *** Uninstaller messages +UninstallNotFound=O arquivo "%1" no existe. No consegue desinstalar. +UninstallOpenError=O arquivo "%1" no pde ser aberto. No consegue desinstalar +UninstallUnsupportedVer=O arquivo do log da desinstalao "%1" est num formato no reconhecido por esta verso do desinstalador. No consegue desinstalar +UninstallUnknownEntry=Uma entrada desconhecida (%1) foi encontrada no log da desinstalao +ConfirmUninstall=Voc tem certeza que voc quer remover completamente o %1 e todos os seus componentes? +UninstallOnlyOnWin64=Esta instalao s pode ser desinstalada em Windows 64 bits. +OnlyAdminCanUninstall=Esta instalao s pode ser desinstalada por um usurio com privilgios administrativos. +UninstallStatusLabel=Por favor espere enquanto o %1 removido do seu computador. +UninstalledAll=O %1 foi removido com sucesso do seu computador. +UninstalledMost=Desinstalao do %1 completa.%n%nAlguns elementos no puderam ser removidos. Estes podem ser removidos manualmente. +UninstalledAndNeedsRestart=Pra completar a desinstalao do %1, seu computador deve ser reiniciado.%n%nVoc gostaria de reiniciar agora? +UninstallDataCorrupted=O arquivo "%1" est corrompido. No consegue desinstalar + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Remover Arquivo Compartilhado? +ConfirmDeleteSharedFile2=O sistema indica que o seguinte arquivo compartilhado no est mais em uso por quaisquer programas. Voc gostaria que a Desinstalao removesse este arquivo compartilhado?%n%nSe quaisquer programas ainda esto usando este arquivo e ele removido, esses programas podem no funcionar apropriadamente. Se voc no tiver certeza escolha No. Deixar o arquivo no seu sistema no causar qualquer dano. +SharedFileNameLabel=Nome do arquivo: +SharedFileLocationLabel=Local: +WizardUninstalling=Status da Desinstalao +StatusUninstalling=Desinstalando o %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Instalando o %1. +ShutdownBlockReasonUninstallingApp=Desinstalando o %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 verso %2 +AdditionalIcons=Atalhos adicionais: +CreateDesktopIcon=Criar um atalho &na rea de trabalho +CreateQuickLaunchIcon=Criar um atalho na &barra de inicializao rpida +ProgramOnTheWeb=%1 na Web +UninstallProgram=Desinstalar o %1 +LaunchProgram=Iniciar o %1 +AssocFileExtension=&Associar o %1 com a extenso do arquivo %2 +AssocingFileExtension=Associando o %1 com a extenso do arquivo %2... +AutoStartProgramGroupDescription=Inicializao: +AutoStartProgram=Iniciar o %1 automaticamente +AddonHostProgramNotFound=O %1 no pde ser localizado na pasta que voc selecionou.%n%nVoc quer continuar de qualquer maneira? diff --git a/Files/Languages/Bulgarian.isl b/Files/Languages/Bulgarian.isl new file mode 100644 index 00000000..923aee29 --- /dev/null +++ b/Files/Languages/Bulgarian.isl @@ -0,0 +1,382 @@ +; *** Inno Setup version 6.1.0+ Bulgarian messages *** +; Ventsislav Dimitrov +; +; За да изтеглите преводи на този файл, предоставени от потребители, посетете: +; http://www.jrsoftware.org/files/istrans/ +; +; Забележка: когато превеждате, не добавяйте точка (.) в края на съобщения, +; които нямат, защото Inno Setup им добавя автоматично (прибавянето на точка +; ще доведе до показване на две точки). + +[LangOptions] +; Следните три записа са много важни. Уверете се, че сте прочел и разбирате +; раздела "[LangOptions]" на помощния файл. +LanguageName=Български +LanguageID=$0402 +LanguageCodePage=1251 +; Ако езикът, на който превеждате, изисква специална гарнитура или размер на +; шрифта, извадете от коментар съответните записи по-долу и ги променете +; според вашите нужди. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Заглавия на приложенията +SetupAppTitle=Инсталиране +SetupWindowTitle=Инсталиране на %1 +UninstallAppTitle=Деинсталиране +UninstallAppFullTitle=Деинсталиране на %1 + +; *** Заглавия от общ тип +InformationTitle=Информация +ConfirmTitle=Потвърждение +ErrorTitle=Грешка + +; *** Съобщения на зареждащия модул +SetupLdrStartupMessage=Ще се инсталира %1. Желаете ли да продължите? +LdrCannotCreateTemp=Не е възможно да се създаде временен файл. Инсталирането бе прекратено +LdrCannotExecTemp=Не е възможно да се стартира файл от временната директория. Инсталирането бе прекратено + +; *** Съобщения за грешка при стартиране +LastErrorMessage=%1.%n%nГрешка %2: %3 +SetupFileMissing=Файлът %1 липсва от инсталационната директория. Моля, отстранете проблема или се снабдете с ново копие на програмата. +SetupFileCorrupt=Инсталационните файлове са повредени. Моля, снабдете се с ново копие на програмата. +SetupFileCorruptOrWrongVer=Инсталационните файлове са повредени или несъвместими с тази версия на инсталатора. Моля, отстранете проблема или се снабдете с ново копие на програмата. +InvalidParameter=В командния ред е подаден невалиден параметър:%n%n%1 +SetupAlreadyRunning=Инсталаторът вече се изпълнява. +WindowsVersionNotSupported=Програмата не поддържа версията на Windows, с която работи компютърът ви. +WindowsServicePackRequired=Програмата изисква %1 Service Pack %2 или по-нов. +NotOnThisPlatform=Програмата не може да се изпълнява под %1. +OnlyOnThisPlatform=Програмата трябва да се изпълнява под %1. +OnlyOnTheseArchitectures=Програмата може да се инсталира само под версии на Windows за следните процесорни архитектури:%n%n%1 +WinVersionTooLowError=Програмата изисква %1 версия %2 или по-нова. +WinVersionTooHighError=Програмата не може да бъде инсталирана в %1 версия %2 или по-нова. +AdminPrivilegesRequired=За да инсталирате програмата, трябва да влезете като администратор. +PowerUserPrivilegesRequired=За да инсталирате програмата, трябва да влезете като администратор или потребител с разширени права. +SetupAppRunningError=Инсталаторът установи, че %1 се изпълнява в момента.%n%nМоля, затворете всички копия на програмата и натиснете "OK", за да продължите, или "Cancel" за изход. +UninstallAppRunningError=Деинсталаторът установи, че %1 се изпълнява в момента.%n%nМоля, затворете всички копия на програмата и натиснете "OK", за да продължите, или "Cancel" за изход. + +; *** Въпроси при стартиране +PrivilegesRequiredOverrideTitle=Избор на режим на инсталация +PrivilegesRequiredOverrideInstruction=Изберете режим на инсталация +PrivilegesRequiredOverrideText1=%1 може да бъде инсталирана за всички потребители (изисква администраторски привилегии) или само за Вас. +PrivilegesRequiredOverrideText2=%1 може да бъде инсталирана само за Вас или за всички потребители (изисква администраторски привилегии). +PrivilegesRequiredOverrideAllUsers=Инсталирай за &всички потребители +PrivilegesRequiredOverrideAllUsersRecommended=Инсталирай за &всички потребители (препоръчва се) +PrivilegesRequiredOverrideCurrentUser=Инсталирай само за &мен +PrivilegesRequiredOverrideCurrentUserRecommended=Инсталирай само за &мен (препоръчва се) + +; *** Други грешки +ErrorCreatingDir=Не е възможно да се създаде директория "%1" +ErrorTooManyFilesInDir=Не е възможно да се създаде файл в директорията "%1", тъй като тя съдържа твърде много файлове + +; *** Съобщения от общ тип на инсталатора +ExitSetupTitle=Затваряне на инсталатора +ExitSetupMessage=Инсталирането не е завършено. Ако затворите сега, програмата няма да бъде инсталирана.%n%nПо-късно можете отново да стартирате инсталатора, за да завършите инсталирането.%n%nЗатваряте ли инсталатора? +AboutSetupMenuItem=&За инсталатора... +AboutSetupTitle=За инсталатора +AboutSetupMessage=%1 версия %2%n%3%n%nУебстраница:%n%4 +AboutSetupNote= +TranslatorNote=Превод на български: Михаил Балабанов + +; *** Бутони +ButtonBack=< На&зад +ButtonNext=На&пред > +ButtonInstall=&Инсталиране +ButtonOK=OK +ButtonCancel=Отказ +ButtonYes=&Да +ButtonYesToAll=Да за &всички +ButtonNo=&Не +ButtonNoToAll=Не за в&сички +ButtonFinish=&Готово +ButtonBrowse=Пре&глед... +ButtonWizardBrowse=Пре&глед... +ButtonNewFolder=&Нова папка + +; *** Съобщения в диалоговия прозорец за избор на език +SelectLanguageTitle=Избор на език за инсталатора +SelectLanguageLabel=Изберете кой език ще ползвате с инсталатора. + +; *** Текстове от общ тип на съветника +ClickNext=Натиснете "Напред", за да продължите, или "Отказ" за затваряне на инсталатора. +BeveledLabel= +BrowseDialogTitle=Преглед за папка +BrowseDialogLabel=Изберете папка от долния списък и натиснете "OK". +NewFolderName=Нова папка + +; *** Страница "Добре дошли" на съветника +WelcomeLabel1=Добре дошли при Съветника за инсталиране на [name] +WelcomeLabel2=Съветникът ще инсталира [name/ver] във Вашия компютър.%n%nПрепоръчва се да затворите всички останали приложения, преди да продължите. + +; *** Страница "Парола" на съветника +WizardPassword=Парола +PasswordLabel1=Инсталацията е защитена с парола. +PasswordLabel3=Моля, въведете паролата и натиснете "Напред", за да продължите. Главни и малки букви са от значение. +PasswordEditLabel=&Парола: +IncorrectPassword=Въведената от вас парола е неправилна. Моля, опитайте отново. + +; *** Страница "Лицензионно споразумение" на съветника +WizardLicense=Лицензионно споразумение +LicenseLabel=Моля, прочетете следната важна информация, преди да продължите. +LicenseLabel3=Моля, прочетете следното Лицензионно споразумение. Преди инсталирането да продължи, трябва да приемете условията на споразумението. +LicenseAccepted=П&риемам споразумението +LicenseNotAccepted=&Не приемам споразумението + +; *** Страници "Информация" на съветника +WizardInfoBefore=Информация +InfoBeforeLabel=Моля, прочетете следната важна информация, преди да продължите. +InfoBeforeClickLabel=Когато сте готов да продължите, натиснете "Напред". +WizardInfoAfter=Информация +InfoAfterLabel=Моля, прочетете следната важна информация, преди да продължите. +InfoAfterClickLabel=Когато сте готов да продължите, натиснете "Напред". + +; *** Страница "Данни за потребител" на съветника +WizardUserInfo=Данни за потребител +UserInfoDesc=Моля, въведете вашите данни. +UserInfoName=&Име: +UserInfoOrg=&Организация: +UserInfoSerial=&Сериен номер: +UserInfoNameRequired=Трябва да въведете име. + +; *** Страница "Избор на местоназначение" на съветника +WizardSelectDir=Избор на местоназначение +SelectDirDesc=Къде да се инсталира [name]? +SelectDirLabel3=[name] ще се инсталира в следната папка. +SelectDirBrowseLabel=Натиснете "Напред", за да продължите. За да изберете друга папка, натиснете "Преглед". +DiskSpaceGBLabel=Изискват се поне [gb] ГБ свободно дисково пространство. +DiskSpaceMBLabel=Изискват се поне [mb] МБ свободно дисково пространство. +CannotInstallToNetworkDrive=Инсталаторът не може да инсталира на мрежово устройство. +CannotInstallToUNCPath=Инсталаторът не може да инсталира в UNC път. +InvalidPath=Трябва да въведете пълен път с буква на устройство, например:%n%nC:\APP%n%nили UNC път във вида:%n%n\\сървър\споделено място +InvalidDrive=Избраното от вас устройство или споделено UNC място не съществува или не е достъпно. Моля, изберете друго. +DiskSpaceWarningTitle=Недостиг на дисково пространство +DiskSpaceWarning=Инсталирането изисква %1 кБ свободно място, но на избраното устройство има само %2 кБ.%n%nЖелаете ли все пак да продължите? +DirNameTooLong=Твърде дълго име на папка или път. +InvalidDirName=Името на папка е невалидно. +BadDirName32=Имената на папки не могат да съдържат следните знаци:%n%n%1 +DirExistsTitle=Папката съществува +DirExists=Папката:%n%n%1%n%nвече съществува. Желаете ли все пак да инсталирате в нея? +DirDoesntExistTitle=Папката не съществува +DirDoesntExist=Папката:%n%n%1%n%nне съществува. Желаете ли да бъде създадена? + +; *** Страница "Избор на компоненти" на съветника +WizardSelectComponents=Избор на компоненти +SelectComponentsDesc=Кои компоненти да бъдат инсталирани? +SelectComponentsLabel2=Изберете компонентите, които желаете да инсталирате, и откажете нежеланите. Натиснете "Напред", когато сте готов да продължите. +FullInstallation=Пълна инсталация +; По възможност не превеждайте "Compact" като "Minimal" (има се предвид "Minimal" на Вашия език) +CompactInstallation=Компактна инсталация +CustomInstallation=Инсталация по избор +NoUninstallWarningTitle=Компонентите съществуват +NoUninstallWarning=Инсталаторът установи, че следните компоненти са вече инсталирани в компютърa:%n%n%1%n%nОтказването на тези компоненти няма да ги деинсталира.%n%nЖелаете ли все пак да продължите? +ComponentSize1=%1 кБ +ComponentSize2=%1 МБ +ComponentsDiskSpaceGBLabel=Направеният избор изисква поне [gb] ГБ дисково пространство. +ComponentsDiskSpaceMBLabel=Направеният избор изисква поне [mb] МБ дисково пространство. + +; *** Страница "Избор на допълнителни задачи" на съветника +WizardSelectTasks=Избор на допълнителни задачи +SelectTasksDesc=Кои допълнителни задачи да бъдат изпълнени? +SelectTasksLabel2=Изберете кои допълнителни задачи желаете да се изпълнят при инсталиране на [name], след което натиснете "Напред". + +; *** Страница "Избор на папка в менюто "Старт" на съветника +WizardSelectProgramGroup=Избор на папка в менюто "Старт" +SelectStartMenuFolderDesc=Къде да бъдат поставени преките пътища на програмата? +SelectStartMenuFolderLabel3=Инсталаторът ще създаде преки пътища в следната папка от менюто "Старт". +SelectStartMenuFolderBrowseLabel=Натиснете "Напред", за да продължите. За да изберете друга папка, натиснете "Преглед". +MustEnterGroupName=Трябва да въведете име на папка. +GroupNameTooLong=Твърде дълго име на папка или път. +InvalidGroupName=Името на папка е невалидно. +BadGroupName=Името на папка не може да съдържа следните знаци:%n%n%1 +NoProgramGroupCheck2=И&нсталиране без папка в менюто "Старт" + +; *** Страница "Готовност за инсталиране" на съветника +WizardReady=Готовност за инсталиране +ReadyLabel1=Инсталаторът е готов да инсталира [name] във Вашия компютър. +ReadyLabel2a=Натиснете "Инсталиране", за да продължите, или "Назад" за преглед или промяна на някои настройки. +ReadyLabel2b=Натиснете "Инсталиране", за да продължите с инсталирането. +ReadyMemoUserInfo=Данни за потребител: +ReadyMemoDir=Местоназначение: +ReadyMemoType=Тип инсталация: +ReadyMemoComponents=Избрани компоненти: +ReadyMemoGroup=Папка в менюто "Старт": +ReadyMemoTasks=Допълнителни задачи: + +; *** Страница "TDownloadWizardPage" на съветника и DownloadTemporaryFile +DownloadingLabel=Изтегляне на допълнителни файлове... +ButtonStopDownload=&Спри изтеглянето +StopDownload=Сигурни ли сте, че искате да спрете изтеглянето? +ErrorDownloadAborted=Изтеглянето беше прекъснато +ErrorDownloadFailed=Изтеглянето беше неуспешно: %1 %2 +ErrorDownloadSizeFailed=Неуспешно получаване на размер: %1 %2 +ErrorFileHash1=Неуспешна контролна сума на файл: %1 +ErrorFileHash2=Невалидна контролна сума на файл: очаквана %1, открита %2 +ErrorProgress=Невалиден напредък: %1 of %2 +ErrorFileSize=Невалиден размер на файл: очакван %1, открит %2 + +; *** Страница "Подготовка за инсталиране" на съветника +WizardPreparing=Подготовка за инсталиране +PreparingDesc=Инсталаторът се подготвя да инсталира [name] във Вашия компютър. +PreviousInstallNotCompleted=Инсталиране или премахване на предишна програма не е завършило. Рестартирайте компютъра, за да може процесът да завърши.%n%nСлед като рестартирате, стартирайте инсталатора отново, за да довършите инсталирането на [name]. +CannotContinue=Инсталирането не може да продължи. Моля, натиснете "Отказ" за изход. +ApplicationsFound=Следните приложения използват файлове, които трябва да бъдат обновени от инсталатора. Препоръчва се да разрешите на инсталатора автоматично да затвори приложенията. +ApplicationsFound2=Следните приложения използват файлове, които трябва да бъдат обновени от инсталатора. Препоръчва се да разрешите на инсталатора автоматично да затвори приложенията. След края на инсталирането ще бъде направен опит за рестартирането им. +CloseApplications=Приложенията да се затворят &автоматично +DontCloseApplications=Приложенията да &не се затварят +ErrorCloseApplications=Не бе възможно да се затворят автоматично всички приложения. Препоръчва се преди да продължите, да затворите всички приложения, използващи файлове, които инсталаторът трябва да обнови. +PrepareToInstallNeedsRestart=Инсталаторът трябва да ресартира Вашия компютър. След рестартирането, стартирайте инсталатора отново, за да завършите инсталацията на [name].%n%nЖелаете ли да рестартирате сега? + +; *** Страница "Инсталиране" на съветника +WizardInstalling=Инсталиране +InstallingLabel=Моля, изчакайте докато [name] се инсталира във Вашия компютър. + +; *** Страница "Инсталирането завърши" на съветника +FinishedHeadingLabel=Съветникът за инсталиране на [name] завърши +FinishedLabelNoIcons=Инсталирането на [name] във Вашия компютър завърши. +FinishedLabel=Инсталирането на [name] във Вашия компютър завърши. Можете да стартирате приложението чрез инсталираните икони. +ClickFinish=Натиснете "Готово", за да затворите инсталатора. +FinishedRestartLabel=Инсталаторът трябва да рестартира компютъра, за да завърши инсталирането на [name]. Желаете ли да рестартирате сега? +FinishedRestartMessage=Инсталаторът трябва да рестартира компютъра, за да завърши инсталирането на [name].%n%nЖелаете ли да рестартирате сега? +ShowReadmeCheck=Да, желая да прегледам файла README +YesRadio=&Да, нека компютърът се рестартира сега +NoRadio=&Не, ще рестартирам компютъра по-късно +; Използва се например в "Стартиране на MyProg.exe" +RunEntryExec=Стартиране на %1 +; Използва се например в "Преглеждане на Readme.txt" +RunEntryShellExec=Преглеждане на %1 + +; *** Текстове от рода на "Инсталаторът изисква следващ носител" +ChangeDiskTitle=Инсталаторът изисква следващ носител +SelectDiskLabel2=Моля, поставете носител %1 и натиснете "ОК".%n%nАко файловете от носителя се намират в различна от показаната по-долу папка, въведете правилния път до тях или натиснете "Преглед". +PathLabel=П&ът: +FileNotInDir2=Файлът "%1" не бе намерен в "%2". Моля, поставете правилния носител или изберете друга папка. +SelectDirectoryLabel=Моля, посочете местоположението на следващия носител. + +; *** Съобщения от фаза "Инсталиране" +SetupAborted=Инсталирането не е завършено.%n%nМоля, отстранете проблема и стартирайте инсталатора отново. +AbortRetryIgnoreSelectAction=Изберете действие +AbortRetryIgnoreRetry=Повторен &опит +AbortRetryIgnoreIgnore=&Пренебрегни грешката и продължи +AbortRetryIgnoreCancel=Прекрати инсталацията + +; *** Съобщения за хода на инсталирането +StatusClosingApplications=Затварят се приложения... +StatusCreateDirs=Създават се директории... +StatusExtractFiles=Извличат се файлове... +StatusCreateIcons=Създават се преки пътища... +StatusCreateIniEntries=Създават се записи в INI файл... +StatusCreateRegistryEntries=Създават се записи в регистъра... +StatusRegisterFiles=Регистрират се файлове... +StatusSavingUninstall=Записват се данни за деинсталиране... +StatusRunProgram=Инсталацията приключва... +StatusRestartingApplications=Рестартират се приложения... +StatusRollback=Заличават се промени... + +; *** Грешки от общ тип +ErrorInternal2=Вътрешна грешка: %1 +ErrorFunctionFailedNoCode=Неуспешно изпълнение на %1 +ErrorFunctionFailed=Неуспешно изпълнение на %1; код на грешката: %2 +ErrorFunctionFailedWithMessage=Неуспешно изпълнение на %1; код на грешката: %2.%n%3 +ErrorExecutingProgram=Не е възможно да се стартира файл:%n%1 + +; *** Грешки, свързани с регистъра +ErrorRegOpenKey=Грешка при отваряне на ключ в регистъра:%n%1\%2 +ErrorRegCreateKey=Грешка при създаване на ключ в регистъра:%n%1\%2 +ErrorRegWriteKey=Грешка при писане в ключ от регистъра:%n%1\%2 + +; *** Грешки, свързани с INI файлове +ErrorIniEntry=Грешка при създаване на INI запис във файла "%1". + +; *** Грешки при копиране на файлове +FileAbortRetryIgnoreSkipNotRecommended=Прескочи този &файл (не се препоръчва) +FileAbortRetryIgnoreIgnoreNotRecommended=&Пренебрегни грешката и продължи (не се препоръчва) +SourceIsCorrupted=Файлът - източник е повреден +SourceDoesntExist=Файлът - източник "%1" не съществува +ExistingFileReadOnly2=Съществуващият файл не беше заменен, защото е маркиран само за четене. +ExistingFileReadOnlyRetry=&Премахни атрибута „само за четене“ и опитай отново +ExistingFileReadOnlyKeepExisting=&Запази съществуващия файл +ErrorReadingExistingDest=Грешка при опит за четене на съществуващ файл: +FileExistsSelectAction=Изберете действие +FileExists2=Файлът вече съществува. +FileExistsOverwriteExisting=&Презапиши съществуващия файл +FileExistsKeepExisting=&Запази съществуващия файл +FileExistsOverwriteOrKeepAll=&Извършвай същото за останалите конфликти +ExistingFileNewerSelectAction=Изберете действие +ExistingFileNewer2=Съществуващият файл е по-нов от този, който инсталаторът се опитва да инсталира. +ExistingFileNewerOverwriteExisting=&Презапиши съществуващия файл +ExistingFileNewerKeepExisting=&Запази съществуващия файл (препоръчително) +ExistingFileNewerOverwriteOrKeepAll=&Извършвай същото за останалите конфликти +ErrorChangingAttr=Грешка при опит за смяна на атрибути на съществуващ файл: +ErrorCreatingTemp=Грешка при опит за създаване на файл в целевата директория: +ErrorReadingSource=Грешка при опит за четене на файл - източник: +ErrorCopying=Грешка при опит за копиране на файл: +ErrorReplacingExistingFile=Грешка при опит за заместване на съществуващ файл: +ErrorRestartReplace=Неуспешно отложено заместване: +ErrorRenamingTemp=Грешка при опит за преименуване на файл в целевата директория: +ErrorRegisterServer=Не е възможно да се регистрира библиотека от тип DLL/OCX: %1 +ErrorRegSvr32Failed=Неуспешно изпълнение на RegSvr32 с код на изход %1 +ErrorRegisterTypeLib=Не е възможно да се регистрира библиотека от типове: %1 + +; *** Обозначаване на показваните имена на програми за деинсталиране +UninstallDisplayNameMark=%1 (%2) +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-битова +UninstallDisplayNameMark64Bit=64-битова +UninstallDisplayNameMarkAllUsers=Всички потребители +UninstallDisplayNameMarkCurrentUser=Текущ потребител + +; *** Грешки след инсталиране +ErrorOpeningReadme=Възникна грешка при опит за отваряне на файла README. +ErrorRestartingComputer=Инсталаторът не е в състояние да рестартира компютъра. Моля, направете го ръчно. + +; *** Съобщения на деинсталатора +UninstallNotFound=Файлът "%1" не съществува. Деинсталирането е невъзможно. +UninstallOpenError=Файлът "%1" не може да се отвори. Деинсталирането е невъзможно +UninstallUnsupportedVer=Форматът на регистрационния файл за деинсталиране "%1" не се разпознава от тази версия на деинсталатора. Деинсталирането е невъзможно +UninstallUnknownEntry=Открит бе непознат запис (%1) в регистрационния файл за деинсталиране +ConfirmUninstall=Наистина ли желаете да премахнете напълно %1 и всички прилежащи компоненти? +UninstallOnlyOnWin64=Програмата може да бъде деинсталирана само под 64-битов Windows. +OnlyAdminCanUninstall=Програмата може да бъде премахната само от потребител с администраторски права. +UninstallStatusLabel=Моля, изчакайте премахването на %1 от Вашия компютър да приключи. +UninstalledAll=%1 беше премахната успешно от Вашия компютър. +UninstalledMost=Деинсталирането на %1 завърши.%n%nПремахването на някои елементи не бе възможно. Можете да ги отстраните ръчно. +UninstalledAndNeedsRestart=За да приключи деинсталирането на %1, трябва да рестартирате Вашия компютър.%n%nЖелаете ли да рестартирате сега? +UninstallDataCorrupted=Файлът "%1" е повреден. Деинсталирането е невъзможно + +; *** Съобщения от фаза "Деинсталиране" +ConfirmDeleteSharedFileTitle=Премахване на споделен файл? +ConfirmDeleteSharedFile2=Системата отчита, че следният споделен файл вече не се ползва от никоя програма. Желаете ли деинсталаторът да го премахне?%n%nАко някоя програма все пак ползва файла и той бъде изтрит, програмата може да спре да работи правилно. Ако се колебаете, изберете "Не". Оставянето на файла в системата е безвредно. +SharedFileNameLabel=Име на файла: +SharedFileLocationLabel=Местоположение: +WizardUninstalling=Ход на деинсталирането +StatusUninstalling=%1 се деинсталира... + +; *** Обяснения за блокирано спиране на системата +ShutdownBlockReasonInstallingApp=Инсталира се %1. +ShutdownBlockReasonUninstallingApp=Деинсталира се %1. + +; Потребителските съобщения по-долу не се ползват от самия инсталатор, но +; ако ползвате такива в скриптовете си, вероятно бихте искали да ги преведете. + +[CustomMessages] + +NameAndVersion=%1, версия %2 +AdditionalIcons=Допълнителни икони: +CreateDesktopIcon=Икона на &работния плот +CreateQuickLaunchIcon=Икона в лентата "&Бързо стартиране" +ProgramOnTheWeb=%1 в Интернет +UninstallProgram=Деинсталиране на %1 +LaunchProgram=Стартиране на %1 +AssocFileExtension=&Свързване на %1 с файловото разширение %2 +AssocingFileExtension=%1 се свързва с файловото разширение %2... +AutoStartProgramGroupDescription=Стартиране: +AutoStartProgram=Автоматично стартиране на %1 +AddonHostProgramNotFound=%1 не бе намерена в избраната от вас папка.%n%nЖелаете ли все пак да продължите? diff --git a/Files/Languages/Catalan.isl b/Files/Languages/Catalan.isl new file mode 100644 index 00000000..7f140145 --- /dev/null +++ b/Files/Languages/Catalan.isl @@ -0,0 +1,371 @@ +; *** Inno Setup version 6.1.0+ Catalan messages *** +; +; Translated by Carles Millan (email: carles24@carlesmillan.cat) +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno + +[LangOptions] + +LanguageName=Catal<00E0> +LanguageID=$0403 +LanguageCodePage=1252 + +[Messages] + +; *** Application titles +SetupAppTitle=Installaci +SetupWindowTitle=Installaci - %1 +UninstallAppTitle=Desinstallaci +UninstallAppFullTitle=Desinstalla %1 + +; *** Misc. common +InformationTitle=Informaci +ConfirmTitle=Confirmaci +ErrorTitle=Error + +; *** SetupLdr messages +SetupLdrStartupMessage=Aquest programa installar %1. Voleu continuar? +LdrCannotCreateTemp=No s'ha pogut crear un fitxer temporal. Installaci cancellada +LdrCannotExecTemp=No s'ha pogut executar el fitxer a la carpeta temporal. Installaci cancellada +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nError %2: %3 +SetupFileMissing=El fitxer %1 no es troba a la carpeta d'installaci. Resoleu el problema o obteniu una nova cpia del programa. +SetupFileCorrupt=Els fitxers d'installaci estan corromputs. Obteniu una nova cpia del programa. +SetupFileCorruptOrWrongVer=Els fitxers d'installaci estan espatllats, o sn incompatibles amb aquesta versi del programa. Resoleu el problema o obteniu una nova cpia del programa. +InvalidParameter=Un parmetre invlid ha estat passat a la lnia de comanda:%n%n%1 +SetupAlreadyRunning=La installaci ja est en curs. +WindowsVersionNotSupported=Aquest programa no suporta la versi de Windows installada al vostre ordinador. +WindowsServicePackRequired=Aquest programa necessita %1 Service Pack %2 o posterior. +NotOnThisPlatform=Aquest programa no funcionar sota %1. +OnlyOnThisPlatform=Aquest programa noms pot ser executat sota %1. +OnlyOnTheseArchitectures=Aquest programa noms pot ser installat en versions de Windows dissenyades per a les segents arquitectures de processador:%n%n%1 +WinVersionTooLowError=Aquest programa requereix %1 versi %2 o posterior. +WinVersionTooHighError=Aquest programa no pot ser installat sota %1 versi %2 o posterior. +AdminPrivilegesRequired=Cal que tingueu privilegis d'administrador per poder installar aquest programa. +PowerUserPrivilegesRequired=Cal que accediu com a administrador o com a membre del grup Power Users en installar aquest programa. +SetupAppRunningError=El programa d'installaci ha detectat que %1 s'est executant actualment.%n%nTanqueu el programa i premeu Accepta per a continuar o Cancella per a sortir. +UninstallAppRunningError=El programa de desinstallaci ha detectat que %1 s'est executant en aquest moment.%n%nTanqueu el programa i premeu Accepta per a continuar o Cancella per a sortir. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Selecci del Mode d'Installaci +PrivilegesRequiredOverrideInstruction=Trieu mode d'installaci +PrivilegesRequiredOverrideText1=%1 pot ser installat per a tots els usuaris (cal tenir privilegis d'administrador), o noms per a vs. +PrivilegesRequiredOverrideText2=%1 pot ser installat noms per a vs, o per a tots els usuaris (cal tenir privilegis d'administrador). +PrivilegesRequiredOverrideAllUsers=Installaci per a &tots els usuaris +PrivilegesRequiredOverrideAllUsersRecommended=Installaci per a &tots els usuaris (recomanat) +PrivilegesRequiredOverrideCurrentUser=Installaci noms per a &mi +PrivilegesRequiredOverrideCurrentUserRecommended=Installaci noms per a &mi (recomanat) + +; *** Misc. errors +ErrorCreatingDir=El programa d'installaci no ha pogut crear la carpeta "%1" +ErrorTooManyFilesInDir=No s'ha pogut crear un fitxer a la carpeta "%1" perqu cont massa fitxers + +; *** Setup common messages +ExitSetupTitle=Surt +ExitSetupMessage=La installaci no s'ha completat. Si sortiu ara, el programa no ser installat.%n%nPer a completar-la podreu tornar a executar el programa d'installaci quan vulgueu.%n%nVoleu sortir-ne? +AboutSetupMenuItem=&Sobre la installaci... +AboutSetupTitle=Sobre la installaci +AboutSetupMessage=%1 versi %2%n%3%n%nPgina web de %1:%n%4 +AboutSetupNote= +TranslatorNote=Catalan translation by Carles Millan (carles at carlesmillan.cat) + +; *** Buttons +ButtonBack=< &Enrere +ButtonNext=&Segent > +ButtonInstall=&Installa +ButtonOK=Accepta +ButtonCancel=Cancella +ButtonYes=&S +ButtonYesToAll=S a &tot +ButtonNo=&No +ButtonNoToAll=N&o a tot +ButtonFinish=&Finalitza +ButtonBrowse=&Explora... +ButtonWizardBrowse=&Cerca... +ButtonNewFolder=Crea &nova carpeta + +; *** "Select Language" dialog messages +SelectLanguageTitle=Trieu idioma +SelectLanguageLabel=Trieu idioma a emprar durant la installaci. + +; *** Common wizard text +ClickNext=Premeu Segent per a continuar o Cancella per a abandonar la installaci. +BeveledLabel= +BrowseDialogTitle=Trieu una carpeta +BrowseDialogLabel=Trieu la carpeta de destinaci i premeu Accepta. +NewFolderName=Nova carpeta + +; *** "Welcome" wizard page +WelcomeLabel1=Benvingut a l'assistent d'installaci de [name] +WelcomeLabel2=Aquest programa installar [name/ver] al vostre ordinador.%n%ns molt recomanable que abans de continuar tanqueu tots els altres programes oberts, per tal d'evitar conflictes durant el procs d'installaci. + +; *** "Password" wizard page +WizardPassword=Contrasenya +PasswordLabel1=Aquesta installaci est protegida amb una contrasenya. +PasswordLabel3=Indiqueu la contrasenya i premeu Segent per a continuar. Aquesta contrasenya distingeix entre majscules i minscules. +PasswordEditLabel=&Contrasenya: +IncorrectPassword=La contrasenya introduda no s correcta. Torneu-ho a intentar. + +; *** "License Agreement" wizard page +WizardLicense=Acord de Llicncia +LicenseLabel=Cal que llegiu aquesta informaci abans de continuar. +LicenseLabel3=Cal que llegiu l'Acord de Llicncia segent. Cal que n'accepteu els termes abans de continuar amb la installaci. +LicenseAccepted=&Accepto l'acord +LicenseNotAccepted=&No accepto l'acord + +; *** "Information" wizard pages +WizardInfoBefore=Informaci +InfoBeforeLabel=Llegiu la informaci segent abans de continuar. +InfoBeforeClickLabel=Quan estigueu preparat per a continuar, premeu Segent. +WizardInfoAfter=Informaci +InfoAfterLabel=Llegiu la informaci segent abans de continuar. +InfoAfterClickLabel=Quan estigueu preparat per a continuar, premeu Segent + +; *** "User Information" wizard page +WizardUserInfo=Informaci sobre l'usuari +UserInfoDesc=Introduu la vostra informaci. +UserInfoName=&Nom de l'usuari: +UserInfoOrg=&Organitzaci +UserInfoSerial=&Nmero de srie: +UserInfoNameRequired=Cal que hi introduu un nom + +; *** "Select Destination Location" wizard page +WizardSelectDir=Trieu Carpeta de Destinaci +SelectDirDesc=On s'ha d'installar [name]? +SelectDirLabel3=El programa d'installaci installar [name] a la carpeta segent. +SelectDirBrowseLabel=Per a continuar, premeu Segent. Si desitgeu triar una altra capeta, premeu Cerca. +DiskSpaceGBLabel=Aquest programa necessita un mnim de [gb] GB d'espai a disc. +DiskSpaceMBLabel=Aquest programa necessita un mnim de [mb] MB d'espai a disc. +CannotInstallToNetworkDrive=La installaci no es pot fer en un disc de xarxa. +CannotInstallToUNCPath=La installaci no es pot fer a una ruta UNC. +InvalidPath=Cal donar una ruta completa amb lletra d'unitat, per exemple:%n%nC:\Aplicaci%n%no b una ruta UNC en la forma:%n%n\\servidor\compartit +InvalidDrive=El disc o ruta de xarxa seleccionat no existeix, trieu-ne un altre. +DiskSpaceWarningTitle=No hi ha prou espai al disc +DiskSpaceWarning=El programa d'installaci necessita com a mnim %1 KB d'espai lliure, per el disc seleccionat noms t %2 KB disponibles.%n%nTot i amb aix, desitgeu continuar? +DirNameTooLong=El nom de la carpeta o de la ruta s massa llarg. +InvalidDirName=El nom de la carpeta no s vlid. +BadDirName32=Un nom de carpeta no pot contenir cap dels carcters segents:%n%n%1 +DirExistsTitle=La carpeta existeix +DirExists=La carpeta:%n%n%1%n%nja existeix. Voleu installar igualment el programa en aquesta carpeta? +DirDoesntExistTitle=La Carpeta No Existeix +DirDoesntExist=La carpeta:%n%n%1%n%nno existeix. Voleu que sigui creada? + +; *** "Select Program Group" wizard page +WizardSelectComponents=Trieu Components +SelectComponentsDesc=Quins components cal installar? +SelectComponentsLabel2=Trieu els components que voleu installar; elimineu els components que no voleu installar. Premeu Segent per a continuar. +FullInstallation=Installaci completa +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Installaci compacta +CustomInstallation=Installaci personalitzada +NoUninstallWarningTitle=Els components Existeixen +NoUninstallWarning=El programa d'installaci ha detectat que els components segents ja es troben al vostre ordinador:%n%n%1%n%nSi no estan seleccionats no seran desinstallats.%n%nVoleu continuar igualment? +ComponentSize1=%1 Kb +ComponentSize2=%1 Mb +ComponentsDiskSpaceGBLabel=Aquesta selecci requereix un mnim de [gb] GB d'espai al disc. +ComponentsDiskSpaceMBLabel=Aquesta selecci requereix un mnim de [mb] Mb d'espai al disc. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Trieu tasques addicionals +SelectTasksDesc=Quines tasques addicionals cal executar? +SelectTasksLabel2=Trieu les tasques addicionals que voleu que siguin executades mentre s'installa [name], i desprs premeu Segent. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Trieu la carpeta del Men Inici +SelectStartMenuFolderDesc=On cal situar els enllaos del programa? +SelectStartMenuFolderLabel3=El programa d'installaci crear l'accs directe al programa a la segent carpeta del men d'Inici. +SelectStartMenuFolderBrowseLabel=Per a continuar, premeu Segent. Si desitgeu triar una altra carpeta, premeu Cerca. +MustEnterGroupName=Cal que hi introduu un nom de carpeta. +GroupNameTooLong=El nom de la carpeta o de la ruta s massa llarg. +InvalidGroupName=El nom de la carpeta no s vlid. +BadGroupName=El nom del grup no pot contenir cap dels carcters segents:%n%n%1 +NoProgramGroupCheck2=&No cres una carpeta al Men Inici + +; *** "Ready to Install" wizard page +WizardReady=Preparat per a installar +ReadyLabel1=El programa d'installaci est preparat per a iniciar la installaci de [name] al vostre ordinador. +ReadyLabel2a=Premeu Installa per a continuar amb la installaci, o Enrere si voleu revisar o modificar les opcions d'installaci. +ReadyLabel2b=Premeu Installa per a continuar amb la installaci. +ReadyMemoUserInfo=Informaci de l'usuari: +ReadyMemoDir=Carpeta de destinaci: +ReadyMemoType=Tipus d'installaci: +ReadyMemoComponents=Components seleccionats: +ReadyMemoGroup=Carpeta del Men Inici: +ReadyMemoTasks=Tasques addicionals: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Descarregant els fitxers addicionals... +ButtonStopDownload=&Atura la descrrega +StopDownload=Esteu segur que voleu aturar la descrrega? +ErrorDownloadAborted=Descrrega cancellada +ErrorDownloadFailed=La descrrega ha fallat: %1 %2 +ErrorDownloadSizeFailed=La mesura de la descrrega ha fallat: %1 %2 +ErrorFileHash1=El hash del fitxer ha fallat: %1 +ErrorFileHash2=El hash del fitxer s invlid: s'esperava %1, s'ha trobat %2 +ErrorProgress=Progrs invlid: %1 de %2 +ErrorFileSize=Mida del fitxer invlida: s'esperava %1, s'ha trobat %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Preparant la installaci +PreparingDesc=Preparant la installaci de [name] al vostre ordinador. +PreviousInstallNotCompleted=La installaci o desinstallaci anterior no s'ha dut a terme. Caldr que reinicieu l'ordinador per a finalitzar aquesta installaci.%n%nDesprs de reiniciar l'ordinador, executeu aquest programa de nou per completar la installaci de [name]. +CannotContinue=La installaci no pot continuar. Premeu Cancella per a sortir. +ApplicationsFound=Les segents aplicacions estan fent servir fitxers que necessiten ser actualitzats per la installaci. Es recomana que permeteu a la installaci tancar automticament aquestes aplicacions. +ApplicationsFound2=Les segents aplicacions estan fent servir fitxers que necessiten ser actualitzats per la installaci. Es recomana que permeteu a la installaci tancar automticament aquestes aplicacions. Desprs de completar la installaci s'intentar reiniciar les aplicacions. +CloseApplications=&Tanca automticament les aplicacions +DontCloseApplications=&No tanquis les aplicacions +ErrorCloseApplications=El programa d'installaci no ha pogut tancar automticament totes les aplicacions. Es recomana que abans de continuar tanqueu totes les aplicacions que estan usant fitxers que han de ser actualitzats pel programa d'installaci. +PrepareToInstallNeedsRestart=El programa d'installaci ha de reiniciar l'ordinador. Desprs del reinici, executeu de nou l'installador per tal de completar la installaci de [name].%n%nVoleu reiniciar-lo ara? + +; *** "Installing" wizard page +WizardInstalling=Installant +InstallingLabel=Espereu mentre s'installa [name] al vostre ordinador. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Completant l'assistent d'installaci de [name] +FinishedLabelNoIcons=El programa ha finalitzat la installaci de [name] al vostre ordinador. +FinishedLabel=El programa ha finalitzat la installaci de [name] al vostre ordinador. L'aplicaci pot ser iniciada seleccionant les icones installades. +ClickFinish=Premeu Finalitza per a sortir de la installaci. +FinishedRestartLabel=Per a completar la installaci de [name] cal reiniciar l'ordinador. Voleu fer-ho ara? +FinishedRestartMessage=Per a completar la installaci de [name] cal reiniciar l'ordinador. Voleu fer-ho ara? +ShowReadmeCheck=S, vull visualitzar el fitxer LLEGIUME.TXT +YesRadio=&S, reiniciar l'ordinador ara +NoRadio=&No, reiniciar l'ordinador ms tard +; used for example as 'Run MyProg.exe' +RunEntryExec=Executa %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Visualitza %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=El programa d'installaci necessita el disc segent +SelectDiskLabel2=Introduiu el disc %1 i premeu Continua.%n%nSi els fitxers d'aquest disc es poden trobar en una carpeta diferent de la indicada tot seguit, introduu-ne la ruta correcta o b premeu Explora. +PathLabel=&Ruta: +FileNotInDir2=El fitxer "%1" no s'ha pogut trobar a "%2". Introduu el disc correcte o trieu una altra carpeta. +SelectDirectoryLabel=Indiqueu on es troba el disc segent. + +; *** Installation phase messages +SetupAborted=La installaci no s'ha completat.%n%n%Resoleu el problema i executeu de nou el programa d'installaci. +AbortRetryIgnoreSelectAction=Trieu acci +AbortRetryIgnoreRetry=&Torna-ho a intentar +AbortRetryIgnoreIgnore=&Ignora l'error i continua +AbortRetryIgnoreCancel=Cancella la installaci + +; *** Installation status messages +StatusClosingApplications=Tancant aplicacions... +StatusCreateDirs=Creant carpetes... +StatusExtractFiles=Extraient fitxers... +StatusCreateIcons=Creant enllaos del programa... +StatusCreateIniEntries=Creant entrades al fitxer INI... +StatusCreateRegistryEntries=Creant entrades de registre... +StatusRegisterFiles=Registrant fitxers... +StatusSavingUninstall=Desant informaci de desinstallaci... +StatusRunProgram=Finalitzant la installaci... +StatusRestartingApplications=Reiniciant aplicacions... +StatusRollback=Desfent els canvis... + +; *** Misc. errors +ErrorInternal2=Error intern: %1 +ErrorFunctionFailedNoCode=%1 ha fallat +ErrorFunctionFailed=%1 ha fallat; codi %2 +ErrorFunctionFailedWithMessage=%1 ha fallat; codi %2.%n%3 +ErrorExecutingProgram=No es pot executar el fitxer:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Error en obrir la clau de registre:%n%1\%2 +ErrorRegCreateKey=Error en crear la clau de registre:%n%1\%2 +ErrorRegWriteKey=Error en escriure a la clau de registre:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Error en crear l'entrada INI al fitxer "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Salta't aquest fitxer (no recomanat) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignora l'error i continua (no recomanat) +SourceIsCorrupted=El fitxer d'origen est corromput +SourceDoesntExist=El fitxer d'origen "%1" no existeix +ExistingFileReadOnly2=El fitxer existent no ha pogut ser substitut perqu est marcat com a noms lectura. +ExistingFileReadOnlyRetry=&Lleveu-li l'atribut de noms lectura i torneu-ho a intentar +ExistingFileReadOnlyKeepExisting=&Mant el fitxer existent +ErrorReadingExistingDest=S'ha produt un error en llegir el fitxer: +FileExistsSelectAction=Trieu acci +FileExists2=El fitxer ja existeix. +FileExistsOverwriteExisting=&Sobreescriu el fitxer existent +FileExistsKeepExisting=&Mant el fitxer existent +FileExistsOverwriteOrKeepAll=&Fes-ho tamb per als propers conflictes +ExistingFileNewerSelectAction=Trieu acci +ExistingFileNewer2=El fitxer existent s ms nou que el que s'intenta installar. +ExistingFileNewerOverwriteExisting=&Sobreescriu el fitxer existent +ExistingFileNewerKeepExisting=&Mant el fitxer existent (recomanat) +ExistingFileNewerOverwriteOrKeepAll=&Fes-ho tamb per als propers conflictes +ErrorChangingAttr=Hi ha hagut un error en canviar els atributs del fitxer: +ErrorCreatingTemp=Hi ha hagut un error en crear un fitxer a la carpeta de destinaci: +ErrorReadingSource=Hi ha hagut un error en llegir el fitxer d'origen: +ErrorCopying=Hi ha hagut un error en copiar un fitxer: +ErrorReplacingExistingFile=Hi ha hagut un error en reemplaar el fitxer existent: +ErrorRestartReplace=Ha fallat reemplaar: +ErrorRenamingTemp=Hi ha hagut un error en reanomenar un fitxer a la carpeta de destinaci: +ErrorRegisterServer=No s'ha pogut registrar el DLL/OCX: %1 +ErrorRegSvr32Failed=Ha fallat RegSvr32 amb el codi de sortida %1 +ErrorRegisterTypeLib=No s'ha pogut registrar la biblioteca de tipus: %1 + +; *** Uninstall display name markings +UninstallDisplayNameMark=%1 (%2) +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=Tots els usuaris +UninstallDisplayNameMarkCurrentUser=Usuari actual + +; *** Post-installation errors +ErrorOpeningReadme=Hi ha hagut un error en obrir el fitxer LLEGIUME.TXT. +ErrorRestartingComputer=El programa d'installaci no ha pogut reiniciar l'ordinador. Cal que ho feu manualment. + +; *** Uninstaller messages +UninstallNotFound=El fitxer "%1" no existeix. No es pot desinstallar. +UninstallOpenError=El fitxer "%1" no pot ser obert. No es pot desinstallar +UninstallUnsupportedVer=El fitxer de desinstallaci "%1" est en un format no reconegut per aquesta versi del desinstallador. No es pot desinstallar +UninstallUnknownEntry=S'ha trobat una entrada desconeguda (%1) al fitxer de desinstallaci. +ConfirmUninstall=Esteu segur de voler eliminar completament %1 i tots els seus components? +UninstallOnlyOnWin64=Aquest programa noms pot ser desinstallat en Windows de 64 bits. +OnlyAdminCanUninstall=Aquest programa noms pot ser desinstallat per un usuari amb privilegis d'administrador. +UninstallStatusLabel=Espereu mentre s'elimina %1 del vostre ordinador. +UninstalledAll=%1 ha estat desinstallat correctament del vostre ordinador. +UninstalledMost=Desinstallaci de %1 completada.%n%nAlguns elements no s'han pogut eliminar. Poden ser eliminats manualment. +UninstalledAndNeedsRestart=Per completar la installaci de %1, cal reiniciar el vostre ordinador.%n%nVoleu fer-ho ara? +UninstallDataCorrupted=El fitxer "%1" est corromput. No es pot desinstallar. + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Eliminar fitxer compartit? +ConfirmDeleteSharedFile2=El sistema indica que el fitxer compartit segent ja no s emprat per cap altre programa. Voleu que la desinstallaci elimini aquest fitxer?%n%nSi algun programa encara el fa servir i s eliminat, podria no funcionar correctament. Si no n'esteu segur, trieu No. Deixar el fitxer al sistema no far cap mal. +SharedFileNameLabel=Nom del fitxer: +SharedFileLocationLabel=Localitzaci: +WizardUninstalling=Estat de la desinstallaci +StatusUninstalling=Desinstallant %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Installant %1. +ShutdownBlockReasonUninstallingApp=Desinstallant %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 versi %2 +AdditionalIcons=Icones addicionals: +CreateDesktopIcon=Crea una icona a l'&Escriptori +CreateQuickLaunchIcon=Crea una icona a la &Barra de tasques +ProgramOnTheWeb=%1 a Internet +UninstallProgram=Desinstalla %1 +LaunchProgram=Obre %1 +AssocFileExtension=&Associa %1 amb l'extensi de fitxer %2 +AssocingFileExtension=Associant %1 amb l'extensi de fitxer %2... +AutoStartProgramGroupDescription=Inici: +AutoStartProgram=Inicia automticament %1 +AddonHostProgramNotFound=%1 no ha pogut ser trobat a la carpeta seleccionada.%n%nVoleu continuar igualment? diff --git a/Files/Languages/Corsican.isl b/Files/Languages/Corsican.isl new file mode 100644 index 00000000..6ec032b3 --- /dev/null +++ b/Files/Languages/Corsican.isl @@ -0,0 +1,400 @@ +; *** Inno Setup version 6.1.0+ Corsican messages *** +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +; Created and maintained by Patriccollu di Santa Maria è Sichè, 2011-2024 +; Schedariu di traduzzione in lingua corsa da Patriccollu +; E-mail: Patrick.Santa-Maria[at]LaPoste.Net +; +; Changes: +; February 11th, 2024 - Changes to current version 6.1.0+ +; November 14th, 2020 - Changes to current version 6.1.0+ +; July 25th, 2020 - Update to version 6.1.0+ +; July 1st, 2020 - Update to version 6.0.6+ +; October 6th, 2019 - Update to version 6.0.3+ +; January 20th, 2019 - Update to version 6.0.0+ +; April 9th, 2016 - Changes to current version 5.5.3+ +; January 3rd, 2013 - Update to version 5.5.3+ +; August 8th, 2012 - Update to version 5.5.0+ +; September 17th, 2011 - Creation for version 5.1.11 + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Corsu +LanguageID=$0483 +LanguageCodePage=1252 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Assistente d’installazione +SetupWindowTitle=Assistente d’installazione - %1 +UninstallAppTitle=Disinstallà +UninstallAppFullTitle=Disinstallazione di %1 + +; *** Misc. common +InformationTitle=Infurmazione +ConfirmTitle=Cunfirmà +ErrorTitle=Sbagliu + +; *** SetupLdr messages +SetupLdrStartupMessage=St’assistente hà da installà %1. Vulete cuntinuà ? +LdrCannotCreateTemp=Impussibule di creà un cartulare timpurariu. Assistente d’installazione interrottu +LdrCannotExecTemp=Impussibule d’eseguisce u schedariu in u cartulare timpurariu. Assistente d’installazione interrottu +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nSbagliu %2 : %3 +SetupFileMissing=U schedariu %1 manca in u cartulare d’installazione. Ci vole à currege u penseru o ottene una nova copia di u prugramma. +SetupFileCorrupt=I schedarii d’installazione sò alterati. Ci vole à ottene una nova copia di u prugramma. +SetupFileCorruptOrWrongVer=I schedarii d’installazione sò alterati, o sò incumpatibule cù sta versione di l’assistente. Ci vole à currege u penseru o ottene una nova copia di u prugramma. +InvalidParameter=Un parametru micca accettevule hè statu passatu in a linea di cumanda :%n%n%1 +SetupAlreadyRunning=L’assistente d’installazione hè dighjà in corsu. +WindowsVersionNotSupported=Stu prugramma ùn pò micca funziunà cù a versione di Windows installata nant’à st’urdinatore. +WindowsServicePackRequired=Stu prugramma richiede %1 Service Pack %2 o più recente. +NotOnThisPlatform=Stu prugramma ùn funzionerà micca cù %1. +OnlyOnThisPlatform=Stu prugramma deve funzionà cù %1. +OnlyOnTheseArchitectures=Stu prugramma pò solu esse installatu nant’à e versioni di Windows fatte apposta per st’architetture di prucessore :%n%n%1 +WinVersionTooLowError=Stu prugramma richiede %1 versione %2 o più recente. +WinVersionTooHighError=Stu prugramma ùn pò micca esse installatu nant’à %1 version %2 o più recente. +AdminPrivilegesRequired=Ci vole à esse cunnettu cum’è un amministratore quandu voi installate stu prugramma. +PowerUserPrivilegesRequired=Ci vole à esse cunnettu cum’è un amministratore o fà parte di u gruppu « Utilizatori cù putere » quandu voi installate stu prugramma. +SetupAppRunningError=L’assistente hà vistu chì %1 era dighjà in corsu.%n%nCi vole à chjode tutte e so finestre avà, eppò sceglie Vai per cuntinuà, o Abbandunà per compie. +UninstallAppRunningError=A disinstallazione hà vistu chì %1 era dighjà in corsu.%n%nCi vole à chjode tutte e so finestre avà, eppò sceglie Vai per cuntinuà, o Abbandunà per compie. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Selezziunà u modu d’installazione di l’assistente +PrivilegesRequiredOverrideInstruction=Selezziunà u modu d’installazione +PrivilegesRequiredOverrideText1=%1 pò esse installatu per tutti l’utilizatore (richiede i diritti d’amministratore), o solu per voi. +PrivilegesRequiredOverrideText2=%1 pò esse installatu solu per voi, o per tutti l’utilizatore (richiede i diritti d’amministratore). +PrivilegesRequiredOverrideAllUsers=Installazione per &tutti l’utilizatori +PrivilegesRequiredOverrideAllUsersRecommended=Installazione per &tutti l’utilizatori (ricumandatu) +PrivilegesRequiredOverrideCurrentUser=Installazione solu per &mè +PrivilegesRequiredOverrideCurrentUserRecommended=Installazione solu per &mè (ricumandatu) + +; *** Misc. errors +ErrorCreatingDir=L’assistente ùn hà micca pussutu creà u cartulare « %1 » +ErrorTooManyFilesInDir=Impussibule di creà un schedariu in u cartulare « %1 » perchè ellu ne cuntene troppu + +; *** Setup common messages +ExitSetupTitle=Compie l’assistente +ExitSetupMessage=L’assistente ùn hè micca compiu bè. S’è voi escite avà, u prugramma ùn serà micca installatu.%n%nPudete impiegà l’assistente torna un altra volta per compie l’installazione.%n%nCompie l’assistente ? +AboutSetupMenuItem=&Apprupositu di l’assistente… +AboutSetupTitle=Apprupositu di l’assistente +AboutSetupMessage=%1 versione %2%n%3%n%n%1 pagina d’accolta :%n%4 +AboutSetupNote= +TranslatorNote=Traduzzione in lingua corsa da Patriccollu di Santa Maria è Sichè + +; *** Buttons +ButtonBack=< &Precedente +ButtonNext=&Seguente > +ButtonInstall=&Installà +ButtonOK=Vai +ButtonCancel=Abbandunà +ButtonYes=&Sì +ButtonYesToAll=Sì per &tutti +ButtonNo=&Nò +ButtonNoToAll=Nò per t&utti +ButtonFinish=&Piantà +ButtonBrowse=&Sfuglià… +ButtonWizardBrowse=&Sfuglià… +ButtonNewFolder=&Creà un novu cartulare + +; *** "Select Language" dialog messages +SelectLanguageTitle=Definisce a lingua di l’assistente +SelectLanguageLabel=Selezziunà a lingua à impiegà per l’installazione. + +; *** Common wizard text +ClickNext=Sceglie Seguente per cuntinuà, o Abbandunà per compie l’assistente. +BeveledLabel= +BrowseDialogTitle=Sfuglià u cartulare +BrowseDialogLabel=Selezziunà un cartulare in a lista inghjò, eppò sceglie Vai. +NewFolderName=Novu cartulare + +; *** "Welcome" wizard page +WelcomeLabel1=Benvenuta in l’assistente d’installazione di [name] +WelcomeLabel2=Quessu installerà [name/ver] nant’à l’urdinatore.%n%nHè ricumandatu di chjode tutte l’altre appiecazioni nanzu di cuntinuà. + +; *** "Password" wizard page +WizardPassword=Parolla d’intesa +PasswordLabel1=L’installazione hè prutetta da una parolla d’intesa. +PasswordLabel3=Ci vole à pruvede a parolla d’intesa, eppò sceglie Seguente per cuntinuà. E parolle d’intesa ponu cuntene maiuscule è minuscule. +PasswordEditLabel=&Parolla d’intesa : +IncorrectPassword=A parolla d’intesa stampittata ùn hè micca curretta. Ci vole à pruvà torna. + +; *** "License Agreement" wizard page +WizardLicense=Cuntrattu di licenza +LicenseLabel=Ci vole à leghje l’infurmazione impurtante chì seguiteghja nanzu di cuntinuà. +LicenseLabel3=Ci vole à leghje u cuntrattu di licenza chì seguiteghja. Duvete accettà i termini di stu cuntrattu nanzu di cuntinuà l’installazione. +LicenseAccepted=Sò d’&accunsentu cù u cuntrattu +LicenseNotAccepted=Ùn sò &micca d’accunsentu cù u cuntrattu + +; *** "Information" wizard pages +WizardInfoBefore=Infurmazione +InfoBeforeLabel=Ci vole à leghje l’infurmazione impurtante chì seguiteghja nanzu di cuntinuà. +InfoBeforeClickLabel=Quandu site prontu à cuntinuà cù l’assistente, sciglite Seguente. +WizardInfoAfter=Infurmazione +InfoAfterLabel=Ci vole à leghje l’infurmazione impurtante chì seguiteghja nanzu di cuntinuà. +InfoAfterClickLabel=Quandu site prontu à cuntinuà cù l’assistente, sciglite Seguente. + +; *** "User Information" wizard page +WizardUserInfo=Infurmazioni di l’utilizatore +UserInfoDesc=Ci vole à stampittà e vostre infurmazioni. +UserInfoName=&Nome d’utilizatore : +UserInfoOrg=&Urganismu : +UserInfoSerial=&Numeru di seria : +UserInfoNameRequired=Ci vole à stampittà un nome. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Selezziunà u locu di destinazione +SelectDirDesc=Induve [name] deve esse installatu ? +SelectDirLabel3=L’assistente installerà [name] in stu cartulare. +SelectDirBrowseLabel=Per cuntinuà, sceglie Seguente. S’è voi preferisce selezziunà un altru cartulare, sciglite Sfuglià. +DiskSpaceGBLabel=Hè richiestu omancu [gb] Go di spaziu liberu di discu. +DiskSpaceMBLabel=Hè richiestu omancu [mb] Mo di spaziu liberu di discu. +CannotInstallToNetworkDrive=L’assistente ùn pò micca installà nant’à un discu di a reta. +CannotInstallToUNCPath=L’assistente ùn pò micca installà in un chjassu UNC. +InvalidPath=Ci vole à stampittà un chjassu cumplettu cù a lettera di u lettore ; per indettu :%n%nC:\APP%n%no un chjassu UNC in a forma :%n%n\\servitore\spartu +InvalidDrive=U lettore o u chjassu UNC spartu ùn esiste micca o ùn hè micca accessibule. Ci vole à selezziunane un altru. +DiskSpaceWarningTitle=Ùn basta u spaziu discu +DiskSpaceWarning=L’assistente richiede omancu %1 Ko di spaziu liberu per installà, ma u lettore selezziunatu hà solu %2 Ko dispunibule.%n%nVulete cuntinuà quantunque ? +DirNameTooLong=U nome di cartulare o u chjassu hè troppu longu. +InvalidDirName=U nome di cartulare ùn hè micca accettevule. +BadDirName32=I nomi di cartulare ùn ponu micca cuntene sti caratteri :%n%n%1 +DirExistsTitle=Cartulare esistente +DirExists=U cartulare :%n%n%1%n%nesiste dighjà. Vulete installà in stu cartulare quantunque ? +DirDoesntExistTitle=Cartulare inesistente +DirDoesntExist=U cartulare :%n%n%1%n%nùn esiste micca. Vulete chì stu cartulare sia creatu ? + +; *** "Select Components" wizard page +WizardSelectComponents=Selezzione di cumpunenti +SelectComponentsDesc=Chì cumpunenti devenu esse installati ? +SelectComponentsLabel2=Selezziunà i cumpunenti à installà ; diselezziunà quelli ch’ùn devenu micca esse installati. Sceglie Seguente quandu site prontu à cuntinuà. +FullInstallation=Installazione sana +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Installazione cumpatta +CustomInstallation=Installazione persunalizata +NoUninstallWarningTitle=Cumpunenti esistenti +NoUninstallWarning=L’assistente hà vistu chì sti cumpunenti sò dighjà installati nant’à l’urdinatore :%n%n%1%n%nDiselezziunà sti cumpunenti ùn i disinstallerà micca.%n%nVulete cuntinuà quantunque ? +ComponentSize1=%1 Ko +ComponentSize2=%1 Mo +ComponentsDiskSpaceGBLabel=A selezzione attuale richiede omancu [gb] Go di spaziu liberu nant’à u discu. +ComponentsDiskSpaceMBLabel=A selezzione attuale richiede omancu [mb] Mo di spaziu liberu nant’à u discu. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Selezziunà trattamenti addizziunali +SelectTasksDesc=Chì trattamenti addizziunali vulete fà ? +SelectTasksLabel2=Selezziunà i trattamenti addizziunali chì l’assistente deve fà durante l’installazione di [name], eppò sceglie Seguente. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Selezzione di u cartulare di u listinu « Démarrer » +SelectStartMenuFolderDesc=Induve l’assistente deve piazzà l’accurtatoghji di u prugramma ? +SelectStartMenuFolderLabel3=L’assistente piazzerà l’accurtatoghji di u prugramma in stu cartulare di u listinu « Démarrer ». +SelectStartMenuFolderBrowseLabel=Per cuntinuà, sceglie Seguente. S’è voi preferisce selezziunà un altru cartulare, sciglite Sfuglià. +MustEnterGroupName=Ci vole à stampittà un nome di cartulare. +GroupNameTooLong=U nome di cartulare o u chjassu hè troppu longu. +InvalidGroupName=U nome di cartulare ùn hè micca accettevule. +BadGroupName=U nome di u cartulare ùn pò micca cuntene alcunu di sti caratteri :%n%n%1 +NoProgramGroupCheck2=Ùn creà &micca di cartulare in u listinu « Démarrer » + +; *** "Ready to Install" wizard page +WizardReady=Prontu à Installà +ReadyLabel1=Avà l’assistente hè prontu à principià l’installazione di [name] nant’à l’urdinatore. +ReadyLabel2a=Sceglie Installà per cuntinuà l’installazione, o nant’à Precedente per rivede o cambià qualchì preferenza. +ReadyLabel2b=Sceglie Installà per cuntinuà l’installazione. +ReadyMemoUserInfo=Infurmazioni di l’utilizatore : +ReadyMemoDir=Cartulare d’installazione : +ReadyMemoType=Tipu d’installazione : +ReadyMemoComponents=Cumpunenti selezziunati : +ReadyMemoGroup=Cartulare di u listinu « Démarrer » : +ReadyMemoTasks=Trattamenti addizziunali : + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Scaricamentu di i schedarii addiziunali… +ButtonStopDownload=&Piantà u scaricamentu +StopDownload=Da veru, vulete piantà u scaricamentu ? +ErrorDownloadAborted=Scaricamentu interrottu +ErrorDownloadFailed=Scaricamentu fiascu : %1 %2 +ErrorDownloadSizeFailed=Fiascu per ottene a dimensione : %1 %2 +ErrorFileHash1=Fiascu di u tazzeghju di u schedariu : %1 +ErrorFileHash2=Tazzeghju di u schedariu inaccettevule : aspettatu %1, trovu %2 +ErrorProgress=Prugressione inaccettevule : %1 di %2 +ErrorFileSize=Dimensione di u schedariu inaccettevule : aspettatu %1, trovu %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Preparazione di l’installazione +PreparingDesc=L’assistente appronta l’installazione di [name] nant’à l’urdinatore. +PreviousInstallNotCompleted=L’installazione o a cacciatura di un prugramma precedente ùn s’hè micca compia bè. Ci vulerà à ridimarrà l’urdinatore per compie st’installazione.%n%nDopu, ci vulerà à rilancià l’assistente per compie l’installazione di [name]. +CannotContinue=L’assistente ùn pò micca cuntinuà. Sceglie Abbandunà per esce. +ApplicationsFound=St’appiecazioni impieganu schedarii chì devenu esse mudificati da l’assistente. Hè ricumandatu di permette à l’assistente di chjode autumaticamente st’appiecazioni. +ApplicationsFound2=St’appiecazioni impieganu schedarii chì devenu esse mudificati da l’assistente. Hè ricumandatu di permette à l’assistente di chjode autumaticamente st’appiecazioni. S’è l’installazione si compie bè, l’assistente pruverà di rilancià l’appiecazioni. +CloseApplications=Chjode &autumaticamente l’appiecazioni +DontCloseApplications=Ùn chjode &micca l’appiecazioni +ErrorCloseApplications=L’assistente ùn hà micca pussutu chjode autumaticamente tutti l’appiecazioni. Nanzu di cuntinuà, hè ricumandatu di chjode tutti l’appiecazioni chì impieganu schedarii chì devenu esse mudificati da l’assistente durante l’installazione. +PrepareToInstallNeedsRestart=L’assistente deve ridimarrà l’urdinatore. Dopu, ci vulerà à rilancià l’assistente per compie l’installazione di [name].%n%nVulete ridimarrà l’urdinatore subitu ? + +; *** "Installing" wizard page +WizardInstalling=Installazione in corsu +InstallingLabel=Ci vole à aspettà durante l’installazione di [name] nant’à l’urdinatore. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Fine di l’installazione di [name] +FinishedLabelNoIcons=L’assistente hà compiu l’installazione di [name] nant’à l’urdinatore. +FinishedLabel=L’assistente hà compiu l’installazione di [name] nant’à l’urdinatore. L’appiecazione pò esse lanciata selezziunendu l’accurtatoghji installati. +ClickFinish=Sceglie Piantà per compie l’assistente. +FinishedRestartLabel=Per compie l’installazione di [name], l’assistente deve ridimarrà l’urdinatore. Vulete ridimarrà l’urdinatore subitu ? +FinishedRestartMessage=Per compie l’installazione di [name], l’assistente deve ridimarrà l’urdinatore.%n%nVulete ridimarrà l’urdinatore subitu ? +ShowReadmeCheck=Iè, vogliu leghje u schedariu LISEZMOI o README +YesRadio=&Iè, ridimarrà l’urdinatore subitu +NoRadio=I&nnò, preferiscu ridimarrà l’urdinatore dopu +; used for example as 'Run MyProg.exe' +RunEntryExec=Eseguisce %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Fighjà %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=L’assistente hà bisogniu di u discu seguente +SelectDiskLabel2=Mette u discu %1 è sceglie Vai.%n%nS’è i schedarii di stu discu si trovanu in un’altru cartulare chè quellu affissatu inghjò, stampittà u chjassu currettu o sceglie Sfuglià. +PathLabel=&Chjassu : +FileNotInDir2=U schedariu « %1 » ùn si truva micca in « %2 ». Mette u discu curretu o sceglie un’altru cartulare. +SelectDirectoryLabel=Ci vole à specificà induve si trova u discu seguente. + +; *** Installation phase messages +SetupAborted=L’installazione ùn s’hè micca compia bè.%n%nCi vole à currege u penseru è eseguisce l’assistente torna. +AbortRetryIgnoreSelectAction=Selezziunate un’azzione +AbortRetryIgnoreRetry=&Pruvà torna +AbortRetryIgnoreIgnore=&Ignurà u sbagliu è cuntinuà +AbortRetryIgnoreCancel=Abbandunà l’installazione + +; *** Installation status messages +StatusClosingApplications=Chjusura di l’appiecazioni… +StatusCreateDirs=Creazione di i cartulari… +StatusExtractFiles=Estrazzione di i schedarii… +StatusCreateIcons=Creazione di l’accurtatoghji… +StatusCreateIniEntries=Creazione di l’elementi INI… +StatusCreateRegistryEntries=Creazione di l’elementi di u registru… +StatusRegisterFiles=Arregistramentu di i schedarii… +StatusSavingUninstall=Cunservazione di l’informazioni di disinstallazione… +StatusRunProgram=Cumpiera di l’installazione… +StatusRestartingApplications=Relanciu di l’appiecazioni… +StatusRollback=Annulazione di i mudificazioni… + +; *** Misc. errors +ErrorInternal2=Sbagliu internu : %1 +ErrorFunctionFailedNoCode=Fiascu di %1 +ErrorFunctionFailed=Fiascu di %1 ; codice %2 +ErrorFunctionFailedWithMessage=Fiascu di %1 ; codice %2.%n%3 +ErrorExecutingProgram=Impussibule d’eseguisce u schedariu :%n%1 + +; *** Registry errors +ErrorRegOpenKey=Sbagliu durante l’apertura di a chjave di registru :%n%1\%2 +ErrorRegCreateKey=Sbagliu durante a creazione di a chjave di registru :%n%1\%2 +ErrorRegWriteKey=Sbagliu durante a scrittura di a chjave di registru :%n%1\%2 + +; *** INI errors +ErrorIniEntry=Sbagliu durante a creazione di l’elementu INI in u schedariu « %1 ». + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=Ignurà stu &schedariu (micca ricumandatu) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignurà u sbagliu è cuntinuà (micca ricumandatu) +SourceIsCorrupted=U schedariu d’urigine hè alteratu +SourceDoesntExist=U schedariu d’urigine « %1 » ùn esiste micca +ExistingFileReadOnly2=U schedariu esistente hà un attributu di lettura-sola è ùn pò micca esse rimpiazzatu. +ExistingFileReadOnlyRetry=&Caccià l’attributu di lettura-sola è pruvà torna +ExistingFileReadOnlyKeepExisting=Cunservà u schedariu &esistente +ErrorReadingExistingDest=Un sbagliu hè accadutu pruvendu di leghje u schedariu esistente : +FileExistsSelectAction=Selezziunate un’azzione +FileExists2=U schedariu esiste dighjà. +FileExistsOverwriteExisting=&Rimpiazzà u schedariu chì esiste +FileExistsKeepExisting=Cunservà u schedariu &esistente +FileExistsOverwriteOrKeepAll=&Fà què per l’altri cunflitti +ExistingFileNewerSelectAction=Selezziunate un’azzione +ExistingFileNewer2=U schedariu esistente hè più recente chè quellu chì l’assistente prova d’installà. +ExistingFileNewerOverwriteExisting=&Rimpiazzà u schedariu chì esiste +ExistingFileNewerKeepExisting=Cunservà u schedariu &esistente (ricumandatu) +ExistingFileNewerOverwriteOrKeepAll=&Fà què per l’altri cunflitti +ErrorChangingAttr=Un sbagliu hè accadutu pruvendu di cambià l’attributi di u schedariu esistente : +ErrorCreatingTemp=Un sbagliu hè accadutu pruvendu di creà un schedariu in u cartulare di destinazione : +ErrorReadingSource=Un sbagliu hè accadutu pruvendu di leghje u schedariu d’urigine : +ErrorCopying=Un sbagliu hè accadutu pruvendu di cupià un schedariu : +ErrorReplacingExistingFile=Un sbagliu hè accadutu pruvendu di rimpiazzà u schedariu esistente : +ErrorRestartReplace=Fiascu di Rimpiazzamentu di schedariu à u riavviu di l’urdinatore : +ErrorRenamingTemp=Un sbagliu hè accadutu pruvendu di rinuminà un schedariu in u cartulare di destinazione : +ErrorRegisterServer=Impussibule d’arregistrà a bibliuteca DLL/OCX : %1 +ErrorRegSvr32Failed=Fiascu di RegSvr32 cù codice d’esciuta %1 +ErrorRegisterTypeLib=Impussibule d’arregistrà a bibliuteca di tipu : %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=Tutti l’utilizatori +UninstallDisplayNameMarkCurrentUser=L’utilizatore attuale + +; *** Post-installation errors +ErrorOpeningReadme=Un sbagliu hè accadutu pruvendu d’apre u schedariu LISEZMOI o README. +ErrorRestartingComputer=L’assistente ùn hà micca pussutu ridimarrà l’urdinatore. Ci vole à fallu manualmente. + +; *** Uninstaller messages +UninstallNotFound=U schedariu « %1 » ùn esiste micca. Impussibule di disinstallà. +UninstallOpenError=U schedariu « %1 » ùn pò micca esse apertu. Impussibule di disinstallà +UninstallUnsupportedVer=U ghjurnale di disinstallazione « %1 » hè in una forma scunnisciuta da sta versione di l’assistente di disinstallazione. Impussibule di disinstallà +UninstallUnknownEntry=Un elementu scunisciutu (%1) hè statu trovu in u ghjurnale di disinstallazione +ConfirmUninstall=Da veru, vulete caccià cumpletamente %1 è tutti i so cumpunenti ? +UninstallOnlyOnWin64=St’appiecazione pò esse disinstallata solu cù una versione 64-bit di Windows. +OnlyAdminCanUninstall=St’appiecazione pò esse disinstallata solu da un utilizatore di u gruppu d’amministratori. +UninstallStatusLabel=Ci vole à aspettà chì %1 sia cacciatu di l’urdinatore. +UninstalledAll=%1 hè statu cacciatu bè da l’urdinatore. +UninstalledMost=A disinstallazione di %1 hè compia.%n%nQualchì elementu ùn pò micca esse cacciatu. Ci vole à cacciallu manualmente. +UninstalledAndNeedsRestart=Per compie a disinstallazione di %1, l’urdinatore deve esse ridimarratu.%n%nVulete ridimarrà l’urdinatore subitu ? +UninstallDataCorrupted=U schedariu « %1 » hè alteratu. Impussibule di disinstallà + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Caccià i schedarii sparti ? +ConfirmDeleteSharedFile2=U sistema indicheghja chì u schedariu spartu ùn hè più impiegatu da nisunu prugramma. Vulete chì a disinstallazione cacci stu schedariu spartu ?%n%nS’è qualchì prugramma impiegheghja sempre stu schedariu è ch’ellu hè cacciatu, quellu prugramma ùn puderà funziunà currettamente. S’è ùn site micca sicuru, sceglie Innò. Lascià stu schedariu nant’à u sistema ùn pò micca pruduce danni. +SharedFileNameLabel=Nome di schedariu : +SharedFileLocationLabel=Lucalizazione : +WizardUninstalling=Statu di disinstallazione +StatusUninstalling=Disinstallazione di %1… + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Installazione di %1. +ShutdownBlockReasonUninstallingApp=Disinstallazione di %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 versione %2 +AdditionalIcons=Accurtatoghji addizziunali : +CreateDesktopIcon=Creà un accurtatoghju nant’à u &scagnu +CreateQuickLaunchIcon=Creà un accurtatoghju nant’à a barra di &lanciu prontu +ProgramOnTheWeb=%1 nant’à u Web +UninstallProgram=Disinstallà %1 +LaunchProgram=Lancià %1 +AssocFileExtension=&Assucià %1 cù l’estensione di schedariu %2 +AssocingFileExtension=Associu di %1 cù l’estensione di schedariu %2… +AutoStartProgramGroupDescription=Lanciu autumaticu : +AutoStartProgram=Lanciu autumaticu di %1 +AddonHostProgramNotFound=Impussibule di truvà %1 in u cartulare selezziunatu.%n%nVulete cuntinuà l’installazione quantunque ? diff --git a/Files/Languages/Czech.isl b/Files/Languages/Czech.isl new file mode 100644 index 00000000..cbde1ccc --- /dev/null +++ b/Files/Languages/Czech.isl @@ -0,0 +1,378 @@ +; ******************************************************* +; *** *** +; *** Inno Setup version 6.1.0+ Czech messages *** +; *** *** +; *** Original Author: *** +; *** *** +; *** Ivo Bauer (bauer@ozm.cz) *** +; *** *** +; *** Contributors: *** +; *** *** +; *** Lubos Stanek (lubek@users.sourceforge.net) *** +; *** Vitezslav Svejdar (vitezslav.svejdar@cuni.cz) *** +; *** Jiri Fenz (jirifenz@gmail.com) *** +; *** *** +; ******************************************************* + +[LangOptions] +LanguageName=<010C>e<0161>tina +LanguageID=$0405 +LanguageCodePage=1250 + +[Messages] + +; *** Application titles +SetupAppTitle=Prvodce instalac +SetupWindowTitle=Prvodce instalac - %1 +UninstallAppTitle=Prvodce odinstalac +UninstallAppFullTitle=Prvodce odinstalac - %1 + +; *** Misc. common +InformationTitle=Informace +ConfirmTitle=Potvrzen +ErrorTitle=Chyba + +; *** SetupLdr messages +SetupLdrStartupMessage=Vt Vs prvodce instalac produktu %1. Chcete pokraovat? +LdrCannotCreateTemp=Nelze vytvoit doasn soubor. Prvodce instalac bude ukonen +LdrCannotExecTemp=Nelze spustit soubor v doasn sloce. Prvodce instalac bude ukonen +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nChyba %2: %3 +SetupFileMissing=Instalan sloka neobsahuje soubor %1. Opravte prosm tuto chybu nebo si opatete novou kopii tohoto produktu. +SetupFileCorrupt=Soubory prvodce instalac jsou pokozeny. Opatete si prosm novou kopii tohoto produktu. +SetupFileCorruptOrWrongVer=Soubory prvodce instalac jsou pokozeny nebo se nesluuj s touto verz prvodce instalac. Opravte prosm tuto chybu nebo si opatete novou kopii tohoto produktu. +InvalidParameter=Pkazov dek obsahuje neplatn parametr:%n%n%1 +SetupAlreadyRunning=Prvodce instalac je ji sputn. +WindowsVersionNotSupported=Tento produkt nepodporuje verzi MS Windows, kter b na Vaem potai. +WindowsServicePackRequired=Tento produkt vyaduje %1 Service Pack %2 nebo vy. +NotOnThisPlatform=Tento produkt nelze spustit ve %1. +OnlyOnThisPlatform=Tento produkt mus bt sputn ve %1. +OnlyOnTheseArchitectures=Tento produkt lze nainstalovat pouze ve verzch MS Windows s podporou architektury procesor:%n%n%1 +WinVersionTooLowError=Tento produkt vyaduje %1 verzi %2 nebo vy. +WinVersionTooHighError=Tento produkt nelze nainstalovat ve %1 verzi %2 nebo vy. +AdminPrivilegesRequired=K instalaci tohoto produktu muste bt pihleni s oprvnnmi sprvce. +PowerUserPrivilegesRequired=K instalaci tohoto produktu muste bt pihleni s oprvnnmi sprvce nebo lena skupiny Power Users. +SetupAppRunningError=Prvodce instalac zjistil, e produkt %1 je nyn sputn.%n%nZavete prosm vechny instance tohoto produktu a pak pokraujte klepnutm na tlatko OK, nebo ukonete instalaci tlatkem Zruit. +UninstallAppRunningError=Prvodce odinstalac zjistil, e produkt %1 je nyn sputn.%n%nZavete prosm vechny instance tohoto produktu a pak pokraujte klepnutm na tlatko OK, nebo ukonete odinstalaci tlatkem Zruit. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Vbr reimu prvodce instalac +PrivilegesRequiredOverrideInstruction=Zvolte reim instalace +PrivilegesRequiredOverrideText1=Produkt %1 lze nainstalovat pro vechny uivatele (muste bt pihleni s oprvnnmi sprvce), nebo pouze pro Vs. +PrivilegesRequiredOverrideText2=Produkt %1 lze nainstalovat pouze pro Vs, nebo pro vechny uivatele (muste bt pihleni s oprvnnmi sprvce). +PrivilegesRequiredOverrideAllUsers=Nainstalovat pro &vechny uivatele +PrivilegesRequiredOverrideAllUsersRecommended=Nainstalovat pro &vechny uivatele (doporuuje se) +PrivilegesRequiredOverrideCurrentUser=Nainstalovat pouze pro &m +PrivilegesRequiredOverrideCurrentUserRecommended=Nainstalovat pouze pro &m (doporuuje se) + +; *** Misc. errors +ErrorCreatingDir=Prvodci instalac se nepodailo vytvoit sloku "%1" +ErrorTooManyFilesInDir=Nelze vytvoit soubor ve sloce "%1", protoe tato sloka ji obsahuje pli mnoho soubor + +; *** Setup common messages +ExitSetupTitle=Ukonit prvodce instalac +ExitSetupMessage=Instalace nebyla zcela dokonena. Jestlie nyn prvodce instalac ukonte, produkt nebude nainstalovn.%n%nPrvodce instalac mete znovu spustit kdykoliv jindy a instalaci dokonit.%n%nChcete prvodce instalac ukonit? +AboutSetupMenuItem=&O prvodci instalac... +AboutSetupTitle=O prvodci instalac +AboutSetupMessage=%1 verze %2%n%3%n%n%1 domovsk strnka:%n%4 +AboutSetupNote= +TranslatorNote=Czech translation maintained by Ivo Bauer (bauer@ozm.cz), Lubos Stanek (lubek@users.sourceforge.net), Vitezslav Svejdar (vitezslav.svejdar@cuni.cz) and Jiri Fenz (jirifenz@gmail.com) + +; *** Buttons +ButtonBack=< &Zpt +ButtonNext=&Dal > +ButtonInstall=&Instalovat +ButtonOK=OK +ButtonCancel=Zruit +ButtonYes=&Ano +ButtonYesToAll=Ano &vem +ButtonNo=&Ne +ButtonNoToAll=N&e vem +ButtonFinish=&Dokonit +ButtonBrowse=&Prochzet... +ButtonWizardBrowse=&Prochzet... +ButtonNewFolder=&Vytvoit novou sloku + +; *** "Select Language" dialog messages +SelectLanguageTitle=Vbr jazyka prvodce instalac +SelectLanguageLabel=Zvolte jazyk, kter se m pout bhem instalace. + +; *** Common wizard text +ClickNext=Pokraujte klepnutm na tlatko Dal, nebo ukonete prvodce instalac tlatkem Zruit. +BeveledLabel= +BrowseDialogTitle=Vyhledat sloku +BrowseDialogLabel=Z ne uvedenho seznamu vyberte sloku a klepnte na tlatko OK. +NewFolderName=Nov sloka + +; *** "Welcome" wizard page +WelcomeLabel1=Vt Vs prvodce instalac produktu [name]. +WelcomeLabel2=Produkt [name/ver] bude nainstalovn na V pota.%n%nDve ne budete pokraovat, doporuuje se zavt veker sputn aplikace. + +; *** "Password" wizard page +WizardPassword=Heslo +PasswordLabel1=Tato instalace je chrnna heslem. +PasswordLabel3=Zadejte prosm heslo a pokraujte klepnutm na tlatko Dal. Pi zadvn hesla rozliujte mal a velk psmena. +PasswordEditLabel=&Heslo: +IncorrectPassword=Zadan heslo nen sprvn. Zkuste to prosm znovu. + +; *** "License Agreement" wizard page +WizardLicense=Licenn smlouva +LicenseLabel=Dve ne budete pokraovat, pette si prosm pozorn nsledujc dleit informace. +LicenseLabel3=Pette si prosm nsledujc licenn smlouvu. Aby instalace mohla pokraovat, muste souhlasit s podmnkami tto smlouvy. +LicenseAccepted=&Souhlasm s podmnkami licenn smlouvy +LicenseNotAccepted=&Nesouhlasm s podmnkami licenn smlouvy + +; *** "Information" wizard pages +WizardInfoBefore=Informace +InfoBeforeLabel=Dve ne budete pokraovat, pette si prosm pozorn nsledujc dleit informace. +InfoBeforeClickLabel=Pokraujte v instalaci klepnutm na tlatko Dal. +WizardInfoAfter=Informace +InfoAfterLabel=Dve ne budete pokraovat, pette si prosm pozorn nsledujc dleit informace. +InfoAfterClickLabel=Pokraujte v instalaci klepnutm na tlatko Dal. + +; *** "User Information" wizard page +WizardUserInfo=Informace o uivateli +UserInfoDesc=Zadejte prosm poadovan daje. +UserInfoName=&Uivatelsk jmno: +UserInfoOrg=&Spolenost: +UserInfoSerial=S&riov slo: +UserInfoNameRequired=Muste zadat uivatelsk jmno. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Zvolte clov umstn +SelectDirDesc=Kam m bt produkt [name] nainstalovn? +SelectDirLabel3=Prvodce nainstaluje produkt [name] do nsledujc sloky. +SelectDirBrowseLabel=Pokraujte klepnutm na tlatko Dal. Chcete-li zvolit jinou sloku, klepnte na tlatko Prochzet. +DiskSpaceGBLabel=Instalace vyaduje nejmn [gb] GB volnho msta na disku. +DiskSpaceMBLabel=Instalace vyaduje nejmn [mb] MB volnho msta na disku. +CannotInstallToNetworkDrive=Prvodce instalac neme instalovat do sov jednotky. +CannotInstallToUNCPath=Prvodce instalac neme instalovat do cesty UNC. +InvalidPath=Muste zadat plnou cestu vetn psmene jednotky; napklad:%n%nC:\Aplikace%n%nnebo cestu UNC ve tvaru:%n%n\\server\sdlen sloka +InvalidDrive=Vmi zvolen jednotka nebo cesta UNC neexistuje nebo nen dostupn. Zvolte prosm jin umstn. +DiskSpaceWarningTitle=Nedostatek msta na disku +DiskSpaceWarning=Prvodce instalac vyaduje nejmn %1 KB volnho msta pro instalaci produktu, ale na zvolen jednotce je dostupnch pouze %2 KB.%n%nChcete pesto pokraovat? +DirNameTooLong=Nzev sloky nebo cesta jsou pli dlouh. +InvalidDirName=Nzev sloky nen platn. +BadDirName32=Nzev sloky neme obsahovat dn z nsledujcch znak:%n%n%1 +DirExistsTitle=Sloka existuje +DirExists=Sloka:%n%n%1%n%nji existuje. M se pesto instalovat do tto sloky? +DirDoesntExistTitle=Sloka neexistuje +DirDoesntExist=Sloka:%n%n%1%n%nneexistuje. M bt tato sloka vytvoena? + +; *** "Select Components" wizard page +WizardSelectComponents=Zvolte sousti +SelectComponentsDesc=Jak sousti maj bt nainstalovny? +SelectComponentsLabel2=Zakrtnte sousti, kter maj bt nainstalovny; sousti, kter se nemaj instalovat, ponechte nezakrtnut. Pokraujte klepnutm na tlatko Dal. +FullInstallation=pln instalace +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Kompaktn instalace +CustomInstallation=Voliteln instalace +NoUninstallWarningTitle=Sousti existuj +NoUninstallWarning=Prvodce instalac zjistil, e nsledujc sousti jsou ji na Vaem potai nainstalovny:%n%n%1%n%nNezahrnete-li tyto sousti do vbru, nebudou nyn odinstalovny.%n%nChcete pesto pokraovat? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Vybran sousti vyaduj nejmn [gb] GB msta na disku. +ComponentsDiskSpaceMBLabel=Vybran sousti vyaduj nejmn [mb] MB msta na disku. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Zvolte dal lohy +SelectTasksDesc=Kter dal lohy maj bt provedeny? +SelectTasksLabel2=Zvolte dal lohy, kter maj bt provedeny v prbhu instalace produktu [name], a pak pokraujte klepnutm na tlatko Dal. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Vyberte sloku v nabdce Start +SelectStartMenuFolderDesc=Kam m prvodce instalac umstit zstupce aplikace? +SelectStartMenuFolderLabel3=Prvodce instalac vytvo zstupce aplikace v nsledujc sloce nabdky Start. +SelectStartMenuFolderBrowseLabel=Pokraujte klepnutm na tlatko Dal. Chcete-li zvolit jinou sloku, klepnte na tlatko Prochzet. +MustEnterGroupName=Muste zadat nzev sloky. +GroupNameTooLong=Nzev sloky nebo cesta jsou pli dlouh. +InvalidGroupName=Nzev sloky nen platn. +BadGroupName=Nzev sloky neme obsahovat dn z nsledujcch znak:%n%n%1 +NoProgramGroupCheck2=&Nevytvet sloku v nabdce Start + +; *** "Ready to Install" wizard page +WizardReady=Instalace je pipravena +ReadyLabel1=Prvodce instalac je nyn pipraven nainstalovat produkt [name] na V pota. +ReadyLabel2a=Pokraujte v instalaci klepnutm na tlatko Instalovat. Pejete-li si zmnit nkter nastaven instalace, klepnte na tlatko Zpt. +ReadyLabel2b=Pokraujte v instalaci klepnutm na tlatko Instalovat. +ReadyMemoUserInfo=Informace o uivateli: +ReadyMemoDir=Clov umstn: +ReadyMemoType=Typ instalace: +ReadyMemoComponents=Vybran sousti: +ReadyMemoGroup=Sloka v nabdce Start: +ReadyMemoTasks=Dal lohy: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Stahuj se dal soubory... +ButtonStopDownload=&Zastavit stahovn +StopDownload=Urit chcete stahovn zastavit? +ErrorDownloadAborted=Stahovn perueno +ErrorDownloadFailed=Stahovn selhalo: %1 %2 +ErrorDownloadSizeFailed=Nepodailo se zjistit velikost: %1 %2 +ErrorFileHash1=Nepodailo se urit kontroln souet souboru: %1 +ErrorFileHash2=Neplatn kontroln souet souboru: oekvno %1, nalezeno %2 +ErrorProgress=Neplatn prbh: %1 of %2 +ErrorFileSize=Neplatn velikost souboru: oekvno %1, nalezeno %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Pprava k instalaci +PreparingDesc=Prvodce instalac pipravuje instalaci produktu [name] na V pota. +PreviousInstallNotCompleted=Instalace/odinstalace pedchozho produktu nebyla zcela dokonena. Aby mohla bt dokonena, muste restartovat V pota.%n%nPo restartovn Vaeho potae spuste znovu prvodce instalac, aby bylo mon dokonit instalaci produktu [name]. +CannotContinue=Prvodce instalac neme pokraovat. Ukonete prosm prvodce instalac klepnutm na tlatko Zruit. +ApplicationsFound=Nsledujc aplikace pistupuj k souborm, kter je teba bhem instalace aktualizovat. Doporuuje se povolit prvodci instalac, aby tyto aplikace automaticky zavel. +ApplicationsFound2=Nsledujc aplikace pistupuj k souborm, kter je teba bhem instalace aktualizovat. Doporuuje se povolit prvodci instalac, aby tyto aplikace automaticky zavel. Po dokonen instalace se prvodce instalac pokus aplikace restartovat. +CloseApplications=&Zavt aplikace automaticky +DontCloseApplications=&Nezavrat aplikace +ErrorCloseApplications=Prvodci instalac se nepodailo automaticky zavt vechny aplikace. Dve ne budete pokraovat, doporuuje se zavt veker aplikace pistupujc k souborm, kter je teba bhem instalace aktualizovat. +PrepareToInstallNeedsRestart=Prvodce instalac mus restartovat V pota. Po restartovn Vaeho potae spuste prvodce instalac znovu, aby bylo mon dokonit instalaci produktu [name].%n%nChcete jej restartovat nyn? + +; *** "Installing" wizard page +WizardInstalling=Instalovn +InstallingLabel=ekejte prosm, dokud prvodce instalac nedokon instalaci produktu [name] na V pota. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Dokonuje se instalace produktu [name] +FinishedLabelNoIcons=Prvodce instalac dokonil instalaci produktu [name] na V pota. +FinishedLabel=Prvodce instalac dokonil instalaci produktu [name] na V pota. Produkt lze spustit pomoc nainstalovanch zstupc. +ClickFinish=Ukonete prvodce instalac klepnutm na tlatko Dokonit. +FinishedRestartLabel=K dokonen instalace produktu [name] je nezbytn, aby prvodce instalac restartoval V pota. Chcete jej restartovat nyn? +FinishedRestartMessage=K dokonen instalace produktu [name] je nezbytn, aby prvodce instalac restartoval V pota.%n%nChcete jej restartovat nyn? +ShowReadmeCheck=Ano, chci zobrazit dokument "TIMNE" +YesRadio=&Ano, chci nyn restartovat pota +NoRadio=&Ne, pota restartuji pozdji +; used for example as 'Run MyProg.exe' +RunEntryExec=Spustit %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Zobrazit %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Prvodce instalac vyaduje dal disk +SelectDiskLabel2=Vlote prosm disk %1 a klepnte na tlatko OK.%n%nPokud se soubory na tomto disku nachzej v jin sloce ne v t, kter je zobrazena ne, pak zadejte sprvnou cestu nebo ji zvolte klepnutm na tlatko Prochzet. +PathLabel=&Cesta: +FileNotInDir2=Soubor "%1" nelze najt v "%2". Vlote prosm sprvn disk nebo zvolte jinou sloku. +SelectDirectoryLabel=Specifikujte prosm umstn dalho disku. + +; *** Installation phase messages +SetupAborted=Instalace nebyla zcela dokonena.%n%nOpravte prosm chybu a spuste prvodce instalac znovu. +AbortRetryIgnoreSelectAction=Zvolte akci +AbortRetryIgnoreRetry=&Zopakovat akci +AbortRetryIgnoreIgnore=&Ignorovat chybu a pokraovat +AbortRetryIgnoreCancel=Zruit instalaci + +; *** Installation status messages +StatusClosingApplications=Zavraj se aplikace... +StatusCreateDirs=Vytvej se sloky... +StatusExtractFiles=Extrahuj se soubory... +StatusCreateIcons=Vytvej se zstupci... +StatusCreateIniEntries=Vytvej se zznamy v inicializanch souborech... +StatusCreateRegistryEntries=Vytvej se zznamy v systmovm registru... +StatusRegisterFiles=Registruj se soubory... +StatusSavingUninstall=Ukldaj se informace pro odinstalaci produktu... +StatusRunProgram=Dokonuje se instalace... +StatusRestartingApplications=Restartuj se aplikace... +StatusRollback=Proveden zmny se vracej zpt... + +; *** Misc. errors +ErrorInternal2=Intern chyba: %1 +ErrorFunctionFailedNoCode=Funkce %1 selhala +ErrorFunctionFailed=Funkce %1 selhala; kd %2 +ErrorFunctionFailedWithMessage=Funkce %1 selhala; kd %2.%n%3 +ErrorExecutingProgram=Nelze spustit soubor:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Dolo k chyb pi otevrn kle systmovho registru:%n%1\%2 +ErrorRegCreateKey=Dolo k chyb pi vytven kle systmovho registru:%n%1\%2 +ErrorRegWriteKey=Dolo k chyb pi zpisu do kle systmovho registru:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Dolo k chyb pi vytven zznamu v inicializanm souboru "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Peskoit tento soubor (nedoporuuje se) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorovat chybu a pokraovat (nedoporuuje se) +SourceIsCorrupted=Zdrojov soubor je pokozen +SourceDoesntExist=Zdrojov soubor "%1" neexistuje +ExistingFileReadOnly2=Nelze nahradit existujc soubor, protoe je uren pouze pro ten. +ExistingFileReadOnlyRetry=&Odstranit atribut "pouze pro ten" a zopakovat akci +ExistingFileReadOnlyKeepExisting=&Ponechat existujc soubor +ErrorReadingExistingDest=Dolo k chyb pi pokusu o ten existujcho souboru: +FileExistsSelectAction=Zvolte akci +FileExists2=Soubor ji existuje. +FileExistsOverwriteExisting=&Nahradit existujc soubor +FileExistsKeepExisting=&Ponechat existujc soubor +FileExistsOverwriteOrKeepAll=&Zachovat se stejn u dalch konflikt +ExistingFileNewerSelectAction=Zvolte akci +ExistingFileNewer2=Existujc soubor je novj ne ten, kter se prvodce instalac pokou instalovat. +ExistingFileNewerOverwriteExisting=&Nahradit existujc soubor +ExistingFileNewerKeepExisting=&Ponechat existujc soubor (doporuuje se) +ExistingFileNewerOverwriteOrKeepAll=&Zachovat se stejn u dalch konflikt +ErrorChangingAttr=Dolo k chyb pi pokusu o zmnu atribut existujcho souboru: +ErrorCreatingTemp=Dolo k chyb pi pokusu o vytvoen souboru v clov sloce: +ErrorReadingSource=Dolo k chyb pi pokusu o ten zdrojovho souboru: +ErrorCopying=Dolo k chyb pi pokusu o zkoprovn souboru: +ErrorReplacingExistingFile=Dolo k chyb pi pokusu o nahrazen existujcho souboru: +ErrorRestartReplace=Funkce "RestartReplace" prvodce instalac selhala: +ErrorRenamingTemp=Dolo k chyb pi pokusu o pejmenovn souboru v clov sloce: +ErrorRegisterServer=Nelze zaregistrovat DLL/OCX: %1 +ErrorRegSvr32Failed=Voln RegSvr32 selhalo s nvratovm kdem %1 +ErrorRegisterTypeLib=Nelze zaregistrovat typovou knihovnu: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32bitov +UninstallDisplayNameMark64Bit=64bitov +UninstallDisplayNameMarkAllUsers=Vichni uivatel +UninstallDisplayNameMarkCurrentUser=Aktuln uivatel + +; *** Post-installation errors +ErrorOpeningReadme=Dolo k chyb pi pokusu o oteven dokumentu "TIMNE". +ErrorRestartingComputer=Prvodci instalac se nepodailo restartovat V pota. Restartujte jej prosm run. + +; *** Uninstaller messages +UninstallNotFound=Soubor "%1" neexistuje. Produkt nelze odinstalovat. +UninstallOpenError=Soubor "%1" nelze otevt. Produkt nelze odinstalovat. +UninstallUnsupportedVer=Formt souboru se zznamy k odinstalaci produktu "%1" nebyl touto verz prvodce odinstalac rozpoznn. Produkt nelze odinstalovat +UninstallUnknownEntry=V souboru obsahujcm informace k odinstalaci produktu byla zjitna neznm poloka (%1) +ConfirmUninstall=Urit chcete produkt %1 a vechny jeho sousti odinstalovat? +UninstallOnlyOnWin64=Tento produkt lze odinstalovat pouze v 64-bitovch verzch MS Windows. +OnlyAdminCanUninstall=K odinstalaci tohoto produktu muste bt pihleni s oprvnnmi sprvce. +UninstallStatusLabel=ekejte prosm, dokud produkt %1 nebude odinstalovn z Vaeho potae. +UninstalledAll=Produkt %1 byl z Vaeho potae spn odinstalovn. +UninstalledMost=Produkt %1 byl odinstalovn.%n%nNkter jeho sousti se odinstalovat nepodailo. Mete je vak odstranit run. +UninstalledAndNeedsRestart=K dokonen odinstalace produktu %1 je nezbytn, aby prvodce odinstalac restartoval V pota.%n%nChcete jej restartovat nyn? +UninstallDataCorrupted=Soubor "%1" je pokozen. Produkt nelze odinstalovat + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Odebrat sdlen soubor? +ConfirmDeleteSharedFile2=Systm indikuje, e nsledujc sdlen soubor nen pouvn dnmi jinmi aplikacemi. M bt tento sdlen soubor prvodcem odinstalac odstrann?%n%nPokud nkter aplikace tento soubor pouvaj, pak po jeho odstrann nemusej pracovat sprvn. Pokud si nejste jisti, zvolte Ne. Ponechn tohoto souboru ve Vaem systmu nezpsob dnou kodu. +SharedFileNameLabel=Nzev souboru: +SharedFileLocationLabel=Umstn: +WizardUninstalling=Stav odinstalace +StatusUninstalling=Probh odinstalace produktu %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Probh instalace produktu %1. +ShutdownBlockReasonUninstallingApp=Probh odinstalace produktu %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 verze %2 +AdditionalIcons=Dal zstupci: +CreateDesktopIcon=Vytvoit zstupce na &ploe +CreateQuickLaunchIcon=Vytvoit zstupce na panelu &Snadn sputn +ProgramOnTheWeb=Aplikace %1 na internetu +UninstallProgram=Odinstalovat aplikaci %1 +LaunchProgram=Spustit aplikaci %1 +AssocFileExtension=Vytvoit &asociaci mezi soubory typu %2 a aplikac %1 +AssocingFileExtension=Vytv se asociace mezi soubory typu %2 a aplikac %1... +AutoStartProgramGroupDescription=Po sputn: +AutoStartProgram=Spoutt aplikaci %1 automaticky +AddonHostProgramNotFound=Aplikace %1 nebyla ve Vmi zvolen sloce nalezena.%n%nChcete pesto pokraovat? diff --git a/Files/Languages/Danish.isl b/Files/Languages/Danish.isl new file mode 100644 index 00000000..66c1a774 --- /dev/null +++ b/Files/Languages/Danish.isl @@ -0,0 +1,379 @@ +; *** Inno Setup version 6.1.0+ Danish messages *** +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). +; +; ID: Danish.isl,v 6.0.3+ 2020/07/26 Thomas Vedel, thomas@veco.dk +; Parts by scootergrisen, 2015 + +[LangOptions] +LanguageName=Dansk +LanguageID=$0406 +LanguageCodePage=1252 + +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] +; *** Application titles +SetupAppTitle=Installationsguide +SetupWindowTitle=Installationsguide - %1 +UninstallAppTitle=Afinstallr +UninstallAppFullTitle=Afinstallerer %1 + +; *** Misc. common +InformationTitle=Information +ConfirmTitle=Bekrft +ErrorTitle=Fejl + +; *** SetupLdr messages +SetupLdrStartupMessage=Denne guide installerer %1. Vil du fortstte? +LdrCannotCreateTemp=Kan ikke oprette en midlertidig fil. Installationen afbrydes +LdrCannotExecTemp=Kan ikke kre et program i den midlertidige mappe. Installationen afbrydes +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nFejl %2: %3 +SetupFileMissing=Filen %1 mangler i installationsmappen. Ret venligst problemet eller f en ny kopi af programmet. +SetupFileCorrupt=Installationsfilerne er beskadiget. F venligst en ny kopi af installationsprogrammet. +SetupFileCorruptOrWrongVer=Installationsfilerne er beskadiget, eller ogs er de ikke kompatible med denne version af installationsprogrammet. Ret venligst problemet eller f en ny kopi af installationsprogrammet. +InvalidParameter=En ugyldig parameter blev angivet p kommandolinjen:%n%n%1 +SetupAlreadyRunning=Installationsprogrammet krer allerede. +WindowsVersionNotSupported=Programmet understtter ikke den version af Windows, som denne computer krer. +WindowsServicePackRequired=Programmet krver %1 med Service Pack %2 eller senere. +NotOnThisPlatform=Programmet kan ikke anvendes p %1. +OnlyOnThisPlatform=Programmet kan kun anvendes p %1. +OnlyOnTheseArchitectures=Programmet kan kun installeres p versioner af Windows der anvender disse processor-arkitekturer:%n%n%1 +WinVersionTooLowError=Programmet krver %1 version %2 eller senere. +WinVersionTooHighError=Programmet kan ikke installeres p %1 version %2 eller senere. +AdminPrivilegesRequired=Du skal vre logget p som administrator imens programmet installeres. +PowerUserPrivilegesRequired=Du skal vre logget p som administrator eller vre medlem af gruppen Superbrugere imens programmet installeres. +SetupAppRunningError=Installationsprogrammet har registreret at %1 krer.%n%nLuk venligst alle forekomster af programmet, og klik s OK for at fortstte, eller Annuller for at afbryde. +UninstallAppRunningError=Afinstallationsprogrammet har registreret at %1 krer.%n%nLuk venligst alle forekomster af programmet, og klik s OK for at fortstte, eller Annuller for at afbryde. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Vlg guidens installationsmde +PrivilegesRequiredOverrideInstruction=Vlg installationsmde +PrivilegesRequiredOverrideText1=%1 kan installeres for alle brugere (krver administrator-rettigheder), eller for dig alene. +PrivilegesRequiredOverrideText2=%1 kan installeres for dig alene, eller for alle brugere p computeren (sidstnvnte krver administrator-rettigheder). +PrivilegesRequiredOverrideAllUsers=Installer for &alle brugere +PrivilegesRequiredOverrideAllUsersRecommended=Installer for &alle brugere (anbefales) +PrivilegesRequiredOverrideCurrentUser=Installer for &mig alene +PrivilegesRequiredOverrideCurrentUserRecommended=Installer for &mig alene (anbefales) + +; *** Misc. errors +ErrorCreatingDir=Installationsprogrammet kan ikke oprette mappen "%1" +ErrorTooManyFilesInDir=Kan ikke oprette en fil i mappen "%1". Mappen indeholder for mange filer + +; *** Setup common messages +ExitSetupTitle=Afbryd installationen +ExitSetupMessage=Installationen er ikke fuldfrt. Programmet installeres ikke, hvis du afbryder nu.%n%nDu kan kre installationsprogrammet igen p et andet tidspunkt for at udfre installationen.%n%nSkal installationen afbrydes? +AboutSetupMenuItem=&Om installationsprogrammet... +AboutSetupTitle=Om installationsprogrammet +AboutSetupMessage=%1 version %2%n%3%n%n%1 hjemmeside:%n%4 +AboutSetupNote= +TranslatorNote=Danish translation maintained by Thomas Vedel (thomas@veco.dk). Parts by scootergrisen. + +; *** Buttons +ButtonBack=< &Tilbage +ButtonNext=N&ste > +ButtonInstall=&Installer +ButtonOK=&OK +ButtonCancel=&Annuller +ButtonYes=&Ja +ButtonYesToAll=Ja til a&lle +ButtonNo=&Nej +ButtonNoToAll=Nej t&il alle +ButtonFinish=&Frdig +ButtonBrowse=&Gennemse... +ButtonWizardBrowse=G&ennemse... +ButtonNewFolder=&Opret ny mappe + +; *** "Select Language" dialog messages +SelectLanguageTitle=Vlg installationssprog +SelectLanguageLabel=Vlg det sprog der skal vises under installationen. + +; *** Common wizard text +ClickNext=Klik p Nste for at fortstte, eller Annuller for at afbryde installationen. +BeveledLabel= +BrowseDialogTitle=Vlg mappe +BrowseDialogLabel=Vlg en mappe fra nedenstende liste og klik p OK. +NewFolderName=Ny mappe + +; *** "Welcome" wizard page +WelcomeLabel1=Velkommen til installationsguiden for [name] +WelcomeLabel2=Guiden installerer [name/ver] p computeren.%n%nDet anbefales at lukke alle andre programmer inden du fortstter. + +; *** "Password" wizard page +WizardPassword=Adgangskode +PasswordLabel1=Installationen er beskyttet med adgangskode. +PasswordLabel3=Indtast venligst adgangskoden og klik p Nste for at fortstte. Der skelnes mellem store og sm bogstaver. +PasswordEditLabel=&Adgangskode: +IncorrectPassword=Den indtastede kode er forkert. Prv venligst igen. + +; *** "License Agreement" wizard page +WizardLicense=Licensaftale +LicenseLabel=Ls venligst flgende vigtige oplysninger inden du fortstter. +LicenseLabel3=Ls venligst licensaftalen. Du skal acceptere betingelserne i aftalen for at fortstte installationen. +LicenseAccepted=Jeg &accepterer aftalen +LicenseNotAccepted=Jeg accepterer &ikke aftalen + +; *** "Information" wizard pages +WizardInfoBefore=Information +InfoBeforeLabel=Ls venligst flgende information inden du fortstter. +InfoBeforeClickLabel=Klik p Nste, nr du er klar til at fortstte installationen. +WizardInfoAfter=Information +InfoAfterLabel=Ls venligst flgende information inden du fortstter. +InfoAfterClickLabel=Klik p Nste, nr du er klar til at fortstte installationen. + +; *** "User Information" wizard page +WizardUserInfo=Brugerinformation +UserInfoDesc=Indtast venligst dine oplysninger. +UserInfoName=&Brugernavn: +UserInfoOrg=&Organisation: +UserInfoSerial=&Serienummer: +UserInfoNameRequired=Du skal indtaste et navn. + +; *** "Select Destination Directory" wizard page +WizardSelectDir=Vlg installationsmappe +SelectDirDesc=Hvor skal [name] installeres? +SelectDirLabel3=Installationsprogrammet installerer [name] i flgende mappe. +SelectDirBrowseLabel=Klik p Nste for at fortstte. Klik p Gennemse, hvis du vil vlge en anden mappe. +DiskSpaceGBLabel=Der skal vre mindst [gb] GB fri diskplads. +DiskSpaceMBLabel=Der skal vre mindst [mb] MB fri diskplads. +CannotInstallToNetworkDrive=Guiden kan ikke installere programmet p et netvrksdrev. +CannotInstallToUNCPath=Guiden kan ikke installere programmet til en UNC-sti. +InvalidPath=Du skal indtaste en komplet sti med drevbogstav, f.eks.:%n%nC:\Program%n%neller et UNC-stinavn i formatet:%n%n\\server\share +InvalidDrive=Drevet eller UNC-stien du valgte findes ikke, eller der er ikke adgang til det lige nu. Vlg venligst en anden placering. +DiskSpaceWarningTitle=Ikke nok ledig diskplads. +DiskSpaceWarning=Guiden krver mindst %1 KB ledig diskplads for at kunne installere programmet, men det valgte drev har kun %2 KB ledig diskplads.%n%nVil du alligevel fortstte installationen? +DirNameTooLong=Navnet p mappen eller stien er for langt. +InvalidDirName=Navnet p mappen er ikke tilladt. +BadDirName32=Mappenavne m ikke indeholde flgende tegn:%n%n%1 +DirExistsTitle=Mappen findes +DirExists=Mappen:%n%n%1%n%nfindes allerede. Vil du alligevel installere i denne mappe? +DirDoesntExistTitle=Mappen findes ikke. +DirDoesntExist=Mappen:%n%n%1%n%nfindes ikke. Vil du oprette mappen? + +; *** "Select Components" wizard page +WizardSelectComponents=Vlg Komponenter +SelectComponentsDesc=Hvilke komponenter skal installeres? +SelectComponentsLabel2=Vlg de komponenter der skal installeres, og fjern markering fra dem der ikke skal installeres. Klik s p Nste for at fortstte. +FullInstallation=Fuld installation +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Kompakt installation +CustomInstallation=Tilpasset installation +NoUninstallWarningTitle=Komponenterne er installeret +NoUninstallWarning=Installationsprogrammet har registreret at flgende komponenter allerede er installeret p computeren:%n%n%1%n%nKomponenterne bliver ikke afinstalleret hvis de fravlges.%n%nFortst alligevel? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=De nuvrende valg krver mindst [gb] GB ledig diskplads. +ComponentsDiskSpaceMBLabel=De nuvrende valg krver mindst [mb] MB ledig diskplads. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Vlg supplerende opgaver +SelectTasksDesc=Hvilke supplerende opgaver skal udfres? +SelectTasksLabel2=Vlg de supplerende opgaver du vil have guiden til at udfre under installationen af [name] og klik p Nste. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Vlg mappe i menuen Start +SelectStartMenuFolderDesc=Hvor skal installationsprogrammet oprette genveje til programmet? +SelectStartMenuFolderLabel3=Installationsprogrammet opretter genveje til programmet i flgende mappe i menuen Start. +SelectStartMenuFolderBrowseLabel=Klik p Nste for at fortstte. Klik p Gennemse, hvis du vil vlge en anden mappe. +MustEnterGroupName=Du skal indtaste et mappenavn. +GroupNameTooLong=Mappens eller stiens navn er for langt. +InvalidGroupName=Mappenavnet er ugyldigt. +BadGroupName=Navnet p en programgruppe m ikke indeholde flgende tegn: %1. Angiv andet navn. +NoProgramGroupCheck2=Opret &ingen programgruppe i menuen Start + +; *** "Ready to Install" wizard page +WizardReady=Klar til at installere +ReadyLabel1=Installationsprogrammet er nu klar til at installere [name] p computeren. +ReadyLabel2a=Klik p Installer for at fortstte med installationen, eller klik p Tilbage hvis du vil se eller ndre indstillingerne. +ReadyLabel2b=Klik p Installer for at fortstte med installationen. +ReadyMemoUserInfo=Brugerinformation: +ReadyMemoDir=Installationsmappe: +ReadyMemoType=Installationstype: +ReadyMemoComponents=Valgte komponenter: +ReadyMemoGroup=Mappe i menuen Start: +ReadyMemoTasks=Valgte supplerende opgaver: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Downloader yderligere filer... +ButtonStopDownload=&Stop download +StopDownload=Er du sikker p at du nsker at afbryde download? +ErrorDownloadAborted=Download afbrudt +ErrorDownloadFailed=Fejl under download: %1 %2 +ErrorDownloadSizeFailed=Fejl ved lsning af filstrrelse: %1 %2 +ErrorFileHash1=Fejl i hash: %1 +ErrorFileHash2=Fejl i fil hash vrdi: forventet %1, fundet %2 +ErrorProgress=Fejl i trin: %1 af %2 +ErrorFileSize=Fejl i filstrrelse: forventet %1, fundet %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Klargring af installationen +PreparingDesc=Installationsprogrammet gr klar til at installere [name] p din computer. +PreviousInstallNotCompleted=Installation eller afinstallation af et program er ikke afsluttet. Du skal genstarte computeren for at afslutte den foregende installation.%n%nNr computeren er genstartet skal du kre installationsprogrammet til [name] igen. +CannotContinue=Installationsprogrammet kan ikke fortstte. Klik venligst p Fortryd for at afslutte. +ApplicationsFound=Flgende programmer bruger filer som skal opdateres. Det anbefales at du giver installationsprogrammet tilladelse til automatisk at lukke programmerne. +ApplicationsFound2=Flgende programmer bruger filer som skal opdateres. Det anbefales at du giver installationsprogrammet tilladelse til automatisk at lukke programmerne. Installationsguiden vil forsge at genstarte programmerne nr installationen er fuldfrt. +CloseApplications=&Luk programmerne automatisk +DontCloseApplications=Luk &ikke programmerne +ErrorCloseApplications=Installationsprogrammet kunne ikke lukke alle programmerne automatisk. Det anbefales at du lukker alle programmer som bruger filer der skal opdateres, inden installationsprogrammet fortstter. +PrepareToInstallNeedsRestart=Installationsprogrammet er ndt til at genstarte computeren. Efter genstarten skal du kre installationsprogrammet igen for at frdiggre installation af [name].%n%nVil du at genstarte nu? + +; *** "Installing" wizard page +WizardInstalling=Installerer +InstallingLabel=Vent venligst mens installationsprogrammet installerer [name] p computeren. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Fuldfrer installation af [name] +FinishedLabelNoIcons=Installationsguiden har fuldfrt installation af [name] p computeren. +FinishedLabel=Installationsguiden har fuldfrt installation af [name] p computeren. Programmet kan startes ved at vlge de oprettede ikoner. +ClickFinish=Klik p Frdig for at afslutte installationsprogrammet. +FinishedRestartLabel=Computeren skal genstartes for at fuldfre installation af [name]. Vil du genstarte computeren nu? +FinishedRestartMessage=Computeren skal genstartes for at fuldfre installation af [name].%n%nVil du genstarte computeren nu? +ShowReadmeCheck=Ja, jeg vil gerne se README-filen +YesRadio=&Ja, genstart computeren nu +NoRadio=&Nej, jeg genstarter computeren senere +; used for example as 'Run MyProg.exe' +RunEntryExec=Kr %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Vis %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Installationsprogrammet skal bruge den nste disk +SelectDiskLabel2=Indst disk %1 og klik p OK.%n%nHvis filerne findes i en anden mappe end den viste, s indtast stien eller klik Gennemse. +PathLabel=&Sti: +FileNotInDir2=Filen "%1" blev ikke fundet i "%2". Indst venligst den korrekte disk, eller vlg en anden mappe. +SelectDirectoryLabel=Angiv venligst placeringen af den nste disk. + +; *** Installation phase messages +SetupAborted=Installationen blev ikke fuldfrt.%n%nRet venligst de fundne problemer og kr installationsprogrammet igen. +AbortRetryIgnoreSelectAction=Vlg nsket handling +AbortRetryIgnoreRetry=&Forsg igen +AbortRetryIgnoreIgnore=&Ignorer fejlen og fortst +AbortRetryIgnoreCancel=Afbryd installationen + +; *** Installation status messages +StatusClosingApplications=Lukker programmer... +StatusCreateDirs=Opretter mapper... +StatusExtractFiles=Udpakker filer... +StatusCreateIcons=Opretter genveje... +StatusCreateIniEntries=Opretter poster i INI-filer... +StatusCreateRegistryEntries=Opretter poster i registreringsdatabasen... +StatusRegisterFiles=Registrerer filer... +StatusSavingUninstall=Gemmer information om afinstallation... +StatusRunProgram=Fuldfrer installation... +StatusRestartingApplications=Genstarter programmer... +StatusRollback=Fjerner ndringer... + +; *** Misc. errors +ErrorInternal2=Intern fejl: %1 +ErrorFunctionFailedNoCode=%1 fejlede +ErrorFunctionFailed=%1 fejlede; kode %2 +ErrorFunctionFailedWithMessage=%1 fejlede; kode %2.%n%3 +ErrorExecutingProgram=Kan ikke kre programfilen:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Fejl ved bning af ngle i registreringsdatabase:%n%1\%2 +ErrorRegCreateKey=Fejl ved oprettelse af ngle i registreringsdatabase:%n%1\%2 +ErrorRegWriteKey=Fejl ved skrivning til ngle i registreringsdatabase:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Fejl ved oprettelse af post i INI-filen "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Spring over denne fil (anbefales ikke) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorer fejlen og fortst (anbefales ikke) +SourceIsCorrupted=Kildefilen er beskadiget +SourceDoesntExist=Kildefilen "%1" findes ikke +ExistingFileReadOnly2=Den eksisterende fil er skrivebeskyttet og kan derfor ikke overskrives. +ExistingFileReadOnlyRetry=&Fjern skrivebeskyttelsen og forsg igen +ExistingFileReadOnlyKeepExisting=&Behold den eksisterende fil +ErrorReadingExistingDest=Der opstod en fejl ved lsning af den eksisterende fil: +FileExistsSelectAction=Vlg handling +FileExists2=Filen findes allerede. +FileExistsOverwriteExisting=&Overskriv den eksisterende fil +FileExistsKeepExisting=&Behold den eksiterende fil +FileExistsOverwriteOrKeepAll=&Gentag handlingen for de nste konflikter +ExistingFileNewerSelectAction=Vlg handling +ExistingFileNewer2=Den eksisterende fil er nyere end den som forsges installeret. +ExistingFileNewerOverwriteExisting=&Overskriv den eksisterende fil +ExistingFileNewerKeepExisting=&Behold den eksisterende fil (anbefales) +ExistingFileNewerOverwriteOrKeepAll=&Gentag handlingen for de nste konflikter +ErrorChangingAttr=Der opstod en fejl ved ndring af attributter for den eksisterende fil: +ErrorCreatingTemp=Der opstod en fejl ved oprettelse af en fil i mappen: +ErrorReadingSource=Der opstod en fejl ved lsning af kildefilen: +ErrorCopying=Der opstod en fejl ved kopiering af en fil: +ErrorReplacingExistingFile=Der opstod en fejl ved forsg p at erstatte den eksisterende fil: +ErrorRestartReplace=Erstatning af fil ved genstart mislykkedes: +ErrorRenamingTemp=Der opstod en fejl ved forsg p at omdbe en fil i installationsmappen: +ErrorRegisterServer=Kan ikke registrere DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 fejlede med exit kode %1 +ErrorRegisterTypeLib=Kan ikke registrere typebiblioteket: %1 + +; *** Uninstall display name markings +UninstallDisplayNameMark=%1 (%2) +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=Alle brugere +UninstallDisplayNameMarkCurrentUser=Nuvrende bruger + +; *** Post-installation errors +ErrorOpeningReadme=Der opstod en fejl ved forsg p at bne README-filen. +ErrorRestartingComputer=Installationsprogrammet kunne ikke genstarte computeren. Genstart venligst computeren manuelt. + +; *** Uninstaller messages +UninstallNotFound=Filen "%1" findes ikke. Kan ikke afinstalleres. +UninstallOpenError=Filen "%1" kunne ikke bnes. Kan ikke afinstalleres +UninstallUnsupportedVer=Afinstallations-logfilen "%1" er i et format der ikke genkendes af denne version af afinstallations-guiden. Afinstallationen afbrydes +UninstallUnknownEntry=Der er en ukendt post (%1) i afinstallerings-logfilen. +ConfirmUninstall=Er du sikker p at du vil fjerne %1 og alle tilhrende komponenter? +UninstallOnlyOnWin64=Denne installation kan kun afinstalleres p 64-bit Windows-versioner +OnlyAdminCanUninstall=Programmet kan kun afinstalleres af en bruger med administratorrettigheder. +UninstallStatusLabel=Vent venligst imens %1 afinstalleres fra computeren. +UninstalledAll=%1 er nu fjernet fra computeren. +UninstalledMost=%1 afinstallation er fuldfrt.%n%nNogle elementer kunne ikke fjernes. De kan fjernes manuelt. +UninstalledAndNeedsRestart=Computeren skal genstartes for at fuldfre afinstallation af %1.%n%nVil du genstarte nu? +UninstallDataCorrupted=Filen "%1" er beskadiget. Kan ikke afinstallere + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Fjern delt fil? +ConfirmDeleteSharedFile2=Systemet indikerer at flgende delte fil ikke lngere er i brug. Skal den/de delte fil(er) fjernes af guiden?%n%nHvis du er usikker s vlg Nej. Beholdes filen p maskinen, vil den ikke gre nogen skade, men hvis filen fjernes, selv om den stadig anvendes, bliver de programmer, der anvender filen, ustabile +SharedFileNameLabel=Filnavn: +SharedFileLocationLabel=Placering: +WizardUninstalling=Status for afinstallation +StatusUninstalling=Afinstallerer %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Installerer %1. +ShutdownBlockReasonUninstallingApp=Afinstallerer %1. + +[CustomMessages] +NameAndVersion=%1 version %2 +AdditionalIcons=Supplerende ikoner: +CreateDesktopIcon=Opret ikon p skrive&bordet +CreateQuickLaunchIcon=Opret &hurtigstart-ikon +ProgramOnTheWeb=%1 p internettet +UninstallProgram=Afinstaller (fjern) %1 +LaunchProgram=&Start %1 +AssocFileExtension=Sammen&kd %1 med filtypen %2 +AssocingFileExtension=Sammenkder %1 med filtypen %2... +AutoStartProgramGroupDescription=Start: +AutoStartProgram=Start automatisk %1 +AddonHostProgramNotFound=%1 blev ikke fundet i den valgte mappe.%n%nVil du alligevel fortstte? diff --git a/Files/Languages/Dutch.isl b/Files/Languages/Dutch.isl new file mode 100644 index 00000000..09d2dee1 --- /dev/null +++ b/Files/Languages/Dutch.isl @@ -0,0 +1,359 @@ +; *** Inno Setup version 6.1.0+ Dutch messages *** +; +; This file is based on user-contributed translations by various authors +; +; Maintained by Martijn Laan (mlaan@innosetup.nl) + +[LangOptions] +LanguageName=Nederlands +LanguageID=$0413 +LanguageCodePage=1252 + +[Messages] + +; *** Application titles +SetupAppTitle=Setup +SetupWindowTitle=Setup - %1 +UninstallAppTitle=Verwijderen +UninstallAppFullTitle=%1 verwijderen + +; *** Misc. common +InformationTitle=Informatie +ConfirmTitle=Bevestigen +ErrorTitle=Fout + +; *** SetupLdr messages +SetupLdrStartupMessage=Hiermee wordt %1 geïnstalleerd. Wilt u doorgaan? +LdrCannotCreateTemp=Kan geen tijdelijk bestand maken. Setup wordt afgesloten +LdrCannotExecTemp=Kan een bestand in de tijdelijke map niet uitvoeren. Setup wordt afgesloten + +; *** Startup error messages +LastErrorMessage=%1.%n%nFout %2: %3 +SetupFileMissing=Het bestand %1 ontbreekt in de installatiemap. Corrigeer dit probleem of gebruik een andere kopie van het programma. +SetupFileCorrupt=De installatiebestanden zijn beschadigd. Gebruik een andere kopie van het programma. +SetupFileCorruptOrWrongVer=De installatiebestanden zijn beschadigd, of zijn niet compatibel met deze versie van Setup. Corrigeer dit probleem of gebruik een andere kopie van het programma. +InvalidParameter=Er werd een ongeldige schakeloptie opgegeven op de opdrachtregel:%n%n%1 +SetupAlreadyRunning=Setup is al gestart. +WindowsVersionNotSupported=Dit programma ondersteunt de versie van Windows die u gebruikt niet. +WindowsServicePackRequired=Dit programma vereist %1 Service Pack %2 of hoger. +NotOnThisPlatform=Dit programma kan niet worden uitgevoerd onder %1. +OnlyOnThisPlatform=Dit programma moet worden uitgevoerd onder %1. +OnlyOnTheseArchitectures=Dit programma kan alleen geïnstalleerd worden onder versies van Windows ontworpen voor de volgende processor architecturen:%n%n%1 +WinVersionTooLowError=Dit programma vereist %1 versie %2 of hoger. +WinVersionTooHighError=Dit programma kan niet worden geïnstalleerd onder %1 versie %2 of hoger. +AdminPrivilegesRequired=U moet aangemeld zijn als een systeembeheerder om dit programma te kunnen installeren. +PowerUserPrivilegesRequired=U moet ingelogd zijn als systeembeheerder of als gebruiker met systeembeheerders rechten om dit programma te kunnen installeren. +SetupAppRunningError=Setup heeft vastgesteld dat %1 op dit moment actief is.%n%nSluit alle vensters hiervan, en klik daarna op OK om verder te gaan, of op Annuleren om Setup af te sluiten. +UninstallAppRunningError=Het verwijderprogramma heeft vastgesteld dat %1 op dit moment actief is.%n%nSluit alle vensters hiervan, en klik daarna op OK om verder te gaan, of op Annuleren om het verwijderen af te breken. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Selecteer installatie modus voor Setup +PrivilegesRequiredOverrideInstruction=Selecteer installatie modus +PrivilegesRequiredOverrideText1=%1 kan geïnstalleerd worden voor alle gebruikers (vereist aanmelding als een systeembeheerder), of voor u alleen. +PrivilegesRequiredOverrideText2=%1 kan geïnstalleerd worden voor u alleen, of voor alle gebruikers (vereist aanmelding als een systeembeheerder). +PrivilegesRequiredOverrideAllUsers=Installeer voor &alle gebruikers +PrivilegesRequiredOverrideAllUsersRecommended=Installeer voor &alle gebruikers (aanbevolen) +PrivilegesRequiredOverrideCurrentUser=Installeer voor &mij alleen +PrivilegesRequiredOverrideCurrentUserRecommended=Installeer voor &mij alleen (aanbevolen) + +; *** Misc. errors +ErrorCreatingDir=Setup kan de map "%1" niet maken +ErrorTooManyFilesInDir=Kan geen bestand maken in de map "%1" omdat deze te veel bestanden bevat + +; *** Setup common messages +ExitSetupTitle=Setup afsluiten +ExitSetupMessage=Setup is niet voltooid. Als u nu afsluit, wordt het programma niet geïnstalleerd.%n%nU kunt Setup later opnieuw uitvoeren om de installatie te voltooien.%n%nSetup afsluiten? +AboutSetupMenuItem=&Over Setup... +AboutSetupTitle=Over Setup +AboutSetupMessage=%1 versie %2%n%3%n%n%1-homepage:%n%4 +AboutSetupNote= +TranslatorNote=Dutch translation maintained by Martijn Laan (mlaan@jrsoftware.org) + +; *** Buttons +ButtonBack=< Vo&rige +ButtonNext=&Volgende > +ButtonInstall=&Installeren +ButtonOK=OK +ButtonCancel=Annuleren +ButtonYes=&Ja +ButtonYesToAll=Ja op &alles +ButtonNo=&Nee +ButtonNoToAll=N&ee op alles +ButtonFinish=&Voltooien +ButtonBrowse=&Bladeren... +ButtonWizardBrowse=B&laderen... +ButtonNewFolder=&Nieuwe map maken + +; *** "Select Language" dialog messages +SelectLanguageTitle=Selecteer taal voor Setup +SelectLanguageLabel=Selecteer de taal die Setup gebruikt tijdens de installatie. + +; *** Common wizard text +ClickNext=Klik op Volgende om verder te gaan of op Annuleren om Setup af te sluiten. +BeveledLabel= +BrowseDialogTitle=Map Selecteren +BrowseDialogLabel=Selecteer een map in onderstaande lijst en klik daarna op OK. +NewFolderName=Nieuwe map + +; *** "Welcome" wizard page +WelcomeLabel1=Welkom bij het installatieprogramma van [name]. +WelcomeLabel2=Hiermee wordt [name/ver] geïnstalleerd op deze computer.%n%nU wordt aanbevolen alle actieve programma's af te sluiten voordat u verder gaat. + +; *** "Password" wizard page +WizardPassword=Wachtwoord +PasswordLabel1=Deze installatie is beveiligd met een wachtwoord. +PasswordLabel3=Voer het wachtwoord in en klik op Volgende om verder te gaan. Wachtwoorden zijn hoofdlettergevoelig. +PasswordEditLabel=&Wachtwoord: +IncorrectPassword=Het ingevoerde wachtwoord is niet correct. Probeer het opnieuw. + +; *** "License Agreement" wizard page +WizardLicense=Licentieovereenkomst +LicenseLabel=Lees de volgende belangrijke informatie voordat u verder gaat. +LicenseLabel3=Lees de volgende licentieovereenkomst. Gebruik de schuifbalk of druk op de knop Page Down om de rest van de overeenkomst te zien. +LicenseAccepted=Ik &accepteer de licentieovereenkomst +LicenseNotAccepted=Ik accepteer de licentieovereenkomst &niet + +; *** "Information" wizard pages +WizardInfoBefore=Informatie +InfoBeforeLabel=Lees de volgende belangrijke informatie voordat u verder gaat. +InfoBeforeClickLabel=Klik op Volgende als u gereed bent om verder te gaan met Setup. +WizardInfoAfter=Informatie +InfoAfterLabel=Lees de volgende belangrijke informatie voordat u verder gaat. +InfoAfterClickLabel=Klik op Volgende als u gereed bent om verder te gaan met Setup. + +; *** "User Information" wizard page +WizardUserInfo=Gebruikersinformatie +UserInfoDesc=Vul hier uw informatie in. +UserInfoName=&Gebruikersnaam: +UserInfoOrg=&Organisatie: +UserInfoSerial=&Serienummer: +UserInfoNameRequired=U moet een naam invullen. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Kies de doelmap +SelectDirDesc=Waar moet [name] geïnstalleerd worden? +SelectDirLabel3=Setup zal [name] in de volgende map installeren. +SelectDirBrowseLabel=Klik op Volgende om door te gaan. Klik op Bladeren om een andere map te kiezen. +DiskSpaceGBLabel=Er is ten minste [gb] GB vrije schijfruimte vereist. +DiskSpaceMBLabel=Er is ten minste [mb] MB vrije schijfruimte vereist. +CannotInstallToNetworkDrive=Setup kan niet installeren naar een netwerkstation. +CannotInstallToUNCPath=Setup kan niet installeren naar een UNC-pad. +InvalidPath=U moet een volledig pad met stationsletter invoeren; bijvoorbeeld:%nC:\APP%n%nof een UNC-pad zoals:%n%n\\server\share +InvalidDrive=Het geselecteerde station bestaat niet. Kies een ander station. +DiskSpaceWarningTitle=Onvoldoende schijfruimte +DiskSpaceWarning=Setup vereist ten minste %1 kB vrije schijfruimte voor het installeren, maar het geselecteerde station heeft slechts %2 kB beschikbaar.%n%nWilt u toch doorgaan? +DirNameTooLong=De mapnaam of het pad is te lang. +InvalidDirName=De mapnaam is ongeldig. +BadDirName32=Mapnamen mogen geen van de volgende tekens bevatten:%n%n%1 +DirExistsTitle=Map bestaat al +DirExists=De map:%n%n%1%n%nbestaat al. Wilt u toch naar die map installeren? +DirDoesntExistTitle=Map bestaat niet +DirDoesntExist=De map:%n%n%1%n%nbestaat niet. Wilt u de map aanmaken? + +; *** "Select Components" wizard page +WizardSelectComponents=Selecteer componenten +SelectComponentsDesc=Welke componenten moeten geïnstalleerd worden? +SelectComponentsLabel2=Selecteer de componenten die u wilt installeren. Klik op Volgende als u klaar bent om verder te gaan. +FullInstallation=Volledige installatie +CompactInstallation=Compacte installatie +CustomInstallation=Aangepaste installatie +NoUninstallWarningTitle=Component bestaat +NoUninstallWarning=Setup heeft gedetecteerd dat de volgende componenten al geïnstalleerd zijn op uw computer:%n%n%1%n%nAls u de selectie van deze componenten ongedaan maakt, worden ze niet verwijderd.%n%nWilt u toch doorgaan? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=De huidige selectie vereist ten minste [gb] GB vrije schijfruimte. +ComponentsDiskSpaceMBLabel=De huidige selectie vereist ten minste [mb] MB vrije schijfruimte. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Selecteer extra taken +SelectTasksDesc=Welke extra taken moeten uitgevoerd worden? +SelectTasksLabel2=Selecteer de extra taken die u door Setup wilt laten uitvoeren bij het installeren van [name], en klik vervolgens op Volgende. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Selecteer menu Start map +SelectStartMenuFolderDesc=Waar moeten de snelkoppelingen van het programma geplaatst worden? +SelectStartMenuFolderLabel3=Setup plaatst de snelkoppelingen van het programma in de volgende menu Start map. +SelectStartMenuFolderBrowseLabel=Klik op Volgende om door te gaan. Klik op Bladeren om een andere map te kiezen. +MustEnterGroupName=U moet een mapnaam invoeren. +GroupNameTooLong=De mapnaam of het pad is te lang. +InvalidGroupName=De mapnaam is ongeldig. +BadGroupName=De mapnaam mag geen van de volgende tekens bevatten:%n%n%1 +NoProgramGroupCheck2=&Geen menu Start map maken + +; *** "Ready to Install" wizard page +WizardReady=Het voorbereiden van de installatie is gereed +ReadyLabel1=Setup is nu gereed om te beginnen met het installeren van [name] op deze computer. +ReadyLabel2a=Klik op Installeren om verder te gaan met installeren, of klik op Vorige als u instellingen wilt terugzien of veranderen. +ReadyLabel2b=Klik op Installeren om verder te gaan met installeren. +ReadyMemoUserInfo=Gebruikersinformatie: +ReadyMemoDir=Doelmap: +ReadyMemoType=Installatietype: +ReadyMemoComponents=Geselecteerde componenten: +ReadyMemoGroup=Menu Start map: +ReadyMemoTasks=Extra taken: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Bezig met het downloaden van extra bestanden... +ButtonStopDownload=&Stop download +StopDownload=Weet u zeker dat u de download wilt stoppen? +ErrorDownloadAborted=Download afgebroken +ErrorDownloadFailed=Download mislukt: %1 %2 +ErrorDownloadSizeFailed=Ophalen grootte mislukt: %1 %2 +ErrorFileHash1=Bestand hashing mislukt: %1 +ErrorFileHash2=Ongeldige bestandshash: %1 verwacht, %2 gevonden +ErrorProgress=Ongeldige voortgang: %1 van %2 +ErrorFileSize=Ongeldige bestandsgrootte: %1 verwacht, %2 gevonden + +; *** "Preparing to Install" wizard page +WizardPreparing=Bezig met het voorbereiden van de installatie +PreparingDesc=Setup is bezig met het voorbereiden van de installatie van [name]. +PreviousInstallNotCompleted=De installatie/verwijdering van een vorig programma is niet voltooid. U moet uw computer opnieuw opstarten om die installatie te voltooien.%n%nStart Setup nogmaals nadat uw computer opnieuw is opgestart om de installatie van [name] te voltooien. +CannotContinue=Setup kan niet doorgaan. Klik op annuleren om af te sluiten. +ApplicationsFound=De volgende programma's gebruiken bestanden die moeten worden bijgewerkt door Setup. U wordt aanbevolen Setup toe te staan om automatisch deze programma's af te sluiten. +ApplicationsFound2=De volgende programma's gebruiken bestanden die moeten worden bijgewerkt door Setup. U wordt aanbevolen Setup toe te staan om automatisch deze programma's af te sluiten. Nadat de installatie is voltooid zal Setup proberen de applicaties opnieuw op te starten. +CloseApplications=&Programma's automatisch afsluiten +DontCloseApplications=Programma's &niet afsluiten +ErrorCloseApplications=Setup kon niet alle programma's automatisch afsluiten. U wordt aanbevolen alle programma's die bestanden gebruiken die moeten worden bijgewerkt door Setup af te sluiten voordat u verder gaat. +PrepareToInstallNeedsRestart=Setup moet uw computer opnieuw opstarten. Start Setup nogmaals nadat uw computer opnieuw is opgestart om de installatie van [name] te voltooien.%n%nWilt u nu opnieuw opstarten? + +; *** "Installing" wizard page +WizardInstalling=Bezig met installeren +InstallingLabel=Setup installeert [name] op uw computer. Een ogenblik geduld... + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Setup heeft het installeren van [name] op deze computer voltooid. +FinishedLabelNoIcons=Setup heeft het installeren van [name] op deze computer voltooid. +FinishedLabel=Setup heeft het installeren van [name] op deze computer voltooid. U kunt het programma uitvoeren met de geïnstalleerde snelkoppelingen. +ClickFinish=Klik op Voltooien om Setup te beëindigen. +FinishedRestartLabel=Setup moet de computer opnieuw opstarten om de installatie van [name] te voltooien. Wilt u nu opnieuw opstarten? +FinishedRestartMessage=Setup moet uw computer opnieuw opstarten om de installatie van [name] te voltooien.%n%nWilt u nu opnieuw opstarten? +ShowReadmeCheck=Ja, ik wil het bestand Leesmij zien +YesRadio=&Ja, start de computer nu opnieuw op +NoRadio=&Nee, ik start de computer later opnieuw op +RunEntryExec=Start %1 +RunEntryShellExec=Bekijk %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Setup heeft de volgende diskette nodig +SelectDiskLabel2=Voer diskette %1 in en klik op OK.%n%nAls de bestanden op deze diskette in een andere map gevonden kunnen worden dan die hieronder wordt getoond, voer dan het juiste pad in of klik op Bladeren. +PathLabel=&Pad: +FileNotInDir2=Kan het bestand "%1" niet vinden in "%2". Voer de juiste diskette in of kies een andere map. +SelectDirectoryLabel=Geef de locatie van de volgende diskette. + +; *** Installation phase messages +SetupAborted=Setup is niet voltooid.%n%nCorrigeer het probleem en voer Setup opnieuw uit. +AbortRetryIgnoreSelectAction=Selecteer actie +AbortRetryIgnoreRetry=&Probeer opnieuw +AbortRetryIgnoreIgnore=&Negeer de fout en ga door +AbortRetryIgnoreCancel=Breek installatie af + +; *** Installation status messages +StatusClosingApplications=Programma's afsluiten... +StatusCreateDirs=Mappen maken... +StatusExtractFiles=Bestanden uitpakken... +StatusCreateIcons=Snelkoppelingen maken... +StatusCreateIniEntries=INI-gegevens instellen... +StatusCreateRegistryEntries=Registergegevens instellen... +StatusRegisterFiles=Bestanden registreren... +StatusSavingUninstall=Verwijderingsinformatie opslaan... +StatusRunProgram=Installatie voltooien... +StatusRestartingApplications=Programma's opnieuw starten... +StatusRollback=Veranderingen ongedaan maken... + +; *** Misc. errors +ErrorInternal2=Interne fout: %1 +ErrorFunctionFailedNoCode=%1 mislukt +ErrorFunctionFailed=%1 mislukt; code %2 +ErrorFunctionFailedWithMessage=%1 mislukt; code %2.%n%3 +ErrorExecutingProgram=Kan bestand niet uitvoeren:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Fout bij het openen van registersleutel:%n%1\%2 +ErrorRegCreateKey=Fout bij het maken van registersleutel:%n%1\%2 +ErrorRegWriteKey=Fout bij het schrijven naar registersleutel:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Fout bij het maken van een INI-instelling in bestand "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Sla dit bestand over (niet aanbevolen) +FileAbortRetryIgnoreIgnoreNotRecommended=&Negeer de fout en ga door (niet aanbevolen) +SourceIsCorrupted=Het bronbestand is beschadigd +SourceDoesntExist=Het bronbestand "%1" bestaat niet +ExistingFileReadOnly2=Het bestaande bestand kon niet vervangen worden omdat het een alleen-lezen markering heeft. +ExistingFileReadOnlyRetry=&Verwijder de alleen-lezen markering en probeer het opnieuw +ExistingFileReadOnlyKeepExisting=&Behoud het bestaande bestand +ErrorReadingExistingDest=Er is een fout opgetreden bij het lezen van het bestaande bestand: +FileExistsSelectAction=Selecteer actie +FileExists2=Het bestand bestaat al. +FileExistsOverwriteExisting=&Overschrijf het bestaande bestand +FileExistsKeepExisting=&Behoud het bestaande bestand +FileExistsOverwriteOrKeepAll=&Dit voor de volgende conflicten uitvoeren +ExistingFileNewerSelectAction=Selecteer actie +ExistingFileNewer2=Het bestaande bestand is nieuwer dan het bestand dat Setup probeert te installeren. +ExistingFileNewerOverwriteExisting=&Overschrijf het bestaande bestand +ExistingFileNewerKeepExisting=&Behoud het bestaande bestand (aanbevolen) +ExistingFileNewerOverwriteOrKeepAll=&Dit voor de volgende conflicten uitvoeren +ErrorChangingAttr=Er is een fout opgetreden bij het wijzigen van de kenmerken van het bestaande bestand: +ErrorCreatingTemp=Er is een fout opgetreden bij het maken van een bestand in de doelmap: +ErrorReadingSource=Er is een fout opgetreden bij het lezen van het bronbestand: +ErrorCopying=Er is een fout opgetreden bij het kopiëren van een bestand: +ErrorReplacingExistingFile=Er is een fout opgetreden bij het vervangen van het bestaande bestand: +ErrorRestartReplace=Vervangen na opnieuw starten is mislukt: +ErrorRenamingTemp=Er is een fout opgetreden bij het hernoemen van een bestand in de doelmap: +ErrorRegisterServer=Kan de DLL/OCX niet registreren: %1 +ErrorRegSvr32Failed=RegSvr32 mislukt met afsluitcode %1 +ErrorRegisterTypeLib=Kan de type library niet registreren: %1 + +; *** Uninstall display name markings +UninstallDisplayNameMark=%1 (%2) +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=Alle gebruikers +UninstallDisplayNameMarkCurrentUser=Huidige gebruiker + +; *** Post-installation errors +ErrorOpeningReadme=Er is een fout opgetreden bij het openen van het Leesmij-bestand. +ErrorRestartingComputer=Setup kan de computer niet opnieuw opstarten. Doe dit handmatig. + +; *** Uninstaller messages +UninstallNotFound=Bestand "%1" bestaat niet. Kan het programma niet verwijderen. +UninstallUnsupportedVer=Het installatie-logbestand "%1" heeft een formaat dat niet herkend wordt door deze versie van het verwijderprogramma. Kan het programma niet verwijderen +UninstallUnknownEntry=Er is een onbekend gegeven (%1) aangetroffen in het installatie-logbestand +ConfirmUninstall=Weet u zeker dat u %1 en alle bijbehorende componenten wilt verwijderen? +UninstallOnlyOnWin64=Deze installatie kan alleen worden verwijderd onder 64-bit Windows. +OnlyAdminCanUninstall=Deze installatie kan alleen worden verwijderd door een gebruiker met administratieve rechten. +UninstallStatusLabel=%1 wordt verwijderd van uw computer. Een ogenblik geduld. +UninstallOpenError=Bestand "%1" kon niet worden geopend. Kan het verwijderen niet voltooien. +UninstalledAll=%1 is met succes van deze computer verwijderd. +UninstalledMost=Het verwijderen van %1 is voltooid.%n%nEnkele elementen konden niet verwijderd worden. Deze kunnen handmatig verwijderd worden. +UninstalledAndNeedsRestart=Om het verwijderen van %1 te voltooien, moet uw computer opnieuw worden opgestart.%n%nWilt u nu opnieuw opstarten? +UninstallDataCorrupted="%1" bestand is beschadigd. Kan verwijderen niet voltooien + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Gedeeld bestand verwijderen? +ConfirmDeleteSharedFile2=Het systeem geeft aan dat het volgende gedeelde bestand niet langer gebruikt wordt door enig programma. Wilt u dat dit gedeelde bestand verwijderd wordt?%n%nAls dit bestand toch nog gebruikt wordt door een programma en het verwijderd wordt, werkt dat programma misschien niet meer correct. Als u het niet zeker weet, kies dan Nee. Bewaren van het bestand op dit systeem is niet schadelijk. +SharedFileNameLabel=Bestandsnaam: +SharedFileLocationLabel=Locatie: +WizardUninstalling=Verwijderingsstatus +StatusUninstalling=Verwijderen van %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Installeren van %1. +ShutdownBlockReasonUninstallingApp=Verwijderen van %1. + +[CustomMessages] + +NameAndVersion=%1 versie %2 +AdditionalIcons=Extra snelkoppelingen: +CreateDesktopIcon=Maak een snelkoppeling op het &bureaublad +CreateQuickLaunchIcon=Maak een snelkoppeling op de &Snel starten werkbalk +ProgramOnTheWeb=%1 op het Web +UninstallProgram=Verwijder %1 +LaunchProgram=&Start %1 +AssocFileExtension=&Koppel %1 aan de %2 bestandsextensie +AssocingFileExtension=Bezig met koppelen van %1 aan de %2 bestandsextensie... +AutoStartProgramGroupDescription=Opstarten: +AutoStartProgram=%1 automatisch starten +AddonHostProgramNotFound=%1 kon niet worden gevonden in de geselecteerde map.%n%nWilt u toch doorgaan? diff --git a/Files/Languages/Finnish.isl b/Files/Languages/Finnish.isl new file mode 100644 index 00000000..245c9a94 --- /dev/null +++ b/Files/Languages/Finnish.isl @@ -0,0 +1,359 @@ +; *** Inno Setup version 6.1.0+ Finnish messages *** +; +; Finnish translation by Antti Karttunen +; E-mail: antti.j.karttunen@iki.fi +; Last modification date: 2020-08-02 + +[LangOptions] +LanguageName=Suomi +LanguageID=$040B +LanguageCodePage=1252 + +[Messages] + +; *** Application titles +SetupAppTitle=Asennus +SetupWindowTitle=%1 - Asennus +UninstallAppTitle=Asennuksen poisto +UninstallAppFullTitle=%1 - Asennuksen poisto + +; *** Misc. common +InformationTitle=Ilmoitus +ConfirmTitle=Varmistus +ErrorTitle=Virhe + +; *** SetupLdr messages +SetupLdrStartupMessage=Tll asennusohjelmalla asennetaan %1. Haluatko jatkaa? +LdrCannotCreateTemp=Vliaikaistiedostoa ei voitu luoda. Asennus keskeytettiin +LdrCannotExecTemp=Vliaikaisessa hakemistossa olevaa tiedostoa ei voitu suorittaa. Asennus keskeytettiin + +; *** Startup error messages +LastErrorMessage=%1.%n%nVirhe %2: %3 +SetupFileMissing=Tiedostoa %1 ei lydy asennushakemistosta. Korjaa ongelma tai hanki uusi kopio ohjelmasta. +SetupFileCorrupt=Asennustiedostot ovat vaurioituneet. Hanki uusi kopio ohjelmasta. +SetupFileCorruptOrWrongVer=Asennustiedostot ovat vaurioituneet tai ovat epyhteensopivia tmn Asennuksen version kanssa. Korjaa ongelma tai hanki uusi kopio ohjelmasta. +InvalidParameter=Virheellinen komentoriviparametri:%n%n%1 +SetupAlreadyRunning=Asennus on jo kynniss. +WindowsVersionNotSupported=Tm ohjelma ei tue kytss olevaa Windowsin versiota. +WindowsServicePackRequired=Tm ohjelma vaatii %1 Service Pack %2 -pivityksen tai myhemmn. +NotOnThisPlatform=Tm ohjelma ei toimi %1-kyttjrjestelmss. +OnlyOnThisPlatform=Tm ohjelma toimii vain %1-kyttjrjestelmss. +OnlyOnTheseArchitectures=Tm ohjelma voidaan asentaa vain niihin Windowsin versioihin, jotka on suunniteltu seuraaville prosessorityypeille:%n%n%1 +WinVersionTooLowError=Tm ohjelma vaatii version %2 tai myhemmn %1-kyttjrjestelmst. +WinVersionTooHighError=Tt ohjelmaa ei voi asentaa %1-kyttjrjestelmn versioon %2 tai myhempn. +AdminPrivilegesRequired=Sinun tytyy kirjautua sisn jrjestelmnvalvojana asentaaksesi tmn ohjelman. +PowerUserPrivilegesRequired=Sinun tytyy kirjautua sisn jrjestelmnvalvojana tai tehokyttjn asentaaksesi tmn ohjelman. +SetupAppRunningError=Asennus lysi kynniss olevan kopion ohjelmasta %1.%n%nSulje kaikki kynniss olevat kopiot ohjelmasta ja valitse OK jatkaaksesi, tai valitse Peruuta poistuaksesi. +UninstallAppRunningError=Asennuksen poisto lysi kynniss olevan kopion ohjelmasta %1.%n%nSulje kaikki kynniss olevat kopiot ohjelmasta ja valitse OK jatkaaksesi, tai valitse Peruuta poistuaksesi. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Valitse asennustapa +PrivilegesRequiredOverrideInstruction=Valitse, kenen kyttn ohjelma asennetaan +PrivilegesRequiredOverrideText1=%1 voidaan asentaa kaikille kyttjille (vaatii jrjestelmnvalvojan oikeudet) tai vain sinun kyttsi. +PrivilegesRequiredOverrideText2=%1 voidaan asentaa vain sinun kyttsi tai kaikille kyttjille (vaatii jrjestelmnvalvojan oikeudet). +PrivilegesRequiredOverrideAllUsers=Asenna &kaikille kyttjille +PrivilegesRequiredOverrideAllUsersRecommended=Asenna &kaikille kyttjille (suositus) +PrivilegesRequiredOverrideCurrentUser=Asenna vain &minun kyttni +PrivilegesRequiredOverrideCurrentUserRecommended=Asenna vain &minun kyttni (suositus) + +; *** Misc. errors +ErrorCreatingDir=Asennus ei voinut luoda hakemistoa "%1" +ErrorTooManyFilesInDir=Tiedoston luominen hakemistoon "%1" eponnistui, koska se sislt liian monta tiedostoa + +; *** Setup common messages +ExitSetupTitle=Poistu Asennuksesta +ExitSetupMessage=Asennus ei ole valmis. Jos lopetat nyt, ohjelmaa ei asenneta.%n%nVoit ajaa Asennuksen toiste asentaaksesi ohjelman.%n%nLopetetaanko Asennus? +AboutSetupMenuItem=&Tietoja Asennuksesta... +AboutSetupTitle=Tietoja Asennuksesta +AboutSetupMessage=%1 versio %2%n%3%n%n%1 -ohjelman kotisivu:%n%4 +AboutSetupNote= +TranslatorNote=Suomenkielinen knns: Antti Karttunen (antti.j.karttunen@iki.fi) + +; *** Buttons +ButtonBack=< &Takaisin +ButtonNext=&Seuraava > +ButtonInstall=&Asenna +ButtonOK=OK +ButtonCancel=Peruuta +ButtonYes=&Kyll +ButtonYesToAll=Kyll k&aikkiin +ButtonNo=&Ei +ButtonNoToAll=E&i kaikkiin +ButtonFinish=&Lopeta +ButtonBrowse=S&elaa... +ButtonWizardBrowse=S&elaa... +ButtonNewFolder=&Luo uusi kansio + +; *** "Select Language" dialog messages +SelectLanguageTitle=Valitse Asennuksen kieli +SelectLanguageLabel=Valitse asentamisen aikana kytettv kieli. + +; *** Common wizard text +ClickNext=Valitse Seuraava jatkaaksesi tai Peruuta poistuaksesi. +BeveledLabel= +BrowseDialogTitle=Selaa kansioita +BrowseDialogLabel=Valitse kansio allaolevasta listasta ja valitse sitten OK jatkaaksesi. +NewFolderName=Uusi kansio + +; *** "Welcome" wizard page +WelcomeLabel1=Tervetuloa [name] -asennusohjelmaan. +WelcomeLabel2=Tll asennusohjelmalla koneellesi asennetaan [name/ver]. %n%nOn suositeltavaa, ett suljet kaikki muut kynniss olevat sovellukset ennen jatkamista. Tm auttaa vlttmn ristiriitatilanteita asennuksen aikana. + +; *** "Password" wizard page +WizardPassword=Salasana +PasswordLabel1=Tm asennusohjelma on suojattu salasanalla. +PasswordLabel3=Anna salasana ja valitse sitten Seuraava jatkaaksesi.%n%nIsot ja pienet kirjaimet ovat eriarvoisia. +PasswordEditLabel=&Salasana: +IncorrectPassword=Antamasi salasana oli virheellinen. Anna salasana uudelleen. + +; *** "License Agreement" wizard page +WizardLicense=Kyttoikeussopimus +LicenseLabel=Lue seuraava trke tiedotus ennen kuin jatkat. +LicenseLabel3=Lue seuraava kyttoikeussopimus tarkasti. Sinun tytyy hyvksy sopimus, jos haluat jatkaa asentamista. +LicenseAccepted=&Hyvksyn sopimuksen +LicenseNotAccepted=&En hyvksy sopimusta + +; *** "Information" wizard pages +WizardInfoBefore=Tiedotus +InfoBeforeLabel=Lue seuraava trke tiedotus ennen kuin jatkat. +InfoBeforeClickLabel=Kun olet valmis jatkamaan asentamista, valitse Seuraava. +WizardInfoAfter=Tiedotus +InfoAfterLabel=Lue seuraava trke tiedotus ennen kuin jatkat. +InfoAfterClickLabel=Kun olet valmis jatkamaan asentamista, valitse Seuraava. + +; *** "Select Destination Directory" wizard page +WizardUserInfo=Kyttjtiedot +UserInfoDesc=Anna pyydetyt tiedot. +UserInfoName=Kyttjn &nimi: +UserInfoOrg=&Yritys: +UserInfoSerial=&Tunnuskoodi: +UserInfoNameRequired=Sinun tytyy antaa nimi. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Valitse kohdekansio +SelectDirDesc=Mihin [name] asennetaan? +SelectDirLabel3=[name] asennetaan thn kansioon. +SelectDirBrowseLabel=Valitse Seuraava jatkaaksesi. Jos haluat vaihtaa kansiota, valitse Selaa. +DiskSpaceGBLabel=Vapaata levytilaa tarvitaan vhintn [gb] Gt. +DiskSpaceMBLabel=Vapaata levytilaa tarvitaan vhintn [mb] Mt. +CannotInstallToNetworkDrive=Asennus ei voi asentaa ohjelmaa verkkoasemalle. +CannotInstallToUNCPath=Asennus ei voi asentaa ohjelmaa UNC-polun alle. +InvalidPath=Anna tydellinen polku levyaseman kirjaimen kanssa. Esimerkiksi %nC:\OHJELMA%n%ntai UNC-polku muodossa %n%n\\palvelin\resurssi +InvalidDrive=Valitsemaasi asemaa tai UNC-polkua ei ole olemassa tai sit ei voi kytt. Valitse toinen asema tai UNC-polku. +DiskSpaceWarningTitle=Ei tarpeeksi vapaata levytilaa +DiskSpaceWarning=Asennus vaatii vhintn %1 kt vapaata levytilaa, mutta valitulla levyasemalla on vain %2 kt vapaata levytilaa.%n%nHaluatko jatkaa tst huolimatta? +DirNameTooLong=Kansion nimi tai polku on liian pitk. +InvalidDirName=Virheellinen kansion nimi. +BadDirName32=Kansion nimess ei saa olla seuraavia merkkej:%n%n%1 +DirExistsTitle=Kansio on olemassa +DirExists=Kansio:%n%n%1%n%non jo olemassa. Haluatko kuitenkin suorittaa asennuksen thn kansioon? +DirDoesntExistTitle=Kansiota ei ole olemassa +DirDoesntExist=Kansiota%n%n%1%n%nei ole olemassa. Luodaanko kansio? + +; *** "Select Components" wizard page +WizardSelectComponents=Valitse asennettavat osat +SelectComponentsDesc=Mitk osat asennetaan? +SelectComponentsLabel2=Valitse ne osat, jotka haluat asentaa, ja poista niiden osien valinta, joita et halua asentaa. Valitse Seuraava, kun olet valmis. +FullInstallation=Normaali asennus +CompactInstallation=Suppea asennus +CustomInstallation=Mukautettu asennus +NoUninstallWarningTitle=Asennettuja osia lydettiin +NoUninstallWarning=Seuraavat osat on jo asennettu koneelle:%n%n%1%n%nNiden osien valinnan poistaminen ei poista niit koneelta.%n%nHaluatko jatkaa tst huolimatta? +ComponentSize1=%1 kt +ComponentSize2=%1 Mt +ComponentsDiskSpaceGBLabel=Nykyiset valinnat vaativat vhintn [gb] Gt levytilaa. +ComponentsDiskSpaceMBLabel=Nykyiset valinnat vaativat vhintn [mb] Mt levytilaa. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Valitse muut toiminnot +SelectTasksDesc=Mit muita toimintoja suoritetaan? +SelectTasksLabel2=Valitse muut toiminnot, jotka haluat Asennuksen suorittavan samalla kun [name] asennetaan. Valitse Seuraava, kun olet valmis. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Valitse Kynnist-valikon kansio +SelectStartMenuFolderDesc=Mihin ohjelman pikakuvakkeet sijoitetaan? +SelectStartMenuFolderLabel3=Ohjelman pikakuvakkeet luodaan thn Kynnist-valikon kansioon. +SelectStartMenuFolderBrowseLabel=Valitse Seuraava jatkaaksesi. Jos haluat vaihtaa kansiota, valitse Selaa. +MustEnterGroupName=Kansiolle pit antaa nimi. +GroupNameTooLong=Kansion nimi tai polku on liian pitk. +InvalidGroupName=Virheellinen kansion nimi. +BadGroupName=Kansion nimess ei saa olla seuraavia merkkej:%n%n%1 +NoProgramGroupCheck2=l luo k&ansiota Kynnist-valikkoon + +; *** "Ready to Install" wizard page +WizardReady=Valmiina asennukseen +ReadyLabel1=[name] on nyt valmis asennettavaksi. +ReadyLabel2a=Valitse Asenna jatkaaksesi asentamista tai valitse Takaisin, jos haluat tarkastella tekemisi asetuksia tai muuttaa niit. +ReadyLabel2b=Valitse Asenna jatkaaksesi asentamista. +ReadyMemoUserInfo=Kyttjtiedot: +ReadyMemoDir=Kohdekansio: +ReadyMemoType=Asennustyyppi: +ReadyMemoComponents=Asennettavaksi valitut osat: +ReadyMemoGroup=Kynnist-valikon kansio: +ReadyMemoTasks=Muut toiminnot: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Ladataan tarvittavia tiedostoja... +ButtonStopDownload=&Pysyt lataus +StopDownload=Oletko varma, ett haluat pysytt tiedostojen latauksen? +ErrorDownloadAborted=Tiedostojen lataaminen keskeytettiin +ErrorDownloadFailed=Tiedoston lataaminen eponnistui: %1 %2 +ErrorDownloadSizeFailed=Latauksen koon noutaminen eponnistui: %1 %2 +ErrorFileHash1=Tiedoston tiivisteen luominen eponnistui: %1 +ErrorFileHash2=Tiedoston tiiviste on virheellinen: odotettu %1, lydetty %2 +ErrorProgress=Virheellinen edistyminen: %1 / %2 +ErrorFileSize=Virheellinen tiedoston koko: odotettu %1, lydetty %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Valmistellaan asennusta +PreparingDesc=Valmistaudutaan asentamaan [name] koneellesi. +PreviousInstallNotCompleted=Edellisen ohjelman asennus tai asennuksen poisto ei ole valmis. Sinun tytyy kynnist kone uudelleen viimeistellksesi edellisen asennuksen.%n%nAja [name] -asennusohjelma uudestaan, kun olet kynnistnyt koneen uudelleen. +CannotContinue=Asennusta ei voida jatkaa. Valitse Peruuta poistuaksesi. +ApplicationsFound=Seuraavat sovellukset kyttvt tiedostoja, joita Asennuksen pit pivitt. On suositeltavaa, ett annat Asennuksen sulkea nm sovellukset automaattisesti. +ApplicationsFound2=Seuraavat sovellukset kyttvt tiedostoja, joita Asennuksen pit pivitt. On suositeltavaa, ett annat Asennuksen sulkea nm sovellukset automaattisesti. Valmistumisen jlkeen Asennus yritt uudelleenkynnist sovellukset. +CloseApplications=&Sulje sovellukset automaattisesti +DontCloseApplications=&l sulje sovelluksia +ErrorCloseApplications=Asennus ei pystynyt sulkemaan tarvittavia sovelluksia automaattisesti. On suositeltavaa, ett ennen jatkamista suljet sovellukset, jotka kyttvt asennuksen aikana pivitettvi tiedostoja. +PrepareToInstallNeedsRestart=Asennuksen tytyy kynnist tietokone uudelleen. Aja Asennus uudelleenkynnistyksen jlkeen, jotta [name] voidaan asentaa.%n%nHaluatko kynnist tietokoneen uudelleen nyt? + +; *** "Installing" wizard page +WizardInstalling=Asennus kynniss +InstallingLabel=Odota, kun [name] asennetaan koneellesi. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=[name] - Asennuksen viimeistely +FinishedLabelNoIcons=[name] on nyt asennettu koneellesi. +FinishedLabel=[name] on nyt asennettu. Sovellus voidaan kynnist valitsemalla jokin asennetuista kuvakkeista. +ClickFinish=Valitse Lopeta poistuaksesi Asennuksesta. +FinishedRestartLabel=Jotta [name] saataisiin asennettua loppuun, pit kone kynnist uudelleen. Haluatko kynnist koneen uudelleen nyt? +FinishedRestartMessage=Jotta [name] saataisiin asennettua loppuun, pit kone kynnist uudelleen.%n%nHaluatko kynnist koneen uudelleen nyt? +ShowReadmeCheck=Kyll, haluan nhd LUEMINUT-tiedoston +YesRadio=&Kyll, kynnist kone uudelleen +NoRadio=&Ei, kynnistn koneen uudelleen myhemmin +RunEntryExec=Kynnist %1 +RunEntryShellExec=Nyt %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Asennus tarvitsee seuraavan levykkeen +SelectDiskLabel2=Aseta levyke %1 asemaan ja valitse OK. %n%nJos joku toinen kansio sislt levykkeen tiedostot, anna oikea polku tai valitse Selaa. +PathLabel=&Polku: +FileNotInDir2=Tiedostoa "%1" ei lytynyt lhteest "%2". Aseta oikea levyke asemaan tai valitse toinen kansio. +SelectDirectoryLabel=Mrit seuraavan levykkeen sislln sijainti. + +; *** Installation phase messages +SetupAborted=Asennusta ei suoritettu loppuun.%n%nKorjaa ongelma ja suorita Asennus uudelleen. +AbortRetryIgnoreSelectAction=Valitse toiminto +AbortRetryIgnoreRetry=&Yrit uudelleen +AbortRetryIgnoreIgnore=&Jatka virheest huolimatta +AbortRetryIgnoreCancel=Peruuta asennus + +; *** Installation status messages +StatusClosingApplications=Suljetaan sovellukset... +StatusCreateDirs=Luodaan hakemistoja... +StatusExtractFiles=Puretaan tiedostoja... +StatusCreateIcons=Luodaan pikakuvakkeita... +StatusCreateIniEntries=Luodaan INI-merkintj... +StatusCreateRegistryEntries=Luodaan rekisterimerkintj... +StatusRegisterFiles=Rekisteridn tiedostoja... +StatusSavingUninstall=Tallennetaan Asennuksen poiston tietoja... +StatusRunProgram=Viimeistelln asennusta... +StatusRestartingApplications=Uudelleenkynnistetn sovellukset... +StatusRollback=Peruutetaan tehdyt muutokset... + +; *** Misc. errors +ErrorInternal2=Sisinen virhe: %1 +ErrorFunctionFailedNoCode=%1 eponnistui +ErrorFunctionFailed=%1 eponnistui; virhekoodi %2 +ErrorFunctionFailedWithMessage=%1 eponnistui; virhekoodi %2.%n%3 +ErrorExecutingProgram=Virhe suoritettaessa tiedostoa%n%1 + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Asennetaan %1. +ShutdownBlockReasonUninstallingApp=Poistetaan %1. + +; *** Registry errors +ErrorRegOpenKey=Virhe avattaessa rekisteriavainta%n%1\%2 +ErrorRegCreateKey=Virhe luotaessa rekisteriavainta%n%1\%2 +ErrorRegWriteKey=Virhe kirjoitettaessa rekisteriavaimeen%n%1\%2 + +; *** INI errors +ErrorIniEntry=Virhe luotaessa INI-merkint tiedostoon "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Ohita tm tiedosto (ei suositeltavaa) +FileAbortRetryIgnoreIgnoreNotRecommended=&Jatka virheest huolimatta (ei suositeltavaa) +SourceIsCorrupted=Lhdetiedosto on vaurioitunut +SourceDoesntExist=Lhdetiedostoa "%1" ei ole olemassa +ExistingFileReadOnly2=Nykyist tiedostoa ei voitu korvata, koska se on Vain luku -tiedosto. +ExistingFileReadOnlyRetry=&Poista Vain luku -asetus ja yrit uudelleen +ExistingFileReadOnlyKeepExisting=&Silyt nykyinen tiedosto +ErrorReadingExistingDest=Virhe luettaessa nykyist tiedostoa: +FileExistsSelectAction=Valitse toiminto +FileExists2=Tiedosto on jo olemassa. +FileExistsOverwriteExisting=Korvaa &olemassa oleva tiedosto +FileExistsKeepExisting=&Silyt olemassa oleva tiedosto +FileExistsOverwriteOrKeepAll=&Hoida muut vastaavat tilanteet samalla tavalla +ExistingFileNewerSelectAction=Valitse toiminto +ExistingFileNewer2=Olemassa oleva tiedosto on uudempi kuin Asennuksen sisltm tiedosto. +ExistingFileNewerOverwriteExisting=Korvaa &olemassa oleva tiedosto +ExistingFileNewerKeepExisting=&Silyt olemassa oleva tiedosto (suositeltavaa) +ExistingFileNewerOverwriteOrKeepAll=&Hoida muut vastaavat tilanteet samalla tavalla +ErrorChangingAttr=Virhe vaihdettaessa nykyisen tiedoston mritteit: +ErrorCreatingTemp=Virhe luotaessa tiedostoa kohdehakemistoon: +ErrorReadingSource=Virhe luettaessa lhdetiedostoa: +ErrorCopying=Virhe kopioitaessa tiedostoa: +ErrorReplacingExistingFile=Virhe korvattaessa nykyist tiedostoa: +ErrorRestartReplace=RestartReplace-komento eponnistui: +ErrorRenamingTemp=Virhe uudelleennimettess tiedostoa kohdehakemistossa: +ErrorRegisterServer=DLL/OCX -laajennuksen rekisterinti eponnistui: %1 +ErrorRegSvr32Failed=RegSvr32-toiminto eponnistui. Virhekoodi: %1 +ErrorRegisterTypeLib=Tyyppikirjaston rekisteriminen eponnistui: %1 + +; *** Uninstall display name markings +UninstallDisplayNameMark=%1 (%2) +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bittinen +UninstallDisplayNameMark64Bit=64-bittinen +UninstallDisplayNameMarkAllUsers=Kaikki kyttjt +UninstallDisplayNameMarkCurrentUser=Tmnhetkinen kyttj + +; *** Post-installation errors +ErrorOpeningReadme=Virhe avattaessa LUEMINUT-tiedostoa. +ErrorRestartingComputer=Koneen uudelleenkynnistminen ei onnistunut. Suorita uudelleenkynnistys itse. + +; *** Uninstaller messages +UninstallNotFound=Tiedostoa "%1" ei lytynyt. Asennuksen poisto ei onnistu. +UninstallOpenError=Tiedostoa "%1" ei voitu avata. Asennuksen poisto ei onnistu. +UninstallUnsupportedVer=Tm versio Asennuksen poisto-ohjelmasta ei pysty lukemaan lokitiedostoa "%1". Asennuksen poisto ei onnistu +UninstallUnknownEntry=Asennuksen poisto-ohjelman lokitiedostosta lytyi tuntematon merkint (%1) +ConfirmUninstall=Poistetaanko %1 ja kaikki sen osat? +UninstallOnlyOnWin64=Tm ohjelma voidaan poistaa vain 64-bittisest Windowsista ksin. +OnlyAdminCanUninstall=Tmn asennuksen poistaminen vaatii jrjestelmnvalvojan oikeudet. +UninstallStatusLabel=Odota, kun %1 poistetaan koneeltasi. +UninstalledAll=%1 poistettiin onnistuneesti. +UninstalledMost=%1 poistettiin koneelta.%n%nJoitakin osia ei voitu poistaa. Voit poistaa osat itse. +UninstalledAndNeedsRestart=Kone tytyy kynnist uudelleen, jotta %1 voidaan poistaa kokonaan.%n%nHaluatko kynnist koneen uudeelleen nyt? +UninstallDataCorrupted=Tiedosto "%1" on vaurioitunut. Asennuksen poisto ei onnistu. + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Poistetaanko jaettu tiedosto? +ConfirmDeleteSharedFile2=Jrjestelmn mukaan seuraava jaettu tiedosto ei ole en minkn muun sovelluksen kytss. Poistetaanko tiedosto?%n%nJos jotkut sovellukset kyttvt viel tt tiedostoa ja se poistetaan, ne eivt vlttmtt toimi en kunnolla. Jos olet epvarma, valitse Ei. Tiedoston jttminen koneelle ei aiheuta ongelmia. +SharedFileNameLabel=Tiedoston nimi: +SharedFileLocationLabel=Sijainti: +WizardUninstalling=Asennuksen poiston tila +StatusUninstalling=Poistetaan %1... + +[CustomMessages] + +NameAndVersion=%1 versio %2 +AdditionalIcons=Liskuvakkeet: +CreateDesktopIcon=Lu&o kuvake typydlle +CreateQuickLaunchIcon=Luo kuvake &pikakynnistyspalkkiin +ProgramOnTheWeb=%1 Internetiss +UninstallProgram=Poista %1 +LaunchProgram=&Kynnist %1 +AssocFileExtension=&Yhdist %1 tiedostoptteeseen %2 +AssocingFileExtension=Yhdistetn %1 tiedostoptteeseen %2 ... +AutoStartProgramGroupDescription=Kynnistys: +AutoStartProgram=Kynnist %1 automaattisesti +AddonHostProgramNotFound=%1 ei ole valitsemassasi kansiossa.%n%nHaluatko jatkaa tst huolimatta? diff --git a/Files/Languages/French.isl b/Files/Languages/French.isl new file mode 100644 index 00000000..96e3c046 --- /dev/null +++ b/Files/Languages/French.isl @@ -0,0 +1,404 @@ +; *** Inno Setup version 6.1.0+ French messages *** +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). +; +; Maintained by Pierre Yager (pierre@levosgien.net) +; +; Contributors : Frédéric Bonduelle, Francis Pallini, Lumina, Pascal Peyrot +; +; Changes : +; + Accents on uppercase letters +; http://www.academie-francaise.fr/langue/questions.html#accentuation (lumina) +; + Typography quotes [see ISBN: 978-2-7433-0482-9] +; http://fr.wikipedia.org/wiki/Guillemet (lumina) +; + Binary units (Kio, Mio) [IEC 80000-13:2008] +; http://fr.wikipedia.org/wiki/Octet (lumina) +; + Reverted to standard units (Ko, Mo) to follow Windows Explorer Standard +; http://blogs.msdn.com/b/oldnewthing/archive/2009/06/11/9725386.aspx +; + Use more standard verbs for click and retry +; "click": "Clicker" instead of "Appuyer" +; "retry": "Recommencer" au lieu de "Réessayer" +; + Added new 6.0.0 messages +; + Added new 6.1.0 messages + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Français +LanguageID=$040C +LanguageCodePage=1252 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Installation +SetupWindowTitle=Installation - %1 +UninstallAppTitle=Désinstallation +UninstallAppFullTitle=Désinstallation - %1 + +; *** Misc. common +InformationTitle=Information +ConfirmTitle=Confirmation +ErrorTitle=Erreur + +; *** SetupLdr messages +SetupLdrStartupMessage=Cet assistant va installer %1. Voulez-vous continuer ? +LdrCannotCreateTemp=Impossible de créer un fichier temporaire. Abandon de l'installation +LdrCannotExecTemp=Impossible d'exécuter un fichier depuis le dossier temporaire. Abandon de l'installation +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nErreur %2 : %3 +SetupFileMissing=Le fichier %1 est absent du dossier d'installation. Veuillez corriger le problème ou vous procurer une nouvelle copie du programme. +SetupFileCorrupt=Les fichiers d'installation sont altérés. Veuillez vous procurer une nouvelle copie du programme. +SetupFileCorruptOrWrongVer=Les fichiers d'installation sont altérés ou ne sont pas compatibles avec cette version de l'assistant d'installation. Veuillez corriger le problème ou vous procurer une nouvelle copie du programme. +InvalidParameter=Un paramètre non valide a été passé à la ligne de commande :%n%n%1 +SetupAlreadyRunning=L'assistant d'installation est déjà en cours d'exécution. +WindowsVersionNotSupported=Ce programme n'est pas prévu pour fonctionner avec la version de Windows utilisée sur votre ordinateur. +WindowsServicePackRequired=Ce programme a besoin de %1 Service Pack %2 ou d'une version plus récente. +NotOnThisPlatform=Ce programme ne fonctionne pas sous %1. +OnlyOnThisPlatform=Ce programme ne peut fonctionner que sous %1. +OnlyOnTheseArchitectures=Ce programme ne peut être installé que sur des versions de Windows qui supportent ces architectures : %n%n%1 +WinVersionTooLowError=Ce programme requiert la version %2 ou supérieure de %1. +WinVersionTooHighError=Ce programme ne peut pas être installé sous %1 version %2 ou supérieure. +AdminPrivilegesRequired=Vous devez disposer des droits d'administration de cet ordinateur pour installer ce programme. +PowerUserPrivilegesRequired=Vous devez disposer des droits d'administration ou faire partie du groupe « Utilisateurs avec pouvoir » de cet ordinateur pour installer ce programme. +SetupAppRunningError=L'assistant d'installation a détecté que %1 est actuellement en cours d'exécution.%n%nVeuillez fermer toutes les instances de cette application puis cliquer sur OK pour continuer, ou bien cliquer sur Annuler pour abandonner l'installation. +UninstallAppRunningError=La procédure de désinstallation a détecté que %1 est actuellement en cours d'exécution.%n%nVeuillez fermer toutes les instances de cette application puis cliquer sur OK pour continuer, ou bien cliquer sur Annuler pour abandonner la désinstallation. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Choix du Mode d'Installation +PrivilegesRequiredOverrideInstruction=Choisissez le mode d'installation +PrivilegesRequiredOverrideText1=%1 peut être installé pour tous les utilisateurs (nécessite des privilèges administrateur), ou seulement pour vous. +PrivilegesRequiredOverrideText2=%1 peut-être installé seulement pour vous, ou pour tous les utilisateurs (nécessite des privilèges administrateur). +PrivilegesRequiredOverrideAllUsers=Installer pour &tous les utilisateurs +PrivilegesRequiredOverrideAllUsersRecommended=Installer pour &tous les utilisateurs (recommandé) +PrivilegesRequiredOverrideCurrentUser=Installer seulement pour &moi +PrivilegesRequiredOverrideCurrentUserRecommended=Installer seulement pour &moi (recommandé) + +; *** Misc. errors +ErrorCreatingDir=L'assistant d'installation n'a pas pu créer le dossier "%1" +ErrorTooManyFilesInDir=L'assistant d'installation n'a pas pu créer un fichier dans le dossier "%1" car celui-ci contient trop de fichiers + +; *** Setup common messages +ExitSetupTitle=Quitter l'installation +ExitSetupMessage=L'installation n'est pas terminée. Si vous abandonnez maintenant, le programme ne sera pas installé.%n%nVous devrez relancer cet assistant pour finir l'installation.%n%nVoulez-vous quand même quitter l'assistant d'installation ? +AboutSetupMenuItem=À &propos... +AboutSetupTitle=À Propos de l'assistant d'installation +AboutSetupMessage=%1 version %2%n%3%n%nPage d'accueil de %1 :%n%4 +AboutSetupNote= +TranslatorNote=Traduction française maintenue par Pierre Yager (pierre@levosgien.net) + +; *** Buttons +ButtonBack=< &Précédent +ButtonNext=&Suivant > +ButtonInstall=&Installer +ButtonOK=OK +ButtonCancel=Annuler +ButtonYes=&Oui +ButtonYesToAll=Oui pour &tout +ButtonNo=&Non +ButtonNoToAll=N&on pour tout +ButtonFinish=&Terminer +ButtonBrowse=Pa&rcourir... +ButtonWizardBrowse=Pa&rcourir... +ButtonNewFolder=Nouveau &dossier + +; *** "Select Language" dialog messages +SelectLanguageTitle=Langue de l'assistant d'installation +SelectLanguageLabel=Veuillez sélectionner la langue qui sera utilisée par l'assistant d'installation. + +; *** Common wizard text +ClickNext=Cliquez sur Suivant pour continuer ou sur Annuler pour abandonner l'installation. +BeveledLabel= +BrowseDialogTitle=Parcourir les dossiers +BrowseDialogLabel=Veuillez choisir un dossier de destination, puis cliquez sur OK. +NewFolderName=Nouveau dossier + +; *** "Welcome" wizard page +WelcomeLabel1=Bienvenue dans l'assistant d'installation de [name] +WelcomeLabel2=Cet assistant va vous guider dans l'installation de [name/ver] sur votre ordinateur.%n%nIl est recommandé de fermer toutes les applications actives avant de continuer. + +; *** "Password" wizard page +WizardPassword=Mot de passe +PasswordLabel1=Cette installation est protégée par un mot de passe. +PasswordLabel3=Veuillez saisir le mot de passe (attention à la distinction entre majuscules et minuscules) puis cliquez sur Suivant pour continuer. +PasswordEditLabel=&Mot de passe : +IncorrectPassword=Le mot de passe saisi n'est pas valide. Veuillez essayer à nouveau. + +; *** "License Agreement" wizard page +WizardLicense=Accord de licence +LicenseLabel=Les informations suivantes sont importantes. Veuillez les lire avant de continuer. +LicenseLabel3=Veuillez lire le contrat de licence suivant. Vous devez en accepter tous les termes avant de continuer l'installation. +LicenseAccepted=Je comprends et j'&accepte les termes du contrat de licence +LicenseNotAccepted=Je &refuse les termes du contrat de licence + +; *** "Information" wizard pages +WizardInfoBefore=Information +InfoBeforeLabel=Les informations suivantes sont importantes. Veuillez les lire avant de continuer. +InfoBeforeClickLabel=Lorsque vous êtes prêt à continuer, cliquez sur Suivant. +WizardInfoAfter=Information +InfoAfterLabel=Les informations suivantes sont importantes. Veuillez les lire avant de continuer. +InfoAfterClickLabel=Lorsque vous êtes prêt à continuer, cliquez sur Suivant. + +; *** "User Information" wizard page +WizardUserInfo=Informations sur l'Utilisateur +UserInfoDesc=Veuillez saisir les informations qui vous concernent. +UserInfoName=&Nom d'utilisateur : +UserInfoOrg=&Organisation : +UserInfoSerial=Numéro de &série : +UserInfoNameRequired=Vous devez au moins saisir un nom. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Dossier de destination +SelectDirDesc=Où [name] doit-il être installé ? +SelectDirLabel3=L'assistant va installer [name] dans le dossier suivant. +SelectDirBrowseLabel=Pour continuer, cliquez sur Suivant. Si vous souhaitez choisir un dossier différent, cliquez sur Parcourir. +DiskSpaceGBLabel=Le programme requiert au moins [gb] Go d'espace disque disponible. +DiskSpaceMBLabel=Le programme requiert au moins [mb] Mo d'espace disque disponible. +CannotInstallToNetworkDrive=L'assistant ne peut pas installer sur un disque réseau. +CannotInstallToUNCPath=L'assistant ne peut pas installer sur un chemin UNC. +InvalidPath=Vous devez saisir un chemin complet avec sa lettre de lecteur ; par exemple :%n%nC:\APP%n%nou un chemin réseau de la forme :%n%n\\serveur\partage +InvalidDrive=L'unité ou l'emplacement réseau que vous avez sélectionné n'existe pas ou n'est pas accessible. Veuillez choisir une autre destination. +DiskSpaceWarningTitle=Espace disponible insuffisant +DiskSpaceWarning=L'assistant a besoin d'au moins %1 Ko d'espace disponible pour effectuer l'installation, mais l'unité que vous avez sélectionnée ne dispose que de %2 Ko d'espace disponible.%n%nSouhaitez-vous continuer malgré tout ? +DirNameTooLong=Le nom ou le chemin du dossier est trop long. +InvalidDirName=Le nom du dossier est invalide. +BadDirName32=Le nom du dossier ne doit contenir aucun des caractères suivants :%n%n%1 +DirExistsTitle=Dossier existant +DirExists=Le dossier :%n%n%1%n%nexiste déjà. Souhaitez-vous installer dans ce dossier malgré tout ? +DirDoesntExistTitle=Le dossier n'existe pas +DirDoesntExist=Le dossier %n%n%1%n%nn'existe pas. Souhaitez-vous que ce dossier soit créé ? + +; *** "Select Components" wizard page +WizardSelectComponents=Composants à installer +SelectComponentsDesc=Quels composants de l'application souhaitez-vous installer ? +SelectComponentsLabel2=Sélectionnez les composants que vous désirez installer ; décochez les composants que vous ne désirez pas installer. Cliquez ensuite sur Suivant pour continuer l'installation. +FullInstallation=Installation complète +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Installation compacte +CustomInstallation=Installation personnalisée +NoUninstallWarningTitle=Composants existants +NoUninstallWarning=L'assistant d'installation a détecté que les composants suivants sont déjà installés sur votre système :%n%n%1%n%nDésélectionner ces composants ne les désinstallera pas pour autant.%n%nVoulez-vous continuer malgré tout ? +ComponentSize1=%1 Ko +ComponentSize2=%1 Mo +ComponentsDiskSpaceGBLabel=Les composants sélectionnés nécessitent au moins [gb] Go d'espace disponible. +ComponentsDiskSpaceMBLabel=Les composants sélectionnés nécessitent au moins [mb] Mo d'espace disponible. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Tâches supplémentaires +SelectTasksDesc=Quelles sont les tâches supplémentaires qui doivent être effectuées ? +SelectTasksLabel2=Sélectionnez les tâches supplémentaires que l'assistant d'installation doit effectuer pendant l'installation de [name], puis cliquez sur Suivant. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Sélection du dossier du menu Démarrer +SelectStartMenuFolderDesc=Où l'assistant d'installation doit-il placer les raccourcis du programme ? +SelectStartMenuFolderLabel3=L'assistant va créer les raccourcis du programme dans le dossier du menu Démarrer indiqué ci-dessous. +SelectStartMenuFolderBrowseLabel=Cliquez sur Suivant pour continuer. Cliquez sur Parcourir si vous souhaitez sélectionner un autre dossier du menu Démarrer. +MustEnterGroupName=Vous devez saisir un nom de dossier du menu Démarrer. +GroupNameTooLong=Le nom ou le chemin du dossier est trop long. +InvalidGroupName=Le nom du dossier n'est pas valide. +BadGroupName=Le nom du dossier ne doit contenir aucun des caractères suivants :%n%n%1 +NoProgramGroupCheck2=Ne pas créer de &dossier dans le menu Démarrer + +; *** "Ready to Install" wizard page +WizardReady=Prêt à installer +ReadyLabel1=L'assistant dispose à présent de toutes les informations pour installer [name] sur votre ordinateur. +ReadyLabel2a=Cliquez sur Installer pour procéder à l'installation ou sur Précédent pour revoir ou modifier une option d'installation. +ReadyLabel2b=Cliquez sur Installer pour procéder à l'installation. +ReadyMemoUserInfo=Informations sur l'utilisateur : +ReadyMemoDir=Dossier de destination : +ReadyMemoType=Type d'installation : +ReadyMemoComponents=Composants sélectionnés : +ReadyMemoGroup=Dossier du menu Démarrer : +ReadyMemoTasks=Tâches supplémentaires : + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Téléchargement de fichiers supplémentaires... +ButtonStopDownload=&Arrêter le téléchargement +StopDownload=Êtes-vous sûr de vouloir arrêter le téléchargement ? +ErrorDownloadAborted=Téléchargement annulé +ErrorDownloadFailed=Le téléchargement a échoué : %1 %2 +ErrorDownloadSizeFailed=La récupération de la taille du fichier a échouée : %1 %2 +ErrorFileHash1=Le calcul de l'empreinte du fichier a échoué : %1 +ErrorFileHash2=Empreinte du fichier invalide : attendue %1, trouvée %2 +ErrorProgress=Progression invalide : %1 sur %2 +ErrorFileSize=Taille du fichier invalide : attendue %1, trouvée %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Préparation de l'installation +PreparingDesc=L'assistant d'installation prépare l'installation de [name] sur votre ordinateur. +PreviousInstallNotCompleted=L'installation ou la suppression d'un programme précédent n'est pas totalement achevée. Veuillez redémarrer votre ordinateur pour achever cette installation ou suppression.%n%nUne fois votre ordinateur redémarré, veuillez relancer cet assistant pour reprendre l'installation de [name]. +CannotContinue=L'assistant ne peut pas continuer. Veuillez cliquer sur Annuler pour abandonner l'installation. +ApplicationsFound=Les applications suivantes utilisent des fichiers qui doivent être mis à jour par l'assistant. Il est recommandé d'autoriser l'assistant à fermer ces applications automatiquement. +ApplicationsFound2=Les applications suivantes utilisent des fichiers qui doivent être mis à jour par l'assistant. Il est recommandé d'autoriser l'assistant à fermer ces applications automatiquement. Une fois l'installation terminée, l'assistant essaiera de relancer ces applications. +CloseApplications=&Arrêter les applications automatiquement +DontCloseApplications=&Ne pas arrêter les applications +ErrorCloseApplications=L'assistant d'installation n'a pas pu arrêter toutes les applications automatiquement. Nous vous recommandons de fermer toutes les applications qui utilisent des fichiers devant être mis à jour par l'assistant d'installation avant de continuer. +PrepareToInstallNeedsRestart=L'assistant d'installation doit redémarrer votre ordinateur. Une fois votre ordinateur redémarré, veuillez relancer cet assistant d'installation pour terminer l'installation de [name].%n%nVoulez-vous redémarrer votre ordinateur maintenant ? + +; *** "Installing" wizard page +WizardInstalling=Installation en cours +InstallingLabel=Veuillez patienter pendant que l'assistant installe [name] sur votre ordinateur. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Fin de l'installation de [name] +FinishedLabelNoIcons=L'assistant a terminé l'installation de [name] sur votre ordinateur. +FinishedLabel=L'assistant a terminé l'installation de [name] sur votre ordinateur. L'application peut être lancée à l'aide des icônes créées sur le Bureau par l'installation. +ClickFinish=Veuillez cliquer sur Terminer pour quitter l'assistant d'installation. +FinishedRestartLabel=L'assistant doit redémarrer votre ordinateur pour terminer l'installation de [name].%n%nVoulez-vous redémarrer maintenant ? +FinishedRestartMessage=L'assistant doit redémarrer votre ordinateur pour terminer l'installation de [name].%n%nVoulez-vous redémarrer maintenant ? +ShowReadmeCheck=Oui, je souhaite lire le fichier LISEZMOI +YesRadio=&Oui, redémarrer mon ordinateur maintenant +NoRadio=&Non, je préfère redémarrer mon ordinateur plus tard +; used for example as 'Run MyProg.exe' +RunEntryExec=Exécuter %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Voir %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=L'assistant a besoin du disque suivant +SelectDiskLabel2=Veuillez insérer le disque %1 et cliquer sur OK.%n%nSi les fichiers de ce disque se trouvent à un emplacement différent de celui indiqué ci-dessous, veuillez saisir le chemin correspondant ou cliquez sur Parcourir. +PathLabel=&Chemin : +FileNotInDir2=Le fichier "%1" ne peut pas être trouvé dans "%2". Veuillez insérer le bon disque ou sélectionner un autre dossier. +SelectDirectoryLabel=Veuillez indiquer l'emplacement du disque suivant. + +; *** Installation phase messages +SetupAborted=L'installation n'est pas terminée.%n%nVeuillez corriger le problème et relancer l'installation. +AbortRetryIgnoreSelectAction=Choisissez une action +AbortRetryIgnoreRetry=&Recommencer +AbortRetryIgnoreIgnore=&Ignorer l'erreur et continuer +AbortRetryIgnoreCancel=Annuler l'installation + +; *** Installation status messages +StatusClosingApplications=Ferme les applications... +StatusCreateDirs=Création des dossiers... +StatusExtractFiles=Extraction des fichiers... +StatusCreateIcons=Création des raccourcis... +StatusCreateIniEntries=Création des entrées du fichier INI... +StatusCreateRegistryEntries=Création des entrées de registre... +StatusRegisterFiles=Enregistrement des fichiers... +StatusSavingUninstall=Sauvegarde des informations de désinstallation... +StatusRunProgram=Finalisation de l'installation... +StatusRestartingApplications=Relance les applications... +StatusRollback=Annulation des modifications... + +; *** Misc. errors +ErrorInternal2=Erreur interne : %1 +ErrorFunctionFailedNoCode=%1 a échoué +ErrorFunctionFailed=%1 a échoué ; code %2 +ErrorFunctionFailedWithMessage=%1 a échoué ; code %2.%n%3 +ErrorExecutingProgram=Impossible d'exécuter le fichier :%n%1 + +; *** Registry errors +ErrorRegOpenKey=Erreur lors de l'ouverture de la clé de registre :%n%1\%2 +ErrorRegCreateKey=Erreur lors de la création de la clé de registre :%n%1\%2 +ErrorRegWriteKey=Erreur lors de l'écriture de la clé de registre :%n%1\%2 + +; *** INI errors +ErrorIniEntry=Erreur d'écriture d'une entrée dans le fichier INI "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Ignorer ce fichier (non recommandé) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorer l'erreur et continuer (non recommandé) +SourceIsCorrupted=Le fichier source est altéré +SourceDoesntExist=Le fichier source "%1" n'existe pas +ExistingFileReadOnly2=Le fichier existant ne peut pas être remplacé parce qu'il est protégé par l'attribut lecture seule. +ExistingFileReadOnlyRetry=&Supprimer l'attribut lecture seule et réessayer +ExistingFileReadOnlyKeepExisting=&Conserver le fichier existant +ErrorReadingExistingDest=Une erreur s'est produite lors de la tentative de lecture du fichier existant : +FileExistsSelectAction=Choisissez une action +FileExists2=Le fichier existe déjà. +FileExistsOverwriteExisting=&Ecraser le fichier existant +FileExistsKeepExisting=&Conserver le fichier existant +FileExistsOverwriteOrKeepAll=&Faire ceci pour les conflits à venir +ExistingFileNewerSelectAction=Choisissez une action +ExistingFileNewer2=Le fichier existant est plus récent que celui que l'assistant d'installation est en train d'installer. +ExistingFileNewerOverwriteExisting=&Ecraser le fichier existant +ExistingFileNewerKeepExisting=&Conserver le fichier existant (recommandé) +ExistingFileNewerOverwriteOrKeepAll=&Faire ceci pour les conflits à venir +ErrorChangingAttr=Une erreur est survenue en essayant de modifier les attributs du fichier existant : +ErrorCreatingTemp=Une erreur est survenue en essayant de créer un fichier dans le dossier de destination : +ErrorReadingSource=Une erreur est survenue lors de la lecture du fichier source : +ErrorCopying=Une erreur est survenue lors de la copie d'un fichier : +ErrorReplacingExistingFile=Une erreur est survenue lors du remplacement d'un fichier existant : +ErrorRestartReplace=Le marquage d'un fichier pour remplacement au redémarrage de l'ordinateur a échoué : +ErrorRenamingTemp=Une erreur est survenue en essayant de renommer un fichier dans le dossier de destination : +ErrorRegisterServer=Impossible d'enregistrer la bibliothèque DLL/OCX : %1 +ErrorRegSvr32Failed=RegSvr32 a échoué et a retourné le code d'erreur %1 +ErrorRegisterTypeLib=Impossible d'enregistrer la bibliothèque de type : %1 + +; *** Nom d'affichage pour la désinstallaton +; par exemple 'Mon Programme (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; ou par exemple 'Mon Programme (32-bit, Tous les utilisateurs)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=Tous les utilisateurs +UninstallDisplayNameMarkCurrentUser=Utilisateur courant + +; *** Post-installation errors +ErrorOpeningReadme=Une erreur est survenue à l'ouverture du fichier LISEZMOI. +ErrorRestartingComputer=L'installation n'a pas pu redémarrer l'ordinateur. Merci de bien vouloir le faire vous-même. + +; *** Uninstaller messages +UninstallNotFound=Le fichier "%1" n'existe pas. Impossible de désinstaller. +UninstallOpenError=Le fichier "%1" n'a pas pu être ouvert. Impossible de désinstaller +UninstallUnsupportedVer=Le format du fichier journal de désinstallation "%1" n'est pas reconnu par cette version de la procédure de désinstallation. Impossible de désinstaller +UninstallUnknownEntry=Une entrée inconnue (%1) a été rencontrée dans le fichier journal de désinstallation +ConfirmUninstall=Voulez-vous vraiment désinstaller complètement %1 ainsi que tous ses composants ? +UninstallOnlyOnWin64=La désinstallation de ce programme ne fonctionne qu'avec une version 64 bits de Windows. +OnlyAdminCanUninstall=Ce programme ne peut être désinstallé que par un utilisateur disposant des droits d'administration. +UninstallStatusLabel=Veuillez patienter pendant que %1 est retiré de votre ordinateur. +UninstalledAll=%1 a été correctement désinstallé de cet ordinateur. +UninstalledMost=La désinstallation de %1 est terminée.%n%nCertains éléments n'ont pas pu être supprimés automatiquement. Vous pouvez les supprimer manuellement. +UninstalledAndNeedsRestart=Vous devez redémarrer l'ordinateur pour terminer la désinstallation de %1.%n%nVoulez-vous redémarrer maintenant ? +UninstallDataCorrupted=Le ficher "%1" est altéré. Impossible de désinstaller + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Supprimer les fichiers partagés ? +ConfirmDeleteSharedFile2=Le système indique que le fichier partagé suivant n'est plus utilisé par aucun programme. Souhaitez-vous que la désinstallation supprime ce fichier partagé ?%n%nSi des programmes utilisent encore ce fichier et qu'il est supprimé, ces programmes ne pourront plus fonctionner correctement. Si vous n'êtes pas sûr, choisissez Non. Laisser ce fichier dans votre système ne posera pas de problème. +SharedFileNameLabel=Nom du fichier : +SharedFileLocationLabel=Emplacement : +WizardUninstalling=État de la désinstallation +StatusUninstalling=Désinstallation de %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Installe %1. +ShutdownBlockReasonUninstallingApp=Désinstalle %1. + +; Les messages personnalisés suivants ne sont pas utilisé par l'installation +; elle-même, mais si vous les utilisez dans vos scripts, vous devez les +; traduire + +[CustomMessages] + +NameAndVersion=%1 version %2 +AdditionalIcons=Icônes supplémentaires : +CreateDesktopIcon=Créer une icône sur le &Bureau +CreateQuickLaunchIcon=Créer une icône dans la barre de &Lancement rapide +ProgramOnTheWeb=Page d'accueil de %1 +UninstallProgram=Désinstaller %1 +LaunchProgram=Exécuter %1 +AssocFileExtension=&Associer %1 avec l'extension de fichier %2 +AssocingFileExtension=Associe %1 avec l'extension de fichier %2... +AutoStartProgramGroupDescription=Démarrage : +AutoStartProgram=Démarrer automatiquement %1 +AddonHostProgramNotFound=%1 n'a pas été trouvé dans le dossier que vous avez choisi.%n%nVoulez-vous continuer malgré tout ? diff --git a/Files/Languages/German.isl b/Files/Languages/German.isl new file mode 100644 index 00000000..f3812997 --- /dev/null +++ b/Files/Languages/German.isl @@ -0,0 +1,406 @@ +; ****************************************************** +; *** *** +; *** Inno Setup version 6.1.0+ German messages *** +; *** *** +; *** Changes 6.0.0+ Author: *** +; *** *** +; *** Jens Brand (jens.brand@wolf-software.de) *** +; *** *** +; *** Original Authors: *** +; *** *** +; *** Peter Stadler (Peter.Stadler@univie.ac.at) *** +; *** Michael Reitz (innosetup@assimilate.de) *** +; *** *** +; *** Contributors: *** +; *** *** +; *** Roland Ruder (info@rr4u.de) *** +; *** Hans Sperber (Hans.Sperber@de.bosch.com) *** +; *** LaughingMan (puma.d@web.de) *** +; *** *** +; ****************************************************** +; +; Diese Übersetzung hält sich an die neue deutsche Rechtschreibung. + +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ + +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Deutsch +LanguageID=$0407 +LanguageCodePage=1252 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Setup +SetupWindowTitle=Setup - %1 +UninstallAppTitle=Entfernen +UninstallAppFullTitle=%1 entfernen + +; *** Misc. common +InformationTitle=Information +ConfirmTitle=Bestätigen +ErrorTitle=Fehler + +; *** SetupLdr messages +SetupLdrStartupMessage=%1 wird jetzt installiert. Möchten Sie fortfahren? +LdrCannotCreateTemp=Es konnte keine temporäre Datei erstellt werden. Das Setup wurde abgebrochen +LdrCannotExecTemp=Die Datei konnte nicht im temporären Ordner ausgeführt werden. Das Setup wurde abgebrochen +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nFehler %2: %3 +SetupFileMissing=Die Datei %1 fehlt im Installationsordner. Bitte beheben Sie das Problem oder besorgen Sie sich eine neue Kopie des Programms. +SetupFileCorrupt=Die Setup-Dateien sind beschädigt. Besorgen Sie sich bitte eine neue Kopie des Programms. +SetupFileCorruptOrWrongVer=Die Setup-Dateien sind beschädigt oder inkompatibel zu dieser Version des Setups. Bitte beheben Sie das Problem oder besorgen Sie sich eine neue Kopie des Programms. +InvalidParameter=Ein ungültiger Parameter wurde auf der Kommandozeile übergeben:%n%n%1 +SetupAlreadyRunning=Setup läuft bereits. +WindowsVersionNotSupported=Dieses Programm unterstützt die auf Ihrem Computer installierte Windows-Version nicht. +WindowsServicePackRequired=Dieses Programm benötigt %1 Service Pack %2 oder höher. +NotOnThisPlatform=Dieses Programm kann nicht unter %1 ausgeführt werden. +OnlyOnThisPlatform=Dieses Programm muss unter %1 ausgeführt werden. +OnlyOnTheseArchitectures=Dieses Programm kann nur auf Windows-Versionen installiert werden, die folgende Prozessor-Architekturen unterstützen:%n%n%1 +WinVersionTooLowError=Dieses Programm benötigt %1 Version %2 oder höher. +WinVersionTooHighError=Dieses Programm kann nicht unter %1 Version %2 oder höher installiert werden. +AdminPrivilegesRequired=Sie müssen als Administrator angemeldet sein, um dieses Programm installieren zu können. +PowerUserPrivilegesRequired=Sie müssen als Administrator oder als Mitglied der Hauptbenutzer-Gruppe angemeldet sein, um dieses Programm installieren zu können. +SetupAppRunningError=Das Setup hat entdeckt, dass %1 zurzeit ausgeführt wird.%n%nBitte schließen Sie jetzt alle laufenden Instanzen und klicken Sie auf "OK", um fortzufahren, oder auf "Abbrechen", um zu beenden. +UninstallAppRunningError=Die Deinstallation hat entdeckt, dass %1 zurzeit ausgeführt wird.%n%nBitte schließen Sie jetzt alle laufenden Instanzen und klicken Sie auf "OK", um fortzufahren, oder auf "Abbrechen", um zu beenden. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Installationsmodus auswählen +PrivilegesRequiredOverrideInstruction=Bitte wählen Sie den Installationsmodus +PrivilegesRequiredOverrideText1=%1 kann für alle Benutzer (erfordert Administrationsrechte) oder nur für Sie installiert werden. +PrivilegesRequiredOverrideText2=%1 kann nur für Sie oder für alle Benutzer (erfordert Administrationsrechte) installiert werden. +PrivilegesRequiredOverrideAllUsers=Installation für &alle Benutzer +PrivilegesRequiredOverrideAllUsersRecommended=Installation für &alle Benutzer (empfohlen) +PrivilegesRequiredOverrideCurrentUser=Installation nur für &Sie +PrivilegesRequiredOverrideCurrentUserRecommended=Installation nur für &Sie (empfohlen) + +; *** Misc. errors +ErrorCreatingDir=Das Setup konnte den Ordner "%1" nicht erstellen. +ErrorTooManyFilesInDir=Das Setup konnte eine Datei im Ordner "%1" nicht erstellen, weil er zu viele Dateien enthält. + +; *** Setup common messages +ExitSetupTitle=Setup verlassen +ExitSetupMessage=Das Setup ist noch nicht abgeschlossen. Wenn Sie jetzt beenden, wird das Programm nicht installiert.%n%nSie können das Setup zu einem späteren Zeitpunkt nochmals ausführen, um die Installation zu vervollständigen.%n%nSetup verlassen? +AboutSetupMenuItem=&Über das Setup ... +AboutSetupTitle=Über das Setup +AboutSetupMessage=%1 Version %2%n%3%n%n%1 Webseite:%n%4 +AboutSetupNote= +TranslatorNote=German translation maintained by Jens Brand (jens.brand@wolf-software.de) + +; *** Buttons +ButtonBack=< &Zurück +ButtonNext=&Weiter > +ButtonInstall=&Installieren +ButtonOK=OK +ButtonCancel=Abbrechen +ButtonYes=&Ja +ButtonYesToAll=J&a für Alle +ButtonNo=&Nein +ButtonNoToAll=N&ein für Alle +ButtonFinish=&Fertigstellen +ButtonBrowse=&Durchsuchen ... +ButtonWizardBrowse=Du&rchsuchen ... +ButtonNewFolder=&Neuen Ordner erstellen + +; *** "Select Language" dialog messages +SelectLanguageTitle=Setup-Sprache auswählen +SelectLanguageLabel=Wählen Sie die Sprache aus, die während der Installation benutzt werden soll: + +; *** Common wizard text +ClickNext="Weiter" zum Fortfahren, "Abbrechen" zum Verlassen. +BeveledLabel= +BrowseDialogTitle=Ordner suchen +BrowseDialogLabel=Wählen Sie einen Ordner aus und klicken Sie danach auf "OK". +NewFolderName=Neuer Ordner + +; *** "Welcome" wizard page +WelcomeLabel1=Willkommen zum [name] Setup-Assistenten +WelcomeLabel2=Dieser Assistent wird jetzt [name/ver] auf Ihrem Computer installieren.%n%nSie sollten alle anderen Anwendungen beenden, bevor Sie mit dem Setup fortfahren. + +; *** "Password" wizard page +WizardPassword=Passwort +PasswordLabel1=Diese Installation wird durch ein Passwort geschützt. +PasswordLabel3=Bitte geben Sie das Passwort ein und klicken Sie danach auf "Weiter". Achten Sie auf korrekte Groß-/Kleinschreibung. +PasswordEditLabel=&Passwort: +IncorrectPassword=Das eingegebene Passwort ist nicht korrekt. Bitte versuchen Sie es noch einmal. + +; *** "License Agreement" wizard page +WizardLicense=Lizenzvereinbarung +LicenseLabel=Lesen Sie bitte folgende wichtige Informationen, bevor Sie fortfahren. +LicenseLabel3=Lesen Sie bitte die folgenden Lizenzvereinbarungen. Benutzen Sie bei Bedarf die Bildlaufleiste oder drücken Sie die "Bild Ab"-Taste. +LicenseAccepted=Ich &akzeptiere die Vereinbarung +LicenseNotAccepted=Ich &lehne die Vereinbarung ab + +; *** "Information" wizard pages +WizardInfoBefore=Information +InfoBeforeLabel=Lesen Sie bitte folgende wichtige Informationen, bevor Sie fortfahren. +InfoBeforeClickLabel=Klicken Sie auf "Weiter", sobald Sie bereit sind, mit dem Setup fortzufahren. +WizardInfoAfter=Information +InfoAfterLabel=Lesen Sie bitte folgende wichtige Informationen, bevor Sie fortfahren. +InfoAfterClickLabel=Klicken Sie auf "Weiter", sobald Sie bereit sind, mit dem Setup fortzufahren. + +; *** "User Information" wizard page +WizardUserInfo=Benutzerinformationen +UserInfoDesc=Bitte tragen Sie Ihre Daten ein. +UserInfoName=&Name: +UserInfoOrg=&Organisation: +UserInfoSerial=&Seriennummer: +UserInfoNameRequired=Sie müssen einen Namen eintragen. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Ziel-Ordner wählen +SelectDirDesc=Wohin soll [name] installiert werden? +SelectDirLabel3=Das Setup wird [name] in den folgenden Ordner installieren. +SelectDirBrowseLabel=Klicken Sie auf "Weiter", um fortzufahren. Klicken Sie auf "Durchsuchen", falls Sie einen anderen Ordner auswählen möchten. +DiskSpaceGBLabel=Mindestens [gb] GB freier Speicherplatz ist erforderlich. +DiskSpaceMBLabel=Mindestens [mb] MB freier Speicherplatz ist erforderlich. +CannotInstallToNetworkDrive=Das Setup kann nicht in einen Netzwerk-Pfad installieren. +CannotInstallToUNCPath=Das Setup kann nicht in einen UNC-Pfad installieren. Wenn Sie auf ein Netzlaufwerk installieren möchten, müssen Sie dem Netzwerkpfad einen Laufwerksbuchstaben zuordnen. +InvalidPath=Sie müssen einen vollständigen Pfad mit einem Laufwerksbuchstaben angeben, z. B.:%n%nC:\Beispiel%n%noder einen UNC-Pfad in der Form:%n%n\\Server\Freigabe +InvalidDrive=Das angegebene Laufwerk bzw. der UNC-Pfad existiert nicht oder es kann nicht darauf zugegriffen werden. Wählen Sie bitte einen anderen Ordner. +DiskSpaceWarningTitle=Nicht genug freier Speicherplatz +DiskSpaceWarning=Das Setup benötigt mindestens %1 KB freien Speicherplatz zum Installieren, aber auf dem ausgewählten Laufwerk sind nur %2 KB verfügbar.%n%nMöchten Sie trotzdem fortfahren? +DirNameTooLong=Der Ordnername/Pfad ist zu lang. +InvalidDirName=Der Ordnername ist nicht gültig. +BadDirName32=Ordnernamen dürfen keine der folgenden Zeichen enthalten:%n%n%1 +DirExistsTitle=Ordner existiert bereits +DirExists=Der Ordner:%n%n%1%n%n existiert bereits. Möchten Sie trotzdem in diesen Ordner installieren? +DirDoesntExistTitle=Ordner ist nicht vorhanden +DirDoesntExist=Der Ordner:%n%n%1%n%nist nicht vorhanden. Soll der Ordner erstellt werden? + +; *** "Select Components" wizard page +WizardSelectComponents=Komponenten auswählen +SelectComponentsDesc=Welche Komponenten sollen installiert werden? +SelectComponentsLabel2=Wählen Sie die Komponenten aus, die Sie installieren möchten. Klicken Sie auf "Weiter", wenn Sie bereit sind, fortzufahren. +FullInstallation=Vollständige Installation +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Kompakte Installation +CustomInstallation=Benutzerdefinierte Installation +NoUninstallWarningTitle=Komponenten vorhanden +NoUninstallWarning=Das Setup hat festgestellt, dass die folgenden Komponenten bereits auf Ihrem Computer installiert sind:%n%n%1%n%nDiese nicht mehr ausgewählten Komponenten werden nicht vom Computer entfernt.%n%nMöchten Sie trotzdem fortfahren? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Die aktuelle Auswahl erfordert mindestens [gb] GB Speicherplatz. +ComponentsDiskSpaceMBLabel=Die aktuelle Auswahl erfordert mindestens [mb] MB Speicherplatz. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Zusätzliche Aufgaben auswählen +SelectTasksDesc=Welche zusätzlichen Aufgaben sollen ausgeführt werden? +SelectTasksLabel2=Wählen Sie die zusätzlichen Aufgaben aus, die das Setup während der Installation von [name] ausführen soll, und klicken Sie danach auf "Weiter". + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Startmenü-Ordner auswählen +SelectStartMenuFolderDesc=Wo soll das Setup die Programm-Verknüpfungen erstellen? +SelectStartMenuFolderLabel3=Das Setup wird die Programm-Verknüpfungen im folgenden Startmenü-Ordner erstellen. +SelectStartMenuFolderBrowseLabel=Klicken Sie auf "Weiter", um fortzufahren. Klicken Sie auf "Durchsuchen", falls Sie einen anderen Ordner auswählen möchten. +MustEnterGroupName=Sie müssen einen Ordnernamen eingeben. +GroupNameTooLong=Der Ordnername/Pfad ist zu lang. +InvalidGroupName=Der Ordnername ist nicht gültig. +BadGroupName=Der Ordnername darf keine der folgenden Zeichen enthalten:%n%n%1 +NoProgramGroupCheck2=&Keinen Ordner im Startmenü erstellen + +; *** "Ready to Install" wizard page +WizardReady=Bereit zur Installation. +ReadyLabel1=Das Setup ist jetzt bereit, [name] auf Ihrem Computer zu installieren. +ReadyLabel2a=Klicken Sie auf "Installieren", um mit der Installation zu beginnen, oder auf "Zurück", um Ihre Einstellungen zu überprüfen oder zu ändern. +ReadyLabel2b=Klicken Sie auf "Installieren", um mit der Installation zu beginnen. +ReadyMemoUserInfo=Benutzerinformationen: +ReadyMemoDir=Ziel-Ordner: +ReadyMemoType=Setup-Typ: +ReadyMemoComponents=Ausgewählte Komponenten: +ReadyMemoGroup=Startmenü-Ordner: +ReadyMemoTasks=Zusätzliche Aufgaben: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Lade zusätzliche Dateien herunter... +ButtonStopDownload=Download &abbrechen +StopDownload=Sind Sie sicher, dass Sie den Download abbrechen wollen? +ErrorDownloadAborted=Download abgebrochen +ErrorDownloadFailed=Download fehlgeschlagen: %1 %2 +ErrorDownloadSizeFailed=Fehler beim Ermitteln der Größe: %1 %2 +ErrorFileHash1=Fehler beim Ermitteln der Datei-Prüfsumme: %1 +ErrorFileHash2=Ungültige Datei-Prüfsumme: erwartet %1, gefunden %2 +ErrorProgress=Ungültiger Fortschritt: %1 von %2 +ErrorFileSize=Ungültige Dateigröße: erwartet %1, gefunden %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Vorbereitung der Installation +PreparingDesc=Das Setup bereitet die Installation von [name] auf diesem Computer vor. +PreviousInstallNotCompleted=Eine vorherige Installation/Deinstallation eines Programms wurde nicht abgeschlossen. Der Computer muss neu gestartet werden, um die Installation/Deinstallation zu beenden.%n%nStarten Sie das Setup nach dem Neustart Ihres Computers erneut, um die Installation von [name] durchzuführen. +CannotContinue=Das Setup kann nicht fortfahren. Bitte klicken Sie auf "Abbrechen" zum Verlassen. +ApplicationsFound=Die folgenden Anwendungen benutzen Dateien, die aktualisiert werden müssen. Es wird empfohlen, Setup zu erlauben, diese Anwendungen zu schließen. +ApplicationsFound2=Die folgenden Anwendungen benutzen Dateien, die aktualisiert werden müssen. Es wird empfohlen, Setup zu erlauben, diese Anwendungen zu schließen. Nachdem die Installation fertiggestellt wurde, versucht Setup, diese Anwendungen wieder zu starten. +CloseApplications=&Schließe die Anwendungen automatisch +DontCloseApplications=Schließe die A&nwendungen nicht +ErrorCloseApplications=Das Setup konnte nicht alle Anwendungen automatisch schließen. Es wird empfohlen, alle Anwendungen zu schließen, die Dateien benutzen, die vom Setup vor einer Fortsetzung aktualisiert werden müssen. +PrepareToInstallNeedsRestart=Das Setup muss Ihren Computer neu starten. Führen Sie nach dem Neustart Setup erneut aus, um die Installation von [name] abzuschließen.%n%nWollen Sie jetzt neu starten? + +; *** "Installing" wizard page +WizardInstalling=Installiere ... +InstallingLabel=Warten Sie bitte, während [name] auf Ihrem Computer installiert wird. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Beenden des [name] Setup-Assistenten +FinishedLabelNoIcons=Das Setup hat die Installation von [name] auf Ihrem Computer abgeschlossen. +FinishedLabel=Das Setup hat die Installation von [name] auf Ihrem Computer abgeschlossen. Die Anwendung kann über die installierten Programm-Verknüpfungen gestartet werden. +ClickFinish=Klicken Sie auf "Fertigstellen", um das Setup zu beenden. +FinishedRestartLabel=Um die Installation von [name] abzuschließen, muss das Setup Ihren Computer neu starten. Möchten Sie jetzt neu starten? +FinishedRestartMessage=Um die Installation von [name] abzuschließen, muss das Setup Ihren Computer neu starten.%n%nMöchten Sie jetzt neu starten? +ShowReadmeCheck=Ja, ich möchte die LIESMICH-Datei sehen +YesRadio=&Ja, Computer jetzt neu starten +NoRadio=&Nein, ich werde den Computer später neu starten +; used for example as 'Run MyProg.exe' +RunEntryExec=%1 starten +; used for example as 'View Readme.txt' +RunEntryShellExec=%1 anzeigen + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Nächsten Datenträger einlegen +SelectDiskLabel2=Legen Sie bitte Datenträger %1 ein und klicken Sie auf "OK".%n%nWenn sich die Dateien von diesem Datenträger in einem anderen als dem angezeigten Ordner befinden, dann geben Sie bitte den korrekten Pfad ein oder klicken auf "Durchsuchen". +PathLabel=&Pfad: +FileNotInDir2=Die Datei "%1" befindet sich nicht in "%2". Bitte Ordner ändern oder richtigen Datenträger einlegen. +SelectDirectoryLabel=Geben Sie bitte an, wo der nächste Datenträger eingelegt wird. + +; *** Installation phase messages +SetupAborted=Das Setup konnte nicht abgeschlossen werden.%n%nBeheben Sie bitte das Problem und starten Sie das Setup erneut. +AbortRetryIgnoreSelectAction=Bitte auswählen +AbortRetryIgnoreRetry=&Nochmals versuchen +AbortRetryIgnoreIgnore=&Den Fehler ignorieren und fortfahren +AbortRetryIgnoreCancel=Installation abbrechen + +; *** Installation status messages +StatusClosingApplications=Anwendungen werden geschlossen ... +StatusCreateDirs=Ordner werden erstellt ... +StatusExtractFiles=Dateien werden entpackt ... +StatusCreateIcons=Verknüpfungen werden erstellt ... +StatusCreateIniEntries=INI-Einträge werden erstellt ... +StatusCreateRegistryEntries=Registry-Einträge werden erstellt ... +StatusRegisterFiles=Dateien werden registriert ... +StatusSavingUninstall=Deinstallationsinformationen werden gespeichert ... +StatusRunProgram=Installation wird beendet ... +StatusRestartingApplications=Neustart der Anwendungen ... +StatusRollback=Änderungen werden rückgängig gemacht ... + +; *** Misc. errors +ErrorInternal2=Interner Fehler: %1 +ErrorFunctionFailedNoCode=%1 schlug fehl +ErrorFunctionFailed=%1 schlug fehl; Code %2 +ErrorFunctionFailedWithMessage=%1 schlug fehl; Code %2.%n%3 +ErrorExecutingProgram=Datei kann nicht ausgeführt werden:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Registry-Schlüssel konnte nicht geöffnet werden:%n%1\%2 +ErrorRegCreateKey=Registry-Schlüssel konnte nicht erstellt werden:%n%1\%2 +ErrorRegWriteKey=Fehler beim Schreiben des Registry-Schlüssels:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Fehler beim Erstellen eines INI-Eintrages in der Datei "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=Diese Datei &überspringen (nicht empfohlen) +FileAbortRetryIgnoreIgnoreNotRecommended=Den Fehler &ignorieren und fortfahren (nicht empfohlen) +SourceIsCorrupted=Die Quelldatei ist beschädigt +SourceDoesntExist=Die Quelldatei "%1" existiert nicht +ExistingFileReadOnly2=Die vorhandene Datei kann nicht ersetzt werden, da sie schreibgeschützt ist. +ExistingFileReadOnlyRetry=&Den Schreibschutz entfernen und noch einmal versuchen +ExistingFileReadOnlyKeepExisting=Die &vorhandene Datei behalten +ErrorReadingExistingDest=Lesefehler in Datei: +FileExistsSelectAction=Aktion auswählen +FileExists2=Die Datei ist bereits vorhanden. +FileExistsOverwriteExisting=Vorhandene Datei &überschreiben +FileExistsKeepExisting=Vorhandene Datei &behalten +FileExistsOverwriteOrKeepAll=&Dies auch für die nächsten Konflikte ausführen +ExistingFileNewerSelectAction=Aktion auswählen +ExistingFileNewer2=Die vorhandene Datei ist neuer als die Datei, die installiert werden soll. +ExistingFileNewerOverwriteExisting=Vorhandene Datei &überschreiben +ExistingFileNewerKeepExisting=Vorhandene Datei &behalten (empfohlen) +ExistingFileNewerOverwriteOrKeepAll=&Dies auch für die nächsten Konflikte ausführen +ErrorChangingAttr=Fehler beim Ändern der Datei-Attribute: +ErrorCreatingTemp=Fehler beim Erstellen einer Datei im Ziel-Ordner: +ErrorReadingSource=Fehler beim Lesen der Quelldatei: +ErrorCopying=Fehler beim Kopieren einer Datei: +ErrorReplacingExistingFile=Fehler beim Ersetzen einer vorhandenen Datei: +ErrorRestartReplace="Ersetzen nach Neustart" fehlgeschlagen: +ErrorRenamingTemp=Fehler beim Umbenennen einer Datei im Ziel-Ordner: +ErrorRegisterServer=DLL/OCX konnte nicht registriert werden: %1 +ErrorRegSvr32Failed=RegSvr32-Aufruf scheiterte mit Exit-Code %1 +ErrorRegisterTypeLib=Typen-Bibliothek konnte nicht registriert werden: %1 + +; *** Uninstall display name markings +; used for example as 'Mein Programm (32 Bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'Mein Programm (32 Bit, Alle Benutzer)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32 Bit +UninstallDisplayNameMark64Bit=64 Bit +UninstallDisplayNameMarkAllUsers=Alle Benutzer +UninstallDisplayNameMarkCurrentUser=Aktueller Benutzer + +; *** Post-installation errors +ErrorOpeningReadme=Fehler beim Öffnen der LIESMICH-Datei. +ErrorRestartingComputer=Das Setup konnte den Computer nicht neu starten. Bitte führen Sie den Neustart manuell durch. + +; *** Uninstaller messages +UninstallNotFound=Die Datei "%1" existiert nicht. Entfernen der Anwendung fehlgeschlagen. +UninstallOpenError=Die Datei "%1" konnte nicht geöffnet werden. Entfernen der Anwendung fehlgeschlagen. +UninstallUnsupportedVer=Das Format der Deinstallationsdatei "%1" konnte nicht erkannt werden. Entfernen der Anwendung fehlgeschlagen. +UninstallUnknownEntry=In der Deinstallationsdatei wurde ein unbekannter Eintrag (%1) gefunden. +ConfirmUninstall=Sind Sie sicher, dass Sie %1 und alle zugehörigen Komponenten entfernen möchten? +UninstallOnlyOnWin64=Diese Installation kann nur unter 64-Bit-Windows-Versionen entfernt werden. +OnlyAdminCanUninstall=Diese Installation kann nur von einem Benutzer mit Administrator-Rechten entfernt werden. +UninstallStatusLabel=Warten Sie bitte, während %1 von Ihrem Computer entfernt wird. +UninstalledAll=%1 wurde erfolgreich von Ihrem Computer entfernt. +UninstalledMost=Entfernen von %1 beendet.%n%nEinige Komponenten konnten nicht entfernt werden. Diese können von Ihnen manuell gelöscht werden. +UninstalledAndNeedsRestart=Um die Deinstallation von %1 abzuschließen, muss Ihr Computer neu gestartet werden.%n%nMöchten Sie jetzt neu starten? +UninstallDataCorrupted="%1"-Datei ist beschädigt. Entfernen der Anwendung fehlgeschlagen. + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Gemeinsame Datei entfernen? +ConfirmDeleteSharedFile2=Das System zeigt an, dass die folgende gemeinsame Datei von keinem anderen Programm mehr benutzt wird. Möchten Sie diese Datei entfernen lassen?%nSollte es doch noch Programme geben, die diese Datei benutzen und sie wird entfernt, funktionieren diese Programme vielleicht nicht mehr richtig. Wenn Sie unsicher sind, wählen Sie "Nein", um die Datei im System zu belassen. Es schadet Ihrem System nicht, wenn Sie die Datei behalten. +SharedFileNameLabel=Dateiname: +SharedFileLocationLabel=Ordner: +WizardUninstalling=Entfernen (Status) +StatusUninstalling=Entferne %1 ... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Installation von %1. +ShutdownBlockReasonUninstallingApp=Deinstallation von %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 Version %2 +AdditionalIcons=Zusätzliche Symbole: +CreateDesktopIcon=&Desktop-Symbol erstellen +CreateQuickLaunchIcon=Symbol in der Schnellstartleiste erstellen +ProgramOnTheWeb=%1 im Internet +UninstallProgram=%1 entfernen +LaunchProgram=%1 starten +AssocFileExtension=&Registriere %1 mit der %2-Dateierweiterung +AssocingFileExtension=%1 wird mit der %2-Dateierweiterung registriert... +AutoStartProgramGroupDescription=Beginn des Setups: +AutoStartProgram=Starte automatisch %1 +AddonHostProgramNotFound=%1 konnte im ausgewählten Ordner nicht gefunden werden.%n%nMöchten Sie dennoch fortfahren? + diff --git a/Files/Languages/Hebrew.isl b/Files/Languages/Hebrew.isl new file mode 100644 index 00000000..ef52ee16 --- /dev/null +++ b/Files/Languages/Hebrew.isl @@ -0,0 +1,377 @@ +; *** Inno Setup version 6.1.0+ Hebrew messages (s_h(at)enativ.com) *** +; +; https://jrsoftware.org/files/istrans/ +; Translated by s_h (s_h@enativ.com) (c) 2020 +; + + +[LangOptions] +LanguageName=<05E2><05D1><05E8><05D9><05EA> +LanguageID=$040D +LanguageCodePage=1255 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Tahoma +;WelcomeFontSize=11 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 +RightToLeft=yes + +[Messages] + +; *** Application titles +SetupAppTitle= +SetupWindowTitle= - %1 +UninstallAppTitle= +UninstallAppFullTitle= %1 + +; *** Misc. common +InformationTitle= +ConfirmTitle= +ErrorTitle= + +; *** SetupLdr messages +SetupLdrStartupMessage= %1 . ? +LdrCannotCreateTemp= . +LdrCannotExecTemp= . + +; *** Startup error messages +LastErrorMessage=%1.%n%n %2: %3 +SetupFileMissing= %1 . . +SetupFileCorrupt= . . +SetupFileCorruptOrWrongVer= , . . +InvalidParameter= :%n%n%1 +SetupAlreadyRunning= . +WindowsVersionNotSupported= . +WindowsServicePackRequired= %1 %2 . +NotOnThisPlatform= %1. +OnlyOnThisPlatform= %1. +OnlyOnTheseArchitectures= '' :%n%n%1 +WinVersionTooLowError= %1 %2. +WinVersionTooHighError= %1 %2 +AdminPrivilegesRequired= . +PowerUserPrivilegesRequired= , ' ' . +SetupAppRunningError= %1 .%n%n , '' , '' . +UninstallAppRunningError= %1 .%n%n , '' , '' . + +; *** Startup questions +PrivilegesRequiredOverrideTitle= +PrivilegesRequiredOverrideInstruction= +PrivilegesRequiredOverrideText1=%1 ( ), . +PrivilegesRequiredOverrideText2=%1 , ( ). +PrivilegesRequiredOverrideAllUsers= & +PrivilegesRequiredOverrideAllUsersRecommended= & () +PrivilegesRequiredOverrideCurrentUser= & +PrivilegesRequiredOverrideCurrentUserRecommended= & () + +; *** Misc. errors +ErrorCreatingDir= "%1" +ErrorTooManyFilesInDir= "%1" + +; *** Setup common messages +ExitSetupTitle= +ExitSetupMessage= . , .%n%n .%n%n ? +AboutSetupMenuItem=& ... +AboutSetupTitle= +AboutSetupMessage=%1 %2%n%3%n%n%1 :%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< & +ButtonNext=& > +ButtonInstall=& +ButtonOK= +ButtonCancel= +ButtonYes=& +ButtonYesToAll= & +ButtonNo=& +ButtonNoToAll=& +ButtonFinish=& +ButtonBrowse=&... +ButtonWizardBrowse=... +ButtonNewFolder=& + +; *** "Select Language" dialog messages +SelectLanguageTitle= +SelectLanguageLabel= . + +; *** Common wizard text +ClickNext= '' , '' . +BeveledLabel= +BrowseDialogTitle= +BrowseDialogLabel= '' +NewFolderName= + +; *** "Welcome" wizard page +WelcomeLabel1= [name] +WelcomeLabel2= [name/ver] .%n%n . + +; *** "Password" wizard page +WizardPassword= +PasswordLabel1= . +PasswordLabel3= , '' . , . +PasswordEditLabel=&: +IncorrectPassword= . . + +; *** "License Agreement" wizard page +WizardLicense= +LicenseLabel= . +LicenseLabel3= . . +LicenseAccepted= & +LicenseNotAccepted= & + +; *** "Information" wizard pages +WizardInfoBefore= +InfoBeforeLabel= . +InfoBeforeClickLabel= , ''. +WizardInfoAfter= +InfoAfterLabel= +InfoAfterClickLabel= , ''. + +; *** "User Information" wizard page +WizardUserInfo= +UserInfoDesc= . +UserInfoName=& : +UserInfoOrg=&: +UserInfoSerial=& : +UserInfoNameRequired= . + +; *** "Select Destination Location" wizard page +WizardSelectDir= +SelectDirDesc= [name]? +SelectDirLabel3= [name] . +SelectDirBrowseLabel=, ''. , ''. +DiskSpaceGBLabel= [gb] GB . +DiskSpaceMBLabel= [mb] MB . +CannotInstallToNetworkDrive= . +CannotInstallToUNCPath= UNC. +InvalidPath= ; :%n%nC:\APP%n%n UNC :%n%n\\server\share +InvalidDrive= -UNC . . +DiskSpaceWarningTitle= +DiskSpaceWarning= %1KB , %2KB . ? +DirNameTooLong= +InvalidDirName= . +BadDirName32= :%n%n%1 +DirExistsTitle= +DirExists=:%n%n%1%n%n . ? +DirDoesntExistTitle= +DirDoesntExist=:%n%n%1%n%n . ? + +; *** "Select Components" wizard page +WizardSelectComponents= +SelectComponentsDesc= ? +SelectComponentsLabel2= ; . '' . +FullInstallation= +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation= +CustomInstallation= +NoUninstallWarningTitle= +NoUninstallWarning= :%n%n%1%n .%n%n ? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel= [gb] GB . +ComponentsDiskSpaceMBLabel= [mb] MB . + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks= +SelectTasksDesc= ? +SelectTasksLabel2= [name], ''. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup= '' +SelectStartMenuFolderDesc= ? +SelectStartMenuFolderLabel3= ''. +SelectStartMenuFolderBrowseLabel=, ''. , ''. +MustEnterGroupName= . +GroupNameTooLong= +InvalidGroupName= -. +BadGroupName= :%n%n%1 +NoProgramGroupCheck2=& '' + +; *** "Ready to Install" wizard page +WizardReady= +ReadyLabel1= [name] . +ReadyLabel2a= '' , '' . +ReadyLabel2b= '' +ReadyMemoUserInfo= : +ReadyMemoDir= : +ReadyMemoType= : +ReadyMemoComponents= : +ReadyMemoGroup= '': +ReadyMemoTasks= : + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel= ... +ButtonStopDownload=& +StopDownload= ? +ErrorDownloadAborted= +ErrorDownloadFailed= : %1 %2 +ErrorDownloadSizeFailed= : %1 %2 +ErrorFileHash1= : %2 +ErrorFileHash2= : %2, %2 +ErrorProgress= : %1 %1 +ErrorFileSize= : %1, %1 + +; *** "Preparing to Install" wizard page +WizardPreparing= +PreparingDesc= [name] . +PreviousInstallNotCompleted=/ . .%n%n , [name]. +CannotContinue= . '' . +ApplicationsFound= . . +ApplicationsFound2= . . , . +CloseApplications=& +DontCloseApplications=& +ErrorCloseApplications= . . +PrepareToInstallNeedsRestart= . , [name].%n%n ? + +; *** "Installing" wizard page +WizardInstalling= +InstallingLabel= [name] . + +; *** "Setup Completed" wizard page +FinishedHeadingLabel= [name] +FinishedLabelNoIcons= [name] . +FinishedLabel= [name] . . +ClickFinish= '' . +FinishedRestartLabel= [name], . ? +FinishedRestartMessage= [name], .%n%n ? +ShowReadmeCheck=, -' ' +YesRadio=&, +NoRadio=&, +; used for example as 'Run MyProg.exe' +RunEntryExec= %1 +; used for example as 'View Readme.txt' +RunEntryShellExec= %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle= +SelectDiskLabel2= ' %1 ''.%n%n , ''. +PathLabel=&: +FileNotInDir2= "%1" "%2". . +SelectDirectoryLabel= . + +; *** Installation phase messages +SetupAborted= .%n%n . +AbortRetryIgnoreSelectAction= +AbortRetryIgnoreRetry=& +AbortRetryIgnoreIgnore=& +AbortRetryIgnoreCancel= + +; *** Installation status messages +StatusClosingApplications= ... +StatusCreateDirs= ... +StatusExtractFiles= ... +StatusCreateIcons= ... +StatusCreateIniEntries= INI... +StatusCreateRegistryEntries= ... +StatusRegisterFiles= ... +StatusSavingUninstall= ... +StatusRunProgram= ... +StatusRestartingApplications= ... +StatusRollback= ... + +; *** Misc. errors +ErrorInternal2= : %1 +ErrorFunctionFailedNoCode=%1 +ErrorFunctionFailed=%1 ; %2 +ErrorFunctionFailedWithMessage=%1 ; %2.%n%3 +ErrorExecutingProgram= :%n%1 + +; *** Registry errors +ErrorRegOpenKey= :%n%1\%2 +ErrorRegCreateKey= :%n%1\%2 +ErrorRegWriteKey= :%n%1\%2 + +; *** INI errors +ErrorIniEntry= INI "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=& ( ) +FileAbortRetryIgnoreIgnoreNotRecommended=& ( ) +SourceIsCorrupted= +SourceDoesntExist= "%1" +ExistingFileReadOnly2= . +ExistingFileReadOnlyRetry=& +ExistingFileReadOnlyKeepExisting=& +ErrorReadingExistingDest= : +FileExistsSelectAction= +FileExists2= . +FileExistsOverwriteExisting=& +FileExistsKeepExisting=& +FileExistsOverwriteOrKeepAll=& +ExistingFileNewerSelectAction= +ExistingFileNewer2= +ExistingFileNewerOverwriteExisting=& +ExistingFileNewerKeepExisting=& () +ExistingFileNewerOverwriteOrKeepAll=& +ErrorChangingAttr= : +ErrorCreatingTemp= : +ErrorReadingSource= : +ErrorCopying= : +ErrorReplacingExistingFile= : +ErrorRestartReplace= -RestartReplace: +ErrorRenamingTemp= : +ErrorRegisterServer= DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 %1 +ErrorRegisterTypeLib= : %1 + +; *** Uninstall display name markings +UninstallDisplayNameMark=%1 (%2) +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers= +UninstallDisplayNameMarkCurrentUser= + +; *** Post-installation errors +ErrorOpeningReadme= ' '. +ErrorRestartingComputer= . . + +; *** Uninstaller messages +UninstallNotFound= "%1" . . +UninstallOpenError= "%1". . +UninstallUnsupportedVer= "%1" " . +UninstallUnknownEntry= (%1) . +ConfirmUninstall= %1 ? +UninstallOnlyOnWin64= '' 64-. +OnlyAdminCanUninstall= . +UninstallStatusLabel= %1 . +UninstalledAll=%1 . +UninstalledMost= %1 .%n%n " , . +UninstalledAndNeedsRestart= %1, .%n%n ? +UninstallDataCorrupted= "%1" . + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle= ? +ConfirmDeleteSharedFile2= . ?%n%n , . , ''. . +SharedFileNameLabel= : +SharedFileLocationLabel=: +WizardUninstalling= +StatusUninstalling= %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp= %1. +ShutdownBlockReasonUninstallingApp= %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 %2 +AdditionalIcons= : +CreateDesktopIcon= & +CreateQuickLaunchIcon= +ProgramOnTheWeb=%1 +UninstallProgram= %1 +LaunchProgram= %1 +AssocFileExtension=& %1 %2 +AssocingFileExtension= %1 %2 +AutoStartProgramGroupDescription= : +AutoStartProgram= %1 +AddonHostProgramNotFound=%1 .%n%n ? \ No newline at end of file diff --git a/Files/Languages/Hungarian.isl b/Files/Languages/Hungarian.isl new file mode 100644 index 00000000..b3f8b4b4 --- /dev/null +++ b/Files/Languages/Hungarian.isl @@ -0,0 +1,386 @@ +; *** Inno Setup version 6.1.0+ Hungarian messages *** +; Based on the translation of Kornél Pál, kornelpal@gmail.com +; István Szabó, E-mail: istvanszabo890629@gmail.com +; +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Magyar +LanguageID=$040E +LanguageCodePage=1250 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial CE +;TitleFontSize=29 +;CopyrightFontName=Arial CE +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Telepítő +SetupWindowTitle=%1 - Telepítő +UninstallAppTitle=Eltávolító +UninstallAppFullTitle=%1 - Eltávolító + +; *** Misc. common +InformationTitle=Információk +ConfirmTitle=Megerősít +ErrorTitle=Hiba + +; *** SetupLdr messages +SetupLdrStartupMessage=%1 telepítve lesz. Szeretné folytatni? +LdrCannotCreateTemp=Átmeneti fájl létrehozása nem lehetséges. A telepítés megszakítva +LdrCannotExecTemp=Fájl futattása nem lehetséges az átmeneti könyvtárban. A telepítés megszakítva +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nHiba %2: %3 +SetupFileMissing=A(z) %1 fájl hiányzik a telepítő könyvtárából. Kérem hárítsa el a problémát, vagy szerezzen be egy másik példányt a programból! +SetupFileCorrupt=A telepítési fájlok sérültek. Kérem, szerezzen be új másolatot a programból! +SetupFileCorruptOrWrongVer=A telepítési fájlok sérültek, vagy inkompatibilisek a telepítő ezen verziójával. Hárítsa el a problémát, vagy szerezzen be egy másik példányt a programból! +InvalidParameter=A parancssorba átadott paraméter érvénytelen:%n%n%1 +SetupAlreadyRunning=A Telepítő már fut. +WindowsVersionNotSupported=A program nem támogatja a Windows ezen verzióját. +WindowsServicePackRequired=A program futtatásához %1 Service Pack %2 vagy újabb szükséges. +NotOnThisPlatform=Ez a program nem futtatható %1 alatt. +OnlyOnThisPlatform=Ezt a programot %1 alatt kell futtatni. +OnlyOnTheseArchitectures=A program kizárólag a következő processzor architektúrákhoz tervezett Windows-on telepíthető:%n%n%1 +WinVersionTooLowError=A program futtatásához %1 %2 verziója vagy későbbi szükséges. +WinVersionTooHighError=Ez a program nem telepíthető %1 %2 vagy későbbire. +AdminPrivilegesRequired=Csak rendszergazdai módban telepíthető ez a program. +PowerUserPrivilegesRequired=Csak rendszergazdaként vagy kiemelt felhasználóként telepíthető ez a program. +SetupAppRunningError=A telepítő úgy észlelte %1 jelenleg fut.%n%nZárja be az összes példányt, majd kattintson az 'OK'-ra a folytatáshoz, vagy a 'Mégse'-re a kilépéshez. +UninstallAppRunningError=Az eltávolító úgy észlelte %1 jelenleg fut.%n%nZárja be az összes példányt, majd kattintson az 'OK'-ra a folytatáshoz, vagy a 'Mégse'-re a kilépéshez. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Telepítési mód kiválasztása +PrivilegesRequiredOverrideInstruction=Válasszon telepítési módot +PrivilegesRequiredOverrideText1=%1 telepíthető az összes felhasználónak (rendszergazdai jogok szükségesek), vagy csak magának. +PrivilegesRequiredOverrideText2=%1 csak magának telepíthető, vagy az összes felhasználónak (rendszergazdai jogok szükségesek). +PrivilegesRequiredOverrideAllUsers=Telepítés &mindenkinek +PrivilegesRequiredOverrideAllUsersRecommended=Telepítés &mindenkinek (ajánlott) +PrivilegesRequiredOverrideCurrentUser=Telepítés csak &nekem +PrivilegesRequiredOverrideCurrentUserRecommended=Telepítés csak &nekem (ajánlott) + +; *** Misc. errors +ErrorCreatingDir=A Telepítő nem tudta létrehozni a(z) "%1" könyvtárat +ErrorTooManyFilesInDir=Nem hozható létre fájl a(z) "%1" könyvtárban, mert az már túl sok fájlt tartalmaz + +; *** Setup common messages +ExitSetupTitle=Kilépés a telepítőből +ExitSetupMessage=A telepítés még folyamatban van. Ha most kilép, a program nem kerül telepítésre.%n%nMásik alkalommal is futtatható a telepítés befejezéséhez%n%nKilép a telepítőből? +AboutSetupMenuItem=&Névjegy... +AboutSetupTitle=Telepítő névjegye +AboutSetupMessage=%1 %2 verzió%n%3%n%nAz %1 honlapja:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< &Vissza +ButtonNext=&Tovább > +ButtonInstall=&Telepít +ButtonOK=OK +ButtonCancel=Mégse +ButtonYes=&Igen +ButtonYesToAll=&Mindet +ButtonNo=&Nem +ButtonNoToAll=&Egyiket se +ButtonFinish=&Befejezés +ButtonBrowse=&Tallózás... +ButtonWizardBrowse=T&allózás... +ButtonNewFolder=Új &könyvtár + +; *** "Select Language" dialog messages +SelectLanguageTitle=Telepítő nyelvi beállítás +SelectLanguageLabel=Válassza ki a telepítés alatt használt nyelvet. + +; *** Common wizard text +ClickNext=A folytatáshoz kattintson a 'Tovább'-ra, a kilépéshez a 'Mégse'-re. +BeveledLabel= +BrowseDialogTitle=Válasszon könyvtárt +BrowseDialogLabel=Válasszon egy könyvtárat az alábbi listából, majd kattintson az 'OK'-ra. +NewFolderName=Új könyvtár + +; *** "Welcome" wizard page +WelcomeLabel1=Üdvözli a(z) [name] Telepítővarázslója. +WelcomeLabel2=A(z) [name/ver] telepítésre kerül a számítógépén.%n%nAjánlott minden, egyéb futó alkalmazás bezárása a folytatás előtt. + +; *** "Password" wizard page +WizardPassword=Jelszó +PasswordLabel1=Ez a telepítés jelszóval védett. +PasswordLabel3=Kérem adja meg a jelszót, majd kattintson a 'Tovább'-ra. A jelszavak kis- és nagy betű érzékenyek lehetnek. +PasswordEditLabel=&Jelszó: +IncorrectPassword=Az ön által megadott jelszó helytelen. Próbálja újra. + +; *** "License Agreement" wizard page +WizardLicense=Licencszerződés +LicenseLabel=Olvassa el figyelmesen az információkat folytatás előtt. +LicenseLabel3=Kérem, olvassa el az alábbi licencszerződést. A telepítés folytatásához, el kell fogadnia a szerződést. +LicenseAccepted=&Elfogadom a szerződést +LicenseNotAccepted=&Nem fogadom el a szerződést + +; *** "Information" wizard pages +WizardInfoBefore=Információk +InfoBeforeLabel=Olvassa el a következő fontos információkat a folytatás előtt. +InfoBeforeClickLabel=Ha készen áll, kattintson a 'Tovább'-ra. +WizardInfoAfter=Információk +InfoAfterLabel=Olvassa el a következő fontos információkat a folytatás előtt. +InfoAfterClickLabel=Ha készen áll, kattintson a 'Tovább'-ra. + +; *** "User Information" wizard page +WizardUserInfo=Felhasználó adatai +UserInfoDesc=Kérem, adja meg az adatait! +UserInfoName=&Felhasználónév: +UserInfoOrg=&Szervezet: +UserInfoSerial=&Sorozatszám: +UserInfoNameRequired=Meg kell adnia egy nevet! + +; *** "Select Destination Location" wizard page +WizardSelectDir=Válasszon célkönyvtárat +SelectDirDesc=Hova települjön a(z) [name]? +SelectDirLabel3=A(z) [name] az alábbi könyvtárba lesz telepítve. +SelectDirBrowseLabel=A folytatáshoz, kattintson a 'Tovább'-ra. Ha másik könyvtárat választana, kattintson a 'Tallózás'-ra. +DiskSpaceGBLabel=Legalább [gb] GB szabad területre van szükség. +DiskSpaceMBLabel=Legalább [mb] MB szabad területre van szükség. +CannotInstallToNetworkDrive=A Telepítő nem tud hálózati meghajtóra telepíteni. +CannotInstallToUNCPath=A Telepítő nem tud hálózati UNC elérési útra telepíteni. +InvalidPath=Teljes útvonalat adjon meg, a meghajtó betűjelével; például:%n%nC:\Alkalmazás%n%nvagy egy hálózati útvonalat a következő alakban:%n%n\\kiszolgáló\megosztás +InvalidDrive=A kiválasztott meghajtó vagy hálózati megosztás nem létezik vagy nem elérhető. Válasszon egy másikat. +DiskSpaceWarningTitle=Nincs elég szabad terület +DiskSpaceWarning=A Telepítőnek legalább %1 KB szabad lemezterületre van szüksége, viszont a kiválasztott meghajtón csupán %2 KB áll rendelkezésre.%n%nMindenképpen folytatja? +DirNameTooLong=A könyvtár neve vagy az útvonal túl hosszú. +InvalidDirName=A könyvtár neve érvénytelen. +BadDirName32=A könyvtárak nevei ezen karakterek egyikét sem tartalmazhatják:%n%n%1 +DirExistsTitle=A könyvtár már létezik +DirExists=A könyvtár:%n%n%1%n%nmár létezik. Mindenképp ide akar telepíteni? +DirDoesntExistTitle=A könyvtár nem létezik +DirDoesntExist=A könyvtár:%n%n%1%n%nnem létezik. Szeretné létrehozni? + +; *** "Select Components" wizard page +WizardSelectComponents=Összetevők kiválasztása +SelectComponentsDesc=Mely összetevők kerüljenek telepítésre? +SelectComponentsLabel2=Jelölje ki a telepítendő összetevőket; törölje a telepíteni nem kívánt összetevőket. Kattintson a 'Tovább'-ra, ha készen áll a folytatásra. +FullInstallation=Teljes telepítés +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Szokásos telepítés +CustomInstallation=Egyéni telepítés +NoUninstallWarningTitle=Létező összetevő +NoUninstallWarning=A telepítő úgy találta, hogy a következő összetevők már telepítve vannak a számítógépre:%n%n%1%n%nEzen összetevők kijelölésének törlése, nem távolítja el azokat a számítógépről.%n%nMindenképpen folytatja? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=A jelenlegi kijelölés legalább [gb] GB lemezterületet igényel. +ComponentsDiskSpaceMBLabel=A jelenlegi kijelölés legalább [mb] MB lemezterületet igényel. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=További feladatok +SelectTasksDesc=Mely kiegészítő feladatok kerüljenek végrehajtásra? +SelectTasksLabel2=Jelölje ki, mely kiegészítő feladatokat hajtsa végre a Telepítő a(z) [name] telepítése során, majd kattintson a 'Tovább'-ra. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Start Menü könyvtára +SelectStartMenuFolderDesc=Hova helyezze a Telepítő a program parancsikonjait? +SelectStartMenuFolderLabel3=A Telepítő a program parancsikonjait a Start menü következő mappájában fogja létrehozni. +SelectStartMenuFolderBrowseLabel=A folytatáshoz kattintson a 'Tovább'-ra. Ha másik mappát választana, kattintson a 'Tallózás'-ra. +MustEnterGroupName=Meg kell adnia egy mappanevet. +GroupNameTooLong=A könyvtár neve vagy az útvonal túl hosszú. +InvalidGroupName=A könyvtár neve érvénytelen. +BadGroupName=A könyvtárak nevei ezen karakterek egyikét sem tartalmazhatják:%n%n%1 +NoProgramGroupCheck2=&Ne hozzon létre mappát a Start menüben + +; *** "Ready to Install" wizard page +WizardReady=Készen állunk a telepítésre +ReadyLabel1=A Telepítő készen áll, a(z) [name] számítógépre telepítéshez. +ReadyLabel2a=Kattintson a 'Telepítés'-re a folytatáshoz, vagy a "Vissza"-ra a beállítások áttekintéséhez vagy megváltoztatásához. +ReadyLabel2b=Kattintson a 'Telepítés'-re a folytatáshoz. +ReadyMemoUserInfo=Felhasználó adatai: +ReadyMemoDir=Telepítés célkönyvtára: +ReadyMemoType=Telepítés típusa: +ReadyMemoComponents=Választott összetevők: +ReadyMemoGroup=Start menü mappája: +ReadyMemoTasks=Kiegészítő feladatok: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=További fájlok letöltése... +ButtonStopDownload=&Letöltés megállítása +StopDownload=Biztos, hogy leakarja állítani a letöltést? +ErrorDownloadAborted=Letöltés megszakítva +ErrorDownloadFailed=A letöltés meghiúsult: %1 %2 +ErrorDownloadSizeFailed=Hiba a fájlméret lekérése során: %1 %2 +ErrorFileHash1=Fájl Hash (hasítóérték) hiba: %1 +ErrorFileHash2=Érvénytelen hash fájl, várt érték: %1, számított: %2 +ErrorProgress=Érvénytelen folyamat: %1 : %2 +ErrorFileSize=Érvénytelen fájlméret, várt méret %1, számított: %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Felkészülés a telepítésre +PreparingDesc=A Telepítő felkészül a(z) [name] számítógépre történő telepítéshez. +PreviousInstallNotCompleted=Egy korábbi program telepítése/eltávolítása nem fejeződött be. Újra kell indítania a számítógépét a másik telepítés befejezéséhez.%n%nA számítógépe újraindítása után ismét futtassa a Telepítőt a(z) [name] telepítésének befejezéséhez. +CannotContinue=A telepítés nem folytatható. A kilépéshez kattintson a 'Mégse'-re. +ApplicationsFound=A következő alkalmazások olyan fájlokat használnak, amelyeket a Telepítőnek frissíteni kell. Ajánlott, hogy engedélyezze a Telepítőnek ezen alkalmazások automatikus bezárását. +ApplicationsFound2=A következő alkalmazások olyan fájlokat használnak, amelyeket a Telepítőnek frissíteni kell. Ajánlott, hogy engedélyezze a Telepítőnek ezen alkalmazások automatikus bezárását. A telepítés befejezése után, a Telepítő megkísérli az alkalmazások újraindítását. +CloseApplications=&Alkalmazások automatikus bezárása +DontCloseApplications=&Ne zárja be az alkalmazásokat +ErrorCloseApplications=A Telepítő nem tudott minden alkalmazást automatikusan bezárni. A folytatás előtt ajánlott minden, a Telepítő által frissítendő fájlokat használó alkalmazást bezárni. +PrepareToInstallNeedsRestart=A telepítőnek most újra kell indítania a számítógépet. Az újraindítás után, futtassa újból ezt a telepítőt, hogy befejezze a [name] telepítését.%n%nÚjra szeretné most indítani a gépet? + +; *** "Installing" wizard page +WizardInstalling=Telepítés +InstallingLabel=Kérem várjon, amíg a(z) [name] telepítése zajlik. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=A(z) [name] telepítésének befejezése +FinishedLabelNoIcons=A Telepítő végzett a(z) [name] telepítésével. +FinishedLabel=A Telepítő végzett a(z) [name] telepítésével. Az alkalmazást a létrehozott ikonok kiválasztásával indíthatja. +ClickFinish=Kattintson a 'Befejezés'-re a kilépéshez. +FinishedRestartLabel=A(z) [name] telepítésének befejezéséhez újra kell indítani a számítógépet. Újraindítja most? +FinishedRestartMessage=A(z) [name] telepítésének befejezéséhez, a Telepítőnek újra kell indítani a számítógépet.%n%nÚjraindítja most? +ShowReadmeCheck=Igen, szeretném elolvasni a FONTOS fájlt +YesRadio=&Igen, újraindítás most +NoRadio=&Nem, később indítom újra +; used for example as 'Run MyProg.exe' +RunEntryExec=%1 futtatása +; used for example as 'View Readme.txt' +RunEntryShellExec=%1 megtekintése + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=A Telepítőnek szüksége van a következő lemezre +SelectDiskLabel2=Helyezze be a(z) %1. lemezt és kattintson az 'OK'-ra.%n%nHa a fájlok a lemez egy a megjelenítettől különböző mappájában találhatók, írja be a helyes útvonalat vagy kattintson a 'Tallózás'-ra. +PathLabel=Ú&tvonal: +FileNotInDir2=A(z) "%1" fájl nem található a következő helyen: "%2". Helyezze be a megfelelő lemezt vagy válasszon egy másik mappát. +SelectDirectoryLabel=Adja meg a következő lemez helyét. + +; *** Installation phase messages +SetupAborted=A telepítés nem fejeződött be.%n%nHárítsa el a hibát és futtassa újból a Telepítőt. +AbortRetryIgnoreSelectAction=Válasszon műveletet +AbortRetryIgnoreRetry=&Újra +AbortRetryIgnoreIgnore=&Hiba elvetése és folytatás +AbortRetryIgnoreCancel=Telepítés megszakítása + +; *** Installation status messages +StatusClosingApplications=Alkalmazások bezárása... +StatusCreateDirs=Könyvtárak létrehozása... +StatusExtractFiles=Fájlok kibontása... +StatusCreateIcons=Parancsikonok létrehozása... +StatusCreateIniEntries=INI bejegyzések létrehozása... +StatusCreateRegistryEntries=Rendszerleíró bejegyzések létrehozása... +StatusRegisterFiles=Fájlok regisztrálása... +StatusSavingUninstall=Eltávolító információk mentése... +StatusRunProgram=Telepítés befejezése... +StatusRestartingApplications=Alkalmazások újraindítása... +StatusRollback=Változtatások visszavonása... + +; *** Misc. errors +ErrorInternal2=Belső hiba: %1 +ErrorFunctionFailedNoCode=Sikertelen %1 +ErrorFunctionFailed=Sikertelen %1; kód: %2 +ErrorFunctionFailedWithMessage=Sikertelen %1; kód: %2.%n%3 +ErrorExecutingProgram=Nem hajtható végre a fájl:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Nem nyitható meg a rendszerleíró kulcs:%n%1\%2 +ErrorRegCreateKey=Nem hozható létre a rendszerleíró kulcs:%n%1\%2 +ErrorRegWriteKey=Nem módosítható a rendszerleíró kulcs:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Hiba lépett fel az INI bejegyzés során, ebben a fájlban: "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Fájl kihagyása (nem ajánlott) +FileAbortRetryIgnoreIgnoreNotRecommended=&Hiba elvetése és folytatás (nem ajánlott) +SourceIsCorrupted=A forrásfájl megsérült +SourceDoesntExist=A(z) "%1" forrásfájl nem létezik +ExistingFileReadOnly2=A fájl csak olvashatóként van jelölve, ezért nem cserélhető le. +ExistingFileReadOnlyRetry=Csak &olvasható tulajdonság eltávolítása és újra próbálkozás +ExistingFileReadOnlyKeepExisting=&Létező fájl megtartása +ErrorReadingExistingDest=Hiba lépett fel a fájl olvasása közben: +FileExistsSelectAction=Mit tegyünk? +FileExists2=A fájl már létezik. +FileExistsOverwriteExisting=A &létező fájl felülírása +FileExistsKeepExisting=A &már létező fájl megtartása +FileExistsOverwriteOrKeepAll=&Tegyük ezt, a következő fájlütközések esetén is +ExistingFileNewerSelectAction=Mit kíván tenni? +ExistingFileNewer2=A létező fájl újabb a telepítésre kerülőnél +ExistingFileNewerOverwriteExisting=A &létező fájl felülírása +ExistingFileNewerKeepExisting=&Tartsuk meg a létező fájlt (ajánlott) +ExistingFileNewerOverwriteOrKeepAll=&Tegyük ezt, a következő fájlütközések esetén is +ErrorChangingAttr=Hiba lépett fel a fájl attribútumának módosítása közben: +ErrorCreatingTemp=Hiba lépett fel a fájl telepítési könyvtárban történő létrehozása közben: +ErrorReadingSource=Hiba lépett fel a forrásfájl olvasása közben: +ErrorCopying=Hiba lépett fel a fájl másolása közben: +ErrorReplacingExistingFile=Hiba lépett fel a létező fájl cseréje közben: +ErrorRestartReplace=A fájl cseréje az újraindítás után sikertelen volt: +ErrorRenamingTemp=Hiba lépett fel fájl telepítési könyvtárban történő átnevezése közben: +ErrorRegisterServer=Nem lehet regisztrálni a DLL-t/OCX-et: %1 +ErrorRegSvr32Failed=Sikertelen RegSvr32. A visszaadott kód: %1 +ErrorRegisterTypeLib=Nem lehet regisztrálni a típustárat: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=Minden felhasználó +UninstallDisplayNameMarkCurrentUser=Jelenlegi felhasználó + +; *** Post-installation errors +ErrorOpeningReadme=Hiba lépett fel a FONTOS fájl megnyitása közben. +ErrorRestartingComputer=A Telepítő nem tudta újraindítani a számítógépet. Indítsa újra kézileg. + +; *** Uninstaller messages +UninstallNotFound=A(z) "%1" fájl nem létezik. Nem távolítható el. +UninstallOpenError=A(z) "%1" fájl nem nyitható meg. Nem távolítható el +UninstallUnsupportedVer=A(z) "%1" eltávolítási naplófájl formátumát nem tudja felismerni az eltávolító jelen verziója. Az eltávolítás nem folytatható +UninstallUnknownEntry=Egy ismeretlen bejegyzés (%1) található az eltávolítási naplófájlban +ConfirmUninstall=Biztosan el kívánja távolítani a(z) %1 programot és minden összetevőjét? +UninstallOnlyOnWin64=Ezt a telepítést csak 64-bites Windows operációs rendszerről lehet eltávolítani. +OnlyAdminCanUninstall=Ezt a telepítést csak adminisztrációs jogokkal rendelkező felhasználó távolíthatja el. +UninstallStatusLabel=Legyen türelemmel, amíg a(z) %1 számítógépéről történő eltávolítása befejeződik. +UninstalledAll=A(z) %1 sikeresen el lett távolítva a számítógépről. +UninstalledMost=A(z) %1 eltávolítása befejeződött.%n%nNéhány elemet nem lehetettet eltávolítani. Törölje kézileg. +UninstalledAndNeedsRestart=A(z) %1 eltávolításának befejezéséhez újra kell indítania a számítógépét.%n%nÚjraindítja most? +UninstallDataCorrupted=A(z) "%1" fájl sérült. Nem távolítható el. + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Törli a megosztott fájlt? +ConfirmDeleteSharedFile2=A rendszer azt jelzi, hogy a következő megosztott fájlra már nincs szüksége egyetlen programnak sem. Eltávolítja a megosztott fájlt?%n%nHa más programok még mindig használják a megosztott fájlt, akkor az eltávolítása után lehet, hogy nem fognak megfelelően működni. Ha bizonytalan, válassza a Nemet. A fájl megtartása nem okoz problémát a rendszerben. +SharedFileNameLabel=Fájlnév: +SharedFileLocationLabel=Helye: +WizardUninstalling=Eltávolítás állapota +StatusUninstalling=%1 eltávolítása... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=%1 telepítése. +ShutdownBlockReasonUninstallingApp=%1 eltávolítása. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1, verzió: %2 +AdditionalIcons=További parancsikonok: +CreateDesktopIcon=&Asztali ikon létrehozása +CreateQuickLaunchIcon=&Gyorsindító parancsikon létrehozása +ProgramOnTheWeb=%1 az interneten +UninstallProgram=Eltávolítás - %1 +LaunchProgram=Indítás %1 +AssocFileExtension=A(z) %1 &társítása a(z) %2 fájlkiterjesztéssel +AssocingFileExtension=A(z) %1 társítása a(z) %2 fájlkiterjesztéssel... +AutoStartProgramGroupDescription=Indítópult: +AutoStartProgram=%1 automatikus indítása +AddonHostProgramNotFound=A(z) %1 nem található a kiválasztott könyvtárban.%n%nMindenképpen folytatja? diff --git a/Files/Languages/Icelandic.isl b/Files/Languages/Icelandic.isl new file mode 100644 index 00000000..395a7576 --- /dev/null +++ b/Files/Languages/Icelandic.isl @@ -0,0 +1,361 @@ +; *** Inno Setup version 6.1.0+ Icelandic messages *** +; +; Translator: Stefán Örvar Sigmundsson, eMedia Intellect +; Contact: emi@emi.is +; Date: 2020-07-25 + +[LangOptions] + +LanguageName=<00CD>slenska +LanguageID=$040F +LanguageCodePage=1252 + +[Messages] + +; *** Application titles +SetupAppTitle=Uppsetning +SetupWindowTitle=Uppsetning - %1 +UninstallAppTitle=Niðurtaka +UninstallAppFullTitle=%1-niðurtaka + +; *** Misc. common +InformationTitle=Upplýsingar +ConfirmTitle=Staðfesta +ErrorTitle=Villa + +; *** SetupLdr messages +SetupLdrStartupMessage=Þetta mun uppsetja %1. Vilt þú halda áfram? +LdrCannotCreateTemp=Ófært um að skapa tímabundna skrá. Uppsetningu hætt +LdrCannotExecTemp=Ófært um að keyra skrá í tímabundna skráasafninu. Uppsetningu hætt +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nVilla %2: %3 +SetupFileMissing=Skrána %1 vantar úr uppsetningarskráasafninu. Vinsamlega leiðréttu vandamálið eða fáðu nýtt afrita af forritinu. +SetupFileCorrupt=Uppsetningarskrárnar eru spilltar. Vinsamlega fáðu nýtt afrita af forritinu. +SetupFileCorruptOrWrongVer=Uppsetningarskrárnar eru spilltar eða eru ósamrýmanlegar við þessa útgáfu af Uppsetningu. Vinsamlega leiðréttu vandamálið eða fáðu nýtt afrit af forritinu. +InvalidParameter=Ógild færibreyta var afhend á skipanalínunni:%n%n%1 +SetupAlreadyRunning=Uppsetning er nú þegar keyrandi. +WindowsVersionNotSupported=Þetta forrit styður ekki útgáfuna af Windows sem tölvan þín er keyrandi. +WindowsServicePackRequired=Þetta forrit krefst Þjónustupakka %2 eða síðari. +NotOnThisPlatform=Þetta forrit mun ekki keyra á %1. +OnlyOnThisPlatform=Þetta forrit verður að keyra á %1. +OnlyOnTheseArchitectures=Þetta forrit er einungis hægt að uppsetja á útgáfur af Windows hannaðar fyrir eftirfarandi gjörvahannanir:%n%n%1 +WinVersionTooLowError=Þetta forrit krefst %1-útgáfu %2 eða síðari. +WinVersionTooHighError=Þetta forrit er ekki hægt að uppsetja á %1-útgáfu %2 eða síðari. +AdminPrivilegesRequired=Þú verður að vera innskráð(ur) sem stjórnandi meðan þú uppsetur þetta forrit. +PowerUserPrivilegesRequired=Þú verður að vera innskráð(ur) sem stjórnandi eða sem meðlimur Power Users-hópsins meðan þú uppsetur þetta forrit. +SetupAppRunningError=Uppsetning hefur greint að %1 er eins og er keyrandi.%n%nVinsamlega lokaðu öllum tilvikum þess núna, smelltu síðan á Í lagi til að halda áfram eða Hætta við til að hætta. +UninstallAppRunningError=Niðurtaka hefur greint að %1 er eins og er keyrandi.%n%nVinsamlega lokaðu öllum tilvikum þess núna, smelltu síðan á Í lagi til að halda áfram eða Hætta við til að hætta. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Veldu uppsetningarham +PrivilegesRequiredOverrideInstruction=Veldu uppsetningarham +PrivilegesRequiredOverrideText1=%1 er hægt að setja upp fyrir alla notendur (krefst stjórnandaréttinda) eða fyrir þig einungis. +PrivilegesRequiredOverrideText2=%1 er hægt að setja upp fyrir þig einungis eða fyrir alla notendur (krefst stjórnandaréttinda). +PrivilegesRequiredOverrideAllUsers=Uppsetja fyrir &alla notendur +PrivilegesRequiredOverrideAllUsersRecommended=Uppsetja fyrir &alla notendur (ráðlagt) +PrivilegesRequiredOverrideCurrentUser=Uppsetja fyrir &mig einungis +PrivilegesRequiredOverrideCurrentUserRecommended=Uppsetja fyrir &mig einungis (ráðlagt) + +; *** Misc. errors +ErrorCreatingDir=Uppsetningunni var ófært um að skapa skráasafnið „%1“ +ErrorTooManyFilesInDir=Ófært um að skapa skrá í skráasafninu „%1“ vegna þess það inniheldur of margar skrár + +; *** Setup common messages +ExitSetupTitle=Hætta í Uppsetningu +ExitSetupMessage=Uppsetningu er ekki lokið. Ef þú hættir núna mun forritið ekki vera uppsett.%n%nÞú getur keyrt Uppsetningu aftur síðar til að ljúka uppsetningunni.%n%nHætta í Uppsetningu? +AboutSetupMenuItem=&Um Uppsetningu… +AboutSetupTitle=Um Uppsetningu +AboutSetupMessage=%1 útgáfa %2%n%3%n%n%1 heimasíðu:%n%4 +AboutSetupNote= +TranslatorNote=Stefán Örvar Sigmundsson, eMedia Intellect + +; *** Buttons +ButtonBack=< &Fyrri +ButtonNext=&Næst > +ButtonInstall=&Uppsetja +ButtonOK=Í lagi +ButtonCancel=Hætta við +ButtonYes=&Já +ButtonYesToAll=Já við &öllu +ButtonNo=&Nei +ButtonNoToAll=&Nei við öllu +ButtonFinish=&Ljúka +ButtonBrowse=&Vafra… +ButtonWizardBrowse=&Vafra… +ButtonNewFolder=&Skapa nýja möppu + +; *** "Select Language" dialog messages +SelectLanguageTitle=Veldu tungumál Uppsetningar +SelectLanguageLabel=Veldu tungumálið sem nota á við uppsetninguna. + +; *** Common wizard text +ClickNext=Smelltu á Næst til að halda áfram eða Hætta við til að hætta Uppsetningu. +BeveledLabel= +BrowseDialogTitle=Vafra eftir möppu +BrowseDialogLabel=Veldu möppu í listanum fyrir neðan, smelltu síðan á Í lagi. +NewFolderName=Ný mappa + +; *** "Welcome" wizard page +WelcomeLabel1=Velkomin(n) í [name]-uppsetningaraðstoðarann +WelcomeLabel2=Þetta mun uppsetja [name/ver] á þína tölvu.%n%nÞað er ráðlagt að þú lokir öllum öðrum hugbúnaði áður en haldið er áfram. + +; *** "Password" wizard page +WizardPassword=Aðgangsorð +PasswordLabel1=Þessi uppsetning er aðgangsorðsvarin. +PasswordLabel3=Vinsamlega veitu aðgangsorðið, smelltu síðan á Næst til að halda áfram. Aðgangsorð eru hástafanæm. +PasswordEditLabel=&Aðgangsorð: +IncorrectPassword=Aðgangsorðið sem þú innslóst er ekki rétt. Vinsamlega reyndu aftur. + +; *** "License Agreement" wizard page +WizardLicense=Leyfissamningur +LicenseLabel=Vinsamlega lestu hinar eftirfarandi mikilvægu upplýsingar áður en haldið er áfram. +LicenseLabel3=Vinsamlega lestu eftirfarandi leyfissamning. Þú verður að samþykkja skilmála samningsins áður en haldið er áfram með uppsetninguna. +LicenseAccepted=Ég &samþykki samninginn +LicenseNotAccepted=Ég samþykki &ekki samninginn + +; *** "Information" wizard pages +WizardInfoBefore=Upplýsingar +InfoBeforeLabel=Vinsamlega lestu hinar eftirfarandi mikilvægu upplýsingar áður en haldið er áfram. +InfoBeforeClickLabel=Þegar þú ert tilbúin(n) til að halda áfram með Uppsetninguna, smelltu á Næst. +WizardInfoAfter=Upplýsingar +InfoAfterLabel=Vinsamlega lestu hinar eftirfarandi mikilvægu upplýsingar áður en haldið er áfram. +InfoAfterClickLabel=Þegar þú ert tilbúin(n) til að halda áfram með Uppsetninguna, smelltu á Næst. + +; *** "User Information" wizard page +WizardUserInfo=Notandaupplýsingar +UserInfoDesc=Vinsamlega innsláðu upplýsingarnar þínar. +UserInfoName=&Notandanafn: +UserInfoOrg=&Stofnun: +UserInfoSerial=&Raðnúmer: +UserInfoNameRequired=Þú verður að innslá nafn. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Velja staðsetningu +SelectDirDesc=Hvar ætti [name] að vera uppsettur? +SelectDirLabel3=Uppsetning mun uppsetja [name] í hina eftirfarandi möppu. +SelectDirBrowseLabel=Til að halda áfram, smelltu á Næst. Ef þú vilt velja aðra möppu, smelltu á Vafra. +DiskSpaceGBLabel=Að minnsta kosti [gb] GB af lausu diskplássi er krafist. +DiskSpaceMBLabel=Að minnsta kosti [mb] MB af lausu diskplássi er krafist. +CannotInstallToNetworkDrive=Uppsetning getur ekki uppsett á netdrif. +CannotInstallToUNCPath=Uppsetning getur ekki uppsett á UNC-slóð. +InvalidPath=Þú verður að innslá fulla slóð með drifstaf; til dæmis:%n%nC:\APP%n%neða UNC-slóð samkvæmt sniðinu:%n%n\\server\share +InvalidDrive=Drifið eða UNC-deilingin sem þú valdir er ekki til eða er ekki aðgengileg. Vinsamlega veldu annað. +DiskSpaceWarningTitle=Ekki nóg diskpláss +DiskSpaceWarning=Uppsetning krefst að minnsta kosti %1 KB af lausu plássi til að uppsetja, en hið valda drif hefur einungis %2 KB tiltæk.%n%nVilt þú halda áfram hvort sem er? +DirNameTooLong=Möppunafnið eða slóðin er of löng. +InvalidDirName=Möppunafnið er ekki gilt. +BadDirName32=Möppunöfn geta ekki innihaldið nein af hinum eftirfarandi rittáknum:%n%n%1 +DirExistsTitle=Mappa er til +DirExists=Mappan:%n%n%1%n%ner nú þegar til. Vilt þú uppsetja í þá möppu hvort sem er? +DirDoesntExistTitle=Mappa er ekki til +DirDoesntExist=Mappan:%n%n%1%n%ner ekki til. Vilt þú að mappan sé sköpuð? + +; *** "Select Components" wizard page +WizardSelectComponents=Velja atriði +SelectComponentsDesc=Hvaða atriði ætti að uppsetja? +SelectComponentsLabel2=Veldu atriðin sem þú vilt uppsetja; hreinsaðu atriðin sem þú vilt ekki uppsetja. Smelltu á Næst þegar þú ert tilbúin(n) til að halda áfram. +FullInstallation=Full uppsetning +CompactInstallation=Samanþjöppuð uppsetning +CustomInstallation=Sérsnídd uppsetning +NoUninstallWarningTitle=Atriði eru til +NoUninstallWarning=Uppsetning hefur greint það að eftirfarandi atriði eru nú þegar uppsett á tölvunni þinni:%n%n%1%n%nAð afvelja þessi atriði mun ekki niðurtaka þau.%n%nVilt þú halda áfram hvort sem er? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Núverandi val krefst að minnsta kosti [gb] GB af diskplássi. +ComponentsDiskSpaceMBLabel=Núverandi val krefst að minnsta kosti [mb] MB af diskplássi. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Veldu aukaleg verk +SelectTasksDesc=Hvaða aukalegu verk ættu að vera framkvæmd? +SelectTasksLabel2=Veldu hin aukalegu verk sem þú vilt að Uppsetning framkvæmi meðan [name] er uppsettur, ýttu síðan á Næst. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Veldu Upphafsvalmyndarmöppu +SelectStartMenuFolderDesc=Hvert ætti Uppsetning að setja skyndivísa forritsins? +SelectStartMenuFolderLabel3=Uppsetning mun skapa skyndivísa forritsins í hina eftirfarandi Upphafsvalmyndarmöppu. +SelectStartMenuFolderBrowseLabel=Til að halda áfram, smelltu á Næst. Ef þú vilt velja aðra möppu, smelltu á Vafra. +MustEnterGroupName=Þú verður að innslá möppunafn. +GroupNameTooLong=Möppunafnið eða slóðin er of löng. +InvalidGroupName=Möppunafnið er ekki gilt. +BadGroupName=Möppunafnið getur ekki innihaldið neitt af hinum eftirfarandi rittáknum:%n%n%1 +NoProgramGroupCheck2=&Ekki skapa Upphafsvalmyndarmöppu + +; *** "Ready to Install" wizard page +WizardReady=Tilbúin til að uppsetja +ReadyLabel1=Uppsetning er núna tilbúin til að hefja uppsetningu [name] á tölvuna þína. +ReadyLabel2a=Smelltu á Uppsetja til að halda áfram uppsetningunni eða smelltu á Til baka ef þú vilt endurskoða eða breyta einhverjum stillingum. +ReadyLabel2b=Smelltu á Uppsetja til að halda áfram uppsetningunni. +ReadyMemoUserInfo=Notandaupplýsingar: +ReadyMemoDir=Staðsetning: +ReadyMemoType=Uppsetningartegund: +ReadyMemoComponents=Valin atriði: +ReadyMemoGroup=Upphafsvalmyndarmappa: +ReadyMemoTasks=Aukaleg verk: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Niðurhlaðandi aukalegum skrám… +ButtonStopDownload=&Stöðva niðurhleðslu +StopDownload=Ert þú viss um að þú viljir stöðva niðurhleðsluna? +ErrorDownloadAborted=Niðurhleðslu hætt +ErrorDownloadFailed=Niðurhleðsla mistókst: %1 %2 +ErrorDownloadSizeFailed=Mistókst að sækja stærð: %1 %2 +ErrorFileHash1=Skráarhakk mistókst: %1 +ErrorFileHash2=Ógilt skráarhakk: bjóst við %1, fékk %2 +ErrorProgress=Ógild framvinda: %1 of %2 +ErrorFileSize=Ógild skráarstærð: bjóst við %1, fékk %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Undirbúandi uppsetningu +PreparingDesc=Uppsetning er undirbúandi uppsetningu [name] á tölvuna þína. +PreviousInstallNotCompleted=Uppsetningu/Fjarlægingu eftirfarandi forrits var ekki lokið. Þú þarft að endurræsa tölvuna þína til að ljúka þeirri uppsetningu.%n%nEftir endurræsingu tölvunnar þinnar, keyrðu Uppsetningu aftur til að ljúka uppsetningu [name]. +CannotContinue=Uppsetning getur ekki haldið áfram. Vinsamlega smelltu á Hætta við til að hætta. +ApplicationsFound=Eftirfarandi hugbúnaður er notandi skrár sem þurfa að vera uppfærðar af Uppsetningu. Það er ráðlagt að þú leyfir Uppsetningu sjálfvirkt að loka þessum hugbúnaði. +ApplicationsFound2=Eftirfarandi hugbúnaður er notandi skrár sem þurfa að vera uppfærðar af Uppsetningu. Það er ráðlagt að þú leyfir Uppsetningu sjálfvirkt að loka þessum hugbúnaði. Eftir að uppsetningunni lýkur mun Uppsetning reyna að endurræsa hugbúnaðinn. +CloseApplications=&Sjálfvirkt loka hugbúnaðinum +DontCloseApplications=&Ekki loka hugbúnaðinum +ErrorCloseApplications=Uppsetningu var ófært um að sjálfvirkt loka öllum hugbúnaði. Það er ráðlagt að þú lokir öllum hugbúnaði notandi skrár sem þurfa að vera uppfærðar af Uppsetningu áður en haldið er áfram. +PrepareToInstallNeedsRestart=Þú verður að endurræsa tölvuna þína. Eftir að hafa endurræst tölvuna þína, keyrðu Uppsetningu aftur til að ljúka uppsetningu [name].%n%nVilt þú endurræsa núna? + +; *** "Installing" wizard page +WizardInstalling=Uppsetjandi +InstallingLabel=Vinsamlega bíddu meðan Uppsetning uppsetur [name] á tölvuna þína. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Ljúkandi [name]-uppsetningaraðstoðaranum +FinishedLabelNoIcons=Uppsetning hefur lokið uppsetningu [name] á tölvuna þína. +FinishedLabel=Uppsetning hefur lokið uppsetningu [name] á þinni tölvu. Hugbúnaðurinn getur verið ræstur með því að velja hina uppsettu skyndivísa. +ClickFinish=Smelltu á Ljúka til að hætta í Uppsetningu. +FinishedRestartLabel=Til að ljúka uppsetningu [name] þarft Uppsetning að endurræsa tölvuna þína. Vilt þú endurræsa núna? +FinishedRestartMessage=Til að ljúka uppsetningu [name] þarf Uppsetning að endurræsa tölvuna þína.%n%nVilt þú endurræsa núna? +ShowReadmeCheck=Já, ég vil skoða README-skrána +YesRadio=&Já, endurræsa tölvuna núna +NoRadio=&Nei, ég mun endurræsa tölvuna síðar +RunEntryExec=Keyra %1 +RunEntryShellExec=Skoða %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Uppsetning þarfnast næsta disks +SelectDiskLabel2=Vinsamlega settu inn disk %1 og smelltu á Í lagi.%n%nEf skrárnar á þessum disk er hægt að finna í annarri möppu en þeirri sem birt er fyrir neðan, innsláðu réttu slóðina og smelltu á Vafra. +PathLabel=&Slóð: +FileNotInDir2=Skrána „%1“ var ekki hægt að staðsetja í „%2“. Vinsamlega settu inn rétta diskinn eða veldu aðra möppu. +SelectDirectoryLabel=Vinsamlega tilgreindu staðsetningu næsta disks. + +; *** Installation phase messages +SetupAborted=Uppsetningu var ekki lokið.%n%nVinsamlega leiðréttu vandamálið og keyrðu Uppsetningu aftur. +AbortRetryIgnoreSelectAction=Velja aðgerð +AbortRetryIgnoreRetry=&Reyna aftur +AbortRetryIgnoreIgnore=&Hunsa villuna og halda áfram +AbortRetryIgnoreCancel=Hætta við uppsetningu + +; *** Installation status messages +StatusClosingApplications=Lokandi hugbúnaði… +StatusCreateDirs=Skapandi skráasöfn… +StatusExtractFiles=Útdragandi skrár… +StatusCreateIcons=Skapandi skyndivísa… +StatusCreateIniEntries=Skapandi INI-færslur… +StatusCreateRegistryEntries=Skapandi Windows Registry-færslur… +StatusRegisterFiles=Skrásetjandi skrár… +StatusSavingUninstall=Vistandi niðurtekningarupplýsingar… +StatusRunProgram=Ljúkandi uppsetningu… +StatusRestartingApplications=Endurræsandi hugbúnað… +StatusRollback=Rúllandi aftur breytingum… + +; *** Misc. errors +ErrorInternal2=Innri villa: %1 +ErrorFunctionFailedNoCode=%1 mistókst +ErrorFunctionFailed=%1 mistókst; kóði %2 +ErrorFunctionFailedWithMessage=%1 mistókst; kóði %2.%n%3 +ErrorExecutingProgram=Ófært um að keyra skrá:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Villa við opnun Windows Registry-lykils:%n%1\%2 +ErrorRegCreateKey=Villa við sköpun Windows Registry-lykils:%n%1\%2 +ErrorRegWriteKey=Villa við ritun í Windows Registry-lykil:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Villa við sköpun INI-færslu í skrána „%1“. + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Sleppa þessari skrá (ekki ráðlagt) +FileAbortRetryIgnoreIgnoreNotRecommended=&Hunsa villuna og halda áfram (ekki ráðlagt) +SourceIsCorrupted=Upprunaskráin er spillt +SourceDoesntExist=Upprunaskráin „%1“ er ekki til +ExistingFileReadOnly2=Hina gildandi skrá var ekki hægt að yfirrita því hún er merkt sem lesa-einungis. +ExistingFileReadOnlyRetry=&Fjarlægja lesa-einungis eigindi og reyna aftur +ExistingFileReadOnlyKeepExisting=&Halda gildandi skrá +ErrorReadingExistingDest=Villa kom upp meðan reynt var að lesa gildandi skrána: +FileExistsSelectAction=Velja aðgerð +FileExists2=Skráin er nú þegar til. +FileExistsOverwriteExisting=&Yfirrita hina gildandi skrá +FileExistsKeepExisting=&Halda hinni gildandi skrá +FileExistsOverwriteOrKeepAll=&Gera þetta við næstu ósamstæður +ExistingFileNewerSelectAction=Velja aðgerð +ExistingFileNewer2=Hin gildandi skrá er nýrri en sú sem Uppsetning er að reyna að uppsetja. +ExistingFileNewerOverwriteExisting=&Yfirrita hina gildandi skrá +ExistingFileNewerKeepExisting=&Halda hinni gildandi skrá (ráðlagt) +ExistingFileNewerOverwriteOrKeepAll=&Gera þetta við næstu ósamstæður +ErrorChangingAttr=Villa kom upp meðan reynt var að breyta eigindum gildandi skráarinnar: +ErrorCreatingTemp=Villa kom upp meðan reynt var að skapa skrá í staðsetningarskráasafninu: +ErrorReadingSource=Villa kom upp meðan reynt var að lesa upprunaskrána: +ErrorCopying=Villa kom upp meðan reynt var að afrita skrána: +ErrorReplacingExistingFile=Villa kom upp meðan reynt var að yfirrita gildandi skrána: +ErrorRestartReplace=RestartReplace mistókst: +ErrorRenamingTemp=Villa kom upp meðan reynt var að endurnefna skrá í staðsetningarskráasafninu: +ErrorRegisterServer=Ófært um að skrá DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 mistókst með skilakóðann %1 +ErrorRegisterTypeLib=Ófært um að skrá tegundasafnið: $1 + +; *** Uninstall display name markings +UninstallDisplayNameMark=%1 (%2) +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bita +UninstallDisplayNameMark64Bit=64-bita +UninstallDisplayNameMarkAllUsers=Allir notendur +UninstallDisplayNameMarkCurrentUser=Núverandi notandi + +; *** Post-installation errors +ErrorOpeningReadme=Villa kom upp meðan reynt var að opna README-skrána. +ErrorRestartingComputer=Uppsetningu tókst ekki að endurræsa tölvuna. Vinsamlega gerðu þetta handvirkt. + +; *** Uninstaller messages +UninstallNotFound=Skráin „%1“ er ekki til. Getur ekki niðurtekið. +UninstallOpenError=Skrána „%1“ var ekki hægt að opna. Getur ekki niðurtekið +UninstallUnsupportedVer=Niðurtökuatburðaskráin „%1“ er á sniði sem er ekki þekkt af þessari útgáfu af niðurtakaranum. Getur ekki niðurtekið +UninstallUnknownEntry=Óþekkt færsla (%1) var fundin í niðurtökuatburðaskránni +ConfirmUninstall=Ert þú viss um að þú viljir algjörlega fjarlægja %1 og öll atriði þess? +UninstallOnlyOnWin64=Þessa uppsetningu er einungis hægt að niðurtaka á 64-bita Windows. +OnlyAdminCanUninstall=Þessi uppsetning getur einungis verið niðurtekin af notanda með stjórnandaréttindi. +UninstallStatusLabel=Vinsamlega bíddu meðan %1 er fjarlægt úr tölvunni þinni. +UninstalledAll=%1 var færsællega fjarlægt af tölvunni þinni. +UninstalledMost=%1-niðurtöku lokið.%n%nSuma liði var ekki hægt að fjarlægja. Þá er hægt að fjarlægja handvirkt. +UninstalledAndNeedsRestart=Til að ljúka niðurtöku %1 þarf að endurræsa tölvuna þína.%n%nVilt þú endurræsa núna? +UninstallDataCorrupted=„%1“-skráin er spillt. Getur ekki niðurtekið + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Fjarlægja deilda skrá? +ConfirmDeleteSharedFile2=Kerfið gefur til kynna að hin eftirfarandi deilda skrá er ekki lengur í notkun hjá neinu forriti. Vilt þú að Niðurtakari fjarlægi þessa deildu skrá?%n%nEf einhver forrit eru enn notandi þessa skrá og hún er fjarlægð, kann að vera að þau forrit munu ekki virka almennilega. Ef þú ert óviss, veldu Nei. Að skilja skrána eftir á kerfinu þínu mun ekki valda skaða. +SharedFileNameLabel=Skráarnafn: +SharedFileLocationLabel=Staðsetning: +WizardUninstalling=Niðurtökustaða +StatusUninstalling=Niðurtakandi %1… + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Uppsetjandi %1. +ShutdownBlockReasonUninstallingApp=Niðurtakandi %1. + +[CustomMessages] + +NameAndVersion=%1 útgáfa %2 +AdditionalIcons=Aukalegir skyndivísir: +CreateDesktopIcon=Skapa &skjáborðsskyndivísi +CreateQuickLaunchIcon=Skapa &Skyndiræsitáknmynd +ProgramOnTheWeb=%1 á Vefnum +UninstallProgram=Niðurtaka %1 +LaunchProgram=Ræsa %1 +AssocFileExtension=&Tengja %1 við %2-skráarframlenginguna +AssocingFileExtension=&Tengjandi %1 við %2-skráarframlenginguna… +AutoStartProgramGroupDescription=Ræsing: +AutoStartProgram=Sjálfvikt ræsa %1 +AddonHostProgramNotFound=%1 gat ekki staðsett möppuna sem þú valdir.%n%nVilt þú halda áfram hvort sem er? \ No newline at end of file diff --git a/Files/Languages/Italian.isl b/Files/Languages/Italian.isl new file mode 100644 index 00000000..e42a3063 --- /dev/null +++ b/Files/Languages/Italian.isl @@ -0,0 +1,390 @@ +; bovirus@gmail.com +; *** Inno Setup version 6.1.0+ Italian messages *** +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). +; +; Italian.isl - Last Update: 25.07.2020 by bovirus (bovirus@gmail.com) +; +; Translator name: bovirus +; Translator e-mail: bovirus@gmail.com +; Based on previous translations of Rinaldo M. aka Whiteshark (based on ale5000 5.1.11+ translation) +; +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Italiano +LanguageID=$0410 +LanguageCodePage=1252 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Installazione +SetupWindowTitle=Installazione di %1 +UninstallAppTitle=Disinstallazione +UninstallAppFullTitle=Disinstallazione di %1 + +; *** Misc. common +InformationTitle=Informazioni +ConfirmTitle=Conferma +ErrorTitle=Errore + +; *** SetupLdr messages +SetupLdrStartupMessage=Questa è l'installazione di %1.%n%nVuoi continuare? +LdrCannotCreateTemp=Impossibile creare un file temporaneo.%n%nInstallazione annullata. +LdrCannotExecTemp=Impossibile eseguire un file nella cartella temporanea.%n%nInstallazione annullata. + +; *** Startup error messages +LastErrorMessage=%1.%n%nErrore %2: %3 +SetupFileMissing=File %1 non trovato nella cartella di installazione.%n%nCorreggi il problema o richiedi una nuova copia del programma. +SetupFileCorrupt=I file di installazione sono danneggiati.%n%nRichiedi una nuova copia del programma. +SetupFileCorruptOrWrongVer=I file di installazione sono danneggiati, o sono incompatibili con questa versione del programma di installazione.%n%nCorreggi il problema o richiedi una nuova copia del programma. +InvalidParameter=È stato inserito nella riga di comando un parametro non valido:%n%n%1 +SetupAlreadyRunning=Il processo di installazione è già in funzione. +WindowsVersionNotSupported=Questo programma non supporta la versione di Windows installata nel computer. +WindowsServicePackRequired=Questo programma richiede %1 Service Pack %2 o successivo. +NotOnThisPlatform=Questo programma non è compatibile con %1. +OnlyOnThisPlatform=Questo programma richiede %1. +OnlyOnTheseArchitectures=Questo programma può essere installato solo su versioni di Windows progettate per le seguenti architetture della CPU:%n%n%1 +WinVersionTooLowError=Questo programma richiede %1 versione %2 o successiva. +WinVersionTooHighError=Questo programma non può essere installato su %1 versione %2 o successiva. +AdminPrivilegesRequired=Per installare questo programma sono richiesti privilegi di amministratore. +PowerUserPrivilegesRequired=Per poter installare questo programma sono richiesti i privilegi di amministratore o di Power Users. +SetupAppRunningError=%1 è attualmente in esecuzione.%n%nChiudi adesso tutte le istanze del programma e poi seleziona "OK", o seleziona "Annulla" per uscire. +UninstallAppRunningError=%1 è attualmente in esecuzione.%n%nChiudi adesso tutte le istanze del programma e poi seleziona "OK", o seleziona "Annulla" per uscire. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Seleziona modo installazione +PrivilegesRequiredOverrideInstruction=Seleziona modo installazione +PrivilegesRequiredOverrideText1=%1 può essere installato per tutti gli utenti (richiede privilegi di amministratore), o solo per l'utente attuale. +PrivilegesRequiredOverrideText2=%1 può essere installato solo per l'utente attuale, o per tutti gli utenti (richiede privilegi di amministratore). +PrivilegesRequiredOverrideAllUsers=Inst&alla per tutti gli utenti +PrivilegesRequiredOverrideAllUsersRecommended=Inst&alla per tutti gli utenti (suggerito) +PrivilegesRequiredOverrideCurrentUser=Installa solo per l'&utente attuale +PrivilegesRequiredOverrideCurrentUserRecommended=Installa solo per l'&utente attuale (suggerito) + +; *** Misc. errors +ErrorCreatingDir=Impossibile creare la cartella "%1" +ErrorTooManyFilesInDir=Impossibile creare i file nella cartella "%1" perché contiene troppi file. + +; *** Setup common messages +ExitSetupTitle=Uscita dall'installazione +ExitSetupMessage=L'installazione non è completa.%n%nUscendo dall'installazione in questo momento, il programma non sarà installato.%n%nÈ possibile eseguire l'installazione in un secondo tempo.%n%nVuoi uscire dall'installazione? +AboutSetupMenuItem=&Informazioni sull'installazione... +AboutSetupTitle=Informazioni sull'installazione +AboutSetupMessage=%1 versione %2%n%3%n%n%1 sito web:%n%4 +AboutSetupNote= +TranslatorNote=Traduzione italiana a cura di Rinaldo M. aka Whiteshark e bovirus (v. 11.09.2018) + +; *** Buttons +ButtonBack=< &Indietro +ButtonNext=&Avanti > +ButtonInstall=Inst&alla +ButtonOK=OK +ButtonCancel=Annulla +ButtonYes=&Si +ButtonYesToAll=Sì a &tutto +ButtonNo=&No +ButtonNoToAll=N&o a tutto +ButtonFinish=&Fine +ButtonBrowse=&Sfoglia... +ButtonWizardBrowse=S&foglia... +ButtonNewFolder=&Crea nuova cartella + +; *** "Select Language" dialog messages +SelectLanguageTitle=Seleziona la lingua dell'installazione +SelectLanguageLabel=Seleziona la lingua da usare durante l'installazione. + +; *** Common wizard text +ClickNext=Seleziona "Avanti" per continuare, o "Annulla" per uscire. +BeveledLabel= +BrowseDialogTitle=Sfoglia cartelle +BrowseDialogLabel=Seleziona una cartella nell'elenco, e quindi seleziona "OK". +NewFolderName=Nuova cartella + +; *** "Welcome" wizard page +WelcomeLabel1=Installazione di [name] +WelcomeLabel2=[name/ver] sarà installato sul computer.%n%nPrima di procedere chiudi tutte le applicazioni attive. + +; *** "Password" wizard page +WizardPassword=Password +PasswordLabel1=Questa installazione è protetta da password. +PasswordLabel3=Inserisci la password, quindi per continuare seleziona "Avanti".%nLe password sono sensibili alle maiuscole/minuscole. +PasswordEditLabel=&Password: +IncorrectPassword=La password inserita non è corretta. Riprova. + +; *** "License Agreement" wizard page +WizardLicense=Contratto di licenza +LicenseLabel=Prima di procedere leggi con attenzione le informazioni che seguono. +LicenseLabel3=Leggi il seguente contratto di licenza.%nPer procedere con l'installazione è necessario accettare tutti i termini del contratto. +LicenseAccepted=Accetto i termini del &contratto di licenza +LicenseNotAccepted=&Non accetto i termini del contratto di licenza + +; *** "Information" wizard pages +WizardInfoBefore=Informazioni +InfoBeforeLabel=Prima di procedere leggi le importanti informazioni che seguono. +InfoBeforeClickLabel=Quando sei pronto per proseguire, seleziona "Avanti". +WizardInfoAfter=Informazioni +InfoAfterLabel=Prima di procedere leggi le importanti informazioni che seguono. +InfoAfterClickLabel=Quando sei pronto per proseguire, seleziona "Avanti". + +; *** "User Information" wizard page +WizardUserInfo=Informazioni utente +UserInfoDesc=Inserisci le seguenti informazioni. +UserInfoName=&Nome: +UserInfoOrg=&Società: +UserInfoSerial=&Numero di serie: +UserInfoNameRequired=È necessario inserire un nome. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Selezione cartella di installazione +SelectDirDesc=Dove vuoi installare [name]? +SelectDirLabel3=[name] sarà installato nella seguente cartella. +SelectDirBrowseLabel=Per continuare seleziona "Avanti".%nPer scegliere un'altra cartella seleziona "Sfoglia". +DiskSpaceGBLabel=Sono richiesti almeno [gb] GB di spazio libero nel disco. +DiskSpaceMBLabel=Sono richiesti almeno [mb] MB di spazio libero nel disco. +CannotInstallToNetworkDrive=Non è possibile effettuare l'installazione in un disco in rete. +CannotInstallToUNCPath=Non è possibile effettuare l'installazione in un percorso UNC. +InvalidPath=Va inserito un percorso completo di lettera di unità; per esempio:%n%nC:\APP%n%no un percorso di rete nella forma:%n%n\\server\condivisione +InvalidDrive=L'unità o il percorso di rete selezionato non esiste o non è accessibile.%n%nSelezionane un altro. +DiskSpaceWarningTitle=Spazio su disco insufficiente +DiskSpaceWarning=L'installazione richiede per eseguire l'installazione almeno %1 KB di spazio libero, ma l'unità selezionata ha solo %2 KB disponibili.%n%nVuoi continuare comunque? +DirNameTooLong=Il nome della cartella o il percorso sono troppo lunghi. +InvalidDirName=Il nome della cartella non è valido. +BadDirName32=Il nome della cartella non può includere nessuno dei seguenti caratteri:%n%n%1 +DirExistsTitle=Cartella già esistente +DirExists=La cartella%n%n %1%n%nesiste già.%n%nVuoi comunque installare l'applicazione in questa cartella? +DirDoesntExistTitle=Cartella inesistente +DirDoesntExist=La cartella%n%n %1%n%nnon esiste. Vuoi creare la cartella? + +; *** "Select Components" wizard page +WizardSelectComponents=Selezione componenti +SelectComponentsDesc=Quali componenti vuoi installare? +SelectComponentsLabel2=Seleziona i componenti da installare, deseleziona quelli che non vuoi installare.%nPer continuare seleziona "Avanti". +FullInstallation=Installazione completa +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Installazione compatta +CustomInstallation=Installazione personalizzata +NoUninstallWarningTitle=Componente esistente +NoUninstallWarning=I seguenti componenti sono già installati nel computer:%n%n%1%n%nDeselezionando questi componenti essi non verranno rimossi.%n%nVuoi continuare comunque? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=La selezione attuale richiede almeno [gb] GB di spazio nel disco. +ComponentsDiskSpaceMBLabel=La selezione attuale richiede almeno [mb] MB di spazio nel disco. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Selezione processi aggiuntivi +SelectTasksDesc=Quali processi aggiuntivi vuoi eseguire? +SelectTasksLabel2=Seleziona i processi aggiuntivi che verranno eseguiti durante l'installazione di [name], quindi seleziona "Avanti". + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Selezione della cartella nel menu Avvio/Start +SelectStartMenuFolderDesc=Dove vuoi inserire i collegamenti al programma? +SelectStartMenuFolderLabel3=Verranno creati i collegamenti al programma nella seguente cartella del menu Avvio/Start. +SelectStartMenuFolderBrowseLabel=Per continuare, seleziona "Avanti".%nPer selezionare un'altra cartella, seleziona "Sfoglia". +MustEnterGroupName=Devi inserire il nome della cartella. +GroupNameTooLong=Il nome della cartella o il percorso sono troppo lunghi. +InvalidGroupName=Il nome della cartella non è valido. +BadGroupName=Il nome della cartella non può includere nessuno dei seguenti caratteri:%n%n%1 +NoProgramGroupCheck2=&Non creare una cartella nel menu Avvio/Start + +; *** "Ready to Install" wizard page +WizardReady=Pronto per l'installazione +ReadyLabel1=Il programma è pronto per iniziare l'installazione di [name] nel computer. +ReadyLabel2a=Seleziona "Installa" per continuare con l'installazione, o "Indietro" per rivedere o modificare le impostazioni. +ReadyLabel2b=Per procedere con l'installazione seleziona "Installa". +ReadyMemoUserInfo=Informazioni utente: +ReadyMemoDir=Cartella di installazione: +ReadyMemoType=Tipo di installazione: +ReadyMemoComponents=Componenti selezionati: +ReadyMemoGroup=Cartella del menu Avvio/Start: +ReadyMemoTasks=Processi aggiuntivi: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Download file aggiuntivi... +ButtonStopDownload=&Stop download +StopDownload=Sei sicuro di voler interrompere il download? +ErrorDownloadAborted=Download annullato +ErrorDownloadFailed=Download fallito: %1 %2 +ErrorDownloadSizeFailed=Rilevamento dimensione fallito: %1 %2 +ErrorFileHash1=Errore hash file: %1 +ErrorFileHash2=Hash file non valido: atteso %1, trovato %2 +ErrorProgress=Progresso non valido: %1 di %2 +ErrorFileSize=Dimensione file non valida: attesa %1, trovata %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Preparazione all'installazione +PreparingDesc=Preparazione all'installazione di [name] nel computer. +PreviousInstallNotCompleted=L'installazione/rimozione precedente del programma non è stata completata.%n%nÈ necessario riavviare il sistema per completare l'installazione.%n%nDopo il riavvio del sistema esegui di nuovo l'installazione di [name]. +CannotContinue=L'installazione non può continuare. Seleziona "Annulla" per uscire. +ApplicationsFound=Le seguenti applicazioni stanno usando file che devono essere aggiornati dall'installazione.%n%nTi consigliamo di permettere al processo di chiudere automaticamente queste applicazioni. +ApplicationsFound2=Le seguenti applicazioni stanno usando file che devono essere aggiornati dall'installazione.%n%nTi consigliamo di permettere al processo di chiudere automaticamente queste applicazioni.%n%nAl completamento dell'installazione, il processo tenterà di riavviare le applicazioni. +CloseApplications=Chiudi &automaticamente le applicazioni +DontCloseApplications=&Non chiudere le applicazioni +ErrorCloseApplications=L'installazione non è riuscita a chiudere automaticamente tutte le applicazioni.%n%nPrima di proseguire ti raccomandiamo di chiudere tutte le applicazioni che usano file che devono essere aggiornati durante l'installazione. +PrepareToInstallNeedsRestart=Il programma di installazione deve riavviare il computer.%nDopo aver riavviato il computer esegui di nuovo il programma di installazione per completare l'installazione di [name].%n%nVuoi riavviare il computer ora? + +; *** "Installing" wizard page +WizardInstalling=Installazione in corso +InstallingLabel=Attendi il completamento dell'installazione di [name] nel computer. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Installazione di [name] completata +FinishedLabelNoIcons=Installazione di [name] completata. +FinishedLabel=Installazione di [name] completata.%n%nL'applicazione può essere eseguita selezionando le relative icone. +ClickFinish=Seleziona "Fine" per uscire dall'installazione. +FinishedRestartLabel=Per completare l'installazione di [name], è necessario riavviare il sistema.%n%nVuoi riavviare adesso? +FinishedRestartMessage=Per completare l'installazione di [name], è necessario riavviare il sistema.%n%nVuoi riavviare adesso? +ShowReadmeCheck=Si, visualizza ora il file LEGGIMI +YesRadio=&Si, riavvia il sistema adesso +NoRadio=&No, riavvia il sistema più tardi +; used for example as 'Run MyProg.exe' +RunEntryExec=Esegui %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Visualizza %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=L'installazione necessita del disco successivo +SelectDiskLabel2=Inserisci il disco %1 e seleziona "OK".%n%nSe i file di questo disco si trovano in una cartella diversa da quella visualizzata sotto, inserisci il percorso corretto o seleziona "Sfoglia". +PathLabel=&Percorso: +FileNotInDir2=Il file "%1" non è stato trovato in "%2".%n%nInserisci il disco corretto o seleziona un'altra cartella. +SelectDirectoryLabel=Specifica il percorso del prossimo disco. + +; *** Installation phase messages +SetupAborted=L'installazione non è stata completata.%n%nCorreggi il problema e riesegui nuovamente l'installazione. +AbortRetryIgnoreSelectAction=Seleziona azione +AbortRetryIgnoreRetry=&Riprova +AbortRetryIgnoreIgnore=&Ignora questo errore e continua +AbortRetryIgnoreCancel=Annulla installazione + +; *** Installation status messages +StatusClosingApplications=Chiusura applicazioni... +StatusCreateDirs=Creazione cartelle... +StatusExtractFiles=Estrazione file... +StatusCreateIcons=Creazione icone... +StatusCreateIniEntries=Creazione voci nei file INI... +StatusCreateRegistryEntries=Creazione voci di registro... +StatusRegisterFiles=Registrazione file... +StatusSavingUninstall=Salvataggio delle informazioni di disinstallazione... +StatusRunProgram=Termine dell'installazione... +StatusRestartingApplications=Riavvio applicazioni... +StatusRollback=Recupero delle modifiche... + +; *** Misc. errors +ErrorInternal2=Errore interno %1 +ErrorFunctionFailedNoCode=%1 fallito +ErrorFunctionFailed=%1 fallito; codice %2 +ErrorFunctionFailedWithMessage=%1 fallito; codice %2.%n%3 +ErrorExecutingProgram=Impossibile eseguire il file:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Errore di apertura della chiave di registro:%n%1\%2 +ErrorRegCreateKey=Errore di creazione della chiave di registro:%n%1\%2 +ErrorRegWriteKey=Errore di scrittura della chiave di registro:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Errore nella creazione delle voci INI nel file "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Salta questo file (non suggerito) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignora questo errore e continua (non suggerito) +SourceIsCorrupted=Il file sorgente è danneggiato +SourceDoesntExist=Il file sorgente "%1" non esiste +ExistingFileReadOnly2=Il file esistente non può essere sostituito in quanto segnato come in sola lettura. +ExistingFileReadOnlyRetry=&Rimuovi attributo di sola lettura e riprova +ExistingFileReadOnlyKeepExisting=&Mantieni il file esistente +ErrorReadingExistingDest=Si è verificato un errore durante la lettura del file esistente: +FileExistsSelectAction=Seleziona azione +FileExists2=Il file esiste già. +FileExistsOverwriteExisting=S&ovrascrivi il file esistente +FileExistsKeepExisting=&Mantieni il file esistente +FileExistsOverwriteOrKeepAll=&Applica questa azione per i prossimi conflitti +ExistingFileNewerSelectAction=Seleziona azione +ExistingFileNewer2=Il file esistente è più recente del file che si sta cercando di installare. +ExistingFileNewerOverwriteExisting=S&ovrascrivi il file esistente +ExistingFileNewerKeepExisting=&Mantieni il file esistente (suggerito) +ExistingFileNewerOverwriteOrKeepAll=&Applica questa azione per i prossimi conflitti +ErrorChangingAttr=Si è verificato un errore durante il tentativo di modifica dell'attributo del file esistente: +ErrorCreatingTemp=Si è verificato un errore durante la creazione di un file nella cartella di installazione: +ErrorReadingSource=Si è verificato un errore durante la lettura del file sorgente: +ErrorCopying=Si è verificato un errore durante la copia di un file: +ErrorReplacingExistingFile=Si è verificato un errore durante la sovrascrittura del file esistente: +ErrorRestartReplace=Errore durante riavvio o sostituzione: +ErrorRenamingTemp=Si è verificato un errore durante il tentativo di rinominare un file nella cartella di installazione: +ErrorRegisterServer=Impossibile registrare la DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 è fallito con codice di uscita %1 +ErrorRegisterTypeLib=Impossibile registrare la libreria di tipo: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32bit +UninstallDisplayNameMark64Bit=64bit +UninstallDisplayNameMarkAllUsers=Tutti gli utenti +UninstallDisplayNameMarkCurrentUser=Utente attuale + +; *** Post-installation errors +ErrorOpeningReadme=Si è verificato un errore durante l'apertura del file LEGGIMI. +ErrorRestartingComputer=Impossibile riavviare il sistema. Riavvia il sistema manualmente. + +; *** Uninstaller messages +UninstallNotFound=Il file "%1" non esiste.%n%nImpossibile disinstallare. +UninstallOpenError=Il file "%1" non può essere aperto.%n%nImpossibile disinstallare +UninstallUnsupportedVer=Il file registro di disinstallazione "%1" è in un formato non riconosciuto da questa versione del programma di disinstallazione.%n%nImpossibile disinstallare +UninstallUnknownEntry=Trovata una voce sconosciuta (%1) nel file registro di disinstallazione +ConfirmUninstall=Vuoi rimuovere completamente %1 e tutti i suoi componenti? +UninstallOnlyOnWin64=Questa applicazione può essere disinstallata solo in Windows a 64-bit. +OnlyAdminCanUninstall=Questa applicazione può essere disinstallata solo da un utente con privilegi di amministratore. +UninstallStatusLabel=Attendi fino a che %1 è stato rimosso dal computer. +UninstalledAll=Disinstallazione di %1 completata. +UninstalledMost=Disinstallazione di %1 completata.%n%nAlcuni elementi non possono essere rimossi.%n%nDovranno essere rimossi manualmente. +UninstalledAndNeedsRestart=Per completare la disinstallazione di %1, è necessario riavviare il sistema.%n%nVuoi riavviare il sistema adesso? +UninstallDataCorrupted=Il file "%1" è danneggiato. Impossibile disinstallare + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Vuoi rimuovere il file condiviso? +ConfirmDeleteSharedFile2=Il sistema indica che il seguente file condiviso non è più usato da nessun programma.%nVuoi rimuovere questo file condiviso?%nSe qualche programma usasse questo file, potrebbe non funzionare più correttamente.%nSe non sei sicuro, seleziona "No".%nLasciare il file nel sistema non può causare danni. +SharedFileNameLabel=Nome del file: +SharedFileLocationLabel=Percorso: +WizardUninstalling=Stato disinstallazione +StatusUninstalling=Disinstallazione di %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Installazione di %1. +ShutdownBlockReasonUninstallingApp=Disinstallazione di %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 versione %2 +AdditionalIcons=Icone aggiuntive: +CreateDesktopIcon=Crea un'icona sul &desktop +CreateQuickLaunchIcon=Crea un'icona nella &barra 'Avvio veloce' +ProgramOnTheWeb=Sito web di %1 +UninstallProgram=Disinstalla %1 +LaunchProgram=Avvia %1 +AssocFileExtension=&Associa i file con estensione %2 a %1 +AssocingFileExtension=Associazione dei file con estensione %2 a %1... +AutoStartProgramGroupDescription=Esecuzione automatica: +AutoStartProgram=Esegui automaticamente %1 +AddonHostProgramNotFound=Impossibile individuare %1 nella cartella selezionata.%n%nVuoi continuare ugualmente? diff --git a/Files/Languages/Japanese.isl b/Files/Languages/Japanese.isl new file mode 100644 index 00000000..df7f8450 --- /dev/null +++ b/Files/Languages/Japanese.isl @@ -0,0 +1,367 @@ +; *** Inno Setup version 6.1.0+ Japanese messages *** +; +; Maintained by Koichi Shirasuka (shirasuka@eugrid.co.jp) +; +; Translation based on Ryou Minakami (ryou32jp@yahoo.co.jp) +; +; $jrsoftware: issrc/Files/Languages/Japanese.isl,v 1.6 2010/03/08 07:50:01 mlaan Exp $ + +[LangOptions] +LanguageName=<65E5><672C><8A9E> +LanguageID=$0411 +LanguageCodePage=932 + +[Messages] + +; *** Application titles +SetupAppTitle=ZbgAbv +SetupWindowTitle=%1 ZbgAbv +UninstallAppTitle=ACXg[ +UninstallAppFullTitle=%1 ACXg[ + +; *** Misc. common +InformationTitle= +ConfirmTitle=mF +ErrorTitle=G[ + +; *** SetupLdr messages +SetupLdrStartupMessage=%1 CXg[܂Bs܂H +LdrCannotCreateTemp=ꎞt@C쐬ł܂BZbgAbv𒆎~܂B +LdrCannotExecTemp=ꎞtH_[̃t@Csł܂BZbgAbv𒆎~܂B + +; *** Startup error messages +LastErrorMessage=%1.%n%nG[ %2: %3 +SetupFileMissing=t@C %1 ‚܂B邩VZbgAbvvO肵ĂB +SetupFileCorrupt=ZbgAbvt@CĂ܂BVZbgAbvvO肵ĂB +SetupFileCorruptOrWrongVer=ZbgAbvt@CĂ邩Ão[W̃ZbgAbvƌ݊܂B邩VZbgAbvvO肵ĂB +InvalidParameter=R}hCɕsȃp[^[n܂:%n%n%1 +SetupAlreadyRunning=ZbgAbv͊ɎsłB +WindowsVersionNotSupported=̃vO͂g̃o[W Windows T|[gĂ܂B +WindowsServicePackRequired=̃vO̎sɂ %1 Service Pack %2 ȍ~KvłB +NotOnThisPlatform=̃vO %1 ł͓삵܂B +OnlyOnThisPlatform=̃vO̎sɂ %1 KvłB +OnlyOnTheseArchitectures=̃vO%n%n%1vZbT[ Windows ɂCXg[ł܂B +WinVersionTooLowError=̃vO̎sɂ %1 %2 ȍ~KvłB +WinVersionTooHighError=̃vO %1 %2 ȍ~ł͓삵܂B +AdminPrivilegesRequired=̃vOCXg[邽߂ɂ͊Ǘ҂ƂăOCKv܂B +PowerUserPrivilegesRequired=̃vOCXg[邽߂ɂ͊Ǘ҂܂̓p[[U[ƂăOCKv܂B +SetupAppRunningError=ZbgAbv͎s %1 o܂B%n%nJĂAvP[Vׂĕ‚ĂuOKvNbNĂBuLZvNbNƁAZbgAbvI܂B +UninstallAppRunningError=ACXg[͎s %1 o܂B%n%nJĂAvP[Vׂĕ‚ĂuOKvNbNĂBuLZvNbNƁAZbgAbvI܂B + +; *** Startup questions +PrivilegesRequiredOverrideTitle=CXg[[h̑I +PrivilegesRequiredOverrideInstruction=CXg[[hIĂ +PrivilegesRequiredOverrideText1=%1 ׂ͂Ẵ[U[ (ǗҌKvł) ܂݂͌̃[U[pɃCXg[ł܂B +PrivilegesRequiredOverrideText2=%1 ݂͌̃[U[܂ׂ͂Ẵ[U[p (ǗҌKvł) ɃCXg[ł܂B +PrivilegesRequiredOverrideAllUsers=ׂẴ[U[pɃCXg[(&A) +PrivilegesRequiredOverrideAllUsersRecommended=ׂẴ[U[pɃCXg[(&A) () +PrivilegesRequiredOverrideCurrentUser=݂̃[U[pɃCXg[(&M) +PrivilegesRequiredOverrideCurrentUserRecommended=݂̃[U[pɃCXg[(&M) () + +; *** Misc. errors +ErrorCreatingDir=fBNg %1 쐬ɃG[܂B +ErrorTooManyFilesInDir=fBNg %1 Ƀt@C쐬ɃG[܂Bt@C̐܂B + +; *** Setup common messages +ExitSetupTitle=ZbgAbvI +ExitSetupMessage=ZbgAbvƂ͊Ă܂BŃZbgAbv𒆎~ƃvO̓CXg[܂B%n%n߂ăCXg[ꍇ́AxZbgAbvsĂB%n%nZbgAbvI܂H +AboutSetupMenuItem=ZbgAbvɂ‚(&A)... +AboutSetupTitle=ZbgAbvɂ‚ +AboutSetupMessage=%1 %2%n%3%n%n%1 z[y[W:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< ߂(&B) +ButtonNext=(&N) > +ButtonInstall=CXg[(&I) +ButtonOK=OK +ButtonCancel=LZ +ButtonYes=͂(&Y) +ButtonYesToAll=ׂĂ͂(&A) +ButtonNo=(&N) +ButtonNoToAll=ׂĂ(&O) +ButtonFinish=(&F) +ButtonBrowse=Q(&B)... +ButtonWizardBrowse=Q(&R) +ButtonNewFolder=VtH_[(&M) + +; *** "Select Language" dialog messages +SelectLanguageTitle=ZbgAbvɎgp錾̑I +SelectLanguageLabel=CXg[ɗp錾IłB + +; *** Common wizard text +ClickNext=sɂ́uցvAZbgAbvIɂ́uLZvNbNĂB +BeveledLabel= +BrowseDialogTitle=tH_[Q +BrowseDialogLabel=XgtH_[I OK ĂB +NewFolderName=VtH_[ + +; *** "Welcome" wizard page +WelcomeLabel1=[name] ZbgAbvEBU[h̊Jn +WelcomeLabel2=̃vO͂gp̃Rs[^[ [name/ver] CXg[܂B%n%nsOɑ̃AvP[VׂďIĂB + +; *** "Password" wizard page +WizardPassword=pX[h +PasswordLabel1=̃CXg[vO̓pX[hɂĕی삳Ă܂B +PasswordLabel3=pX[h͂āuցvNbNĂBpX[h͑啶Əʂ܂B +PasswordEditLabel=pX[h(&P): +IncorrectPassword=͂ꂽpX[h܂Bx͂ȂĂB + +; *** "License Agreement" wizard page +WizardLicense=gp_񏑂̓ +LicenseLabel=sOɈȉ̏dvȏǂ݂B +LicenseLabel3=ȉ̎gp_񏑂ǂ݂BCXg[𑱍sɂ͂̌_񏑂ɓӂKv܂B +LicenseAccepted=ӂ(&A) +LicenseNotAccepted=ӂȂ(&D) + +; *** "Information" wizard pages +WizardInfoBefore= +InfoBeforeLabel=sOɈȉ̏dvȏǂ݂B +InfoBeforeClickLabel=ZbgAbv𑱍sɂ́uցvNbNĂB +WizardInfoAfter= +InfoAfterLabel=sOɈȉ̏dvȏǂ݂B +InfoAfterClickLabel=ZbgAbv𑱍sɂ́uցvNbNĂB + +; *** "User Information" wizard page +WizardUserInfo=[U[ +UserInfoDesc=[U[͂ĂB +UserInfoName=[U[(&U): +UserInfoOrg=gD(&O): +UserInfoSerial=VAԍ(&S): +UserInfoNameRequired=[U[͂ĂB + +; *** "Select Destination Location" wizard page +WizardSelectDir=CXg[̎w +SelectDirDesc=[name] ̃CXg[w肵ĂB +SelectDirLabel3=[name] CXg[tH_w肵āAuցvNbNĂB +SelectDirBrowseLabel=ɂ́uցvNbNĂBʂ̃tH_[Iɂ́uQƁvNbNĂB +DiskSpaceGBLabel=̃vO͍Œ [gb] GB ̃fBXN󂫗̈KvƂ܂B +DiskSpaceMBLabel=̃vO͍Œ [mb] MB ̃fBXN󂫗̈KvƂ܂B +CannotInstallToNetworkDrive=lbg[NhCuɃCXg[邱Ƃ͂ł܂B +CannotInstallToUNCPath=UNC pXɃCXg[邱Ƃ͂ł܂B +InvalidPath=hCu܂ފSȃpX͂ĂB%n%nFC:\APP%n%n܂ UNC `̃pX͂ĂB%n%nF\\server\share +InvalidDrive=w肵hCu܂ UNC pX‚ȂANZXł܂Bʂ̃pXw肵ĂB +DiskSpaceWarningTitle=fBXN󂫗̈̕s +DiskSpaceWarning=CXg[ɂ͍Œ %1 KB ̃fBXN󂫗̈悪KvłAw肳ꂽhCuɂ %2 KB ̋󂫗̈悵܂B%n%n̂܂ܑs܂H +DirNameTooLong=hCu܂̓pX߂܂B +InvalidDirName=tH_[łB +BadDirName32=ȉ̕܂ރtH_[͎wł܂B:%n%n%1 +DirExistsTitle=̃tH_[ +DirExists=tH_[ %n%n%1%n%nɑ݂܂B̂܂܂̃tH_[փCXg[܂H +DirDoesntExistTitle=tH_[‚܂B +DirDoesntExist=tH_[ %n%n%1%n%n‚܂BVtH_[쐬܂H + +; *** "Select Components" wizard page +WizardSelectComponents=R|[lg̑I +SelectComponentsDesc=CXg[R|[lgIĂB +SelectComponentsLabel2=CXg[R|[lgIĂBCXg[Kv̂ȂR|[lg̓`FbNOĂBsɂ́uցvNbNĂB +FullInstallation=tCXg[ +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=RpNgCXg[ +CustomInstallation=JX^CXg[ +NoUninstallWarningTitle=̃R|[lg +NoUninstallWarning=ZbgAbv͈ȉ̃R|[lgɃCXg[Ă邱Ƃo܂B%n%n%1%n%ñR|[lg̑IĂACXg[͂܂B%n%n̂܂ܑs܂H +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=݂̑I͍Œ [gb] GB ̃fBXN󂫗̈KvƂ܂B +ComponentsDiskSpaceMBLabel=݂̑I͍Œ [mb] MB ̃fBXN󂫗̈KvƂ܂B + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=lj^XN̑I +SelectTasksDesc=slj^XNIĂB +SelectTasksLabel2=[name] CXg[Ɏslj^XNIāAuցvNbNĂB + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=X^[gj[tH_[̎w +SelectStartMenuFolderDesc=vÕV[gJbg쐬ꏊw肵ĂB +SelectStartMenuFolderLabel3=ZbgAbṽ͎X^[gj[tH_[ɃvÕV[gJbg쐬܂B +SelectStartMenuFolderBrowseLabel=ɂ́uցvNbNĂBႤtH_[Iɂ́uQƁvNbNĂB +MustEnterGroupName=tH_[w肵ĂB +GroupNameTooLong=tH_[܂̓pX߂܂B +InvalidGroupName=tH_[łB +BadGroupName=̕܂ރtH_[͎wł܂:%n%n%1 +NoProgramGroupCheck2=X^[gj[tH_[쐬Ȃ(&D) + +; *** "Ready to Install" wizard page +WizardReady=CXg[ +ReadyLabel1=gp̃Rs[^ [name] CXg[鏀ł܂B +ReadyLabel2a=CXg[𑱍sɂ́uCXg[vAݒ̊mFύXsɂ́u߂vNbNĂB +ReadyLabel2b=CXg[𑱍sɂ́uCXg[vNbNĂB +ReadyMemoUserInfo=[U[: +ReadyMemoDir=CXg[: +ReadyMemoType=ZbgAbv̎: +ReadyMemoComponents=IR|[lg: +ReadyMemoGroup=X^[gj[tH_[: +ReadyMemoTasks=lj^XNꗗ: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=lj̃t@C_E[hĂ܂... +ButtonStopDownload=_E[h𒆎~(&S) +StopDownload=_E[h𒆎~Ă낵łH +ErrorDownloadAborted=_E[h𒆎~܂ +ErrorDownloadFailed=_E[hɎs܂: %1 %2 +ErrorDownloadSizeFailed=TCY̎擾Ɏs܂: %1 %2 +ErrorFileHash1=t@C̃nbVɎs܂: %1 +ErrorFileHash2=ȃt@CnbV: \ꂽl %1, ۂ̒l %2 +ErrorProgress=Ȑis: %1 / %2 +ErrorFileSize=ȃt@CTCY: \ꂽl %1, ۂ̒l %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=CXg[ +PreparingDesc=gp̃Rs[^[ [name] CXg[鏀Ă܂B +PreviousInstallNotCompleted=OsAvP[ṼCXg[܂͍폜Ă܂Bɂ̓Rs[^[ċNKv܂B%n%n[name] ̃CXg[邽߂ɂ́AċNɂxZbgAbvsĂB +CannotContinue=ZbgAbv𑱍sł܂BuLZvNbNăZbgAbvIĂB +ApplicationsFound=ȉ̃AvP[VZbgAbvɕKvȃt@CgpĂ܂BZbgAbvɎIɃAvP[VI邱Ƃ𐄏܂B +ApplicationsFound2=ȉ̃AvP[VZbgAbvɕKvȃt@CgpĂ܂BZbgAbvɎIɃAvP[VI邱Ƃ𐄏܂BCXg[̊AZbgAbv̓AvP[V̍ċN݂܂B +CloseApplications=IɃAvP[VI(&A) +DontCloseApplications=AvP[VIȂ(&D) +ErrorCloseApplications=ZbgAbvׂ͂ẴAvP[VIɏI邱Ƃł܂łBZbgAbv𑱍sOɁAXV̕Kvȃt@CgpĂ邷ׂẴAvP[VI邱Ƃ𐄏܂B +PrepareToInstallNeedsRestart=ZbgAbv̓Rs[^[ċNKv܂BRs[^[ċNAZbgAbvēxs [name] ̃CXg[ĂB%n%nɍċN܂H? + +; *** "Installing" wizard page +WizardInstalling=CXg[ +InstallingLabel=gp̃Rs[^[ [name] CXg[Ă܂B΂炭҂B + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=[name] ZbgAbvEBU[h̊ +FinishedLabelNoIcons=gp̃Rs[^[ [name] ZbgAbv܂B +FinishedLabel=gp̃Rs[^[ [name] ZbgAbv܂BAvP[Vsɂ̓CXg[ꂽV[gJbgIĂB +ClickFinish=ZbgAbvIɂ́uvNbNĂB +FinishedRestartLabel=[name] ̃CXg[邽߂ɂ́ARs[^[ċNKv܂BɍċN܂H +FinishedRestartMessage=[name] ̃CXg[邽߂ɂ́ARs[^[ċNKv܂B%n%nɍċN܂H +ShowReadmeCheck=README t@C\B +YesRadio=ɍċN(&Y) +NoRadio=Ŏ蓮ōċN(&N) +; used for example as 'Run MyProg.exe' +RunEntryExec=%1 ̎s +; used for example as 'View Readme.txt' +RunEntryShellExec=%1 ̕\ + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=fBXN̑} +SelectDiskLabel2=fBXN %1 }AuOKvNbNĂB%n%ñfBXÑt@Cɕ\ĂtH_[ȊȌꏊɂꍇ́ApX͂邩uQƁv{^NbNĂB +PathLabel=pX(&P): +FileNotInDir2=t@C %1 %2 Ɍ‚܂BfBXN}邩Aʂ̃tH_[w肵ĂB +SelectDirectoryLabel=̃fBXN̂ꏊw肵ĂB + +; *** Installation phase messages +SetupAborted=ZbgAbv͊Ă܂B%n%nĂAxZbgAbvsĂB +AbortRetryIgnoreSelectAction=ANVIĂ +AbortRetryIgnoreRetry=Ďs(&T) +AbortRetryIgnoreIgnore=G[𖳎đs(&I) +AbortRetryIgnoreCancel=CXg[LZ + +; *** Installation status messages +StatusClosingApplications=AvP[VIĂ܂... +StatusCreateDirs=tH_[쐬Ă܂... +StatusExtractFiles=t@CWJĂ܂... +StatusCreateIcons=V|gJbg쐬Ă܂... +StatusCreateIniEntries=INIt@Cݒ肵Ă܂... +StatusCreateRegistryEntries=WXgݒ肵Ă܂... +StatusRegisterFiles=t@Co^Ă܂... +StatusSavingUninstall=ACXg[ۑĂ܂... +StatusRunProgram=CXg[Ă܂... +StatusRestartingApplications=AvP[VċNĂ܂... +StatusRollback=ύXɖ߂Ă܂... + +; *** Misc. errors +ErrorInternal2=G[: %1 +ErrorFunctionFailedNoCode=%1 G[ +ErrorFunctionFailed=%1 G[: R[h %2 +ErrorFunctionFailedWithMessage=%1 G[: R[h %2.%n%3 +ErrorExecutingProgram=t@CsG[:%n%1 + +; *** Registry errors +ErrorRegOpenKey=WXgL[I[vG[:%n%1\%2 +ErrorRegCreateKey=WXgL[쐬G[:%n%1\%2 +ErrorRegWriteKey=WXgL[݃G[:%n%1\%2 + +; *** INI errors +ErrorIniEntry=INIt@CGg쐬G[: t@C %1 + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=̃t@CXLbv(&S) (܂) +FileAbortRetryIgnoreIgnoreNotRecommended=G[𖳎đs(&I) (܂) +SourceIsCorrupted=Rs[̃t@CĂ܂B +SourceDoesntExist=Rs[̃t@C %1 ‚܂B +ExistingFileReadOnly2=̃t@C͓ǂݎp̂ߒuł܂B +ExistingFileReadOnlyRetry=ǂݎpĂxȂ(&R) +ExistingFileReadOnlyKeepExisting=̃t@Cc(&K) +ErrorReadingExistingDest=̃t@CǂݍݒɃG[܂: +FileExistsSelectAction=ANVIĂ +FileExists2=t@C͊ɑ݂܂B +FileExistsOverwriteExisting=̃t@C㏑(&O) +FileExistsKeepExisting=̃t@Cێ(&K) +FileExistsOverwriteOrKeepAll=ȍ~̋ɓs(&D) +ExistingFileNewerSelectAction=ANVIĂ +ExistingFileNewer2=ZbgAbvCXg[悤ƂĂ̂Vt@C܂B +ExistingFileNewerOverwriteExisting=̃t@C㏑(&O) +ExistingFileNewerKeepExisting=̃t@Cێ(&K) () +ExistingFileNewerOverwriteOrKeepAll=ȍ~̋ɓs(&D) +ErrorChangingAttr=t@C̑ύXɃG[܂: +ErrorCreatingTemp=Rs[̃tH_[Ƀt@C쐬ɃG[܂: +ErrorReadingSource=Rs[̃t@CǂݍݒɃG[܂: +ErrorCopying=t@CRs[ɃG[܂: +ErrorReplacingExistingFile=̃t@CuɃG[܂: +ErrorRestartReplace=ċNɂu̎sɎs܂: +ErrorRenamingTemp=Rs[tH_[̃t@CύXɃG[܂: +ErrorRegisterServer=DLL/OCX̓o^Ɏs܂: %1 +ErrorRegSvr32Failed=RegSvr32͏IR[h %1 ɂ莸s܂ +ErrorRegisterTypeLib=^CvCuւ̓o^Ɏs܂: %1 + +; *** Uninstall display name markings +UninstallDisplayNameMark=%1 (%2) +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32 rbg +UninstallDisplayNameMark64Bit=64 rbg +UninstallDisplayNameMarkAllUsers=ׂẴ[U[ +UninstallDisplayNameMarkCurrentUser=݂̃[U[ + +; *** Post-installation errors +ErrorOpeningReadme=README t@C̃I[vɎs܂B +ErrorRestartingComputer=Rs[^[̍ċNɎs܂B蓮ōċNĂB + +; *** Uninstaller messages +UninstallNotFound=t@C "%1" ‚܂BACXg[sł܂B +UninstallOpenError=t@C "%1" JƂł܂BACXg[sł܂B +UninstallUnsupportedVer=ACXg[Ot@C "%1" ́Ão[W̃ACXg[vOFłȂ`łBACXg[sł܂B +UninstallUnknownEntry=ACXg[Oɕs̃Gg (%1) ‚܂B +ConfirmUninstall=%1 Ƃ̊֘AR|[lgׂč폜܂B낵łH +UninstallOnlyOnWin64=̃vO64 rbgWindowsł̂݃ACXg[邱Ƃł܂B +OnlyAdminCanUninstall=ACXg[邽߂ɂ͊ǗҌKvłB +UninstallStatusLabel=gp̃Rs[^[ %1 폜Ă܂B΂炭҂B +UninstalledAll=%1 ͂gp̃Rs[^[琳ɍ폜܂B +UninstalledMost=%1 ̃ACXg[܂B%n%n‚̍ڂ폜ł܂łB蓮ō폜ĂB +UninstalledAndNeedsRestart=%1 ̍폜邽߂ɂ́ARs[^[ċNKv܂BɍċN܂H +UninstallDataCorrupted=t@C "%1" Ă܂BACXg[sł܂B + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Lt@C̍폜 +ConfirmDeleteSharedFile2=VXeŁA̋Lt@C͂ǂ̃vOłgpĂ܂B̋Lt@C폜܂H%n%ñvO܂̃t@CgpꍇA폜ƃvO삵ȂȂ鋰ꂪ܂B܂młȂꍇ́uvIĂBVXeɃt@CcĂNƂ͂܂B +SharedFileNameLabel=t@C: +SharedFileLocationLabel=ꏊ: +WizardUninstalling=ACXg[ +StatusUninstalling=%1 ACXg[Ă܂... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=%1 CXg[łB +ShutdownBlockReasonUninstallingApp=%1 ACXg[łB + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 o[W %2 +AdditionalIcons=ACRlj: +CreateDesktopIcon=fXNgbvɃACR쐬(&D) +CreateQuickLaunchIcon=NCbNNACR쐬(&Q) +ProgramOnTheWeb=%1 on the Web +UninstallProgram=%1 ACXg[ +LaunchProgram=%1 s +AssocFileExtension=t@Cgq %2 %1 ֘At܂B +AssocingFileExtension=t@Cgq %2 %1 ֘AtĂ܂... +AutoStartProgramGroupDescription=X^[gAbv: +AutoStartProgram=%1 IɊJn +AddonHostProgramNotFound=IꂽtH_[ %1 ‚܂łB%n%n̂܂ܑs܂H \ No newline at end of file diff --git a/Files/Languages/Korean.isl b/Files/Languages/Korean.isl new file mode 100644 index 00000000..da45cc5c --- /dev/null +++ b/Files/Languages/Korean.isl @@ -0,0 +1,391 @@ +; *** Inno Setup version 6.1.0+ Korean messages *** + +; ▒ 6.2.2+ Translator: VenusGirl (venusgirl@outlook.com) +; ▒ 6.2.0+ Translator: Logan.Hwang (logan.hwang@blueant.kr) +; ▒ 6.0.3+ Translator: SungDong Kim (acroedit@gmail.com) +; ▒ 5.5.3+ Translator: Domddol (domddol@gmail.com) +; ▒ Contributors: Hansoo KIM (iryna7@gmail.com), Woong-Jae An (a183393@hanmail.net) +; ▒ 이 번역은 한국어 맞춤법을 준수합니다. +; +; 이 파일의 사용자 제공 번역을 다운로드하려면 다음으로 이동하십시오: +; https://jrsoftware.org/files/istrans/ + +; 참고: 이 텍스트를 번역할 때는 InnoSetup 메시지에 +; 마침표가 자동으로 추가되므로 아직 없는 메시지의 끝에 +; 마침표(.)를 추가하지 마십시오 (마침표를 추가하면 +; 두 개의 마침표가 표시됩니다). + +[LangOptions] +; 다음 세 항목은 매우 중요합니다. 도움말 파일의 +; '[LangOptions] 섹션' 항목을 읽고 이해하십시오. +LanguageName=한국어 +LanguageID=$0412 +LanguageCodePage=949 +; 번역할 언어가 특수 글꼴 또는 크기를 필요로 하는 경우 +; 다음 항목 중 하나를 주석 해제하고 적절하게 변경하십시오. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=설치 +SetupWindowTitle=%1 설치 +UninstallAppTitle=제거 +UninstallAppFullTitle=%1 제거 + +; *** Misc. common +InformationTitle=정보 +ConfirmTitle=확인 +ErrorTitle=오류 + +; *** SetupLdr messages +SetupLdrStartupMessage=%1을(를) 설치합니다, 계속하시겠습니까? +LdrCannotCreateTemp=임시 파일을 만들 수 없습니다. 설치가 중단되었습니다. +LdrCannotExecTemp=임시 디렉터리에서 파일을 실행할 수 없습니다. 설치가 중단되었습니다. +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%n오류 %2: %3 +SetupFileMissing=%1 파일이 설치 디렉터리에 없습니다. 문제를 해결하거나 프로그램의 새 사본을 구하십시오. +SetupFileCorrupt=설치 파일이 손상되었습니다. 프로그램의 새 사본을 구하십시오. +SetupFileCorruptOrWrongVer=설치 파일이 손상되었거나 이 버전의 설치 프로그램과 호환되지 않습니다. 문제를 해결하거나 프로그램의 새 복사본을 구하십시오. +InvalidParameter=명령줄에 잘못된 매개변수가 전달되었습니다:%n%n%1 +SetupAlreadyRunning=설치가 이미 실행 중입니다. +WindowsVersionNotSupported=이 프로그램은 컴퓨터에서 실행 중인 Windows 버전을 지원하지 않습니다. +WindowsServicePackRequired=이 프로그램을 사용하려면 %1 서비스 팩 %2 이상이 필요합니다. +NotOnThisPlatform=이 프로그램은 %1에서 실행되지 않습니다. +OnlyOnThisPlatform=이 프로그램은 %1에서 실행되어야 합니다. +OnlyOnTheseArchitectures=이 프로그램은 다음 프로세서 아키텍처용으로 설계된 Windows 버전에만 설치할 수 있습니다:%n%n%1 +WinVersionTooLowError=이 프로그램에는 %1 버전 %2 이상이 필요합니다. +WinVersionTooHighError=%1 버전 %2 이상에 이 프로그램을 설치할 수 없습니다. +AdminPrivilegesRequired=이 프로그램을 설치할 때 관리자로 로그인해야 합니다. +PowerUserPrivilegesRequired=이 프로그램을 설치할 때 관리자 또는 Power Users 그룹의 구성원으로 로그인해야 합니다. +SetupAppRunningError=설치에서 %1이(가) 현재 실행 중임을 감지했습니다.%n%n지금 모든 인스턴스를 닫은 다음 확인을 클릭하여 계속하거나 취소를 클릭하여 종료하십시오. +UninstallAppRunningError=제거에서 %1이(가) 현재 실행 중임을 감지했습니다.%n%n지금 모든 인스턴스를 닫은 다음 확인을 클릭하여 계속하거나 취소를 클릭하여 종료하십시오. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=설치 모드 선택 +PrivilegesRequiredOverrideInstruction=설치 모드를 선택해 주십시오 +PrivilegesRequiredOverrideText1=%1은 모든 사용자 (관리자 권한 필요) 또는 사용자용으로 설치합니다. +PrivilegesRequiredOverrideText2=%1은 현재 사용자 또는 모든 사용자 (관리자 권한 필요)용으로 설치합니다. +PrivilegesRequiredOverrideAllUsers=모든 사용자용으로 설치(&A) +PrivilegesRequiredOverrideAllUsersRecommended=모든 사용자용으로 설치 (추천)(&A) +PrivilegesRequiredOverrideCurrentUser=현재 사용자용으로 설치(&M) +PrivilegesRequiredOverrideCurrentUserRecommended=현재 사용자용으로 설치 (추천)(&M) + +; *** Misc. errors +ErrorCreatingDir=설치 프로그램에서 "%1" 디렉터리를 만들지 못했습니다. +ErrorTooManyFilesInDir="%1" 디렉터리에 파일이 너무 많아서 파일을 만들 수 없습니다 + +; *** Setup common messages +ExitSetupTitle=설치 종료 +ExitSetupMessage=설치가 완료되지 않았습니다. 지금 종료하면 프로그램이 설치되지 않습니다.%n%n설치를 다시 실행하여 설치를 완료할 수 있습니다.%n%n설치를 종료하시겠습니까? +AboutSetupMenuItem=설치 정보(&A)... +AboutSetupTitle=설치 정보 +AboutSetupMessage=%1 버전 %2%n%3%n%n%1 홈 페이지:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< 뒤로(&B) +ButtonNext=다음(&N) > +ButtonInstall=설치(&I) +ButtonOK=확인 +ButtonCancel=취소 +ButtonYes=예(&Y) +ButtonYesToAll=모두 예(&A) +ButtonNo=아니오(&N) +ButtonNoToAll=모두 아니오(&O) +ButtonFinish=마침(&F) +ButtonBrowse=찾아보기(&B)... +ButtonWizardBrowse=찾아보기(&R)... +ButtonNewFolder=새 폴더 만들기(&M) + +; *** "Select Language" dialog messages +SelectLanguageTitle=설치 언어 선택 +SelectLanguageLabel=설치 중에 사용할 언어를 선택하십시오. + +; *** Common wizard text +ClickNext=다음을 클릭하여 계속하거나 취소를 클릭하여 설치를 종료합니다. +BeveledLabel= +BrowseDialogTitle=폴더 찾아보기 +BrowseDialogLabel=아래 목록에서 폴더를 선택한 후 확인을 클릭하십시오. +NewFolderName=새 폴더 + +; *** "Welcome" wizard page +WelcomeLabel1=[name] 설치 마법사에 오신 것을 환영합니다 +WelcomeLabel2=컴퓨터에 [name/ver]가 설치됩니다.%n%n계속하기 전에 다른 모든 응용 프로그램을 닫는 것이 좋습니다. + +; *** "Password" wizard page +WizardPassword=암호 +PasswordLabel1=이 설치는 암호로 보호됩니다. +PasswordLabel3=암호를 입력한 후 다음을 클릭하여 계속하십시오. 암호는 대소문자를 구분합니다. +PasswordEditLabel=암호(&P): +IncorrectPassword=입력한 암호가 올바르지 않습니다. 다시 시도하십시오. + +; *** "License Agreement" wizard page +WizardLicense=사용권 계약 +LicenseLabel=계속하기 전에 다음 중요한 정보를 읽어보십시오. +LicenseLabel3=다음 사용권 계약을 읽어보십시오. 설치를 계속하기 전에 이 계약 조건에 동의해야 합니다. +LicenseAccepted=동의합니다(&A) +LicenseNotAccepted=동의하지 않습니다(&D) + +; *** "Information" wizard pages +WizardInfoBefore=정보 +InfoBeforeLabel=계속하기 전에 다음 중요한 정보를 읽어보십시오. +InfoBeforeClickLabel=설치를 계속할 준비가 되었으면 다음을 클릭합니다. +WizardInfoAfter=정보 +InfoAfterLabel=계속하기 전에 다음 중요한 정보를 읽어보십시오. +InfoAfterClickLabel=설치를 계속할 준비가 되었으면 다음을 클릭합니다. + +; *** "User Information" wizard page +WizardUserInfo=사용자 정보 +UserInfoDesc=사용자 정보를 입력하십시오. +UserInfoName=사용자 이름(&U): +UserInfoOrg=조직(&O): +UserInfoSerial=일련 번호:(&S): +UserInfoNameRequired=이름을 입력해야 합니다. + +; *** "Select Destination Location" wizard page +WizardSelectDir=대상 위치 선택 +SelectDirDesc=[name]을(를) 어디에 설치하시겠습니까? +SelectDirLabel3=다음 폴더에 [name]을(를) 설치합니다. +SelectDirBrowseLabel=계속하려면 다음을 클릭합니다. 다른 폴더를 선택하려면 찾아보기를 클릭합니다. +DiskSpaceGBLabel=이 프로그램은 최소 [gb] GB의 디스크 여유 공간이 필요합니다. +DiskSpaceMBLabel=이 프로그램은 최소 [mb] MB의 디스크 여유 공간이 필요합니다. +CannotInstallToNetworkDrive=네트워크 드라이브에 설치할 수 없습니다. +CannotInstallToUNCPath=UNC 경로에 설치할 수 없습니다. +InvalidPath=드라이브 문자를 포함한 전체 경로를 입력해야 합니다. 예:%n%nC:\APP%n%n 또는 UNC 경로 형식:%n%n\\server\share +InvalidDrive=선택한 드라이브 또는 UNC 공유가 존재하지 않거나 액세스할 수 없습니다, 다른 경로를 선택하십시오. +DiskSpaceWarningTitle=디스크 공간이 부족합니다 +DiskSpaceWarning=설치 시 최소 %1 KB 디스크 공간이 필요하지만, 선택한 드라이브의 여유 공간은 %2 KB 밖에 없습니다.%n%n그래도 계속하시겠습니까? +DirNameTooLong=폴더 이름 또는 경로가 너무 깁니다. +InvalidDirName=폴더 이름이 유효하지 않습니다. +BadDirName32=폴더 이름은 다음 문자를 포함할 수 없습니다:%n%n%1 +DirExistsTitle=폴더가 존재합니다 +DirExists=폴더 %n%n%1%n%n이(가) 이미 존재합니다, 그래도 해당 폴더에 설치하시겠습니까? +DirDoesntExistTitle=폴더가 존재하지 않습니다 +DirDoesntExist=폴더 %n%n%1%n%n이(가) 존재하지 않습니다, 폴더를 만드시겠습니까? + +; *** "Select Components" wizard page +WizardSelectComponents=구성 요소 선택 +SelectComponentsDesc=어떤 구성 요소를 설치해야 합니까? +SelectComponentsLabel2=설치할 구성 요소를 선택하고 설치하지 않을 구성 요소를 지웁니다. 계속할 준비가 되면 다음을 클릭합니다. +FullInstallation=모두 설치 +; 가능하면 'Compact'를 'Minimal'로 번역하지 마십시오 (귀하의 언어로 '최소'를 의미합니다). +CompactInstallation=최소 설치 +CustomInstallation=사용자 지정 설치 +NoUninstallWarningTitle=구성 요소가 존재합니다 +NoUninstallWarning=다음 구성 요소가 컴퓨터에 이미 설치되어 있습니다: %n%n%1%n%n이러한 구성 요소를 선택해도 제거되지 않습니다.%n%n계속하시겠습니까? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=현재 선택은 최소 [gb] GB의 디스크 여유 공간이 필요합니다. +ComponentsDiskSpaceMBLabel=현재 선택은 최소 [mb] MB의 디스크 여유 공간이 필요합니다. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=추가 작업 선택 +SelectTasksDesc=어떤 추가 작업을 수행해야 합니까? +SelectTasksLabel2=[name]을(를) 설치하는 동안 수행할 추가 작업을 선택하고 다음을 클릭합니다. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=시작 메뉴 폴더 선택 +SelectStartMenuFolderDesc=프로그램의 바로가기를 어디에 설치하시겠습니까? +SelectStartMenuFolderLabel3=설치는 다음 시작 메뉴 폴더에 프로그램 바로가기를 만듭니다. +SelectStartMenuFolderBrowseLabel=계속하려면 다음을 클릭합니다. 다른 폴더를 선택하려면 찾아보기를 클릭합니다. +MustEnterGroupName=폴더 이름을 입력하십시오. +GroupNameTooLong=폴더 이름 또는 경로가 너무 깁니다. +InvalidGroupName=폴더 이름이 유효하지 않습니다. +BadGroupName=폴더 이름은 다음 문자를 포함할 수 없습니다:%n%n%1 +NoProgramGroupCheck2=시작 메뉴 폴더를 만들지 않음(&D) + +; *** "Ready to Install" wizard page +WizardReady=설치 준비 완료 +ReadyLabel1=[name]을(를) 컴퓨터에 설치할 준비가 되었습니다. +ReadyLabel2a=설치를 클릭하여 설치를 계속하거나 설정을 검토하거나 변경하려면 뒤로를 클릭합니다. +ReadyLabel2b=설치를 클릭하여 설치를 계속합니다. +ReadyMemoUserInfo=사용자 정보: +ReadyMemoDir=대상 위치: +ReadyMemoType=설치 유형: +ReadyMemoComponents=선택한 구성 요소: +ReadyMemoGroup=시작 메뉴 폴더: +ReadyMemoTasks=추가 작업: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=추가 파일 다운로드 중... +ButtonStopDownload=다운로드 중지(&S) +StopDownload=다운로드를 중지하시겠습니까? +ErrorDownloadAborted=다운로드가 중지되었습니다 +ErrorDownloadFailed=다운로드에 실패했습니다: %1 %2 +ErrorDownloadSizeFailed=크기를 가져오지 못했습니다: %1 %2 +ErrorFileHash1=파일 해시에 실패했습니다: %1 +ErrorFileHash2=잘못된 파일 해시: 예상 %1, 찾음 %2 +ErrorProgress=잘못된 진행 상황: %1 / %2 +ErrorFileSize=잘못된 파일 크기: 예상 %1, 찾음 %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=설치 준비 중 +PreparingDesc=컴퓨터에 [name] 설치를 준비하는 중입니다. +PreviousInstallNotCompleted=이전 프로그램의 설치/제거가 완료되지 않았습니다. 설치를 완료하려면 컴퓨터를 다시 시작해야 합니다.%n%n컴퓨터를 재시작한 후 설치를 다시 실행하여 [name] 설치를 완료하십시오. +CannotContinue=설치를 계속할 수 없습니다. 종료하려면 취소를 클릭하십시오. +ApplicationsFound=다음 응용 프로그램에서 설치 프로그램에서 업데이트해야 하는 파일을 사용하고 있습니다. 이러한 응용 프로그램을 자동으로 닫도록 허용하는 것이 좋습니다. +ApplicationsFound2=다음 응용 프로그램에서 설치 프로그램에서 업데이트해야 하는 파일을 사용하고 있습니다. 이러한 응용 프로그램을 자동으로 닫도록 허용하는 것이 좋습니다. 설치가 완료되면 응용 프로그램을 다시 시작하려고 시도합니다. +CloseApplications=응용 프로그램 자동 닫기(&A) +DontCloseApplications=응용 프로그램을 닫지 않음(&D) +ErrorCloseApplications=모든 응용 프로그램을 자동으로 닫지 못했습니다. 계속하기 전에 설치 프로그램에서 업데이트해야 하는 파일을 사용하여 모든 응용 프로그램을 닫는 것이 좋습니다. +PrepareToInstallNeedsRestart=컴퓨터를 다시 시작해야 합니다. 컴퓨터를 다시 시작한 후 설치를 다시 실행하여 [name] 설치를 완료하십시오.%n%n지금 다시 시작하시겠습니까? + +; *** "Installing" wizard page +WizardInstalling=설치 중 +InstallingLabel=컴퓨터에 [name]을(를) 설치하는 동안 잠시 기다려 주십시오. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=[name] 설치 마법사 완료 +FinishedLabelNoIcons=컴퓨터에 [name] 설치를 완료했습니다. +FinishedLabel=컴퓨터에 [name] 설치를 완료했습니다. 설치된 바로가기를 선택하여 응용 프로그램을 시작할 수 있습니다. +ClickFinish=설치를 종료하려면 마침을 클릭하십시오. +FinishedRestartLabel=[name] 설치를 완료하려면 컴퓨터를 다시 시작해야 합니다. 지금 다시 시작하시겠습니까? +FinishedRestartMessage=[name] 설치를 완료하려면 컴퓨터를 다시 시작해야 합니다.%n%n지금 다시 시작하시겠습니까? +ShowReadmeCheck=예, README 파일을 보고 싶습니다. +YesRadio=예, 지금 컴퓨터를 다시 시작합니다(&Y) +NoRadio=아니오, 나중에 컴퓨터를 다시 시작하겠습니다(&N) +; 예를 들어 'Run MyProg.exe'로 사용됩니다' +RunEntryExec=%1 실행 +; 예를 들어 'Readme.txt 보기'로 사용됩니다' +RunEntryShellExec=%1 보기 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=설치에 다음 디스크가 필요합니다 +SelectDiskLabel2=디스크 %1을(를) 삽입하고 확인을 클릭하십시오.%n%n이 디스크의 파일을 아래에 표시된 폴더 이외의 폴더에서 찾을 수 있으면 올바른 경로를 입력하거나 찾아보기를 클릭하십시오. +PathLabel=경로(&P): +FileNotInDir2="%1" 파일을 "%2"에서 찾을 수 없습니다. 올바른 디스크를 넣거나 다른 폴더를 선택하십시오. +SelectDirectoryLabel=다음 디스크의 위치를 지정하십시오. + +; *** Installation phase messages +SetupAborted=설치가 완료되지 않았습니다.%n%n문제를 해결한 후 설치를 다시 실행하십시오. +AbortRetryIgnoreSelectAction=작업 선택 +AbortRetryIgnoreRetry=재시도(&T) +AbortRetryIgnoreIgnore=오류를 무시하고 진행(&I) +AbortRetryIgnoreCancel=설치 취소 + +; *** Installation status messages +StatusClosingApplications=응용 프로그램을 닫는 중... +StatusCreateDirs=디렉터리를 만드는 중... +StatusExtractFiles=파일을 추출하는 중... +StatusCreateIcons=바로가기를 만드는 중... +StatusCreateIniEntries=INI 항목을 만드는 중... +StatusCreateRegistryEntries=레지스트리 항목을 만드는 중... +StatusRegisterFiles=파일을 등록하는 중... +StatusSavingUninstall=제거 정보를 저장하는 중... +StatusRunProgram=설치를 완료하는 중... +StatusRestartingApplications=응용 프로그램을 다시 시작하는 중... +StatusRollback=변경 내용을 롤백하는 중... + +; *** Misc. errors +ErrorInternal2=내부 오류: %1 +ErrorFunctionFailedNoCode=%1 실패 +ErrorFunctionFailed=%1 실패; 코드 %2 +ErrorFunctionFailedWithMessage=%1 실패, 코드: %2.%n%3 +ErrorExecutingProgram=파일 실행 오류:%n%1 + +; *** Registry errors +ErrorRegOpenKey=레지스트리 키 열기 오류:%n%1\%2 +ErrorRegCreateKey=레지스트리 키 생성 오류:%n%1\%2 +ErrorRegWriteKey=레지스트리 키 쓰기 오류:%n%1\%2 + +; *** INI errors +ErrorIniEntry="%1" 파일에 INI 항목 만들기 오류입니다. + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=이 파일 건너뛰기 (추천하지 않음)(&S) +FileAbortRetryIgnoreIgnoreNotRecommended=오류를 무시하고 계속 (추천하지 않음)(&I) +SourceIsCorrupted=원본 파일이 손상되었습니다 +SourceDoesntExist=원본 파일 "%1"이(가) 없습니다 +ExistingFileReadOnly2=읽기 전용으로 표시되어 있으므로 기존 파일을 교체할 수 없습니다. +ExistingFileReadOnlyRetry=읽기 전용 속성을 제거하고 다시 시도(&R) +ExistingFileReadOnlyKeepExisting=기존 파일 유지(&K) +ErrorReadingExistingDest=기존 파일을 읽는 동안 오류 발생: +FileExistsSelectAction=작업 선택 +FileExists2=파일이 이미 존재합니다. +FileExistsOverwriteExisting=기존 파일 덮어쓰기(&O) +FileExistsKeepExisting=기존 파일 유지(&K) +FileExistsOverwriteOrKeepAll=다음 충돌에 대해 이 작업 수행(&D) +ExistingFileNewerSelectAction=작업 선택 +ExistingFileNewer2=설치 프로그램에서 설치하려는 파일보다 기존 파일이 더 최신입니다. +ExistingFileNewerOverwriteExisting=기존 파일 덮어쓰기(&O) +ExistingFileNewerKeepExisting=기존 파일 유지 (추천)(&K) +ExistingFileNewerOverwriteOrKeepAll=다음 충돌에 대해 이 작업 수행(&D) +ErrorChangingAttr=기존 파일의 속성을 변경하는 동안 오류 발생: +ErrorCreatingTemp=대상 디렉터리에 파일을 만드는 동안 오류 발생: +ErrorReadingSource=원본 파일을 읽는 동안 오류 발생: +ErrorCopying=파일을 복사하는 동안 오류 발생: +ErrorReplacingExistingFile=기존 파일을 교체하는 동안 오류 발생: +ErrorRestartReplace=RestartReplace 실패: +ErrorRenamingTemp=대상 디렉터리 내의 파일 이름을 바꾸는 동안 오류 발생: +ErrorRegisterServer=DLL/OCX를 등록할 수 없습니다: %1 +ErrorRegSvr32Failed=종료 코드 %1로 인해 RegSvr32가 실패했습니다 +ErrorRegisterTypeLib=유형 라이브러리를 등록할 수 없습니다: %1 + +; *** Uninstall display name markings +; 예를 들어 '내 프로그램'으로 사용됩니다 (32비트)' +UninstallDisplayNameMark=%1 (%2)비트 +; 예를 들어 '내 프로그램'으로 사용됩니다 (32비트, 모든 사용자)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32비트 +UninstallDisplayNameMark64Bit=64비트 +UninstallDisplayNameMarkAllUsers=모든 사용자 +UninstallDisplayNameMarkCurrentUser=현재 사용자 + +; *** Post-installation errors +ErrorOpeningReadme=README 파일을 여는 동안 오류가 발생했습니다. +ErrorRestartingComputer=컴퓨터를 다시 시작하지 못했습니다. 이 작업을 수동으로 수행하십시오. + +; *** Uninstaller messages +UninstallNotFound="%1" 파일이 없습니다. 제거할 수 없습니다. +UninstallOpenError="%1" 파일을 열 수 없습니다. 제거할 수 없습니다 +UninstallUnsupportedVer="%1" 제거 로그 파일이 현재 버전의 제거 프로그램에서 인식할 수 없는 형식입니다. 제거할 수 없습니다 +UninstallUnknownEntry=제거 로그에 알 수 없는 항목 (%1)이 있습니다 +ConfirmUninstall=%1 및 해당 구성 요소를 모두 제거하시겠습니까? +UninstallOnlyOnWin64=이 설치는 64비트 Windows에서만 제거할 수 있습니다. +OnlyAdminCanUninstall=이 설치는 관리자 권한이 있는 사용자만 제거할 수 있습니다. +UninstallStatusLabel=%1이(가) 컴퓨터에서 제거되는 동안 기다려 주십시오. +UninstalledAll=%1이(가) 컴퓨터에서 성공적으로 제거되었습니다. +UninstalledMost=%1 제거가 완료되었습니다.%n%n일부 요소를 제거할 수 없습니다. 수동으로 제거할 수 있습니다. +UninstalledAndNeedsRestart=%1 제거를 완료하려면 컴퓨터를 다시 시작해야 합니다.%n%n지금 다시 시작하시겠습니까? +UninstallDataCorrupted="%1" 파일이 손상되었습니다. 제거할 수 없습니다. + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=공유 파일을 제거하시겠습니까? +ConfirmDeleteSharedFile2=시스템에 다음 공유 파일이 더 이상 어떤 프로그램에서도 사용되지 않는 것으로 표시됩니다. 제거에서 이 공유 파일을 제거하시겠습니까?%n%n이 파일을 계속 사용하고 있고 파일이 제거된 프로그램이 있으면 해당 프로그램이 제대로 작동하지 않을 수 있습니다. 확실하지 않은 경우 아니요를 선택합니다. 파일을 시스템에 남겨두어도 아무런 해가 되지 않습니다. +SharedFileNameLabel=파일 이름: +SharedFileLocationLabel=위치: +WizardUninstalling=제거 상태 +StatusUninstalling=%1을(를) 제거하는 중... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=%1을(를) 설치하는 중입니다. +ShutdownBlockReasonUninstallingApp=%1을(를) 제거하는 중입니다. + +; 아래 사용자 지정 메시지는 설치 프로그램 자체에서 사용하지 않지만 +; 스크립트에서 사용할 경우 해당 메시지를 번역할 수 있습니다. + +[CustomMessages] + +NameAndVersion=%1 버전 %2 +AdditionalIcons=바로가기 추가: +CreateDesktopIcon=바탕 화면에 바로가기 만들기(&D) +CreateQuickLaunchIcon=빠른 실행 아이콘 만들기(&Q) +ProgramOnTheWeb=%1 웹페이지 +UninstallProgram=%1 제거 +LaunchProgram=%1 실행 +AssocFileExtension=%1을 %2 파일 확장자에 연결 +AssocingFileExtension=%1을 %2 파일 확장자와 연결하는 중... +AutoStartProgramGroupDescription=시작: +AutoStartProgram=%1 자동 시작 +AddonHostProgramNotFound=%1을(를) 선택한 폴더에서 찾을 수 없습니다.%n%n계속하시겠습니까? diff --git a/Files/Languages/Norwegian.isl b/Files/Languages/Norwegian.isl new file mode 100644 index 00000000..64fc3a60 --- /dev/null +++ b/Files/Languages/Norwegian.isl @@ -0,0 +1,378 @@ +; *** Inno Setup version 6.1.0+ Norwegian (bokml) messages *** +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). +; +; Norwegian translation currently maintained by Eivind Bakkestuen +; E-mail: eivind.bakkestuen@gmail.com +; Many thanks to the following people for language improvements and comments: +; +; Harald Habberstad, Frode Weum, Morten Johnsen, +; Tore Ottinsen, Kristian Hyllestad, Thomas Kelso, Jostein Christoffer Andersen +; +; $jrsoftware: issrc/Files/Languages/Norwegian.isl,v 1.15 2007/04/23 15:03:35 josander+ Exp $ + +[LangOptions] +LanguageName=Norsk +LanguageID=$0414 +LanguageCodePage=1252 + +[Messages] + +; *** Application titles +SetupAppTitle=Installasjon +SetupWindowTitle=Installere - %1 +UninstallAppTitle=Avinstaller +UninstallAppFullTitle=%1 Avinstallere + +; *** Misc. common +InformationTitle=Informasjon +ConfirmTitle=Bekreft +ErrorTitle=Feil + +; *** SetupLdr messages +SetupLdrStartupMessage=Dette vil installere %1. Vil du fortsette? +LdrCannotCreateTemp=Kan ikke lage midlertidig fil, installasjonen er avbrutt +LdrCannotExecTemp=Kan ikke kjre fil i den midlertidige mappen, installasjonen er avbrutt + +; *** Startup error messages +LastErrorMessage=%1.%n%nFeil %2: %3 +SetupFileMissing=Filen %1 mangler i installasjonskatalogen. Vennligst korriger problemet eller skaff deg en ny kopi av programmet. +SetupFileCorrupt=Installasjonsfilene er delagte. Vennligst skaff deg en ny kopi av programmet. +SetupFileCorruptOrWrongVer=Installasjonsfilene er delagte eller ikke kompatible med dette installasjonsprogrammet. Vennligst korriger problemet eller skaff deg en ny kopi av programmet. +InvalidParameter=Kommandolinjen hadde en ugyldig parameter:%n%n%1 +SetupAlreadyRunning=Dette programmet kjrer allerede. +WindowsVersionNotSupported=Dette programmet sttter ikke Windows-versjonen p denne maskinen. +WindowsServicePackRequired=Dette programmet krever %1 Service Pack %2 eller nyere. +NotOnThisPlatform=Dette programmet kjrer ikke p %1. +OnlyOnThisPlatform=Dette programmet kjrer kun p %1. +OnlyOnTheseArchitectures=Dette programmet kan kun installeres i Windows-versjoner som er beregnet p flgende prossessorarkitekturer:%n%n%1 +WinVersionTooLowError=Dette programmet krever %1 versjon %2 eller nyere. +WinVersionTooHighError=Dette programmet kan ikke installeres p %1 versjon %2 eller nyere. +AdminPrivilegesRequired=Administrator-rettigheter kreves for installere dette programmet. +PowerUserPrivilegesRequired=Du m vre logget inn som administrator eller ha administrator-rettigheter nr du installerer dette programmet. +SetupAppRunningError=Installasjonsprogrammet har funnet ut at %1 kjrer.%n%nVennligst avslutt det n og klikk deretter OK for fortsette, eller Avbryt for avslutte. +UninstallAppRunningError=Avinstallasjonsprogrammet har funnet ut at %1 kjrer.%n%nVennligst avslutt det n og klikk deretter OK for fortsette, eller Avbryt for avslutte. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Velg Installasjon Type +PrivilegesRequiredOverrideInstruction=Installasjons Type +PrivilegesRequiredOverrideText1=%1 kan installeres for alle brukere (krever administrator-rettigheter), eller bare for deg. +PrivilegesRequiredOverrideText2=%1 kan installeres bare for deg, eller for alle brukere (krever administrator-rettigheter). +PrivilegesRequiredOverrideAllUsers=Installer for &alle brukere +PrivilegesRequiredOverrideAllUsersRecommended=Installer for &alle brukere (anbefalt) +PrivilegesRequiredOverrideCurrentUser=Installer bare for &meg +PrivilegesRequiredOverrideCurrentUserRecommended=Installer bare for &meg (anbefalt) + +; *** Misc. errors +ErrorCreatingDir=Installasjonsprogrammet kunne ikke lage mappen "%1" +ErrorTooManyFilesInDir=Kunne ikke lage en fil i mappen "%1" fordi den inneholder for mange filer + +; *** Setup common messages +ExitSetupTitle=Avslutt installasjonen +ExitSetupMessage=Installasjonen er ikke ferdig. Programmet installeres ikke hvis du avslutter n.%n%nDu kan installere programmet igjen senere hvis du vil.%n%nVil du avslutte? +AboutSetupMenuItem=&Om installasjonsprogrammet... +AboutSetupTitle=Om installasjonsprogrammet +AboutSetupMessage=%1 versjon %2%n%3%n%n%1 hjemmeside:%n%4 +AboutSetupNote= +TranslatorNote=Norwegian translation maintained by Eivind Bakkestuen (eivind.bakkestuen@gmail.com) + +; *** Buttons +ButtonBack=< &Tilbake +ButtonNext=&Neste > +ButtonInstall=&Installer +ButtonOK=OK +ButtonCancel=Avbryt +ButtonYes=&Ja +ButtonYesToAll=Ja til &alle +ButtonNo=&Nei +ButtonNoToAll=N&ei til alle +ButtonFinish=&Ferdig +ButtonBrowse=&Bla gjennom... +ButtonWizardBrowse=&Bla gjennom... +ButtonNewFolder=&Lag ny mappe + +; *** "Select Language" dialog messages +SelectLanguageTitle=Velg installasjonssprk +SelectLanguageLabel=Velg sprket som skal brukes under installasjonen. + +; *** Common wizard text +ClickNext=Klikk p Neste for fortsette, eller Avbryt for avslutte installasjonen. +BeveledLabel= +BrowseDialogTitle=Bla etter mappe +BrowseDialogLabel=Velg en mappe fra listen nedenfor, klikk deretter OK. +NewFolderName=Ny mappe + +; *** "Welcome" wizard page +WelcomeLabel1=Velkommen til installasjonsprogrammet for [name]. +WelcomeLabel2=Dette vil installere [name/ver] p din maskin.%n%nDet anbefales at du avslutter alle programmer som kjrer fr du fortsetter. + +; *** "Password" wizard page +WizardPassword=Passord +PasswordLabel1=Denne installasjonen er passordbeskyttet. +PasswordLabel3=Vennligst oppgi ditt passord og klikk p Neste for fortsette. Sm og store bokstaver behandles ulikt. +PasswordEditLabel=&Passord: +IncorrectPassword=Det angitte passordet er feil, vennligst prv igjen. + +; *** "License Agreement" wizard page +WizardLicense=Lisensbetingelser +LicenseLabel=Vennligst les flgende viktig informasjon fr du fortsetter. +LicenseLabel3=Vennligst les flgende lisensbetingelser. Du m godta innholdet i lisensbetingelsene fr du fortsetter med installasjonen. +LicenseAccepted=Jeg &aksepterer lisensbetingelsene +LicenseNotAccepted=Jeg aksepterer &ikke lisensbetingelsene + +; *** "Information" wizard pages +WizardInfoBefore=Informasjon +InfoBeforeLabel=Vennligst les flgende viktige informasjon fr du fortsetter. +InfoBeforeClickLabel=Klikk p Neste nr du er klar til fortsette. +WizardInfoAfter=Informasjon +InfoAfterLabel=Vennligst les flgende viktige informasjon fr du fortsetter. +InfoAfterClickLabel=Klikk p Neste nr du er klar til fortsette. + +; *** "User Information" wizard page +WizardUserInfo=Brukerinformasjon +UserInfoDesc=Vennligst angi informasjon. +UserInfoName=&Brukernavn: +UserInfoOrg=&Organisasjon: +UserInfoSerial=&Serienummer: +UserInfoNameRequired=Du m angi et navn. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Velg mappen hvor filene skal installeres: +SelectDirDesc=Hvor skal [name] installeres? +SelectDirLabel3=Installasjonsprogrammet vil installere [name] i flgende mappe. +SelectDirBrowseLabel=Klikk p Neste for fortsette. Klikk p Bla gjennom hvis du vil velge en annen mappe. +DiskSpaceGBLabel=Programmet krever minst [gb] GB med diskplass. +DiskSpaceMBLabel=Programmet krever minst [mb] MB med diskplass. +CannotInstallToNetworkDrive=Kan ikke installere p en nettverksstasjon. +CannotInstallToUNCPath=Kan ikke installere p en UNC-bane. Du m tilordne nettverksstasjonen hvis du vil installere i et nettverk. +InvalidPath=Du m angi en full bane med stasjonsbokstav, for eksempel:%n%nC:\APP%n%Du kan ikke bruke formen:%n%n\\server\share +InvalidDrive=Den valgte stasjonen eller UNC-delingen finnes ikke, eller er ikke tilgjengelig. Vennligst velg en annen +DiskSpaceWarningTitle=For lite diskplass +DiskSpaceWarning=Installasjonprogrammet krever minst %1 KB med ledig diskplass, men det er bare %2 KB ledig p den valgte stasjonen.%n%nvil du fortsette likevel? +DirNameTooLong=Det er for langt navn p mappen eller banen. +InvalidDirName=Navnet p mappen er ugyldig. +BadDirName32=Mappenavn m ikke inneholde noen av flgende tegn:%n%n%1 +DirExistsTitle=Eksisterende mappe +DirExists=Mappen:%n%n%1%n%nfinnes allerede. Vil du likevel installere der? +DirDoesntExistTitle=Mappen eksisterer ikke +DirDoesntExist=Mappen:%n%n%1%n%nfinnes ikke. Vil du at den skal lages? + +; *** "Select Components" wizard page +WizardSelectComponents=Velg komponenter +SelectComponentsDesc=Hvilke komponenter skal installeres? +SelectComponentsLabel2=Velg komponentene du vil installere; velg bort de komponentene du ikke vil installere. Nr du er klar, klikker du p Neste for fortsette. +FullInstallation=Full installasjon +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Kompakt installasjon +CustomInstallation=Egendefinert installasjon +NoUninstallWarningTitle=Komponenter eksisterer +NoUninstallWarning=Installasjonsprogrammet har funnet ut at flgende komponenter allerede er p din maskin:%n%n%1%n%nDisse komponentene avinstalleres ikke selv om du ikke velger dem.%n%nVil du likevel fortsette? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Valgte alternativer krever minst [gb] GB med diskplass. +ComponentsDiskSpaceMBLabel=Valgte alternativer krever minst [mb] MB med diskplass. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Velg tilleggsoppgaver +SelectTasksDesc=Hvilke tilleggsoppgaver skal utfres? +SelectTasksLabel2=Velg tilleggsoppgavene som skal utfres mens [name] installeres, klikk deretter p Neste. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Velg mappe p start-menyen +SelectStartMenuFolderDesc=Hvor skal installasjonsprogrammet plassere snarveiene? +SelectStartMenuFolderLabel3=Installasjonsprogrammet vil opprette snarveier p flgende startmeny-mappe. +SelectStartMenuFolderBrowseLabel=Klikk p Neste for fortsette. Klikk p Bla igjennom hvis du vil velge en annen mappe. +MustEnterGroupName=Du m skrive inn et mappenavn. +GroupNameTooLong=Det er for langt navn p mappen eller banen. +InvalidGroupName=Navnet p mappen er ugyldig. +BadGroupName=Mappenavnet m ikke inneholde flgende tegn:%n%n%1 +NoProgramGroupCheck2=&Ikke legg til mappe p start-menyen + +; *** "Ready to Install" wizard page +WizardReady=Klar til installere +ReadyLabel1=Installasjonsprogrammet er n klar til installere [name] p din maskin. +ReadyLabel2a=Klikk Installer for fortsette, eller Tilbake for se p eller forandre instillingene. +ReadyLabel2b=Klikk Installer for fortsette. +ReadyMemoUserInfo=Brukerinformasjon: +ReadyMemoDir=Installer i mappen: +ReadyMemoType=Installasjonstype: +ReadyMemoComponents=Valgte komponenter: +ReadyMemoGroup=Programgruppe: +ReadyMemoTasks=Tilleggsoppgaver: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Laster ned ekstra filer... +ButtonStopDownload=&Stopp nedlasting +StopDownload=Er du sikker p at du vil stoppe nedlastingen? +ErrorDownloadAborted=Nedlasting avbrutt +ErrorDownloadFailed=Nedlasting feilet: %1 %2 +ErrorDownloadSizeFailed=Kunne ikke finne filstrrelse: %1 %2 +ErrorFileHash1=Fil hash verdi feilet: %1 +ErrorFileHash2=Ugyldig fil hash verdi: forventet %1, fant %2 +ErrorProgress=Ugyldig fremdrift: %1 of %2 +ErrorFileSize=Ugyldig fil strrelse: forventet %1, fant %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Forbereder installasjonen +PreparingDesc=Installasjonsprogrammet forbereder installasjon av [name] p den maskin. +PreviousInstallNotCompleted=Installasjonen/fjerningen av et tidligere program ble ikke ferdig. Du m starte maskinen p nytt.%n%nEtter omstarten m du kjre installasjonsprogrammet p nytt for fullfre installasjonen av [name]. +CannotContinue=Installasjonsprogrammet kan ikke fortsette. Klikk p Avbryt for avslutte. +ApplicationsFound=Disse applikasjonene bruker filer som vil oppdateres av installasjonen. Det anbefales la installasjonen automatisk avslutte disse applikasjonene. +ApplicationsFound2=Disse applikasjonene bruker filer som vil oppdateres av installasjonen. Det anbefales la installasjonen automatisk avslutte disse applikasjonene. Installasjonen vil prve starte applikasjonene p nytt etter at installasjonen er avsluttet. +CloseApplications=Lukk applikasjonene &automatisk +DontCloseApplications=&Ikke lukk applikasjonene +ErrorCloseApplications=Installasjonsprogrammet kunne ikke lukke alle applikasjonene &automatisk. Det anbefales lukke alle applikasjoner som bruker filer som installasjonsprogrammet trenger oppdatere fr du fortsetter installasjonen. +PrepareToInstallNeedsRestart=Installasjonsprogrammet m gjre omstart av maskinen. Etter omstart av maskinen, kjr installasjonsprogrammet p nytt for ferdigstille installasjonen av [name].%n%nVil du gjre omstart av maskinen n? + +; *** "Installing" wizard page +WizardInstalling=Installerer +InstallingLabel=Vennligst vent mens [name] installeres p din maskin. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Fullfrer installasjonsprogrammet for [name] +FinishedLabelNoIcons=[name] er installert p din maskin. +FinishedLabel=[name] er installert p din maskin. Programmet kan kjres ved at du klikker p ett av de installerte ikonene. +ClickFinish=Klikk Ferdig for avslutte installasjonen. +FinishedRestartLabel=Maskinen m startes p nytt for at installasjonen skal fullfres. Vil du starte p nytt n? +FinishedRestartMessage=Maskinen m startes p nytt for at installasjonen skal fullfres.%n%nVil du starte p nytt n? +ShowReadmeCheck=Ja, jeg vil se p LESMEG-filen +YesRadio=&Ja, start maskinen p nytt n +NoRadio=&Nei, jeg vil starte maskinen p nytt senere +; used for example as 'Run MyProg.exe' +RunEntryExec=Kjr %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Se p %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Trenger neste diskett +SelectDiskLabel2=Vennligst sett inn diskett %1 og klikk OK.%n%nHvis filene p finnes et annet sted enn det som er angitt nedenfor, kan du skrive inn korrekt bane eller klikke p Bla Gjennom. +PathLabel=&Bane: +FileNotInDir2=Finner ikke filen "%1" i "%2". Vennligst sett inn riktig diskett eller velg en annen mappe. +SelectDirectoryLabel=Vennligst angi hvor den neste disketten er. + +; *** Installation phase messages +SetupAborted=Installasjonen ble avbrutt.%n%nVennligst korriger problemet og prv igjen. +AbortRetryIgnoreSelectAction=Velg aksjon +AbortRetryIgnoreRetry=&Prv Igjen +AbortRetryIgnoreIgnore=&Ignorer feil og fortsett +AbortRetryIgnoreCancel=Cancel installation + +; *** Installation status messages +StatusClosingApplications=Lukker applikasjoner... +StatusCreateDirs=Lager mapper... +StatusExtractFiles=Pakker ut filer... +StatusCreateIcons=Lager programikoner... +StatusCreateIniEntries=Lager INI-instillinger... +StatusCreateRegistryEntries=Lager innstillinger i registeret... +StatusRegisterFiles=Registrerer filer... +StatusSavingUninstall=Lagrer info for avinstallering... +StatusRunProgram=Gjr ferdig installasjonen... +StatusRestartingApplications=Restarter applikasjoner... +StatusRollback=Tilbakestiller forandringer... + +; *** Misc. errors +ErrorInternal2=Intern feil %1 +ErrorFunctionFailedNoCode=%1 gikk galt +ErrorFunctionFailed=%1 gikk galt; kode %2 +ErrorFunctionFailedWithMessage=%1 gikk galt; kode %2.%n%3 +ErrorExecutingProgram=Kan ikke kjre filen:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Feil under pning av registernkkel:%n%1\%2 +ErrorRegCreateKey=Feil under laging av registernkkel:%n%1\%2 +ErrorRegWriteKey=Feil under skriving til registernkkel:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Feil under laging av innstilling i filen "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Hopp over denne filen (ikke anbefalt) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorer feilen og fortsett (ikke anbefalt) +SourceIsCorrupted=Kildefilen er delagt +SourceDoesntExist=Kildefilen "%1" finnes ikke +ExistingFileReadOnly2=Den eksisterende filen er skrivebeskyttet og kan ikke erstattes. +ExistingFileReadOnlyRetry=&Fjern skrivebeskyttelse og prv igjen +ExistingFileReadOnlyKeepExisting=&Behold eksisterende fil +ErrorReadingExistingDest=En feil oppsto under lesing av den eksisterende filen: +FileExistsSelectAction=Velg aksjon +FileExists2=Filen eksisterer allerede. +FileExistsOverwriteExisting=&Overskriv den eksisterende filen +FileExistsKeepExisting=&Behold den eksisterende filen +FileExistsOverwriteOrKeepAll=&Gjr samme valg for pflgende konflikter +ExistingFileNewerSelectAction=Velg aksjon +ExistingFileNewer2=Den eksisterende filen er nyere enn filen Installasjonen prver installere. +ExistingFileNewerOverwriteExisting=&Overskriv den eksisterende filen +ExistingFileNewerKeepExisting=&Behold den eksisterende filen (anbefalt) +ExistingFileNewerOverwriteOrKeepAll=&Gjr samme valg for pflgende konflikter +ErrorChangingAttr=En feil oppsto da attributtene ble forskt forandret p den eksisterende filen: +ErrorCreatingTemp=En feil oppsto under forsket p lage en fil i ml-mappen: +ErrorReadingSource=En feil oppsto under forsket p lese kildefilen: +ErrorCopying=En feil oppsto under forsk p kopiere en fil: +ErrorReplacingExistingFile=En feil oppsto under forsket p erstatte den eksisterende filen: +ErrorRestartReplace=RestartReplace gikk galt: +ErrorRenamingTemp=En feil oppsto under omdping av fil i ml-mappen: +ErrorRegisterServer=Kan ikke registrere DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 gikk galt med avslutte kode %1 +ErrorRegisterTypeLib=Kan ikke registrere typebiblioteket: %1 + +; *** Uninstall display name markings +UninstallDisplayNameMark=%1 (%2) +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=Alle brukere +UninstallDisplayNameMarkCurrentUser=Aktiv bruker + +; *** Post-installation errors +ErrorOpeningReadme=En feil oppsto under forsket p pne LESMEG-filen. +ErrorRestartingComputer=Installasjonsprogrammet kunne ikke starte maskinen p nytt. Vennligst gjr dette manuelt. + +; *** Uninstaller messages +UninstallNotFound=Filen "%1" finnes ikke. Kan ikke avinstallere. +UninstallOpenError=Filen "%1" kunne ikke pnes. Kan ikke avinstallere. +UninstallUnsupportedVer=Kan ikke avinstallere. Avinstallasjons-loggfilen "%1" har et format som ikke gjenkjennes av denne versjonen av avinstallasjons-programmet +UninstallUnknownEntry=Et ukjent parameter (%1) ble funnet i Avinstallasjons-loggfilen +ConfirmUninstall=Er du sikker p at du helt vil fjerne %1 og alle tilhrende komponenter? +UninstallOnlyOnWin64=Denne installasjonen kan bare ufres p 64-bit Windows. +OnlyAdminCanUninstall=Denne installasjonen kan bare avinstalleres av en bruker med Administrator-rettigheter. +UninstallStatusLabel=Vennligst vent mens %1 fjernes fra maskinen. +UninstalledAll=Avinstallasjonen av %1 var vellykket +UninstalledMost=Avinstallasjonen av %1 er ferdig.%n%nEnkelte elementer kunne ikke fjernes. Disse kan fjernes manuelt. +UninstalledAndNeedsRestart=Du m starte maskinen p nytt for fullfre installasjonen av %1.%n%nVil du starte p nytt n? +UninstallDataCorrupted="%1"-filen er delagt. Kan ikke avinstallere. + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Fjerne delte filer? +ConfirmDeleteSharedFile2=Systemet indikerer at den flgende filen ikke lengre brukes av andre programmer. Vil du at avinstalleringsprogrammet skal fjerne den delte filen?%n%nHvis andre programmer bruker denne filen, kan du risikere at de ikke lengre vil virke som de skal. Velg Nei hvis du er usikker. Det vil ikke gjre noen skade hvis denne filen ligger p din maskin. +SharedFileNameLabel=Filnavn: +SharedFileLocationLabel=Plassering: +WizardUninstalling=Avinstallerings-status: +StatusUninstalling=Avinstallerer %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Installerer %1. +ShutdownBlockReasonUninstallingApp=Avinstallerer %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 versjon %2 +AdditionalIcons=Ekstra-ikoner: +CreateDesktopIcon=Lag ikon p &skrivebordet +CreateQuickLaunchIcon=Lag et &Hurtigstarts-ikon +ProgramOnTheWeb=%1 p nettet +UninstallProgram=Avinstaller %1 +LaunchProgram=Kjr %1 +AssocFileExtension=&Koble %1 med filetternavnet %2 +AssocingFileExtension=Kobler %1 med filetternavnet %2... +AutoStartProgramGroupDescription=Oppstart: +AutoStartProgram=Start %1 automatisk +AddonHostProgramNotFound=%1 ble ikke funnet i katalogen du valgte.%n%nVil du fortsette likevel? \ No newline at end of file diff --git a/Files/Languages/Polish.isl b/Files/Languages/Polish.isl new file mode 100644 index 00000000..b25f0def --- /dev/null +++ b/Files/Languages/Polish.isl @@ -0,0 +1,377 @@ +; *** Inno Setup version 6.1.0+ Polish messages *** +; Krzysztof Cynarski +; Proofreading, corrections and 5.5.7-6.1.0+ updates: +; ukasz Abramczuk +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). +; last update: 2020/07/26 + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Polski +LanguageID=$0415 +LanguageCodePage=1250 + +[Messages] + +; *** Application titles +SetupAppTitle=Instalator +SetupWindowTitle=Instalacja - %1 +UninstallAppTitle=Dezinstalator +UninstallAppFullTitle=Dezinstalacja - %1 + +; *** Misc. common +InformationTitle=Informacja +ConfirmTitle=Potwierd +ErrorTitle=Bd + +; *** SetupLdr messages +SetupLdrStartupMessage=Ten program zainstaluje aplikacj %1. Czy chcesz kontynuowa? +LdrCannotCreateTemp=Nie mona utworzy pliku tymczasowego. Instalacja przerwana +LdrCannotExecTemp=Nie mona uruchomi pliku z folderu tymczasowego. Instalacja przerwana +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nBd %2: %3 +SetupFileMissing=W folderze instalacyjnym brakuje pliku %1.%nProsz o przywrcenie brakujcych plikw lub uzyskanie nowej kopii programu instalacyjnego. +SetupFileCorrupt=Pliki instalacyjne s uszkodzone. Zaleca si uzyskanie nowej kopii programu instalacyjnego. +SetupFileCorruptOrWrongVer=Pliki instalacyjne s uszkodzone lub niezgodne z t wersj instalatora. Prosz rozwiza problem lub uzyska now kopi programu instalacyjnego. +InvalidParameter=W linii komend przekazano nieprawidowy parametr:%n%n%1 +SetupAlreadyRunning=Instalator jest ju uruchomiony. +WindowsVersionNotSupported=Ta aplikacja nie wspiera aktualnie uruchomionej wersji Windows. +WindowsServicePackRequired=Ta aplikacja wymaga systemu %1 z dodatkiem Service Pack %2 lub nowszym. +NotOnThisPlatform=Tej aplikacji nie mona uruchomi w systemie %1. +OnlyOnThisPlatform=Ta aplikacja wymaga systemu %1. +OnlyOnTheseArchitectures=Ta aplikacja moe by uruchomiona tylko w systemie Windows zaprojektowanym dla procesorw o architekturze:%n%n%1 +WinVersionTooLowError=Ta aplikacja wymaga systemu %1 w wersji %2 lub nowszej. +WinVersionTooHighError=Ta aplikacja nie moe by zainstalowana w systemie %1 w wersji %2 lub nowszej. +AdminPrivilegesRequired=Aby przeprowadzi instalacj tej aplikacji, konto uytkownika systemu musi posiada uprawnienia administratora. +PowerUserPrivilegesRequired=Aby przeprowadzi instalacj tej aplikacji, konto uytkownika systemu musi posiada uprawnienia administratora lub uytkownika zaawansowanego. +SetupAppRunningError=Instalator wykry, i aplikacja %1 jest aktualnie uruchomiona.%n%nPrzed wciniciem przycisku OK zamknij wszystkie procesy aplikacji. Kliknij przycisk Anuluj, aby przerwa instalacj. +UninstallAppRunningError=Dezinstalator wykry, i aplikacja %1 jest aktualnie uruchomiona.%n%nPrzed wciniciem przycisku OK zamknij wszystkie procesy aplikacji. Kliknij przycisk Anuluj, aby przerwa dezinstalacj. + +; *** Startup questions --- +PrivilegesRequiredOverrideTitle=Wybierz typ instalacji aplikacji +PrivilegesRequiredOverrideInstruction=Wybierz typ instalacji +PrivilegesRequiredOverrideText1=Aplikacja %1 moe zosta zainstalowana dla wszystkich uytkownikw (wymagane s uprawnienia administratora) lub tylko dla biecego uytkownika. +PrivilegesRequiredOverrideText2=Aplikacja %1 moe zosta zainstalowana dla biecego uytkownika lub wszystkich uytkownikw (wymagane s uprawnienia administratora). +PrivilegesRequiredOverrideAllUsers=Zainstaluj dla &wszystkich uytkownikw +PrivilegesRequiredOverrideAllUsersRecommended=Zainstaluj dla &wszystkich uytkownikw (zalecane) +PrivilegesRequiredOverrideCurrentUser=Zainstaluj dla &biecego uytkownika +PrivilegesRequiredOverrideCurrentUserRecommended=Zainstaluj dla &biecego uytkownika (zalecane) + +; *** Misc. errors +ErrorCreatingDir=Instalator nie mg utworzy katalogu "%1" +ErrorTooManyFilesInDir=Nie mona utworzy pliku w katalogu "%1", poniewa zawiera on zbyt wiele plikw + +; *** Setup common messages +ExitSetupTitle=Zakocz instalacj +ExitSetupMessage=Instalacja nie zostaa zakoczona. Jeeli przerwiesz j teraz, aplikacja nie zostanie zainstalowana. Mona ponowi instalacj pniej poprzez uruchamianie instalatora.%n%nCzy chcesz przerwa instalacj? +AboutSetupMenuItem=&O instalatorze... +AboutSetupTitle=O instalatorze +AboutSetupMessage=%1 wersja %2%n%3%n%n Strona domowa %1:%n%4 +AboutSetupNote= +TranslatorNote=Wersja polska: Krzysztof Cynarski%n%nOd wersji 5.5.7: ukasz Abramczuk%n + +; *** Buttons +ButtonBack=< &Wstecz +ButtonNext=&Dalej > +ButtonInstall=&Instaluj +ButtonOK=OK +ButtonCancel=Anuluj +ButtonYes=&Tak +ButtonYesToAll=Tak na &wszystkie +ButtonNo=&Nie +ButtonNoToAll=N&ie na wszystkie +ButtonFinish=&Zakocz +ButtonBrowse=&Przegldaj... +ButtonWizardBrowse=P&rzegldaj... +ButtonNewFolder=&Utwrz nowy folder + +; *** "Select Language" dialog messages +SelectLanguageTitle=Jzyk instalacji +SelectLanguageLabel=Wybierz jzyk uywany podczas instalacji: + +; *** Common wizard text +ClickNext=Kliknij przycisk Dalej, aby kontynuowa, lub Anuluj, aby zakoczy instalacj. +BeveledLabel= +BrowseDialogTitle=Wska folder +BrowseDialogLabel=Wybierz folder z poniszej listy, a nastpnie kliknij przycisk OK. +NewFolderName=Nowy folder + +; *** "Welcome" wizard page +WelcomeLabel1=Witamy w instalatorze aplikacji [name] +WelcomeLabel2=Aplikacja [name/ver] zostanie teraz zainstalowana na komputerze.%n%nZalecane jest zamknicie wszystkich innych uruchomionych programw przed rozpoczciem procesu instalacji. + +; *** "Password" wizard page +WizardPassword=Haso +PasswordLabel1=Ta instalacja jest zabezpieczona hasem. +PasswordLabel3=Podaj haso, a nastpnie kliknij przycisk Dalej, aby kontynuowa. W hasach rozrniane s wielkie i mae litery. +PasswordEditLabel=&Haso: +IncorrectPassword=Wprowadzone haso jest nieprawidowe. Sprbuj ponownie. + +; *** "License Agreement" wizard page +WizardLicense=Umowa Licencyjna +LicenseLabel=Przed kontynuacj naley zapozna si z ponisz wan informacj. +LicenseLabel3=Prosz przeczyta tekst Umowy Licencyjnej. Przed kontynuacj instalacji naley zaakceptowa warunki umowy. +LicenseAccepted=&Akceptuj warunki umowy +LicenseNotAccepted=&Nie akceptuj warunkw umowy + +; *** "Information" wizard pages +WizardInfoBefore=Informacja +InfoBeforeLabel=Przed kontynuacj naley zapozna si z ponisz informacj. +InfoBeforeClickLabel=Kiedy bdziesz gotowy do instalacji, kliknij przycisk Dalej. +WizardInfoAfter=Informacja +InfoAfterLabel=Przed kontynuacj naley zapozna si z ponisz informacj. +InfoAfterClickLabel=Gdy bdziesz gotowy do zakoczenia instalacji, kliknij przycisk Dalej. + +; *** "User Information" wizard page +WizardUserInfo=Dane uytkownika +UserInfoDesc=Prosz poda swoje dane. +UserInfoName=Nazwa &uytkownika: +UserInfoOrg=&Organizacja: +UserInfoSerial=Numer &seryjny: +UserInfoNameRequired=Nazwa uytkownika jest wymagana. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Lokalizacja docelowa +SelectDirDesc=Gdzie ma zosta zainstalowana aplikacja [name]? +SelectDirLabel3=Instalator zainstaluje aplikacj [name] do wskazanego poniej folderu. +SelectDirBrowseLabel=Kliknij przycisk Dalej, aby kontynuowa. Jeli chcesz wskaza inny folder, kliknij przycisk Przegldaj. +DiskSpaceGBLabel=Instalacja wymaga przynajmniej [gb] GB wolnego miejsca na dysku. +DiskSpaceMBLabel=Instalacja wymaga przynajmniej [mb] MB wolnego miejsca na dysku. +CannotInstallToNetworkDrive=Instalator nie moe zainstalowa aplikacji na dysku sieciowym. +CannotInstallToUNCPath=Instalator nie moe zainstalowa aplikacji w ciece UNC. +InvalidPath=Naley wprowadzi pen ciek wraz z liter dysku, np.:%n%nC:\PROGRAM%n%nlub ciek sieciow (UNC) w formacie:%n%n\\serwer\udzia +InvalidDrive=Wybrany dysk lub udostpniony folder sieciowy nie istnieje. Prosz wybra inny. +DiskSpaceWarningTitle=Niewystarczajca ilo wolnego miejsca na dysku +DiskSpaceWarning=Instalator wymaga co najmniej %1 KB wolnego miejsca na dysku. Wybrany dysk posiada tylko %2 KB dostpnego miejsca.%n%nCzy mimo to chcesz kontynuowa? +DirNameTooLong=Nazwa folderu lub cieki jest za duga. +InvalidDirName=Niepoprawna nazwa folderu. +BadDirName32=Nazwa folderu nie moe zawiera adnego z nastpujcych znakw:%n%n%1 +DirExistsTitle=Folder ju istnieje +DirExists=Poniszy folder ju istnieje:%n%n%1%n%nCzy mimo to chcesz zainstalowa aplikacj w tym folderze? +DirDoesntExistTitle=Folder nie istnieje +DirDoesntExist=Poniszy folder nie istnieje:%n%n%1%n%nCzy chcesz, aby zosta utworzony? + +; *** "Select Components" wizard page +WizardSelectComponents=Komponenty instalacji +SelectComponentsDesc=Ktre komponenty maj zosta zainstalowane? +SelectComponentsLabel2=Zaznacz komponenty, ktre chcesz zainstalowa i odznacz te, ktrych nie chcesz zainstalowa. Kliknij przycisk Dalej, aby kontynuowa. +FullInstallation=Instalacja pena +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Instalacja podstawowa +CustomInstallation=Instalacja uytkownika +NoUninstallWarningTitle=Zainstalowane komponenty +NoUninstallWarning=Instalator wykry, e na komputerze s ju zainstalowane nastpujce komponenty:%n%n%1%n%nOdznaczenie ktregokolwiek z nich nie spowoduje ich dezinstalacji.%n%nCzy pomimo tego chcesz kontynuowa? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Wybrane komponenty wymagaj co najmniej [gb] GB na dysku. +ComponentsDiskSpaceMBLabel=Wybrane komponenty wymagaj co najmniej [mb] MB na dysku. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Zadania dodatkowe +SelectTasksDesc=Ktre zadania dodatkowe maj zosta wykonane? +SelectTasksLabel2=Zaznacz dodatkowe zadania, ktre instalator ma wykona podczas instalacji aplikacji [name], a nastpnie kliknij przycisk Dalej, aby kontynuowa. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Folder Menu Start +SelectStartMenuFolderDesc=Gdzie maj zosta umieszczone skrty do aplikacji? +SelectStartMenuFolderLabel3=Instalator utworzy skrty do aplikacji we wskazanym poniej folderze Menu Start. +SelectStartMenuFolderBrowseLabel=Kliknij przycisk Dalej, aby kontynuowa. Jeli chcesz wskaza inny folder, kliknij przycisk Przegldaj. +MustEnterGroupName=Musisz wprowadzi nazw folderu. +GroupNameTooLong=Nazwa folderu lub cieki jest za duga. +InvalidGroupName=Niepoprawna nazwa folderu. +BadGroupName=Nazwa folderu nie moe zawiera adnego z nastpujcych znakw:%n%n%1 +NoProgramGroupCheck2=&Nie twrz folderu w Menu Start + +; *** "Ready to Install" wizard page +WizardReady=Gotowy do rozpoczcia instalacji +ReadyLabel1=Instalator jest ju gotowy do rozpoczcia instalacji aplikacji [name] na komputerze. +ReadyLabel2a=Kliknij przycisk Instaluj, aby rozpocz instalacj lub Wstecz, jeli chcesz przejrze lub zmieni ustawienia. +ReadyLabel2b=Kliknij przycisk Instaluj, aby kontynuowa instalacj. +ReadyMemoUserInfo=Dane uytkownika: +ReadyMemoDir=Lokalizacja docelowa: +ReadyMemoType=Rodzaj instalacji: +ReadyMemoComponents=Wybrane komponenty: +ReadyMemoGroup=Folder w Menu Start: +ReadyMemoTasks=Dodatkowe zadania: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Pobieranie dodatkowych plikw... +ButtonStopDownload=&Zatrzymaj pobieranie +StopDownload=Czy na pewno chcesz zatrzyma pobieranie? +ErrorDownloadAborted=Pobieranie przerwane +ErrorDownloadFailed=Bd pobierania: %1 %2 +ErrorDownloadSizeFailed=Pobieranie informacji o rozmiarze nie powiodo si: %1 %2 +ErrorFileHash1=Bd sumy kontrolnej pliku: %1 +ErrorFileHash2=Nieprawidowa suma kontrolna pliku: oczekiwano %1, otrzymano %2 +ErrorProgress=Nieprawidowy postp: %1 z %2 +ErrorFileSize=Nieprawidowy rozmiar pliku: oczekiwano %1, otrzymano %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Przygotowanie do instalacji +PreparingDesc=Instalator przygotowuje instalacj aplikacji [name] na komputerze. +PreviousInstallNotCompleted=Instalacja/dezinstalacja poprzedniej wersji aplikacji nie zostaa zakoczona. Aby zakoczy instalacj, naley ponownie uruchomi komputer. %n%nNastpnie ponownie uruchom instalator, aby zakoczy instalacj aplikacji [name]. +CannotContinue=Instalator nie moe kontynuowa. Kliknij przycisk Anuluj, aby przerwa instalacj. +ApplicationsFound=Ponisze aplikacje uywaj plikw, ktre musz zosta uaktualnione przez instalator. Zaleca si zezwoli na automatyczne zamknicie tych aplikacji przez program instalacyjny. +ApplicationsFound2=Ponisze aplikacje uywaj plikw, ktre musz zosta uaktualnione przez instalator. Zaleca si zezwoli na automatyczne zamknicie tych aplikacji przez program instalacyjny. Po zakoczonej instalacji instalator podejmie prb ich ponownego uruchomienia. +CloseApplications=&Automatycznie zamknij aplikacje +DontCloseApplications=&Nie zamykaj aplikacji +ErrorCloseApplications=Instalator nie by w stanie automatycznie zamkn wymaganych aplikacji. Zalecane jest zamknicie wszystkich aplikacji, ktre aktualnie uywaj uaktualnianych przez program instalacyjny plikw. +PrepareToInstallNeedsRestart=Instalator wymaga ponownego uruchomienia komputera. Po restarcie komputera uruchom instalator ponownie, by dokoczy proces instalacji aplikacji [name].%n%nCzy chcesz teraz uruchomi komputer ponownie? + +; *** "Installing" wizard page +WizardInstalling=Instalacja +InstallingLabel=Poczekaj, a instalator zainstaluje aplikacj [name] na komputerze. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Zakoczono instalacj aplikacji [name] +FinishedLabelNoIcons=Instalator zakoczy instalacj aplikacji [name] na komputerze. +FinishedLabel=Instalator zakoczy instalacj aplikacji [name] na komputerze. Aplikacja moe by uruchomiona poprzez uycie zainstalowanych skrtw. +ClickFinish=Kliknij przycisk Zakocz, aby zakoczy instalacj. +FinishedRestartLabel=Aby zakoczy instalacj aplikacji [name], instalator musi ponownie uruchomi komputer. Czy chcesz teraz uruchomi komputer ponownie? +FinishedRestartMessage=Aby zakoczy instalacj aplikacji [name], instalator musi ponownie uruchomi komputer.%n%nCzy chcesz teraz uruchomi komputer ponownie? +ShowReadmeCheck=Tak, chc przeczyta dodatkowe informacje +YesRadio=&Tak, uruchom ponownie teraz +NoRadio=&Nie, uruchomi ponownie pniej +; used for example as 'Run MyProg.exe' +RunEntryExec=Uruchom aplikacj %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Wywietl plik %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Instalator potrzebuje kolejnego archiwum +SelectDiskLabel2=Prosz woy dysk %1 i klikn przycisk OK.%n%nJeli wymieniony poniej folder nie okrela pooenia plikw z tego dysku, prosz wprowadzi poprawn ciek lub klikn przycisk Przegldaj. +PathLabel=&cieka: +FileNotInDir2=cieka "%2" nie zawiera pliku "%1". Prosz woy waciwy dysk lub wybra inny folder. +SelectDirectoryLabel=Prosz okreli lokalizacj kolejnego archiwum instalatora. + +; *** Installation phase messages +SetupAborted=Instalacja nie zostaa zakoczona.%n%nProsz rozwiza problem i ponownie rozpocz instalacj. +AbortRetryIgnoreSelectAction=Wybierz operacj +AbortRetryIgnoreRetry=Sprbuj &ponownie +AbortRetryIgnoreIgnore=Z&ignoruj bd i kontynuuj +AbortRetryIgnoreCancel=Przerwij instalacj + +; *** Installation status messages +StatusClosingApplications=Zamykanie aplikacji... +StatusCreateDirs=Tworzenie folderw... +StatusExtractFiles=Dekompresja plikw... +StatusCreateIcons=Tworzenie skrtw aplikacji... +StatusCreateIniEntries=Tworzenie zapisw w plikach INI... +StatusCreateRegistryEntries=Tworzenie zapisw w rejestrze... +StatusRegisterFiles=Rejestracja plikw... +StatusSavingUninstall=Zapisywanie informacji o dezinstalacji... +StatusRunProgram=Koczenie instalacji... +StatusRestartingApplications=Ponowne uruchamianie aplikacji... +StatusRollback=Cofanie zmian... + +; *** Misc. errors +ErrorInternal2=Wewntrzny bd: %1 +ErrorFunctionFailedNoCode=Bd podczas wykonywania %1 +ErrorFunctionFailed=Bd podczas wykonywania %1; kod %2 +ErrorFunctionFailedWithMessage=Bd podczas wykonywania %1; kod %2.%n%3 +ErrorExecutingProgram=Nie mona uruchomi:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Bd podczas otwierania klucza rejestru:%n%1\%2 +ErrorRegCreateKey=Bd podczas tworzenia klucza rejestru:%n%1\%2 +ErrorRegWriteKey=Bd podczas zapisu do klucza rejestru:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Bd podczas tworzenia pozycji w pliku INI: "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Pomi plik (niezalecane) +FileAbortRetryIgnoreIgnoreNotRecommended=Z&ignoruj bd i kontynuuj (niezalecane) +SourceIsCorrupted=Plik rdowy jest uszkodzony +SourceDoesntExist=Plik rdowy "%1" nie istnieje +ExistingFileReadOnly2=Istniejcy plik nie moe zosta zastpiony, gdy jest oznaczony jako "Tylko do odczytu". +ExistingFileReadOnlyRetry=&Usu atrybut "Tylko do odczytu" i sprbuj ponownie +ExistingFileReadOnlyKeepExisting=&Zachowaj istniejcy plik +ErrorReadingExistingDest=Wystpi bd podczas prby odczytu istniejcego pliku: +FileExistsSelectAction=Wybierz czynno +FileExists2=Plik ju istnieje. +FileExistsOverwriteExisting=&Nadpisz istniejcy plik +FileExistsKeepExisting=&Zachowaj istniejcy plik +FileExistsOverwriteOrKeepAll=&Wykonaj t czynno dla kolejnych przypadkw +ExistingFileNewerSelectAction=Wybierz czynno +ExistingFileNewer2=Istniejcy plik jest nowszy ni ten, ktry instalator prbuje skopiowa. +ExistingFileNewerOverwriteExisting=&Nadpisz istniejcy plik +ExistingFileNewerKeepExisting=&Zachowaj istniejcy plik (zalecane) +ExistingFileNewerOverwriteOrKeepAll=&Wykonaj t czynno dla kolejnych przypadkw +ErrorChangingAttr=Wystpi bd podczas prby zmiany atrybutw pliku docelowego: +ErrorCreatingTemp=Wystpi bd podczas prby utworzenia pliku w folderze docelowym: +ErrorReadingSource=Wystpi bd podczas prby odczytu pliku rdowego: +ErrorCopying=Wystpi bd podczas prby kopiowania pliku: +ErrorReplacingExistingFile=Wystpi bd podczas prby zamiany istniejcego pliku: +ErrorRestartReplace=Prba zastpienia plikw przy ponownym uruchomieniu komputera nie powioda si. +ErrorRenamingTemp=Wystpi bd podczas prby zmiany nazwy pliku w folderze docelowym: +ErrorRegisterServer=Nie mona zarejestrowa DLL/OCX: %1 +ErrorRegSvr32Failed=Funkcja RegSvr32 zakoczya si z kodem bdu %1 +ErrorRegisterTypeLib=Nie mog zarejestrowa biblioteki typw: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=wersja 32-bitowa +UninstallDisplayNameMark64Bit=wersja 64-bitowa +UninstallDisplayNameMarkAllUsers=wszyscy uytkownicy +UninstallDisplayNameMarkCurrentUser=biecy uytkownik + +; *** Post-installation errors +ErrorOpeningReadme=Wystpi bd podczas prby otwarcia pliku z informacjami dodatkowymi. +ErrorRestartingComputer=Instalator nie mg ponownie uruchomi tego komputera. Prosz wykona t czynno samodzielnie. + +; *** Uninstaller messages +UninstallNotFound=Plik "%1" nie istnieje. Nie mona przeprowadzi dezinstalacji. +UninstallOpenError=Plik "%1" nie mg zosta otwarty. Nie mona przeprowadzi dezinstalacji. +UninstallUnsupportedVer=Ta wersja programu dezinstalacyjnego nie rozpoznaje formatu logu dezinstalacji w pliku "%1". Nie mona przeprowadzi dezinstalacji. +UninstallUnknownEntry=W logu dezinstalacji wystpia nieznana pozycja (%1) +ConfirmUninstall=Czy na pewno chcesz usun aplikacj %1 i wszystkie jej skadniki? +UninstallOnlyOnWin64=Ta aplikacja moe by odinstalowana tylko w 64-bitowej wersji systemu Windows. +OnlyAdminCanUninstall=Ta instalacja moe by odinstalowana tylko przez uytkownika z uprawnieniami administratora. +UninstallStatusLabel=Poczekaj, a aplikacja %1 zostanie usunita z komputera. +UninstalledAll=Aplikacja %1 zostaa usunita z komputera. +UninstalledMost=Dezinstalacja aplikacji %1 zakoczya si.%n%nNiektre elementy nie mogy zosta usunite. Naley usun je samodzielnie. +UninstalledAndNeedsRestart=Komputer musi zosta ponownie uruchomiony, aby zakoczy proces dezinstalacji aplikacji %1.%n%nCzy chcesz teraz ponownie uruchomi komputer? +UninstallDataCorrupted=Plik "%1" jest uszkodzony. Nie mona przeprowadzi dezinstalacji. + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Usun plik wspdzielony? +ConfirmDeleteSharedFile2=System wskazuje, i nastpujcy plik nie jest ju uywany przez aden program. Czy chcesz odinstalowa ten plik wspdzielony?%n%nJeli inne programy nadal uywaj tego pliku, a zostanie on usunity, mog one przesta dziaa prawidowo. W przypadku braku pewnoci, kliknij przycisk Nie. Pozostawienie tego pliku w systemie nie spowoduje adnych szkd. +SharedFileNameLabel=Nazwa pliku: +SharedFileLocationLabel=Pooenie: +WizardUninstalling=Stan dezinstalacji +StatusUninstalling=Dezinstalacja aplikacji %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Instalacja aplikacji %1. +ShutdownBlockReasonUninstallingApp=Dezinstalacja aplikacji %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 (wersja %2) +AdditionalIcons=Dodatkowe skrty: +CreateDesktopIcon=Utwrz skrt na &pulpicie +CreateQuickLaunchIcon=Utwrz skrt na pasku &szybkiego uruchamiania +ProgramOnTheWeb=Strona internetowa aplikacji %1 +UninstallProgram=Dezinstalacja aplikacji %1 +LaunchProgram=Uruchom aplikacj %1 +AssocFileExtension=&Przypisz aplikacj %1 do rozszerzenia pliku %2 +AssocingFileExtension=Przypisywanie aplikacji %1 do rozszerzenia pliku %2... +AutoStartProgramGroupDescription=Autostart: +AutoStartProgram=Automatycznie uruchamiaj aplikacj %1 +AddonHostProgramNotFound=Aplikacja %1 nie zostaa znaleziona we wskazanym przez Ciebie folderze.%n%nCzy pomimo tego chcesz kontynuowa? diff --git a/Files/Languages/Portuguese.isl b/Files/Languages/Portuguese.isl new file mode 100644 index 00000000..92f442ca --- /dev/null +++ b/Files/Languages/Portuguese.isl @@ -0,0 +1,366 @@ +; *** Inno Setup version 6.1.0+ Portuguese (Portugal) messages *** +; +; Maintained by Nuno Silva (nars AT gmx.net) + +[LangOptions] +LanguageName=Portugu<00EA>s (Portugal) +LanguageID=$0816 +LanguageCodePage=1252 + +[Messages] + +; *** Application titles +SetupAppTitle=Instalao +SetupWindowTitle=%1 - Instalao +UninstallAppTitle=Desinstalao +UninstallAppFullTitle=%1 - Desinstalao + +; *** Misc. common +InformationTitle=Informao +ConfirmTitle=Confirmao +ErrorTitle=Erro + +; *** SetupLdr messages +SetupLdrStartupMessage=Ir ser instalado o %1. Deseja continuar? +LdrCannotCreateTemp=No foi possvel criar um ficheiro temporrio. Instalao cancelada +LdrCannotExecTemp=No foi possvel executar um ficheiro na directoria temporria. Instalao cancelada +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nErro %2: %3 +SetupFileMissing=O ficheiro %1 no foi encontrado na pasta de instalao. Corrija o problema ou obtenha uma nova cpia do programa. +SetupFileCorrupt=Os ficheiros de instalao esto corrompidos. Obtenha uma nova cpia do programa. +SetupFileCorruptOrWrongVer=Os ficheiros de instalao esto corrompidos, ou so incompatveis com esta verso do Assistente de Instalao. Corrija o problema ou obtenha uma nova cpia do programa. +InvalidParameter=Foi especificado um parmetro invlido na linha de comando:%n%n%1 +SetupAlreadyRunning=A instalao j est em execuo. +WindowsVersionNotSupported=Este programa no suporta a verso do Windows que est a utilizar. +WindowsServicePackRequired=Este programa necessita de %1 Service Pack %2 ou mais recente. +NotOnThisPlatform=Este programa no pode ser executado no %1. +OnlyOnThisPlatform=Este programa deve ser executado no %1. +OnlyOnTheseArchitectures=Este programa s pode ser instalado em verses do Windows preparadas para as seguintes arquitecturas:%n%n%1 +WinVersionTooLowError=Este programa necessita do %1 verso %2 ou mais recente. +WinVersionTooHighError=Este programa no pode ser instalado no %1 verso %2 ou mais recente. +AdminPrivilegesRequired=Deve iniciar sesso como administrador para instalar este programa. +PowerUserPrivilegesRequired=Deve iniciar sesso como administrador ou membro do grupo de Super Utilizadores para instalar este programa. +SetupAppRunningError=O Assistente de Instalao detectou que o %1 est em execuo. Feche-o e de seguida clique em OK para continuar, ou clique em Cancelar para cancelar a instalao. +UninstallAppRunningError=O Assistente de Desinstalao detectou que o %1 est em execuo. Feche-o e de seguida clique em OK para continuar, ou clique em Cancelar para cancelar a desinstalao. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Seleccione o Modo de Instalao +PrivilegesRequiredOverrideInstruction=Seleccione o Modo de Instalao +PrivilegesRequiredOverrideText1=%1 pode ser instalado para todos os utilizadores (necessita de privilgios administrativos), ou s para si. +PrivilegesRequiredOverrideText2=%1 pode ser instalado s para si, ou para todos os utilizadores (necessita de privilgios administrativos). +PrivilegesRequiredOverrideAllUsers=Instalar para &todos os utilizadores +PrivilegesRequiredOverrideAllUsersRecommended=Instalar para &todos os utilizadores (recomendado) +PrivilegesRequiredOverrideCurrentUser=Instalar apenas para &mim +PrivilegesRequiredOverrideCurrentUserRecommended=Instalar apenas para &mim (recomendado) + +; *** Misc. errors +ErrorCreatingDir=O Assistente de Instalao no consegue criar a directoria "%1" +ErrorTooManyFilesInDir=No possvel criar um ficheiro na directoria "%1" porque esta contm demasiados ficheiros + +; *** Setup common messages +ExitSetupTitle=Terminar a instalao +ExitSetupMessage=A instalao no est completa. Se terminar agora, o programa no ser instalado.%n%nMais tarde poder executar novamente este Assistente de Instalao e concluir a instalao.%n%nDeseja terminar a instalao? +AboutSetupMenuItem=&Acerca de... +AboutSetupTitle=Acerca do Assistente de Instalao +AboutSetupMessage=%1 verso %2%n%3%n%n%1 home page:%n%4 +AboutSetupNote= +TranslatorNote=Portuguese translation maintained by NARS (nars@gmx.net) + +; *** Buttons +ButtonBack=< &Anterior +ButtonNext=&Seguinte > +ButtonInstall=&Instalar +ButtonOK=OK +ButtonCancel=Cancelar +ButtonYes=&Sim +ButtonYesToAll=Sim para &todos +ButtonNo=&No +ButtonNoToAll=N&o para todos +ButtonFinish=&Concluir +ButtonBrowse=&Procurar... +ButtonWizardBrowse=P&rocurar... +ButtonNewFolder=&Criar Nova Pasta + +; *** "Select Language" dialog messages +SelectLanguageTitle=Seleccione o Idioma do Assistente de Instalao +SelectLanguageLabel=Seleccione o idioma para usar durante a Instalao. + +; *** Common wizard text +ClickNext=Clique em Seguinte para continuar ou em Cancelar para cancelar a instalao. +BeveledLabel= +BrowseDialogTitle=Procurar Pasta +BrowseDialogLabel=Seleccione uma pasta na lista abaixo e clique em OK. +NewFolderName=Nova Pasta + +; *** "Welcome" wizard page +WelcomeLabel1=Bem-vindo ao Assistente de Instalao do [name] +WelcomeLabel2=O Assistente de Instalao ir instalar o [name/ver] no seu computador.%n%n recomendado que feche todas as outras aplicaes antes de continuar. + +; *** "Password" wizard page +WizardPassword=Palavra-passe +PasswordLabel1=Esta instalao est protegida por palavra-passe. +PasswordLabel3=Insira a palavra-passe e de seguida clique em Seguinte para continuar. Na palavra-passe existe diferena entre maisculas e minsculas. +PasswordEditLabel=&Palavra-passe: +IncorrectPassword=A palavra-passe que introduziu no est correcta. Tente novamente. + +; *** "License Agreement" wizard page +WizardLicense=Contrato de licena +LicenseLabel= importante que leia as seguintes informaes antes de continuar. +LicenseLabel3=Leia atentamente o seguinte contrato de licena. Deve aceitar os termos do contrato antes de continuar a instalao. +LicenseAccepted=A&ceito o contrato +LicenseNotAccepted=&No aceito o contrato + +; *** "Information" wizard pages +WizardInfoBefore=Informao +InfoBeforeLabel= importante que leia as seguintes informaes antes de continuar. +InfoBeforeClickLabel=Quando estiver pronto para continuar clique em Seguinte. +WizardInfoAfter=Informao +InfoAfterLabel= importante que leia as seguintes informaes antes de continuar. +InfoAfterClickLabel=Quando estiver pronto para continuar clique em Seguinte. + +; *** "User Information" wizard page +WizardUserInfo=Informaes do utilizador +UserInfoDesc=Introduza as suas informaes. +UserInfoName=Nome do &utilizador: +UserInfoOrg=&Organizao: +UserInfoSerial=&Nmero de srie: +UserInfoNameRequired=Deve introduzir um nome. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Seleccione a localizao de destino +SelectDirDesc=Onde dever ser instalado o [name]? +SelectDirLabel3=O [name] ser instalado na seguinte pasta. +SelectDirBrowseLabel=Para continuar, clique em Seguinte. Se desejar seleccionar uma pasta diferente, clique em Procurar. +DiskSpaceGBLabel= necessrio pelo menos [gb] GB de espao livre em disco. +DiskSpaceMBLabel= necessrio pelo menos [mb] MB de espao livre em disco. +CannotInstallToNetworkDrive=O Assistente de Instalao no pode instalar numa unidade de rede. +CannotInstallToUNCPath=O Assistente de Instalao no pode instalar num caminho UNC. +InvalidPath= necessrio indicar o caminho completo com a letra de unidade; por exemplo:%n%nC:\APP%n%nou um caminho UNC no formato:%n%n\\servidor\partilha +InvalidDrive=A unidade ou partilha UNC seleccionada no existe ou no est acessvel. Seleccione outra. +DiskSpaceWarningTitle=No h espao suficiente no disco +DiskSpaceWarning=O Assistente de Instalao necessita de pelo menos %1 KB de espao livre, mas a unidade seleccionada tem apenas %2 KB disponveis.%n%nDeseja continuar de qualquer forma? +DirNameTooLong=O nome ou caminho para a pasta demasiado longo. +InvalidDirName=O nome da pasta no vlido. +BadDirName32=O nome da pasta no pode conter nenhum dos seguintes caracteres:%n%n%1 +DirExistsTitle=A pasta j existe +DirExists=A pasta:%n%n%1%n%nj existe. Pretende instalar nesta pasta? +DirDoesntExistTitle=A pasta no existe +DirDoesntExist=A pasta:%n%n%1%n%nno existe. Pretende que esta pasta seja criada? + +; *** "Select Components" wizard page +WizardSelectComponents=Seleccione os componentes +SelectComponentsDesc=Que componentes devero ser instalados? +SelectComponentsLabel2=Seleccione os componentes que quer instalar e desseleccione os componentes que no quer instalar. Clique em Seguinte quando estiver pronto para continuar. +FullInstallation=Instalao Completa +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Instalao Compacta +CustomInstallation=Instalao Personalizada +NoUninstallWarningTitle=Componentes Encontrados +NoUninstallWarning=O Assistente de Instalao detectou que os seguintes componentes esto instalados no seu computador:%n%n%1%n%nSe desseleccionar estes componentes eles no sero desinstalados.%n%nDeseja continuar? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=A seleco actual necessita de pelo menos [gb] GB de espao em disco. +ComponentsDiskSpaceMBLabel=A seleco actual necessita de pelo menos [mb] MB de espao em disco. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Seleccione tarefas adicionais +SelectTasksDesc=Que tarefas adicionais devero ser executadas? +SelectTasksLabel2=Seleccione as tarefas adicionais que deseja que o Assistente de Instalao execute na instalao do [name] e em seguida clique em Seguinte. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Seleccione a pasta do Menu Iniciar +SelectStartMenuFolderDesc=Onde devero ser colocados os cones de atalho do programa? +SelectStartMenuFolderLabel3=Os cones de atalho do programa sero criados na seguinte pasta do Menu Iniciar. +SelectStartMenuFolderBrowseLabel=Para continuar, clique em Seguinte. Se desejar seleccionar uma pasta diferente, clique em Procurar. +MustEnterGroupName= necessrio introduzir um nome para a pasta. +GroupNameTooLong=O nome ou caminho para a pasta demasiado longo. +InvalidGroupName=O nome da pasta no vlido. +BadGroupName=O nome da pasta no pode conter nenhum dos seguintes caracteres:%n%n%1 +NoProgramGroupCheck2=&No criar nenhuma pasta no Menu Iniciar + +; *** "Ready to Install" wizard page +WizardReady=Pronto para Instalar +ReadyLabel1=O Assistente de Instalao est pronto para instalar o [name] no seu computador. +ReadyLabel2a=Clique em Instalar para continuar a instalao, ou clique em Anterior se desejar rever ou alterar alguma das configuraes. +ReadyLabel2b=Clique em Instalar para continuar a instalao. +ReadyMemoUserInfo=Informaes do utilizador: +ReadyMemoDir=Localizao de destino: +ReadyMemoType=Tipo de instalao: +ReadyMemoComponents=Componentes seleccionados: +ReadyMemoGroup=Pasta do Menu Iniciar: +ReadyMemoTasks=Tarefas adicionais: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=A transferir ficheiros adicionais... +ButtonStopDownload=&Parar transferncia +StopDownload=Tem a certeza que deseja parar a transferncia? +ErrorDownloadAborted=Transferncia cancelada +ErrorDownloadFailed=Falha na transferncia: %1 %2 +ErrorDownloadSizeFailed=Falha ao obter tamanho: %1 %2 +ErrorFileHash1=Falha de verificao do ficheiro: %1 +ErrorFileHash2=Hash do ficheiro invlida: experado %1, encontrado %2 +ErrorProgress=Progresso invlido: %1 de %2 +ErrorFileSize=Tamanho de ficheiro invlido: experado %1, encontrado %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Preparando-se para instalar +PreparingDesc=Preparando-se para instalar o [name] no seu computador. +PreviousInstallNotCompleted=A instalao/remoo de um programa anterior no foi completada. Necessitar de reiniciar o computador para completar essa instalao.%n%nDepois de reiniciar o computador, execute novamente este Assistente de Instalao para completar a instalao do [name]. +CannotContinue=A instalao no pode continuar. Clique em Cancelar para sair. +ApplicationsFound=As seguintes aplicaes esto a utilizar ficheiros que necessitam ser actualizados pelo Assistente de Instalao. recomendado que permita que o Assistente de Instalao feche estas aplicaes. +ApplicationsFound2=As seguintes aplicaes esto a utilizar ficheiros que necessitam ser actualizados pelo Assistente de Instalao. recomendado que permita que o Assistente de Instalao feche estas aplicaes. Depois de completar a instalao, o Assistente de Instalao tentar reiniciar as aplicaes. +CloseApplications=&Fechar as aplicaes automaticamente +DontCloseApplications=&No fechar as aplicaes +ErrorCloseApplications=O Assistente de Instalao no conseguiu fechar todas as aplicaes automaticamente. Antes de continuar recomendado que feche todas as aplicaes que utilizem ficheiros que necessitem de ser actualizados pelo Assistente de Instalao. +PrepareToInstallNeedsRestart=O Assistente de Instalao necessita reiniciar o seu computador. Depois de reiniciar o computador, execute novamente o Assistente de Instalao para completar a instalao do [name].%n%nDeseja reiniciar agora? + +; *** "Installing" wizard page +WizardInstalling=A instalar +InstallingLabel=Aguarde enquanto o Assistente de Instalao instala o [name] no seu computador. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Instalao do [name] concluda +FinishedLabelNoIcons=O Assistente de Instalao concluiu a instalao do [name] no seu computador. +FinishedLabel=O Assistente de Instalao concluiu a instalao do [name] no seu computador. A aplicao pode ser iniciada atravs dos cones de atalho instalados. +ClickFinish=Clique em Concluir para finalizar o Assistente de Instalao. +FinishedRestartLabel=Para completar a instalao do [name], o Assistente de Instalao dever reiniciar o seu computador. Deseja reiniciar agora? +FinishedRestartMessage=Para completar a instalao do [name], o Assistente de Instalao dever reiniciar o seu computador.%n%nDeseja reiniciar agora? +ShowReadmeCheck=Sim, desejo ver o ficheiro LEIAME +YesRadio=&Sim, desejo reiniciar o computador agora +NoRadio=&No, desejo reiniciar o computador mais tarde +; used for example as 'Run MyProg.exe' +RunEntryExec=Executar %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Visualizar %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=O Assistente de Instalao precisa do disco seguinte +SelectDiskLabel2=Introduza o disco %1 e clique em OK.%n%nSe os ficheiros deste disco estiverem num local diferente do mostrado abaixo, indique o caminho correcto ou clique em Procurar. +PathLabel=&Caminho: +FileNotInDir2=O ficheiro "%1" no foi encontrado em "%2". Introduza o disco correcto ou seleccione outra pasta. +SelectDirectoryLabel=Indique a localizao do disco seguinte. + +; *** Installation phase messages +SetupAborted=A instalao no est completa.%n%nCorrija o problema e execute o Assistente de Instalao novamente. +AbortRetryIgnoreSelectAction=Seleccione uma aco +AbortRetryIgnoreRetry=&Tentar novamente +AbortRetryIgnoreIgnore=&Ignorar o erro e continuar +AbortRetryIgnoreCancel=Cancelar a instalao + +; *** Installation status messages +StatusClosingApplications=A fechar aplicaes... +StatusCreateDirs=A criar directorias... +StatusExtractFiles=A extrair ficheiros... +StatusCreateIcons=A criar atalhos... +StatusCreateIniEntries=A criar entradas em INI... +StatusCreateRegistryEntries=A criar entradas no registo... +StatusRegisterFiles=A registar ficheiros... +StatusSavingUninstall=A guardar informaes para desinstalao... +StatusRunProgram=A concluir a instalao... +StatusRestartingApplications=A reiniciar aplicaes... +StatusRollback=A anular as alteraes... + +; *** Misc. errors +ErrorInternal2=Erro interno: %1 +ErrorFunctionFailedNoCode=%1 falhou +ErrorFunctionFailed=%1 falhou; cdigo %2 +ErrorFunctionFailedWithMessage=%1 falhou; cdigo %2.%n%3 +ErrorExecutingProgram=No possvel executar o ficheiro:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Erro ao abrir a chave de registo:%n%1\%2 +ErrorRegCreateKey=Erro ao criar a chave de registo:%n%1\%2 +ErrorRegWriteKey=Erro ao escrever na chave de registo:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Erro ao criar entradas em INI no ficheiro "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Ignorar este ficheiro (no recomendado) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorar este erro e continuar (no recomendado) +SourceIsCorrupted=O ficheiro de origem est corrompido +SourceDoesntExist=O ficheiro de origem "%1" no existe +ExistingFileReadOnly2=O ficheiro existente no pode ser substitudo porque tem o atributo "s de leitura". +ExistingFileReadOnlyRetry=&Remover o atributo "s de leitura" e tentar novamente +ExistingFileReadOnlyKeepExisting=&Manter o ficheiro existente +ErrorReadingExistingDest=Ocorreu um erro ao tentar ler o ficheiro existente: +FileExistsSelectAction=Seleccione uma aco +FileExists2=O ficheiro j existe. +FileExistsOverwriteExisting=&Substituir o ficheiro existente +FileExistsKeepExisting=&Manter o ficheiro existente +FileExistsOverwriteOrKeepAll=&Fazer isto para os prximos conflitos +ExistingFileNewerSelectAction=Seleccione uma aco +ExistingFileNewer2=O ficheiro existente mais recente que o que est a ser instalado. +ExistingFileNewerOverwriteExisting=&Substituir o ficheiro existente +ExistingFileNewerKeepExisting=&Manter o ficheiro existente (recomendado) +ExistingFileNewerOverwriteOrKeepAll=&Fazer isto para os prximos conflitos +ErrorChangingAttr=Ocorreu um erro ao tentar alterar os atributos do ficheiro existente: +ErrorCreatingTemp=Ocorreu um erro ao tentar criar um ficheiro na directoria de destino: +ErrorReadingSource=Ocorreu um erro ao tentar ler o ficheiro de origem: +ErrorCopying=Ocorreu um erro ao tentar copiar um ficheiro: +ErrorReplacingExistingFile=Ocorreu um erro ao tentar substituir o ficheiro existente: +ErrorRestartReplace=RestartReplace falhou: +ErrorRenamingTemp=Ocorreu um erro ao tentar mudar o nome de um ficheiro na directoria de destino: +ErrorRegisterServer=No possvel registar o DLL/OCX: %1 +ErrorRegSvr32Failed=O RegSvr32 falhou com o cdigo de sada %1 +ErrorRegisterTypeLib=No foi possvel registar a livraria de tipos: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=Todos os utilizadores +UninstallDisplayNameMarkCurrentUser=Utilizador actual + +; *** Post-installation errors +ErrorOpeningReadme=Ocorreu um erro ao tentar abrir o ficheiro LEIAME. +ErrorRestartingComputer=O Assistente de Instalao no consegue reiniciar o computador. Por favor reinicie manualmente. + +; *** Uninstaller messages +UninstallNotFound=O ficheiro "%1" no existe. No possvel desinstalar. +UninstallOpenError=No foi possvel abrir o ficheiro "%1". No possvel desinstalar. +UninstallUnsupportedVer=O ficheiro log de desinstalao "%1" est num formato que no reconhecido por esta verso do desinstalador. No possvel desinstalar +UninstallUnknownEntry=Foi encontrada uma entrada desconhecida (%1) no ficheiro log de desinstalao +ConfirmUninstall=Tem a certeza que deseja remover completamente o %1 e todos os seus componentes? +UninstallOnlyOnWin64=Esta desinstalao s pode ser realizada na verso de 64-bit's do Windows. +OnlyAdminCanUninstall=Esta desinstalao s pode ser realizada por um utilizador com privilgios administrativos. +UninstallStatusLabel=Por favor aguarde enquanto o %1 est a ser removido do seu computador. +UninstalledAll=O %1 foi removido do seu computador com sucesso. +UninstalledMost=A desinstalao do %1 est concluda.%n%nAlguns elementos no puderam ser removidos. Estes elementos podem ser removidos manualmente. +UninstalledAndNeedsRestart=Para completar a desinstalao do %1, o computador deve ser reiniciado.%n%nDeseja reiniciar agora? +UninstallDataCorrupted=O ficheiro "%1" est corrompido. No possvel desinstalar + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Remover ficheiro partilhado? +ConfirmDeleteSharedFile2=O sistema indica que o seguinte ficheiro partilhado j no est a ser utilizado por nenhum programa. Deseja remov-lo?%n%nSe algum programa ainda necessitar deste ficheiro, poder no funcionar correctamente depois de o remover. Se no tiver a certeza, seleccione No. Manter o ficheiro no causar nenhum problema. +SharedFileNameLabel=Nome do ficheiro: +SharedFileLocationLabel=Localizao: +WizardUninstalling=Estado da desinstalao +StatusUninstalling=A desinstalar o %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=A instalar %1. +ShutdownBlockReasonUninstallingApp=A desinstalar %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 verso %2 +AdditionalIcons=Atalhos adicionais: +CreateDesktopIcon=Criar atalho no Ambiente de &Trabalho +CreateQuickLaunchIcon=&Criar atalho na barra de Iniciao Rpida +ProgramOnTheWeb=%1 na Web +UninstallProgram=Desinstalar o %1 +LaunchProgram=Executar o %1 +AssocFileExtension=Associa&r o %1 aos ficheiros com a extenso %2 +AssocingFileExtension=A associar o %1 aos ficheiros com a extenso %2... +AutoStartProgramGroupDescription=Inicializao Automtica: +AutoStartProgram=Iniciar %1 automaticamente +AddonHostProgramNotFound=No foi possvel localizar %1 na pasta seleccionada.%n%nDeseja continuar de qualquer forma? diff --git a/Files/Languages/Russian.isl b/Files/Languages/Russian.isl new file mode 100644 index 00000000..b1b51588 --- /dev/null +++ b/Files/Languages/Russian.isl @@ -0,0 +1,370 @@ +; *** Inno Setup version 6.1.0+ Russian messages *** +; +; Translated from English by Dmitry Kann, yktooo at gmail.com +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +LanguageName=<0420><0443><0441><0441><043A><0438><0439> +LanguageID=$0419 +LanguageCodePage=1251 + +[Messages] + +; *** Application titles +SetupAppTitle= +SetupWindowTitle= %1 +UninstallAppTitle= +UninstallAppFullTitle= %1 + +; *** Misc. common +InformationTitle= +ConfirmTitle= +ErrorTitle= + +; *** SetupLdr messages +SetupLdrStartupMessage= %1 , ? +LdrCannotCreateTemp= . +LdrCannotExecTemp= . +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%n %2: %3 +SetupFileMissing= %1 . , . +SetupFileCorrupt= . , . +SetupFileCorruptOrWrongVer= . , . +InvalidParameter= :%n%n%1 +SetupAlreadyRunning= . +WindowsVersionNotSupported= Windows, . +WindowsServicePackRequired= %1 Service Pack %2 . +NotOnThisPlatform= %1. +OnlyOnThisPlatform= %1. +OnlyOnTheseArchitectures= Windows :%n%n%1 +WinVersionTooLowError= %1 %2 . +WinVersionTooHighError= %1 %2 . +AdminPrivilegesRequired= , . +PowerUserPrivilegesRequired= , (Power Users). +SetupAppRunningError= %1.%n%n, , OK, , , . +UninstallAppRunningError= %1.%n%n, , OK, , , . + +; *** Startup questions +PrivilegesRequiredOverrideTitle= +PrivilegesRequiredOverrideInstruction= +PrivilegesRequiredOverrideText1=%1 ( ), . +PrivilegesRequiredOverrideText2=%1 , ( ). +PrivilegesRequiredOverrideAllUsers= & +PrivilegesRequiredOverrideAllUsersRecommended= & () +PrivilegesRequiredOverrideCurrentUser= & +PrivilegesRequiredOverrideCurrentUserRecommended= & () + +; *** Misc. errors +ErrorCreatingDir= "%1" +ErrorTooManyFilesInDir= "%1", + +; *** Setup common messages +ExitSetupTitle= +ExitSetupMessage= . , .%n%n , .%n%n ? +AboutSetupMenuItem=& ... +AboutSetupTitle= +AboutSetupMessage=%1, %2%n%3%n%n %1:%n%4 +AboutSetupNote= +TranslatorNote=Russian translation by Dmitry Kann, http://www.dk-soft.org/ + +; *** Buttons +ButtonBack=< & +ButtonNext=& > +ButtonInstall=& +ButtonOK=OK +ButtonCancel= +ButtonYes=& +ButtonYesToAll= & +ButtonNo=& +ButtonNoToAll=& +ButtonFinish=& +ButtonBrowse=&... +ButtonWizardBrowse=&... +ButtonNewFolder=& + +; *** "Select Language" dialog messages +SelectLanguageTitle= +SelectLanguageLabel= , . + +; *** Common wizard text +ClickNext= , , , . +BeveledLabel= +BrowseDialogTitle= +BrowseDialogLabel= ʻ. +NewFolderName= + +; *** "Welcome" wizard page +WelcomeLabel1= [name] +WelcomeLabel2= [name/ver] .%n%n , . + +; *** "Password" wizard page +WizardPassword= +PasswordLabel1= . +PasswordLabel3=, , . . +PasswordEditLabel=&: +IncorrectPassword= . , . + +; *** "License Agreement" wizard page +WizardLicense= +LicenseLabel=, , . +LicenseLabel3=, . , . +LicenseAccepted= & +LicenseNotAccepted= & + +; *** "Information" wizard pages +WizardInfoBefore= +InfoBeforeLabel=, , . +InfoBeforeClickLabel= , . +WizardInfoAfter= +InfoAfterLabel=, , . +InfoAfterClickLabel= , . + +; *** "User Information" wizard page +WizardUserInfo= +UserInfoDesc=, . +UserInfoName=& : +UserInfoOrg=&: +UserInfoSerial=& : +UserInfoNameRequired= . + +; *** "Select Destination Location" wizard page +WizardSelectDir= +SelectDirDesc= [name]? +SelectDirLabel3= [name] . +SelectDirBrowseLabel= , . , . +DiskSpaceGBLabel= [gb] . +DiskSpaceMBLabel= [mb] . +CannotInstallToNetworkDrive= . +CannotInstallToUNCPath= UNC-. +InvalidPath= ; :%n%nC:\APP%n%n UNC:%n%n\\_\_ +InvalidDrive= . , . +DiskSpaceWarningTitle= +DiskSpaceWarning= %1 , %2 .%n%n ? +DirNameTooLong= . +InvalidDirName= . +BadDirName32= : %n%n%1 +DirExistsTitle= +DirExists=%n%n%1%n%n . ? +DirDoesntExistTitle= +DirDoesntExist=%n%n%1%n%n . ? + +; *** "Select Components" wizard page +WizardSelectComponents= +SelectComponentsDesc= ? +SelectComponentsLabel2= , ; , . , . +FullInstallation= +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation= +CustomInstallation= +NoUninstallWarningTitle= +NoUninstallWarning= , :%n%n%1%n%n .%n%n? +ComponentSize1=%1 +ComponentSize2=%1 +ComponentsDiskSpaceGBLabel= [gb] . +ComponentsDiskSpaceMBLabel= [mb] . + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks= +SelectTasksDesc= ? +SelectTasksLabel2= , [name], : + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup= +SelectStartMenuFolderDesc= ? +SelectStartMenuFolderLabel3= . +SelectStartMenuFolderBrowseLabel= , . , . +MustEnterGroupName= . +GroupNameTooLong= . +InvalidGroupName= . +BadGroupName= :%n%n%1 +NoProgramGroupCheck2=& + +; *** "Ready to Install" wizard page +WizardReady= +ReadyLabel1= [name] . +ReadyLabel2a= , , , . +ReadyLabel2b= , . +ReadyMemoUserInfo= : +ReadyMemoDir= : +ReadyMemoType= : +ReadyMemoComponents= : +ReadyMemoGroup= : +ReadyMemoTasks= : + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel= ... +ButtonStopDownload=& +StopDownload= ? +ErrorDownloadAborted= +ErrorDownloadFailed= : %1 %2 +ErrorDownloadSizeFailed= : %1 %2 +ErrorFileHash1= : %1 +ErrorFileHash2= : %1, %2 +ErrorProgress= : %1 %2 +ErrorFileSize= : %1, %2 + +; *** "Preparing to Install" wizard page +WizardPreparing= +PreparingDesc= [name] . +PreviousInstallNotCompleted= . , .%n%n , [name]. +CannotContinue= . . +ApplicationsFound= , . . +ApplicationsFound2= , . . , . +CloseApplications=& +DontCloseApplications=& +ErrorCloseApplications= . , , . +PrepareToInstallNeedsRestart= . , , , [name].%n%n ? + +; *** "Installing" wizard page +WizardInstalling=... +InstallingLabel=, , [name] . + +; *** "Setup Completed" wizard page +FinishedHeadingLabel= [name] +FinishedLabelNoIcons= [name] . +FinishedLabel= [name] . . +ClickFinish= , . +FinishedRestartLabel= [name] . ? +FinishedRestartMessage= [name] .%n%n ? +ShowReadmeCheck= README +YesRadio=&, +NoRadio=&, +; used for example as 'Run MyProg.exe' +RunEntryExec= %1 +; used for example as 'View Readme.txt' +RunEntryShellExec= %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle= +SelectDiskLabel2=, %1 OK.%n%n , , . +PathLabel=&: +FileNotInDir2= "%1" "%2". , . +SelectDirectoryLabel=, . + +; *** Installation phase messages +SetupAborted= .%n%n, . +AbortRetryIgnoreSelectAction= +AbortRetryIgnoreRetry= & +AbortRetryIgnoreIgnore=& +AbortRetryIgnoreCancel= + +; *** Installation status messages +StatusClosingApplications= ... +StatusCreateDirs= ... +StatusExtractFiles= ... +StatusCreateIcons= ... +StatusCreateIniEntries= INI-... +StatusCreateRegistryEntries= ... +StatusRegisterFiles= ... +StatusSavingUninstall= ... +StatusRunProgram= ... +StatusRestartingApplications= ... +StatusRollback= ... + +; *** Misc. errors +ErrorInternal2= : %1 +ErrorFunctionFailedNoCode=%1: +ErrorFunctionFailed=%1: ; %2 +ErrorFunctionFailedWithMessage=%1: ; %2.%n%3 +ErrorExecutingProgram= :%n%1 + +; *** Registry errors +ErrorRegOpenKey= :%n%1\%2 +ErrorRegCreateKey= :%n%1\%2 +ErrorRegWriteKey= :%n%1\%2 + +; *** INI errors +ErrorIniEntry= INI- "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=& ( ) +FileAbortRetryIgnoreIgnoreNotRecommended=& ( ) +SourceIsCorrupted= +SourceDoesntExist= "%1" +ExistingFileReadOnly2= , . +ExistingFileReadOnlyRetry=& +ExistingFileReadOnlyKeepExisting=& +ErrorReadingExistingDest= : +FileExistsSelectAction= +FileExists2= . +FileExistsOverwriteExisting=& +FileExistsKeepExisting=& +FileExistsOverwriteOrKeepAll=& +ExistingFileNewerSelectAction= +ExistingFileNewer2= , . +ExistingFileNewerOverwriteExisting=& +ExistingFileNewerKeepExisting=& () +ExistingFileNewerOverwriteOrKeepAll=& +ErrorChangingAttr= : +ErrorCreatingTemp= : +ErrorReadingSource= : +ErrorCopying= : +ErrorReplacingExistingFile= : +ErrorRestartReplace= RestartReplace: +ErrorRenamingTemp= : +ErrorRegisterServer= DLL/OCX: %1 +ErrorRegSvr32Failed= RegSvr32, %1 +ErrorRegisterTypeLib= (Type Library): %1 + +; *** Uninstall display name markings +UninstallDisplayNameMark=%1 (%2) +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32 +UninstallDisplayNameMark64Bit=64 +UninstallDisplayNameMarkAllUsers= +UninstallDisplayNameMarkCurrentUser= + +; *** Post-installation errors +ErrorOpeningReadme= README. +ErrorRestartingComputer= . , . + +; *** Uninstaller messages +UninstallNotFound= "%1" , . +UninstallOpenError= "%1". +UninstallUnsupportedVer= "%1" -. +UninstallUnknownEntry= (%1) +ConfirmUninstall= %1 ? +UninstallOnlyOnWin64= 64- Windows. +OnlyAdminCanUninstall= . +UninstallStatusLabel=, , %1 . +UninstalledAll= %1 . +UninstalledMost= %1 .%n%n . . +UninstalledAndNeedsRestart= %1 .%n%n ? +UninstallDataCorrupted= "%1" . + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle= ? +ConfirmDeleteSharedFile2= , . ?%n%n - , , . , . . +SharedFileNameLabel= : +SharedFileLocationLabel=: +WizardUninstalling= +StatusUninstalling= %1... + + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp= %1. +ShutdownBlockReasonUninstallingApp= %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1, %2 +AdditionalIcons= : +CreateDesktopIcon= & +CreateQuickLaunchIcon= & +ProgramOnTheWeb= %1 +UninstallProgram= %1 +LaunchProgram= %1 +AssocFileExtension=& %1 , %2 +AssocingFileExtension= %1 %2... +AutoStartProgramGroupDescription=: +AutoStartProgram= %1 +AddonHostProgramNotFound=%1 .%n%n ? diff --git a/Files/Languages/Slovak.isl b/Files/Languages/Slovak.isl new file mode 100644 index 00000000..a4482b37 --- /dev/null +++ b/Files/Languages/Slovak.isl @@ -0,0 +1,385 @@ +; ****************************************************** +; *** *** +; *** Inno Setup version 6.1.0+ Slovak messages *** +; *** *** +; *** Original Author: *** +; *** *** +; *** Milan Potancok (milan.potancok AT gmail.com) *** +; *** *** +; *** Contributors: *** +; *** *** +; *** Ivo Bauer (bauer AT ozm.cz) *** +; *** *** +; *** Tomas Falb (tomasf AT pobox.sk) *** +; *** Slappy (slappy AT pobox.sk) *** +; *** Comments: (mitems58 AT gmail.com) *** +; *** *** +; *** Update: 28.01.2021 *** +; *** *** +; ****************************************************** +; +; + +[LangOptions] +LanguageName=Sloven<010D>ina +LanguageID=$041b +LanguageCodePage=1250 + +[Messages] + +; *** Application titles +SetupAppTitle=Sprievodca inštaláciou +SetupWindowTitle=Sprievodca inštaláciou - %1 +UninstallAppTitle=Sprievodca odinštaláciou +UninstallAppFullTitle=Sprievodca odinštaláciou - %1 + +; *** Misc. common +InformationTitle=Informácie +ConfirmTitle=Potvrdenie +ErrorTitle=Chyba + +; *** SetupLdr messages +SetupLdrStartupMessage=Víta Vás Sprievodca inštaláciou produktu %1. Prajete si pokračovať? +LdrCannotCreateTemp=Nie je možné vytvoriť dočasný súbor. Sprievodca inštaláciou sa ukončí +LdrCannotExecTemp=Nie je možné spustiť súbor v dočasnom adresári. Sprievodca inštaláciou sa ukončí +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nChyba %2: %3 +SetupFileMissing=Inštalačný adresár neobsahuje súbor %1. Opravte túto chybu, alebo si zaobstarajte novú kópiu tohto produktu. +SetupFileCorrupt=Súbory Sprievodcu inštaláciou sú poškodené. Zaobstarajte si novú kópiu tohto produktu. +SetupFileCorruptOrWrongVer=Súbory Sprievodcu inštaláciou sú poškodené alebo sa nezhodujú s touto verziou Sprievodcu inštaláciou. Opravte túto chybu, alebo si zaobstarajte novú kópiu tohto produktu. +InvalidParameter=Nesprávny parameter na príkazovom riadku: %n%n%1 +SetupAlreadyRunning=Inštalácia už prebieha. +WindowsVersionNotSupported=Tento program nepodporuje vašu verziu systému Windows. +WindowsServicePackRequired=Tento program vyžaduje %1 Service Pack %2 alebo novší. +NotOnThisPlatform=Tento produkt sa nedá spustiť v %1. +OnlyOnThisPlatform=Tento produkt musí byť spustený v %1. +OnlyOnTheseArchitectures=Tento produkt je možné nainštalovať iba vo verziách MS Windows s podporou architektúry procesorov:%n%n%1 +WinVersionTooLowError=Tento produkt vyžaduje %1 verzie %2 alebo vyššej. +WinVersionTooHighError=Tento produkt sa nedá nainštalovať vo %1 verzie %2 alebo vyššej. +AdminPrivilegesRequired=Na inštaláciu tohto produktu musíte byť prihlásený s právami administrátora. +PowerUserPrivilegesRequired=Na inštaláciu tohto produktu musíte byť prihlásený s právami Administrátora alebo člena skupiny Power Users. +SetupAppRunningError=Sprievodca inštaláciou zistil, že produkt %1 je teraz spustený.%n%nUkončte všetky spustené inštancie tohto produktu a pokračujte kliknutím na tlačidlo "OK", alebo ukončte inštaláciu tlačidlom "Zrušiť". +UninstallAppRunningError=Sprievodca odinštaláciou zistil, že produkt %1 je teraz spustený.%n%nUkončte všetky spustené inštancie tohto produktu a pokračujte kliknutím na tlačidlo "OK", alebo ukončte inštaláciu tlačidlom "Zrušiť". + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Vyberte inštalačný mód inštalátora +PrivilegesRequiredOverrideInstruction=Vyberte inštalačný mód +PrivilegesRequiredOverrideText1=%1 sa môže nainštalovať pre všetkých užívateľov (vyžaduje administrátorské práva), alebo len pre Vás. +PrivilegesRequiredOverrideText2=%1 sa môže nainštalovať len pre Vás, alebo pre všetkých užívateľov (vyžadujú sa Administrátorské práva). +PrivilegesRequiredOverrideAllUsers=Inštalovať pre &všetkých užívateľov +PrivilegesRequiredOverrideAllUsersRecommended=Inštalovať pre &všetkých užívateľov (odporúčané) +PrivilegesRequiredOverrideCurrentUser=Inštalovať len pre &mňa +PrivilegesRequiredOverrideCurrentUserRecommended=Inštalovať len pre &mňa (odporúčané) + +; *** Misc. errors +ErrorCreatingDir=Sprievodca inštaláciou nemohol vytvoriť adresár "%1" +ErrorTooManyFilesInDir=Nedá sa vytvoriť súbor v adresári "%1", pretože tento adresár už obsahuje príliš veľa súborov + +; *** Setup common messages +ExitSetupTitle=Ukončiť Sprievodcu inštaláciou +ExitSetupMessage=Inštalácia nebola kompletne dokončená. Ak teraz ukončíte Sprievodcu inštaláciou, produkt nebude nainštalovaný.%n%nSprievodcu inštaláciou môžete znovu spustiť neskôr a dokončiť tak inštaláciu.%n%nUkončiť Sprievodcu inštaláciou? +AboutSetupMenuItem=&O Sprievodcovi inštalácie... +AboutSetupTitle=O Sprievodcovi inštalácie +AboutSetupMessage=%1 verzia %2%n%3%n%n%1 domovská stránka:%n%4 +AboutSetupNote= +TranslatorNote=Slovak translation maintained by Milan Potancok (milan.potancok AT gmail.com), Ivo Bauer (bauer AT ozm.cz), Tomas Falb (tomasf AT pobox.sk) + Slappy (slappy AT pobox.sk) + +; *** Buttons +ButtonBack=< &Späť +ButtonNext=&Ďalej > +ButtonInstall=&Inštalovať +ButtonOK=OK +ButtonCancel=Zrušiť +ButtonYes=&Áno +ButtonYesToAll=Áno &všetkým +ButtonNo=&Nie +ButtonNoToAll=Ni&e všetkým +ButtonFinish=&Dokončiť +ButtonBrowse=&Prechádzať... +ButtonWizardBrowse=&Prechádzať... +ButtonNewFolder=&Vytvoriť nový adresár + +; *** "Select Language" dialog messages +SelectLanguageTitle=Výber jazyka Sprievodcu inštaláciou +SelectLanguageLabel=Zvoľte jazyk, ktorý sa má použiť pri inštalácii. + +; *** Common wizard text +ClickNext=Pokračujte kliknutím na tlačidlo "Ďalej", alebo ukončte sprievodcu inštaláciou tlačidlom "Zrušiť". +BeveledLabel= +BrowseDialogTitle=Nájsť adresár +BrowseDialogLabel=Z dole uvedeného zoznamu vyberte adresár a kliknite na "OK". +NewFolderName=Nový adresár + +; *** "Welcome" wizard page +WelcomeLabel1=Víta Vás Sprievodca inštaláciou produktu [name]. +WelcomeLabel2=Produkt [name/ver] sa nainštaluje do tohto počítača.%n%nSkôr, ako budete pokračovať, odporúčame ukončiť všetky spustené aplikácie. + +; *** "Password" wizard page +WizardPassword=Heslo +PasswordLabel1=Táto inštalácia je chránená heslom. +PasswordLabel3=Zadajte heslo a pokračujte kliknutím na tlačidlo "Ďalej". Pri zadávaní hesla rozlišujte malé a veľké písmená. +PasswordEditLabel=&Heslo: +IncorrectPassword=Zadané heslo nie je správne. Skúste to ešte raz prosím. + +; *** "License Agreement" wizard page +WizardLicense=Licenčná zmluva +LicenseLabel=Skôr, ako budete pokračovať, prečítajte si tieto dôležité informácie, prosím. +LicenseLabel3=Prečítajte si túto Licenčnú zmluvu prosím. Aby mohla inštalácia pokračovať, musíte súhlasiť s podmienkami tejto zmluvy. +LicenseAccepted=&Súhlasím s podmienkami Licenčnej zmluvy +LicenseNotAccepted=&Nesúhlasím s podmienkami Licenčnej zmluvy + +; *** "Information" wizard pages +WizardInfoBefore=Informácie +InfoBeforeLabel=Skôr, ako budete pokračovať, prečítajte si tieto dôležité informácie, prosím. +InfoBeforeClickLabel=Pokračujte v inštalácii kliknutím na tlačidlo "Ďalej". +WizardInfoAfter=Informácie +InfoAfterLabel=Skôr, ako budete pokračovať, prečítajte si tieto dôležité informácie prosím. +InfoAfterClickLabel=Pokračujte v inštalácii kliknutím na tlačidlo "Ďalej". + +; *** "User Information" wizard page +WizardUserInfo=Informácie o používateľovi +UserInfoDesc=Zadajte požadované informácie prosím. +UserInfoName=&Používateľské meno: +UserInfoOrg=&Organizácia: +UserInfoSerial=&Sériové číslo: +UserInfoNameRequired=Meno používateľa musí byť zadané. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Vyberte cieľový adresár +SelectDirDesc=Kde má byť produkt [name] nainštalovaný? +SelectDirLabel3=Sprievodca nainštaluje produkt [name] do nasledujúceho adresára. +SelectDirBrowseLabel=Pokračujte kliknutím na tlačidlo "Ďalej". Ak chcete vybrať iný adresár, kliknite na tlačidlo "Prechádzať". +DiskSpaceGBLabel=Inštalácia vyžaduje najmenej [gb] GB miesta v disku. +DiskSpaceMBLabel=Inštalácia vyžaduje najmenej [mb] MB miesta v disku. +CannotInstallToNetworkDrive=Sprievodca inštaláciou nemôže inštalovať do sieťovej jednotky. +CannotInstallToUNCPath=Sprievodca inštaláciou nemôže inštalovať do UNC umiestnenia. +InvalidPath=Musíte zadať úplnú cestu vrátane písmena jednotky; napríklad:%n%nC:\Aplikácia%n%nalebo cestu UNC v tvare:%n%n\\Server\Zdieľaný adresár +InvalidDrive=Vami vybraná jednotka alebo cesta UNC neexistuje, alebo nie je dostupná. Vyberte iné umiestnenie prosím. +DiskSpaceWarningTitle=Nedostatok miesta v disku +DiskSpaceWarning=Sprievodca inštaláciou vyžaduje najmenej %1 KB voľného miesta pre inštaláciu produktu, ale vo vybranej jednotke je dostupných iba %2 KB.%n%nAj napriek tomu chcete pokračovať? +DirNameTooLong=Názov adresára alebo cesta sú príliš dlhé. +InvalidDirName=Názov adresára nie je správny. +BadDirName32=Názvy adresárov nesmú obsahovať žiadny z nasledujúcich znakov:%n%n%1 +DirExistsTitle=Adresár už existuje +DirExists=Adresár:%n%n%1%n%nuž existuje. Aj napriek tomu chcete nainštalovať produkt do tohto adresára? +DirDoesntExistTitle=Adresár neexistuje +DirDoesntExist=Adresár: %n%n%1%n%nešte neexistuje. Má sa tento adresár vytvoriť? + +; *** "Select Components" wizard page +WizardSelectComponents=Vyberte komponenty +SelectComponentsDesc=Aké komponenty majú byť nainštalované? +SelectComponentsLabel2=Zaškrtnite iba komponenty, ktoré chcete nainštalovať; komponenty, ktoré se nemajú inštalovať, nechajte nezaškrtnuté. Pokračujte kliknutím na tlačidlo "Ďalej". +FullInstallation=Úplná inštalácia +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Kompaktná inštalácia +CustomInstallation=Voliteľná inštalácia +NoUninstallWarningTitle=Komponenty existujú +NoUninstallWarning=Sprievodca inštaláciou zistil že nasledujúce komponenty už sú v tomto počítači nainštalované:%n%n%1%n%nAk ich teraz nezahrniete do výberu, nebudú neskôr odinštalované.%n%nAj napriek tomu chcete pokračovať? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Vybrané komponenty vyžadujú najmenej [gb] GB miesta v disku. +ComponentsDiskSpaceMBLabel=Vybrané komponenty vyžadujú najmenej [mb] MB miesta v disku. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Vyberte ďalšie úlohy +SelectTasksDesc=Ktoré ďalšie úlohy majú byť vykonané? +SelectTasksLabel2=Vyberte ďalšie úlohy, ktoré majú byť vykonané počas inštalácie produktu [name] a pokračujte kliknutím na tlačidlo "Ďalej". + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Vyberte skupinu v ponuke Štart +SelectStartMenuFolderDesc=Kam má sprievodca inštalácie umiestniť zástupcov aplikácie? +SelectStartMenuFolderLabel3=Sprievodca inštaláciou vytvorí zástupcov aplikácie v nasledujúcom adresári ponuky Štart. +SelectStartMenuFolderBrowseLabel=Pokračujte kliknutím na tlačidlo Ďalej. Ak chcete zvoliť iný adresár, kliknite na tlačidlo "Prechádzať". +MustEnterGroupName=Musíte zadať názov skupiny. +GroupNameTooLong=Názov adresára alebo cesta sú príliš dlhé. +InvalidGroupName=Názov adresára nie je správny. +BadGroupName=Názov skupiny nesmie obsahovať žiadny z nasledujúcich znakov:%n%n%1 +NoProgramGroupCheck2=&Nevytvárať skupinu v ponuke Štart + +; *** "Ready to Install" wizard page +WizardReady=Inštalácia je pripravená +ReadyLabel1=Sprievodca inštaláciou je teraz pripravený nainštalovať produkt [name] na Váš počítač. +ReadyLabel2a=Pokračujte v inštalácii kliknutím na tlačidlo "Inštalovať". Ak chcete zmeniť niektoré nastavenia inštalácie, kliknite na tlačidlo "< Späť". +ReadyLabel2b=Pokračujte v inštalácii kliknutím na tlačidlo "Inštalovať". +ReadyMemoUserInfo=Informácie o používateľovi: +ReadyMemoDir=Cieľový adresár: +ReadyMemoType=Typ inštalácie: +ReadyMemoComponents=Vybrané komponenty: +ReadyMemoGroup=Skupina v ponuke Štart: +ReadyMemoTasks=Ďalšie úlohy: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Sťahovanie dodatočných súborov... +ButtonStopDownload=&Zastaviť sťahovanie +StopDownload=Naozaj chcete zastaviť sťahovanie? +ErrorDownloadAborted=Sťahovanie prerušené +ErrorDownloadFailed=Sťahovanie zlyhalo: %1 %2 +ErrorDownloadSizeFailed=Zlyhalo získanie veľkosti: %1 %2 +ErrorFileHash1=Kontrola hodnoty súboru zlyhala: %1 +ErrorFileHash2=Nesprávna kontrolná hodnota: očakávala sa %1, zistená %2 +ErrorProgress=Nesprávny priebeh: %1 z %2 +ErrorFileSize=Nesprávna veľkosť súboru: očakávala sa %1, zistená %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Príprava inštalácie +PreparingDesc=Sprievodca inštaláciou pripravuje inštaláciu produktu [name] do tohto počítača. +PreviousInstallNotCompleted=Inštalácia/odinštalácia predošlého produktu nebola úplne dokončená. Dokončenie tohto procesu vyžaduje reštart počítača.%n%nPo reštartovaní počítača znovu spustite Sprievodcu inštaláciou, aby bolo možné kompletne dokončiť inštaláciu produktu [name]. +CannotContinue=Sprievodca inštaláciou nemôže pokračovať. Ukončite, prosím, sprievodcu inštaláciou kliknutím na tlačidlo "Zrušiť". +ApplicationsFound=Nasledujúce aplikácie pracujú so súbormi, ktoré musí Sprievodca inštaláciou aktualizovať. Odporúčame, aby ste povolili Sprievodcovi inštaláciou automaticky ukončiť tieto aplikácie. +ApplicationsFound2=Nasledujúce aplikácie pracujú so súbormi, ktoré musí Sprievodca inštaláciou aktualizovať. Odporúčame, aby ste povolili Sprievodcovi inštaláciou automaticky ukončiť tieto aplikácie. Po dokončení inštalácie sa Sprievodca inštaláciou pokúsi tieto aplikácie opätovne spustiť. +CloseApplications=&Automaticky ukončiť aplikácie +DontCloseApplications=&Neukončovať aplikácie +ErrorCloseApplications=Sprievodca inštaláciou nemohol automaticky zatvoriť všetky aplikácie. Odporúčame, aby ste ručne ukončili všetky aplikácie, ktoré používajú súbory a ktoré má Sprievodca aktualizovať. +PrepareToInstallNeedsRestart=Sprievodca inštaláciou potrebuje reštartovať tento počítač. Po reštartovaní počítača znovu spustite tohto Sprievodcu inštaláciou, aby sa inštalácia [name] dokončila.%n%nChcete teraz reštartovať tento počítač? + +; *** "Installing" wizard page +WizardInstalling=Inštalujem +InstallingLabel=Počkajte prosím, pokiaľ Sprievodca inštaláciou dokončí inštaláciu produktu [name] do tohto počítača. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Dokončuje sa inštalácia produktu [name] +FinishedLabelNoIcons=Sprievodca inštaláciou dokončil inštaláciu produktu [name] do tohto počítača. +FinishedLabel=Sprievodca inštaláciou dokončil inštaláciu produktu [name] do tohto počítača. Produkt je možné spustiť pomocou nainštalovaných ikon a zástupcov. +ClickFinish=Ukončte Sprievodcu inštaláciou kliknutím na tlačidlo "Dokončiť". +FinishedRestartLabel=Pre dokončenie inštalácie produktu [name] je nutné reštartovať tento počítač. Želáte si teraz reštartovať tento počítač? +FinishedRestartMessage=Pre dokončenie inštalácie produktu [name] je nutné reštartovať tento počítač.%n%nŽeláte si teraz reštartovať tento počítač? +ShowReadmeCheck=Áno, chcem zobraziť dokument "ČITAJMA" +YesRadio=&Áno, chcem teraz reštartovať počítač +NoRadio=&Nie, počítač reštartujem neskôr + +; used for example as 'Run MyProg.exe' +RunEntryExec=Spustiť %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Zobraziť %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Sprievodca inštaláciou vyžaduje ďalší disk +SelectDiskLabel2=Vložte prosím, disk %1 a kliknite na tlačidlo "OK".%n%nAk sa súbory tohto disku nachádzajú v inom adresári ako v tom, ktorý je zobrazený nižšie, zadajte správnu cestu alebo kliknite na tlačidlo "Prechádzať". +PathLabel=&Cesta: +FileNotInDir2=Súbor "%1" sa nedá nájsť v "%2". Vložte prosím, správny disk, alebo zvoľte iný adresár. +SelectDirectoryLabel=Špecifikujte prosím, umiestnenie ďalšieho disku. + +; *** Installation phase messages +SetupAborted=Inštalácia nebola úplne dokončená.%n%nOpravte chybu a opäť spustite Sprievodcu inštaláciou prosím. +AbortRetryIgnoreSelectAction=Vyberte akciu +AbortRetryIgnoreRetry=&Skúsiť znovu +AbortRetryIgnoreIgnore=&Ignorovať chybu a pokračovať +AbortRetryIgnoreCancel=Zrušiť inštaláciu + +; *** Installation status messages +StatusClosingApplications=Ukončovanie aplikácií... +StatusCreateDirs=Vytvárajú sa adresáre... +StatusExtractFiles=Rozbaľujú sa súbory... +StatusCreateIcons=Vytvárajú sa ikony a zástupcovia... +StatusCreateIniEntries=Vytvárajú sa záznamy v konfiguračných súboroch... +StatusCreateRegistryEntries=Vytvárajú sa záznamy v systémovom registri... +StatusRegisterFiles=Registrujú sa súbory... +StatusSavingUninstall=Ukladajú sa informácie potrebné pre neskoršie odinštalovanie produktu... +StatusRunProgram=Dokončuje sa inštalácia... +StatusRestartingApplications=Reštartovanie aplikácií... +StatusRollback=Vykonané zmeny sa vracajú späť... + +; *** Misc. errors +ErrorInternal2=Interná chyba: %1 +ErrorFunctionFailedNoCode=%1 zlyhala +ErrorFunctionFailed=%1 zlyhala; kód %2 +ErrorFunctionFailedWithMessage=%1 zlyhala; kód %2.%n%3 +ErrorExecutingProgram=Nedá sa spustiť súbor:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Došlo k chybe pri otváraní kľúča systémového registra:%n%1\%2 +ErrorRegCreateKey=Došlo k chybe pri vytváraní kľúča systémového registra:%n%1\%2 +ErrorRegWriteKey=Došlo k chybe pri zápise kľúča do systémového registra:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Došlo k chybe pri vytváraní záznamu v konfiguračnom súbore "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Preskočiť tento súbor (neodporúčané) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorovať chybu a pokračovať (neodporúčané) +SourceIsCorrupted=Zdrojový súbor je poškodený +SourceDoesntExist=Zdrojový súbor "%1" neexistuje +ExistingFileReadOnly2=Existujúci súbor nie je možné prepísať, pretože je označený atribútom Iba na čítanie. +ExistingFileReadOnlyRetry=&Odstrániť atribút Iba na čítanie a skúsiť znovu +ExistingFileReadOnlyKeepExisting=&Ponechať existujúci súbor +ErrorReadingExistingDest=Došlo k chybe pri pokuse o čítanie existujúceho súboru: +FileExistsSelectAction=Vyberte akciu +FileExists2=Súbor už existuje. +FileExistsOverwriteExisting=&Prepísať existujúci súbor +FileExistsKeepExisting=Ponechať &existujúci súbor +FileExistsOverwriteOrKeepAll=&Vykonať pre všetky ďalšie konflikty +ExistingFileNewerSelectAction=Vyberte akciu +ExistingFileNewer2=Existujúci súbor je novší ako súbor, ktorý sa Sprievodca inštaláciou pokúša nainštalovať. +ExistingFileNewerOverwriteExisting=&Prepísať existujúci súbor +ExistingFileNewerKeepExisting=Ponechať &existujúci súbor (odporúčané) +ExistingFileNewerOverwriteOrKeepAll=&Vykonať pre všetky ďalšie konflikty +ErrorChangingAttr=Došlo k chybe pri pokuse o modifikáciu atribútov existujúceho súboru: +ErrorCreatingTemp=Došlo k chybe pri pokuse o vytvorenie súboru v cieľovom adresári: +ErrorReadingSource=Došlo k chybe pri pokuse o čítanie zdrojového súboru: +ErrorCopying=Došlo k chybe pri pokuse o skopírovanie súboru: +ErrorReplacingExistingFile=Došlo k chybe pri pokuse o nahradenie existujúceho súboru: +ErrorRestartReplace=Zlyhala funkcia "RestartReplace" Sprievodcu inštaláciou: +ErrorRenamingTemp=Došlo k chybe pri pokuse o premenovanie súboru v cieľovom adresári: +ErrorRegisterServer=Nedá sa vykonať registrácia DLL/OCX: %1 +ErrorRegSvr32Failed=Volanie RegSvr32 zlyhalo s návratovým kódom %1 +ErrorRegisterTypeLib=Nedá sa vykonať registrácia typovej knižnice: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32bitový +UninstallDisplayNameMark64Bit=64bitový +UninstallDisplayNameMarkAllUsers=Všetci užívatelia +UninstallDisplayNameMarkCurrentUser=Aktuálny užívateľ + +; *** Post-installation errors +ErrorOpeningReadme=Došlo k chybe pri pokuse o otvorenie dokumentu "ČITAJMA". +ErrorRestartingComputer=Sprievodcovi inštaláciou sa nepodarilo reštartovať tento počítač. Reštartujte ho manuálne prosím. + +; *** Uninstaller messages +UninstallNotFound=Súbor "%1" neexistuje. Produkt sa nedá odinštalovať. +UninstallOpenError=Súbor "%1" nie je možné otvoriť. Produkt nie je možné odinštalovať. +UninstallUnsupportedVer=Sprievodcovi odinštaláciou sa nepodarilo rozpoznať formát súboru obsahujúceho informácie na odinštalovanie produktu "%1". Produkt sa nedá odinštalovať +UninstallUnknownEntry=V súbore obsahujúcom informácie na odinštalovanie produktu bola zistená neznáma položka (%1) +ConfirmUninstall=Naozaj chcete odinštalovať %1 a všetky jeho komponenty? +UninstallOnlyOnWin64=Tento produkt je možné odinštalovať iba v 64-bitových verziách MS Windows. +OnlyAdminCanUninstall=K odinštalovaniu tohto produktu musíte byť prihlásený s právami Administrátora. +UninstallStatusLabel=Počkajte prosím, kým produkt %1 nebude odinštalovaný z tohto počítača. +UninstalledAll=%1 bol úspešne odinštalovaný z tohto počítača. +UninstalledMost=%1 bol odinštalovaný z tohto počítača.%n%nNiektoré jeho komponenty sa však nepodarilo odinštalovať. Môžete ich odinštalovať manuálne. +UninstalledAndNeedsRestart=Na dokončenie odinštalácie produktu %1 je potrebné reštartovať tento počítač.%n%nChcete ihneď reštartovať tento počítač? +UninstallDataCorrupted=Súbor "%1" je poškodený. Produkt sa nedá odinštalovať + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Odinštalovať zdieľaný súbor? +ConfirmDeleteSharedFile2=Systém indikuje, že nasledujúci zdieľaný súbor nie je používaný žiadnymi inými aplikáciami. Má Sprievodca odinštaláciou tento zdieľaný súbor odstrániť?%n%nAk niektoré aplikácie tento súbor používajú, nemusia po jeho odinštalovaní pracovať správne. Pokiaľ to neviete správne posúdiť, odporúčame zvoliť "Nie". Ponechanie tohto súboru v systéme nespôsobí žiadnu škodu. +SharedFileNameLabel=Názov súboru: +SharedFileLocationLabel=Umiestnenie: +WizardUninstalling=Stav odinštalovania +StatusUninstalling=Prebieha odinštalovanie %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Inštalovanie %1. +ShutdownBlockReasonUninstallingApp=Odinštalovanie %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 verzia %2 +AdditionalIcons=Ďalší zástupcovia: +CreateDesktopIcon=Vytvoriť zástupcu na &ploche +CreateQuickLaunchIcon=Vytvoriť zástupcu na paneli &Rýchle spustenie +ProgramOnTheWeb=Aplikácia %1 na internete +UninstallProgram=Odinštalovať aplikáciu %1 +LaunchProgram=Spustiť aplikáciu %1 +AssocFileExtension=Vytvoriť &asociáciu medzi súbormi typu %2 a aplikáciou %1 +AssocingFileExtension=Vytvára sa asociácia medzi súbormi typu %2 a aplikáciou %1... +AutoStartProgramGroupDescription=Pri spustení: +AutoStartProgram=Automaticky spustiť %1 +AddonHostProgramNotFound=Nepodarilo sa nájsť %1 v adresári, ktorý ste zvolili.%n%nChcete napriek tomu pokračovať? diff --git a/Files/Languages/Slovenian.isl b/Files/Languages/Slovenian.isl new file mode 100644 index 00000000..09ffea10 --- /dev/null +++ b/Files/Languages/Slovenian.isl @@ -0,0 +1,370 @@ +; *** Inno Setup version 6.1.0+ Slovenian messages *** +; +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/is3rdparty.php +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). +; +; Maintained by Jernej Simoncic (jernej+s-innosetup@eternallybored.org) + +[LangOptions] +LanguageName=Slovenski +LanguageID=$0424 +LanguageCodePage=1250 + +DialogFontName= +[Messages] + +; *** Application titles +SetupAppTitle=Namestitev +SetupWindowTitle=Namestitev - %1 +UninstallAppTitle=Odstranitev +UninstallAppFullTitle=Odstranitev programa %1 + +; *** Misc. common +InformationTitle=Informacija +ConfirmTitle=Potrditev +ErrorTitle=Napaka + +; *** SetupLdr messages +SetupLdrStartupMessage=V raunalnik boste namestili program %1. elite nadaljevati? +LdrCannotCreateTemp=Ni bilo mogoe ustvariti zaasne datoteke. Namestitev je prekinjena +LdrCannotExecTemp=Ni bilo mogoe zagnati datoteke v zaasni mapi. Namestitev je prekinjena + +; *** Startup error messages +LastErrorMessage=%1.%n%nNapaka %2: %3 +SetupFileMissing=Datoteka %1 manjka. Odpravite napako ali si priskrbite drugo kopijo programa. +SetupFileCorrupt=Datoteke namestitvenega programa so okvarjene. Priskrbite si drugo kopijo programa. +SetupFileCorruptOrWrongVer=Datoteke so okvarjene ali nezdruljive s to razliico namestitvenega programa. Odpravite napako ali si priskrbite drugo kopijo programa. +InvalidParameter=Naveden je bil napaen parameter ukazne vrstice:%n%n%1 +SetupAlreadyRunning=Namestitveni program se e izvaja. +WindowsVersionNotSupported=Program ne deluje na vai razliici sistema Windows. +WindowsServicePackRequired=Program potrebuje %1 s servisnim paketom %2 ali novejo razliico. +NotOnThisPlatform=Program ni namenjen za uporabo v %1. +OnlyOnThisPlatform=Program je namenjen le za uporabo v %1. +OnlyOnTheseArchitectures=Program lahko namestite le na Windows sistemih, na naslednjih vrstah procesorjev:%n%n%1 +WinVersionTooLowError=Ta program zahteva %1 razliico %2 ali novejo. +WinVersionTooHighError=Tega programa ne morete namestiti v %1 razliice %2 ali noveje. +AdminPrivilegesRequired=Za namestitev programa morate biti prijavljeni v raun s skrbnikimi pravicami. +PowerUserPrivilegesRequired=Za namestitev programa morate biti prijavljeni v raun s skrbnikimi ali power user pravicami. +SetupAppRunningError=Program %1 je trenutno odprt.%n%nZaprite program, nato kliknite V redu za nadaljevanje ali Preklii za izhod. +UninstallAppRunningError=Program %1 je trenutno odprt.%n%nZaprite program, nato kliknite V redu za nadaljevanje ali Preklii za izhod. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Izberite nain namestitve +PrivilegesRequiredOverrideInstruction=Izberite nain namestitve +PrivilegesRequiredOverrideText1=Program %1 lahko namestite za vse uporabnike (potrebujete skrbnike pravice), ali pa samo za vas. +PrivilegesRequiredOverrideText2=Program %1 lahko namestite samo za vas, ali pa za vse uporabnike (potrebujete skrbnike pravice). +PrivilegesRequiredOverrideAllUsers=N&amesti za vse uporabnike +PrivilegesRequiredOverrideAllUsersRecommended=N&amesti za vse uporabnike (priporoeno) +PrivilegesRequiredOverrideCurrentUser=Namesti samo za&me +PrivilegesRequiredOverrideCurrentUserRecommended=Namesti samo za&me (priporoeno) + +; *** Misc. errors +ErrorCreatingDir=Namestitveni program ni mogel ustvariti mape %1 +ErrorTooManyFilesInDir=Namestitveni program ne more ustvariti nove datoteke v mapi %1, ker vsebuje preve datotek + +; *** Setup common messages +ExitSetupTitle=Prekini namestitev +ExitSetupMessage=Namestitev ni konana. e jo boste prekinili, program ne bo nameen.%n%nPonovno namestitev lahko izvedete kasneje.%n%nelite prekiniti namestitev? +AboutSetupMenuItem=&O namestitvenem programu... +AboutSetupTitle=O namestitvenem programu +AboutSetupMessage=%1 razliica %2%n%3%n%n%1 domaa stran:%n%4 +AboutSetupNote= +TranslatorNote=Slovenski prevod:%nMiha Remec%nJernej Simoni + +; *** Buttons +ButtonBack=< Na&zaj +ButtonNext=&Naprej > +ButtonInstall=&Namesti +ButtonOK=V redu +ButtonCancel=Preklii +ButtonYes=&Da +ButtonYesToAll=Da za &vse +ButtonNo=&Ne +ButtonNoToAll=N&e za vse +ButtonFinish=&Konaj +ButtonBrowse=Pre&brskaj... +ButtonWizardBrowse=Pre&brskaj... +ButtonNewFolder=&Ustvari novo mapo + +; *** "Select Language" dialog messages +SelectLanguageTitle=Izbira jezika namestitve +SelectLanguageLabel=Izberite jezik, ki ga elite uporabljati med namestitvijo. + +; *** Common wizard text +ClickNext=Kliknite Naprej za nadaljevanje namestitve ali Preklii za prekinitev namestitve. +BeveledLabel= +BrowseDialogTitle=Izbira mape +BrowseDialogLabel=Izberite mapo s spiska, nato kliknite V redu. +NewFolderName=Nova mapa + +; *** "Welcome" wizard page +WelcomeLabel1=Dobrodoli v namestitev programa [name]. +WelcomeLabel2=V raunalnik boste namestili program [name/ver].%n%nPriporoljivo je, da pred zaetkom namestitve zaprete vse odprte programe. + +; *** "Password" wizard page +WizardPassword=Geslo +PasswordLabel1=Namestitev je zaitena z geslom. +PasswordLabel3=Vnesite geslo, nato kliknite Naprej za nadaljevanje. Pri vnaanju pazite na male in velike rke. +PasswordEditLabel=&Geslo: +IncorrectPassword=Vneseno geslo ni pravilno. Poizkusite ponovno. + +; *** "License Agreement" wizard page +WizardLicense=Licenna pogodba +LicenseLabel=Pred nadaljevanjem preberite licenno pogodbo za uporabo programa. +LicenseLabel3=Preberite licenno pogodbo za uporabo programa. Program lahko namestite le, e se s pogodbo v celoti strinjate. +LicenseAccepted=&Da, sprejemam vse pogoje licenne pogodbe +LicenseNotAccepted=N&e, pogojev licenne pogodbe ne sprejmem + +; *** "Information" wizard pages +WizardInfoBefore=Informacije +InfoBeforeLabel=Pred nadaljevanjem preberite naslednje pomembne informacije. +InfoBeforeClickLabel=Ko boste pripravljeni na nadaljevanje namestitve, kliknite Naprej. +WizardInfoAfter=Informacije +InfoAfterLabel=Pred nadaljevanjem preberite naslednje pomembne informacije. +InfoAfterClickLabel=Ko boste pripravljeni na nadaljevanje namestitve, kliknite Naprej. + +; *** "User Information" wizard page +WizardUserInfo=Podatki o uporabniku +UserInfoDesc=Vnesite svoje podatke. +UserInfoName=&Ime: +UserInfoOrg=&Podjetje: +UserInfoSerial=&Serijska tevilka: +UserInfoNameRequired=Vnos imena je obvezen. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Izbira ciljnega mesta +SelectDirDesc=Kam elite namestiti program [name]? +SelectDirLabel3=Program [name] bo nameen v naslednjo mapo. +SelectDirBrowseLabel=Za nadaljevanje kliknite Naprej. e elite izbrati drugo mapo, kliknite Prebrskaj. +DiskSpaceGBLabel=Na disku mora biti vsaj [gb] GB prostora. +DiskSpaceMBLabel=Na disku mora biti vsaj [mb] MB prostora. +CannotInstallToNetworkDrive=Programa ni mogoe namestiti na mreni pogon. +CannotInstallToUNCPath=Programa ni mogoe namestiti v UNC pot. +InvalidPath=Vpisati morate polno pot vkljuno z oznako pogona. Primer:%n%nC:\PROGRAM%n%nali UNC pot v obliki:%n%n\\strenik\mapa_skupne_rabe +InvalidDrive=Izbrani pogon ali omreno sredstvo UNC ne obstaja ali ni dostopno. Izberite drugega. +DiskSpaceWarningTitle=Na disku ni dovolj prostora +DiskSpaceWarning=Namestitev potrebuje vsaj %1 KB prostora, toda na izbranem pogonu je na voljo le %2 KB.%n%nelite kljub temu nadaljevati? +DirNameTooLong=Ime mape ali poti je predolgo. +InvalidDirName=Ime mape ni veljavno. +BadDirName32=Ime mape ne sme vsebovati naslednjih znakov:%n%n%1 +DirExistsTitle=Mapa e obstaja +DirExists=Mapa%n%n%1%n%ne obstaja. elite program vseeno namestiti v to mapo? +DirDoesntExistTitle=Mapa ne obstaja +DirDoesntExist=Mapa %n%n%1%n%nne obstaja. Ali jo elite ustvariti? + +; *** "Select Components" wizard page +WizardSelectComponents=Izbira komponent +SelectComponentsDesc=Katere komponente elite namestiti? +SelectComponentsLabel2=Oznaite komponente, ki jih elite namestiti; odznaite komponente, ki jih ne elite namestiti. Kliknite Naprej, ko boste pripravljeni za nadaljevanje. +FullInstallation=Popolna namestitev +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Osnovna namestitev +CustomInstallation=Namestitev po meri +NoUninstallWarningTitle=Komponente e obstajajo +NoUninstallWarning=Namestitveni program je ugotovil, da so naslednje komponente e nameene v raunalniku:%n%n%1%n%nNamestitveni program teh e nameenih komponent ne bo odstranil.%n%nelite vseeno nadaljevati? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Za izbrano namestitev potrebujete vsaj [gb] GB prostora na disku. +ComponentsDiskSpaceMBLabel=Za izbrano namestitev potrebujete vsaj [mb] MB prostora na disku. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Izbira dodatnih opravil +SelectTasksDesc=Katera dodatna opravila elite izvesti? +SelectTasksLabel2=Izberite dodatna opravila, ki jih bo namestitveni program opravil med namestitvijo programa [name], nato kliknite Naprej. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Izbira mape v meniju Zaetek +SelectStartMenuFolderDesc=Kje naj namestitveni program ustvari blinjice? +SelectStartMenuFolderLabel3=Namestitveni program bo ustvaril blinjice v naslednji mapi v meniju Start. +SelectStartMenuFolderBrowseLabel=Za nadaljevanje kliknite Naprej. e elite izbrati drugo mapo, kliknite Prebrskaj. +MustEnterGroupName=Ime skupine mora biti vpisano. +GroupNameTooLong=Ime mape ali poti je predolgo. +InvalidGroupName=Ime mape ni veljavno. +BadGroupName=Ime skupine ne sme vsebovati naslednjih znakov:%n%n%1 +NoProgramGroupCheck2=&Ne ustvari mape v meniju Start + +; *** "Ready to Install" wizard page +WizardReady=Pripravljen za namestitev +ReadyLabel1=Namestitveni program je pripravljen za namestitev programa [name] v va raunalnik. +ReadyLabel2a=Kliknite Namesti za zaetek nameanja. Kliknite Nazaj, e elite pregledati ali spremeniti katerokoli nastavitev. +ReadyLabel2b=Kliknite Namesti za zaetek nameanja. +ReadyMemoUserInfo=Podatki o uporabniku: +ReadyMemoDir=Ciljno mesto: +ReadyMemoType=Vrsta namestitve: +ReadyMemoComponents=Izbrane komponente: +ReadyMemoGroup=Mapa v meniju Zaetek: +ReadyMemoTasks=Dodatna opravila: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Prenaam dodatne datoteke... +ButtonStopDownload=Prekini preno&s +StopDownload=Ali res elite prekiniti prenos? +ErrorDownloadAborted=Prenos prekinjen +ErrorDownloadFailed=Prenos ni uspel: %1 %2 +ErrorDownloadSizeFailed=Pridobivanje velikosti ni uspelo: %1 %2 +ErrorFileHash1=Pridobivanje zgoene vrednosti ni uspelo: %1 +ErrorFileHash2=Neveljavna zgoena vrednost: priakovana %1, dobljena %2 +ErrorProgress=Neveljaven potek: %1 od %2 +ErrorFileSize=Neveljavna velikost datoteke: priakovana %1, dobljena %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Pripravljam za namestitev +PreparingDesc=Namestitveni program je pripravljen za namestitev programa [name] v va raunalnik. +PreviousInstallNotCompleted=Namestitev ali odstranitev prejnjega programa ni bila konana. Da bi jo dokonali, morate raunalnik znova zagnati.%n%nPo ponovnem zagonu raunalnika znova zaenite namestitveni program, da boste konali namestitev programa [name]. +CannotContinue=Namestitveni program ne more nadaljevati. Pritisnite Preklii za izhod. + +; *** "Installing" wizard page +ApplicationsFound=Naslednji programi uporabljajo datoteke, ki jih mora namestitveni program posodobiti. Priporoljivo je, da namestitvenemu programu dovolite, da te programe kona. +ApplicationsFound2=Naslednji programi uporabljajo datoteke, ki jih mora namestitveni program posodobiti. Priporoljivo je, da namestitvenemu programu dovolite, da te programe kona. Po koncu namestitve bo namestitveni program poizkusil znova zagnati te programe. +CloseApplications=S&amodejno zapri programe +DontCloseApplications=&Ne zapri programov +ErrorCloseApplications=Namestitvenemu programu ni uspelo samodejno zapreti vseh programov. Priporoljivo je, da pred nadaljevanjem zaprete vse programe, ki uporabljajo datoteke, katere mora namestitev posodobiti. +PrepareToInstallNeedsRestart=Namestitveni program mora znova zagnati va raunalnik. Za dokonanje namestitve programa [name], po ponovnem zagonu znova zaenite namestitveni program.%n%nAli elite zdaj znova zagnati raunalnik? + +WizardInstalling=Nameanje +InstallingLabel=Poakajte, da bo program [name] nameen v va raunalnik. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Zakljuek namestitve programa [name] +FinishedLabelNoIcons=Program [name] je nameen v va raunalnik. +FinishedLabel=Program [name] je nameen v va raunalnik. Program zaenete tako, da odprete pravkar ustvarjene programske ikone. +ClickFinish=Kliknite tipko Konaj za zakljuek namestitve. +FinishedRestartLabel=Za dokonanje namestitve programa [name] morate raunalnik znova zagnati. Ali ga elite znova zagnati zdaj? +FinishedRestartMessage=Za dokonanje namestitve programa [name] morate raunalnik znova zagnati. %n%nAli ga elite znova zagnati zdaj? +ShowReadmeCheck=elim prebrati datoteko BERIME +YesRadio=&Da, raunalnik znova zaeni zdaj +NoRadio=&Ne, raunalnik bom znova zagnal pozneje + +; used for example as 'Run MyProg.exe' +RunEntryExec=Zaeni %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Preglej %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Namestitveni program potrebuje naslednji disk +SelectDiskLabel2=Vstavite disk %1 in kliknite V redu.%n%ne se datoteke s tega diska nahajajo v drugi mapi kot je navedena spodaj, vnesite pravilno pot ali kliknite Prebrskaj. +PathLabel=&Pot: +FileNotInDir2=Datoteke %1 ni v mapi %2. Vstavite pravilni disk ali izberite drugo mapo. +SelectDirectoryLabel=Vnesite mesto naslednjega diska. + +; *** Installation phase messages +SetupAborted=Namestitev ni bila konana.%n%nOdpravite teavo in znova odprite namestitveni program. +AbortRetryIgnoreSelectAction=Izberite dejanje +AbortRetryIgnoreRetry=Poizkusi &znova +AbortRetryIgnoreIgnore=&Prezri napako in nadaljuj +AbortRetryIgnoreCancel=Preklii namestitev + +; *** Installation status messages +StatusClosingApplications=Zapiranje programov... +StatusCreateDirs=Ustvarjanje map... +StatusExtractFiles=Razirjanje datotek... +StatusCreateIcons=Ustvarjanje blinjic... +StatusCreateIniEntries=Vpisovanje v INI datoteke... +StatusCreateRegistryEntries=Ustvarjanje vnosov v register... +StatusRegisterFiles=Registriranje datotek... +StatusSavingUninstall=Zapisovanje podatkov za odstranitev... +StatusRunProgram=Zakljuevanje namestitve... +StatusRestartingApplications=Zaganjanje programov... +StatusRollback=Obnavljanje prvotnega stanja... + +; *** Misc. errors +ErrorInternal2=Interna napaka: %1 +ErrorFunctionFailedNoCode=%1 ni uspel(a) +ErrorFunctionFailed=%1 ni uspel(a); koda %2 +ErrorFunctionFailedWithMessage=%1 ni uspela; koda %2.%n%3 +ErrorExecutingProgram=Ne morem zagnati programa:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Napaka pri odpiranju kljua v registru:%n%1\%2 +ErrorRegCreateKey=Napaka pri ustvarjanju kljua v registru:%n%1\%2 +ErrorRegWriteKey=Napaka pri pisanju kljua v registru:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Napaka pri vpisu v INI datoteko %1. + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=Pre&skoi to datoteko (ni priporoeno) +FileAbortRetryIgnoreIgnoreNotRecommended=Prezr&i napako in nadaljuj (ni priporoeno) +SourceIsCorrupted=Izvorna datoteka je okvarjena +SourceDoesntExist=Izvorna datoteka %1 ne obstaja +ExistingFileReadOnly2=Obstojee datoteke ni mogoe nadomestiti, ker ima oznako samo za branje. +ExistingFileReadOnlyRetry=Odst&rani oznako samo za branje in poizkusi ponovno +ExistingFileReadOnlyKeepExisting=&Ohrani obstojeo datoteko +ErrorReadingExistingDest=Pri branju obstojee datoteke je prilo do napake: +FileExistsSelectAction=Izberite dejanje +FileExists2=Datoteka e obstaja. +FileExistsOverwriteExisting=&Prepii obstojeo datoteko +FileExistsKeepExisting=&Ohrani trenutno datoteko +FileExistsOverwriteOrKeepAll=&To naredite za preostale spore +ExistingFileNewerSelectAction=Izberite dejanje +ExistingFileNewer2=Obstojea datoteka je noveja, kot datoteka, ki se namea. +ExistingFileNewerOverwriteExisting=&Prepii obstojeo datoteko +ExistingFileNewerKeepExisting=&Ohrani trenutno datoteko (priporoeno) +ExistingFileNewerOverwriteOrKeepAll=&To naredite za preostale spore +ErrorChangingAttr=Pri poskusu spremembe lastnosti datoteke je prilo do napake: +ErrorCreatingTemp=Pri ustvarjanju datoteke v ciljni mapi je prilo do napake: +ErrorReadingSource=Pri branju izvorne datoteke je prilo do napake: +ErrorCopying=Pri kopiranju datoteke je prilo do napake: +ErrorReplacingExistingFile=Pri poskusu zamenjave obstojee datoteke je prilo do napake: +ErrorRestartReplace=Napaka RestartReplace: +ErrorRenamingTemp=Pri poskusu preimenovanja datoteke v ciljni mapi je prilo do napake: +ErrorRegisterServer=Registracija DLL/OCX ni uspela: %1 +ErrorRegSvr32Failed=RegSvr32 ni uspel s kodo napake %1 +ErrorRegisterTypeLib=Registracija TypeLib ni uspela: %1 + +; *** Uninstall display name markings +UninstallDisplayNameMark=%1 (%2) +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bitno +UninstallDisplayNameMark64Bit=64-bitno +UninstallDisplayNameMarkAllUsers=vsi uporabniki +UninstallDisplayNameMarkCurrentUser=trenutni uporabnik + +; *** Post-installation errors +ErrorOpeningReadme=Pri odpiranju datoteke BERIME je prilo do napake. +ErrorRestartingComputer=Namestitvenemu programu ni uspelo znova zagnati raunalnika. Sami znova zaenite raunalnik. + +; *** Uninstaller messages +UninstallNotFound=Datoteka %1 ne obstaja. Odstranitev ni mogoa. +UninstallOpenError=Datoteke %1 ne morem odpreti. Ne morem odstraniti +UninstallUnsupportedVer=Dnevnika datoteka %1 je v obliki, ki je ta razliica odstranitvenega programa ne razume. Programa ni mogoe odstraniti +UninstallUnknownEntry=V dnevniki datoteki je bil najden neznani vpis (%1) +ConfirmUninstall=Ste prepriani, da elite v celoti odstraniti program %1 in pripadajoe komponente? +UninstallOnlyOnWin64=To namestitev je mogoe odstraniti le v 64-bitni razliici sistema Windows. +OnlyAdminCanUninstall=Za odstranitev tega programa morate imeti skrbnike pravice. +UninstallStatusLabel=Poakajte, da se program %1 odstrani iz vaega raunalnika. +UninstalledAll=Program %1 je bil uspeno odstranjen iz vaega raunalnika. +UninstalledMost=Odstranjevanje programa %1 je konano.%n%nNekatere datoteke niso bile odstranjene in jih lahko odstranite rono. +UninstalledAndNeedsRestart=Za dokonanje odstranitve programa %1 morate raunalnik znova zagnati.%n%nAli ga elite znova zagnati zdaj? +UninstallDataCorrupted=Datoteka %1 je okvarjena. Odstranitev ni mona + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=elite odstraniti datoteko v skupni rabi? +ConfirmDeleteSharedFile2=Spodaj izpisane datoteke v skupni rabi ne uporablja ve noben program. elite odstraniti to datoteko?%n%ne jo uporablja katerikoli program in jo boste odstranili, ta program verjetno ne bo ve deloval pravilno. e niste prepriani, kliknite Ne. e boste datoteko ohranili v raunalniku, ne bo ni narobe. +SharedFileNameLabel=Ime datoteke: +SharedFileLocationLabel=Mesto: +WizardUninstalling=Odstranjevanje programa +StatusUninstalling=Odstranjujem %1... + +ShutdownBlockReasonInstallingApp=Nameam %1. +ShutdownBlockReasonUninstallingApp=Odstranjujem %1. + +[CustomMessages] + +NameAndVersion=%1 razliica %2 +AdditionalIcons=Dodatne ikone: +CreateDesktopIcon=Ustvari ikono na &namizju +CreateQuickLaunchIcon=Ustvari ikono za &hitri zagon +ProgramOnTheWeb=%1 na spletu +UninstallProgram=Odstrani %1 +LaunchProgram=Odpri %1 +AssocFileExtension=&Povei %1 s pripono %2 +AssocingFileExtension=Povezujem %1 s pripono %2... +AutoStartProgramGroupDescription=Zagon: +AutoStartProgram=Samodejno zaeni %1 +AddonHostProgramNotFound=Programa %1 ni bilo mogoe najti v izbrani mapi.%n%nAli elite vseeno nadaljevati? diff --git a/Files/Languages/Spanish.isl b/Files/Languages/Spanish.isl new file mode 100644 index 00000000..16e7dcd1 --- /dev/null +++ b/Files/Languages/Spanish.isl @@ -0,0 +1,383 @@ +; *** Inno Setup version 6.1.0+ Spanish messages *** +; +; Maintained by Jorge Andres Brugger (jbrugger@ideaworks.com.ar) +; Spanish.isl version 1.5.2 (20211123) +; Default.isl version 6.1.0 +; +; Thanks to Germn Giraldo, Jordi Latorre, Ximo Tamarit, Emiliano Llano, +; Ramn Verduzco, Graciela Garca, Carles Millan and Rafael Barranco-Droege + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Espa<00F1>ol +LanguageID=$0c0a +LanguageCodePage=1252 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Instalar +SetupWindowTitle=Instalar - %1 +UninstallAppTitle=Desinstalar +UninstallAppFullTitle=Desinstalar - %1 + +; *** Misc. common +InformationTitle=Informacin +ConfirmTitle=Confirmar +ErrorTitle=Error + +; *** SetupLdr messages +SetupLdrStartupMessage=Este programa instalar %1. Desea continuar? +LdrCannotCreateTemp=Imposible crear archivo temporal. Instalacin interrumpida +LdrCannotExecTemp=Imposible ejecutar archivo en la carpeta temporal. Instalacin interrumpida +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nError %2: %3 +SetupFileMissing=El archivo %1 no se encuentra en la carpeta de instalacin. Por favor, solucione el problema u obtenga una copia nueva del programa. +SetupFileCorrupt=Los archivos de instalacin estn daados. Por favor, obtenga una copia nueva del programa. +SetupFileCorruptOrWrongVer=Los archivos de instalacin estn daados o son incompatibles con esta versin del programa de instalacin. Por favor, solucione el problema u obtenga una copia nueva del programa. +InvalidParameter=Se ha utilizado un parmetro no vlido en la lnea de comandos:%n%n%1 +SetupAlreadyRunning=El programa de instalacin an est ejecutndose. +WindowsVersionNotSupported=Este programa no es compatible con la versin de Windows de su equipo. +WindowsServicePackRequired=Este programa requiere %1 Service Pack %2 o posterior. +NotOnThisPlatform=Este programa no se ejecutar en %1. +OnlyOnThisPlatform=Este programa debe ejecutarse en %1. +OnlyOnTheseArchitectures=Este programa solo puede instalarse en versiones de Windows diseadas para las siguientes arquitecturas de procesadores:%n%n%1 +WinVersionTooLowError=Este programa requiere %1 versin %2 o posterior. +WinVersionTooHighError=Este programa no puede instalarse en %1 versin %2 o posterior. +AdminPrivilegesRequired=Debe iniciar la sesin como administrador para instalar este programa. +PowerUserPrivilegesRequired=Debe iniciar la sesin como administrador o como miembro del grupo de Usuarios Avanzados para instalar este programa. +SetupAppRunningError=El programa de instalacin ha detectado que %1 est ejecutndose.%n%nPor favor, cirrelo ahora, luego haga clic en Aceptar para continuar o en Cancelar para salir. +UninstallAppRunningError=El desinstalador ha detectado que %1 est ejecutndose.%n%nPor favor, cirrelo ahora, luego haga clic en Aceptar para continuar o en Cancelar para salir. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Seleccin del Modo de Instalacin +PrivilegesRequiredOverrideInstruction=Seleccione el modo de instalacin +PrivilegesRequiredOverrideText1=%1 puede ser instalado para todos los usuarios (requiere privilegios administrativos), o solo para Ud. +PrivilegesRequiredOverrideText2=%1 puede ser instalado solo para Ud, o para todos los usuarios (requiere privilegios administrativos). +PrivilegesRequiredOverrideAllUsers=Instalar para &todos los usuarios +PrivilegesRequiredOverrideAllUsersRecommended=Instalar para &todos los usuarios (recomendado) +PrivilegesRequiredOverrideCurrentUser=Instalar para &m solamente +PrivilegesRequiredOverrideCurrentUserRecommended=Instalar para &m solamente (recomendado) + +; *** Misc. errors +ErrorCreatingDir=El programa de instalacin no pudo crear la carpeta "%1" +ErrorTooManyFilesInDir=Imposible crear un archivo en la carpeta "%1" porque contiene demasiados archivos + +; *** Setup common messages +ExitSetupTitle=Salir de la Instalacin +ExitSetupMessage=La instalacin no se ha completado an. Si cancela ahora, el programa no se instalar.%n%nPuede ejecutar nuevamente el programa de instalacin en otra ocasin para completarla.%n%nSalir de la instalacin? +AboutSetupMenuItem=&Acerca de Instalar... +AboutSetupTitle=Acerca de Instalar +AboutSetupMessage=%1 versin %2%n%3%n%n%1 sitio Web:%n%4 +AboutSetupNote= +TranslatorNote=Spanish translation maintained by Jorge Andres Brugger (jbrugger@gmx.net) + +; *** Buttons +ButtonBack=< &Atrs +ButtonNext=&Siguiente > +ButtonInstall=&Instalar +ButtonOK=Aceptar +ButtonCancel=Cancelar +ButtonYes=&S +ButtonYesToAll=S a &Todo +ButtonNo=&No +ButtonNoToAll=N&o a Todo +ButtonFinish=&Finalizar +ButtonBrowse=&Examinar... +ButtonWizardBrowse=&Examinar... +ButtonNewFolder=&Crear Nueva Carpeta + +; *** "Select Language" dialog messages +SelectLanguageTitle=Seleccione el Idioma de la Instalacin +SelectLanguageLabel=Seleccione el idioma a utilizar durante la instalacin. + +; *** Common wizard text +ClickNext=Haga clic en Siguiente para continuar o en Cancelar para salir de la instalacin. +BeveledLabel= +BrowseDialogTitle=Buscar Carpeta +BrowseDialogLabel=Seleccione una carpeta y luego haga clic en Aceptar. +NewFolderName=Nueva Carpeta + +; *** "Welcome" wizard page +WelcomeLabel1=Bienvenido al asistente de instalacin de [name] +WelcomeLabel2=Este programa instalar [name/ver] en su sistema.%n%nSe recomienda cerrar todas las dems aplicaciones antes de continuar. + +; *** "Password" wizard page +WizardPassword=Contrasea +PasswordLabel1=Esta instalacin est protegida por contrasea. +PasswordLabel3=Por favor, introduzca la contrasea y haga clic en Siguiente para continuar. En las contraseas se hace diferencia entre maysculas y minsculas. +PasswordEditLabel=&Contrasea: +IncorrectPassword=La contrasea introducida no es correcta. Por favor, intntelo nuevamente. + +; *** "License Agreement" wizard page +WizardLicense=Acuerdo de Licencia +LicenseLabel=Es importante que lea la siguiente informacin antes de continuar. +LicenseLabel3=Por favor, lea el siguiente acuerdo de licencia. Debe aceptar las clusulas de este acuerdo antes de continuar con la instalacin. +LicenseAccepted=A&cepto el acuerdo +LicenseNotAccepted=&No acepto el acuerdo + +; *** "Information" wizard pages +WizardInfoBefore=Informacin +InfoBeforeLabel=Es importante que lea la siguiente informacin antes de continuar. +InfoBeforeClickLabel=Cuando est listo para continuar con la instalacin, haga clic en Siguiente. +WizardInfoAfter=Informacin +InfoAfterLabel=Es importante que lea la siguiente informacin antes de continuar. +InfoAfterClickLabel=Cuando est listo para continuar, haga clic en Siguiente. + +; *** "User Information" wizard page +WizardUserInfo=Informacin de Usuario +UserInfoDesc=Por favor, introduzca sus datos. +UserInfoName=Nombre de &Usuario: +UserInfoOrg=&Organizacin: +UserInfoSerial=Nmero de &Serie: +UserInfoNameRequired=Debe introducir un nombre. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Seleccione la Carpeta de Destino +SelectDirDesc=Dnde debe instalarse [name]? +SelectDirLabel3=El programa instalar [name] en la siguiente carpeta. +SelectDirBrowseLabel=Para continuar, haga clic en Siguiente. Si desea seleccionar una carpeta diferente, haga clic en Examinar. +DiskSpaceGBLabel=Se requieren al menos [gb] GB de espacio libre en el disco. +DiskSpaceMBLabel=Se requieren al menos [mb] MB de espacio libre en el disco. +CannotInstallToNetworkDrive=El programa de instalacin no puede realizar la instalacin en una unidad de red. +CannotInstallToUNCPath=El programa de instalacin no puede realizar la instalacin en una ruta de acceso UNC. +InvalidPath=Debe introducir una ruta completa con la letra de la unidad; por ejemplo:%n%nC:\APP%n%no una ruta de acceso UNC de la siguiente forma:%n%n\\servidor\compartido +InvalidDrive=La unidad o ruta de acceso UNC que seleccion no existe o no es accesible. Por favor, seleccione otra. +DiskSpaceWarningTitle=Espacio Insuficiente en Disco +DiskSpaceWarning=La instalacin requiere al menos %1 KB de espacio libre, pero la unidad seleccionada solo cuenta con %2 KB disponibles.%n%nDesea continuar de todas formas? +DirNameTooLong=El nombre de la carpeta o la ruta son demasiado largos. +InvalidDirName=El nombre de la carpeta no es vlido. +BadDirName32=Los nombres de carpetas no pueden incluir los siguientes caracteres:%n%n%1 +DirExistsTitle=La Carpeta Ya Existe +DirExists=La carpeta:%n%n%1%n%nya existe. Desea realizar la instalacin en esa carpeta de todas formas? +DirDoesntExistTitle=La Carpeta No Existe +DirDoesntExist=La carpeta:%n%n%1%n%nno existe. Desea crear esa carpeta? + +; *** "Select Components" wizard page +WizardSelectComponents=Seleccione los Componentes +SelectComponentsDesc=Qu componentes deben instalarse? +SelectComponentsLabel2=Seleccione los componentes que desea instalar y desmarque los componentes que no desea instalar. Haga clic en Siguiente cuando est listo para continuar. +FullInstallation=Instalacin Completa +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Instalacin Compacta +CustomInstallation=Instalacin Personalizada +NoUninstallWarningTitle=Componentes Encontrados +NoUninstallWarning=El programa de instalacin ha detectado que los siguientes componentes ya estn instalados en su sistema:%n%n%1%n%nDesmarcar estos componentes no los desinstalar.%n%nDesea continuar de todos modos? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=La seleccin actual requiere al menos [gb] GB de espacio en disco. +ComponentsDiskSpaceMBLabel=La seleccin actual requiere al menos [mb] MB de espacio en disco. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Seleccione las Tareas Adicionales +SelectTasksDesc=Qu tareas adicionales deben realizarse? +SelectTasksLabel2=Seleccione las tareas adicionales que desea que se realicen durante la instalacin de [name] y haga clic en Siguiente. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Seleccione la Carpeta del Men Inicio +SelectStartMenuFolderDesc=Dnde deben colocarse los accesos directos del programa? +SelectStartMenuFolderLabel3=El programa de instalacin crear los accesos directos del programa en la siguiente carpeta del Men Inicio. +SelectStartMenuFolderBrowseLabel=Para continuar, haga clic en Siguiente. Si desea seleccionar una carpeta distinta, haga clic en Examinar. +MustEnterGroupName=Debe proporcionar un nombre de carpeta. +GroupNameTooLong=El nombre de la carpeta o la ruta son demasiado largos. +InvalidGroupName=El nombre de la carpeta no es vlido. +BadGroupName=El nombre de la carpeta no puede incluir ninguno de los siguientes caracteres:%n%n%1 +NoProgramGroupCheck2=&No crear una carpeta en el Men Inicio + +; *** "Ready to Install" wizard page +WizardReady=Listo para Instalar +ReadyLabel1=Ahora el programa est listo para iniciar la instalacin de [name] en su sistema. +ReadyLabel2a=Haga clic en Instalar para continuar con el proceso o haga clic en Atrs si desea revisar o cambiar alguna configuracin. +ReadyLabel2b=Haga clic en Instalar para continuar con el proceso. +ReadyMemoUserInfo=Informacin del usuario: +ReadyMemoDir=Carpeta de Destino: +ReadyMemoType=Tipo de Instalacin: +ReadyMemoComponents=Componentes Seleccionados: +ReadyMemoGroup=Carpeta del Men Inicio: +ReadyMemoTasks=Tareas Adicionales: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Descargando archivos adicionales... +ButtonStopDownload=&Detener descarga +StopDownload=Est seguiro que desea detener la descarga? +ErrorDownloadAborted=Descarga cancelada +ErrorDownloadFailed=Fall descarga: %1 %2 +ErrorDownloadSizeFailed=Fall obtencin de tamao: %1 %2 +ErrorFileHash1=Fall hash del archivo: %1 +ErrorFileHash2=Hash de archivo no vlido: esperado %1, encontrado %2 +ErrorProgress=Progreso no vlido: %1 de %2 +ErrorFileSize=Tamao de archivo no vlido: esperado %1, encontrado %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Preparndose para Instalar +PreparingDesc=El programa de instalacin est preparndose para instalar [name] en su sistema. +PreviousInstallNotCompleted=La instalacin/desinstalacin previa de un programa no se complet. Deber reiniciar el sistema para completar esa instalacin.%n%nUna vez reiniciado el sistema, ejecute el programa de instalacin nuevamente para completar la instalacin de [name]. +CannotContinue=El programa de instalacin no puede continuar. Por favor, presione Cancelar para salir. +ApplicationsFound=Las siguientes aplicaciones estn usando archivos que necesitan ser actualizados por el programa de instalacin. Se recomienda que permita al programa de instalacin cerrar automticamente estas aplicaciones. +ApplicationsFound2=Las siguientes aplicaciones estn usando archivos que necesitan ser actualizados por el programa de instalacin. Se recomienda que permita al programa de instalacin cerrar automticamente estas aplicaciones. Al completarse la instalacin, el programa de instalacin intentar reiniciar las aplicaciones. +CloseApplications=&Cerrar automticamente las aplicaciones +DontCloseApplications=&No cerrar las aplicaciones +ErrorCloseApplications=El programa de instalacin no pudo cerrar de forma automtica todas las aplicaciones. Se recomienda que, antes de continuar, cierre todas las aplicaciones que utilicen archivos que necesitan ser actualizados por el programa de instalacin. +PrepareToInstallNeedsRestart=El programa de instalacin necesita reiniciar el sistema. Una vez que se haya reiniciado ejecute nuevamente el programa de instalacin para completar la instalacin de [name].%n%nDesea reiniciar el sistema ahora? + +; *** "Installing" wizard page +WizardInstalling=Instalando +InstallingLabel=Por favor, espere mientras se instala [name] en su sistema. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Completando la instalacin de [name] +FinishedLabelNoIcons=El programa complet la instalacin de [name] en su sistema. +FinishedLabel=El programa complet la instalacin de [name] en su sistema. Puede ejecutar la aplicacin utilizando los accesos directos creados. +ClickFinish=Haga clic en Finalizar para salir del programa de instalacin. +FinishedRestartLabel=Para completar la instalacin de [name], su sistema debe reiniciarse. Desea reiniciarlo ahora? +FinishedRestartMessage=Para completar la instalacin de [name], su sistema debe reiniciarse.%n%nDesea reiniciarlo ahora? +ShowReadmeCheck=S, deseo ver el archivo LAME +YesRadio=&S, deseo reiniciar el sistema ahora +NoRadio=&No, reiniciar el sistema ms tarde +; used for example as 'Run MyProg.exe' +RunEntryExec=Ejecutar %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Ver %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=El Programa de Instalacin Necesita el Siguiente Disco +SelectDiskLabel2=Por favor, inserte el Disco %1 y haga clic en Aceptar.%n%nSi los archivos pueden ser hallados en una carpeta diferente a la indicada abajo, introduzca la ruta correcta o haga clic en Examinar. +PathLabel=&Ruta: +FileNotInDir2=El archivo "%1" no se ha podido hallar en "%2". Por favor, inserte el disco correcto o seleccione otra carpeta. +SelectDirectoryLabel=Por favor, especifique la ubicacin del siguiente disco. + +; *** Installation phase messages +SetupAborted=La instalacin no se ha completado.%n%nPor favor solucione el problema y ejecute nuevamente el programa de instalacin. +AbortRetryIgnoreSelectAction=Seleccione accin +AbortRetryIgnoreRetry=&Reintentar +AbortRetryIgnoreIgnore=&Ignorar el error y continuar +AbortRetryIgnoreCancel=Cancelar instalacin + +; *** Installation status messages +StatusClosingApplications=Cerrando aplicaciones... +StatusCreateDirs=Creando carpetas... +StatusExtractFiles=Extrayendo archivos... +StatusCreateIcons=Creando accesos directos... +StatusCreateIniEntries=Creando entradas INI... +StatusCreateRegistryEntries=Creando entradas de registro... +StatusRegisterFiles=Registrando archivos... +StatusSavingUninstall=Guardando informacin para desinstalar... +StatusRunProgram=Terminando la instalacin... +StatusRestartingApplications=Reiniciando aplicaciones... +StatusRollback=Deshaciendo cambios... + +; *** Misc. errors +ErrorInternal2=Error interno: %1 +ErrorFunctionFailedNoCode=%1 fall +ErrorFunctionFailed=%1 fall; cdigo %2 +ErrorFunctionFailedWithMessage=%1 fall; cdigo %2.%n%3 +ErrorExecutingProgram=Imposible ejecutar el archivo:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Error al abrir la clave del registro:%n%1\%2 +ErrorRegCreateKey=Error al crear la clave del registro:%n%1\%2 +ErrorRegWriteKey=Error al escribir la clave del registro:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Error al crear entrada INI en el archivo "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Omitir este archivo (no recomendado) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorar el error y continuar (no recomendado) +SourceIsCorrupted=El archivo de origen est daado +SourceDoesntExist=El archivo de origen "%1" no existe +ExistingFileReadOnly2=El archivo existente no puede ser reemplazado debido a que est marcado como solo-lectura. +ExistingFileReadOnlyRetry=&Elimine el atributo de solo-lectura y reintente +ExistingFileReadOnlyKeepExisting=&Mantener el archivo existente +ErrorReadingExistingDest=Ocurri un error mientras se intentaba leer el archivo: +FileExistsSelectAction=Seleccione accin +FileExists2=El archivo ya existe. +FileExistsOverwriteExisting=&Sobreescribir el archivo existente +FileExistsKeepExisting=&Mantener el archivo existente +FileExistsOverwriteOrKeepAll=&Hacer lo mismo para lo siguientes conflictos +ExistingFileNewerSelectAction=Seleccione accin +ExistingFileNewer2=El archivo existente es ms reciente que el que se est tratando de instalar. +ExistingFileNewerOverwriteExisting=&Sobreescribir el archivo existente +ExistingFileNewerKeepExisting=&Mantener el archivo existente (recomendado) +ExistingFileNewerOverwriteOrKeepAll=&Hacer lo mismo para lo siguientes conflictos +ErrorChangingAttr=Ocurri un error al intentar cambiar los atributos del archivo: +ErrorCreatingTemp=Ocurri un error al intentar crear un archivo en la carpeta de destino: +ErrorReadingSource=Ocurri un error al intentar leer el archivo de origen: +ErrorCopying=Ocurri un error al intentar copiar el archivo: +ErrorReplacingExistingFile=Ocurri un error al intentar reemplazar el archivo existente: +ErrorRestartReplace=Fall reintento de reemplazar: +ErrorRenamingTemp=Ocurri un error al intentar renombrar un archivo en la carpeta de destino: +ErrorRegisterServer=Imposible registrar el DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 fall con el cdigo de salida %1 +ErrorRegisterTypeLib=Imposible registrar la librera de tipos: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=Todos los usuarios +UninstallDisplayNameMarkCurrentUser=Usuario actual + +; *** Post-installation errors +ErrorOpeningReadme=Ocurri un error al intentar abrir el archivo LAME. +ErrorRestartingComputer=El programa de instalacin no pudo reiniciar el equipo. Por favor, hgalo manualmente. + +; *** Uninstaller messages +UninstallNotFound=El archivo "%1" no existe. Imposible desinstalar. +UninstallOpenError=El archivo "%1" no pudo ser abierto. Imposible desinstalar +UninstallUnsupportedVer=El archivo de registro para desinstalar "%1" est en un formato no reconocido por esta versin del desinstalador. Imposible desinstalar +UninstallUnknownEntry=Se encontr una entrada desconocida (%1) en el registro de desinstalacin +ConfirmUninstall=Est seguro que desea desinstalar completamente %1 y todos sus componentes? +UninstallOnlyOnWin64=Este programa solo puede ser desinstalado en Windows de 64-bits. +OnlyAdminCanUninstall=Este programa solo puede ser desinstalado por un usuario con privilegios administrativos. +UninstallStatusLabel=Por favor, espere mientras %1 es desinstalado de su sistema. +UninstalledAll=%1 se desinstal satisfactoriamente de su sistema. +UninstalledMost=La desinstalacin de %1 ha sido completada.%n%nAlgunos elementos no pudieron eliminarse, pero podr eliminarlos manualmente si lo desea. +UninstalledAndNeedsRestart=Para completar la desinstalacin de %1, su sistema debe reiniciarse.%n%nDesea reiniciarlo ahora? +UninstallDataCorrupted=El archivo "%1" est daado. No puede desinstalarse + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Eliminar Archivo Compartido? +ConfirmDeleteSharedFile2=El sistema indica que el siguiente archivo compartido no es utilizado por ningn otro programa. Desea eliminar este archivo compartido?%n%nSi elimina el archivo y hay programas que lo utilizan, esos programas podran dejar de funcionar correctamente. Si no est seguro, elija No. Dejar el archivo en su sistema no producir ningn dao. +SharedFileNameLabel=Archivo: +SharedFileLocationLabel=Ubicacin: +WizardUninstalling=Estado de la Desinstalacin +StatusUninstalling=Desinstalando %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Instalando %1. +ShutdownBlockReasonUninstallingApp=Desinstalando %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 versin %2 +AdditionalIcons=Accesos directos adicionales: +CreateDesktopIcon=Crear un acceso directo en el &escritorio +CreateQuickLaunchIcon=Crear un acceso directo en &Inicio Rpido +ProgramOnTheWeb=%1 en la Web +UninstallProgram=Desinstalar %1 +LaunchProgram=Ejecutar %1 +AssocFileExtension=&Asociar %1 con la extensin de archivo %2 +AssocingFileExtension=Asociando %1 con la extensin de archivo %2... +AutoStartProgramGroupDescription=Inicio: +AutoStartProgram=Iniciar automticamente %1 +AddonHostProgramNotFound=%1 no pudo ser localizado en la carpeta seleccionada.%n%nDesea continuar de todas formas? diff --git a/Files/Languages/Turkish.isl b/Files/Languages/Turkish.isl new file mode 100644 index 00000000..3ebf78a8 --- /dev/null +++ b/Files/Languages/Turkish.isl @@ -0,0 +1,384 @@ +; *** Inno Setup version 6.1.0+ Turkish messages *** +; Language "Turkce" Turkish Translate by "Ceviren" Kaya Zeren translator@zeron.net +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=T<00FC>rk<00E7>e +LanguageID=$041f +LanguageCodePage=1254 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Uygulama balklar +SetupAppTitle=Kurulum yardmcs +SetupWindowTitle=%1 - Kurulum yardmcs +UninstallAppTitle=Kaldrma yardmcs +UninstallAppFullTitle=%1 kaldrma yardmcs + +; *** eitli ortak metinler +InformationTitle=Bilgi +ConfirmTitle=Onay +ErrorTitle=Hata + +; *** Kurulum ykleyici iletileri +SetupLdrStartupMessage=%1 uygulamas kurulacak. lerlemek istiyor musunuz? +LdrCannotCreateTemp=Geici dosya oluturulamadndan kurulum iptal edildi +LdrCannotExecTemp=Geici klasrdeki dosya altrlamadndan kurulum iptal edildi +HelpTextNote= + +; *** Balang hata iletileri +LastErrorMessage=%1.%n%nHata %2: %3 +SetupFileMissing=Kurulum klasrnde %1 dosyas eksik. Ltfen sorunu zn ya da uygulamann yeni bir kopyasyla yeniden deneyin. +SetupFileCorrupt=Kurulum dosyalar bozulmu. Ltfen uygulamann yeni bir kopyasyla yeniden kurmay deneyin. +SetupFileCorruptOrWrongVer=Kurulum dosyalar bozulmu ya da bu kurulum yardmcs srm ile uyumlu deil. Ltfen sorunu zn ya da uygulamann yeni bir kopyasyla yeniden kurmay deneyin. +InvalidParameter=Komut satrnda geersiz bir parametre yazlm:%n%n%1 +SetupAlreadyRunning=Kurulum yardmcs zaten alyor. +WindowsVersionNotSupported=Bu uygulama, bilgisayarnzda ykl olan Windows srm ile uyumlu deil. +WindowsServicePackRequired=Bu uygulama, %1 hizmet paketi %2 ve zerindeki srmler ile alr. +NotOnThisPlatform=Bu uygulama, %1 zerinde almaz. +OnlyOnThisPlatform=Bu uygulama, %1 zerinde altrlmaldr. +OnlyOnTheseArchitectures=Bu uygulama, yalnzca u ilemci mimarileri iin tasarlanm Windows srmleriyle alr:%n%n%1 +WinVersionTooLowError=Bu uygulama iin %1 srm %2 ya da zeri gereklidir. +WinVersionTooHighError=Bu uygulama, '%1' srm '%2' ya da zerine kurulamaz. +AdminPrivilegesRequired=Bu uygulamay kurmak iin Ynetici yetkileri olan bir kullanc ile oturum alm olmaldr. +PowerUserPrivilegesRequired=Bu uygulamay kurarken, Ynetici ya da Gl Kullanclar grubundaki bir kullanc ile oturum alm olmas gereklidir. +SetupAppRunningError=Kurulum yardmcs %1 uygulamasnn almakta olduunu alglad.%n%nLtfen uygulamann alan tm kopyalarn kapatp, ilerlemek iin Tamam, kurulum yardmcsndan kmak iin ptal zerine tklayn. +UninstallAppRunningError=Kaldrma yardmcs, %1 uygulamasnn almakta olduunu alglad.%n%nLtfen uygulamann alan tm kopyalarn kapatp, ilerlemek iin Tamam ya da kaldrma yardmcsndan kmak iin ptal zerine tklayn. + +; *** Balang sorular +PrivilegesRequiredOverrideTitle=Kurulum kipini sein +PrivilegesRequiredOverrideInstruction=Kurulum kipini sein +PrivilegesRequiredOverrideText1=%1 tm kullanclar iin (ynetici izinleri gerekir) ya da yalnzca sizin hesabnz iin kurulabilir. +PrivilegesRequiredOverrideText2=%1 yalnzca sizin hesabnz iin ya da tm kullanclar iin (ynetici izinleri gerekir) kurulabilir. +PrivilegesRequiredOverrideAllUsers=&Tm kullanclar iin kurulsun +PrivilegesRequiredOverrideAllUsersRecommended=&Tm kullanclar iin kurulsun (nerilir) +PrivilegesRequiredOverrideCurrentUser=&Yalnzca geerli kullanc iin kurulsun +PrivilegesRequiredOverrideCurrentUserRecommended=&Yalnzca geerli kullanc iin kurulsun (nerilir) + +; *** eitli hata metinleri +ErrorCreatingDir=Kurulum yardmcs "%1" klasrn oluturamad. +ErrorTooManyFilesInDir="%1" klasr iinde ok sayda dosya olduundan bir dosya oluturulamad + +; *** Ortak kurulum iletileri +ExitSetupTitle=Kurulum yardmcsndan k +ExitSetupMessage=Kurulum tamamlanmad. imdi karsanz, uygulama kurulmayacak.%n%nKurulumu tamamlamak iin istediiniz zaman kurulum yardmcsn yeniden altrabilirsiniz.%n%nKurulum yardmcsndan klsn m? +AboutSetupMenuItem=Kurulum h&akknda... +AboutSetupTitle=Kurulum hakknda +AboutSetupMessage=%1 %2 srm%n%3%n%n%1 ana sayfa:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Dmeler +ButtonBack=< &nceki +ButtonNext=&Sonraki > +ButtonInstall=&Kur +ButtonOK=Tamam +ButtonCancel=ptal +ButtonYes=E&vet +ButtonYesToAll=&Tmne evet +ButtonNo=&Hayr +ButtonNoToAll=Tmne ha&yr +ButtonFinish=&Bitti +ButtonBrowse=&Gz at... +ButtonWizardBrowse=Gz a&t... +ButtonNewFolder=Ye&ni klasr olutur + +; *** "Kurulum dilini sein" sayfas iletileri +SelectLanguageTitle=Kurulum Yardmcs dilini sein +SelectLanguageLabel=Kurulum sresince kullanlacak dili sein. + +; *** Ortak metinler +ClickNext=lerlemek iin Sonraki, kmak iin ptal zerine tklayn. +BeveledLabel= +BrowseDialogTitle=Klasre gz at +BrowseDialogLabel=Aadaki listeden bir klasr seip, Tamam zerine tklayn. +NewFolderName=Yeni klasr + +; *** "Karlama" sayfas +WelcomeLabel1=[name] Kurulum yardmcsna ho geldiniz. +WelcomeLabel2=Bilgisayarnza [name/ver] uygulamas kurulacak.%n%nlerlemeden nce alan dier tm uygulamalar kapatmanz nerilir. + +; *** "Parola" sayfas +WizardPassword=Parola +PasswordLabel1=Bu kurulum parola korumaldr. +PasswordLabel3=Ltfen parolay yazn ve ilerlemek iin Sonraki zerine tklayn. Parolalar byk kk harflere duyarldr. +PasswordEditLabel=&Parola: +IncorrectPassword=Yazdnz parola doru deil. Ltfen yeniden deneyin. + +; *** "Lisans anlamas" sayfas +WizardLicense=Lisans anlamas +LicenseLabel=Ltfen ilerlemeden nce aadaki nemli bilgileri okuyun. +LicenseLabel3=Ltfen aadaki lisans anlamasn okuyun. Uygulamay kurmak iin bu anlamay kabul etmelisiniz. +LicenseAccepted=Anlamay kabul &ediyorum. +LicenseNotAccepted=Anlamay kabul et&miyorum. + +; *** "Bilgiler" sayfas +WizardInfoBefore=Bilgiler +InfoBeforeLabel=Ltfen ilerlemeden nce aadaki nemli bilgileri okuyun. +InfoBeforeClickLabel=Uygulamay kurmaya hazr olduunuzda Sonraki zerine tklayn. +WizardInfoAfter=Bilgiler +InfoAfterLabel=Ltfen ilerlemeden nce aadaki nemli bilgileri okuyun. +InfoAfterClickLabel=Uygulamay kurmaya hazr olduunuzda Sonraki zerine tklayn. + +; *** "Kullanc bilgileri" sayfas +WizardUserInfo=Kullanc bilgileri +UserInfoDesc=Ltfen bilgilerinizi yazn. +UserInfoName=K&ullanc ad: +UserInfoOrg=Ku&rum: +UserInfoSerial=&Seri numaras: +UserInfoNameRequired=Bir ad yazmalsnz. + +; *** "Kurulum konumunu sein" sayfas +WizardSelectDir=Kurulum konumunu sein +SelectDirDesc=[name] nereye kurulsun? +SelectDirLabel3=[name] uygulamas u klasre kurulacak. +SelectDirBrowseLabel=lerlemek icin Sonraki zerine tklayn. Farkl bir klasr semek iin Gz at zerine tklayn. +DiskSpaceGBLabel=En az [gb] GB bo disk alan gereklidir. +DiskSpaceMBLabel=En az [mb] MB bo disk alan gereklidir. +CannotInstallToNetworkDrive=Uygulama bir a srcs zerine kurulamaz. +CannotInstallToUNCPath=Uygulama bir UNC yolu zerine (\\yol gibi) kurulamaz. +InvalidPath=Src ad ile tam yolu yazmalsnz. rnek: %n%nC:\APP%n%n ya da u ekilde bir UNC yolu:%n%n\\sunucu\paylam +InvalidDrive=Src ya da UNC paylam yok ya da eriilemiyor. Ltfen baka bir tane sein. +DiskSpaceWarningTitle=Yeterli bo disk alan yok +DiskSpaceWarning=Kurulum iin %1 KB bo alan gerekli, ancak seilmi srcde yalnzca %2 KB bo alan var.%n%nGene de ilerlemek istiyor musunuz? +DirNameTooLong=Klasr ad ya da yol ok uzun. +InvalidDirName=Klasr ad geersiz. +BadDirName32=Klasr adlarnda u karakterler bulunamaz:%n%n%1 +DirExistsTitle=Klasr zaten var +DirExists=Klasr:%n%n%1%n%nzaten var. Kurulum iin bu klasr kullanmak ister misiniz? +DirDoesntExistTitle=Klasr bulunamad +DirDoesntExist=Klasr:%n%n%1%n%nbulunamad.Klasrn oluturmasn ister misiniz? + +; *** "Bileenleri sein" sayfas +WizardSelectComponents=Bileenleri sein +SelectComponentsDesc=Hangi bileenler kurulacak? +SelectComponentsLabel2=Kurmak istediiniz bileenleri sein; kurmak istemediiniz bileenlerin iaretini kaldrn. lerlemeye hazr olduunuzda Sonraki zerine tklayn. +FullInstallation=Tam kurulum +; Olabiliyorsa 'Compact' ifadesini kendi dilinizde 'Minimal' anlamnda evirmeyin +CompactInstallation=Normal kurulum +CustomInstallation=zel kurulum +NoUninstallWarningTitle=Bileenler zaten var +NoUninstallWarning=u bileenlerin bilgisayarnzda zaten kurulu olduu algland:%n%n%1%n%n Bu bileenlerin iaretlerinin kaldrlmas bileenleri kaldrmaz.%n%nGene de ilerlemek istiyor musunuz? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Seilmi bileenler iin diskte en az [gb] GB bo alan bulunmas gerekli. +ComponentsDiskSpaceMBLabel=Seilmi bileenler iin diskte en az [mb] MB bo alan bulunmas gerekli. + +; *** "Ek ilemleri sein" sayfas +WizardSelectTasks=Ek ilemleri sein +SelectTasksDesc=Baka hangi ilemler yaplsn? +SelectTasksLabel2=[name] kurulumu srasnda yaplmasn istediiniz ek ileri sein ve Sonraki zerine tklayn. + +; *** "Balat mens klasrn sein" sayfas +WizardSelectProgramGroup=Balat mens klasrn sein +SelectStartMenuFolderDesc=Uygulamann ksayollar nereye eklensin? +SelectStartMenuFolderLabel3=Kurulum yardmcs uygulama ksayollarn aadaki Balat mens klasrne ekleyecek. +SelectStartMenuFolderBrowseLabel=lerlemek iin Sonraki zerine tklayn. Farkl bir klasr semek iin Gz at zerine tklayn. +MustEnterGroupName=Bir klasr ad yazmalsnz. +GroupNameTooLong=Klasr ad ya da yol ok uzun. +InvalidGroupName=Klasr ad geersiz. +BadGroupName=Klasr adnda u karakterler bulunamaz:%n%n%1 +NoProgramGroupCheck2=Balat mens klasr &oluturulmasn + +; *** "Kurulmaya hazr" sayfas +WizardReady=Kurulmaya hazr +ReadyLabel1=[name] bilgisayarnza kurulmaya hazr. +ReadyLabel2a=Kuruluma balamak iin Sonraki zerine, ayarlar gzden geirip deitirmek iin nceki zerine tklayn. +ReadyLabel2b=Kuruluma balamak iin Sonraki zerine tklayn. +ReadyMemoUserInfo=Kullanc bilgileri: +ReadyMemoDir=Kurulum konumu: +ReadyMemoType=Kurulum tr: +ReadyMemoComponents=Seilmi bileenler: +ReadyMemoGroup=Balat mens klasr: +ReadyMemoTasks=Ek ilemler: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Ek dosyalar indiriliyor... +ButtonStopDownload=ndirmeyi &durdur +StopDownload=ndirmeyi durdurmak istediinize emin misiniz? +ErrorDownloadAborted=ndirme durduruldu +ErrorDownloadFailed=ndirilemedi: %1 %2 +ErrorDownloadSizeFailed=Boyut alnamad: %1 %2 +ErrorFileHash1=Dosya karmas dorulanamad: %1 +ErrorFileHash2=Dosya karmas geersiz: %1 olmas gerekirken %2 +ErrorProgress=Adm geersiz: %1 / %2 +ErrorFileSize=Dosya boyutu geersiz: %1 olmas gerekirken %2 + +; *** "Kuruluma hazrlanlyor" sayfas +WizardPreparing=Kuruluma hazrlanlyor +PreparingDesc=[name] bilgisayarnza kurulmaya hazrlanyor. +PreviousInstallNotCompleted=nceki uygulama kurulumu ya da kaldrlmas tamamlanmam. Bu kurulumun tamamlanmas iin bilgisayarnz yeniden balatmalsnz.%n%nBilgisayarnz yeniden balattktan sonra ilemi tamamlamak iin [name] kurulum yardmcsn yeniden altrn. +CannotContinue=Kurulum yaplamad. kmak iin ptal zerine tklayn. +ApplicationsFound=Kurulum yardmcs tarafndan gncellenmesi gereken dosyalar, u uygulamalar tarafndan kullanyor. Kurulum yardmcsnn bu uygulamalar otomatik olarak kapatmasna izin vermeniz nerilir. +ApplicationsFound2=Kurulum yardmcs tarafndan gncellenmesi gereken dosyalar, u uygulamalar tarafndan kullanyor. Kurulum yardmcsnn bu uygulamalar otomatik olarak kapatmasna izin vermeniz nerilir. Kurulum tamamlandktan sonra, uygulamalar yeniden balatlmaya allacak. +CloseApplications=&Uygulamalar kapatlsn +DontCloseApplications=Uygulamalar &kapatlmasn +ErrorCloseApplications=Kurulum yardmcs uygulamalar kapatamad. Kurulum yardmcs tarafndan gncellenmesi gereken dosyalar kullanan uygulamalar el ile kapatmanz nerilir. +PrepareToInstallNeedsRestart=Kurulum iin bilgisayarn yeniden balatlmas gerekiyor. Bilgisayar yeniden balattktan sonra [name] kurulumunu tamamlamak iin kurulum yardmcsn yeniden altrn.%n%nBilgisayar imdi yeniden balatmak ister misiniz? + +; *** "Kuruluyor" sayfas +WizardInstalling=Kuruluyor +InstallingLabel=Ltfen [name] bilgisayarnza kurulurken bekleyin. + +; *** "Kurulum Tamamland" sayfas +FinishedHeadingLabel=[name] kurulum yardmcs tamamlanyor +FinishedLabelNoIcons=Bilgisayarnza [name] kurulumu tamamland. +FinishedLabel=Bilgisayarnza [name] kurulumu tamamland. Simgeleri yklemeyi setiyseniz, simgelere tklayarak uygulamay balatabilirsiniz. +ClickFinish=Kurulum yardmcsndan kmak iin Bitti zerine tklayn. +FinishedRestartLabel=[name] kurulumunun tamamlanmas iin, bilgisayarnz yeniden balatlmal. imdi yeniden balatmak ister misiniz? +FinishedRestartMessage=[name] kurulumunun tamamlanmas iin, bilgisayarnz yeniden balatlmal.%n%nimdi yeniden balatmak ister misiniz? +ShowReadmeCheck=Evet README dosyas grntlensin +YesRadio=&Evet, bilgisayar imdi yeniden balatlsn +NoRadio=&Hayr, bilgisayar daha sonra yeniden balatacam +; used for example as 'Run MyProg.exe' +RunEntryExec=%1 altrlsn +; used for example as 'View Readme.txt' +RunEntryShellExec=%1 grntlensin + +; *** "Kurulum iin sradaki disk gerekli" iletileri +ChangeDiskTitle=Kurulum yardmcs sradaki diske gerek duyuyor +SelectDiskLabel2=Ltfen %1 numaral diski takp Tamam zerine tklayn.%n%nDiskteki dosyalar aadakinden farkl bir klasrde bulunuyorsa, doru yolu yazn ya da Gz at zerine tklayarak doru klasr sein. +PathLabel=&Yol: +FileNotInDir2="%1" dosyas "%2" iinde bulunamad. Ltfen doru diski takn ya da baka bir klasr sein. +SelectDirectoryLabel=Ltfen sonraki diskin konumunu belirtin. + +; *** Kurulum aamas iletileri +SetupAborted=Kurulum tamamlanamad.%n%nLtfen sorunu dzelterek kurulum yardmcsn yeniden altrn. +AbortRetryIgnoreSelectAction=Yaplacak ilemi sein +AbortRetryIgnoreRetry=&Yeniden denensin +AbortRetryIgnoreIgnore=&Sorun yok saylp ilerlensin +AbortRetryIgnoreCancel=Kurulum iptal edilsin + +; *** Kurulum durumu iletileri +StatusClosingApplications=Uygulamalar kapatlyor... +StatusCreateDirs=Klasrler oluturuluyor... +StatusExtractFiles=Dosyalar ayklanyor... +StatusCreateIcons=Ksayollar oluturuluyor... +StatusCreateIniEntries=INI kaytlar oluturuluyor... +StatusCreateRegistryEntries=Kayt Defteri kaytlar oluturuluyor... +StatusRegisterFiles=Dosyalar kaydediliyor... +StatusSavingUninstall=Kaldrma bilgileri kaydediliyor... +StatusRunProgram=Kurulum tamamlanyor... +StatusRestartingApplications=Uygulamalar yeniden balatlyor... +StatusRollback=Deiiklikler geri alnyor... + +; *** eitli hata iletileri +ErrorInternal2= hata: %1 +ErrorFunctionFailedNoCode=%1 tamamlanamad. +ErrorFunctionFailed=%1 tamamlanamad; kod %2 +ErrorFunctionFailedWithMessage=%1 tamamlanamad; kod %2.%n%3 +ErrorExecutingProgram=u dosya yrtlemedi:%n%1 + +; *** Kayt defteri hatalar +ErrorRegOpenKey=Kayt defteri anahtar alrken bir sorun kt:%n%1%2 +ErrorRegCreateKey=Kayt defteri anahtar eklenirken bir sorun kt:%n%1%2 +ErrorRegWriteKey=Kayt defteri anahtar yazlrken bir sorun kt:%n%1%2 + +; *** INI hatalar +ErrorIniEntry="%1" dosyasna INI kayd eklenirken bir sorun kt. + +; *** Dosya kopyalama hatalar +FileAbortRetryIgnoreSkipNotRecommended=&Bu dosya atlansn (nerilmez) +FileAbortRetryIgnoreIgnoreNotRecommended=&Sorun yok saylp ilerlensin (nerilmez) +SourceIsCorrupted=Kaynak dosya bozulmu +SourceDoesntExist="%1" kaynak dosyas bulunamad +ExistingFileReadOnly2=Var olan dosya salt okunabilir olarak iaretlenmi olduundan zerine yazlamad. +ExistingFileReadOnlyRetry=&Salt okunur iareti kaldrlp yeniden denensin +ExistingFileReadOnlyKeepExisting=&Var olan dosya korunsun +ErrorReadingExistingDest=Var olan dosya okunmaya allrken bir sorun kt. +FileExistsSelectAction=Yaplacak ilemi sein +FileExists2=Dosya zaten var. +FileExistsOverwriteExisting=&Var olan dosyann zerine yazlsn +FileExistsKeepExisting=Var &olan dosya korunsun +FileExistsOverwriteOrKeepAll=&Sonraki akmalarda da bu ilem yaplsn +ExistingFileNewerSelectAction=Yaplacak ilemi sein +ExistingFileNewer2=Var olan dosya, kurulum yardmcs tarafndan yazlmaya allandan daha yeni. +ExistingFileNewerOverwriteExisting=&Var olan dosyann zerine yazlsn +ExistingFileNewerKeepExisting=Var &olan dosya korunsun (nerilir) +ExistingFileNewerOverwriteOrKeepAll=&Sonraki akmalarda bu ilem yaplsn +ErrorChangingAttr=Var olan dosyann znitelikleri deitirilirken bir sorun kt: +ErrorCreatingTemp=Kurulum klasrnde bir dosya oluturulurken sorun kt: +ErrorReadingSource=Kaynak dosya okunurken sorun kt: +ErrorCopying=Dosya kopyalanrken sorun kt: +ErrorReplacingExistingFile=Var olan dosya deitirilirken sorun kt: +ErrorRestartReplace=Yeniden balatmada zerine yazlamad: +ErrorRenamingTemp=Kurulum klasrndeki bir dosyann ad deitirilirken sorun kt: +ErrorRegisterServer=DLL/OCX kayt edilemedi: %1 +ErrorRegSvr32Failed=RegSvr32 ilemi u kod ile tamamlanamad: %1 +ErrorRegisterTypeLib=Tr kitapl kayt defterine eklenemedi: %1 + +; *** Kaldrma srasnda grntlenecek ad iaretleri +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32 bit +UninstallDisplayNameMark64Bit=64 bit +UninstallDisplayNameMarkAllUsers=Tm kullanclar +UninstallDisplayNameMarkCurrentUser=Geerli kullanc + +; *** Kurulum sonras hatalar +ErrorOpeningReadme=README dosyas alrken sorun kt. +ErrorRestartingComputer=Kurulum yardmcs bilgisayarnz yeniden balatamyor. Ltfen bilgisayarnz yeniden balatn. + +; *** Kaldrma yardmcs iletileri +UninstallNotFound="%1" dosyas bulunamad. Uygulama kaldrlamyor. +UninstallOpenError="%1" dosyas alamad. Uygulama kaldrlamyor. +UninstallUnsupportedVer="%1" uygulama kaldrma gnlk dosyasnn biimi, bu kaldrma yardmcs srm tarafndan anlalamad. Uygulama kaldrlamyor. +UninstallUnknownEntry=Kaldrma gnlnde bilinmeyen bir kayt (%1) bulundu. +ConfirmUninstall=%1 uygulamasn tm bileenleri ile birlikte tamamen kaldrmak istediinize emin misiniz? +UninstallOnlyOnWin64=Bu kurulum yalnzca 64 bit Windows zerinden kaldrlabilir. +OnlyAdminCanUninstall=Bu kurulum yalnzca ynetici yetkileri olan bir kullanc tarafndan kaldrlabilir. +UninstallStatusLabel=Ltfen %1 uygulamas bilgisayarnzdan kaldrlrken bekleyin. +UninstalledAll=%1 uygulamas bilgisayarnzdan kaldrld. +UninstalledMost=%1 uygulamas kaldrld.%n%nBaz bileenler kaldrlamad. Bunlar el ile silebilirsiniz. +UninstalledAndNeedsRestart=%1 kaldrma ileminin tamamlanmas iin bilgisayarnzn yeniden balatlmas gerekli.%n%nimdi yeniden balatmak ister misiniz? +UninstallDataCorrupted="%1" dosyas bozulmu. Kaldrlamyor. + +; *** Kaldrma aamas iletileri +ConfirmDeleteSharedFileTitle=Paylalan dosya silinsin mi? +ConfirmDeleteSharedFile2=Sisteme gre, paylalan u dosya baka bir uygulama tarafndan kullanlmyor ve kaldrlabilir. Bu paylalm dosyay silmek ister misiniz?%n%nBu dosya, baka herhangi bir uygulama tarafndan kullanlyor ise, silindiinde dier uygulama dzgn almayabilir. Emin deilseniz Hayr zerine tklayn. Dosyay sisteminizde brakmann bir zarar olmaz. +SharedFileNameLabel=Dosya ad: +SharedFileLocationLabel=Konum: +WizardUninstalling=Kaldrma durumu +StatusUninstalling=%1 kaldrlyor... + +; *** Kapatmay engelleme nedenleri +ShutdownBlockReasonInstallingApp=%1 kuruluyor. +ShutdownBlockReasonUninstallingApp=%1 kaldrlyor. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 %2 srm +AdditionalIcons=Ek simgeler: +CreateDesktopIcon=Masast simg&esi oluturulsun +CreateQuickLaunchIcon=Hzl balat simgesi &oluturulsun +ProgramOnTheWeb=%1 sitesi +UninstallProgram=%1 uygulamasn kaldr +LaunchProgram=%1 uygulamasn altr +AssocFileExtension=%1 &uygulamas ile %2 dosya uzants ilikilendirilsin +AssocingFileExtension=%1 uygulamas ile %2 dosya uzants ilikilendiriliyor... +AutoStartProgramGroupDescription=Balang: +AutoStartProgram=%1 otomatik olarak balatlsn +AddonHostProgramNotFound=%1 setiiniz klasrde bulunamad.%n%nYine de ilerlemek istiyor musunuz? diff --git a/Files/Languages/Ukrainian.isl b/Files/Languages/Ukrainian.isl new file mode 100644 index 00000000..df8a436c --- /dev/null +++ b/Files/Languages/Ukrainian.isl @@ -0,0 +1,385 @@ +; *** Inno Setup version 6.1.0+ Ukrainian messages *** +; Author: Dmytro Onyshchuk +; E-Mail: mrlols3@gmail.com +; Please report all spelling/grammar errors, and observations. +; Version 2020.08.04 + +; *** Inno Setup 6.1.0 *** +; : +; E-Mail: mrlols3@gmail.com +; , . +; 2020.08.04 + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=<0423><043A><0440><0430><0457><043D><0441><044C><043A><0430> +LanguageID=$0422 +LanguageCodePage=1251 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** +SetupAppTitle= +SetupWindowTitle= %1 +UninstallAppTitle= +UninstallAppFullTitle= %1 + +; *** Misc. common +InformationTitle= +ConfirmTitle=ϳ +ErrorTitle= + +; *** SetupLdr messages +SetupLdrStartupMessage= %1 ', ? +LdrCannotCreateTemp= . +LdrCannotExecTemp= . +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%n %2: %3 +SetupFileMissing= %1 . , . +SetupFileCorrupt= . , . +SetupFileCorruptOrWrongVer= . , . +InvalidParameter= :%n%n%1 +SetupAlreadyRunning= . +WindowsVersionNotSupported= Windows, '. +WindowsServicePackRequired= %1 Service Pack %2 . +NotOnThisPlatform= %1. +OnlyOnThisPlatform= %1. +OnlyOnTheseArchitectures= ' Windows :%n%n%1 +WinVersionTooLowError= %1 %2 . +WinVersionTooHighError= %1 %2 . +AdminPrivilegesRequired= . +PowerUserPrivilegesRequired= . +SetupAppRunningError=, %1 .%n%n , ﳿ OK , . +UninstallAppRunningError=, %1 .%n%n , ﳿ OK , . + +; *** Startup questions +PrivilegesRequiredOverrideTitle= +PrivilegesRequiredOverrideInstruction= +PrivilegesRequiredOverrideText1=%1 ( ), . +PrivilegesRequiredOverrideText2=%1 , ( ). +PrivilegesRequiredOverrideAllUsers= & +PrivilegesRequiredOverrideAllUsersRecommended= & () +PrivilegesRequiredOverrideCurrentUser= +PrivilegesRequiredOverrideCurrentUserRecommended= & () + +; *** г +ErrorCreatingDir= "%1" +ErrorTooManyFilesInDir= "%1", + +; *** +ExitSetupTitle= +ExitSetupMessage= . , .%n%n .%n%n ? +AboutSetupMenuItem=& ... +AboutSetupTitle= +AboutSetupMessage=%1 %2%n%3%n%n%1 :%n%4 +AboutSetupNote= +TranslatorNote=Ukrainian translation by Dmytro Onyshchuk + +; *** +ButtonBack=< & +ButtonNext=& > +ButtonInstall=& +ButtonOK=OK +ButtonCancel= +ButtonYes=& +ButtonYesToAll= & +ButtonNo=&ͳ +ButtonNoToAll=& +ButtonFinish=& +ButtonBrowse=&... +ButtonWizardBrowse=&... +ButtonNewFolder=& + +; *** ij " " +SelectLanguageTitle= +SelectLanguageLabel= , . + +; *** +ClickNext= 볻, , . +BeveledLabel= +BrowseDialogTitle= +BrowseDialogLabel= ʻ. +NewFolderName= + +; *** "" +WelcomeLabel1= [name]. +WelcomeLabel2= [name/ver] .%n%n . + +; *** "" +WizardPassword= +PasswordLabel1= . +PasswordLabel3= , 볻, . . +PasswordEditLabel=&: +IncorrectPassword= . , . + +; *** "˳ " +WizardLicense=˳ +LicenseLabel= , . +LicenseLabel3= , . , . +LicenseAccepted= & +LicenseNotAccepted= & + +; *** "" +WizardInfoBefore= +InfoBeforeLabel= , , . +InfoBeforeClickLabel= , 볻. +WizardInfoAfter= +InfoAfterLabel= , , . +InfoAfterClickLabel= , 볻. + +; *** " " +WizardUserInfo= +UserInfoDesc= , . +UserInfoName=& : +UserInfoOrg=&: +UserInfoSerial=& : +UserInfoNameRequired= '. + +; *** " " +WizardSelectDir= +SelectDirDesc= [name]? +SelectDirLabel3= [name] . +SelectDirBrowseLabel= 볻, . , . +DiskSpaceGBLabel= [gb] . +DiskSpaceMBLabel= [mb] M . +CannotInstallToNetworkDrive= . +CannotInstallToUNCPath= . +InvalidPath= , :%n%nC:\APP%n%n UNC:%n%n\\\ +InvalidDrive= , . , . +DiskSpaceWarningTitle= +DiskSpaceWarning= %1 , %2 .%n%n ? +DirNameTooLong=' . +InvalidDirName= . +BadDirName32=' :%n%n%1 +DirExistsTitle= +DirExists=:%n%n%1%n%n . ? +DirDoesntExistTitle= +DirDoesntExist=:%n%n%1%n%n . ? + +; *** " " +WizardSelectComponents= +SelectComponentsDesc= ? +SelectComponentsLabel2= ; . 볻, . +FullInstallation= +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation= +CustomInstallation= +NoUninstallWarningTitle= +NoUninstallWarning=, :%n%n%1%n%n³ .%n%n ? +ComponentSize1=%1 K +ComponentSize2=%1 M +ComponentsDiskSpaceGBLabel= [gb] . +ComponentsDiskSpaceMBLabel= [mb] M . + +; *** " " +WizardSelectTasks= +SelectTasksDesc= ? +SelectTasksLabel2= [name] , 볻. + +; *** " " +WizardSelectProgramGroup= +SelectStartMenuFolderDesc= ? +SelectStartMenuFolderLabel3= . +SelectStartMenuFolderBrowseLabel= 볻, . , . +MustEnterGroupName= ' . +GroupNameTooLong= . +InvalidGroupName= . +BadGroupName=' :%n%n%1 +NoProgramGroupCheck2=& + +; *** " " +WizardReady= +ReadyLabel1= [name] . +ReadyLabel2a= , , . +ReadyLabel2b= . +ReadyMemoUserInfo= : +ReadyMemoDir= : +ReadyMemoType= : +ReadyMemoComponents= : +ReadyMemoGroup= : +ReadyMemoTasks= : + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel= ... +ButtonStopDownload=& +StopDownload= ? +ErrorDownloadAborted= +ErrorDownloadFailed= : %1 %2 +ErrorDownloadSizeFailed= : %1 %2 +ErrorFileHash1= : %1 +ErrorFileHash2= : %1, %2 +ErrorProgress= : %1 %2 +ErrorFileSize= : %1, %2 + +; *** "ϳ " +WizardPreparing=ϳ +PreparingDesc= [name] . +PreviousInstallNotCompleted= . .%n%nϳ , [name]. +CannotContinue= . , . +ApplicationsFound= , . . +ApplicationsFound2= , . . ϳ , . +CloseApplications=& +DontCloseApplications=& +ErrorCloseApplications= . , , , . +PrepareToInstallNeedsRestart= . ϳ , [name]%n%n ? + +; *** "" +WizardInstalling= +InstallingLabel= , , [name] '. + +; *** " " +FinishedHeadingLabel= [name] +FinishedLabelNoIcons= [name] . +FinishedLabel= [name] . . +ClickFinish= . +FinishedRestartLabel= [name] . ? +FinishedRestartMessage= [name] .%n%n ? +ShowReadmeCheck=, README +YesRadio=&, +NoRadio=&ͳ, +; used for example as 'Run MyProg.exe' +RunEntryExec=³ %1 +; used for example as 'View Readme.txt' +RunEntryShellExec= %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle= +SelectDiskLabel2= , %1 OK.%n%n , , . +PathLabel=&: +FileNotInDir2= "%1" "%2". , . +SelectDirectoryLabel= , . + +; *** Installation phase messages +SetupAborted= .%n%n , . +AbortRetryIgnoreSelectAction= +AbortRetryIgnoreRetry=& +AbortRetryIgnoreIgnore=& +AbortRetryIgnoreCancel=³ + +; *** +StatusClosingApplications= ... +StatusCreateDirs= ... +StatusExtractFiles= ... +StatusCreateIcons= ... +StatusCreateIniEntries= INI ... +StatusCreateRegistryEntries= ... +StatusRegisterFiles= ... +StatusSavingUninstall= ... +StatusRunProgram= ... +StatusRestartingApplications= ... +StatusRollback= ... + +; *** г +ErrorInternal2= : %1 +ErrorFunctionFailedNoCode=%1 +ErrorFunctionFailed=%1 ; %2 +ErrorFunctionFailedWithMessage=%1 ; %2.%n%3 +ErrorExecutingProgram= :%n%1 + +; *** +ErrorRegOpenKey= :%n%1\%2 +ErrorRegCreateKey= :%n%1\%2 +ErrorRegWriteKey= :%n%1\%2 + +; *** INI +ErrorIniEntry= INI- "%1". + +; *** +FileAbortRetryIgnoreSkipNotRecommended=& ( ) +FileAbortRetryIgnoreIgnoreNotRecommended=& ( ) +SourceIsCorrupted= +SourceDoesntExist= "%1" +ExistingFileReadOnly2= , . +ExistingFileReadOnlyRetry=& " " +ExistingFileReadOnlyKeepExisting=& +ErrorReadingExistingDest= : +FileExistsSelectAction= +FileExists2= . +FileExistsOverwriteExisting=& +FileExistsKeepExisting=& +FileExistsOverwriteOrKeepAll=& +ExistingFileNewerSelectAction= +ExistingFileNewer2= , . +ExistingFileNewerOverwriteExisting=& +ExistingFileNewerKeepExisting=& () +ExistingFileNewerOverwriteOrKeepAll=& +ErrorChangingAttr= : +ErrorCreatingTemp= : +ErrorReadingSource= : +ErrorCopying= : +ErrorReplacingExistingFile= : +ErrorRestartReplace= RestartReplace: +ErrorRenamingTemp= : +ErrorRegisterServer= DLL/OCX: %1 +ErrorRegSvr32Failed= RegSvr32, %1 +ErrorRegisterTypeLib= : %1 + +; *** Uninstall display name markings +UninstallDisplayNameMark=%1 (%2) +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32- +UninstallDisplayNameMark64Bit=64- +UninstallDisplayNameMarkAllUsers= +UninstallDisplayNameMarkCurrentUser= + +; *** Post-installation errors +ErrorOpeningReadme= README. +ErrorRestartingComputer= '. , . + +; *** +UninstallNotFound= "%1" , . +UninstallOpenError= "%1". +UninstallUnsupportedVer= "%1" . +UninstallUnknownEntry= (%1) +ConfirmUninstall= , %1 ? +UninstallOnlyOnWin64= 64- Windows. +OnlyAdminCanUninstall= . +UninstallStatusLabel= , , %1 '. +UninstalledAll=%1 '. +UninstalledMost= %1 .%n%n . . +UninstalledAndNeedsRestart= %1 .%n%n ? +UninstallDataCorrupted= "%1" . + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle= ? +ConfirmDeleteSharedFile2= , . ?%n%n , . , ͳ. . +SharedFileNameLabel=' : +SharedFileLocationLabel=: +WizardUninstalling= +StatusUninstalling= %1... + + +; *** +ShutdownBlockReasonInstallingApp= %1. +ShutdownBlockReasonUninstallingApp= %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1, %2 +AdditionalIcons= : +CreateDesktopIcon= & +CreateQuickLaunchIcon= & +ProgramOnTheWeb= %1 +UninstallProgram= %1 +LaunchProgram=³ %1 +AssocFileExtension=& %1 %2 +AssocingFileExtension= %1 %2... +AutoStartProgramGroupDescription=: +AutoStartProgram= %1 +AddonHostProgramNotFound=%1 %n%n ? diff --git a/Files/Languages/Unofficial/Afrikaans.isl b/Files/Languages/Unofficial/Afrikaans.isl new file mode 100644 index 00000000..6a0e3ab9 --- /dev/null +++ b/Files/Languages/Unofficial/Afrikaans.isl @@ -0,0 +1,384 @@ +; *** Inno Setup version 6.1.0+ Afrikaans messages *** +; +; Created by: Leon Odendaal +; E-mail: leonrsa@gmail.com +; +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +LanguageName=Afrikaans +LanguageID=$0436 +LanguageCodePage=1252 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Installasie +SetupWindowTitle=Installasie - %1 +UninstallAppTitle=Verwyder +UninstallAppFullTitle=Verwyder %1 + +; *** Misc. common +InformationTitle=Inligting +ConfirmTitle=Bevestig +ErrorTitle=Fout + +; *** SetupLdr messages +SetupLdrStartupMessage=Hierdie program sal %1 installeer. Wil u voortgaan? +LdrCannotCreateTemp=Onmoontlik om 'n tydelike l�er te skep. Installasie gestaak. +LdrCannotExecTemp=Onmoontlik om 'n uitvoerbare l�er in die tydelike vouer te skep. Installasie gestaak. + +; *** Startup error messages +LastErrorMessage=%1.%n%nFout %2: %3 +SetupFileMissing=Die l�er %1 word vermis in die installasiegids. Korrigeer die fout of verkry 'n nuwe weergawe van die program. +SetupFileCorrupt=Die installasie l�ers is korrup. Verkry 'n nuwe weergawe van die program. +SetupFileCorruptOrWrongVer=Die installasiel�ers is korrup, of onversoenbaar met hierdie weergawe van Installeerder. Korrigeer die problem of verkry 'n nuwe weergawe van die program. +InvalidParameter='n Ongeldige parameter is deurgegee op die opdraglyn:%n%n%1 +SetupAlreadyRunning=Installasie reeds aktief. +WindowsVersionNotSupported=Hierdie program ondersteun nie die Windows-weergawe op u rekenaar nie. +WindowsServicePackRequired=Hierdie program benodig %1 Service Pack %2 of nuwer. +NotOnThisPlatform=Hierdie program sal nie uitvoer op %1 nie. +OnlyOnThisPlatform=Hierdie program moet uitgevoer word op %1. +OnlyOnTheseArchitectures=Hierdie program kan net ge�nstalleer word op weergawes van Windows ontwerp vir die volgende verwerkerargitekture:%n%n%1 +WinVersionTooLowError=Hierdie program vereis %1 weergawe %2 of nuwer. +WinVersionTooHighError=Hierdie program kan nie ge�nstalleer word op %1 weergawe %2 of nuwer nie. +AdminPrivilegesRequired=U moet ingeteken wees as 'n administrateur om hierdie program te installeer. +PowerUserPrivilegesRequired=U moet aangeteken wees as 'n administrateur of as 'n lid van die Power Users groep om hierdie program te installeer. +SetupAppRunningError=Die installeerder het bespeur dat %1 op die oomblik loop.%n%nMaak asb. nou alle kopie� daarvan toe, en kliek dan Aanvaar om voort te gaan, of Kanselleer om die installasie te verlaat. +UninstallAppRunningError=Verwyder het bespeur dat %1 op die oomblik oop is.%n%nMaak asb. alle kopie� daarvan toe, en kliek dan op Aanvaar om voort te gaan, of Kanselleer om die verwyderaar te verlaat. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Kies Installeerder Modus +PrivilegesRequiredOverrideInstruction=Kies Installeerder Modus +PrivilegesRequiredOverrideText1=%1 kan vir alle gebruikers installeer word (benodig administratiewe voorregte), of slegs vir jou. +PrivilegesRequiredOverrideText2=%1 kan slegs vir jou installeer word, of vir alle gebruikers (benodig administratiewe voorregte). +PrivilegesRequiredOverrideAllUsers=Installeer vir &alle gebruikers +PrivilegesRequiredOverrideAllUsersRecommended=Installeer vir &alle gebruikers (aanbeveel) +PrivilegesRequiredOverrideCurrentUser=Installeer slegs vir &my +PrivilegesRequiredOverrideCurrentUserRecommended=Installeer slegs vir &my (aanbeveel) + +; *** Misc. errors +ErrorCreatingDir=Die installeerder kon nie die gids %1 skep nie +ErrorTooManyFilesInDir=Onmoontlik om 'n l�er in die gids "%1" te skep omdat dit te veel l�ers bevat + +; *** Setup common messages +ExitSetupTitle=Verlaat Installeerder +ExitSetupMessage=Installasie is nog nie voltooi nie. Indien u dit nou verlaat, sal die program nie ge�nstalleer wees nie.%n%nU kan die Installeerder later weer uitvoer om die installasie te voltooi.%n%nVerlaat die Installeerder? +AboutSetupMenuItem=&Meer oor die Installeerder... +AboutSetupTitle=Meer oor die Installeerder +AboutSetupMessage=%1 weergawe %2%n%3%n%n%1 tuisblad: %n%4 +AboutSetupNote= +TranslatorNote=Vertaling deur Leon Odendaal + +; *** Buttons +ButtonBack=< &Terug +ButtonNext=&Volgende > +ButtonInstall=&Installeer +ButtonOK=Aanvaar +ButtonCancel=Kanselleer +ButtonYes=&Ja +ButtonYesToAll=Ja vir &Almal +ButtonNo=&Nee +ButtonNoToAll=N&ee vir Almal +ButtonFinish=&Voltooi +ButtonBrowse=&Rondblaai... +ButtonWizardBrowse=R&ondblaai... +ButtonNewFolder=&Skep Nuwe Vouer + +; *** "Select Language" dialog messages +SelectLanguageTitle=Kies Installeerdertaal +SelectLanguageLabel=Kies die taal om te gebruik gedurende die installasie: + +; *** Common wizard text +ClickNext=Kliek Volgende om voort te gaan, of Kanselleer om die installeerder te verlaat. +BeveledLabel= +BrowseDialogTitle=Blaai rond vir vouer +BrowseDialogLabel=Kies 'n vouer in die lys hieronder en kliek Aanvaar. +NewFolderName=Nuwe Vouer + +; *** "Welcome" wizard page +WelcomeLabel1=Welkom by die Installasie-Assistent vir [name] +WelcomeLabel2=Hierdie program sal [name/ver] installeer op u rekenaar.%n%nDit word aanbeveel dat u alle ander programme toemaak voor dat u voortgaan. + +; *** "Password" wizard page +WizardPassword=Wagwoord +PasswordLabel1=Hierdie installasie word deur 'n wagwoord beskerm. +PasswordLabel3=Verskaf asb die wagwoord, en kliek Volgende om voor te gaan. Wagwoorde is kassensitief. +PasswordEditLabel=&Wagwoord: +IncorrectPassword=Die wagwoord wat u ingesleutel het, is nie korrek nie. Probeer weer. + +; *** "License Agreement" wizard page +WizardLicense=Lisensie-ooreenkoms +LicenseLabel=Lees asb die volgende belangrike inligting voordat u voortgaan. +LicenseLabel3=Lees asb die volgende lisensieooreenkoms. U moet die terme van hierdie ooreenkoms aanvaar voordat u voortgaan met die installasie. +LicenseAccepted=Ek &aanvaar die ooreenkoms. +LicenseNotAccepted=Ek aan&vaar nie die ooreenkoms nie. + +; *** "Information" wizard pages +WizardInfoBefore=Inligting +InfoBeforeLabel=Lees asb die volgende belangrike inligting voordat u voortgaan. +InfoBeforeClickLabel=Wanneer u gereed is om voort te gaan met die Installasie, kliek Volgende. +WizardInfoAfter=Inligting +InfoAfterLabel=Lees asb die volgende belangrike inligting voordat u voortgaan. +InfoAfterClickLabel=Wanneer u gereed is om voort te gaan met die Installasie, kliek Volgende. + +; *** "User Information" wizard page +WizardUserInfo=Gebruikerinligting +UserInfoDesc=Sleutel asb u inligting in. +UserInfoName=&Gebruikernaam: +UserInfoOrg=&Organisasie: +UserInfoSerial=&Registrasienommer: +UserInfoNameRequired=U moet 'n naam insleutel. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Kies bestemming +SelectDirDesc=Waar moet [name] ge�nstalleer word? +SelectDirLabel3=Die installeerder sal [name] installeer in die volgende vouer. +SelectDirBrowseLabel=Om voort te gaan, kliek Volgende. Indien u 'n ander vouer wil kies, kliek Rondblaai. +DiskSpaceGBLabel=Ten minste [gb] GG oop hardeskyfspasie word benodig. +DiskSpaceMBLabel=Ten minste [mb] MG oop hardeskyfspasie word benodig. +CannotInstallToNetworkDrive=Installeerder kan nie op 'n netwerk-skyf installeer word nie. +CannotInstallToUNCPath=Installeerder kan nie na 'n UNC-roete installeer nie. +InvalidPath=U moet 'n volledige roete insleutel met 'n aandrywerletter; bv.:%n%nC:\APP%n%nof 'n UNC-pad in die vorm:%n%n\\server\share +InvalidDrive=Die aandrywer of UNC-netwerkgids wat u gekies het, bestaan nie of is nie toeganklik nie. Kies asb 'n ander een. +DiskSpaceWarningTitle=Onvoldoende skyfspasie +DiskSpaceWarning=Die installasie vereis ten minste %1 KG oop spasie, maar die gekose skyf het slegs %2 KG spasie beskikbaar.%n%nWil u voortgaan ten spyte daarvan? +DirNameTooLong=Die vouernaam of roete is te lank. +InvalidDirName=Die vouernaam is ongeldig. +BadDirName32=Vouername mag nie een van die volgende karakters bevat nie:%n%n%1 +DirExistsTitle=Vouer bestaan +DirExists=Die vouer:%n%n%1%n%nbestaan alreeds. Wil u ten spyte daarvan steeds daarheen installeer? +DirDoesntExistTitle=Vouer bestaan nie +DirDoesntExist=Die vouer:%n%n%1%n%n bestaan nie. Wil u die vouer skep? + +; *** "Select Components" wizard page +WizardSelectComponents=Kies komponente +SelectComponentsDesc=Watter komponente moet ge�nstalleer word? +SelectComponentsLabel2=Kies die komponente wat u wil installeer; deselekteer die komponente wat u nie wil installeer nie. Kliek Volgende wanneer u gereed is om voort te gaan. +FullInstallation=Volledige installasie +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Kompakte installasie +CustomInstallation=Pasgemaakte installasie +NoUninstallWarningTitle=Komponente Bestaan +NoUninstallWarning=Die installeerder het bespeur dat die volgende komponente reeds op u rekenaar ge�nstalleer is:%n%n%1%n%nDeur die komponente te deselekteer sal hulle nie verwyder nie.%n%nWil u ten spyte daarvan voortgaan? +ComponentSize1=%1 KG +ComponentSize2=%1 MG +ComponentsDiskSpaceGBLabel=Huidige keuse vereis ten minste [gb] GG skyfspasie. +ComponentsDiskSpaceMBLabel=Huidige keuse vereis ten minste [mb] MG skyfspasie. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Kies bykomende take +SelectTasksDesc=Watter bykomende take moet uitgevoer word? +SelectTasksLabel2=Kies die bykomende take wat u wil h� die Installeerder moet uitvoer tydens die installasie van [name], en kliek dan Volgende. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Kies Begin-kieslysvouer +SelectStartMenuFolderDesc=Waar moet die Installeerder die program se kortpaaie plaas? +SelectStartMenuFolderLabel3=Die installeerder sal die program se kortpaaie in die volgende Begin-kieslysvouer plaas. +SelectStartMenuFolderBrowseLabel=Om voort te gaan, kliek Volgende. Indien u 'n ander vouer wil kies, kliek Rondblaai. +MustEnterGroupName=U moet 'n vouernaam insleutel. +GroupNameTooLong=Die vouernaam of roete is te lank. +InvalidGroupName=Die vouernaam is ongeldig. +BadGroupName=Die vouernaam mag nie enige van die volgende karakters bevat nie:%n%n%1 +NoProgramGroupCheck2=&Moenie 'n Begin-kieslysvouer skep nie + +; *** "Ready to Install" wizard page +WizardReady=Gereed om te Installeer +ReadyLabel1=Die installeerder is nou gereed om [name] te installeer op u rekenaar. +ReadyLabel2a=Kliek Installeer om voort te gaan met die installasie, of kliek Terug indien u enige keuses wil hersien of verander. +ReadyLabel2b=Kliek Installeer om voort te gaan met die installasie. +ReadyMemoUserInfo=Gebruikerinligting: +ReadyMemoDir=Bestemmingligging: +ReadyMemoType=Installasietipe: +ReadyMemoComponents=Geselekteerde komponente: +ReadyMemoGroup=Begin-kieslysvouer: +ReadyMemoTasks=Bykomende take: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Bykomende leers word afgelaai files... +ButtonStopDownload=&Staak aflaai +StopDownload=Is jy seker jy will die aflaai staak? +ErrorDownloadAborted=Aflaai laat vaar +ErrorDownloadFailed=Aflaai fout: %1 %2 +ErrorDownloadSizeFailed=Groote van aflaai fout: %1 %2 +ErrorFileHash1=Leersom fout: %1 +ErrorFileHash2=Ongeldige leersom: %1 verwag, %2 gevind +ErrorProgress=Ongeldige vordering: %1 of %2 +ErrorFileSize=Ongeldige leer grootte: %1 verwag, %2 gevind + +; *** "Preparing to Install" wizard page +WizardPreparing=Berei voor om te Installeer +PreparingDesc=Die installeerder is besig om voor te berei om [name] op u rekenaar te installeer. +PreviousInstallNotCompleted=Die installasie/verwydering van 'n vorige program is nie voltooi nie. U moet u rekenaar herbegin om daardie installasie te voltooi.%n%nNadat u die rekenaar herbegin het, kan u die installeerder weer uitvoer om die installasie van [name] te voltooi. +CannotContinue=Die installeerder kan nie voortgaan nie. Kliek asb. Kanselleer om dit te verlaat. +ApplicationsFound=Die volgende programme gebruik tans l�ers wat deur die installeerder opgedateer moet word. Dit word aanbeveel dat u die installeerder toelaat om die programme outomaties toe te maak. +ApplicationsFound2=Die volgende programme gebruik tans l�ers wat deur die installeerder opgedateer moet word. Dit word aanbeveel dat u die installeerder toelaat om hierdie programme outomaties toe te maak. Na afloop van die installasie, sal die installeerder probeer om die programme te herbegin. +CloseApplications=&Maak die programme outomaties toe +DontCloseApplications=M&oet nie die programme toemaak nie +ErrorCloseApplications=Die Installeerder kon nie al die programme outomaties sluit nie. Dit word aanbeveel dat u al die programme toemaak wat l�ers bevat wat opdateer moet word voor u aangaan. +PrepareToInstallNeedsRestart=Die Installeerdermoet jou rekenaar herbegin. Begin die Installeerder daarna weer om die installasie van [name] te voltooi .%n%nWil jy aangaan? + +; *** "Installing" wizard page +WizardInstalling=Besig om te Installeer +InstallingLabel=Wag asb. terwyl [name] op u rekenaar installeer word. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Finalisering van die Installasie-Assistent van [name] +FinishedLabelNoIcons=Die installasie van [name] is voltooi. +FinishedLabel=Die installasie van [name] is voltooi. Die program kan uitgevoer word deur die geinstalleerde ikone te gebruik. +ClickFinish=Kliek Voltooi om die installeerder te verlaat. +FinishedRestartLabel=Om die installasie van [name] te voltooi, moet u rekenaar herbegin word. Wil u die rekenaar nou herbegin? +FinishedRestartMessage=Om die [name] installasie te voltooi, moet u rekenaar herbegin word.%n%nWil u die rekenaar nou herbegin? +ShowReadmeCheck=Ja, ek wil die README-l�er sien +YesRadio=&Ja, herbegin die rekenaar nou +NoRadio=&Nee, ek sal die rekenaar later herbegin +; used for example as 'Run MyProg.exe' +RunEntryExec=Voer %1 uit +; used for example as 'View Readme.txt' +RunEntryShellExec=Bekyk %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Installeerder benodig volgende CD/DVD +SelectDiskLabel2=Plaas asb. skyf %1 in die aandrywer en kliek Aanvaar.%n%nIndien die l�ers in 'n ander vouer gevind kan word as die een hieronder, sleutel die korrekte roete in of kliek Rondblaai. +PathLabel=&Roete: +FileNotInDir2=Die l�er "%1" kan nie gevind word in "%2" nie. Plaas asb. die korrekte skyf in die aandrywer of kies 'n ander vouer. +SelectDirectoryLabel=Spesifiseer asb. die ligging van die volgende skyf. + +; *** Installation phase messages +SetupAborted=Die installasie is nie voltooi nie.%n%nKorrigeer asb. die probleem en voer die installeerder weer uit. +AbortRetryIgnoreSelectAction=Kies aksie +AbortRetryIgnoreRetry=&Probeer weer +AbortRetryIgnoreIgnore=&Ignoreer die fout en gaan aan +AbortRetryIgnoreCancel=Kanseleer die installasie + +; *** Installation status messages +StatusClosingApplications=Maak programme toe... +StatusCreateDirs=Skep vouers... +StatusExtractFiles=Pak l�ers uit... +StatusCreateIcons=Skep kortpaaie... +StatusCreateIniEntries=Skep INI-inskrywings... +StatusCreateRegistryEntries=Skep van registerinskrywings... +StatusRegisterFiles=Registreer l�ers... +StatusSavingUninstall=Stoor verwyderingsinligting... +StatusRunProgram=Voltooi installasie... +StatusRestartingApplications=Herbegin programme... +StatusRollback=Rol veranderinge terug... + +; *** Misc. errors +ErrorInternal2=Interne fout: %1 +ErrorFunctionFailedNoCode=%1 gefaal +ErrorFunctionFailed=%1 gefaal; kode %2 +ErrorFunctionFailedWithMessage=%1 gefaal; kode %2.%n%3 +ErrorExecutingProgram=Onmoontlik om die volgende l�er uit te voer:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Fout terwyl registersleutel oopgemaak word:%n%1\%2 +ErrorRegCreateKey=Fout terwyl registersleutel geskep word:%n%1\%2 +ErrorRegWriteKey=Fout terwyl geskryf word na registersleutel:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Fout terwyl INI-inskrywing in die l�er "%1" gemaak word. + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Slaan hierdie leer oor (nie aanbeveel nie) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignoreer die fout en gaan aan (nie aanbeveel nie) +SourceIsCorrupted=Die bronl�er is korrup +SourceDoesntExist=Die bronl�er "%1" bestaan nie +ExistingFileReadOnly2=Die bestaande leer kon nie vervang word nie want dit is Alleenlik vir lees gemerk. +ExistingFileReadOnlyRetry=&Verwyder die Alleenlik-lees merker en probeer weer +ExistingFileReadOnlyKeepExisting=&Behou die bestaande leer +ErrorReadingExistingDest='n Fout het voorgekom terwyl die bestaande l�er gelees is: +FileExistsSelectAction=Kies aksie +FileExists2=Die leer bestaan alreeds. +FileExistsOverwriteExisting=&Vervang die bestaande leer +FileExistsKeepExisting=&Behou die bestaande leer +FileExistsOverwriteOrKeepAll=&Doen dit vir al die volgende probleme +ExistingFileNewerSelectAction=Kies aksie +ExistingFileNewer2=Die bestaande leer is nuwer as die een wat die installeerder probeer installeer. +ExistingFileNewerOverwriteExisting=&Vervang die bestaande leer +ExistingFileNewerKeepExisting=&Behou die bestaande leer (aanbeveel) +ExistingFileNewerOverwriteOrKeepAll=&Doen dit vir al die volgende probleme +ErrorChangingAttr='n Fout het voorgekom terwyl die attribute van die bestaande l�er verander is: +ErrorCreatingTemp='n Fout het voorgekom toe 'n l�er in die bestaande gids geskep is: +ErrorReadingSource='n Fout het voorgekom terwyl die bronl�er gelees is: +ErrorCopying='n Fout het voorgekom terwyl 'n l�er gekopieer is: +ErrorReplacingExistingFile='n Fout het voorgekom toe die bestaande l�er oorskryf is: +ErrorRestartReplace=HerbeginVervang gefaal: +ErrorRenamingTemp='n Fout het voorgekom terwyl 'n l�er in die bestemmingsgids van naam verander is: +ErrorRegisterServer=Onmoontlik om die DLL/OCX te registreer: %1 +ErrorRegSvr32Failed=RegSvr32 het gefaal met kode %1 +ErrorRegisterTypeLib=Onmoontlik om die biblioteek tipe te registreer: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bis +UninstallDisplayNameMark64Bit=64-bis +UninstallDisplayNameMarkAllUsers=Alle gebruikers +UninstallDisplayNameMarkCurrentUser=Huidige gebruiker + +; *** Post-installation errors +ErrorOpeningReadme='n Fout het voorgekom terwyl die README-l�er oopgemaak is. +ErrorRestartingComputer=Die installeerder kon nie die rekenaar herbegin nie. Doen dit asb self. + +; *** Uninstaller messages +UninstallNotFound=Le�r "%1" bestaan nie. Kan nie verwyder nie. +UninstallOpenError=Le�r "%1" kan nie oopgemaak word nie. Onmoontlik om te verwyder. +UninstallUnsupportedVer=Die verwyder staafl�er "%1" se formaat word nie herken deur hierdie weergawe van die verwyderaar nie. Onmoontlik om te verwyder. +UninstallUnknownEntry='n Onbekende inskrywing (%1) is te�gekom in die verwyder staafl�er. +ConfirmUninstall=Is u seker dat u %1 en al die komponente daarvan heeltemal wil verwyder? +UninstallOnlyOnWin64=Hierdie installasie kan slegs verwyder word op 64-bis-Windows. +OnlyAdminCanUninstall=Hierdie installasie kan slegs verwyder word deur 'n gebruiker met administratiewe regte. +UninstallStatusLabel=Wag asb. terwyl %1 van u rekenaar verwyder word. +UninstalledAll=%1 is suksesvol verwyder vanaf u rekenaar. +UninstalledMost=%1 verwydering voltooi.%n%nSommige elemente kon nie verwyder word nie. Hierdie elemente kan handmatig verwyder word. +UninstalledAndNeedsRestart=Om die verwydering van %1 te voltooi, moet u rekenaar herbegin word.%n%nWil u nou herbegin? +UninstallDataCorrupted="%1" l�er is korrup. Onmoontlik om te verwyder. + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Verwyder gedeelde le�r? +ConfirmDeleteSharedFile2=Die stelsel dui aan dat die volgende gedeelde l�ers nie meer deur enige programme gebruik word nie. Moet die verwyderaar die gedeelde l�er verwyder?%n%nIndien enige programme hierdie l�er steeds gebruik en dit verwyder word, sal daardie programme nie meer reg funksioneer nie. Indien u onseker is, kies Nee. Indien die l�er op u stelsel gelaat word, sal dit geen skade doen nie. +SharedFileNameLabel=Le�rnaam: +SharedFileLocationLabel=Ligging: +WizardUninstalling=Verwyderingstatus +StatusUninstalling=Verwyder %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Installeer %1. +ShutdownBlockReasonUninstallingApp=Verwyder %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 weergawe %2 +AdditionalIcons=Bykomende ikone: +CreateDesktopIcon=Skep 'n &werksbladikoon +CreateQuickLaunchIcon=Skep 'n &Quick Launch ikoon +ProgramOnTheWeb=%1 op die Web +UninstallProgram=Verwyder %1 +LaunchProgram=Voer %1 uit +AssocFileExtension=&Assosieer %1 met die %2 l�eruitbreiding +AssocingFileExtension=Assosieer %1 met die %2 l�eruitbreiding... +AutoStartProgramGroupDescription=Begin: +AutoStartProgram=Begin %1 outomaties +AddonHostProgramNotFound=%1 kon nie gevind word in die vouer wat u gekies het nie.%n%nWil u voortgaan ten spyte daarvan? \ No newline at end of file diff --git a/Files/Languages/Unofficial/Albanian.isl b/Files/Languages/Unofficial/Albanian.isl new file mode 100644 index 00000000..0b10700d --- /dev/null +++ b/Files/Languages/Unofficial/Albanian.isl @@ -0,0 +1,388 @@ +; *** Inno Setup version 6.1.0+ Albanian messages *** +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). +; +; Përktheu Besmir Godole +; Posta elektronike: bgodole@gmail.com +; Më kontaktoni për ndonjë gabim ose sugjerim rreth përkthimit. + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Albanian +LanguageID=$041C +LanguageCodePage=1252 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Sistemim +SetupWindowTitle=Sistemon - %1 +UninstallAppTitle=Çinstalim +UninstallAppFullTitle=Çinstalon %1 + +; *** Misc. common +InformationTitle=Informacion +ConfirmTitle=Miratim +ErrorTitle=Gabim + +; *** SetupLdr messages +SetupLdrStartupMessage=Do të instalohet %1. Dëshironi të vijoni? +LdrCannotCreateTemp=Nuk mund të krijohej skedari i përkohshëm. Sistemimi u ndërpre +LdrCannotExecTemp=Nuk mund të ekzekutohej skedari në direktorinë e përkohshme. Sistemimi u ndërpre +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nGabim %2: %3 +SetupFileMissing=Mungon skedari %1 në direktorinë e instalimit. Lutemi të korrigjoni problemin ose të siguroni një kopje tjetër të programit. +SetupFileCorrupt=Janë dëmtuar skedarët e Sistemuesit. Lutemi të përdoret një kopje e re e programit. +SetupFileCorruptOrWrongVer=Janë dëmtuar skedarët e sistemuesit ose nuk përshtaten me këtë version të Sistemimit. Lutemi të korrigjoni problemin ose të siguroni një kopje tjetër të programit. +InvalidParameter=Në vijën e komandës u vendos një parametër i pasaktë:%n%n%1 +SetupAlreadyRunning=Është duke vepruar Sistemuesi. +WindowsVersionNotSupported=Programi nuk përshtatet me këtë version të Windows-it. +WindowsServicePackRequired=Programi ka nevojë për %1 me Paketë Sigurie %2 ose më të re. +NotOnThisPlatform=Programi nuk do të veprojë në %1. +OnlyOnThisPlatform=Programi duhet të veprojë në %1. +OnlyOnTheseArchitectures=Programi mund të instalohet vetëm në versionet e Windows-it me procesorë për këto modele arkitekturore:%n%n%1 +WinVersionTooLowError=Programi ka nevojë për %1 në versionin %2 a më të ri. +WinVersionTooHighError=Programi nuk mund të instalohet në %1 në versionin %2 a më të ri. +AdminPrivilegesRequired=Instalimi i programit duhet kryer nga administratori. +PowerUserPrivilegesRequired=Instalimi i programi duhet kryer nga administratori ose nga një Përdorues me privilegje. +SetupAppRunningError=Sistemuesi vëren se aktualisht po vepron %1.%n%nLutemi ta mbyllni dhe të vijoni duke klikuar OK, ose Anuloj për t'u larguar. +UninstallAppRunningError=Çinstaluesi vëren se aktualisht po vepron %1.%n%nLutemi ta mbyllni dhe të vijoni duke klikuar OK, ose Anuloj për t'u larguar. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Zgjidhet mënyra e kryerjes së instalimit +PrivilegesRequiredOverrideInstruction=Zgjidhni mënyrën e instalimit +PrivilegesRequiredOverrideText1=%1 mund të instalohet për të gjithë përdoruesit (duhen privilegje administrative) ose vetëm për ju. +PrivilegesRequiredOverrideText2=%1 mund të instalohet vetëm për ju ose për të gjithë përdoruesit (duhen privilegje administrative). +PrivilegesRequiredOverrideAllUsers=Instaloj për të &gjithë përdoruesit +PrivilegesRequiredOverrideAllUsersRecommended=Instaloj për të &gjithë përdoruesit (rekomandohet) +PrivilegesRequiredOverrideCurrentUser=Instaloj për &veten time +PrivilegesRequiredOverrideCurrentUserRecommended=Instaloj për &veten time (rekomandohet) + +; *** Misc. errors +ErrorCreatingDir=Sistemuesi nuk arriti të krijojë direktorinë "%1" +ErrorTooManyFilesInDir=Nuk mund të krijohen skedarë në direktorinë "%1", sepse ka shumë të tjerë + +; *** Setup common messages +ExitSetupTitle=Mbyllet sistemuesi +ExitSetupMessage=Sistemimi nuk ka përfunduar. Programi nuk do të instalohet nëse e mbyllni.%n%nQë instalimi të përfundojë, mund ta hapni Sistemuesin një herë tjetër.%n%nDo e mbyllni Sistemuesin? +AboutSetupMenuItem=&Për Sistemimin... +AboutSetupTitle=Për Sistemimin +AboutSetupMessage=%1 versioni %2%n%3%n%n%1 faqja zyrtare:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< &Kthehem +ButtonNext=&Tjetër > +ButtonInstall=&Instaloj +ButtonOK=OK +ButtonCancel=Anuloj +ButtonYes=&Po +ButtonYesToAll=Po, &të gjitha +ButtonNo=&Jo +ButtonNoToAll=J&o, asnjë +ButtonFinish=&Përfundoj +ButtonBrowse=&Shfletoj... +ButtonWizardBrowse=S&hfletoj... +ButtonNewFolder=&Hap dosje të re + +; *** "Select Language" dialog messages +SelectLanguageTitle=Zgjidhet gjuha e sistemuesit +SelectLanguageLabel=Zgjidhni gjuhën e përdorur gjatë instalimit. + +; *** Common wizard text +ClickNext=Vijoni duke klikuar Tjetër ose Anuloj për ta mbyllur Sistemuesin. +BeveledLabel= +BrowseDialogTitle=Shfletohet dosja +BrowseDialogLabel=Zgjidhni dosjen nga kjo listë, pastaj klikoni OK. +NewFolderName=Dosje të re + +; *** "Welcome" wizard page +WelcomeLabel1=Mirësevini te Udhërrëfyesi për Sistemimin e [name] +WelcomeLabel2=[name/ver] do të instalohet në kompjuter.%n%nRekomandohet të mbyllen aplikacionet e tjera para se të vijoni. + +; *** "Password" wizard page +WizardPassword=Fjalëkalimi +PasswordLabel1=Instalimi është i mbrojtur me fjalëkalim. +PasswordLabel3=Lutemi të shkruani fjalëkalimin, pastaj vijoni duke klikuar Tjetër. Fjalëkalimi duhet vendosur me kujdes. +PasswordEditLabel=&Fjalëkalimi: +IncorrectPassword=Fjalëkalimi nuk është i saktë. Lutemi ta provoni prapë. + +; *** "License Agreement" wizard page +WizardLicense=Marrëveshja e licensimit +LicenseLabel=Lutemi ta lexoni këtë informacion të rëndësishëm para se të vijoni. +LicenseLabel3=Lutemi ta lexoni Marrëveshjen e licensimit. Duhet të pranoni detyrimet e marrëveshjes para se të vijoni me instalimin. +LicenseAccepted=&Pranoj marrëveshjen +LicenseNotAccepted=&Nuk e pranoj marrëveshjen + +; *** "Information" wizard pages +WizardInfoBefore=Informacion +InfoBeforeLabel=Lutemi të lexohet ky informacion i rëndësishëm para se të vijoni. +InfoBeforeClickLabel=Kur të jeni gati për të vijuar me Sistemimin, klikoni Tjetër. +WizardInfoAfter=Informacion +InfoAfterLabel=Lutemi të lexohet ky informacion i rëndësishëm para se të vijoni. +InfoAfterClickLabel=Kur të jeni gati për të vijuar me Sistemimin, klikoni Tjetër. + +; *** "User Information" wizard page +WizardUserInfo=Informacion mbi përdoruesin +UserInfoDesc=Lutemi të vendosni informacionin. +UserInfoName=&Përdoruesi: +UserInfoOrg=&Organizata: +UserInfoSerial=&Numri i serisë: +UserInfoNameRequired=Duhet vendosur emri. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Zgjidhet destinacioni +SelectDirDesc=Ku do të instalohet [name]? +SelectDirLabel3=Sistemuesi do e instalojë [name] në këtë dosje. +SelectDirBrowseLabel=Vijoni duke klikuar Tjetër. Klikoni Shfletoj për të zgjedhur një dosje të ndryshme. +DiskSpaceGBLabel=Kërkohet jo më pak se [gb] GB hapësirë e lirë në disk. +DiskSpaceMBLabel=Kërkohet jo më pak se [mb] MB hapësirë e lirë në disk. +CannotInstallToNetworkDrive=Instalimi nuk mund të kryhet në diskun e një rrjeti kompjuterik. +CannotInstallToUNCPath=Instalimi nuk mund të kryhet në një shteg UNC. +InvalidPath=Duhet vendosur shtegu i plotë i diskut, për shembull:%n%nC:\APP%n%nose shtegu UNC sipas formatit:%n%n\\server\share +InvalidDrive=Nuk ekziston ose nuk hapet disku a shpërndarësi UNC i zgjedhur. Lutemi të zgjidhni një tjetër. +DiskSpaceWarningTitle=Nuk mjafton hapësira +DiskSpaceWarning=Sistemuesi kërkon të paktën %1 KB hapësirë të lirë për të kryer instalimin, por disku ka vetëm %2 KB të vlefshme.%n%nGjithsesi, të vijohet? +DirNameTooLong=Është tepër i gjatë emri ose shtegu i dosjes. +InvalidDirName=Emri i dosjes nuk është i saktë. +BadDirName32=Emri i dosjes nuk mund të përmbajë këto shkronja:%n%n%1 +DirExistsTitle=Dosja ekziston +DirExists=Dosja:%n%n%1%n%nekziston që më parë. Gjithsesi, doni ta instaloni në këtë dosje? +DirDoesntExistTitle=Nuk ekziston dosja +DirDoesntExist=Nuk ekziston dosja:%n%n%1%n%n. Doni ta krijoni dosjen? + +; *** "Select Components" wizard page +WizardSelectComponents=Zgjidhen komponentët +SelectComponentsDesc=Cilët komponentë duhen instaluar? +SelectComponentsLabel2=Zgjidhni komponentët që doni të instaloni; mos shënoni komponentë që nuk ju duhen. Klikoni Tjetër kur të jeni gati. +FullInstallation=Instaloj të plotë +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Instalim kompakt +CustomInstallation=Instalim i personalizuar +NoUninstallWarningTitle=Komponentët ekzistues +NoUninstallWarning=Sistemuesi vëren se këta komponentë janë instaluar më parë në kompjuter:%n%n%1%n%nNuk do të çinstalohen nëse nuk i zgjidhni.%n%nGjithsesi, doni të vijoni? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Kjo zgjedhje kërkon jo më pak se [gb] GB hapësirë të lirë në disk. +ComponentsDiskSpaceMBLabel=Kjo zgjedhje kërkon jo më pak se [mb] MB hapësirë të lirë në disk. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Zgjidhen detyrat shtesë +SelectTasksDesc=Çfarë detyrash të tjera do të kryhen? +SelectTasksLabel2=Zgjidhni detyrat shtesë që duhet të kryejë Sistemuesi kur të instalojë [name], pastaj klikoni Tjetër. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Zgjidhet dosja në Menynë Nis +SelectStartMenuFolderDesc=Ku do të vendosen shkurtoret e programit? +SelectStartMenuFolderLabel3=Shkurtoret e programit do të krijohen në këtë dosje të Menysë Nis. +SelectStartMenuFolderBrowseLabel=Për të vijuar, klikoni Tjetër. Për të zgjedhur një dosje të ndryshme, klikoni Shfletoj. +MustEnterGroupName=Duhet vendosur emri i dosjes. +GroupNameTooLong=Është tepër i gjatë emri ose shtegu i dosjes. +InvalidGroupName=Emri i dosjes nuk është i saktë. +BadGroupName=Emri i dosjes nuk duhet të përmbajë asnjë nga këto shkronja:%n%n%1 +NoProgramGroupCheck2=&Nuk krijoj dosje në Menunë Nis + +; *** "Ready to Install" wizard page +WizardReady=Gati për instalim +ReadyLabel1=Sistemuesi është gati të instalojë [name] në kompjuter. +ReadyLabel2a=Klikoni Instaloj për të vijuar instalimin ose ndryshoni ndonjë parametër duke klikuar Kthehem. +ReadyLabel2b=Klikoni Instaloj për të vijuar instalimin. +ReadyMemoUserInfo=Informacion mbi përdoruesin: +ReadyMemoDir=Destinacioni: +ReadyMemoType=Lloji i sistemimit: +ReadyMemoComponents=Komponentët e zgjedhur: +ReadyMemoGroup=Dosja në Menunë Nis: +ReadyMemoTasks=Detyrat shtesë: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Shkarkon skedarët shtesë... +ButtonStopDownload=&Ndaloj shkarkimin +StopDownload=E konfirmoni ndalimin e shkarkimit? +ErrorDownloadAborted=Shkarkimi u ndërpre +ErrorDownloadFailed=E pamundur të shkarkohej: %1 %2 +ErrorDownloadSizeFailed=E pamundur të merrej madhësia e skedarit: %1 %2 +ErrorFileHash1=E pamundur të merrej hashi i skedarit: %1 +ErrorFileHash2=Hashi i skedarit është i pasaktë: pritej %1, doli %2 +ErrorProgress=Vazhdim i pasaktë: %1 of %2 +ErrorFileSize=Madhësia e skedarit është e pasaktë: pritej %1, doli %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Gati për instalim +PreparingDesc=Sistemuesi është gati për instalimin e [name] në kompjuter. +PreviousInstallNotCompleted=Nuk ka përfunduar instalimi/heqja e programit të mëparshëm. Instalimi do të përfundojë kur kompjuteri të rinisë.%n%nPas rinisjes, hapeni sërish Sistemuesin që të përfundojë instalimin e [name]. +CannotContinue=Sistemimi nuk mund të vijojë. Lutemi të mbyllet duke klikuar Anuloj. +ApplicationsFound=Këto aplikacione përdorin skedarë që do të përditësohen. Rekomandohet që Sistemuesi t'i mbyllë ata automatikisht me lejen tuaj. +ApplicationsFound2=Këto aplikacione përdorin skedarë që do të përditësohen. Rekomandohet që Sistemuesi t'i mbyllë ata automatikisht me lejen tuaj. Pasi instalimi të përfundojë, Sistemuesi do të tentojë t'i hapë sërish. +CloseApplications=&Mbyll automatikisht aplikacionet +DontCloseApplications=&Mos i mbyll aplikacionet +ErrorCloseApplications=Jo të gjitha aplikacionet u mbyllën automatikisht. Rekomandohet të mbyllen të gjithë skedarët para se të vijojë përditësimi. +PrepareToInstallNeedsRestart=Duhet rinisur kompjuteri për arsye të sistemimit. Pas rinisjes së kompjuterit, hapeni sërish Sistemuesin që të përfundojë instalimin e [name].%n%nDoni ta rinisni tani kompjuterin? + +; *** "Installing" wizard page +WizardInstalling=Instalim +InstallingLabel=Kini durim që Sistemuesi të instalojë [name] në kompjuter. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Përfundon udhërrëfimi për Sistemimin e [name] +FinishedLabelNoIcons=Sistemuesi përfundoi instalimin në kompjuter të [name]. +FinishedLabel=Sistemuesi përfundoi instalimin në kompjuter të [name]. Aplikacioni mund të hapet me anë të ikonës së instaluar. +ClickFinish=Klikoni Përfundoj për ta mbyllur Sistemuesin. +FinishedRestartLabel=Duhet të riniset kompjuteri që Sistemuesi të përfundojë instalimin e [name]. Doni ta rinisni tani kompjuterin? +FinishedRestartMessage=Duhet të riniset kompjuteri që Sistemuesi të përfundojë instalimin e [name].%n%nDoni ta rinisni tani kompjuterin? +ShowReadmeCheck=Po, dua të shoh skedarin README +YesRadio=&Po, rinis kompjuterin tani +NoRadio=&Jo, do e rinis kompjuterin më vonë +; used for example as 'Run MyProg.exe' +RunEntryExec=Hap %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Shoh %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Sistemuesi kërkon diskun tjetër +SelectDiskLabel2=Lutemi të vendoset Disku %1 dhe klikoni OK.%n%nNëse skedarët në disk ndodhen në një dosje të ndryshme, përcaktoni shtegun e saktë ose klikoni Shfletoj. +PathLabel=&Shtegu: +FileNotInDir2=Skedari "%1" nuk ndodhet në "%2". Lutemi të vendoset disku i saktë ose të zgjidhet një dosje e ndryshme. +SelectDirectoryLabel=Lutemi të përcaktohet vendi i diskut tjetër. + +; *** Installation phase messages +SetupAborted=Nuk përfundoi sistemimi.%n%nLutemi të korrigjoni problemin dhe provojeni prapë. +AbortRetryIgnoreSelectAction=Zgjidhni veprimin +AbortRetryIgnoreRetry=&Provoj prapë +AbortRetryIgnoreIgnore=&Anashkaloj problemin dhe vazhdoj +AbortRetryIgnoreCancel=Anuloj instalimin + +; *** Installation status messages +StatusClosingApplications=Mbyll aplikacionet... +StatusCreateDirs=Krijon direktoritë... +StatusExtractFiles=Nxjerr skedarët... +StatusCreateIcons=Krijon shkurtoret... +StatusCreateIniEntries=Krijon elementet INI... +StatusCreateRegistryEntries=Krijon elementet në regjistër... +StatusRegisterFiles=Regjistron skedarët... +StatusSavingUninstall=Ruan informacionin e çinstalimit... +StatusRunProgram=Përfundon instalimin... +StatusRestartingApplications=Rinis aplikacionet... +StatusRollback=Kthen ndryshimet... + +; *** Misc. errors +ErrorInternal2=Problem i brendshëm: %1 +ErrorFunctionFailedNoCode=%1 ndali +ErrorFunctionFailed=%1 ndali; kodi %2 +ErrorFunctionFailedWithMessage=%1 ndali; kodi %2.%n%3 +ErrorExecutingProgram=Nuk ekzekutohet skedari:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Problem me hapjen e kodit të regjistrit:%n%1\%2 +ErrorRegCreateKey=Problem me krijimin e kodit të regjistrit:%n%1\%2 +ErrorRegWriteKey=Problem me shkrimin e kodit të regjistrit:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Problem me krijimin e elementit INI te skedari "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Anashkaloj skedarin (nuk rekomandohet) +FileAbortRetryIgnoreIgnoreNotRecommended=&Anashkaloj problemin dhe vazhdoj (nuk rekomandohet) +SourceIsCorrupted=Është dëmtuar skedari burimor +SourceDoesntExist=Nuk ekziston skedari burimor "%1" +ExistingFileReadOnly2=Skedari ekzistues nuk mund të zëvendësohet, sepse është vetëm si i lexueshëm. +ExistingFileReadOnlyRetry=&Hiqni atributin e leximit dhe provojeni prapë +ExistingFileReadOnlyKeepExisting=&Mbaj skedarin ekzistues +ErrorReadingExistingDest=Ka një problem me leximin e skedarit ekzistues: +FileExistsSelectAction=Zgjidhni veprimin +FileExists2=Skedari ekziston që më parë. +FileExistsOverwriteExisting=&Mbishkruaj skedarin ekzistues +FileExistsKeepExisting=&Mbaj skedarin ekzistues +FileExistsOverwriteOrKeepAll=&Veproj njësoj për rastet e tjera +ExistingFileNewerSelectAction=Zgjidhni veprimin +ExistingFileNewer2=Skedari ekzistues është më i ri sesa ai që Sistemuesi po provon të instalojë. +ExistingFileNewerOverwriteExisting=&Mbishkruaj skedarin ekzistues +ExistingFileNewerKeepExisting=&Mbaj skedarin ekzistues (rekomandohet) +ExistingFileNewerOverwriteOrKeepAll=&Veproj njësoj për rastet e tjera +ErrorChangingAttr=Ka një problem me ndryshimin e atributeve të skedarëve ekzistues: +ErrorCreatingTemp=Ka një problem me krijimin e skedarit në direktorinë e destinacionit: +ErrorReadingSource=Ka një problem me leximin e skedarit nga burimi: +ErrorCopying=Ka një problem me kopjimin e skedarit: +ErrorReplacingExistingFile=Ka një problem me zëvendësimin e skedarit ekzistues: +ErrorRestartReplace=Ndali RestartReplace: +ErrorRenamingTemp=Ka një problem me emërtimin e skedarit në direktorinë e destinacionit: +ErrorRegisterServer=DLL/OCX nuk mund të regjistrohet: %1 +ErrorRegSvr32Failed=RegSvr32 ndali me kodin e daljes %1 +ErrorRegisterTypeLib=Lloji i librarisë nuk mund të regjistrohet: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=Gjithë përdoruesit +UninstallDisplayNameMarkCurrentUser=Këtë përdorues + +; *** Post-installation errors +ErrorOpeningReadme=Ka një problem me hapjen e skedarit README. +ErrorRestartingComputer=Sistemuesi nuk e rinisi dot kompjuterin. Lutemi ta bëni vetë. + +; *** Uninstaller messages +UninstallNotFound=Nuk ekziston skedari "%1". Nuk mund të çinstalohet. +UninstallOpenError=Nuk hapet skedari "%1". Nuk mund të çinstalohet +UninstallUnsupportedVer=Formati i ditarit të çinstalimit "%1" nuk njihet nga ky version i çinstaluesit. Nuk mund të çinstalohet +UninstallUnknownEntry=Ditari i çinstalimit ka një element të panjohur (%1) +ConfirmUninstall=Doni ta fshini %1 bashkë me komponentët e vet? +UninstallOnlyOnWin64=Instalimi mund të kryhet vetëm në Windows 64-bit. +OnlyAdminCanUninstall=Instalimi mund të çinstalohet vetëm nga përdoruesit me privilegje administruese. +UninstallStatusLabel=Kini durim ndërkohë që %1 fshihet nga kompjuteri. +UninstalledAll=%1 u fshi me sukses nga kompjuteri. +UninstalledMost=Përfundoi çinstalimi i %1.%n%nDisa elemente nuk mund të fshiheshin. Këto mund t'i fshini vetë. +UninstalledAndNeedsRestart=Duhet rinisur kompjuteri që të përfundojë çinstalimi i %1.%n%nDoni ta rinisni tani kompjuterin? +UninstallDataCorrupted=Skedari "%1" është dëmtuar. Nuk mund të çinstalohet + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Do e fshini skedarin e ndarë? +ConfirmDeleteSharedFile2=Ky skedar i ndarë nuk përdoret më nga programet, sipas sistemit. Doni që Çinstalimi ta fshijë skedarin?%n%nNëse skedari është duke u përdorur nga ndonjë program tjetër, ai mund të mos punojë siç duhet. Nëse nuk jeni të sigurt, zgjidhni Jo. Nuk ka dëm nga mbajtja e skedarit në sistem. +SharedFileNameLabel=Emri i skedarit: +SharedFileLocationLabel=Vendi: +WizardUninstalling=Statusi i çinstalimit +StatusUninstalling=Çinstalon %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Instalon %1. +ShutdownBlockReasonUninstallingApp=Çinstalon %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 versioni %2 +AdditionalIcons=Ikona shtesë: +CreateDesktopIcon=Krijoj një ikonë në &tryezë +CreateQuickLaunchIcon=Krijoj një ikonë në &Quick Launch +ProgramOnTheWeb=%1 në internet +UninstallProgram=Çinstaloj %1 +LaunchProgram=Hap %1 +AssocFileExtension=&Shoqëroj %1 me siglën %2 +AssocingFileExtension=Shoqëron %1 me siglën %2... +AutoStartProgramGroupDescription=Fillimi: +AutoStartProgram=Filloj automatikisht %1 +AddonHostProgramNotFound=%1 nuk ndodhet në dosjen e përzgjedhur.%n%nGjithsesi, doni të vijoni? diff --git a/Files/Languages/Unofficial/Arabic.isl b/Files/Languages/Unofficial/Arabic.isl new file mode 100644 index 00000000..03f29258 --- /dev/null +++ b/Files/Languages/Unofficial/Arabic.isl @@ -0,0 +1,385 @@ +; *** Inno Setup version 6.1.0+ arabic messages *** +; +; Translated by nacer baaziz (nacerstile@gmail.com) +; http://www.jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=arabic +LanguageID=$0401 +LanguageCodePage=0 +RightToLeft=yes +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=إعداد +SetupWindowTitle=إعداد - %1 +UninstallAppTitle=إزالة التثبيت +UninstallAppFullTitle=إزالة تثبيت %1 + +; *** Misc. common +InformationTitle=معلومات +ConfirmTitle=تأكيد +ErrorTitle=خطأ + +; *** SetupLdr messages +SetupLdrStartupMessage=هذا المعالج سيقوم بتثبيت %1. هل تريد المتابعة? +LdrCannotCreateTemp=تعذر إنشاء الملفات المؤقتة, تم فشل معالج التثبيت. +LdrCannotExecTemp=تعذر تشغيل الملفات من المجلد المؤقت. فشل معالج التثبيت. +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%n خطأ %2: %3 +SetupFileMissing=الملف %1 مفقود من دليل التثبيت. الرجاء تصحيح المشكلة أو الحصول على نسخة جديدة من البرنامج. +SetupFileCorrupt=ملفات الإعداد تالفة. الرجاء الحصول على نسخة جديدة من البرنامج. +SetupFileCorruptOrWrongVer=ملفات الإعداد تالفة أو غير متوافقة مع هذا الإصدار من برنامج الإعداد. الرجاء تصحيح المشكلة أو الحصول على نسخة جديدة من البرنامج. +InvalidParameter=تم تمرير أوامر غير صالحة على سطر الأوامر : %n%n%1 +SetupAlreadyRunning=برنامج الإعداد قيد التشغيل بالفعل. +WindowsVersionNotSupported=لا يدعم هذا البرنامج إصدار Windows الذي يعمل به الكمبيوتر. +WindowsServicePackRequired=هذا البرنامج يتطلب %1 حزمة الخدمة %2 أو أعلى. +NotOnThisPlatform=لن يتم تشغيل هذا البرنامج على %1. +OnlyOnThisPlatform=يجب تشغيل هذا البرنامج على %1. +OnlyOnTheseArchitectures=يمكن تثبيت هذا البرنامج فقط على إصدارات Windows المصممة لهندسة المعالج التالية : %n%n%1 +WinVersionTooLowError=هذا البرنامج يتطلب %1 الإصدار %2 أو أعلى. +WinVersionTooHighError=لا يمكن تثبيت هذا البرنامج على %1 الإصدار %2 أو أعلى. +AdminPrivilegesRequired=يجب أن يتم تسجيل دخولك كمسؤول عند تثبيت هذا البرنامج. +PowerUserPrivilegesRequired=يجب أن يتم تسجيل دخولك كمسؤول أو كعضو في مجموعة Power Users عند تثبيت هذا البرنامج. +SetupAppRunningError=لقد كشف معالج الإعداد أن %1 يعمل بالفعل. %n%n يرجى إغلاق كل أجزائه الآن , ثم إضغط حسنا للمتابعة أو إلغاء الأمر للخروج. +UninstallAppRunningError=كشف معالج إلغاء التثبيت بأن %1 يعمل بالفعل.%n%n يرجى إغلاق كل أجزائه الآن , ثم إضغط حسنا للمتابعة أو إلغاء الأمر للخروج. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=تحديد وضع تثبيت الإعداد +PrivilegesRequiredOverrideInstruction=تحديد وضع التثبيت +PrivilegesRequiredOverrideText1=يمكن ل %1 أن يُثَبَّت على جميع المستخدمين (يتطلب إمتيازات المسؤول), أو لك فقط.. +PrivilegesRequiredOverrideText2=.يمكن ل %1 أن يُثَبَّت لك فقط, أو أن يُثَبَّت على جميع المستخدمين (يتطلب إمتيازات المسؤول). +PrivilegesRequiredOverrideAllUsers=التثبيت ل&كافة المستخدمين +PrivilegesRequiredOverrideAllUsersRecommended=تثبيت ل&كافة المستخدمين (مستحسن) +PrivilegesRequiredOverrideCurrentUser=تثبيت لي &فقط +PrivilegesRequiredOverrideCurrentUserRecommended=تثبيت بالنسبة لي &فقط (مستحسن) + +; *** Misc. errors +ErrorCreatingDir=تعذر على برنامج الإعداد إنشاء الدليل "%1" +ErrorTooManyFilesInDir=تعذر إنشاء ملف في الدليل "%1" لأنه يحتوي على ملفات كثيرة جداً + +; *** Setup common messages +ExitSetupTitle=الخروج من معالج التثبيت +ExitSetupMessage=لم يكتمل الإعداد. إذا قمت بالخروج الآن، لن يتم تثبيت البرنامج.%n%nYou يمكنك تشغيل برنامج الإعداد مرة أخرى في وقت آخر لإكمال التثبيت.%n%n إنهاء الإعداد؟ +AboutSetupMenuItem=&حول الإعداد... +AboutSetupTitle=حول برنامج الإعداد +AboutSetupMessage=%1 الإصدار %2%n%3%n%n%1 صفحة الأنترنت:%n%4 +AboutSetupNote= +TranslatorNote=تم ترجمة المعالج إلى اللغة العربية بواسطة ناصر بعزيز + +; *** Buttons +ButtonBack=< ال&سابق +ButtonNext=ال&تالي > +ButtonInstall=&تثبيت +ButtonOK=&حسنا +ButtonCancel=إل&غاء الأمر +ButtonYes=&نعم +ButtonYesToAll=نعم لل&كل +ButtonNo=&لا +ButtonNoToAll=لا &للكل +ButtonFinish=إ&نهاء +ButtonBrowse=اس&تعراض... +ButtonWizardBrowse=اس&تعراض... +ButtonNewFolder=إن&شاء مجلد جديد + +; *** "Select Language" dialog messages +SelectLanguageTitle=إختر لغة معالج الإعداد +SelectLanguageLabel=حدد اللغة التي يجب استخدامها أثناء التثبيت. + +; *** Common wizard text +ClickNext=انقر فوق التالي للمتابعة، أو إلغاء الأمر لإنهاء الإعداد. +BeveledLabel= +BrowseDialogTitle=تصفح لاختيار مجلد +BrowseDialogLabel=حدد مجلدًا في القائمة أدناه، ثم انقر فوق حسنا. +NewFolderName=مجلد جديد + +; *** "Welcome" wizard page +WelcomeLabel1=مرحبا بكم في معالج تثبيت [name] +WelcomeLabel2=هذا المعالج سيقوم بتثبيت [name/ver] على جهازك. %n%nمن المستحسن أن تقوم بإغلاق كافة التطبيقات الأخرى قبل المتابعة. + +; *** "Password" wizard page +WizardPassword=كلمة السر +PasswordLabel1=هذا التثبيت محمي بكلمة سر. +PasswordLabel3=الرجاء تقديم كلمة المرور، ثم انقر فوق التالي للمتابعة. كلمات المرور حساسة لحالة الأحرف. +PasswordEditLabel=&كلمة السر: +IncorrectPassword=كلمة السر التي أدخلتها غير صحيحة. يرجى إعادة المحاولة. + +; *** "License Agreement" wizard page +WizardLicense=اتفاقية الترخيص +LicenseLabel=يرجى قراءة المعلومات الهامة التالية قبل المتابعة. +LicenseLabel3=الرجاء قراءة اتفاقية الترخيص التالية. يجب قبول شروط هذه الاتفاقية قبل متابعة التثبيت. +LicenseAccepted=أنا أواف&ق على هذه الإتفاقية +LicenseNotAccepted=أنا &لا أوافق على الإتفاقية + +; *** "Information" wizard pages +WizardInfoBefore=معلومات +InfoBeforeLabel=يرجى قراءة المعلومات الهامة التالية قبل المتابعة. +InfoBeforeClickLabel=عندما تكون جاهزًا للمتابعة مع الإعداد، انقر فوق التالي. +WizardInfoAfter=معلومات +InfoAfterLabel=يرجى قراءة المعلومات الهامة التالية قبل المتابعة. +InfoAfterClickLabel=عندما تكون جاهزًا للمتابعة مع الإعداد، انقر فوق التالي. + +; *** "User Information" wizard page +WizardUserInfo=معلومات المستخدم +UserInfoDesc=يرجى إدخال معلوماتك. +UserInfoName=إسم ال&مستخدم : +UserInfoOrg=المن&ظمة: +UserInfoSerial=&الرقم التسلسلي: +UserInfoNameRequired=يجب إدخال إسم. + +; *** "Select Destination Location" wizard page +WizardSelectDir=تحديد موقع الوِجْهة +SelectDirDesc=أين يجب تثبيت [name]؟ +SelectDirLabel3=سيقوم معالج التثبيت بتثبيت [name] في المجلد التالي. +SelectDirBrowseLabel=للمتابعة، انقر فوق التالي. إذا كنت ترغب في تحديد مجلد آخر، انقر فوق استعراض. +DiskSpaceGBLabel=تحتاج على الأقل [gb] GB من المساحة لتثبيت البرنامج. +DiskSpaceMBLabel=تحتاج على الأقل [mb] MB من المساحة لتثبيت البرنامج. +CannotInstallToNetworkDrive=يتعذر على برنامج الإعداد التثبيت على محرك أقراص شبكة اتصال. +CannotInstallToUNCPath=يتعذر على برنامج الإعداد تثبيت مسار UNC. +InvalidPath=يجب إدخال مسار كامل مع حرف محرك الأقراص; على سبيل المثال: %n%nC:\APP%n%أو مسار UNC في النموذج:%n%n\\server\share +InvalidDrive=محرك الأقراص أو مشاركة UNC التي حددتها غير موجود أو غير قابل للوصول. الرجاء تحديد آخر. +DiskSpaceWarningTitle=مساحة القرص غير كافية +DiskSpaceWarning=Sيتطلب الإعداد على الأقل %1 KB من المساحة الفارغة للتثبيت، ولكن محرك الأقراص المحدد فيه فقط %2 KB متوفرة.%n%nهل تريد المتابعة على أية حال؟ +DirNameTooLong=اسم المجلد أو المسار طويل جداً. +InvalidDirName=اسم المجلد غير صالح. +BadDirName32=لا يمكن لأسماء المجلدات تضمين أي من الأحرف التالية:%n%n%1 +DirExistsTitle=المجلد موجود بالفعل +DirExists=المجلد:%n%n%1%n%n موجود بالفعل. هل ترغب في التثبيت على هذا المجلد على أي حال؟ +DirDoesntExistTitle=المجلد غير موجود +DirDoesntExist=المجلد:%n%n%1%n%nغير موجود. هل تريد إنشاء المجلد؟ + +; *** "Select Components" wizard page +WizardSelectComponents=تحديد المكونات +SelectComponentsDesc=ما هي المكونات التي يجب تثبيتها؟ +SelectComponentsLabel2=حدد المكونات التي تريد تثبيتها ؛ امسح المكونات التي لا تريد تثبيتها. انقر فوق "التالي" عندما تكون مستعدًا للمتابعة. +FullInstallation=تثبيت كامل +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=تثبيت مدمج +CustomInstallation=تثبيت مخصص +NoUninstallWarningTitle=مكونات موجودة +NoUninstallWarning=اكتشف برنامج الإعداد أن المكونات التالية مثبتة بالفعل على جهاز الكمبيوتر الخاص بك: %n%n%1%n%nلن يؤدي إلغاء تحديد هذه المكونات إلى إزالة تثبيتها.%n%nهل ترغب في الاستمرار على أي حال? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=الاختيار الحالي يتطلب على الأقل [gb] GB من مساحة القرص. +ComponentsDiskSpaceMBLabel=الاختيار الحالي يتطلب على الأقل [mb] MB من مساحة القرص. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=حدد المهام الإضافية +SelectTasksDesc=ما المهام الإضافية التي ينبغي تنفيذها؟ +SelectTasksLabel2=حدد المهام الإضافية التي ترغب في أن يقوم الإعداد بتنفيذها أثناء تثبيت [name], ثم إضغط التالي. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=حدد مجلد قائمة ابدأ +SelectStartMenuFolderDesc=أين يجب أن يضع الإعداد اختصارات البرنامج؟ +SelectStartMenuFolderLabel3=سيقوم برنامج الإعداد بإنشاء اختصارات البرنامج في مجلد قائمة ابدأ التالية. +SelectStartMenuFolderBrowseLabel=للمتابعة، انقر فوق التالي. إذا كنت ترغب في تحديد مجلد آخر، انقر فوق استعراض. +MustEnterGroupName=يجب إدخال اسم مجلد. +GroupNameTooLong=اسم المجلد أو المسار طويل جداً. +InvalidGroupName=اسم المجلد غير صالح. +BadGroupName=لا يمكن أن يتضمن اسم المجلد أي من الأحرف التالية:%n%n%1 +NoProgramGroupCheck2=&عدم إنشاء مجلد قائمة ابدأ + +; *** "Ready to Install" wizard page +WizardReady=جاهز للتثبيت +ReadyLabel1=الإعداد جاهز الآن لبدء تثبيت [name] على جهازك. +ReadyLabel2a=انقر فوق تثبيت لمتابعة التثبيت، أو انقر فوق "السابق" إذا كنت ترغب في مراجعة أو تغيير أية إعدادات. +ReadyLabel2b=انقر فوق تثبيت لمتابعة التثبيت. +ReadyMemoUserInfo=معلومات المستخدم: +ReadyMemoDir=مسار الوِجْهة: +ReadyMemoType=نوع الإعداد: +ReadyMemoComponents=المكونات المحددة: +ReadyMemoGroup=مجلد قائمة ابدأ: +ReadyMemoTasks=مهام إضافية: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=تحميل الملفات الإضافية... +ButtonStopDownload=إي&قاف التحميل +StopDownload=هل أنت متأكد من أنك ترغب في إيقاف التحميل؟ +ErrorDownloadAborted=تم إلغاء التحميل +ErrorDownloadFailed=فشل التحميل: %1 %2 +ErrorDownloadSizeFailed=خطأ في قراءة الحجم: %1 %2 +ErrorFileHash1=خطأ في قراءة الهاش الخاص بالملف: %1 +ErrorFileHash2=خطأ في هاش الملف: كان من المتوقع أن يكن : %1, بينما تم إيجاد : %2 +ErrorProgress=خطأ في الحصول على نسبة التقدم: %1 من %2 +ErrorFileSize=خطأ في حجم الملف: المتوقع هو : %1, الحجم الذي وجدناه هو : %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=التحضير للتثبيت +PreparingDesc=الإعداد يستعد لتثبيت [name] على جهازك. +PreviousInstallNotCompleted=لم يكتمل التثبيت / إزالة البرنامج السابق. ستحتاج إلى إعادة تشغيل الكمبيوتر لإكمال هذا التثبيت.%n%nبعد إعادة تشغيل جهاز الكمبيوتر الخاص بك ، شغّل برنامج الإعداد مرة أخرى لإكمال تثبيت [name]. +CannotContinue=لا يمكن لبرنامج الإعداد المتابعة. يرجى النقر فوق "إلغاء" للخروج. +ApplicationsFound=تستخدم التطبيقات التالية الملفات التي تحتاج إلى تحديث بواسطة برنامج الإعداد. يوصى بالسماح لبرنامج الإعداد بإغلاق هذه التطبيقات تلقائيًا. +ApplicationsFound2=تستخدم التطبيقات التالية الملفات التي تحتاج إلى تحديث بواسطة برنامج الإعداد. يوصى بالسماح لبرنامج الإعداد بإغلاق هذه التطبيقات تلقائيًا. بعد اكتمال التثبيت ، سيحاول برنامج الإعداد إعادة تشغيل التطبيقات. +CloseApplications=أغلق التطبيقات &تلقائيًا +DontCloseApplications=&لا تغلق التطبيقات +ErrorCloseApplications=لم يتمكن الإعداد من إغلاق جميع التطبيقات تلقائيًا. يوصى بإغلاق جميع التطبيقات التي تستخدم الملفات التي تحتاج إلى تحديث بواسطة برنامج الإعداد قبل المتابعة. +PrepareToInstallNeedsRestart=برنامج الإعداد يجب أن يقوم بإعادة تشغيل الجهاز. بعد إعادة تشغيل جهازك, قم بتشغيل برنامج الإعداد مرة أخرى لإكمال تثبيت [name].%n%nهل تحب إعادة التشغيل الآن? + +; *** "Installing" wizard page +WizardInstalling=جاري التثبيت +InstallingLabel=يرجى الانتظار حتى يقوم برنامج الإعداد بتثبي [name] على جهازك. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=إنهاء معالج تثبيت [name] +FinishedLabelNoIcons=إكتمل معالج التثبيت من تثبيت [name] على جهازك. +FinishedLabel=اكتمل معالج التثبيت من تثبيت [name] على جهازك. قد يتم تشغيل التطبيق عن طريق تحديد الاختصارات المثبتة. +ClickFinish=إضغط إنهاء للخروج من معالج التثبيت +FinishedRestartLabel=لاستكمال تثبيت [name], يجب على برنامج الإعداد إعادة تشغيل جهاز الكمبيوتر الخاص بك. هل ترغب في إعادة التشغيل الآن؟ +FinishedRestartMessage=لاستكمال تثبيت [name], يجب على برنامج الإعداد إعادة تشغيل جهاز الكمبيوتر الخاص بك.%n%nهل ترغب في إعادة التشغيل الآن؟ +ShowReadmeCheck=نعم ، أرغب عرض ملف README +YesRadio=&نعم أعد تشغيل الكومبيوتر الان +NoRadio=&لا ، سأعيد تشغيل الكمبيوتر لاحقًا +; used for example as 'Run MyProg.exe' +RunEntryExec=تشغيل %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=عرض %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=يحتاج برنامج الإعداد إلى القرص التالي +SelectDiskLabel2=الرجاء إدراج القرص %1 وانقر فوق حسنا.%n%nإذا كان يمكن العثور على الملفات الموجودة على هذا القرص في مجلد غير الذي يظهر أدناه، أدخل المسار الصحيح أو انقر فوق استعراض. +PathLabel=&مسار : +FileNotInDir2=لم نتمكن من العثور على الملف "%1" في "%2". الرجاء إدراج القرص الصحيح أو تحديد مجلد آخر. +SelectDirectoryLabel=الرجاء تحديد موقع القرص التالي. + +; *** Installation phase messages +SetupAborted=لم يتم إكمال الإعداد. %n%nالرجاء تصحيح المشكلة وتشغيل الإعداد مرة أخرى. +AbortRetryIgnoreSelectAction=حدد إجراء +AbortRetryIgnoreRetry=أ&عد مجددا +AbortRetryIgnoreIgnore=&تجاهل الخطأ والمتابعة +AbortRetryIgnoreCancel=إلغاء التثبيت + +; *** Installation status messages +StatusClosingApplications=إغلاق التطبيقات... +StatusCreateDirs=إنشاء المجلدات... +StatusExtractFiles=استخراج الملفات... +StatusCreateIcons=إنشاء الإختصارات... +StatusCreateIniEntries=إنشاء مدخلات INI... +StatusCreateRegistryEntries=إنشاء مفاتيح السجل... +StatusRegisterFiles=تسجيل الملفات... +StatusSavingUninstall=تسجيل معلومات إزالة التثبيت... +StatusRunProgram=الإنتهاء من التثبيت... +StatusRestartingApplications=إعادة تشغيل التطبيقات... +StatusRollback=التراجع عن التغييرات... + +; *** Misc. errors +ErrorInternal2=خطأ داخلي: %1 +ErrorFunctionFailedNoCode=فشل %1 +ErrorFunctionFailed=فشل %1; رقم الخطء %2 +ErrorFunctionFailedWithMessage=فشل %1; رقم الخطء %2.%n%3 +ErrorExecutingProgram=الإعداد غير قابل على تشغيل الملف:%n%1 + +; *** Registry errors +ErrorRegOpenKey=خطأ في فتح مفتاح التسجيل:%n%1\%2 +ErrorRegCreateKey=خطأ في إنشاء مفتاح التسجيل:%n%1\%2 +ErrorRegWriteKey=خطأ في الكتابة على مفتاح التسجيل:%n%1\%2 + +; *** INI errors +ErrorIniEntry=حدث خطأ في إنشاء إدخال INI في الملف "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&تخطي هذا الملف (غير مستحسن) +FileAbortRetryIgnoreIgnoreNotRecommended=&تجاهل الخطأ والمتابعة (غير مستحسن) +SourceIsCorrupted=الملف المصدر تالف +SourceDoesntExist=الملف "%1"غير موجود +ExistingFileReadOnly2=تعذر استبدال الملف الموجود لأنه تم وضع علامة للقراءة فقط. +ExistingFileReadOnlyRetry=&أزل القراءة فقط عن الملفات ثم حاول مرة أخرى +ExistingFileReadOnlyKeepExisting=&إحتفظ بالملفات الموجودة +ErrorReadingExistingDest=حدث خطأ أثناء محاولة قراءة الملف الموجود: +FileExistsSelectAction=اختر إجراء +FileExists2=الملف موجود بالفعل. +FileExistsOverwriteExisting=&استبدال الملف الموجود +FileExistsKeepExisting=ا&بقاء الملف الموجود +FileExistsOverwriteOrKeepAll=ا&فعل هذا للنزاعات القادمة +ExistingFileNewerSelectAction=اختر إجراء +ExistingFileNewer2=الملف الموجود أحدث من الملف الذي سيقوم معالج الإعداد بتثبيته. +ExistingFileNewerOverwriteExisting=&&استبدال الملف الموجود +ExistingFileNewerKeepExisting=ال&ابقاء على الملف الموجود (مستحسن) +ExistingFileNewerOverwriteOrKeepAll=ا&فعل هذا مع النزاعات القادمة +ErrorChangingAttr=حدث خطأ أثناء محاولة تغيير سمات الملف الموجود: +ErrorCreatingTemp=حدث خطأ أثناء محاولة إنشاء ملف في الدليل الوجهة: +ErrorReadingSource=حدث خطأ أثناء محاولة قراءة ملف مصدر: +ErrorCopying=حدث خطأ أثناء محاولة نسخ ملف: +ErrorReplacingExistingFile=حدث خطأ أثناء محاولة استبدال الملف الموجود: +ErrorRestartReplace=فشل إعادة تشغيل "استبدال": +ErrorRenamingTemp=حدث خطأ أثناء محاولة إعادة تسمية ملف في الدليل الوجهة: +ErrorRegisterServer=تعذر تسجيل ملفات DLL/OCX: %1 +ErrorRegSvr32Failed=فشل RegSvr32 مع رمز الخروج %1 +ErrorRegisterTypeLib=الإعداد غير قادر على تسجيل مكتبة النوع: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=كافة المستخدمين +UninstallDisplayNameMarkCurrentUser=المستخدم الحالي + +; *** Post-installation errors +ErrorOpeningReadme=حدث خطأ أثناء محاولة فتح ملف إقرأني. +ErrorRestartingComputer=لم يتمكن برنامج الإعداد من إعادة تشغيل الكمبيوتر. الرجاء القيام بذلك يدوياً. + +; *** Uninstaller messages +UninstallNotFound=الملف "%1" غير موجود. لا يمكن إزالة التثبيت. +UninstallOpenError=تعذر فتح "%1". لا يمكن إزالة التثبيت. +UninstallUnsupportedVer=ملف سجل الإزالة "%1" في تنسيق غير معروف من قبل هذا الإصدار من برنامج إلغاء التثبيت. لا يمكن إزالة التثبيت +UninstallUnknownEntry=إدخال غير معروف (%1) تمت مصادفة في سجل إلغاء التثبيت +ConfirmUninstall=هل أنت متأكد من أنك تريد إزالة %1 تماما, وجميع مكوناته? +UninstallOnlyOnWin64=يمكن إلغاء تثبيت هذا التثبيت على Windows 64-بت فقط. +OnlyAdminCanUninstall=يمكن إلغاء تثبيت هذا التثبيت فقط من قبل مستخدم له امتيازات إدارية. +UninstallStatusLabel=يرجى الإنتظار ريت ما يتم إزالة تثبيت %1 من جهازك. +UninstalledAll=تم إزالة %1 تماما من جهازك بنجاح. +UninstalledMost=اكتمل إزالة %1.%n%nتعذر إزالة بعض العناصر. يمكن إزالة هذه يدوياً. +UninstalledAndNeedsRestart=لإكمال إلغاء تثبيت %1, يجب إعادة تشغيل الكمبيوتر.%n%nهل تريد إعادة تشغيل الآن؟ +UninstallDataCorrupted=الملف "%1" تالف. لا يمكن إزالة التثبيت + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=إزالة ملف مشترك؟ +ConfirmDeleteSharedFile2=يشير النظام إلى أن الملف المشترك التالي لم يعد في الاستخدام من قبل أي برامج. هل ترغب في أن يقوم إلغاء التثبيت بإزالة هذا الملف المشترك?%n%nإذا كانت أية برامج لا تزال تستخدم هذا الملف وتتم إزالته، قد لا تعمل هذه البرامج بشكل صحيح. إذا كنت غير متأكد، اختر لا. ترك الملف على النظام الخاص بك لن يسبب أي ضرر. +SharedFileNameLabel=اسم الملف: +SharedFileLocationLabel=الموقع : +WizardUninstalling=حالة إزالة التثبيت +StatusUninstalling=جاري إزالة تثبيت %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=جاري تثبيت %1. +ShutdownBlockReasonUninstallingApp=جاري تثبيت %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 الإصدار %2 +AdditionalIcons=اختصارات إضافية: +CreateDesktopIcon=إنشاء اختصار في &سطح المكتب +CreateQuickLaunchIcon=إنشاء اختصار "الت&شغيل السريع" +ProgramOnTheWeb=%1 على الأنترنت +UninstallProgram=إزالة تثبيت %1 +LaunchProgram=تشغيل %1 +AssocFileExtension=اربط %1 مع صيغة ملف %2 +AssocingFileExtension=جاري ربط %1 مع صيغة ملف %2 +AutoStartProgramGroupDescription=بدأ التشغيل: +AutoStartProgram=تشغيل %1 تلقائيا +AddonHostProgramNotFound= تعذر العثور على %1 في الموقع الذي إخترته.%n%nهل تريد المتابعة على أية حال؟ diff --git a/Files/Languages/Unofficial/Asturian.isl b/Files/Languages/Unofficial/Asturian.isl new file mode 100644 index 00000000..540df170 --- /dev/null +++ b/Files/Languages/Unofficial/Asturian.isl @@ -0,0 +1,292 @@ +; Translation made with Translator 1.32 (http://www2.arnes.si/~sopjsimo/translator.html) +; $Translator:NL=%n:TB=%t +; +; *** Inno Setup version 4.0.x Asturian messages *** +; +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/is3rdparty.php +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). +; +; $Id: asturian-4.0.6.isl,v 0.1 2003/09/17 22:14:19 jl Exp $ + +[LangOptions] +LanguageName=Asturianu +LanguageID=$0409 +; Si el lenguaje al cual est traduciendo requiere un tipo de letra o +; tamao, quite el comentario de alguna de las siguientes entradas y cmbielas segn el caso. +;DialogFontName=MS Shell Dlg +;DialogFontSize=8 +;DialogFontStandardHeight=13 +;TitleFontName=Arial +;TitleFontSize=29 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +CopyrightFontName=Arial +CopyrightFontSize=8 +[Messages] +; *** Application titles +SetupAppTitle=Instalar +SetupWindowTitle=Instalar - %1 +UninstallAppTitle=Desinstalar +UninstallAppFullTitle=Desinstalar - %1 + +; *** Misc. common +InformationTitle=Informacin +ConfirmTitle=Confirmar +ErrorTitle=Fallu + +; *** SetupLdr messages +SetupLdrStartupMessage=Instalarse %1. Quier seguir? +LdrCannotCreateTemp=Nun pudo crease l'archivu temporal. Instalacin parada +LdrCannotExecTemp=Nun s'execut l'archivu nel directoriu temporal. Instalacin parada + +; *** Startup error messages +LastErrorMessage=%1.%n%nFallu %2: %3 +SetupFileMissing=Nun s'alcuentra l'archivu %1 de la carpeta d'instalacin. Por favor, corrixa'l problema o garre otra copia del programa. +SetupFileCorrupt=Los archivos d'instalacin tan frayaos. Por favor, garre otra copia del programa. +SetupFileCorruptOrWrongVer=Los archivos d'instalacin tan frayaos, o son incompatibles cola su versin d'instalacin. Por favor, arregle'l fallu o garre otra copia del programa. +NotOnThisPlatform=Esti programa nun va furrular en %1. +OnlyOnThisPlatform=Esti programa tien que executase en %1. +WinVersionTooLowError=Esti programa necesita %1 versin %2 o superior. +WinVersionTooHighError=Esti programa nun furrula en %1 versin %2 o superior. +AdminPrivilegesRequired=Tien qu'entamar la sesin comu alministraor cuando instale esti programa. +PowerUserPrivilegesRequired=Tien que tar conectau comu Alministrador o ser miembru del grupu d'Usuarios Avanzaos pa instalar esti programa. +SetupAppRunningError=La instalacin detect que %1 ta executandose agora.%n%nPor favor, cirrelu, llueu calque Bien pa seguir, o Cancelar para colar. +UninstallAppRunningError=La desinstalacin detect que %1 ta executandose agora.%n%nPor favor, cirrelu, llueu calque Bien pa seguir, o Cancelar para colar. + +; *** Misc. errors +ErrorCreatingDir=Nun se pue facer la carpeta "%1" +ErrorTooManyFilesInDir=Nun se puede facer un archivu ena carpeta "%1" porque tien demasiaos archivos. + +; *** Setup common messages +ExitSetupTitle=Zarrar la Instalacin +ExitSetupMessage=La instalacin nun ta completa. Si la cierra agora, el programa nun s'instalar.%n%nPuede executar el programa d'instalacin otra veg pa completala.%n%nZarrar la Instalacin? +AboutSetupMenuItem=&Acerca d'Instalar... +AboutSetupTitle=Acerca d'Instalar +AboutSetupMessage=%1 versin %2%n%3%n%n%1 pxina web:%n%4 +AboutSetupNote= + +; *** Buttons +ButtonBack=< &Tornar +ButtonNext=&Seguir > +ButtonInstall=&Instalar +ButtonOK=Bien +ButtonCancel=Cancelar +ButtonYes=&S +ButtonYesToAll=S a &Tou +ButtonNo=&Non +ButtonNoToAll=N&on a Tou +ButtonFinish=&Finar +ButtonBrowse=&Examinar... + +; *** "Select Language" dialog messages +SelectLanguageTitle=Escueya l'idioma del instalaor +SelectLanguageLabel=Escueya l'idioma pala instalacin: + +; *** Common wizard text +ClickNext=Calque Seguir pa continuar, Cancelar pa colar. +BeveledLabel= + +; *** "Welcome" wizard page +WelcomeLabel1=Bienveniu al programa d'instalacin de [name]. +WelcomeLabel2=Esti programa instalar [name/ver] nel su sistema.%n%nRecomiendase enantes de seguir, zarrar toles dems aplicaciones que ten furrulando pa evitar conflictos durante la instalacin. + +; *** "Password" wizard page +WizardPassword=Contrasea +PasswordLabel1=Esta instalacin ta protexida. +PasswordLabel3=Por favor enxerte la su contrasea, calque'n Seguir para continuar. Les contrasees diferencien les mayscules de les minscules. +PasswordEditLabel=&Contrasea: +IncorrectPassword=La contrasea nun val. Por favor, intntelu otra veg. + +; *** "License Agreement" wizard page +WizardLicense=Contratu de Llicencia +LicenseLabel=Por favor, llea la siguiente informacin enantes de seguir. +LicenseLabel3=Por favor, llea detenidamente el siguiente contratu de llicencia. Tien que aceptar los trminos d'esti contratu enantes de seguir cola instalacin. +LicenseAccepted=A&ceptu'l contratu +LicenseNotAccepted=&Nun aceptu'll contratu + +; *** "Information" wizard pages +WizardInfoBefore=Informacin +InfoBeforeLabel=Por favor, llea la siguiente informacin enantes de seguir. +InfoBeforeClickLabel=Cuandu te llistu pa continuar cola instalacin, calque Seguir. +WizardInfoAfter=Informacin +InfoAfterLabel=Por favor, llea la siguiente informacin enantes de seguir. +InfoAfterClickLabel=Cuando te llistu pa continuar, calque Seguir. + +; *** "User Information" wizard page +WizardUserInfo=Informacin d'usuariu +UserInfoDesc=Por favor, introduzca la su informacin. +UserInfoName=Nome d'&Usuariu: +UserInfoOrg=&Organizacin/Empresa: +UserInfoSerial=Nmberu de &Serie: +UserInfoNameRequired=Tien qu'enxertar un nome. + +; *** "Select Destination Directory" wizard page +WizardSelectDir=Selecin de la Carpeta Destinu +SelectDirDesc=Au tien qu'instalase [name]? +SelectDirLabel=Escueya la carpeta ena que quier instalar [name] y calque Seguir. +DiskSpaceMBLabel=Necesita polo menos [mb] MB d'espaciu llibre en discu. +ToUNCPathname=Nun puede instalase nun directoriu UNC. Si quier instalar en rede, tien que mapear una unid de la rede. +InvalidPath=Tien qu'enxertar una ruta completa cola lletra d'unidad; por exemplu:%n%nC:\APP%n%no una ruta UNC de la siguiente mena:%n%n\\servior\compartiu +InvalidDrive=La unid o ruta UNC que elixi nun existe o nun ta accesible. Por favor, escueya otra. +DiskSpaceWarningTitle=Nun hay espaciu suficiente'n discu +DiskSpaceWarning=Necesita polo menos %1 KB de espaciu llibre pala instalacin, pero la unid que elixi nams tiene %2 KB llibres.%n%nQuier seguir? +BadDirName32=El nome de la carpeta nun puede incluir dalgun de los siguientes carauteres:%n%n%1 +DirExistsTitle=La Carpeta ya Existe +DirExists=La carpeta:%n%n%1%n%nya existe. Quier instalar n'esta carpeta ent? +DirDoesntExistTitle=La Carpeta Nun Existe +DirDoesntExist=La carpeta:%n%n%1%n%n nun existe. Quier facela? + +; *** "Select Components" wizard page +WizardSelectComponents=Selecin de Componentes +SelectComponentsDesc=Qu componentes tienen qu'instalase? +SelectComponentsLabel2=Escueya los componentes a instalar; desmarque los componentes que nun quier instalar. Calque Seguir cuandu tea llistu. +FullInstallation=Instalacin Completa +; Si es posible no traduzca 'Compacta' a 'Minima' (Me refiero a 'Minima' en su lenguaje) +CompactInstallation=Instalacin Compacta +CustomInstallation=Instalacin Personalizada +NoUninstallWarningTitle=Componentes Existentes +NoUninstallWarning=La Instalacin detect que los siguientes componentes tan instalaos ena computaora:%n%n%1%n%nDesmarcando estos componentes, nun s'instalarn.%n%nDesea continuar de todos modos? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceMBLabel=La seleccin fecha requier polo menos [mb] MB d'espaciu llibre'n discu. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Seleccin de Tarees Adicionales +SelectTasksDesc=Qu tarees adicionales tienen que realizase? +SelectTasksLabel2=Seleccione les tarees adicionales que quiera facer durante la instalacin de [name] y calque Seguir. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Seleccin de la carpeta del Men d'entamu +SelectStartMenuFolderDesc=Au tiene que pones los iconos de programa? +SelectStartMenuFolderLabel=Escueya la carpeta del Men d'entamu au quier que'l programa de instalacin faiga los iconos de programa y calque Seguir. +NoIconsCheck=&Nun facer nengn iconu +MustEnterGroupName=Tien qu'enxertar un nome de carpeta. +BadGroupName=El nome de la carpeta nun puede tener nengn de los siguientes caracteres:%n%n%1 +NoProgramGroupCheck2=&Nun facer grupu nel Men d'entamu + +; *** "Ready to Install" wizard page +WizardReady=Llistu pa Instalar +ReadyLabel1=Agora el programa ta llistu pa entamar la instalacin de [name]. +ReadyLabel2a=Calque Instalar pa seguir cola instalacin, o Tornar si quier revisar o camudar dalguna configuracin. +ReadyLabel2b=Calque Instalar para seguir cola instalacin. +ReadyMemoUserInfo=Informacin d'usuariu: +ReadyMemoDir=Carpeta de Destinu: +ReadyMemoType=Tipu d'Instalacin: +ReadyMemoComponents=Componentes Seleccionaos: +ReadyMemoGroup=Carpeta del Men d'entamu: +ReadyMemoTasks=Tarees Adicionales: + +; *** "Preparing to Install" wizard page +WizardPreparing=Preparndose pa Instalar +PreparingDesc=El programa ta preparandose pa instalar [name]. +PreviousInstallNotCompleted=La instalacin/desinstalacin previa d'otru programa nun fin. Tien que reiniciar l'equipu pa finar la instalacin.%n%nEncuantes reinicie la computaora, execute'l programa de nueu pa completar la instalacin de [name]. +CannotContinue=El programa nun puede continuar. Por favor, calque Cancelar pa colar. + +; *** "Installing" wizard page +WizardInstalling=Instalando +InstallingLabel=Por favor, espere mientres s'instala [name] en su computaora. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Finando la instalacin de [name] +FinishedLabelNoIcons=El programa fin la instalacin de [name]. +FinishedLabel=El programa fin la instalacin de [name]. Puede executar la aplicacin calcando'l iconu instalau. +ClickFinish=Calque Finar pa zarrar la Instalacin. +FinishedRestartLabel=Pa finar la instalacin de [name], tien que reiniciar la su computaora. Quier reiniciar agora? +FinishedRestartMessage=Pa finar la instalacin de [name], tien que reiniciar la su computaora.%n%nQuier reiniciar agora? +ShowReadmeCheck=S, quiero ver l'archivu LLAME. +YesRadio=&S, quiero reiniciar la computaora agora +NoRadio=&Non, yo reiniciar la computaora ms alantre +; used for example as 'Run MyProg.exe' +RunEntryExec=Executar %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Ver %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=La Instalacin Necesita el Siguiente Discu +SelectDirectory=Escueya Carpeta +SelectDiskLabel2=Por favor, enxerte'l Discu %1 y calque Bien.%n%nSi los archivos pueden alcontrase nuna carpeta diferente a la d'abaxo, plumie la ruta correuta o calque Examinar. +PathLabel=&Ruta: +FileNotInDir2=L'archivu "%1" nun puede localizase en "%2". Por favor, enxerte'l discu correutu o escueya otra carpeta. +SelectDirectoryLabel=Por favor, especifique la llocalizacin del siguiente discu. + +; *** Installation phase messages +SetupAborted=La instalacin nun pudo completase.%n%nPor favor, arregle'l fallu y execute Instalar otra veg. +EntryAbortRetryIgnore=Calque Reintentar pa intentalu de nueu, Omitir para continuar y que seya lo que dios quiera, o Anular pa finar la instalacin. + +; *** Installation status messages +StatusCreateDirs=Faciendo carpetas... +StatusExtractFiles=Copiando archivos... +StatusCreateIcons=Faciendo iconos del programa... +StatusCreateIniEntries=Faciendo entraes nel INI... +StatusCreateRegistryEntries=Faciendo entraes de rexistru... +StatusRegisterFiles=Rexistrando archivos... +StatusSavingUninstall=Guardando informacin pa desinstalar... +StatusRunProgram=Finando la instalacin... +StatusRollback=Desfaciendo cambios... + +; *** Misc. errors +ErrorInternal2=Fallu Internu: %1 +ErrorFunctionFailedNoCode=%1 fall +ErrorFunctionFailed=%1 fall; cdigu %2 +ErrorFunctionFailedWithMessage=%1 fall; cdigu %2.%n%3 +ErrorExecutingProgram=Nun puede executase l'archivu:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Fallu abriendo clave de rexistru:%n%1\%2 +ErrorRegCreateKey=Fallu faciendo clave de rexistru:%n%1\%2 +ErrorRegWriteKey=Fallu plumiando nuna clave de rexistru:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Fallu faciendo entrada nel archivu INI "%1". +; *** File copying errors +FileAbortRetryIgnore=Calque Reintentar pa intentalu otra veg, Omitir pa omitir esti archivu (nun recomendau), o Anular pa cancelar la instalacin. +FileAbortRetryIgnore2=Calque Reintentar pa intentalu otra veg, Ignorar pa seguir de cualisquier mena (nun recomendau), o Anular pa finar la instalacin. +SourceIsCorrupted=L'archivu d'orixen ta daau +SourceDoesntExist=L'archivu d'orixen "%1" nun existe +ExistingFileReadOnly=L'archivu existente ta marcau comu namas-llectura.%n%nCalque Reintentar pa quitar l'atributu namas-llectura y intentalu otra veg, Ignorar pa omitir esti archivu, o Anular pa finar la instalacin. +ErrorReadingExistingDest=Hebo un fallu al lleer l'archivu existente: +FileExists=L'archivu ya existe.%n%nQuier machacalu? +ExistingFileNewer=L'archivu existente ye ms modernu que'l que ta instalando. Sera meyor dexar l'archivu existente.%n%nQuier dexar l'archivu existente? +ErrorChangingAttr=Hebo un fallu al camudar los atributos del archivu: +ErrorCreatingTemp=Hebo un fallu al facer un archivu ena carpeta de destinu: +ErrorReadingSource=Hebo un fallu al lleer l'archivu d'orixen: +ErrorCopying=Hebo un fallu al copiar l'archivu: +ErrorReplacingExistingFile=Hebo un fallu al machacar l'archivu: +ErrorRestartReplace=Nun pudo machacase: +ErrorRenamingTemp=Hebo un fallu al renomar un archivu ena carpeta de destin: +ErrorRegisterServer=Nun pudo rexistrar el DLL/OCX: %1 +ErrorRegisterServerMissingExport=Nun s'alcuentra DllRegisterServer export +ErrorRegisterTypeLib=Nun pudo rexistrar la llibrera de tipu: %1 + +; *** Post-installation errors +ErrorOpeningReadme=Hebo un fallu tratando d'abrir l'archivu LLAME. +ErrorRestartingComputer=El programa d'Instalacin nun puede reiniciar la computaora. Por favor, figalo manualmente. + +; *** Uninstaller messages +UninstallNotFound=L'archivu "%1" nun existe. Nun puede desinstalase. +UninstallOpenError=Archivu "%1" nun pudo abrise. Nun puede desinstalase. + +; *** Uninstallation phase messages +UninstallUnsupportedVer=L'archivu de rexistru pa desinstalar "%1" ta nun formatu nun reconociu por esta versin de desinstalar. Nun puede desinstalase +UninstallUnknownEntry=Alcontrose una entrada desconocia (%1) nel rexistru pa desinstalar +ConfirmUninstall=Ta seguru que quier esborrar %1 y tolos sus componentes? +OnlyAdminCanUninstall=Esti programa nams pue desinstalalu un usuariu con privilexios d'alministraor. +UninstallStatusLabel=Por favor, espere demientres %1 quitase de su computaora. +UninstalledAll=%1 quitose de su computaora. +UninstalledMost=La desinstalacin de %1 fin.%n%nDalgunes coses nun pudieron esborrase. Pue ust quitales manualmente. +UninstalledAndNeedsRestart=Pa finar la desinstalacin de %1, la tien que reiniciar la computaora.%n%nQuier reiniciala agora? +UninstallDataCorrupted=L'archivu "%1" ta frayau. Nun puede desinstalase. +ConfirmDeleteSharedFileTitle=Quitar Archivos Compartios? +ConfirmDeleteSharedFile2=El sistema diz que esti archivu compartiu nun lo usa nengn otru programa. Quier quitar esti archivu compartiu?%n%nSi otros programes usen esti archivu y lo quita, podien dexar de furrular bien. Si nun ta seguru, escueya Non. Si nun quita l'archivu nu fair nengn dau. +SharedFileNameLabel=Nome d'archivu: +SharedFileLocationLabel=Llocalizacin: +WizardUninstalling=Estau de la Desinstalacin +StatusUninstalling=Desinstalando %1... diff --git a/Files/Languages/Unofficial/Basque.isl b/Files/Languages/Unofficial/Basque.isl new file mode 100644 index 00000000..a4b9cebe --- /dev/null +++ b/Files/Languages/Unofficial/Basque.isl @@ -0,0 +1,339 @@ +; *** Inno Setup version 5.5.3+ Basque messages *** +; +; Basque Translation: (EUS_Xabier Aramendi) (azpidatziak@gmail.com) +; +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Euskara +LanguageID=$042d +LanguageCodePage=0 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Ezarpena +SetupWindowTitle=Ezarpena - %1 +UninstallAppTitle=Kentzea +UninstallAppFullTitle=Kentzea - %1 + +; *** Misc. common +InformationTitle=Argibideak +ConfirmTitle=Baieztatu +ErrorTitle=Akatsa + +; *** SetupLdr messages +SetupLdrStartupMessage=Honek %1 ezarriko du. Jarraitzea nahi duzu? +LdrCannotCreateTemp=Ezinezkoa aldibaterako agiri bat sortzea. Ezarpena utzita +LdrCannotExecTemp=Ezinezkoa agiria exekutatzea aldibaterako zuzenbidean. Ezarpena utzita + +; *** Startup error messages +LastErrorMessage=%1.%n%nAkatsa %2: %3 +SetupFileMissing=%1 agiria ez dago ezarpen zuzenbidean. Mesedez zuzendu arazoa edo lortu programaren kopia berri bat. +SetupFileCorrupt=Ezarpen agiriak hondatuta daude. Mesedez lortu programaren kopia berri bat. +SetupFileCorruptOrWrongVer=Ezarpen agiriak hondatuta daude, edo bateraezinak dira Ezartzaile bertsio honekin. Mesedez zuzendu arazoa edo lortu programaren kopia berri bat. +InvalidParameter=Parametro baliogabe bat igaro da komando lerroan:%n%n%1 +SetupAlreadyRunning=Ezarpena jadanik ekinean dago. +WindowsVersionNotSupported=Programa honek ez du zure ordenagailuan ekinean dagoen Windows bertsioa sostengatzen. +WindowsServicePackRequired=Programa honek %1 Service Pack %2 edo berriagoa behar du. + + +NotOnThisPlatform=Programa honek ez du ekingo hemen: %1. +OnlyOnThisPlatform=Programa hau hemen ekin behar da: %1. +OnlyOnTheseArchitectures=Programa hau hurrengo Windows arkitekturatarako diseinaturiko bertsioetan bakarrik ezarri daiteke:%n%n%1 +MissingWOW64APIs=Erabiltzen ari zaren Windows bertsioak ez du Ezartzaileak 64-biteko ezarpen bat egiteko behar dituen eginkizunak barneratzen. Arazo hau zuzentzeko, mesedez ezarri Service Pack %1. +WinVersionTooLowError=Programa honek %1 bertsioa %2 edo berriagoa behar du. +WinVersionTooHighError=Programa hau ezin da %1 bertsioa %2 edo berriagoan ezarria izan. +AdminPrivilegesRequired=Administrari bezala izena-emanda egon behar zara programa hau ezartzeko. +PowerUserPrivilegesRequired=Administrari bezala izena-emanda edo Boteredun Erabiltzaile taldeko kide bezala egon behar zara programa hau ezartzerakoan. +SetupAppRunningError=Ezartzaileak %1 ekinean dagoela atzeman du.%n%nMesedez itxi bere eskabide guztiak orain, orduan klikatu Ongi jarritzeko, edo Ezeztatu irtetzeko. +UninstallAppRunningError=Kentzaileak %1 ekinean dagoela atzeman du.%n%nMesedez itxi bere eskabide guztiak orain, orduan klikatu Ongi jarritzeko, edo Ezeztatu irtetzeko. + +; *** Misc. errors +ErrorCreatingDir=Ezartzaileak ezin izan du zuzenbidea sortu "%1" +ErrorTooManyFilesInDir=Ezinezkoa agiri bat sortzea "%1" zuzenbidean agiri gehiegi dituelako + +; *** Setup common messages +ExitSetupTitle=Irten Ezartzailetik +ExitSetupMessage=Ezarpena ez dago osatuta. Orain irtetzen bazara, programa ez da ezarriko.%n%nEzartzailea berriro edonoiz abiatu dezakezu ezarpena osatzeko.%n%nIrten Ezartzailetik? +AboutSetupMenuItem=&Ezartzaileari buruz... +AboutSetupTitle=Ezartzaileari buruz +AboutSetupMessage=%1 bertsioa %2%n%3%n%n%1 webgunea:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< &Atzera +ButtonNext=&Hurrengoa > +ButtonInstall=&Ezarri +ButtonOK=Ongi +ButtonCancel=Ezeztatu +ButtonYes=&Bai +ButtonYesToAll=Bai &Guztiari +ButtonNo=&Ez +ButtonNoToAll=E&z Guztiari +ButtonFinish=A&maitu +ButtonBrowse=&Bilatu... +ButtonWizardBrowse=B&ilatu... +ButtonNewFolder=Egi&n Agiritegi Berria + +; *** "Select Language" dialog messages +SelectLanguageTitle=Hautatu Ezarpen Hizkuntza +SelectLanguageLabel=Hautatu ezarpenean zehar erabiltzeko hizkuntza: + +; *** Common wizard text +ClickNext=Klikatu Hurrengoa jarraitzeko, edo Ezeztatu Ezartzailetik irtetzeko +BeveledLabel= +BrowseDialogTitle=Bilatu Agiritegia +BrowseDialogLabel=Hautatu agiritegi bat azpiko zerrendan, orduan klikatu Ongi +NewFolderName=Agiritegi Berria + +; *** "Welcome" wizard page +WelcomeLabel1=Ongi etorria [name] Ezarpen Laguntzailera +WelcomeLabel2=Honek [name/ver] zure ordenagailuan ezarriko du.%n%nGomendagarria da beste aplikazio guztiak istea jarraitu aurretik. + +; *** "Password" wizard page +WizardPassword=Sarhitza +PasswordLabel1=Ezarpen hau sarhitzez babestuta dago. +PasswordLabel3=Mesedez eman sarhitza, orduan klikatu Hurrengoa jarraitzeko. Sarhitzek hizki larri-xeheak bereizten dituzte. +PasswordEditLabel=&Sarhitza: +IncorrectPassword=Eman duzun sarhitza ez da zuzena. Mesedez saiatu berriro. + +; *** "License Agreement" wizard page +WizardLicense=Baimen Ituna +LicenseLabel=Mesedez irakurri hurrengo argibide garrantzitsuak jarraitu aurretik. +LicenseLabel3=Mesedez irakurri hurrengo Baimen Ituna. Itun honen baldintzak onartu behar dituzu ezarpenarekin jarraitu aurretik. +LicenseAccepted=&Onartzen dut ituna +LicenseNotAccepted=&Ez dut onartzen ituna + +; *** "Information" wizard pages +WizardInfoBefore=Argibideak +InfoBeforeLabel=Mesedez irakurri hurrengo argibide garrantzitsuak jarraitu aurretik. +InfoBeforeClickLabel=Ezarpenarekin jarraitzeko gertu zaudenean, klikatu Hurrengoa. +WizardInfoAfter=Argibideak +InfoAfterLabel=Mesedez irakurri hurrengo argibide garrantzitsuak jarraitu aurretik. +InfoAfterClickLabel=Ezarpenarekin jarraitzeko gertu zaudenean, klikatu Hurrengoa. + +; *** "User Information" wizard page +WizardUserInfo=Erabailtzaile Argibideak +UserInfoDesc=Mesedez sartu zure argibideak +UserInfoName=&Erabiltzaile Izena: +UserInfoOrg=&Antolakundea: +UserInfoSerial=&Serie Zenbakia: +UserInfoNameRequired=Izen bat sartu behar duzu. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Hautatu Helmuga Kokalekua +SelectDirDesc=Non ezarri behar da [name]? +SelectDirLabel3=Ezartzaileak [name] hurrengo agiritegian ezarriko du. +SelectDirBrowseLabel=Jarraitzeko, klikatu Hurrengoa. Beste agiritegi bat hautatzea nahi baduzu, klikatu Bilatu. +DiskSpaceMBLabel=Gutxienez [mb] MB-eko toki askea behar da diska gogorrean. +CannotInstallToNetworkDrive=Ezarpena ezin da sare gidagailu batean egin. +CannotInstallToUNCPath=Ezarpena ezin da UNC helburu batean egin. +InvalidPath=Helburu osoa gidagailu hizkiarekin sartu behar duzu; adibidez:%n%nC:\APP%n%nedo UNC helburu bat forma honetan:%n%n\\server\share +InvalidDrive=Hautatu duzun gidagailua edo UNC elkarbanaketa ez dago edo sarbidea ezinezkoa da. Mesedez hautatu beste bat. +DiskSpaceWarningTitle=Ez Dago Nahikoa Toki Diskan +DiskSpaceWarning=Ezarpenak gutxienez %1 KB-eko toki askea behar du ezartzeko, baina hautaturiko gidagailuak %2 KB bakarrik ditu eskuragarri.%n%nHorrela ere jarraitzea nahi duzu? +DirNameTooLong=Agiritegi izena edo helburua luzeegia da. +InvalidDirName=Agiritegi izena ez da baliozkoa. +BadDirName32=Agiritegi izenek ezin dute hurrengo hizkietako bat ere izan:%n%n%1 +DirExistsTitle=Agiritegia Badago +DirExists=Agiritegia:%n%n%1%n%njadanik badago. Horrela ere agiritegi horretan ezartzea nahi duzu? +DirDoesntExistTitle=Agiritegia Ez Dago +DirDoesntExist=Agiritegia:%n%n%1%n%nez dago. Nahi duzu agiritegia sortzea? + +; *** "Select Components" wizard page +WizardSelectComponents=Hautatu Osagaiak +SelectComponentsDesc=Zer osagai ezarri behar dira? +SelectComponentsLabel2=Hautatu ezartzea nahi dituzun osagaiak; garbitu ezartzea nahi ez dituzun osagaiak. Klikatu Hurrengoa jarraitzeko gertu zaudenean. +FullInstallation=Ezarpen osoa +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Ezarpen trinkoa +CustomInstallation=Norbere ezarpena +NoUninstallWarningTitle=Osagaiak Badaude +NoUninstallWarning=Ezartzaileak atzeman du hurrengo osagaiak jadanik zure ordenagailuan ezarrita daudela:%n%n%1%n%nOsagai hauek deshautatuz gero ez dira ezarriko.%n%nHorrela ere jarraitzea nahi duzu? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceMBLabel=Oraingo hautapenak gutxienez [mb] MB-eko tokia behar du diskan. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Hautatu Eginkizun Gehigarriak +SelectTasksDesc=Zer eginkizun gehigarri burutu behar dira? +SelectTasksLabel2=Hautatu Ezartzaileak [name]-ren ezarpenean zehar burutzea nahi dituzun eginkizun gehigarriak, orduan klikatu Hurrengoa + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Hautatu Hasiera Menuko Agiritegia +SelectStartMenuFolderDesc=Non ezarri behar ditu Ezartzaileak programaren lasterbideak? +SelectStartMenuFolderLabel3=Ezartzaileak programaren lasterbideak hurrengo Hasiera Menuko agiritegian sortuko ditu. +SelectStartMenuFolderBrowseLabel=Jarraitzeko, klikatu Hurrengoa. Beste agiritegi bat hautatzea nahi baduzu, klikatu Bilatu. +MustEnterGroupName=Agiritegi izen bat sartu behar duzu. +GroupNameTooLong=Agiritegi izena edo helburua luzeegia da. +InvalidGroupName=Agiritegi izena ez da baliozkoa. +BadGroupName=Agiritegi izenak ezin du hurrengo hizkietako bat ere izan:%n%n%1 +NoProgramGroupCheck2=&Ez sortu Hasiera Menuko agiritegia + +; *** "Ready to Install" wizard page +WizardReady=Ezartzeko Gertu +ReadyLabel1=Ezartzailea orain gertu dago [name] zure ordenagailuan ezartzeko. +ReadyLabel2a=Klikatu Ezarri ezarpenarekin jarraitzeko, edo klikatu Atzera ezarpenen bat berrikustea edo aldatzea nahi baduzu. +ReadyLabel2b=Klikatu Ezarri ezarpenarekin jarraitzeko. +ReadyMemoUserInfo=Erabiltzaile argibideak: +ReadyMemoDir=Helmuga kokalekua: +ReadyMemoType=Ezarpen mota: +ReadyMemoComponents=Hautaturiko osagaiak: +ReadyMemoGroup=Hasiera Menuko agiritegia: +ReadyMemoTasks=Eginkizun gehigarriak: + +; *** "Preparing to Install" wizard page +WizardPreparing=Ezartzeko Gertatzen +PreparingDesc=Ezartzailea [name] zure ordenagailuan ezartzeko gertatzen ari da. +PreviousInstallNotCompleted=Aurreko programaren ezartze/kentzea ez dago osatuta. Zure ordenagailua berrabiarazi behar duzu ezarpena osatzeko.%n%nZure ordenagailua berrabiarazi ondoren, ekin Ezartzailea berriro [name]-ren ezarpena osatzeko. +CannotContinue=Ezarpenak ezin du jarraitu. Mesedez klikatu Ezeztatu irtetzeko. +ApplicationsFound=Hurrengo aplikazioak Ezartzaileak eguneratu behar dituen agiriak erabiltzen ari dira. Gomendagarria da Ezartzaileari aplikazio hauek berezgaitasunez istea ahalbidetzea. +ApplicationsFound2=Hurrengo aplikazioak Ezartzaileak eguneratu behar dituen agiriak erabiltzen ari dira. Gomendagarria da Ezartzaileari aplikazio hauek berezgaitasunez istea ahalbidetzea. Ezarpena osatu ondoren, Ezartzailea aplikazioak berrabiarazten saiatuko da. +CloseApplications=&Berezgaitasunez itxi aplikazioak +DontCloseApplications=&Ez itxi aplikazioak +ErrorCloseApplications=Ezartzaileak ezin ditu berezgaitasunez aplikazio guztiak itxi. Gomendagarria da Ezartzaileak eguneratu behar dituen agiriak erabiltzen ari diren aplikazio guztiak istea jarraitu aurretik. + +; *** "Installing" wizard page +WizardInstalling=Ezartzen +InstallingLabel=Mesedez itxaron Ezartzaileak [name] zure ordenagailuan ezartzen duen bitartean. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=[name] Ezarpen Laguntzailea osatzen +FinishedLabelNoIcons=Ezartzaileak amaitu du [name] zure ordenagailuan ezartzeaz. +FinishedLabel=Ezartzaileak amaitu du [name] zure ordenagailuan ezartzea. Aplikazioa ezarritako ikurren bidez abiarazi daiteke. +ClickFinish=Klikatu Amaitu Ezartzailetik irtetzeko. +FinishedRestartLabel=[name]-ren ezarpena osatzeko, Ezartzaileak zure ordenagailua berrabiarazi behar du. Orain berrabiaraztea nahi duzu? +FinishedRestartMessage=[name]-ren ezarpena osatzeko, Ezartzaileak zure ordenagailua berrabiarazi behar du.%n%nOrain berrabiaraztea nahi duzu? +ShowReadmeCheck=Bai, IRAKURRI agiria ikustea nahi dut +YesRadio=&Bai, berrabiarazi ordenagailua orain +NoRadio=&Ez, geroago berrabiaraziko dut ordenagailua +; used for example as 'Run MyProg.exe' +RunEntryExec=Ekin %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Ikusi %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Ezarpenak Hurrengo Diska Behar Du +SelectDiskLabel2=Mesedez txertatu %1 Diska eta klikatu Ongi.%n%nDiska honetako agiriak azpian erakutsitakoa ez den beste agiritegi batean aurkitu badaitezke, sartu helburu zuzena edo klikatu Bilatu. +PathLabel=&Helburua: +FileNotInDir2="%1" agiria ezin da hemen aurkitu: "%2". Mesedez txertatu diska zuzena edo hautatu beste agiritegi bat. +SelectDirectoryLabel=Mesedez adierazi hurrengo diskaren kokalekua. + +; *** Installation phase messages +SetupAborted=Ezarpena ez da osatu.%n%nMesedez zuzendu arazoa eta ekin Ezartzailea berriro. +EntryAbortRetryIgnore=Klikatu Bersaiatu berriro saiatzeko, Ezikusi horrela ere jarraitzeko, edo Utzi ezarpena ezeztatzeko. + +; *** Installation status messages +StatusClosingApplications=Aplikazioak isten... +StatusCreateDirs=Zuzenbideak sortzen... +StatusExtractFiles=Agiriak ateratzen... +StatusCreateIcons=Lasterbideak sortzen... +StatusCreateIniEntries=INI sarrerak sortzen... +StatusCreateRegistryEntries=Erregistro sarrerak sortzen... +StatusRegisterFiles=Agiriak erregistratzen... +StatusSavingUninstall=Kentze argibideak gordetzen... +StatusRunProgram=Ezarpena amaitzen... +StatusRestartingApplications=Aplikazioak berrabiarazten... +StatusRollback=Aldaketak leheneratzen... + +; *** Misc. errors +ErrorInternal2=Barneko akatsa: %1 +ErrorFunctionFailedNoCode=%1 hutsegitea +ErrorFunctionFailed=%1 hutsegitea; kodea %2 +ErrorFunctionFailedWithMessage=%1 hutsegitea; kodea %2.%n%3 +ErrorExecutingProgram=Ezinezkoa agiria exekutatzea:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Akatsa erregistro giltza irekitzerakoan:%n%1\%2 +ErrorRegCreateKey=Akatsa erregistro giltza sortzerakoan:%n%1\%2 +ErrorRegWriteKey=Akatsa erregistro giltza idazterakoan:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Akatsa INI sarrera "%1" agirian sortzerakoan. + +; *** File copying errors +FileAbortRetryIgnore=Klikatu Bersaiatu berriro saitzeko, Ezikusi agiri hau jauzteko (ez da gomendatua), edo Utzi ezarpena ezeztatzeko. +FileAbortRetryIgnore2=Klikatu Bersaiatu berriro saitzeko, Ezikusi horrela ere jarraitzeko (ez da gomendatua), edo Utzi ezarpena ezeztatzeko. +SourceIsCorrupted=Iturburu agiria hondatuta dago. +SourceDoesntExist="%1" iturburu agiria ez dago +ExistingFileReadOnly=Dagoen agiria irakurtzeko-bakarrik bezala markatuta dago.%n%nKlikatu Bersaiatu irakurtzeko-bakarrik ezaugarria kentzeko eta saiatu berriro, Ezikusi agiri hau jauzteko, edo Utzi ezarpena ezeztatzeko. +ErrorReadingExistingDest=Akats bat gertatu da dagoen agiria irakurtzen saiatzerakoan: +FileExists=Agiria jadanik badago.%n%nNahi duzu Ezartzaileak gainidaztea? +ExistingFileNewer=Dagoen agiria Ezartzailea ezartzen saiatzen ari dena baino berriagoa da. Gomendagarria da dagoen agiriari heustea.%n%nDagoen agiriari heustea nahi diozu? +ErrorChangingAttr=Akats bat gertatu da dagoen agiriaren ezaugarriak aldatzen saiatzerakoan: +ErrorCreatingTemp=Akats bat gertatu da helmuga zuzenbidean agiri bat sortzen saiatzerakoan: +ErrorReadingSource=Akats bat gertatu da iturburu agiria irakurtzen saiatzerakoan: +ErrorCopying=Akats bat gertatu da agiri bat kopiatzen saiatzerakoan: +ErrorReplacingExistingFile=Akats bat gertatu da dagoen agiria ordezten saiatzerakoan: +ErrorRestartReplace=Berrabiarazte-Ordezte hutsegitea: +ErrorRenamingTemp=Akats bat gertatu da helmuga zuzenbideko agiri bat berrizendatzen saiatzerakoan: +ErrorRegisterServer=Ezinezkoa DLL/OCX erregistratzea: %1 +ErrorRegSvr32Failed=RegSvr32 hutsegitea %1 irteera kodearekin +ErrorRegisterTypeLib=Ezinezkoa liburutegi mota erregistratzea: %1 + +; *** Post-installation errors +ErrorOpeningReadme=Akats bat gertatu da IRAKURRI agiria irekitzen saiatzerakoan. +ErrorRestartingComputer=Ezartzaileak ezin du ordenagailua berrabiarazi. Mesedez egin hau eskuz. + +; *** Uninstaller messages +UninstallNotFound="%1" agiria ez dago. Ezinezkoa kentzea +UninstallOpenError="%1" agiria ezin da ireki. Ezinezkoa kentzea +UninstallUnsupportedVer="%1" kentze ohar agiria kentzaile bertsio honek ezagutzen ez duen heuskarri batean dago. Ezinezkoa kentzea. +UninstallUnknownEntry=Sarrera ezezagun bat (%1) aurkitu da kentze oharrean +ConfirmUninstall=Zihur zaude %1 eta bere osagai guztiak erabat kentzea nahi dituzula? +UninstallOnlyOnWin64=Ezarpen hau 64-biteko Windows-etik bakarrik kendu daiteke. +OnlyAdminCanUninstall=Ezarpen hau administrari pribilegioak dituen erabiltzaile batek bakarrik kendu dezake. +UninstallStatusLabel=Mesedez itxaron %1 zure ordenagailutik kentzen den bitartean. +UninstalledAll=%1 ongi kendu da zure ordenagailutik. +UninstalledMost=%1-ren kentzea osatuta.%n%nZenbait gai ezin izan dira kendu. Hauek eskuz kendu daitezke. +UninstalledAndNeedsRestart=%1-ren kentzea osatzeko, zure ordenagailua berrabiarazi behar duzu.%n%nOrain berrabiaraztea nahi duzu? +UninstallDataCorrupted="%1" agiria hondatuta da. Ezinezkoa kentzea + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Ezabatu Agiri Elkarbanatua? +ConfirmDeleteSharedFile2=Sistemaren arabera hurrengo agiri elkarbanatua ez du inongo programak erabiliko hemendik aurrera. Kentzaileak agiri hau ezabatu dezan nahi duzu?%n%nProgramaren bat agiri hau erabiltzen ari da oraindik eta ezabatzen baduzu, programa hori ez da egoki ibiliko. Zihur ez bazaude, hautatu Ez. Agiria sisteman uzteak ez du inongo kalterik eragingo. +SharedFileNameLabel=Agiri izena: +SharedFileLocationLabel=Kokalekua: +WizardUninstalling=Kentze Egoera +StatusUninstalling=Kentzen %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Ezartzen %1. +ShutdownBlockReasonUninstallingApp=Kentzen %1. +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] +;Inno Setup Built-in Custom Messages +NameAndVersion=%1 %2 bertsioa +AdditionalIcons=Ikur gehigarriak: +CreateDesktopIcon=Sortu &mahaigain ikurra +CreateQuickLaunchIcon=Sortu &Abiarazpen Azkarreko ikurra +ProgramOnTheWeb=%1 Webean +UninstallProgram=Kendu %1 +LaunchProgram=Abiarazi %1 +AssocFileExtension=&Elkartu %1 programa %2 agiri luzapenarekin +AssocingFileExtension=%1 programa %2 agiri luzapenarekin elkartzen... +AutoStartProgramGroupDescription=Abirazpena: +AutoStartProgram=Berezgaitasunez abiarazi %1 +AddonHostProgramNotFound=%1 ezin da aurkitu hautatu duzun agiritegian.%n%nHorrela ere jarraitzea nahi duzu? diff --git a/Files/Languages/Unofficial/Belarusian.isl b/Files/Languages/Unofficial/Belarusian.isl new file mode 100644 index 00000000..22f998da --- /dev/null +++ b/Files/Languages/Unofficial/Belarusian.isl @@ -0,0 +1,353 @@ +; *** Inno Setup version 6.1.0+ Belarusian messages *** +; +; Translated from English by Alyaksandr Koshal, alk85@pm.me +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +LanguageName=<0411><0435><043B><0430><0440><0443><0441><043A><0430><044F> +LanguageID=$0423 +LanguageCodePage=1251 + +[Messages] + +; *** Application titles +SetupAppTitle=Усталяванне +SetupWindowTitle=Усталяванне: %1 +UninstallAppTitle=Выдаленне +UninstallAppFullTitle=Выдаленне %1 + +; *** Misc. common +InformationTitle=Інфармацыя +ConfirmTitle=Пацвярджэнне +ErrorTitle=Памылка + +; *** SetupLdr messages +SetupLdrStartupMessage=Гэта праграма ўсталюе %1 на ваш камп'ютар. Працягнуць? +LdrCannotCreateTemp=Немагчыма стварыць часовы файл. Усталяванне перарвана +LdrCannotExecTemp=Немагчыма выканаць файл у часовым каталогу. Усталяванне перарвана +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nПамылка %2: %3 +SetupFileMissing=Файл %1 адсутнічае ў каталогу ўсталявання. Вырашыце праблему або атрымайце новую версію праграмы. +SetupFileCorrupt=Файлы праграмы ўсталявання пашкоджаны. Атрымайце новую копію праграмы. +SetupFileCorruptOrWrongVer=Файлы праграмы ўсталявання пашкоджаны або несумяшчальны з гэтай версіяй праграмы. Вырашыце праблему або атрымайце новую копію праграмы. +InvalidParameter=Камандны радок змяшчае памылковы параметр:%n%n%1 +SetupAlreadyRunning=Праграма ўсталявання ўжо выконваецца. +WindowsVersionNotSupported=Гэта праграма не падтрымлівае версію Windows, якая ўсталявана на вашым камп'ютары. +WindowsServicePackRequired=Гэта праграма патрабуе %1 Service Pack %2 або больш новую версію. +NotOnThisPlatform=Гэта праграма не будзе працаваць у %1. +OnlyOnThisPlatform=Гэту праграму можна запускаць толькі ў %1. +OnlyOnTheseArchitectures=Усталёўваць праграму можна толькі ў версіях Windows для працэсараў з наступнай архітэктурай:%n%n%1 +WinVersionTooLowError=Гэта праграма патрабуе %1 версіі %2 або больш новую версію. +WinVersionTooHighError=Праграму нельга ўсталяваць у %1 версіі %2 або больш новай. +AdminPrivilegesRequired=Каб усталяваць гэту праграму, увайдзіце ў сістэму як адміністратар. +PowerUserPrivilegesRequired=Каб усталяваць гэту праграму, увайдзіце ў сістэму як адміністратар або як удзельнік групы "Дасведчаныя карыстальнікі" (Power Users). +SetupAppRunningError=Праграма ўсталявання выявіла запушчаны экзэмпляр %1.%n%nЗакрыйце ўсе экзэмпляры праграмы і націсніце "Добра", каб працягнуць, або "Скасаваць" для выхаду. +UninstallAppRunningError=Праграма выдалення выявіла запушчаны экзэмпляр %1.%n%nЗакрыйце ўсе экзэмпляры праграмы і націсніце "Добра", каб працягнуць або "Скасаваць", каб выйсці. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Выбар рэжыму ўсталявання +PrivilegesRequiredOverrideInstruction=Выберыце рэжым усталявання +PrivilegesRequiredOverrideText1=%1 можа быць усталяваны для ўсіх карыстальнікаў (патрабуюцца правы адміністратара) або толькі для вас. +PrivilegesRequiredOverrideText2=%1 можа быць усталяваны толькі для вас або для ўсіх карыстальнікаў (патрабуюцца правы адміністратара). +PrivilegesRequiredOverrideAllUsers=Усталяваць для &ўсіх карыстальнікаў +PrivilegesRequiredOverrideAllUsersRecommended=Усталяваць для &ўсіх карыстальнікаў (рэкамендуецца) +PrivilegesRequiredOverrideCurrentUser=Усталяваць толькі для &мяне +PrivilegesRequiredOverrideCurrentUserRecommended=Усталяваць толькі для &мяне (рэкамендуецца) + +; *** Misc. errors +ErrorCreatingDir=Праграма ўсталявання не змагла стварыць каталог "%1" +ErrorTooManyFilesInDir=Немагчыма стварыць файл у каталогу "%1", бо ў ім занадта шмат файлаў + +; *** Setup common messages +ExitSetupTitle=Выйсці з праграмы ўсталявання +ExitSetupMessage=Праграма ўсталявання не завяршыла сваю працу. Калі выйсці, праграма не будзе ўсталявана.%n%nЗавяршыць працэс можна будзе, калі вы запусціце файл усталявання яшчэ раз.%n%nВыйсці зараз? +AboutSetupMenuItem=&Пра праграму... +AboutSetupTitle=Пра праграму +AboutSetupMessage=%1 версія %2%n%3%n%n%1 хатняя старонка:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< &Назад +ButtonNext=&Далей > +ButtonInstall=&Усталяваць +ButtonOK=Добра +ButtonCancel=Скасаваць +ButtonYes=&Так +ButtonYesToAll=Так для &ўсіх +ButtonNo=&Не +ButtonNoToAll=Н&е для ўсіх +ButtonFinish=&Завяршыць +ButtonBrowse=&Агляд... +ButtonWizardBrowse=&Агляд... +ButtonNewFolder=&Стварыць новую папку + +; *** "Select Language" dialog messages +SelectLanguageTitle=Выберыце мову ўсталявання +SelectLanguageLabel=Выберыце мову, якая будзе выкарыстоўвацца падчас усталявання: + +; *** Common wizard text +ClickNext=Каб працягнуць, націсніце "Далей". Каб выйсці з праграмы ўсталявання, націсніце "Скасаваць". +BeveledLabel= +BrowseDialogTitle=Агляд папак +BrowseDialogLabel=Выберыце папку са спіса і націсніце "Добра". +NewFolderName=Новая папка + +; *** "Welcome" wizard page +WelcomeLabel1=Вас вітае майстар усталявання [name] +WelcomeLabel2=Праграма ўсталюе [name/ver] на ваш камп'ютар.%n%nПерад тым як працягнуць, рэкамендуем закрыць усе іншыя праграмы. + +; *** "Password" wizard page +WizardPassword=Пароль +PasswordLabel1=Гэта праграма абаронена паролем. +PasswordLabel3=Увядзіце пароль і націсніце "Далей". Паролі неабходна ўводзіць з улікам рэгістра. +PasswordEditLabel=&Пароль: +IncorrectPassword=Вы ўвялі няправільны пароль. Паспрабуйце яшчэ раз. + +; *** "License Agreement" wizard page +WizardLicense=Ліцэнзійнае пагадненне +LicenseLabel=Перад тым як працягнуць, калі ласка, прачытайце наступную важную інфармацыю. +LicenseLabel3=Калі ласка, прачытайце наступнае Ліцэнзійнае пагадненне. Вам неабходна пагадзіцца з ім перад тым, як працягнуць усталяванне. +LicenseAccepted=Я &прымаю ўмовы пагаднення +LicenseNotAccepted=Я &не прымаю ўмовы пагаднення + +; *** "Information" wizard pages +WizardInfoBefore=Інфармацыя +InfoBeforeLabel=Перад тым як працягнуць, прачытайце наступную важную інфармацыю. +InfoBeforeClickLabel=Калі вы будзеце гатовы працягнуць усталяванне, націсніце "Далей". +WizardInfoAfter=Інфармацыя +InfoAfterLabel=Перад тым як працягнуць, прачытайце наступную важную інфармацыю. +InfoAfterClickLabel=Калі вы будзеце гатовы працягнуць усталяванне, націсніце "Далей". + +; *** "User Information" wizard page +WizardUserInfo=Інфармацыя пра карыстальніка +UserInfoDesc=Увядзіце інфармацыю пра сябе. +UserInfoName=&Імя карыстальніка: +UserInfoOrg=&Арганізацыя: +UserInfoSerial=&Серыйны нумар: +UserInfoNameRequired=Неабходна ўвесці імя. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Выбар папкі ўсталявання +SelectDirDesc=У якую папку неабходна ўсталяваць [name]? +SelectDirLabel3=Праграма ўсталюе [name] у наступную папку. +SelectDirBrowseLabel=Каб працягнуць, націсніце "Далей". Каб выбраць іншую папку, націсніце "Агляд". +DiskSpaceGBLabel=Патрабуецца не менш за [gb] ГБ вольнага месца на дыску. +DiskSpaceMBLabel=Патрабуецца не менш за [mb] МБ вольнага месца на дыску. +CannotInstallToNetworkDrive=Нельга ўсталяваць на сеткавы дыск. +CannotInstallToUNCPath=Нельга ўсталяваць у папку па яе шляху UNC. +InvalidPath="Вы павінны ўвесці поўны шлях з літарай дыска; напрыклад:%n%nC:\APP%n%nабо ў фармаце UNC:%n%n\\назва_сервера\\назва_рэсурсу" +InvalidDrive=Дыск або сеткавы рэсурс UNC не існуюць або яны недаступны. Выберыце іншае месца. +DiskSpaceWarningTitle=Не хапае вольнага месца на дыску +DiskSpaceWarning=Для ўсталявання неабходна не менш за %1 КБ вольнага месца, а на выбраным дыску зараз толькі %2 КБ.%n%nУсё роўна хочаце працягнуць усталяванне? +DirNameTooLong=Назва папкі або шлях да яе перавышаюць дапушчальную даўжыню. +InvalidDirName=Азначана памылковая назва папкі. +BadDirName32=Назва папкі не можа змяшчаць наступныя сімвалы: %n%n%1 +DirExistsTitle=Такая папка існуе +DirExists=Папка%n%n%1%n%nужо існуе. Усё роўна ўсталяваць у гэту папку? +DirDoesntExistTitle=Такой папкі не існуе +DirDoesntExist=Папка:%n%n%1%n%nне існуе. Стварыць яе? + +; *** "Select Components" wizard page +WizardSelectComponents=Выбар кампанентаў +SelectComponentsDesc=Якія кампаненты вы хочаце ўсталяваць? +SelectComponentsLabel2="Выберыце кампаненты, якія вы хочаце ўсталяваць; здыміце птушкі з тых кампанентаў, якія вы не хочаце ўсталёўваць. Калі будзеце гатовы працягнуць, націсніце \"Далей\"." +FullInstallation=Поўнае ўсталяванне +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Кампактнае ўсталяванне +CustomInstallation=Выбарачнае ўсталяванне +NoUninstallWarningTitle=Усталяваныя кампаненты +NoUninstallWarning=Праграма ўсталявання выявіла, што на вашым камп'ютары ўжо ўсталяваны наступныя кампаненты:%n%n%1%n%nКалі скасаваць выбар гэтых кампанентаў, яны не будуць выдалены.%n%nУсё роўна хочаце працягнуць усталяванне? +ComponentSize1=%1 КБ +ComponentSize2=%1 МБ +ComponentsDiskSpaceGBLabel=Бягучы выбар патрабуе не менш за [gb] ГБ вольнага месца на дыску. +ComponentsDiskSpaceMBLabel=Бягучы выбар патрабуе не менш за [mb] МБ вольнага месца на дыску. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Выберыце дадатковыя задачы +SelectTasksDesc=Якія дадатковыя задачы неабходна выканаць? +SelectTasksLabel2=Выберыце дадатковыя задачы, якія неабходна выканаць падчас усталявання [name]. Пасля гэтага націсніце "Далей". + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Выберыце папку ў меню "Пуск" +SelectStartMenuFolderDesc=Дзе праграма ўсталявання павінна стварыць ярлыкі? +SelectStartMenuFolderLabel3=Праграма ўсталявання створыць ярлыкі ў наступнай папцы меню "Пуск". +SelectStartMenuFolderBrowseLabel=Каб працягнуць, націсніце "Далей". Каб выбраць іншую папку, націсніце "Агляд". +MustEnterGroupName=Неабходна ўвесці назву папкі. +GroupNameTooLong=Назва папкі або шлях да яе перавышаюць дапушчальную даўжыню. +InvalidGroupName=Азначана памылковая назва папкі. +BadGroupName=Назва папкі не можа змяшчаць наступныя сімвалы:%n%n%1 +NoProgramGroupCheck2=&Не ствараць папку ў меню "Пуск" +; *** "Ready to Install" wizard page +WizardReady=Усё гатова да ўсталявання +ReadyLabel1=Праграма ўсталявання гатова пачаць усталёўваць [name] на ваш камп'ютар. +ReadyLabel2a=Каб працягнуць, націсніце "Усталяваць". Каб прагледзець або змяніць налады ўсталявання, націсніце "Назад". +ReadyLabel2b=Каб працягнуць, націсніце "Усталяваць". +ReadyMemoUserInfo=Інфармацыя пра карыстальніка: +ReadyMemoDir=Папка ўсталявання: +ReadyMemoType=Тып усталявання: +ReadyMemoComponents=Выбраныя кампаненты: +ReadyMemoGroup=Папка ў меню "Пуск": +ReadyMemoTasks=Дадатковыя задачы: +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Спампоўванне дадатковых файлаў... +ButtonStopDownload=&Спыніць спампоўванне +StopDownload=Вы сапраўды хочаце спыніць спампоўванне? +ErrorDownloadAborted=Спампоўванне перарвана +ErrorDownloadFailed=Збой спампоўвання: %1%2 +ErrorDownloadSizeFailed=Збой атрымання памеру: %1 %2 +ErrorFileHash1=Збой хэша файла: %1 +ErrorFileHash2=Памылковы хэш файла: чакаўся %1, а знойдзены %2 +ErrorProgress=Памылковы ход выканання: %1 з %2 +ErrorFileSize=Памылковы памер файла: чакаўся %1, а знойдзены %2 +; *** "Preparing to Install" wizard page +WizardPreparing=Падрыхтоўка да ўсталявання +PreparingDesc=Праграма ўсталявання рыхтуецца ўсталяваць [name] на ваш камп'ютар. +PreviousInstallNotCompleted=Усталяванне або выдаленне папярэдняй версіі праграмы не былі завершаны. Неабходны перазапуск вашага камп'ютара, каб завяршыць папярэдняе ўсталяванне.%n%nПасля перазапуску запусціце праграму ўсталявання паўторна, каб завяршыць працэс усталявання [name]. +CannotContinue=Не атрымалася працягнуць усталяванне. Націсніце "Скасаваць", каб выйсці з праграмы. +ApplicationsFound=Наступныя праграмы выкарыстоўваюць файлы, якія праграма ўсталявання павінна абнавіць. Рэкамендуецца дазволіць праграме ўсталявання закрыць гэтыя праграмы. +ApplicationsFound2=Наступныя праграмы выкарыстоўваюць файлы, якія праграма ўсталявання павінна абнавіць. Рэкамендуецца дазволіць праграме ўсталявання закрыць гэтыя праграмы. Пасля завяршэння працэсу, праграма ўсталявання паспрабуе перазапусціць іх. +CloseApplications=&Аўтаматычна закрыць гэтыя праграмы +DontCloseApplications=&Не закрываць гэтыя праграмы +ErrorCloseApplications=Праграма ўсталявання не змагла аўтаматычна закрыць усе праграмы. Перад тым як працягнуць, рэкамендуем закрыць усе праграмы, якія выкарыстоўваюць файлы, прызначаныя для абнаўлення. +PrepareToInstallNeedsRestart=Праграма ўсталявання павінна перазапусціць ваш камп'ютар. Пасля перазапуску камп'ютара, калі ласка, запусціце праграму ўсталявання яшчэ раз, каб завяршыць усталяванне [name].%n%nВыканаць перазапуск зараз? +; *** "Installing" wizard page +WizardInstalling=Усталяванне... +InstallingLabel=Пачакайце, пакуль [name] усталюецца на ваш камп'ютар. +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Завяршэнне працы майстра ўсталявання [name] +FinishedLabelNoIcons=Праграма [name] усталявана на ваш камп'ютар. +FinishedLabel=Праграма [name] усталявана на ваш камп'ютар. Яе можна запусціць з дапамогай адпаведнага ярлыка. +ClickFinish=Каб выйсці з праграмы ўсталявання, націсніце "Завяршыць". +FinishedRestartLabel=Каб завяршыць усталяванне [name], неабходна перазапусціць ваш камп'ютар. Зрабіць гэта зараз? +FinishedRestartMessage=Каб завяршыць усталяванне [name], неабходна перазапусціць ваш камп'ютар.%n%nЗрабіць гэта зараз? +ShowReadmeCheck=Я хачу прагледзець файл README +YesRadio=&Так, перазапусціць камп'ютар зараз +NoRadio=&Не, я перазапушчу камп'ютар пазней +; used for example as 'Run MyProg.exe' +RunEntryExec=Выканаць %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Прагледзець %1 +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Неабходна ўставіць наступны дыск +SelectDiskLabel2=Устаўце дыск %1 і націсніце "Добра".%n%nКалі файлы гэтага дыска можна знайсці ў папцы, якая адрозніваецца ад азначанай ніжэй, увядзіце правільны шлях або націсніце "Агляд". +PathLabel=&Шлях: +FileNotInDir2=Файл "%1" не знойдзены ў "%2". Калі ласка, устаўце правільны дыск або выберыце іншую папку. +SelectDirectoryLabel=Калі ласка, азначце шлях да наступнага дыска. +; *** Installation phase messages +SetupAborted=Усталяванне не было завершана.%n%nВырашыце праблему і запусціце праграму ўсталявання яшчэ раз. +AbortRetryIgnoreSelectAction=Выберыце дзеянне +AbortRetryIgnoreRetry=&Паспрабаваць яшчэ раз +AbortRetryIgnoreIgnore=&Ігнараваць памылку і працягнуць +AbortRetryIgnoreCancel=Скасаваць усталяванне +; *** Installation status messages +StatusClosingApplications=Закрыццё праграм... +StatusCreateDirs=Стварэнне каталогаў... +StatusExtractFiles=Выманне файлаў... +StatusCreateIcons=Стварэнне ярлыкоў... +StatusCreateIniEntries=Стварэнне запісаў INI... +StatusCreateRegistryEntries=Стварэнне запісаў рэестра... +StatusRegisterFiles=Рэгістрацыя файлаў... +StatusSavingUninstall=Захаванне інфармацыі для выдалення... +StatusRunProgram=Завяршэнне ўсталявання... +StatusRestartingApplications=Перазапуск праграм... +StatusRollback=Адкат змен... +; *** Misc. errors +ErrorInternal2=Унутраная памылка: %1 +ErrorFunctionFailedNoCode=%1 збой +ErrorFunctionFailed=%1 збой ; code %2 +ErrorFunctionFailedWithMessage=%1 збой ; code %2.%n%3 +ErrorExecutingProgram=Немагчыма выканаць файл:%n%1 +; *** Registry errors +ErrorRegOpenKey=Памылка адкрыцця ключа рэестра:%n%1\%2 +ErrorRegCreateKey=Памылка стварэння ключа рэестра:%n%1\%2 +ErrorRegWriteKey=Памылка запісу ў ключ рэестра:%n%1\%2 +; *** INI errors +ErrorIniEntry=Памылка стварэння запісу ў файле INI "%1". +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Прапусціць гэты файл (не рэкамендуецца) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ігнараваць памылку і працягнуць (не рэкамендуецца) +SourceIsCorrupted=Зыходны файл пашкоджаны +SourceDoesntExist=Зыходны файл "%1" не існуе +ExistingFileReadOnly2=Існуючы файл нельга замяніць, бо ён пазначаны толькі для чытання. +ExistingFileReadOnlyRetry=&Выдаліць атрыбут толькі для чытання і паспрабаваць яшчэ раз +ExistingFileReadOnlyKeepExisting=&Пакінуць існуючы файл +ErrorReadingExistingDest=Адбылася памылка пры спробе прачытаць існуючы файл: +FileExistsSelectAction=Выберыце дзеянне +FileExists2=Файл ужо існуе. +FileExistsOverwriteExisting=&Перазапісаць існуючы файл +FileExistsKeepExisting=&Пакінуць існуючы файл +FileExistsOverwriteOrKeepAll=&Выконваць гэта дзеянне для ўсіх наступных канфліктаў +ExistingFileNewerSelectAction=Выберыце дзеянне +ExistingFileNewer2=Існуючы файл з'яўляцца больш новым за той, які вы спрабуеце ўсталяваць. +ExistingFileNewerOverwriteExisting=&Перазапісаць існуючы файл +ExistingFileNewerKeepExisting=&Пакінуць існуючы файл (рэкамендуецца) +ExistingFileNewerOverwriteOrKeepAll=&Выконваць гэта дзеянне для ўсіх наступных канфліктаў +ErrorChangingAttr=Адбылася памылка пры спробе змяніць атрыбуты існуючага файла: +ErrorCreatingTemp=Адбылася памылка пры спробе стварыць файл у каталогу прызначэння: +ErrorReadingSource=Адбылася памылка пры спробе прачытаць зыходны файл: +ErrorCopying=Адбылася памылка пры спробе скапіяваць файл: +ErrorReplacingExistingFile=Адбылася памылка пры спробе замяніць існуючы файл: +ErrorRestartReplace=Збой працэдуры RestartReplace: +ErrorRenamingTemp=Адбылася памылка пры спробе перайменаваць файл у каталогу прызначэння: +ErrorRegisterServer=Немагчыма зарэгістраваць DLL або OCX: %1 +ErrorRegSvr32Failed=Памылка пры выкананні RegSvr32, код выхаду %1 +ErrorRegisterTypeLib=Немагчыма зарэгістраваць бібліятэку тыпаў: %1 +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-біты +UninstallDisplayNameMark64Bit=64-біты +UninstallDisplayNameMarkAllUsers=Усе карыстальнікі +UninstallDisplayNameMarkCurrentUser=Бягучы карыстальнік +; *** Post-installation errors +ErrorOpeningReadme=Адбылася памылка пры спробе адкрыць файл README. +ErrorRestartingComputer=Праграма ўсталявання не змагла перазапусціць камп'ютар. Зрабіце гэта ўручную. +; *** Uninstaller messages +UninstallNotFound=Файл "%1" не існуе. Немагчыма выдаліць праграму. +UninstallOpenError=Не атрымалася адкрыць файл "%1". Немагчыма выдаліць праграму +UninstallUnsupportedVer=Файл пратакола для выдалення "%1" не распазнаны гэтай версіяй праграмы выдалення. Немагчыма выдаліць праграму +UninstallUnknownEntry=У файле пратакола для выдалення сустрэўся невядомы запіс (%1) +ConfirmUninstall=Вы сапраўды хочаце выдаліць %1 і ўсе кампаненты праграмы? +UninstallOnlyOnWin64=Гэту праграму можна выдаліць толькі ў 64-бітнай версіі Windows. +OnlyAdminCanUninstall=Гэту праграму можа выдаліць толькі карыстальнік з правамі адміністратара. +UninstallStatusLabel=Пачакайце, пакуль адбудзецца выдаленне %1 з вашага камп'ютара. +UninstalledAll=%1 выдалены з вашага камп'ютара. +UninstalledMost=Выдаленне %1 завершана.%n%nЧастку элементаў выдаліць не атрымалася. Вы можаце выдаліць іх уручную. +UninstalledAndNeedsRestart=Каб завяршыць выдаленне %1, неабходна перазапусціць ваш камп'ютар.%n%nЗрабіць гэта зараз? +UninstallDataCorrupted=Файл "%1" пашкоджаны. Немагчыма выдаліць праграму +; *** Uninstallation phrase messages +ConfirmDeleteSharedFileTitle=Выдаліць абагулены файл? +ConfirmDeleteSharedFile2=Сістэма паказвае, што наступны абагулены файл больш не выкарыстоўваецца ніякімі іншымі праграмамі. Выдаліць гэты абагулены файл?%n%nКалі якія-небудзь праграмы ўсё яшчэ выкарыстоўваць яго і ён будзе выдалены, то яны могуць працаваць няправільна. Калі вы не ўпэўнены, выберыце "Не". Дадзены файл ніяк не пашкодзіць вашай сістэме. +SharedFileNameLabel=Назва файла: +SharedFileLocationLabel=Размяшчэнне: +WizardUninstalling=Статус выдалення +StatusUninstalling=Выдаленне %1... +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Усталяванне %1. +ShutdownBlockReasonUninstallingApp=Выдаленне %1. +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 версія %2 +AdditionalIcons=Дадатковыя ярлыкі: +CreateDesktopIcon=Стварыць ярлык на &працоўным стале +CreateQuickLaunchIcon=Стварыць ярлык на панэлі &хуткага запуску +ProgramOnTheWeb=Сайт %1 у інтэрнэце +UninstallProgram=Выдаленне %1 +LaunchProgram=Запусціць %1 +AssocFileExtension=&Звязаць %1 з файламі, якія маюць пашырэнне %2 +AssocingFileExtension=&Звязаць %1 з файламі, якія маюць пашырэнне %2... +AutoStartProgramGroupDescription=Аўтазапуск: +AutoStartProgram=Аўтаматычна запускаць %1 +AddonHostProgramNotFound=%1 не знойдзены ў азначанай вамі папцы.%n%nУсё роўна хочаце працягнуць? diff --git a/Files/Languages/Unofficial/Bengali.islu b/Files/Languages/Unofficial/Bengali.islu new file mode 100644 index 00000000..846093a3 --- /dev/null +++ b/Files/Languages/Unofficial/Bengali.islu @@ -0,0 +1,336 @@ +; *** Inno Setup version 5.5.3+ Bengali messages *** +; Translated by Mehedi Shanto [ mehediDshanto@gmail.com ] +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=<09AC><09BE><0982><09B2><09BE> +LanguageID=$0445 +LanguageCodePage=0 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +DialogFontSize=10 +;WelcomeFontName= +WelcomeFontSize=15 +;TitleFontName= +TitleFontSize=35 +;CopyrightFontName= +CopyrightFontSize=9 + +[Messages] + +; *** Application titles +SetupAppTitle=সেটআপ +SetupWindowTitle=সেটআপ - %1 +UninstallAppTitle=আনইনস্টল +UninstallAppFullTitle=%1 আনইনস্টল + +; *** Misc. common +InformationTitle=তথ্যাদি +ConfirmTitle=নিশ্চিতকরণ +ErrorTitle=সমস্যা + +; *** SetupLdr messages +SetupLdrStartupMessage=এর মাধ্যমে %1 ইনস্টল হবে। আপনি কি এই প্রক্রিয়াটি চলমান রাখতে চান? +LdrCannotCreateTemp=টেম্পোরারি ফাইল তৈরি করা যাচ্ছে না। সেটআপ প্রক্রিয়া অসফলভাবে বন্ধ হয়ে গেছে +LdrCannotExecTemp=টেম্পোরারি ডাইরেক্টরিতে ফাইল সম্পাদন করা যাচ্ছে না। সেটআপ প্রক্রিয়া অসফলভাবে বন্ধ হয়ে গেছে + +; *** Startup error messages +LastErrorMessage=%1.%n%nসমস্যা %2: %3 +SetupFileMissing=%1 এই ফাইলটি ইনস্টল প্রক্রিয়ার ডাইরেক্টরিতে নেই। অনুগ্রহপূর্বক সমস্যাটি সংশোধন করুন অথবা এই প্রোগ্রামটির একটি নতুন প্রতিলিপি সংগ্রহ করুন। +SetupFileCorrupt=সেটআপের ফাইলসমূহ বিকৃত হয়ে গেছে। অনুগ্রহপূর্বক এই প্রোগ্রামটির একটি নতুন প্রতিলিপি সংগ্রহ করুন। +SetupFileCorruptOrWrongVer=সেটআপের ফাইলসমূহ বিকৃত হয়ে গেছে, অথবা সেটআপের এই সংস্করণটির সাথে সুসঙ্গত নয়। অনুগ্রহপূর্বক সমস্যাটি সংশোধন করুন অথবা এই প্রোগ্রামটির একটি নতুন প্রতিলিপি সংগ্রহ করুন। +InvalidParameter=কমান্ড লাইনে একটি অগ্রহণযোগ্য প্যারামিটার দেয়া হয়েছে:%n%n%1 +SetupAlreadyRunning=সেটআপ প্রক্রিয়া ইতিমধ্যে চলমান রয়েছে। +WindowsVersionNotSupported=আপনার কম্পিউটারে চলমান Windowsএর সংস্করণটিকে এই প্রোগ্রামটি সমর্থন করে না। +WindowsServicePackRequired=এই প্রোগ্রামটির জন্য %1 Service Pack %2 বা পরবর্তী সংস্করণসমূহ প্রয়োজন। +NotOnThisPlatform=এই প্রোগ্রামটি %1এ চালনা করা যাবে না। +OnlyOnThisPlatform=এই প্রোগ্রামটি চালনা করতে অবশ্যই %1 দরকার। +OnlyOnTheseArchitectures=এই প্রোগ্রামটি শুধুমাত্র সেসব Windowsএর সংস্করণে ইনস্টল করা যাবে যেগুলো তৈরি করা হয়েছে নিম্নোক্ত প্রসেসর আর্কিটেক্টচারসমূহের জন্য:%n%n%1 +MissingWOW64APIs=আপনি Windowsএর যে সংস্করণটি চালাচ্ছেন সেটিতে 64-বিট ইনস্টল প্রক্রিয়া সম্পাদন করার জন্য সেটআপের প্রয়োজনীয় ব্যবহার্যসমূহ অন্তর্ভুক্ত নেই। এই সমস্যাটি সমাধান করতে, অনুগ্রহপূর্বক Service Pack %1 ইনস্টল করুন। +WinVersionTooLowError=এই প্রোগ্রামটির জন্য %1এর সংস্করণ %2 বা পরবর্তী সংস্করণসমূহ প্রয়োজন। +WinVersionTooHighError=এই প্রোগ্রামটি %1এর সংস্করণ %2 বা পরবর্তী সংস্করণসমূহে ইনস্টল করা যাবে না। +AdminPrivilegesRequired=এই প্রোগ্রামটি ইনস্টল করতে আপনাকে একটি অ্যাডমিনিস্ট্রেটর একাউন্ট থেকে লগ ইন করতে হবে। +PowerUserPrivilegesRequired=এই প্রোগ্রামটি ইনস্টল করতে আপনাকে একটি অ্যাডমিনিস্ট্রেটর অথবা পাওয়ার ইউজারস্‌ গ্রুপের সদস্য একাউন্ট থেকে লগ ইন করতে হবে। +SetupAppRunningError=সেটআপ সনাক্ত করেছে যে %1 এই মুহূর্তে চলমান রয়েছে।%n%nঅনুগ্রহপূর্বক অন্যান্য সকল চালনাকৃত %1 এই মুহূর্তে বন্ধ করুন, এবং সেটআপ প্রক্রিয়া চলমান রাখতে "ঠিক আছে", অথবা বন্ধ করতে "বাতিল করি" ক্লিক করুন। +UninstallAppRunningError=আনইনস্টল সনাক্ত করেছে যে %1 এই মুহূর্তে চলমান রয়েছে।%n%nঅনুগ্রহপূর্বক অন্যান্য সকল চালনাকৃত %1 এই মুহূর্তে বন্ধ করুন, এবং আনইনস্টল চলমান রাখতে "ঠিক আছে", অথবা বন্ধ করতে "বাতিল করি" ক্লিক করুন। + +; *** Misc. errors +ErrorCreatingDir=সেটআপ "%1" ডাইরেক্টরিটি তৈরি করতে ব্যর্থ হয়েছে +ErrorTooManyFilesInDir=ডাইরেক্টরি "%1"এ অনেক বেশি ফাইল থাকার কারণে একটি ফাইল তৈরি করা যাচ্ছে না + +; *** Setup common messages +ExitSetupTitle=সেটআপ বন্ধ করি +ExitSetupMessage=সেটআপ সম্পূর্ণরূপে শেষ হয়নি। আপনি যদি এখন বন্ধ করেন, প্রোগ্রামটি ইনস্টল করা হবে না।%n%nআপনি অন্য কোন সময় পুনরায় সেটআপ চালনা করে ইনস্টল প্রক্রিয়াটি সম্পূর্ণরূপে শেষ করতে পারেন।%n%nসেটআপ প্রক্রিয়া কি বন্ধ করবেন? +AboutSetupMenuItem=সেটআপ বিষয়ক...(&A) +AboutSetupTitle=সেটআপ বিষয়ক +AboutSetupMessage=%1এর সংস্করণ %2%n%3%n%n%1 হোম পেইজ:%n%4 +AboutSetupNote= +TranslatorNote=বাংলা অনুবাদটি সম্পাদনা করেছে মেহেদী শান্ত + +; *** Buttons +ButtonBack=< পূর্ববর্তী(&B) +ButtonNext=পরবর্তী(&N) > +ButtonInstall=ইনস্টল করি(&I) +ButtonOK=ঠিক আছে +ButtonCancel=বাতিল করি +ButtonYes=হ্যাঁ(&Y) +ButtonYesToAll=সকলক্ষেত্রেই হ্যাঁ(&A) +ButtonNo=না(&N) +ButtonNoToAll=সকলক্ষেত্রেই না(&O) +ButtonFinish=শেষ করি(&F) +ButtonBrowse=ব্রাউজ করি...(&B) +ButtonWizardBrowse=ব্রাউজ করি...(&R) +ButtonNewFolder=নতুন ফোল্ডার বানাই(&M) + +; *** "Select Language" dialog messages +SelectLanguageTitle=সেটআপের ভাষা নির্ধারণ +SelectLanguageLabel=ইনস্টল প্রক্রিয়া চলাকালীন ব্যবহার্য ভাষা নির্ধারণ করুন: + +; *** Common wizard text +ClickNext=সেটআপ প্রক্রিয়া চলমান রাখতে "পরবর্তী"তে, কিংবা বন্ধ করতে "বাতিল করি" ক্লিক করুন। +BeveledLabel= +BrowseDialogTitle=ফোল্ডার ব্রাউজ করি +BrowseDialogLabel=নিচের তালিকা থেকে একটি ফোল্ডার নির্দিষ্ট করে "ঠিক আছে" ক্লিক করুন। +NewFolderName=New Folder + +; *** "Welcome" wizard page +WelcomeLabel1=[name]এর সেটআপ উইজার্ডে আপনাকে স্বাগতম +WelcomeLabel2=এর মাধ্যমে আপনার কম্পিউটারে [name/ver] ইনস্টল করা হবে।%n%nপ্রক্রিয়াটি চালিয়ে যাওয়ার পূর্বে অন্যান্য সকল অ্যাপ্লিকেশন বন্ধ করার পরামর্শ দেয়া যাচ্ছে। + +; *** "Password" wizard page +WizardPassword=পাসওয়ার্ড +PasswordLabel1=এই ইনস্টল প্রক্রিয়াটি পাসওয়ার্ড দ্বারা সংরক্ষিত। +PasswordLabel3=সেটআপ প্রক্রিয়া চলমান রাখতে অনুগ্রহপূর্বক পাসওয়ার্ডটি প্রয়োগ করে "পরবর্তী" ক্লিক করুন। পাসওয়ার্ডে বড়/ছোট হাতের অক্ষর সঠিকভাবে প্রয়োগ করতে হবে। +PasswordEditLabel=পাসওয়ার্ড(&P): +IncorrectPassword=আপনি যে পাসওয়ার্ডটি প্রবেশ করেছেন সেটি সঠিক নয়। অনুগ্রহপূর্বক পুনরায় চেষ্টা করুন। + +; *** "License Agreement" wizard page +WizardLicense=অনুমতি চুক্তি +LicenseLabel=সেটআপের পরবর্তী ধাপে যাওয়ার আগে অনুগ্রহপূর্বক নিম্নোক্ত গুরুত্বপূর্ণ তথ্যাদি পড়ুন। +LicenseLabel3=অনুগ্রহপূর্বক নিম্নোক্ত অনুমতি চুক্তিটি পড়ুন। ইনস্টল প্রক্রিয়া চলমান রাখতে আপনাকে অবশ্যই এই চুক্তির শর্তাবলী মেনে নিতে হবে। +LicenseAccepted=আমি চুক্তিটি মেনে নিলাম(&A) +LicenseNotAccepted=আমি চুক্তিটি মেনে নিলাম না(&D) + +; *** "Information" wizard pages +WizardInfoBefore=তথ্যাদি +InfoBeforeLabel=সেটআপের পরবর্তী ধাপে যাওয়ার আগে অনুগ্রহপূর্বক নিম্নোক্ত গুরুত্বপূর্ণ তথ্যাদি পড়ুন। +InfoBeforeClickLabel=সেটআপ প্রক্রিয়াটি চলমান রাখতে প্রস্তুত হলে, "পরবর্তী" ক্লিক করুন। +WizardInfoAfter=তথ্যাদি +InfoAfterLabel=সেটআপের পরবর্তী ধাপে যাওয়ার আগে অনুগ্রহপূর্বক নিম্নোক্ত গুরুত্বপূর্ণ তথ্যাদি পড়ুন। +InfoAfterClickLabel=সেটআপ প্রক্রিয়াটি চলমান রাখতে প্রস্তুত হলে, "পরবর্তী" ক্লিক করুন। + +; *** "User Information" wizard page +WizardUserInfo=ব্যবহারকারী সম্পর্কিত তথ্যাদি +UserInfoDesc=অনুগ্রহপূর্বক আপনার সম্পর্কিত তথ্যাদি প্রবেশ করুন। +UserInfoName=ব্যবহারকারীর নাম(&U): +UserInfoOrg=প্রতিষ্ঠান(&O): +UserInfoSerial=সিরিয়াল নাম্বার(&S): +UserInfoNameRequired=আপনাকে অবশ্যই নাম প্রবেশ করতে হবে। + +; *** "Select Destination Location" wizard page +WizardSelectDir=গন্তব্যের অবস্থান নির্ধারণ +SelectDirDesc=[name] কোথায় ইনস্টল করা হবে? +SelectDirLabel3=সেটআপ প্রক্রিয়া [name]কে নিম্নোক্ত ফোল্ডারে ইনস্টল করতে যাচ্ছে। +SelectDirBrowseLabel=সেটআপ প্রক্রিয়া চলমান রাখতে, "পরবর্তী" ক্লিক করুন। ইনস্টলের জন্য ভিন্ন ফোল্ডার নির্ধারণ করতে চাইলে "ব্রাউজ করি" ক্লিক করুন। +DiskSpaceMBLabel=নির্ধারিত ড্রাইভে কমপক্ষে [mb] MB খালি জায়গা থাকতে হবে। +CannotInstallToNetworkDrive=সেটআপ একটি নেটওয়ার্ক ড্রাইভে ইনস্টল করা সম্ভব নয়। +CannotInstallToUNCPath=সেটআপ একটি UNC পথে ইনস্টল করা সম্ভব নয়। +InvalidPath=আপনাকে অবশ্যই ড্রাইভ লেটার সহ একটি সম্পূর্ণ অবস্থান প্রবেশ করতে হবে; উদাহরণ স্বরূপ:%n%nC:\APP%n%nঅথবা একটি UNC পথ যা দেখতে হবে এই রূপ:%n%n\\server\share +InvalidDrive=আপনি যে ড্রাইভ বা UNC shareটি নির্ধারণ করেছেন সেটির অস্তিত্ব নেই অথবা সেটিতে প্রবেশ করা যাচ্ছে না। অনুগ্রহপূর্বক অন্য অবস্থান নির্ধারণ করুন। +DiskSpaceWarningTitle=নির্ধারিত ড্রাইভে পর্যাপ্ত জায়গা নেই +DiskSpaceWarning=ইনস্টল করতে সেটআপের কমপক্ষে %1 KB খালি জায়গা থাকতে হবে, কিন্তু নির্ধারিত ড্রাইভে রয়েছে মাত্র %2 KB।%n%nআপনি কি যাই হোক প্রক্রিয়াটি চলমান রাখতে চান? +DirNameTooLong=নির্ধারিত ফোল্ডারটির নাম অথবা অবস্থান অত্যন্ত দীর্ঘ। +InvalidDirName=নির্ধারিত ফোল্ডারের নামটি অগ্রহণযোগ্য। +BadDirName32=ফোল্ডারের নামে নিম্নোক্ত ক্যারেক্টারসমূহ ব্যবহার করা যাবে না:%n%n%1 +DirExistsTitle=ফোল্ডারটি বিদ্যমান রয়েছে +DirExists=নিম্নোক্ত ফোল্ডার:%n%n%1%n%nইতিমধ্যে বিদ্যমান রয়েছে। আপনি কি যাই হোক এই ফোল্ডারটিতেই ইনস্টল করতে চান? +DirDoesntExistTitle=ফোল্ডারটির অস্তিত্ব নেই +DirDoesntExist=নিম্নোক্ত ফোল্ডার:%n%n%1%n%nএর অস্তিত্ব নেই। আপনি কি ফোল্ডারটি তৈরি করতে চান? + +; *** "Select Components" wizard page +WizardSelectComponents=উপাদানসমূহ নির্ধারণ +SelectComponentsDesc=কোন কোন উপাদানসমূহ ইনস্টল করা হবে? +SelectComponentsLabel2=যে সকল উপাদানসমূহ আপনি ইনস্টল করতে চান সেগুলো নির্ধারণ করুন; যেগুলো ইনস্টল করতে চান না সেগুলো খালি করুন। প্রক্রিয়াটি চলমান রাখতে প্রস্তুত হলে, "পরবর্তী" ক্লিক করুন। +FullInstallation=সম্পূর্ণ ইনস্টল প্রক্রিয়া +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=ঘনবিন্যস্ত ইনস্টল প্রক্রিয়া +CustomInstallation=ব্যক্তি-নির্ধারিত ইনস্টল প্রক্রিয়া +NoUninstallWarningTitle=উপাদানসমূহ বিদ্যমান রয়েছে +NoUninstallWarning=সেটআপ সনাক্ত করেছে যে নিম্নোক্ত উপাদানসমূহ ইতিমধ্যে আপনার কম্পিউটারে ইনস্টল করা রয়েছে:%n%n%1%n%nএই উপাদানসমূহ অনির্ধারণ করে দিলে তা আনইনস্টল হবে না।%n%nআপনি কি যাই হোক প্রক্রিয়াটি চলমান রাখতে চান? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceMBLabel=নির্ধারণকৃত উপাদানসমূহের জন্যে কমপক্ষে [mb] MB জায়গা প্রয়োজন হবে। + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=অতিরিক্ত কাজসমূহ নির্ধারণ +SelectTasksDesc=কোন কোন অতিরিক্ত কাজসমূহ সম্পাদন করা হবে? +SelectTasksLabel2=[name] ইনস্টলের সময় যে সকল অতিরিক্ত কাজসমূহ সেটআপের মাধ্যমে সম্পাদন করতে চান, সেগুলো নির্ধারণ করে "পরবর্তী"তে ক্লিক করুন। + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=স্টার্ট মেন্যুর ফোল্ডার নির্ধারণ +SelectStartMenuFolderDesc=সেটআপ কোথায় প্রোগ্রামটির শর্টকাটসমূহ স্থাপন করবে? +SelectStartMenuFolderLabel3=সেটআপ প্রোগ্রামটির শর্টকাটসমূহ নিম্নোক্ত স্টার্ট মেন্যুর ফোল্ডারে তৈরি করবে। +SelectStartMenuFolderBrowseLabel=প্রক্রিয়াটি চলমান রাখতে, "পরবর্তী" ক্লিক করুন। ভিন্ন ফোল্ডার নির্ধারণ করতে চাইলে "ব্রাউজ করি" ক্লিক করুন। +MustEnterGroupName=আপনাকে অবশ্যই একটি ফোল্ডারের নাম প্রবেশ করতে হবে। +GroupNameTooLong=নির্ধারিত ফোল্ডারটির নাম অথবা অবস্থান অত্যন্ত দীর্ঘ। +InvalidGroupName=নির্ধারিত ফোল্ডারের নামটি অগ্রহণযোগ্য। +BadGroupName=ফোল্ডারের নামে নিম্নোক্ত ক্যারেক্টারসমূহ ব্যবহার করা যাবে না:%n%n%1 +NoProgramGroupCheck2=স্টার্ট মেন্যুতে ফোল্ডার তৈরি করা হবে না(&D) + +; *** "Ready to Install" wizard page +WizardReady=ইনস্টল করতে প্রস্তুত +ReadyLabel1=সেটআপ এখন আপনার কম্পিউটারে [name]এর ইনস্টল প্রক্রিয়া আরম্ভ করার জন্য প্রস্তুত। +ReadyLabel2a=ইনস্টল প্রক্রিয়া চলমান রাখতে "ইনস্টল করি" ক্লিক করুন, অথবা সেটিংসমূহ পুনর্বিবেচনা বা কোন সেটিং পরিবর্তন করতে চাইলে "পূর্ববর্তী" ক্লিক করুন। +ReadyLabel2b=ইনস্টল প্রক্রিয়া চলমান রাখতে "ইনস্টল করি" ক্লিক করুন। +ReadyMemoUserInfo=ব্যবহারকারী সম্পর্কিত তথ্যাদি: +ReadyMemoDir=গন্তব্যের অবস্থান: +ReadyMemoType=সেটআপের ধরন: +ReadyMemoComponents=নির্ধারণকৃত উপাদানসমূহ: +ReadyMemoGroup=স্টার্ট মেন্যুর ফোল্ডার: +ReadyMemoTasks=অতিরিক্ত কাজসমূহ: + +; *** "Preparing to Install" wizard page +WizardPreparing=ইনস্টল প্রক্রিয়ার প্রস্তুতি চলছে +PreparingDesc=সেটআপ আপনার কম্পিউটারে [name] ইনস্টল করার প্রস্তুতি নিচ্ছে। +PreviousInstallNotCompleted=পূর্বকার কোন প্রোগ্রামের ইনস্টল/অপসারণ প্রক্রিয়া সম্পূর্ণরূপে শেষ হয়ে ছিল না। সেই ইনস্টল প্রক্রিয়াটি সম্পূর্ণরূপে শেষ করতে কম্পিউটার পুনরায় চালনা করতে হবে।%n%n[name]এর ইনস্টল প্রক্রিয়া সম্পূর্ণরূপে শেষ করার জন্যে কম্পিউটার পুনরায় চালনা করার পর, সেটআপ পুনরায় চালনা করুন। +CannotContinue=সেটআপ প্রক্রিয়া চলমান রাখা যাচ্ছে না, প্রক্রিয়াটি বন্ধ করতে অনুগ্রহপূর্বক "বাতিল করি" ক্লিক করুন। +ApplicationsFound=নিম্নোক্ত অ্যাপ্লিকেশনসমূহ এমন ফাইলসমূহ ব্যবহার করছে যা সেটআপের মাধ্যমে হালনাগাদ করতে হবে। এই অ্যাপ্লিকেশনসমূহ স্বয়ংক্রিয়ভাবে বন্ধ করণে সেটআপকে অনুমতি প্রদানে পরামর্শ দেওয়া যাচ্ছে। +ApplicationsFound2=নিম্নোক্ত অ্যাপ্লিকেশনসমূহ এমন ফাইলসমূহ ব্যবহার করছে যা সেটআপের মাধ্যমে হালনাগাদ করতে হবে। এই অ্যাপ্লিকেশনসমূহ স্বয়ংক্রিয়ভাবে বন্ধ করণে সেটআপকে অনুমতি প্রদানে পরামর্শ দেওয়া যাচ্ছে। ইনস্টল প্রক্রিয়া সম্পূর্ণরূপে শেষ হওয়ার পরে, সেটআপ এই অ্যাপ্লিকেশনসমূহ পুনরায় চালনা করতে চেষ্টা করবে। +CloseApplications=অ্যাপ্লিকেশনসমূহ স্বয়ংক্রিয়ভাবে বন্ধ করা হবে(&A) +DontCloseApplications=অ্যাপ্লিকেশনসমূহ স্বয়ংক্রিয়ভাবে বন্ধ করা হবে না(&D) +ErrorCloseApplications=সেটআপ স্বয়ংক্রিয়ভাবে সকল অ্যাপ্লিকেশনসমূহ বন্ধ করতে ব্যর্থ হয়েছে। পরবর্তী ধাপে যাওয়ার আগে সেটআপের মাধ্যমে হালনাগাদ করতে হবে এমন ফাইলসমূহ ব্যবহার করা সকল অ্যাপ্লিকেশনসমূহ বন্ধ করণে পরামর্শ দেওয়া যাচ্ছে। + +; *** "Installing" wizard page +WizardInstalling=ইনস্টল হচ্ছে +InstallingLabel=সেটআপ আপনার কম্পিউটারে [name] ইনস্টল করাকালীন সময়ে অনুগ্রহপূর্বক অপেক্ষা করুন। + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=[name]এর সেটআপ উইজার্ডটি শেষ করি +FinishedLabelNoIcons=সেটআপ আপনার কম্পিউটারে [name] ইনস্টল করা শেষ করেছে। +FinishedLabel=সেটআপ আপনার কম্পিউটারে [name] ইনস্টল করা শেষ করেছে। ইনস্টলকৃত আইকনসমূহ সিলেক্ট করে অ্যাপ্লিকেশনটি চালনা যেতে পারে। +ClickFinish=সেটআপ প্রক্রিয়া বন্ধ করতে "শেষ করি" ক্লিক করুন। +FinishedRestartLabel=[name]এর ইনস্টল প্রক্রিয়া সম্পূর্ণরূপে শেষ করার জন্যে, সেটআপকে অবশ্যই কম্পিউটার পুনরায় চালনা করতে হবে। আপনি কি এখনই পুনরায় চালনা করতে চান? +FinishedRestartMessage=[name]এর ইনস্টল প্রক্রিয়া সম্পূর্ণরূপে শেষ করার জন্যে, সেটআপকে অবশ্যই কম্পিউটার পুনরায় চালনা করতে হবে।%n%nআপনি কি এখনই পুনরায় চালনা করতে চান? +ShowReadmeCheck=হ্যাঁ, আমি README ফাইলটি দেখতে চাই +YesRadio=হ্যাঁ, কম্পিউটার পুনরায় চালনা কর(&Y) +NoRadio=না, আমি পরে কম্পিউটার পুনরায় চালনা করব(&N) +; used for example as 'Run MyProg.exe' +RunEntryExec=%1 চালনা কর +; used for example as 'View Readme.txt' +RunEntryShellExec=%1 প্রদর্শন কর + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=সেটআপের পরবর্তী ডিস্কটি প্রয়োজন +SelectDiskLabel2=অনুগ্রহপূর্বক ডিস্ক %1 ঢোকান এবং "ঠিক আছে" ক্লিক করুন।%n%nযদি এই ডিস্কের ফাইলসমূহ নিম্নে প্রদর্শিত ফোল্ডার ছাড়া অন্য কোন ফোল্ডারে পাওয়া যেতে পারে, তাহলে সঠিক অবস্থানটি প্রবেশ করুন অথবা "ব্রাউজ করি" ক্লিক করুন। +PathLabel=অবস্থান(&P): +FileNotInDir2="%1" ফাইলটি "%2" অবস্থানে পাওয়া যাচ্ছে না। অনুগ্রহপূর্বক সঠিক ডিস্কটি ঢোকান অথবা অন্য একটি ফোল্ডার নির্ধারণ করুন। +SelectDirectoryLabel=অনুগ্রহপূর্বক পরবর্তী ডিস্কের অবস্থান নির্দেশ করুন। + +; *** Installation phase messages +SetupAborted=সেটআপ প্রক্রিয়াটি সম্পূর্ণরূপে শেষ হল না।%n%nঅনুগ্রহপূর্বক সমস্যাটি সমাধান করুন এবং পুনরায় সেটআপ চালনা করুন। +EntryAbortRetryIgnore=পুনরায় চেষ্টা করতে "Retry"এ, যাইহোক প্রক্রিয়াটি চালিয়ে যাতে "Ignore"এ, অথবা ইনস্টল প্রক্রিয়াটি বন্ধ করতে "Abort"এ ক্লিক করুন। + +; *** Installation status messages +StatusClosingApplications=অ্যাপ্লিকেশনসমূহ বন্ধ করা হচ্ছে... +StatusCreateDirs=ডাইরেক্টরিসমূহ তৈরি করা হচ্ছে... +StatusExtractFiles=ফাইলসমূহ এক্সট্র্যাক্ট করা হচ্ছে... +StatusCreateIcons=শর্টকাটসমূহ তৈরি করা হচ্ছে... +StatusCreateIniEntries=INI এন্ট্রিসমূহ তৈরি করা হচ্ছে... +StatusCreateRegistryEntries=রেজিস্ট্রি এন্ট্রিসমূহ তৈরি করা হচ্ছে... +StatusRegisterFiles=ফাইলসমূহ রেজিস্ট্রি করা হচ্ছে... +StatusSavingUninstall=আনইনস্টল প্রক্রিয়ার তথ্যাদি সেইভ করা হচ্ছে... +StatusRunProgram=ইনস্টল প্রক্রিয়াটি শেষ করা হচ্ছে... +StatusRestartingApplications=অ্যাপ্লিকেশনসমূহ পুনরায় চালনা করা হচ্ছে... +StatusRollback=পরিবর্তনসমূহ পূর্বাবস্থায় ফিরিয়ে আনা হচ্ছে... + +; *** Misc. errors +ErrorInternal2=অভ্যন্তরীণ সমস্যা: %1 +ErrorFunctionFailedNoCode=%1 ব্যর্থ হয়েছে +ErrorFunctionFailed=%1 ব্যর্থ হয়েছে; কোড %2 +ErrorFunctionFailedWithMessage=%1 ব্যর্থ হয়েছে; কোড %2.%n%3 +ErrorExecutingProgram=সম্পাদন করা যায়নি যে ফাইল:%n%1 + +; *** Registry errors +ErrorRegOpenKey=চালনা করতে সমস্যা করা রেজিস্ট্রি কী:%n%1\%2 +ErrorRegCreateKey=তৈরি করতে সমস্যা করা রেজিস্ট্রি কী:%n%1\%2 +ErrorRegWriteKey=লিখতে সমস্যা করা রেজিস্ট্রি কী:%n%1\%2 + +; *** INI errors +ErrorIniEntry="%1" ফাইলে INI এন্ট্রি তৈরি করতে সমস্যা হয়েছে। + +; *** File copying errors +FileAbortRetryIgnore=পুনরায় চেষ্টা করতে "Retry"এ, ফাইলটি বাদ দিয়ে সামনে অগ্রসর হতে "Ignore"এ(ব্যবহার না করণেই পরামর্শ দেওয়া যাচ্ছে), অথবা ইনস্টল প্রক্রিয়াটি বন্ধ করতে "Abort"এ ক্লিক করুন। +FileAbortRetryIgnore2=পুনরায় চেষ্টা করতে "Retry"এ, যাইহোক প্রক্রিয়াটি চালিয়ে যাতে "Ignore"এ(ব্যবহার না করণেই পরামর্শ দেওয়া যাচ্ছে), অথবা ইনস্টল প্রক্রিয়াটি বন্ধ করতে "Abort"এ ক্লিক করুন। +SourceIsCorrupted=উৎস ফাইলটি বিকৃত হয়ে গেছে +SourceDoesntExist=উৎস ফাইল "%1"এর অস্তিত্ব নেই +ExistingFileReadOnly=বিদ্যমান ফাইলটি "শুধু-পড়া যাবে"(read-only) বৈশিষ্ট্যতে নির্দেশিত রয়েছে।%n%n"শুধু-পড়া যাবে"(read-only) বৈশিষ্ট্যটি অপসারণ করে পুনরায় চেষ্টা করতে "Retry"এ, ফাইলটি বাদ দিয়ে সামনে অগ্রসর হতে "Ignore"এ, অথবা ইনস্টল প্রক্রিয়াটি বন্ধ করতে "Abort"এ ক্লিক করুন। +ErrorReadingExistingDest=বিদ্যমান ফাইলটি পড়তে চেষ্টা করার সময় একটি সমস্যা সংঘটিত হয়েছে: +FileExists=ফাইলটি ইতিমধ্যে বিদ্যমান রয়েছে।%n%nআপনি কি সেটআপ প্রক্রিয়ায় সেটি ওভাররাইট করতে চান? +ExistingFileNewer=সেটআপ যে ফাইলটি ইনস্টল করতে চেষ্টা করছে সেটি থেকে বিদ্যমান ফাইলটি আধুনিক। বিদ্যমান ফাইলটিই রেখে দিতে পরামর্শ দেওয়া যাচ্ছে।%n%nআপনি কি বিদ্যমান ফাইলটিই রেখে দিতে চান? +ErrorChangingAttr=বিদ্যমান ফাইলটির বৈশিষ্ট্যাবলী পরিবর্তন করতে চেষ্টা করার সময় একটি সমস্যা সংঘটিত হয়েছে: +ErrorCreatingTemp=গন্তব্য ডাইরেক্টরিতে ফাইল তৈরি করতে চেষ্টা করার সময় একটি সমস্যা সংঘটিত হয়েছে: +ErrorReadingSource=উৎস ফাইলটি পড়তে চেষ্টা করার সময় একটি সমস্যা সংঘটিত হয়েছে: +ErrorCopying=একটি ফাইলের প্রতিলিপি করতে চেষ্টা করার সময় একটি সমস্যা সংঘটিত হয়েছে: +ErrorReplacingExistingFile=বিদ্যমান ফাইল প্রতিস্থাপন করতে চেষ্টা করার সময় একটি সমস্যা সংঘটিত হয়েছে: +ErrorRestartReplace=পুনরায় প্রতিস্থাপন ব্যর্থ হয়েছে: +ErrorRenamingTemp=গন্তব্য ডাইরেক্টরিতে একটি ফাইলের নাম পরিবর্তন করতে চেষ্টা করার সময় একটি সমস্যা সংঘটিত হয়েছে: +ErrorRegisterServer=রেজিস্টার করা যায়নি যে DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 ব্যর্থ হয়েছে যেখানে বন্ধ হওয়ার কোড হল %1 +ErrorRegisterTypeLib=রেজিস্টার করা যায়নি যে ধরনের লাইব্রেরি: %1 + +; *** Post-installation errors +ErrorOpeningReadme=README ফাইলটি খুলতে চেষ্টা করার সময় একটি সমস্যা সংঘটিত হয়েছে। +ErrorRestartingComputer=সেটআপ কম্পিউটার পুনরায় চালনা করতে ব্যর্থ হয়েছে। অনুগ্রহপূর্বক নিজেই কাজটি সম্পাদন করুন। + +; *** Uninstaller messages +UninstallNotFound="%1" ফাইলটির অস্তিত্ব নেই। আনইনস্টল করা যাচ্ছে না। +UninstallOpenError="%1" ফাইলটি খোলা যাচ্ছে না। আনইনস্টল করা যাচ্ছে না +UninstallUnsupportedVer=আনইনস্টলারের এই সংস্করণটি আনইনস্টল লগ ফাইল "%1" ফাইলের ধরনটি সনাক্ত করতে পারে নি। আনইনস্টল করা যাচ্ছে না +UninstallUnknownEntry=আনইনস্টল লগে একটি অজানা এন্ট্রি (%1) পাওয়া গিয়েছে +ConfirmUninstall=আপনি কি নিশ্চিত যে %1 এবং এর সকল উপাদানসমূহ সম্পূর্ণরূপে অপসারণ করতে চান? +UninstallOnlyOnWin64=এই ইনস্টল প্রক্রিয়াটি শুধুমাত্র 64-বিট Windowsএ আনইনস্টল করা যাবে। +OnlyAdminCanUninstall=এই ইনস্টল প্রক্রিয়াটি শুধুমাত্র অ্যাডমিনিস্ট্রেটিভ অধিকার থাকা একজন ব্যবহারকারী দ্বারা আনইনস্টল করা যাবে। +UninstallStatusLabel=আপনার কম্পিউটার থেকে %1 অপসারণ করাকালীন সময়ে অনুগ্রহপূর্বক অপেক্ষা করুন। +UninstalledAll=আপনার কম্পিউটার থেকে %1 সফলভাবে অপসারণ করা হয়েছে। +UninstalledMost=%1এর আনইনস্টল সম্পূর্ণরূপে শেষ হয়েছে।%n%nকিছু কিছু উপাদানসমূহ অপসারণ করা যাচ্ছে না। সেগুলি আপনি নিজেই অপসারণ করতে পারবেন। +UninstalledAndNeedsRestart=%1এর আনইনস্টল সম্পূর্ণরূপে শেষ করতে, আপনার কম্পিউটারটি পুনরায় চালনা করতে হবে।%n%nআপনি কি এখনই পুনরায় চালনা করতে চান? +UninstallDataCorrupted="%1" ফাইলটি বিকৃত হয়ে গেছে। আনইনস্টল করা যাচ্ছে না + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=শেয়ারকৃত ফাইল কি অপসারণ করা হবে? +ConfirmDeleteSharedFile2=সিস্টেম জানাচ্ছে যে নিম্নোক্ত শেয়ারকৃত ফাইলটি এখন আর কোন প্রোগ্রাম দ্বারা ব্যবহৃত হয় না। আপনি কি আনইনস্টল দ্বারা এই শেয়ারকৃত ফাইলটি অপসারণ করতে চান?%n%nযদি কোন প্রোগ্রাম এখনও এই ফাইলটি ব্যবহার করে থাকে এবং এটি অপসারণ করা হয়, তাহলে ঐ ​​প্রোগ্রামসমূহ সঠিকভাবে কাজ নাও করতে পারে। আপনি যদি অনিশ্চিত হন, তাহলে "না" নির্ধারণ করুন। ফাইলটি আপনার সিস্টেমে ফেলে রাখলেও কোন ক্ষতির কারণ হবে না। +SharedFileNameLabel=ফাইলের নাম: +SharedFileLocationLabel=অবস্থান: +WizardUninstalling=আনইনস্টল প্রক্রিয়ার অবস্থিতি +StatusUninstalling=আনইনস্টল হচ্ছে %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=%1 ইনস্টল করা হচ্ছে। +ShutdownBlockReasonUninstallingApp=%1 আনইনস্টল করা হচ্ছে। + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1এর সংস্করণ %2 +AdditionalIcons=অতিরিক্ত আইকনসমূহ: +CreateDesktopIcon=ডেক্সটপে আইকন তৈরি করি(&D) +CreateQuickLaunchIcon=&Quick Launchএ আইকন তৈরি করি +ProgramOnTheWeb=ওয়েবে %1 +UninstallProgram=%1 আনইনস্টল করি +LaunchProgram=%1 চালনা করি +AssocFileExtension=%2এর ফাইল এক্সটেনশনের সাথে %1 সংশ্লিষ্ট করি(&A) +AssocingFileExtension=%2এর ফাইল এক্সটেনশনের সাথে %1 সংশ্লিষ্ট করা হচ্ছে... +AutoStartProgramGroupDescription=স্টার্টআপ: +AutoStartProgram=%1 স্বয়ংক্রিয়ভাবে চালনা করি +AddonHostProgramNotFound=আপনার নির্ধারিত ফোল্ডারটিতে %1 পাওয়া যাচ্ছে না।%n%nআপনি কি যাই হোক প্রক্রিয়াটি চলমান রাখতে চান? diff --git a/Files/Languages/Unofficial/Bosnian.isl b/Files/Languages/Unofficial/Bosnian.isl new file mode 100644 index 00000000..d3080c04 --- /dev/null +++ b/Files/Languages/Unofficial/Bosnian.isl @@ -0,0 +1,386 @@ +; *** Inno Setup version 6.1.0+ Bosnian messages *** +; Translated by: Almedin Maleškić (malmedin@gmail.com) +; Based on translation by Kenan Dervisevic (kenan3008@gmail.com) +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Bosanski +LanguageID=$141a +LanguageCodePage=1250 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Instalacija +SetupWindowTitle=Instalacija - %1 +UninstallAppTitle=Deinstalacija +UninstallAppFullTitle=%1 Deinstalacija + +; *** Misc. common +InformationTitle=Informacija +ConfirmTitle=Potvrda +ErrorTitle=Greška + +; *** SetupLdr messages +SetupLdrStartupMessage=Započeli ste instalaciju programa %1. Želite li nastaviti? +LdrCannotCreateTemp=Ne mogu kreirati privremenu datoteku. Instalacija prekinuta +LdrCannotExecTemp=Ne mogu izvršiti datoteku u privremenom folderu. Instalacija prekinuta +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nGreška %2: %3 +SetupFileMissing=Datoteka %1 se ne nalazi u instalacijskom folderu. Molimo vas da riješite problem ili nabavite novu kopiju programa. +SetupFileCorrupt=Instalacijske datoteke sadrže grešku. Molimo vas da nabavite novu kopiju programa. +SetupFileCorruptOrWrongVer=Instalacijske datoteke sadrže grešku, ili nisu kompatibilne sa ovom verzijom instalacije. Molimo vas riješite problem ili nabavite novu kopiju programa. +InvalidParameter=Neispravan parametar je proslijeđen komandnoj liniji:%n%n%1 +SetupAlreadyRunning=Instalacija je već pokrenuta. +WindowsVersionNotSupported=Ovaj program ne podržava verziju Windowsa koja je instalirana na ovom računaru. +WindowsServicePackRequired=Ovaj program zahtjeva %1 Service Pack %2 ili noviji. +NotOnThisPlatform=Ovaj program ne radi na %1. +OnlyOnThisPlatform=Ovaj program se mora pokrenuti na %1. +OnlyOnTheseArchitectures=Ovaj program se može instalirati samo na verzijama Windowsa napravljenim za sljedeće arhitekture procesora:%n%n%1 +WinVersionTooLowError=Ovaj program zahtjeva %1 verzije %2 ili noviju. +WinVersionTooHighError=Ovaj program se ne može instalirati na %1 verziji %2 ili novijoj. +AdminPrivilegesRequired=Morate imati administratorska prava pri instaliranju ovog programa. +PowerUserPrivilegesRequired=Morate imati administratorska prava ili biti član grupe Power Users prilikom instaliranja ovog programa. +SetupAppRunningError=Instalacija je detektovala da je %1 pokrenut.%n%nMolimo zatvorite program i sve njegove kopije i potom kliknite Dalje za nastavak ili Otkaži za prekid. +UninstallAppRunningError=Deinstalacija je detektovala da je %1 trenutno pokrenut.%n%nMolimo zatvorite program i sve njegove kopije i potom kliknite Dalje za nastavak ili Otkaži za prekid. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Odaberite način instalacije +PrivilegesRequiredOverrideInstruction=Odaberite način instalacije +PrivilegesRequiredOverrideText1=%1 može biti instaliran za sve korisnike (zahtijeva administrativne privilegije) ili samo za vas. +PrivilegesRequiredOverrideText2=%1 može da se instalira samo za vas ili za sve korisnike (zahtijeva administrativne privilegije). +PrivilegesRequiredOverrideAllUsers=Instaliraj za &sve korisnike +PrivilegesRequiredOverrideAllUsersRecommended=Instaliraj za &sve korisnike (preporučeno) +PrivilegesRequiredOverrideCurrentUser=Instaliraj samo za &mene +PrivilegesRequiredOverrideCurrentUserRecommended=Instaliraj samo za &mene (preporučeno) + +; *** Misc. errors +ErrorCreatingDir=Instalacija nije mogla kreirati folder "%1" +ErrorTooManyFilesInDir=Instalacija nije mogla kreirati datoteku u folderu "%1" zato što on sadrži previše datoteka + +; *** Setup common messages +ExitSetupTitle=Prekid instalacije +ExitSetupMessage=Instalacija nije završena. Ako sada izađete, program neće biti instaliran.%n%nInstalaciju možete pokrenuti kasnije u slučaju da je želite završiti.%n%nPrekid instalacije? +AboutSetupMenuItem=&O instalaciji... +AboutSetupTitle=O instalaciji +AboutSetupMessage=%1 verzija %2%n%3%n%n%1 početna stranica:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< Na&zad +ButtonNext=Da&lje > +ButtonInstall=&Instaliraj +ButtonOK=U redu +ButtonCancel=Otkaži +ButtonYes=&Da +ButtonYesToAll=Da za &sve +ButtonNo=&Ne +ButtonNoToAll=N&e za sve +ButtonFinish=&Završi +ButtonBrowse=&Izaberi... +ButtonWizardBrowse=Iza&beri... +ButtonNewFolder=&Napravi novi folder + +; *** "Select Language" dialog messages +SelectLanguageTitle=Izaberite jezik instalacije +SelectLanguageLabel=Izaberite jezik koji želite koristiti pri instalaciji: + +; *** Common wizard text +ClickNext=Kliknite na Dalje za nastavak ili Otkaži za prekid instalacije. +BeveledLabel= +BrowseDialogTitle=Izaberite folder +BrowseDialogLabel=Izaberite folder iz liste ispod, pa onda kliknite na U redu. +NewFolderName=Novi folder + +; *** "Welcome" wizard page +WelcomeLabel1=Dobro došli u instalaciju programa [name] +WelcomeLabel2=Ovaj program će instalirati [name/ver] na vaš računar.%n%nPreporučujemo da zatvorite sve druge programe prije nastavka i da privremeno onemogućite vaš antivirus i firewall. + +; *** "Password" wizard page +WizardPassword=Šifra +PasswordLabel1=Instalacija je zaštićena šifrom. +PasswordLabel3=Upišite šifru i kliknite Dalje za nastavak. Šifre su osjetljive na mala i velika slova. +PasswordEditLabel=&Šifra: +IncorrectPassword=Upisali ste pogrešnu šifru. Pokušajte ponovo. + +; *** "License Agreement" wizard page +WizardLicense=Ugovor o korištenju +LicenseLabel=Molimo vas da, prije nastavka, pažljivo pročitajte sljedeće informacije. +LicenseLabel3=Molimo vas da pažljivo pročitate Ugovor o korištenju. Morate prihvatiti uslove ugovora kako biste mogli nastaviti s instalacijom. +LicenseAccepted=&Prihvatam ugovor +LicenseNotAccepted=&Ne prihvatam ugovor + +; *** "Information" wizard pages +WizardInfoBefore=Informacija +InfoBeforeLabel=Molimo vas da, prije nastavka, pročitate sljedeće informacije. +InfoBeforeClickLabel=Kada budete spremni nastaviti instalaciju, kliknite na Dalje. +WizardInfoAfter=Informacija +InfoAfterLabel=Molimo vas da, prije nastavka, pročitate sljedeće informacije. +InfoAfterClickLabel=Kada budete spremni nastaviti instalaciju, kliknite na Dalje. + +; *** "User Information" wizard page +WizardUserInfo=Informacije o korisniku +UserInfoDesc=Upišite vaše lične informacije. +UserInfoName=&Ime korisnika: +UserInfoOrg=&Organizacija: +UserInfoSerial=&Serijski broj: +UserInfoNameRequired=Morate upisati ime. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Odaberite odredišni folder +SelectDirDesc=Gdje želite da instalirate [name]? +SelectDirLabel3=Instalacija će instalirati [name] u sljedeći folder. +SelectDirBrowseLabel=Za nastavak, kliknite Dalje. Ako želite izabrati drugi folder, kliknite Izaberi. +DiskSpaceGBLabel=Potrebno je najmanje [gb] GB slobodnog prostora na disku. +DiskSpaceMBLabel=Potrebno je najmanje [mb] MB slobodnog prostora na disku. +CannotInstallToNetworkDrive=Instalacija nije moguća na mrežnom disku. +CannotInstallToUNCPath=Instalacija nije moguća za UNC putanju. +InvalidPath=Morate unijeti punu putanju zajedno sa slovom diska; npr:%n%nC:\APP%n%nili UNC putanju u obliku:%n%n\\server\share +InvalidDrive=Disk ili UNC share koji ste odabrali ne postoji ili je nedostupan. Odaberite neki drugi. +DiskSpaceWarningTitle=Nedovoljno prostora na disku +DiskSpaceWarning=Instalacija zahtjeva bar %1 KB slobodnog prostora, a odabrani disk ima samo %2 KB na raspolaganju.%n%nŽelite li nastaviti? +DirNameTooLong=Naziv ili putanja do foldera su predugi. +InvalidDirName=Naziv foldera nije ispravan. +BadDirName32=Naziv foldera ne smije sadržavati niti jedan od sljedećih znakova:%n%n%1 +DirExistsTitle=Folder postoji +DirExists=Folder:%n%n%1%n%nveć postoji. Želite li i dalje izvršiti instalaciju u njega? +DirDoesntExistTitle=Folder ne postoji +DirDoesntExist=Folder:%n%n%1%n%nne postoji. Želite li ga napraviti? + +; *** "Select Components" wizard page +WizardSelectComponents=Odaberite komponente +SelectComponentsDesc=Koje komponente želite instalirati? +SelectComponentsLabel2=Odaberite komponente koje želite instalirati ili uklonite kvačicu pored komponenti koje ne želite. Kliknite Dalje kad budete spremni da nastavite. +FullInstallation=Puna instalacija +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Kompaktna instalacija +CustomInstallation=Instalacija prema želji +NoUninstallWarningTitle=Komponente postoje +NoUninstallWarning=Instalacija je detektovala da na vašem računaru već postoje sljedeće komponente:%n%n%1%n%nAko ove komponente ne odaberete, neće doći do njihove deinstalacije.%n%nŽelite li ipak nastaviti? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Trenutni izbor zahtijeva najmanje [mb] GB prostora na disku. +ComponentsDiskSpaceMBLabel=Trenutni izbor zahtijeva najmanje [mb] MB prostora na disku. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Izaberite dodatne radnje +SelectTasksDesc=Koje dodatne radnje želite da se izvrše? +SelectTasksLabel2=Izaberite radnje koje će se izvršiti tokom instalacije programa [name], onda kliknite Dalje. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Izaberite programsku grupu +SelectStartMenuFolderDesc=Gdje instalacija treba da napravi prečice? +SelectStartMenuFolderLabel3=Izaberite folder iz Start menija u koji želite da instalacija kreira prečicu, a zatim kliknite na Dalje. +SelectStartMenuFolderBrowseLabel=Za nastavak, kliknite Dalje. Ako želite da izaberete drugi folder, kliknite Izaberi. +MustEnterGroupName=Morate unijeti ime programske grupe. +GroupNameTooLong=Naziv foldera ili putanje je predug. +InvalidGroupName=Naziv foldera nije ispravan. +BadGroupName=Naziv foldera ne smije sadržavati niti jedan od sljedećih znakova:%n%n%1 +NoProgramGroupCheck2=&Ne kreiraj programsku grupu + +; *** "Ready to Install" wizard page +WizardReady=Spreman za instalaciju +ReadyLabel1=Sada smo spremni za instalaciju [name] na vaš računar. +ReadyLabel2a=Kliknite na Instaliraj ako želite instalirati program ili na Nazad ako želite pregledati ili promjeniti postavke. +ReadyLabel2b=Kliknite na Instaliraj ako želite nastaviti sa instalacijom programa. +ReadyMemoUserInfo=Informacije o korisniku: +ReadyMemoDir=Odredišni folder: +ReadyMemoType=Tip instalacije: +ReadyMemoComponents=Odabrane komponente: +ReadyMemoGroup=Programska grupa: +ReadyMemoTasks=Dodatne radnje: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Preuzimanje dodatnih datoteka... +ButtonStopDownload=&Zaustavi preuzimanje +StopDownload=Jeste li sigurni da želite zaustaviti preuzimanje? +ErrorDownloadAborted=Preuzimanje je prekinuto +ErrorDownloadFailed=Preuzimanje nije uspjelo: %1 %2 +ErrorDownloadSizeFailed=Dobijanje veličine nije uspjelo: %1 %2 +ErrorFileHash1=Heš datoteke nije uspio: %1 +ErrorFileHash2=Neispravan heš datoteke: očekivan %1, pronađen %2 +ErrorProgress=Neispravan napredak: %1 od %2 +ErrorFileSize=Neispravna veličina datoteke: očekivana %1, pronađena %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Pripremam instalaciju +PreparingDesc=Pripreme za instalaciju [name] na vaš računar. +PreviousInstallNotCompleted=Instalacija/deinstalacija prethodnog programa nije završena. Morate restartovati vaš računar kako bi završili tu instalaciju.%n%nNakon toga, ponovno pokrenite ovaj program kako bi dovršili instalaciju za [name]. +CannotContinue=Instalacija ne može nastaviti. Molimo vas da kliknete na Otkaži za izlaz. +ApplicationsFound=Sljedeće aplikacije koriste datoteke koje ova instalacija treba da nadogradi. Preporučujemo vam da omogućite instalaciji da automatski zatvori ove aplikacije. +ApplicationsFound2=Sljedeće aplikacije koriste datoteke koje ova instalacija treba da nadogradi. Preporučujemo vam da omogućite instalaciji da automatski zatvori ove aplikacije. Nakon što se sve završi, bit će izvršen pokušaj ponovnog pokretanja ovih aplikacija. +CloseApplications=&Automatski zatvori aplikacije +DontCloseApplications=&Ne zatvaraj aplikacije +ErrorCloseApplications=Instalacija nije mogla automatski zatvoriti sve aplikacije. Prije nego nastavite, preporučujemo vam da zatvorite sve aplikacije koje koriste datoteke koje će ova instalacija trebati da ažurira. +PrepareToInstallNeedsRestart=Instalacija mora ponovo pokrenuti vaš računar. Nakon ponovnog pokretanja vašeg računara, pokrenite instalaciju ponovo da biste završili instalaciju [name].%n%nŽelite li da ponovo pokrenete računar sada? + +; *** "Installing" wizard page +WizardInstalling=Instaliram +InstallingLabel=Pričekajte dok se ne završi instalacija programa [name] na vaš računar. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Završavam instalaciju [name] +FinishedLabelNoIcons=Instalacija programa [name] je završena. +FinishedLabel=Instalacija programa [name] je završena. Program možete pokrenuti koristeći instalirane ikone. +ClickFinish=Kliknite na Završi da biste izašli iz instalacije. +FinishedRestartLabel=Da biste instalaciju programa [name] završili, potrebno je restartovati računar. Želite li to sada učiniti? +FinishedRestartMessage=Završetak instalacije programa [name] zahtjeva restart vašeg računara.%n%nŽelite li to sada učiniti? +ShowReadmeCheck=Da, želim pročitati README datoteku. +YesRadio=&Da, restartuj računar sada +NoRadio=&Ne, restartovat ću računar kasnije +; used for example as 'Run MyProg.exe' +RunEntryExec=Pokreni %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Pročitaj %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Instalacija treba sljedeći disk +SelectDiskLabel2=Molimo ubacite Disk %1 i kliknite U redu.%n%nAko se datoteke na ovom disku nalaze u drugom folderu a ne u onom prikazanom ispod, unesite ispravnu putanju ili kliknite na Izaberi. +PathLabel=&Putanja: +FileNotInDir2=Datoteka "%1" ne postoji u "%2". Molimo vas ubacite odgovorajući disk ili odaberete drugi folder. +SelectDirectoryLabel=Molimo odaberite lokaciju sljedećeg diska. + +; *** Installation phase messages +SetupAborted=Instalacija nije završena.%n%nMolimo vas da riješite problem i ponovo pokrenete instalaciju. +AbortRetryIgnoreSelectAction=Izaberi radnju +AbortRetryIgnoreRetry=&Pokušaj ponovo +AbortRetryIgnoreIgnore=&Zanemari grešku i nastavi +AbortRetryIgnoreCancel=Prekini instalaciju + +; *** Installation status messages +StatusClosingApplications=Zatvaram aplikacije... +StatusCreateDirs=Kreiram foldere... +StatusExtractFiles=Raspakujem datoteke... +StatusCreateIcons=Kreiram prečice... +StatusCreateIniEntries=Kreiram INI datoteke... +StatusCreateRegistryEntries=Kreiram podatke za registracijsku bazu... +StatusRegisterFiles=Registrujem datoteke... +StatusSavingUninstall=Snimam deinstalacijske informacije... +StatusRunProgram=Završavam instalaciju... +StatusRestartingApplications=Restartujem aplikaciju... +StatusRollback=Poništavam promjene... + +; *** Misc. errors +ErrorInternal2=Interna greška: %1 +ErrorFunctionFailedNoCode=%1 nije uspjelo +ErrorFunctionFailed=%1 nije uspjelo; kod %2 +ErrorFunctionFailedWithMessage=%1 nije uspjelo; kod %2.%n%3 +ErrorExecutingProgram=Ne mogu pokrenuti datoteku:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Greška pri otvaranju registracijskog ključa:%n%1\%2 +ErrorRegCreateKey=Greška pri kreiranju registracijskog ključa:%n%1\%2 +ErrorRegWriteKey=Greška pri zapisivanju registracijskog ključa:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Greška pri kreiranju INI podataka u datoteci "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Preskočite ovu datoteku (nije preporučeno) +FileAbortRetryIgnoreIgnoreNotRecommended=&Zanemari grešku i nastavi (nije preporučeno) +SourceIsCorrupted=Izvorna datoteka je oštećena +SourceDoesntExist=Izvorna datoteka "%1" ne postoji +ExistingFileReadOnly2=Postojeća datoteka ne može biti zamijenjena jer je označena samo za čitanje. +ExistingFileReadOnlyRetry=&Uklonite atribut samo za čitanje i pokušajte ponovo +ExistingFileReadOnlyKeepExisting=&Zadržite postojeću datoteku +ErrorReadingExistingDest=Došlo je do greške prilikom pokušaja čitanja postojeće datoteke: +FileExistsSelectAction=Izaberite radnju +FileExists2=Datoteka već postoji. +FileExistsOverwriteExisting=&Zamijeni postojeću datoteku +FileExistsKeepExisting=&Zadrži postojeću datoteku +FileExistsOverwriteOrKeepAll=&Uradi ovo i za sljedeća neslaganja +ExistingFileNewerSelectAction=Izaberi radnju +ExistingFileNewer2=Postojeća datoteka je novija od one koja se pokušava instalirati. +ExistingFileNewerOverwriteExisting=&Zamijeni postojeću datoteku +ExistingFileNewerKeepExisting=&Zadrži postojeću datoteku (preporučeno) +ExistingFileNewerOverwriteOrKeepAll=&Uradi ovo i za sljedeća neslaganja +ErrorChangingAttr=Pojavila se greška prilikom pokušaja promjene atributa postojeće datoteke: +ErrorCreatingTemp=Pojavila se greška prilikom pokušaja kreiranja datoteke u odredišnom folderu: +ErrorReadingSource=Pojavila se greška prilikom pokušaja čitanja izvorne datoteke: +ErrorCopying=Pojavila se greška prilikom pokušaja kopiranja datoteke: +ErrorReplacingExistingFile=Pojavila se greška prilikom pokušaja zamjene datoteke: +ErrorRestartReplace=Ponovno pokretanje i zamjena nije uspjela: +ErrorRenamingTemp=Pojavila se greška prilikom pokušaja preimenovanja datoteke u odredišnom folderu: +ErrorRegisterServer=Ne mogu registrovati DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 nije ispravno izvršen, kod na kraju izvršavanja %1 +ErrorRegisterTypeLib=Ne mogu registrovati tip biblioteke: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=Svi korisnici +UninstallDisplayNameMarkCurrentUser=Trenutni korisnik + +; *** Post-installation errors +ErrorOpeningReadme=Pojavila se greška prilikom pokušaja otvaranja README datoteke. +ErrorRestartingComputer=Instalacija ne može restartovati vaš računar. Molimo vas da to učinite ručno. + +; *** Uninstaller messages +UninstallNotFound=Datoteka "%1" ne postoji. Deinstalacija prekinuta. +UninstallOpenError=Datoteka "%1" se ne može otvoriti. Deinstalacija nije moguća +UninstallUnsupportedVer=Deinstalacijska log datoteka "%1" je u formatu koji nije prepoznat od ove verzije deinstalera. Nije moguća deinstalacija +UninstallUnknownEntry=Nepoznat zapis (%1) je pronadjen u deinstalacijskoj log datoteci +ConfirmUninstall=Jeste li sigurni da želite ukloniti %1 i sve njegove komponente? +UninstallOnlyOnWin64=Ovaj program se može deinstalirati samo na 64-bitnom Windowsu. +OnlyAdminCanUninstall=Ova instalacija može biti uklonjena samo od korisnika sa administratorskim privilegijama. +UninstallStatusLabel=Molimo pričekajte dok %1 ne bude uklonjen s vašeg računara. +UninstalledAll=Program %1 je uspješno uklonjen sa vašeg računara. +UninstalledMost=Deinstalacija programa %1 je završena.%n%nNeke elemente nije bilo moguće ukloniti. Molimo vas da to učinite ručno. +UninstalledAndNeedsRestart=Da bi završili deinstalaciju %1, Vaš računar morate restartati%n%nŽelite li to učiniti sada? +UninstallDataCorrupted="%1" datoteka je oštećena. Deinstalacija nije moguća. + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Ukloni dijeljenu datoteku +ConfirmDeleteSharedFile2=Sistem smatra da sljedeće dijeljene datoteke ne koristi nijedan drugi program. Želite li ukloniti te dijeljene datoteke?%n%nAko neki programi i dalje koriste ove datoteke, a one se obrišu, ti programi neće raditi ispravno. Ako niste sigurni, odaberite Ne. Ostavljanje datoteka neće uzrokovati štetu vašem sistemu. +SharedFileNameLabel=Datoteka: +SharedFileLocationLabel=Putanja: +WizardUninstalling=Status deinstalacije +StatusUninstalling=Deinstaliram %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Instaliram %1. +ShutdownBlockReasonUninstallingApp=Deinstaliram %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 verzija %2 +AdditionalIcons=Dodatne ikone: +CreateDesktopIcon=Kreiraj &desktop ikonu +CreateQuickLaunchIcon=Kreiraj ikonu za &brzo pokretanje +ProgramOnTheWeb=%1 na webu +UninstallProgram=Deinstaliraj %1 +LaunchProgram=Pokreni %1 +AssocFileExtension=&Asociraj %1 sa %2 ekstenzijom +AssocingFileExtension=Asociram %1 sa %2 ekstenzijom... +AutoStartProgramGroupDescription=Pokretanje: +AutoStartProgram=Automatski pokreći %1 +AddonHostProgramNotFound=%1 nije mogao biti pronađen u folderu koji ste odabrali.%n%nŽelite li nastaviti s ovom akcijom? diff --git a/Files/Languages/Unofficial/ChineseSimplified.isl b/Files/Languages/Unofficial/ChineseSimplified.isl new file mode 100644 index 00000000..1d1b7c06 --- /dev/null +++ b/Files/Languages/Unofficial/ChineseSimplified.isl @@ -0,0 +1,394 @@ +; *** Inno Setup version 6.1.0+ Chinese Simplified messages *** +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). +; +; Maintained by Zhenghan Yang +; Email: 847320916@QQ.com +; Translation based on network resource +; The latest Translation is on https://github.com/kira-96/Inno-Setup-Chinese-Simplified-Translation +; + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=简体中文 +; If Language Name display incorrect, uncomment next line +; LanguageName=<7B80><4F53><4E2D><6587> +; About LanguageID, to reference link: +; https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/a9eac961-e77d-41a6-90a5-ce1a8b0cdb9c +LanguageID=$0804 +LanguageCodePage=936 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +DialogFontName=Microsoft YaHei UI +;DialogFontSize=8 +WelcomeFontName=Microsoft YaHei UI +;WelcomeFontSize=12 +TitleFontName=Microsoft YaHei UI +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** 应用程序标题 +SetupAppTitle=安装 +SetupWindowTitle=安装 - %1 +UninstallAppTitle=卸载 +UninstallAppFullTitle=%1 卸载 + +; *** Misc. common +InformationTitle=信息 +ConfirmTitle=确认 +ErrorTitle=错误 + +; *** SetupLdr messages +SetupLdrStartupMessage=现在将安装 %1。您想要继续吗? +LdrCannotCreateTemp=不能创建临时文件。安装中断。 +LdrCannotExecTemp=不能执行临时目录中的文件。安装中断。 +HelpTextNote= + +; *** 启动错误消息 +LastErrorMessage=%1.%n%n错误 %2: %3 +SetupFileMissing=安装目录中的文件 %1 丢失。请修正这个问题或者获取程序的新副本。 +SetupFileCorrupt=安装文件已损坏。请获取程序的新副本。 +SetupFileCorruptOrWrongVer=安装文件已损坏,或是与这个安装程序的版本不兼容。请修正这个问题或获取新的程序副本。 +InvalidParameter=无效的命令行参数:%n%n%1 +SetupAlreadyRunning=安装程序正在运行。 +WindowsVersionNotSupported=这个程序不支持当前计算机运行的 Windows 版本。 +WindowsServicePackRequired=这个程序需要 %1 服务包 %2 或更高。 +NotOnThisPlatform=这个程序将不能运行于 %1。 +OnlyOnThisPlatform=这个程序必须运行于 %1。 +OnlyOnTheseArchitectures=这个程序只能在为下列处理器架构的 Windows 版本中进行安装:%n%n%1 +WinVersionTooLowError=这个程序需要 %1 版本 %2 或更高。 +WinVersionTooHighError=这个程序不能安装于 %1 版本 %2 或更高。 +AdminPrivilegesRequired=在安装这个程序时您必须以管理员身份登录。 +PowerUserPrivilegesRequired=在安装这个程序时您必须以管理员身份或有权限的用户组身份登录。 +SetupAppRunningError=安装程序发现 %1 当前正在运行。%n%n请先关闭所有运行的窗口,然后点击“确定”继续,或按“取消”退出。 +UninstallAppRunningError=卸载程序发现 %1 当前正在运行。%n%n请先关闭所有运行的窗口,然后点击“确定”继续,或按“取消”退出。 + +; *** 启动问题 +PrivilegesRequiredOverrideTitle=选择安装程序模式 +PrivilegesRequiredOverrideInstruction=选择安装模式 +PrivilegesRequiredOverrideText1=%1 可以为所有用户安装(需要管理员权限),或仅为您安装。 +PrivilegesRequiredOverrideText2=%1 只能为您安装,或为所有用户安装(需要管理员权限)。 +PrivilegesRequiredOverrideAllUsers=为所有用户安装(&A) +PrivilegesRequiredOverrideAllUsersRecommended=为所有用户安装(&A) (建议选项) +PrivilegesRequiredOverrideCurrentUser=仅为我安装(&M) +PrivilegesRequiredOverrideCurrentUserRecommended=仅为我安装(&M) (建议选项) + +; *** 其它错误 +ErrorCreatingDir=安装程序不能创建目录“%1”。 +ErrorTooManyFilesInDir=不能在目录“%1”中创建文件,因为里面的文件太多 + +; *** 安装程序公共消息 +ExitSetupTitle=退出安装程序 +ExitSetupMessage=安装程序尚未完成安装。如果您现在退出,程序将不能安装。%n%n您可以以后再运行安装程序完成安装。%n%n现在退出安装程序吗? +AboutSetupMenuItem=关于安装程序(&A)... +AboutSetupTitle=关于安装程序 +AboutSetupMessage=%1 版本 %2%n%3%n%n%1 主页:%n%4 +AboutSetupNote= +TranslatorNote=Translated by Zhenghan Yang. + +; *** 按钮 +ButtonBack=< 上一步(&B) +ButtonNext=下一步(&N) > +ButtonInstall=安装(&I) +ButtonOK=确定 +ButtonCancel=取消 +ButtonYes=是(&Y) +ButtonYesToAll=全是(&A) +ButtonNo=否(&N) +ButtonNoToAll=全否(&O) +ButtonFinish=完成(&F) +ButtonBrowse=浏览(&B)... +ButtonWizardBrowse=浏览(&R)... +ButtonNewFolder=新建文件夹(&M) + +; *** “选择语言”对话框消息 +SelectLanguageTitle=选择安装语言 +SelectLanguageLabel=选择安装时要使用的语言。 + +; *** 公共向导文字 +ClickNext=点击“下一步”继续,或点击“取消”退出安装程序。 +BeveledLabel= +BrowseDialogTitle=浏览文件夹 +BrowseDialogLabel=在下列列表中选择一个文件夹,然后点击“确定”。 +NewFolderName=新建文件夹 + +; *** “欢迎”向导页 +WelcomeLabel1=欢迎使用 [name] 安装向导 +WelcomeLabel2=现在将安装 [name/ver] 到您的电脑中。%n%n推荐您在继续安装前关闭所有其它应用程序。 + +; *** “密码”向导页 +WizardPassword=密码 +PasswordLabel1=这个安装程序有密码保护。 +PasswordLabel3=请输入密码,然后点击“下一步”继续。密码区分大小写。 +PasswordEditLabel=密码(&P): +IncorrectPassword=您所输入的密码不正确,请重试。 + +; *** “许可协议”向导页 +WizardLicense=许可协议 +LicenseLabel=继续安装前请阅读下列重要信息。 +LicenseLabel3=请仔细阅读下列许可协议。您在继续安装前必须同意这些协议条款。 +LicenseAccepted=我同意此协议(&A) +LicenseNotAccepted=我拒绝此协议(&D) + +; *** “信息”向导页 +WizardInfoBefore=信息 +InfoBeforeLabel=请在继续安装前阅读下列重要信息。 +InfoBeforeClickLabel=如果您想继续安装,点击“下一步”。 +WizardInfoAfter=信息 +InfoAfterLabel=请在继续安装前阅读下列重要信息。 +InfoAfterClickLabel=如果您想继续安装,点击“下一步”。 + +; *** “用户信息”向导页 +WizardUserInfo=用户信息 +UserInfoDesc=请输入您的信息。 +UserInfoName=用户名(&U): +UserInfoOrg=组织(&O): +UserInfoSerial=序列号(&S): +UserInfoNameRequired=您必须输入用户名。 + +; *** “选择目标目录”向导页 +WizardSelectDir=选择目标位置 +SelectDirDesc=您想将 [name] 安装在哪里? +SelectDirLabel3=安装程序将安装 [name] 到下列文件夹中。 +SelectDirBrowseLabel=点击“下一步”继续。如果您想选择其它文件夹,点击“浏览”。 +DiskSpaceGBLabel=至少需要有 [gb] GB 的可用磁盘空间。 +DiskSpaceMBLabel=至少需要有 [mb] MB 的可用磁盘空间。 +CannotInstallToNetworkDrive=安装程序无法安装到一个网络驱动器。 +CannotInstallToUNCPath=安装程序无法安装到一个UNC路径。 +InvalidPath=您必须输入一个带驱动器卷标的完整路径,例如:%n%nC:\APP%n%n或下列形式的UNC路径:%n%n\\server\share +InvalidDrive=您选定的驱动器或 UNC 共享不存在或不能访问。请选选择其它位置。 +DiskSpaceWarningTitle=没有足够的磁盘空间 +DiskSpaceWarning=安装程序至少需要 %1 KB 的可用空间才能安装,但选定驱动器只有 %2 KB 的可用空间。%n%n您一定要继续吗? +DirNameTooLong=文件夹名称或路径太长。 +InvalidDirName=文件夹名称无效。 +BadDirName32=文件夹名称不能包含下列任何字符:%n%n%1 +DirExistsTitle=文件夹已存在 +DirExists=文件夹:%n%n%1%n%n已经存在。您一定要安装到这个文件夹中吗? +DirDoesntExistTitle=文件夹不存在 +DirDoesntExist=文件夹:%n%n%1%n%n不存在。您想要创建此文件夹吗? + +; *** “选择组件”向导页 +WizardSelectComponents=选择组件 +SelectComponentsDesc=您想安装哪些程序的组件? +SelectComponentsLabel2=选择您想要安装的组件;清除您不想安装的组件。然后点击“下一步”继续。 +FullInstallation=完全安装 +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=简洁安装 +CustomInstallation=自定义安装 +NoUninstallWarningTitle=组件已存在 +NoUninstallWarning=安装程序检测到下列组件已在您的电脑中安装:%n%n%1%n%n取消选定这些组件将不能卸载它们。%n%n您一定要继续吗? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=当前选择的组件至少需要 [gb] GB 的磁盘空间。 +ComponentsDiskSpaceMBLabel=当前选择的组件至少需要 [mb] MB 的磁盘空间。 + +; *** “选择附加任务”向导页 +WizardSelectTasks=选择附加任务 +SelectTasksDesc=您想要安装程序执行哪些附加任务? +SelectTasksLabel2=选择您想要安装程序在安装 [name] 时执行的附加任务,然后点击“下一步”。 + +; *** “选择开始菜单文件夹”向导页 +WizardSelectProgramGroup=选择开始菜单文件夹 +SelectStartMenuFolderDesc=安装程序应该在哪里放置程序的快捷方式? +SelectStartMenuFolderLabel3=安装程序现在将在下列开始菜单文件夹中创建程序的快捷方式。 +SelectStartMenuFolderBrowseLabel=点击“下一步”继续。如果您想选择其它文件夹,点击“浏览”。 +MustEnterGroupName=您必须输入一个文件夹名。 +GroupNameTooLong=文件夹名或路径太长。 +InvalidGroupName=文件夹名无效。 +BadGroupName=文件夹名不能包含下列任何字符:%n%n%1 +NoProgramGroupCheck2=不创建开始菜单文件夹(&D) + +; *** “准备安装”向导页 +WizardReady=准备安装 +ReadyLabel1=安装程序现在准备开始安装 [name] 到您的电脑中。 +ReadyLabel2a=点击“安装”继续此安装程序。如果您想要回顾或修改设置,请点击“上一步”。 +ReadyLabel2b=点击“安装”继续此安装程序? +ReadyMemoUserInfo=用户信息: +ReadyMemoDir=目标位置: +ReadyMemoType=安装类型: +ReadyMemoComponents=选定组件: +ReadyMemoGroup=开始菜单文件夹: +ReadyMemoTasks=附加任务: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=正在下载附加文件... +ButtonStopDownload=停止下载(&S) +StopDownload=您确定要停止下载吗? +ErrorDownloadAborted=下载已中止 +ErrorDownloadFailed=下载失败:%1 %2 +ErrorDownloadSizeFailed=获取下载大小失败:%1 %2 +ErrorFileHash1=校验文件哈希失败:%1 +ErrorFileHash2=无效的文件哈希:预期为 %1,实际为 %2 +ErrorProgress=无效的进度:%1,总共%2 +ErrorFileSize=文件大小错误:预期为 %1,实际为 %2 + +; *** “正在准备安装”向导页 +WizardPreparing=正在准备安装 +PreparingDesc=安装程序正在准备安装 [name] 到您的电脑中。 +PreviousInstallNotCompleted=先前程序的安装/卸载未完成。您需要重新启动您的电脑才能完成安装。%n%n在重新启动电脑后,再运行安装完成 [name] 的安装。 +CannotContinue=安装程序不能继续。请点击“取消”退出。 +ApplicationsFound=下列应用程序正在使用的文件需要更新设置。它是建议您允许安装程序自动关闭这些应用程序。 +ApplicationsFound2=下列应用程序正在使用的文件需要更新设置。它是建议您允许安装程序自动关闭这些应用程序。安装完成后,安装程序将尝试重新启动应用程序。 +CloseApplications=自动关闭该应用程序(&A) +DontCloseApplications=不要关闭该应用程序(&D) +ErrorCloseApplications=安装程序无法自动关闭所有应用程序。在继续之前,我们建议您关闭所有使用需要更新的安装程序文件。 +PrepareToInstallNeedsRestart=安装程序必须重新启动计算机。重新启动计算机后,请再次运行安装程序以完成 [name] 的安装。%n%n是否立即重新启动? + +; *** “正在安装”向导页 +WizardInstalling=正在安装 +InstallingLabel=安装程序正在安装 [name] 到您的电脑中,请稍等。 + +; *** “安装完成”向导页 +FinishedHeadingLabel=[name] 安装完成 +FinishedLabelNoIcons=安装程序已在您的电脑中安装了 [name]。 +FinishedLabel=安装程序已在您的电脑中安装了 [name]。此应用程序可以通过选择安装的快捷方式运行。 +ClickFinish=点击“完成”退出安装程序。 +FinishedRestartLabel=要完成 [name] 的安装,安装程序必须重新启动您的电脑。您想要立即重新启动吗? +FinishedRestartMessage=要完成 [name] 的安装,安装程序必须重新启动您的电脑。%n%n您想要立即重新启动吗? +ShowReadmeCheck=是,我想查阅自述文件 +YesRadio=是,立即重新启动电脑(&Y) +NoRadio=否,稍后重新启动电脑(&N) +; used for example as 'Run MyProg.exe' +RunEntryExec=运行 %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=查阅 %1 + +; *** “安装程序需要下一张磁盘”提示 +ChangeDiskTitle=安装程序需要下一张磁盘 +SelectDiskLabel2=请插入磁盘 %1 并点击“确定”。%n%n如果这个磁盘中的文件可以在下列文件夹之外的文件夹中找到,请输入正确的路径或点击“浏览”。 +PathLabel=路径(&P): +FileNotInDir2=文件“%1”不能在“%2”定位。请插入正确的磁盘或选择其它文件夹。 +SelectDirectoryLabel=请指定下一张磁盘的位置。 + +; *** 安装状态消息 +SetupAborted=安装程序未完成安装。%n%n请修正这个问题并重新运行安装程序。 +AbortRetryIgnoreSelectAction=选择操作 +AbortRetryIgnoreRetry=重试(&T) +AbortRetryIgnoreIgnore=忽略错误并继续(&I) +AbortRetryIgnoreCancel=关闭安装程序 + +; *** 安装状态消息 +StatusClosingApplications=正在关闭应用程序... +StatusCreateDirs=正在创建目录... +StatusExtractFiles=正在解压缩文件... +StatusCreateIcons=正在创建快捷方式... +StatusCreateIniEntries=正在创建 INI 条目... +StatusCreateRegistryEntries=正在创建注册表条目... +StatusRegisterFiles=正在注册文件... +StatusSavingUninstall=正在保存卸载信息... +StatusRunProgram=正在完成安装... +StatusRestartingApplications=正在重启应用程序... +StatusRollback=正在撤销更改... + +; *** 其它错误 +ErrorInternal2=内部错误:%1 +ErrorFunctionFailedNoCode=%1 失败 +ErrorFunctionFailed=%1 失败;错误代码 %2 +ErrorFunctionFailedWithMessage=%1 失败;错误代码 %2.%n%3 +ErrorExecutingProgram=不能执行文件:%n%1 + +; *** 注册表错误 +ErrorRegOpenKey=打开注册表项时出错:%n%1\%2 +ErrorRegCreateKey=创建注册表项时出错:%n%1\%2 +ErrorRegWriteKey=写入注册表项时出错:%n%1\%2 + +; *** INI 错误 +ErrorIniEntry=在文件“%1”中创建INI条目时出错。 + +; *** 文件复制错误 +FileAbortRetryIgnoreSkipNotRecommended=跳过这个文件(&S) (不推荐) +FileAbortRetryIgnoreIgnoreNotRecommended=忽略错误并继续(&I) (不推荐) +SourceIsCorrupted=源文件已损坏 +SourceDoesntExist=源文件“%1”不存在 +ExistingFileReadOnly2=无法替换现有文件,因为它是只读的。 +ExistingFileReadOnlyRetry=移除只读属性并重试(&R) +ExistingFileReadOnlyKeepExisting=保留现有文件(&K) +ErrorReadingExistingDest=尝试读取现有文件时出错: +FileExistsSelectAction=选择操作 +FileExists2=文件已经存在。 +FileExistsOverwriteExisting=覆盖已经存在的文件(&O) +FileExistsKeepExisting=保留现有的文件(&K) +FileExistsOverwriteOrKeepAll=为所有的冲突文件执行此操作(&D) +ExistingFileNewerSelectAction=选择操作 +ExistingFileNewer2=现有的文件比安装程序将要安装的文件更新。 +ExistingFileNewerOverwriteExisting=覆盖已经存在的文件(&O) +ExistingFileNewerKeepExisting=保留现有的文件(&K) (推荐) +ExistingFileNewerOverwriteOrKeepAll=为所有的冲突文件执行此操作(&D) +ErrorChangingAttr=尝试改变下列现有的文件的属性时出错: +ErrorCreatingTemp=尝试在目标目录创建文件时出错: +ErrorReadingSource=尝试读取下列源文件时出错: +ErrorCopying=尝试复制下列文件时出错: +ErrorReplacingExistingFile=尝试替换现有的文件时出错: +ErrorRestartReplace=重新启动替换失败: +ErrorRenamingTemp=尝试重新命名以下目标目录中的一个文件时出错: +ErrorRegisterServer=无法注册 DLL/OCX:%1 +ErrorRegSvr32Failed=RegSvr32 失败;退出代码 %1 +ErrorRegisterTypeLib=无法注册类型库:%1 + +; *** 卸载显示名字标记 +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32位 +UninstallDisplayNameMark64Bit=64位 +UninstallDisplayNameMarkAllUsers=所有用户 +UninstallDisplayNameMarkCurrentUser=当前用户 + +; *** 安装后错误 +ErrorOpeningReadme=尝试打开自述文件时出错。 +ErrorRestartingComputer=安装程序不能重新启动电脑,请手动重启。 + +; *** 卸载消息 +UninstallNotFound=文件“%1”不存在。无法卸载。 +UninstallOpenError=文件“%1”不能打开。无法卸载。 +UninstallUnsupportedVer=此版本的卸载程序无法识别卸载日志文件“%1”的格式。无法卸载 +UninstallUnknownEntry=在卸载日志中遇到一个未知的条目 (%1) +ConfirmUninstall=您确认想要完全删除 %1 及它的所有组件吗? +UninstallOnlyOnWin64=这个安装程序只能在64位Windows中进行卸载。 +OnlyAdminCanUninstall=这个安装的程序需要有管理员权限的用户才能卸载。 +UninstallStatusLabel=正在从您的电脑中删除 %1,请稍等。 +UninstalledAll=%1 已顺利地从您的电脑中删除。 +UninstalledMost=%1 卸载完成。%n%n有一些内容无法被删除。您可以手动删除它们。 +UninstalledAndNeedsRestart=要完成 %1 的卸载,您的电脑必须重新启动。%n%n您想立即重新启动电脑吗? +UninstallDataCorrupted=文件“%1”已损坏,无法卸载 + +; *** 卸载状态消息 +ConfirmDeleteSharedFileTitle=删除共享文件吗? +ConfirmDeleteSharedFile2=系统中包含的下列共享文件已经不再被其它程序使用。您想要卸载程序删除这些共享文件吗?%n%n如果这些文件被删除,但还有程序正在使用这些文件,这些程序可能不能正确执行。如果您不能确定,选择“否”。把这些文件保留在系统中以免引起问题。 +SharedFileNameLabel=文件名: +SharedFileLocationLabel=位置: +WizardUninstalling=卸载状态 +StatusUninstalling=正在卸载 %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=正在安装 %1。 +ShutdownBlockReasonUninstallingApp=正在卸载 %1。 + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 版本 %2 +AdditionalIcons=附加快捷方式: +CreateDesktopIcon=创建桌面快捷方式(&D) +CreateQuickLaunchIcon=创建快速运行栏快捷方式(&Q) +ProgramOnTheWeb=%1 网站 +UninstallProgram=卸载 %1 +LaunchProgram=运行 %1 +AssocFileExtension=将 %2 文件扩展名与 %1 建立关联(&A) +AssocingFileExtension=正在将 %2 文件扩展名与 %1 建立关联... +AutoStartProgramGroupDescription=启动组: +AutoStartProgram=自动启动 %1 +AddonHostProgramNotFound=%1无法找到您所选择的文件夹。%n%n您想要继续吗? diff --git a/Files/Languages/Unofficial/ChineseTraditional.isl b/Files/Languages/Unofficial/ChineseTraditional.isl new file mode 100644 index 00000000..b8a50d59 --- /dev/null +++ b/Files/Languages/Unofficial/ChineseTraditional.isl @@ -0,0 +1,384 @@ +; *** Inno Setup version 6.1.0+ Chinese (Traditional) messages *** +; Name: Enfeng Tsao, nelson22768384@gmail.com +; Based on 5.5.3+ translations by Samuel Lee, Email: 751555749@qq.com +; Translation based on network resource +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=<7e41><9ad4><4e2d><6587> +LanguageID=$0404 +LanguageCodepage=950 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;TitleFontName=Arial +;TitleFontSize=29 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=安裝程式 +SetupWindowTitle=%1 安裝程式 +UninstallAppTitle=解除安裝 +UninstallAppFullTitle=解除安裝 %1 + +; *** Misc. common +InformationTitle=訊息 +ConfirmTitle=確認 +ErrorTitle=錯誤 + +; *** SetupLdr messages +SetupLdrStartupMessage=這將會安裝 %1。您想要繼續嗎? +LdrCannotCreateTemp=無法建立暫存檔案。安裝程式將會結束。 +LdrCannotExecTemp=無法執行暫存檔案。安裝程式將會結束。 +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1%n%n錯誤 %2: %3 +SetupFileMissing=安裝資料夾中遺失檔案 %1。請修正此問題或重新取得此軟體。 +SetupFileCorrupt=安裝檔案已經損毀。請重新取得此軟體。 +SetupFileCorruptOrWrongVer=安裝檔案已經損毀,或與安裝程式的版本不符。請重新取得此軟體。 +InvalidParameter=某個無效的變量已被傳遞到了命令列:%n%n%1 +SetupAlreadyRunning=安裝程式已經在執行。 +WindowsVersionNotSupported=本安裝程式並不支援目前在電腦所運行的 Windows 版本。 +WindowsServicePackRequired=本安裝程式需要 %1 Service Pack %2 或更新。 +NotOnThisPlatform=這個程式無法在 %1 執行。 +OnlyOnThisPlatform=這個程式必須在 %1 執行。 +OnlyOnTheseArchitectures=這個程式只能在專門為以下處理器架構而設計的 Windows 上安裝:%n%n%1 +WinVersionTooLowError=這個程式必須在 %1 版本 %2 或以上的系統執行。 +WinVersionTooHighError=這個程式無法安裝在 %1 版本 %2 或以上的系統。 +AdminPrivilegesRequired=您必須登入成系統管理員以安裝這個程式。 +PowerUserPrivilegesRequired=您必須登入成具有系統管理員或 Power User 權限的使用者以安裝這個程式。 +SetupAppRunningError=安裝程式偵測到 %1 正在執行。%n%n請關閉該程式後按 「確定」 繼續,或按 「取消」 離開。 +UninstallAppRunningError=解除安裝程式偵測到 %1 正在執行。%n%n請關閉該程式後按 「確定」 繼續,或按 「取消」 離開。 + +; *** Startup questions +PrivilegesRequiredOverrideTitle=選擇安裝程式安裝模式 +PrivilegesRequiredOverrideInstruction=選擇安裝模式 +PrivilegesRequiredOverrideText1=可以為所有使用者安裝 %1 (需要系統管理權限),或是僅為您安裝。 +PrivilegesRequiredOverrideText2=可以僅為您安裝 %1,或是為所有使用者安裝 (需要系統管理權限)。 +PrivilegesRequiredOverrideAllUsers=為所有使用者安裝 (&A) +PrivilegesRequiredOverrideAllUsersRecommended=為所有使用者安裝 (建議選項) (&A) +PrivilegesRequiredOverrideCurrentUser=僅為我安裝 (&M) +PrivilegesRequiredOverrideCurrentUserRecommended=僅為我安裝 (建議選項) (&M) + +; *** Misc. errors +ErrorCreatingDir=安裝程式無法建立資料夾“%1”。 +ErrorTooManyFilesInDir=無法在資料夾“%1”內建立檔案,因為資料夾內有太多的檔案。 + +; *** Setup common messages +ExitSetupTitle=結束安裝程式 +ExitSetupMessage=安裝尚未完成。如果您現在結束安裝程式,這個程式將不會被安裝。%n%n您可以稍後再執行安裝程式以完成安裝程序。您現在要結束安裝程式嗎? +AboutSetupMenuItem=關於安裝程式 (&A)... +AboutSetupTitle=關於安裝程式 +AboutSetupMessage=%1 版本 %2%n%3%n%n%1 網址:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< 上一步(&B) +ButtonInstall=安裝(&I) +ButtonNext=下一步(&N) > +ButtonOK=確定 +ButtonCancel=取消 +ButtonYes=是(&Y) +ButtonYesToAll=全部皆是 (&A) +ButtonNo=否(&N) +ButtonNoToAll=全部皆否 (&O) +ButtonFinish=完成 (&F) +ButtonBrowse=瀏覽 (&B)... +ButtonWizardBrowse=瀏覽 (&R)... +ButtonNewFolder=建立新資料夾 (&M) + +; *** "Select Language" dialog messages +SelectLanguageTitle=選擇安裝語言 +SelectLanguageLabel=選擇在安裝過程中使用的語言: + +; *** Common wizard text +ClickNext=按 「下一步」 繼續安裝,或按 「取消」 結束安裝程式。 +BeveledLabel= +BrowseDialogTitle=瀏覽資料夾 +BrowseDialogLabel=在下面的資料夾列表中選擇一個資料夾,然後按 「確定」。 +NewFolderName=新資料夾 + +; *** "Welcome" wizard page +WelcomeLabel1=歡迎使用 [name] 安裝程式 +WelcomeLabel2=這個安裝程式將會安裝 [name/ver] 到您的電腦。%n%n我們強烈建議您在安裝過程中關閉其它的應用程式,以避免與安裝程式發生沖突。 + +; *** "Password" wizard page +WizardPassword=密碼 +PasswordLabel1=這個安裝程式具有密碼保護。 +PasswordLabel3=請輸入密碼,然後按 「下一步」 繼續。密碼是區分大小寫的。 +PasswordEditLabel=密碼 (&P): +IncorrectPassword=您輸入的密碼不正確,請重新輸入。 + +; *** "License Agreement" wizard page +WizardLicense=授權合約 +LicenseLabel=請閱讀以下授權合約。 +LicenseLabel3=請閱讀以下授權合約,您必須接受合約的各項條款才能繼續安裝。 +LicenseAccepted=我同意 (&A) +LicenseNotAccepted=我不同意 (&D) + +; *** "Information" wizard pages +WizardInfoBefore=訊息 +InfoBeforeLabel=在繼續安裝之前請閱讀以下重要資訊。 +InfoBeforeClickLabel=當您準備好繼續安裝,請按 「下一步」。 +WizardInfoAfter=訊息 +InfoAfterLabel=在繼續安裝之前請閱讀以下重要資訊。 +InfoAfterClickLabel=當您準備好繼續安裝,請按 「下一步」。 + +; *** "User Information" wizard page +WizardUserInfo=使用者資訊 +UserInfoDesc=請輸入您的資料。 +UserInfoName=使用者名稱(&U): +UserInfoOrg=組織(&O): +UserInfoSerial=序號(&S): +UserInfoNameRequired=您必須輸入您的名稱。 + +; *** "Select Destination Location" wizard page +WizardSelectDir=選擇目的資料夾 +SelectDirDesc=選擇安裝程式安裝 [name] 的位置。 +SelectDirLabel3=安裝程式將會把 [name] 安裝到下面的資料夾。 +SelectDirBrowseLabel=按 「下一步」 繼續,如果您想選擇另一個資料夾,請按 「瀏覽」。 +DiskSpaceGBLabel=最少需要 [gb] GB 磁碟空間。 +DiskSpaceMBLabel=最少需要 [mb] MB 磁碟空間。 +CannotInstallToNetworkDrive=安裝程式無法安裝於網絡磁碟機。 +CannotInstallToUNCPath=安裝程式無法安裝於 UNC 路徑。 +InvalidPath=您必須輸入完整的路徑名稱及磁碟機代碼。%n%n例如 C:\App 或 UNC 路徑格式 \\伺服器\共用資料夾。 +InvalidDrive=您選取的磁碟機或 UNC 名稱不存在或無法存取,請選擇其他的目的地。 +DiskSpaceWarningTitle=磁碟空間不足 +DiskSpaceWarning=安裝程式需要至少 %1 KB 的磁碟空間,您所選取的磁碟只有 %2 KB 可用空間。%n%n您要繼續安裝嗎? +DirNameTooLong=資料夾名稱或路徑太長。 +InvalidDirName=資料夾名稱不正確。 +BadDirName32=資料夾名稱不得包含以下特殊字元:%n%n%1 +DirExistsTitle=資料夾已經存在 +DirExists=資料夾:%n%n%1%n%n 已經存在。仍要安裝到該資料夾嗎? +DirDoesntExistTitle=資料夾不存在 +DirDoesntExist=資料夾:%n%n%1%n%n 不存在。要建立該資料夾嗎? + +; *** "Select Components" wizard page +WizardSelectComponents=選擇元件 +SelectComponentsDesc=選擇將會被安裝的元件。 +SelectComponentsLabel2=選擇您想要安裝的元件;清除您不想安裝的元件。然後按 「下一步」 繼續安裝。 +FullInstallation=完整安裝 +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=最小安裝 +CustomInstallation=自訂安裝 +NoUninstallWarningTitle=元件已存在 +NoUninstallWarning=安裝程式偵測到以下元件已經安裝在您的電腦上:%n%n%1%n%n取消選擇這些元件將不會移除它們。%n%n您仍然要繼續嗎? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=目前的選擇需要至少 [gb] GB 磁碟空間。 +ComponentsDiskSpaceMBLabel=目前的選擇需要至少 [mb] MB 磁碟空間。 + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=選擇附加的工作 +SelectTasksDesc=選擇要執行的附加工作。 +SelectTasksLabel2=選擇安裝程式在安裝 [name] 時要執行的附加工作,然後按 「下一步」。 + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=選擇「開始」功能表的資料夾 +SelectStartMenuFolderDesc=選擇安裝程式建立程式的捷徑的位置。 +SelectStartMenuFolderLabel3=安裝程式將會把程式的捷徑建立在下面的「開始」功能表資料夾。 +SelectStartMenuFolderBrowseLabel=按 「下一步」 繼續,如果您想選擇另一個資料夾,請按 「瀏覽」。 +MustEnterGroupName=您必須輸入一個資料夾的名稱。 +GroupNameTooLong=資料夾名稱或路徑太長。 +InvalidGroupName=資料夾名稱不正確。 +BadGroupName=資料夾名稱不得包含下列字元:%n%n%1 +NoProgramGroupCheck2=不要在「開始」功能表中建立資料夾 (&D) + +; *** "Ready to Install" wizard page +WizardReady=準備安裝 +ReadyLabel1=安裝程式將開始安裝 [name] 到您的電腦中。 +ReadyLabel2a=按下 「安裝」 繼續安裝,或按 「上一步」 重新檢視或設定各選項的內容。 +ReadyLabel2b=按下 「安裝」 繼續安裝。 +ReadyMemoUserInfo=使用者資訊 +ReadyMemoDir=目的資料夾: +ReadyMemoType=安裝型態: +ReadyMemoComponents=選擇的元件: +ReadyMemoGroup=「開始」功能表資料夾: +ReadyMemoTasks=附加工作: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=正在下載額外檔案... +ButtonStopDownload=停止下載 (&S) +StopDownload=您確定要停止下載嗎? +ErrorDownloadAborted=已停止下載 +ErrorDownloadFailed=下載失敗: %1 %2 +ErrorDownloadSizeFailed=取得檔案大小失敗: %1 %2 +ErrorFileHash1=檔案雜湊失敗: %1 +ErrorFileHash2=檔案雜湊無效: 必須為 %1,收到 %2 +ErrorProgress=進度無效: %1 之 %2 +ErrorFileSize=檔案大小無效: 必須為 %1,收到 %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=準備安裝程式 +PreparingDesc=安裝程式準備將 [name] 安裝到您的電腦上。 +PreviousInstallNotCompleted=先前的安裝/ 解除安裝尚未完成,您必須重新啟動電腦以完成該安裝。%n%n在重新啟動電腦之後,請再執行這個程式來安裝 [name]。 +CannotContinue=安裝程式無法繼續。請按 「取消」 離開。 +ApplicationsFound=下面的應用程式正在使用安裝程式所需要更新的檔案。建議您允許安裝程式自動關閉這些應用程式。 +ApplicationsFound2=下面的應用程式正在使用安裝程式所需要更新的檔案。建議您允許安裝程式自動關閉這些應用程式。當安裝過程結束後,本安裝程式將會嘗試重新開啟該應用程式。 +CloseApplications=關閉應用程式 (&A) +DontCloseApplications=不要關閉應用程式 (&D) +ErrorCloseApplications=安裝程式無法自動關閉所有應用程式。建議您在繼續前先關閉所有應用程式使用的檔案。 +PrepareToInstallNeedsRestart=安裝程式必須重新啟動您的電腦。重新啟動後,請再次執行安裝程式以完成 [name] 的安裝。%n%n您想要現在重新啟動電腦嗎? + +; *** "Installing" wizard page +WizardInstalling=正在安裝 +InstallingLabel=請稍候,安裝程式正在將 [name] 安裝到您的電腦上 + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=安裝完成 +FinishedLabelNoIcons=安裝程式已經將 [name] 安裝在您的電腦上。 +FinishedLabel=安裝程式已經將 [name] 安裝在您的電腦中,您可以選擇程式的圖示來執行該應用程式。 +ClickFinish=按 「完成」 以結束安裝程式。 +FinishedRestartLabel=要完成 [name] 的安裝,安裝程式必須重新啟動您的電腦。您想要現在重新啟動電腦嗎? +FinishedRestartMessage=要完成 [name] 的安裝,安裝程式必須重新啟動您的電腦。%n%n您想要現在重新啟動電腦嗎? +ShowReadmeCheck=是,我要閱讀讀我檔案。 +YesRadio=是,立即重新啟動電腦(&Y) +NoRadio=否,我稍後重新啟動電腦(&N) +; used for example as 'Run MyProg.exe' +RunEntryExec=執行 %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=檢視 %1 + +; *** "Setup Needs the Next Disk" +ChangeDiskTitle=安裝程式需要下一張磁片 +SelectDiskLabel2=請插入磁片 %1,然後按 「確定」。%n%n如果檔案不在以下所顯示的資料夾之中,請輸入正確的資料夾名稱或按 [瀏覽] 選取。 +PathLabel=路徑(&P): +FileNotInDir2=檔案“%1”無法在“%2”找到。請插入正確的磁片或選擇其它的資料夾。 +SelectDirectoryLabel=請指定下一張磁片的位置。 + +; *** Installation phase messages +SetupAborted=安裝沒有完成。%n%n請更正問題後重新安裝一次。 +AbortRetryIgnoreSelectAction=選取動作 +AbortRetryIgnoreRetry=請再試一次 (&T) +AbortRetryIgnoreIgnore=略過錯誤並繼續 (&I) +AbortRetryIgnoreCancel=取消安裝 + +; *** Installation status messages +StatusClosingApplications=正在關閉應用程式... +StatusCreateDirs=正在建立資料夾... +StatusExtractFiles=正在解壓縮檔案... +StatusCreateIcons=正在建立程式集圖示... +StatusCreateIniEntries=寫入 INI 檔案的項目... +StatusCreateRegistryEntries=正在更新系統登錄... +StatusRegisterFiles=正在登錄檔案... +StatusSavingUninstall=儲存解除安裝資訊... +StatusRunProgram=正在完成安裝... +StatusRestartingApplications=正在重新開啟應用程式... +StatusRollback=正在復原變更... + +; *** Misc. errors +ErrorInternal2=內部錯誤: %1 +ErrorFunctionFailedNoCode=%1 失敗 +ErrorFunctionFailed=%1 失敗;代碼 %2 +ErrorFunctionFailedWithMessage=%1 失敗;代碼 %2.%n%3 +ErrorExecutingProgram=無法執行檔案:%n%1 + +; *** Registry errors +ErrorRegOpenKey=無法開啟登錄鍵:%n%1\%2 +ErrorRegCreateKey=無法建立登錄項目:%n%1\%2 +ErrorRegWriteKey=無法變更登錄項目:%n%1\%2 + +; *** INI errors +ErrorIniEntry=在檔案“%1”建立 INI 項目錯誤。 + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=略過這個檔案 (不建議) (&S) +FileAbortRetryIgnoreIgnoreNotRecommended=略過錯誤並繼續 (不建議) (&I) +SourceDoesntExist=來源檔案“%1”不存在。 +SourceIsCorrupted=來源檔案已經損毀。 +ExistingFileReadOnly2=無法取代現有檔案,因為檔案已標示為唯讀。 +ExistingFileReadOnlyRetry=移除唯讀屬性並重試 (&R) +ExistingFileReadOnlyKeepExisting=保留現有檔案 (&K) +ErrorReadingExistingDest=讀取一個已存在的檔案時發生錯誤: +FileExistsSelectAction=選擇操作 +FileExists2=檔案已存在。 +FileExistsOverwriteExisting=覆寫現有檔案 +FileExistsKeepExisting=保留現有檔案 (&O) +FileExistsOverwriteOrKeepAll=對下次衝突執行相同操作 (&D) +ExistingFileNewerSelectAction=選擇操作 +ExistingFileNewer2=現有檔案比安裝程式嘗試安裝的檔案還新。 +ExistingFileNewerOverwriteExisting=覆寫現有檔案 (&O) +ExistingFileNewerKeepExisting=保留現有檔案 (&K) (建議選項) +ExistingFileNewerOverwriteOrKeepAll=對下次衝突執行相同操作 (&D) +ErrorChangingAttr=在變更檔案屬性時發生錯誤: +ErrorCreatingTemp=在目的資料夾中建立檔案時發生錯誤: +ErrorReadingSource=讀取原始檔案時發生錯誤: +ErrorCopying=複製檔案時發生錯誤: +ErrorReplacingExistingFile=取代檔案時發生錯誤: +ErrorRestartReplace=重新啟動電腦後取代檔案失敗: +ErrorRenamingTemp=在目的資料夾變更檔案名稱時發生錯誤: +ErrorRegisterServer=無法注冊 DLL/OCX 檔案: %1。 +ErrorRegSvr32Failed=RegSvr32 失敗;退出代碼 %1 +ErrorRegisterTypeLib=無法注冊類型庫: %1。 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32 位元 +UninstallDisplayNameMark64Bit=64 位元 +UninstallDisplayNameMarkAllUsers=所有使用者 +UninstallDisplayNameMarkCurrentUser=目前使用者 + +; *** Post-installation errors +ErrorOpeningReadme=開啟讀我檔案時發生錯誤。 +ErrorRestartingComputer=安裝程式無法重新啟動電腦,請自行重新啟動。 + +; *** Uninstaller messages +UninstallNotFound=檔案“%1”不存在,無法解除安裝。 +UninstallOpenError=無法開啟檔案“%1”,無法解除安裝 +UninstallUnsupportedVer=這個版本的解除安裝程式無法辨識記錄檔 “%1” 之格式,無法解除安裝。 +UninstallUnknownEntry=解除安裝記錄檔中發現未知的記錄 (%1)。 +ConfirmUninstall=您確定要完全移除 %1 及其相關的檔案嗎? +UninstallOnlyOnWin64=這個程式只能在 64 位元的 Windows 上解除安裝。 +OnlyAdminCanUninstall=這個程式要具備系統管理員權限的使用者方可解除安裝。 +UninstallStatusLabel=正在從您的電腦移除 %1 中,請稍候... +UninstalledAll=%1 已經成功從您的電腦中移除。 +UninstalledMost=%1 解除安裝完成。%n%n某些檔案及元件無法移除,您可以自行刪除這些檔案。 +UninstalledAndNeedsRestart=要完成 %1 的解除安裝程序,您必須重新啟動電腦。%n%n您想要現在重新啟動電腦嗎? +UninstallDataCorrupted=檔案“%1”已經損毀,無法解除安裝 + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=移除共用檔案 +ConfirmDeleteSharedFile2=系統顯示下列共用檔案已不再被任何程式所使用,您要移除這些檔案嗎?%n%n%1%n%n倘若您移除了以上檔案但仍有程式需要使用它們,將造成這些程式無法正常執行,因此您若無法確定請選擇 [否]。保留這些檔案在您的系統中不會造成任何損害。 +SharedFileNameLabel=檔案名稱: +SharedFileLocationLabel=位置: +WizardUninstalling=解除安裝狀態 +StatusUninstalling=正在解除安裝 %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=正在安裝 %1。 +ShutdownBlockReasonUninstallingApp=正在解除安裝 %1。 + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 版本 %2 +AdditionalIcons=附加圖示: +CreateDesktopIcon=建立桌面圖示(&D) +CreateQuickLaunchIcon=建立快速啟動圖示(&Q) +ProgramOnTheWeb=%1 的網站 +UninstallProgram=解除安裝 %1 +LaunchProgram=啟動 %1 +AssocFileExtension=將 %1 與檔案副檔名 %2 產生關聯(&A) +AssocingFileExtension=正在將 %1 與檔案副檔名 %2 產生關聯... +AutoStartProgramGroupDescription=開啟: +AutoStartProgram=自動開啟 %1 +AddonHostProgramNotFound=%1 無法在您所選的資料夾中找到。%n%n您是否還要繼續? \ No newline at end of file diff --git a/Files/Languages/Unofficial/Croatian.isl b/Files/Languages/Unofficial/Croatian.isl new file mode 100644 index 00000000..7ebc5f41 --- /dev/null +++ b/Files/Languages/Unofficial/Croatian.isl @@ -0,0 +1,387 @@ +; *** Inno Setup version 6.1.0+ Croatian messages *** +; Translated by: Milo Ivir (mail@milotype.de) +; Based on translation by Elvis Gambiraža (el.gambo@gmail.com) +; Based on translation by Krunoslav Kanjuh (krunoslav.kanjuh@zg.t-com.hr) +; +; To download user-contributed translations of this file, go to: +; https://www.jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Hrvatski +LanguageID=$041a +LanguageCodePage=1250 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName=MS Shell Dlg +;DialogFontSize=8 +;WelcomeFontName=Arial +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Instalacija +SetupWindowTitle=Instalacija – %1 +UninstallAppTitle=Deinstalacija +UninstallAppFullTitle=Deinstalacija programa %1 + +; *** Misc. common +InformationTitle=Informacija +ConfirmTitle=Potvrda +ErrorTitle=Greška + +; *** SetupLdr messages +SetupLdrStartupMessage=Ovime će se instalirati %1. Želiš li nastaviti? +LdrCannotCreateTemp=Nije moguće stvoriti privremenu datoteku. Instalacija je prekinuta +LdrCannotExecTemp=Nije moguće pokrenuti datoteku u privremenoj mapi. Instalacija je prekinuta +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nnGreška %2: %3 +SetupFileMissing=Datoteka %1 se ne nalazi u mapi instalacije. Ispravi problem ili nabavi novu kopiju programa. +SetupFileCorrupt=Datoteke instalacije su oštećene. Nabavi novu kopiju programa. +SetupFileCorruptOrWrongVer=Datoteke instalacije su oštećene ili nisu kompatibilne s ovom verzijom instalacije. Ispravi problem ili nabavi novu kopiju programa. +InvalidParameter=Neispravan parametar je prenijet u naredbenom retku:%n%n%1 +SetupAlreadyRunning=Instalacija je već pokrenuta. +WindowsVersionNotSupported=Program ne podržava Windows verziju koju koristiš. +WindowsServicePackRequired=Program zahtijeva %1 servisni paket %2 ili noviji. +NotOnThisPlatform=Program neće raditi na %1. +OnlyOnThisPlatform=Program se mora pokrenuti na %1. +OnlyOnTheseArchitectures=Program se može instalirati na Windows verzijama za sljedeće procesorske arhitekture:%n%n%1 +WinVersionTooLowError=Program zahtijeva %1 verziju %2 ili noviju. +WinVersionTooHighError=Program se ne može instalirati na %1 verziji %2 ili novijoj. +AdminPrivilegesRequired=Za instaliranje programa moraš biti prijavljen/a kao administrator. +PowerUserPrivilegesRequired=Za instaliranje programa moraš biti prijavljen/a kao administrator ili kao član grupe naprednih korisnika. +SetupAppRunningError=Instalacija je otkrila da je %1 trenutačno pokrenut.%n%nZatvori program i potom pritisni "Dalje" za nastavak ili "Odustani" za prekid. +UninstallAppRunningError=Deinstalacija je otkrila da je %1 trenutačno pokrenut.%n%nZatvori program i potom pritisni "Dalje" za nastavak ili "Odustani" za prekid. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Odaberi način instaliranja +PrivilegesRequiredOverrideInstruction=Odaberi način instaliranja +PrivilegesRequiredOverrideText1=%1 se može instalirati za sve korisnike (potrebna su administratorska prava) ili samo za tebe. +PrivilegesRequiredOverrideText2=%1 se može instalirati samo za tebe ili za sve korisnike (potrebna su administratorska prava). +PrivilegesRequiredOverrideAllUsers=Instaliraj z&a sve korisnike +PrivilegesRequiredOverrideAllUsersRecommended=Instaliraj z&a sve korisnike (preporučeno) +PrivilegesRequiredOverrideCurrentUser=Instaliraj samo za &mene +PrivilegesRequiredOverrideCurrentUserRecommended=Instaliraj samo za &mene (preporučeno) + +; *** Misc. errors +ErrorCreatingDir=Instalacija nije mogla stvoriti mapu "%1" +ErrorTooManyFilesInDir=Datoteku nije moguće stvoriti u mapi "%1", jer mapa sadrži previše datoteka + +; *** Setup common messages +ExitSetupTitle=Prekini instalaciju +ExitSetupMessage=Instalacija nije završena. Ako sad izađeš, program neće biti instaliran.%n%nInstalaciju možeš pokrenuti kasnije, ukoliko je želiš dovršiti.%n%nPrekinuti instalaciju? +AboutSetupMenuItem=&O instalaciji … +AboutSetupTitle=O instalaciji +AboutSetupMessage=%1 verzija %2%n%3%n%n%1 web-stranica:%n%4 +AboutSetupNote= +TranslatorNote=Prevodioci:%n%nKrunoslav Kanjuh%n%nElvis Gambiraža%n%nMilo Ivir + +; *** Buttons +ButtonBack=< Na&trag +ButtonNext=&Dalje > +ButtonInstall=&Instaliraj +ButtonOK=U redu +ButtonCancel=Odustani +ButtonYes=&Da +ButtonYesToAll=D&a za sve +ButtonNo=&Ne +ButtonNoToAll=N&e za sve +ButtonFinish=&Završi +ButtonBrowse=&Pretraži … +ButtonWizardBrowse=Odabe&ri … +ButtonNewFolder=&Stvori novu mapu + +; *** "Select Language" dialog messages +SelectLanguageTitle=Odaberi jezik za instalaciju +SelectLanguageLabel=Odaberi jezik koji želiš koristiti tijekom instaliranja. + +; *** Common wizard text +ClickNext=Pritisni "Dalje" za nastavak ili "Odustani" za prekid instalacije. +BeveledLabel= +BrowseDialogTitle=Odaberi mapu +BrowseDialogLabel=Odaberi mapu iz popisa i pritisni "U redu". +NewFolderName=Nova mapa + +; *** "Welcome" wizard page +WelcomeLabel1=Čarobnjak za instalaciju programa [name] +WelcomeLabel2=Ovime ćeš instalirati [name/ver].%n%nPreporučujemo da zatvoriš sve programe prije nego što nastaviš dalje. + +; *** "Password" wizard page +WizardPassword=Lozinka +PasswordLabel1=Instalacija je zaštićena lozinkom. +PasswordLabel3=Upiši lozinku i pritisni "Dalje". Lozinke su osjetljive na mala i velika slova. +PasswordEditLabel=&Lozinka: +IncorrectPassword=Upisana je pogrešna lozinka. Pokušaj ponovo. + +; *** "License Agreement" wizard page +WizardLicense=Licencni ugovor +LicenseLabel=Prije nego što nastaviš dalje, pažljivo pročitaj sljedeće važne informacije. +LicenseLabel3=Pročitaj licencni ugovor. Moraš prihvatiti uvjete ugovora, ako želiš nastaviti instalirati. +LicenseAccepted=&Prihvaćam ugovor +LicenseNotAccepted=&Ne prihvaćam ugovor + +; *** "Information" wizard pages +WizardInfoBefore=Informacije +InfoBeforeLabel=Pročitaj sljedeće važne informacije prije nego što nastaviš dalje. +InfoBeforeClickLabel=Kad želiš nastaviti instalirati, pritisni "Dalje". +WizardInfoAfter=Informacije +InfoAfterLabel=Pročitaj sljedeće važne informacije prije nego što nastaviš dalje. +InfoAfterClickLabel=Kad želiš nastaviti instalirati, pritisni "Dalje". + +; *** "User Information" wizard page +WizardUserInfo=Korisnički podaci +UserInfoDesc=Upiši svoje podatke. +UserInfoName=&Ime korisnika: +UserInfoOrg=&Organizacija: +UserInfoSerial=&Serijski broj: +UserInfoNameRequired=Ime je obavezno polje. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Odaberi odredišno mjesto +SelectDirDesc=Gdje želiš instalirati [name]? +SelectDirLabel3=[name] će se instalirati u sljedeću mapu. +SelectDirBrowseLabel=Za nastavak instalacije, pritisni "Dalje". Za odabir jedne druge mape, pritisni "Odaberi". +DiskSpaceGBLabel=Potrebno je barem [gb] GB slobodnog prostora na disku. +DiskSpaceMBLabel=Potrebno je barem [mb] MB slobodnog prostora na disku. +CannotInstallToNetworkDrive=Instalacija ne može instalirati na mrežnu jedinicu. +CannotInstallToUNCPath=Instalacija ne može instalirati na UNC stazu. +InvalidPath=Moraš upisati punu stazu zajedno sa slovom diska, npr.:%n%nC:\APP%n%nili UNC stazu u obliku:%n%n\\server\share +InvalidDrive=Odabrani disk ne postoji. Odaberi jedan drugi. +DiskSpaceWarningTitle=Nedovoljno prostora na disku +DiskSpaceWarning=Instalacija treba barem %1 KB slobodnog prostora, no odabrani disk ima samo %2 KB.%n%nSvejedno nastaviti? +DirNameTooLong=Naziv mape ili staze je predugačak. +InvalidDirName=Naziv mape je neispravan. +BadDirName32=Naziv mape ne smije sadržavati sljedeće znakove:%n%n%1 +DirExistsTitle=Mapa već postoji +DirExists=Mapa:%n%n%1%n%nveć postoji. Želiš li svejedno u nju instalirati? +DirDoesntExistTitle=Mapa ne postoji +DirDoesntExist=Mapa:%n%n%1%n%nne postoji. Želiš li je stvoriti? + +; *** "Select Components" wizard page +WizardSelectComponents=Odaberi komponente +SelectComponentsDesc=Koje komponente želiš instalirati? +SelectComponentsLabel2=Odaberi komponente koje želiš instalirati, isključi komponente koje ne želiš instalirati. Za nastavak instalacije pritisni "Dalje". +FullInstallation=Kompletna instalacija +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Kompaktna instalacija +CustomInstallation=Prilagođena instalacija +NoUninstallWarningTitle=Postojeće komponente +NoUninstallWarning=Instalacija je utvrdila da na tvom računalu već postoje sljedeće komponente:%n%n%1%n%nIsključivanjem tih komponenata, one se neće deinstalirati.%n%nŽeliš li svejedno nastaviti? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Trenutačni odabir zahtijeva barem [gb] GB na disku. +ComponentsDiskSpaceMBLabel=Trenutačni odabir zahtijeva barem [mb] MB na disku. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Odaberi dodatne zadatke +SelectTasksDesc=Koje dodatne zadatke želiš izvršiti? +SelectTasksLabel2=Odaberi zadatke koje želiš izvršiti tijekom instaliranja programa [name], zatim pritisni "Dalje". + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Odaberi mapu iz "Start" izbornika +SelectStartMenuFolderDesc=Gdje želiš da instalacija spremi programske prečace? +SelectStartMenuFolderLabel3=Instalacija će stvoriti programske prečace u sljedeću mapu "Start" izbornika. +SelectStartMenuFolderBrowseLabel=Ako želiš nastaviti, pritisni "Dalje". Ako želiš odabrati jednu drugu mapu, pritisni "Odaberi". +MustEnterGroupName=Moraš upisati naziv mape. +GroupNameTooLong=Naziv mape ili staze je predugačak. +InvalidGroupName=Naziv mape nije ispravan. +BadGroupName=Naziv mape ne smije sadržavati sljedeće znakove:%n%n%1 +NoProgramGroupCheck2=&Ne stvaraj mapu u "Start" izborniku + +; *** "Ready to Install" wizard page +WizardReady=Sve je spremno za instaliranje +ReadyLabel1=Instalacija je spremna za instaliranje programa [name]. +ReadyLabel2a=Pritisni "Instaliraj", ako želiš instalirati program. Pritisni "Natrag", ako želiš pregledati ili promijeniti postavke +ReadyLabel2b=Pritisni "Instaliraj", ako želiš instalirati program. +ReadyMemoUserInfo=Korisnički podaci: +ReadyMemoDir=Odredišno mjesto: +ReadyMemoType=Vrsta instalacije: +ReadyMemoComponents=Odabrane komponente: +ReadyMemoGroup=Mapa u "Start" izborniku: +ReadyMemoTasks=Dodatni zadaci: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Preuzimanje dodatnih datoteka … +ButtonStopDownload=&Prekini preuzimanje +StopDownload=Stvarno želiš prekinuti preuzimanje? +ErrorDownloadAborted=Preuzimanje je prekinuto +ErrorDownloadFailed=Neuspjelo preuzimanje: %1 %2 +ErrorDownloadSizeFailed=Neuspjelo dohvaćanje veličine: %1 %2 +ErrorFileHash1=Izračunavanje kontrolnog zbroja datoteke neuspjelo: %1 +ErrorFileHash2=Neispravan kontrolni zbroj datoteke: očekivano %1, pronađeno %2 +ErrorProgress=Neispravan napredak: %1 od %2 +ErrorFileSize=Neispravna veličina datoteke: očekivano %1, pronađeno %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Priprema za instaliranje +PreparingDesc=Instalacija se priprema za instaliranje programa [name]. +PreviousInstallNotCompleted=Instaliranje/uklanjanje jednog prethodnog programa nije bilo gotovo. Morat ćeš ponovo pokrenuti računalo i dovršiti to instaliranje.%n%nNakon ponovnog pokretanja računala, pokreni instalaciju ponovo, kako bi se dovršilo instaliranje programa [name]. +CannotContinue=Instalacija ne može nastaviti rad. Pritisni "Odustani" za izlaz iz instalacije. +ApplicationsFound=Sljedeći programi koriste datoteke koje instalacija mora aktualizirati. Preporučujemo da dopustiš instalaciji zatvoriti ove programe. +ApplicationsFound2=Sljedeći programi koriste datoteke koje instalacija mora aktualizirati. Preporučujemo da dopustiš instalaciji zatvoriti ove programe. Kad instaliranje završi, instalacija će pokušati ponovo pokrenuti programe. +CloseApplications=&Zatvori programe automatski +DontCloseApplications=&Ne zatvaraj programe +ErrorCloseApplications=Instalacija nije uspjela automatski zatvoriti programe. Preporučujemo da zatvoriš sve programe koji koriste datoteke koje se moraju aktualizirati. +PrepareToInstallNeedsRestart=Instalacija mora ponovo pokrenuti računalo. Nakon ponovnog pokretanja računala, pokreni instalaciju ponovo, kako bi se dovršilo instaliranje programa [name].%n%nŽeliš li sada ponovo pokrenuti računalo? + +; *** "Installing" wizard page +WizardInstalling=Instaliranje +InstallingLabel=Pričekaj dok ne završi instaliranje programa [name]. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Završavanje instalacijskog čarobnjaka za [name] +FinishedLabelNoIcons=Instalacija je završila instaliranje programa [name]. +FinishedLabel=Instalacija je završila instaliranje programa [name]. Program se može pokrenuti pomoću instaliranih prečaca. +ClickFinish=Za izlaz iz instalacije pritisni "Završi". +FinishedRestartLabel=Za završavanje instaliranja programa [name], instalacija mora ponovo pokrenuti računalo. Želiš li sada ponovo pokrenuti računalo? +FinishedRestartMessage=Za završavanje instaliranja programa [name], instalacija mora ponovo pokrenuti računalo.%n%nŽeliš li sada ponovo pokrenuti računalo? +ShowReadmeCheck=Da, želim pročitati README datoteku +YesRadio=&Da, sada ponovo pokrenuti računalo +NoRadio=&Ne, računalo ću kasnije ponovo pokrenuti +; used for example as 'Run MyProg.exe' +RunEntryExec=Pokreni %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Prikaži %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Instalacija treba sljedeći disk +SelectDiskLabel2=Umetni disk %1 i pritisni "U redu".%n%nAko se datoteke s ovog diska nalaze na nekom drugom mjestu od dolje prikazanog, upiši ispravnu stazu ili pritisni "Odaberi". +PathLabel=&Staza: +FileNotInDir2=Staza "%1" ne postoji u "%2". Umetni odgovarajući disk ili odaberi jednu drugu mapu. +SelectDirectoryLabel=Odredi mjesto sljedećeg diska. + +; *** Installation phase messages +SetupAborted=Instalacija nije završena.%n%nIspravi problem i ponovo pokreni instalaciju. +AbortRetryIgnoreSelectAction=Odaberi radnju +AbortRetryIgnoreRetry=&Pokušaj ponovo +AbortRetryIgnoreIgnore=&Zanemari grešku i nastavi +AbortRetryIgnoreCancel=Prekini s instaliranjem + +; *** Installation status messages +StatusClosingApplications=Zatvaranje programa … +StatusCreateDirs=Stvaranje mapa … +StatusExtractFiles=Izdvajanje datoteka … +StatusCreateIcons=Stvaranje prečaca … +StatusCreateIniEntries=Stvaranje INI unosa … +StatusCreateRegistryEntries=Stvaranje unosa u registar … +StatusRegisterFiles=Registriranje datoteka … +StatusSavingUninstall=Spremanje podataka deinstalacije … +StatusRunProgram=Završavanje instaliranja … +StatusRestartingApplications=Ponovno pokretanje programa … +StatusRollback=Poništavanje promjena … + +; *** Misc. errors +ErrorInternal2=Interna greška: %1 +ErrorFunctionFailedNoCode=%1 – neuspjelo +ErrorFunctionFailed=%1 – neuspjelo; kod %2 +ErrorFunctionFailedWithMessage=%1 – neuspjelo; kod %2.%n%3 +ErrorExecutingProgram=Nije moguće izvršiti datoteku:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Greška prilikom otvaranja ključa registra:%n%1\%2 +ErrorRegCreateKey=Greška prilikom stvaranja ključa registra:%n%1\%2 +ErrorRegWriteKey=Greška prilikom pisanja u ključ registra:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Greška prilikom stvaranja INI unosa u datoteci "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Preskoči ovu datoteku (ne preporučuje se) +FileAbortRetryIgnoreIgnoreNotRecommended=&Zanemari grešku i nastavi (ne preporučuje se) +SourceIsCorrupted=Izvorna datoteka je oštećena +SourceDoesntExist=Izvorna datoteka "%1" ne postoji +ExistingFileReadOnly2=Postojeću datoteku nije bilo moguće zamijeniti, jer je označena sa "samo-za-čitanje". +ExistingFileReadOnlyRetry=&Ukloni svojstvo "samo-za-čitanje" i pokušaj ponovo +ExistingFileReadOnlyKeepExisting=&Zadrži postojeću datoteku +ErrorReadingExistingDest=Pojavila se greška prilikom pokušaja čitanja postojeće datoteke: +FileExistsSelectAction=Odaberi radnju +FileExists2=Datoteka već postoji. +FileExistsOverwriteExisting=&Prepiši postojeću datoteku +FileExistsKeepExisting=&Zadrži postojeću datoteku +FileExistsOverwriteOrKeepAll=&Uradi to i u narednim slučajevima +ExistingFileNewerSelectAction=Odaberi radnju +ExistingFileNewer2=Postojeća datoteka je novija od one koja se pokušava instalirati. +ExistingFileNewerOverwriteExisting=&Prepiši postojeću datoteku +ExistingFileNewerKeepExisting=&Zadrži postojeću datoteku (preporučeno) +ExistingFileNewerOverwriteOrKeepAll=&Uradi to i u narednim slučajevima +ErrorChangingAttr=Pojavila se greška prilikom pokušaja promjene svojstva postojeće datoteke: +ErrorCreatingTemp=Pojavila se greška prilikom pokušaja stvaranja datoteke u odredišnoj mapi: +ErrorReadingSource=Pojavila se greška prilikom pokušaja čitanja izvorišne datoteke: +ErrorCopying=Pojavila se greška prilikom pokušaja kopiranja datoteke: +ErrorReplacingExistingFile=Pojavila se greška prilikom pokušaja zamijenjivanja datoteke: +ErrorRestartReplace=Zamijenjivanje nakon ponovnog pokretanja nije uspjelo: +ErrorRenamingTemp=Pojavila se greška prilikom pokušaja preimenovanja datoteke u odredišnoj mapi: +ErrorRegisterServer=Nije moguće registrirati DLL/OCX: %1 +ErrorRegSvr32Failed=Greška u RegSvr32. Izlazni kod %1 +ErrorRegisterTypeLib=Nije moguće registrirati biblioteku vrsta: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bitni +UninstallDisplayNameMark64Bit=64-bitni +UninstallDisplayNameMarkAllUsers=Svi korisnici +UninstallDisplayNameMarkCurrentUser=Trenutačni korisnik + +; *** Post-installation errors +ErrorOpeningReadme=Pojavila se greška prilikom pokušaja otvaranja README datoteke. +ErrorRestartingComputer=Instalacija nije mogla ponovo pokrenuti računalo. Učini to ručno. + +; *** Uninstaller messages +UninstallNotFound=Datoteka "%1" ne postoji. Deinstaliranje nije moguće. +UninstallOpenError=Datoteku "%1" nije bilo moguće otvoriti. Deinstaliranje nije moguće +UninstallUnsupportedVer=Deinstalacijska datoteka "%1" je u formatu koji ova verzija deinstalacijskog programa ne prepoznaje. Deinstaliranje nije moguće +UninstallUnknownEntry=Pronađen je nepoznat zapis (%1) u deinstalacijskoj datoteci +ConfirmUninstall=Zaista želiš ukloniti %1 i sve pripadajuće komponente? +UninstallOnlyOnWin64=Ovu instalaciju je moguće ukloniti samo na 64-bitnom Windows sustavu. +OnlyAdminCanUninstall=Ovu instalaciju može ukloniti samo korisnik s administratorskim pravima. +UninstallStatusLabel=Pričekaj dok se %1 uklanja s računala. +UninstalledAll=%1 je uspješno uklonjen s računala. +UninstalledMost=Deinstaliranje programa %1 je završeno.%n%nNeke elemente nije bilo moguće ukloniti. Oni se mogu ukloniti ručno. +UninstalledAndNeedsRestart=Za završavanje deinstaliranja programa %1, potrebno je ponovo pokrenuti računalo.%n%nŽeliš li to sada učiniti? +UninstallDataCorrupted="%1" datoteka je oštećena. Deinstaliranje nije moguće + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Ukloniti dijeljene datoteke? +ConfirmDeleteSharedFile2=Sustav ukazuje na to, da sljedeću dijeljenu datoteku ne koristi niti jedan program. Želiš li ukloniti tu dijeljenu datoteku?%n%nAko neki programi i dalje koriste tu datoteku, a ona se izbriše, ti programi neće ispravno raditi. Ako ne znaš, odaberi "Ne". Datoteka neće štetiti tvom sustavu. +SharedFileNameLabel=Datoteka: +SharedFileLocationLabel=Mjesto: +WizardUninstalling=Stanje deinstalacije +StatusUninstalling=%1 deinstaliranje … + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=%1 instaliranje. +ShutdownBlockReasonUninstallingApp=%1 deinstaliranje. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 verzija %2 +AdditionalIcons=Dodatni prečaci: +CreateDesktopIcon=Stvori prečac na ra&dnoj površini +CreateQuickLaunchIcon=Stvori prečac u traci za &brzo pokretanje +ProgramOnTheWeb=%1 na internetu +UninstallProgram=Deinstaliraj %1 +LaunchProgram=Pokreni %1 +AssocFileExtension=&Poveži program %1 s datotečnim nastavkom %2 +AssocingFileExtension=Povezivanje programa %1 s datotečnim nastavkom %2 … +AutoStartProgramGroupDescription=Pokretanje: +AutoStartProgram=Automatski pokreni %1 +AddonHostProgramNotFound=%1 nije nađen u odabranoj mapi.%n%nŽeliš li svejedno nastaviti? diff --git a/Files/Languages/Unofficial/EnglishBritish.isl b/Files/Languages/Unofficial/EnglishBritish.isl new file mode 100644 index 00000000..f112989d --- /dev/null +++ b/Files/Languages/Unofficial/EnglishBritish.isl @@ -0,0 +1,378 @@ +; *** Inno Setup version 6.1.0+ English (British) messages *** +; +; Translated by Boris Kotov +; Translation updated by Andrew Truckle + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=English (British) +LanguageID=$0809 +LanguageCodePage=0 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Setup +SetupWindowTitle=Setup - %1 +UninstallAppTitle=Uninstall +UninstallAppFullTitle=%1 Uninstall + +; *** Misc. common +InformationTitle=Information +ConfirmTitle=Confirm +ErrorTitle=Error + +; *** SetupLdr messages +SetupLdrStartupMessage=This will install %1. Do you wish to continue? +LdrCannotCreateTemp=Unable to create a temporary file. Setup aborted +LdrCannotExecTemp=Unable to execute file in the temporary directory. Setup aborted + +; *** Startup error messages +LastErrorMessage=%1.%n%nError %2: %3 +SetupFileMissing=The file %1 is missing from the installation directory. Please correct the problem or obtain a new copy of the program. +SetupFileCorrupt=The setup files are corrupted. Please obtain a new copy of the program. +SetupFileCorruptOrWrongVer=The setup files are corrupted, or are incompatible with this version of Setup. Please correct the problem or obtain a new copy of the program. +InvalidParameter=An invalid parameter was passed on the command line:%n%n%1 +SetupAlreadyRunning=Setup is already running. +WindowsVersionNotSupported=This program does not support the version of Windows your computer is running. +WindowsServicePackRequired=This program requires %1 Service Pack %2 or later. +NotOnThisPlatform=This program will not run on %1. +OnlyOnThisPlatform=This program must be run on %1. +OnlyOnTheseArchitectures=This program can only be installed on versions of Windows designed for the following processor architectures:%n%n%1 +WinVersionTooLowError=This program requires %1 version %2 or later. +WinVersionTooHighError=This program cannot be installed on %1 version %2 or later. +AdminPrivilegesRequired=You must be logged in as an administrator when installing this program. +PowerUserPrivilegesRequired=You must be logged in as an administrator or as a member of the Power Users group when installing this program. +SetupAppRunningError=Setup has detected that %1 is currently running.%n%nPlease close all instances of it now, then click OK to continue, or Cancel to exit. +UninstallAppRunningError=Uninstall has detected that %1 is currently running.%n%nPlease close all instances of it now, then click OK to continue, or Cancel to exit. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Select Setup Install Mode +PrivilegesRequiredOverrideInstruction=Select install mode +PrivilegesRequiredOverrideText1=%1 can be installed for all users (requires administrative privileges), or for you only. +PrivilegesRequiredOverrideText2=%1 can be installed for you only, or for all users (requires administrative privileges). +PrivilegesRequiredOverrideAllUsers=Install for &all users +PrivilegesRequiredOverrideAllUsersRecommended=Install for &all users (recommended) +PrivilegesRequiredOverrideCurrentUser=Install for &me only +PrivilegesRequiredOverrideCurrentUserRecommended=Install for &me only (recommended) + +; *** Misc. errors +ErrorCreatingDir=Setup was unable to create the directory "%1" +ErrorTooManyFilesInDir=Unable to create a file in the directory "%1" because it contains too many files + +; *** Setup common messages +ExitSetupTitle=Exit Setup +ExitSetupMessage=Setup is not complete. If you exit now, the program will not be installed.%n%nYou may run Setup again at another time to complete the installation.%n%nExit Setup? +AboutSetupMenuItem=&About Setup... +AboutSetupTitle=About Setup +AboutSetupMessage=%1 version %2%n%3%n%n%1 home page:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< &Back +ButtonNext=&Next > +ButtonInstall=&Install +ButtonOK=OK +ButtonCancel=Cancel +ButtonYes=&Yes +ButtonYesToAll=Yes to &All +ButtonNo=&No +ButtonNoToAll=N&o to All +ButtonFinish=&Finish +ButtonBrowse=&Browse... +ButtonWizardBrowse=B&rowse... +ButtonNewFolder=&Make New Folder + +; *** "Select Language" dialog messages +SelectLanguageTitle=Select Setup Language +SelectLanguageLabel=Select the language to use during the installation: + +; *** Common wizard text +ClickNext=Click Next to continue, or Cancel to exit Setup. +BeveledLabel= +BrowseDialogTitle=Browse For Folder +BrowseDialogLabel=Select a folder in the list below, then click OK. +NewFolderName=New Folder + +; *** "Welcome" wizard page +WelcomeLabel1=Welcome to the [name] Setup Wizard +WelcomeLabel2=This will install [name/ver] on your computer.%n%nIt is recommended that you close all other applications before continuing. + +; *** "Password" wizard page +WizardPassword=Password +PasswordLabel1=This installation is password protected. +PasswordLabel3=Please provide the password, then click Next to continue. Passwords are case-sensitive. +PasswordEditLabel=&Password: +IncorrectPassword=The password you entered is not correct. Please try again. + +; *** "License Agreement" wizard page +WizardLicense=Licence Agreement +LicenseLabel=Please read the following important information before continuing. +LicenseLabel3=Please read the following Licence Agreement. You must accept the terms of this agreement before continuing with the installation. +LicenseAccepted=I &accept the agreement +LicenseNotAccepted=I &do not accept the agreement + +; *** "Information" wizard pages +WizardInfoBefore=Information +InfoBeforeLabel=Please read the following important information before continuing. +InfoBeforeClickLabel=When you are ready to continue with Setup, click Next. +WizardInfoAfter=Information +InfoAfterLabel=Please read the following important information before continuing. +InfoAfterClickLabel=When you are ready to continue with Setup, click Next. + +; *** "User Information" wizard page +WizardUserInfo=User Information +UserInfoDesc=Please enter your information. +UserInfoName=&User Name: +UserInfoOrg=&Organisation: +UserInfoSerial=&Serial Number: +UserInfoNameRequired=You must enter a name. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Select Destination Location +SelectDirDesc=Where should [name] be installed? +SelectDirLabel3=Setup will install [name] into the following folder. +SelectDirBrowseLabel=To continue, click Next. If you would like to select a different folder, click Browse. +DiskSpaceGBLabel=At least [gb] GB of free disk space is required. +DiskSpaceMBLabel=At least [mb] MB of free disk space is required. +CannotInstallToNetworkDrive=Setup cannot install to a network drive. +CannotInstallToUNCPath=Setup cannot install to a UNC path. +InvalidPath=You must enter a full path with drive letter; for example:%n%nC:\APP%n%nor a UNC path in the form:%n%n\\server\share +InvalidDrive=The drive or UNC share you selected does not exist or is not accessible. Please select another. +DiskSpaceWarningTitle=Not Enough Disk Space +DiskSpaceWarning=Setup requires at least %1 KB of free space to install, but the selected drive only has %2 KB available.%n%nDo you want to continue anyway? +DirNameTooLong=The folder name or path is too long. +InvalidDirName=The folder name is not valid. +BadDirName32=Folder names cannot include any of the following characters:%n%n%1 +DirExistsTitle=Folder Exists +DirExists=The folder:%n%n%1%n%nalready exists. Would you like to install to that folder anyway? +DirDoesntExistTitle=Folder Does Not Exist +DirDoesntExist=The folder:%n%n%1%n%ndoes not exist. Would you like the folder to be created? + +; *** "Select Components" wizard page +WizardSelectComponents=Select Components +SelectComponentsDesc=Which components should be installed? +SelectComponentsLabel2=Select the components you want to install; clear the components you do not want to install. Click Next when you are ready to continue. +FullInstallation=Full installation +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Compact installation +CustomInstallation=Custom installation +NoUninstallWarningTitle=Components Exist +NoUninstallWarning=Setup has detected that the following components are already installed on your computer:%n%n%1%n%nDeselecting these components will not uninstall them.%n%nWould you like to continue anyway? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Current selection requires at least [gb] GB of disk space. +ComponentsDiskSpaceMBLabel=Current selection requires at least [mb] MB of disk space. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Select Additional Tasks +SelectTasksDesc=Which additional tasks should be performed? +SelectTasksLabel2=Select the additional tasks you would like Setup to perform while installing [name], then click Next. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Select Start Menu Folder +SelectStartMenuFolderDesc=Where should Setup place the program's shortcuts? +SelectStartMenuFolderLabel3=Setup will create the program's shortcuts in the following Start Menu folder. +SelectStartMenuFolderBrowseLabel=To continue, click Next. If you would like to select a different folder, click Browse. +MustEnterGroupName=You must enter a folder name. +GroupNameTooLong=The folder name or path is too long. +InvalidGroupName=The folder name is not valid. +BadGroupName=The folder name cannot include any of the following characters:%n%n%1 +NoProgramGroupCheck2=&Don't create a Start Menu folder + +; *** "Ready to Install" wizard page +WizardReady=Ready to Install +ReadyLabel1=Setup is now ready to begin installing [name] on your computer. +ReadyLabel2a=Click Install to continue with the installation, or click Back if you want to review or change any settings. +ReadyLabel2b=Click Install to continue with the installation. +ReadyMemoUserInfo=User information: +ReadyMemoDir=Destination location: +ReadyMemoType=Setup type: +ReadyMemoComponents=Selected components: +ReadyMemoGroup=Start Menu folder: +ReadyMemoTasks=Additional tasks: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Downloading additional files... +ButtonStopDownload=&Stop download +StopDownload=Are you sure you want to stop the download? +ErrorDownloadAborted=Download aborted +ErrorDownloadFailed=Download failed: %1 %2 +ErrorDownloadSizeFailed=Getting size failed: %1 %2 +ErrorFileHash1=File hash failed: %1 +ErrorFileHash2=Invalid file hash: expected %1, found %2 +ErrorProgress=Invalid progress: %1 of %2 +ErrorFileSize=Invalid file size: expected %1, found %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Preparing to Install +PreparingDesc=Setup is preparing to install [name] on your computer. +PreviousInstallNotCompleted=The installation/removal of a previous program was not completed. You will need to restart your computer to complete that installation.%n%nAfter restarting your computer, run Setup again to complete the installation of [name]. +CannotContinue=Setup cannot continue. Please click Cancel to exit. +ApplicationsFound=The following applications are using files that need to be updated by Setup. It is recommended that you allow Setup to automatically close these applications. +ApplicationsFound2=The following applications are using files that need to be updated by Setup. It is recommended that you allow Setup to automatically close these applications. After the installation has completed, Setup will attempt to restart the applications. +CloseApplications=&Automatically close the applications +DontCloseApplications=&Do not close the applications +ErrorCloseApplications=Setup was unable to automatically close all applications. It is recommended that you close all applications using files that need to be updated by Setup before continuing. +PrepareToInstallNeedsRestart=Setup must restart your computer. After restarting your computer, run Setup again to complete the installation of [name].%n%nWould you like to restart now? + +; *** "Installing" wizard page +WizardInstalling=Installing +InstallingLabel=Please wait while Setup installs [name] on your computer. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Completing the [name] Setup Wizard +FinishedLabelNoIcons=Setup has finished installing [name] on your computer. +FinishedLabel=Setup has finished installing [name] on your computer. The application may be launched by selecting the installed icons. +ClickFinish=Click Finish to exit Setup. +FinishedRestartLabel=To complete the installation of [name], Setup must restart your computer. Would you like to restart now? +FinishedRestartMessage=To complete the installation of [name], Setup must restart your computer.%n%nWould you like to restart now? +ShowReadmeCheck=Yes, I would like to view the README file +YesRadio=&Yes, restart the computer now +NoRadio=&No, I will restart the computer later +; used for example as 'Run MyProg.exe' +RunEntryExec=Run %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=View %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Setup Needs the Next Disk +SelectDiskLabel2=Please insert Disk %1 and click OK.%n%nIf the files on this disk can be found in a folder other than the one displayed below, enter the correct path or click Browse. +PathLabel=&Path: +FileNotInDir2=The file "%1" could not be located in "%2". Please insert the correct disk or select another folder. +SelectDirectoryLabel=Please specify the location of the next disk. + +; *** Installation phase messages +SetupAborted=Setup was not completed.%n%nPlease correct the problem and run Setup again. +AbortRetryIgnoreSelectAction=Select action +AbortRetryIgnoreRetry=&Try again +AbortRetryIgnoreIgnore=&Ignore the error and continue +AbortRetryIgnoreCancel=Cancel installation + +; *** Installation status messages +StatusClosingApplications=Closing applications... +StatusCreateDirs=Creating directories... +StatusExtractFiles=Extracting files... +StatusCreateIcons=Creating shortcuts... +StatusCreateIniEntries=Creating INI entries... +StatusCreateRegistryEntries=Creating registry entries... +StatusRegisterFiles=Registering files... +StatusSavingUninstall=Saving uninstall information... +StatusRunProgram=Finishing installation... +StatusRestartingApplications=Restarting applications... +StatusRollback=Rolling back changes... + +; *** Misc. errors +ErrorInternal2=Internal error: %1 +ErrorFunctionFailedNoCode=%1 failed +ErrorFunctionFailed=%1 failed; code %2 +ErrorFunctionFailedWithMessage=%1 failed; code %2.%n%3 +ErrorExecutingProgram=Unable to execute file:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Error opening registry key:%n%1\%2 +ErrorRegCreateKey=Error creating registry key:%n%1\%2 +ErrorRegWriteKey=Error writing to registry key:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Error creating INI entry in file "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Skip this file (not recommended) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignore the error and continue (not recommended) +SourceIsCorrupted=The source file is corrupted +SourceDoesntExist=The source file "%1" does not exist +ExistingFileReadOnly2=The existing file could not be replaced because it is marked read-only. +ExistingFileReadOnlyRetry=&Remove the read-only attribute and try again +ExistingFileReadOnlyKeepExisting=&Keep the existing file +ErrorReadingExistingDest=An error occurred while trying to read the existing file: +FileExistsSelectAction=Select action +FileExists2=The file already exists. +FileExistsOverwriteExisting=&Overwrite the existing file +FileExistsKeepExisting=&Keep the existing file +FileExistsOverwriteOrKeepAll=&Do this for the next conflicts +ExistingFileNewerSelectAction=Select action +ExistingFileNewer2=The existing file is newer than the one Setup is trying to install. +ExistingFileNewerOverwriteExisting=&Overwrite the existing file +ExistingFileNewerKeepExisting=&Keep the existing file (recommended) +ExistingFileNewerOverwriteOrKeepAll=&Do this for the next conflicts +ErrorChangingAttr=An error occurred while trying to change the attributes of the existing file: +ErrorCreatingTemp=An error occurred while trying to create a file in the destination directory: +ErrorReadingSource=An error occurred while trying to read the source file: +ErrorCopying=An error occurred while trying to copy a file: +ErrorReplacingExistingFile=An error occurred while trying to replace the existing file: +ErrorRestartReplace=RestartReplace failed: +ErrorRenamingTemp=An error occurred while trying to rename a file in the destination directory: +ErrorRegisterServer=Unable to register the DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 failed with exit code %1 +ErrorRegisterTypeLib=Unable to register the type library: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=All users +UninstallDisplayNameMarkCurrentUser=Current user + +; *** Post-installation errors +ErrorOpeningReadme=An error occurred while trying to open the README file. +ErrorRestartingComputer=Setup was unable to restart the computer. Please do this manually. + +; *** Uninstaller messages +UninstallNotFound=File "%1" does not exist. Cannot uninstall. +UninstallOpenError=File "%1" could not be opened. Cannot uninstall +UninstallUnsupportedVer=The uninstall log file "%1" is in a format not recognised by this version of the uninstaller. Cannot uninstall +UninstallUnknownEntry=An unknown entry (%1) was encountered in the uninstall log +ConfirmUninstall=Are you sure you want to completely remove %1 and all of its components? +UninstallOnlyOnWin64=This installation can only be uninstalled on 64-bit Windows. +OnlyAdminCanUninstall=This installation can only be uninstalled by a user with administrative privileges. +UninstallStatusLabel=Please wait while %1 is removed from your computer. +UninstalledAll=%1 was successfully removed from your computer. +UninstalledMost=%1 uninstall complete.%n%nSome elements could not be removed. These can be removed manually. +UninstalledAndNeedsRestart=To complete the uninstallation of %1, your computer must be restarted.%n%nWould you like to restart now? +UninstallDataCorrupted="%1" file is corrupted. Cannot uninstall + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Remove Shared File? +ConfirmDeleteSharedFile2=The system indicates that the following shared file is no longer in use by any programs. Would you like for Uninstall to remove this shared file?%n%nIf any programs are still using this file and it is removed, those programs may not function properly. If you are unsure, choose No. Leaving the file on your system will not cause any harm. +SharedFileNameLabel=File name: +SharedFileLocationLabel=Location: +WizardUninstalling=Uninstall Status +StatusUninstalling=Uninstalling %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Installing %1. +ShutdownBlockReasonUninstallingApp=Uninstalling %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 version %2 +AdditionalIcons=Additional icons: +CreateDesktopIcon=Create a &desktop icon +CreateQuickLaunchIcon=Create a &Quick Launch icon +ProgramOnTheWeb=%1 on the Web +UninstallProgram=Uninstall %1 +LaunchProgram=Launch %1 +AssocFileExtension=&Associate %1 with the %2 file extension +AssocingFileExtension=Associating %1 with the %2 file extension... +AutoStartProgramGroupDescription=Startup: +AutoStartProgram=Automatically start %1 +AddonHostProgramNotFound=%1 could not be located in the folder you selected.%n%nDo you want to continue anyway? diff --git a/Files/Languages/Unofficial/Esperanto.isl b/Files/Languages/Unofficial/Esperanto.isl new file mode 100644 index 00000000..ec0c1c4e --- /dev/null +++ b/Files/Languages/Unofficial/Esperanto.isl @@ -0,0 +1,391 @@ +; Inno Setup version 6.1.0+ Esperanto messages *** +; +; Aŭtoro: Alexander Gritĉin +; Retpoŝto: alexgrimo@mail.ru +; Traduko: 15.06.2008 +; +; Aŭtoro: Wolfgang Pohl +; Retpoŝto: software@interpohl.net) +; Traduko: 15.04.2021 +; + +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Esperanto +LanguageID=$1000 +LanguageCodePage=28593 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Instalado +SetupWindowTitle=Instalado de - %1 +UninstallAppTitle=Forigado +UninstallAppFullTitle=Forigado de %1 + +; *** Misc. common +InformationTitle=Informacio +ConfirmTitle=Konfirmado +ErrorTitle=Eraro + +; *** SetupLdr messages +SetupLdrStartupMessage=Nun estos instalado de %1. Ĉu vi volas kontinui? +LdrCannotCreateTemp=Nepoveble estas krei tempan dosieron. La Majstro estas ŝtopita +LdrCannotExecTemp=Nepoveble estas plenumi la dosieron en tempa dosierujo. La Majstro estas ŝtopita +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nEraro %2: %3 +SetupFileMissing=La dosiero %1 estas preterpasita el instala dosierujo.Bonvolu korekti problemon aŭ ricevu novan kopion de programo. +SetupFileCorrupt=Instalaj dosieroj estas kriplitaj. Bonvolu ricevu novan kopion de programo. +SetupFileCorruptOrWrongVer=Instalaj dosieroj estas kriplitaj, aŭ ne komparablaj kun tia versio del Majstro. Bonvolu korekti problemon aŭ ricevu novan kopion de programo. +InvalidParameter=Malĝusta parametro estis en komandlinio:%n%n%1 +SetupAlreadyRunning=La Majstro jam funkcias. +WindowsVersionNotSupported=Ĉi tia programo ne povas subteni la version de Vindoso en via komputilo. +WindowsServicePackRequired=Por ĉi tia programo bezonas %1 Service Pack %2 aŭ pli olda. +NotOnThisPlatform=Ĉi tia programo ne funkcios en %1. +OnlyOnThisPlatform=Ĉi tia programo devas funkcii en %1. +OnlyOnTheseArchitectures=Ĉi tia programo nur povas esti instalita en version de Vindoso por sekvaj procesoraj arkitekturoj:%n%n%1 +WinVersionTooLowError=Por ĉi tia programo bezonas %1 version %2 aŭ pli olda. +WinVersionTooHighError=Ĉi tia programo ne povas esti instalita en %1 versio %2 aŭ pli olda. +AdminPrivilegesRequired=Vi devas eniri kiel administranto kiam instalas ĉi tian programon. +PowerUserPrivilegesRequired=Vi devas eniri kiel administranto aŭ kiel membro de grupo de Posedaj Uzantoj kiam instalas ĉi tia programo. +SetupAppRunningError=La Majstro difinis ke %1 nun funkcias.%n%nBonvolu ŝtopi ĝin, kaj poste kliku Jes por kontinui, aŭ Ŝtopi por eliri. +UninstallAppRunningError=Forigados difinis ke %1 nun funkcias.%n%nBonvolu ŝtopi ĝin, kaj poste kliku Jes por kontinui, aŭ Ŝtopi por eliri. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Elektu Instala Reĝimo +PrivilegesRequiredOverrideInstruction=Elektu instala reĝimo +PrivilegesRequiredOverrideText1=%1 povas esti instalita por ĉiuj uzantoj (postulas administrajn privilegiojn), aŭ nur por vi. +PrivilegesRequiredOverrideText2=%1 povas esti instalita nur por vi aŭ por ĉiuj uzantoj (postulas administrajn privilegiojn). +PrivilegesRequiredOverrideAllUsers=Instali por ĉiuj &uzantoj +PrivilegesRequiredOverrideAllUsersRecommended=Instali por ĉiuj &uzantoj (rekomendita) +PrivilegesRequiredOverrideCurrentUser=Instali nur por &mi +PrivilegesRequiredOverrideCurrentUserRecommended=Instali nur por &mi (rekomendita) + +; *** Misc. errors +ErrorCreatingDir=La Majstro ne povas krei dosierujon "%1" +ErrorTooManyFilesInDir=Estas nepoveble krei dosieron en dosierujo "%1" pro tio ke ĝi havas tro multe da dosierojn + +; *** Setup common messages +ExitSetupTitle=Ŝtopo Majstron +ExitSetupMessage=La instalado ne estas plena. Se vi eliros nun, la programo ne estos instalita.%n%nPor vi bezonas ŝalti Majstron denove en alia tempo por plenumi instaladon.%n%nĈu fini la Majstron? +AboutSetupMenuItem=&Pri instalo... +AboutSetupTitle=Pri instalo +AboutSetupMessage=%1 version %2%n%3%n%n%1 hejma paĝo:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< &Reen +ButtonNext=&Antaŭen > +ButtonInstall=&Instali +ButtonOK=Jes +ButtonCancel=Ŝtopi +ButtonYes=&Jes +ButtonYesToAll=Jes por &ĉiaj +ButtonNo=&Ne +ButtonNoToAll=Ne por ĉiaj +ButtonFinish=&Fino +ButtonBrowse=&Elekto... +ButtonWizardBrowse=Elekto... +ButtonNewFolder=&Fari la novan dosierujon + +; *** "Select Language" dialog messages +SelectLanguageTitle=Elektu la lingvon +SelectLanguageLabel=Elektu la lingvon por uzo dum instalado: + +; *** Common wizard text +ClickNext=Kliku Antaŭen por kontinui, aŭ Ŝtopi por eliri Instaladon. +BeveledLabel= +BrowseDialogTitle=Elekto de dosierujo +BrowseDialogLabel=Elektu la dosierujon en listo malalte, kaj kliku Jes. +NewFolderName=Nova dosierujo + +; *** "Welcome" wizard page +WelcomeLabel1=Bonvenon al Majstro de instalado de [name] +WelcomeLabel2=Nun komencos instalado de [name/ver] en via komputilo.%n%nEstas rekomendite ke vi ŝtopu ĉiajn viajn programojn antaŭ komenco. + +; *** "Password" wizard page +WizardPassword=Pasvorto +PasswordLabel1=Ĉi tia instalado postulas pasvorton. +PasswordLabel3=Bonvolu tajpi pasvorton kaj poste kliku Antaŭen por kontinui. La pasvortoj estas tajp sentemaj. +PasswordEditLabel=&Pasvorto: +IncorrectPassword=La pasvorto, kian vi tajpis estas malĝusta. Bonvolu provi denove. + +; *** "License Agreement" wizard page +WizardLicense=Licenza konvenio +LicenseLabel=Bonvolu legi sekvan gravan informacion antaŭ komenci. +LicenseLabel3=Bonvolu legi sekvan Licenzan Konvenion. Vi devas akcepti dotaĵoj de tia konvenio antaŭ ke kontinui instaladon. +LicenseAccepted=Mi akceptas konvenion +LicenseNotAccepted=Mi ne akceptas konvenion + +; *** "Information" wizard pages +WizardInfoBefore=Informacio +InfoBeforeLabel=Bonvolu legi sekvan gravan informacion antaŭ komenci. +InfoBeforeClickLabel=Kiam vi estas preta por kontinui per instalo, kliku Antaŭen. +WizardInfoAfter=Informacio +InfoAfterLabel=Bonvolu legi sekvan gravan informacion antaŭ komenci. +InfoAfterClickLabel=Kiam vi estas preta por kontinui per instalo, kliku Antaŭen. + +; *** "User Information" wizard page +WizardUserInfo=Informacio pri uzanto +UserInfoDesc=Bonvolu skribi vian informacion. +UserInfoName=Nomo de uzanto: +UserInfoOrg=&Organizacio: +UserInfoSerial=&Seria Numero: +UserInfoNameRequired=Vi devas skribi nomon de uzanto. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Elektu Destinan Locon +SelectDirDesc=Kie devos [name] esti instalita? +SelectDirLabel3=La Majstro instalos [name] en sekvan dosierujon. +SelectDirBrowseLabel=Por kontinui, kliku Antaŭen. Se vi volas elekti diversan dosierujon, kliku Elekto. +DiskSpaceGBLabel=Almenaŭ [gb] GB de neta diska spaco bezonas. +DiskSpaceMBLabel=Almenaŭ [mb] MB de neta diska spaco bezonas. +CannotInstallToNetworkDrive=Majstro ne povas instali lokan diskon. +CannotInstallToUNCPath=Majstro ne povas instali laŭ UNC vojo. +InvalidPath=Vi devas skribi plenan vojon de diska litero; por ekzamplo:%n%nC:\APP%n%sed ne UNC vojo laŭ formo:%n%n\\server\share +InvalidDrive=Disko aŭ UNC kian vi elektis ne ekzistas aŭ ne estas difinita. Bonvolu elekti denove. +DiskSpaceWarningTitle=Mankas Diskan Spacon +DiskSpaceWarning=Por instalo bezonas almenaŭ %1 KB de neta spaco por instalado, sed electita disko havas nur %2 KB.%n%nĈu vi volas kontinui per ĉiokaze? +DirNameTooLong=La nomo de dosierujo aŭ vojo estas tro longa. +InvalidDirName=La nomo de dosierujo estas malĝusta. +BadDirName32=La nomoj de dosierujoj ne povas havi de sekvaj karakteroj:%n%n%1 +DirExistsTitle=Dosierujo ekzistas +DirExists=La dosierujo:%n%n%1%n%njam ekzistas. Ĉu vi volas instali en ĝi ĉiokaze? +DirDoesntExistTitle=La dosierujo ne ekzistas +DirDoesntExist=La dosierujo:%n%n%1%n%nne ekzistas. Ĉu vi volas por ke tia dosierujo estos farita? + +; *** "Select Components" wizard page +WizardSelectComponents=Elektu komponentoj +SelectComponentsDesc=Kiaj komponentoj devas esti instalitaj? +SelectComponentsLabel2=Elektu komponentoj kiaj vi volas instali; forigu la komponentojn kiaj vi ne volas instali. Kliku Antaŭen kiam vi estas preta por kontinui. +FullInstallation=Tuta instalado +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Kompakta instalado +CustomInstallation=Kutima instalado +NoUninstallWarningTitle=Komponentoj ekzistas +NoUninstallWarning=La Majstro difinis ke sekvaj komponentoj jam estas instalitaj en via komputilo:%n%n%1%n%nNuligo de elekto de tiaj komponentoj ne forigos ĝin.%n%nĈu vi volas kontinui ĉiokaze? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Nuna elekto bezonas almenaŭ [gb] GB de diska spaco. +ComponentsDiskSpaceMBLabel=Nuna elekto bezonas almenaŭ [mb] MB de diska spaco. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Elektu aldonaj taskoj +SelectTasksDesc=Kiaj aldonaj taskoj devos esti montrotaj? +SelectTasksLabel2=Elektu aldonaj taskoj kiaj bezonas por ke Majstro montros dum instalado [name], kaj poste kliku Antaŭen. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Elektu dosierujon de starta menuo +SelectStartMenuFolderDesc=Kie Majstro devas krei tujklavon de programo? +SelectStartMenuFolderLabel3=La Majstro kreos tujklavojn de programo en sekva dosierujo de starta menuo. +SelectStartMenuFolderBrowseLabel=Por kontinui, kliku Antaŭen. Se vi volas elekti alian dosierujon, kliku Elekto. +MustEnterGroupName=Vi devas skribi la nomo de dosierujo. +GroupNameTooLong=La nomo de dosierujo aŭ vojo estas tro longa. +InvalidGroupName=La nomo de dosierujo estas malĝusta. +BadGroupName=La nomoj de dosierujoj ne povas havi de sekvaj karakteroj:%n%n%1 +NoProgramGroupCheck2=Ne krei dosierujon de starta menuo + +; *** "Ready to Install" wizard page +WizardReady=Preparado por Instalo +ReadyLabel1=Nun ĉio estas preparita por komenci instaladon [name] en via komputilo. +ReadyLabel2a=Kliku Instali por kontinui instaladon, aŭkliku Reen se vi volas rigardi aŭ ŝanĝi ajnajn statojn. +ReadyLabel2b=Kliku Instali por kontinui instaladon. +ReadyMemoUserInfo=Informacio de uzanto: +ReadyMemoDir=Destina loko: +ReadyMemoType=Majstra tipo: +ReadyMemoComponents=Elektitaj komponentoj: +ReadyMemoGroup=La dosierujo de starta menuo: +ReadyMemoTasks=Aldonaj taskoj: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Elŝuti pliajn dosierojn... +ButtonStopDownload=&Stopu elŝuti +StopDownload=Ĉu vi certas, ke vi volas stopi la elŝuton? +ErrorDownloadAborted=Elŝuto ĉesigita +ErrorDownloadFailed=Elŝuto malsukcesis: %1 %2 +ErrorDownloadSizeFailed=Akiri grandecon malsukcesis: %1 %2 +ErrorFileHash1=Dosiero haŝkodo malsukcesis: %1 +ErrorFileHash2=Nevalida dosiero haŝkodo: atendita %1, trovita %2 +ErrorProgress=Nevalida progreso: %1 de %2 +ErrorFileSize=Nevalida dosiergrandeco: atendita %1, trovita %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Preparado por Instalo +PreparingDesc=Majstro estas preparata por instalo [name] en via komputilo. +PreviousInstallNotCompleted=Instalado/Forigo de antaŭa programo ne estas plena. Por vi bezonas relanĉi vian komputilon por plenigi tian instaladon.%n%nPost relanĉo de via komputilo, ŝaltu Majstron denove por finigi instaladon de [name]. +CannotContinue=La Majstro ne povas kontinui. Bonvolu kliki Fino por eliri. +ApplicationsFound=Sekvaj aplikaĵoj uzas dosierojn kiajn bezonas renovigi per Instalado. Estas rekomendite ke vi permesu al Majstro automate fermi tiajn aplikaĵojn. +ApplicationsFound2=Sekvaj aplikaĵoj uzas dosierojn kiajn bezonas renovigi per Instalado. Estas rekomendite ke vi permesu al Majstro automate fermi tiajn aplikaĵojn. Poste de instalado Majstro provos relanĉi aplikaĵojn. +CloseApplications=&Automate fermi aplikaĵojn +DontCloseApplications=Ne fermu aplikaĵojn +ErrorCloseApplications=Majstro estis nepovebla aŭtomate fermi ĉiajn aplikaĵojn. Estas rekomendite ke vi fermu ĉiajn aplikaĵojn, uzantaj dosierojn, kiaj estas bezonatajn por renovigo per la Majstro antaŭ kontinui. +PrepareToInstallNeedsRestart=Instalado devas restartigi vian komputilon. Post restartigi vian komputilon, rulu denove Instaladon por kompletigi la instaladon de [name].%n%nĈu vi ŝatus rekomenci nun? + +; *** "Installing" wizard page +WizardInstalling=Instalado +InstallingLabel=Bonvolu atenti dum Majstro instalas [name] en via komputilo. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Fino de instalado +FinishedLabelNoIcons=La Majstro finigis instaladon [name] en via komputilo. +FinishedLabel=La Majstro finigis instaladon [name] en via komputilo. La aplikaĵo povos esti lanĉita per elekto de instalaj ikonoj. +ClickFinish=Kliku Fino por finigi instaladon. +FinishedRestartLabel=Por plenumigi instaladon de [name], Majstro devas relanĉi vian komputilon. Ĉu vi volas relanĉi nun? +FinishedRestartMessage=Por plenumigi instaladon de [name], Majstro devas relanĉi vian komputilon.%n%nĈu vi volas relanĉi nun? +ShowReadmeCheck=Jes, mi volas rigardi dosieron README +YesRadio=&Jes, relanĉu komputilon nun +NoRadio=&Ne, mi volas relanĉi komputilon poste +; used for example as 'Run MyProg.exe' +RunEntryExec=Ŝaltu %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Rigardi %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=La Majstro postulas sekvan diskon +SelectDiskLabel2=Bonvolu inserti Diskon %1 kaj kliku Jes.%n%nSe dosieroj en tia disko povos esti diversaj de prezentitaj malalte, enskribu korektan vojon aŭ kliku Elekto. +PathLabel=&Vojo: +FileNotInDir2=Dosieron "%1" estas nepoveble lokigi en "%2". Bonvolu inserti korectan diskon aŭ elektu alian dosierujon. +SelectDirectoryLabel=Bonvolu difini lokon de alia disko. + +; *** Installation phase messages +SetupAborted=Instalado ne estis plena.%n%nBonvolu korekti problemon kaj lanĉu Majstron denove. +AbortRetryIgnoreSelectAction=Elektu agon +AbortRetryIgnoreRetry=&Provu denove +AbortRetryIgnoreIgnore=&Ignori la eraron kaj daŭrigi +AbortRetryIgnoreCancel=Nuligi instaladon + +; *** Installation status messages +StatusClosingApplications=Fermado de aplikaĵoj... +StatusCreateDirs=Kreado de dosierujojn... +StatusExtractFiles=Ekstraktado de dosierojn... +StatusCreateIcons=Kreado de tujklavojn... +StatusCreateIniEntries=Kreado de INI dosierojn... +StatusCreateRegistryEntries=Kreado de registraj pointoj... +StatusRegisterFiles=Registrado de dosierojn... +StatusSavingUninstall=Konservas informacio por forigo... +StatusRunProgram=Finiĝas instalado... +StatusRestartingApplications=Relanĉo de aplikaĵoj... +StatusRollback=Renovigo de ŝanĝoj... + +; *** Misc. errors +ErrorInternal2=Interna eraro: %1 +ErrorFunctionFailedNoCode=%1 estas kripligita +ErrorFunctionFailed=%1 estas kripligita; kodnomo %2 +ErrorFunctionFailedWithMessage=%1 estas kripligita; kodnomo %2.%n%3 +ErrorExecutingProgram=Estas nepoveble plenumi dosieron:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Eraro dum malfermo de registra ŝlosilo:%n%1\%2 +ErrorRegCreateKey=Eraro dum kreado de registra ŝlosilo:%n%1\%2 +ErrorRegWriteKey=Eraro dum skribado en registra ŝlosilo:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Eraro dum kreado de INI pointo en dosiero "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Preterpasi ĉi tiun dosieron (ne rekomendita) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignori la eraron kaj daŭrigi (ne rekomendita) +SourceIsCorrupted=La fonta dosiero estas kripligita +SourceDoesntExist=La fonta dosiero "%1" ne ekzistas +ExistingFileReadOnly=Ekzistanta dosiero estas markita nurlega.%n%nAlklaku Reen por forigi la nurlegeblan atributon kaj provu denove, Ignori por transsalti la dosieron aŭ Ĉesigi por kompletigi la instaladon. +ExistingFileReadOnly2=La ekzistanta dosiero ne povis esti anstataŭigita ĉar ĝi estas markita nurlega. +ExistingFileReadOnlyRetry=&Forigu la nurlegeblan atributon kaj reprovu +ExistingFileReadOnlyKeepExisting=&Konservu la ekzistantan dosieron +ErrorReadingExistingDest=Eraro aperis dum legado de ekzista dosiero: +FileExistsSelectAction=Elekti agon +FileExists2=La dosiero jam ekzistas. +FileExistsOverwriteExisting=&Anstataŭigu la ekzistantan dosieron +FileExistsKeepExisting=&Konservu la ekzistantan dosieron +FileExistsOverwriteOrKeepAll=&Faru ĉi tion por la venontaj konfliktoj +ExistingFileNewerSelectAction=Elekti agon +ExistingFileNewer2=La ekzistanta dosiero estas pli nova ol tiu instalilo provas instali. +ExistingFileNewerOverwriteExisting=&Anstataŭigu la ekzistantan dosieron +ExistingFileNewerKeepExisting=&Konservu la ekzistantan dosieron (recomendita) +ExistingFileNewerOverwriteOrKeepAll=&Faru ĉi tion por la venontaj konfliktoj +ErrorChangingAttr=Eraro aperis dum provo ĉanĝi atributoj de ekzista dosiero: +ErrorCreatingTemp=Eraro aperis dum kreado dosieron en destina dosierujo: +ErrorReadingSource=Eraro aperis dum legado de dosiero: +ErrorCopying=Eraro aperis dum kopiado de dosiero: +ErrorReplacingExistingFile=Eraro aperis dum relokiĝo de ekzistan dosieron: +ErrorRestartReplace=Relanĉo/Relokiĝo estas kripligita: +ErrorRenamingTemp=Eraro aperis dum renomiĝo del dosiero en destina dosierujo: +ErrorRegisterServer=Estas nepoveble registri DLL/OĈ: %1 +ErrorRegSvr32Failed=RegSvr32estas kripligita kun elira codo %1 +ErrorRegisterTypeLib=Estas nepoveble registri bibliotekon de tipo : %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bita +UninstallDisplayNameMark64Bit=64-bita +UninstallDisplayNameMarkAllUsers=Ĉiuj uzantoj +UninstallDisplayNameMarkCurrentUser=Nuna uzanto + +; *** Post-installation errors +ErrorOpeningReadme=Eraro aperis dum malfermado de README dosiero. +ErrorRestartingComputer=Majstro ne povis relanĉi komputilo. Bonvolu fari tion permane. + +; *** Uninstaller messages +UninstallNotFound=Dosiero "%1" ne ekzistas. Estas nepoveble forigi. +UninstallOpenError=Dosieron "%1" nepoveble estas malfermi. Estas nepoveble forigi +UninstallUnsupportedVer=\Foriga protokolo "%1" estas en nekonata formato per ĉi tia versio de forigprogramo. Estas nepoveble forigi +UninstallUnknownEntry=Ekzistas nekonata pointo (%1) en foriga protokolo +ConfirmUninstall=Ĉu vi reale volas tute forigi %1 kaj ĉiaj komponentoj de ĝi? +UninstallOnlyOnWin64=Ĉi tian instaladon povos forigi nur en 64-bit Vindoso. +OnlyAdminCanUninstall=Ĉi tian instaladon povos forigi nur uzanto kun administrantaj rajtoj. +UninstallStatusLabel=Bonvolu atendi dum %1 foriĝos de via komputilo. +UninstalledAll=%1 estis sukcese forigita de via komputilo. +UninstalledMost=Forigo de %1 estas plena.%n%nKelkaj elementoj ne estis forigitaj. Ĝin poveble estas forigi permane. +UninstalledAndNeedsRestart=Por plenumi forigadon de %1, via komputilo devas esti relanĉita.%n%nĈu vi volas relanĉi nun? +UninstallDataCorrupted="%1" dosiero estas kriplita. Estas nepoveble forigi + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Forigi komune uzatan dosieron? +ConfirmDeleteSharedFile2=La sistemo indikas ke sekva komune uzata dosiero jam ne estas uzata per neniel aplikaĵoj. Ĉu vi volas forigi ĉi tian dosieron?%n%nSe ajna programo jam uzas tian dosieron, dum forigo ĝi povos malĝuste funkcii. Se vi ne estas certa elektu Ne. Restante en via sistemo la dosiero ne damaĝos ĝin. +SharedFileNameLabel=nomo de dosiero: +SharedFileLocationLabel=Loko: +WizardUninstalling=Stato de forigo +StatusUninstalling=Forigado %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Instalado %1. +ShutdownBlockReasonUninstallingApp=Forigado %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 versio %2 +AdditionalIcons=Aldonaj ikonoj: +CreateDesktopIcon=Krei &Labortablan ikonon +CreateQuickLaunchIcon=Krei &Rapida lanĉo ikonon +ProgramOnTheWeb=%1 en Reto +UninstallProgram=Roriĝado %1 +LaunchProgram=Lanĉo %1 +AssocFileExtension=&Asociigi %1 kun %2 dosieraj finaĵoj +AssocingFileExtension=Asociiĝas %1 kun %2 dosiera finaĵo... +AutoStartProgramGroupDescription=Lanĉo: +AutoStartProgram=Automate ŝalti %1 +AddonHostProgramNotFound=%1 nepoveble estas loki en dosierujo kian vi elektis.%n%nĈu vi volas kontinui ĉiokaze? diff --git a/Files/Languages/Unofficial/Estonian.isl b/Files/Languages/Unofficial/Estonian.isl new file mode 100644 index 00000000..003275f6 --- /dev/null +++ b/Files/Languages/Unofficial/Estonian.isl @@ -0,0 +1,341 @@ +; *** Inno Setup version 5.5.3+ Estonian messages *** +; +; Estonian translation by LiivaneLord +; E-mail: liivane.lord@mail.ee +; Last modification date: 2013-01-09 +; Tlge baseerub rix'i tlkele, mida on parandatud ja kohandatud uuemale versioonile. +; +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Eesti +LanguageID=$0425 +LanguageCodePage=1257 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Paigalda +SetupWindowTitle=Paigalda %1 +UninstallAppTitle=Eemalda +UninstallAppFullTitle=Eemalda %1 + +; *** Misc. common +InformationTitle=Informatsioon +ConfirmTitle=Kinnita +ErrorTitle=Viga + +; *** SetupLdr messages +SetupLdrStartupMessage=Paigaldatakse %1. Kas soovid jtkata? +LdrCannotCreateTemp=Ei saanud luua ajutist faili. Paigaldamine katkestati +LdrCannotExecTemp=Ei saanud kivitada faili ajutises kataloogis. Paigaldamine katkestati + +; *** Startup error messages +LastErrorMessage=%1.%n%nViga %2: %3 +SetupFileMissing=%1 on paigaldamise kaustast kadunud. Palun paranda see viga vi hangi programmi uus koopia. +SetupFileCorrupt=Paigaldaja failid on rikutud. Palun hangi programmi uus koopia. +SetupFileCorruptOrWrongVer=Paigaldaja failid on kas rikutud vi ei tta selle paigaldaja versiooniga. Palun paranda see viga vi hangi programmi uus koopia. +InvalidParameter=Ksureale anti vale parameeter:%n%n%1 +SetupAlreadyRunning=Paigaldaja alles ttab. +WindowsVersionNotSupported=Seda programmi ei saa selle Windowsi versiooniga kasutada, mis arvutis praegu ttab. +WindowsServicePackRequired=See programm vajab %1 Service Pack (Hoolduspakett) %2 vi uuemat. +NotOnThisPlatform=See programm ei tta %1'i platvormil. +OnlyOnThisPlatform=See programm peab ttama %1'i platvormil. +OnlyOnTheseArchitectures=Seda programmi saab paigaldada ainult neile Windowsi versioonidele, mis on vlja ttatud jrgmistele protsessori arhitektuuridele:%n%n%1 +MissingWOW64APIs=Sinu arvutis ttaval Windowsil puuduvad 64-bitise paigaldamise jaoks vajalik funktsionaalsus. Selle probleemi parandamiseks paigalda palun Service Pack (Hoolduspakett) %1. +WinVersionTooLowError=See programm vajab %1 versiooniga %2 vi uuemat. +WinVersionTooHighError=Seda programmi ei saa paigaldada %1 versiooniga %2 vi uuema puhul. +AdminPrivilegesRequired=Selle programmi paigaldamiseks pead olema administraatorina sisse logitud. +PowerUserPrivilegesRequired=Selle programmi paigaldamiseks pead olema sisse logitud administraatorina vi Power user liikmena. +SetupAppRunningError=Paigaldaja tuvastas, et %1 ttab hetkel.%n%nPalun sulge see programm ning seejrel jtkamiseks vajuta OK, katkestamiseks Katkesta. +UninstallAppRunningError=Eemaldaja tuvastas, et %1 ttab hetkel.%n%nPalun sulge see programm ning seejrel jtkamiseks vajuta OK, katkestamiseks Katkesta. + +; *** Misc. errors +ErrorCreatingDir=Paigaldaja ei saanud luua kataloogi "%1" +ErrorTooManyFilesInDir=Ei saanud luua faili kataloogi "%1", kuna seal on juba liiga palju faile + +; *** Setup common messages +ExitSetupTitle=Vlju paigaldajast +ExitSetupMessage=Paigaldamine pole valmis. Kui praegu vljud, siis programmi ei paigaldata.%n%nPaigaldamise lpetamiseks vid paigaldaja mni teine kord uuesti kivitada.%n%nSoovid vljuda paigaldajast? +AboutSetupMenuItem=&Teave paigaldajast... +AboutSetupTitle=Teave paigaldajast +AboutSetupMessage=%1 versiooniga %2%n%3%n%n%1 koduleht:%n%4 +AboutSetupNote= +TranslatorNote=Tlkis LiivaneLord (liivane[dot]lord[at]mail[dot]ee) + +; *** Buttons +ButtonBack=< &Tagasi +ButtonNext=&Edasi > +ButtonInstall=&Paigalda +ButtonOK=OK +ButtonCancel=Katkesta +ButtonYes=&Jah +ButtonYesToAll=Kikidele J&ah +ButtonNo=&Ei +ButtonNoToAll=Kikidele E&i +ButtonFinish=&Valmis +ButtonBrowse=&Sirvi... +ButtonWizardBrowse=S&irvi... +ButtonNewFolder=&Loo uus kaust + +; *** "Select Language" dialog messages +SelectLanguageTitle=Vali paigaldaja keel +SelectLanguageLabel=Vali keel, mida soovid kasutada paigaldamise kigus: + +; *** Common wizard text +ClickNext=Jtkamiseks vajuta Edasi, paigaldajast vljumiseks vajuta Katkesta. +BeveledLabel= +BrowseDialogTitle=Sirvi kausta +BrowseDialogLabel=Vali allolevast nimekirjast kaust ja vajuta OK. +NewFolderName=Uus kaust + +; *** "Welcome" wizard page +WelcomeLabel1=Tere tulemast [name] paigaldaja viisardisse +WelcomeLabel2=Sinu arvutisse paigaldatakse [name/ver].%n%nEnne jtkamist on soovitatav sulgeda kik muud programmid. + +; *** "Password" wizard page +WizardPassword=Parool +PasswordLabel1=See paigaldaja on kaitstud parooliga. +PasswordLabel3=Palun sisesta parool ja vajuta Edasi. Paroolid on tstutundlikud. +PasswordEditLabel=&Parool: +IncorrectPassword=Sisestatud parool on vale. Palun proovi uuesti. + +; *** "License Agreement" wizard page +WizardLicense=Litsentsileping +LicenseLabel=Palun loe enne jtkamist see informatsioon lbi. +LicenseLabel3=Palun loe jrgnevat litsentsilepingut. Paigaldamise jtkamiseks pead nustuma selle lepingu tingimustega. +LicenseAccepted=Ma &nustun lepinguga +LicenseNotAccepted=Ma &ei nustu lepinguga + +; *** "Information" wizard pages +WizardInfoBefore=Informatsioon +InfoBeforeLabel=Palun loe enne jtkamist see oluline informatsioon lbi. +InfoBeforeClickLabel=Kui oled valmis jtkama paigaldamist, vajuta Edasi. +WizardInfoAfter=Informatsioon +InfoAfterLabel=Palun loe enne jtkamist see oluline informatsioon lbi. +InfoAfterClickLabel=Kui oled valmis jtkama paigaldamist, vajuta Edasi. + +; *** "User Information" wizard page +WizardUserInfo=Andmed kasutaja kohta +UserInfoDesc=Palun sisesta oma andmed. +UserInfoName=&Kasutaja nimi: +UserInfoOrg=&Organisatsioon: +UserInfoSerial=&Seerianumber: +UserInfoNameRequired=Pead sisestama nime. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Vali programmile kaust +SelectDirDesc=Kuhu [name] paigaldada? +SelectDirLabel3=Paigaldaja paigaldab [name]'i jrgnevasse kausta. +SelectDirBrowseLabel=Jtkamiseks vajuta Edasi. Kui soovid valida muu kausta, vajuta Sirvi. +DiskSpaceMBLabel=Programm vajab vhemalt [mb] MB vaba ruumi. +CannotInstallToNetworkDrive=Programmi ei saa paigaldada vrgudraivile. +CannotInstallToUNCPath=Programmi ei saa paigaldada UNC kataloogi. +InvalidPath=Pead sisestama tispika draivitee koos draivithisega; niteks:%n%nC:\APP%n%nvi UNC kataloog kujul:%n%n\\server\share +InvalidDrive=Sinu valitud draivi vi UNC kataloogi ei eksisteeri vi puudub sellele ligips. Palun vali mni teine. +DiskSpaceWarningTitle=Pole piisavalt ruumi +DiskSpaceWarning=Paigaldamiseks on vaja vhemalt %1 KB vaba ruumi, aga valitud draivil on vaba ainult %2 KB.%n%nKas soovid sellegipoolest jtkata? +DirNameTooLong=Kausta nimi vi kaustatee on liiga pikk +InvalidDirName=Kausta nimi on vale. +BadDirName32=Kausta nimed ei tohi sisaldada htegi jrgnevatest smbolitest:%n%n%1 +DirExistsTitle=Kaust on olemas +DirExists=Kaust:%n%n%1%n%non juba olemas. Kas soovid sellegipoolest sinna paigaldada? +DirDoesntExistTitle=Kaust puudub +DirDoesntExist=Kaust:%n%n%1%n%npuudub. Kas soovid, et see kaust luuakse? + +; *** "Select Components" wizard page +WizardSelectComponents=Vali komponendid +SelectComponentsDesc=Millised komponendid paigaldada? +SelectComponentsLabel2=Vali komponendid, mida paigaldada; eemalda mrgid komponentidelt, mida ei soovi paigaldada. Kui oled valmis jtkama, vajuta Edasi. +FullInstallation=Tielik paigaldamine +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Kompaktne paigaldamine +CustomInstallation=Kohandatud paigaldamine +NoUninstallWarningTitle=Komponendid on juba olemas +NoUninstallWarning=Paigaldaja tuvastas, et jrgnevad komponendid on sinu arvutis juba olemas:%n%n%1%n%nNende mittevalimine ei eemalda neid.%n%nKas soovid sellegipoolest jtkata? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceMBLabel=Praegune valik vajab vhemalt [mb] MB vaba ruumi. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Vali tiendavad lesanded +SelectTasksDesc=Milliseid tiendavaid lesanded tita? +SelectTasksLabel2=Vali, milliseid tiendavaid lesandeid [name] paigaldaja peab titma ja vajuta Edasi. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Vali Start men kaust +SelectStartMenuFolderDesc=Kuhu luua programmi otseteed? +SelectStartMenuFolderLabel3=Paigaldaja loob programmi otseteed jrgnevasse Start men kausta. +SelectStartMenuFolderBrowseLabel=Jtkamiseks vajuta Edasi. Kui soovid valida muu kausta, vajuta Sirvi. +MustEnterGroupName=Pead sisestama kausta nime. +GroupNameTooLong=Kausta nimi vi kaustatee on liiga pikk. +InvalidGroupName=Kausta nimi on vale. +BadGroupName=Kausta nimi ei tohi sisaldada jrgnevatest smbolitest:%n%n%1 +NoProgramGroupCheck2=&ra loo Start men kausta + +; *** "Ready to Install" wizard page +WizardReady=Valmis paigaldama +ReadyLabel1=Paigaldaja on valmis paigaldama [name]'i sinu arvutisse. +ReadyLabel2a=Paigaldamise jtkamiseks vajuta Paigalda vi vajuta Tagasi, et nha vi muuta seadeid. +ReadyLabel2b=Paigaldamise jtkamiseks vajuta Paigalda. +ReadyMemoUserInfo=Kasutaja andmed: +ReadyMemoDir=Sihtkaust: +ReadyMemoType=Paigalduse tp: +ReadyMemoComponents=Valitud komponendid: +ReadyMemoGroup=Start men kaust: +ReadyMemoTasks=Lisalesanded: + +; *** "Preparing to Install" wizard page +WizardPreparing=Paigaldamiseks valmistumine +PreparingDesc=Paigaldaja valmistub paigaldama [name]'i sinu arvutisse. +PreviousInstallNotCompleted=Eelmise programmi paigaldamine/eemaldamine ei ole lpetatud. Paigaldamise lpetamiseks pead arvuti taaskivitama.%n%nPrast taaskivitust kivitage [name]'i paigaldaja uuesti, et lpetada paigaldamine. +CannotContinue=Paigaldaja ei saa jtkata. Vljumiseks vajuta palun Katkesta. +ApplicationsFound=Jrgnevad rakendused kasutavad faile, mida paigaldaja peab uuendama. Soovitatav on lubada paigaldajal need rakendused automaatselt sulgeda. +ApplicationsFound2=Jrgnevad rakendused kasutavad faile, mida paigaldaja peab uuendama. Soovitatav on lubada paigaldajal need rakendused automaatselt sulgeda. Prasta paigaldamise lpetamist ritab paigaldaja need rakendused taaskivitada. +CloseApplications=&Sulge rakendused automaatselt +DontCloseApplications=ra s&ulge rakendusi +ErrorCloseApplications=Paigaldaja ei saanud kiki rakendusi automaatselt sulgeda. Enne jtkamist on soovitatav sul sulgeda kik rakendused, mis kasutavad faile, mida paigaldaja peab uuendama. + +; *** "Installing" wizard page +WizardInstalling=Paigaldamine +InstallingLabel=Palun oota, kuni [name] paigaldatakse sinu arvutisse. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=[name]'i paigaldamise lpetamine +FinishedLabelNoIcons=[name]'i paigaldamine on lpetatud. +FinishedLabel=[name]'i paigaldamine on lpetatud. Programmi saab kivitada paigaldatud ikoonide abil. +ClickFinish=Paigaldajast vljumiseks vajuta Valmis. +FinishedRestartLabel=[name]'i paigaldamise lpetamiseks peab arvuti taaskivituma. Kas soovid kohe taaskivitada? +FinishedRestartMessage=[name]'i paigaldamise lpetamiseks peab arvuti taaskivituma.%n%nKas soovid kohe taaskivitada? +ShowReadmeCheck=Jah, sooviksin nha Readme (LoeMind) faili +YesRadio=&Jah, taaskivita arvuti kohe +NoRadio=&Ei, taaskivitan arvuti hiljem +; used for example as 'Run MyProg.exe' +RunEntryExec=Kivita %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Vaata %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Paigaldaja vajab jrgmist diski +SelectDiskLabel2=Palun sisesta disk %1 ja vajuta OK.%n%nKui diskil olevad failid asuvad kuskil mujal, siis sisesta ige kaustatee vi vajuta Sirvi. +PathLabel=&Asukoht: +FileNotInDir2=Fail "%1" ei asu kohas "%2". Palun sisesta ige disk vi vali teine kaust. +SelectDirectoryLabel=Palun tpsusta jrgmise diski asukoht. + +; *** Installation phase messages +SetupAborted=Paigaldamist ei lpetatud.%n%nPalun paranda viga ja kivita paigaldaja uuesti. +EntryAbortRetryIgnore=Uuesti proovimiseks vajuta Proovi uuesti, jtkamiseks Ignoreeri vi lpetamiseks Katkesta. + +; *** Installation status messages +StatusClosingApplications=Rakenduste sulgemine... +StatusCreateDirs=Kaustade loomine... +StatusExtractFiles=Failide lahtipakkimine... +StatusCreateIcons=Otseteede loomine... +StatusCreateIniEntries=INI kirjete loomine... +StatusCreateRegistryEntries=Registri kirjete loomine... +StatusRegisterFiles=Failide registreerimine... +StatusSavingUninstall=Eemaldamise teabe salvestamine... +StatusRunProgram=Paigaldamise lpetamine... +StatusRestartingApplications=Rakenduste taaskivitamine... +StatusRollback=Muudatuste tagasivtmine... + +; *** Misc. errors +ErrorInternal2=Sisemine viga: %1 +ErrorFunctionFailedNoCode=%1 luhtus +ErrorFunctionFailed=%1 luhtus; kood %2 +ErrorFunctionFailedWithMessage=%1 luhtus; kood %2.%n%3 +ErrorExecutingProgram=Ei saanud kivitada faili:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Ei saanud avada registri vtit:%n%1\%2 +ErrorRegCreateKey=Ei saanud luua registri vtit:%n%1\%2 +ErrorRegWriteKey=Ei saanud kirjutada registri vtit:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Viga INI kirje loomisel failis "%1". + +; *** File copying errors +FileAbortRetryIgnore=Uuesti proovimiseks vajuta Proovi uuesti, faili vahelejtmiseks Ignoreeri (mittesoovitatav) vi paigaldamisest loobumiseks Katkesta. +FileAbortRetryIgnore2=Uuesti proovimiseks vajuta Proovi uuesti, jtkamiseks Ignoreeri (mittesoovitatav) vi paigaldamisest loobumiseks Katkesta. +SourceIsCorrupted=Lhtefail on rikutud +SourceDoesntExist=Lhtefaili "%1" ei eksisteeri +ExistingFileReadOnly=Fail on mrgitud kui kirjutuskaitstud.%n%nKirjutuskaitstuse mahavtmiseks vajuta Proovi uuesti ja proovi uuesti, faili vahelejtmiseks Ignoreeri vi paigaldamisest loobumiseks Katkesta. +ErrorReadingExistingDest=Faili lugemisel ilmnes viga: +FileExists=Fail on juba olemas.%n%nKas soovid, et paigaldaja selle le kirjutaks? +ExistingFileNewer=Olemasolev fail on uuem kui see, mida paigaldaja ritab paigaldada. Soovitatav on olemasolev fail alles jtta.%n%nKas soovid olemasoleva faili alles jtta? +ErrorChangingAttr=Faili atribuutide muutmisel ilmnes viga: +ErrorCreatingTemp=Faili loomisel sihtkataloogi ilmnes viga: +ErrorReadingSource=Lhtefaili lugemisel ilmnes viga: +ErrorCopying=Faili kopeerimisel ilmnes viga: +ErrorReplacingExistingFile=Olemasoleva faili asendamisel ilmnes viga: +ErrorRestartReplace=Faili asendamine peale taaskivitust ei nnestunud: +ErrorRenamingTemp=Faili nime muutmisel sihtkataloogis ilmnes viga: +ErrorRegisterServer=Ei saanud registreerida DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 luhtus koodiga %1 +ErrorRegisterTypeLib=Unable to register the type library: %1 + +; *** Post-installation errors +ErrorOpeningReadme=README (LoeMind) faili avamisel ilmnes viga. +ErrorRestartingComputer=Paigaldaja ei suutnud arvutit taaskivitada. Palun tee seda ksitsi. + +; *** Uninstaller messages +UninstallNotFound=Faili "%1" ei ole olemas. Ei saa eemaldada. +UninstallOpenError=Faili "%1" ei saanud avada. Ei saa eemaldada. +UninstallUnsupportedVer=Eemaldamise logifaili "%1" formaat on tundmatu selle versiooni eemaldaja jaoks. Ei saa eemaldada +UninstallUnknownEntry=Eemaldaja logis on tundmatu kirje (%1) +ConfirmUninstall=Oled kindel, et soovid eemaldada %1'i ja kik selle komponendid? +UninstallOnlyOnWin64=Seda paigaldamist saab eemaldada ainult 64-bitises Windowsis. +OnlyAdminCanUninstall=Seda paigaldamist saab eemaldada ainult administraatoriigustega kasutaja. +UninstallStatusLabel=Palun oota, kuni %1 eemaldatakse sinu arvutist. +UninstalledAll=%1 eemaldati sinu arvutist edukalt. +UninstalledMost=%1'i eemaldamine nnestus.%n%nMned elemendid jid alles. Need vib ksitsi kustutada. +UninstalledAndNeedsRestart=%1'i eemaldamise lpetamiseks peab arvuti taaskivituma.%n%nKas soovid kohe taaskivitada? +UninstallDataCorrupted="%1" fail on rikutud. Ei saa eemaldada + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Kas kustutan hiskasutuses oleva faili? +ConfirmDeleteSharedFile2=Ssteem kinnitab, et hiskasutuses olevat faili ei kasuta kski teine programm. Kas soovid, et eemaldaja selle hiskasutuses oleva faili kustutaks?%n%nKui mni programm seda siiski veel kasutab, siis ei pruugi see enam korralikult ttada. Kui sa pole kindel, vali Ei. Faili allesjtmine ei tekita probleeme. +SharedFileNameLabel=Faili nimi: +SharedFileLocationLabel=Asukoht: +WizardUninstalling=Eemaldamise staatus +StatusUninstalling=%1'i eemaldamine... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=%1'i paigaldamine. +ShutdownBlockReasonUninstallingApp=%1'i eemaldamine. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 versiooniga %2 +AdditionalIcons=Tiendavad ikoonid: +CreateDesktopIcon=Loo &tlaua ikoon +CreateQuickLaunchIcon=Loo &kiirkivituse ikoon +ProgramOnTheWeb=%1 veebis +UninstallProgram=%1 - eemalda +LaunchProgram=Kivita %1 +AssocFileExtension=&Seosta %1 %2 faililaiendiga +AssocingFileExtension=Seostan %1 %2 faililaiendiga... +AutoStartProgramGroupDescription=Kivitus: +AutoStartProgram=Kivita %1 automaatselt +AddonHostProgramNotFound=%1 ei asu sinu valitud kaustas.%n%nKas soovid sellegipoolest jtkata? diff --git a/Files/Languages/Unofficial/Farsi.isl b/Files/Languages/Unofficial/Farsi.isl new file mode 100644 index 00000000..aaed6cd0 --- /dev/null +++ b/Files/Languages/Unofficial/Farsi.isl @@ -0,0 +1,388 @@ +; *** Inno Setup version 6.1.0+ Farsi messages *** +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). +; +; Translated by: +; Peyman M. (peymanR34@outlook.com) + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Farsi +LanguageID=$0429 +LanguageCodePage=1256 +RightToLeft=yes +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=نصب کننده +SetupWindowTitle=نصب کننده - %1 +UninstallAppTitle=حذف کننده +UninstallAppFullTitle=%1 حذف کننده + +; *** Misc. common +InformationTitle=اطلاعات +ConfirmTitle=تایید +ErrorTitle=خطا + +; *** SetupLdr messages +SetupLdrStartupMessage=این %1 را نصب می‌کند. آیا مایل به ادامه هستید؟ +LdrCannotCreateTemp=خطا در ایجاد یک فایل موقت. برنامه نصب لغو شد +LdrCannotExecTemp=خطا در اجرای فایل در پوشه موقت. برنامه نصب لغو شد +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nخطا %2: %3 +SetupFileMissing=فایل %1 در پوشه نصب وجود ندارد. لطفاً مشکل را برطرف کرده و یا یک کپی جدید از برنامه را دریافت کنید. +SetupFileCorrupt=فایل های نصب کننده آسیب دیده‌اند. لطفاً یک کپی جدید از برنامه را دریافت کنید. +SetupFileCorruptOrWrongVer=فایل های نصب کننده آسیب دیده‌اند، یا با این نسخه از نصب کننده سازگار نیستند. لطفاً مشکل را برطرف کرده و یا یک کپی جدید از برنامه را دریافت کنید. +InvalidParameter=یک پارامتر نامعتبر به خط فرمان ارسال شده است:%n%n%1 +SetupAlreadyRunning=نصب کننده از قبل در حال اجراست. +WindowsVersionNotSupported=این برنامه از نسخه ویندوزی که بر روی کامپیوتر شما در حال اجراست پشتیبانی نمی‌کند. +WindowsServicePackRequired=این برنامه نیازمند %1 سرویس پک %2 یا بالاتر است. +NotOnThisPlatform=این برنامه روی %1 اجرا نمی‌شود. +OnlyOnThisPlatform=این برنامه باید بر روی %1 اجرا شود. +OnlyOnTheseArchitectures=این برنامه تنها می‌تواند بر روی نسخه های ویندوزی نصب شود که برای معماری های پردازنده زیر طراحی شده‌اند:%n%n%1 +WinVersionTooLowError=این برنامه نیازمند %1 نسخه %2 یا بالاتر است. +WinVersionTooHighError=این برنامه نمی‌تواند بر روی %1 نسخه %2 یا بالاتر نصب شود. +AdminPrivilegesRequired=هنگام نصب این برنامه، شما باید به عنوان یک کاربر مدیر وارد سیستم شده باشید. +PowerUserPrivilegesRequired=در هنگام نصب این برنامه، شما باید به عنوان کاربر مدیر وارد سیستم شده باشید و یا اینکه عضو گروه Power Users باشید. +SetupAppRunningError=نصب کننده %1 هم اکنون در حال اجراست.%n%nلطفاً اکنون تمام نمونه های آن را بسته، و سپس برای ادامه بر روی تایید، و یا برای خروج بر روی انصراف کلیک کنید. +UninstallAppRunningError=حذف کننده تشخیص داده است که %1 هم اکنون در حال اجراست.%n%nلطفاً اکنون تمام نمونه های آن را بسته، و سپس برای ادامه بر روی تایید، و یا برای خروج بر روی انصراف کلیک کنید. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=انتخاب نحوه نصب توسط نصب کننده +PrivilegesRequiredOverrideInstruction=انتخاب نحوه نصب +PrivilegesRequiredOverrideText1=%1 را می‌توان برای تمامی کاربران (نیازمند دسترسی مدیر سیستم)، و یا تنها برای شما نصب کرد.‏ +PrivilegesRequiredOverrideText2=%1 را می‌توان تنها برای شما، و یا تمامی کاربران (نیازمند دسترسی مدیر سیستم) است.‏ +PrivilegesRequiredOverrideAllUsers=نصب برای &تمامی کاربران +PrivilegesRequiredOverrideAllUsersRecommended=نصب برای &تمامی کاربران (پیشنهاد می‌شود)‏ +PrivilegesRequiredOverrideCurrentUser=نصب تنها برای &من +PrivilegesRequiredOverrideCurrentUserRecommended=نصب تنها برای &من (پیشنهاد می‌شود)‏ + +; *** Misc. errors +ErrorCreatingDir=نصب کننده قادر به ایجاد پوشه نبود "%1" +ErrorTooManyFilesInDir=ایجاد یک فایل در پوشه "%1" بدلیل آنکه حاوی تعداد زیادی فایل است امکان پذیر نیست + +; *** Setup common messages +ExitSetupTitle=خروج از نصب کننده +ExitSetupMessage=نصب به پایان نرسیده است. در صورتی که اکنون خارج شوید برنامه نصب نخواهد شد.‏%n%nشما می‌توانید نصب کننده را مجدداً در زمانی دیگر برای تکمیل عملیات نصب اجرا کنید.‏%n%nآیا مایل به خروج هستید؟ +AboutSetupMenuItem=&درباره نصب کننده... +AboutSetupTitle=درباره نصب کننده +AboutSetupMessage=%1 نسخه %2%n%3%n%n%1 وب سایت:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< &قبلی +ButtonNext=&بعدی > +ButtonInstall=&نصب +ButtonOK=تایید +ButtonCancel=انصراف +ButtonYes=&بله +ButtonYesToAll=بله برای &همه +ButtonNo=&خیر +ButtonNoToAll=ن&ه برای همه +ButtonFinish=&پایان +ButtonBrowse=&مرور... +ButtonWizardBrowse=م&رور...‏ +ButtonNewFolder=&ایجاد پوشه جدید + +; *** "Select Language" dialog messages +SelectLanguageTitle=انتخاب زبان نصب کننده +SelectLanguageLabel=زبانی را که می‌خواهید در حین نصب استفاده کنید را انتخاب کنید. + +; *** Common wizard text +ClickNext=برای ادامه بر روی بعدی کلیک کنید، برای خروج از نصب کننده بر روی انصراف کلیک کنید.‏ +BeveledLabel= +BrowseDialogTitle=مرور برای پوشه +BrowseDialogLabel=از لیست زیر یک پوشه را انتخاب کرده و سپس بر روی تایید کلیک کنید.‏ +NewFolderName=پوشه جدید + +; *** "Welcome" wizard page +WelcomeLabel1=به ویزارد نصب کننده [name] خوش آمدید +WelcomeLabel2=این [name/ver] را بر روی کامپیوتر شما نصب می‌کند.‏%n%nپیشنهاد می‌شود قبل از ادامه تمامی اپلیکیشن های دیگر را ببندید.‏ + +; *** "Password" wizard page +WizardPassword=گذرواژه +PasswordLabel1=این نصب کننده با گذرواژه محافظت شده است.‏ +PasswordLabel3=لطفاً یک گذرواژه را وارد کنید، سپس بر روی بعدی کلیک کنید. گذرواژه ها حساس به حروف بزرگ و کوچک هستند.‏ +PasswordEditLabel=&گذرواژه:‏ +IncorrectPassword=گذرواژه وارد شده اشتباه است. لطفاً مجدداً تلاش کنید.‏ + +; *** "License Agreement" wizard page +WizardLicense=توافقنامه استفاده +LicenseLabel=لطفاً اطلاعات مهم زیر را قبل از ادامه مطالعه کنید.‏ +LicenseLabel3=لطفاً توافقنامه زیر را مطالعه کنید. شما باید مفاد این توافقنامه را پیش از ادامه نصب برنامه بپذیرید. +LicenseAccepted=من توافقنامه را &می‌پذیرم +LicenseNotAccepted=من توافقنامه را &نمی‌پذیرم + +; *** "Information" wizard pages +WizardInfoBefore=اطلاعات +InfoBeforeLabel=لطفاً اطلاعات مهم زیر را قبل از ادامه مطالعه کنید.‏‏ +InfoBeforeClickLabel=زمانی که آماده برای ادامه نصب هستید، بر روی بعدی کلیک کنید‏.‏ +WizardInfoAfter=اطلاعات +InfoAfterLabel=لطفاً اطلاعات مهم زیر را قبل از ادامه مطالعه کنید.‏ +InfoAfterClickLabel=زمانی که آماده برای ادامه‌ی نصب هستید، بر روی بعدی کلیک کنید‏.‏ + +; *** "User Information" wizard page +WizardUserInfo=اطلاعات کاربر +UserInfoDesc=لطفاً اطلاعات خود را وارد کنید.‏ +UserInfoName=&نام کاربری:‏ +UserInfoOrg=&سازمان:‏ +UserInfoSerial=&شماره سریال:‏ +UserInfoNameRequired=شما باید یک نام را وارد کنید. + +; *** "Select Destination Location" wizard page +WizardSelectDir=انتخاب محل مقصد +SelectDirDesc=کجا باید [name] نصب شود؟ +SelectDirLabel3=نصب کننده [name] را در پوشه زیر نصب می‌کند.‏ +SelectDirBrowseLabel=برای ادامه، بر روی بعدی کلیک کنید. اگر مایل به انتخاب پوشه دیگری هستید، بر روی مرور کلیک کنید.‏ +DiskSpaceGBLabel=حداقل [gb] گیگابایت از فضای خالی دیسک مورد نیاز است.‏ +DiskSpaceMBLabel=حداقل [mb] مگابایت از فضای خالی دیسک مورد نیاز است.‏ +CannotInstallToNetworkDrive=نصب کننده نمی‌تواند در یک درایو شبکه نصب را انجام دهد. +CannotInstallToUNCPath=نصب کننده نمی‌تواند در یک UNC path نصب را انجام دهد. +InvalidPath=شما باید یک آدرس کامل همراه با اسم درایو وارد کنید؛ به عنوان مثال:%n%nC:\APP%n%nو یا یک مسیر UNC به شکل مقابل:%n%n\\server\share +InvalidDrive=درایو یا UNC share انتخاب شده وجود ندارد و یا غیر قابل دسترسی است. لطفاً یک مسیر دیگر را انتخاب کنید. +DiskSpaceWarningTitle=فضای خالی دیسک کافی نیست +DiskSpaceWarning=نصب کننده به حداقل %1 کیلوبایت فضای خالی برای نصب نیاز دارد، اما درایو انتخاب شده فقط %2 کیلوبایت فضای آزاد دارد.%n%nآیا مایل به ادامه هستید؟ +DirNameTooLong=نام پوشه یا مسیر بسیار طولانی است.‏ +InvalidDirName=نام پوشه صحیح نیست.‏ +BadDirName32=نام پوشه‌ها نمی‌تواند شامل کاراکتر های مقابل باشد:%n%n%1 +DirExistsTitle=پوشه از قبل وجود دارد +DirExists=این پوشه:%n%n%1%n%nاز قبل وجود دارد. آیا بهرحال مایل به نصب در آن پوشه هستید؟ +DirDoesntExistTitle=پوشه وجود ندارد +DirDoesntExist=این پوشه:%n%n%1%n%nوجود ندارد. آیا مایل به ساختن آن هستید؟ + +; *** "Select Components" wizard page +WizardSelectComponents=انتخاب اجزاء +SelectComponentsDesc=کدام اجزاء باید نصب شوند؟ +SelectComponentsLabel2=اجزایی که مایل به نصب آن‌ها هستید را انتخاب کنید؛ اجزایی را که نمی‌خواهید نصب کنید را از حالت انتخاب بردارید.‏ زمانی که آماده برای ادامه بودید بر روی بعدی کلیک کنید. +FullInstallation=نصب کامل +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=نصب فشرده +CustomInstallation=نصب سفارشی +NoUninstallWarningTitle=اجزاء وجود دارند +NoUninstallWarning=نصب کننده تشخیص داده است که اجزای فوق از قبل بر روی کامپیوتر شما نصب شده است:%n%n%1%n%nعدم انتخاب این اجزاء باعث حذف شدن آن‌ها نمی‌شود.%n%nآیا مایل به ادامه هستید؟ +ComponentSize1=%1 کیلوبایت +ComponentSize2=%1 مگابایت +ComponentsDiskSpaceGBLabel=انتخاب فعلی به حداقل [gb] گیگابایت فضای خالی دیسک نیاز دارد.‏ +ComponentsDiskSpaceMBLabel=انتخاب فعلی به حداقل [mb] مگابایت فضای خالی دیسک نیاز دارد.‏ + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=انتخاب وظایف اضافی +SelectTasksDesc=کدام وظایف اضافی باید انجام شود؟ +SelectTasksLabel2=وظایف اضافی را که تمایل دارید در هنگام نصب [name] انجام داده شود را انتخاب کرده، سپس بر روی بعدی کلیک کنید.‏ + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=انتخاب پوشه منوی استارت +SelectStartMenuFolderDesc=نصب کننده در کجا باید میانبر های برنامه را قرار دهد؟ +SelectStartMenuFolderLabel3=نصب کننده میانبر های برنامه را در پوشه زیر در منوی استارت ایجاد خواهد کرد. +SelectStartMenuFolderBrowseLabel=برای ادامه، بر روی بعدی کلیک کنید. در صورتی که تمایل به انتخاب پوشه دیگری دارید، بر روی مرور کلیک کنید. +MustEnterGroupName=شما باید یک اسم پوشه را وارد کنید. +GroupNameTooLong=نام پوشه و یا مسیر آن بسیار طولانی است. +InvalidGroupName=نام پوشه صحیح نیست. +BadGroupName=نام پوشه نباید شامل هر یک از کاراکتر های زیر باشد:%n%n%1 +NoProgramGroupCheck2=پوشه‌ای در منوی استارت ایجاد &نشود + +; *** "Ready to Install" wizard page +WizardReady=آماده نصب +ReadyLabel1=نصب کننده آماده شروع نصب [name] بر روی کامپیوتر شماست.‏ +ReadyLabel2a=برای ادامه نصب بر روی نصب کلیک کنید، و یا اگر تمایل به بازبینی یا تغییر تنظیمات دارید بر روی قبلی کلیک کنید. +ReadyLabel2b=برای ادامه نصب بر روی نصب کلیک کنید.‏ +ReadyMemoUserInfo=اطلاعات کاربر: +ReadyMemoDir=محل مقصد: +ReadyMemoType=نوع نصب: +ReadyMemoComponents=اجزاء انتخاب شده: +ReadyMemoGroup=پوشه منوی استارت: +ReadyMemoTasks=وظایف اضافی: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=درحال دانلود فایل های اضافی... +ButtonStopDownload=&توقف دانلود +StopDownload=آیا مطمئن هستید که می‌خواهید دانلود را متوقف کنید؟ +ErrorDownloadAborted=دانلود متوقف شد +ErrorDownloadFailed=دانلود ناموفق بود: %1 %2 +ErrorDownloadSizeFailed=دریافت حجم ناموفق بود: %1 %2 +ErrorFileHash1=هش فایل ناموفق بود: %1 +ErrorFileHash2=هش نامعتبر فایل: مورد انتظار %، پیدا شده %2 +ErrorProgress=پیشرفت نامعتبر: %1 از %2 +ErrorFileSize=اندازه فایل نامعتبر: مورد انتظار %، پیدا شده %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=در حال آماده سازی برای نصب +PreparingDesc=نصب کننده در حال آماده سازی برای نصب [name] بر روی کامپیوتر شماست. +PreviousInstallNotCompleted=نصب/حذف برنامه قبلی تکمیل نشده است. شما باید کامپیوتر خود را برای تکمیل عملیات نصب مجدداً راه‌اندازی کنید.%n%nپس از ری‌استارت کامپیوتر، نصب کننده را مجدداً برای تکمیل عملیات نصب [name] اجرا کنید. +CannotContinue=نصب کننده قادر به ادامه نیست. لطفاً برای خروج بر روی انصراف کلیک کنید. +ApplicationsFound=اپلیکیشن های زیر در حال استفاده از فایل هایی هستند که نیازمند بروزرسانی توسط نصب کننده هستند. پیشنهاد می‌شود به نصب کننده اجازه دهید تا این اپلیکیشن ها به صورت خودکار بسته شوند. +ApplicationsFound2=اپلیکیشن های زیر در حال استفاده از فایل هایی هستند که نیازمند بروزرسانی توسط نصب کننده هستند. پیشنهاد می‌شود به نصب کننده اجازه دهید تا این اپلیکیشن ها به صورت خودکار بسته شوند. پس از پایان نصب، نصب کننده تلاش می‌کند تا این اپلیکیشن ها را مجدداً اجرا کند. +CloseApplications=بستن &خودکار اپلیکیشن ها +DontCloseApplications=اپلیکیشن ها بسته &نشوند +ErrorCloseApplications=نصب کننده قادر به بستن خودکار تمام اپلیکیشن ها نبود. پیشنهاد می‌شود تمام اپلیکیشن هایی که از فایل هایی که نیاز به بروزرسانی توسط نصب کننده را دارند را قبل از ادامه ببندید. +PrepareToInstallNeedsRestart=نصب کننده باید کامپیوتر را مجدداً راه‌اندازی کند. پس از ری‌استارت کامپیوتر، نصب کننده را برای تکمیل عملیات نصب [name] مجدداً اجرا کنید.%n%nآیا مایل به راه‌اندازی مجدد هستید؟ + +; *** "Installing" wizard page +WizardInstalling=در حال نصب +InstallingLabel=لطفاً تا زمانی که نصب کننده [name] را بر روی کامپیوتر شما نصب می‌کند، صبر کنید. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=در حال تکمیل ویزارد نصب کننده [name] +FinishedLabelNoIcons=نصب کننده، عملیات نصب [name] بر روی کامپیوتر شما را به پایان رساند. +FinishedLabel=نصب کننده، عملیات نصب [name] بر روی کامپیوتر شما را به پایان رساند. اپلیکیشن می‌تواند با انتخاب میانبر های نصب شده اجرا شود. +ClickFinish=برای خروج از نصب کننده بر روی پایان کلیک کنید. +FinishedRestartLabel=برای تکمیل عملیات نصب [name]، نصب کننده باید کامپیوتر شما راه مجدداً راه‌اندازی کند. آیا هم اکنون مایل به ری‌استارت هستید؟ +FinishedRestartMessage=برای تکمیل عملیات نصب [name]، نصب کننده باید کامپیوتر شما را مجدداً راه‌اندازی کند.%n%nآیا هم اکنون مایل به ری‌استارت هستید؟ +ShowReadmeCheck=بله، مایل به مشاهده فایل README هستم. +YesRadio=&بله، اکنون کامپیوتر را دوباره راه‌اندازی کن +NoRadio=&نه، بعداً خودم کامپیوتر را راه‌اندازی مجدد خواهم کرد +; used for example as 'Run MyProg.exe' +RunEntryExec=اجرای %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=مشاهده %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=نصب کننده به دیسک بعدی نیاز دارد +SelectDiskLabel2=لطفاً دیسک %1 را وارد کرده و بر روی تایید کلیک کنید.%n%nدر صورتی که فایل های روی این دیسک در پوشه‌ای غیر از پوشه نمایش داده شده قابل پیدا شدن است، مسیر صحیح را وارد کرده و یا بر روی مرور کلیک کنید. +PathLabel=&مسیر: +FileNotInDir2=فایل "%1" در مسیر "%2" پیدا نشد. لطفاً دیسک صحیح را وارد کرده و یا یک پوشه دیگر را انتخاب کنید. +SelectDirectoryLabel=لطفاً آدرس دیسک بعدی را تعیین کنید. + +; *** Installation phase messages +SetupAborted=نصب کننده تکمیل نشد.%n%nلطفاً مشکل را برطرف کرده و سپس نصب کننده را مجدداً اجرا کنید. +AbortRetryIgnoreSelectAction=انتخاب عمل +AbortRetryIgnoreRetry=&تلاش مجدد +AbortRetryIgnoreIgnore=&صرف نظر از خطا و ادامه +AbortRetryIgnoreCancel=انصراف از عملیات نصب + +; *** Installation status messages +StatusClosingApplications=درحال بستن اپلیکیشن ها... +StatusCreateDirs=ایجاد پوشه ها... +StatusExtractFiles=استخراج فایل ها... +StatusCreateIcons=ایجاد میانبر ها... +StatusCreateIniEntries=ایجاد ورودی های INI... +StatusCreateRegistryEntries=ایجاد ورودی های ریجستری... +StatusRegisterFiles=در حال ریجستر فایل ها... +StatusSavingUninstall=در حال ذخیره اطلاعات حذف کننده... +StatusRunProgram=در حال پایان نصب... +StatusRestartingApplications=در حال راه‌اندازی مجدد اپلیکیشن ها... +StatusRollback=درحال بازگردانی تغییرات... + +; *** Misc. errors +ErrorInternal2=خطای داخلی: %1 +ErrorFunctionFailedNoCode=%1 ناموفق +ErrorFunctionFailed=%1 ناموفق؛ کد %2 +ErrorFunctionFailedWithMessage=%1 ناموفق؛ کد %2.%n%3 +ErrorExecutingProgram=خطا در اجرای فایل:%n%1 + +; *** Registry errors +ErrorRegOpenKey=خطا در بازکردن کلید ریجستری:%n%1\%2 +ErrorRegCreateKey=خطا در ایجاد کلید ریجستری:%n%1\%2 +ErrorRegWriteKey=خطا در نوشتن در کلید ریجستری:%n%1\%2 + +; *** INI errors +ErrorIniEntry=خطا در ایجاد ورودی INI در فایل "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&پرش از این فایل (پیشنهاد نمی‌شود) +FileAbortRetryIgnoreIgnoreNotRecommended=&نادیده گرفتن خطا و ادامه (پیشنهاد نمی‌شود) +SourceIsCorrupted=فایل منبع آسیب دیده است +SourceDoesntExist=فایل منبع "%1" وجود ندارد +ExistingFileReadOnly2=فایل موجود بدلیل فقط-خواندنی بودن قابل جایگزینی نیست. +ExistingFileReadOnlyRetry=&حذف خصوصیت فقط-خواندنی و تلاش مجدد +ExistingFileReadOnlyKeepExisting=&نگه داشتن فایل موجود +ErrorReadingExistingDest=در هنگام تلاش برای خواندن فایل موجود خطایی رخ داده است: +FileExistsSelectAction=انتخاب عمل +FileExists2=فایل از قبل وجود دارد. +FileExistsOverwriteExisting=&بازنویسی فایل موجود +FileExistsKeepExisting=&نگه‌داشتن فایل موجود +FileExistsOverwriteOrKeepAll=&این کار را برای تداخل های بعد انجام بده +ExistingFileNewerSelectAction=انتخاب عمل +ExistingFileNewer2=فایل موجود از فایلی که نصب کننده در تلاش برای نصب آن است جدیدتر است. +ExistingFileNewerOverwriteExisting=&بازنویسی فایل موجود +ExistingFileNewerKeepExisting=&نگه داشتن فایل موجود (پیشنهاد می‌شود) +ExistingFileNewerOverwriteOrKeepAll=&این کار را برای تداخل های بعدی انجام بده +ErrorChangingAttr=در هنگام تلاش برای تغییر خصوصیت فایل موجود خطایی رخ داده است: +ErrorCreatingTemp=در هنگام تلاش برای ایجاد یک فایل در پوشه مقصد خطایی رخ داده است: +ErrorReadingSource=در هنگام تلاش برای خواندن فایل مبداء خطایی رخ داده است: +ErrorCopying=در هنگام تلاش برای کپی فایل خطایی رخ داده است: +ErrorReplacingExistingFile=در هنگام تلاش برای جایگزینی فایل موجود خطایی رخ داده است: +ErrorRestartReplace=RestartReplace ناموفق بود: +ErrorRenamingTemp=در هنگام تلاش برای تغییر نام یک فایل در پوشه مقصد خطایی رخ داده است: +ErrorRegisterServer=خطا در ریجستر DLL/OCX برای: %1 +ErrorRegSvr32Failed=RegSvr32 با کد خطای ناموفق بود %1 +ErrorRegisterTypeLib=قادر به ریجستر کتابخانه نوع نبود: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2، %3) +UninstallDisplayNameMark32Bit=32-بیت +UninstallDisplayNameMark64Bit=64-بیت +UninstallDisplayNameMarkAllUsers=تمامی کاربران +UninstallDisplayNameMarkCurrentUser=کاربر فعلی + +; *** Post-installation errors +ErrorOpeningReadme=در هنگام تلاش برای بازکردن فایل README خطایی رخ داده است. +ErrorRestartingComputer=نصب کننده قادر به راه‌اندازی مجدد کامپیوتر نبود. لطفاً به صورت دستی ری‌استارت کنید. + +; *** Uninstaller messages +UninstallNotFound=فایل "%1" وجود ندارد. حذف امکان پذیر نیست. +UninstallOpenError=امکان باز کردن فایل"%1" وجود ندارد. حذف امکان پذیر نیست +UninstallUnsupportedVer=فایل لاگ حذف کننده "%1" در فرمتی قرار دارد که توسط این نسخه از حذف کننده قابل شناسایی نیست. حذف امکان پذیر نیست +UninstallUnknownEntry=با یک ورودی ناشناخته (%1) در فایل لاگ حذف مواجه شده است +ConfirmUninstall=آیا از حذف %1 و تمام اجزای آن اطمینان دارید؟ +UninstallOnlyOnWin64=این برنامه نصب شده تنها در ویندوز 64-بیت قابل حذف است. +OnlyAdminCanUninstall=این برنامه نصب شده، تنها توسط یک کاربر با دسترسی مدیر قابل حذف است. +UninstallStatusLabel=لطفاً تا زمان حذف %1 از کامپیوتر شما صبر کنید. +UninstalledAll=%1 با موفقیت از روی کامپیوتر شما حذف شد. +UninstalledMost=%1 حذف تکمیل شد.%n%nبرخی از اجزاء را نمی‌توان حذف کرد. این موارد به صورت جداگانه قابل حذف هستند. +UninstalledAndNeedsRestart=برای تکمیل حذف %1 کامپیوتر شما باید مجدداً راه‌اندازی شود.%n%nآیا مایل هستید هم‌اکنون ری‌استارت شود؟ +UninstallDataCorrupted="%1" فایل ناقص است. حذف امکان پذیر نیست + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=حذف فایل اشتراکی؟ +ConfirmDeleteSharedFile2=سیستم نشان می‌دهد که فایل اشتراکی زیر دیگر توسط هیچ برنامه دیگری در حال استفاده نیست. آیا مایل هستید که حذف کننده این فایل اشتراکی را حذف کند؟?%n%nاگر برنامه‌هایی هنوز از این فایل استفاده می‌کنند، با حذف این فایل این برنامه‌ها ممکن است به درستی کار نکنند. اگر مطمئن نیستید، خیر را انتخاب کنید. نگه‌داشتن فایل بر روی سیستم شما هیچ آسیبی نمی‌رساند. +SharedFileNameLabel=نام فایل: +SharedFileLocationLabel=محل فایل: +WizardUninstalling=وضعیت حذف +StatusUninstalling=در حال حذف %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=در حال نصب %1. +ShutdownBlockReasonUninstallingApp=در حال حذف %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 نسخه %2 +AdditionalIcons=میانبر های جانبی: +CreateDesktopIcon=ایجاد &میانبر روی دسکتاپ +CreateQuickLaunchIcon=ایجاد یک میانبر اجرای &سریع +ProgramOnTheWeb=%1 بر روی وب +UninstallProgram=حذف %1 +LaunchProgram=اجرای %1 +AssocFileExtension=&اختصاص دادن %1 با پسوند فایل %2 +AssocingFileExtension=در حال اختصاص %1 با پسوند فایل %2... +AutoStartProgramGroupDescription=شروع همراه با ویندوز: +AutoStartProgram=شروع خودکار %1 +AddonHostProgramNotFound=%1 در پوشه انتخاب شده یافت نشد.%n%nآیا بهرحال مایل به ادامه هستید؟ \ No newline at end of file diff --git a/Files/Languages/Unofficial/Galician.isl b/Files/Languages/Unofficial/Galician.isl new file mode 100644 index 00000000..5d7bfeb9 --- /dev/null +++ b/Files/Languages/Unofficial/Galician.isl @@ -0,0 +1,360 @@ +; *** Inno Setup version 6.1.0+ Galician messages *** +; +; Maintained by: Julio Mojon Fuentes +; (juliomf AT edu.xunta.gal) +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ + +[LangOptions] +LanguageName=Galego +LanguageID=$0456 +LanguageCodePage=1252 + +[Messages] +; *** Application titles +SetupAppTitle=Instalar +SetupWindowTitle=Instalar %1 +UninstallAppTitle=Desinstalar +UninstallAppFullTitle=Desinstalar %1 + +; *** Misc. common +InformationTitle=Información +ConfirmTitle=Confirmar +ErrorTitle=Erro + +; *** SetupLdr messages +SetupLdrStartupMessage=Isto vai instalar %1. Desexa continuar? +LdrCannotCreateTemp=Non foi posible crear un arquivo temporal. Instalación cancelada +LdrCannotExecTemp=Non foi posible executar un arquivo no cartafol temporal. Instalación cancelada +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nErro %2: %3 +SetupFileMissing=Non se atopa o arquivo %1 no cartafol de instalación. Por favor, corrixa o problema ou consiga unha nova copia do programa. +SetupFileCorrupt=Os arquivos de instalación están corruptos. Por favor, consiga unha nova copia do programa. +SetupFileCorruptOrWrongVer=Os arquivos de instalación están corruptos, ou son incompatibles con esta versión do asistente de instalación. Por favor, corrixa o problema ou consiga unha nova copia do programa. +InvalidParameter=Un parámetro no válido foi pasado na liña de comando:%n%n%1 +SetupAlreadyRunning=O asistente de instalación xa está en execución. +WindowsVersionNotSupported=Este programa non é compatible coa versión de Windows que corre no seu equipo. +WindowsServicePackRequired=Este programa require %1 Service Pack %2 ou posterior. +NotOnThisPlatform=Este programa non se pode executar en %1. +OnlyOnThisPlatform=Este programa debe executarse en %1. +OnlyOnTheseArchitectures=Este programa só pode ser instalado en versións de Windows deseñadas para as seguintes arquitecturas de procesador:%n%n%1 +WinVersionTooLowError=Este programa require %1, versión %2 ou posterior. +WinVersionTooHighError=Este programa non pode ser instalado en %1, versión %2 ou posterior. +AdminPrivilegesRequired=Debe iniciar sesión como administrador para instalar este programa. +PowerUserPrivilegesRequired=Debe iniciar sesión como administrador ou como membro do grupo de Usuarios Avanzados para instalar este programa. +SetupAppRunningError=O asistente de instalación detectou que %1 está en execución.%n%nPor favor, peche agora todas as súas copias e prema Aceptar para continuar, ou Cancelar para saír. +UninstallAppRunningError=O asistente de desinstalación detectou que %1 está en execución.%n%nPor favor, peche agora todas as súas copias e prema Aceptar para continuar, ou Cancelar para saír. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Selección do modo de instalación +PrivilegesRequiredOverrideInstruction=Seleccione o modo de instalación +PrivilegesRequiredOverrideText1=%1 pode instalarse para todos os usuarios (require privilexios administrativos), ou só para vostede. +PrivilegesRequiredOverrideText2=%1 pode instalarse só para vostede, ou para todos os usuarios (require privilexios administrativos). +PrivilegesRequiredOverrideAllUsers=Instalar para &todos os usuarios +PrivilegesRequiredOverrideAllUsersRecommended=Instalar para &todos os usuarios (recomendado) +PrivilegesRequiredOverrideCurrentUser=Instalar só para &min +PrivilegesRequiredOverrideCurrentUserRecommended=Instalar só para &min (recomendado) + +; *** Misc. errors +ErrorCreatingDir=O asistente de instalación non puido crear o cartafol "%1" +ErrorTooManyFilesInDir=Non se puido crear un arquivo no cartafol "%1" porque contén demasiados arquivos + +; *** Setup common messages +ExitSetupTitle=Saír da instalación +ExitSetupMessage=A instalación non está completa. Se sae agora, o programa non se instalará.%n%nPode executar de novo o asistente de instalación noutro momento para completar a instalación.%n%nSaír da instalación? +AboutSetupMenuItem=&Acerca do asistente de instalación... +AboutSetupTitle=Acerca do asistente de instalación +AboutSetupMessage=%1, versión %2%n%3%n%nPáxina de inicio de %1:%n%4 +AboutSetupNote= +TranslatorNote=Galician translation mantained by Julio Mojón Fuentes (juliomf AT edu.xunta.gal) + +; *** Buttons +ButtonBack=< &Anterior +ButtonNext=&Seguinte > +ButtonInstall=&Instalar +ButtonOK=Aceptar +ButtonCancel=Cancelar +ButtonYes=&Si +ButtonYesToAll=Si a &todo +ButtonNo=&Non +ButtonNoToAll=N&on a todo +ButtonFinish=&Finalizar +ButtonBrowse=&Examinar... +ButtonWizardBrowse=E&xaminar... +ButtonNewFolder=&Crear novo cartafol + +; *** "Select Language" dialog messages +SelectLanguageTitle=Seleccione a lingua de instalación +SelectLanguageLabel=Seleccione a lingua para usar durante a instalación. + +; *** Common wizard text +ClickNext=Prema Seguinte para continuar, ou Cancelar para saír da instalación. +BeveledLabel= +BrowseDialogTitle=Examinar cartafol +BrowseDialogLabel=Seleccione un cartafol na lista inferior e prema Aceptar. +NewFolderName=Novo cartafol + +; *** "Welcome" wizard page +WelcomeLabel1=Benvido ao asistente de instalación de [name] +WelcomeLabel2=Isto vai instalar [name/ver] no seu computador.%n%nRecoméndaselle que peche todas as outras aplicacións antes de continuar. + +; *** "Password" wizard page +WizardPassword=Contrasinal +PasswordLabel1=Esta instalación está protexida por contrasinal. +PasswordLabel3=Por favor, introduza o contrasinal e prema Seguinte para continuar. Os contrasinais diferencian entre maiúsculas e minúsculas. +PasswordEditLabel=&Contrasinal: +IncorrectPassword=O contrasinal que introduciu non é correcto. Por favor, ténteo de novo. + +; *** "License Agreement" wizard page +WizardLicense=Acordo de licenza +LicenseLabel=Por favor, lea a seguinte información importante antes de continuar. +LicenseLabel3=Por favor, lea o seguinte acordo de licenza. Debe aceptar os termos deste acordo antes de continuar coa instalación. +LicenseAccepted=&Acepto o acordo +LicenseNotAccepted=&Non acepto o acordo + +; *** "Information" wizard pages +WizardInfoBefore=Información +InfoBeforeLabel=Por favor, lea a seguinte información importante antes de continuar. +InfoBeforeClickLabel=Cando estea preparado para continuar coa instalación, prema Seguinte. +WizardInfoAfter=Información +InfoAfterLabel=Por favor, lea a seguinte información importante antes de continuar. +InfoAfterClickLabel=Cando estea preparado para continuar coa instalación, prema Seguinte. + +; *** "User Information" wizard page +WizardUserInfo=Información de usuario +UserInfoDesc=Por favor, introduza os seus datos. +UserInfoName=Nome de &usuario: +UserInfoOrg=&Organización: +UserInfoSerial=Número de &serie: +UserInfoNameRequired=Debe introducir un nome. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Selección da localización de destino +SelectDirDesc=Onde debería instalarse [name]? +SelectDirLabel3=O asistente de instalación vai instalar [name] no seguinte cartafol. +SelectDirBrowseLabel=Para continuar, prema Seguinte. Se desexa seleccionar un cartafol diferente, prema Examinar. +DiskSpaceGBLabel=Cómpren polo menos [gb] GB de espazo libre en disco. +DiskSpaceMBLabel=Cómpren polo menos [mb] MB de espazo libre en disco. +CannotInstallToNetworkDrive=O asistente de instalación non pode instalar nunha unidade de rede. +CannotInstallToUNCPath=O asistente de instalación non pode instalar nunha ruta UNC. +InvalidPath=Debe introducir unha ruta completa con letra de unidade; por exemplo:%n%nC:\APP%n%nou unha ruta UNC na forma:%n%n\\server\share +InvalidDrive=A unidade ou ruta UNC compartida que seleccionou non existe ou non é accesible. Por favor, seleccione outra. +DiskSpaceWarningTitle=Sen espazo en disco suficiente +DiskSpaceWarning=Ao asistente de instalación cómprelle polo menos %1 KB de espazo libre para instalar, pero a unidade seleccionada só ten %2 KB dispoñibles.%n%nDesexa continuar de todas formas? +DirNameTooLong=O nome ou a ruta do cartafol é longa de máis. +InvalidDirName=O nome do cartafol non é válido. +BadDirName32=Os nomes de cartafol non poden incluír ningún dos seguintes caracteres:%n%n%1 +DirExistsTitle=O cartafol existe +DirExists=Xa existe o cartafol:%n%n%1%n%nDesexa instalar nese cartafol de todas formas? +DirDoesntExistTitle=O cartafol non existe +DirDoesntExist=Non existe o cartafol:%n%n%1%n%nDesexa crear o cartafol? + +; *** "Select Components" wizard page +WizardSelectComponents=Selección de compoñentes +SelectComponentsDesc=Que compoñentes deberían ser instalados? +SelectComponentsLabel2=Seleccione os compoñentes que desexa instalar; quite a selección aos compoñentes que non desexa instalar. Prema Seguinte cando estea preparado para continuar. +FullInstallation=Instalación completa +CompactInstallation=Instalación compacta +CustomInstallation=Instalación personalizada +NoUninstallWarningTitle=Os compoñentes existen +NoUninstallWarning=O asistente de instalación detectou que os seguintes compoñentes xa están instalados no seu computador:%n%n%1%n%nQuitarlles a selección a estes compoñentes non os desinstalará.%n%nDesexa continuar de todas formas? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=A selección actual require polo menos [gb] GB de espazo en disco. +ComponentsDiskSpaceMBLabel=A selección actual require polo menos [mb] MB de espazo en disco. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Selección de tarefas adicionais +SelectTasksDesc=Que tarefas adicionais deben realizarse? +SelectTasksLabel2=Seleccione as tarefas adicionais que desexa que realice o asistente de instalación mentres instala [name], e prema Seguinte. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Selección do cartafol do Menú Inicio +SelectStartMenuFolderDesc=Onde debería colocar o asistente de instalación os atallos do programa? +SelectStartMenuFolderLabel3=O asistente de instalación vai crear os atallos do programa no seguinte cartafol do Menú Inicio. +SelectStartMenuFolderBrowseLabel=Para continuar, prema Seguinte. Se desexa seleccionar un cartafol diferente, prema Examinar. +MustEnterGroupName=Debe introducir un nome de cartafol. +GroupNameTooLong=O nome ou a ruta do cartafol é longo de máis. +InvalidGroupName=O nome do cartafol non é válido. +BadGroupName=O nome do cartafol non pode incluír ningún dos seguintes caracteres:%n%n%1 +NoProgramGroupCheck2=&Non crear un cartafol do Menú Inicio + +; *** "Ready to Install" wizard page +WizardReady=Preparado para instalar +ReadyLabel1=O asistente de instalación está preparado agora para comezar a instalar [name] no seu computador. +ReadyLabel2a=Prema Instalar para continuar coa instalación, ou prema Atrás se desexa revisar ou mudar calquera configuración. +ReadyLabel2b=Prema Instalar para continuar coa instalación. +ReadyMemoUserInfo=Información do usuario: +ReadyMemoDir=Localización do destino: +ReadyMemoType=Tipo de instalación: +ReadyMemoComponents=Compoñentes seleccionados: +ReadyMemoGroup=Cartafol do Menú Inicio: +ReadyMemoTasks=Tarefas adicionais: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=A descargar arquivos adicionais... +ButtonStopDownload=&Deter descarga +StopDownload=Está seguro de que desexa deter a descarga? +ErrorDownloadAborted=Descarga cancelada +ErrorDownloadFailed=A descarga fallou: %1 %2 +ErrorDownloadSizeFailed=Non se puido determinar o tamaño: %1 %2 +ErrorFileHash1=Non se puido calcular o hash do arquivo: %1 +ErrorFileHash2=Hash do arquivo inválido: esperado %1, atopado %2 +ErrorProgress=Progreso inválido: %1 de %2 +ErrorFileSize=Tamaño de arquivo inválido: esperado %1, atopado %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=A prepararse para instalar +PreparingDesc=O asistente de instalación está a prepararse para instalar [name] no seu computador. +PreviousInstallNotCompleted=A instalación ou desinstalación dun programa anterior non está completa. Cómpre que reinicie o seu computador para completar esa instalación.%n%nDespois de reiniciar o seu computador, execute o asistente de instalación de novo para completar a instalación de [name]. +CannotContinue=O asistente de instalación non pode continuar. Por favor, prema Cancelar para saír. +ApplicationsFound=As seguintes aplicacións están a utilizar arquivos que o asistente de instalación necesita actualizar. Recoméndaselle que permita que o asistente de instalación peche automaticamente esas aplicacións. +ApplicationsFound2=As seguintes aplicacións están a utilizar arquivos que o asistente de instalación necesita actualizar. Recoméndaselle que permita que o asistente de instalación peche automaticamente esas aplicacións. Cando a instalación estea completa, o asistente de instalación tentará reiniciar as aplicacións. +CloseApplications=Pechar &automaticamente as aplicacións +DontCloseApplications=Non &pechar as aplicacións +ErrorCloseApplications=O asistente de instalación non puido pechar automaticamente todas as aplicacións. Antes de continuar, recoméndaselle que peche todas as aplicacións que utilizan arquivos que o asistente de instalación necesita actualizar. +PrepareToInstallNeedsRestart=O asistente de instalación debe reiniciar o seu computador. Despois de reinicialo, execute o asistente de instalación de novo para completar a instalación de [name].%n%nDesexa reinicialo agora? + +; *** "Installing" wizard page +WizardInstalling=A instalar +InstallingLabel=Por favor, espere mentres o asistente de instalación instala [name] no seu computador. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=A completar o asistente de instalación de [name] +FinishedLabelNoIcons=O asistente de instalación terminou de instalar [name] no seu computador. +FinishedLabel=O asistente de instalación terminou de instalar [name] no seu computador. Pode executar a aplicación seleccionando os atallos instalados. +ClickFinish=Prema Finalizar para saír do asistente de instalación. +FinishedRestartLabel=Para completar a instalación de [name], o asistente de instalación debe reiniciar o seu computador. Desexa reinicialo agora? +FinishedRestartMessage=Para completar a instalación de [name], o asistente de instalación debe reiniciar o seu computador.%n%nWDesexa reinicialo agora? +ShowReadmeCheck=Si, desexo ver o arquivo LÉAME +YesRadio=&Si, reiniciar agora o computador +NoRadio=&Non, reiniciarei o computador máis tarde +RunEntryExec=Executar %1 +RunEntryShellExec=Ver %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Ao asistente de instalación cómprelle o seguinte disco +SelectDiskLabel2=Por favor, insira o disco %1 e prema Aceptar.%n%nSe os arquivos deste disco se poden atopar noutro cartafol diferente ao mostrado abaixo, introduza a ruta correcta ou prema Examinar. +PathLabel=&Ruta: +FileNotInDir2=Non se puido atopar o arquivo "%1" en "%2". Por favor, insira o disco correcto ou seleccione outro cartafol. +SelectDirectoryLabel=Por favor, especifique a localización do seguinte disco. + +; *** Installation phase messages +SetupAborted=A instalación non se completou.%n%nPor favor, corrixa o problema e execute o asistente de instalación de novo. +AbortRetryIgnoreSelectAction=Seleccione acción +AbortRetryIgnoreRetry=&Tentar de novo +AbortRetryIgnoreIgnore=&Ignorar o erro e continuar +AbortRetryIgnoreCancel=Cancelar a instalación + +; *** Installation status messages +StatusClosingApplications=A pechar aplicacións... +StatusCreateDirs=A crear cartafoles... +StatusExtractFiles=A extraer arquivos... +StatusCreateIcons=A crear atallos... +StatusCreateIniEntries=A crear entradas INI... +StatusCreateRegistryEntries=A crear entradas do rexistro... +StatusRegisterFiles=A rexistrar arquivos... +StatusSavingUninstall=Gardando información de desinstalación... +StatusRunProgram=A terminar a instalación... +StatusRestartingApplications=A reiniciar aplicacións... +StatusRollback=A desfacer cambios... + +; *** Misc. errors +ErrorInternal2=Erro interno: %1 +ErrorFunctionFailedNoCode=%1 fallou +ErrorFunctionFailed=%1 fallou; código %2 +ErrorFunctionFailedWithMessage=%1 fallou; código %2.%n%3 +ErrorExecutingProgram=Non foi posible executar o arquivo:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Erro ao abrir a chave do rexistro:%n%1\%2 +ErrorRegCreateKey=Erro ao crear a chave do rexistro:%n%1\%2 +ErrorRegWriteKey=Erro ao escribir na chave do rexistro:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Erro ao crear a entrada INI no arquivo "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Saltar este arquivo (non recomendado) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorar o erro e continuar (non recomendado) +SourceIsCorrupted=O arquivo orixe está corrupto +SourceDoesntExist=O arquivo orixe "%1" non existe +ExistingFileReadOnly2=Non foi posible substituír o arquivo existente porque está marcado como de só lectura. +ExistingFileReadOnlyRetry=&Eliminar o atributo de só lectura e tentar de novo +ExistingFileReadOnlyKeepExisting=&Manter o arquivo existente +ErrorReadingExistingDest=Ocorreu un erro ao tentar ler o arquivo existente: +FileExistsSelectAction=Seleccionar acción +FileExists2=O arquivo xa existe. +FileExistsOverwriteExisting=&Sobrescribir o arquivo existente +FileExistsKeepExisting=&Manter o arquivo existente +FileExistsOverwriteOrKeepAll=&Facer isto para os seguintes conflitos +ExistingFileNewerSelectAction=Seleccionar acción +ExistingFileNewer2=O arquivo existente é máis novo ca o que o asistente de instalación tenta instalar. +ExistingFileNewerOverwriteExisting=&Sobrescribir o arquivo existente +ExistingFileNewerKeepExisting=&Manter o arquivo existente (recomendado) +ExistingFileNewerOverwriteOrKeepAll=&Facer isto para os seguintes conflitos +ErrorChangingAttr=Ocorreu un erro ao tentar mudar os atributos do arquivo existente: +ErrorCreatingTemp=Ocorreu un erro ao tentar crear un arquivo no cartafol de destino: +ErrorReadingSource=Ocorreu un erro ao tentar ler o arquivo orixe: +ErrorCopying=Ocorreu un erro ao tentar copiar un arquivo: +ErrorReplacingExistingFile=Ocorreu un erro ao tentar substituír o arquivo existente: +ErrorRestartReplace=RestartReplace fallou: +ErrorRenamingTemp=Ocorreu un erro ao tentar renomear un arquivo no cartafol de destino: +ErrorRegisterServer=Non foi posible rexistrar a DLL ou OCX: %1 +ErrorRegSvr32Failed=RegSvr32 fallou co código de saída %1 +ErrorRegisterTypeLib=Non foi posible rexistrar a biblioteca de tipos: %1 + +; *** Uninstall display name markings +UninstallDisplayNameMark=%1 (%2) +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32 bits +UninstallDisplayNameMark64Bit=64 bits +UninstallDisplayNameMarkAllUsers=Todos os usuarios +UninstallDisplayNameMarkCurrentUser=Usuario actual + +; *** Post-installation errors +ErrorOpeningReadme=Ocorreu un erro ao tentar abrir o arquivo LÉAME. +ErrorRestartingComputer=O asistente de instalación non puido reiniciar o computador. Por favor, fágao manualmente. + +; *** Uninstaller messages +UninstallNotFound=O arquivo "%1" non existe. Non se pode desinstalar. +UninstallOpenError=Non se puido abrir o arquivo "%1". Non se pode desinstalar +UninstallUnsupportedVer=O arquivo de rexistro "%1" está nun formato non recoñecido por esta versión do asistente de desinstalación. Non se pode desinstalar +UninstallUnknownEntry=Atopouse unha entrada descoñecida (%1) no arquivo de rexistro da desinstalación +ConfirmUninstall=Está seguro de que desexa eliminar por completo %1 e todos os seus compoñentes? +UninstallOnlyOnWin64=Esta instalación só se pode desinstalar nun Windows de 64 bits. +OnlyAdminCanUninstall=Só un usuario con privilexios administrativos pode desinstalar esta instalación. +UninstallStatusLabel=Por favor, espere mentres se elimina %1 do seu computador. +UninstalledAll=Eliminouse %1 con éxito do seu computador. +UninstalledMost=Desinstalación de %1 completa.%n%nNon foi posible eliminar algúns elementos. Pode eliminalos manualmente. +UninstalledAndNeedsRestart=Para completar a desinstalación de %1, debe reiniciar o seu computador.%n%nDesexa reinicialo agora? +UninstallDataCorrupted=O arquivo "%1" está corrupto. Non se pode desinstalar + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Eliminar arquivo compartido? +ConfirmDeleteSharedFile2=O sistema indica que o seguinte arquivo compartido xa non é usado por ningún programa. Quere que o programa de desinstalación elimine este arquivo compartido?%n%nSe calquera programa aínda usa este arquivo e é eliminado, ese programa podería funcionar incorrectamente. Se non está certo, seleccione Non. Manter o arquivo no seu sistema non lle causará ningún problema. +SharedFileNameLabel=Nome do arquivo: +SharedFileLocationLabel=Localización: +WizardUninstalling=Estado da instalación +StatusUninstalling=A desinstalar %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=A instalar %1. +ShutdownBlockReasonUninstallingApp=A desinstalar %1. + +[CustomMessages] +NameAndVersion=%1 versión %2 +AdditionalIcons=Atallos adicionais: +CreateDesktopIcon=Crear un atallo no &Escritorio +CreateQuickLaunchIcon=Crear un atallo en &Inicio rápido +ProgramOnTheWeb=%1 na web +UninstallProgram=Desinstalar %1 +LaunchProgram=Executar %1 +AssocFileExtension=&Asociar %1 coa extensión de arquivo %2 +AssocingFileExtension=A asociar %1 coa %2 extensión de arquivo... +AutoStartProgramGroupDescription=Inicio: +AutoStartProgram=Iniciar %1 automaticamente +AddonHostProgramNotFound=Non se puido localizar %1 no cartafol que seleccionou.%n%nDesexa continuar de todas formas? diff --git a/Files/Languages/Unofficial/Georgian.isl b/Files/Languages/Unofficial/Georgian.isl new file mode 100644 index 00000000..fa9a4cac --- /dev/null +++ b/Files/Languages/Unofficial/Georgian.isl @@ -0,0 +1,384 @@ +; *** Inno Setup version 6.1.0+ Georgian *** +; Translated by Saba Khmaladze (skhmaladze@uglt.org) +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Georgian +LanguageID=$0437 +LanguageCodePage=0 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +DialogFontName=Sylfaen +;DialogFontSize=8 +WelcomeFontName=Sylfaen +;WelcomeFontSize=12 +TitleFontName=Sylfaen +;TitleFontSize=29 +CopyrightFontName=Sylfaen +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=ინსტალაცია +SetupWindowTitle=ინსტალდება - %1 +UninstallAppTitle=წაშლა +UninstallAppFullTitle=იშლება %1 + +; *** Misc. common +InformationTitle=ინფორმაცია +ConfirmTitle=დაზუსტება +ErrorTitle=შეცდომა + +; *** SetupLdr messages +SetupLdrStartupMessage=თქვენთან დაინსტალდება %1. გსურთ გაგრძელება? +LdrCannotCreateTemp=დროებითი ფაილი ვერ შეიქმნა. ინსტალაცია შეწყდა +LdrCannotExecTemp=დროებით საქაღალდეში ფაილი ვერ გაეშვა. ინსტალაცია შეწყდა +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nშეცდომა %2: %3 +SetupFileMissing=საინსტალაციო საქაღალდეში არ მოიძებნა ფაილი %1. გაასწორეთ პრობლემა ან გადმოწერეთ პროგრამის ახალი ვერსია. +SetupFileCorrupt=საინსტალაციო ფაილები დაზიანებულია. გაასწორეთ პრობლემა ან გადმოწერეთ პროგრამის ახალი ვერსია. +SetupFileCorruptOrWrongVer=საინსტალაციო ფაილები დაზიანებული ან არათავსებადია ამ ვერსიასთან. გაასწორეთ პრობლემა ან გადმოწერეთ პროგრამის ახალი ვერსია. +InvalidParameter=არასწორი პარამეტრი გადაეცა ბრძანებათა ველს:%n%n%1 +SetupAlreadyRunning=ინსტალაცია უკვე მიმდინარეობს. +WindowsVersionNotSupported=ეს პროგრამა Windows-ის ამ ვერსიაზე ვერ გაეშვება. +WindowsServicePackRequired=ამ პროგრამას სჭირდება %1 Service Pack %2 ან უფრო ახალი. +NotOnThisPlatform=ეს პროგრამა არ გაეშვება სისტემაზე %1. +OnlyOnThisPlatform=ეს პროგრამა უნდა გაეშვას სისტემაზე %1. +OnlyOnTheseArchitectures=ეს პროგრამა დაინსტალდება მხოლოდ Windows-ის შემდეგ არქიტექტურაზე:%n%n%1 +WinVersionTooLowError=ამ პროგრამას სჭირდება %1 ვერსია %2 ან უფრო ახალი. +WinVersionTooHighError=ეს პროგრამა ვერ დაინსტალდება %1 ვერსია %2-ზე ან უფრო ახალზე. +AdminPrivilegesRequired=ამ პროგრამის დასაინსტალებლად საჭიროა ადმინისტრატორის ანგარიში. +PowerUserPrivilegesRequired=ამ პროგრამის დასაინსტალებლად საჭიროა ადმინისტრატორის ან მძლავრი იუზერის (Power User) ანგარიში. +SetupAppRunningError=საინსტალაციომ დაადგინა რომ გაშვებულია %1.%n%nგთხოვთ დახურეთ გაშვებული პროცესები, გასაგრძელებლად დააჭირეთ ღილაკს კარგი ან გამოსასვლელად ღილაკს გაუქმება. +UninstallAppRunningError=ამომშლელმა დაადგინა რომ გაშვებულია %1.%n%nგთხოვთ დახურეთ გაშვებული პროცესები, გასაგრძელებლად დააჭირეთ ღილაკს კარგი ან გამოსასვლელად ღილაკს გაუქმება. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=აირჩიეთ ინსტალაციის რეჟიმი +PrivilegesRequiredOverrideInstruction=აირჩიეთ ინსტალაციის რეჟიმი +PrivilegesRequiredOverrideText1=%1 შეიძლება დაინსტალდეს ყველასთვის (საჭიროა ადმინისტრატორის უფლება) ან მხოლოდ თქვენთვის. +PrivilegesRequiredOverrideText2=%1 შეიძლება დაინსტალდეს მხოლოდ თქვენთვის ან ყველასთვის (საჭიროა ადმინისტრატორის უფლება). +PrivilegesRequiredOverrideAllUsers=დაინსტალება ყველა მომხმარებლისტვის +PrivilegesRequiredOverrideAllUsersRecommended=დაინსტალება ყველა მომხმარებლისთვის (რეკომენდებულია) +PrivilegesRequiredOverrideCurrentUser=დაინსტალება მხოლოდ ჩემთვის +PrivilegesRequiredOverrideCurrentUserRecommended=დაინსტალება მხოლოდ ჩემთვის (რეკომენდებულია) + +; *** Misc. errors +ErrorCreatingDir=საინსტალაციომ ვერ შექმნა საქაღალდე "%1" +ErrorTooManyFilesInDir=საქაღალდეში "%1" ვერ შეიქმნა ფაილი, რადგან ის შეიცავს ძალიან ბევრ ფაილს + +; *** Setup common messages +ExitSetupTitle=საინსტალაციოს გათიშვა +ExitSetupMessage=ინსტალაცია არ დასრულებულა, გათიშვის შემთხვევაში პროცესი გაუქმდება.%n%nინსტალაციის დასასრულებლად მოგიწევთ საინსტალაციოს თავიდან გაშვება.%n%nგსურთ გათიშვა? +AboutSetupMenuItem=&ინსტალაციის შეწყვეტა... +AboutSetupTitle=ინსტალაციის შეწყვეტა +AboutSetupMessage=%1 ვერსია %2%n%3%n%n%1 ვებ-გვერდი:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< &უკან +ButtonNext=&შემდეგი > +ButtonInstall=&ინსტალაცია +ButtonOK=კარგი +ButtonCancel=გაუქმება +ButtonYes=&კი +ButtonYesToAll=კი ყველასთვის +ButtonNo=&არა +ButtonNoToAll=არა ყველასთვის +ButtonFinish=&დასრულება +ButtonBrowse=&მითითება... +ButtonWizardBrowse=მ&ითითება... +ButtonNewFolder=&ახალი საქაღალდე + +; *** "Select Language" dialog messages +SelectLanguageTitle=ინსტალაციის ენის არჩევა +SelectLanguageLabel=მიუთითეთ ენა, რომელზეც გაეშვება საინსტალაციო. + +; *** Common wizard text +ClickNext=გასაგრძელებლად დააჭირეთ შემდეგს, გასაუქმებლად გაუქმებას. +BeveledLabel= +BrowseDialogTitle=საქაღალდის მითითება +BrowseDialogLabel=აირჩიეთ საქაღალდე და დააჭირეთ ღილაკს კარგი. +NewFolderName=ახალი საქაღალდე + +; *** "Welcome" wizard page +WelcomeLabel1=მოგესალმებით [name]-(ი)ს საინსტალაციოში +WelcomeLabel2=საინსტალაციო დააინსტალებს [name/ver] კომპიუტერში.%n%nგაგრძელებამდე რეკომენდებულია დახუროთ გახსნილი პროგრამები. + +; *** "Password" wizard page +WizardPassword=პაროლი +PasswordLabel1=საინსტალაციო დაცულია პაროლით. +PasswordLabel3=შეიყვანეთ პაროლი და დააჭირეთ გაგრძელებას. +PasswordEditLabel=&პაროლი: +IncorrectPassword=შეყვანილი პაროლი არასწორია. + +; *** "License Agreement" wizard page +WizardLicense=სალიცენზიო შეთანხმება +LicenseLabel=გაგრძელებამდე ყურადღებით გაეცანით ქვემოთ მოცემულ ინფორმაციას. +LicenseLabel3=ყურადღებით წაიკითხეთ სალიცენზიო შეთანხმება. გაგრძელებისთვის თქვენ უნდა დაეთანხმოთ მას. +LicenseAccepted=ვეთანხმები სალიცენზიო შეთანხმებას +LicenseNotAccepted=არ ვეთანხმები სალიცენზიო შეთანხმებას + +; *** "Information" wizard pages +WizardInfoBefore=ინფორმაცია +InfoBeforeLabel=გაგრძელებამდე გთხოვთ წაიკითხოთ მნიშვნელოვანი ინფორმაცია. +InfoBeforeClickLabel=როცა მზად იქნები დააჭირე შემდეგს. +WizardInfoAfter=ინფორმაცია +InfoAfterLabel=გაგრძელებამდე გთხოვთ წაიკითხოთ მნიშვნელოვანი ინფორმაცია. +InfoAfterClickLabel=როცა მზად იქნები დააჭირე შემდეგს. + +; *** "User Information" wizard page +WizardUserInfo=ინფორმაცია მომხმარებელზე +UserInfoDesc=შეიყვანეთ ინფორმაცია თქვენზე. +UserInfoName=&სახელი: +UserInfoOrg=&ორგანიზაცია: +UserInfoSerial=სერიული &ნომერი: +UserInfoNameRequired=უნდა შეიყვანოთ სახელი. + +; *** "Select Destination Location" wizard page +WizardSelectDir=მიუთითეთ საინსტალაციო საქაღალდე +SelectDirDesc=სად დაინსტალდეს [name]? +SelectDirLabel3=საინსტალაციო დააინსტალებს [name]-(ი)ს მოცემულ საქაღალდეში. +SelectDirBrowseLabel=გასაგრძელებლად დააჭირეთ გაგრძელებას ან თუ გსურთ სხვა საქაღალდის მითითება - მითითებას. +DiskSpaceGBLabel=საჭიროა მინიმუმ [gb] გბ სივრცე. +DiskSpaceMBLabel=საჭიროა მინიმუმ [mb] მბ სივრცე. +CannotInstallToNetworkDrive=ვერ დაინსტალდება ქსელურ მისამართზე. +CannotInstallToUNCPath=ვერ დაინსტალდება UNC მისამართზე. +InvalidPath=უნდა შეიყვანეთ სრული მისამართი, დისკის სახელის ჩათვლით; მაგალითად:%n%nC:\APP%n%nან UNC მისამართი ფორმატში:%n%n\\server\share +InvalidDrive=დისკი ან UNC მისამართი არ არსებობს ან მიუწვდომელია. მიუთითეთ სხვა. +DiskSpaceWarningTitle=არასაკმარისი სივრცე დისკზე +DiskSpaceWarning=დასაინსტალებლად საჭიროა მინიმუმ %1 კბ სივრცე, მაგრამ ხელმისაწვდომია მხოლოდ %2 კბ.%n%nგსურთ გაგრძელება? +DirNameTooLong=საქაღალდის დასახელება ძალიან გრძელია. +InvalidDirName=საქაღალდის დასახელება არასწორია. +BadDirName32=საქაღალდის სახელში არ უნდა იყოს სიმბოლოები:%n%n%1 +DirExistsTitle=საქაღალდე არსებობს +DirExists=საქაღალდე:%n%n%1%n%nუკვე არსებობს. გსურთ მაგ საქაღალდეში დაინსტალება? +DirDoesntExistTitle=საქაღალდე არ არსებობს +DirDoesntExist=საქაღალდე:%n%n%1%n%nარ არსებობს. გსურთ შექმნა? + +; *** "Select Components" wizard page +WizardSelectComponents=აირჩიეთ კომპონენტები +SelectComponentsDesc=რომელი კომპონენტები დაინსტალდეს? +SelectComponentsLabel2=აირჩიეთ რომელი კომპონენტის დაინსტალებაც გსურთ; არ მონიშნოთ ის კომპონენტი რომლის დაინსტალებაც არ გსურთ. როცა მზად იქნებით დააჭირეთ გაგრძელებას. +FullInstallation=სრული ინსტალაცია +CompactInstallation=კომპაქტური ინსტალაცია +CustomInstallation=არჩევითი ინსტალაცია +NoUninstallWarningTitle=კომპონენტები არსებობს +NoUninstallWarning=საინსტალაციომ დაადგინა რომ ზოგიერთი კომპონენტი უკვე დაინსტალებულია:%n%n%1%n%nმათი არ მონიშვნა არ ნიშნავს რომ ისინი წაიშლება.%n%nგსურთ გაგრძელებას? +ComponentSize1=%1 კბ +ComponentSize2=%1 მბ +ComponentsDiskSpaceGBLabel=საჭიროა მინიმუმ [gb] გბ სივრცე. +ComponentsDiskSpaceMBLabel=საჭიროა მინიმუმ [mb] მბ სივრცე. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=მიუთითეთ დამატებითი დავალებები +SelectTasksDesc=რა დამატებითი დავალება შესრულდეს? +SelectTasksLabel2=აირჩიეთ თუ რომელიმე დამატებითი ფუნქციის შესრულება გსურთ [name]-(ი)ს ინსტალაციისას და დააჭირეთ შემდეგს. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=აირჩიეთ გაშვების მენიუს საქაღალდე +SelectStartMenuFolderDesc=სად დაინსტალდეს პროგრამის ხატულები? +SelectStartMenuFolderLabel3=საინსტალაციო პროგრამის ხატულებს გაშვების მენიუსთვის დააინსტალებს ქვემოთ მოცემულ საქაღალდეში. +SelectStartMenuFolderBrowseLabel=გასაგრძელებლად დააჭირეთ შემდეგს ან მიუთითეთ სხვა საქაღალდე. +MustEnterGroupName=ჩაწერეთ საქაღალდის სახელი. +GroupNameTooLong=საქაღალდის სახელი ან მისამართი ძალიან გრძელია. +InvalidGroupName=საქაღალდის სახელი არასწორია. +BadGroupName=სახელში არ უნდა იყოს შემდეგი სიმბოლოები:%n%n%1 +NoProgramGroupCheck2=&არ შეიქმნას საქაღალდე გაშვების მენიუში + +; *** "Ready to Install" wizard page +WizardReady=მზადაა დასაინსტალებლად +ReadyLabel1=საინსტალაციო მზადაა დააინსტალოს [name] თქვენს კომპიუტერში. +ReadyLabel2a=დასაინსტალებლად დააჭირეთ ინსტალაციას ან დაბრუნდით უკან და გადახედეთ პარამეტრებს. +ReadyLabel2b=დასაინსტალებლად დააჭირეთ ინსტალაციას. +ReadyMemoUserInfo=ინფორმაცია მომხმარებელზე: +ReadyMemoDir=ინფორმაცია საქაღალდეზე: +ReadyMemoType=ინსტალაციის სახეობა: +ReadyMemoComponents=არჩეული კომპონენტები: +ReadyMemoGroup=გაშვების მენიუს საქაღალდე: +ReadyMemoTasks=დამატებითი დავალებები: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=იწერება დამატებითი ფაილები... +ButtonStopDownload=&გადმოწერის შეწყვეტა +StopDownload=ნამდვილად გსურთ გადმოწერის შეწყვეტა? +ErrorDownloadAborted=გადმოწერა შეწყდა +ErrorDownloadFailed=არ გადმოიწერა: %1 %2 +ErrorDownloadSizeFailed=ზომის მონაცემები ვერ მივიღეთ: %1 %2 +ErrorFileHash1=ფაილის ჰეში არ ემთხვევა: %1 +ErrorFileHash2=ფაილის ჰეში არასწორია: ველოდებოდით %1, მივიღეთ %2 +ErrorProgress=არასწორი პროცესი: %1 of %2 +ErrorFileSize=ფაილის არასწორი ზომა: ველოდებოდთ %1, მივიღეთ %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=მზადდება დასაინსტალებლად +PreparingDesc=საინსტალაციო ემზადება რომ [name] დააინსტალოს კომპიუტერში. +PreviousInstallNotCompleted=წინა პროგრამის ინსტალაცია/წაშლა არ მოხერხდა. საჭიროა კომპიუტერის გადატვირთვა.%n%nკომპიუტერის გადატვირთვის შემდეგ ხელახლა გაუშვით [name]-(ი)ს საინსტალაციო. +CannotContinue=ინსტალაცია არ გაგრძელდა. გასაუქმებლად დააჭირეთ გაუქმებას. +ApplicationsFound=მოცემული პროგრამები იყენებენ ფაილებს რომელიც საინსტალაციომ უნდა განახლოს. რეკომენდებულია უფლება მისცეთ საინსტალაციოს გათიშოს ეს პროგრამები. +ApplicationsFound2=ოცემული პროგრამები იყენებენ ფაილებს რომელიც საინსტალაციომ უნდა განახლოს. რეკომენდებულია უფლება მისცეთ საინსტალაციოს გათიშოს ეს პროგრამები. ინსტალაციის დასრულების შემდეგ საინსტალაციო შეეცდება ხელახლა ჩართოს ეს პროგრამები. +CloseApplications=&აპლიკაციების ავტომატურად გათიშვა +DontCloseApplications=&არ გაითიშოს აპლიკაციები +ErrorCloseApplications=საინსტალაციომ ავტომატურად ვერ გათიშა ყველა აპლიკაცია. რეკომენდებულია რომ გათიშოთ ყველა აპლიკაცია. +PrepareToInstallNeedsRestart=საინსტალაციომ უნდა გადატვირთოს კომპიუტერი. კომპიუტერის გადატვირთვის შემდეგ ხელახლა გაუშვით საინსტალაციო რათა გაგრძელდეს [name]-(ი)ს ინსტალაცია.%n%nგსურთ ახლა გადატვირთვა? + +; *** "Installing" wizard page +WizardInstalling=ინსტალდება +InstallingLabel=მოითმინეთ სანამ საინსტალაციო დააინსტალებს [name]-(ი)ს კომპიუტერში. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=სრულდება [name]-(ი)ს ინსტალაცია +FinishedLabelNoIcons=საინსტალაციომ დაასრულა [name]-(ი)ს ინსტალაცია კომპიუტერში. +FinishedLabel=საინსტალაციომ დაასრულა [name]-(ი)ს ინსტალაცია კომპიუტერში. პროგრამა გაეშვება შესაბამისი ხატულას მონიშვნის შემთხვევაში. +ClickFinish=საინსტალაციოს გასათიშად დააჭირეთ დასრულებას. +FinishedRestartLabel=[name]-(ი)ს ინსტალაციის დასრულებისთვის საჭიროა კომპიუტეირს გადატვირთვა. გსურთ ახლა გადატვირთვა? +FinishedRestartMessage=[name]-(ი)ს ინსტალაციის დასრულებისთვის საჭიროა კომპიუტეირს გადატვირთვა.%n%nგსურთ ახლა გადატვირთვა? +ShowReadmeCheck=README ფაილის ჩვენება +YesRadio=&კი, გადაიტვირთოს კომპიუტერი +NoRadio=&არა, მოგვიანებით გადავტვირთავ კომპიუტერს +; used for example as 'Run MyProg.exe' +RunEntryExec=გაეშვას %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=%1-(ი)ს ნახვა + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=ინსტალაციისთვის საჭიროა შემდეგი დისკი +SelectDiskLabel2=ჩადეთ დისკი %1 და დააჭირეთ ღილაკს კარგი.%n%nთუ ფაილები არაა ქვემოთ მოცემულ მისამართზე დააჭირეთ მითითებას და მიუთითეთ სწორი მისამართი. +PathLabel=&მისამართი: +FileNotInDir2=ფაილი "%1" არ მოიძებნა "%2" მისამართზე. ჩადეთ სწორი დისკი და ან აირჩიეთ სხვა საქაღალდე. +SelectDirectoryLabel=მიუთითეთ შემდეგი დისკის მდებარეობა. + +; *** Installation phase messages +SetupAborted=ინსტალაცია არ დასრულდა.%n%nგაასწორეთ პრობლემა და გაუშვით ინსტალაცია ხელახლა. +AbortRetryIgnoreSelectAction=აირჩიეთ მოქმედება +AbortRetryIgnoreRetry=&ხელახლა ცდა +AbortRetryIgnoreIgnore=&შეცდომის უგულებელყოფა და გაგრძელება +AbortRetryIgnoreCancel=ინსტალაციის გაუქმება + +; *** Installation status messages +StatusClosingApplications=ითიშება პროგრამები... +StatusCreateDirs=მიმდინარეობს საქაღალდეების შექმნა... +StatusExtractFiles=მიმდინარეობს ფაილების ამოარქივება... +StatusCreateIcons=მიმდინარეობს ხატულების შექმნა... +StatusCreateIniEntries=იქმნება INI ჩანაწერები... +StatusCreateRegistryEntries=იქმნება რეესტრის ჩანაწერები... +StatusRegisterFiles=მიმდინარეობს ფაილების რეგისტრაცია... +StatusSavingUninstall=ინახება წასაშლელი ინფორმაცია... +StatusRunProgram=სრულდება ინსტალაცია... +StatusRestartingApplications=იტვირთება პროგრამები... +StatusRollback=უქმდება ცვლილებები... + +; *** Misc. errors +ErrorInternal2=შიდა შეცდომა: %1 +ErrorFunctionFailedNoCode=%1 არ შესრულდა +ErrorFunctionFailed=%1 არ შესრულდა; კოდი %2 +ErrorFunctionFailedWithMessage=%1 არ შესრულდა; კოდი %2.%n%3 +ErrorExecutingProgram=არ შესრულდა file:%n%1 + +; *** Registry errors +ErrorRegOpenKey=შეცდომა რეესტრის გასაღების გახსნისას:%n%1\%2 +ErrorRegCreateKey=შეცდომა რეესტრის გასაღების შექმნისას:%n%1\%2 +ErrorRegWriteKey=შეცდომა რეესტრის გასაღების ჩაწერისას:%n%1\%2 + +; *** INI errors +ErrorIniEntry=შეცდომა INI ჩანაწერის შექმნისას ფაილში "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&ფაილის გამოტოვება (არაა რეკომენდებული) +FileAbortRetryIgnoreIgnoreNotRecommended=&შეცდომის უგულებელყოფა და გამოტოვება (არაა რეკომენდებული) +SourceIsCorrupted=საწყისი ფაილი დაზიანებულია +SourceDoesntExist=საწყისი ფაილი "%1" არსებობს +ExistingFileReadOnly2=არსებული ფაილი არ ჩანაცვლდა, იმიტომ რომ ის არის მხოლოდ წაკითხვადი. +ExistingFileReadOnlyRetry=&მხოლოდ წაკითხვადის მოხსნა და ხელახლა ცდა +ExistingFileReadOnlyKeepExisting=&არსებული ფაილის დატოვება +ErrorReadingExistingDest=შეცდომა არსებული ფაილის წაკითხვისას: +FileExistsSelectAction=აირჩიეთ მოქმედება +FileExists2=ფაილი უკვე არსებობს. +FileExistsOverwriteExisting=&არსებულ ფაილზე გადაწერა +FileExistsKeepExisting=ა&რსებული ფაილის დატოვება +FileExistsOverwriteOrKeepAll=&მოქმედების გამეორება შემდეგი კონფლიქტის დროს +ExistingFileNewerSelectAction=აირჩიეთ მოქმედება +ExistingFileNewer2=არსებული ფაილი უფრო ახალია ვიდრე საინსტალაციოში მოცემული. +ExistingFileNewerOverwriteExisting=&არსებულ ფაილზე გადაწერა +ExistingFileNewerKeepExisting=ა&რსებული ფაილის დატოვება (რეკომენდებულია) +ExistingFileNewerOverwriteOrKeepAll=&მოქმედების გამეორება შემდეგი კონფლიქტის დროს +ErrorChangingAttr=შეცდომა არსებულ ფაილზე ატრიბუტის შეცვლისას: +ErrorCreatingTemp=შეცდომა საქაღალდეში ფაილის შექმნისას: +ErrorReadingSource=შეცდომა საწყისი ფაილის წაკითხვისას: +ErrorCopying=შეცდომა ფაილის კოპირებისას: +ErrorReplacingExistingFile=შეცდომა არსებულ ფაილზ გადაწერისას: +ErrorRestartReplace=გადაწერა არ მოხერხდა: +ErrorRenamingTemp=შეცდომა ფაილის სახელის შეცვლისას: +ErrorRegisterServer=არ დარეგისტრდა DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 არ გაეშვა, კოდი: %1 +ErrorRegisterTypeLib=არ დარეგისტრდა ბიბლიოთეკა: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=ყველა მომხმარებელი +UninstallDisplayNameMarkCurrentUser=ახლანდელი მომხმარებელი + +; *** Post-installation errors +ErrorOpeningReadme=შეცდომა Readme ფაილის გახსნისას. +ErrorRestartingComputer=საინსტალაციომ ვერ გადატვირთა კომპიუტერი. გადატვირთეთ ხელით. + +; *** Uninstaller messages +UninstallNotFound=ფაილი "%1" არ არსებობს. არ წაიშალა. +UninstallOpenError=ფაილი "%1" არ არსებობს. არ წაიშალა +UninstallUnsupportedVer=წასაშლელი ჟურნალის ფაილი "%1" ისეთ ფორმატშია რომ ამ ვერსიის წამშლელი ვერ აღიქვამს. არ წაიშალა +UninstallUnknownEntry=უცნობი ჩანაწერი (%1) +ConfirmUninstall=ნამდვილად გსურთ სრულად წაშალოთ %1 და ყველა მისი კომპონენტი? +UninstallOnlyOnWin64=ეს ინსტალაცია შეიძლება წაიშალოს მხოლოდ 64 ბიტიან Windows-ში. +OnlyAdminCanUninstall=ეს ინსტალაცია შეიძლება წაიშალოს მხოლოდ ადმინისტრატორის უფლებებით. +UninstallStatusLabel=მოითმინეთ სანამ %1 წაიშლება კომპიუტერიდან. +UninstalledAll=%1 წაიშალა კომპიუტერიდან. +UninstalledMost=%1-(ი)ს წაშლა დასრულდა.%n%nზოგიერთი ელემენტი არ წაიშალა და წაშალეთ ხელით. +UninstalledAndNeedsRestart=იმისთვის რომ %1 წაიშალოს საჭიროა კომპიუტერის გადატვირთვა.%n%nგსურთ ახლა გადატვირთვა? +UninstallDataCorrupted="%1" ფაილი დაზიანებულია. არ წაიშალა + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=წაიშალოს გაზიარებული ფაილი? +ConfirmDeleteSharedFile2=სისტემამ აღმოაჩინა რომ მოცემულ გაზიარებულ ფაილს არ იყენებს არც ერთი პროგრამა. გსურთ წამშლელმა წაშალოს გაზიარებული ფაილი?%n%nთუ რომელიმე პროგრამა ისევ იყენებს ამ ფაილს და მას წაშლით, ეს პროგრამები ვეღარ იმუშავებენ ნორმალურად. დარწმუნებული თუ არ ხართ დააჭირეთ არას. ფაილის დატოვება არაფერს გააფუჭებს. +SharedFileNameLabel=ფაილის სახელი: +SharedFileLocationLabel=მდებარეობა: +WizardUninstalling=წაშლის სტატუსი +StatusUninstalling=იშლება %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=ინსტალდება %1. +ShutdownBlockReasonUninstallingApp=იშლება %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 ვერსია %2 +AdditionalIcons=დამატებითი ხატულები: +CreateDesktopIcon=ხატულას შექმნა სამუშაო მაგიდაზე +CreateQuickLaunchIcon=სწრაფი გაშვების ხატულას შექმნა +ProgramOnTheWeb=%1 ვებ-გვერდზე +UninstallProgram=წაიშალოს %1 +LaunchProgram=გაეშვას %1 +AssocFileExtension=&ასოცირდეს %1 %2 ფაილის გაფართოებასთან? +AssocingFileExtension=%1 ასოცირდება %2 ფაილების გაფართოებასთან... +AutoStartProgramGroupDescription=გაშვება: +AutoStartProgram=ავტომატურად გაშვება %1 +AddonHostProgramNotFound=%1 არ მოიძებნა მითითებულ საქაღალდეში.%n%nგსურთ გაგრძელება? \ No newline at end of file diff --git a/Files/Languages/Unofficial/Greek.isl b/Files/Languages/Unofficial/Greek.isl new file mode 100644 index 00000000..291cc7ba --- /dev/null +++ b/Files/Languages/Unofficial/Greek.isl @@ -0,0 +1,390 @@ +; *** Inno Setup version 6.1.0+ Greek messages *** +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). +; +; Originally translated by Anastasis Chatzioglou, baldycom@hotmail.com +; Updated by XhmikosR [XhmikosR, my_nickname at yahoo dot com] +; Updated to version 6.1.0+ by Vasileios Karamichail, v.karamichail@outlook.com +; + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Ελληνικά +LanguageID=$0408 +LanguageCodePage=1253 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Εγκατάσταση +SetupWindowTitle=Εγκατάσταση - %1 +UninstallAppTitle=Απεγκατάσταση +UninstallAppFullTitle=%1 Απεγκατάσταση + +; *** Misc. common +InformationTitle=Πληροφορίες +ConfirmTitle=Επιβεβαίωση +ErrorTitle=Σφάλμα + +; *** SetupLdr messages +SetupLdrStartupMessage=Θα εκτελεστεί η εγκατάσταση του %1. Θέλετε να συνεχίσετε; +LdrCannotCreateTemp=Σφάλμα στη δημιουργία προσωρινού αρχείου. Η εγκατάσταση τερματίστηκε +LdrCannotExecTemp=Αδύνατη η εκτέλεση αρχείου στον φάκελο προσωρινών αρχείων. Η εγκατάσταση τερματίστηκε +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nΣφάλμα %2: %3 +SetupFileMissing=Το αρχείο %1 λείπει από τον κατάλογο εγκατάστασης. Διορθώστε το πρόβλημα ή αποκτήστε ένα νέο αντίγραφο του προγράμματος. +SetupFileCorrupt=Το αρχείο εγκατάστασης είναι κατεστραμμένο. Παρακαλώ προμηθευτείτε ένα νέο αντίγραφο του προγράμματος. +SetupFileCorruptOrWrongVer=Το αρχείο εγκατάστασης είναι κατεστραμμένο ή δεν είναι συμβατό με αυτήν την έκδοση του προγράμματος εγκατάστασης. Διορθώστε το πρόβλημα ή αποκτήστε ένα νέο αντίγραφο του προγράμματος. +InvalidParameter=Μία μη έγκυρη παράμετρος χρησιμοποιήθηκε στη γραμμή εντολών:%n%n%1 +SetupAlreadyRunning=Η εγκατάσταση τρέχει ήδη. +WindowsVersionNotSupported=Αυτό το πρόγραμμα δεν υποστηρίζει την έκδοση των Windows που εκτελεί ο υπολογιστής σας. +WindowsServicePackRequired=Αυτό το πρόγραμμα χρειάζεται το %1 Service Pack %2 ή νεότερο. +NotOnThisPlatform=Αυτό το πρόγραμμα δεν μπορεί να εκτελεστεί σε %1. +OnlyOnThisPlatform=Αυτό το πρόγραμμα μπορεί να εκτελεστεί μόνο σε %1. +OnlyOnTheseArchitectures=Αυτό το πρόγραμμα μπορεί να εγκατασταθεί μόνο σε εκδόσεις των Windows που έχουν σχεδιαστεί για τις ακόλουθες αρχιτεκτονικές επεξεργαστών:%n%n%1 +WinVersionTooLowError=Αυτό το πρόγραμμα απαιτεί %1 έκδοση %2 ή μεταγενέστερη. +WinVersionTooHighError=Αυτό το πρόγραμμα δεν μπορεί να εγκατασταθεί σε %1 έκδοση %2 ή μεταγενέστερη. +AdminPrivilegesRequired=Πρέπει να είστε συνδεδεμένοι ως διαχειριστής κατά την εγκατάσταση αυτού του προγράμματος. +PowerUserPrivilegesRequired=Πρέπει να είστε συνδεδεμένοι ως διαχειριστής ή ως μέλος της ομάδας Power User κατά την εγκατάσταση αυτού του προγράμματος. +SetupAppRunningError=Ο Οδηγός Εγκατάστασης εντόπισε ότι η εφαρμογή %1 εκτελείται ήδη.%n%nΠαρακαλώ κλείστε την εφαρμογή τώρα και πατήστε ΟΚ για να συνεχίσετε, ή Άκυρο για έξοδο. +UninstallAppRunningError=Ο Οδηγός Απεγκατάστασης εντόπισε ότι η εφαρμογή %1 εκτελείται ήδη.%n%nΠαρακαλώ κλείστε την εφαρμογή τώρα και πατήστε ΟΚ για να συνεχίσετε, ή Άκυρο για έξοδο. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Επιλέξτε Τρόπο Εγκατάστασης +PrivilegesRequiredOverrideInstruction=Επιλέξτε τον τρόπο εγκατάστασης +PrivilegesRequiredOverrideText1=Το %1 μπορεί να εγκατασταθεί για όλους τους χρήστες (απαιτεί δικαιώματα διαχειριστή) ή μόνο για εσάς. +PrivilegesRequiredOverrideText2=Το %1 μπορεί να εγκατασταθεί μόνο για εσάς ή για όλους τους χρήστες (απαιτεί δικαιώματα διαχειριστή). +PrivilegesRequiredOverrideAllUsers=Εγκατάσταση για &όλους τους χρήστες +PrivilegesRequiredOverrideAllUsersRecommended=Εγκατάσταση για όλ&ους τους χρήστες (συνιστάται) +PrivilegesRequiredOverrideCurrentUser=Εγκατάσταση μόνο για &εμένα +PrivilegesRequiredOverrideCurrentUserRecommended=Εγκατάσταση μόνο για &εμένα (συνιστάται) + +; *** Misc. errors +ErrorCreatingDir=Η εγκατάσταση δεν μπόρεσε να δημιουργήσει τον φάκελο "%1" +ErrorTooManyFilesInDir=Δεν είναι δυνατή η δημιουργία ενός αρχείου στον φάκελο "%1" επειδή περιέχει πολλά αρχεία + +; *** Setup common messages +ExitSetupTitle=Τέλος Εγκατάστασης +ExitSetupMessage=Η εγκατάσταση δεν έχει ολοκληρωθεί. Αν την τερματίσετε τώρα, το πρόγραμμα δεν θα εγκατασταθεί.%n%nΜπορείτε να εκτελέσετε ξανά την εγκατάσταση αργότερα.%n%nΈξοδος; +AboutSetupMenuItem=&Σχετικά με την Εγκατάσταση... +AboutSetupTitle=Σχετικά με την Εγκατάσταση +AboutSetupMessage=%1 έκδοση %2%n%3%n%n%1 αρχική σελίδα:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< &Πίσω +ButtonNext=&Επόμενο > +ButtonInstall=&Εγκατάσταση +ButtonOK=ΟΚ +ButtonCancel=&Ακυρο +ButtonYes=Ν&αι +ButtonYesToAll=Ναι σε &Ολα +ButtonNo=Ό&χι +ButtonNoToAll=Όχι &σε όλα +ButtonFinish=&Τέλος +ButtonBrowse=&Αναζήτηση... +ButtonWizardBrowse=Ανα&ζήτηση... +ButtonNewFolder=&Δημιουργία νέου φακέλου + +; *** "Select Language" dialog messages +SelectLanguageTitle=Επιλογή Γλώσσας Οδηγού Εγκατάστασης +SelectLanguageLabel=Επιλέξτε τη γλώσσα που θέλετε να χρησιμοποιήσετε κατά την εγκατάσταση. + +; *** Common wizard text +ClickNext=Πατήστε Επόμενο για να συνεχίσετε ή Άκυρο για να τερματίσετε την εγκατάσταση. +BeveledLabel= +BrowseDialogTitle=Αναζήτηση Φακέλου +BrowseDialogLabel=Επιλέξτε ένα φάκελο από την ακόλουθη λίστα και πατήστε ΟΚ. +NewFolderName=Νέος φάκελος + +; *** "Welcome" wizard page +WelcomeLabel1=Καλως ορίσατε στον Οδηγό Εγκατάστασης του [name] +WelcomeLabel2=Θα γίνει εγκατάσταση του [name/ver] στον υπολογιστή σας.%n%nΣυνιστάται να κλείσετε όλες τις άλλες εφαρμογές πριν συνεχίσετε. + +; *** "Password" wizard page +WizardPassword=Κωδικός Πρόσβασης +PasswordLabel1=Αυτή η εγκατάσταση προστατεύεται με κωδικό πρόσβασης. +PasswordLabel3=Παρακαλώ εισάγετε τον κωδικό και πατήστε Επόμενο. +PasswordEditLabel=&Κωδικός: +IncorrectPassword=Ο κωδικός που έχετε εισάγει είναι λανθασμένος. Παρακαλώ, προσπαθήστε ξανά. + +; *** "License Agreement" wizard page +WizardLicense=Άδεια Χρήσης +LicenseLabel=Παρακαλώ διαβάστε προσεκτικά τις ακόλουθες πληροφορίες πριν συνεχίσετε. +LicenseLabel3=Παρακαλώ διαβάστε την ακόλουθη Άδεια Χρήσης. Θα πρέπει να αποδεχτείτε τους όρους της πριν συνεχίσετε την εγκατάσταση. +LicenseAccepted=&Δέχομαι τους όρους της Άδειας Χρήσης +LicenseNotAccepted=Δεν &αποδέχομαι τους όρους της Άδειας Χρήσης + +; *** "Information" wizard pages +WizardInfoBefore=Πληροφορίες +InfoBeforeLabel=Παρακαλώ διαβάστε προσεκτικά τις ακόλουθες πληροφορίες πριν συνεχίσετε. +InfoBeforeClickLabel=Όταν είστε έτοιμοι να συνεχίσετε με τον Οδηγό Εγκατάστασης, πατήστε Επόμενο. +WizardInfoAfter=Πληροφορίες +InfoAfterLabel=Παρακαλώ διαβάστε προσεκτικά τις ακόλουθες πληροφορίες πριν συνεχίσετε. +InfoAfterClickLabel=Όταν είστε έτοιμοι να συνεχίσετε με τον Οδηγό Εγκατάστασης, πατήστε Επόμενο. + +; *** "User Information" wizard page +WizardUserInfo=Πληροφορίες Χρήστη +UserInfoDesc=Παρακαλώ εισάγετε τα στοιχεία σας. +UserInfoName=&Ονομα Χρήστη: +UserInfoOrg=&Εταιρεία: +UserInfoSerial=&Σειριακός Αριθμός: +UserInfoNameRequired=Πρέπει να εισάγετε ένα όνομα. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Επιλογή Φακέλου Εγκατάστασης +SelectDirDesc=Πού θέλετε να εγκατασταθεί το [name]; +SelectDirLabel3=Ο Οδηγός Εγκατάστασης θα εγκαταστήσει το [name] στον ακόλουθο φάκελο. +SelectDirBrowseLabel=Για να συνεχίσετε, πατήστε Επόμενο. Εάν θέλετε να επιλέξετε διαφορετικό φάκελο, πατήστε Αναζήτηση. +DiskSpaceGBLabel=Απαιτούνται τουλάχιστον [gb] GB ελεύθερου χώρου στο δίσκο. +DiskSpaceMBLabel=Απαιτούνται τουλάχιστον [mb] MB ελεύθερου χώρου στο δίσκο. +CannotInstallToNetworkDrive=Η εγκατάσταση δεν μπορεί να γίνει σε δίσκο δικτύου. +CannotInstallToUNCPath=Η εγκατάσταση δεν μπορεί να γίνει σε διαδρομή UNC. +InvalidPath=Πρέπει να δώσετε την πλήρη διαδρομή με το γράμμα δίσκου, για παράδειγμα:%n%nC:\APP%n%nή μια διαδρομή UNC της μορφής:%n%n\\server\share +InvalidDrive=Ο τοπικός δίσκος ή ο δίσκος δικτύου που έχετε επιλέξει δεν υπάρχει ή δεν είναι προσβάσιμος. Παρακαλώ, επιλέξτε άλλον. +DiskSpaceWarningTitle=Ανεπαρκής Χώρος στο Δίσκο +DiskSpaceWarning=Η εγκατάσταση χρειάζεται τουλάχιστον %1 KB ελεύθερο χώρο στο δίσκο αλλά ο επιλεγμένος δίσκος διαθέτει μόνον %2 KB.%n%nΘέλετε να συνεχίσετε παρόλα αυτά; +DirNameTooLong=Το όνομα ή η διαδρομή του φακέλου είναι πολύ μεγάλη. +InvalidDirName=Το όνομα του φακέλου δεν είναι έγκυρο. +BadDirName32=Το όνομα του φακέλου δεν μπορεί να περιλαμβάνει κανέναν από τους παρακάτω χαρακτήρες:%n%n%1 +DirExistsTitle=Ο Φάκελος Υπάρχει +DirExists=Ο φάκελος:%n%n%1%n%nυπάρχει ήδη. Θέλετε να γίνει η εγκατάσταση σε αυτόν τον φάκελο παρόλα αυτά; +DirDoesntExistTitle=Ο Φάκελος Δεν Υπάρχει +DirDoesntExist=Ο φάκελος:%n%n%1%n%nδεν υπάρχει. Θέλετε να δημιουργηθεί; + +; *** "Select Components" wizard page +WizardSelectComponents=Επιλογή Λειτουργιών Μονάδων +SelectComponentsDesc=Ποια στοιχεία θέλετε να εγκατασταθούν; +SelectComponentsLabel2=Επιλέξτε τα στοιχεία που θέλετε να εγκαταστήσετε, αποεπιλέξτε τα στοιχεία που δεν θέλετε να εγκαταστήσετε. Πατήστε Επόμενο όταν είστε έτοιμοι να συνεχίσετε. +FullInstallation=Πλήρης εγκατάσταση +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Τυπική εγκατάσταση +CustomInstallation=Προσαρμοσμένη εγκατάσταση +NoUninstallWarningTitle=Οι Λειτουργικές Μονάδες Υπάρχουν +NoUninstallWarning=Ο Οδηγός Εγκατάστασης εντόπισε ότι τα ακόλουθα στοιχεία είναι ήδη εγκατεστημένα στον υπολογιστή σας:%n%n%1%n%nΑποεπιλέγοντας αυτά τα στοιχεία δεν θα απεγκατασταθούν.%n%nΘέλετε να συνεχίσετε παρόλα αυτά; +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Η τρέχουσα επιλογή απαιτεί τουλάχιστον [gb] GB χώρου στο δίσκο. +ComponentsDiskSpaceMBLabel=Η τρέχουσα επιλογή απαιτεί τουλάχιστον [mb] MB χώρου στο δίσκο. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Επιλογή Επιπλέον Ενεργειών +SelectTasksDesc=Ποιες επιπλέον ενέργειες θέλετε να γίνουν; +SelectTasksLabel2=Επιλέξτε τις επιπλέον ενέργειες που θέλετε να γίνουν κατά την εγκατάσταση του [name] και πατήστε Επόμενο. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Επιλογή Φακέλου Μενού Έναρξης +SelectStartMenuFolderDesc=Πού θέλετε να τοποθετηθούν οι συντομεύσεις του προγράμματος; +SelectStartMenuFolderLabel3=Η εγκατάσταση θα δημιουργήσει τις συντομεύσεις του προγράμματος στον ακόλουθο φάκελο του μενού Έναρξη. +SelectStartMenuFolderBrowseLabel=Για να συνεχίσετε, πατήστε Επόμενο. Αν θέλετε διαφορετικό φάκελο, πατήστε Αναζήτηση. +MustEnterGroupName=Πρέπει να εισαγάγετε ένα όνομα φακέλου. +GroupNameTooLong=Το όνομα ή η διαδρομή του φακέλου είναι πολύ μεγάλη. +InvalidGroupName=Το όνομα του φακέλου δεν είναι έγκυρο. +BadGroupName=Το όνομα του φακέλου δεν μπορεί να περιλαμβάνει κανέναν από τους παρακάτω χαρακτήρες:%n%n%1 +NoProgramGroupCheck2=&Χωρίς δημιουργία φακέλου στο μενού Έναρξης. + +; *** "Ready to Install" wizard page +WizardReady=Έτοιμα για Εγκατάσταση +ReadyLabel1=Ο Οδηγός Εγκατάστασης είναι έτοιμος να ξεκινήσει την εγκατάσταση του [name] στον υπολογιστή σας. +ReadyLabel2a=Πατήστε Εγκατάσταση για να συνεχίσετε με την εγκατάσταση ή πατήστε Πίσω, εάν θέλετε να ελέγξετε ή να αλλάξετε τυχόν ρυθμίσεις. +ReadyLabel2b=Πατήστε Εγκατάσταση για να συνεχίσετε την εγκατάσταση. +ReadyMemoUserInfo=Πληροφορίες Χρήστη: +ReadyMemoDir=Φάκελος προορισμού: +ReadyMemoType=Είδος εγκατάστασης: +ReadyMemoComponents=Επιλεγμένες λειτουργικές μονάδες: +ReadyMemoGroup=Φάκελος στο μενού Έναρξη: +ReadyMemoTasks=Επιπλέον ενέργειες: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Λήψη πρόσθετων αρχείων... +ButtonStopDownload=&Διακοπή λήψης +StopDownload=Είστε βέβαιοι ότι θέλετε να διακόψετε τη λήψη; +ErrorDownloadAborted=Η λήψη ακυρώθηκε +ErrorDownloadFailed=Η λήψη απέτυχε: %1 %2 +ErrorDownloadSizeFailed=Η λήψη του μεγέθους απέτυχε: %1 %2 +ErrorFileHash1=Αποτυχία υπολογισμού hash: %1 +ErrorFileHash2=Μη έγκυρο hash: αναμενόμενο %1, βρέθηκε %2 +ErrorProgress=Μη έγκυρη πρόοδος: %1 από %2 +ErrorFileSize=Μη έγκυρο μέγεθος αρχείου: αναμενόμενο %1, βρέθηκε %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Προετοιμασία Εγκατάστασης +PreparingDesc=Ο Οδηγός Εγκατάστασης προετοιμάζεται για την εγκατάσταση του [name] στον υπολογιστή σας. +PreviousInstallNotCompleted=Η εγκατάσταση/αφαίρεση ενός προηγούμενου προγράμματος δεν ολοκληρώθηκε. Θα χρειαστεί να κάνετε επανεκκίνηση του υπολογιστή σας για να ολοκληρωθεί.%n%nΜετά την επανεκκίνηση του υπολογιστή σας, εκτελέστε ξανά τον Οδηγό Εγκατάστασης για να ολοκληρώσετε την εγκατάσταση/αφαίρεση του [name]. +CannotContinue=Η εγκατάσταση δεν μπορεί να συνεχιστεί. Παρακαλώ πατήστε Άκυρο για τερματισμό. +ApplicationsFound=Οι ακόλουθες εφαρμογές χρησιμοποιούν αρχεία που πρέπει να ενημερωθούν από τον Οδηγό Εγκατάστασης. Συνιστάται να επιτρέψετε στον Οδηγό Εγκατάστασης να κλείσει αυτόματα αυτές τις εφαρμογές. +ApplicationsFound2=Οι ακόλουθες εφαρμογές χρησιμοποιούν αρχεία που πρέπει να ενημερωθούν από τον Οδηγό Εγκατάστασης. Συνιστάται να επιτρέψετε στον Οδηγό Εγκατάστασης να κλείσει αυτόματα αυτές τις εφαρμογές. Μετά την ολοκλήρωση της εγκατάστασης, ο Οδηγός Εγκατάστασης θα επιχειρήσει να κάνει επανεκκίνηση των εφαρμογών. +CloseApplications=&Αυτόματο κλείσιμο των εφαρμογών +DontCloseApplications=&Χωρίς κλείσιμο των εφαρμογών +ErrorCloseApplications=Ο Οδηγός Εγκατάστασης δεν μπόρεσε να κλείσει αυτόματα όλες τις εφαρμογές. Συνιστάται να κλείσετε όλες τις εφαρμογές που χρησιμοποιούν αρχεία που πρέπει να ενημερωθούν από τον Οδηγό Εγκατάστασης προτού συνεχίσετε. +PrepareToInstallNeedsRestart=Ο Οδηγός Εγκατάστασης πρέπει να κάνει επανεκκίνηση του υπολογιστή σας. Μετά την επανεκκίνηση του υπολογιστή σας, εκτελέστε ξανά τον Οδηγό Εγκατάστασης για να ολοκληρώσετε την εγκατάσταση του [name].%n%nΘα θέλατε να κάνετε επανεκκίνηση τώρα; + +; *** "Installing" wizard page +WizardInstalling=Εγκατάσταση +InstallingLabel=Παρακαλώ περιμένετε καθώς γίνεται η εγκατάσταση του [name] στον υπολογιστή σας. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Ολοκλήρωση του Οδηγού Εγκατάστασης του [name] +FinishedLabelNoIcons=Ο Οδηγός Εγκατάστασης ολοκλήρωσε την εγκατάσταση του [name] στον υπολογιστή σας. +FinishedLabel=Ο Οδηγός Εγκατάστασης ολοκλήρωσε την εγκατάσταση του [name] στον υπολογιστή σας. Η εφαρμογή μπορεί να ξεκινήσει επιλέγοντας κάποια από τις εγκατεστημένες συντομεύσεις. +ClickFinish=Πατήστε Τέλος για να τερματίσετε τον Οδηγό Εγκατάστασης. +FinishedRestartLabel=Για να ολοκληρώσετε την εγκατάσταση του [name], ο Οδηγός Εγκατάστασης πρέπει να κάνει επανεκκίνηση του υπολογιστή σας. Θα θέλατε να κάνετε επανεκκίνηση τώρα; +FinishedRestartMessage=Για να ολοκληρώσετε την εγκατάσταση του [name], ο Οδηγός Εγκατάστασης πρέπει να κάνει επανεκκίνηση του υπολογιστή σας.%n%nΘα θέλατε να κάνετε επανεκκίνηση τώρα; +ShowReadmeCheck=Ναι, θα ήθελα να δω το αρχείο README +YesRadio=&Ναι, να γίνει επανεκκίνηση τώρα +NoRadio=&Οχι, θα κάνω επανεκκίνηση αργότερα +; used for example as 'Run MyProg.exe' +RunEntryExec=Εκτέλεση του %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Προβολή του %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Ο Οδηγός Εγκατάστασης χρειάζεται τον επόμενο δίσκο +SelectDiskLabel2=Παρακαλώ, εισάγετε τον δίσκο %1 και πατήστε ΟΚ.%n%nΕάν τα αρχεία αυτού του δίσκου βρίσκονται σε φάκελο διαφορετικό από αυτόν που εμφανίζεται παρακάτω, πληκτρολογήστε τη σωστή διαδρομή ή πατήστε Αναζήτηση. +PathLabel=&Διαδρομή: +FileNotInDir2=Το αρχείο "%1" δε βρέθηκε στο "%2". Παρακαλώ εισάγετε το σωστό δίσκο ή επιλέξτε κάποιον άλλο φάκελο. +SelectDirectoryLabel=Παρακαλώ καθορίσετε την τοποθεσία του επόμενου δίσκου. + +; *** Installation phase messages +SetupAborted=Η εγκατάσταση δεν ολοκληρώθηκε.%n%nΠαρακαλώ, διορθώστε το πρόβλημα και εκτελέστε ξανά τον Οδηγό Εγκατάστασης. +AbortRetryIgnoreSelectAction=Επιλέξτε ενέργεια +AbortRetryIgnoreRetry=&Δοκιμή +AbortRetryIgnoreIgnore=&Αγνόηση και συνέχεια +AbortRetryIgnoreCancel=Ακυρώση εγκατάστασης + +; *** Installation status messages +StatusClosingApplications=Κλείσιμο εφαρμογών... +StatusCreateDirs=Δημιουργία φακέλων... +StatusExtractFiles=Αποσυμπίεση αρχείων... +StatusCreateIcons=Δημιουργία συντομεύσεων... +StatusCreateIniEntries=Δημιουργία καταχωρήσεων INI... +StatusCreateRegistryEntries=Δημιουργία καταχωρήσεων στο μητρώο... +StatusRegisterFiles=Καταχώρηση αρχείων... +StatusSavingUninstall=Αποθήκευση πληροφοριών απεγκατάστασης... +StatusRunProgram=Ολοκλήρωση εγκατάστασης... +StatusRestartingApplications=Επανεκκίνηση εφαρμογών... +StatusRollback=Επαναφορά αλλαγών... + +; *** Misc. errors +ErrorInternal2=Εσωτερικό σφάλμα: %1 +ErrorFunctionFailedNoCode=%1 απέτυχε +ErrorFunctionFailed=%1 απέτυχε, κωδικός %2 +ErrorFunctionFailedWithMessage=%1 απέτυχε, κωδικός %2.%n%3 +ErrorExecutingProgram=Δεν είναι δυνατή η εκτέλεση του αρχείου:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Σφάλμα ανάγνωσης κλειδιού μητρώου:%n%1\%2 +ErrorRegCreateKey=Σφάλμα δημιουργίας κλειδιού μητρώου:%n%1\%2 +ErrorRegWriteKey=Σφάλμα καταχώρησης κλειδιού μητρώου:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Σφάλμα στη δημιουργία καταχώρησης INI στο αρχείο "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Παράλειψη αυτού του αρχείου (δεν συνιστάται) +FileAbortRetryIgnoreIgnoreNotRecommended=Παράλειψη σφάλματος και &συνέχεια (δεν συνιστάται) +SourceIsCorrupted=Το αρχείο προέλευσης είναι κατεστραμμένο +SourceDoesntExist=Το αρχείο προέλευσης "%1" δεν υπάρχει +ExistingFileReadOnly2=Το υπάρχον αρχείο δεν μπόρεσε να αντικατασταθεί επειδή είναι μόνο για ανάγνωση. +ExistingFileReadOnlyRetry=&Καταργήστε το χαρακτηριστικό μόνο για ανάγνωση και δοκιμάστε ξανά +ExistingFileReadOnlyKeepExisting=&Διατηρήστε το υπάρχον αρχείο +ErrorReadingExistingDest=Παρουσιάστηκε σφάλμα κατά την προσπάθεια ανάγνωσης του υπάρχοντος αρχείου: +FileExistsSelectAction=Επιλέξτε ενέργεια +FileExists2=Το αρχείο υπάρχει ήδη. +FileExistsOverwriteExisting=&Αντικατάσταση υπάρχοντος αρχείου +FileExistsKeepExisting=&Διατήρηση υπάρχοντος αρχείου +FileExistsOverwriteOrKeepAll=&Να γίνει το ίδιο για τις επόμενες διενέξεις +ExistingFileNewerSelectAction=Επιλέξτε ενέργεια +ExistingFileNewer2=Το υπάρχον αρχείο είναι νεότερο από αυτό που προσπαθεί να εγκαταστήσει ο Οδηγός Εγκατάστασης. +ExistingFileNewerOverwriteExisting=&Αντικατάσταση υπάρχοντος αρχείου +ExistingFileNewerKeepExisting=&Διατήρηση υπάρχοντος αρχείου (συνιστάται) +ExistingFileNewerOverwriteOrKeepAll=&Να γίνει το ίδιο για τις επόμενες διενέξεις +ErrorChangingAttr=Παρουσιάστηκε σφάλμα κατά την προσπάθεια αλλαγής των χαρακτηριστικών του υπάρχοντος αρχείου: +ErrorCreatingTemp=Παρουσιάστηκε σφάλμα κατά την προσπάθεια δημιουργίας ενός αρχείου στον φακέλο προορισμού: +ErrorReadingSource=Παρουσιάστηκε σφάλμα κατά την προσπάθεια ανάγνωσης του αρχείου προέλευσης: +ErrorCopying=Παρουσιάστηκε σφάλμα κατά την προσπάθεια αντιγραφής ενός αρχείου: +ErrorReplacingExistingFile=Παρουσιάστηκε σφάλμα κατά την προσπάθεια αντικατάστασης του υπάρχοντος αρχείου: +ErrorRestartReplace=Η ΕπανεκκίνησηΑντικατάσταση απέτυχε: +ErrorRenamingTemp=Παρουσιάστηκε σφάλμα κατά την προσπάθεια μετονομασίας ενός αρχείου στον φακέλο προορισμού: +ErrorRegisterServer=Δεν είναι δυνατή η καταχώριση του DLL/OCX: %1 +ErrorRegSvr32Failed=Το RegSvr32 απέτυχε με κωδικό εξόδου %1 +ErrorRegisterTypeLib=Δεν είναι δυνατή η καταχώριση της βιβλιοθήκης τύπων: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=Ολοι οι χρήστες +UninstallDisplayNameMarkCurrentUser=Τρέχων χρήστης + +; *** Post-installation errors +ErrorOpeningReadme=Παρουσιάστηκε σφάλμα κατά την προσπάθεια ανοίγματος του αρχείου README. +ErrorRestartingComputer=Ο Οδηγός Εγκατάστασης δεν μπόρεσε να κάνει επανεκκίνηση του υπολογιστή. Παρακαλώ επανεκκινήσετε τον υπολογιστή μόνοι σας. + +; *** Uninstaller messages +UninstallNotFound=Το αρχείο "%1" δεν υπάρχει. Δεν είναι δυνατή η απεγκατάσταση. +UninstallOpenError=Το αρχείο "%1" δεν ήταν δυνατό να ανοίξει. Δεν είναι δυνατή η απεγκατάσταση +UninstallUnsupportedVer=Το αρχείο καταγραφής απεγκατάστασης "%1" είναι σε μορφή που δεν αναγνωρίζεται από αυτήν την έκδοση του Οδηγού Απεγκατάστασης. Δεν ήταν δυνατή η απεγκατάσταση +UninstallUnknownEntry=Μια άγνωστη καταχώρηση (%1) εντοπίστηκε στο αρχείο καταγραφής απεγκατάστασης +ConfirmUninstall=Είστε βέβαιοι ότι θέλετε να καταργήσετε εντελώς το %1 και όλα τα στοιχεία του; +UninstallOnlyOnWin64=Αυτή η εγκατάσταση μπορεί να απεγκατασταθεί μόνο σε Windows 64-bit. +OnlyAdminCanUninstall=Αυτή η εγκατάσταση μπορεί να απεγκατασταθεί μόνο από χρήστη με δικαιώματα διαχειριστή. +UninstallStatusLabel=Παρακαλώ περιμένετε μέχρι να καταργηθεί το %1 από τον υπολογιστή σας. +UninstalledAll=Το %1 αφαιρέθηκε με επιτυχία από τον υπολογιστή σας. +UninstalledMost=Το %1 αφαιρέθηκε με επιτυχία.%n%nΟρισμένα στοιχεία δεν ήταν δυνατό να καταργηθούν. Αυτά μπορούν να αφαιρεθούν από εσάς. +UninstalledAndNeedsRestart=Για να ολοκληρώσετε την απεγκατάσταση του %1, ο υπολογιστής σας πρέπει να επανεκκινηθεί.%n%nΘα θέλατε να κάνετε επανεκκίνηση τώρα; +UninstallDataCorrupted=Το "%1" αρχείο είναι κατεστραμμένο. Δεν ήταν δυνατή η απεγκατάσταση + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Κατάργηση Κοινόχρηστου Αρχείου; +ConfirmDeleteSharedFile2=Το σύστημα υποδεικνύει ότι το ακόλουθο κοινόχρηστο αρχείο δεν χρησιμοποιείται πλέον από κανένα πρόγραμμα. Θέλετε να καταργηθεί αυτό το κοινόχρηστο αρχείο;%n%nΕάν κάποιο πρόγραμμα εξακολουθεί να το χρησιμοποιεί, ενδέχεται να μην λειτουργήσει σωστά. Εάν δεν είστε βέβαιοι, επιλέξτε Όχι. Αφήνοντάς το στο σύστημά σας δεν θα προκληθεί καμία ζημιά. +SharedFileNameLabel=Όνομα Αρχείου: +SharedFileLocationLabel=Τοποθεσία: +WizardUninstalling=Πρόοδος Απεγκατάστασης +StatusUninstalling=Απεγκατάσταση %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Εγκατάσταση του %1. +ShutdownBlockReasonUninstallingApp=Απεγκατάσταση του %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 έκδοση %2 +AdditionalIcons=Επιπλέον συντομεύσεις: +CreateDesktopIcon=Δημιουργία συντόμευσης στην &επιφάνεια εργασίας +CreateQuickLaunchIcon=Δημιουργία συντόμευσης στη &Γρήγορη Εκκίνηση +ProgramOnTheWeb=Το %1 στο Internet +UninstallProgram=Απεγκατάσταση του %1 +LaunchProgram=Εκκίνηση του %1 +AssocFileExtension=&Συσχέτιση του %1 με την επέκταση αρχείου %2 +AssocingFileExtension=Γίνεται συσχέτιση του %1 με την επέκταση αρχείου "%2"... +AutoStartProgramGroupDescription=Εκκίνηση: +AutoStartProgram=Αυτόματη εκκίνηση του %1 +AddonHostProgramNotFound=Το %1 δε βρέθηκε στο φάκελο που επιλέξατε.%n%nΘέλετε να συνεχίσετε παρόλα αυτά; + diff --git a/Files/Languages/Unofficial/Hindi.islu b/Files/Languages/Unofficial/Hindi.islu new file mode 100644 index 00000000..59678314 --- /dev/null +++ b/Files/Languages/Unofficial/Hindi.islu @@ -0,0 +1,336 @@ + ; *** Inno Setup version 5.5.3+ Hindi messages *** +; Translated by Him Prasad Gautam [ drishtibachak at gmail.com ] +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=<0939><093F><0902><0926><0940> +LanguageID=$0439 +LanguageCodePage=0 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=10 +;WelcomeFontName= +WelcomeFontSize=12 +;TitleFontName= +TitleFontSize=35 +;CopyrightFontName= +CopyrightFontSize=9 + +[Messages] + +; *** Application titles +SetupAppTitle=स्थापना +SetupWindowTitle=स्थापना - %1 +UninstallAppTitle=निस्कासन +UninstallAppFullTitle=%1 कि निस्कासन + +; *** Misc. common +InformationTitle=सुचना +ConfirmTitle=पुष्टिकरण +ErrorTitle=त्रुटी + +; *** SetupLdr messages +SetupLdrStartupMessage=इस से %1 आपकि कल्पयन्त्र में अधिष्ठापन होगा. क्या आप आगे बढ़ना चाहते है? +LdrCannotCreateTemp=अस्थाई फ़ाइल नही बना पा रहा. स्थापना को बिच में ही रोकना पड़ा. +LdrCannotExecTemp=अस्थाई फोल्डर में से फ़ाइल कार्यान्वयन नही कर पाया. स्थापना को बिच में ही रोकना पड़ा. + +; *** Startup error messages +LastErrorMessage=%1.%n%nत्रुटी %2: %3 +SetupFileMissing=फ़ाइल %1 अधिष्ठापन सङ्ग्रहिका में नही है. कृपया या तो समस्या का निदान कीजिये या कार्यक्रम की नई प्रति लाइए. +SetupFileCorrupt=स्थापना फाइल में त्रुटी है. कृपया नई कार्यक्रम की प्रति लाइए. +SetupFileCorruptOrWrongVer=स्थापना फाइल में त्रुटी है या तो अलग प्रकार कि है. कृपया समस्या-निदान करे या कार्यक्रम की नई प्रति लाइए. +InvalidParameter=फोल्डर का नाम वैध नही है. +SetupAlreadyRunning=स्थापना तो पहले से हि चल रहा है +WindowsVersionNotSupported=इस से [name/ver] आपके कल्पयन्त्र में अधिष्ठापन होगा.%n%nये बहेतर होगा आगे बढने से पहेले आप अन्य सभी कार्यक्रम हाल तुरत के लिए बंध कर दे. +WindowsServicePackRequired=ये कार्यक्रम को %1 Service Pack %2 या पिछला संस्करण चाहिए. +NotOnThisPlatform=ये कार्यक्रम %1 पे नही चलेगा. +OnlyOnThisPlatform=ये कार्यक्रम केवल %1 पे ही चलेगा. +OnlyOnTheseArchitectures=ये कार्यक्रम केवल इन प्रोसेसर :%n%n%1 से अनुरूप विन्डोज़ प्लेटफॉर्म पे ही चलेगा. +MissingWOW64APIs=आपका विंडो प्लेटफॉर्म 64-bit अधिष्ठापन समर्थन नही करता. कृपया सर्विस पैक %1 अधिष्ठापन करे. +WinVersionTooLowError=ये कार्यक्रम चलने के लिए %1 संस्करण %2 या उस से पिछला चाहिए. +WinVersionTooHighError=ये कार्यक्रम नही अधिष्ठापन किया जा सकता %1 संस्करण %2 या पिछला पे. +AdminPrivilegesRequired=अगर आप प्रशासक खाते से आरम्भ करे तो ही ये कार्यक्रम अधिष्ठापन कर पाओगे. +PowerUserPrivilegesRequired=आप प्रशासक खाते या शक्ति-प्रयोग कर्ता समूह के खाते से आरम्भ करे तो ही ये कार्यक्रम अधिष्ठापन कर पाओगे. +SetupAppRunningError=स्थापना ने पकड़ा की %1 हाल चालू है..%n%n कृपया उसे बंध करे अभी, और बाद में आगे बढने वास्ते ठीक या निकल जाने वास्ते रद्द करेँ पे क्लिक करे. +UninstallAppRunningError=निस्कासन को ये ज्ञात हुआ की %1 अभी चालू है.%n%n कृपया उसे बंध करे और फिर आगे बढने के लिए ठीक या बाहर जाने के लिए रद्द करेँ पे क्लिक करे. + +; *** Misc. errors +ErrorCreatingDir=स्थापना "%1" सङ्ग्रहिका बनाने में विफल रहा +ErrorTooManyFilesInDir=%1 सङ्ग्रहिका में बहुत फाइल मौजूद होने के वजह से स्थापना फाइल बनाने में विफल रहा. + +; *** Setup common messages +ExitSetupTitle=स्थापना कि बहिर्गमन +ExitSetupMessage=स्थापना कि कार्य पूर्ण नही हुआ, यदि आप अभी बाहर जाने कि ईराधा करेंगे तो कार्यक्रम सहि ढंग से अधिष्ठापन नही होगा.%n%nआप किसी ओर वक्त फिर से अधिष्ठापन कर सकते हो.%n%nक्या बाहर जाए? +AboutSetupMenuItem=स्थापना के बारे में... +AboutSetupTitle=स्थापना के बारे में +AboutSetupMessage=%1 संस्करण %2%n%3%n%n%1 गृह पृष्ठ:%n%4 +AboutSetupNote= +TranslatorNote= यह हिन्दी में अनुवाद कि कार्य हिम प्रसाद गौतम ने किया है. + +; *** Buttons +ButtonBack=< &पिछे हटो +ButtonNext=&आगे बढो > +ButtonInstall=&अधिष्ठापन +ButtonOK=&ठीक +ButtonCancel=&रद्द करेँ +ButtonYes=&हाँ +ButtonYesToAll=&सभी के लिए हाँ +ButtonNo=&नही +ButtonNoToAll=स&भी के लिए नही +ButtonFinish=&समाप्त +ButtonBrowse=&ब्राउज़... +ButtonWizardBrowse=&ब्राउज़... +ButtonNewFolder=&नया फोल्डर बनाए + +; "Select Language" dialog messages +SelectLanguageTitle=स्थापना भाषा चयन +SelectLanguageLabel=अधिष्ठापन के दरम्यान इस्तेमाल होने वाली भाषा चयन करे: + +; *** Common wizard text +ClickNext=आगे बढने के लिए आगे बढो दबाए, या बाहर जाने के वास्ते रद्द करेँ दबाए. +BeveledLabel= सौजन्यः हिम प्रसाद गौतम +BrowseDialogTitle=फोल्डर के लिए ब्राउज़ करे +BrowseDialogLabel=नीचे की सुची में से एक फोल्डर चयन करके ठीक दबाए. +NewFolderName=नया फोल्डर + +; "Welcome" wizard page +WelcomeLabel1=यह [name] कि स्थापना हो रही समारोह में आपका स्वागत है +WelcomeLabel2=इस से [name/ver] आपके कल्पयन्त्र में अधिष्ठापन होगा.%n%nये बहेतर होगा आगे बढने से पहले आप अन्य सभी खुलि हुई कार्यक्रम हाल के लिए बंध कर दे. + +; "Password" wizard page +WizardPassword=खुपियाशब्द +PasswordLabel1=ये अधिष्ठापन खुपियाशब्द से लोक है. +PasswordLabel3=कृपया खुपियाशब्द लिखें और बाद में 'आगे बढो' बटन दबाए. खुपियाशब्द case-सम्वेदनसील है. +PasswordEditLabel=खुपियाशब्द: +IncorrectPassword=आपने लिखा हुआ खुपियाशब्द गलत है. कृपया फिर से कोशिश करे. + +; "License Agreement" wizard page +WizardLicense=इजाजत करार +LicenseLabel=आगे बढने से पहेले ये महत्वपूर्ण सूचनाए पढे. +LicenseLabel3=ये इजाजत करार पढे. आगे बढने से पहेले आपको इसकी शर्तों को मानना ही होगा. +LicenseAccepted=हाँ मुझे ये करारनामा कबूल है. +LicenseNotAccepted=नही मुझे ये करारनामा कबूल नही है. + +; "Information" wizard pages +WizardInfoBefore=सुचना +InfoBeforeLabel=आगे बढने से पहेले ये महत्वपूर्ण सूचनाए पढे. +InfoBeforeClickLabel=जब आप तयार हो, 'आगे बढो' बटन दबाए. +WizardInfoAfter=सुचना +InfoAfterLabel=आगे बढने से पहेले ये महत्वपूर्ण सूचनाए पढे. +InfoAfterClickLabel=जब आप तयार हो, 'आगे बढो' बटन दबाए. + +; "User Information" wizard page +WizardUserInfo=प्रयोग कर्ता की जानकारी +UserInfoDesc=कृपया आपकी जानकारी अंदर डाले. +UserInfoName=प्रयोग कर्ता का नाम: +UserInfoOrg=संस्था: +UserInfoSerial=क्रमाङ्क +UserInfoNameRequired=आपको नाम तो डालना ही होगा. + +; "Select Destination Location" wizard page +WizardSelectDir=लक्ष्य पथ चयन करे +SelectDirDesc=[name] को किधर अधिष्ठापन करना है? +SelectDirLabel3=स्थापना [name] को निम्नलिखित फोल्डर में डालेगा. +SelectDirBrowseLabel=आगे बढने वास्ते आगे बढो दबाए. यदि अन्य फोल्डर चयन करना है तो ब्राउज़ दबाए. +DiskSpaceMBLabel=कमसेकम [mb] MB जितनी जगह तो जरूरी होगी. +CannotInstallToNetworkDrive=श्थापना ने नेटवर्क ड्राइभ नहि रख पाया. +CannotInstallToUNCPath=स्थापना ने UNC path नहि रख पाया. +InvalidPath=आपको ड्राइव अक्षर के साथ पूर्ण पथ देना होगा उदाहरण:%n%nC:\APP%n%n या तो UNC रास्ता यह रूप में:%n%n\\server\share +InvalidDrive=जो drive या UNC share आपने चयन की है उस मे हम पहुँच नही कर पा रहे कृपया अन्य चयन करे. +DiskSpaceWarningTitle=जरूरी जगह नही है. +DiskSpaceWarning=स्थापना कम से कम %1 KB जगह मंगता है, लेकिन चयनित ड्राइव में तो केवल %2 KB ही मौजूद है.%n%nक्या आप फिर भी आगे बढ़ना चाहते हो? +DirNameTooLong=फोल्डर का नाम या पथ बहोत लंबा है. +InvalidDirName=फोल्डर का नाम वैध नही है. +BadDirName32=फोल्डर नाम में ये अक्षर नही इस्तेमाल कर सकते:%n%n%1 +DirExistsTitle=फोल्डर मौजूद है +DirExists=फोल्डर:%n%n%1%n%nपहेले से ही मौजूद है, क्या आप फिर भी उसमे अधिष्ठापन करना चाहते है? +DirDoesntExistTitle=फोल्डर मौजूद नही है +DirDoesntExist=फोल्डर:%n%n%1%n%nमौजूद नही है. क्या आप ये फोल्डर बनाना चाहते है? + +; "Select Components" wizard page +WizardSelectComponents=सहयोगियोँ पसंद करे. +SelectComponentsDesc=कोनसे सहयोगियोँ अधिष्ठापन करने है? +SelectComponentsLabel2=जो सहयोगियोँ अधिष्ठापन करना है, उन्हें चयन करे; जिन्हें नही करना हो तो उन्हें साफ करे. जब आगे बढने के लिए तयार हो तो आगे बढो दबाए. +FullInstallation=सम्पूर्ण अधिष्ठापन +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=मजबुत अधिष्ठापन +CustomInstallation=रिवाजी अधिष्ठापन. +NoUninstallWarningTitle=सहयोगियोँ मौजूद है. +NoUninstallWarning=स्थापना को ये ज्ञात हुआ है की निम्नलिखित सहयोगियोँ पहेले से ही मोजूद है.:%n%n%1%n%nइन्हें डी-चयन करने से वे निस्कासन नही होगे.%n%nक्या आप ऐसे ही आगे बढ़ना चाहते है? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceMBLabel=इस चयन के साथ स्थापना वास्ते [mb] MB जगह चाहिए. + +; "Select Additional Tasks" wizard page +WizardSelectTasks=अतिरिक्त काम चयन करे. +SelectTasksDesc=कोन से अतिरिक्त काम करने है? +SelectTasksLabel2=[name] को अधिष्ठापन करते वक्त जो अतिरिक्त काम करने है उन्हें चयन करे और बाद में आगे बढो पे क्लिक करे. + +; "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=सुरु मेनू फोल्डर चयन करे. +SelectStartMenuFolderDesc=कार्यक्रम के छोटीरास्ता किधर रखने है? +SelectStartMenuFolderLabel3=स्थापना कार्यक्रम के छोटीरास्ता निम्नलिखित सुरु-मेनू फोल्डर में डालेगा. +SelectStartMenuFolderBrowseLabel=आगे बढने के लिए आगे बढो दबाए. यदि अलग फोल्डर में अधिष्ठापन करना है तो Browse दबाए. +MustEnterGroupName=आपको फोल्डर का नाम तो डालना ही होगा. +GroupNameTooLong=फोल्डर का नाम या पथ बहुत लंबा है. +InvalidGroupName=फोल्डर का नाम वैध नही है. +BadGroupName=फोल्डर नाम में ये वाले अक्षर नही डाल सकते:%n%n%1 +NoProgramGroupCheck2=सुरु मेनू फोल्डर नही बनाना है. + +; "Ready to Install" wizard page +WizardReady=अधिष्ठापन के लिए तयार +ReadyLabel1=स्थापना अब [name] को आपके कल्पयन्त्रमें अधिष्ठापन करने के लिए तयार है. +ReadyLabel2a=आगे बढने के लिए अधिष्ठापन दबाए, अगर कोई बदलाव करना है तो पिछे हटो दबाए. +ReadyLabel2b=अधिष्ठापन में आगे बढने के लिए अधिष्ठापन दबाए. +ReadyMemoUserInfo=प्रयोग कर्ता की सूचनाए: +ReadyMemoDir=लक्ष्य सङ्ग्रहिका: +ReadyMemoType=स्थापना का प्रकार: +ReadyMemoComponents=चयन किये सहयोगियों: +ReadyMemoGroup=सुरु मेनू फोल्डर: +ReadyMemoTasks=अतिरिक्त काम: + +; "Preparing to Install" wizard page +WizardPreparing=अधिष्ठापन के लिए तैयारी कर रहा है. +PreparingDesc=स्थापना [name] को आपके कल्पयन्त्र में डालने की तैयारीकर रहा है. +PreviousInstallNotCompleted=पिछले कार्यक्रम का प्रतिस्थापन / अधिष्ठापन सही ढंग से पूरा नही हुआ था. आपको कल्पयन्त्र फिर सुरु करना पडेगा.%n%nकल्पयन्त्र फिर सुरु करने पश्चात आप फिर से [name] का अधिष्ठापन शुरू करे. +CannotContinue=स्थापना आगे नही बढ़ सकता, कृपया रद्द करेँ बटन दबाएँ. +ApplicationsFound=निचे वाली अनुप्रयोगो ने स्थापना द्वारा अपडेट किया जाने वाला फाइलों को इस्तेमाल किया है. आपको यह मसवरा दिया जा ता है कि आप स्थापना को यह अनुप्रयोगौं कि खुद ही बन्द करने कि इजाजत प्रदान करें. +ApplicationsFound2=यह अनुप्रयोगो ने स्थापना द्वारा अपडेट किया जाने वाला फाइलों को इस्तेमाल किया है. आपको यह मसवरा दिया जा ता है कि आप स्थापना को यह अनुप्रयोगौं को खुद ही बन्द करने कि इजाजत प्रदान करें. अधिष्ठापन खतम होने के वाद, स्थापना यह अनुप्रयोग कों फिर सुरु करने कि कोसिस करेगा. +CloseApplications=&खुद हि अनुप्रयोग कों बन्द करें +DontCloseApplications=अनुप्रयोग कों बन्द &नहि करें +ErrorCloseApplications=स्थापना खुद हि सभी अनुप्रयोगों को बन्द नहि कर सका. आपको यह मसवरा दिया जाता है कि स्थापना ने अपडेट करने वाली फाइलों को इस्तमाल कर रहे अनुप्रयोगौं को आगे बढ्ने से पहले आप खुद ही बन्द करें. + +; "Installing" wizard page +WizardInstalling=अधिष्ठापन हो रहा है. +InstallingLabel=जब तक स्थापना आपके कल्पयन्त्र में [name] अधिष्ठापन करता है, उस वख्त तक कृपया प्रतीक्षा करे. + +; "Setup Completed" wizard page +FinishedHeadingLabel=[name] स्थापना कि कार्य पूरा हो रहा है. +FinishedLabelNoIcons=स्थापना ने [name] को आपके कल्पयन्त्र में सफलतापूर्वक अधिष्ठापन कर दिया है. +FinishedLabel=स्थापना ने [name] आपके कल्पयन्त्रमें अधिष्ठापन कर दिया है. आप उपयुक्त प्रतिमा पे क्लिक कर के कभी भी ये कार्यक्रम शुरू कर सकते है. +ClickFinish=स्थापना से बाहर निकलने वास्ते समाप्त पे क्लिक करे. +FinishedRestartLabel=[name] का अधिष्ठापन पूरा करने वास्ते कल्पयन्त्र फिर सुरु करना बेहद जरूरी है. %n%nक्या आप अभी रिसुरु करना चाहते है? +FinishedRestartMessage=[name] का अधिष्ठापन पूरा करने हेतु कल्पयन्त्र फिर सुरु करना बेहद जरूरी है.%n%nक्या आप अभी फिर सुरु करना चाहते है? +ShowReadmeCheck=हाँ मुझे हमें पढो file देखनी है. +YesRadio=&हाँ, कल्पयन्त्र फिर सुरु कर दो. +NoRadio=&नही मै अपना कल्पयन्त्र स्वयं बाद में फिर सुरु करूँगा. +; used for example as 'Run MyProg.exe' +RunEntryExec=रन %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=देखे %1 + +; "Setup Needs the Next Disk" stuff +ChangeDiskTitle=स्थापना के लिए अगली डिस्क चाहिए. +SelectDiskLabel2=कृपया डिस्क %1 डालके ठीक दबाए.%n%nयदि इस डिस्क की फाइल नही मिलती तो सही पथ बताए या ब्राउज़ पे क्लिक करे. +PathLabel=पथ: +FileNotInDir2=फाइल "%1" को "%2" में ढुढ नही पाए. कृपया सही डिस्क डाले या अलग फोल्डर चयन करे. +SelectDirectoryLabel=अगली डिस्क का पता बताए. + +; *** Installation phase messages +SetupAborted=स्थापना पूरा नही हो पाया.%n%nकृपया त्रुटी ठीक करे और फिर से प्रयास करे. +EntryAbortRetryIgnore=फिर से प्रयास करने वास्ते Retry दबाए, यदि ऐसे ही आगे बढ़ना है तो Ignore दबाए, या तो स्थापना रद्द करेँ करने वास्ते Abort दबाए. + +; *** Installation status messages +StatusClosingApplications=अनुप्रयोगकों बन्द किया जा रहा है. +StatusCreateDirs=सङ्ग्रहिका बना रहा है... +StatusExtractFiles=फाइल उत्खनन कर रहा है... +StatusCreateIcons=छोटीरास्ता बना रहा है... +StatusCreateIniEntries=INI एंट्री बना रहा है... +StatusCreateRegistryEntries=पञ्जीका एंट्री बना रहा है... +StatusRegisterFiles=फाइल पञ्जिकृत कर रहा है... +StatusSavingUninstall=निस्कासन की सुचनाए बचतकर रहा है... +StatusRunProgram=अधिष्ठापन पूरा कर रहा है... +StatusRestartingApplications=अनुप्रयोगकों कि फिर सुरुवात +StatusRollback=बदलावों को पिछे हट्ने कि काम कर रहा है... + +; *** Misc. errors +ErrorInternal2=आंतरिक त्रुटी: %1 +ErrorFunctionFailedNoCode=%1 विफल +ErrorFunctionFailed=%1 विफल; कोड %2 +ErrorFunctionFailedWithMessage=%1 विफल; कोड %2.%n%3 +ErrorExecutingProgram=फाइल को कार्यान्वयन नही कर पा रहा:%n%1 + +; *** Registry errors +ErrorRegOpenKey=पञ्जीका कुञ्जी खोलते वक्त त्रुटी:%n%1\%2 +ErrorRegCreateKey=पञ्जीका कुञ्जी बनाते वक्त त्रुटी:%n%1\%2 +ErrorRegWriteKey=पञ्जीका कुञ्जी में लिखते वक्त त्रुटी:%n%1\%2 + +; *** INI errors +ErrorIniEntry=फ़ाइल "%1" में INI एंट्री डालते वक्त त्रुटी. + +; *** File copying errors +FileAbortRetryIgnore=फिर से प्रयास करने हेतु Retry बटन दबाए, यदि ऐसे ही आगे बढ़ना है तो Ignore दबाए(हम ऐसा सुजाव नही देते),या तो Abort दबाए अधिष्ठापन को रद्द करेँ करने हेतु. +FileAbortRetryIgnore2=फिर से प्रयास करने हेतु Retry बटन दबाए, यदि ऐसे ही आगे बढ़ना है तो Ignore दबाए(हम ऐसा सुजाव नही देते),या तो Abort दबाए अधिष्ठापन को रद्द करेँ करने हेतु. +SourceIsCorrupted=श्रोत फ़ाइल में गडबड है. +SourceDoesntExist=श्रोत फाइल "%1" मौजूद ही नही है. +ExistingFileReadOnly=मौजदा फ़ाइल सिर्फ-पढो है.%n%n आप Retry पे क्लिक करे, उसका सिर्फ-पढो attribute हटाने के लिए और फिर दोबारा प्रयास करे. यदि इस फाइल को छोड़ देना है तो Ignore, और यदि अधिष्ठापन रद्द करेँ करना है तो Abort बटन दबाए. +ErrorReadingExistingDest=मौजदा फाइल को पढते वक्त त्रुटी: +FileExists=फाइल पहेले से मौजूद है.%n%nक्या आप उसको ओवर-राईट करना चाहते हो? +ExistingFileNewer=मौजूदा फाइल स्थापना फ़ाइल से नई है. हमारा सुजाव है की आप इसे रखे.%n%nक्या आप फ़ाइल को रखना चाहते है? +ErrorChangingAttr=मौजूदा फाइल के एट्रीब्यूट बदलते वक्त त्रुटी: +ErrorCreatingTemp=फ़ाइल बनाते वख्त त्रुटी: +ErrorReadingSource=श्रोत फाइल खोलते वक्त त्रुटी: +ErrorCopying=फ़ाइल प्रति करने का प्रयास करते वक्त त्रुटी: +ErrorReplacingExistingFile=मौजूद फाइल को प्रतिस्थापना करते वक्त त्रुटी: +ErrorRestartReplace=प्रतिस्थापन कि फिर से सुरुवात विफल रहा: +ErrorRenamingTemp=सङ्ग्रहिका में फाइल का नाम बदलते वक्त त्रुटी हुई: +ErrorRegisterServer=इस को पञ्जिकृत नही कर पा रहा DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 असफल हो गयी, बाहर जाने कोड %1 के साथ +ErrorRegisterTypeLib=इस टाइप लाइब्रेरी को पंजीकृत नही कर पा रहा: %1 + +; *** Post-installation errors +ErrorOpeningReadme=मुझे पढो फ़ाइल खोलते वक्त त्रुटी हुई. +ErrorRestartingComputer=स्थापना कल्पयन्त्र को फिर सुरु करने में असफल रहा. कृपया आप ही इसको फिर सुरु करे. + +; *** Uninstaller messages +UninstallNotFound=फाइल "%1" मौजूद ही नही है. निस्कासन करना असंभव. +UninstallOpenError=फ़ाइल "%1" खुल नही रही. निस्कासन करना असंभव. +UninstallUnsupportedVer=निस्कासन लोग फ़ाइल "%1" जिस फोर्मेट में है उसे हम पहचान नही पा रहे. आगे बढ़ना नामुमकिन. +UninstallUnknownEntry=निस्कासन लोग में एक अज्ञात प्रविष्टी (%1)मिली. +ConfirmUninstall=क्या पक्का आप %1 को निस्कासन करना चाहते हो? +UninstallOnlyOnWin64=केवल 64-bit Windows से ही इसे निस्कासन किया जा सकता है. +OnlyAdminCanUninstall=केवल प्रशासक खातों से ही इसे निस्कासन किया जा सकता है.. +UninstallStatusLabel=जब तक %1 नही हड्ता, धैर्य रखे. +UninstalledAll=%1 सफलतापूर्वक निस्कासन हुआ. +UninstalledMost=%1 निस्कासन पूरा हुआ.%n%nकुछ तत्वों को निकाल नही पाए लेकिन आप उन्हें अपनि तरह से हटा सकते हो. +UninstalledAndNeedsRestart=%1 का निस्कासन पूरा करने वास्ते कल्पयन्त्र को फिर सुरु करना जरूरी है.%n%nक्या अभी फिर सुरु करे? +UninstallDataCorrupted=%1 फ़ाइल में त्रुटी. निस्कासन नामुमकिन. + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=क्या शेरेड-फाइल को निकाल देना है? +ConfirmDeleteSharedFile2=प्रणाली से ये ज्ञात होता है की निम्नलिखिती शेरेड-फ़ाइल अब आगे इस्तेमाल में नही आएगी. क्या आप उन्हें भी निस्कासन करना चाहते है?%n%n यदि कोई अन्य कार्यक्रम इन फाइल पे आधारित है तो वो शायद इन्हें निकाल देने पर ढंग से काम ना भी करे. यदि आप फैसला नही कर पा रहे तो 'नही' पे क्लिक करे. इन फाइल को कल्पयन्त्र में पड़े रहेने दोगे तो भी कोई नुकसान नही होगा. +SharedFileNameLabel=फाइल नाम: +SharedFileLocationLabel=पता: +WizardUninstalling=निस्कासन स्थिति +StatusUninstalling=निस्कासन हो रहा है %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp= %1 कि अधिष्ठआपन हो रही है. +ShutdownBlockReasonUninstallingApp=%1 कि निस्कासन हो रही है. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 संस्करण %2 +AdditionalIcons=अतिरिक्त प्रतिमा: +CreateDesktopIcon=डेस्कटॉप प्रतिमा बनाए +CreateQuickLaunchIcon=जल्दि चलो प्रतिमा बनाए +ProgramOnTheWeb=%1 इन्टरनेट पे +UninstallProgram=निस्कासन करे %1 +LaunchProgram=लोंच करे %1 +AssocFileExtension=%1 को %2 फ़ाइल एक्सटेंशन के साथ आबद्ध करे +AssocingFileExtension=%1 को %2 फ़ाइल एक्सटेंशन के साथ आबद्ध कर रहा है.... +AutoStartProgramGroupDescription=सुरुवात +AutoStartProgram=%1 को %2 फ़ाइल एक्सटेंशन के साथ आबद्ध कर रहा है.... +AddonHostProgramNotFound=आपने चयन किया हुआफोल्डर में %1 नही मिला. %n%nक्या आप किसि हालत में यस कि निरन्तरता रख्ना चाहते है ? diff --git a/Files/Languages/Unofficial/Indonesian.isl b/Files/Languages/Unofficial/Indonesian.isl new file mode 100644 index 00000000..2dfc1c38 --- /dev/null +++ b/Files/Languages/Unofficial/Indonesian.isl @@ -0,0 +1,343 @@ +; *** Inno Setup version 6.1.0+ Indonesian messages *** +; +; Untuk mengunduh terjemahan kontribusi-pengguna dari berkas ini, buka: +; http://www.jrsoftware.org/files/istrans/ +; +; Alih bahasa oleh: MozaikTM (mozaik.tm@gmail.com) + +[LangOptions] +LanguageName=Bahasa Indonesia +LanguageID=$0421 +LanguageCodePage=0 + +[Messages] +SetupAppTitle=Instalasi +SetupWindowTitle=Instalasi - %1 +UninstallAppTitle=Pelepas +UninstallAppFullTitle=Pelepasan %1 + +InformationTitle=Informasi +ConfirmTitle=Konfirmasi +ErrorTitle=Galat + +SetupLdrStartupMessage=Kami akan memasang %1. Teruskan? +LdrCannotCreateTemp=Tidak dapat membuat berkas sementara. Batal memasang +LdrCannotExecTemp=Tidak dapat menjalankan berkas di direktori sementara. Batal memasang + +LastErrorMessage=%1.%n%nGalat %2: %3 +SetupFileMissing=Berkas %1 hilang dari direktori instalasi. Silakan koreksi masalah atau dapatkan salinan program yang baru. +SetupFileCorrupt=Berkas pemandu telah rusak. Silakan dapatkan salinan program yang baru. +SetupFileCorruptOrWrongVer=Berkas pemandu telah rusak, atau tidak cocok dengan versi pemandu ini. Silakan koreksi masalah atau dapatkan salinan program yang baru. +InvalidParameter=Parameter tak sah terdapat pada baris perintah: %n%n%1 +SetupAlreadyRunning=Pemandu sudah berjalan. +WindowsVersionNotSupported=Program ini tidak mendukung versi Windows yang berjalan pada komputer Anda. +WindowsServicePackRequired=Program ini memerlukan %1 Service Pack %2 atau yang terbaru. +NotOnThisPlatform=Program ini tidak akan berjalan pada %1. +OnlyOnThisPlatform=Program ini harus dijalankan pada %1. +OnlyOnTheseArchitectures=Program ini hanya bisa dipasang pada versi Windows yang didesain untuk arsitektur prosesor berikut:%n%n%1 +WinVersionTooLowError=Program ini memerlukan %1 versi %2 atau yang terbaru. +WinVersionTooHighError=Program ini tidak dapat dipasang pada %1 versi %2 atau yang terbaru. +AdminPrivilegesRequired=Anda harus masuk sebagai seorang administrator saat memasang program ini. +PowerUserPrivilegesRequired=Anda harus masuk sebagai seorang administrator atau anggota grup Power Users saat memasang program ini. +SetupAppRunningError=Kami mendeteksi bahwa %1 sedang berjalan.%n%nSilakan tutup semua instansi bersangkutan, lalu klik OK untuk meneruskan, atau Cancel untuk keluar. +UninstallAppRunningError=Pelepas mendeteksi bahwa %1 sedang berjalan.%n%nSilakan tutup semua instansi bersangkutan, lalu klik OK untuk meneruskan, atau Cancel untuk keluar. + +;Inno6 +PrivilegesRequiredOverrideTitle=Pilih Mode Instalasi +PrivilegesRequiredOverrideInstruction=Pilih mode instalasi +PrivilegesRequiredOverrideText1=%1 bisa dipasang untuk semua pengguna (perlu izin administratif), atau hanya Anda. +PrivilegesRequiredOverrideText2=%1 bisa dipasang hanya untuk Anda, atau semua pengguna (perlu izin administratif). +PrivilegesRequiredOverrideAllUsers=Pasang untuk &semua pengguna +PrivilegesRequiredOverrideAllUsersRecommended=Pasang untuk &semua pengguna (disarankan) +PrivilegesRequiredOverrideCurrentUser=Pasang &hanya untuk saya +PrivilegesRequiredOverrideCurrentUserRecommended=Pasang &hanya untuk saya (disarankan) +;Inno6 + +ErrorCreatingDir=Kami tidak dapat membuat direktori "%1" +ErrorTooManyFilesInDir=Tidak dapat membuat berkas di direktori "%1" karena berisi terlalu banyak berkas + +ExitSetupTitle=Keluar Pemandu +ExitSetupMessage=Instalasi tidak lengkap. Bila Anda keluar sekarang, program takkan terpasang.%n%nAnda bisa menjalankan Pemandu lagi lain kali untuk melengkapinya.%n%nKeluar? +AboutSetupMenuItem=&Tentang Pemandu... +AboutSetupTitle=Tentang Pemandu +AboutSetupMessage=%1 versi %2%n%3%n%n%1 laman beranda:%n%4 +AboutSetupNote= +TranslatorNote= + +ButtonBack=&Kembali +ButtonNext=&Maju +ButtonInstall=&Pasang +ButtonOK=Oke +ButtonCancel=Batal +ButtonYes=&Ya +ButtonYesToAll=Y&a semuanya +ButtonNo=&Tidak +ButtonNoToAll=T&idak semuanya +ButtonFinish=&Selesai +ButtonBrowse=&Cari... +ButtonWizardBrowse=C&ari... +ButtonNewFolder=&Buat Map Baru + +SelectLanguageTitle=Pilih Bahasa Pemandu +SelectLanguageLabel=Pilih bahasa untuk digunakan ketika memasang. + +ClickNext=Klik Maju untuk meneruskan, atau Batal untuk keluar. +BeveledLabel= +BrowseDialogTitle=Cari Map +BrowseDialogLabel=Pilih map dari daftar berikut, lalu klik OK. +NewFolderName=Map Baru + +WelcomeLabel1=Selamat datang di Pemandu Instalasi [name] +WelcomeLabel2=Kami akan memasang [name/ver] pada komputer Anda.%n%nDisarankan untuk menutup semua aplikasi lainnya sebelum meneruskan. + +WizardPassword=Kata Sandi +PasswordLabel1=Instalasi ini dilindungi kata sandi. +PasswordLabel3=Silakan masukkan kata sandi, lalu klik Maju untuk meneruskan. Kata sandi bersifat sensitif-kapitalisasi. +PasswordEditLabel=&Kata Sandi: +IncorrectPassword=Kata sandi yang Anda masukkan salah. Silakan coba lagi. + +WizardLicense=Kesepakatan Lisensi +LicenseLabel=Silakan baca informasi berikut sebelum meneruskan. +LicenseLabel3=Silakan baca Kesepakatan Lisensi berikut. Anda harus setuju dengan syarat dari kesepakatan ini sebelum meneruskan instalasi. +LicenseAccepted=Saya &setujui kesepakatan ini +LicenseNotAccepted=Saya &tidak setuju kesepakatan ini + +WizardInfoBefore=Informasi +InfoBeforeLabel=Silakan baca informasi penting berikut sebelum meneruskan. +InfoBeforeClickLabel=Saat Anda siap meneruskan instalasi, klik Maju. +WizardInfoAfter=Informasi +InfoAfterLabel=Silakan baca informasi penting berikut sebelum meneruskan. +InfoAfterClickLabel=Saat Anda siap meneruskan instalasi, klik Maju. + +WizardUserInfo=Informasi Pengguna +UserInfoDesc=Silakan masukkan informasi Anda. +UserInfoName=&Nama Pengguna: +UserInfoOrg=&Organisasi: +UserInfoSerial=&Nomor Seri: +UserInfoNameRequired=Wajib memasukkan nama. + +WizardSelectDir=Pilih Lokasi Tujuan +SelectDirDesc=Di manakah [name] sebaiknya dipasang? +SelectDirLabel3=Kami akan memasang [name] ke dalam map berikut. +SelectDirBrowseLabel=Untuk meneruskan, klik Maju. Bila Anda ingin memilih map lain, klik Cari. +;Inno6 +DiskSpaceGBLabel=Diperlukan sedikitnya [gb] GB ruang bebas. +;Inno6 +DiskSpaceMBLabel=Diperlukan sedikitnya [mb] MB ruang bebas. +CannotInstallToNetworkDrive=Kami tidak bisa memasang ke diska jaringan. +CannotInstallToUNCPath=Kami tidak bisa memasang ke alamat UNC. +InvalidPath=Anda wajib memasukkan alamat lengkap dengan huruf diska; contohnya:%n%nC:\APP%n%natau alamat UNC dalam bentuk:%n%n\\server\share +InvalidDrive=Diska atau alamat UNC yang Anda pilih tidak ada atau tidak dapat diakses. Silakan pilih yang lain. +DiskSpaceWarningTitle=Ruang Bebas Tidak Cukup +DiskSpaceWarning=Kami memerlukan sedikitnya %1 KB ruang bebas untuk memasang, namun diska yang Anda pilih hanya memiliki %2 KB tersedia.%n%nMaju terus? +DirNameTooLong=Nama map atau alamat terlalu panjang. +InvalidDirName=Nama map tidak sah. +BadDirName32=Nama map dilarang berisi karakter-karakter berikut:%n%n%1 +DirExistsTitle=Map Sudah Ada +DirExists=Map:%n%n%1%n%nsudah ada. Tetap pasang di map tersebut? +DirDoesntExistTitle=Map Tidak Ada +DirDoesntExist=Map:%n%n%1%n%ntidak ada. Buat map? + +WizardSelectComponents=Pilih Komponen +SelectComponentsDesc=Komponen mana sajakah yang sebaiknya dipasang? +SelectComponentsLabel2=Centang komponen yang Anda inginkan; batalkan centang dari komponen yang tidak Anda inginkan. Klik Maju saat Anda siap meneruskan. +FullInstallation=Instalasi penuh +CompactInstallation=Instalasi padat +CustomInstallation=Instalasi kustom +NoUninstallWarningTitle=Komponen Terpasang +NoUninstallWarning=Kami mendeteksi bahwa komponen berikut telah terpasang pada komputer Anda:%n%n%1%n%nMembatalkan pilihan atas komponen berikut bukan berarti melepasnya.%n%nMaju terus? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +;Inno6 +ComponentsDiskSpaceGBLabel=Pilihan saat ini memerlukan sedikitnya [gb] GB ruang bebas. +;Inno6 +ComponentsDiskSpaceMBLabel=Pilihan saat ini memerlukan sedikitnya [mb] MB ruang bebas. + +WizardSelectTasks=Pilih Tugas Tambahan +SelectTasksDesc=Tugas tambahan mana sajakah yang sebaiknya dijalankan? +SelectTasksLabel2=Pilih tugas tambahan yang Anda ingin kami jalankan ketika memasang [name], lalu klik Maju. + +WizardSelectProgramGroup=Pilih Map Menu Start +SelectStartMenuFolderDesc=Di manakah sebaiknya kami letakkan pintasan program? +SelectStartMenuFolderLabel3=Kami akan membuat pintasan program di map Menu Start berikut. +SelectStartMenuFolderBrowseLabel=Untuk meneruskan, klik Maju. Bila Anda ingin memilih map lain, klik Cari. +MustEnterGroupName=Anda wajib memasukkan nama map. +GroupNameTooLong=Nama map atau alamat terlalu panjang. +InvalidGroupName=Nama map tidak sah. +BadGroupName=Nama map dilarang berisi karakter-karakter berikut:%n%n%1 +NoProgramGroupCheck2=&Jangan buat map Menu Start + +WizardReady=Siap Memasang +ReadyLabel1=Kami siap untuk memulai instalasi [name] pada komputer Anda. +ReadyLabel2a=Klik Pasang untuk meneruskan instalasi, atau klik Kembali bila Anda ingin menilik atau mengubah setelan. +ReadyLabel2b=Klik Pasang untuk meneruskan instalasi. +ReadyMemoUserInfo=Informasi pengguna: +ReadyMemoDir=Lokasi tujuan: +ReadyMemoType=Tipe instalasi: +ReadyMemoComponents=Komponen terpilih: +ReadyMemoGroup=Map Menu Start: +ReadyMemoTasks=Tugas Tambahan: + +;Inno6 +DownloadingLabel=Mengunduh berkas tambahan... +ButtonStopDownload=&Setop Unduhan +StopDownload=Anda yakin ingin berhenti mengunduh? +ErrorDownloadAborted=Unduhan dibatalkan +ErrorDownloadFailed=Gagal mengunduh: %1 %2 +ErrorDownloadSizeFailed=Gagal mendapatkan ukuran: %1 %2 +ErrorFileHash1=Ceksum berkas gagal: %1 +ErrorFileHash2=Ceksum berkas tidak sah: seharusnya %1, yang kami dapatkan %2 +ErrorProgress=Langkah tidak sah: %1 dari %2 +ErrorFileSize=Ukuran berkas tidak sah: seharusnya %1, yang kami dapatkan %2 +;Inno6 + +WizardPreparing=Bersiap Memasang +PreparingDesc=Kami sedang bersiap memasang [name] pada komputer Anda. +PreviousInstallNotCompleted=Instalasi/pelepasan dari program sebelumnya tidak lengkap. Anda perlu memulai ulang komputer untuk melengkapinya nanti.%n%nSetelah itu, jalankan Pemandu kembali untuk melengkapi instalasi [name]. +CannotContinue=Kami tidak bisa meneruskan. Klik Batal untuk keluar. +ApplicationsFound=Aplikasi berikut tengah memakai berkas-berkas yang perlu kami perbarui. Disarankan agar Anda mengizinkan kami untuk menutupnya secara otomatis. +ApplicationsFound2=Aplikasi berikut tengah memakai berkas-berkas yang perlu kami perbarui. Disarankan agar Anda mengizinkan kami untuk menutupnya secara otomatis. Selengkapnya memasang, kami akan berusaha memulai ulang aplikasi-aplikasi tersebut. +CloseApplications=&Otomatis tutup aplikasi +DontCloseApplications=&Jangan tutup aplikasi +ErrorCloseApplications=Kami tidak dapat menutup semua aplikasi secara otomatis. Disarankan agar Anda menutup semua aplikasi yang memakai berkas-berkas yang perlu kami perbarui sebelum meneruskan. +;Inno6 +PrepareToInstallNeedsRestart=Kami perlu memulai ulang komputer Anda. Setelah itu, jalankan Pemandu kembali untuk melengkapi pemasangan [name].%n%nMulai ulang sekarang? +;Inno6 + +WizardInstalling=Memasang +InstallingLabel=Silakan tunggu selagi kami memasang [name] pada komputer Anda. + +FinishedHeadingLabel=Mengakhiri Instalasi [name] +FinishedLabelNoIcons=Kami telah selesai memasang [name] pada komputer Anda. +FinishedLabel=Kami telah selesai memasang [name] pada komputer Anda. Aplikasi tersebut bisa dijalankan dengan cara memilih pintasan yang terpasang. +ClickFinish=Klik Selesai untuk menutup instalasi. +FinishedRestartLabel=Demi melengkapi instalasi [name], kami perlu memulai ulang komputer Anda. Lakukan sekarang? +FinishedRestartMessage=Demi melengkapi instalasi [name], kami perlu memulai ulang komputer Anda.%n%nLakukan sekarang? +ShowReadmeCheck=Ya, saya ingin melihat berkas README +YesRadio=&Ya, mulai ulang komputer sekarang +NoRadio=&Tidak, saya akan memulai ulang komputer nanti +RunEntryExec=Jalankan %1 +RunEntryShellExec=Lihat %1 + +ChangeDiskTitle=Kami Memerlukan Diska Sambungan +SelectDiskLabel2=Silakan masukkan Diska %1 dan klik OK.%n%nBila berkas-berkas di dalam diska ini dapat ditemukan di map lain selain yang ditampilkan di bawah, masukkan alamat yang benar atau klik Cari. +PathLabel=&Alamat: +FileNotInDir2=Berkas "%1" tidak dapat ditemukan di "%2". Silakan masukkan diska yang benar atau pilih map lain. +SelectDirectoryLabel=Silakan tentukan lokasi diska berikutnya. + +SetupAborted=Instalasi tidak lengkap.%n%nSilakan koreksi masalah dan jalankan Pemandu kembali. +;Inno6 +AbortRetryIgnoreSelectAction=Pilih tindakan +AbortRetryIgnoreRetry=&Coba lagi +AbortRetryIgnoreIgnore=&Abaikan galat dan teruskan +AbortRetryIgnoreCancel=Batalkan pemasangan +;Inno6 + +StatusClosingApplications=Menutup aplikasi... +StatusCreateDirs=Membuat direktori... +StatusExtractFiles=Mengekstrak berkas... +StatusCreateIcons=Membuat pintasan... +StatusCreateIniEntries=Membuat catatan INI... +StatusCreateRegistryEntries=Membuat catatan Registry... +StatusRegisterFiles=Meregistrasi berkas... +StatusSavingUninstall=Menyimpan informasi pelepas... +StatusRunProgram=Mengakhiri instalasi... +StatusRestartingApplications=Menjalankan ulang aplikasi... +StatusRollback=Membatalkan perubahan... + +ErrorInternal2=Galat internal: %1 +ErrorFunctionFailedNoCode=%1 gagal +ErrorFunctionFailed=%1 gagal; kode %2 +ErrorFunctionFailedWithMessage=%1 gagal; kode %2.%n%3 +ErrorExecutingProgram=Tidak dapat mengeksekusi berkas:%n%1 + +ErrorRegOpenKey=Galat membuka kunci Registry:%n%1\%2 +ErrorRegCreateKey=Galat membuat kunci Registry:%n%1\%2 +ErrorRegWriteKey=Galat menulis kunci Registry:%n%1\%2 + +ErrorIniEntry=Galat membuat catatan INI dalam berkas "%1". + +;Inno6 +FileAbortRetryIgnoreSkipNotRecommended=&Lewati berkas ini (tidak disarankan) +FileAbortRetryIgnoreIgnoreNotRecommended=&Abaikan galat dan teruskan (tidak disarankan) +;Inno6 + +SourceIsCorrupted=Berkas asal telah rusak +SourceDoesntExist=Berkas asal "%1" tidak ada + +;Inno6 +ExistingFileReadOnly2=Berkas yang sudah ada tidak bisa ditimpa karena telah ditandai hanya-baca. +ExistingFileReadOnlyRetry=&Hapus atribut hanya-baca dan coba lagi +ExistingFileReadOnlyKeepExisting=&Pertahankan berkas yang sudah ada +ErrorReadingExistingDest=Terjadi galat saat berusaha membaca berkas yang sudah ada: +FileExistsSelectAction=Pilih tindakan +FileExists2=Berkas sudah ada. +FileExistsOverwriteExisting=&Timpa berkas yang sudah ada +FileExistsKeepExisting=&Pertahankan berkas yang sudah ada +FileExistsOverwriteOrKeepAll=&Lakukan ini untuk konflik (bentrok) berikutnya +ExistingFileNewerSelectAction=Pilih tindakan +ExistingFileNewer2=Berkas yang sudah ada lebih baru dari yang akan kami coba pasang. +ExistingFileNewerOverwriteExisting=&Timpa berkas yang sudah ada +ExistingFileNewerKeepExisting=&Pertahankan berkas yang sudah ada (disarankan) +ExistingFileNewerOverwriteOrKeepAll=&Lakukan ini untuk konflik (bentrok) berikutnya +;Inno6 +ErrorReadingExistingDest=Terjadi galat saat berusaha membaca berkas yang sudah ada: +ErrorChangingAttr=Terjadi galat saat berusaha mengubah atribusi berkas yang sudah ada: +ErrorCreatingTemp=Terjadi galat saat berusaha membuat berkas di direktori tujuan: +ErrorReadingSource=Terjadi galat saat berusaha membaca berkas asal: +ErrorCopying=Terjadi galat saat berusaha menyalin berkas: +ErrorReplacingExistingFile=Terjadi galat saat berusaha menimpa berkas yang sudah ada: +ErrorRestartReplace=RestartReplace gagal: +ErrorRenamingTemp=Terjadi galat saat berusaha mengubah nama berkas di direktori tujuan: +ErrorRegisterServer=Tidak dapat meregistrasi DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 gagal dengan kode akhir %1 +ErrorRegisterTypeLib=Tidak dapat meregistrasi berkas referensi: %1 + +;Inno6 +UninstallDisplayNameMark=%1 (%2) +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bita +UninstallDisplayNameMark64Bit=64-bita +UninstallDisplayNameMarkAllUsers=Semua pengguna +UninstallDisplayNameMarkCurrentUser=Pengguna saat ini +;Inno6 + +ErrorOpeningReadme=Terjadi galat saat berusaha membuka berkas README. +ErrorRestartingComputer=Kami gagal memulai ulang komputer. Silakan lakukan secara manual. + +UninstallNotFound=Berkas "%1" tidak ada. Tidak bisa melepas +UninstallOpenError=Berkas "%1" tidak dapat dibuka. Tidak bisa melepas +UninstallUnsupportedVer=Berkas catatan pelepas "%1" tidak dalam format yang kami kenali. Tidak bisa melepas +UninstallUnknownEntry=Entri tak dikenal (%1) ditemukan dalam catatan pelepas +ConfirmUninstall=Anda yakin ingin melepas %1 beserta semua komponennya? +UninstallOnlyOnWin64=Instalasi ini hanya bisa dilepas pada Windows 64-bita. +OnlyAdminCanUninstall=Instalasi ini hanya bisa dilepas oleh pengguna dengan izin administratif. +UninstallStatusLabel=Silakan tunggu selagi %1 dihapus dari komputer Anda. +UninstalledAll=%1 berhasil dihapus dari komputer Anda. +UninstalledMost=Selesai melepas %1.%n%nBeberapa elemen tidak dapat dihapus. Anda bisa menghapusnya secara manual. +UninstalledAndNeedsRestart=Untuk melengkapi pelepasan %1, komputer Anda perlu dimulai ulang.%n%nMulai ulang sekarang? +UninstallDataCorrupted=Berkas "%1" rusak. Tidak bisa melepas + +ConfirmDeleteSharedFileTitle=Hapus Berkas Bersama? +ConfirmDeleteSharedFile2=Sistem mengindikasi bahwa berkas bersama di bawah ini tidak lagi dipakai oleh program mana pun. Apa Anda ingin agar kami menghapusnya?%n%nBila masih ada program yang memakainya dan berkas ini dihapus, program tersebut dapat tidak berfungsi dengan semestinya. Bila Anda ragu, pilih No. Membiarkan berkas ini pada sistem Anda takkan membahayakan. +SharedFileNameLabel=Nama berkas: +SharedFileLocationLabel=Lokasi: +WizardUninstalling=Status Pelepasan +StatusUninstalling=Melepas %1... + +ShutdownBlockReasonInstallingApp=Memasang %1. +ShutdownBlockReasonUninstallingApp=Melepas %1. + +[CustomMessages] +NameAndVersion=%1 versi %2 +AdditionalIcons=Pintasan tambahan: +CreateDesktopIcon=Buat pintasan &desktop +CreateQuickLaunchIcon=Buat pintasan Pelontar &Cepat +ProgramOnTheWeb=%1 di Web +UninstallProgram=Lepas %1 +LaunchProgram=Jalankan %1 +AssocFileExtension=&Kaitkan %1 dengan ekstensi berkas %2 +AssocingFileExtension=Mengaitkan %1 dengan ekstensi berkas %2... +AutoStartProgramGroupDescription=Startup: +AutoStartProgram=Otomatis jalankan %1 +AddonHostProgramNotFound=%1 tidak dapat ditemukan di map yang Anda pilih.%n%nMaju terus? diff --git a/Files/Languages/Unofficial/Kazakh.islu b/Files/Languages/Unofficial/Kazakh.islu new file mode 100644 index 00000000..09a566c2 --- /dev/null +++ b/Files/Languages/Unofficial/Kazakh.islu @@ -0,0 +1,334 @@ +; *** Inno Setup version 5.5.0+ Kazakh messages *** +; +; Translated by Dauren Sarsenov, daur88@inbox.ru +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=<049A><0430><0437><0430><049B> +LanguageID=$043f +LanguageCodePage=0 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +DialogFontName=Tahoma +DialogFontSize=8 +WelcomeFontName=Tahoma +WelcomeFontSize=12 +TitleFontName=Tahoma +TitleFontSize=29 +CopyrightFontName=Tahoma +CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Орнату +SetupWindowTitle=%1 орнату +UninstallAppTitle=Жою +UninstallAppFullTitle=%1 жою + +; *** Misc. common +InformationTitle=Ақпарат +ConfirmTitle=Растау +ErrorTitle=Қате + +; *** SetupLdr messages +SetupLdrStartupMessage=Бұл шебер сіздің компьютеріңізге %1 бағдарламасын орнатпақшы, жалғастыруды қалайсыз ба? +LdrCannotCreateTemp=Уақытша файлдарды жасау мүмкін емес. Орнату тоқтатылды +LdrCannotExecTemp=Уақытша файлдар каталогындағы файлдарды орындау мүмкін емес. Орнату тоқтатылды + +; *** Startup error messages +LastErrorMessage=%1.%n%nҚате %2: %3 +SetupFileMissing=Орнату папкасында %1 файлы жоқ. Бағдарламаның жаңартылған нұсқасын алыңыз. +SetupFileCorrupt=Орнатылатын файлдар зақымданған. Бағдарламаның жаңартылған нұсқасын алыңыз. +SetupFileCorruptOrWrongVer=Орнатылатын файлдар зақымданған не нұсқалары сәйкес келмейді. Бағдарламаның жаңартылған нұсқасын алыңыз. +InvalidParameter=Команда жолында қате параметр көрсетілді:%n%n%1 +SetupAlreadyRunning=Орнату бағдарламасының басқа данасы ашылып тұр. +WindowsVersionNotSupported=Бұл бағдарлама сіздің Windows жүйеңізді қолдамайды. +WindowsServicePackRequired=Бұл бағдарлама %1 жаңарту бумасын (Service Pack) %2 не одан жаңасын талап етеді. +NotOnThisPlatform=Бұл бағдарлама %1 платформасында жұмыс істей алмайды. +OnlyOnThisPlatform=Бұл бағдарлама %1 платформасында жұмыс істей алады. +OnlyOnTheseArchitectures=Бұл бағдарлама төмендегі процессорларға арналған Windows жүйесінде ғана орнатыла алады:%n%n%1 +MissingWOW64APIs=Сіз қолданып отырған Windows жүйесінің 64-битті функциялары жоқ. Сіз %1 жаңарту бумасын (Service Pack) орнатып алуыңыз қажет. +WinVersionTooLowError=Бұл бағдарламаның жұмысына %2 не одан да жоғары нұсқалы %1 қажет. +WinVersionTooHighError=Бұл бағдарламаның жұмысына %2 не одан да төмен нұсқалы %1 қажет. +AdminPrivilegesRequired=Бұл бағдарламаны орнату үшін, жүйеге Администратор ретінде кіру қажет. +PowerUserPrivilegesRequired=Бұл бағдарламаны орнату үшін, жүйеге Администратор не «Қуатты қолданушы» (Power User) ретінде кіру қажет. +SetupAppRunningError=Орнату бағдарламасы %1 жегілгенін анықтады.%n%nАртық бағдарламаны жабыңыз да, жалғастыру үшін «OK», тоқтату үшін «Бас тарту» кнопкасын басыңыз. +UninstallAppRunningError=Жою бағдарламасы %1 жегілгенін анықтады.%n%nАртық бағдарламаны жабыңыз да, жалғастыру үшін «OK», тоқтату үшін «Бас тарту» кнопкасын басыңыз. + +; *** Misc. errors +ErrorCreatingDir="%1" папкасын жасау мүмкін емес +ErrorTooManyFilesInDir="%1" каталогында файл жасау мүмкін емес, өйткені ішіндегі файл саны тым көп + +; *** Setup common messages +ExitSetupTitle=Орнату бағдарламасынан шығу +ExitSetupMessage=Орнату соңына дейін аяқталмады. Егер орнатуды тоқтатсаңыз, бағдарлама орнатылмайтын болады.%n%nОрнатуды кейін де қайта бастауға болады.%n%nОрнатуды тоқтатуды қалайсыз ба? +AboutSetupMenuItem=&Бағдарлама туралы... +AboutSetupTitle=Орнату бағдарламасы туралы +AboutSetupMessage=%1, нұсқасы %2%n%3%n%nСайты %1:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< А&ртқа +ButtonNext=&Келесі > +ButtonInstall=&Орнату +ButtonOK=OK +ButtonCancel=Бас тарту +ButtonYes=&Иә +ButtonYesToAll=&Барлығына Иә +ButtonNo=&Жоқ +ButtonNoToAll=Ба&рлығына Жоқ +ButtonFinish=А&яқтау +ButtonBrowse=&Шолу... +ButtonWizardBrowse=&Шолу... +ButtonNewFolder=&Папка жасау + +; *** "Select Language" dialog messages +SelectLanguageTitle=Тіл таңдаңыз +SelectLanguageLabel=Орнату бағдарламасының тілін таңдаңыз: + +; *** Common wizard text +ClickNext=Жалғастыру үшін «Келесі», бағдарламадан шығу үшін «Бас тарту» кнопкасын басыңыз. +BeveledLabel= +BrowseDialogTitle=Папка шолу +BrowseDialogLabel=Қалаған папкаңызды таңдап, «ОК» кнопкасын басыңыз. +NewFolderName=Жаңа папка + +; *** "Welcome" wizard page +WelcomeLabel1=[name] орнату шеберіне %nқош келдіңіз +WelcomeLabel2=Бұл бағдарлама сіздің компьютеріңізге [name/ver] орнататын болады.%n%nЖалғастырмас бұрын, артық бағдарламаны жапқан жөн. + +; *** "Password" wizard page +WizardPassword=Пароль +PasswordLabel1=Бұл бағдарлама парольмен қорғалған. +PasswordLabel3=Парольді енгізіп, «Келесі» кнопкасын басыңыз. Јріптің үлкен-кішілігі ескерілетінін еске саламыз. +PasswordEditLabel=&Пароль: +IncorrectPassword=Сіз енгізген пароль қате, тағы да қайталап көріңіз. + +; *** "License Agreement" wizard page +WizardLicense=Лицензиялық Келісім +LicenseLabel=Орнатуды жалғастырмас бұрын осы келісімді оқып шығыңыз. +LicenseLabel3=Орнатуды жалғастыру үшін төмендегі Лицензиялық Келісімнің Шарттарын қабылдау керек. +LicenseAccepted=Келісім шарттарын қ&абылдаймын +LicenseNotAccepted=Келісім &шарттарын қабылдамаймын + +; *** "Information" wizard pages +WizardInfoBefore=Ақпарат +InfoBeforeLabel=Орнатуды жалғастырмас бұрын осы ақпаратты оқып шығыңыз. +InfoBeforeClickLabel=Дайын болғанда, «Келесі» кнопкасын басыңыз. +WizardInfoAfter=Ақпарат +InfoAfterLabel=Орнатуды жалғастырмас бұрын осы ақпаратты оқып шығыңыз. +InfoAfterClickLabel=Дайын болғанда, «Келесі» кнопкасын басыңыз. + +; *** "User Information" wizard page +WizardUserInfo=Қолданушы туралы ақпарат +UserInfoDesc=Өзіңіз жайлы біраз ақпарат енгізгеніңізді сұраймыз. +UserInfoName=Қ&олданушының аты-жөні: +UserInfoOrg=Жұмыс істейтін &мекемесі: +UserInfoSerial=&Сериялық нөмір: +UserInfoNameRequired=Есіміңізді енгізу міндетті. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Орнату папкасын таңдау +SelectDirDesc=[name] бағдарламасының қай папкаға орнатылғанын қалайсыз? +SelectDirLabel3=[name] мына папкаға орнатылатын болады. +SelectDirBrowseLabel=Жалғастыру үшін «Келесі» кнопкасын басыңыз. Өзге папка таңдаймын десеңіз, «Шолу» кнопкасын басыңыз. +DiskSpaceMBLabel=Кем дегенде [mb] Мб бос орын қажет. +CannotInstallToNetworkDrive=Бағдарлама желілік құрылғыға орнатыла алмайды. +CannotInstallToUNCPath=Бағдарлама UNC түрінде көрсетілген папкаға орнатыла алмайды. +InvalidPath=Орнату жолы диск әрпімен бірге түгел жазылуы тиіс; мысалы:%n%nC:\APP%n%nне UNC түрінде:%n%n\\сервер_аты\ресурс_аты +InvalidDrive=Сіз таңдаған диск не желілік жол қатынасуға дайын емес не олар мүлдем жоқ. Басқасын таңдап көріңіз. +DiskSpaceWarningTitle=Дискіде орын жоқ +DiskSpaceWarning=Орнату үшін кем дегенде %1 Кб бос орын қажет, сіз таңдаған дискте небары %2 Кб бос орын бар.%n%nСоған қарамастан орнатуды жалғастырасыз ба? +DirNameTooLong=Папканың аты не оның жолы тым ұзын. +InvalidDirName=Сіз көрсеткен папканың аты жарамсыз. +BadDirName32=Папка атында мына таңбалар болмау керек: %n%n%1 +DirExistsTitle=Папка бар +DirExists=%1%n%n%n%n папкасы бұрыннан бар. Соған қарамастан жалғастыруды қалайсыз ба? +DirDoesntExistTitle=Папка жоқ +DirDoesntExist=%1%n%n%n%n папкасы жоқ. Жасай салайық па? + +; *** "Select Components" wizard page +WizardSelectComponents=Компонент таңдау +SelectComponentsDesc=Қай компоненттер орнатылуға тиіс? +SelectComponentsLabel2=Қалаған компоненттердің алдына белгі қойыңыз; орнатылуға тиіс емес компоненттен белгіні алып тастаңыз. Дайын болғанда, «Келесі» кнопкасын басыңыз. +FullInstallation=Толығымен орнату +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Шағын орнату +CustomInstallation=Таңдаумен орнату +NoUninstallWarningTitle=Орнатылған компоненттер +NoUninstallWarning=Орнату бағдарламасы мына компоненттердің орнатылғанын тапты:%n%n%1%n%nТаңдауды болдырмау оларды бәрібір жоймайды.%n%nЖалғастырайық па? +ComponentSize1=%1 Кб +ComponentSize2=%1 Мб +ComponentsDiskSpaceMBLabel=Қазіргі таңдауға кем дегенде [mb] Мб бос орын керек. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Қосымша тапсырма таңдаңыз +SelectTasksDesc=Қосымша қандай тапсырма орындау керек? +SelectTasksLabel2=[name] орнату кезінде орындалатын тапсырма таңдаңыз да, «Келесі» кнопкасын басыңыз. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=«Бастау» менюіндегі папканы таңдаңыз +SelectStartMenuFolderDesc=Лақаптар қай жерде жасалуы тиіс? +SelectStartMenuFolderLabel3=Орнату бағдарламасы лақаптарды «Бастау» менюінің мына папкасына жасайды. +SelectStartMenuFolderBrowseLabel=Жалғастыру үшін «Келесі» кнопкасын басыңыз. Басқа папка таңдаймын десеңіз «Шолу» кнопкасын басыңыз. +MustEnterGroupName=Сіз папканың атын енгізуіңіз тиіс. +GroupNameTooLong=Папканың аты не оның жолы тым ұзақ. +InvalidGroupName=Сіз көрсеткен папканың аты жарамсыз. +BadGroupName=Папка атында мына таңбалар болмау керек: %n%n%1 +NoProgramGroupCheck2=«Бастау» менюі&нде папка жасалмасын + +; *** "Ready to Install" wizard page +WizardReady=Орнатуды бастауға бәрі дайын +ReadyLabel1=[name] сіздің компьютерге орнатылуға дайын тұр. +ReadyLabel2a=Жалғастыру үшін «Орнату» кнопкасын басыңыз, орнату опцияларын өзгерту не қарау үшін «Артқа» кнопкасын басыңыз. +ReadyLabel2b=Жалғастыру үшін «Орнату» кнопкасын басыңыз. +ReadyMemoUserInfo=Қолданушы туралы ақпарат: +ReadyMemoDir=Орнатылатын папка: +ReadyMemoType=Орнату түрі: +ReadyMemoComponents=Таңдалған компонент: +ReadyMemoGroup=«Бастау» менюіндегі папка: +ReadyMemoTasks=Қосымша тапсырмалар: + +; *** "Preparing to Install" wizard page +WizardPreparing=Орнатуға дайындық +PreparingDesc=[name] бағдарламасын орнатуға дайындық жүруде. +PreviousInstallNotCompleted=Алдыңғы рет жасалған орнату не жою аяғына дейін жүргізілмеді. Сол орнатуды аяқтау үшін компьютерді қайта қосу керек.%n%nСодан кейін орнату бағдарламасын қосып, [name] орнатуын аяқтау керек. +CannotContinue=Орнатуды жалғастыру мүмкін емес, шығу үшін «Бас тарту» кнопкасын басыңыз. +ApplicationsFound=Мына бағдарламалар орнату кезінде жаңартылатын файлдарды пайдалануда. Орнату кезінде осы бағдарламаларды жабуға рұқсат берген жөн. +ApplicationsFound2=Мына бағдарламалар орнату кезінде жаңартылатын файлдарды пайдалануда. Орнату кезінде осы бағдарламаларды жабуға рұқсат берген жөн. Орнату аяқталған соң бағдарламалар қайтадан ашылады. +CloseApplications=Бағ&дарламаларды өздігінен жабу +DontCloseApplications=Бағдарламаларды &жаппау + +; *** "Installing" wizard page +WizardInstalling=Орнату +InstallingLabel=[name] сіздің компьютерге орнатылып біткенше күте тұрыңыз. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=[name] орнату Шеберін аяқтау +FinishedLabelNoIcons=[name] бағдарламасы сіздің компьютерге орнатылды. +FinishedLabel=[name] бағдарламасы сіздің компьютерге орнатылды. Оны сәйкес белгімен қосуға болады. +ClickFinish=Орнату бағдарламасынан үшін «Аяқтау» кнопкасын басыңыз. +FinishedRestartLabel=[name] орнатуды аяқтау үшін компьютерді қайта қосу керек. Компьютерді қайта қосайық па? +FinishedRestartMessage=[name] орнатуды аяқтау үшін компьютерді қайта қосу керек.%n%nКомпьютерді қайта қосайық па? +ShowReadmeCheck=README файлын оқу +YesRadio=&Иә, компьютер қайта қосылсын +NoRadio=&Жоқ, кейінге қалдырылсын +; used for example as 'Run MyProg.exe' +RunEntryExec=%1 ашу +; used for example as 'View Readme.txt' +RunEntryShellExec=%1 ашу + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Келесі дискті енгізу қажет +SelectDiskLabel2=%1 диск салып, «OK» кнопкасын басыңыз.%n%nЕгер ол дисктің файлдарын басқа жерден табуға болса, төмендегі жолға көрсетуге болады. +PathLabel=&Жол: +FileNotInDir2="%1" файлы "%2" папкасында табылмады. Дұрыс дискті салыңыз не басқа папка көрсетіңіз. +SelectDirectoryLabel=Келесі дисктің жолын енгізіңіз. + +; *** Installation phase messages +SetupAborted=Орнату аяқталмады.%n%nПайда болған проблемаларды жойып, қайта көріңіз. +EntryAbortRetryIgnore=Қайталап көру үшін «Қайталау», ары қарай бұл файлсыз жалғастыру үшін «Елемеу», орнатуды тоқтату үшін «Болдырмау» кнопкасын басыңыз. + +; *** Installation status messages +StatusClosingApplications=Бағдарламаларды жабу... +StatusCreateDirs=Папка жасау... +StatusExtractFiles=Файлдарды шығару... +StatusCreateIcons=Бағдарлама лақаптарын жасау... +StatusCreateIniEntries=INI-файлдарын жасау... +StatusCreateRegistryEntries=Реестр жазбаларын орналастыру... +StatusRegisterFiles=Файлдарды тіркеу... +StatusSavingUninstall=Бағдарламаны жою туралы ақпаратты сақтау... +StatusRunProgram=Орнатуды аяқтау... +StatusRestartingApplications=Бағдарламаларды қайтадан жүктеу... +StatusRollback=Жасалған өзгертулерді қалпына келтіру... + +; *** Misc. errors +ErrorInternal2=Ішкі қате: %1 +ErrorFunctionFailedNoCode=%1: қате +ErrorFunctionFailed=%1: қате; коды %2 +ErrorFunctionFailedWithMessage=%1: қате; коды %2.%n%3 +ErrorExecutingProgram=%1%n файлын жегу мүмкін емес + +; *** Registry errors +ErrorRegOpenKey=Реестр кілтін ашуда қате:%n%1\%2 +ErrorRegCreateKey=Реестр кілтін жасауда қате:%n%1\%2 +ErrorRegWriteKey=Реестр кілтін жазуда қате:%n%1\%2 + +; *** INI errors +ErrorIniEntry="%1" INI-файлына жазу қосу мүмкін емес. + +; *** File copying errors +FileAbortRetryIgnore=Қайталау үшін «Қайталау», елемеу үшін «Елемеу», бағдарламадан шығу үшін «Болдырмау» кнопкасын басыңыз. +FileAbortRetryIgnore2=Қайталау үшін «Қайталау», елемеу үшін «Елемеу», бағдарламадан шығу үшін «Болдырмау» кнопкасын басыңыз. +SourceIsCorrupted=Бастапқы файлдар зақымданған +SourceDoesntExist="%1" бастапқы файлы табылмады +ExistingFileReadOnly=Бұрыннан бар файл «тек оқуға» арналған.%n%nБұл атрубитты жою үшін «Қайталау», файлды елемеу үшін «Елемеу», бағдарламадан шығу үшін «Болдырмау» кнопкасын басыңыз. +ErrorReadingExistingDest=Файл оқу кезінде қате кетті: +FileExists=Файл бұрыннан бар.%n%nЇстіне жазуды қалайсыз ба? +ExistingFileNewer=Бұрыннан бар файл орнатылайын деп жатқанынан жаңарақ. Бұрыннан бар файлды сақтап қалу ұсынылады.%n%nБұрыннан бар файлды сақтауды қалайсыз ба? +ErrorChangingAttr=Файл атрибутын өзгерту кезінде қате кетті: +ErrorCreatingTemp=Папка ішіне файл жасау кезінде қате кетті: +ErrorReadingSource=Бастапқы файлды оқу кезінде қате кетті: +ErrorCopying=Файлды көшіру кезінде қате кетті: +ErrorReplacingExistingFile=Файлды ауыстыру кезінде қате кетті: +ErrorRestartReplace=RestartReplace қатесі: +ErrorRenamingTemp=Папка ішінде файлды қайта атау кезінде қате кетті: +ErrorRegisterServer=DLL/OCX тіркеу мүмкін емес: %1 +ErrorRegSvr32Failed=RegSvr32 %1 кодын қайтарып, сәтсіз аяқталды +ErrorRegisterTypeLib=Тип жинағын (Type Library) тіркеу мүмкін емес: %1 + +; *** Post-installation errors +ErrorOpeningReadme=README файлын ашу кезінде қате кетті. +ErrorRestartingComputer=Орнату бағдарламасы компьютерді қайта қоса алмады. Компьютерді қолдан қайта қосыңыз. + +; *** Uninstaller messages +UninstallNotFound="%1" файлы табылмады, жоюды жалғастыру мүмкін емес. +UninstallOpenError="%1" файлы ашылмады. Жоюды жалғастыру мүмкін емес +UninstallUnsupportedVer="%1" жою үшін арналған протокол файлы жою бағдарламасының бұл нұсқасына таныс емес. Жоюды жалғастыру мүмкін емес +UninstallUnknownEntry=Жою үшін арналған протоколда белгісіз пункт табылды (%1) +ConfirmUninstall=Сіз шынымен %1 және оның барлық компонентін жоюды қалайсыз ба? +UninstallOnlyOnWin64=Бұл бағдарламаны тек 64-биттік Windows ортасында жоюға болады. +OnlyAdminCanUninstall=Бұл бағдарламаны тек администратор құқықтары бар қолданушы жоя алады. +UninstallStatusLabel=%1 компьютеріңізден жойылып біткенше күте тұрыңыз. +UninstalledAll=%1 бағдарламасы компьютеріңізден толығымен жойылды. +UninstalledMost=%1 жою аяқталды.%n%nКейбір элементтерді жою мүмкін болмады, сондықтан оларды қолдан жою керек болады. +UninstalledAndNeedsRestart=%1 бағдарламасын жоюды жалғастыру үшін компьютеріңізді қайта қосу керек.%n%nҚайта қосуды қазір орындауды қалайсыз ба? +UninstallDataCorrupted="%1" файлы зақымданған. Жоюды жалғастыру мүмкін емес + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Ортақ файлды жою? +ConfirmDeleteSharedFile2=Жүйедегі мына ортақ файл басқа ешқандай бағдарламамен қолданбаған сияқты. Осы файлды жоюды мақұлдайсыз ба?%n%nЕгер осы файлды басқа бір бағдарламалар қолданатын болса, олар дұрыс жұмыс істемей қалуы мүмкін. Егер не істеріңізді білмесеңіз, «Жоқ» кнопкасын басыңыз. Жойылмай қалған файл жүйеңізге теріс әсер етпейді. +SharedFileNameLabel=Файл аты: +SharedFileLocationLabel=Орналасуы: +WizardUninstalling=Жою күйі +StatusUninstalling=%1 жою... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=%1 орнату. +ShutdownBlockReasonUninstallingApp=%1 жою. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1, версиясы %2 +AdditionalIcons=Қосымша белгішелер: +CreateDesktopIcon=Жұмыс үстелінде белгіше &жасау +CreateQuickLaunchIcon=Жедел іске қосу панелінде белгіше ж&асау +ProgramOnTheWeb=Интернеттегі %1 сайты +UninstallProgram=%1 жою +LaunchProgram=%1 ашу +AssocFileExtension=%1 бағ&дарламасын %2 кеңейтпесімен байланыстыру +AssocingFileExtension=%1 бағдарламасын %2 файлдарымен байланыстыру... +AutoStartProgramGroupDescription=Startup: +AutoStartProgram=Automatically start %1 +AddonHostProgramNotFound=%1 could not be located in the folder you selected.%n%nDo you want to continue anyway? diff --git a/Files/Languages/Unofficial/Kurdish.isl b/Files/Languages/Unofficial/Kurdish.isl new file mode 100644 index 00000000..dc439c9e --- /dev/null +++ b/Files/Languages/Unofficial/Kurdish.isl @@ -0,0 +1,342 @@ +; *** Inno Setup version 5.5.0+ Kurdish messages *** +; +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). +; Wergr : Hezand Al-Mihrewan +; > Serk bidin malpera me +; Web page : http://www.wergerine.com(Navenda Wergern Kurd) +; > Ji bo tkily +; E-mail : hezand@muslim.com (Hezand Al-Mihrewan) +; > Dema wergerandin (www.bernamegeh.net) +; Ev wergerandin dema 19/09/2012 hatye barkirin + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Kurdish +LanguageID=$0801 +LanguageCodePage=0 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Sazkirin +SetupWindowTitle=Sazkirina %1 +UninstallAppTitle=Rake +UninstallAppFullTitle=%1 Rake + +; *** Misc. common +InformationTitle=Agah +ConfirmTitle=Pirsiyar +ErrorTitle=Kmas + +; *** SetupLdr messages +SetupLdrStartupMessage=Ev sazgr bernameya %1' bar bike. Tu dixwaz bidomn? +LdrCannotCreateTemp=Dosyn demdem nehatkirin. Sazkirin betal b. +LdrCannotExecTemp=Dosya rbara demdem nehatxebitandin. Sazkirin betal b. + +; *** Startup error messages +LastErrorMessage=%1.%n%nKmas %2: %3 +SetupFileMissing=Dosya %1 di nav rbara sazkirin nehatdtin. Ji kerema xwe kmasy biguherin anj kopyeke bername ji n bikin. +SetupFileCorrupt=Dosyayn sazkirin xirab bye. Ji kerema kopyeke bername ji n bikin. +SetupFileCorruptOrWrongVer=Dibe ku dosyayn sazkirin xirab bye anj sazkirin v guhertoyva hev nake. Ji kerema xwe kmasy biguherin anj kopyeke bername ji n bikin. +InvalidParameter=rzika ferman de parametreke betal heye:%n%n%1 +SetupAlreadyRunning=Sazkar jixwe dixebite. +WindowsVersionNotSupported=Ev bername guhertoya Windows li komputer hev nake. +WindowsServicePackRequired=Ev bername pwste ku guhertoya %1 Service Pack %2 anj guhertoyn din. +NotOnThisPlatform=Ev bername ser %1 nay xebitandin. +OnlyOnThisPlatform=Div ev bername biten ser %1 by xebitandin. +OnlyOnTheseArchitectures=Ev bername biten xwedy van guhertoyn Windows' jr tey xebitandin:%n%n%1 +MissingWOW64APIs=Guhertoya Windows' hn kar tnin, ji bo ku sazker barkirina 64-bit' bike xwed taybetyn pwst nne. Ji bo rakirina v kmasy div tu Service Pack %1 bar bik. +WinVersionTooLowError=Ji bo kar ann v bernam div guhertoya %1 %2 anj guhertoyn p bar bibe. +WinVersionTooHighError=Ev bername guhertoya %1 %2 anj guhertoyn p naxebite. +AdminPrivilegesRequired=Dema sazkirina v bernam div rvebr danitin by vekirin. +PowerUserPrivilegesRequired=Dema sazkirina v bernam div Rvebr anj endam komaleya Ser Rvebr tketin by kirin. +SetupAppRunningError=Sazker xebitandina bernameya %1 destnan kir.%n%nJi kerema xwe re hem pareyn bixebit v bernam niha bigre, Peyre Ji bo berdewam Temam' bitikne anj ji bo derketin Betal' bitikne. +UninstallAppRunningError=Rakirin xebitandina bernameya %1 destnan kir..%n%nJi kerema xwe re hem pareyn bixebit v bernam niha bigre, Peyre ji bo berdewam Temam' bitikne anj ji bo derketin Betal' bitikne. + +; *** Misc. errors +ErrorCreatingDir=Sazker rbara" %1 " avanekir. +ErrorTooManyFilesInDir=Rbara " %1 " de dosyek nehatavakirin. ji ber ku rbar dosyn her zde vehewandye. + +; *** Setup common messages +ExitSetupTitle=Sazkirin Derketin +ExitSetupMessage=Tu bawer ku dixwaz Sazkirin derkev? +AboutSetupMenuItem=D&erbar Sazker... +AboutSetupTitle=Derbar Sazker +AboutSetupMessage=%1 %2 guherto%n%3%n%n%1 Internet-Seite:%n%4 +AboutSetupNote= +TranslatorNote=Bernameyn sazkirin her ba digerin serk bidin malpera me...%nhttp://www.bernamegeh.net + +; *** Buttons +ButtonBack=< Veg&ere +ButtonNext=Bi&domne > +ButtonInstall=&Sazbike +ButtonOK=Temam +ButtonCancel=Betal +ButtonYes=Be&l +ButtonYesToAll=Hemyan E&r +ButtonNo=&Na +ButtonNoToAll=Hemyan N&a +ButtonFinish=&Biqedne +ButtonBrowse=&avlgern... +ButtonWizardBrowse=avlger&n... +ButtonNewFolder=Rbarek n a&va bike + +; *** "Select Language" dialog messages +SelectLanguageTitle=Hilbijartina Zman Sazkirin +SelectLanguageLabel= Dema sazkirin zman hn kar tnin hilbijre: + +; *** Common wizard text +ClickNext=Ji bo berdewam Bidomne'y , ji bo derketin Betal ' bitikne. +BeveledLabel= +BrowseDialogTitle=avlgerne Rbar +BrowseDialogLabel=Lsteya jrde rbarek hilbijre, pa bikoja Temam' bitikne. +NewFolderName=Rbara N + +; *** "Welcome" wizard page +WelcomeLabel1=Hn Bixr Hatin Srbazya Sazkirina [name]. +WelcomeLabel2=Sazker niha bernameya [name] li komptura te saz bike.%n%nBer tu dest bi sazkirin bik.Em pnyar dikin tu hem bernameyn vekir bigir. + +; *** "Password" wizard page +WizardPassword=fre +PasswordLabel1=Ev sazker bi fre hatye parastin. +PasswordLabel3=Ji kerema xwe frey binivsin. Pa ji bo berdewam Bidomne'y bitikne. Dema hn frey dinivsin bala xwe bidin tpn Mezin-Pik. +PasswordEditLabel=&fre: +IncorrectPassword=freya hate nivs ewtye. Dsa biceribne. + +; *** "License Agreement" wizard page +WizardLicense=Peymana Lsans +LicenseLabel=Berya domandin girnge ku tu agahyn jr bixwn +LicenseLabel3=Ji kerema xwe re Peymana Lsans bixwne. Ji bo sazkirina bernam div tu ertn peyman bipejirn.. +LicenseAccepted=Ez Peyman &Dipejirnim +LicenseNotAccepted=Ez Peyman &Napejirnim + +; *** "Information" wizard pages +WizardInfoBefore=Agah +InfoBeforeLabel=Berya domandin girnge ku tu agahyn jr bixwn +InfoBeforeClickLabel=Dema tu Sazkerva domandin amadeb Bidomne'y bitikne. +WizardInfoAfter=Agah +InfoAfterLabel=Berya domandin girnge ku tu agahyn jr bixwn. +InfoAfterClickLabel=Dema tu Sazkerva domandin amadeb Bidomne'y bitikne. + +; *** "User Information" wizard page +WizardUserInfo=Agahyn Bikarhner +UserInfoDesc=Ji kerema xwe agahyn xwe binivse. +UserInfoName=N&av Bikarhner: +UserInfoOrg=Par&dar: +UserInfoSerial=&Jimara Ser: +UserInfoNameRequired=Div tu navek binivs. + +; *** "Select Destination Directory" wizard page +WizardSelectDir=Rbara By Sazkirin Hilbijre +SelectDirDesc=Bernameya [name] kjan peldank by sazkirin? +SelectDirLabel3=Sazker bernameya [name] ji peldanka jre saz bike. +SelectDirBrowseLabel=Ji bo berdewam Bidomne'y bitikne. Ji bo tu li peldankeke din saz bik avlgern' bitikne. +DiskSpaceMBLabel = Ev bername her hindik [mb] MB herma disk pwste.. +CannotInstallToNetworkDrive = Hn sazkar nikarin bar bikin ajokarek tor. +CannotInstallToUNCPath = Hn nikarin sazkar bar bikin rya UNC. +InvalidPath=Div tu bitev nav ajokarva rya rast binivs; Mnan ,Mnak %nC:\APP%n%n anj ryeke UNC %n%n\\pkkar\parvedann%n%n binivs. +InvalidDrive=Ajokara hate hilbijart nay dtin anj nay gehtin. Ji kerema xwe re ajokareke din hilbijre. +DiskSpaceWarningTitle=Herma vala ya nebes +DiskSpaceWarning=Sazker her hindik %1 KB herma vala ya ku by karann pwste. L bel dska hilbijartde %2 KB ch vala heye.%n%nDsa j dixwaz bidomn? +DirNameTooLong=Nav rbar anj r zehf dirje. +InvalidDirName=Nav rbar betale. +BadDirName32=Nav rbar ,qet navn mnan hilnade:%n%n%1 +DirExistsTitle=Rbar Hatdtin +DirExists=Rbar:%n%n%1%n%n tde heye. Dsa j tu bawer ku dixwaz v rbar saz bik? +DirDoesntExistTitle=Rbar Nehatdtin +DirDoesntExist=Rbar:%n%n%1%n%ntde tune. Dixwaz v rbar bik? + +; *** "Select Components" wizard page +WizardSelectComponents=Hevbar Hilbijre +SelectComponentsDesc=Kjan hevbar by sazkirin? +SelectComponentsLabel2=Hevbarn tu dixwaz saz bik hilbijre; n naxwaz paqij bike.Dema tu ji bo domandin amade by Bidomne'y bitikne. +FullInstallation=Sazkirina Bitam +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Sazkirina Normal +CustomInstallation=Sazkirina Taybet +NoUninstallWarningTitle=Hevbarn mewcud +NoUninstallWarning=Sazker destnan kir ku hevbarn jr sazkirye:%n%n%1%n%nHilbijartina van hevbara rak l bel ev hevbar j nab.%n%nDsa j dixwaz bidomn? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceMBLabel=Ji bo hevbarn bijart her hindik [mb] MB herma dsk pwste. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Peywir Veser Hilbijre +SelectTasksDesc=Kjan peywir by kirin? +SelectTasksLabel2=Dema sazkirina [name] kjan peywir veser dixwaz hilbijr bidomne'y bitikne. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Rbara Peka Destpk Hilbijre +SelectStartMenuFolderDesc=Sazker kineriyn bernam tke ku? +SelectStartMenuFolderLabel3=Sazker kineriyn bernam peldanka peka destpk jr bide chkirin. +SelectStartMenuFolderBrowseLabel=Ji bo berdewam, Bidomne'y bitikne. Peldankeke din bixwaz hilbijr, avlgern' bitikne. +MustEnterGroupName=Div tu navek rbar binivs. +GroupNameTooLong=Nav rbar anj r zehf dirje. +InvalidGroupName=Nav rbar nebese. +BadGroupName=Nav rbar ,qet navn mnan hilnade:%n%n%1 +NoProgramGroupCheck2=&peldank peka destpk de ava bike + +; *** "Ready to Install" wizard page +WizardReady=Ji bo Sazkirin Amadaye +ReadyLabel1=Sazker amadeye ku bernameya [name] ji komptura te saz bike. +ReadyLabel2a= Ji bo berdewama sazkirin Sazbike'y , Ji guhertina mihengan Vegere'y bitikne. +ReadyLabel2b=Ji bi domandina sazkirin Sazbike'y bitikne. +ReadyMemoUserInfo=Agahya Bikarhner: +ReadyMemoDir=Peldanka Armanckir: +ReadyMemoType=Cureya Sazkirin: +ReadyMemoComponents=Hevbarn Hilbijart: +ReadyMemoGroup=Menya Destpk : +ReadyMemoTasks=Peywirn Veser: + +; *** "Preparing to Install" wizard page +WizardPreparing=Sazkirin Tey Amadekirin +PreparingDesc=Sazker ji bo bernameya [name]' ji komptura te saz bike amade dibe. +PreviousInstallNotCompleted=Kirarya ad bernameya Sazkirin/Rakirin'a ya p qedya.Ji bo qedandina kirarya sazkirina ya p div tu komptur ji n bid destpkirin.%n%nPey destpkirina komptur ,sazkirin bixebitne kirarya bernameya [name]' dsa bidomne. +CannotContinue=Sazker nikare berdewam bike. Ji kerema xwe Betal' bitikne derkeve. +ApplicationsFound=Sepann jr div dosyayn aly sazkar by rojane kirin kar tne.Sazkar bi otomatk van bernameya digire ,em pnyar dikin ku tu destr bid. +ApplicationsFound2=Sepann jr div dosyayn aly sazkar by rojane kirin kar tne.Sazkar bi otomatk van bernameya digire ,em pnyar dikin ku tu destr bid.Pey qedandina saz kirin, Sazka sepanan dsa biceribne. +CloseApplications=&Bi otomatk sepann vekir bigire +DontCloseApplications=&Sepann vekir negire + +; *** "Installing" wizard page +WizardInstalling=Ty Sazkirin +InstallingLabel=Ji kerema xwe re dema sazkirina [name] by kirin raweste. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Srbaza Sazkara [name] ty qedandin... +FinishedLabelNoIcons=Sazkar kirarya bernameya [name]' ji komptura te qedand. +FinishedLabel=Sazkar kirarya bernameya [name]' ji komptura te qedand. Bitikne direfn (icon) hatin barkirin bernam bixebitne. +ClickFinish=Ji bo derketina Sazker Biqedne'y bitikne. +FinishedRestartLabel=Ji bi dawkirina bernameya [name], Sazker komptur ji n dest p bike. Bila komptura we ji n by destp kirin? +FinishedRestartMessage=Ji bo dawkirina sazkirina [name], div komptur ji n by destp kirin. %n%nBila komptura we ji n by destp kirin? +ShowReadmeCheck=Dixwazim dosya Min Bixwne bibnim. +YesRadio=&Bel , komptur ji n desp bike. +NoRadio=&Na, ez careke din destp bikim. +; used for example as 'Run MyProg.exe' +RunEntryExec=Sepana %1 bixebitne +; used for example as 'View Readme.txt' +RunEntryShellExec=Dosya %1 nan bide + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Dska ya pa tk +SelectDiskLabel2=Dska jimare %1 tkin, Temam' bitikne.%n%nHeke dosyan chek din be ch rast binivse anj avligern' bitikne. +PathLabel=&R: +FileNotInDir2=Dosya " %1 " ji rbara " %2 " nehatdtin. Ji kerema xwe re dska rast anj dosyaya rast hilbijre. +SelectDirectoryLabel=Ji kerema xwe re ch dska ya pa diyar bike. + +; *** Installation phase messages +SetupAborted=Sazkirin nehatqedandin.%n%nJi kerema xwe re kmasy biguhere anj Sazkirin' dsa bixebitne. +EntryAbortRetryIgnore=Ji bo ceribandin "Dsa biceribne" y , dsa j dixwaz berdewam bik Nehewisne'y, Ji bo betal kirina sazy Betal' bitikne. + +; *** Installation status messages +StatusClosingApplications=Sepann vekir ty vegirtin... +StatusCreateDirs=Rbar ty avakirin... +StatusExtractFiles=Dosyan ty derxistin... +StatusCreateIcons=Kineriyn bernem ty avakirin... +StatusCreateIniEntries=Nvs INI ty avakirin... +StatusCreateRegistryEntries=Nvs Lnsk Qeyd ty avakirin... +StatusRegisterFiles=Dosyan ji pergal tey tomarkirin... +StatusSavingUninstall=Agahy rakirin tey tomarkirin... +StatusRunProgram=Sazkirin ty qedandin... +StatusRestartingApplications=Sepanan ji n dest p dike... +StatusRollback=Cuday ty vegirtin... + +; *** Misc. errors +ErrorInternal2=ewtya Hndir: %1 +ErrorFunctionFailedNoCode=%1 neserkeft b. +ErrorFunctionFailed=%1 neserkeft b; kod %2 +ErrorFunctionFailedWithMessage=%1 neserkeft b ; kod %2.%n%3 +ErrorExecutingProgram=Dosya %1 nehatxebitandin. + +; *** Registry errors +ErrorRegOpenKey=Dema vekirina kilda lnska qeyd ya jr kmasyek b:%n%1\%2 +ErrorRegCreateKey=Dema vekirina kilda lnska qeyd ya jr kmasyek b:%n%1\%2 +ErrorRegWriteKey=Dema vekirina kilda lnska qeyd ya jr kmasyek b:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Dosya " %1 " ji nivsa kmasya nvs INI. + +; *** File copying errors +FileAbortRetryIgnore=Ji bo ceribandin "Dsa biceribne" y , dsa j dixwaz berdewam bik Nehewisne'y(Pnyar Nakin), Ji bo betal kirina sazy Betal' bitikne. +FileAbortRetryIgnore2=Ji bo ceribandin "Dsa biceribne" y , dsa j dixwaz berdewam bik Nehewisne'y(Pnyar Nakin), Ji bo betal kirina sazy Betal' bitikne. +SourceIsCorrupted=Dosya avkan xirab bye +SourceDoesntExist=%1 dosya avkan nehatdtin. +ExistingFileReadOnly=Dosya Ten ty xwandin.%n%nJi bo ceribandin taybetya Ten xwandin rake "Dsa biceribne" y , dsa j dixwaz berdewam bik Nehewisne'y, Ji bo betal kirina sazy Betal' bitikne. +ErrorReadingExistingDest=Dema xwandina dosyay ewtyek b : +FileExists=Dosya tde heye.%n%nDixwaz ser sazkirin binivs? +ExistingFileNewer=Dosya tde heye barkirina Sazker' dixwaz j ntire. Em pnyar dikin ku Dosyaya hey verin.%n%nDosyaya hey dixwaz by veartin? +ErrorChangingAttr=Dema guhertina dosya tde hey ewtyek b: +ErrorCreatingTemp=Dema avakirina dosya peldanka armackir ewtyek b: +ErrorReadingSource=Dema xwandina dosya avkan de ewtyek b: +ErrorCopying=Dema kopkirina dosyek ewtyek b: +ErrorReplacingExistingFile=Dema guhertina dosya tde hey ewtyek b: +ErrorRestartReplace=RestartReplace neserkeft b: +ErrorRenamingTemp=Dema guhertina dosya peldanka armanckir hey ewtyek b: +ErrorRegisterServer=%1 ji DLL/OCX pergal nehatnaskirin. +ErrorRegSvr32Failed=Kmasya derketina RegSvr32 %1 va neserkeft b +ErrorRegisterTypeLib=%1 ji pirtkxaneya Type (Type Library) pergal nehatnaskirin + +; *** Post-installation errors +ErrorOpeningReadme=Dema vekirina dosya Min Bixwne ewt b. +ErrorRestartingComputer=Sazkirin komptur ji n dest p nekir. Ji xwe komptur bigire. + +; *** Uninstaller messages +UninstallNotFound=Dosya %1 nehatdtin. Bernameya Rakirin nehatxebitandin. +UninstallOpenError=Dosya "%1" nay vekirin. Bernameya Rakirin nehatxebitandin. +UninstallUnsupportedVer=Dosya agahya rakirin %1 ji guhertoya bernameya rakirinva hev nake. Bernameya Rakirin nehatxebitandin. +UninstallUnknownEntry=Ji dosya agahya rakirinde gotina %1 nehat fehmkirin +ConfirmUninstall=Tu bawer ku dixwaz %1 hevbarn w rak? +UninstallOnlyOnWin64=Ev bername biten 64-bit Windows' dike. +OnlyAdminCanUninstall=Ev sazkirin biten ji aly kesn ku xwedy rvebr karbidest ty rakirin. +UninstallStatusLabel=Ji kerema xwe re dema bernameya %1 ji komptur ty rakirin raweste... +UninstalledAll=Bernameya %1 ji komptur bitemam hat rakirin. +UninstalledMost=Kirar rakirina bernameya %1 qedya.%n%nHinek hevbar nehat rakirin. Van dosya hn ten dikarin rakin. +UninstalledAndNeedsRestart=Rakirina bernameya %1 qedya, Div tu komptur ji n dest p bik..%n%nBila niha ji n destp bike? +UninstallDataCorrupted=Dosya "%1" xirab bye. Bernameya rakirin nehat xebitandin. + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Dosya Hate Parvekirin Bila By Rakirin? +ConfirmDeleteSharedFile2=Diyar dike ku hine dosyay ji pergal hatin parvekirin d derbar tu bernameyek nay kar ann. Rakirin van dosyayn hatin parvekirin bila j bib?%n%n Ew ku ev dosya derbar hine bernameyan t kar ann tu bixwaz j bib, dibe ku ev bernameyan pak nay xebitandin. Tu ne bawer, Na'y bitikne. Mayna dosyay ji pergal xesar nade komptur. +SharedFileNameLabel=Nav Dosya: +SharedFileLocationLabel=R: +WizardUninstalling=Rewa Rakirin +StatusUninstalling=%1 Ty Rakirin... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Ty sazkirin %1. +ShutdownBlockReasonUninstallingApp=Ty rakirin %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=guhertoya %1 %2 +AdditionalIcons=Diref Veser: +CreateDesktopIcon=Direfa Sermase ava bike +CreateQuickLaunchIcon=Direfa Destpka Bilez &ava bike +ProgramOnTheWeb=Malpera %1 +UninstallProgram=Bernameya %1 Rake +LaunchProgram=Bernameya %1 Bixebitne +AssocFileExtension=Direjeyn dosya %2 ji %1 va hev bne +AssocingFileExtension=Direjeyn dosya %2 ji %1 va ty hevhann... +AutoStartProgramGroupDescription = Destpk: +AutoStartProgram = %1 otomatk dikar dest p bik +AddonHostProgramNotFound =%1 peldanka bijart ch tune.% N% nDsaj dixwaz bidomn? diff --git a/Files/Languages/Unofficial/Latvian.isl b/Files/Languages/Unofficial/Latvian.isl new file mode 100644 index 00000000..59706149 --- /dev/null +++ b/Files/Languages/Unofficial/Latvian.isl @@ -0,0 +1,370 @@ +; *** Inno Setup version 6.1.0+ Latvian messages *** +; +; Translated from English by Zorgaats, zorgaats@gmail.com +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +LanguageName=Latviski +LanguageID=$0426 +LanguageCodePage=1257 + +[Messages] + +; *** Application titles +SetupAppTitle=Uzstādīšana +SetupWindowTitle=Uzstādīšana — %1 +UninstallAppTitle=Noņemšana +UninstallAppFullTitle=Noņemšana — % + +; *** Misc. common +InformationTitle=Informācija +ConfirmTitle=Apstiprināt +ErrorTitle=Kļūda + +; *** SetupLdr messages +SetupLdrStartupMessage=Tiks uzstādīta programma %1 uz Jūsu datora. Vai vēlaties turpināt? +LdrCannotCreateTemp=Neiespējami izveidot pagaidu datnes. Uzstādīšana pārtraukta +LdrCannotExecTemp=Neiespējami palaist datni no pagaidu mapes. Uzstādīšana pārtraukta +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nKļūda %2: %3 +SetupFileMissing=Datne %1 nav atrodama uzstādīšanas mapē. Lūdzu izlabojiet kļūdu vai iegādājaties jaunu programmas kopiju. +SetupFileCorrupt=Uzstādīšanas datnes ir bojātas. Lūdzu iegādājaties jaunu programmas kopiju. +SetupFileCorruptOrWrongVer=Uzstādīšanas datnes ir bojātas vai nav savienojamas ar šo uzstādīšanas programmu. Lūdzu izlabojiet kļūdu vai iegādājaties jaunu programmas kopiju. +InvalidParameter=Komandrinda satur nepieļaujamu parametru:%n%n%1 +SetupAlreadyRunning=Uzstādīšanas programma jau ir palaista. +WindowsVersionNotSupported=Šī programma neatbalsta Windows versiju, kas uzstādīta uz šī datora. +WindowsServicePackRequired=Programma pieprasa %1 Service Pack %2 vai jaunāku versiju. +NotOnThisPlatform=Šī pragramma nevar darboties uz %1. +OnlyOnThisPlatform=Programmu var palaist tikai uz %1. +OnlyOnTheseArchitectures=Programmu var uzstādīt tikai uz Windows versijas ar šādu procesoru arhitektūru:%n%n%1 +WinVersionTooLowError=Programma pieprasa %1 versiju %2 vai jaunāku. +WinVersionTooHighError=Programmu nevar uzstādīt uz %1 versijas %2 vai jaunākas. +AdminPrivilegesRequired=Jums ir jābūt administratoram, lai varētu uzsākt uzstādīšanu. +PowerUserPrivilegesRequired=Jums ir jābūt administratoram vai pilnvarotam lietotājam, lai uzstādītu šo programmu. +SetupAppRunningError=Ir atrasts palaists eksemplārs %1.%n%nLūdzu,aizveriet visas programmas un spiediet "Ok" lai turpinātu vai "Atcelt", lai izietu. +UninstallAppRunningError=Noņemšana ir atklājusi, ka darbojas eksemplārs %1.%n%nLūdzu,aizveriet visas programmas un spiediet "Ok" lai turpinātu vai "Atcelt", lai izietu. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Uzstādīšanas režīma izvēle +PrivilegesRequiredOverrideInstruction=Izvēlieties uzstādīšanas režīmu +PrivilegesRequiredOverrideText1=%1 var tikt uzstādīts vai nu visiem lietotājiem (nepieciešamas administratora privilēģijas), vai arī tikai Jums. +PrivilegesRequiredOverrideText2=%1 var tikt uzstādīts vai nu tikai Jums, vai arī visiem lietotājiem (nepieciešamas administratora privilēģijas). +PrivilegesRequiredOverrideAllUsers=Uzstādīt &visiem lietotājiem +PrivilegesRequiredOverrideAllUsersRecommended=Uzstādīt &visiem lietotājiem (rekomendējas) +PrivilegesRequiredOverrideCurrentUser=Uzstādīt tikai &man +PrivilegesRequiredOverrideCurrentUserRecommended=Uzstādīt tikai &man (rekomendējas) + +; *** Misc. errors +ErrorCreatingDir=Nevar izveidot mapi "%1" +ErrorTooManyFilesInDir=Neiespējami izveidot datnes mapē "%1", jo tā satur pārāk daudz datņu + +; *** Setup common messages +ExitSetupTitle=Iziet no uzstādīšanas +ExitSetupMessage=Uzstādīšana nav pabeigta. Ja Jūs tagad iziesiet, programma netiks uzstādīta.%n%nLai uzstādītu programmu, Jums būs atkal jāpalaiž uzstādīšana. %n%nIziet no uzstādīšanas? +AboutSetupMenuItem=&Par uzstādīšanu... +AboutSetupTitle=Par uzstādīšanu +AboutSetupMessage=%1, varsija %2%n%3%n%n%1mājas lapa:%n%4 +AboutSetupNote= +TranslatorNote=Latvian translation by Zorgaats + +; *** Buttons +ButtonBack=< &Atpakaļ +ButtonNext=&Tālāk > +ButtonInstall=&Uzstādīt +ButtonOK=OK +ButtonCancel=Atcelt +ButtonYes=&Jā +ButtonYesToAll=Jā &Visam +ButtonNo=&Nē +ButtonNoToAll=Nē V&isam +ButtonFinish=&Pabeigt +ButtonBrowse=Pā&rlūkot... +ButtonWizardBrowse=Pārlū&kot... +ButtonNewFolder=I&zveidot jaunu mapi + +; *** "Select Language" dialog messages +SelectLanguageTitle=Izvēlieties uzstādīšanas valodu +SelectLanguageLabel=Izvēlieties valodu, kurā notiks uzstādīšana: + +; *** Common wizard text +ClickNext=Spiediet "Tālāk", lai turpinātu, vai "Atcelt", lai izietu no uzstādīšanas. +BeveledLabel= +BrowseDialogTitle=Pārlūkot mapi +BrowseDialogLabel=Izvēlieties mapi no saraksta, tad spiediet "Ok". +NewFolderName=Jauna mape + +; *** "Welcome" wizard page +WelcomeLabel1=Вас приветствует Мастер установки [name] +WelcomeLabel2=Programma uzstādīs [name/ver] uz Jūsu datora.%n%nPirms uzstādīšanas vēlams aizvērt visas programmas. + +; *** "Password" wizard page +WizardPassword=Parole +PasswordLabel1=Uzstādīšana ir aizsargāta ar paroli. +PasswordLabel3=Lūdzu, ievadiet paroli, tad spiediet "Tālāk", lai turpinātu. Parole ir reģistrjūtīga. +PasswordEditLabel=&Parole: +IncorrectPassword=Jūsu ievadītā parole ir nepareiza. Lūdzu, mēģiniet vēlreiz. + +; *** "License Agreement" wizard page +WizardLicense=Licence +LicenseLabel=Lūdzu, izlasiet sekojošo informāciju, pirms turpināt. +LicenseLabel3=Lūdzu, izlasiet Līgumu. Jums ir jāapstiprina Līgums, lai turpinātu uzstādīšanu. +LicenseAccepted=Es &piekrītu līgumam +LicenseNotAccepted=Es &nepiekrītu līgumam + +; *** "Information" wizard pages +WizardInfoBefore=Informācija +InfoBeforeLabel=Lūdzu, izlasiet šo informāciju. +InfoBeforeClickLabel=Kad esat gatavs turpināt uzstādīšanu, spiediet "Tālāk". +WizardInfoAfter=Informācija +InfoAfterLabel=Lūdzu, izlasiet šo informāciju. +InfoAfterClickLabel=Kad esat gatavs turpināt uzstādīšanu, spiediet "Tālāk". + +; *** "User Information" wizard page +WizardUserInfo=Lietotāja informācija +UserInfoDesc=Lūdzu, ievadiet datus par sevi. +UserInfoName=&Lietotāja vārds: +UserInfoOrg=&Organizācija: +UserInfoSerial=&Sērijas numurs: +UserInfoNameRequired=Jums ir jāievada savs vārds. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Uzstādīšanas mapes izvēle +SelectDirDesc=Kur [name] tiks instalēts? +SelectDirLabel3=[name] datnes tiks instalētas norādītajā mapē. +SelectDirBrowseLabel=Lai turpinātu, spiediet "Tālāk". Ja vēlaties norādīt citu mapi, spiediet "Pārlūkot". +DiskSpaceGBLabel=Ir nepieciešami brīvi [gb] GB uz cietā diska. +DiskSpaceMBLabel=Ir nepieciešami brīvi [mb] MB uz cietā diska. +CannotInstallToNetworkDrive=Uzstādīšana nevar tikt veikta uz tīkla diska. +CannotInstallToUNCPath=Uzstādīšana nevar tikt veikta mapē pa UNC-adresi. +InvalidPath=Jums ir jānorāda pilna uzstādīšanas adrese, piemērs:%n%nC:\APP%n%nvai UNC adrese:%n%n\\server\share +InvalidDrive=Disks vai tīkla adrese, kuru Jūs izvēlējāties, nepastāv vai arī nav pieejams. Lūdzu, izvēlieties citu. +DiskSpaceWarningTitle=Nepietiek vietas uz diska +DiskSpaceWarning=Uzstādīšanai ir nepieciešami vismaz %1 KB brīvas vietas uz diska, bet pieejami ir tikai %2 KB.%n%nVai vēlaties turpināt? +DirNameTooLong=Mapes nosaukums vai adrese ir pārāk gara. +InvalidDirName=Mapes nosaukums nav derīgs. +BadDirName32=Mapes nosaukumā nedrīkst būt šādi simboli: %n%n%1 +DirExistsTitle=Mape jau pastāv. +DirExists=Mape:%n%n%1%n%njau pastāv. Vai vienalga vēlaties turpināt? +DirDoesntExistTitle=Mape nepastāv +DirDoesntExist=Mape%n%n%1%n%nnepastāv. Vai vēlaties to izveidot? + +; *** "Select Components" wizard page +WizardSelectComponents=Izvēlieties sastāvdaļas +SelectComponentsDesc=Kurus komponentus vēlaties uzstādīt? +SelectComponentsLabel2=Izvēlieties komponentus, kurus vēlaties uzstādīt. Spiediet "Tālāk", lai turpinātu. +FullInstallation=Pilna uzstādīšana +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Kompakta uzstādīšana +CustomInstallation=Izveidot uzstādīšanu +NoUninstallWarningTitle=Komponenti jau pastāv +NoUninstallWarning=Uzstādīšana ir atklājusi, ka šādi komponenti jau ir uzstādīti:%n%n%1%n%nŠo komponentu uzstādīšanas atcelšana neizdzēsīs tos.%n%nVai turpināt? +ComponentSize1=%1 Кб +ComponentSize2=%1 Мб +ComponentsDiskSpaceGBLabel=Pašlaik izvēlētie komponenti aizņem [gb] GB uz cietā diska. +ComponentsDiskSpaceMBLabel=Pašlaik izvēlētie komponenti aizņem [mb] MB uz cietā diska. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Papilduzdevumu izvēlne +SelectTasksDesc=Kurus papilduzdevumus vajadzētu veikt? +SelectTasksLabel2=Izvēlieties, kādi papilduzdevumi tiks veikti [name] uzstādīšanas laikā, tad spiediet "Tālāk". + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Izvēlieties Start Menu mapi +SelectStartMenuFolderDesc=Kur uzstādīšanas programmai vajadzētu likt īsinājumikonas? +SelectStartMenuFolderLabel3=Uzstādīšana izveidos īsinājumikonas Start Menu mapē. +SelectStartMenuFolderBrowseLabel=Lai turpinātu, spiediet "Tālāk". Ja vēlaties norādīt citu mapi, spiediet "Pārlūkot". +MustEnterGroupName=Jums ir jānorāda mape. +GroupNameTooLong=Mapes nosaukums ir pārāk garš. +InvalidGroupName=Mape nav derīga. +BadGroupName=Mapes nosaukums satur kādu no šiem simboliem:%n%n%1 +NoProgramGroupCheck2=&Neizveidot Start Menu mapi + +; *** "Ready to Install" wizard page +WizardReady=Gatavs uzstādīšanai +ReadyLabel1=Uzstādīšana ir gatava instalēt [name] uz Jūsu datora. +ReadyLabel2a=Spiediet "Uzstādīt", lai sāktu uzstādīšanu, vai spiediet "Atpakaļ", lai izmainītu parametrus. +ReadyLabel2b=Spiediet "Uzstādīt", lai sāktu uzstādīšanu. +ReadyMemoUserInfo=Lietotāja informācija: +ReadyMemoDir=Galamēķis: +ReadyMemoType=Uzstādīšanas tips: +ReadyMemoComponents=Izvēlētie komponenti: +ReadyMemoGroup=Start Menu mape: +ReadyMemoTasks=Papilduzdevumi: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Papildus datņu lejupielāde... +ButtonStopDownload=&Pārtraukt ielādi +StopDownload=Jūs tiešām vēlaties pārtraukt lejupielādi? +ErrorDownloadAborted=Lejupielāde pārtraukta +ErrorDownloadFailed=Lejupielādes kļūda: %1 %2 +ErrorDownloadSizeFailed=Izmēra kļūda: %1 %2 +ErrorFileHash1=Ошибка хэша файла: %1 +ErrorFileHash2=Неверный хэш файла: ожидался %1, получен %2 +ErrorProgress=Izpildes kļūda: %1 из %2 +ErrorFileSize=Kļūdains faila izmērs: tika gaidīts %1, iegūts %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Gatavoties uzstādīšanai +PreparingDesc=Uzstādīšana ir gatava instalēt [name] uz Jūsu datora. +PreviousInstallNotCompleted=Uzstādīšana/noņemšana iepriekšējai programmai nav pabeigta. Jums ir jāpārstartē dators, lai pabeigtu uzstādīšanu.%n%nPēc pārstartēšanas palaidiet uzstādīšanu no jauna, lai pabeigtu uzstādīt [name]. +CannotContinue=Uzstādīšanu nevar turpināt. Lūdzu, spiediet "Atcelt", lai izietu. +ApplicationsFound=Sekojošas programmas izmanto datnes, kuras uzstādīšanai jāatjauno. Rekomendējas uzstādīšanai atļaut automātiski aizvērt šīs programmas. +ApplicationsFound2=Sekojošas programmas izmanto datnes, kuras uzstādīšanai jāatjauno. Rekomendējas uzstādīšanai atļaut automātiski aizvērt šīs programmas. Kad instalācija būs pabeigta, uzstādīšana mēģinās tās atkal palaist. +CloseApplications=&Automātiski aizvērt šīs programmas +DontCloseApplications=&Neaizvērt šīs programmas +ErrorCloseApplications=Uzstādīšanai neizdevās automātiski aizvērt visas programmas.Pirms uzstādīšanas rekomendējas aizvērt visas programmas, kas izmanto atjaunināmās datnes. +PrepareToInstallNeedsRestart=Uzstādīšanai nepieciešams pārstartēt Jūsu datoru. Kad dators pārstartēsies, lūdzu, palaidiet uzstādīšanas programmu vēlreiz, lai pabeigtu uzstādīšanu [name].%n%nVeikt pārstartēšanu tūlīt? + +; *** "Installing" wizard page +WizardInstalling=Uzstādīšana... +InstallingLabel=Lūdzu, uzgaidiet, kamēr [name] tiks uzstādīts uz Jūsu datora. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Pabeigta [name] uzstādīšana +FinishedLabelNoIcons=Uzstādīšana pabeigta. +FinishedLabel=Programma [name] ir uzstādīta uz Jūsu datora. Programmu var palaist, uzklikšķinot uz izveidotajām ikonām. +ClickFinish=Spiediet "Pabeigt", lai aizvērtu uzstādīšanu. +FinishedRestartLabel=Lai pabeigtu [name] uzstādīšanu, nepieciešams pārstartēt Jūsu datoru. Vai vēlaties to darīt tagad? +FinishedRestartMessage=Lai pabeigtu [name] uzstādīšanu, nepieciešams pārstartēt Jūsu datoru.%n%nVai vēlaties to darīt tagad? +ShowReadmeCheck=Jā, vēlos apskatīt README failu +YesRadio=&Jā, pārstartēt datoru tagad +NoRadio=&Nē, datoru pārstartēšu vēlāk +; used for example as 'Run MyProg.exe' +RunEntryExec=Palaist %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Apskatīt %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Uzstādīšanai ir nepieciešams nākamais disks +SelectDiskLabel2=Lūdzu, ielieciet %1 disku un spiediet "Ok".%n%nJa datne ir atrodama uz šī paša diska kādā citā mapē, norādiet tās atrašanās vietu vai spiediet "Pārlūkot", lai to norādītu. +PathLabel=&Ceļš: +FileNotInDir2=Datne "%1" neatrodas "%2". Lūdzu, ielieciet pareizo disku vai norādiet pareizo mapi. +SelectDirectoryLabel=Lūdzu, norādiet nākamā diska atrašanās vietu. + +; *** Installation phase messages +SetupAborted=Uzstādīšana netika pabeigta.%n%nLūdzu, izlabojiet kļūdu un palaidiet uzstādīšanu no jauna. +AbortRetryIgnoreSelectAction=Izvēlieties darbību +AbortRetryIgnoreRetry=Mēģināt no &jauna +AbortRetryIgnoreIgnore=&Ignorēt kļūdu un turpināt +AbortRetryIgnoreCancel=Pārtraukt uzstādīšanu + +; *** Installation status messages +StatusClosingApplications=Programmu aizvēršana... +StatusCreateDirs=Mapju izveidošana... +StatusExtractFiles=Datņu kopēšana... +StatusCreateIcons=Īsinājumikonu izveidošana... +StatusCreateIniEntries=Izveido INI ierakstu... +StatusCreateRegistryEntries=Izveido reģistra ierakstus... +StatusRegisterFiles=Reģistrē datnes... +StatusSavingUninstall=Saglabā noņemšanas datus... +StatusRunProgram=Pabeidz uzstādīšanu... +StatusRestartingApplications=Programmu restartēšana... +StatusRollback=Izmaiņu atiestatīšana... + +; *** Misc. errors +ErrorInternal2=Iekšēja kļūda: %1 +ErrorFunctionFailedNoCode=%1: cieta neveiksmi +ErrorFunctionFailed=%1: cieta neveiksmi; kods %2 +ErrorFunctionFailedWithMessage=%1: cieta neveiksmi; kods %2.%n%3 +ErrorExecutingProgram=Nespēju palaist failu:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Kļūda, atverot reģistra atslēgu:%n%1\%2 +ErrorRegCreateKey=Kļūda, izveidojot reģistra atslēgu:%n%1\%2 +ErrorRegWriteKey=Kļūda, rakstot reģistra atslēgu:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Kļūda, izveidojot INI ieraksta datni "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=I&zlaist šo failu (nerekomendējas) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorēt kļūdu un turpināt (nerekomendējas) +SourceIsCorrupted=Datnes avots ir bojāts +SourceDoesntExist=Datnes avots "%1" nepastāv +ExistingFileReadOnly2=Nevar aizstāt esošo failu, tā kā tas ir iezīmēts kā "read only". +ExistingFileReadOnlyRetry=&Dzēst atribūtu "read only" un atkārtot mēģinājumu +ExistingFileReadOnlyKeepExisting=&Paturēt esošo failu +ErrorReadingExistingDest=Kļūda, mēģinot lasīt pastāvošo failu: +FileExistsSelectAction=Izvēlieties darbību +FileExists2=Fails jau pastāv. +FileExistsOverwriteExisting=&Aizstāt esošo failu +FileExistsKeepExisting=&Saglabāt esošo failu +FileExistsOverwriteOrKeepAll=A&tkārtot darbību visiem turpmākajiem konfliktiem +ExistingFileNewerSelectAction=Izvēlieties darbību +ExistingFileNewer2=Esošais fails ir jaunāks nekā uzstādāmais. +ExistingFileNewerOverwriteExisting=&Aizstāt esošo failu +ExistingFileNewerKeepExisting=&Saglabāt esošo failu (rekomendējas) +ExistingFileNewerOverwriteOrKeepAll=A&tkārtot darbību visiem turpmākajiem konfliktiem +ErrorChangingAttr=Radusies kļūda, mēģinot nomainīt datnes īpašību: +ErrorCreatingTemp=Radusies kļūda, izveidojot datni galamērķa mapē: +ErrorReadingSource=Radusies kļūda, nolasot datni: +ErrorCopying=Radusies kļūda, pārkopējot datni: +ErrorReplacingExistingFile=Radusies kļūda, pārrakstot jau pastāvošo datni: +ErrorRestartReplace=Atkārtota aizstāšana cietusi neveiksmi: +ErrorRenamingTemp=Radusies kļūda, nomainot nosaukumu datnei galamērķa mapē: +ErrorRegisterServer=Neiespējami reģistrēt DLL/OCX: %1 +ErrorRegSvr32Failed=Kļūda, palaižot RegSvr32, kods %1 +ErrorRegisterTypeLib=Neiespējami reģistrēt tipa bibliotēku: %1 + +; *** Uninstall display name markings +UninstallDisplayNameMark=%1 (%2) +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32 biti +UninstallDisplayNameMark64Bit=64 biti +UninstallDisplayNameMarkAllUsers=Visi lietotāji +UninstallDisplayNameMarkCurrentUser=Tekošais lietotājs + +; *** Post-installation errors +ErrorOpeningReadme=Radusies kļūda, atverot README datni. +ErrorRestartingComputer=Uzstādīšana nevar pārstartēt datoru. Lūdzu, izdariet to manuāli. + +; *** Uninstaller messages +UninstallNotFound=Datne "%1" nepastāv. Nevar noņemt. +UninstallOpenError=Datni "%1" nevar atvērt. Nevar noņemt +UninstallUnsupportedVer=Noņemšanas datne "%1" nav atpazīstama šai noņemšanas programmai. Nevar noņemt +UninstallUnknownEntry=Nezināms ieraksts (%1) izveidoja sadursmi ar noņemšanu +ConfirmUninstall=Vai esat pārliecināts, ka vēlaties pilnībā noņemt %1 un visus tā komponentus? +UninstallOnlyOnWin64=Noņemšanu var veikt tikai ar 64-bitu Windows. +OnlyAdminCanUninstall=Noņemšanu var veikt tikai lietotājs ar Adminstratora privilēģijām. +UninstallStatusLabel=Lūdzu uzgaidiet, kamēr %1 tiek noņemts no Jūsu datora. +UninstalledAll=%1 tika veiksmīgi noņemts no Jūsu datora. +UninstalledMost=%1 noņemšana pabeigta.%n%nDažus elementus nevarēja noņemt. Tos var noņemt manuāli. +UninstalledAndNeedsRestart=Lai pabeigtu %1 noņemšanu, Jūsu dators jāpārstartē.%n%nVai vēlaties to darīt tagad? +UninstallDataCorrupted="%1" datne ir bojāta. Nevar noņemt + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Noņemt kopīgo datni? +ConfirmDeleteSharedFile2=Sistēma ir secinājusi, ka šī koplietošanas datne vairs netiks lietota. Vai vēlaties to noņemt?%n%nJa kāda cita programma izmanto šo datni, tad šī programma var strādāt nekorekti. Ja neesat drošs, izvēlieties "Nē". Atstājot šo datni, Jūsu datoram netiks nodarīti nekādi bojājumi. +SharedFileNameLabel=Faila nosaukums: +SharedFileLocationLabel=Atrašanās vieta: +WizardUninstalling=Noņemšanas statuss +StatusUninstalling=Noņem %1... + + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=%1 uzstādīšana. +ShutdownBlockReasonUninstallingApp=%1 noņemšana. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1, versija %2 +AdditionalIcons=Papildu ikonas: +CreateDesktopIcon=Izveidot &darbvisrmas ikonu +CreateQuickLaunchIcon=Izveidot &Quick Launch ikonu +ProgramOnTheWeb=%1 vietne Internetā +UninstallProgram=Noņemt %1 +LaunchProgram=Palaist %1 +AssocFileExtension=&Apvienot %1 ar %2 faila paplašinājumu +AssocingFileExtension=Apvieno %1 ar %2 faila paplašinājumu... +AutoStartProgramGroupDescription=Automātiskā palaišana: +AutoStartProgram=Automātiski palaist %1 +AddonHostProgramNotFound=%1 nav atrasts Jūsu norādītajā mapē.%n%nTomēr turpināt? diff --git a/Files/Languages/Unofficial/Ligurian.isl b/Files/Languages/Unofficial/Ligurian.isl new file mode 100644 index 00000000..d1f38348 --- /dev/null +++ b/Files/Languages/Unofficial/Ligurian.isl @@ -0,0 +1,321 @@ +; *** Inno Setup version 5.1.11+ Ligurian messages *** +; +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). +; +; Traduto da GENOVES.com.ar +; E-mail: info@genoves.com.ar +; - Parlemmo zeneize - + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Zeneize +LanguageID=0 +LanguageCodePage=0 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Instalaion +SetupWindowTitle=Instalaion de %1 +UninstallAppTitle=Dizinstalaion +UninstallAppFullTitle=Dizinstalaion de %1 + +; *** Misc. common +InformationTitle=Informaioin +ConfirmTitle=Conferma +ErrorTitle=Er + +; *** SetupLdr messages +SetupLdrStartupMessage=Questa a l' l'instalaion de %1. Se dexidera and avanti? +LdrCannotCreateTemp=Inposcibile cre un file tenporanio. Instalaion anul +LdrCannotExecTemp=Inposcibile ezego un file inta cartella tenporania. Instalaion anul + +; *** Startup error messages +LastErrorMessage=%1.%n%nEr %2: %3 +SetupFileMissing=File %1 no atrovou inta cartella d'instalaion. Corezi o problema domanda unna neuva cpia do programma. +SetupFileCorrupt=I archivi d'instalaion son danez. Pigite unna neuva cpia do programa. +SetupFileCorruptOrWrongVer=I archivi d'instalaion son danez, son inconpatibili con questa verscion do programma d'instalaion. Corezi o problema pigite unna neuva cpia do programma. +NotOnThisPlatform=Questo programma o no l' conpatibile con %1. +OnlyOnThisPlatform=Questo programma o l' bezeugno de %1. +OnlyOnTheseArchitectures=Questo programma o peu ese instalou solo in sce verscioin de Windows proget pe-e segoenti architetue do proces:%n%n%1 +MissingWOW64APIs=A verscion de Windows deuvi a no l'includde a fonsionalit domand da-o programma d'instalaion pe realiz unn'instalaion a 64-bit. Pe coreze questo problema, installa o Service Pack %1. +WinVersionTooLowError=Questo programma o l' bezeugno de %1 verscion %2 sucesciva. +WinVersionTooHighError=Questo programma o no peu ese instalou in sce %1 verscion %2 sucesciva. +AdminPrivilegesRequired=Ghe veu i privilegi d'aministrat pe instal questo programma. +PowerUserPrivilegesRequired=Ghe veu i privilegi d'aministrat de Power Users pe poei instal questo programma. +SetupAppRunningError=%1 o l' atoalmente in ezecuion.%n%nSra oua tutte e istanse do programma e dapeu sciacca D'acrdio, donque sciacca Anulla pe sciort. +UninstallAppRunningError=%1 o l' atoalmente in ezecuion.%n%nSra oua tutte e istanse do programma e dapeu sciacca D'acrdio, donque sciacca Anulla pe sciort. + +; *** Misc. errors +ErrorCreatingDir=Inposcibile cre a cartella "%1" +ErrorTooManyFilesInDir=Inposcibile cre i file inta cartella "%1" perch a contegne trppi file + +; *** Setup common messages +ExitSetupTitle=Sciortia da l'instalaion +ExitSetupMessage=L'instalaion a no l' conpleta. Se ti scirti da l'instalaion inte questo momento, o programma o no sai instalou.%n%nL' poscibile ezego l'instalaion int'un segondo tenpo.%n%nSciort da l'instalaion? +AboutSetupMenuItem=&Informaioin in sce l'instalaion... +AboutSetupTitle=Informaioin in sce l'instalaion +AboutSetupMessage=%1 verscion %2%n%3%n%n%1 scito web:%n%4 +AboutSetupNote= +TranslatorNote=Ligurian translation maintained by GENOVES.com.ar + +; *** Buttons +ButtonBack=< &Inder +ButtonNext=&Avanti > +ButtonInstall=Inst&alla +ButtonOK=D'acrdio +ButtonCancel=Anulla +ButtonYes=&Sci +ButtonYesToAll=Sci a &tutto +ButtonNo=&No +ButtonNoToAll=N&o a tutto +ButtonFinish=&Fin +ButtonBrowse=&Sfeuggia... +ButtonWizardBrowse=S&feuggia... +ButtonNewFolder=&Crea neuva cartella + +; *** "Select Language" dialog messages +SelectLanguageTitle=Seleionn-a a lengoa de l'instalaion +SelectLanguageLabel=Seleionn-a a lengoa da deuvi durante l'instalaion: + +; *** Common wizard text +ClickNext=Premere Avanti pe contino, Anulla pe sciort. +BeveledLabel= +BrowseDialogTitle=Sfeuggia pe cartelle +BrowseDialogLabel=Seleion unna cartella d'into listin, dapeu sciac D'acrdio. +NewFolderName=Neuva cartella + +; *** "Welcome" wizard page +WelcomeLabel1=Benvegnui into programma d'instalaion de [name] +WelcomeLabel2=[name/ver] o l'andi instalou in scio computer.%n%nSe conseggia de ser tutte e aplicaioin ative primma de contino. + +; *** "Password" wizard page +WizardPassword=Parlla d'ordine +PasswordLabel1=Questa instalaion a l' protezua da parlla d'ordine. +PasswordLabel3=Introdue a parlla d'ordine, dapeu sciac in sce Avanti pe contino. E parlle d'ordine son sensibili a maiuscole/minuscole. +PasswordEditLabel=&Parlla d'ordine: +IncorrectPassword=A parlla d'ordine introduta a no l' coretta, preuvighe torna. + +; *** "License Agreement" wizard page +WizardLicense=Contratto de licensa +LicenseLabel=Leze con atenion e informaioin che segoan primma de contino. +LicenseLabel3=Leze o segoente contratto de licensa. Bezeugna acet tutti i termini do contratto pe poei contino con l'instalaion. +LicenseAccepted=Acetto i termini do &contratto de licensa +LicenseNotAccepted=&No acetto i termini do contratto de licensa + +; *** "Information" wizard pages +WizardInfoBefore=Informaioin +InfoBeforeLabel=Leze e queste informaioin inportanti primma d'and avanti. +InfoBeforeClickLabel=Quande semmo pronti pe contino, sciacca Avanti. +WizardInfoAfter=Informaioin +InfoAfterLabel=Leze e queste informaioin inportanti primma d'and avanti. +InfoAfterClickLabel=Quande semmo pronti pe contino, sciacca Avanti. + +; *** "User Information" wizard page +WizardUserInfo=Informaioin de l'utente +UserInfoDesc=Introduxi e segoenti informaioin. +UserInfoName=&Nomme: +UserInfoOrg=&Socjet: +UserInfoSerial=&Numero de serie: +UserInfoNameRequired=Bezeugna introdue un nomme. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Seleione da cartella d'instalaion +SelectDirDesc=Dove se dexidera instal [name]? +SelectDirLabel3=[name] o l'andi instalou inta segoente cartella. +SelectDirBrowseLabel=Pe contino, sciacca Avanti. Pe erne unn'atra cartella, sciaccaSfeuggia. +DiskSpaceMBLabel=Ghe veu armeno [mb] MB de spaio into disco. +ToUNCPathname=No l' posciblie instal in sce 'n percorso de r. Se ti installi atraverzo unna r, bezeugna conette a risorsa comme unna unit de r. +InvalidPath=Bezeugna introdue un percorso conpleto de letera d'unit; per ezenpio:%n%nC:\APP%n%no un percorso de r inta forma:%n%n\\server\condivixon +InvalidDrive=L'unit o percorso de r seleionou o no l'existe o no l' acesibile. Seleion-ine un atro. +DiskSpaceWarningTitle=Spaio into disco insuficente +DiskSpaceWarning=L'instalaion a veu armeno %1 KB de spaio veuo pe ezegoise, ma l'unit seleion a gh' solo %2 KB disponibili.%n%nSe dexidera contino o stesso? +DirNameTooLong=O nomme da cartella o percorso son trppo longhi. +InvalidDirName=O nomme da cartella o no l' valido. +BadDirName32=O nomme da cartella o no peu includde nisciun di carateri segoenti:%n%n%1 +DirExistsTitle=Cartella z existente +DirExists=A cartella:%n%n%1 za a l'existe.%n%nSe dexidera deuviala o stesso? +DirDoesntExistTitle=Cartella inexistente +DirDoesntExist=A cartella:%n%n%1 a no l'existe.%n%nSe dexidera creala? + +; *** "Select Components" wizard page +WizardSelectComponents=Seleion de conponenti +SelectComponentsDesc=Che conponenti devan ese instal? +SelectComponentsLabel2=Seleionn-a i conponenti da instal, deseleionn-a quelli che no se dexidera instal. Sciacca Avanti pe contino. +FullInstallation=Instalaion conpleta +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Instalaion conpatta +CustomInstallation=Instalaion personaliz +NoUninstallWarningTitle=Conponente existente +NoUninstallWarning=I segoenti conponenti son za instal in scio computer:%n%n%1%n%nSe se deseleionn-a questi conponenti, no saian elimin.%n%nSe dexidera contino o stesso? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceMBLabel=A seleion corente a veu armeno de [mb] MB de spaio into disco. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Seleion de processi adiionali +SelectTasksDesc=Che processi azontivi se veu inandi? +SelectTasksLabel2=Seleionn-a i processi azontivi che andian ezegoii durante l'instalaion de [name], dapeu sciacca Avanti. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Seleion da cartella into men Iniio/Start (Avvio) +SelectStartMenuFolderDesc=Dove se veu introdue i colegamenti a-o programma? +SelectStartMenuFolderLabel3=Se fai i colegamenti a-o programma inta segoente cartella do men Iniio/Start (Avvio). +SelectStartMenuFolderBrowseLabel=Pe contino, sciacca Avanti. Pe seleion unn'atra cartella, sciacca Sfeuggia. +MustEnterGroupName=Se deve introdue o nomme da cartella. +GroupNameTooLong=O nomme da cartella o percorso son trppo longhi. +InvalidGroupName=O nomme da cartella o no l' valido. +BadGroupName=O nomme da cartella o no peu includde nisciun di carateri segoenti:%n%n%1 +NoProgramGroupCheck2=&No cre unna cartella into men Iniio/Start (Avvio) + +; *** "Ready to Install" wizard page +WizardReady=Pronto pe l'instalaion +ReadyLabel1=O programma d'instalaion o l' pronto pe inii l'instalaion de [name] in scio computer. +ReadyLabel2a=Sciacca Installa pe contino con l'instalaion, Inder pe rivedde modific e inpostaioin. +ReadyLabel2b=Sciacca Installa pe and avanti con l'instalaion. +ReadyMemoUserInfo=Informaioin de l'utente: +ReadyMemoDir=Cartella d'instalaion: +ReadyMemoType=Tipo d'instalaion: +ReadyMemoComponents=Conponenti seleion: +ReadyMemoGroup=Cartella do men Iniio/Start (Avvio): +ReadyMemoTasks=Processi adiionali: + +; *** "Preparing to Install" wizard page +WizardPreparing=Preparaion a l'instalaion +PreparingDesc=Preparaion a l'instalaion de [name] in scio computer. +PreviousInstallNotCompleted=L'instalaion/eliminaion precedente do programma a no l' stta conplet. Bezeugna arv torna o scistemma pe conplet l'instalaion.%n%nDppo arv torna o scistemma, preuva torna l'instalaion de [name]. +CannotContinue=L'instalaion a no peu contino. Sciacca Anulla pe sciort. + +; *** "Installing" wizard page +WizardInstalling=Instalaion in corso +InstallingLabel=Speta che l'instalaion de [name] in scio computer a segge conpleta. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Conpletamento de l'instalaion de [name] +FinishedLabelNoIcons=L'instalaion de [name] a l' stta conplet con sucesso. +FinishedLabel=L'instalaion de [name] a l' stta conplet con sucesso. L'aplicaion a peu ese ezegoia con seleion e relative icne. +ClickFinish=Sciacca Fin pe sciort da l'instalaion. +FinishedRestartLabel=Pe conplet l'instalaion de [name], bezeugna arv torna o scistemma. Se dexidera arvilo torna oua? +FinishedRestartMessage=Pe conplet l'instalaion de [name], bezeugna arvi torna o scistemma.%n%nSe dexidera arvilo torna oua? +ShowReadmeCheck=Sci, veuggio vedde l'archivio LEZIME oua +YesRadio=&Sci, arvi torna o scistemma oua +NoRadio=&No, arvilo torna ci tardi +; used for example as 'Run MyProg.exe' +RunEntryExec=Inandia %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Vixoalizza %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=L'instalaion a l' bezeugno do disco sucescivo +SelectDiskLabel2=Introduxi o disco %1 e sciacca D'acrdio.%n%nSe i archivio in sce questo disco s'atreuvan int'unna cartella diversa da quella vixoaliz chi sotta, introduxi o percorso coretto sciacca Sfeuggia. +PathLabel=&Percorso: +FileNotInDir2=L'archivio "%1" o no l' stto atrovou inte "%2". Introduxi o disco coretto seleionn-a unn'atra cartella. +SelectDirectoryLabel=Specific o percorso do proscimo disco. + +; *** Installation phase messages +SetupAborted=L'instalaion a no l' stta conplet.%n%nCorezi o problema e ripeti l'instalaion. +EntryAbortRetryIgnore=Sciacca in sce Preuva torna pe tent ancon unna vtta, Ignora pe and avanti in gni caxo, Interonpi pe termin l'instalaion. + +; *** Installation status messages +StatusCreateDirs=Creaion de cartelle... +StatusExtractFiles=Estraion d'archivi... +StatusCreateIcons=Creaion de icne... +StatusCreateIniEntries=Creaion de voxe inti file INI... +StatusCreateRegistryEntries=Creaion de voxe de registro... +StatusRegisterFiles=Registraion d'archivi... +StatusSavingUninstall=Sarvataggio de informaioin de dizinstalaion... +StatusRunProgram=Fin de l'instalaion... +StatusRollback=Repiggio de modifiche... + +; *** Misc. errors +ErrorInternal2=Er Interno %1 +ErrorFunctionFailedNoCode=%1 falio +ErrorFunctionFailed=%1 falio; cdice %2 +ErrorFunctionFailedWithMessage=%1 falio; cdice %2.%n%3 +ErrorExecutingProgram=Inposcibile ezego l'archivio:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Er d'avertura da ciave de registro:%n%1\%2 +ErrorRegCreateKey=Er de creaion da ciave de registro:%n%1\%2 +ErrorRegWriteKey=Er de scritua da ciave de registro:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Er inta creaion de voxe INI into file "%1". + +; *** File copying errors +FileAbortRetryIgnore=Sciacca Preuva torna pe tent ancon unna vtta, Ignora pe sat questo file (sconsegiou), Interonpi pe termin l'instalaion. +FileAbortRetryIgnore2=Sciacca Preuva torna pe tent ancon unna vtta, Ignora pe and avanti o stesso (sconsegiou), Interonpi pe termin l'instalaion. +SourceIsCorrupted=L'archivio sorgente o l' danezou +SourceDoesntExist=L'archivio sorgente "%1" o no l'existe +ExistingFileReadOnly=L'archivio existente o gh' l'atributo de sola letua.%n%nSciacca Preuva torna pe lev l'atributo de sola letua e tent ancon unna vtta, Ignora pe sat questo file, Interonpi pe termin l'instalaion. +ErrorReadingExistingDest=S' verificou un er durante a letua de l'archivio existente: +FileExists=L'archivio za o l'existe.%n%nTi veu sorvescrivilo? +ExistingFileNewer=L'archivio existente o l' ci reente de quello che s' apreuvo a instal. Se racomanda de mantegn l'archivio existente.%n%nSe dexidera mantegn l'archivio existente? +ErrorChangingAttr=S' verificou un er durante o tentativo de modifica de l'atributo de l'archivio existente: +ErrorCreatingTemp=S' verificou un er durante a creaion d'un archivio inta cartella d'instalaion: +ErrorReadingSource=S' verificou un er durante a letua de l'archivio sorgente: +ErrorCopying=S' verificou un er durante a cpia d'un archivio: +ErrorReplacingExistingFile=S' verificou un er durante a sorvescritua de l'archivio existente: +ErrorRestartReplace=Er durante Riavertua-Sostitoion: +ErrorRenamingTemp=S' verificou un er durante o tentativo de rinomin un archivio inta cartella d'instalaion: +ErrorRegisterServer=Inposcibile registr a DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 o l' falio con cdice de sciortia %1 +ErrorRegisterTypeLib=Inposcibile registr a libreria de tipo: %1 + +; *** Post-installation errors +ErrorOpeningReadme=S' verificou un er durante l'avertura de l'archivio LEZIME. +ErrorRestartingComputer=Inposcibile arv torna o scistemma. Inandialo torna manoalmente. + +; *** Uninstaller messages +UninstallNotFound=L'archivio "%1" o no l'existe. Inposcibile dizinstal. +UninstallOpenError=L'archivio "%1" o no peu ese averto. Inposcibile dizinstal +UninstallUnsupportedVer=O file log de dizinstalaion "%1" o l' int'un formato no riconosciuo da questa verscion do programma de dizinstalaion. Inposcibile dizinstal +UninstallUnknownEntry=Atrovou unna voxe sconosciua (%1) into file log de dizinstalaion +ConfirmUninstall=Se dexidera elimin conpletamente %1 e tutti i seu conponenti? +UninstallOnlyOnWin64=Questa aplicaion a peu ese dizinstal solo in sce Windows a 64-bit. +OnlyAdminCanUninstall=Questa aplicaion a peu ese dizinstal solo da un utente con privilegi d'aministrat. +UninstallStatusLabel=Speta finn-a quande %1 o sai eliminou da-o computer. +UninstalledAll=%1 o l' stto eliminou con sucesso da-o computer. +UninstalledMost=Dizinstalaion de %1 conplet.%n%nerti elementi no peuan ese elimin. Se dovi eliminali manoalmente. +UninstalledAndNeedsRestart=Pe conplet a dizinstalaion de %1, bezeugna arv o scistemma da cappo.%n%nSe dexidera inandialo torna oua? +UninstallDataCorrupted=L'archivio "%1" o l' danezou. Inposcibile dizinstal + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Elimin l'archivio condivizo? +ConfirmDeleteSharedFile2=O scistemma o l'indica che o segoente archivio condivizo o no l' ci deuviou da nisciun programma. Elimin quest'archivio condivizo?%n%nSe quarche programma o deuviesse quest'archivio, o porieiva no fonsion ci coretamente. Se no ti o s con precixon, erni No. O lasci l'archivio into scistemma o no peu acaxon di danni. +SharedFileNameLabel=Nomme de l'archivio: +SharedFileLocationLabel=Percorso: +WizardUninstalling=Stato da dizinstalaion +StatusUninstalling=Dizinstalaion de %1 in corso... + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 verscion %2 +AdditionalIcons=Icne azontive: +CreateDesktopIcon=Crea unn'icna in scio &desktop +CreateQuickLaunchIcon=Crea unn'icna inta &bara d'avertua veloce +ProgramOnTheWeb=%1 in scio Web +UninstallProgram=Dizinstalla %1 +LaunchProgram=Inandia %1 +AssocFileExtension=&Asccia l'estension %2 a %1 +AssocingFileExtension=Asociaion de l'estension %2 a %1 in corso... \ No newline at end of file diff --git a/Files/Languages/Unofficial/Lithuanian.isl b/Files/Languages/Unofficial/Lithuanian.isl new file mode 100644 index 00000000..74c99b2c --- /dev/null +++ b/Files/Languages/Unofficial/Lithuanian.isl @@ -0,0 +1,388 @@ +; *** Inno Setup version 6.1.0+ Lithuanian messages *** +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). +; Translated by Robertas Rimas (Loptar AT takas DOT lt) +; Corrected and updated by Rolandas Rudomanskis (rolandasr AT gmail DOT com) +; Corrected and updated to version 6.0.3+ by Dalius Guzauskas (aka Tichij) (tichij AT mail DOT com) + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Lietuvi<0173> +LanguageID=$0427 +LanguageCodePage=1257 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Diegimas +SetupWindowTitle=Diegimas - %1 +UninstallAppTitle=Paalinimas +UninstallAppFullTitle=%1 paalinimas + +; *** Misc. common +InformationTitle=Informacija +ConfirmTitle=Patvirtinimas +ErrorTitle=Klaida + +; *** SetupLdr messages +SetupLdrStartupMessage=%1 diegimas. Norite tsti? +LdrCannotCreateTemp=Negaliu sukurti laikinojo failo. Diegimas nutraukiamas +LdrCannotExecTemp=Negaliu vykdyti failo laikinajame kataloge. Diegimas nutraukiamas +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nKlaida %2: %3 +SetupFileMissing=Diegimo kataloge nerastas %1 failas. Paalinkite i problem arba sigykite nauj programos kopij. +SetupFileCorrupt=diegiami failai sugadinti. sigykite nauj programos kopij. +SetupFileCorruptOrWrongVer=diegiami failai yra sugadinti arba nesuderinami su diegimo programa. Itaisykite problem arba sigykite nauj programos kopij. +InvalidParameter=Klaidingas parametras buvo gautas i komandins eiluts:%n%n%1 +SetupAlreadyRunning=Diegimo programa jau yra paleista. +WindowsVersionNotSupported=i programa nesuderinama su Js kompiuteryje diegta Windows versija. +WindowsServicePackRequired=i programa reikalauja %1 Service Pack %2 ar vlesns versijos. +NotOnThisPlatform=i programa negali bti paleista %1 aplinkoje. +OnlyOnThisPlatform=i programa turi bti leidiama %1 aplinkoje. +OnlyOnTheseArchitectures=i programa gali bti diegta tik Windows versijose, turiniose ias procesoriaus architektras:%n%n%1 +WinVersionTooLowError=i programa reikalauja %1 %2 ar vlesns versijos. +WinVersionTooHighError=i programa negali bti diegta %1 %2 ar vlesns versijos aplinkoje. +AdminPrivilegesRequired=ios programos diegimui privalote bti prisijungs Administratoriaus teismis. +PowerUserPrivilegesRequired=ios programos diegimui privalote bti prisijungs Administratoriaus arba Power Users grups nario teismis. +SetupAppRunningError=Diegimo programa aptiko, kad yra paleista %1.%n%nUdarykite visas paleistas ios programos kopijas ir, jei norite tsti, paspauskite Gerai arba Ataukti, jei norite nutraukti diegim. +UninstallAppRunningError=Paalinimo programa aptiko, kad yra paleista %1.%n%nUdarykite visas paleistas ios programos kopijas ir, jei norite tsti, paspauskite Gerai arba Ataukti, jei norite nutraukti diegim. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Diegimo reimo pasirinkimas +PrivilegesRequiredOverrideInstruction=Pasirinkite diegimo reim +PrivilegesRequiredOverrideText1=%1 gali bti diegta visiems naudotojams (reikalingos administratoriaus teiss) arba tik jums. +PrivilegesRequiredOverrideText2=%1 gali bti diegta arba tik jums arba visiems naudotojams (reikalingos administratoriaus teiss). +PrivilegesRequiredOverrideAllUsers=diegti &visiems naudotojams +PrivilegesRequiredOverrideAllUsersRecommended=diegti &visiems naudotojams (rekomenduojama) +PrivilegesRequiredOverrideCurrentUser=diegti tik &man +PrivilegesRequiredOverrideCurrentUserRecommended=diegti tik &man (rekomenduojama) + +; *** Misc. errors +ErrorCreatingDir=Diegimo programa negali sukurti katalogo %1 +ErrorTooManyFilesInDir=Nemanoma sukurti failo %1 kataloge, nes jame per daug fail + +; *** Setup common messages +ExitSetupTitle=Udaryti diegimo program +ExitSetupMessage=Diegimas nebaigtas. Jei baigsite dabar, programa nebus diegta.%n%nJs galite paleisti diegimo program kit kart, kad pabaigtumte diegim.%n%nUdaryti diegimo program? +AboutSetupMenuItem=&Apie diegimo program... +AboutSetupTitle=Apie diegimo program +AboutSetupMessage=%1 versija %2%n%3%n%n%1 puslapis internete:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< &Atgal +ButtonNext=&Pirmyn > +ButtonInstall=&diegti +ButtonOK=Gerai +ButtonCancel=Ataukti +ButtonYes=&Taip +ButtonYesToAll=Taip &visk +ButtonNo=&Ne +ButtonNoToAll=N&e nieko +ButtonFinish=&Pabaiga +ButtonBrowse=&Nurodyti... +ButtonWizardBrowse=Nu&rodyti... +ButtonNewFolder=&Naujas katalogas + +; *** "Select Language" dialog messages +SelectLanguageTitle=Pasirinkite diegimo programos kalb +SelectLanguageLabel=Pasirinkite diegimo metu naudojam kalb. + +; *** Common wizard text +ClickNext=Paspauskite Pirmyn, jei norite tsti, arba Ataukti, jei norite ieiti i diegimo programos. +BeveledLabel= +BrowseDialogTitle=Nurodykite katalog +BrowseDialogLabel=Pasirinkite katalog i srao ir paspauskite Gerai. +NewFolderName=Naujas katalogas + +; *** "Welcome" wizard page +WelcomeLabel1=Sveiki! ia [name] diegimo programa. +WelcomeLabel2=Diegimo programa diegs [name] Js kompiuteryje.%n%nPrie tsiant diegim, rekomenduojama udaryti visas nereikalingas programas. + +; *** "Password" wizard page +WizardPassword=Slaptaodis +PasswordLabel1=is diegimas yra apsaugotas slaptaodiu. +PasswordLabel3=veskite slaptaod ir spauskite Pirmyn, jei norite tsti diegim. Atkreipkite dmes: didiosios ir maosios raids vertinamos skirtingai (case sensitive). +PasswordEditLabel=&Slaptaodis: +IncorrectPassword=vestas slaptaodis yra neteisingas. Pabandykite i naujo. + +; *** "License Agreement" wizard page +WizardLicense=Licencin sutartis +LicenseLabel=Perskaitykite i informacij prie tsdami diegim. +LicenseLabel3=Perskaitykite Licencijos sutart. Prie tsdami diegim Js turite sutikti su reikalavimais. +LicenseAccepted=A &sutinku su reikalavimais +LicenseNotAccepted=A &nesutinku su reikalavimais + +; *** "Information" wizard pages +WizardInfoBefore=Informacija +InfoBeforeLabel=Perskaitykite i informacij prie tsiant diegim. +InfoBeforeClickLabel=Kai bsite pasiruos tsti diegim, spauskite Pirmyn. +WizardInfoAfter=Informacija +InfoAfterLabel=Perskaitykite i informacij prie tsiant diegim. +InfoAfterClickLabel=Spauskite Pirmyn, kai bsite pasiruo tsti diegim. + +; *** "User Information" wizard page +WizardUserInfo=Informacija apie naudotoj +UserInfoDesc=veskite naudotojo duomenis. +UserInfoName=&Naudotojo vardas: +UserInfoOrg=&Organizacija: +UserInfoSerial=&Serijinis numeris: +UserInfoNameRequired=Js privalote vesti vard. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Pasirinkite diegimo katalog +SelectDirDesc=Kur turi bti diegta [name]? +SelectDirLabel3=Diegimo programa diegs [name] nurodyt katalog. +SelectDirBrowseLabel=Nordami tsti diegim spauskite Pirmyn. Jei norite pasirinkti kit katalog, spauskite Nurodyti. +DiskSpaceGBLabel=Reikia maiausiai [gb] GB laisvos vietos kietajame diske. +DiskSpaceMBLabel=Reikia maiausiai [mb] MB laisvos vietos kietajame diske. +CannotInstallToNetworkDrive=Diegimo programa negali diegti tinklin disk. +CannotInstallToUNCPath=Diegimo programa negali diegti UNC tipo katalog. +InvalidPath=Js privalote rayti piln keli su disko raide; pavyzdiui:%n%nC:\APP%n% ir negalima nurodyti UNC tipo katalog:%n%n\\Serveris\share +InvalidDrive=Diskas, kur nurodte, neegzistuoja arba yra neprieinamas. Nurodykite kit disk ir/arba katalog. +DiskSpaceWarningTitle=Nepakanka laisvos vietos diske +DiskSpaceWarning=Diegimui reikia bent %1 KB laisvos vietos, bet nurodytame diske yra tik %2 KB laisvos vietos.%n%nVis tiek norite tsti? +DirNameTooLong=Katalogo pavadinimas ar kelias iki jo per ilgas. +InvalidDirName=Nekorektikas katalogo pavadinimas. +BadDirName32=Katalogo pavadinime neturi bti simboli:%n%n%1 +DirExistsTitle=Tokio katalogo nra +DirExists=Katalogas:%n%n%1%n%n jau yra. Vis tiek norite diegti program tame kataloge? +DirDoesntExistTitle=Tokio katalogo nra. +DirDoesntExist=Katalogas:%n%n%1%n%n neegzistuoja. Norite kad katalogas bt sukurtas? + +; *** "Select Components" wizard page +WizardSelectComponents=Komponent pasirinkimas +SelectComponentsDesc=Kurie komponentai turi bti diegti? +SelectComponentsLabel2=Paymkite komponentus, kuriuos norite diegti; nuimkite ymes nuo komponent, kuri nenorite diegti. Kai bsite pasiruos tsti, spauskite Pirmyn. +FullInstallation=Pilnas vis komponent diegimas +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Glaustas diegimas +CustomInstallation=Pasirinktinis diegimas +NoUninstallWarningTitle=Komponentai egzistuoja +NoUninstallWarning=Diegimo programa aptiko, kad ie komponentai jau diegti Js kompiuteryje:%n%n%1%n%nJei nuimsite ymes nuo i komponent, jie vis tiek nebus itrinti.%n%nVis tiek norite tsti diegim? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Dabartinis Js pasirinkimas reikalauja [gb] GB laisvos vietos diske. +ComponentsDiskSpaceMBLabel=Dabartinis Js pasirinkimas reikalauja [mb] MB laisvos vietos diske. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Nurodykite papildomus veiksmus +SelectTasksDesc=Kokius papildomus veiksmus reikia atlikti? +SelectTasksLabel2=Nurodykite papildomus veiksmus, kuriuos diegimo programa turs atlikti [name] diegimo metu. Kai bsite pasiruos tsti diegim, spauskite Pirmyn. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Nurodykite Start Menu katalog +SelectStartMenuFolderDesc=Kur diegimo programa turt sukurti nuorodas? +SelectStartMenuFolderLabel3=Nuorodos bus sukurtos iame Start Menu kataloge. +SelectStartMenuFolderBrowseLabel=Nordami tsti diegim spauskite Pirmyn. Jei norite parinkti kit katalog, spauskite Nurodyti. +MustEnterGroupName=Js privalote vesti katalogo pavadinim. +GroupNameTooLong=Katalogo pavadinimas ar kelias iki jo per ilgas. +InvalidGroupName=Katalogo pavadinimas yra nekorektikas. +BadGroupName=Katalogo pavadinime neturi bti simboli:%n%n%1 +NoProgramGroupCheck2=&Nekurti Start Menu katalogo + +; *** "Ready to Install" wizard page +WizardReady=Pasirengta diegimui +ReadyLabel1=Diegimo programa pasirengusi diegti [name] Js kompiuteryje. +ReadyLabel2a=Spauskite diegti, jei norite tsti diegim, arba Atgal, jeigu norite perirti nustatymus arba juos pakeisti. +ReadyLabel2b=Spauskite diegti, jei norite tsti diegim. +ReadyMemoUserInfo=Naudotojo informacija: +ReadyMemoDir=Katalogas diegimui: +ReadyMemoType=Diegimo tipas: +ReadyMemoComponents=Pasirinkti komponentai: +ReadyMemoGroup=Start Menu katalogas: +ReadyMemoTasks=Papildomi veiksmai: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Parsisiuniami papildomi failai... +ButtonStopDownload=&Stabdyti parsisiuntim +StopDownload=Ar tikrai norite sustabdyti parsisiuntim? +ErrorDownloadAborted=Parsisiuntimas nutrauktas +ErrorDownloadFailed=Parsisisti nepavyko: %1 %2 +ErrorDownloadSizeFailed=Nepavyko gauti dydio: %1 %2 +ErrorFileHash1=Failo patikrinimas nepavyko: %1 +ErrorFileHash2=Neteisinga failo hash reikm: numatyta %1, rasta %2 +ErrorProgress=Netinkama eiga: %1 i %2 +ErrorFileSize=Neteisingas failo dydis: numatytas %1, rastas %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Pasirengimas diegimui +PreparingDesc=Diegimo programa pasirengusi [name] diegimui Js kompiuteryje. +PreviousInstallNotCompleted=Ankstesns programos diegimas/alinimas buvo neubaigtas. Jums reikt perkrauti kompiuter, kad ubaigtumte diegim.%n%nKai perkrausite kompiuter, paleiskite diegimo program dar kart, kad pabaigtumte [name] diegim. +CannotContinue=Diegimas negali bti tsiamas. Paspauskite Ataukti diegimo ubaigimui. +ApplicationsFound=ios programos naudoja failus, kurie turi bti perrayti diegimo metu. Rekomenduojama leisti diegimo programai automatikai udaryti ias programas. +ApplicationsFound2=ios programos naudoja failus, kurie turi bti perrayti diegimo metu. Rekomenduojama leisti diegimo programai automatikai udaryti ias programas. Po to, kai diegimas bus baigtas, diegimo programa bandys i naujo paleisti ias programas. +CloseApplications=&Automatikai udaryti programas +DontCloseApplications=&Neudarinti program +ErrorCloseApplications=Diegimo programai nepavyko automatikai udaryti vis program. Prie tsiant diegim, rekomeduojama udaryti visas programas, naudojanias failus, kurie turi bti perrayti diegimo metu. +PrepareToInstallNeedsRestart=Diegimo programai reikia perkrauti kompiuter. Po perkovimo, vl paleiskite diegimo program [name] diegimo ubaigimui.%n%nNorite perkrauti j dabar? + +; *** "Installing" wizard page +WizardInstalling=Vyksta diegimas +InstallingLabel=Palaukite kol diegimo programa diegs [name] Js kompiuteryje. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=[name] diegimas baigtas +FinishedLabelNoIcons=Diegimo programa baig [name] diegim Js kompiuteryje. +FinishedLabel=Diegimo programa baig [name] diegim Js kompiuteryje. Programa gali bti paleista pasirinkus atitinkamas nuorodas. +ClickFinish=Spauskite Pabaiga, kad udarytumte diegimo program. +FinishedRestartLabel=[name] diegimo ubaigimui, reikia perkrauti kompiuter. Norite perkrauti j dabar? +FinishedRestartMessage=[name] diegimo ubaigimui, reikia perkrauti kompiuter.%n%nNorite perkrauti j dabar? +ShowReadmeCheck=Taip, a noriau perskaityti README fail +YesRadio=&Taip, a noriu perkrauti kompiuter dabar +NoRadio=&Ne, a perkrausiu kompiuter vliau +; used for example as 'Run MyProg.exe' +RunEntryExec=Vykdyti %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Perirti %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Diegimo programai reikia kito diskelio +SelectDiskLabel2=Idkite diskel %1 ir spauskite Gerai.%n%nJeigu reikiami failai gali bti rasti kitame kataloge, nei pavaizduota emiau, veskite teising keli arba spauskite Nurodyti. +PathLabel=&Katalogas: +FileNotInDir2=%1 failas nerastas %2 kataloge. dkite teising diskel arba nurodykite teising keli. +SelectDirectoryLabel=Nurodykite kito diskelio viet. + +; *** Installation phase messages +SetupAborted=Diegimas nebuvo baigtas.%n%nPaalinkite priest ir pakartokite diegim vl. +AbortRetryIgnoreSelectAction=Pasirinkite veiksm +AbortRetryIgnoreRetry=Pabandyti dar kar&t +AbortRetryIgnoreIgnore=&Ignoruoti klaid ir tsti +AbortRetryIgnoreCancel=Nutraukti diegim + +; *** Installation status messages +StatusClosingApplications=Udaromos programos... +StatusCreateDirs=Kuriami katalogai... +StatusExtractFiles=Ipakuojami failai... +StatusCreateIcons=Kuriamos nuorodos... +StatusCreateIniEntries=Kuriami INI raai... +StatusCreateRegistryEntries=Kuriami registro raai... +StatusRegisterFiles=Registruojami failai... +StatusSavingUninstall=Isaugoma informacija programos paalinimui... +StatusRunProgram=Baigiamas diegimas... +StatusRestartingApplications=I naujo paleidiamos programos... +StatusRollback=Anuliuojami pakeitimai... + +; *** Misc. errors +ErrorInternal2=Vidin klaida: %1 +ErrorFunctionFailedNoCode=%1 nepavyko +ErrorFunctionFailed=%1 nepavyko; kodas %2 +ErrorFunctionFailedWithMessage=%1 nepavyko; kodas %2.%n%3 +ErrorExecutingProgram=Nepavyko paleisti failo:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Klaida skaitant registro ra:%n%1\%2 +ErrorRegCreateKey=Klaida sukuriant registro ra:%n%1\%2 +ErrorRegWriteKey=Klaida raant registro ra:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Klaida raant INI ra %1 faile. + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=Pralei&sti fail (nerekomenduojama) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignoruoti klaid ir tsti (nerekomenduojama) +SourceIsCorrupted=Pradinis failas sugadintas +SourceDoesntExist=Pradinio failo %1 nra +ExistingFileReadOnly2=Esamas failas yra paymtas Tik skaitymui todl negali bti pakeistas. +ExistingFileReadOnlyRetry=Paalinkite at&ribut Tik skaitymui ir bandykite vl +ExistingFileReadOnlyKeepExisting=Pali&kti esam fail +ErrorReadingExistingDest=Skaitant esam fail vyko klaida: +FileExistsSelectAction=Pasirinkite veiksm +FileExists2=Toks failas jau yra. +FileExistsOverwriteExisting=&Perrayti esam fail +FileExistsKeepExisting=Pali&kti esam fail +FileExistsOverwriteOrKeepAll=&Daryti taip ir esant kitiems konfliktams +ExistingFileNewerSelectAction=Pasirinkite veiksm +ExistingFileNewer=Esamas failas yra naujesnis u t, kur diegimo programa bando rayti. Rekomenduojama palikti esam fail.%n%nPalikti naujesn fail? +ExistingFileNewer2=Esamas failas yra naujesnis u t, kur diegimo programa bando rayti. +ExistingFileNewerOverwriteExisting=&Perrayti esam fail +ExistingFileNewerKeepExisting=Pali&kti esam fail (rekomenduojama) +ExistingFileNewerOverwriteOrKeepAll=&Daryti taip ir esant kitiems konfliktams +ErrorChangingAttr=Keiiant failo atributus vyko klaida: +ErrorCreatingTemp=Kuriant fail pasirinktame kataloge vyko klaida: +ErrorReadingSource=Skaitant diegiamj fail vyko klaida: +ErrorCopying=Kopijuojant fail vyko klaida: +ErrorReplacingExistingFile=Perraant esam fail vyko klaida: +ErrorRestartReplace=Perkrovimas/Perraymas nepavyko: +ErrorRenamingTemp=Pervadinant fail pasirinktame kataloge vyko klaida: +ErrorRegisterServer=Nepavyko uregistruoti DLL/OCX bibliotekos: %1 +ErrorRegSvr32Failed=RegSvr32 registracijos klaida %1 +ErrorRegisterTypeLib=Nepavyko uregistruoti tip bibliotekos: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=Visiems naudotojams +UninstallDisplayNameMarkCurrentUser=Esamam naudotojui + +; *** Post-installation errors +ErrorOpeningReadme=Bandant atidaryti README fail vyko klaida. +ErrorRestartingComputer=Diegimo programa negali perkrauti kompiuterio. Perkraukite kompiuter prastu bdu. + +; *** Uninstaller messages +UninstallNotFound=%1 failo nra. Paalinti nemanoma. +UninstallOpenError=%1 failas negali bti atidarytas. Paalinti nemanoma. +UninstallUnsupportedVer=Paalinimo urnalo failas %1 yra paalinimo programai nesuprantamo formato. Paalinti nemanoma. +UninstallUnknownEntry=Neinomas raas (%1) rastas paalinimo urnalo faile. +ConfirmUninstall=Esate tikri, kad norite paalinti %1 ir visus priklausanius komponentus? +UninstallOnlyOnWin64=is diegimas gali bti paalintas tik 64 bit Windows sistemose. +OnlyAdminCanUninstall=Tik administratoriaus teises turintis naudotojas gali paalinti program. +UninstallStatusLabel=Palaukite, kol %1 bus paalinta i Js kompiuterio. +UninstalledAll=%1 buvo skmingai paalinta i Js kompiuterio. +UninstalledMost=%1 paalinimas skmingai baigtas.%n%nKai kurie elementai nebuvo itrinti - juos galite paalinti rankiniu bdu. +UninstalledAndNeedsRestart=%1 paalinimui ubaigti Js kompiuteris turi bti perkrautas.%n%nNorite perkrauti j dabar? +UninstallDataCorrupted=%1 failas yra sugadintas. Programos paalinti nemanoma. + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Itrinti bendruosius failus? +ConfirmDeleteSharedFile2=Aptikta, kad jokia programa nenaudoja bendrj fail. Norite itrinti bendruosius failus? %n%nJeigu kurios nors programos naudoja iuos failus, ir jie bus itrinti, tos programos gali veikti neteisingai. Jeigu nesate tikras - spauskite Ne. Failo palikimas Js kompiuteryje nesukels joki problem. +SharedFileNameLabel=Failo pavadinimas: +SharedFileLocationLabel=Vieta: +WizardUninstalling=Paalinimo eiga +StatusUninstalling=alinama %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Diegiama %1. +ShutdownBlockReasonUninstallingApp=alinama %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 versija %2 +AdditionalIcons=Papildomos nuorodos: +CreateDesktopIcon=Sukurti nuorod &Darbalaukyje +CreateQuickLaunchIcon=Sukurti Spariosios &Paleisties nuorod +ProgramOnTheWeb=%1 iniatinklyje +UninstallProgram=Paalinti %1 +LaunchProgram=Paleisti %1 +AssocFileExtension=&Susieti %1 program su failo pltiniu %2 +AssocingFileExtension=%1 programa susiejama su failo pltiniu %2... +AutoStartProgramGroupDescription=Automatin paleistis: +AutoStartProgram=Automatikai paleisti %1 +AddonHostProgramNotFound=%1 nerasta Js nurodytame kataloge.%n%nVis tiek norite tsti? diff --git a/Files/Languages/Unofficial/Luxemburgish.isl b/Files/Languages/Unofficial/Luxemburgish.isl new file mode 100644 index 00000000..467aa5e7 --- /dev/null +++ b/Files/Languages/Unofficial/Luxemburgish.isl @@ -0,0 +1,228 @@ +; ** Inno Setup version 5.1.11+ Luxemburgish messages ** +; ** Original Author: Norb (lx1no@yahoo.com) ** +; ** Last modification by: Pit Wenkin (pit@wenkin.lu) ** +; ** Last modification date: 2011-01-13 ** + +[LangOptions] +LanguageName=Luxembourgish +LanguageID=$1007 + +[Messages] +SetupAppTitle=Setup +SetupWindowTitle=Setup - %1 +UninstallAppTitle=Uninstall +UninstallAppFullTitle=%1 Uninstall +InformationTitle=Informatioun +ConfirmTitle=Besttegen +ErrorTitle=Fehler +SetupLdrStartupMessage=Elo gtt %1 installiert. Wll Dir viru fueren? +LdrCannotCreateTemp=Konnt keng temporr Datei opmaachen. Setup gtt ofgebrach +LdrCannotExecTemp=Kann d'Datei am Termporrverzeechnis net ausfieren. D'Installatioun gtt ofgebrach +LastErrorMessage=%1.%n%nFehler %2: %3 +SetupFileMissing=D'Datei %1 fehlt am Installatiounsverzeechnis. Korrigiert den Problem oder besuergt Iech eng nei Kopie vum Programm. +SetupFileCorrupt=D'Installatiounsdateien hunn Fehler. Besuergt Iech eng nei Kopie vum Programm. +SetupFileCorruptOrWrongVer=D'Installatiounsdateien hunn Fehler oder sinn net mat dser Versioun vum Installatiounsprogramm kompatibel. Korrigiert den Problem oder besuergt Iech eng nei Kopie vum Programm. +NotOnThisPlatform=Dse Programm leeft net mat %1. +OnlyOnThisPlatform=Dse Programm muss mat %1 lafen. +OnlyOnTheseArchitectures=Dse Programm kann nmmen op Windowsversiounen installiert ginn, di fir folgend Prozessorarchitekturen entworf gi sinn: %n%n%1 +MissingWOW64APIs=Ds Windowsversioun huet keng Funktionalititen di vum Setup fir eng 64-bit Installatioun gebraucht ginn. Fir den Problem ze behiewen, installiert w.e.g. den Service Pack %1. +WinVersionTooLowError=Dse Programm braucht %1 Versioun %2 oder mi nei. +WinVersionTooHighError=Dse Programm kann net op %1 Versioun %2 oder mi nei installiert ginn. +AdminPrivilegesRequired=Dir musst als Administrator ageloggt sinn fir dse Programm installieren ze knnen. +PowerUserPrivilegesRequired=Dir musst als Administrator oder als Member vum Power Users Grupp ageloggt sinn fir dse Programm installieren ze knnen. +SetupAppRunningError=Den Installatiounsprogramm huet festgestallt, dass %1 den Moment leeft.%n%nStoppt elo w.e.g. all Instanzen an klickt dann op OK fir Virun ze fueren oder op Ofbriechen fir opzehalen. +UninstallAppRunningError=Den Desinstallatiounsprogramm huet festgestallt, dass %1 den Moment leeft.%n%nStoppt elo w.e.g. all Instanzen an klickt dann op OK fir Virun ze fueren oder op Ofbriechen fir opzehalen. +ErrorCreatingDir=D'Verzeechnis "%1" konnt net ugeluecht ginn +ErrorTooManyFilesInDir=Konnt keng Datei an d'Verzeechnis "%1" schreiwen, well ze vill Dateien an dsem Verzeechnis sinn. +ExitSetupTitle=Installatioun verloossen +ExitSetupMessage=D'Installatioun ass net ferdeg. Wann Dir elo ofbriecht gtt de Programm net installiert.%n%nDir knnt den Installatiounsprogramm zu engem aneren Zitpunkt nees starte fir mat der Installatioun virun ze fueren.%n%nD'Installatioun verloossen? +AboutSetupMenuItem=&Iwwert d'Installatioun... +AboutSetupTitle=Iwwert d'Installatioun +AboutSetupMessage=%1 Versioun %2%n%3%n%n%1 Homepage:%n%4 +AboutSetupNote= +TranslatorNote= +ButtonBack=< &Zerck +ButtonNext=&Virun > +ButtonInstall=&Installieren +ButtonOK=OK +ButtonCancel=Ofbriechen +ButtonYes=&Jo +ButtonYesToAll=Jo zu &Allem +ButtonNo=&Neen +ButtonNoToAll=N&een zu Allem +ButtonFinish=&Ferdeg +ButtonBrowse=&Duerchsichen... +ButtonWizardBrowse=D&uerchsichen... +ButtonNewFolder=&Neit Verzeechnis uleen +SelectLanguageTitle=Wielt d'Installatiounssprooch +SelectLanguageLabel=Wielt d'Sprooch di whrend der Installatioun benotzt soll ginn: +ClickNext=Klickt op Virun fir virun ze fueren oder Ofbriechen fir d'Installatioun ofzebriechen. +BeveledLabel= +BrowseDialogTitle=Sich nom Verzeechnis +BrowseDialogLabel=Wielt en Verzeechnis aus der Lscht an klickt dann op OK. +NewFolderName=Neit Verzeechnis +WelcomeLabel1=Wllkomm zur [name] Installatioun +WelcomeLabel2=Elo gtt [name/ver] ob rem Computer installiert.%n%nEt gtt ugerode fir all aner Applicatiounen zouzemaachen ier Dir viru fuert. +WizardPassword=Passwuert +PasswordLabel1=Ds Installatioun ass mat engem Passwuert geschtzt. +PasswordLabel3=Gidd d'Passwuert an, an klickt duerno op Virun. Passwierder sinn ofhngeg vu Kleng/Groussschreiwung. +PasswordEditLabel=&Passwuert: +IncorrectPassword=Dat war dat falscht Passwuert. Probiert nach emol. +WizardLicense=Lizenzofkommen +LicenseLabel=Liest w.e.g. folgend wichteg Informatiounen ier Dir viru fuert. +LicenseLabel3=Liest w.e.g. dat folgend Ofkommen. Dir musst d'Ofkommen akzeptieren ier Dir mat der Installatioun viru fuert. +LicenseAccepted=Ech sinn mam Ofkommen &averstanen +LicenseNotAccepted=Ech sinn mam Ofkommen &net averstanen +WizardInfoBefore=Informatioun +InfoBeforeLabel=Liest w.e.g. ds folgend wichteg Informatioun ier Dir virun fuert. +InfoBeforeClickLabel=Wann Dir prett sidd fir mat der Installatioun virun ze fueren, klickt op Virun. +WizardInfoAfter=Informatioun +InfoAfterLabel=Liest w.e.g. ds folgend wichteg Informatioun ier Dir virun fuert. +InfoAfterClickLabel=Wann Dir prt sidd fir mat der Installatioun virun ze fueren, klickt op Virun. +WizardUserInfo=Benotzerinformatioun +UserInfoDesc=Gidd w.e.g. r Informatiounen an. +UserInfoName=&Benotzernumm: +UserInfoOrg=&Organisatioun: +UserInfoSerial=&Seriennummer: +UserInfoNameRequired=Dir musst en Numm aginn. +WizardSelectDir=Wielt d'Destinatioun aus +SelectDirDesc=Wouhinner soll [name] installiert ginn? +SelectDirLabel3=[name] gtt an folgend Verzeechnis installiert. +SelectDirBrowseLabel=Vir weider ze fueren, klickt ob Virun. Wann Dir en anert Verzeechnis auswiele wllt, klickt op Duerchsichen. +DiskSpaceMBLabel=Et gi winstens [mb] MB fri Plaatz um Disk gebraucht. +ToUNCPathname=D'Installatioun kann net op en UNC-WEE gemaach ginn. Wann Dir an engem Netzwierk installiere wllt, da musst Dir d'Netzlafwierk mappen. +InvalidPath=Dir musst en komplette Wee mat Lafwierksbuchstaw aginn; z. B.:%n%nC:\APP%n%noder en UNC-Pad am Format:%n%n\\server\share +InvalidDrive=D'Lafwierk oder UNC-Share dat Dir ausgewielt hutt existiert net oder et ass keen Zougrff miglech. Wielt w.e.g. en anert aus. +DiskSpaceWarningTitle=Net genuch Plaatz um Disk +DiskSpaceWarning=D'Installatioun brauch en minimum vun %1 KB Plaatz fir installieren ze knne m um ausgewielte Lafwierk sinn nmmen %2 KB fri.%n%nWllt Dir awer viru fueren? +DirNameTooLong=De Verzeechnisnumm oder Wee ass ze laang. +InvalidDirName=De Verzeechnisnumm ass net valabel. +BadDirName32=Verzeechnisnimm dierfe keng vun den folgenden Zeechen enthalen:%n%n%1 +DirExistsTitle=Verzeechnis existiert schon +DirExists=D'Verzeechnis:%n%n%1%n%nexistiert schon. Wllt Dir awer an dst Verzeechnis installieren? +DirDoesntExistTitle=Verzeechnis existiert net +DirDoesntExist=D'Verzeechnis:%n%n%1%n%n existiert net. Soll d'Verzeechnis kreiert ginn? +WizardSelectComponents=Wielt d'Komponenten aus +SelectComponentsDesc=Wi eng Komponente sollen installiert ginn? +SelectComponentsLabel2=Wielt d'Komponenten aus di installiert solle ginn; wielt di Komponenten of di net installiert solle ginn. Klickt op Virun wann Dir prett sidd fir virun ze fueren. +FullInstallation=Komplettinstallatioun +CompactInstallation=Kompaktinstallatioun +CustomInstallation=Benotzerinstallatioun +NoUninstallWarningTitle=Komponenten existieren +NoUninstallWarning=D'Installatioun huet festgestallt, dass folgend Komponente schon op rem Computer installiert sinn:%n%n%1%n%nWann Dir d'Komponenten ofwielt, ginn se net gelscht.%n%nWllt Dir awer viru fueren? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceMBLabel=Di derziteg Auswiel braucht en minimum vun [mb] MB Plaatz um Disk. +WizardSelectTasks=Zoustzlech Aufgaben auswielen +SelectTasksDesc=Wi eng zoustzlech Aufgabe sollen ausgefouert ginn? +SelectTasksLabel2=Wielt di zoustzlech Aufgaben aus, di d'Installatioun maache soll whrend [name] installiert gtt. Klickt dann op Virun. +WizardSelectProgramGroup=Wielt d'Startmenverzeechnis +SelectStartMenuFolderDesc=Wou soll den Installatiounsprogramm den Shortcut vum Programm bisetzen? +SelectStartMenuFolderLabel3=Den Installatiounsprogramm kreiert dem Programm seng Shortcuts am folgende Startmenverzeechnis. +SelectStartMenuFolderBrowseLabel=Fir weiderzefueren, klickt op Virun. Wann Dir en anert Verzeechnis auswiele wllt, klickt op Duerchsichen. +MustEnterGroupName=Dir musst en Verzeechnisnumm aginn. +GroupNameTooLong=De Verzeechnisnumm oder Wee ass ze laang. +InvalidGroupName=De Verzeechnisnumm ass net valabel. +BadGroupName=De Verzeechnisnumm dierf keng vun den folgenden Zeechen enthalen:%n%n%1 +NoProgramGroupCheck2=Kee&n Startmenverzeechnis kreieren +WizardReady=Prett fir ze installieren +ReadyLabel1=D'Installatioun vun [name] op rem Computer kann elo ugefaange ginn. +ReadyLabel2a=Klickt op Installieren fir mat der Installatioun virun ze fueren, oder klickt op Zerck wann Dir Astellungen iwwerliesen oder nnere wllt. +ReadyLabel2b=Klickt op Installieren fir mat der Installatioun virun ze fueren. +ReadyMemoUserInfo=Benotzerinformatioun: +ReadyMemoDir=Zilverzeechnis: +ReadyMemoType=Installatiounstyp: +ReadyMemoComponents=Ausgewielt Komponenten: +ReadyMemoGroup=Startmenverzeechnis: +ReadyMemoTasks=Zoustzlech Aufgaben: +WizardPreparing=Prpariert d'Installatioun +PreparingDesc=Den Installatiounsprogramm bereet d'Installatioun vun [name] op rem Computer fir. +PreviousInstallNotCompleted=D'Installatioun/Lsche vun engem friere Programm war net ferdeg. Dir musst den Computer nei starte fir ds Installatioun ofzeschlissen.%n%nNodeems Dir den Computer nei gestart hutt, start den Installatiounsprogramm nach emol fir [name] ferdeg ze installieren. +CannotContinue=Den Installatiounsprogramm kann net viru fueren. Klickt op Ofbriechen fir opzehalen. +WizardInstalling=Installieren +InstallingLabel=Waard w.e.g. whrend dn Installatiounsprogramm [name] op rem Computer installiert. +FinishedHeadingLabel=Den [name] Installatiounswizard ass ferdeg. +FinishedLabelNoIcons=D'Installatioun vun [name] op rem Computer ass ferdeg. +FinishedLabel=Den Installatiounsprogramm ass ferdeg mat der Installatioun vun [name] op rem Computer. De Programm kann elo mat engem Duebelklick op d'Ikon gestart ginn. +ClickFinish=Klickt op Ferdeg fir d'Installatioun ze verloossen. +FinishedRestartLabel=Fir d'Installatioun vun [name] ferdeg ze maachen, muss den Computer nei gestart ginn. Wllt Dir elo nei starten? +FinishedRestartMessage=Fir d'Installatioun vun [name] ferdeg ze maachen, muss den Computer nei gestart ginn.%n%nWllt Dir elo nei starten? +ShowReadmeCheck=Jo, ech wll d'README Datei liesen +YesRadio=&Jo, start den Computer elo nei +NoRadio=&Neen, ech starten den Computer herno nei +RunEntryExec=Start %1 +RunEntryShellExec=Weis %1 +ChangeDiskTitle=D'Installatioun brauch den nchsten Disk +SelectDiskLabel2=Leet den Disk %1 an an klickt op OK.%n%nWann d'Dateien an engem anere Verzeechnis sti wi dat wat ugewise gtt, da gitt den richtege Wee an oder klickt op Duerchsichen. +PathLabel=&Wee: +FileNotInDir2=D'Datei "%1" konnt op "%2" net fonnt ginn. Leet w.e.g. den richtegen Disk an oder wielt en anert Verzeechnis. +SelectDirectoryLabel=Gidd w.e.g. d'Plaatz vum nchsten Disk un. +SetupAborted=D'Installatioun ass net ferdeg.%n%nVersicht den Problem ze behiewen an start d'Installatioun nach emol. +EntryAbortRetryIgnore=Klickt op Widderhuelen fir nach emol ze probieren, Ignorieren fir awer virun ze fueren oder Ofbriechen fir mat der Installatioun opzehalen. +StatusCreateDirs=Kreiert Verzeechnisser... +StatusExtractFiles=Paakt Dateien aus... +StatusCreateIcons=Kreiert Shortcuts... +StatusCreateIniEntries=Kreiert INI Antrg... +StatusCreateRegistryEntries=Kreirt Registerantrg... +StatusRegisterFiles=Registriert Dateien... +StatusSavingUninstall=Spichert Desinstallatiounsinformatiounen... +StatusRunProgram=Brngt d'Installatioun zu Enn... +StatusRollback=Maachen d'nnerungen nees rckgngeg... +ErrorInternal2=Interne Fehler: %1 +ErrorFunctionFailedNoCode=%1 feelgeschloen +ErrorFunctionFailed=%1 huet feelgeschloen; Code %2 +ErrorFunctionFailedWithMessage=%1 huet feelgeschloen; Code %2.%n%3 +ErrorExecutingProgram=Kann folgend Datei net ausfieren: %n%1 +ErrorRegOpenKey=Kann folgende Registerschlssel net liesen:%n%1\%2 +ErrorRegCreateKey=Kann folgende Registerschlssel net uleen:%n%1\%2 +ErrorRegWriteKey=Kann folgende Registerschlssel net beschreiwen:%n%1\%2 +ErrorIniEntry=Konnt keen INI Antrag an der Datei "%1" uleen. +FileAbortRetryIgnore=Klickt op Widderhuelen fir nach emol ze probieren, Ignorieren fir d'Datei ze iwwergoen (ass net ugeroden), oder Ofbriechen fir d'Installatioun ze stoppen. +FileAbortRetryIgnore2=Klickt op Widderhuelen fir nach emol ze probieren, Ignorieren fir awer virun ze fueren (ass net ugeroden), oder Ofbriechen fir d'Installatioun ze stoppen. +SourceIsCorrupted=D'Sourcedatei huet en Fehler. +SourceDoesntExist=D'Sourcedatei "%1" existiert net. +ExistingFileReadOnly=Di bestehend Datei ass als 'read-only' agestallt.%n%nKlickt op Widderhuelen fir d''read-only' Attribut ze lschen an nach emol ze versichen, Ignorieren fir d'Datei ze iwwergoen oder Ofbriechen fir d'Installatioun ze stoppen. +ErrorReadingExistingDest=Beim Liese vun der bestehender Datei ass en Fehler opgetrueden: +FileExists=Ds Datei gtt et schon.%n%nWll Dir, dass den Installatiounsprogramm ds Datei iwwerschreift? +ExistingFileNewer=Di bestehend Datei ass mi nei wi di, di den Installatiounsprogramm installiere wll. Et gtt ugeroden fir di bestehend Datei ze halen.%n%nWll Dir di bestehend Datei behalen? +ErrorChangingAttr=Beim Versuch d'Attributer vun der bestehender Datei ze nneren ass en Fehler opgetrueden: +ErrorCreatingTemp=Beim Versuch eng Datei am Zilverzeechnis unzeleen ass en Fehler opgetrueden: +ErrorReadingSource=Beim Versuch d'Quelldatei ze liesen ass en Fehler opgetrueden: +ErrorCopying=Beim Versuch eng Datei ze kopieren ass en Fehler opgetrueden: +ErrorReplacingExistingFile=Beim Versuch di bestehend Datei ze ersetzen ass en Fehler opgetrueden: +ErrorRestartReplace=RestartReplace huet feelgeschloen: +ErrorRenamingTemp=Beim mbenenne vun enger Datei am Zilverzeechnis ass en Fehler opgetruede. +ErrorRegisterServer=Kann d'DLL/OCX %1 net registrieren. +ErrorRegSvr32Failed=RegSvr32 mat Fehlercode %1 feelgeschloen. +ErrorRegisterTypeLib=Kann d'Librairie %1 net registrieren +ErrorOpeningReadme=Beim Opmaache vun der README Datei ass et en Fehler ginn. +ErrorRestartingComputer=Den Installatiounsprogramm konnt den Computer net nei starten. Maacht et w.e.g. manuell. +UninstallNotFound=D'Datei "%1" existiert net. Kann net lschen. +UninstallOpenError=D'Datei "%1" konnt net opgemaach ginn. Kann net lschen +UninstallUnsupportedVer=D'Desinstallatiounslogdatei "%1" ass an engem fir dsen Desinstallatiounsprogramm onbekannte Format. Kann net desinstallieren +UninstallUnknownEntry=Am Uninstalllog steet en onbekannten Antrag (%1) +ConfirmUninstall=Sidd Dir scher, dass Dir %1 an all seng Komponente lsche wllt? +UninstallOnlyOnWin64=Ds Installatioun kann nmmen op engem 64-bit Windows gelscht ginn. +OnlyAdminCanUninstall=D'Installatioun kann nmme vun engem Benotzer mat Administratorrechter desinstalliert ginn. +UninstallStatusLabel=Waart w.e.g. bis dass %1 vum rem Computer gelscht ginn ass. +UninstalledAll=%1 ass mat Erfolleg vun rem Computer gelscht ginn. +UninstalledMost=%1 ass desinstalliert.%n%nE puer Dateie konnten net gelscht ginn. Dir knnt se manuell lschen. +UninstalledAndNeedsRestart=Fir d'Desinstallatioun vun %1 ze kompletiere muss ren Computer nei gestart ginn.%n%nWll Dir elo nei starten +UninstallDataCorrupted="%1" Datei huet en Fehler an kann net desinstalliert ginn +ConfirmDeleteSharedFileTitle=Gemeinsam Datei lschen? +ConfirmDeleteSharedFile2=D System weist un, dass di folgend gemeinsam Datei vu kengem anere Programm benotzt gtt. Wll Dir, dass di gemeinsam Datei gelscht gtt?%n%nWann soss Programmer ds Datei nach benotzen an si gtt gelscht, da kann et sinn, dass di Programmer net mi richteg funktionieren. Wann Dir net scher sidd, wielt Neen. Wann Dir d'Datei op rem PC stoe loosst, entsteet domadder keen Nodeel. +SharedFileNameLabel=Dateinumm: +SharedFileLocationLabel=Plaatz: +WizardUninstalling=Uninstall Status +StatusUninstalling=Desinstallieren %1... + +[CustomMessages] +NameAndVersion=%1 Versioun %2 +AdditionalIcons=Zoustzlech Ikonen: +CreateDesktopIcon=Kreier eng &Desktop Ikon +CreateQuickLaunchIcon=Kreier eng Schnellstart Ikon +ProgramOnTheWeb=%1 um Internet +UninstallProgram=Lsch %1 +LaunchProgram=Start %1 +AssocFileExtension=&Associier %1 mat der Dateiextensioun %2 +AssocingFileExtension=Associieren %1 mat der Dateiextensioun %2... diff --git a/Files/Languages/Unofficial/Macedonian.isl b/Files/Languages/Unofficial/Macedonian.isl new file mode 100644 index 00000000..88dea5ca --- /dev/null +++ b/Files/Languages/Unofficial/Macedonian.isl @@ -0,0 +1,318 @@ +; Macedonian translation is made for Inno Setup version 5.1.11+ +; by Bojan Stosevski, M.D. Macedonia, bxxxn@hotmail.com +; +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/is3rdparty.php +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Ma<043A>e<0434>o<043d>c<043A><0438> +LanguageID=$042F +LanguageCodePage=1251 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle= +SetupWindowTitle= - %1 +UninstallAppTitle= +UninstallAppFullTitle=%1 + +; *** Misc. common +InformationTitle= +ConfirmTitle= +ErrorTitle= + +; *** SetupLdr messages +SetupLdrStartupMessage= %1. ? +LdrCannotCreateTemp= . +LdrCannotExecTemp= . + +; *** Startup error messages +LastErrorMessage=%1.%n%n %2: %3 +SetupFileMissing= %1 . . +SetupFileCorrupt= . . +SetupFileCorruptOrWrongVer= , . . +NotOnThisPlatform= %1. +OnlyOnThisPlatform= %1. +OnlyOnTheseArchitectures= Windows :%n%n%1 +MissingWOW64APIs= Windows 64- . , Service Pack %1. +WinVersionTooLowError= %1 %2 . +WinVersionTooHighError= %1 %2 . +AdminPrivilegesRequired= . +PowerUserPrivilegesRequired= (Power User Group) . +SetupAppRunningError= %1 .%n%n , , . +UninstallAppRunningError= %1 .%n%n , , . + +; *** Misc. errors +ErrorCreatingDir= "%1" +ErrorTooManyFilesInDir= "%1" + +; *** Setup common messages +ExitSetupTitle= +ExitSetupMessage= . , .%n%n .%n%n ? +AboutSetupMenuItem=& ... +AboutSetupTitle= +AboutSetupMessage=%1 %2%n%3%n%n%1 :%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< & +ButtonNext=& > +ButtonInstall=& +ButtonOK= +ButtonCancel= +ButtonYes= +ButtonYesToAll= & +ButtonNo= +ButtonNoToAll=& +ButtonFinish=& +ButtonBrowse=&... +ButtonWizardBrowse=&... +ButtonNewFolder=& + +; *** "Select Language" dialog messages +SelectLanguageTitle= +SelectLanguageLabel= : + +; *** Common wizard text +ClickNext= , . +BeveledLabel= +BrowseDialogTitle= +BrowseDialogLabel= , . +NewFolderName= + +; *** "Welcome" wizard page +WelcomeLabel1= [name] +WelcomeLabel2= [name/ver] .%n%n . + +; *** "Password" wizard page +WizardPassword= +PasswordLabel1= . +PasswordLabel3= , . . +PasswordEditLabel=&: +IncorrectPassword= . . + +; *** "License Agreement" wizard page +WizardLicense= +LicenseLabel= . +LicenseLabel3= . . +LicenseAccepted= & +LicenseNotAccepted= & + +; *** "Information" wizard pages +WizardInfoBefore= +InfoBeforeLabel= . +InfoBeforeClickLabel= , . +WizardInfoAfter= +InfoAfterLabel= . +InfoAfterClickLabel= , . + +; *** "User Information" wizard page +WizardUserInfo= +UserInfoDesc= . +UserInfoName=& : +UserInfoOrg=&: +UserInfoSerial=& : +UserInfoNameRequired= . + +; *** "Select Destination Location" wizard page +WizardSelectDir= +SelectDirDesc= [name] ? +SelectDirLabel3= [name] . +SelectDirBrowseLabel= , . , . +DiskSpaceMBLabel= [mb] . +ToUNCPathname= . , . +InvalidPath= ; :%n%nC:\APP%n% . UNC :%n%n\\server\share +InvalidDrive= . . +DiskSpaceWarningTitle= +DiskSpaceWarning= %1 , %2 .%n%n ? +DirNameTooLong= . +InvalidDirName= . +BadDirName32= :%n%n%1 +DirExistsTitle= +DirExists=:%n%n%1%n%n . ? +DirDoesntExistTitle= +DirDoesntExist=:%n%n%1%n%n . ? + +; *** "Select Components" wizard page +WizardSelectComponents= +SelectComponentsDesc= ? +SelectComponentsLabel2= ; . . +FullInstallation= +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation= +CustomInstallation= +NoUninstallWarningTitle= +NoUninstallWarning= :%n%n%1%n%n .%n%n ? +ComponentSize1=%1 +ComponentSize2=%1 +ComponentsDiskSpaceMBLabel= [mb] . + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Select Additional Tasks +SelectTasksDesc= ? +SelectTasksLabel2= [name], . + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup= +SelectStartMenuFolderDesc= ? +SelectStartMenuFolderLabel3= . +SelectStartMenuFolderBrowseLabel= , . , . +MustEnterGroupName= . +GroupNameTooLong= . +InvalidGroupName= . +BadGroupName= :%n%n%1 +NoProgramGroupCheck2=& + +; *** "Ready to Install" wizard page +WizardReady= +ReadyLabel1= [name] . +ReadyLabel2a= , . +ReadyLabel2b= . +ReadyMemoUserInfo= : +ReadyMemoDir= : +ReadyMemoType= : +ReadyMemoComponents= : +ReadyMemoGroup= : +ReadyMemoTasks= : + +; *** "Preparing to Install" wizard page +WizardPreparing= +PreparingDesc= [name] . +PreviousInstallNotCompleted=/ . .%n%n [name]. +CannotContinue= . . + +; *** "Installing" wizard page +WizardInstalling= +InstallingLabel= [name] . + +; *** "Setup Completed" wizard page +FinishedHeadingLabel= [name] +FinishedLabelNoIcons= [name] . +FinishedLabel= [name] . . +ClickFinish= . +FinishedRestartLabel= [name], . ? +FinishedRestartMessage= [name], .%n%n ? +ShowReadmeCheck=, +YesRadio=&, +NoRadio=&, +; used for example as 'Run MyProg.exe' +RunEntryExec= %1 +; used for example as 'View Readme.txt' +RunEntryShellExec= %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle= +SelectDiskLabel2= %1 .%n%n , . +PathLabel=&Path: +FileNotInDir2= "%1" "%2". . +SelectDirectoryLabel= . + +; *** Installation phase messages +SetupAborted= .%n%n . +EntryAbortRetryIgnore= , , . + +; *** Installation status messages +StatusCreateDirs= ... +StatusExtractFiles= ... +StatusCreateIcons= ... +StatusCreateIniEntries= ... +StatusCreateRegistryEntries= ... +StatusRegisterFiles= ... +StatusSavingUninstall= ... +StatusRunProgram= ... +StatusRollback= ... + +; *** Misc. errors +ErrorInternal2= : %1 +ErrorFunctionFailedNoCode=%1 +ErrorFunctionFailed=%1 ; %2 +ErrorFunctionFailedWithMessage=%1 ; %2.%n%3 +ErrorExecutingProgram= :%n%1 + +; *** Registry errors +ErrorRegOpenKey= :%n%1\%2 +ErrorRegCreateKey= :%n%1\%2 +ErrorRegWriteKey= :%n%1\%2 + +; *** INI errors +ErrorIniEntry= "%1". + +; *** File copying errors +FileAbortRetryIgnore= , ( ), . +FileAbortRetryIgnore2= , ( ), . +SourceIsCorrupted= +SourceDoesntExist= "%1" +ExistingFileReadOnly= read-only.%n%n read-only , , . +ErrorReadingExistingDest= : +FileExists= .%n%n ? +ExistingFileNewer= . .%n%n ? +ErrorChangingAttr= : +ErrorCreatingTemp= : +ErrorReadingSource= : +ErrorCopying= : +ErrorReplacingExistingFile= : +ErrorRestartReplace=RestartReplace : +ErrorRenamingTemp= : +ErrorRegisterServer= DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 %1 +ErrorRegisterTypeLib= : %1 + +; *** Post-installation errors +ErrorOpeningReadme= . +ErrorRestartingComputer= . . + +; *** Uninstaller messages +UninstallNotFound= "%1" . . +UninstallOpenError= "%1" . +UninstallUnsupportedVer= "%1" . +UninstallUnknownEntry= (%1) +ConfirmUninstall= %1 ? +UninstallOnlyOnWin64= 64- Windows. +OnlyAdminCanUninstall= . +UninstallStatusLabel= %1 . +UninstalledAll=%1 . +UninstalledMost=%1 .%n%n . . +UninstalledAndNeedsRestart= %1, .%n%n ? +UninstallDataCorrupted="%1" . + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle= ? +ConfirmDeleteSharedFile2= . ?%n%n , . , . . +SharedFileNameLabel= : +SharedFileLocationLabel=: +WizardUninstalling= +StatusUninstalling= %1... + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 %2 +AdditionalIcons= : +CreateDesktopIcon= & +CreateQuickLaunchIcon= & +ProgramOnTheWeb=%1 +UninstallProgram= %1 +LaunchProgram= %1 +AssocFileExtension=& %1 %2 +AssocingFileExtension= %1 %2 ... diff --git a/Files/Languages/Unofficial/Malaysian.isl b/Files/Languages/Unofficial/Malaysian.isl new file mode 100644 index 00000000..382f9212 --- /dev/null +++ b/Files/Languages/Unofficial/Malaysian.isl @@ -0,0 +1,323 @@ +; *** Inno Setup version 5.1.0+ Malay messages *** +; +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/is3rdparty.php +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). +; +; $jrsoftware: issrc/Files/Languages/Malaysia-5.1.0.isl,v 1.6 2005/09/17 02:23:56 smd Exp $ +; Diterjemah oleh (Translated by): +; Shaiffulnizam Mohamad +; 019-9763528 http://www.mymambo.org +; + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Malay +LanguageID=$043E +LanguageCodePage=0 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Pemasang Perisian +SetupWindowTitle=Pemasang Perisian - %1 +UninstallAppTitle=Mengeluarkan Perisian dari Sistem +UninstallAppFullTitle=Mengeluarkan Perisian %1 dari Sistem + +; *** Misc. common +InformationTitle=Maklumat +ConfirmTitle=Sahkan +ErrorTitle=Error + +; *** SetupLdr messages +SetupLdrStartupMessage=Program ini akan memasang perisian %1. Adakah anda mahu teruskan? +LdrCannotCreateTemp=Tidak dapat menghasilkan fail sementara, pemasangan dihentikan! +LdrCannotExecTemp=Tidak dapat menjalankan fail dalam direktori sementara, pemasangan dihentikan! + +; *** Startup error messages +LastErrorMessage=%1.%n%nError %2: %3 +SetupFileMissing=Fail %1 didapati hilang dari direktori pemasangan. Sila perbetulkan masalah tersebut atau dapatkan salinan terbaru perisian ini. +SetupFileCorrupt=Fail Pemasangan ini didapati Rosak. Sila dapatkan salinan terbaru perisian ini. +SetupFileCorruptOrWrongVer=Fail Pemasangan ini didapati Rosak, atau tidak serasi dengan versi pemasangan perisian ini. Sila perbetulkan masalah tersebut atau dapatkan salinan terbaru perisian ini. +NotOnThisPlatform=Perisian ini tidak boleh dijalankan dalam %1. +OnlyOnThisPlatform=Perisian ini Mesti dijalankan dalam %1. +OnlyOnTheseArchitectures=Aplikasi ini hanya boleh dipasang pada versi Windows yang dibina untuk rekabentuk pemprosesan berikut:%n%n%1 +MissingWOW64APIs=Versi Windows yang anda jalankan tidak memiliki fungsi yang dikehendaki oleh perisian pemasangan untuk melakukan pemasangan 64-bit. Untuk memperbaikinya, sila pasang Pek Khidmat %1. +WinVersionTooLowError=Perisian ini memerlukan %1 versi %2 atau yang terkemudian. +WinVersionTooHighError=Perisian ini tidak boleh dipasang pada %1 versi %2 atau yang terkemudian. +AdminPrivilegesRequired=Anda mesti masuk kedalam Sistem Komputer ini sebagai pentadbir, apabila memasang perisian ini. +PowerUserPrivilegesRequired=Anda mesti masuk kedalam Sistem Komputer ini sebagai pentadbir atau ahli dalam Kumpulan Power User, apabila memasang perisian ini. +SetupAppRunningError=Perisian Pemasangan ini telah mendapati bahawa terdapat %1 sedang berjalan.%n%nSila tutup semua pemasangan lain tersebut, kemudian klik Ok untuk teruskan atau batal untuk Keluar. +UninstallAppRunningError=Pengeluar Perisian ini telah mendapati bahawa terdapat %1 sedang berjalan.%n%nSila tutup semua pemasangan lain tersebut, kemudian klik Ok untuk teruskan atau batal untuk Keluar. + +; *** Misc. errors +ErrorCreatingDir=Pemasang Perisian ini, tidak dapat menghasilkan Direktori "%1" +ErrorTooManyFilesInDir=tidak dapat menghasilkan Fail dalam Direktori "%1" kerana ia mempunyai terlalu banyak fail. + +; *** Setup common messages +ExitSetupTitle=Keluar dari Pemasangan +ExitSetupMessage=Pemasangan masih belum sempurna. Jika anda berhenti sekarang, Perisian ini tidak akan dipasang.%n%nAnda boleh menjalankan Pemasangan Perisian ini pada masa akan datang untuk melengkapkan pemasangan.%n%nAdakah anda pasti ingin keluar dari Pemasangan? +AboutSetupMenuItem=&Tentang Pemasang Perisian... +AboutSetupTitle=Tentang Pemasang Perisian +AboutSetupMessage=%1 versi %2%n%3%n%n%1 laman web:%n%4 +AboutSetupNote= +TranslatorNote=Dialih bahasa kepada Bahasa Melayu oleh :%nShaiffulnizam Mohamad.%nshaifful@yahoo.com%nHP : 019-9763528%n%nSila hubungi saya sekiranya and ingin ubah maksud atau ayat dalam terjemahan ini + +; *** Buttons +ButtonBack=< &Kembali +ButtonNext=&Selepas > +ButtonInstall=&Pasang +ButtonOK=OK +ButtonCancel=&Batal +ButtonYes=&Ya +ButtonYesToAll=Ya Semu&a +ButtonNo=&No +ButtonNoToAll=&Tidak Semua +ButtonFinish=Se&lesai +ButtonBrowse=Li&hat... +ButtonWizardBrowse=Li&hat... +ButtonNewFolder=&Hasilkan Folder Baru + +; *** "Select Language" dialog messages +SelectLanguageTitle=Pilih Bahasa Untuk Pemasangan +SelectLanguageLabel=Pilih Bahasa Yang Anda ingin Guna Dalam Pemasangan: + +; *** Common wizard text +ClickNext=Klik Selepas untuk Teruskan, atau Batal untuk keluar dari Pemasangan Perisian ini. +BeveledLabel= +BrowseDialogTitle=Lihat untuk folder +BrowseDialogLabel=Pilih folder dari senarai dibawah dan klik OK. +NewFolderName=Folder Baru + +; *** "Welcome" wizard page +WelcomeLabel1=Selamat Datang kepada Pemasang Perisian [name] +WelcomeLabel2=Perisian ini akan memasang perisian [name/ver] pada komputer anda.%n%nAdalah dinasihatkan untuk menghentikan Perisian-perisian lain sebelum anda meneruskan Pemasangan ini. + +; *** "Password" wizard page +WizardPassword=Kata laluan +PasswordLabel1=Pemasangan ini dilindungi dengan kata laluan. +PasswordLabel3=Sila sediakan kata laluan, kemudian Klik Selepas untuk meneruskan pemasangan. Kata laluan adalah Huruf Sensitif. Cth : A tidak sama dengan a +PasswordEditLabel=&Kata laluan: +IncorrectPassword=Kata laluan yang anda berikan tidak Sah!, Sila cuba lagi. + +; *** "License Agreement" wizard page +WizardLicense=Lesen Perjanjian +LicenseLabel=Sila baca Maklumat Penting berikut, sebelum anda meneruskan pemasangan perisian ini. +LicenseLabel3=Sila baca Lesen Perjanjian berikut. Anda mesti menerima terma dalam perjanjian ini, sebelum meneruskan pemasangan. +LicenseAccepted=Saya &Menerima Terma-terma dalam Perjanjian ini +LicenseNotAccepted=Saya &Tidak menerima Terma-terma dalam Perjanjian ini + +; *** "Information" wizard pages +WizardInfoBefore=Maklumat +InfoBeforeLabel=Sila Baca Maklumat Penting Berikut, sebelum meneruskan Pemasangan. +InfoBeforeClickLabel=Jika anda bersedia untuk meneruskan pemasangan, klik Selepas. +WizardInfoAfter=Maklumat +InfoAfterLabel=Sila Baca Maklumat Penting berikut, sebelum meneruskan Pemasangan. +InfoAfterClickLabel=Jika anda bersedia untuk meneruskan Pemasangan, klik Selepas. + +; *** "User Information" wizard page +WizardUserInfo=Maklumat Pengguna +UserInfoDesc=Sila masukkan maklumat Anda: +UserInfoName=&Nama: +UserInfoOrg=&Organisasi: +UserInfoSerial=Nombor &Siri: +UserInfoNameRequired=Anda mesti masukkan nama. + +; *** "Select Destination Directory" wizard page +WizardSelectDir=Pilih Destinasi Tujuan bagi Direktori +SelectDirDesc=Dimanakah perisian [name] akan dipasang? +SelectDirLabel3=Setup akan memasang perisian [name] kedalam folder berikut. +SelectDirBrowseLabel=Untuk teruskan dengan pemasangan, klik Selepas. Jika anda ingin memilih folder berlainan, klik Browse. +DiskSpaceMBLabel=Perisian in memerlukan Sekurang-kurangnya [mb] MB ruangan Cakera Keras. +ToUNCPathname=Pemasangan tidak boleh dilakukan pada laluan UNC. Jika anda cuba untuk memasangnya kedalam rangkaian, anda perlu memetakan pemacu rangkaian. +InvalidPath=Anda mesti meletakkan Laluan Penuh dengan Huruf Pemacu; sebagai contoh:%n%nC:\APP%n%nataupun laluan bagi UNC dalam ruangan:%n%n\\server\share +InvalidDrive=Pemacu atau perkongsian UNC yang anda pilih, tidak wujud atau tidak boleh diakses. Sila pilih yang lain. +DiskSpaceWarningTitle=Ruangan Cakera Keras TIDAK MENCUKUPI! +DiskSpaceWarning=Pemasang Perisian memerlukan sekurang-kurangnya %1 KB daripada ruangan kosong untuk pemasangan, tetapi cakera keras/pemacu yang anda pilih hanya mempunyai %2 KB sahaja.%n%nAdakah anda ingin teruskan juga? +DirNameTooLong=Nama folder atau laluan terlalu panjang. +InvalidDirName=Nama folder tidak sah. +BadDirName32=Nama direktori, tidak boleh termasuk mana-mana huruf atau karektor berikut:%n%n%1 +DirExistsTitle=Direktori telah pun Wujud +DirExists=Direktori:%n%n%1%n%ntelahpun Wujud. Adakah anda masih ingin memasang perisian ini ke Direktori tersebut? +DirDoesntExistTitle=Direktori tidak Wujud! +DirDoesntExist=Direktori:%n%n%1%n%ntidak Wujud!. Adakah anda ingin Direktori tersebut dihasilkan? + +; *** "Select Components" wizard page +WizardSelectComponents=Pilih Komponen atau bahagian +SelectComponentsDesc=Komponen yang manakah perlu dipasang? +SelectComponentsLabel2=Pilih Komponen yang anda ingin pasangkan; Kosongkan Komponen yang anda tidak ingin pasangkan. Klik Selepas, jika anda telah bersedia untuk meneruskan pemasangan. +FullInstallation=Pemasangan Penuh +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Pemasangan Asas +CustomInstallation=Pemasangan atas Pilihan +NoUninstallWarningTitle=Komponen Wujud +NoUninstallWarning=Pemasang Perisian ini telah mendapati bahawa komponen berikut telah dipasang pada Komputer anda:%n%n%1%n%nTidak memilih Komponen ini, tidak akan menyebabkan ianya dikeluarkan dari Pemasangan.%n%nAdakah anda ingin juga teruskan? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceMBLabel=Pilihan Sekarang ini memerlukan sekurang-kurangnya [mb] MB Ruangan cakera keras. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Pilih Tugas Tambahan +SelectTasksDesc=Apakah tugas tambahan yang anda ingin perisian pemasangan ini lakukan? +SelectTasksLabel2=Pilih Tugas Tambahan yang anda ingin lakukan semasa Proses Pemasangan [name], Kemudian pilih butang Selepas. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Pilih Folder Start Menu +SelectStartMenuFolderDesc=Dimanakah Sepatutnya pemasang perisian ini harus meletakkan pintasan kepada Perisian ini? +SelectStartMenuFolderLabel3=Setup akan hasilkan pintasan dalam folder menu mula berikut. +SelectStartMenuFolderBrowseLabel=Untuk teruskan, klik selepas. Jika anda nak pilih folder berlainan, klik lihat. +MustEnterGroupName=Anda mesti masukkan nama Folder. +GroupNameTooLong=Nama folder atau laluan terlalu panjang. +InvalidGroupName=Nama folder tidak SAH. +BadGroupName=Nama folder tidak boleh mengandungi mana-mana huruf atau karektor berikut:%n%n%1 +NoProgramGroupCheck2=&Jangan hasilkan folder Start Menu + +; *** "Ready to Install" wizard page +WizardReady=Sedia untuk Pemasangan +ReadyLabel1=Pemasang Perisian telah bersedia untuk memulakan pemasangan [name] kedalam sistem komputer anda. +ReadyLabel2a=Klik Pasang untuk meneruskan Pemasangan Perisian, atau klik Kembali jika anda ingin Lihat atau Ubah mana-mana tetapan. +ReadyLabel2b=Klik Pasang untuk meneruskan Pemasangan. +ReadyMemoUserInfo=Maklumat Pengguna: +ReadyMemoDir=Direktori Destinasi: +ReadyMemoType=Jenis Pemasangan: +ReadyMemoComponents=Komponen terpilih: +ReadyMemoGroup=Folder Start Menu: +ReadyMemoTasks=Tugasan tambahan: + +; *** "Preparing to Install" wizard page +WizardPreparing=Bersedia untuk memasang +PreparingDesc=Pemasang Perisian [name] sedang menyediakan Sistem komputer anda untuk proses pemasangan. +PreviousInstallNotCompleted=Pemasangan/Pengeluaran Perisian sebelumnya adalah tidak lengkap. Anda perlu memulakan kemmbali Komputer untuk menyiapkan pemasangan tersebut.%n%nSelpas memulakan kembali Komputer anda, jalankan Pemasang Perisian ini kembali untuk melengkapkan Pemasangan [name] ini. +CannotContinue=Pemasangan tidak boleh diteruskan, Sila klik batal untuk Keluar. + +; *** "Installing" wizard page +WizardInstalling=Pemasangan Perisian +InstallingLabel=Sila tunggu sementara Pemasang Perisian memasang [name] pada komputer anda. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Melengkapkan Pemasangan [name] +FinishedLabelNoIcons=Pemasang Perisian telah selesai memasang perisian [name] pada komputer anda. +FinishedLabel=Pemasang Perisian telah selesai memasang perisian [name] pada komputer anda. Perisian tersebut boleh dimulakan dengan memilih Ikon yang dipasang. +ClickFinish=Klik Selesai untuk keluar dari Pemasang Perisian. +FinishedRestartLabel=Untuk melengkapkan pemasangan perisian [name], Pemasang perisian mesti memulakan kembali komputer anda, adakah anda ingin Mulakan Kembali Komputer anda sekarang? +FinishedRestartMessage=Untuk melengkapkan pemasangan perisian [name], Pemasang perisian mesti memulakan kembali komputer anda.%n%nadakah anda mahu Mulakan Kembali Komputer anda sekarang?? +ShowReadmeCheck=Ya, Saya nak baca fail READ ME +YesRadio=&Ya, mulakan kembali komputer ini sekarang +NoRadio=&Tidak, Saya akan mulakan kembali Komputer saya kemudian +; used for example as 'Run MyProg.exe' +RunEntryExec=Menjalankan %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Lihat %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Pemasang perisian memerlukan cakera selepas ini +SelectDiskLabel2=Sila masukkan cakera %1 dan Klik OK.%n%nJika fail pada Cakera @ Disk ini boleh ditemui dalam folder selain yang dinyatakan berikut, masukkan laluan yang betul atau klik lihat +PathLabel=&Laluan: +FileNotInDir2=Fail "%1" tidak ditemui dalam "%2". Sila masukkan Cakera yang betul atau pilih Folder lain. +SelectDirectoryLabel=Sila berikan Lokasi Cakera@Disk selepasnya. + +; *** Installation phase messages +SetupAborted=Pemasangan Perisian tidak Lengkap.%n%nSila baiki masalah tersebut dan jalankan Pemasang Perisian ini kembali.. +EntryAbortRetryIgnore=Klik Retry untuk mencuba sekali lagi, atau Ignore untuk teruskan sahaja, atau Abort untuk batalkan pemasangan perisian. + +; *** Installation status messages +StatusCreateDirs=Menghasilkan direktori... +StatusExtractFiles=Mengekstrak Fail-fail... +StatusCreateIcons=Menghasilkan ikon bagi perisian +StatusCreateIniEntries=Menghasilkan kemasukkan data INI +StatusCreateRegistryEntries=Menghasilkan kemasukkan registry... +StatusRegisterFiles=Mendaftarkan Fail-fail +StatusSavingUninstall=Menyimpan maklumat pengeluaran semula... +StatusRunProgram=Menamatkan Pemasangan... +StatusRollback=Mengundurkan kembali semua perubahan.. + +; *** Misc. errors +ErrorInternal2=Masalah Dalaman: %1 +ErrorFunctionFailedNoCode=%1 Gagal +ErrorFunctionFailed=%1 Gagal; Kod %2 +ErrorFunctionFailedWithMessage=%1 Gagal; Kod %2.%n%3 +ErrorExecutingProgram=Tidak dapat memulakan fail program:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Terdapat masalah membuka kekunci registry :%n%1\%2 +ErrorRegCreateKey=Masalah dalam menghasilkan kekunci registry:%n%1\%2 +ErrorRegWriteKey=Masalah untuk menulis kekunci registry:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Terdapat masalah menghasilkan kemasukan INI dalam fail "%1". + +; *** File copying errors +FileAbortRetryIgnore=Klik Retry untuk mencuba kembali, Ignore untuk langkau fail ini (Tidak digalakkan), atau Henti untuk Batalkan Pemasangan. +FileAbortRetryIgnore2=Klik Retry untuk mencuba kembali, Ignore untuk teruskan juga (Tidak digalakkan), atau Henti untuk Batalkan Pemasangan. +SourceIsCorrupted=Sumber bagi fail ini Rosak +SourceDoesntExist=Sumber fail bagi "%1" tidak wujud +ExistingFileReadOnly=Fail yang telah wujud ditanda sebagai Baca-sahaja atau read-only.%n%nKlik Cuba Semula untuk keluarkan attribut baca-sahaja dan cuba sekali lagi. Ignore untuk langkau Fail ini, atau Abort untuk Batalkan pemasangan perisian. +ErrorReadingExistingDest=Masalah Berlaku apabila cuba membaca fail yang telah wujud. +FileExists=Fail tersebut telah wujud.%n%nAdakah anda mahu pemasang perisian untuk menulisnya kembali? +ExistingFileNewer=Fail sedia ada adalah lebih baru daripada fail yang cuba dipasang oleh pemasang perisian ini. Adalah dicadangkan supaya anda menyimpan fail sedia ada tersebut.%n%nAdakah anda ingin menyimpan fail sedia ada tersebut? +ErrorChangingAttr=Berlaku masalah apabila cuba mengubah atribut fail sedia ada: +ErrorCreatingTemp=Masalah berlaku apabila cuba menghasilkan fail dalam direktori destinasi: +ErrorReadingSource=Masalah berlaku apabila cuba membaca fail sumber: +ErrorCopying=Masalah berlaku apabila cuba menyalin fail: +ErrorReplacingExistingFile=Masalah berlaku apabila cuba menggantikan fail sedia ada: +ErrorRestartReplace=Gagal Mula Semula: +ErrorRenamingTemp=Masalah berlaku apabila cuba untuk menamakan fail dalam direktori destinasi: +ErrorRegisterServer=Tidak dapat daftarkan DLL/OCX: %1 +ErrorRegisterServerMissingExport=Eksport DllRegisterServer tidak dijumpai +ErrorRegisterTypeLib=Tidak dapat mendaftarkan jenis library: %1 + +; *** Post-installation errors +ErrorOpeningReadme=Masalah berlaku apabila cuba membuka fail README. +ErrorRestartingComputer=Pemasang Perisian tidak dapat memulakan kembali komputer ini. Sila lakukan secara manual. + +; *** Uninstaller messages +UninstallNotFound=Fail "%1" tidak wujud. Pengeluaran Perisian tidak boleh dilakukan. +UninstallOpenError=Fail "%1" tidak dapat dibuka. proses mengeluarkan perisian tidak dapat dilakukan +UninstallUnsupportedVer=Fail daftar pengeluaran "%1" berada dalam format yang tidak dikenali oleh Versi Pengeluar ini. Pengeluaran tidak boleh dilakukan +UninstallUnknownEntry=Daftar masuk yang tidak dikenali (%1) dijumpai dalam daftar pengeluaran. +ConfirmUninstall=Adakah anda pasti ingin mengeluarkan %1 sepenuhnya bersama kesemua komponennya? +UninstallOnlyOnWin64=Setup ini hanya boleh melakukan pengeluaran perisian pada Windows 64-bit. +OnlyAdminCanUninstall=Pengeluaran Perisian ini hanya boleh dilakukan oleh pengguna yang mempunyai kelebihan sebagai Pentadbir. +UninstallStatusLabel=Sila tunggu semasa %1 idikeluarkan dari komputer anda. +UninstalledAll=%1 Berjaya dikeluarkan dari Komputer anda. +UninstalledMost=Pengeluaran %1 telah selesai%n%nSesetengah fail tidak boleh dikeluarkan. Ianya boleh dikeluarkan secara manual.. +UninstalledAndNeedsRestart=Untuk melengkapkan pengeluaran %1, komputer anda mesti dimulakan kembali.%n%nMahukah ada memulakan komputer kembali Sekarang? +UninstallDataCorrupted=Fail "%1" didapati rosak. Pengeluaran tidak boleh dilakukan. + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Keluarkan Fail Kongsi? +ConfirmDeleteSharedFile2=Sistem telah mengenal pasti bahawa Fail berikut tidak lagi digunakan oleh mana-mana program. Adakah anda mahu mengeluarkan Fail ini?%n%nJika ada mana-mana perisian menggunakan Fail ini dan ianya telah dikeluarkan dari sistem, perisian tersebut mungkin tidak dapat berfungsi dengan baik atau tidak berfungsi langsung. Jika tidak pasti sila klik Tidak, membiarkan Fail ini pada sistem anda tidak akan memberi sebarang kesan. +SharedFileNameLabel=Nama Fail: +SharedFileLocationLabel=Lokasi: +WizardUninstalling=Status Pengeluaran +StatusUninstalling=%1 dikeluarkan... + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 versi %2 +AdditionalIcons=Ikon tambahan: +CreateDesktopIcon=Hasilkan ikon &desktop +CreateQuickLaunchIcon=Hasilkan ikon &Lancar Pantas +ProgramOnTheWeb=%1 di Internet +UninstallProgram=Uninstall %1 +LaunchProgram=Jalankan perisian %1 +AssocFileExtension=&Kaitkan %1 dengan akhiran fail %2 +AssocingFileExtension=Mengaitkan %1 dengan akhiran fail %2 ... \ No newline at end of file diff --git a/Files/Languages/Unofficial/Marathi.islu b/Files/Languages/Unofficial/Marathi.islu new file mode 100644 index 00000000..7d3ac06b --- /dev/null +++ b/Files/Languages/Unofficial/Marathi.islu @@ -0,0 +1,336 @@ +; *** Inno Setup version 5.5.3+ Marathi messages *** +; Translated by Ajay Nandeshwar & Prashant Shinde [ sprashant80 at gmail.com ] +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=<0939><093F><0902><0926><0940> +LanguageID=$0439 +LanguageCodePage=0 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=10 +;WelcomeFontName= +WelcomeFontSize=12 +;TitleFontName= +TitleFontSize=35 +;CopyrightFontName= +CopyrightFontSize=9 + +[Messages] + +; *** Application titles +SetupAppTitle=स्थापना +SetupWindowTitle=स्थापना - %1 +UninstallAppTitle=विस्थापन +UninstallAppFullTitle=%1 चे विस्थापन + +; *** Misc. common +InformationTitle=माहिती +ConfirmTitle=पुष्टी करा +ErrorTitle=त्रुटी + +; *** SetupLdr messages +SetupLdrStartupMessage=ह्याने %1 आपल्या कल्पयन्त्र मध्ये स्थापित होईल. तुम्हाला नक्की पुढे जायचे का? +LdrCannotCreateTemp=तात्पूर्ती फाइल अनुवाद तयार करू शकत नाही. स्थापना मध्येच थांबवावी लागली +LdrCannotExecTemp=तात्पूर्ती फोल्डरमध्य फाइल अंमलबजावणी केली जाऊ शकत नाही.स्थापना मध्येच थांबवावी लागली + +; *** Startup error messages +LastErrorMessage=%1.%n%nत्रुटी %2: %3 +SetupFileMissing=फ़ाइल %1 प्रतिष्ठापन संग्रहात नाही. कृपया एकतर समस्येचे निदान करा किंवा कार्यक्रम ची नवीन प्रत आणा +SetupFileCorrupt=स्थापना फाइल मधे त्रुटी आहे. कृपया नविन कार्यक्रम ची प्रत आणा +SetupFileCorruptOrWrongVer=स्थापना फाइल मधे त्रुटी आहे किंवा वेगळ्या प्रकार ची आहे. कृपया समस्येचे निदान करा किंवा कार्यक्रम ची नवीन प्रत आणा +InvalidParameter=फोल्डर चे नाव वैध नाही +SetupAlreadyRunning=स्थापना तर आधीपासूनच चालू आहे +WindowsVersionNotSupported=इस से [name/ver] आपल्या कल्पयन्त्र मधे स्थापना होईल.%n%n हे बरे होईल कि पुढे जाण्या आधी तुम्ही उर्वरित सर्व कार्यक्रम हाल सध्यासाठी थांबवा +WindowsServicePackRequired=ह्या कार्यक्रम ला %1 Service Pack %2 किंवा मागील आवृत्ती पाहिजे +NotOnThisPlatform=हे कार्यक्रम %1 वर नाही चालू शकत +OnlyOnThisPlatform=हे कार्यक्रम फक्त %1 वरच चालू शकते +OnlyOnTheseArchitectures=हे कार्यक्रम फक्त ह्या प्रोसेसर :%n%n%1 समान विन्डोज़ प्लेटफॉर्म वरच चालू शकते +MissingWOW64APIs=आपला विंडो प्लेटफॉर्म 64-bit स्थापना समर्थन नाही करू शकत. कृपया सर्विस पैक %1 स्थापित करा +WinVersionTooLowError=हे कार्यक्रम चालण्यासाठी %1 आव्रुती %2 किंवा त्या मागील आव्रुती पाहिजे +WinVersionTooHighError=हे कार्यक्रम स्थापित करू शकत नाही %1 आवृत्ती %2 किंवा मागील पाहिजे +AdminPrivilegesRequired=जर आपण प्रशासक खात्यातून सुरु कराल तरच हे कार्यक्रम स्थापित करू शकाल +PowerUserPrivilegesRequired=आपण प्रशासक खाते किंवा शक्ति-प्रयोग कृत समूह च्या खात्यातून सुरु कराल तरच कार्यक्रम स्थापित करू शकाल +SetupAppRunningError=स्थापना मधे %1 error आला आहे ..%n%n कृपया त्याला त्वरित थांबवा, आणि नंतर पुढे जाण्यासाठी 'ठीक' किंवा निघून जाण्यासाठी 'रद्द करा' वर क्लिक करा +UninstallAppRunningError=निस्कासन ला हे ज्ञात झाले की %1 आता चालू आहे.%n%n कृपया त्याला त्वरित थांबवा, आणि नंतर पुढे जाण्यासाठी 'ठीक' किंवा निघून जाण्यासाठी 'रद्द करा' वर क्लिक करा + +; *** Misc. errors +ErrorCreatingDir=स्थापना "%1" संग्रहनाची निर्मिती करण्यात अयशस्वी झाले आहे +ErrorTooManyFilesInDir=%1 संग्रहानामध्ये खूप फाईल असल्या कारणाने स्थापना फाईल तयार करण्यात अयशस्वी झाले आहे + +; *** Setup common messages +ExitSetupTitle=स्थापना मधून बाहेर पडा +ExitSetupMessage=स्थापना चे कार्य पूर्ण नाही झाले, जर तुम्ही आता बाहेर पडू इच्छिता तर कार्यक्रम व्यवस्थित स्थापित होणार नाही. %n%nतुम्ही अन्यवेळी पुन्हा स्थापना करू शकता.%n%nबाहेर पडायचे आहे का? +AboutSetupMenuItem=स्थापना च्या संबंधित +AboutSetupTitle=स्थापना च्या संबंधित +AboutSetupMessage=%1 आवृत्ती %2%n%3%n%n%1 गृह पृष्ठ:%n%4 +AboutSetupNote= +TranslatorNote= हे भाषांतर अजय आणि प्रशांत यांनी केले आहे + +; *** Buttons +ButtonBack=< &मागे जा +ButtonNext=&पुढे जा > +ButtonInstall=&स्थापना +ButtonOK=&ठीक +ButtonCancel=&रद्द करा +ButtonYes=&हो +ButtonYesToAll=&सगळ्यासाठी हो +ButtonNo=&नाही +ButtonNoToAll=सगळ्यासाठी नाही +ButtonFinish=&समाप्त +ButtonBrowse=&ब्राउज़ +ButtonWizardBrowse=&ब्राउज़ +ButtonNewFolder=&नवीन फोल्डर बनवा + +; "Select Language" dialog messages +SelectLanguageTitle=स्थापना भाषा निवड +SelectLanguageLabel=अधिष्ठापन च्या दरम्यान वापरली जाणारी भाषा निवडा + +; *** Common wizard text +ClickNext= पुढे जाण्यासाठी पुढे जा दाबा, किंवा बाहेर पडण्यासाठी रद्द करा दाबा +BeveledLabel= सौजन्यः अजय आणि प्रशांत +BrowseDialogTitle=फोल्डर साठी ब्राउज़ करा +BrowseDialogLabel= खालील सूचीमधून एक फोल्डर निवडून ठीक दाबा +NewFolderName=नविन फोल्डर + +; "Welcome" wizard page +WelcomeLabel1=हे [name] च्या प्रतिष्ठापन कार्य मधे आपले स्वागत आहे +WelcomeLabel2=ह्याने [name/ver] आपल्या कल्पयन्त्र मध्ये स्थापित होईल.%n%n हे बरे होईल कि पुढे जाण्याआधी तुम्ही उर्वरित सर्व चालू कार्यक्रम हाल थांबवा + +; "Password" wizard page +WizardPassword=गूढ शब्द +PasswordLabel1= ही स्थापना गूढ शब्दाने लॉक आहे +PasswordLabel3=कृपया गूढ शब्द लिहा आणि नंतर 'पुढे जा' बटन दाबा. गूढ शब्द case-संवेदनशील आहे +PasswordEditLabel=गूढ शब्द +IncorrectPassword= तुम्ही लिहिलेला गूढ शब्द चुकीचा आहे, कृपया पुन्हा प्रयत्न करा + +; "License Agreement" wizard page +WizardLicense=परवानगी करार +LicenseLabel= पुढे जाण्याआधी ही महत्वाची सूचना वाचा +LicenseLabel3= हे परवानगी करार वाचा. पुढे जाण्याआधी तुम्हाला ह्याच्या सर्व अटी मान्यच कराव्या लागतील +LicenseAccepted=होय मला हा करार स्वीकार आहे +LicenseNotAccepted=नाही मला हा करार स्वीकार नाही + +; "Information" wizard pages +WizardInfoBefore=माहिती +InfoBeforeLabel=पुढे जाण्याआधी महत्वाच्या सूचना वाचा +InfoBeforeClickLabel= जेव्हा आपण सज्ज आहात तेव्हा 'पुढे जा' बटन दाबा +WizardInfoAfter=माहिती +InfoAfterLabel=पुढे जाण्याआधी महत्वाच्या सूचना वाचा +InfoAfterClickLabel=जेव्हा आपण सज्ज आहात तेव्हा 'पुढे जा' बटन दाबा + +; "User Information" wizard page +WizardUserInfo=प्रयोग कर्ता ची माहिती +UserInfoDesc=कृपया आपली माहिती आत टाका +UserInfoName=प्रयोग कर्ता चे नाव +UserInfoOrg=संस्था +UserInfoSerial=क्रमांक +UserInfoNameRequired=तुम्हाला नाव टाकावेच लागेल + +; "Select Destination Location" wizard page +WizardSelectDir=लक्ष्य मार्ग निवडा +SelectDirDesc=[name] ला कुठे स्थापित करायचे आहे? +SelectDirLabel3=स्थापना [name] ला खालील फोल्डर मधे होईल +SelectDirBrowseLabel=पुढे जाण्यासाठी पुढे जा दाबा. जर इतर फोल्डर निवडायचे असल्यास ब्राउज़ दाबा +DiskSpaceMBLabel=कमीतकमी [mb] MB इतकी जागा आवश्यक आहे +CannotInstallToNetworkDrive=श्थापना ने नेटवर्क ड्राईव्ह नाही ठेवू शकत +CannotInstallToUNCPath=स्थापना ने UNC path नाही ठेवू शकत +InvalidPath=तुम्हाला ड्राइव अक्षर बरोबर संपूर्ण मार्ग द्यावा लागेल उदारणार्थ :%n%nC:\APP%n%n एकतर UNC मार्ग ह्या स्वरूपात :%n%n\\server\share +InvalidDrive=जी drive किंवा UNC share आपण निवडली आहे तिथे पोहोचू शकत नाही. कृपया अन्य निवड करा +DiskSpaceWarningTitle=आवश्यक जागा नाही आहे +DiskSpaceWarning=स्थापना किमान %1 KB जागा मागते, परंतु निवडलेल्या ड्राईव मध्ये केवळ %2 KB जागा उपलब्ध आहे.%n%nतरीपण पुढे जायचे आहे का? +DirNameTooLong=फोल्डर चे नाव किंवा मार्ग खूप मोठे आहे +InvalidDirName=फोल्डर चे नाव वैध नाही +BadDirName32=फोल्डर च्या नावात हे अक्षर वापरू शकत नाही.:%n%n%1 +DirExistsTitle=फोल्डर उपलब्ध आहे +DirExists=फोल्डर:%n%n%1%n%n आधीपासूनच उपलब्ध आहे, तरीपण त्यात स्थापित करू इच्छिता? +DirDoesntExistTitle=फोल्डर उपलब्ध नाही +DirDoesntExist=फोल्डर:%n%n%1%n%nउपलब्ध नाही. तुम्हाला हे फोल्डर बनवायचे आहे? + +; "Select Components" wizard page +WizardSelectComponents=सहकारी निवडा +SelectComponentsDesc=कोणते सहकारी स्थापित करायचे आहे? +SelectComponentsLabel2= ज्या सहकारी स्थापित करायची आहे, त्यांची निवड करा; ज्यांना नाही करायची त्यांना काढून टाका. जेव्हा पुढे जाण्यासाठी सज्ज आहात तेव्हा पुढे जा दाबा +FullInstallation=सम्पूर्ण स्थापना +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=संक्षिप्त स्थापना +CustomInstallation=सानुकूल स्थापना +NoUninstallWarningTitle=सहकारी उपलब्ध आहे +NoUninstallWarning=स्थापना ला कळाले की खालील सहकारी आधीपासूनच उपलब्ध आहे.:%n%n%1%n%n ह्यांची निवड रद्द केल्याने ते विस्थापित होणार नाही.%n%nतुम्हाला असेच पुढे जायचे आहे का? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceMBLabel=ह्या निवड ने स्थापना साठी [mb] MB जागा पाहिजे + +; "Select Additional Tasks" wizard page +WizardSelectTasks=अतिरिक्त काम निवडा +SelectTasksDesc=कोणते अतिरिक्त काम करायचे आहे? +SelectTasksLabel2=[name] ला स्थापित करताना जी अतिरिक्त कामे करायची आहेत त्यांची निवड करा आणि नंतर पुढे जा वर क्लिक करा + +; "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=सुरु मेनू फोल्डर निवडा +SelectStartMenuFolderDesc=कार्यक्रम चे लहान मार्ग कुठे ठवायचे आहे? +SelectStartMenuFolderLabel3=स्थापना कार्यक्रम चे लहान मार्ग खालील सुरु-मेनू फोल्डर मध्ये टाकेल +SelectStartMenuFolderBrowseLabel=पुढे जाण्यासाठी पुढे जा दाबा. जर वेगळ्या फोल्डर मधे स्थापना करायची असेल तर Browse दाबा +MustEnterGroupName=तुम्हाला फोल्डर चे नाव टाकावेच लागेल +GroupNameTooLong=फोल्डर चे नाव किंवा मार्ग खूप मोठे आहे +InvalidGroupName=फोल्डर चे नाव वैध नाही +BadGroupName=फोल्डर च्या नावात हे अक्षर वापरू शकत नाही:%n%n%1 +NoProgramGroupCheck2=सुरु मेनू फोल्डर बनवायचे नाही + +; "Ready to Install" wizard page +WizardReady=स्थापनेसाठी तयार +ReadyLabel1=स्थापना आता [name] ला आपल्या कल्पयन्त्रमध्ये स्थापित करण्यासठी तयार आहे +ReadyLabel2a=पुढे जाण्यासाठी स्थापना दाबा, जर काही बदल करायचे असल्यास मागे जा दाबा +ReadyLabel2b=स्थापनामध्ये पुढे जाण्यासाठी स्थापना दाबा +ReadyMemoUserInfo=प्रयोग कर्ता ची माहिती +ReadyMemoDir=लक्ष्य संग्रह +ReadyMemoType=स्थापना चा प्रकार +ReadyMemoComponents=सहकारी निवड +ReadyMemoGroup=सुरु मेनू फोल्डर +ReadyMemoTasks=अतिरिक्त कामे + +; "Preparing to Install" wizard page +WizardPreparing=स्थापनेसाठी तैयारी करत आहे +PreparingDesc=स्थापना [name] ला आपल्या कल्पयंत्र मध्ये टाकण्याची तैयारी करत आहे +PreviousInstallNotCompleted=मागील कार्यक्रम च्या स्थापना/विस्थापना व्यवथित पाने झालेली नाही. तुम्हाला कल्पयंत्र पुन्हा सुरु करवा लागेल.%n%nकल्पयन्त्र पुन्हा सुरु केल्यानंतर तुम्ही पुन्हा [name] ची स्थापना सुरु करा +CannotContinue=स्थापना पुढे जाऊ शकत नाही, कृपया रद्द करा बटन दाबा +ApplicationsFound=खाली असलेल्या अनुप्रयोगांनी स्थापना करून अद्यतने केलेल्या फाइल्सचा वापर केलेला आहे. तुम्हाला हा सल्ला देण्यात येतो कि तुम्ही स्थापना ला हे अनुप्रयोगांना स्वतःहून बंद करण्याची परवानगी द्या +ApplicationsFound2=ह्या अनुप्रयोगांनी स्थापना द्वारा अपडेट करणाऱ्या फाईल चा उपयोग केलेला आहे. तुम्हाला हा सल्ला दिला जातो कि तुम्ही स्थापना ला हे अनुप्रयोगांना स्वतःहून बंद करण्याची परवानगी द्या. स्थापना संपल्यानंतर, स्थापना ह्या अनुप्रयोगांना पुन्हा सुरु करण्याचा प्रयत्न करेल +CloseApplications=&स्वतःच अनुप्रयोगाला बंद करा +DontCloseApplications=अनुप्रयोगाला बंद &करायचे नाही +ErrorCloseApplications=स्थापना स्वतः सर्व अनुप्रयोगांना बंद नाही करू शकली.तुम्हाला हा सल्ला देण्यात येतो कि स्थापना ने अपडेट करणाऱ्या फाईल चा उपयोग करणाऱ्या अनुप्रयोगांना पुढे जाण्याआधी स्वतःहून बंद करा + +; "Installing" wizard page +WizardInstalling=स्थापना होत आहे +InstallingLabel=जोपर्यंत स्थापना आपल्या कल्पयंत्र मध्ये [name] स्थापित करत आहे, तोपर्यंत कृपया प्रतीक्षा करा + +; "Setup Completed" wizard page +FinishedHeadingLabel=[name] स्थापना चे कार्य पूर्ण होत आहे +FinishedLabelNoIcons=स्थापना ने [name] चे आपल्या कल्पयंत्र मधे यशस्वीपणे स्थापित केले गेले आह +FinishedLabel=स्थापना ने [name] आपल्या कल्पयंत्र मध्ये स्थापित केले आहे. तुम्ही उपयुक्त प्रतिमेवर क्लिक करून केव्हाही कार्यक्रम सुरु करू शकता +ClickFinish=स्थापना तून बाहेर पडण्यासाठी समाप्त वर क्लिक करा +FinishedRestartLabel=[name] चे स्थापित पूर्ण करण्यासाठी कल्पयंत्र पुन्हा सुरु करून खूप आवश्यक आहे . %n%nतुम्ही आता पुन्हा सुरु करू इच्छिता +FinishedRestartMessage=[name] चे स्थापित पूर्ण करण्यासाठी कल्पयंत्र पुन्हा सुरु करणे खूप आवश्यक आहे.%n%nतुम्ही आता पुन्हा सुरु करू इच्छिता +ShowReadmeCheck=होय मला मला वाचा फाईल बघायची आहे +YesRadio=&होय, कल्पयंत्र पुन्हा सुरु करा +NoRadio=&नाही मी कल्पयंत्र नंतर स्वतः सुरु करेल +; used for example as 'Run MyProg.exe' +RunEntryExec=रन %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=बघा %1 + +; "Setup Needs the Next Disk" stuff +ChangeDiskTitle=स्थापनेसाठी पुढील डिस्क पाहिजे +SelectDiskLabel2=कृपया डिस्क %1 टाकून ठीक दाबा.%n%nजर ह्या डिस्क ची फाईल नाही मिळाली तर योग्य मार्ग सांगा किंवा ब्राउज़ वर क्लिक करा +PathLabel=मार्ग +FileNotInDir2=फाइल "%1" ला"%2" मध्ये नाही शोधू शकलो, कृपया योग्य डिस्क टाका किंवा वेगळे फोल्डर निवडा +SelectDirectoryLabel=पुढील डिस्क चा मार्ग सांगा + +; *** Installation phase messages +SetupAborted=स्थापना पूर्ण नाही होऊ शकली.%n%nकृपया त्रुटी ठीक करा आणि पुन्हा प्रयत्न करा +EntryAbortRetryIgnore=पुन्हा प्रयत्न करण्यासाठी Retry दाबा, जर असेच पुढे जायचे आहे तर Ignore दाबा, किंवा स्थापना रद्द करण्यासाठी Abort दाबा + +; *** Installation status messages +StatusClosingApplications=अनुप्रयोगकांना बंद केले जात आहे +StatusCreateDirs=सङ्ग्रहिका बनविणे +StatusExtractFiles=फाइल उत्खनन करणे +StatusCreateIcons=छोटा मार्ग बनविणे +StatusCreateIniEntries=INI एंट्री बनविणे +StatusCreateRegistryEntries=रेजीस्टर एन्ट्री बनविणे +StatusRegisterFiles=फाइल रेजीस्टर करत आहे +StatusSavingUninstall=विस्थापन ची माहिती बचत करीत आहे +StatusRunProgram=स्थापना पूर्ण करत आहे +StatusRestartingApplications=अनुप्रयोगकांची पुन्हा सुरुवात +StatusRollback=बदल मागे हटविण्याचे काम करीत आहे + +; *** Misc. errors +ErrorInternal2=अंतर्गत त्रुटी: %1 +ErrorFunctionFailedNoCode=%1 अयशस्वी +ErrorFunctionFailed=%1 अयशस्वी; कोड %2 +ErrorFunctionFailedWithMessage=%1 अयशस्वी; कोड %2.%n%3 +ErrorExecutingProgram=फाइल ची अंमलबजावणी करू शकत नाही.:%n%1 + +; *** Registry errors +ErrorRegOpenKey=रेजीस्टर कळ खोलताना त्रुटी:%n%1\%2 +ErrorRegCreateKey=रेजीस्टर कळ बनविताना त्रुटी:%n%1\%2 +ErrorRegWriteKey=रेजीस्टर कळ मध्ये लिहिताना त्रुटी:%n%1\%2 + +; *** INI errors +ErrorIniEntry=फ़ाइल "%1" मध्ये INI एंट्री टाकताना त्रुटी + +; *** File copying errors +FileAbortRetryIgnore=पुन्हा प्रयत्न करण्यासाठी Retry बटन दाबा, जर असेच पुढे जायचे असल्यास Ignore दाबा (आम्ही असा सल्ला देत नाही),किंवा Abort दाबा स्थापना रद्द करण्यासाठी +FileAbortRetryIgnore2=पुन्हा प्रयत्न करण्यासाठी Retry बटन दाबा, जर असेच पुढे जायचे असल्यास Ignore दाबा (आम्ही असा सल्ला देत नाही),किंवा Abort दाबा स्थापना रद्द करण्यासाठी +SourceIsCorrupted=स्रोत फाईल संशयास्पद आहे +SourceDoesntExist=स्रोत फाइल "%1" उपलब्धच नाही +ExistingFileReadOnly=उपलब्ध फाईल फक्त वाचा आहे.%n%n तुम्ही Retry वर क्लिक करा, त्याचे फक्त वाचा attribute हटविण्यासाठी पुन्हा प्रयत्न करा. जर ह्या फाईल ला सोडून द्यायचे असल्यास Ignore, किंवा जर स्थापना रद्द करावयची असल्यास Abort बटन दाबा +ErrorReadingExistingDest=उपलब्ध फाईल वाचताना त्रुटी +FileExists=फाइल आधीपासूनच उपलब्ध आहे.%n%nतुम्ही तिला ओवर-राईट करू इच्छिता +ExistingFileNewer=उपलब्ध फाईल स्थापना फाईल पेक्षा नवी आहे, आमचा सल्ला आहे कि आपण हिला राहू द्यावे.%n%nतुम्ही फाईल ठेवू इच्छिता +ErrorChangingAttr=उपलब्ध फाईल चे एट्रीब्यूट बदलताना त्रुटी +ErrorCreatingTemp=फ़ाइल बनवताना त्रुटी +ErrorReadingSource=स्रोत फाईल खोलताना त्रुटी +ErrorCopying=फाईल प्रत करण्याचे प्रयत्न करतानाच्या त्रुटी +ErrorReplacingExistingFile=उपलब्ध फाइल ची प्रतिस्थापना करताना त्रुटी +ErrorRestartReplace=प्रतिस्थापन ची सुरुवात पुन्हा अयशस्वी झाली +ErrorRenamingTemp=सङ्ग्रहिका मध्ये फाइल चे नाव बदलताना वक्त त्रुटी +ErrorRegisterServer=ह्याला रेजीस्टर करू शकत नाही DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 अयशस्वी झाले, बाहेर जाण्याचा कोड %1 च्या बरोबर +ErrorRegisterTypeLib=हे टाइप लाइब्रेरी ला रेजीस्टर करू शकत नाही.: %1 + +; *** Post-installation errors +ErrorOpeningReadme=मला वाचा फ़ाइल खोलताना त्रुटी +ErrorRestartingComputer=स्थापना कल्पयन्त्र ला पुन्हा सुरु करण्यात अयशस्वी झाले. कृपया तुम्हीच ह्याला पुन्हा सुरु करा + +; *** Uninstaller messages +UninstallNotFound=फाइल "%1" उपलब्ध नाही, विस्थापित करणे अशक्य आहे +UninstallOpenError=फ़ाइल "%1" उघडत नाही. विस्थापित करणे अशक्य आहे +UninstallUnsupportedVer=विस्थापित लॉग फाईल "%1" ज्या फोर्मेट मध्ये आहे ती आम्ही ओळखू शकत नाही. पुढे जाणे अशक्य आहे +UninstallUnknownEntry=विस्थापित लॉग मध्ये एक अज्ञात नोंद (%1)मिळाली +ConfirmUninstall=तुम्ही नक्की %1 ला विस्थापित करू इच्छिता +UninstallOnlyOnWin64=केवळ 64-bit Windows नेच हिला विस्थापित केले जाऊ शकते +OnlyAdminCanUninstall=केवळ प्रशासक खात्यातूनच हिला विस्थापित केले जाऊ शकते +UninstallStatusLabel=जोपर्यंत %1 नाही हटविले जात, धैर्य ठेवा +UninstalledAll=%1 यशस्वीरीत्या विस्थापित झाले +UninstalledMost=%1 विस्थापन पूर्ण झाले.%n%nकाही घटक काढू शकत नाही परंतु तुम्ही त्यांना तुमच्या पद्धतीने काढून टाकू शकता +UninstalledAndNeedsRestart=%1 चे विस्थापन पूर्ण करण्यासाठी कल्पयंत्र पुन्हा सुरु करणे आवश्यक आहे.%n%nआता पुन्हा सुरु करावे +UninstallDataCorrupted=%1 फ़ाइल मध्ये त्रुटी. विस्थापित करणे अशक्य + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=शेअर्ड -फाइल ला काढून टाकणे आहे का? +ConfirmDeleteSharedFile2=प्रणाली ने हे ओळखले जाते की शेअर्ड फाईल आता पुढे वापरता येणार नाही. तुम्हाला त्यांनापण विस्थापित करायचे आहे काय?%n%n जर काही इतर कार्यक्रम ह्या फाईल वर आधारित असतील तर कदाचित ते ह्यांना काढून टाकल्यामुळे व्यवथित काम करू शकणार नाही. जर तुम्ही निर्णय घेवू शकत नाही आहात तर 'नाही' वर क्लिक करा. ह्या फाईल ला कल्पयंत्र मध्येच राहू दिले तरी काही नुकसान होणार नाही +SharedFileNameLabel=फाइलचे नाव +SharedFileLocationLabel=पत्ता +WizardUninstalling=विस्थापित स्थिति +StatusUninstalling=विस्थापित होत आहे %1 + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp= %1 ची स्थापना होत आहे +ShutdownBlockReasonUninstallingApp=%1 चे विस्थापन होत आहे + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 आवृत्ती %2 +AdditionalIcons=अतिरिक्त प्रतिमा +CreateDesktopIcon=डेस्कटॉप प्रतिमा बनवा +CreateQuickLaunchIcon=क्विक लोंच प्रतिमा बनवा +ProgramOnTheWeb=%1 इन्टरनेट वर +UninstallProgram=विस्थापित करणे %1 +LaunchProgram=लोंच करणे %1 +AssocFileExtension=%1 ला %2 फ़ाइल एक्सटेंशन बरोबर प्रतिबद्ध करा +AssocingFileExtension=%1 ला %2 फ़ाइल एक्सटेंशन बरोबर प्रतिबद्ध करत आहे +AutoStartProgramGroupDescription=सुरुवात +AutoStartProgram=%1 ला %2 फ़ाइल एक्सटेंशन बरोबर प्रतिबद्ध करत आहे +AddonHostProgramNotFound=तुम्ही निवडलेल्या फोल्डर मध्ये %1 नाही मिळाले. %n%nतुम्ही कुठल्याही प्रकारे ह्याची सुसंगता ठेवू इच्छिता का? \ No newline at end of file diff --git a/Files/Languages/Unofficial/Mongolian.isl b/Files/Languages/Unofficial/Mongolian.isl new file mode 100644 index 00000000..7cdebf28 --- /dev/null +++ b/Files/Languages/Unofficial/Mongolian.isl @@ -0,0 +1,307 @@ +; *** Inno Setup version 5.1.11+ Mongolian messages *** +; +; Translation was made by GARID, xGARIDx@gmail.com +; The highest accuracy was the first priority. +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). +; +; $jrsoftware: issrc/Files/Languages/Mongolian.isl,v 1.10 2010/05/29 07:43:18 jr Exp $ + +[LangOptions] +LanguageName=<041C><043E><043D><0433><043E><043B> +LanguageID=$0450 +LanguageCodePage=1251 + +[Messages] + +; *** Application titles +SetupAppTitle= +SetupWindowTitle=%1 +UninstallAppTitle= +UninstallAppFullTitle=%1 + +; *** Misc. common +InformationTitle= +ConfirmTitle= +ErrorTitle= + +; *** SetupLdr messages +SetupLdrStartupMessage= %1 , vvv vv? +LdrCannotCreateTemp=v vv v. +LdrCannotExecTemp=v v v. + +; *** Startup error messages +LastErrorMessage=%1.%n%n %2: %3 +SetupFileMissing= %1 v. . +SetupFileCorrupt= . . +SetupFileCorruptOrWrongVer= v. . +NotOnThisPlatform= %1 v. +OnlyOnThisPlatform= ee %1 . +OnlyOnTheseArchitectures=vv ee Windows :%n%n%1 +MissingWOW64APIs= Windows- , 64- v . , . (Service Pack) %1. +WinVersionTooLowError= %1 %2 vv . +WinVersionTooHighError= %1 %2 vv v. +AdminPrivilegesRequired= vv . +PowerUserPrivilegesRequired= vv vv (Power Users). +SetupAppRunningError= vv %1.%n%n,v , OK, vvv , , . +UninstallAppRunningError= vv %1.%n%n,v , OK, vvv , , . + +; *** Misc. errors +ErrorCreatingDir= vv v "%1" +ErrorTooManyFilesInDir="%1" vv v, vv . + +; *** Setup common messages +ExitSetupTitle= +ExitSetupMessage= v v. v .%n%n ee , vv .%n%n ? +AboutSetupMenuItem=& ... +AboutSetupTitle= +AboutSetupMessage=%1, %2%n%3%n%n %1:%n%4 +AboutSetupNote= +TranslatorNote=Mongolian translation by GARID, xGARIDx@gmail.com + +; *** Buttons +ButtonBack=< & +ButtonNext=& > +ButtonInstall=& +ButtonOK=OK +ButtonCancel= +ButtonYes=& +ButtonYesToAll=&v +ButtonNo=&Vv +ButtonNoToAll=&v vv +ButtonFinish=& +ButtonBrowse=&... +ButtonWizardBrowse=&... +ButtonNewFolder=& vv + +; *** "Select Language" dialog messages +SelectLanguageTitle= +SelectLanguageLabel= : + +; *** Common wizard text +ClickNext= vvv . +BeveledLabel= +BrowseDialogTitle= +BrowseDialogLabel= ʻ . +NewFolderName= + +; *** "Welcome" wizard page +WelcomeLabel1=[name] - v +WelcomeLabel2= [name/ver]- .%n%nVvv ee v ee . + +; *** "Password" wizard page +WizardPassword= v +PasswordLabel1= v . +PasswordLabel3= v , . +PasswordEditLabel=& v: +IncorrectPassword= v . v vv. + +; *** "License Agreement" wizard page +WizardLicense= eeee +LicenseLabel=Vvv ee . +LicenseLabel3= eeee . vvv - ee v . +LicenseAccepted= & eee +LicenseNotAccepted= & eeeev + +; *** "Information" wizard pages +WizardInfoBefore= +InfoBeforeLabel=Vvv ee . +InfoBeforeClickLabel= vvv v <<>> . +WizardInfoAfter= +InfoAfterLabel=Vvv ee . +InfoAfterClickLabel= vvv v <<>> . + +; *** "User Information" wizard page +WizardUserInfo= +UserInfoDesc=eeee . +UserInfoName=& : +UserInfoOrg=&: +UserInfoSerial=& : +UserInfoNameRequired= . + +; *** "Select Destination Location" wizard page +WizardSelectDir= +SelectDirDesc=[name] - v ? +SelectDirLabel3=[name] . +SelectDirBrowseLabel=Vvv . ee v , . +DiskSpaceMBLabel= [mb] . +ToUNCPathname= v v. v , vv v . +InvalidPath= - v ee vv; :%n%nC:\APP%n%n UNC:%n%n\\_\ee_ +InvalidDrive= . ee . +DiskSpaceWarningTitle= v +DiskSpaceWarning= %1 , ee %2 .%n%n vvv vv? +DirNameTooLong=X . +InvalidDirName= ee v. +BadDirName32= v v: %n%n%1 +DirExistsTitle= +DirExists=%n%n%1%n% . ? +DirDoesntExistTitle= v +DirDoesntExist=%n%n%1%n%n v . Vv vv vv? + +; *** "Select Components" wizard page +WizardSelectComponents=vvv +SelectComponentsDesc= vvv ? +SelectComponentsLabel2= vvv ; vvv . , . +FullInstallation=v +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation= +CustomInstallation= +NoUninstallWarningTitle= vvv +NoUninstallWarning= vvv :%n%n%1%n%n vvv v .%n%nvvvv +ComponentSize1=%1 +ComponentSize2=%1 +ComponentsDiskSpaceMBLabel= [mb] . + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks= vv +SelectTasksDesc= vv ? +SelectTasksLabel2=[name] vv , vv : + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup= +SelectStartMenuFolderDesc= ? +SelectStartMenuFolderLabel3= . +SelectStartMenuFolderBrowseLabel=Vvv , . ee v . +MustEnterGroupName= ee . +GroupNameTooLong=X . +InvalidGroupName= ee v. +BadGroupName= v v: %n%n%1 +NoProgramGroupCheck2=& vvv + +; *** "Ready to Install" wizard page +WizardReady=v +ReadyLabel1=[name] . +ReadyLabel2a= vvv , , ee vv. +ReadyLabel2b== vvv . +ReadyMemoUserInfo= : +ReadyMemoDir= : +ReadyMemoType= ee: +ReadyMemoComponents= vvv: +ReadyMemoGroup= : +ReadyMemoTasks= vv: + +; *** "Preparing to Install" wizard page +WizardPreparing= +PreparingDesc=[name] . +PreviousInstallNotCompleted= ee v . , [name] - . +CannotContinue=Vvv v. . + +; *** "Installing" wizard page +WizardInstalling=... +InstallingLabel=[name] - v v vv. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=[name] - ee +FinishedLabelNoIcons=[name] - . +FinishedLabel=[name] - . . +ClickFinish= . +FinishedRestartLabel=[name] . ? +FinishedRestartMessage=name] . %n%n ? +ShowReadmeCheck= README v +YesRadio=&, +NoRadio=&Vv, eepee +; used for example as 'Run MyProg.exe' +RunEntryExec= %1 +; used for example as 'View Readme.txt' +RunEntryShellExec= %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle= +SelectDiskLabel2= %1 OK . +PathLabel=&: +FileNotInDir2= "%1" "%2" v. e . +SelectDirectoryLabel= v ee vv. + +; *** Installation phase messages +SetupAborted= v .%n%n +EntryAbortRetryIgnore= , . + +; *** Installation status messages +StatusCreateDirs= vv... +StatusExtractFiles= ... +StatusCreateIcons= v... +StatusCreateIniEntries=INI- vv... +StatusCreateRegistryEntries= vv... +StatusRegisterFiles= v... +StatusSavingUninstall= ... +StatusRunProgram= ee... +StatusRollback=eee... + +; *** Misc. errors +ErrorInternal2= : %1 +ErrorFunctionFailedNoCode=%1: +ErrorFunctionFailed=%1: ; %2 +ErrorFunctionFailedWithMessage=%1: ; %2.%n%3 +ErrorExecutingProgram= v v:%n%1 + +; *** Registry errors +ErrorRegOpenKey=vvv :%n%1\%2 +ErrorRegCreateKey=vvv vv :%n%1\%2 +ErrorRegWriteKey=vvv :%n%1\%2 + +; *** INI errors +ErrorIniEntry=INI- v v "%1". + +; *** File copying errors +FileAbortRetryIgnore= vvv , , . +FileAbortRetryIgnore2= vvv , , . +SourceIsCorrupted=V +SourceDoesntExist="%1" V v +ExistingFileReadOnly= vvv , , . +ErrorReadingExistingDest= : +FileExists= .%n%n ? +ExistingFileNewer= +ErrorChangingAttr= : +ErrorCreatingTemp= : +ErrorReadingSource= : +ErrorCopying= : +ErrorReplacingExistingFile= : +ErrorRestartReplace= RestartReplace: +ErrorRenamingTemp= : +ErrorRegisterServer= DLL/OCX v v: %1 +ErrorRegSvr32Failed= %1 +ErrorRegisterTypeLib= : %1 + +; *** Post-installation errors +ErrorOpeningReadme=README . +ErrorRestartingComputer= v vv. Vv ee v vv. + +; *** Uninstaller messages +UninstallNotFound="%1" v , v. +UninstallOpenError="%1". v v. +UninstallUnsupportedVer= "%1". v +UninstallUnknownEntry=V (%1) +ConfirmUninstall=%1 - v v ? +UninstallOnlyOnWin64= ee 64- Windows . +OnlyAdminCanUninstall= vv . +UninstallStatusLabel=%1 v v vv. +UninstalledAll=%1 - v . +UninstalledMost=%1 .%n%n v. vv eeee +UninstalledAndNeedsRestart= yy?. +UninstallDataCorrupted="%1" . v + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle= ? +ConfirmDeleteSharedFile2=v eee v +SharedFileNameLabel= : +SharedFileLocationLabel=: +WizardUninstalling= +StatusUninstalling= %1... + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1, %2 +AdditionalIcons= vv: +CreateDesktopIcon=& +CreateQuickLaunchIcon=& v +ProgramOnTheWeb= %1 +UninstallProgram=%1 +LaunchProgram=%1 +AssocFileExtension=& %1 , %2 +AssocingFileExtension= %1 %2... diff --git a/Files/Languages/Unofficial/Montenegrin.isl b/Files/Languages/Unofficial/Montenegrin.isl new file mode 100644 index 00000000..d37af66e --- /dev/null +++ b/Files/Languages/Unofficial/Montenegrin.isl @@ -0,0 +1,386 @@ +; *** Inno Setup version 6.1.0+ Montenegrin messages *** +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Translated by Drazen Djurisic (kntaur@gmail.com) +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Crnogorski +LanguageID=$081a +LanguageCodePage=1250 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Instalacija +SetupWindowTitle=Instalacija - %1 +UninstallAppTitle=Deinstalacija +UninstallAppFullTitle=Deinstalacija programa %1 + +; *** Misc. common +InformationTitle=Podaci +ConfirmTitle=Potvrda +ErrorTitle=Greka + +; *** SetupLdr messages +SetupLdrStartupMessage=Instalirat e te %1. elite li da nastavite? +LdrCannotCreateTemp=Ne mogu da napravim privremenu datoteku. Instalacija obustavljena +LdrCannotExecTemp=Ne mogu da pokrenem datoteku u privremenom direktorijumu. Instalacija obustavljena +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nGreka %2: %3 +SetupFileMissing=Datoteka %1 nedostaje u instalacionom direktorijumu. Ispravite problem ili nabavite novi primjerak programa. +SetupFileCorrupt=Instalacione datoteke su otecene. Nabavite novi primjerak programa. +SetupFileCorruptOrWrongVer=Instalacione datoteke su otecene, ili su nekompatibilne sa ovom verzijom instalacije. Ispravite problem ili nabavite novi primjerak programa. +InvalidParameter=Neispravan parametar je prenijet na komandnu liniju:%n%n%1 +SetupAlreadyRunning=Instalacija je vec pokrenuta. +WindowsVersionNotSupported=Ova verzija programa nije kompatibilna sa verzijom windows'-a na vaem racunaru. +WindowsServicePackRequired=Ovaj program zahtijeva %1 servisni paket %2 ili noviji. +NotOnThisPlatform=Program nece raditi na %1. +OnlyOnThisPlatform=Program ce raditi na %1. +OnlyOnTheseArchitectures=Program se moe instalirati samo na verzijama windows-a koji rade na sledecim arhitekturama procesora:%n%n%1 +WinVersionTooLowError=Ovaj program zahtijeva %1 verziju %2 ili noviju. +WinVersionTooHighError=Program se ne moe instalirati na %1 verziju %2 ili noviju. +AdminPrivilegesRequired=Morate biti prijavljeni kao administrator da bi ste instalirali program. +PowerUserPrivilegesRequired=Morate biti prijavljeni kao administrator ili ovlaceni korisnik da bi ste instalirali ovaj program. +SetupAppRunningError=Program %1 je trenutno pokrenut.%n%nUgasite ga, kliknite "U redu", ili "Obustavi" za napustite instalaciju. +UninstallAppRunningError=Program %1 je trenutno pokrenut.%n%nUgasite ga, kliknite "U redu", ili "Obustavi" za napustite instalaciju. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Izaberite nacin instalacije +PrivilegesRequiredOverrideInstruction=Izaberite nacin instalacije +PrivilegesRequiredOverrideText1=%1 moe biti instaliran za sve korisnike (zahtijeva administratorske privilegije), ili samo za vas. +PrivilegesRequiredOverrideText2=%1 moe biti instaliran za vas samo, ili za sve korisnike (zahtijeva administratorske privilegije). +PrivilegesRequiredOverrideAllUsers=Instalacija za &sve korisnike +PrivilegesRequiredOverrideAllUsersRecommended=Instalacija za &sve korisnike (preporucuje se) +PrivilegesRequiredOverrideCurrentUser=Instalacija &za vas samo +PrivilegesRequiredOverrideCurrentUserRecommended=Instalacija &za vas samo (preporucuje se) + +; *** Misc. errors +ErrorCreatingDir=Instalacija ne moe da napravi direktorijum "%1" +ErrorTooManyFilesInDir=Ne mogu da napravim datoteku u direktorijumu "%1" zato to sadri previe datoteka + +; *** Setup common messages +ExitSetupTitle=Napusti instalaciju +ExitSetupMessage=Instalacija nije kompletna. Ako izadete sad, program nece biti instaliran.%n%nMoete pokrenuti instalaciju neki drugi put da zavrite instaliranje.%n%nNapusti instalaciju? +AboutSetupMenuItem=&O programu... +AboutSetupTitle=O programu +AboutSetupMessage=%1 verzija %2%n%3%n%n%1 internet stranica:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< &Nazad +ButtonNext=&Dalje > +ButtonInstall=&Instaliraj +ButtonOK=U redu +ButtonCancel=Obustavi +ButtonYes=&Da +ButtonYesToAll=Da za &sve +ButtonNo=&Ne +ButtonNoToAll=N&e za sve +ButtonFinish=&Zavri +ButtonBrowse=&Pretrai... +ButtonWizardBrowse=P&retrai... +ButtonNewFolder=&Napravi novi direktorijum + +; *** "Select Language" dialog messages +SelectLanguageTitle=Izaberite jezik instalacije +SelectLanguageLabel=Izaberite jezik koji ce te koristiti tokom instalacije. + +; *** Common wizard text +ClickNext=Kliknite "Dalje" za nastavak, ili "Obustavi" da prekinete instalaciju. +BeveledLabel= +BrowseDialogTitle=Izaberite direktorijum +BrowseDialogLabel=Izaberite direktorijum sa liste ispod, onda kliknite na "U redu". +NewFolderName=Novi direktorijum + +; *** "Welcome" wizard page +WelcomeLabel1=Dobro doli na instalaciju programa [name] +WelcomeLabel2=Instalirat ce te [name/ver] na vaem racunaru.%n%nPreporucujemo da zatvorite sve ostale programe pa da nastavite sa instalacijom. + +; *** "Password" wizard page +WizardPassword=Lozinka +PasswordLabel1=Instalacija je zaticena lozinkom. +PasswordLabel3=Unesite lozinku i kliknite "Dalje" da nastavite. Lozinka je osjetljiva na velika i mala slova. +PasswordEditLabel=&Lozinka: +IncorrectPassword=Lozinka koju ste unijeli je netacna. Probajte opet. + +; *** "License Agreement" wizard page +WizardLicense=Ugovor o licenci +LicenseLabel=Paljivo procitajte sledece prije nego nastavite. +LicenseLabel3=Procitajte ugovor o licenci koji je ispod. Morate prihvatiti uslove ugovora ako elite da nastavite sa instalacijom. +LicenseAccepted=&Prihvatam ugovor +LicenseNotAccepted=&Ne prihvatam ugovor + +; *** "Information" wizard pages +WizardInfoBefore=Informacije +InfoBeforeLabel=Paljivo procitajte sledece prije nego nastavite. +InfoBeforeClickLabel=Kada budete spremni da nastavite instalaciju, kliknite "Dalje". +WizardInfoAfter=Informacije +InfoAfterLabel=Paljivo procitajte sledece prije nego nastavite. +InfoAfterClickLabel=Kada budete spremni da nastavite instalaciju, kliknite "Dalje". + +; *** "User Information" wizard page +WizardUserInfo=Podaci o korisniku +UserInfoDesc=Unesite vae podatke. +UserInfoName=&Korisnik: +UserInfoOrg=&Organizacija: +UserInfoSerial=&Serijski broj: +UserInfoNameRequired=Morate unijeti ime. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Izaberite lokaciju +SelectDirDesc=Gdje ce [name] biti instaliran? +SelectDirLabel3=Program [name] ce biti instaliran u direktorijumu. +SelectDirBrowseLabel=Za nastavak pritisnite "Dalje". Ako elite drugi direktorijum, pritisnite "Potrai". +DiskSpaceGBLabel=Potrebno je najmanje [gb] GB slobodnog prostora na disku. +DiskSpaceMBLabel=Potrebno je najmanje [mb] MB slobodnog prostora na disku. +CannotInstallToNetworkDrive=Program ne moete instalirati na mrenom disku. +CannotInstallToUNCPath=Program ne moete instalirati na UNC putanji. +InvalidPath=Morate navesti cijelu putanju sa oznakom diska; npr:%n%nC:\APP%n%nili UNC putanja u obliku:%n%n\\server\share +InvalidDrive=Disk ili UNC koji ste naveli ne postoji ili nije dostupan. Izaberite drugi. +DiskSpaceWarningTitle=Nema dovoljno prostora na disku +DiskSpaceWarning=Programu je potrebno %1 KB slobodnog prostora za instalaciju, ali izabrani disk ima samo %2 KB.%n%nDa li elite da nastavite bez obzira? +DirNameTooLong=Ime direktorijuma ili putanja je predugacka. +InvalidDirName=Ime direktorijuma nije valjano. +BadDirName32=Ime direktorijuma ne moe da sadri nijedan od sledecih karaktera:%n%n%1 +DirExistsTitle=Direktorijum vec postoji +DirExists=Direktorijum:%n%n%1%n%nvec postoji. elite ili da nastavite sa instalcijom u postojeci direktorijum? +DirDoesntExistTitle=Direktorijum ne postoji +DirDoesntExist=Direktorijum:%n%n%1%n%nne postoji. elite li da kreiramo navedeni direktorijum? + +; *** "Select Components" wizard page +WizardSelectComponents=Odabir komponenata +SelectComponentsDesc=Koje komponente elite da instalirate? +SelectComponentsLabel2=Izaberite komponente koje elite da instalirate; ocistite komponente koje ne elite. Kliknite "Dalje" za nastavak instalacije. +FullInstallation=Kompletna instalacija +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Podrazumijevana instalacija +CustomInstallation=Prilagodjena instalacija +NoUninstallWarningTitle=Komponenta postoji +NoUninstallWarning=Program je pronaao da su sledece komponente vec instalirane:%n%n%1%n%nŠtrikiranjem ovih komponenti one nece biti deinstalirane.%n%nDa li elite da nastavite? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Izabrane stavke zahtijevaju najmanje [gb] GB prostora na disku. +ComponentsDiskSpaceMBLabel=Izabrane stavke zahtijevaju najmanje [mb] MB prostora na disku. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Odabir dodatnih zadataka +SelectTasksDesc=Koje dodatne zadatke elite program da izvri? +SelectTasksLabel2=Izaberite dodatne zadatke koje zelite da [name] izvri, onda kliknite "Dalje". + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Odabir direktorijuma u meniju "Start" +SelectStartMenuFolderDesc=Izaberite mjesto gdje elite da budu precice? +SelectStartMenuFolderLabel3=Instalacija ce postaviti precice u sledecem direktorijumu "Start" menija. +SelectStartMenuFolderBrowseLabel=Za nastavak pritisnite "Dalje". Ako elite drugi direktorijum pritisnite "Potrai". +MustEnterGroupName=Morate unijeti ime direktorijuma. +GroupNameTooLong=Ime direktorijuma ili putanje je predugacko. +InvalidGroupName=Ime direktorijuma nije valjano. +BadGroupName=Naziv direktorijuma ne smije da sadri sledece karaktere:%n%n%1 +NoProgramGroupCheck2=&Nemoj kreirati direktorijum u "Start" meniju + +; *** "Ready to Install" wizard page +WizardReady=Spreman za instalaciju +ReadyLabel1=Program je spreman da instalira [name] na vaem racunaru. +ReadyLabel2a=Klikni "Instaliraj" da zapocnete instalaciju ili "Nazad" da ponovo pogledate i promijenite pojedine stavke. +ReadyLabel2b=Klikni "Instaliraj" da zapocnete instalaciju. +ReadyMemoUserInfo=Podaci o korisniku: +ReadyMemoDir=Lokacija direktorijuma: +ReadyMemoType=Vrsta instalacije: +ReadyMemoComponents=Izabrane komponente: +ReadyMemoGroup=Direktorijum u meniju "Start": +ReadyMemoTasks=Dodatni zadaci: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Snimam dodatne datoteke... +ButtonStopDownload=&Zaustavi snimanje +StopDownload=Jeste li sigurni da elite da zaustavite snimanje? +ErrorDownloadAborted=Snimanje obustavljeno +ErrorDownloadFailed=Snimanje neuspjeno: %1 %2 +ErrorDownloadSizeFailed=informacije o velicini netacne: %1 %2 +ErrorFileHash1=Hash identifikacija datoteke netacna: %1 +ErrorFileHash2=Netacna hash identifikacija datoteke: ocekivan %1, naden %2 +ErrorProgress=Neispravan progres: %1 of %2 +ErrorFileSize=Neispravna velicina datoteke: ocekivana %1, nadena %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Priprema za instalaciju +PreparingDesc=Program se sprema da instalira [name] na vaem racunaru. +PreviousInstallNotCompleted=Instalacija ili deinstalacija prethodnog programa nije zavrena. Potrebno je da restartujete racunar da bi se instalacija zavrila.%n%nNakon restarta racunara pokrenite instalaciju ponovo da bi se [name] instalirao. +CannotContinue=Instalacija nije moguca. Kliknite "Otkai" da izadete. +ApplicationsFound=Sledeci programi koriste datoteke koje treba da aurira instalacioni program. Preporucujemo da dozvolite instalacionom programu da zatvori ove programe. +ApplicationsFound2=Sledeci programi koriste datoteke koje treba da aurira instalacioni program. Preporucujemo da dozvolite instalacionom programu da zatvori ove programe. Nakon kompletirane instalacije, instalacija ce pokuati da restartuje program . +CloseApplications=&Automatski zatvorite program +DontCloseApplications=&Ne zatvaraj program +ErrorCloseApplications=Ne mogu da zatvorim sve programe. Preporucujemo da ugasite sve programe cije datoteke treba da nadogradi instlacija. +PrepareToInstallNeedsRestart=Instalacija mora da restartuje racunar. Nakon restarta racunara, pokrenite instalaciju [name] da bi dovrili instalaciju.%n%nelite li da restartujete racunar? + +; *** "Installing" wizard page +WizardInstalling=Instaliram +InstallingLabel=Sacekajte da program instalira [name] na va racunar. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Zavravam sa instalacijom [name] +FinishedLabelNoIcons=Instalacija [name] je zavrena na vaem racunaru. +FinishedLabel=Instalacija [name] je zavrena. Program moete startovati klikom na instaliranu precicu. +ClickFinish=Kliknite na "Zavri" da izadete. +FinishedRestartLabel=Da bi instalacija [name] bila kompletna, program mora restartovati racunar. Restartovanje racunara? +FinishedRestartMessage=Da bi instalacija [name] bila kompletna, program mora restartovati racunar.%n%nRestartovanje racunara? +ShowReadmeCheck=Da, elim da pogledam tekstualnu datoteku +YesRadio=&Da, restartovacu racunar sada +NoRadio=&Ne, restartovacu racunar kasnije +; used for example as 'Run MyProg.exe' +RunEntryExec=Run %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=View %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Sledeci disk +SelectDiskLabel2=Ubacite disk %1 i kliknite "U redu".%n%nAko se datoteke na ovom disku mogu pronaci u nekom drugom direktorijumu, unesite odgovarajucu putanju ili kliknite na „Potrai“ +PathLabel=&Path: +FileNotInDir2=Datoteka "%1" ne postoji na lokaciji "%2". Ubacite pravi disk ili izaberite drugi direktorijum. +SelectDirectoryLabel=Navedite lokaciju sledeceg diska. + +; *** Installation phase messages +SetupAborted=Instalacija nije kompletna.%n%nIspravite problem i pokrenite instalaciju ponovo. +AbortRetryIgnoreSelectAction=Odaberite radnju +AbortRetryIgnoreRetry=&pokuaj ponovo +AbortRetryIgnoreIgnore=&Ignorii greku i nastavi +AbortRetryIgnoreCancel=Prekini instalaciju + +; *** Installation status messages +StatusClosingApplications=Zatvaram programe... +StatusCreateDirs=Kreiram direktorijume... +StatusExtractFiles=Raspakujem datoteke... +StatusCreateIcons=Kreiram precice... +StatusCreateIniEntries=Kreiram INI unose... +StatusCreateRegistryEntries=Kreiram unose u registar... +StatusRegisterFiles=Registrujem datoteke... +StatusSavingUninstall=Snimam deinstalacione informacije... +StatusRunProgram=Yavravam sa instalacijom... +StatusRestartingApplications=Restartujem program... +StatusRollback=Ponitavam izmjene... + +; *** Misc. errors +ErrorInternal2=Interna greka: %1 +ErrorFunctionFailedNoCode=%1 neuspjeh +ErrorFunctionFailed=%1 neuspjeh; kod %2 +ErrorFunctionFailedWithMessage=%1 neuspjeh; kod %2.%n%3 +ErrorExecutingProgram=Ne mogu da pokrenem datoteku:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Greka pri unosu u registri:%n%1\%2 +ErrorRegCreateKey=Greka pri unosu u registri:%n%1\%2 +ErrorRegWriteKey=Greka pri unosu u registri:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Greka pri stvaranju INI unosa u datoteci "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Izostavite ovu datoteku (ne preporucuje se) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorii greku i nastaviti instalaciju (ne preporucuje se) +SourceIsCorrupted=Instalaciona datoteka je otecena +SourceDoesntExist=Instalaciona datoteka "%1" ne postoji +ExistingFileReadOnly2=Postojeca datoteka ne moe se presnimiti jer je oznacena kao samo za citanje. +ExistingFileReadOnlyRetry=&Uklonite atribut na datoteci samo za citanje i pokuajte ponovo +ExistingFileReadOnlyKeepExisting=&Zadrati postojecu datoteku +ErrorReadingExistingDest=Greka nastala pri citanju vec postojece datoteke: +FileExistsSelectAction=Izaberite operaciju +FileExists2=Datoteka vec postoji. +FileExistsOverwriteExisting=&Presnimite postojecu datoteku +FileExistsKeepExisting=&Zadrati postojecu datoteku +FileExistsOverwriteOrKeepAll=&Uradi ovo kod sledeceg problema +ExistingFileNewerSelectAction=Izaberi operaciju +ExistingFileNewer2=Postojeca datoteka je novija od ove koju elimo da instaliramo. +ExistingFileNewerOverwriteExisting=&Presnimite postojecu datoteku +ExistingFileNewerKeepExisting=&Zadrite postojecu datoteku (preporucujemo) +ExistingFileNewerOverwriteOrKeepAll=&Uradi ovo kod sledeceg problema +ErrorChangingAttr=Greka kod pokuaja da se promijeni atribut datoteke: +ErrorCreatingTemp=Greka kod kreiranja datoteke u navedenom direktorijumu: +ErrorReadingSource=Greka kod pokuaja citanja instalacione datoteke: +ErrorCopying=Greka kod pokuaja snimanja datoteke: +ErrorReplacingExistingFile=Greka kod pokuaja presnimavanja postojece datoteke: +ErrorRestartReplace=Ne mogu da zamijenim: +ErrorRenamingTemp=Dolo je do greke pri pokuaju da preimenujem datoteku u navedenom direktorijumu +ErrorRegisterServer=Ne mogu da registrujem DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 nije uspio. Greka %1 +ErrorRegisterTypeLib=Ne mogu da upiem biblioteku tipova: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=Svi korisnici +UninstallDisplayNameMarkCurrentUser=Trenutni korisnik + +; *** Post-installation errors +ErrorOpeningReadme=Greka pri otvaranju tekstualne datoteke. +ErrorRestartingComputer=Instalacija ne moe da restartuje racunar. Uradite to sami. + +; *** Uninstaller messages +UninstallNotFound=Datoteka "%1" ne postoji. Ne mogu da deinstaliram. +UninstallOpenError=Datoteka "%1" se ne moe otvoriti. Ne mogu da deinstaliram +UninstallUnsupportedVer=Izvjetaj "%1" nije prepoznat ode ove verzije deinstalacije. Ne mogu da deinstaliram +UninstallUnknownEntry=Nepoznat unos (%1) se pojavio u izvjetaju deinstalacije +ConfirmUninstall=elite li da deinstalirate %1 kao i sve njegove komponente? +UninstallOnlyOnWin64=Ovu instalaciju je moguce deinstalirati samo na 64-bit Windows-u. +OnlyAdminCanUninstall=Ova instalacija se moe deinstalirati samo kao administrator. +UninstallStatusLabel=Sacekajte da se %1 deinstalira sa racunara. +UninstalledAll=%1 je uspjeno deinstaliran. +UninstalledMost=%1 deinstalacija uspjena.%n%nNeki elementi nijesu uklonjeni. Moete ih sami ukloniti. +UninstalledAndNeedsRestart=Da zavrite sa deinstlacijom %1, restartujte va racunar.%n%nelite li restart sada? +UninstallDataCorrupted="%1" datoteka je otecena. Ne mogu da deinstaliram + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Brisati dijeljenu datoteku? +ConfirmDeleteSharedFile2=Sistem je primijetio da sledecu dijeljenu datoteku vie ne koristi nijedan program. elite li da deinstaliram dijeljenu datoteku?%n%nAko je neki program koristio dijeljenu datoteku, moguce je da on vie nece raditi. Ako nijesi siguran izaberi "Ne". Ostavljanje datoteke na vaem racunaru ne moete imati problema. +SharedFileNameLabel=Ime datoteke: +SharedFileLocationLabel=Lokacija: +WizardUninstalling=Status deinstlacije +StatusUninstalling=Deinstaliram %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Instaliram %1. +ShutdownBlockReasonUninstallingApp=Deinstaliram %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 verzija %2 +AdditionalIcons=Dodatne precice: +CreateDesktopIcon=Kreiraj precicu na &desktop +CreateQuickLaunchIcon=Kreiraj precicu na paleti za &Brzo pokretanje +ProgramOnTheWeb=%1 na internetu +UninstallProgram=Deinstaliraj %1 +LaunchProgram=Pokreni %1 +AssocFileExtension=&Povei %1 sa datotekom %2 +AssocingFileExtension=Povezujem %1 sa datotekom %2 ... +AutoStartProgramGroupDescription=Pokretanje: +AutoStartProgram=Automatski pokreni %1 +AddonHostProgramNotFound=%1 nije naden u direktorijumu koji ste izabrali.%n%nelite li da nastavim? diff --git a/Files/Languages/Unofficial/Nepali.islu b/Files/Languages/Unofficial/Nepali.islu new file mode 100644 index 00000000..256c164c --- /dev/null +++ b/Files/Languages/Unofficial/Nepali.islu @@ -0,0 +1,339 @@ +; *** Inno Setup version 5.5.3+ Nepali messages *** +; Translated by Him Prasad Gautam [ drishtibachak@gmail.com ] +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. + +LanguageName=<0928><0947><092a><093e><0932><0940> +LanguageID=$0461 +LanguageCodePage=0 + +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +DialogFontSize=10 +;WelcomeFontName= +WelcomeFontSize=15 +;TitleFontName= +TitleFontSize=35 +;CopyrightFontName= +CopyrightFontSize=9 + +[Messages] + +; *** Application titles +SetupAppTitle=मैतालुको प्रवेश +SetupWindowTitle=मैतालु - %1 +UninstallAppTitle=निष्कासन +UninstallAppFullTitle=%1 को निष्कासन + +; *** Misc. common +InformationTitle=सूचना +ConfirmTitle=यकिन +ErrorTitle=त्रुटि + +; *** SetupLdr messages +SetupLdrStartupMessage=यसले %1लाई यो कल्पयन्त्रमा भित्र्याउँछ । के तपाइ यसलाई निरन्तरता दिन चाहनु हुन्छ? +LdrCannotCreateTemp=अस्ताइ फाइल सिर्जना गर्न नसकि एकोले स्थापकले भित्र्याउने कार्य गर्न सकेन । +LdrCannotExecTemp=अस्ताइ घर्रामा फाइललाई कार्यान्वयन गर्न नसकि एकोले स्थापकले भित्र्याउने कार्य गर्न सकेन । + +; *** Startup error messages +LastErrorMessage=%1.%n %n त्रुटि %2: %3 +SetupFileMissing=भित्रिने घर्राबाट फाइल %1 हरायो । कृपया समस्या हल गर्नु होस् वा कार्यक्रमबाटै नया फाइल हासिल गर्नु होला । +SetupFileCorrupt=स्थापक फाइल भ्रष्ट भयो । कृपया कार्यक्रमबाट नयाँ प्रति हासिल गर्नु होला । +SetupFileCorruptOrWrongVer=स्थापक फाइल भ्रष्ट भयो, अथवा यो हाल प्रयोगमा रहेको गृहको संस्करण सित मिल्न सकेन । कृपया समस्या हल गर्नु होस् अथवा अर्कै प्रति स्थापकको चाँजोपाँजो मिलाउनु होस् । +InvalidParameter=आदेश रेखामा अमान्य Parameter पठाइयो :%n %n %1 +SetupAlreadyRunning=स्थापकले भित्र्याउने कार्य पहिले देखि नै गर्दै छ । +WindowsVersionNotSupported=यो कार्यक्रमले तपाइको कल्पयन्त्रमा हाल भित्रिएको विन्डोज संस्करण सित मिलेर काम गर्न सक्दैन । +WindowsServicePackRequired=यो कार्यक्रमलाई %1 Service Pack %2 अथवा यस पछिका संस्करण चाहिन्छ । +NotOnThisPlatform=यो कार्यक्रम %1 मा चल्दैन । +OnlyOnThisPlatform=यो कार्यक्रम %1 मा मात्रै चल्छ । +OnlyOnTheseArchitectures=यो कार्यक्रम केवल निम्न उल्लिखित विन्डोज वास्तुकला नमुना संस्करणमा मात्रै भित्रिन सक्छ:%n %n %1 +MissingWOW64APIs=तपाइले हाल चलाएको विन्डोजमा 64-bit को कार्यक्रम भित्र्याउन स्थापकलाई चाहिने आवश्यक कार्यदक्षता समावेश भएको छैन । यो समस्या हल गर्न Service Pack %1 भित्र्याउनु होस् । +WinVersionTooLowError=यो कार्यक्रमलाई %1 संस्करण %2 अथवा यसभन्दा पछिल्लो संस्करण चाहिन्छ । +WinVersionTooHighError=यो कार्यक्रम %1 संस्करण %2 अथवा यस पछिका संस्करणमा भित्र्याउन सकिँदैन । +AdminPrivilegesRequired=यो कार्यक्रमलाई भित्र्याउन तपाइले प्रशासनिक हैसियत प्रयोग गरी विन्डो शुभारम्भ गर्नु पर्छ । +PowerUserPrivilegesRequired=यो कार्यक्रम भित्र्याउन तपाइले प्रशासक अथवा अधिकार प्राप्त सदस्यको हैसियतमा विन्डोज खोल्नु पर्ने हुन्छ । +SetupAppRunningError=स्थापकले %1 चालू रहेको पता लगायो । %n %n कृपया सबैलाई बन्द गर्नु होस् । कार्य जारी राख्ने भए 'ठीक' टाँक र बहिर्गमन गर्ने भए 'रद्द गर' भन्ने टाँकलाई दबाउनु होला । +UninstallAppRunningError=निष्कासकले %1 चालू रहेको पता लगायो । %n %n कृपया सबैलाई बन्द गर्नु होस् । कार्य जारी राख्ने भए 'ठीक' टाँक र बहिर्गमन गर्ने भए 'रद्द गर' भन्ने टाँकलाई दबाउनु होला । + +; *** Misc. errors +ErrorCreatingDir=स्थापकले "%1" घर्रा सिर्जना गर्न सकेन । +ErrorTooManyFilesInDir=धेरै फाइल भएकोले "%1" घर्रामा फाइल सिर्जना गर्न सकिएन । + +; *** Setup common messages +ExitSetupTitle=स्थापकको बहिर्गमन +ExitSetupMessage=स्थापकले भित्र्याउने कार्य सकेको छैन । यदि बहिर्गमन गरेमा यो कार्यक्रम भित्रिने छैन । %n %n पछि अर्को समयमा तपाई भित्र्याउने कार्य गर्न सक्नु हुन्छ । %n स्थापकले अहिले सम्म गरेको काम त उल्टिन्छ नि!%n %n के मैतालु प्रवेशको कार्य स्थगित नै गर्ने हो? +AboutSetupMenuItem=&स्थापक सामाग्रीको बारेमा +AboutSetupTitle=स्थापकको बारेमा +AboutSetupMessage=%1 संस्करण %2%n %3%n %n %1 गृह पृष्ट:%n %4 +AboutSetupNote=यो स्थापक हिम प्रसाद गौतमले तयार पारेको हो । +TranslatorNote=नेपाली भाषामा पहिलो अनुवादको कार्य हिम प्रसाद गौतम < drishtibachak@gmail.com > ले गर्नु भएको हो र यसमा निरन्तरता पनि जारी राख्नु भएको छ । + +; *** Buttons +ButtonBack=&पछाडि फर्क +ButtonNext=&अगाडि जाउ +ButtonInstall=&भित्र्याउ +ButtonOK=ठीक +ButtonCancel=रद्द गर +ButtonYes=&हो +ButtonYesToAll=&सबैमा हो +ButtonNo=&होइन +ButtonNoToAll=&सबैमा होइन +ButtonFinish=&समाप्त +ButtonBrowse=&ऊ घार... +ButtonWizardBrowse=ऊ&घार त... +ButtonNewFolder=&नया थैली बनाउ + +; *** "Select Language" dialog messages +SelectLanguageTitle=स्थापकको भाषाको चयन +SelectLanguageLabel=स्थापकले भित्र्याउँदा प्रयोग गरिने भाषा चयन गर्नु होस्: + +; *** Common wizard text +ClickNext=निरन्तरता राख्ने भए 'अगाडि जाउ' भन्ने टाँकलाई अथवा बहिर्गमन गर्ने भए 'रद्द गर' भन्ने टाँकलाई दबाउनु होस् । + +BeveledLabel= +BrowseDialogTitle=थैली उघारिने कार्य +BrowseDialogLabel=निम्न सूचीबाट थैली चयन गर्नु होस् र 'ठीक' भन्ने टाँकलाई दबाउनु होस् । +NewFolderName=नयाँ थैली + +; *** "Welcome" wizard page +WelcomeLabel1=%n नमस्कार! [name] मैतालुको रूपमा भित्रिने समारोहमा तपाइलाई स्वागत छ । +WelcomeLabel2=%n यो स्थापकले [name/ver] लाई तपाइको कल्पयन्त्रमा भित्र्याउने छ । %n %n भित्र्याउने कार्य जारी राख्नु भन्दा पहिले खोलिएका सबै अनुप्रयोगहरूलाई बन्द गर्न सुझाव दिइन्छ । + +; *** "Password" wizard page +WizardPassword=गोप्य शब्द +PasswordLabel1=यो स्थापकमा गोप्य शब्द राखिएको छ । +PasswordLabel3=कार्य जारी राख्न गोप्य शब्द उपलब्ध गराएर 'अगाडि जाउ' भन्ने टाँकलाई दबाउनु होला । गोप्य शब्द वर्ण संवेदन सिल छ । +PasswordEditLabel=&गोप्यशब्द +IncorrectPassword=तपाइले लेखेको गोप्य शब्द मिलेन । कृपया फेरी कोसिस गर्नु होस् । + +; *** "License Agreement" wizard page +WizardLicense=इजाजत मञ्जु रिनामा +LicenseLabel=कार्य निरन्तर राख्न कृपया तलको महत्त्वपूर्ण सूचना पढ्नु होस् । +LicenseLabel3=कृपया निम्न इजाजत राम्ररी पढ्नु होस् । स्थापकले भित्र्याउने कार्य सुरु गर्नु पूर्व तपाइले सम्झौताका सबै सर्तहरू अनिवार्य रूपमा मन्जुर गर्नु पर्ने नै हुन्छ । +LicenseAccepted=म उपरोक्त सम्झौता &मन्जुर गर्छु +LicenseNotAccepted=म उपरोक्त सम्झौता मन्जुर गर्दि&न + +; *** "Information" wizard pages +WizardInfoBefore=सूचना +InfoBeforeLabel=कार्य निरन्तर राख्न कृपया निम्न महत्त्वपूर्ण सूचना पढ्नु होस् ।%n +InfoBeforeClickLabel=स्थापकले भित्र्याउने कार्य तयार पारे पछि 'अगाडि जाउ' भन्ने टाँकलाई दबाउनु होस् । +WizardInfoAfter=सूचना +InfoAfterLabel=कृपया कार्य निरन्तर राख्नु अघि निम्न महत्त्वपूर्ण सूचना पढ्नु होस् । +InfoAfterClickLabel=स्थापकले भित्र्याउने कार्य तयार पारे पछि 'अगाडि जाउ' भन्ने टाँकलाई दबाउनु होस् । + +; *** "User Information" wizard page +WizardUserInfo=तपाइको चिनारी +UserInfoDesc=तपाइको बारेमा लेख्नु होस् । +UserInfoName=&तपाइको नाम +UserInfoOrg=&सङ्गठन +UserInfoSerial=&सङ्केत सङ्ख्या: +UserInfoNameRequired=यहाँ तपाइले आफ्नो नाम उल्लेख गर्नु पर्ने नै हुन्छ । + +; *** "Select Destination Location" wizard page +WizardSelectDir=वासस्थानको चयन गर्नु होस् +SelectDirDesc=[name] लाई कहाँ भित्र्याउने हो? +SelectDirLabel3=स्थापकले [name] लाई निम्न थैली मा भित्र्याई दिने छ । +SelectDirBrowseLabel=मैतालु प्रवेशको कार्य निरन्तरता राख्न 'अगाडि जाउ' भन्ने टाँकलाई दबाउनु होस् । यदि तपाइ भिन्दै थैलीको चयन गर्न चाहनु हुन्छ भने 'उघार' भन्ने टाँकलाई दबाउनु होला । +DiskSpaceMBLabel=कम्तीमा [mb] MB क्षमताको भकारी चाहिन्छ । +CannotInstallToNetworkDrive=सञ्जाल भकारीमा स्थापकले भित्र्याउन सकेन । +CannotInstallToUNCPath=स्थापकले UNC path मा भित्र्याउन सक्दैन । +InvalidPath=तपाइले भकारी अक्षर सहित पूरा मार्ग लेख्नु नै पर्छ । जस्तै:%n %n C:\APP%n %n अथवा UNC मार्ग %n %n \\server\share बनोटमा +InvalidDrive=तपाइले चयन गरेको भकारी छदै छैन अथवा यसमा केही राख्न मिल्दैन । कृपया अर्कै चयन गर्नु होस् । +DiskSpaceWarningTitle=भकारीमा चाहिने जति ठाउँ खाली छैन । +DiskSpaceWarning=स्थापकलाई कम्तीमा %1 KB खुल्ला ठाउँ चाहिन्छ । तर चयन गरिएको भकारीमा केवल %2 KB मात्र खालि ठाउँ छ । %n %n जे भए पनि कार्य जारी राख्ने हो? +DirNameTooLong=थैलीको नाम अथवा मार्ग धेरै लाम भयो । +InvalidDirName=थैलीको नाम अमान्य छ । +BadDirName32=थैली का कुनै पनि नामहरू समावेश गर्न सकिँदैन । %n %n %1 +DirExistsTitle=थैली छ । +DirExists=थैली:%n %n %1%n %n पहिले देखिने छ । के तपाइ यही थैलीमा जसरी भए पनि भित्र्याउने चाहना राख्नु हुन्छ ? +DirDoesntExistTitle=थैली छदै छैन । +DirDoesntExist=थैली:%n %n %1%n %n छदै छैन । के तपाइ यो नाम गरेको नयाँ थैलीको सिर्जना गर्न चाहनु हुन्छ? + +; *** "Select Components" wizard page +WizardSelectComponents=सहकर्मीहरूको चयन गर्नु होस् । +SelectComponentsDesc=कुन चाही सहकर्मीलाई पनि भित्र्याउने हो? +SelectComponentsLabel2=भित्र्याउन चाहेको सहकर्मीलाई चयन गर्नु होस्, भित्र्याउन नचाहेको सहकर्मीलाई मेटाइ दिनु होस् । काम जारी राख्न तयार भए पछि 'अगाडि जाउ' भन्ने टाँकलाई दबाउनु होला । +FullInstallation=सर्वस्व भित्र्याउने +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=यथेष्ट भित्र्याउने +CustomInstallation=चाहे जति भित्र्याउने +NoUninstallWarningTitle=सहकर्मीहरू रहेछन् । +NoUninstallWarning=निम्न अनुसारका सहकर्मीहरू तपाइको कल्पयन्त्रमा पहिले नै भित्रिएको कुरा स्थापकले पता लगायो । %n %n %1%n %n यी सहकर्मीहरूलाई चयन नगरी निष्कासनको कार्य हुन सक्दैनन् । %n %n जे भए पनि तपाई कार्य जारी राख्न चाहनु हुन्छ? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceMBLabel=हालको चयनलाई कम्तीमा [mb] MB खालि स्थान चाहिन्छ । + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=अतिरिक्त कार्यको चयन गर्नु होस् +SelectTasksDesc=मैले कुन चाही अतिरिक्त कार्य सम्पादन गर्नु पर्ने हो? +SelectTasksLabel2=स्थापकले [name], लाई भित्र्याउने क्रममा यो कार्य पनि गरोस् भनि तपाइले इच्छा राखेको अतिरिक्त कार्यको चयन गरी 'अगाडि जाउ' भन्ने टाँकलाई दबाउनु होला । + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=सुरुवात सूची थैलीको चयन गर्नु होस् । +SelectStartMenuFolderDesc=स्थापकले द्रुत मार्ग कहाँ बनाउने? +SelectStartMenuFolderLabel3=स्थापकले कार्यक्रमको द्रुत मार्ग निम्न सुरुवात सूची थैलीमा गरेको छ । +SelectStartMenuFolderBrowseLabel=निरन्तरता राख्न 'अगाडि जाउ' भन्ने टाँकलाई दबाउनु होस्, यदी तपाइ अर्कै थैलीमा राख्न चाहनु हुन्छ भने, 'उघार' भन्ने टाँकलाई दबाउनु होला । +MustEnterGroupName=थैलीको नाम लेख्न अनिवार्य गरिएको छ । +GroupNameTooLong=थैलीको नाम अथवा मार्ग धेरै नै लामो भयो । +InvalidGroupName=थैलीको नाम अमान्य छ । +BadGroupName=थैलीको नाममा निम्न वर्णहरू समावेश हुन सक्दैनन्:%n %n %1 +NoProgramGroupCheck2=&सुरुवात सूची थैली सिर्जना नगर है । + +; *** "Ready to Install" wizard page +WizardReady=अब भित्रिन तयार +ReadyLabel1=अब तपाइको कल्पयन्त्रमा [name] लाई भित्र्याउने कार्य सुरु गर्न स्थापक तयार छ । +ReadyLabel2a=यदि तपाइ तलको अनुकूलतामा समीक्षा वा परिवर्तन गर्न चाहनु हुन्छ भने 'पछाडि फर्क' भन्ने टाँक लाई दबाउनु होला । यही अनुकूलता ठीक छ जस्तो लाग्छ भने 'भित्र्याउ' भन्ने टाँकलाई दबाउनु होस् । +ReadyLabel2b=भित्रिने कार्य जारी राख्न 'भित्र्याउ' भन्ने टाँकलाई दबाउनु होस् +ReadyMemoUserInfo=उपभोक्ताको जानकारी: +ReadyMemoDir=गन्तव्य थैली: +ReadyMemoType=भित्रिने किसिम: +ReadyMemoComponents=चयन गरिएका सहकर्मीहरू: +ReadyMemoGroup=सुरुवात सूची थैली: +ReadyMemoTasks=अतिरिक्त कार्य: + +; *** "Preparing to Install" wizard page +WizardPreparing=भित्रिने कार्यको तयारी हुँदै छ । +PreparingDesc=स्थापक तपाइको कल्पयन्त्रमा [name] लाई भित्र्याउन तयारी गर्दै छ । +PreviousInstallNotCompleted=अघिल्लो कार्यक्रमको भित्रिने/निष्कासन को कार्य सकिएको थिएन । थालिएको काम समाप्त गर्न तपाइले आफ्नो कल्पयन्त्रलाई पुनः सुरुवात गर्नु पर्ने हुन्छ । %n %n तपाइको कल्पयन्त्र पुनः सुरुवात भए पछि फेरी स्थापकलाई [name] भित्र्याउने आदेश दिनु होला । +CannotContinue=स्थापकले कार्य जारी राख्न सकेन, बहिर्गमन गर्न 'रद्द गर' टाँक दबाउनु होला । +ApplicationsFound=स्थापकलाई अद्यावधिक गर्न चाहिने फाइल निम्न अनुप्रयोगले प्रयोगमा ल्याएको पाइयो । स्थापकलाई यी अनुप्रयोगहरू स्वतः बन्द गर्ने अनुमति प्रदान गर्न सुझाव दिइन्छ । +ApplicationsFound2=स्थापकलाई अद्यावधिक गर्न चाहिने फाइल निम्न अनुप्रयोगले प्रयोगमा ल्याएको पाइयो । स्थापकलाई यी अनुप्रयोगहरू स्वतः बन्द गर्ने अनुमति प्रदान गर्न सुझाव दिइन्छ । भित्र्याउने कार्य सम्पन्न भए पछि स्थापकले यी अनुप्रयोगहरूलाई पुनर् स्थापित गर्न कोसिस गर्ने छ । +CloseApplications=&अनुप्रयोगहरूलाई स्वतः बन्द गरि देउ +DontCloseApplications=अनुप्रयोगलाई बन्द &नगरी देउ +ErrorCloseApplications=स्थापकले स्वचालित रूपमा सबै अनुप्रयोगहरूलाई बन्द गर्न सकेन । सिफारिस गरिन्छ कि कार्य जारी राख्नु अघि स्थापकलाई चाहिने अद्यावधिक फाइल प्रयोग गर्न तपाइले सबै अणुप्रयोगहरूलाई बन्द गर्नु होस् । + +; *** "Installing" wizard page +WizardInstalling=भित्र्याउने कार्य गर्दै छु +InstallingLabel=कृपया स्थापकले तपाइको कल्पयन्त्रमा [name] लाई भित्र्याउन् जेल सम्म धैर्य गर्नु होला + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=स्थापकले [name]लाई भीत्र्याउने कार्यक्रमको समापन हुदैछ । +FinishedLabelNoIcons=स्थापकले [name] लाई तपाइको कल्पयन्त्रमा भित्र्याउने कार्य पुरा गर्‍यो । +FinishedLabel=मैले तपाइको कल्पयन्त्रमा [name] भित्र्याउने कार्य पुरा गरेँ । यो अनुप्रयोग स्थापित प्रतिमालाई चयन गरेर सक्रिय गराउन सकिन्छ +ClickFinish=भित्र्याउने कार्यक्रम समापन गर्न 'समाप्त' भन्ने टाँकलाई दबाउनु होस् । +FinishedRestartLabel=[name] भीत्रिए पनि कार्य सम्पादन सुरु गर्न यो कल्पयन्त्रलाई पुनः सुरुवात गर्नु पर्छ । के अहिले नै सुरुवात गरी हाल्ने हो? +FinishedRestartMessage=[name] भीत्रिए पनि कार्य सम्पादन सुरू गर्न स्थापकले तपाइको कल्पयन्त्रलाई पुनः सुरुवात गर्नु पर्छ । %n %n के अहिले नै सुरुवात गरि हाल्ने हो? +ShowReadmeCheck=हो, म 'मलाई पढौं है' भन्ने फाइल हेर्न चाहन्छु । +YesRadio=&हो, कल्पयन्त्र तुरून्तै पुनः सुरुवात होस् +NoRadio=हो&इन, कल्पयन्त्रलाई म पछि पुनः सुरुवात गरौंला +; used for example as 'Run MyProg.exe' +RunEntryExec=%1 लाई चलाउ +; used for example as 'View Readme.txt' +RunEntryShellExec=%1 लाई देखाउ + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=स्थापकलाई अर्को भकारी चाहिन्छ । +SelectDiskLabel2=कृपया %1 भकारीलाई घुसाएर 'ठीक' भन्ने टाँकलाई दबाउनु होस् । %n %n यदि तल देखाइएका बाहेक अन्य कुनै भकारी भित्रको थैली मा फाइल पाइन्छ बने सही मार्ग लेख्नु होला अथवा 'उघार' भन्ने टाँकलाई दबाउनु होस् । +PathLabel=&मार्ग: +FileNotInDir2=फाइल "%1" त "%2" मा फेला पार्न सकिएन । कृपया सही भकारी घुसाउनु होस् अथवा अर्को थैलीको चयन गर्नु होस् । +SelectDirectoryLabel=कृपया अर्को भकारीको स्थान किटानी गर्नु होस् । + +; *** Installation phase messages +SetupAborted=स्थापनाको कार्य तुहियो । %n %n कृपया समस्या हल गर्नु होस् र स्थापकलाई फेरी काममा लगाउनु होस् । +EntryAbortRetryIgnore=कृपया फेरी कोसिस गर्न 'अर्को प्रयास' भन्ने टाँकलाई, जे भए पनि कार्य जारी राख्न 'बेवास्ता' भन्ने टाँकलाई अथवा स्थापनाको कार्य रद्द गर्न 'परित्याग' भन्ने टाँकलाई दबाउनु होस् + +; *** Installation status messages +StatusClosingApplications=अनुप्रयोग बन्द गर्दै छु । +StatusCreateDirs=घर्राको सिर्जना गर्दै छु... +StatusExtractFiles=फाइलहरूलाई झिक्दै छु... +StatusCreateIcons=द्रुत मार्ग सिर्जना गर्दै छु... +StatusCreateIniEntries=INI प्रविष्टि सिर्जना गर्दै छु । +StatusCreateRegistryEntries=Registry प्रविष्टिको सिर्जना गर्दै छु । +StatusRegisterFiles=फाइलको दर्ता गर्दै छु । +StatusSavingUninstall=भित्रिन नसकेको सूचना बचत गर्दै छु । +StatusRunProgram=भित्रिने कार्यको समाप्ति गर्दै छु । +StatusRestartingApplications=अनुप्रयोग पुनः सुरुवात हुँदै छ । +StatusRollback=परिवर्तनहरूलाई उल्टाउँदै छु । + +; *** Misc. errors +ErrorInternal2=आन्तरिक त्रुटि: %1 +ErrorFunctionFailedNoCode=%1 असफल भयो । +ErrorFunctionFailed=%1 असफल भयो; कोड %2 हो । +ErrorFunctionFailedWithMessage=%1 असफल भयो; कोड %2 %n %3 +ErrorExecutingProgram=%1%n फाइल कार्यान्वयन गर्न सकिएन । + +; *** Registry errors +ErrorRegOpenKey=Registry कुञ्जी खोल्ने कार्यमा त्रुटि:%n %1\%2 +ErrorRegCreateKey=Registry कुञ्जी सिर्जनामा त्रुटि:%n %1\%2 +ErrorRegWriteKey=Registry कुञ्जी लेखाइमा त्रुटि:%n %1\%2 + +; *** INI errors +ErrorIniEntry=फाइल "%1" मा INI प्रविष्टिको त्रुटि भयो । + +; *** File copying errors +FileAbortRetryIgnore=फेरि कोसिस गर्न 'अर्को प्रयास' भन्ने टाँकलाई, यो फाइल छोडी दिन (यसो नगर्न सुझाव दिइन्छ), 'बेवास्ता' भन्ने टाँकलाई अथवा स्थापना रद्द गर्न 'परित्याग' भन्ने टाँकलाई दबाउनु होला । +FileAbortRetryIgnore2=फेरि कोसिस गर्न 'अर्को प्रयास' भन्ने टाँकलाई, जे भए पनि कार्य जारी राख्न (यसो नगर्न सुझाव दिइन्छ), 'बेवास्ता' भन्ने टाँकलाई अथवा स्थापना रद्द गर्न 'परित्याग' भन्ने टाँकलाई दबाउनु होला । +SourceIsCorrupted=श्रोत फाइल भ्रष्ट भएको रहेछ । +SourceDoesntExist=श्रोत फाइल "%1" छदै छैन । +ExistingFileReadOnly=विद्यमान फाइल त 'पढ्न मात्रै मिल्ने' प्रकृतिको रहेछ । %n %n 'पढ्न मात्रै मिल्ने' प्रकृति हटाएर फेरि कोसिस गर्न 'अर्को प्रयास' भन्ने टाँकलाई, यो फाइल छोडी दिन 'बेवास्ता' भन्ने टाँकलाई अथवा स्थापना रद्द गर्न 'परित्याग' भन्ने टाँकलाई दबाउनु होला । +ErrorReadingExistingDest=विद्यमान फाइल पढ्दा खेरी त्रुटि हुन पुग्यो । : +FileExists=यो फाइल त पहिले नै भित्रिएको छ । %n %n के तपाइ स्थापकलाई यसलाई मेटाएर नया भित्र्याउने आदेश दिनु हुन्छ? +ExistingFileNewer=स्थापकले भित्र्याउन लागेको भन्दा नयाँ फाइल पहिले नै भित्रिएको रहेछ । विद्यमान फाइललाई यथावत् राख्न सल्लाह दिइन्छ । %n %n के तपाइ विद्यमान फाइललाई नै कायम राख्न चाहनु हुन्छ? +ErrorChangingAttr=पूर्व स्थापित फाइलको परिचायकहरूलाई परिवर्तन गर्दा गल्ती भयो: +ErrorCreatingTemp=गन्तव्य घर्रामा फाइलको सिर्जना गर्दा गल्ती भयो: +ErrorReadingSource=श्रोत फाइल पढ्ने क्रममा गल्ती भयो: +ErrorCopying=फाइलको नक्कल उतार्ने क्रममा गल्ती भयो: +ErrorReplacingExistingFile=विद्यमान फाइललाई प्रतिस्थापन गर्दा गल्ती भयो: +ErrorRestartReplace=पुनः प्रतिस्थापन असफल भयो: +ErrorRenamingTemp=गन्तव्य घर्राको फाइलको नाम परिवर्तन गर्ने कोसिस गर्दा गल्ती भयो: +ErrorRegisterServer=DLL/OCX दर्ता गर्न सकिएन: %1 +ErrorRegSvr32Failed=RegSvr32 असफल भयो (गल्ती कोड %1) । +ErrorRegisterTypeLib=%1किसिमको पुस्तकालय दर्ता गर्न सकिएन । + +; *** Post-installation errors +ErrorOpeningReadme='मलाई पढ्नु होस्' भन्ने फाइल पल्टाउने कोसिस गर्दा गल्ती भयो । +ErrorRestartingComputer=स्थापकले कल्पयन्त्रलाई पुनः सुरुवात गराउन सकेन । कृपया तपाइ आफैँले यसलाई पुनः सुरु गराउनु होस् । + +; *** Uninstaller messages +UninstallNotFound=फाइल "%1" छदै छैन, निष्कासन गर्ने कुरै भएन... । +UninstallOpenError=फाइल "%1" खोल्न नसकेको ले निष्कासन गर्न सकिँदैन । +UninstallUnsupportedVer=निष्कासन अभिलेख खाता "%1" निष्कासन कर्ताको संस्करणको बनोट सित मिल्दैन । त्यसैले निष्कासन गर्न सकिँदैन । +UninstallUnknownEntry=निष्कासन अभिलेख खातामा अज्ञात प्रविष्टि (%1) सित जम्का भेट भयो । +ConfirmUninstall=के तपाइ %1 र यसका सबै हिस्साहरू हटाउने नै हो भन्ने कुरामा विश्वस्त हुनु हुन्छ? +UninstallOnlyOnWin64=यो मैतालुलाई 64-bit विन्डोजबाट मात्रै निष्कासित गर्न सकिन्छ । +OnlyAdminCanUninstall=प्रशासकीय अधिकार प्राप्त उपभोक्ताले मात्रै यो मैतालुलाई निष्कासित गर्न सक्छ । +UninstallStatusLabel=कृपया, तपाइको कल्पयन्त्रबाट %1 लाई हटाउने कार्य समाप्त हुँदासम्म धैर्य गर्नु होस् । +UninstalledAll=तपाइको कल्पयन्त्रबाट %1 लाई सफलतापूर्वक हटाइयो । +UninstalledMost=%1 लाई पुरै निष्कासित गरियो । %n %n केही तत्त्वलाई हटाउन सकिएन । यीनैहरूलाई आफैँले मेटाउनु पर्ने हुन्छ । +UninstalledAndNeedsRestart=%1को निष्कासनलाई पूर्णता दिन तपाइको कल्पयन्त्र पुनः सुरुवात हुनु पर्छ । %n %n के अहिले नै पुनः सुरुवात गरि हाल्ने हो? +UninstallDataCorrupted=%1 फाइल त भ्रष्ट पो भए छ । निष्कासन गर्न सकिएन । + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=के साझा फाइलहरू पनि हटाउने हो? +ConfirmDeleteSharedFile2=यो प्रणालीले जनाए अनुसार निम्न साझा फाइलहरू अब कुनै कार्यक्रमले प्रयोगमा ल्याउँदैनन् । के तपाइ यी साझा फाइललाई पनि यसै क्रममा निष्कासित गर्न चाहनु हुन्छ?%n %n यदि कुनै कार्यक्रमले अझै पनि यी फाइलको उपयोग गर्दछ भने यीनैहरूलाई हटाएको खण्डमा त्यो कार्यक्रम राम्ररी चल्न सक्दैन । यदि तपाइ यकिन गर्न सक्नु हुन्न भने 'होइन' विकल्प रोज्नु होस् । यी फाइलहरूलाई तपाइको कल्पयन्त्रमा नै राखी राख्दा कुनै हानि नोक्सान हुने छैन । +SharedFileNameLabel=फाइलको नाम: +SharedFileLocationLabel=स्थान: +WizardUninstalling=निष्कासनको अवस्था +StatusUninstalling=%1 निष्कासित हुँदै छ । + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=%1 भित्र्याउने कार्य हुँदै छ । +ShutdownBlockReasonUninstallingApp=%1 निष्कासित हुँदै छ । + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 संस्करण %2 +AdditionalIcons=अतिरिक्त प्रतिमा: +CreateDesktopIcon=&डेस्कटपमा प्रतिमाको सिर्जना होस् +CreateQuickLaunchIcon=&तुरुन्तै सक्रिय प्रतिमाको सिर्जना गर । +ProgramOnTheWeb=वेभमा %1 +UninstallProgram=%1 लाई निष्कासन गरि देउ +LaunchProgram=%1 लाई सक्रिय बनाउ +AssocFileExtension=%1 लाई %2 फाइलको विस्तार सित &आबद्ध गरी देउ । +AssocingFileExtension=%1 लाई %2 फाइलको विस्तार सित आबद्धता दिँदै छु । +AutoStartProgramGroupDescription=सुरुवात: +AutoStartProgram=%1 स्वचालित रूपले सुरु होस् । +AddonHostProgramNotFound=तपाइले चयन गर्नु भएको थैली मा %1 लाई फेला पार्न सकिएन । %n %n के जसरी पनि कार्य निरन्तर राख्ने हो? diff --git a/Files/Languages/Unofficial/NorwegianNynorsk.isl b/Files/Languages/Unofficial/NorwegianNynorsk.isl new file mode 100644 index 00000000..325c5a2b --- /dev/null +++ b/Files/Languages/Unofficial/NorwegianNynorsk.isl @@ -0,0 +1,301 @@ +; *** Inno Setup version 4.0.5+ Norsk, nynorsk messages *** +; +; Translated by/omsett av: Magnar Myrtveit +; +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/is3rdparty.php +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). +; +; $jrsoftware: issrc/Files/Default.isl,v 1.32 2003/06/18 19:24:07 jr Exp $ + +[LangOptions] +LanguageName=Norsk, nynorsk +LanguageID=$0409 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName=MS Shell Dlg +;DialogFontSize=8 +;DialogFontStandardHeight=13 +;TitleFontName=Arial +;TitleFontSize=29 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +DialogFontName=MS Shell Dlg +DialogFontSize=8 +DialogFontStandardHeight=13 +TitleFontName=Arial +TitleFontSize=29 +WelcomeFontName=Verdana +WelcomeFontSize=12 +CopyrightFontName=Arial +CopyrightFontSize=8 +[Messages] + +; *** Application titles +SetupAppTitle=Installasjon +SetupWindowTitle=Installering - %1 +UninstallAppTitle=Avinstallasjon +UninstallAppFullTitle=Avinstallering - %1 + +; *** Misc. common +InformationTitle=Informasjon +ConfirmTitle=Godta +ErrorTitle=Feil + +; *** SetupLdr messages +SetupLdrStartupMessage=Dette vil installera %1. Vil du halda fram? +LdrCannotCreateTemp=Kan ikkje laga midlertidig fil. Installasjonen er avbroten +LdrCannotExecTemp=Kan ikkje kyra fila i den midlertidige katalogen. Installasjonen er avbroten + +; *** Startup error messages +LastErrorMessage=%1.%n%nFeil %2: %3 +SetupFileMissing=Fila %1 finst ikkje i installasjonskatalogen. Ver venleg og fiks problemet eller f tak i ein ny kopi av programmet. +SetupFileCorrupt=Installasjonsfila er ydelagt. Ver venleg og f tak i ein ny kopi av programmet. +SetupFileCorruptOrWrongVer=Installasjonsfilane er ydelagde, eller ikkje kompatible med dette installasjonsprogrammet.Ver venleg og fiks problemet eller f tak i ein ny kopi av programmet. +NotOnThisPlatform=Dette programmet kyrer ikkje p %1. +OnlyOnThisPlatform=Dette programmet kyrer berre p %1. +WinVersionTooLowError=Dette programmet krev %1 versjon %2 eller nyare. +WinVersionTooHighError=Dette programmet kan ikkje bli installert p %1 versjon %2 eller nyare. +AdminPrivilegesRequired=Du m vera logga inn som administrator nr du installerer dette programmet. +PowerUserPrivilegesRequired=Du m vera logga inn som administrator eller ha administrator-rettar nr du installerer dette programmet. +SetupAppRunningError=Installasjonen har oppdaga at %1 kyrer.%n%nVer venleg og lukk det no, og trykk OK for halda fram, eller Avbryt for avslutta. +UninstallAppRunningError=Avinstallasjonen har oppdaga at %1 kyrer.%n%nVer venleg og lukk det no, og trykk OK for halda fram, eller Avbryt for avslutta. + +; *** Misc. errors +ErrorCreatingDir=Installasjonsprogrammet kunne ikkje laga katalogen "%1" +ErrorTooManyFilesInDir=Kunne ikkje laga ei fil i mappa "%1" fordi den inneheld for mange filar + +; *** Setup common messages +ExitSetupTitle=Avslutt installasjonen +ExitSetupMessage=Installasjonen er ikkje ferdig. Viss du avsluttar no, vil ikkje programmet bli installert.%n%nDu kan kyra installasjonen p nytt seinare for fullfra installsajonen.%n%nVil du avslutta installasjonen? +AboutSetupMenuItem=&Om installasjonsprogrammet... +AboutSetupTitle=Om installasjonsprogrammet +AboutSetupMessage=%1 versjon %2%n%3%n%n%1 heimeside:%n%4 +AboutSetupNote= + +; *** Buttons +ButtonBack=< &Tilbake +ButtonNext=&Neste > +ButtonInstall=&Installer +ButtonOK=OK +ButtonCancel=Avbryt +ButtonYes=&Ja +ButtonYesToAll=Ja til &alle +ButtonNo=&Nei +ButtonNoToAll=N&ei til alle +ButtonFinish=&Ferdig +ButtonBrowse=&Bla gjennom... + +; *** "Select Language" dialog messages +SelectLanguageTitle=Vel installasjonssprk +SelectLanguageLabel=Vel sprket som skal brukast under installasjonen: + +; *** Common wizard text +ClickNext=Trykk Neste for halda fram, eller Avbryt for avslutta installasjonen. +BeveledLabel= + +; *** "Welcome" wizard page +WelcomeLabel1=Velkomen til installasjonen av [name] +WelcomeLabel2=Dette vil installera [name/ver] p di datamaskin.%n%nDet er anbefalt at du lukkar alle andre program fr du fortset. + +; *** "Password" wizard page +WizardPassword=Passord +PasswordLabel1=Denne installasjonen er passordbeskytta. +PasswordLabel3=Ver venleg og skriv inn passordet, og trykk Neste for halda fram. Store og sm bokstavar blir behandla ulikt. +PasswordEditLabel=&Passord: +IncorrectPassword=Passordet du skreiv inn er feil. Ver venleg og prv igjen. + +; *** "License Agreement" wizard page +WizardLicense=Lisensvilkr +LicenseLabel=Ver venleg og les den fylgjande viktige informasjonen fr du fortset. +LicenseLabel3=Ver venleg og les dei fylgjande lisensvilkra. Du m godta innehaldet i denne avtalen fr du fortset installasjonen. +LicenseAccepted=Eg &godtar avtalen +LicenseNotAccepted=Eg godtar &ikkje avtalen + +; *** "Information" wizard pages +WizardInfoBefore=Informasjon +InfoBeforeLabel=Ver venleg og les den fylgjande viktige informasjonen fr du fortset. +InfoBeforeClickLabel=Nr du er klar til halda fram med installasjonen, trykk Neste. +WizardInfoAfter=Informasjon +InfoAfterLabel=Ver venleg og les den fylgjande viktige informasjonen fr du fortset. +InfoAfterClickLabel=Nr du er klar til fullfra installasjonen, trykk Neste. + +; *** "User Information" wizard page +WizardUserInfo=Brukarinformasjon +UserInfoDesc=Ver venleg og skriv inn din informasjon. +UserInfoName=&Brukarnamn: +UserInfoOrg=&Organisasjon: +UserInfoSerial=&Serienummer: +UserInfoNameRequired=Du m skriva inn eit namn. + +; *** "Select Destination Directory" wizard page +WizardSelectDir=Vel mlmappe +SelectDirDesc=Kvar skal [name] bli installert? +SelectDirLabel=Vel mappa der du vil at [name] skal bli installert, og trykk Neste. +DiskSpaceMBLabel=Programmet krev minst [mb] MB diskplass. +ToUNCPathname=Kan ikkje installera til ei UNC-bane. Viss du prver installera i eit nettverk, m du skriva inn nettverksmlstasjonen. +InvalidPath=Du m skriva inn ei full bane med stasjonsbokstav; for eksempel:%n%nC:\APP%n%neller ei UNC-bane som:%n%n\\server\share +InvalidDrive=Den valte stasjonen eller UNC-delinga finst ikkje, eller er ikkje tilgjengeleg. Ver venleg og vel ein annan. +DiskSpaceWarningTitle=Ikkje nok diskplass +DiskSpaceWarning=Installasjonsprogrammet krev minst %1 KB ledig plass for installera, men den valte stasjonen har berre %2 KB ledig.%n%nVil du halda fram likevel? +BadDirName32=Katalognamn kan ikkje innehalda nokon av dei fylgjande teikna:%n%n%1 +DirExistsTitle=Katalogen finst +DirExists=Katalogen:%n%n%1%n%nfinst allereie. Vil du installera til denne katalogen likevel? +DirDoesntExistTitle=Katalogen finst ikkje +DirDoesntExist=Katalogen:%n%n%1%n%nfinst ikkje. Vil du at katalogen skal bli laga? + +; *** "Select Components" wizard page +WizardSelectComponents=Vel komponentar +SelectComponentsDesc=Kva komponentar skal installerast? +SelectComponentsLabel2=Vel dei komponentane du vil installera; vel vekk dei komponentane du ikkje vil installera. Trykk Neste nr du er klar til halda fram. +FullInstallation=Full installasjon +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Kompakt installasjon +CustomInstallation=Eigendefinert installasjon +NoUninstallWarningTitle=Komponentane finst +NoUninstallWarning=Installasjonen har oppdaga at desse komponentane allereie er installerte p datamaskina:%n%n%1%n%nDesse komponentane blir ikkje avinstallerte sjlv om du vel dei vekk.%n%nVil du halda fram likevel? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceMBLabel=Valte alternativ krev minst [mb] MB ledig diskplass. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Vel tilleggsoppgver +SelectTasksDesc=Kva tilleggsoppgver skal utfrast? +SelectTasksLabel2=Vel dei tilleggsoppgvene som skal utfrast mens [name] blir installert, trykk deretter Neste. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Vel mappe i Start-menyen +SelectStartMenuFolderDesc=Kvar skal snarvegane plasserast? +SelectStartMenuFolderLabel=Vel mappa i Start-menyen der du vil at snarvegane skal bli plasserte. Trykk deretter Neste. +NoIconsCheck=&Ikkje lag ikon +MustEnterGroupName=Du m skriva inn eit katalognamn. +BadGroupName=Katalognamn kan ikkje innehalda nokon av dei fylgjande teikna:%n%n%1 +NoProgramGroupCheck2=&Ikkje lag mappe i Start-menyen + +; *** "Ready to Install" wizard page +WizardReady=Klar til installera +ReadyLabel1=Installasjonsprogrammet er no klart til starta installasjonen av [name] p di datamaskin. +ReadyLabel2a=Trykk Installer for halda fram med installasjonen, eller trykk Tilbake viss du vil sj p eller endra instillingane. +ReadyLabel2b=Trykk Installer for halda fram med installasjonen. +ReadyMemoUserInfo=Brukarinformasjon: +ReadyMemoDir=Mlmappe: +ReadyMemoType=Installasjonstype: +ReadyMemoComponents=Valte komponentar: +ReadyMemoGroup=Mappe i Start-menyen: +ReadyMemoTasks=Tilleggsoppgver: + +; *** "Preparing to Install" wizard page +WizardPreparing=Frebur installasjonen +PreparingDesc=Installasjonsprogrammet frebur installasjonen av [name] p di datamaskin. +PreviousInstallNotCompleted=Installasjonen/fjerninga av eit tidlegare program blei ikkje fullfrt. Du m starta maskina p nytt for fullfra den installasjonen.%n%nEtter omstarten m du kyra installasjonsprogrammet p nytt for fullfra installasjonen av [name]. +CannotContinue=Installasjonsprogrammet kan ikkje halda fram. Ver venleg og trykk Avbryt for avslutta. + +; *** "Installing" wizard page +WizardInstalling=Installerer +InstallingLabel=Ver venleg og vent mens [name] blir installert p di datamaskin. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Fullfrer installasjonsvegvisaren for [name] +FinishedLabelNoIcons=Installasjonen av [name] er fullfrt. +FinishedLabel=Installasjonen av [name] er fullfrt. Du kan starta programmet ved trykka p eit av dei installerte ikona. +ClickFinish=Trykk Ferdig for avslutta installasjonen. +FinishedRestartLabel=For fullfra installasjonen av [name], m maskina bli starta p nytt. Vil du starta p nytt no? +FinishedRestartMessage=For fullfra installasjonen av [name], m maskina bli starta p nytt.%n%nVil du starta p nytt no? +ShowReadmeCheck=Ja, eg vil sj LESMEG-fila +YesRadio=&Ja, start maskina p nytt no +NoRadio=&Nei, eg vil starta p nytt seinare +; used for example as 'Run MyProg.exe' +RunEntryExec=Kyr %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Vis %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Installasjonen treng den neste disketten +SelectDirectory=Vel katalog +SelectDiskLabel2=Ver venleg og set inn diskett %1 og trykk OK.%n%nViss filane finst i ein annan katalog enn den vist nedom, skriv inn riktig bane eller trykk Bla gjennom... +PathLabel=&Bane: +FileNotInDir2=Finn ikkje fila "%1" i "%2". Ver venleg og set inn riktig diskett eller vel ein annan katalog. +SelectDirectoryLabel=Ver venleg og skriv inn plasseringa til den neste disketten. + +; *** Installation phase messages +SetupAborted=Installasjonen blei ikkje fullfrt.%n%nVer venleg og fiks problemet og kyr installasjonen p nytt. +EntryAbortRetryIgnore=Tykkk Prv p nytt for prva p nytt, Ignorr for halda fram, eller Avbryt for avslutta installasjonen. + +; *** Installation status messages +StatusCreateDirs=Oppretter katalogar... +StatusExtractFiles=Pakkar ut filar... +StatusCreateIcons=Oppretter program-ikon... +StatusCreateIniEntries=Oppretter INI-instillingar... +StatusCreateRegistryEntries=Opprettter register-instillingar... +StatusRegisterFiles=Registrerer filar... +StatusSavingUninstall=Lagrar avinstallasjonsinformasjon... +StatusRunProgram=Fullfrer installasjonen... +StatusRollback=Tilbakestiller endringar... + +; *** Misc. errors +ErrorInternal2=Intern feil: %1 +ErrorFunctionFailedNoCode=%1 gjekk gale +ErrorFunctionFailed=%1 gjekk gale; kode %2 +ErrorFunctionFailedWithMessage=%1 gjekk gale; kode %2.%n%3 +ErrorExecutingProgram=Kunne ikkje kyre fila:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Feil under opning av registernkkel:%n%1\%2 +ErrorRegCreateKey=Feil under oppretting av registernkkel:%n%1\%2 +ErrorRegWriteKey=Feil under skriving til registernkkel:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Feil under oppretting av innstillingar i fila "%1". + +; *** File copying errors +FileAbortRetryIgnore=Trykk Prv p nytt for prva p nytt, Ignorr for hoppa over denne fila (ikkje anbefalt), eller Avbryt for avslutta installasjonen. +FileAbortRetryIgnore2=Trykk Prv p nytt for prva p nytt, Ignorr for halda fram (ikkje anbefalt), eller Avbryt for avslutta installasjonen. +SourceIsCorrupted=Kjeldefila er ydelagt +SourceDoesntExist=Kjeldefila "%1" finst ikkje +ExistingFileReadOnly=Den eksisterande fila er skrivebeskytta.%n%nTrykk Prv p nytt for fjerna skrivebeskyttinga og prva p nytt, Ignorr for hoppa over denne fila, eller Avbryt for avslutta installasjonen. +ErrorReadingExistingDest=Ein feil oppstod under lesing av den eksisterande fila: +FileExists=Fila finst allereie.%n%nVil du at installasjonsprogrammet skal skriva over den? +ExistingFileNewer=Den eksisterande fila er nyare enn den installasjonen prver installera. Det er anbefalt at du beheld den eksisterande fila.%n%nVil du behalda den eksisterande fila? +ErrorChangingAttr=Ein feil oppstod under forsk p endra attributtar i den eksisterande fila: +ErrorCreatingTemp=Ein feil oppstod under forsk p oppretta ei fil i mlmappa: +ErrorReadingSource=Ein feil oppstod under forsk p lesa kjeldefila: +ErrorCopying=Ein feil oppstod under forsk p kopiera fila: +ErrorReplacingExistingFile=Ein feil oppstod under forsk p erstatta den eksisterande fila: +ErrorRestartReplace=RestartReplace gjekk gale: +ErrorRenamingTemp=Ein feil oppstod under forsk p gje nytt namnt til ei fil i mlmappa: +ErrorRegisterServer=Kunne ikkje registrera DLL/OCX: %1 +ErrorRegisterServerMissingExport=DllRegisterServer-eksportering blei ikkje funne +ErrorRegisterTypeLib=Kunne ikkje registrera typebiblioteket: %1 + +; *** Post-installation errors +ErrorOpeningReadme=Ein feil oppstod under forsk p opna LESMEG-fila. +ErrorRestartingComputer=Installasjonsprogrammet kunne ikkje starta maskina p nytt. Ver venleg og gjer dette manuelt. + +; *** Uninstaller messages +UninstallNotFound=Kan ikkje avinstallera. Fila "%1" finst ikkje. +UninstallOpenError=Kan ikkje avinstallera. Fila "%1" kunne ikkje opnast. +UninstallUnsupportedVer=Kan ikkje avinstallera. Avinstallasjonsloggfila "%1" er i eit format som denne versjonen av avinstallasjonsprogrammet ikkje forstr +UninstallUnknownEntry=Ein ukjend parameter (%1) blei funne i avinstallasjonsloggen +ConfirmUninstall=Er du sikker p at du vil fjerna %1 og alle tilhyrande komponentar? +OnlyAdminCanUninstall=Denne installasjonen kan berre avinstallerast av ein brukar med administrator-rettar. +UninstallStatusLabel=Ver venleg og vent mens %1 blir fjerna fr di datamaskin. +UninstalledAll=Fjerninga av %1 var vellukka. +UninstalledMost=Avinstalleringa av %1 er fullfrt.%n%nNokre element kunne ikkje bli sletta. Desse kan slettast manuelt. +UninstalledAndNeedsRestart=For fullfra avinstallasjonen av %1, m datamaskina startast p nytt.%n%nVil du starta p nytt no? +UninstallDataCorrupted=Kan ikkje avinstallera. "%1"-fila er ydelagd. + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Fjerna delt fil? +ConfirmDeleteSharedFile2=Systemet indikerer at den fylgjande delte fila ikkje blir brukt av nokon program. Vil du at avinstallasjonsprogrammet skal fjerna denne delte fila?%n%nViss nokre program framleis brukar denne fila, og den blir fjerna, kan du risikere at dei ikkje verkar som dei skal. Viss du er usikker, vel Nei. la denne fila vera p systemet vil ikkje gjera nokon skade. +SharedFileNameLabel=Filnamn: +SharedFileLocationLabel=Plassering: +WizardUninstalling=Avinstallasjons-status +StatusUninstalling=Avinstallerer %1... + diff --git a/Files/Languages/Unofficial/Occitan.isl b/Files/Languages/Unofficial/Occitan.isl new file mode 100644 index 00000000..1cf8ed6c --- /dev/null +++ b/Files/Languages/Unofficial/Occitan.isl @@ -0,0 +1,317 @@ +; *** Inno Setup version 5.1.11+ Occitan messages *** +; +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/is3rdparty.php +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). +; +; Translated by David Gimeno i Ayuso, info@sima.cat, 2007/03/18 + +[LangOptions] +LanguageName=Occit<00E0>n +LanguageID=$0482 +LanguageCodePage=0 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Installacion +SetupWindowTitle=Installacion - %1 +UninstallAppTitle=Desinstallacion +UninstallAppFullTitle=Desinstallar %1 + +; *** Misc. common +InformationTitle=Informacion +ConfirmTitle=Confirmacion +ErrorTitle=Error + +; *** SetupLdr messages +SetupLdrStartupMessage=Aguest programa installar %1. Voletz continuar? +LdrCannotCreateTemp=Non s'a pogut crear un fichr temporau. Installacion cancellada +LdrCannotExecTemp=Non s'a pogut executar eth fichr ara carpeta temporau. Installacion cancellada + +; *** Startup error messages +LastErrorMessage=%1.%n%nError %2: %3 +SetupFileMissing=Eth fichr %1 non se trapa ara carpeta d'installacion. Resolvatz eth problema o obtietz ua naua cpia deth programa. +SetupFileCorrupt=Es fichrs d'installacion estan corrompudi. Obtietz ua naua cpia deth programa. +SetupFileCorruptOrWrongVer=Es fichrs d'installacion estan espatladi, o son incompatibles damb aguesta version deth programa. Resolvatz eth problema o obtietz ua naua cpia deth programa. +NotOnThisPlatform=Aguest programa non foncionar jos %1. +OnlyOnThisPlatform=Aguest programa sonque se pt executar jos %1. +OnlyOnTheseArchitectures=Aguest programa sonque se pt installar a versions de Windows dessenhades ents segentes arquitectures de processador:%n%n%1 +MissingWOW64APIs=Era version de Windows qu'auetz non includs ua foncionalitat requerida per Setup ent efectuar ua installacion de 64 bits. Ent corregir aguest problma, installatz eth Service Pack %1. +WinVersionTooLowError=Aguest programa requers %1 version %2 o posteriora. +WinVersionTooHighError=Aguest programa non se pt installar jos %1 version %2 o posteriora. +AdminPrivilegesRequired=Cau qu'ajatz privilgis d'administrador ent poder installar aguest programa. +PowerUserPrivilegesRequired=Cau que acceditz coma administrador o coma membre deth grop Power Users en installar aguest programa. +SetupAppRunningError=Eth programa d'installacion a detectat que %1 s'execute actuaument.%n%nBarratz eth programa e premetz Segent ent continuar o Cancellar ent gsser. +UninstallAppRunningError=Eth programa de desinstallacion a detectat que %1 s'execute en aguest moment.%n%nBarratz eth programa e premetz Segent ent continuar o Cancellar ent gsser. + +; *** Misc. errors +ErrorCreatingDir=Eth programa d'installacion non a pogut crear era carpeta "%1" +ErrorTooManyFilesInDir=Non s'a pogut crear un fichr ara carpeta "%1" pr'amor que conten massa fichrs + +; *** Setup common messages +ExitSetupTitle=Gsser +ExitSetupMessage=Era installacion non s'a completat. Se gessetz ara, eth programa non ser installat.%n%nEnta completar-la poderatz tornar a executar eth programa d'installacion quan volgatz.%n%nVolgatz gsser-ne? +AboutSetupMenuItem=&Sus era installacion... +AboutSetupTitle=Sus era installacion +AboutSetupMessage=%1 version %2%n%3%n%nPagina web de %1:%n%4 +AboutSetupNote= +TranslatorNote=Occitan translation maintained by David Gimeno i Ayuso (info@sima.cat) + +; *** Buttons +ButtonBack=< &Tornar +ButtonNext=&Segent > +ButtonInstall=&Installar +ButtonOK=Corrcte +ButtonCancel=Cancellar +ButtonYes=&c +ButtonYesToAll=c a &Tot +ButtonNo=&Non +ButtonNoToAll=N&on a tot +ButtonFinish=&Finalizar +ButtonBrowse=&Explorar... +ButtonWizardBrowse=E&xplorar... +ButtonNewFolder=&Crear ua carpeta naua + +; *** "Select Language" dialog messages +SelectLanguageTitle=Seleccionatz idima +SelectLanguageLabel=Seleccionatz er idima d'installacion: + +; *** Common wizard text +ClickNext=Premetz Segent ent continuar o Cancellar ent abandonar era installacion. +BeveledLabel= +BrowseDialogTitle=Explorar ua carpeta +BrowseDialogLabel=Seleccionatz ua carpeta dera lista segenta e clicatz Corrcte. +NewFolderName=Carpeta naua + +; *** "Welcome" wizard page +WelcomeLabel1=Benvengut ar assistent d'installacion de [name] +WelcomeLabel2=Aguest programa installar [name/ver] ath vste ordinador.%n%nEi recomanable que abantes de continuar barratz toti es autes programes dubrti, per tau d'evitar conflictes pendent eth procs d'installacion. + +; *** "Password" wizard page +WizardPassword=Cdi d'accs +PasswordLabel1=Aguesta installacion est protegida damb un cdi d'accs. +PasswordLabel3=Indicatz eth cdi d'accs e premetz Segent ent continuar. Aguest cdi distingus entre majuscules e minuscules. +PasswordEditLabel=&Cdi: +IncorrectPassword=Eth cdi introdusit non ei corrcte. Tornatz a intentar-ac. + +; *** "License Agreement" wizard page +WizardLicense=Acceptacion dera licncia d'emplec. +LicenseLabel=Cau que liegetz aguesta informacion abantes de continuar. +LicenseLabel3=Liegetz-vos er Acord de Licncia segent. Cau que n'acceptatz es trmes abantes de continuar damb era installacion. +LicenseAccepted=&Accepti er acrd +LicenseNotAccepted=&Non accepti er acrd + +; *** "Information" wizard pages +WizardInfoBefore=Informacion +InfoBeforeLabel=Liegetz-vos era informacion segenta abantes de continuar. +InfoBeforeClickLabel=Quan estetz preparat ent continuar, premetz Segent +WizardInfoAfter=Informacion +InfoAfterLabel=Liegetz-vos era informacion segenta abantes de continuar. +InfoAfterClickLabel=Quan estetz preparat ent continuar, premetz Segent + +; *** "User Information" wizard page +WizardUserInfo=Informacion sus er usatgr +UserInfoDesc=Entratz-i era vsta informacion. +UserInfoName=&Nm der usatgr: +UserInfoOrg=&Organizacion +UserInfoSerial=&Numer de srie: +UserInfoNameRequired=Cau que i entratz un nm + +; *** "Select Destination Directory" wizard page +WizardSelectDir=Escuelhetz Carpeta de Destinacion +SelectDirDesc=A on s'a d'installar [name]? +SelectDirLabel3=Escuelhetz era carpeta a on voletz installar [name]. +SelectDirBrowseLabel=Premetz Segent ent continuar. Se en voletz seleccionar ua de diferenta, premetz Explorar. +DiskSpaceMBLabel=Aguest programa a de besonh un minim de [mb] MB d'espaci a disc. +ToUNCPathname=Era installacion non pt installar eth programa en ua carpeta UNC. Se estatz en tot provar d'installar-lo en hilat, auratz d'assignar ua letra (D:, E:, etc...) ath disc de destinacion. +InvalidPath=Cau dar ua rota completa damb letra d'unitat, per exemple:%n%nC:\Aplicacion%n%non ben ua rota UNC en era forma:%n%n\\servidor\compartit +InvalidDrive=Eth disc o rota de hilat seleccionat non exists, escuelhetz-ne un aute. +DiskSpaceWarningTitle=Non i a pro espaci ath disc +DiskSpaceWarning=Eth programa d'installacion a de besonh coma minim %1 KB d'espaci liure, ms eth disc seleccionat sonque a %2 KB disponibles.%n%nTot e damb a, desiratz continuar? +DirNameTooLong=Era rota o nm dera carpeta ei massa long. +InvalidDirName=Eth nm dera carpeta ei incorrcte. +BadDirName32=Un nm de carpeta non pt contier cap des caractrs segents:%n%n%1 +DirExistsTitle=Era carpeta exists +DirExists=Era carpeta:%n%n%1%n%nja exists. Volgatz installar igualament eth programa en aguesta carpeta? +DirDoesntExistTitle=Era Carpeta Non Exists +DirDoesntExist=Era carpeta:%n%n%1%n%nnon exists. Volgatz que sigue creada? + +; *** "Select Program Group" wizard page +WizardSelectComponents=Escuelhetz Components +SelectComponentsDesc=Quini components cau installar? +SelectComponentsLabel2=Seleccionatz es components que voletz installar; eliminatz es components que non voletz installar. Premetz Segent ent continuar. +FullInstallation=Installacion completa +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Installacion compacta +CustomInstallation=Installacion personalizada +NoUninstallWarningTitle=Es components Existissen +NoUninstallWarning=Eth programa d'installacion a detectat qu'es components segents ja se trapen ath vste ordinador:%n%n%1%n%nSe non estan seleccionadi non seran desinstalladi.%n%nVolgatz continuar igualament? +ComponentSize1=%1 Kb +ComponentSize2=%1 Mb +ComponentsDiskSpaceMBLabel=Aguesta seleccion requers un minim de [mb] Mb d'espaci ath disc. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Escuelhetz prtzhts addicionaus +SelectTasksDesc=Quini prtzhts addicionaus cau executar? +SelectTasksLabel2=Escuelhetz es prtzhts addicionaus que voletz que siguen executadi mentre s'installa [name], e demps premetz Segent. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Escuelhetz era carpeta deth Menu Inici +SelectStartMenuFolderDesc=A on cau plaar es ligams deth programa? +SelectStartMenuFolderLabel3=Escuelhetz era carpeta deth Menu Inici a on voletz qu'eth programa d'installacion cree es ligams. +SelectStartMenuFolderBrowseLabel=Premetz Segent ent continuar. S'en voletz seleccionar ua de diferenta, premetz Explorar. +MustEnterGroupName=Cau que i entratz un nm de carpeta. +GroupNameTooLong=Era rota o nm dera carpeta ei massa long. +InvalidGroupName=Eth nm dera carpeta ei incorrcte. +BadGroupName=Eth nm deth grop non pt contier cap des caractrs segents:%n%n%1 +NoProgramGroupCheck2=&Non crear ua carpeta ath Menu Inici + +; *** "Ready to Install" wizard page +WizardReady=Preparat ent installar +ReadyLabel1=Eth programa d'installacion est preparat ent iniciar era installacion de [name] ath vste ordinador. +ReadyLabel2a=Premetz Installar ent continuar damb era installacion, o Tornar se voletz revisar o modificar es opcions d'installacion. +ReadyLabel2b=Premetz Installar ent continuar damb era installacion. +ReadyMemoUserInfo=Informacion der usatgr: +ReadyMemoDir=Carpeta de destinacion: +ReadyMemoType=Tipe d'installacion: +ReadyMemoComponents=Components seleccionadi: +ReadyMemoGroup=Carpeta deth Menu Inici: +ReadyMemoTasks=Prtzhts addicionaus: + +; *** "Preparing to Install" wizard page +WizardPreparing=Se premans era installacion +PreparingDesc=Se premans era installacion de [name] ath vste ordinador. +PreviousInstallNotCompleted=Era installacion o desinstallacion anteriora non s'a amiat a trme. Caler que reiniciatz er ordinador ent finalizar aguesta installacion.%n%nDemps de reiniciar er ordinador, executatz aguest programa de nau ent completar era installacion de [name]. +CannotContinue=Era installacion non pt continuar. Premetz Cancellar ent gsser. + +; *** "Installing" wizard page +WizardInstalling=S'installe +InstallingLabel=Esperatz-vos mentre s'installe [name] ath vste ordinador. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Se complete er assistent d'installacion de [name] +FinishedLabelNoIcons=Eth programa a finalizat era installacion de [name] ath vste ordinador. +FinishedLabel=Eth programa a finalizat era installacion de [name] ath vste ordinador. Era aplicacion se pt iniciar en tot seleccionar es icnes installades. +ClickFinish=Premetz Finalizar ent gsser dera installacion. +FinishedRestartLabel=Ent completar era installacion de [name] cau reiniciar er ordinador. Volgatz hr-ac ara? +FinishedRestartMessage=Ent completar era installacion de [name] cau reiniciar er ordinador. Volgatz hr-ac ara? +ShowReadmeCheck=c, voi visualizar eth fichr LIEGETZ.TXT +YesRadio=&c, reiniciar er ordinador ara +NoRadio=&Non, reiniciar er ordinador ms tard +; used for example as 'Run MyProg.exe' +RunEntryExec=Executar %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Visualizar %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Eth programa d'installacion a de besonh eth disc segent +SelectDiskLabel2=Introdusitz eth disc %1 e premetz Continuar.%n%nSe es fichrs d'aguest disc se pden trapar en ua carpeta diferenta dera indicada tot seguit, entratz-ne era rota corrcta o ben premetz Explorar. +PathLabel=&Rota: +FileNotInDir2=Eth fichr "%1" non s'a pogut trapar a "%2". Introdusitz eth disc corrcte o escuelhetz ua auta carpeta. +SelectDirectoryLabel=Indicatz a on se trapa eth disc segent. + +; *** Installation phase messages +SetupAborted=Era installacion non s'a completat.%n%n%Resolvatz eth problema e executatz de nau eth programa d'installacion. +EntryAbortRetryIgnore=Premetz Reintentar ent intentar-ac de nau, Ignorar ent continuar igualament, o Cancellar ent abandonar era installacion. + +; *** Installation status messages +StatusCreateDirs=Se creen carpetes... +StatusExtractFiles=S'extrn fichrs... +StatusCreateIcons=Se creen icnes de programa... +StatusCreateIniEntries=Se creen entrades ath fichr INI... +StatusCreateRegistryEntries=Se creen entrades de registre... +StatusRegisterFiles=Se registren fichrs... +StatusSavingUninstall=Se plegue informacion de desinstallacion... +StatusRunProgram=Se finalize era installacion... +StatusRollback=Se deshn es cambis... + +; *** Misc. errors +ErrorInternal2=Error intern: %1 +ErrorFunctionFailedNoCode=%1 a mancat +ErrorFunctionFailed=%1 a mancat; cdi %2 +ErrorFunctionFailedWithMessage=%1 a mancat; cdi %2.%n%3 +ErrorExecutingProgram=Non se pt executar eth fichr:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Error en daurir era clau de registre:%n%1\%2 +ErrorRegCreateKey=Error en crear era clau de registre:%n%1\%2 +ErrorRegWriteKey=Error en escruer ara clau de registre:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Error en crear era entrada INI ath fichr "%1". + +; *** File copying errors +FileAbortRetryIgnore=Premetz Reintentar ent intentar-ac de nau, Ignorar ent sautar-se aguest fichr (non recomanat), o Cancellar ent abandonar era installacion. +FileAbortRetryIgnore2=Premetz Reintentar ent intentar-ac de nau, Ignorar ent continuar igualament (non recomanat), o Cancellar ent abandonar era installacion. +SourceIsCorrupted=Eth fichr d'origina est corromput +SourceDoesntExist=Eth fichr d'origina "%1" non exists +ExistingFileReadOnly=Eth fichr ei de sonque lectura.%n%nPremetz Reintentar ent trir-li er atribut de sonque lectura e tornar-ac a intentar; Omter ent sautar-se-lo (non recomanat), o Anullar ent abandonar era installacion. +ErrorReadingExistingDest=S'a produsit un error en liger eth fichr: +FileExists=Eth fichr ja exists.%n%nVolgatz que sigue sus-escrit? +ExistingFileNewer=Eth fichr existent ei ms nau qu'eth que s'intenta installar. Se recomana mantier eth fichr existent.%n%nVolgatz mantier-lo? +ErrorChangingAttr=I a agut un error en cambiar es atributs deth fichr: +ErrorCreatingTemp=I a agut un error en crear un fichr ara carpeta de destinacion: +ErrorReadingSource=I a agut un error en liger eth fichr d'origina: +ErrorCopying=I a agut un error en copiar un fichr: +ErrorReplacingExistingFile=I a agut un error en remplaar eth fichr existent: +ErrorRestartReplace=A mancat remplaar: +ErrorRenamingTemp=I a agut un error en renomentar un fichr ara carpeta de destinacion: +ErrorRegisterServer=Non s'a pogut registrar eth DLL/OCX: %1 +ErrorRegSvr32Failed=A mancat RegSvr32 damb cdi de gessuda %1 +ErrorRegisterTypeLib=Non s'a pogut registrar era bibliotca de tipe: %1 + +; *** Post-installation errors +ErrorOpeningReadme=I a agut un error en daurir eth fichr LIEGETZ.TXT. +ErrorRestartingComputer=Eth programa d'installacion non a pogut reiniciar er ordinador. Hetz-ac manualament. + +; *** Uninstaller messages +UninstallNotFound=Eth fichr "%1" non exists. Non se pt desinstallar. +UninstallOpenError=Eth fichr "%1" non se pt daurir. Non se pt desinstallar. +UninstallUnsupportedVer=Eth fichr de desinstallacion "%1" est en un format non reconeishut ent aguesta version deth desinstallador. Non se pt desinstallar +UninstallUnknownEntry=S'a trapat ua entrada desconeishuda (%1) ath fichr de desinstallacion. +ConfirmUninstall=Estatz segur de voler eliminar completament %1 e toti es sns components? +UninstallOnlyOnWin64=Aguest programa sonque se pt desinstallar a Windows de 64 bits. +OnlyAdminCanUninstall=Aguest programa sonque se pt desinstallar ent un usatgr damb privilegis d'administrador. +UninstallStatusLabel=Esperatz-vos mentre s'elimine %1 deth vste ordinador. +UninstalledAll=%1 a estat desinstallat correctament deth vste ordinador. +UninstalledMost=Desinstallacion de %1 completada.%n%nQuauqui elements non s'an pogut eliminar. Pden ster eliminadi manualament. +UninstalledAndNeedsRestart=Ent completar era installacion de %1, cau reiniciar eth vste ordinador.%n%nVolgatz hr-ac ara? +UninstallDataCorrupted=Eth fichr "%1" est corromput. Non se pt desinstallar. + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Eliminar fichr compartit? +ConfirmDeleteSharedFile2=Eth sistema indica qu'eth fichr compartit segent ja non ei emplegat per cap aute programa. Volgatz qu'era desinstallacion elimine aguest fichr?%n%nSe quauque programa encara lo emplegue e ei eliminat, poderia non foncionar correctament. Se non n'estatz segur, escuelhetz Non. Deishar eth fichr ath sistema non har cap mau. +SharedFileNameLabel=Nm deth fichr: +SharedFileLocationLabel=Localizacion: +WizardUninstalling=Estat dera desinstallacion +StatusUninstalling=Se desinstalle %1... + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 version %2 +AdditionalIcons=Icnes addicionaus: +CreateDesktopIcon=Crear ua icona ar &escriptri +CreateQuickLaunchIcon=Crear ua icona d'execucion &rapida +ProgramOnTheWeb=%1 ath hilat +UninstallProgram=Desinstallar %1 +LaunchProgram=Iniciar %1 +AssocFileExtension=&Associar %1 damb era extension %2 +AssocingFileExtension=S'asscie %1 damb era extension %2... diff --git a/Files/Languages/Unofficial/Romanian.isl b/Files/Languages/Unofficial/Romanian.isl new file mode 100644 index 00000000..30d4b7cc --- /dev/null +++ b/Files/Languages/Unofficial/Romanian.isl @@ -0,0 +1,385 @@ +; *** Inno Setup version 6.1.0+ Romanian messages *** +; Translator : Alexandru Bogdan Munteanu (muntealb@gmail.com) +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Rom<00E2>n<0103> +LanguageID=$0418 +LanguageCodePage=1250 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Instalare +SetupWindowTitle=Instalare - %1 +UninstallAppTitle=Dezinstalare +UninstallAppFullTitle=Dezinstalare %1 + +; *** Misc. common +InformationTitle=Informaii +ConfirmTitle=Confirmare +ErrorTitle=Eroare + +; *** SetupLdr messages +SetupLdrStartupMessage=Va fi instalat programul %1. Vrei s continui? +LdrCannotCreateTemp=Nu pot crea o fil temporar. Instalare abandonat +LdrCannotExecTemp=Nu pot executa o fil din dosarul temporar. Instalare abandonat +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nEroarea %2: %3 +SetupFileMissing=Fila %1 lipsete din dosarul de instalare. Corecteaz problema sau folosete o alt copie a programului. +SetupFileCorrupt=Filele de instalare snt stricate (corupte). Folosete o alt copie a programului. +SetupFileCorruptOrWrongVer=Filele de instalare snt stricate (corupte) sau snt incompatibile cu aceast versiune a Instalatorului. Remediaz problema sau folosete o alt copie a programului. +InvalidParameter=Un parametru invalid a fost trecut ctre linia de comand:%n%n%1 +SetupAlreadyRunning=Instalarea ruleaz deja. +WindowsVersionNotSupported=Acest program nu suport versiunea de Windows care ruleaz pe calculatorul tu. +WindowsServicePackRequired=Acest program necesit %1 Service Pack %2 sau mai nou. +NotOnThisPlatform=Acest program nu va rula pe %1. +OnlyOnThisPlatform=Acest program trebuie s ruleze pe %1. +OnlyOnTheseArchitectures=Acest program poate fi instalat doar pe versiuni de Windows proiectate pentru urmtoarele arhitecturi de procesor:%n%n%1 +WinVersionTooLowError=Acest program necesit %1 versiunea %2 sau mai nou. +WinVersionTooHighError=Acest program nu poate fi instalat pe %1 versiunea %2 sau mai nou. +AdminPrivilegesRequired=Trebuie s fii logat ca Administrator pentru instalarea acestui program. +PowerUserPrivilegesRequired=Trebuie s fii logat ca Administrator sau ca Membru al Grupului de Utilizatori Pricepui ("Power Users") pentru a instala acest program. +SetupAppRunningError=Instalatorul a detectat c %1 ruleaz n acest moment.%n%nnchide toate instanele programului respectiv, apoi clicheaz OK pentru a continua sau Anuleaz pentru a abandona instalarea. +UninstallAppRunningError=Dezinstalatorul a detectat c %1 ruleaz n acest moment.%n%nnchide toate instanele programului respectiv, apoi clicheaz OK pentru a continua sau Anuleaz pentru a abandona dezinstalarea. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Select Modul de Instalare al Instalatorului +PrivilegesRequiredOverrideInstruction=Selecteaz modul de instalare +PrivilegesRequiredOverrideText1=%1 poate fi instalat pentru toi utilizatorii (necesit calitatea de administrator), sau doar pentru tine. +PrivilegesRequiredOverrideText2=%1 poate fi instalat doar pentru tine, sau pentru toi utilizatorii (necesit calitatea de administrator). +PrivilegesRequiredOverrideAllUsers=Instaleaz pentru toi utiliz&atorii +PrivilegesRequiredOverrideAllUsersRecommended=Instaleaz pentru toi utiliz&atorii (recomandat) +PrivilegesRequiredOverrideCurrentUser=Instaleaz doar pentru &mine +PrivilegesRequiredOverrideCurrentUserRecommended=Instaleaz doar pentru &mine (recomandat) + +; *** Misc. errors +ErrorCreatingDir=Instalatorul nu a putut crea dosarul "%1" +ErrorTooManyFilesInDir=Nu pot crea o fil n dosarul "%1" din cauz c are deja prea multe file + +; *** Setup common messages +ExitSetupTitle=Abandonarea Instalrii +ExitSetupMessage=Instalarea nu este terminat. Dac o abandonezi acum, programul nu va fi instalat.%n%nPoi s rulezi Instalatorul din nou alt dat pentru a termina instalarea.%n%nAbandonezi Instalarea? +AboutSetupMenuItem=&Despre Instalator... +AboutSetupTitle=Despre Instalator +AboutSetupMessage=%1 versiunea %2%n%3%n%n%1 sit:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< na&poi +ButtonNext=&Continu > +ButtonInstall=&Instaleaz +ButtonOK=OK +ButtonCancel=Anuleaz +ButtonYes=&Da +ButtonYesToAll=Da la &Tot +ButtonNo=&Nu +ButtonNoToAll=N&u la Tot +ButtonFinish=&Finalizeaz +ButtonBrowse=&Exploreaz... +ButtonWizardBrowse=Explo&reaz... +ButtonNewFolder=Creea&z Dosar Nou + +; *** "Select Language" dialog messages +SelectLanguageTitle=Selectarea Limbii Instalatorului +SelectLanguageLabel=Selecteaz limba folosit pentru instalare: + +; *** Common wizard text +ClickNext=Clicheaz pe Continu pentru a avansa cu instalarea sau pe Anuleaz pentru a o abandona. +BeveledLabel= +BrowseDialogTitle=Explorare dup Dosar +BrowseDialogLabel=Selecteaz un dosar din lista de mai jos, apoi clicheaz pe OK. +NewFolderName=Dosar Nou + +; *** "Welcome" wizard page +WelcomeLabel1=Bun venit la Instalarea [name] +WelcomeLabel2=Programul [name/ver] va fi instalat pe calculator.%n%nEste recomandat s nchizi toate celelalte aplicaii nainte de a continua. + +; *** "Password" wizard page +WizardPassword=Parol +PasswordLabel1=Aceast instalare este protejat prin parol. +PasswordLabel3=Completeaz parola, apoi clicheaz pe Continu pentru a merge mai departe. Tipul literelor din parol (Majuscule/minuscule) este luat n considerare. +PasswordEditLabel=&Parol: +IncorrectPassword=Parola pe care ai introdus-o nu este corect. Rencearc. + +; *** "License Agreement" wizard page +WizardLicense=Acord de Liceniere +LicenseLabel=Citete informaiile urmtoare nainte de a continua, snt importante. +LicenseLabel3=Citete urmtorul Acord de Liceniere. Trebuie s accepi termenii acestui acord nainte de a continua instalarea. +LicenseAccepted=&Accept licena +LicenseNotAccepted=&Nu accept licena + +; *** "Information" wizard pages +WizardInfoBefore=Informaii +InfoBeforeLabel=Citete informaiile urmtoare nainte de a continua, snt importante. +InfoBeforeClickLabel=Cnd eti gata de a trece la Instalare, clicheaz pe Continu. +WizardInfoAfter=Informaii +InfoAfterLabel=Citete informaiile urmtoare nainte de a continua, snt importante. +InfoAfterClickLabel=Cnd eti gata de a trece la Instalare, clicheaz pe Continu. + +; *** "User Information" wizard page +WizardUserInfo=Informaii despre Utilizator +UserInfoDesc=Completeaz informaiile cerute. +UserInfoName=&Utilizator: +UserInfoOrg=&Organizaie: +UserInfoSerial=Numr de &Serie: +UserInfoNameRequired=Trebuie s introduci un nume. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Selectarea Locului de Destinaie +SelectDirDesc=Unde vrei s instalezi [name]? +SelectDirLabel3=Instalatorul va pune [name] n dosarul specificat mai jos. +SelectDirBrowseLabel=Pentru a avansa cu instalarea, clicheaz pe Continu. Dac vrei s selectezi un alt dosar, clicheaz pe Exploreaz. +DiskSpaceGBLabel=Este necesar un spaiu liber de stocare de cel puin [gb] GB. +DiskSpaceMBLabel=Este necesar un spaiu liber de stocare de cel puin [mb] MB. +CannotInstallToNetworkDrive=Instalatorul nu poate realiza instalarea pe un dispozitiv de reea. +CannotInstallToUNCPath=Instalatorul nu poate realiza instalarea pe o cale n format UNC. +InvalidPath=Trebuie s introduci o cale complet, inclusiv litera dispozitivului; de exemplu:%n%nC:\APP%n%nsau o cale UNC de forma:%n%n\\server\share +InvalidDrive=Dispozitivul sau partajul UNC pe care l-ai selectat nu exist sau nu este accesibil. Selecteaz altul. +DiskSpaceWarningTitle=Spaiu de Stocare Insuficient +DiskSpaceWarning=Instalarea necesit cel puin %1 KB de spaiu de stocare liber, dar dispozitivul selectat are doar %2 KB liberi.%n%nVrei s continui oricum? +DirNameTooLong=Numele dosarului sau al cii este prea lung. +InvalidDirName=Numele dosarului nu este valid. +BadDirName32=Numele dosarelor nu pot include unul din urmtoarele caractere:%n%n%1 +DirExistsTitle=Dosarul Exist +DirExists=Dosarul:%n%n%1%n%nexist deja. Vrei totui s instalezi n acel dosar? +DirDoesntExistTitle=Dosarul Nu Exist +DirDoesntExist=Dosarul:%n%n%1%n%nnu exist. Vrei ca el s fie creat? + +; *** "Select Components" wizard page +WizardSelectComponents=Selectarea Componentelor +SelectComponentsDesc=Care dintre componente trebuie instalate? +SelectComponentsLabel2=Selecteaz componentele de instalat; deselecteaz componentele care nu trebuie instalate. Clicheaz pe Continu pentru a merge mai departe. +FullInstallation=Instalare Complet +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Instalare Compact +CustomInstallation=Instalare Personalizat +NoUninstallWarningTitle=Componentele Exist +NoUninstallWarning=Instalatorul a detectat c urmtoarele componente snt deja instalate pe calculator:%n%n%1%n%nDeselectarea lor nu le va dezinstala.%n%nVrei s continui oricum? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Selecia curent necesit cel puin [gb] GB spaiu de stocare. +ComponentsDiskSpaceMBLabel=Selecia curent necesit cel puin [mb] MB spaiu de stocare. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Selectarea Sarcinilor Suplimentare +SelectTasksDesc=Ce sarcini suplimentare trebuie ndeplinite? +SelectTasksLabel2=Selecteaz sarcinile suplimentare care trebuie ndeplinite n timpul instalrii [name], apoi clicheaz pe Continu. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Selectarea Dosarului din Meniul de Start +SelectStartMenuFolderDesc=Unde trebuie s fie plasate scurtturile programului? +SelectStartMenuFolderLabel3=Scurtturile vor fi plasate n dosarul specificat mai jos al Meniului de Start. +SelectStartMenuFolderBrowseLabel=Pentru a avansa cu instalarea, clicheaz pe Continu. Dac vrei s selectezi un alt dosar, clicheaz pe Exploreaz. +MustEnterGroupName=Trebuie s introduci numele dosarului. +GroupNameTooLong=Numele dosarului sau al cii este prea lung. +InvalidGroupName=Numele dosarului nu este valid. +BadGroupName=Numele dosarului nu poate include unul dintre caracterele urmtoarele:%n%n%1 +NoProgramGroupCheck2=Nu crea un &dosar n Meniul de Start + +; *** "Ready to Install" wizard page +WizardReady=Pregtit de Instalare +ReadyLabel1=Instalatorul e pregtit pentru instalarea [name] pe calculator. +ReadyLabel2a=Clicheaz pe Instaleaz pentru a continua cu instalarea, sau clicheaz pe napoi dac vrei s revezi sau s schimbi setrile. +ReadyLabel2b=Clicheaz pe Instaleaz pentru a continua cu instalarea. +ReadyMemoUserInfo=Info Utilizator: +ReadyMemoDir=Loc de Destinaie: +ReadyMemoType=Tip de Instalare: +ReadyMemoComponents=Componente Selectate: +ReadyMemoGroup=Dosarul Meniului de Start: +ReadyMemoTasks=Sarcini Suplimentare: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Descarc file suplimentare... +ButtonStopDownload=O&prete descrcarea +StopDownload=Sigur vrei s opreti descrcarea? +ErrorDownloadAborted=Descrcare abandonat +ErrorDownloadFailed=Descrcare euat: %1 %2 +ErrorDownloadSizeFailed=Obinerea mrimii a euat: %1 %2 +ErrorFileHash1=Haul filei a euat: %1 +ErrorFileHash2=Haul filei e nevalid: ateptat %1, gsit %2 +ErrorProgress=Progres nevalid: %1 of %2 +ErrorFileSize=Mrime a filei nevalid: ateptat %1, gsit %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Pregtire pentru Instalare +PreparingDesc=Instalatorul pregtete instalarea [name] pe calculator. +PreviousInstallNotCompleted=Instalarea/dezinstalarea anterioar a unui program nu a fost terminat. Va trebui s reporneti calculatorul pentru a termina operaia precedent.%n%nDup repornirea calculatorului, ruleaz Instalatorul din nou pentru a realiza instalarea [name]. +CannotContinue=Instalarea nu poate continua. Clicheaz pe Anuleaz pentru a o nchide. +ApplicationsFound=Aplicaiile urmtoare folosesc file care trebuie actualizate de ctre Instalator. Este recomandat s permii Instalatorului s nchid automat aplicaiile respective. +ApplicationsFound2=Aplicaiile urmtoare folosesc file care trebuie actualizate de ctre Instalator. Este recomandat s permii Instalatorului s nchid automat aplicaiile respective. Dup ce instalarea e terminat, Instalatorul va ncerca s reporneasc aplicaiile. +CloseApplications=nchide &automat aplicaiile +DontCloseApplications=Nu nchi&de aplicaiile +ErrorCloseApplications=Instalatorul nu a putut nchide automat toate aplicaiile. nainte de a continua, e recomandat s nchizi manual toate aplicaiile care folosesc file ce trebuie actualizate de Instalator. +PrepareToInstallNeedsRestart=Instalatorul trebuie s repornesc calculatorul. Dup repornire, ruleaz Instalatorul din nou pentru a termina instalarea [name].%n%nVrei s reporneti acum? + +; *** "Installing" wizard page +WizardInstalling=Instalare n Desfurare +InstallingLabel=Ateapt s se termine instalarea [name] pe calculator. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Finalizarea Instalrii [name] +FinishedLabelNoIcons=Instalarea [name] pe calculator a fost terminat. +FinishedLabel=Instalarea [name] pe calculator a fost terminat. Aplicaia poate fi lansat prin clicarea pe icoanele instalate. +ClickFinish=Clicheaz pe Finalizeaz pentru a prsi Instalatorul. +FinishedRestartLabel=Pentru a termina instalarea [name], trebuie repornit calculatorul. Vrei s fie repornit acum? +FinishedRestartMessage=Pentru a termina instalarea [name], trebuie repornit calculatorul.%n%nVrei s fie repornit acum? +ShowReadmeCheck=Da, vreau s vd fila de informare (README) +YesRadio=&Da, repornete calculatorul acum +NoRadio=&Nu, voi reporni eu calculatorul mai trziu +; used for example as 'Run MyProg.exe' +RunEntryExec=Ruleaz %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Vezi %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Instalatorul Necesit Discul Urmtor +SelectDiskLabel2=Introdu Discul %1 i clicheaz pe OK.%n%nDac filele de pe acest disc pot fi gsite ntr-un alt dosar dect cel afiat mai jos, introdu calea corect sau clicheaz pe Exploreaz. +PathLabel=&Cale: +FileNotInDir2=Fila "%1" nu poate fi gsit n "%2". Introdu discul corect sau selecteaz alt dosar. +SelectDirectoryLabel=Specific locul discului urmtor. + +; *** Installation phase messages +SetupAborted=Instalarea nu a fost terminat.%n%nCorecteaz problema i apoi ruleaz Instalarea din nou. +AbortRetryIgnoreSelectAction=Selecteaz aciunea +AbortRetryIgnoreRetry=ncearc din &nou +AbortRetryIgnoreIgnore=&Ignor eroarea i continu +AbortRetryIgnoreCancel=Anuleaz instalarea + +; *** Installation status messages +StatusClosingApplications=nchid aplicaiile... +StatusCreateDirs=Creez dosarele... +StatusExtractFiles=Extrag filele... +StatusCreateIcons=Creez scurtturile... +StatusCreateIniEntries=Creez intrrile INI... +StatusCreateRegistryEntries=Creez intrrile n registru... +StatusRegisterFiles=nregistrez filele... +StatusSavingUninstall=Salvez informaiile de dezinstalare... +StatusRunProgram=Finalizez instalarea... +StatusRestartingApplications=Repornesc aplicaiile... +StatusRollback=Rentorc la starea iniial, prin anularea modificrilor fcute... + +; *** Misc. errors +ErrorInternal2=Eroare Intern: %1 +ErrorFunctionFailedNoCode=%1 a euat +ErrorFunctionFailed=%1 a euat; cod %2 +ErrorFunctionFailedWithMessage=%1 a euat; cod %2.%n%3 +ErrorExecutingProgram=Nu pot executa fila:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Eroare la deschiderea cheii de registru:%n%1\%2 +ErrorRegCreateKey=Eroare la crearea cheii de registru:%n%1\%2 +ErrorRegWriteKey=Eroare la scrierea n cheia de registru:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Eroare la crearea intrrii INI n fiierul "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Sari peste aceast fil (nerecomandat) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignor eroarea i continu (nerecomandat) +SourceIsCorrupted=Fila surs este stricat (corupt) +SourceDoesntExist=Fila surs "%1" nu exist +ExistingFileReadOnly2=Fila deja existent nu poate fi nlocuit pentru c-i marcat doar-citire. +ExistingFileReadOnlyRetry=nltu&r atributul doar-citire i rencearc +ExistingFileReadOnlyKeepExisting=&Pstreaz fila existent +ErrorReadingExistingDest=A aprut o eroare la citirea filei deja existente: +FileExistsSelectAction=Selecteaz aciunea +FileExists2=Fila exist deja. +FileExistsOverwriteExisting=&Suprascrie fila existent +FileExistsKeepExisting=&Pstreaz fila existent +FileExistsOverwriteOrKeepAll=&F la fel pentru conflictele urmtoare +ExistingFileNewerSelectAction=Selecteaz aciunea +ExistingFileNewer2=Fila existent e mai nou dect cea pe care ncearc Instalatorul s-o instaleze. +ExistingFileNewerOverwriteExisting=&Suprascrie fila existent +ExistingFileNewerKeepExisting=&Pstreaz fila existent (recomandat) +ExistingFileNewerOverwriteOrKeepAll=&F la fel pentru conflictele urmtoare +ErrorChangingAttr=A aprut o eroare n timpul schimbrii atributelor filei deja existente: +ErrorCreatingTemp=A aprut o eroare n timpul crerii filei n dosarul de destinaie: +ErrorReadingSource=A aprut o eroare n timpul citirii filei surs: +ErrorCopying=A aprut o eroare n timpul copierii filei: +ErrorReplacingExistingFile=A aprut o eroare n timpul nlocuirii filei deja existente: +ErrorRestartReplace=Repornirea/nlocuirea a euat: +ErrorRenamingTemp=A aprut o eroare n timpul renumirii unei file din dosarul de destinaie: +ErrorRegisterServer=Nu pot nregistra DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 a euat, avnd codul de ieire %1 +ErrorRegisterTypeLib=Nu pot nregistra biblioteca de tipuri: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bii +UninstallDisplayNameMark64Bit=64-bii +UninstallDisplayNameMarkAllUsers=Toi utilizatorii +UninstallDisplayNameMarkCurrentUser=Utilizatorul curent + +; *** Post-installation errors +ErrorOpeningReadme=A aprut o eroare la deschiderea filei de informare (README). +ErrorRestartingComputer=Instalatorul nu a putut reporni calculatorul. Va trebui s-l reporneti manual. + +; *** Uninstaller messages +UninstallNotFound=Fila "%1" nu exist. Dezinstalarea nu poate fi fcut. +UninstallOpenError=Fila "%1" nu poate fi deschis. Dezinstalarea nu poate fi fcut +UninstallUnsupportedVer=Fila "%1" ce conine jurnalul de dezinstalare este ntr-un format nerecunoscut de aceast versiune a dezinstalatorului. Dezinstalarea nu poate fi fcut +UninstallUnknownEntry=A fost ntlnit o intrare necunoscut (%1) n jurnalul de dezinstalare +ConfirmUninstall=Sigur vrei s nlturi complet %1 i componentele sale? +UninstallOnlyOnWin64=Aceast instalare poate fi dezinstalat doar pe un sistem Windows 64-bii. +OnlyAdminCanUninstall=Aceast instalare poate fi dezinstalat doar de ctre un utilizator cu drepturi de Administrator. +UninstallStatusLabel=Ateapt ca %1 s fie nlturat de pe calculator. +UninstalledAll=%1 a fost nlturat cu succes de pe calculator. +UninstalledMost=Dezinstalare complet a %1.%n%nAnumite elemente nu au putut fi nlturate. Acestea pot fi nlturate manual. +UninstalledAndNeedsRestart=Pentru a termina dezinstalarea %1, calculatorul trebuie repornit.%n%nVrei s fie repornit acum? +UninstallDataCorrupted=Fila "%1" este stricat (corupt). Dezinstalarea nu poate fi fcut + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=terg Fila Partajat? +ConfirmDeleteSharedFile2=Sistemul indic faptul c fila partajat urmtoare pare s nu mai fie folosit de vreun alt program. Vrei ca Dezinstalatorul s tearg aceast fil partajat?%n%nDac totui mai exist programe care folosesc fila i ea este tears, acele programe ar putea s funcioneze greit. Dac nu eti sigur, alege Nu. Lsarea filei n sistem nu va produce nici o neplcere. +SharedFileNameLabel=Nume Fil: +SharedFileLocationLabel=Loc: +WizardUninstalling=Starea Dezinstalrii +StatusUninstalling=Dezinstalez %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Instalez %1. +ShutdownBlockReasonUninstallingApp=Dezinstalez %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 versiunea %2 +AdditionalIcons=Scurtturi suplimentare: +CreateDesktopIcon=Creeaz o scurttur pe &Birou ("Desktop") +CreateQuickLaunchIcon=Creeaz o scurttur n Bara de &Lansare Rapid ("Quick Launch") +ProgramOnTheWeb=%1 pe internet +UninstallProgram=Dezinstaleaz %1 +LaunchProgram=Lanseaz %1 +AssocFileExtension=&Asociaz %1 cu extensia de file %2 +AssocingFileExtension=Asociez %1 cu extensia de file %2... +AutoStartProgramGroupDescription=Pornire: +AutoStartProgram=Pornete automat %1 +AddonHostProgramNotFound=%1 nu poate fi gsit n dosarul selectat.%n%nVrei s continui oricum? diff --git a/Files/Languages/Unofficial/ScottishGaelic.isl b/Files/Languages/Unofficial/ScottishGaelic.isl new file mode 100644 index 00000000..b2dc57dd --- /dev/null +++ b/Files/Languages/Unofficial/ScottishGaelic.isl @@ -0,0 +1,360 @@ +; *** Inno Setup version 6.0.0+ Scottish Gaelic messages *** +; +; Translation by GunChleoc +; +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=G<00E0>idhlig +LanguageID=$0491 +LanguageCodePage=1252 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Stàladh +SetupWindowTitle=A’ stàladh %1 +UninstallAppTitle=Dì-stàladh +UninstallAppFullTitle=A’ dì-stàladh %1 + +; *** Misc. common +InformationTitle=Fiosrachadh +ConfirmTitle=Dearbhadh +ErrorTitle=Mearachd + +; *** SetupLdr messages +SetupLdrStartupMessage=Thèid %1 a stàladh a-nis. A bheil thu airson leantainn air adhart? +LdrCannotCreateTemp=Cha b’ urrainn dhuinn faidhle sealach a chruthachadh. Chaidh sgur dhen stàladh +LdrCannotExecTemp=Cha b’ urrainn dhuinn am faidhle a ruith sa phasgan shealach. Chaidh sgur dhen stàladh + +; *** Startup error messages +LastErrorMessage=%1.%n%nMearachd %2: %3 +SetupFileMissing=Tha am faidhle %1 a dhìth sa phasgan stàlaidh. Feuch an càraich thu an duilgheadas seo no faigh lethbhreac ùr dhen phrògram. +SetupFileCorrupt=Tha na faidhlichean stàlaidh coirbte. Feuch am faigh thu lethbhreac ùr dhen phrògram. +SetupFileCorruptOrWrongVer=Tha na faidhlichean stàlaidh coirbte no neo-chòrdail ris an tionndadh seo aig an stàladh. Feuch an càraich thu an duilgheadas seo no faigh lethbhreac ùr dhen phrògram. +InvalidParameter=Chaidh paramadair mì-dhligheach a shìneadh air an loidhne-àithne:%n%n%1 +SetupAlreadyRunning=Tha an stàladh ’ga ruith mu thràth. +WindowsVersionNotSupported=Cha chuir am prògram seo taic ris an tionndadh aig Windows a tha an coimpiutair agad a’ ruith. +WindowsServicePackRequired=Tha %1 pacaid seirbheise %2 no tionndadh nas ùire dhith a dhìth air a’ phrògram seo. +NotOnThisPlatform=Chan urrainn dhut am prògram seo a ruith fo %1. +OnlyOnThisPlatform=Feumaidh tu am prògram seo a ruith fo %1. +OnlyOnTheseArchitectures=Chan urrainn dhut am prògram seo a ruith ach air tionndaidhean Windows a chuireas taic ri ailtireachdan nam pròiseasar seo:%n%n%1 +WinVersionTooLowError=Tha feum air %1 tionndadh %2 no nas ùire airson a’ phrògraim seo. +WinVersionTooHighError=Cha ghabh am prògram seo a stàladh fo %1 tionndadh %2 no nas ùire. +AdminPrivilegesRequired=Feumaidh tu clàradh a-steach mar rianaire gus am prògram seo a stàladh. +PowerUserPrivilegesRequired=Feumaidh tu clàradh a-steach mar rianaire no mar bhall dhen bhuidheann Power Users gus am prògram seo a stàladh. +SetupAppRunningError=Mhothaich an stàladh gu bheil %1 ’ga ruith an-dràsta.%n%nDùin gach ionstans a tha a’ ruith an-dràsta is briog air “Ceart ma-thà” air neo briog air “Sguir dheth” gus an stàladh fhàgail. +UninstallAppRunningError=Mhothaich an dì-stàladh gu bheil %1 ’ga ruith an-dràsta.%n%nDùin gach ionstans a tha a’ ruith an-dràsta is briog air “Ceart ma-thà” air neo briog air “Sguir dheth” gus an dì-stàladh fhàgail. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Suidhich modh an stàlaidh +PrivilegesRequiredOverrideInstruction=Tagh modh an stàlaidh +PrivilegesRequiredOverrideText1=Gabhaidh %1 a stàladh dha na h-uile cleachdaiche (bidh feum air pribhleidean rianaire) no dhut-sa a-mhàin. +PrivilegesRequiredOverrideText2=Gabhaidh %1 a stàladh dhut-sa a-mhàin no dha na h-uile cleachdaiche (bidh feum air pribhleidean rianaire). +PrivilegesRequiredOverrideAllUsers=Stàlaich dh&a na h-uile cleachdaiche +PrivilegesRequiredOverrideAllUsersRecommended=Stàlaich dh&a na h-uile cleachdaiche (mholamaid seo) +PrivilegesRequiredOverrideCurrentUser=Stàlaich dho&mh-sa a-mhàin +PrivilegesRequiredOverrideCurrentUserRecommended=Stàlaich dho&mh-sa a-mhàin (mholamaid seo) + +; *** Misc. errors +ErrorCreatingDir=Cha b’ urrainn dhan stàladh am pasgan "%1" a chruthachadh +ErrorTooManyFilesInDir=Tha faidhle ann nach b’ urrainn dhan stàladh cruthachadh sa phasgan “%1” on a tha cus fhaidhlichean ann + +; *** Setup common messages +ExitSetupTitle=Fàg an stàladh +ExitSetupMessage=Chan eil an stàladh coileanta fhathast. Ma sguireas tu dheth an-dràsta, cha dèid am prògram a stàladh.%n%n’S urrainn dhut an stàladh a dhèanamh a-rithist uaireigin eile gus a choileanadh.%n%nA bheil thu airson an stàladh fhàgail? +AboutSetupMenuItem=&Mun stàladh … +AboutSetupTitle=Mun stàladh +AboutSetupMessage=%1 Tionndadh %2%n%3%n%n%1 Duilleag-lìn:%n%4 +AboutSetupNote= +TranslatorNote=An t-eadar-theangachadh le GunChleoc (fios@foramnagaidhlig.net) + +; *** Buttons +ButtonBack=< Air ai&s +ButtonNext=Air adha&rt > +ButtonInstall=&Stàlaich +ButtonOK=Ceart ma-thà +ButtonCancel=Sguir dheth +ButtonYes=&Tha +ButtonYesToAll=Th&a dhan a h-uile +ButtonNo=&Chan eil +ButtonNoToAll=Cha&n eil dhan a h-uile +ButtonFinish=&Crìochnaich +ButtonBrowse=Rùrai&ch … +ButtonWizardBrowse=&Rùraich … +ButtonNewFolder=&Cruthaich pasgan ùr + +; *** "Select Language" dialog messages +SelectLanguageTitle=Tagh cànan an stàlaidh +SelectLanguageLabel=Tagh an cànan a chleachdas an t-inneal-stàlaidh seo. + +; *** Common wizard text +ClickNext=Briog air “Air adhart” gus leantainn air adhart no air “Sguir dheth” gus fàgail an-seo. +BeveledLabel= +BrowseDialogTitle=Lorg pasgan +BrowseDialogLabel=Tagh pasgan is briog air “Ceart ma-thà” an uairsin. +NewFolderName=Pasgan ùr + +; *** "Welcome" wizard page +WelcomeLabel1=Fàilte dhan draoidh stàlaidh aig [name] +WelcomeLabel2=Stàlaichidh an draoidh seo [name/ver] air a’ choimpiutair agad a-nis.%n%nBu chòir dhut crìoch a chur air a h-uile aplacaid eile mus lean thu air adhart leis an stàladh. + +; *** "Password" wizard page +WizardPassword=Facal-faire +PasswordLabel1=Tha an stàladh seo dìonta le facal-faire. +PasswordLabel3=Cuir a-steach am facal-faire is briog air “Air adhart” an uairsin. Thoir an aire air litrichean mòra is beaga. +PasswordEditLabel=&Facal-faire: +IncorrectPassword=Chan eil am facal-faire a chuir thu ann mar bu chòir. Am feuch thu ris a-rithist? + +; *** "License Agreement" wizard page +WizardLicense=Aonta ceadachais +LicenseLabel=An leugh thu am fiosrachadh cudromach seo mus lean thu air adhart? +LicenseLabel3=Feuch an leugh thu an t-aonta ceadachais seo. Feumaidh tu gabhail ri teirmichean an aonta mus fhaod thu leantainn air adhart. +LicenseAccepted=&Gabhaidh mi ris an aonta +LicenseNotAccepted=&Diùltaidh mi an t-aonta + +; *** "Information" wizard pages +WizardInfoBefore=Fiosrachadh +InfoBeforeLabel=An leugh thu am fiosrachadh cudromach seo mus lean thu air adhart? +InfoBeforeClickLabel=Nuair a bhios tu deiseil gus leantainn air adhart, briog air “Air adhart.” +WizardInfoAfter=Fiosrachadh +InfoAfterLabel=An leugh thu am fiosrachadh cudromach seo mus lean thu air adhart? +InfoAfterClickLabel=Nuair a bhios tu deiseil gus leantainn air adhart, briog air “Air adhart.” + +; *** "User Information" wizard page +WizardUserInfo=Fiosrachadh a’ chleachdaiche +UserInfoDesc=An cuir thu a-steach an dàta agad? +UserInfoName=&Ainm: +UserInfoOrg=&Eagrachas: +UserInfoSerial=Àireamh &shreathach: +UserInfoNameRequired=Feumaidh tu ainm a chur a-steach. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Tagh am pasgan-amais +SelectDirDesc=Càite an dèid [name] a stàladh? +SelectDirLabel3=Thèid [name] a stàladh sa phasgan seo. +SelectDirBrowseLabel=Briog air “Air adhart” gus leantainn air adhart. Briog air “Rùraich” ma tha thu airson pasgan eile a thaghadh. +DiskSpaceMBLabel=Bidh feum air co-dhiù [mb] MB de rùm sàbhalaidh saor. +CannotInstallToNetworkDrive=Cha ghabh seo stàladh air draibh lìonraidh. +CannotInstallToUNCPath=Cha ghabh seo stàladh air slighe UNC. +InvalidPath=Feumaidh tu slighe iomlan le litir draibh a thoirt seachad; m.e.:%n%nC:\Ball-eisimpleir%n%nno slighe UNC leis a' chruth:%n%n\\Frithealaiche\Co-roinneadh +InvalidDrive=Chan eil an draibh no an t-slighe UNC a thug thu seachad ann no chan urrainn dhuinn inntrigeadh. Feuch an tagh thu pasgan eile. +DiskSpaceWarningTitle=Chan eil rùm saor gu leòr ann +DiskSpaceWarning=Cha feum air co-dhiù %1 KB de rùm saor airson an stàlaidh, ach chan eil ach %2 KB ri làimh air an draibh a thagh thu.%n%nA bheil thu airson leantainn air adhart co-dhiù? +DirNameTooLong=Tha ainm a’ phasgain/na slighe ro fhada. +InvalidDirName=Chan eil ainm a’ phasgain dligheach. +BadDirName32=Chan fhaod na caractaran seo a bhith ann an ainm pasgain:%n%n%1 +DirExistsTitle=Tha am pasgan ann mu thràth +DirExists=Tha am pasgan:%n%n%1%n%nann mu thràth. A bheil thu airson a stàladh sa phasgan seo co-dhiù? +DirDoesntExistTitle=Chan eil am pasgan ann +DirDoesntExist=Chan eil am pasgan:%n%n%1%n%nann. A bheil thu airson a chruthachadh? + +; *** "Select Components" wizard page +WizardSelectComponents=Tagh co-phàirtean +SelectComponentsDesc=Dè na co-phàirtean a thèid a stàladh? +SelectComponentsLabel2=Tagh na co-phàirtean a tha thu airson stàladh. Briog air “Air adhart” nuair a bhios tu ullamh. +FullInstallation=Stàladh slàn +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Stàladh beag +CustomInstallation=Stàladh gnàthaichte +NoUninstallWarningTitle=Tha co-phàirtean ann +NoUninstallWarning=Mhothaich an stàladh gun deach na co-phàirtean seo a stàladh air a’ choimpiutair agad roimhe:%n%n%1%n%nCha dèid na co-phàirtean seo nach do thagh thu tuilleadh a thoirt air falbh on choimpiutair agad.%n%nA bheil thu airson leantainn air adhart co-dhiù? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceMBLabel=Thèid co-dhiù [mb] MB de rùm a chleachdadh airson na thagh thu. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Saothraichean a bharrachd +SelectTasksDesc=Dè na saothraichean a bharrachd a thèid a ruith? +SelectTasksLabel2=Tagh na saothraichean a bharrachd a tha thu airson ruith leis an stàladh aig [name] is briog air “Air adhart” an uairsin. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Tagh pasgan ann an “Tòisich” +SelectStartMenuFolderDesc=Càite an cruthaich an stàladh na ceanglaichean dhan phrògram? +SelectStartMenuFolderLabel3=Cruthaichidh an stàladh na ceanglaichean dhan phrògram sa phasgan seo ann an “Tòisich.” +SelectStartMenuFolderBrowseLabel=Briog air “Air adhart” gus leantainn air adhart. Briog air “Rùraich” ma tha thu airson pasgan eile a thaghadh. +MustEnterGroupName=Feumaidh tu ainm pasgain a chur a-steach. +GroupNameTooLong=Tha ainm a’ phasgain/na slighe ro fhada. +InvalidGroupName=Chan eil ainm a’ phasgain dligheach. +BadGroupName=Chan fhaod na caractaran seo a bhith ann an ainm pasgain:%n%n%1 +NoProgramGroupCheck2=&Na cruthaich pasgan sam bith ann an “Tòisich.” + +; *** "Ready to Install" wizard page +WizardReady=Deiseil airson an stàlaidh +ReadyLabel1=Tha an draoidh stàlaidh deiseil gus [name] a stàladh air a’ choimpiutair agad. +ReadyLabel2a=Briog air “Stàlaich” gus tòiseachadh air an stàladh no air “Air ais” gus sùil a thoirt air na roghainnean no gus an atharrachadh. +ReadyLabel2b=Briog air “Stàlaich” gus tòiseachadh air an stàladh. +ReadyMemoUserInfo=Fiosrachadh a’ chleachdaiche: +ReadyMemoDir=Pasgan-amais: +ReadyMemoType=Seòrsa an stàlaidh: +ReadyMemoComponents=Co-phàirtean air an taghadh: +ReadyMemoGroup=Pasgan ann an “Tòisich”: +ReadyMemoTasks=Saothraichean a bharrachd: + +; *** "Preparing to Install" wizard page +WizardPreparing=Ag ullachadh an stàlaidh +PreparingDesc=Tha an stàladh aig [name] air a’ choimpiutair seo ’ga ullachadh. +PreviousInstallNotCompleted=Chaidh prògram eile a stàladh/a dhì-stàladh roimhe ’s cha deach sin a choileanadh. Feumaidh tu an coimpiutair ath-thòiseachadh gus crìoch a chur air an stàladh/dì-stàladh sin.%n%nAn dèidh dhut an coimpiutair agad ath-thòiseachadh, tòisich an stàladh a-rithist gus [name] a stàladh. +CannotContinue=Chan urrainn dhan stàladh leantainn air adhart. Feuch am briog thu air “Sguir dheth” gus fàgail an-seo. +ApplicationsFound=Tha na h-aplacaidean seo a’ cleachdadh faidhlichean a dh’fheumas an stàladh ùrachadh. Mholamaid gun ceadaich thu gun dùin an stàladh na h-aplacaidean sin gu fèin-obrachail. +ApplicationsFound2=Tha na h-aplacaidean seo a’ cleachdadh faidhlichean a dh’fheumas an stàladh ùrachadh. Mholamaid gun ceadaich thu gun dùin an stàladh na h-aplacaidean sin gu fèin-obrachail. Nuair a bhios an stàladh deiseil, feuchaidh sinn ris na h-aplacaidean sin ath-thòiseachadh. +CloseApplications=&Dùin na h-aplacaidean gu fèin-obrachail +DontCloseApplications=&Na dùin na h-aplacaidean +ErrorCloseApplications=Cha deach leis an stàladh a h-uile aplacaid a dhùnadh gu fèin-obrachail. Mus lean thu air adhart, mholamaid gun dùin thu a h-uile aplacaid a chleachdas faidhlichean a dh’fheumas an stàladh ùrachadh. + +; *** "Installing" wizard page +WizardInstalling=’Ga stàladh +InstallingLabel=Fuirich ort fhad ’s a tha [name] ’ga stàladh air a’ choimpiutair agad. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=A’ crìochnachadh an draoidh stàlaidh aig [name] +FinishedLabelNoIcons=Tha sinn deiseil a’ stàladh [name] air a’ choimpiutair agad. +FinishedLabel=Tha sinn deiseil a’ stàladh [name] air a’ choimpiutair agad. ’S urrainn dhut am prògram a thòiseachadh a-nis leis na ceanglaichean dhan phrògram a chaidh a stàladh. +ClickFinish=Briog air “Crìochnaich” gus crìoch a chur air an stàladh. +FinishedRestartLabel=Feumaidh sinn an coimpiutair ath-thòiseachadh gus an stàladh aig [name] a choileanadh. An dèan sinn seo dhut an-dràsta? +FinishedRestartMessage=Feumaidh sinn an coimpiutair ath-thòiseachadh gus an stàladh aig [name] a choileanadh.%n%nAn dèan sinn seo dhut an-dràsta? +ShowReadmeCheck=Tha mi airson am faidhle LEUGHMI a shealltainn +YesRadio=&Nì, ath-thòisichibh an coimpiutair dhomh an-dràsta +NoRadio=&Cha dèan, ath-thòisichidh mi fhìn an coimpiutair uaireigin eile +; used for example as 'Run MyProg.exe' +RunEntryExec=Cuir %1 gu dol +; used for example as 'View Readme.txt' +RunEntryShellExec=Seall %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Tha an t-ath-chlàr a dhìth aig an stàladh +SelectDiskLabel2=Cuir a-steach clàr %1 is briog air “Ceart ma-thà.”%n%nMur eil na faidhlichean on chlàir-shùbailte seo sa phasgan a tha ’ga shealltainn dhut, cuir a-steach an t-slighe cheart no briog air “Rùraich.” +PathLabel=&Slighe: +FileNotInDir2=Chan eil am faidhle “%1” an-seo: “%2.” Feuch an atharraich thu am pasgan no an cuir thu a-steach clàr-sùbailte eile. +SelectDirectoryLabel=Sònraich càite an dèid an t-ath-chlàr a chur a-steach. + +; *** Installation phase messages +SetupAborted=Cha b’ urrainn dhuinn an stàladh a choileanadh.%n%nFeuch an càraich thu an duilgheadas is tòisich air an stàladh a-rithist. +AbortRetryIgnoreSelectAction=Tagh gnìomh +AbortRetryIgnoreRetry=Feuch ris a-ri&thist +AbortRetryIgnoreIgnore=Le&ig seachad a’ mhearachd is lean air adhart +AbortRetryIgnoreCancel=Sguir dhen stàladh + +; *** Installation status messages +StatusClosingApplications=A’ dùnadh aplacaidean … +StatusCreateDirs=A’ cruthachadh pasganan … +StatusExtractFiles=A’ dì-dhùmhlachadh faidhlichean … +StatusCreateIcons=A’ cruthachadh ceanglaichean … +StatusCreateIniEntries=A’ cruthachadh innteartan INI … +StatusCreateRegistryEntries=A’ cruthachadh innteartan na clàr-lainn … +StatusRegisterFiles=A’ clàradh faidhlichean … +StatusSavingUninstall=A’ sàbhaladh fiosrachadh dì-stàlaidh … +StatusRunProgram=A’ crìochnachadh an stàlaidh … +StatusRestartingApplications=Ag ath-thòiseachadh nan aplacaidean … +StatusRollback=A’ neo-dhèanamh nan atharraichean … + +; *** Misc. errors +ErrorInternal2=Mearachd inntearnail: %1 +ErrorFunctionFailedNoCode=Dh’fhàillig le %1 +ErrorFunctionFailed=Dh’fhàillig le %1; còd %2 +ErrorFunctionFailedWithMessage=Dh’fhàillig le %1; còd %2.%n%3 +ErrorExecutingProgram=Cha ghabh am faidhle a ruith:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Cha b’ urrainn dhuinn iuchair na clàr-lainn fhosgladh:%n%1\%2 +ErrorRegCreateKey=Cha b’ urrainn dhuinn iuchair na clàr-lainn a chruthachadh:%n%1\%2 +ErrorRegWriteKey=Mearachd le sgrìobhadh iuchair na clàr-lainn:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Mearachd le cruthachadh innteart INI san fhaidhle “%1.” + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Geàrr leum thar an fhaidhle seo (cha mholamaid seo) +FileAbortRetryIgnoreIgnoreNotRecommended=Le&ig seachad a’ mhearachd is lean air adhart (cha mholamaid seo) +SourceIsCorrupted=Tha am faidhle tùsail coirbte +SourceDoesntExist=Chan eil am faidhle tùsail “%1” ann +ExistingFileReadOnly2=Cha b’ urrainn dhuinn am faidhle ùr a chur an àite an t-seann-fhir on a tha comharra ri leughadh a-mhàin ris. +ExistingFileReadOnlyRetry=Thoi&r air falbh an comharra gu bheil e ri leughadh a-mhàin ’s feuch ris a-rithist +ExistingFileReadOnlyKeepExisting=&Cùm am faidhle a tha ann mu thràth +ErrorReadingExistingDest=Mearachd leughaidh san fhaidhle: +FileExists=Tha am faidhle seo ann mu thràth.%n%nA bheil thu airson sgrìobhadh thairis air? +ExistingFileNewer=Tha am faidhle a tha ann mu thràth nas ùire na am faidhle a tha thu airson stàladh. Mholamaid gun cùm thu am faidhle a tha ann mu thràth.%n%n A bheil thu airson am faidhle a chumail a tha ann mu thràth? +ErrorChangingAttr=Thachair mearachd le atharrachadh nan gleusan aig an fhaidhle a tha ann mu thràth: +ErrorCreatingTemp=Thachair mearachd a’ feuchainn ri faidhle a chruthachadh sa phasgan-amais: +ErrorReadingSource=Thachair mearachd a’ feuchainn ris am faidhle tùsail a leughadh: +ErrorCopying=Thachair mearachd a’ feuchainn ri lethbhreac a dhèanamh de dh’fhaidhle: +ErrorReplacingExistingFile=Thachair mearachd le feuchainn ri cur an àite an fhaidhle a tha ann: +ErrorRestartReplace=Dh’fhàillig le ath-thòiseachadh/cur ’na àite: +ErrorRenamingTemp=Thachair mearachd a’ feuchainn ri ainm ùr a thoirt air faidhle sa phasgan-amais: +ErrorRegisterServer=Cha ghabh an DLL/OCX a chlàradh: %1 +ErrorRegSvr32Failed=Dh’fhàillig RegSvr32 le còd fàgail %1 +ErrorRegisterTypeLib=Cha ghabh leabhar-lann nan seòrsa a chlàradh: %1 + +; *** Uninstall display name markings +UninstallDisplayNameMark=%1 (%2) +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-biod +UninstallDisplayNameMark64Bit=64-biod +UninstallDisplayNameMarkAllUsers=Na h-uile cleachdaiche +UninstallDisplayNameMarkCurrentUser=An cleachdaiche làithreach + +; *** Post-installation errors +ErrorOpeningReadme=Mearachd le fosgladh an fhaidhle LEUGHMI. +ErrorRestartingComputer=Cha deach leis an stàladh an coimpiutair agad ath-thòiseachadh. An dèan thu an t-ath-thòiseachadh a làimh? + +; *** Uninstaller messages +UninstallNotFound=Chan eil am faidhle “%1” ann. Dh’fhàillig le dì-stàladh na h-aplacaid. +UninstallOpenError=Cha b’ urrainn dhuinn am faidhle “%1” fhosgladh. Dh’fhàillig le dì-stàladh na h-aplacaid +UninstallUnsupportedVer=Cha b’ urrainn dhuinn mothachadh dè am fòrmat a th’ air an fhaidhle dì-stàlaidh “%1.” Dh’fhàillig le dì-stàladh na h-aplacaid +UninstallUnknownEntry=Tha innteart neo-aithnichte (%1) san loga dì-stàlaidh +ConfirmUninstall=A bheil thu cinnteach bu bheil thu airson %1 is a h-uile co-phàirt aige a thoirt air falbh? +UninstallOnlyOnWin64=Chan urrainn dhuinn an stàladh seo a thoirt air falbh ach fo thionndaidhean Windows 64-biod. +OnlyAdminCanUninstall=Chan fhaod ach cleachdaiche le pribhleidean rianaire an stàladh seo a thoirt air falbh. +UninstallStatusLabel=Fuirich ort fhad ’s a tha %1 ’ga dhì-stàladh on choimpiutair agad. +UninstalledAll=Chaidh %1 a thoirt air falbh on choimpiutair agad. +UninstalledMost=Tha an dì-stàladh aig %1 deiseil.%n%nTha co-phàirtean ann nach b’ urrainn dhuinn toirt air falbh. ’S urrainn dhut fhèin an sguabadh às a làimh. +UninstalledAndNeedsRestart=Feumaidh sinn an coimpiutair agad ath-thòiseachadh gus an dì-stàladh aig %1 a choileanadh.%n%nAn dèan sinn seo dhut an-dràsta? +UninstallDataCorrupted=Tha am faidhle “%1” coirbte. Dh’fhàillig le dì-stàladh na h-aplacaid. + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=A bheil thu airson am faidhle co-roinnte a sguabadh às? +ConfirmDeleteSharedFile2=Tha an siostam ag innse nach dèid am faidhle co-roinnte seo a chleachdadh le prògram sam bith eile. A bheil thu airson ’s gun sguab sinn às dha?%nMa tha prògraman eile ann a chleachdas am faidhle seo fhathast is ma thèid a thoirt air falbh, dh’fhaoidte nach obraich na prògraman ud mar bu chòir tuilleadh. Ma tha thu mì-chinnteach, tagh “Chan eil” gus am faidhle fhàgail san t-siostam. Cha dèan e cron dhan t-siostam agad ma chumas tu am faidhle seo air. +SharedFileNameLabel=Ainm an fhaidhle: +SharedFileLocationLabel=Pasgan: +WizardUninstalling=Staid an dì-stàlaidh +StatusUninstalling=A’ dì-stàladh %1 ... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=A’ stàladh %1. +ShutdownBlockReasonUninstallingApp=A’ dì-stàladh %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 tionndadh %2 +AdditionalIcons=Ìomhaigheagan a bharrachd: +CreateDesktopIcon=Cruthaich ìomhaigheag air an &deasg +CreateQuickLaunchIcon=Cruthaich ìomhaigheag &grad-thòiseachaidh +ProgramOnTheWeb=%1 air an eadar-lìon +UninstallProgram=Dì-stàlaich %1 +LaunchProgram=Cuir %1 gu dol +AssocFileExtension=&Clàraich %1 leis an leudachan fhaidhle %2 +AssocingFileExtension=A’ clàradh %1 leis an leudachan fhaidhle %2 ... +AutoStartProgramGroupDescription=Tòiseachadh: +AutoStartProgram=Tòisich %1 gu fèin-obrachail +AddonHostProgramNotFound=Cha deach %1 a lorg sa phasgan a thagh thu.%n%nA bheil thu airson leantainn air adhart co-dhiù? diff --git a/Files/Languages/Unofficial/SerbianCyrillic.isl b/Files/Languages/Unofficial/SerbianCyrillic.isl new file mode 100644 index 00000000..74321257 --- /dev/null +++ b/Files/Languages/Unofficial/SerbianCyrillic.isl @@ -0,0 +1,385 @@ +; *** Inno Setup version 6.1.0+ Serbian (Cyrillic) messages *** +; +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/files/istrans/ +; +; Translated by Rancher (theranchcowboy@gmail.com) and Davor (davornik@yahoo.com). +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=<0421><0440><043F><0441><043A><0438> +LanguageID=$0C1A +LanguageCodePage=1251 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle= +SetupWindowTitle= %1 +UninstallAppTitle= +UninstallAppFullTitle= %1 + +; *** Misc. common +InformationTitle= +ConfirmTitle= +ErrorTitle= + +; *** SetupLdr messages +SetupLdrStartupMessage= %1. ? +LdrCannotCreateTemp= . . +LdrCannotExecTemp= . . +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%n %2: %3 +SetupFileMissing= %1 . . +SetupFileCorrupt= . . +SetupFileCorruptOrWrongVer= . . +InvalidParameter= : %n%n%1 +SetupAlreadyRunning= . +WindowsVersionNotSupported= . +WindowsServicePackRequired= %1 %2 . +NotOnThisPlatform= %1. +OnlyOnThisPlatform= %1. +OnlyOnTheseArchitectures= :%n%n%1 +WinVersionTooLowError= %1, %2 . +WinVersionTooHighError= %1 %2 . +AdminPrivilegesRequired= . +PowerUserPrivilegesRequired= . +SetupAppRunningError= %1 .%n%n . +UninstallAppRunningError= %1 .%n%n . +; *** Startup questions +PrivilegesRequiredOverrideTitle= +PrivilegesRequiredOverrideInstruction= +PrivilegesRequiredOverrideText1=%1 ( ) . +PrivilegesRequiredOverrideText2=%1 ( ). +PrivilegesRequiredOverrideAllUsers= & +PrivilegesRequiredOverrideAllUsersRecommended= & () +PrivilegesRequiredOverrideCurrentUser= & +PrivilegesRequiredOverrideCurrentUserRecommended= & () + +; *** Misc. errors +ErrorCreatingDir= %1. +ErrorTooManyFilesInDir= %1 . + +; *** Setup common messages +ExitSetupTitle= +ExitSetupMessage= . , .%n%n .%n%n ? +AboutSetupMenuItem=& +AboutSetupTitle= +AboutSetupMessage=%1 %2%n%3%n%n%1 :%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< & +ButtonNext=& > +ButtonInstall=& +ButtonOK=& +ButtonCancel=& +ButtonYes=& +ButtonYesToAll=& +ButtonNo=& +ButtonNoToAll=& +ButtonFinish=& +ButtonBrowse=& +ButtonWizardBrowse=& +ButtonNewFolder=& + +; *** "Select Language" dialog messages +SelectLanguageTitle= +SelectLanguageLabel= : + +; *** Common wizard text +ClickNext= . +BeveledLabel= +BrowseDialogTitle= +BrowseDialogLabel= . +NewFolderName= + +; *** "Welcome" wizard page +WelcomeLabel1= [name] +WelcomeLabel2= [name/ver] .%n%n , . + +; *** "Password" wizard page +WizardPassword= +PasswordLabel1= . +PasswordLabel3= . . +PasswordEditLabel=&: +IncorrectPassword= . . + +; *** "License Agreement" wizard +WizardLicense= +LicenseLabel= . +LicenseLabel3= . . +LicenseAccepted=& +LicenseNotAccepted=& + +; *** "Information" wizard pages +WizardInfoBefore= +InfoBeforeLabel= . +InfoBeforeClickLabel= , . +WizardInfoAfter= +InfoAfterLabel= . +InfoAfterClickLabel= , . + +; *** "User Information" wizard page +WizardUserInfo= +UserInfoDesc= . +UserInfoName=&: +UserInfoOrg=&: +UserInfoSerial=& : +UserInfoNameRequired= . + +; *** "Select Destination Location" wizard page +WizardSelectDir= +SelectDirDesc= [name]. +SelectDirLabel3= [name] . +SelectDirBrowseLabel= . , 腓. +DiskSpaceGBLabel= [gb] GB . +DiskSpaceMBLabel= [mb] MB . +CannotInstallToNetworkDrive= . +CannotInstallToUNCPath= UNC . +InvalidPath= (.%n%nC:\APP%n%n %n%n\\server\shre) +InvalidDrive= . . +DiskSpaceWarningTitle= +DiskSpaceWarning= %1 kB , %2 kB.%n%n ? +DirNameTooLong= . +InvalidDirName= . +BadDirName32= :%n%n%1 +DirExistsTitle= +DirExists=:%n%n%1%n%n . ? +DirDoesntExistTitle= +DirDoesntExist=:%n%n%1%n%n . ? + +; *** "Select Components" wizard page +WizardSelectComponents= +SelectComponentsDesc= ? +SelectComponentsLabel2= , . . +FullInstallation= +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation= +CustomInstallation= +NoUninstallWarningTitle= +NoUninstallWarning= :%n%n%1%n%n .%n%n ? +ComponentSize1=%1 kB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel= [gb] GB . +ComponentsDiskSpaceMBLabel= [mb] MB . + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks= +SelectTasksDesc= . +SelectTasksLabel2= [name] . + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup= +SelectStartMenuFolderDesc= . +SelectStartMenuFolderLabel3= . +SelectStartMenuFolderBrowseLabel= . , 腓. +MustEnterGroupName= . +GroupNameTooLong= . +InvalidGroupName= . +BadGroupName= :%n%n%1 +NoProgramGroupCheck2=& + +; *** "Ready to Install" wizard page +WizardReady= +ReadyLabel1= [name] . +ReadyLabel2a= ༓ . +ReadyLabel2b= ༓ . +ReadyMemoUserInfo= : +ReadyMemoDir= : +ReadyMemoType= : +ReadyMemoComponents= : +ReadyMemoGroup= : +ReadyMemoTasks= : + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel= ... +ButtonStopDownload=& +StopDownload= ? +ErrorDownloadAborted= +ErrorDownloadFailed= : %1 %2 +ErrorDownloadSizeFailed= : %1 %2 +ErrorFileHash1= : %1 +ErrorFileHash2= : %1, %2 +ErrorProgress= : %1 %2 +ErrorFileSize= : %1, %2 + +; *** "Preparing to Install" wizard page +WizardPreparing= +PreparingDesc= [name] . +PreviousInstallNotCompleted= . .%n%n , [name]. +CannotContinue= . . +ApplicationsFound= . . +ApplicationsFound2= . . , . +CloseApplications=& +DontCloseApplications=& +ErrorCloseApplications= . , . +PrepareToInstallNeedsRestart= . , [name].%n%n ? + +; *** "Installing" wizard page +WizardInstalling= +InstallingLabel= [name] . + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=[name] +FinishedLabelNoIcons= [name] . +FinishedLabel= [name] . . +ClickFinish= . +FinishedRestartLabel= . ? +FinishedRestartMessage= .%n%n ? +ShowReadmeCheck=, +YesRadio=&, +NoRadio=&, +; used for example as 'Run MyProg.exe' +RunEntryExec=& %1 +; used for example as 'View Readme.txt' +RunEntryShellExec= %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle= +SelectDiskLabel2= %1 .%n%n , 腓. +PathLabel=&: +FileNotInDir2= %1 %2. . +SelectDirectoryLabel= . + +; *** Installation phase messages +SetupAborted= .%n%n . +AbortRetryIgnoreSelectAction= +AbortRetryIgnoreRetry=& +AbortRetryIgnoreIgnore=& +AbortRetryIgnoreCancel= + +; *** Installation status messages +StatusClosingApplications= +StatusCreateDirs= +StatusExtractFiles= +StatusCreateIcons= +StatusCreateIniEntries= INI +StatusCreateRegistryEntries= +StatusRegisterFiles= +StatusSavingUninstall= +StatusRunProgram= +StatusRestartingApplications= +StatusRollback= + +; *** Misc. errors +ErrorInternal2= : %1 +ErrorFunctionFailedNoCode=%1 +ErrorFunctionFailed=%1 ; %2 +ErrorFunctionFailedWithMessage=%1 ; %2.%n%3 +ErrorExecutingProgram= :%n%1 + +; *** Registry errors +ErrorRegOpenKey= :%n%1\%2 +ErrorRegCreateKey= :%n%1\%2 +ErrorRegWriteKey= :%n%1\%2 + +; *** INI errors +ErrorIniEntry= INI %1. + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=& ( ) +FileAbortRetryIgnoreIgnoreNotRecommended=& ( ) +SourceIsCorrupted= +SourceDoesntExist= %1 +ExistingFileReadOnly2= . +ExistingFileReadOnlyRetry=& +ExistingFileReadOnlyKeepExisting=& +ErrorReadingExistingDest= : +FileExistsSelectAction= +FileExists2= . +FileExistsOverwriteExisting=& +FileExistsKeepExisting=& +FileExistsOverwriteOrKeepAll=& +ExistingFileNewerSelectAction= +ExistingFileNewer2= . +ExistingFileNewerOverwriteExisting=& +ExistingFileNewerKeepExisting=& () +ExistingFileNewerOverwriteOrKeepAll=& +ErrorChangingAttr= : +ErrorCreatingTemp= : +ErrorReadingSource= : +ErrorCopying= : +ErrorReplacingExistingFile= : +ErrorRestartReplace= : +ErrorRenamingTemp= : +ErrorRegisterServer= DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 . %1 +ErrorRegisterTypeLib= : %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers= +UninstallDisplayNameMarkCurrentUser= + +; *** Post-installation errors +ErrorOpeningReadme= . +ErrorRestartingComputer= . . + +; *** Uninstaller messages +UninstallNotFound= %1 . . +UninstallOpenError= %1 . . +UninstallUnsupportedVer= %1 . . +UninstallUnknownEntry= (%1) . +ConfirmUninstall= %1 ? +UninstallOnlyOnWin64= 64- . +OnlyAdminCanUninstall= . +UninstallStatusLabel= %1 . +UninstalledAll=%1 . +UninstalledMost=%1 .%n%n . +UninstalledAndNeedsRestart= .%n%n ? +UninstallDataCorrupted= %1 . . + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle= +ConfirmDeleteSharedFile2= . ?%n%n , . , . . +SharedFileNameLabel= : +SharedFileLocationLabel=: +WizardUninstalling= +StatusUninstalling= %1 + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp= %1. +ShutdownBlockReasonUninstallingApp= %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 %2 +AdditionalIcons= : +CreateDesktopIcon=& +CreateQuickLaunchIcon=& +ProgramOnTheWeb=%1 +UninstallProgram= %1 +LaunchProgram= %1 +AssocFileExtension=& %1 %2 +AssocingFileExtension= %1 %2 +AutoStartProgramGroupDescription=: +AutoStartProgram= %1 +AddonHostProgramNotFound=%1 .%n%n ? diff --git a/Files/Languages/Unofficial/SerbianLatin.isl b/Files/Languages/Unofficial/SerbianLatin.isl new file mode 100644 index 00000000..55ebbb8f --- /dev/null +++ b/Files/Languages/Unofficial/SerbianLatin.isl @@ -0,0 +1,386 @@ +; *** Inno Setup version 6.1.0+ Serbian (Latin) messages *** +; +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/files/istrans/ +; +; Translated by Rancher (theranchcowboy@gmail.com) and Davor (davornik@yahoo.com). +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Srpski +LanguageID=$081a +LanguageCodePage=1250 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Instalacija +SetupWindowTitle=Instalacija %1 +UninstallAppTitle=Deinstalacija +UninstallAppFullTitle=Deinstalacija programa %1 + +; *** Misc. common +InformationTitle=Podaci +ConfirmTitle=Potvrda +ErrorTitle=Greka + +; *** SetupLdr messages +SetupLdrStartupMessage=Instaliraete %1. elite li da nastavite? +LdrCannotCreateTemp=Ne mogu da napravim privremenu datoteku. Instalacija je prekinuta. +LdrCannotExecTemp=Ne mogu da pokrenem datoteku u privremenoj fascikli. Instalacija je prekinuta. +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nGreka %2: %3 +SetupFileMissing=Datoteka %1 nedostaje u instalacionoj fascikli. Ispravite problem ili nabavite novi primerak programa. +SetupFileCorrupt=Instalacione datoteke su oteene. Nabavite novi primerak programa. +SetupFileCorruptOrWrongVer=Instalacione datoteke su oteene ili nisu saglasne s ovom verzijom instalacije. Ispravite problem ili nabavite novi primerak programa. +InvalidParameter=Neispravan parametar je prenet na komandnu liniju: %n%n%1 +SetupAlreadyRunning=Instalacija je ve pokrenuta. +WindowsVersionNotSupported=Program ne podrava izdanje Windows-a koje koristite. +WindowsServicePackRequired=Program zahteva %1 servisni paket %2 ili noviji. +NotOnThisPlatform=Program nee raditi na %1. +OnlyOnThisPlatform=Program e raditi na %1. +OnlyOnTheseArchitectures=Program se moe instalirati samo na izdanjima Windows-a koji rade na sledeim arhitekturama procesora:%n%n%1 +WinVersionTooLowError=Program zahteva %1, izdanje %2 ili novije. +WinVersionTooHighError=Program ne moete instalirati na %1 izdanju %2 ili novijem. +AdminPrivilegesRequired=Morate biti prijavljeni kao administrator da biste instalirali program. +PowerUserPrivilegesRequired=Morate biti prijavljeni kao administrator ili ovlaeni korisnik da biste instalirali program. +SetupAppRunningError=Program %1 je trenutno pokrenut.%n%nZatvorite ga i kliknite na dugme U redu da nastavite ili Otkai da napustite instalaciju. +UninstallAppRunningError=Program %1 je trenutno pokrenut.%n%nZatvorite ga i kliknite na dugme U redu da nastavite ili Otkai da napustite instalaciju. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Odaberite nain instalacije +PrivilegesRequiredOverrideInstruction=Odaberite nain instalacije +PrivilegesRequiredOverrideText1=%1 moe biti instaliran za sve korisnike (zahteva administrativne privilegije) ili samo za vas. +PrivilegesRequiredOverrideText2=%1 moe da se instalira samo za vas ili za sve korisnike (zahteva administrativne privilegije). +PrivilegesRequiredOverrideAllUsers=Instaliraj za &sve korisnike +PrivilegesRequiredOverrideAllUsersRecommended=Instaliraj za &sve korisnike (preporueno) +PrivilegesRequiredOverrideCurrentUser=Instaliraj samo za &mene +PrivilegesRequiredOverrideCurrentUserRecommended=Instaliraj samo za &mene (preporueno) + +; *** Misc. errors +ErrorCreatingDir=Ne mogu da napravim fasciklu %1. +ErrorTooManyFilesInDir=Ne mogu da napravim datoteku u fascikli %1 jer sadri previe datoteka. + +; *** Setup common messages +ExitSetupTitle=Naputanje instalacije +ExitSetupMessage=Instalacija nije zavrena. Ako sada izaete, program nee biti instaliran.%n%nInstalaciju moete pokrenuti i dovriti nekom dugom prilikom.%n%nelite li da je zatvorite? +AboutSetupMenuItem=&O programu +AboutSetupTitle=Podaci o programu +AboutSetupMessage=%1 verzija %2%n%3%n%n%1 internet stranica:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< &Nazad +ButtonNext=&Dalje > +ButtonInstall=&Instaliraj +ButtonOK=&U redu +ButtonCancel=&Otkai +ButtonYes=&Da +ButtonYesToAll=D&a za sve +ButtonNo=&Ne +ButtonNoToAll=N&e za sve +ButtonFinish=&Zavri +ButtonBrowse=&Pretrai +ButtonWizardBrowse=&Pretrai +ButtonNewFolder=&Napravi fasciklu + +; *** "Select Language" dialog messages +SelectLanguageTitle=Odabir jezika +SelectLanguageLabel=Izaberite jezik za korienje tokom instalacije: + +; *** Common wizard text +ClickNext=Kliknite na Dalje da nastavite ili Otkai da napustite instalaciju. +BeveledLabel= +BrowseDialogTitle=Odabir fascikle +BrowseDialogLabel=Izaberite fasciklu sa spiska i kliknite na U redu. +NewFolderName=Nova fascikla + +; *** "Welcome" wizard page +WelcomeLabel1=Dobro doli na instalaciju programa [name] +WelcomeLabel2=Instaliraete [name/ver] na raunar.%n%nPre nego to nastavite, preporuujemo vam da zatvorite sve druge programe. + +; *** "Password" wizard page +WizardPassword=Lozinka +PasswordLabel1=Instalacija je zatiena lozinkom. +PasswordLabel3=Unesite lozinku i kliknite na Dalje da nastavite. Imajte na umu da je lozinka osetljiva na mala i velika slova. +PasswordEditLabel=&Lozinka: +IncorrectPassword=Navedena lozinka nije ispravna. Pokuajte ponovo. + +; *** "License Agreement" wizard +WizardLicense=Ugovor o licenci +LicenseLabel=Paljivo proitajte sledee pre nego to nastavite. +LicenseLabel3=Proitajte Ugovor o licenci koji se nalazi ispod. Morate prihvatiti uslove ovog ugovora pre nego to nastavite. +LicenseAccepted=&Prihvatam ugovor +LicenseNotAccepted=&Ne prihvatam ugovor + +; *** "Information" wizard pages +WizardInfoBefore=Informacije +InfoBeforeLabel=Paljivo proitajte sledee pre nego to nastavite. +InfoBeforeClickLabel=Kada budete spremni da nastavite instalaciju, kliknite na Dalje. +WizardInfoAfter=Informacije +InfoAfterLabel=Paljivo proitajte sledee pre nego to nastavite. +InfoAfterClickLabel=Kada budete spremni da nastavite instalaciju, kliknite na Dalje. + +; *** "User Information" wizard page +WizardUserInfo=Korisniki podaci +UserInfoDesc=Unesite svoje podatke. +UserInfoName=&Korisnik: +UserInfoOrg=&Organizacija: +UserInfoSerial=&Serijski broj: +UserInfoNameRequired=Morate navesti ime. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Odabir odredine fascikle +SelectDirDesc=Izaberite mesto na kom elite da instalirate [name]. +SelectDirLabel3=Program e instalirati [name] u sledeu fasciklu. +SelectDirBrowseLabel=Kliknite na Dalje da nastavite. Ako elite da izaberete drugu fasciklu, kliknite na Potrai. +DiskSpaceGBLabel=Potrebno je najmanje [gb] GB slobodnog prostora na disku. +DiskSpaceMBLabel=Potrebno je najmanje [mb] MB slobodnog prostora na disku. +CannotInstallToNetworkDrive=Ne mogu da instaliram na mrenu jedinicu. +CannotInstallToUNCPath=Ne mogu da instaliram na UNC putanju. +InvalidPath=Morate navesti punu putanju s obelejem diska (npr.%n%nC:\APP%n%nili putanja u obliku%n%n\\server\share) +InvalidDrive=Disk koji ste izabrali ne postoji ili nije dostupan. Izaberite neki drugi. +DiskSpaceWarningTitle=Nedovoljno prostora na disku +DiskSpaceWarning=Program zahteva najmanje %1 kB slobodnog prostora, a izabrani disk na raspolaganju ima samo %2 kB.%n%nelite li ipak da nastavite? +DirNameTooLong=Naziv fascikle ili putanja je predugaka. +InvalidDirName=Naziv fascikle nije ispravan. +BadDirName32=Naziv fascikle ne sme sadrati nita od sledeeg:%n%n%1 +DirExistsTitle=Fascikla ve postoji +DirExists=Fascikla:%n%n%1%n%nve postoji. elite li ipak da instalirate program u nju? +DirDoesntExistTitle=Fascikla ne postoji +DirDoesntExist=Fascikla:%n%n%1%n%nne postoji. elite li da je napravite? + +; *** "Select Components" wizard page +WizardSelectComponents=Odabir komponenata +SelectComponentsDesc=Koje komponente elite da instalirate? +SelectComponentsLabel2=Izaberite komponente koje elite da instalirate, a oistite one koje ne elite. Kliknite na Dalje da nastavite. +FullInstallation=Puna instalacija +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Podrazumevana instalacija +CustomInstallation=Prilagoena instalacija +NoUninstallWarningTitle=Komponente ve postoje +NoUninstallWarning=Sledee komponente ve postoje na raunaru:%n%n%1%n%nDetrikliranje ovih komponenti ih nee ukloniti.%n%nelite li da nastavite? +ComponentSize1=%1 kB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Izabrane stavke zahtevaju najmanje [gb] GB slobodnog prostora. +ComponentsDiskSpaceMBLabel=Izabrane stavke zahtevaju najmanje [mb] MB slobodnog prostora. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Odabir dodatnih zadataka +SelectTasksDesc=Izaberite neke dodatne zadatke. +SelectTasksLabel2=Izaberite dodatne zadatke koje elite da izvrite pri instaliranju programa [name] i kliknite na Dalje. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Odabir fascikle u meniju Start +SelectStartMenuFolderDesc=Izaberite mesto na kom elite da postavite preice. +SelectStartMenuFolderLabel3=Instalacija e postaviti preice programa u sledeoj fascikli u meniju Start. +SelectStartMenuFolderBrowseLabel=Kliknite na Dalje da nastavite. Ako elite da izaberete drugu fasciklu, kliknite na Potrai. +MustEnterGroupName=Morate navesti naziv fascikle. +GroupNameTooLong=Naziv fascikle ili putanja je predugaka. +InvalidGroupName=Naziv fascikle nije ispravan. +BadGroupName=Naziv fascikle ne sme sadrati nita od sledeeg:%n%n%1 +NoProgramGroupCheck2=N&e pravi fasciklu u meniju Start + +; *** "Ready to Install" wizard page +WizardReady=Instalacija je spremna +ReadyLabel1=Program je spreman da instalira [name] na raunar. +ReadyLabel2a=Kliknite na Instaliraj da zaponete instalaciju ili Nazad da ponovo pregledate i promenite pojedine postavke. +ReadyLabel2b=Kliknite na Instaliraj da zaponete instalaciju. +ReadyMemoUserInfo=Korisniki podaci: +ReadyMemoDir=Odredina fascikla: +ReadyMemoType=Vrsta instalacije: +ReadyMemoComponents=Izabrane komponente: +ReadyMemoGroup=Fascikla u meniju Start: +ReadyMemoTasks=Dodatni zadaci: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Preuzimanje dodatnih datoteka... +ButtonStopDownload=&Zaustavi preuzimanje +StopDownload=Da li ste sigurni da elite da zaustavite preuzimanje? +ErrorDownloadAborted=Preuzimanje je prekinuto +ErrorDownloadFailed=Preuzimanje nije uspelo: %1 %2 +ErrorDownloadSizeFailed=Dobijanje veliine nije uspelo: %1 %2 +ErrorFileHash1=He datoteke nije uspeo: %1 +ErrorFileHash2=Neispravan he datoteke: oekivan %1, pronaen %2 +ErrorProgress=Neispravan napredak: %1 od %2 +ErrorFileSize=Neispravna veliina datoteke: oekivan %1, pronaen %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Priprema za instalaciju +PreparingDesc=Program se priprema da instalira [name] na raunar. +PreviousInstallNotCompleted=Instalacija ili deinstalacija prethodnog programa nije zavrena. Potrebno je da ponovo pokrenete raunar da bi se instalacija zavrila.%n%nNakon ponovnog pokretanja, otvorite instalaciju i instalirajte program [name]. +CannotContinue=Ne mogu da nastavim instalaciju. Kliknite na Otkai da izaete. +ApplicationsFound=Sledei programi koriste datoteke koje treba da aurira instalacioni program. Preporuujemo vam da dozvolite instalacionom programu da zatvori ove programe. +ApplicationsFound2=Sledei programi koriste datoteke koje treba da aurira instalacioni program. Preporuujemo vam da dozvolite instalacionom programu da zatvori ove programe. Nakon to se instalacija zavri, instalacioni program e pokuati da ponovo pokrene zatvorene programe. +CloseApplications=&Zatvori programe +DontCloseApplications=&Ne zatvaraj programe +ErrorCloseApplications=Ne mogu da zatvorim sve programe. Pre nego to nastavite, preporuujemo vam da zatvorite sve programe koji koriste datoteke koje treba da aurira instalacioni program. +PrepareToInstallNeedsRestart=Instalacija mora da ponovo pokrene raunar. Nakon ponovnog pokretanja raunara, ponovo pokrenite instalaciju da biste dovrili instalaciju [name].%n%nelite li da ponovo pokrenete raunar sada? + +; *** "Installing" wizard page +WizardInstalling=Instaliranje +InstallingLabel=Saekajte da se [name] instalira na raunar. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=[name] zavretak instalacije +FinishedLabelNoIcons=Instaliranje programa [name] je zavreno. +FinishedLabel=Instaliranje programa [name] je zavreno. Moete ga pokrenuti preko postavljenih ikona. +ClickFinish=Kliknite na Zavri da izaete. +FinishedRestartLabel=Potrebno je ponovno pokretanje raunara da bi se instalacija zavrila. elite li da ga ponovo pokrenete? +FinishedRestartMessage=Potrebno je ponovno pokretanje raunara da bi se instalacija zavrila.%n%nelite li da ga ponovo pokrenete? +ShowReadmeCheck=Da, elim da pogledam tekstualnu datoteku +YesRadio=&Da, ponovo pokreni raunar +NoRadio=&Ne, kasnije u ga pokrenuti +; used for example as 'Run MyProg.exe' +RunEntryExec=&Pokreni %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Pogledaj %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Sledei disk +SelectDiskLabel2=Ubacite disk %1 i kliknite na U redu.%n%nAko se datoteke na ovom disku mogu pronai u nekoj drugoj fascikli, unesite odgovarajuu putanju ili kliknite na Potrai. +PathLabel=&Putanja: +FileNotInDir2=Datoteka %1 se ne nalazi u %2. Ubacite pravi disk ili izaberite drugu fasciklu. +SelectDirectoryLabel=Izaberite mesto sledeeg diska. + +; *** Installation phase messages +SetupAborted=Instalacija nije zavrena.%n%nIspravite problem i pokrenite je ponovo. +AbortRetryIgnoreSelectAction=Odaberite radnju +AbortRetryIgnoreRetry=&Pokuaj opet +AbortRetryIgnoreIgnore=&Zanemari greku i nastavi +AbortRetryIgnoreCancel=Prekini instalaciju + +; *** Installation status messages +StatusClosingApplications=Zatvaram programe +StatusCreateDirs=Pravim fascikle +StatusExtractFiles=Raspakujem datoteke +StatusCreateIcons=Postavljam preice +StatusCreateIniEntries=Postavljam INI unose +StatusCreateRegistryEntries=Postavljam unose u registar +StatusRegisterFiles=Upisujem datoteke +StatusSavingUninstall=uvam podatke o deinstalaciji +StatusRunProgram=Zavravam instalaciju +StatusRestartingApplications=Ponovo pokreem programe +StatusRollback=Ponitavam izmene + +; *** Misc. errors +ErrorInternal2=Unutranja greka: %1 +ErrorFunctionFailedNoCode=%1 neuspeh +ErrorFunctionFailed=%1 neuspeh; kod %2 +ErrorFunctionFailedWithMessage=%1 neuspeh; kod %2.%n%3 +ErrorExecutingProgram=Ne mogu da pokrenem datoteku:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Greka pri otvaranju unosa u registru:%n%1\%2 +ErrorRegCreateKey=Greka pri stvaranju unosa u registru:%n%1\%2 +ErrorRegWriteKey=Greka pri upisivanju unosa u registar:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Greka pri stvaranju INI unosa u datoteci %1. + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Preskoite ovu datoteku (ne preporuuje se) +FileAbortRetryIgnoreIgnoreNotRecommended=&Zanemari greku i nastavi (ne preporuuje se) +SourceIsCorrupted=Izvorna datoteka je oteena +SourceDoesntExist=Izvorna datoteka %1 ne postoji +ExistingFileReadOnly2=Postojea datoteka ne moe da se zameni jer je samo za itanje. +ExistingFileReadOnlyRetry=&Uklonite atribut samo za itanje i pokuajte ponovo +ExistingFileReadOnlyKeepExisting=&Zadrite postojeu datoteku +ErrorReadingExistingDest=Dolo je do greke pri pokuaju itanja postojee datoteke: +FileExistsSelectAction=Odaberi akciju +FileExists2=Datoteka ve postoji. +FileExistsOverwriteExisting=&Zameni postojeu datoteku +FileExistsKeepExisting=&Zadri postojeu datoteku +FileExistsOverwriteOrKeepAll=&Uradi ovo i ubudue +ExistingFileNewerSelectAction=Odaberi akciju +ExistingFileNewer2=Postojea datoteka je novija od one koju treba instalirati. +ExistingFileNewerOverwriteExisting=&Zameni postojeu datoteku +ExistingFileNewerKeepExisting=&Zadri postojeu datoteku (preporueno) +ExistingFileNewerOverwriteOrKeepAll=&Uradi ovo i ubudue +ErrorChangingAttr=Dolo je do greke pri izmeni osobine sledee datoteke: +ErrorCreatingTemp=Dolo je do greke pri stvaranju datoteke u odredinoj fascikli: +ErrorReadingSource=Dolo je do greke pri itanju izvorne datoteke: +ErrorCopying=Dolo je do greke pri umnoavanju datoteke: +ErrorReplacingExistingFile=Dolo je do greke pri zameni postojee datoteke: +ErrorRestartReplace=Ne mogu da zamenim: +ErrorRenamingTemp=Dolo je do greke pri preimenovanju datoteke u odredinoj fascikli: +ErrorRegisterServer=Ne mogu da upiem DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 nije uspeo. Greka %1 +ErrorRegisterTypeLib=Ne mogu da upiem biblioteku tipova: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=Svi korisnici +UninstallDisplayNameMarkCurrentUser=Trenutni korisnik + +; *** Post-installation errors +ErrorOpeningReadme=Dolo je do greke pri otvaranju tekstualne datoteke. +ErrorRestartingComputer=Ne mogu ponovo da pokrenem raunar. Uradite to sami. + +; *** Uninstaller messages +UninstallNotFound=Datoteka %1 ne postoji. Ne mogu da deinstaliram program. +UninstallOpenError=Datoteka %1 ne moe da se otvori. Ne mogu da deinstaliram program. +UninstallUnsupportedVer=Izvetaj %1 je u neprepoznatljivom formatu. Ne mogu da deinstaliram program. +UninstallUnknownEntry=Nepoznat unos (%1) se pojavio u izvetaju deinstalacije. +ConfirmUninstall=elite li da deinstalirate %1 i sve njegove komponente? +UninstallOnlyOnWin64=Program se moe deinstalirati samo na 64-bitnom vindousu. +OnlyAdminCanUninstall=Program moe deinstalirati samo korisnik s administratorskim pravima. +UninstallStatusLabel=Saekajte da se %1 deinstalira sa raunara. +UninstalledAll=%1 je deinstaliran sa raunara. +UninstalledMost=%1 je deinstaliran.%n%nNeke komponente ipak morati sami obrisati. +UninstalledAndNeedsRestart=Potrebno je ponovno pokretanje raunara da bi se instalacija zavrila.%n%nelite li da ponovo pokrenete raunar? +UninstallDataCorrupted=Datoteka %1 je oteena. Ne mogu da deinstaliram program. + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Brisanje deljene datoteke +ConfirmDeleteSharedFile2=Sistem je prijavio da sledeu deljenu datoteku vie ne koristi nijedan program. elite li da je uklonite?%n%nAko nekim programima i dalje treba ova datoteka a ona je obrisana, ti programi moda nee ispravno raditi. Ako niste sigurni ta da radite, kliknite na Ne. Ostavljanje datoteke na disku nee prouzrokovati nikakvu tetu. +SharedFileNameLabel=Naziv datoteke: +SharedFileLocationLabel=Putanja: +WizardUninstalling=Stanje deinstalacije +StatusUninstalling=Deinstaliram %1 + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Instaliram %1. +ShutdownBlockReasonUninstallingApp=Deinstaliram %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 verzija %2 +AdditionalIcons=Dodatne ikone: +CreateDesktopIcon=&Postavi ikonu na radnu povrinu +CreateQuickLaunchIcon=P&ostavi ikonu na traku za brzo pokretanje +ProgramOnTheWeb=%1 na internetu +UninstallProgram=Deinstaliraj %1 +LaunchProgram=Pokreni %1 +AssocFileExtension=&Povei %1 sa formatom %2 +AssocingFileExtension=Povezujem %1 sa formatom %2 +AutoStartProgramGroupDescription=Pokretanje: +AutoStartProgram=Automatski pokreni %1 +AddonHostProgramNotFound=%1 se ne nalazi u navedenoj fascikli.%n%nelite li ipak da nastavite? \ No newline at end of file diff --git a/Files/Languages/Unofficial/Sinhala.islu b/Files/Languages/Unofficial/Sinhala.islu new file mode 100644 index 00000000..50d94e5d --- /dev/null +++ b/Files/Languages/Unofficial/Sinhala.islu @@ -0,0 +1,331 @@ +; *** Inno Setup version 5.5.3+ Sinhala messages *** +; +; Sinhala translation by Asanka Sovis +; E-mail: akashsovis@gmail.com +; Translation home page: +; Last modification date: 2019-01-18 +; +[LangOptions] +LanguageName=සිංහල +LanguageID=$045B +LanguageCodePage=0 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=සංරක්ෂක +SetupWindowTitle=%1 - සංරක්ෂක +UninstallAppTitle=ඉවත් කරන්න +UninstallAppFullTitle=%1 ඉවත් කරන්න + +; *** Misc. common +InformationTitle=තොරතුරු +ConfirmTitle=ස්ථාවර +ErrorTitle=දෝෂය + +; *** SetupLdr messages +SetupLdrStartupMessage=මෙය %1 පිහිටුවාවි. ඉදිරියට යාමට කැමතිද? +LdrCannotCreateTemp=තාවකාලික ගොනුවක් පිහිටුවිය නොහැක. පිහිටුවීම අත්හැරිණි +LdrCannotExecTemp=තාවකාලික නාමාවලියේ ගොනුව ආරම්භ කළ නොහැක. පිහිටුවීම අත්හැරිණි + +; *** Startup error messages +LastErrorMessage=%1.%n%nදෝෂය %2: %3 +SetupFileMissing=%1 ගොනුව පිහිටුවීමේ නාමාවලියේ නොමැත. කරුණාකර දෝෂය නිවැරදි කරන්න, නැතහොත් මෘදුකාංගයේ නව පිටපතක් ගන්න. +SetupFileCorrupt=පිහිටුවීමේ ගොනු විනාශ වී ඇත. කරුණාකර මෘදුකාංගයේ නව පිටපතක් ගන්න. +SetupFileCorruptOrWrongVer=පිහිටුවීමේ ගොනු විනාශ වී හෝ මෙම අනුවාදය සමඟ අනුරූපී නොවේ. කරුණාකර දෝෂය නිවැරදි කරන්න, නැතහොත් මෘදුකාංගයේ නව පිටපතක් ගන්න. +InvalidParameter=Command line හි වැරදි පරාමිතියක් ලබා දී ඇත:%n%n%1 +SetupAlreadyRunning=පිහිටුවීම දැනටමත් ධාවනය වේ. +WindowsVersionNotSupported=මෙම මෘදුකාංගය ඔබගේ පරිගණකයේ ඇති Windows අනුවාදය වෙත සහාය නො දක්වයි. +WindowsServicePackRequired=මෙම මෘදුකාංගය හට %1 සේවා කට්ටලයේ %2 හෝ ඉහළ අවශ්‍ය වේ. +NotOnThisPlatform= මෙම මෘදුකාංගය %1 හි ධාවනයේ නොවේ. +OnlyOnThisPlatform=මෙම මෘදුකාංගය %1 හි ධාවනය කළ යුතුයි. +OnlyOnTheseArchitectures=මෙම මෘදුකාංගය ධාවනය කළ හැක්කේ පහත සැකසුම් ඒකක තාක්ෂණ සඳහා සැකසූ Windows අනුවාදයක පමණි:%n%n%1 +MissingWOW64APIs=ඔබ භාවිතා කරන Windows අනුවාදය 64-බිටු පිහිටුවීමක් කිරීම සඳහා සහාය නො දක්වයි. මෙය නිවැරදි කිරීමට කරුණාකර සේවා කට්ටල %1 පිහිටුවන්න. +WinVersionTooLowError=මෙම මෘදුකාංගය සඳහා %1 අනුවාද %2 හෝ ඉහළ අවශ්‍යයි. +WinVersionTooHighError=මෙම මෘදුකාංගය %1 අනුවාද %2 හෝ ඉහළ වෙත සහය නො දක්වයි. +AdminPrivilegesRequired=මෙම මෘදුකාංගය පිහිටුවීමේ දී ඔබ පරිපාලක ලෙස ඇතුළත් වී සිටිය යුතුය. +PowerUserPrivilegesRequired=මෙම මෘදුකාංගය පිහිටුවීමේ දී ඔබ පරිපාලක ලෙස හෝ පරිශීලකයකු ලෙස ඇතුළත් වී සිටිය යුතුය. +SetupAppRunningError=පිහිටුවීම මේ වනවිට %1 ධාවනය වන බව හඳුනාගෙන ඇත.%n%nකරුණාකර එහි සියල්ල වසා දමන්න, පසුව ඉදිරියට යාමට හරි, නැත්නම් ඉවත් වීමට අත්හරින්න ක්ලික් කරන්න. +UninstallAppRunningError=ඉවත් කිරීම මේ වනවිට %1 ධාවනය වන බව හඳුනාගෙන ඇත.%n%nකරුණාකර එහි සියල්ල වසා දමන්න, පසුව ඉදිරියට යාමට හරි, නැත්නම් ඉවත් වීමට අත්හරින්න ක්ලික් කරන්න. + +; *** Misc. errors +ErrorCreatingDir="%1" නාමාවලිය සැකසීමට පිහිටුවීමට නොහැකි විය +ErrorTooManyFilesInDir=ගොනු විශාල ප්‍රමාණයක් පවතින නිසා "%1" නාමාවලියේ ගොනුවක් සැකසීමට නොහැකි විය + +; *** Setup common messages +ExitSetupTitle=පිහිටුවීමෙන් ඉවත් වන්න +ExitSetupMessage=පිහිටුවීම අසම්පූර්ණයි. ඔබ දැන් ඉවත් වුවහොත් මෘදුකාංගය පිහිටු නොවේවි.%n%nපිහිටුවීම සම්පූර්ණ කිරීමට ඔබට පසුව පිහිටුවීම ධාවනය කළ හැක.%n%nපිහිටුවීමෙන් ඉවත් වන්න ද? +AboutSetupMenuItem=පිහිටුවීම පිළිබඳ... +AboutSetupTitle=පිහිටුවීම පිළිබඳ +AboutSetupMessage=%1 අනුවාදය %2%n%3%n%n%1 මුල් පිටුව:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< පෙර +ButtonNext=ඉදිරියට > +ButtonInstall=පිහිටුවීම +ButtonOK=හරි +ButtonCancel=අත්හරින්න +ButtonYes=ඔව් +ButtonYesToAll=සියල්ලට ඔව් +ButtonNo=නැත +ButtonNoToAll=සියල්ලට නැත +ButtonFinish=අවසන් +ButtonBrowse=විමසීම... +ButtonWizardBrowse=විමසීම... +ButtonNewFolder=නව ෆෝල්ඩරයක් තනන්න + +; *** "Select Language" dialog messages +SelectLanguageTitle=පිහිටුම් භාෂාවක් තෝරන්න +SelectLanguageLabel=පිහිටුවීමේ දී භාවිතා කළයුතු භාෂාවක් තෝරන්න: + +; *** Common wizard text +ClickNext=ඉදිරියට යාමට ඉදිරියට ද, නැතහොත් පිහිටුවීමෙන් ඉවත් වීමට අත්හරින්න ද ක්ලික් කරන්න. +BeveledLabel= +BrowseDialogTitle=ෆෝල්ඩර තෝරන්න +BrowseDialogLabel=පහත ලැයිස්තුවෙන් ෆෝල්ඩරයක් තෝරා හරි ක්ලික් කරන්න. +NewFolderName=නව ෆෝල්ඩරයක් + +; *** "Welcome" wizard page +WelcomeLabel1=[name] ස්ථාපන විශාරද වෙත සාදරයෙන් පිළිගනිමු +WelcomeLabel2=මෙය [name/ver] ඔබගේ පරිගණකයේ ස්ථාපනය කරයි.%n%nඉදිරියට යාමට පෙර වෙනත් මෘදුකාංග වසා දැමීමට අප නිර්දේෂ කරමු. + +; *** "Password" wizard page +WizardPassword=මුරපදය +PasswordLabel1=මෙම ස්ථාපනය මුරපද ආරක්ෂිතයි. +PasswordLabel3=කරුණාකර මුරපදය ඇතුළත් කර, පසුව ඉදිරියට යාමට ඉදිරිය ක්ලික් කරන්න. මුරපද case-sensitive වෙයි. +PasswordEditLabel=මුරපදය: +IncorrectPassword=ඔබ ඇතුළත් කළ මුරපදය වැරදියි. කරුණාකර නැවත ඇතුළත් කරන්න. + +; *** "License Agreement" wizard page +WizardLicense=බලපත්‍ර ගිවිසුම +LicenseLabel=කරුණාකර ඉදිරියට යාමට පෙර පහත වැදගත් කරුණු කියවන්න. +LicenseLabel3=කරුණාකර පහත බලපත්‍ර ගිවිසුම කියවන්න. ඉදිරියට යාමට පෙර මෙම කරුණු වෙත ඔබ එකඟ විය යුතුයි. +LicenseAccepted=මම මෙම ගිවිසුමට එකඟ වෙමි +LicenseNotAccepted=මම මෙම ගිවිසුමට එකඟ නො වෙමි + +; *** "Information" wizard pages +WizardInfoBefore=කරුණු +InfoBeforeLabel=කරුණාකර ඉදිරියට යාමට පෙර පහත කරුණු හොඳින් කියවන්න. +InfoBeforeClickLabel=ඉදිරියට යාමට ඔබ සූදානම් නම්, මීළඟ ක්ලික් කරන්න. +WizardInfoAfter=කරුණු +InfoAfterLabel=කරුණාකර ඉදිරියට යාමට පෙර පහත කරුණු හොඳින් කියවන්න. +InfoAfterClickLabel=කරුණාකර ඉදිරියට යාමට පෙර පහත කරුණු හොඳින් කියවන්න. + +; *** "User Information" wizard page +WizardUserInfo=පරිශීලක තොරතුරු +UserInfoDesc=කරුණාකර ඔබගේ තොරතුරු ඇතුළත් කරන්න. +UserInfoName=පරිශීලක නාමය: +UserInfoOrg=සංවිධානය: +UserInfoSerial=අනුක්‍රමික අංකය: +UserInfoNameRequired=ඔබ කිසියම් නමක් ඇතුළත් කළ යුතුයි. + +; *** "Select Destination Location" wizard page +WizardSelectDir=අවසන් පිහිටුම තෝරන්න +SelectDirDesc=[name] පිහිටුවිය යුත්තේ කොහේ ද? +SelectDirLabel3=ස්ථාපකය [name] පහත ෆෝල්ඩරයේ ස්ථාපනය කරයි. +SelectDirBrowseLabel=ඉදිරියට යාමට, ඉදිරියට ක්ලික් කරන්න. ඔබට වෙනත් ෆෝල්ඩරයක් තේරීමට ඔබට අවශ්‍යනම්, විමසීම ක්ලික් කරන්න. +DiskSpaceMBLabel=පිහිටුවීමට අවම [mb] මෙබ හිස් තැටි අවකාශයක් තිබිය යුතුයි. +CannotInstallToNetworkDrive=ස්ථාපකය හට ජාලගත ධාවකයකට ස්ථාපනය කළ නොහැක. +CannotInstallToUNCPath=ස්ථාපකය හට UNC මාර්ගයක ස්ථාපනය කළ නොහැක. +InvalidPath=ඔබ ධාවක අක්ෂරය සහිත සම්පූර්ණ මාර්ගයක් ඇතුළත් කළ යුතුයි; උදාහරණ ලෙස:%n%nC:\APP%n%nහෝ UNC මාර්ගයක් නම්:%n%n\\server\share +InvalidDrive=ඔබ තේරූ ධාවකය හෝ UNC මාර්ගය නො පවතියි හෝ සම්බන්ධ විය නොහැක. වෙනත් යමක් තෝරන්න. +DiskSpaceWarningTitle=ප්‍රමාණවත් තරම් තැටි අවකාශයක් නො පවතියි +DiskSpaceWarning=ස්ථාපකය හට ස්ථාපනයට අවම %1 කිබ හෝ හිස් අවකාශය අත්‍යවශ්‍යයි, එහෙත් ඔබ තේරූ ධාවකයේ %2 කිබ පමණක් පවතියි.%n%nඉදිරියට යාමට අවශ්‍ය ද? +DirNameTooLong=ෆෝල්ඩර නාමය හෝ පිහිටුම දිග වැඩියි. +InvalidDirName=ෆෝල්ඩර නාමය භාරගත නොහැක. +BadDirName32=ෆෝල්ඩර නාමයේ පහත අක්ෂර ඇතුළත් විය නොහැක:%n%n%1 +DirExistsTitle=ෆෝල්ඩරය පවතියි +DirExists=ෆෝල්ඩරය:%n%n%1%n%nදැනටමත් පවතියි. එම ෆෝල්ඩරටම ස්ථාපනය කරන්න ද? +DirDoesntExistTitle=ෆෝල්ඩරය නො පවතියි +DirDoesntExist=ෆෝල්ඩරය:%n%n%1%n%nනො පවතියි. එම ෆෝල්ඩරය සැකසීමට කැමති ද? + +; *** "Select Components" wizard page +WizardSelectComponents=උපාංග තේරීම +SelectComponentsDesc=කුමන උපාංග ස්ථාපනය කළ යුතු ද? +SelectComponentsLabel2=ස්ථාපනය කළ යුතු උපාංග තෝරන්න; ස්ථාපනය නොකළ යුතු උපාංග අත්හරින්න. ඉදිරියට යාමට මීළඟ ක්ලික් කරන්න. +FullInstallation=සම්පූර්ණ ස්ථාපනය +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=සංයුක්ත ස්ථාපනය +CustomInstallation=පෞද්ගලික ස්ථාපනය +NoUninstallWarningTitle=උපාංගය පවතියි +NoUninstallWarning=ස්ථාපකය ඔබගේ පරිගණකයේ පහත උපාංග දැනටමත් ස්ථාපනය කර ඇති බව හඳුනා ගන්නා ලදී:%n%n%1%n%nඅත්හැරීම මේවා ඉවත් නො කරයි.%n%nඉදිරියට යාමට කැමති ද? +ComponentSize1=%1 කිබ +ComponentSize2=%1 මෙබ +ComponentsDiskSpaceMBLabel=වර්තමාන තේරීමට අවම [mb] මෙබ තැටි මතකයක් අවශ්‍යයි. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=අමතර කාර්යයන් තේරීම +SelectTasksDesc=තවත් කුමන අමතර කාරයයන් සිදුකළ යුතු ද? +SelectTasksLabel2=[name] ස්ථාපනයේ දී සිදුකළ යුතු අමතර කාර්යයන් තෝරන්න, පසුව මීළඟ ක්ලික් කරන්න. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=ආරම්භක මෙනු ෆෝල්ඩරය තෝරන්න +SelectStartMenuFolderDesc=ස්ථාපකය මෘදුකාංගයේ කෙටිමං කොහේ ස්ථාපනය කළ යුතු ද? +SelectStartMenuFolderLabel3=ස්ථාපකය මෘදුකාංගයේ කෙටිමං පහත ආරම්භක මෙනු ෆෝල්ඩරයේ සකසයි. +SelectStartMenuFolderBrowseLabel=ඉදිරියට යාමට, මීළඟ ක්ලික් කරන්න. වෙනත් ෆෝල්ඩරයක් තේරීමට, විමසීම ක්ලික් කරන්න. +MustEnterGroupName=ෆෝල්ඩර නාමයක් ඇතුළත් කළ යුතුයි. +GroupNameTooLong=ෆෝල්ඩර නාමය හෝ පිහිටුම දිග වැඩියි. +InvalidGroupName=ෆෝල්ඩර නාමය භාරගත නොහැක. +BadGroupName=ෆෝල්ඩර නාමයේ පහත අක්ෂර ඇතුළත් විය නොහැක:%n%n%1 +NoProgramGroupCheck2=ආරම්භක මෙනු ෆෝල්ඩරයක් සකසන්න එපා + +; *** "Ready to Install" wizard page +WizardReady=ස්ථාපනයට සූදානම් +ReadyLabel1=ස්ථාපකය [name] ඔබගේ පරිගණකයේ ස්ථාපනයට දැන් සූදානම්. +ReadyLabel2a=ස්ථාපනයට ස්ථාපනය ක්ලික් කරන්න, සැකසුම් විමර්ෂණයට හෝ වෙනස් කිරීමට පසුපස ක්ලික් කරන්න. +ReadyLabel2b=ස්ථාපනයට ස්ථාපනය ක්ලික් කරන්න. +ReadyMemoUserInfo=පරිශීලක තොරතුරු: +ReadyMemoDir=අවසන් පිහිටුවීම: +ReadyMemoType=ස්ථාපන වර්ගය: +ReadyMemoComponents=තේරූ උපාංග: +ReadyMemoGroup=ආරම්භක මෙනු ෆෝල්ඩරය: +ReadyMemoTasks=අමතර කාර්යයන්: + +; *** "Preparing to Install" wizard page +WizardPreparing=ස්ථාපනයට සූදානම් වෙමින් +PreparingDesc=ස්ථාපකය [name] ඔබගේ පරිගණකයේ ස්ථාපනයට සූදානම් වෙමින්. +PreviousInstallNotCompleted=පෙර මෘදුකාංගයක ස්ථාපනය/අ ස්ථාපනය තවමත් අවසන් කර නොමැත. එම ස්ථාපනය අවසන් කිරීමට පරිගණකය ප්‍රති පණගැන්විය යුතුය.%n%nපණගැන්වීමෙන් පසු, [name] ස්ථාපනය අවසන් කිරීමට ස්ථාපකය නැවත ධාවනය කරන්න. +CannotContinue=ස්ථාපකය හට ඉදිරියට යාමට නොහැක. ඉවත් වීමට වසන්න ක්ලික් කරන්න. +ApplicationsFound=පහත මෘදුකාංග, ස්ථාපකය හට යාවත්කාලීන කළ යුතු ගොනු භාවිතා කරමින් පවතියි. ස්ථාපකයට මෙම මෘදුකාංග ස්වයංක්‍රියව අවසන් කිරීමට ලබාදීම නිර්දේෂ කරයි. +ApplicationsFound2=පහත මෘදුකාංග, ස්ථාපකය හට යාවත්කාලීන කළ යුතු ගොනු භාවිතා කරමින් පවතියි. ස්ථාපකයට මෙම මෘදුකාංග ස්වයංක්‍රියව අවසන් කිරීමට ලබාදීම නිර්දේෂ කරයි. ස්ථාපනය අවසන් වූ පසු ස්ථාපකය මෙම මෘදුකාංග නැවත ආරම්භ කිරීමට වෑයම් කරයි. +CloseApplications=මෘදුකාංග ස්වයංක්‍රියව අවසන් කරන්න +DontCloseApplications=මෘදුකාංග අවසන් නො කරන්න +ErrorCloseApplications=ස්ථාපකය හට ස්වයංක්‍රියව මෘදුකාංග අවසන් කළ නොහැකි විය. ඉදිරියට යාමට පෙර මෙම ගොනු භාවිතා කරන මෘදුකාංග වසා දැමීම නිර්දේෂ කරයි. + +; *** "Installing" wizard page +WizardInstalling=ස්ථාපනය කරමින් +InstallingLabel=ස්ථාපකය [name] ඔබගේ පරිගණකයේ ස්ථාපනය කරන තුරු මඳක් රැඳී සිටින්න. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=[name] ස්ථාපක මායාකරු අවසන් කරමින් +FinishedLabelNoIcons=ස්ථාපකය [name] ඔබගේ පරිගණකයේ ස්ථාපනය අවසන් කරන ලදී. +FinishedLabel=ස්ථාපකය [name] ඔබගේ පරිගණකයේ ස්ථාපනය අවසන් කරන ලදී. ස්ථාපිත මෘදුකාංගය ස්ථාපිත කෙටිමං තේරීමෙන් ආරම්භ කළ හැක. +ClickFinish=ඉවත් වීමට අවසන් ක්ලික් කරන්න. +FinishedRestartLabel=[name] ස්ථාපනය අවසන් කිරීමට, ස්ථාපකය පරිගණකය ප්‍රති ආරම්භ කළ යුතුයි. දැන් ආරම්භ කරන්න ද? +FinishedRestartMessage=[name] ස්ථාපනය අවසන් කිරීමට, ස්ථාපකය පරිගණකය ප්‍රති ආරම්භ කළ යුතුයි..%n%nදැන් ආරම්භ කරන්න ද? +ShowReadmeCheck=ඔව්, මම README ගොනුව දැකීමට කැමතියි +YesRadio=ඔව්, පරිගණකය දැන් ප්‍රති ආරම්භ කරන්න +NoRadio=නැහැ, මම පරිගණකය පසුව අරඹන්නම් +; used for example as 'Run MyProg.exe' +RunEntryExec=%1 ධාවනය +; used for example as 'View Readme.txt' +RunEntryShellExec=%1 දකින්න + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=ස්ථාපකය හට මීළඟ තැටිය අවශ්‍යයි +SelectDiskLabel2=කරුණාකර කැටි අංක %1 ඇතුළත් කර හරි ක්ලික් කරන්න.%n%nඑම ගොනු පහත පෙන්වන ෆෝල්ඩරයේ නොව වෙනත් ස්ථානයක පවති නම්, හරි මාර්ගය හෝ විමසීම ක්ලික් කරන්න. +PathLabel=මාර්ගය: +FileNotInDir2="%1" ගොනුව "%2" හි සොයා ගත නොහැකි විය. කරුණාකර හරි තැටිය හෝ වෙනත් ෆෝල්ඩරයක් තෝරන්න. +SelectDirectoryLabel=කරුණාකර මීළඟ තැටියේ මාර්ගය තෝරන්න. + +; *** Installation phase messages +SetupAborted=ස්ථාපනය අවසන් නොවුනි.%n%nකරුණාකර දෝෂය සමනය කර ස්ථාපකය නැවත අරඹන්න. +EntryAbortRetryIgnore=නැවත උත්සාහ කරන්න, ඉදිරියට යාමට මඟ හරින්න, අත්හැරීමට අත්හැරීම ක්ලික් කරන්න. + +; *** Installation status messages +StatusClosingApplications=මෘදුකාංග වසමින්... +StatusCreateDirs=නාමලේඛන සකසමින්... +StatusExtractFiles=ගොනු උපුටා ගනිමින්... +StatusCreateIcons=කෙටිමං සකසමින්... +StatusCreateIniEntries=INI ඇතුළත් කරමින්... +StatusCreateRegistryEntries=ලේඛන ඇතුළත් කිරීම් සකසමින්... +StatusRegisterFiles=ගොනු ලේඛනගත කරමින්... +StatusSavingUninstall=අ ස්ථාපන තොරතුරු සුරකිමින්... +StatusRunProgram=ස්ථාපනය අවසන් කරමින්... +StatusRestartingApplications=මෘදුකාංග ආරම්භ කරමින්... +StatusRollback=වෙනස්කම් අත්හරිමින්... + +; *** Misc. errors +ErrorInternal2=අභ්‍යන්තර දෝෂය: %1 +ErrorFunctionFailedNoCode=%1 අසාර්ථකයි +ErrorFunctionFailed=%1 අසාර්ථකයි; කේතය %2 +ErrorFunctionFailedWithMessage=%1 අසාර්ථකයි; කේතය %2.%n%3 +ErrorExecutingProgram=ගොනුව ආරම්භ කළ නොහැක:%n%1 + +; *** Registry errors +ErrorRegOpenKey=නාමලේඛන යතුර ආරම්භය අසාර්ථකයි:%n%1\%2 +ErrorRegCreateKey=නාමලේඛන යතුර ස්ථාපනය අසාර්ථකයි:%n%1\%2 +ErrorRegWriteKey=නාමලේඛන යතුරට ලිවීම අසාර්ථකයි:%n%1\%2 + +; *** INI errors +ErrorIniEntry="%1" ගොනුවේ INI ඇතුළත් කිරීම අසාර්ථකයි. + +; *** File copying errors +FileAbortRetryIgnore=නැවත උත්සාහ කිරීම, මෙම ගොනුව අත්හැරීමට අත්හැරීම (අනුමත නො කරයි), හෝ අත්හරින්න ක්ලික් කරන්න. +FileAbortRetryIgnore2=නැවත උත්සාහ කිරීම, මෙම ගොනුව අත්හැරීමට අත්හැරීම (අනුමත නො කරයි), හෝ අත්හරින්න ක්ලික් කරන්න. +SourceIsCorrupted=මූලාශ්‍ර ගොනුව විනාශයි +SourceDoesntExist="%1" මූලාශ්‍ර ගොනුව නො පවතියි +ExistingFileReadOnly=පවතින ගොනුව කියවීම පමණයි.%n%nකියවීම පමණයි බව ඉවත් කිරීමට නැවත උත්සාහ කරන්න, මෙම ගොනුව අත්හරින්න, හෝ ස්ථාපනය අත්හරින්න. +ErrorReadingExistingDest=පවතින ගොනුව කියවීමේ දී දෝෂයක් හට ගැනිණි: +FileExists=ගොනුව දැනටමත් පවතියි.%n%nස්ථාපකය හට මෙය ප්‍රතිලේඛනයට ඔබ කැමති ද? +ExistingFileNewer=පවතින ගොනුව ස්ථාපකය ස්ථාපනය කරන ගොනුවට වඩා නවීනයි. දැනටමත් පවතින ගොනුව තබා ගැනීමට අනුමත කරයි.%n%nවර්තමාන ගොනුව තබා යන්න ද? +ErrorChangingAttr=වර්තමාන ගොනුවේ ගුණාංග වෙනස් කිරීමේ දී දෝෂයක් හට ගැනිණි: +ErrorCreatingTemp=ගමනාන්ත නාමාවලියේ ගොනුව සැකසීමේ දී දෝෂයක් හට ගැනිණි: +ErrorReadingSource=මූලාශ්‍ර ගොනුව කියැවීමේ දී දෝෂයක් හට ගැනිණි: +ErrorCopying=ගොනුව පිටපත් කිරීමේ දී දෝෂයක් හට ගැනිණි: +ErrorReplacingExistingFile=පවතින ගොනුව ප්‍රතිස්ථාපනයේ දී දෝෂයක් හට ගැනිණි: +ErrorRestartReplace=ප්‍රති ආරම්භය ප්‍රතිස්ථාපනය නිෂ්ඵලයි: +ErrorRenamingTemp=ගමනාන්ත නාමාවලියේ ගොනුවක් නම් කිරීමේ දී දෝෂයක් හට ගැනිණි: +ErrorRegisterServer=DLL/OCX ලේඛනගත කිරීම අසාර්ථකයි: %1 +ErrorRegSvr32Failed= පහත කේතය සමඟ RegSvr32 දෝෂය %1 +ErrorRegisterTypeLib=වර්ග පුස්තකාලය ලේඛනගත කළ නොහැක: %1 + +; *** Post-installation errors +ErrorOpeningReadme=README ගොනුව විවෘත කිරීමේ දී දෝෂයක් හට ගැනිණි. +ErrorRestartingComputer=මෘදුකාංගයට පරිගණකය ප්‍රති පණගැන්වීමට නොහැකි විය. කරුණාකර පෞද්ගලික ව මෙය කරන්න. + +; *** Uninstaller messages +UninstallNotFound="%1" ගොනුව නො පවතියි. අස්ථාපනය කළ නොහැක +UninstallOpenError="%1" ගොනුව ආරම්භ කළ නොහැක. අස්ථාපනය කළ නොහැක +UninstallUnsupportedVer="%1" අස්ථාපන ලඝු ගොනුව වර්ථමාන අස්ථාපක අනුවාදය හා නො සැසඳේ. අස්ථාපනය කළ නොහැක +UninstallUnknownEntry=(%1) හඳුනා නොගත් ඇතුළත් කිරීමක් අස්ථාපන ලඝුවේ පවතියි +ConfirmUninstall=%1 හා එහි සියළු උපාංග සම්පූර්ණයෙන් ඉවත් කිරීමට ඔබට අවශ්‍ය ද? +UninstallOnlyOnWin64=මෙම ස්ථාපනය අස්ථාපනය කළ හැක්කේ 64-බිටු Windows හි පමණි. +OnlyAdminCanUninstall=මෙම ස්ථාපනය අස්ථාපනය කළ හැක්කේ පරිපාලක වරප්‍රසාද සහිත පරිශීලකයකුට පමණි. +UninstallStatusLabel=%1 පරිගණකයෙන් ඉවත් කරන තුරු මඳක් රැඳී සිටින්න. +UninstalledAll=%1 පරිගණකයෙන් සාර්ථකව ඉවත් කරන ලදී. +UninstalledMost=%1 අස්ථාපනය අවසන්.%n%nසමහරක් අවයව ඉවත් කළ නොහැකි විය. මෙවා පෞද්ගලික ව ඉවත් කළ හැක. +UninstalledAndNeedsRestart=%1 අස්ථාපනය අවසන්, ඔබගේ පරිගණකය ප්‍රති ආරම්භ කළ යුතුයි.%n%nදැන් ආරම්භ කළ යුතු ද? +UninstallDataCorrupted="%1" ගොනුව විනාශයි. අස්ථාපනය කළ නොහැක + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=බෙදාගත් ගොනුව ඉවත් කළ යුතු ද? +ConfirmDeleteSharedFile2=පහත බෙදාගත් ගොනුව කිසිඳු මෘදුකාංගයක් භාවිතා නො කරන බව පද්ධතිය පෙන්වයි. අස්ථාපක මෙම ගොනුව ඉවත් කරනවාට ඔබ කැමති ද?%n%nයම්කිසි මෘදුකාංගයක් මෙය භාවිතා කරන අතර මෙම ගොනුව ඉවත් කළහොත්, මෙම මෘදුකාංග සාර්ථකව ක්‍රියා නොකරාවි. ඔබට විශ්වාස නැතිනම්, නැහැ තෝරන්න. ගොනුව පද්ධතියේ තබා යෑම කිසිඳු හානියක් නොකරයි. +SharedFileNameLabel=ගොනු නාමය: +SharedFileLocationLabel=පිහිටීම: +WizardUninstalling=අස්ථාපන ප්‍රගතිය +StatusUninstalling=අස්ථාපනය %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=ස්ථාපනය %1. +ShutdownBlockReasonUninstallingApp=අස්ථාපනය %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 අනුවාදය %2 +AdditionalIcons=අමතර කෙටිමං: +CreateDesktopIcon=ඩෙස්ක්ටොප් කෙටිමඟක් සකසන්න +CreateQuickLaunchIcon=සිඝ්‍ර ආරම්භක කෙටිමඟක් සකසන්න +ProgramOnTheWeb=%1 අන්තර්ජාලයේ +UninstallProgram=අස්ථාපනය %1 +LaunchProgram=ආරම්භ %1 +AssocFileExtension=%1, %2 ගොනු විතතිය සමඟ සම්බන්ධ කරන්න +AssocingFileExtension=%1, %2 ගොනු විතතිය සමඟ සම්බන්ධ කරමින්... +AutoStartProgramGroupDescription=ආරම්භය: +AutoStartProgram=%1 ස්වයංක්‍රියව ආරම්භ කරන්න +AddonHostProgramNotFound=%1 ඔබ තෝරාගත් ෆෝල්ඩරයේ සොයාගත නොහැක.%n%nඑහෙත් ඉදිරියට යන්න ද? diff --git a/Files/Languages/Unofficial/Swedish.isl b/Files/Languages/Unofficial/Swedish.isl new file mode 100644 index 00000000..f458ca65 --- /dev/null +++ b/Files/Languages/Unofficial/Swedish.isl @@ -0,0 +1,526 @@ +; *** Inno Setup version 6.1.0+ Swedish messages *** +; +; To download user-contributed translations of this file, go to: +; http://www.jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). +; +; Translated by stefan@bodingh.se (Stefan Bodingh) +; + +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. + + +[LangOptions] +LanguageName=Svenska +LanguageID=$041D +LanguageCodePage=1252 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + + +; *** Application titles + + +[Messages] +SetupAppTitle=Installationsprogram +SetupWindowTitle=Installationsprogram fr %1 +UninstallAppTitle=Avinstallation +UninstallAppFullTitle=%1 Avinstallation + +; *** Misc. common + + +InformationTitle=Information +ConfirmTitle=Bekrfta +ErrorTitle=Fel + +; *** SetupLdr messages + + +SetupLdrStartupMessage=%1 kommer att installeras. Vill du fortstta? +LdrCannotCreateTemp=Kan inte skapa en temporr fil. Installationen avbryts +LdrCannotExecTemp=Kan inte kra fil i temporr katalog. Installationen avbryts +HelpTextNote= + +; *** Startup error messages + + +LastErrorMessage=%1.%n%nFel %2: %3 +SetupFileMissing=Filen %1 saknas i installationskatalogen. Rtta till problemet eller hmta en ny kopia av programmet. +SetupFileCorrupt=Installationsfilerna r felaktiga. Hmta en ny kopia av programmet +SetupFileCorruptOrWrongVer=Installationsfilerna r felaktiga, eller stmmer ej verens med denna version av installationsprogrammet. Rtta till felet eller hmta en ny programkopia. +InvalidParameter=En ogiltig parameter angavs p kommandoraden:%n%n%1 +SetupAlreadyRunning=Setup krs redan. +WindowsVersionNotSupported=Programmet stdjer inte den version av Windows som krs p datorn. +WindowsServicePackRequired=Programmet krver %1 Service Pack %2 eller nyare. +NotOnThisPlatform=Detta program kan ej kras p %1. +OnlyOnThisPlatform=Detta program mste ha %1. +OnlyOnTheseArchitectures=Detta program kan bara installeras p Windows versioner med fljande processorarkitekturer:%n%n%1 +WinVersionTooLowError=Detta program krver %1, version %2 eller senare. +WinVersionTooHighError=Programmet kan inte installeras p %1 version %2 eller senare. +AdminPrivilegesRequired=Du mste vara inloggad som administratr nr du installerar detta program. +PowerUserPrivilegesRequired=Du mste vara inloggad som administratr eller medlem av gruppen Privilegierade anvndare (Power Users) nr du installerar detta program. +SetupAppRunningError=Installationsprogrammet har upptckt att %1 r igng.%n%nAvsluta det angivna programmet nu. Klicka sedan p OK fr att g vidare, eller p Avbryt fr att avsluta. +UninstallAppRunningError=Avinstalleraren har upptckt att %1 krs fr tillfllet.%n%nStng all ppna instanser av det nu, klicka sedan p OK fr att g vidare, eller p Avbryt fr att avsluta. +PrivilegesRequiredOverrideTitle=Installationstyp +PrivilegesRequiredOverrideInstruction=Vlj installationstyp +PrivilegesRequiredOverrideText1=%1 kan installeras fr alla anvndare (krver administratons-rttigheter), eller bara fr dig. +PrivilegesRequiredOverrideText2=%1 kan installeras bara fr dig, eller fr alla anvndare (krver administratons-rttigheter). +PrivilegesRequiredOverrideAllUsers=Installera fr &alla anvndare +PrivilegesRequiredOverrideAllUsersRecommended=Installera fr &alla anvndare (rekommenderas) +PrivilegesRequiredOverrideCurrentUser=Installera fr &mig enbart +PrivilegesRequiredOverrideCurrentUserRecommended=Installera fr &mig enbart (rekommenderas) + +; *** Misc. errors + + +ErrorCreatingDir=Kunde inte skapa katalogen "%1" +ErrorTooManyFilesInDir=Kunde inte skapa en fil i katalogen "%1" drfr att den innehller fr mnga filer + +; *** Setup common messages + + +ExitSetupTitle=Avsluta installationen +ExitSetupMessage=Installationen r inte frdig. Om du avslutar nu, kommer programmet inte att installeras.%n%nDu kan kra installationsprogrammet vid ett senare tillflle fr att slutfra installationen.%n%nVill du avbryta installationen? +AboutSetupMenuItem=&Om installationsprogrammet... +AboutSetupTitle=Om installationsprogrammet +AboutSetupMessage=%1 version %2%n%3%n%n%1 hemsida:%n%4 +AboutSetupNote=Svensk versttning r gjord av dickg@go.to 1999, 2002%n%nUppdatering till 3.0.2+ av peter@peterandlinda.com, 4.+ av stefan@bodingh.se +TranslatorNote= + +; *** Buttons + + +ButtonBack=< &Tillbaka +ButtonNext=&Nsta > +ButtonInstall=&Installera +ButtonOK=OK +ButtonCancel=Avbryt +ButtonYes=&Ja +ButtonYesToAll=Ja till &Allt +ButtonNo=&Nej +ButtonNoToAll=N&ej till allt +ButtonFinish=&Slutfr +ButtonBrowse=&Blddra... +ButtonWizardBrowse=&Blddra... +ButtonNewFolder=Skapa ny katalog + +; *** "Select Language" dialog messages + + +SelectLanguageTitle=Vlj sprk fr installationen +SelectLanguageLabel=Vlj sprk som skall anvndas under installationen: + +; *** Common wizard text + + +ClickNext=Klicka p Nsta fr att fortstta eller p Avbryt fr att avsluta installationen. +BeveledLabel= +BrowseDialogTitle=Vlj katalog +BrowseDialogLabel=Vlj en katalog i listan nedan, klicka sedan p OK. +NewFolderName=Ny katalog + +; *** "Welcome" wizard page + + +WelcomeLabel1=Vlkommen till installationsprogrammet fr [name]. +WelcomeLabel2=Detta kommer att installera [name/ver] p din dator.%n%nDet rekommenderas att du avslutar alla andra program innan du fortstter. Det frebygger konflikter under installationens gng. + +; *** "Password" wizard page + + +WizardPassword=Lsenord +PasswordLabel1=Denna installation r skyddad med lsenord. +PasswordLabel3=Var god ange lsenordet, klicka sedan p Nsta fr att fortstta. Lsenord skiljer p versaler/gemener. +PasswordEditLabel=&Lsenord: +IncorrectPassword=Lsenordet du angav r inkorrekt. Frsk igen. + +; *** "License Agreement" wizard page + + + + + +WizardLicense=Licensavtal +LicenseLabel=Var god och ls fljande viktiga information innan du fortstter. +LicenseLabel3=Var god och ls fljande licensavtal. Du mste acceptera villkoren i avtalet innan du kan fortstta med installationen. +LicenseAccepted=Jag &accepterar avtalet +LicenseNotAccepted=Jag accepterar &inte avtalet + +; *** "Information" wizard pages + + + + + +WizardInfoBefore=Information +InfoBeforeLabel=Var god ls fljande viktiga information innan du fortstter. +InfoBeforeClickLabel=Nr du r klar att fortstta med installationen klickar du p Nsta. +WizardInfoAfter=Information +InfoAfterLabel=Var god ls fljande viktiga information innan du fortstter. +InfoAfterClickLabel=Nr du r klar att fortstta med installationen klickar du p Nsta. + +; *** "User Information" wizard page + + + + + +WizardUserInfo=Anvndarinformation +UserInfoDesc=Var god och fyll i fljande uppgifter. +UserInfoName=&Namn: +UserInfoOrg=&Organisation: +UserInfoSerial=&Serienummer: +UserInfoNameRequired=Du mste fylla i ett namn. + +; *** "Select Destination Directory" wizard page + + + + + +WizardSelectDir=Vlj installationsplats +SelectDirDesc=Var skall [name] installeras? +SelectDirLabel3=Installationsprogrammet kommer att installera [name] i fljande katalog +SelectDirBrowseLabel=Fr att fortstta klickar du p Nsta. Om du vill vlja en annan katalog klickar du p Blddra. +DiskSpaceGBLabel=Programmet krver minst [gb] MB hrddiskutrymme. +DiskSpaceMBLabel=Programmet krver minst [mb] MB hrddiskutrymme. +CannotInstallToNetworkDrive=Setup kan inte installeras p ntverksdisk. +CannotInstallToUNCPath=Setup kan inte installeras p UNC skvg. +InvalidPath=Du mste skriva en fullstndig skvg med enhetsbeteckning; till exempel:%n%nC:\Program%n%neller en UNC-skvg i formatet:%n%n\\server\resurs +InvalidDrive=Enheten du har valt finns inte eller r inte tillgnglig. Vlj en annan. +DiskSpaceWarningTitle=Ej tillrckligt med diskutrymme +DiskSpaceWarning=Installationsprogrammet behver tminstone %1 KB ledigt diskutrymme fr installationen, men den valda enheten har bara %2 KB tillgngligt.%n%nVill du fortstta nd? +DirNameTooLong=Katalogens namn eller skvg r fr lng. +InvalidDirName=Katalogen du har valt r inte tillgnglig. +BadDirName32=Katalogens namn fr ej innehlla ngot av fljande tecken:%n%n%1 +DirExistsTitle=Katalogen finns +DirExists=Katalogen:%n%n%1%n%nfinns redan. Vill du nd fortstta installationen till den valda katalogen? +DirDoesntExistTitle=Katalogen finns inte +DirDoesntExist=Katalogen:%n%n%1%n%nfinns inte. Vill du skapa den? + +; *** "Select Components" wizard page + + + + + +WizardSelectComponents=Vlj komponenter +SelectComponentsDesc=Vilka komponenter skall installeras? +SelectComponentsLabel2=Vlj de komponenter som du vill ska installeras; avmarkera de komponenter som du inte vill ha. Klicka sedan p Nsta nr du r klar att fortstta. +FullInstallation=Fullstndig installation +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) + + + + + +CompactInstallation=Kompakt installation +CustomInstallation=Anpassad installation +NoUninstallWarningTitle=Komponenter finns +NoUninstallWarning=Installationsprogrammet har upptckt att fljande komponenter redan finns installerade p din dator:%n%n%1%n%nAtt avmarkera dessa komponenter kommer inte att avinstallera dom.%n%nVill du fortstta nd? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Aktuella val krver minst [gb] GB diskutrymme. +ComponentsDiskSpaceMBLabel=Aktuella val krver minst [mb] MB diskutrymme. + +; *** "Select Additional Tasks" wizard page + + + + + +WizardSelectTasks=Vlj extra uppgifter +SelectTasksDesc=Vilka extra uppgifter skall utfras? +SelectTasksLabel2=Markera ytterligare uppgifter att utfra vid installation av [name], tryck sedan p Nsta. + +; *** "Select Start Menu Folder" wizard page + + + + + +WizardSelectProgramGroup=Vlj Startmenykatalogen +SelectStartMenuFolderDesc=Var skall installationsprogrammet placera programmets genvgar? +SelectStartMenuFolderLabel3=Installationsprogrammet kommer att skapa programmets genvgar i fljande katalog. +SelectStartMenuFolderBrowseLabel=Fr att fortstta klickar du p Nsta. Om du vill vlja en annan katalog, klickar du p Blddra. +MustEnterGroupName=Du mste ange en katalog. +GroupNameTooLong=Katalogens namn eller skvg r fr lng. +InvalidGroupName=Katalogen du har valt r inte tillgnglig. +BadGroupName=Katalognamnet kan inte innehlla ngon av fljande tecken:%n%n%1 +NoProgramGroupCheck2=&Skapa ingen Startmenykatalog + +; *** "Ready to Install" wizard page + + + + + +WizardReady=Redo att installera +ReadyLabel1=Installationsprogrammet r nu redo att installera [name] p din dator. +ReadyLabel2a=Tryck p Installera om du vill fortstta, eller p g Tillbaka om du vill granska eller ndra p ngot. +ReadyLabel2b=Vlj Installera fr att pbrja installationen. +ReadyMemoUserInfo=Anvndarinformation: +ReadyMemoDir=Installationsplats: +ReadyMemoType=Installationstyp: +ReadyMemoComponents=Valda komponenter: +ReadyMemoGroup=Startmenykatalog: +ReadyMemoTasks=Extra uppgifter: +DownloadingLabel=Laddar ner ytterligare filer... +ButtonStopDownload=&Stoppa nedladdning +StopDownload=r du sker p att du vill stoppa nedladdningen? +ErrorDownloadAborted=Nedladdningen avbruten +ErrorDownloadFailed=Nedladdningen misslyckades: %1 %2 +ErrorDownloadSizeFailed=F storlek misslyckades: %1 %2 +ErrorFileHash1=Filhash misslyckades: %1 +ErrorFileHash2=Ogiltig filhash: frvntat %1, hittat %2 +ErrorProgress=Ogiltig framfart: %1 of %2 +ErrorFileSize=Ogiltig filstorlek: frvntad %1, hittad %2 + +; *** "Preparing to Install" wizard page + + + + + +WizardPreparing=Frbereder installationen +PreparingDesc=Installationsprogrammet frbereder installationen av [name] p din dator. +PreviousInstallNotCompleted=Installationen/avinstallationen av ett tidigare program har inte slutfrts. Du mste starta om datorn fr att avsluta den installationen.%n%nEfter att ha startat om datorn kr du installationsprogrammet igen fr att slutfra installationen av [name]. +CannotContinue=Installationsprogrammet kan inte fortstta. Klicka p Avbryt fr att avsluta. +ApplicationsFound=Fljande program anvnder filer som mste uppdateras av Setup. Vi rekommenderar att du lter Setup automatiskt stnga dessa program. +ApplicationsFound2=Fljande program anvnder filer som mste uppdateras av Setup. Vi rekommenderar att du lter Setup automatiskt stnga dessa program. Efter installationen kommer Setup att frska starta programmen igen. +CloseApplications=&Stng programmen automatiskt +DontCloseApplications=&Stng inte programmen +ErrorCloseApplications=Installationsprogrammet kunde inte stnga alla program. Innan installationen fortstter rekommenderar vi att du stnger alla program som anvnder filer som Setup behver uppdatera. +PrepareToInstallNeedsRestart=Installationen mste starta om din dator. Nr du har startat om datorn kr du Setup igen fr att slutfra installationen av [name].%n%nVill du starta om nu? + +; *** "Installing" wizard page + + + + + +WizardInstalling=Installerar +InstallingLabel=Vnta medan [name] installeras p din dator. + +; *** "Setup Completed" wizard page + + + + + +FinishedHeadingLabel=Avslutar installationen av [name] +FinishedLabelNoIcons=[name] har nu installerats p din dator. +FinishedLabel=[name] har nu installerats p din dator. Programmet kan startas genom att vlja ngon av ikonerna. +ClickFinish=Vlj Slutfr fr att avsluta installationen. +FinishedRestartLabel=Fr att slutfra installationen av [name], mste datorn startas om. Vill du starta om nu? +FinishedRestartMessage=Fr att slutfra installationen av [name], mste datorn startas om.%n%nVill du starta om datorn nu? +ShowReadmeCheck=Ja, jag vill se filen LS MIG +YesRadio=&Ja, jag vill starta om datorn nu +NoRadio=&Nej, jag startar sjlv om datorn senare +; used for example as 'Run MyProg.exe' + + + + + +RunEntryExec=Kr %1 +; used for example as 'View Readme.txt' + + + + + +RunEntryShellExec=Ls %1 + +; *** "Setup Needs the Next Disk" stuff + + + + + +ChangeDiskTitle=Installationsprogrammet behver nsta diskett +SelectDiskLabel2=Var god stt i diskett %1 och tryck OK.%n%nOm filerna kan hittas i en annan katalog n den som visas nedan, skriv in rtt skvg eller vlj Blddra. +PathLabel=&Skvg: +FileNotInDir2=Kunde inte hitta filen "%1" i "%2". Var god stt i korrekt diskett eller vlj en annan katalog. +SelectDirectoryLabel=Var god ange skvgen fr nsta diskett. + +; *** Installation phase messages + + + + + +SetupAborted=Installationen slutfrdes inte.%n%nVar god rtta till felet och kr installationen igen. +AbortRetryIgnoreSelectAction=Vlj tgrd +AbortRetryIgnoreRetry=&Frsk igen +AbortRetryIgnoreIgnore=&Ignorera felet och fortstt +AbortRetryIgnoreCancel=Avbryt installationen + +; *** Installation status messages + + + + + +StatusClosingApplications=Stnger program... +StatusCreateDirs=Skapar kataloger... +StatusExtractFiles=Packar upp filer... +StatusCreateIcons=Skapar programikoner... +StatusCreateIniEntries=Skriver INI-vrden... +StatusCreateRegistryEntries=Skriver register-vrden... +StatusRegisterFiles=Registrerar filer... +StatusSavingUninstall=Sparar information fr avinstallation... +StatusRunProgram=Slutfr installationen... +StatusRestartingApplications=Startar om program... +StatusRollback=terstller ndringar... + +; *** Misc. errors + + + + + +ErrorInternal2=Internt fel: %1 +ErrorFunctionFailedNoCode=%1 misslyckades +ErrorFunctionFailed=%1 misslyckades; kod %2 +ErrorFunctionFailedWithMessage=%1 misslyckades; kod %2.%n%3 +ErrorExecutingProgram=Kan inte kra filen:%n%1 + +; *** Registry errors + + + + + +ErrorRegOpenKey=Fel vid ppning av registernyckel:%n%1\%2 +ErrorRegCreateKey=Kan ej skapa registernyckel:%n%1\%2 +ErrorRegWriteKey=Kan ej skriva till registernyckel:%n%1\%2 + +; *** INI errors + + + + + +ErrorIniEntry=Kan inte skriva nytt INI-vrde i filen "%1". +FileAbortRetryIgnoreSkipNotRecommended=&Hoppa ver den hr filen (rekommenderas inte) +FileAbortRetryIgnoreIgnoreNotRecommended=&Ignorera felet och fortstt (rekommenderas inte) +SourceIsCorrupted=Kllfilen r felaktig +SourceDoesntExist=Kllfilen "%1" finns inte +ExistingFileReadOnly2=Den befintliga filen kunde inte bytas ut eftersom den r markerad skrivskyddad. +ExistingFileReadOnlyRetry=&Ta bort skrivskyddad attributet och frsk igen +ExistingFileReadOnlyKeepExisting=&Behll den befintliga filen +ErrorReadingExistingDest=Ett fel uppstod vid frsk att lsa den befintliga filen: +FileExistsSelectAction=Vlj tgrd +FileExists2=Filen finns redan. +FileExistsOverwriteExisting=&Skriv ver den befintliga filen +FileExistsKeepExisting=&Behll befintlig fil +FileExistsOverwriteOrKeepAll=&Gr detta fr nsta konflikt +ExistingFileNewerSelectAction=Vlj tgrd +ExistingFileNewer2=Den befintliga filen r nyare n den som Setup frsker installera. +ExistingFileNewerOverwriteExisting=&Skriv ver den befintliga filen +ExistingFileNewerKeepExisting=&Behll befintlig fil (rekommenderas) +ExistingFileNewerOverwriteOrKeepAll=&Gr detta fr nsta konflikt +ErrorChangingAttr=Ett fel uppstod vid frsk att ndra attribut p den befintliga filen: +ErrorCreatingTemp=Ett fel uppstod vid ett frsk att skapa installationskatalogen: +ErrorReadingSource=Ett fel uppstod vid ett frsk att lsa kllfilen: +ErrorCopying=Ett fel uppstod vid kopiering av filen: +ErrorReplacingExistingFile=Ett fel uppstod vid ett frsk att erstta den befintliga filen: +ErrorRestartReplace=terstartaErstt misslyckades: +ErrorRenamingTemp=Ett fel uppstod vid ett frsk att byta namn p en fil i installationskatalogen: +ErrorRegisterServer=Kunde inte registrera DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 misslyckades med felkod %1 +ErrorRegisterTypeLib=Kunde inte registrera typbibliotek: %1 +UninstallDisplayNameMark=%1 (%2) +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=Alla anvndare +UninstallDisplayNameMarkCurrentUser=Nuvarande anvndare + +; *** Post-installation errors + + + + + +ErrorOpeningReadme=Ett fel uppstod vid ppnandet av LS MIG-filen. +ErrorRestartingComputer=Installationsprogrammet kunde inte starta om datorn. Var god gr det manuellt. + +; *** Uninstaller messages + + + + + +UninstallNotFound=Filen "%1" finns inte. Kan inte avinstallera. +UninstallOpenError=Filen "%1" kan inte ppnas. Kan inte avinstallera. +UninstallUnsupportedVer=Avinstallationsloggen "%1" r i ett format som denna version inte knner igen. Kan ej avinstallera +UninstallUnknownEntry=En oknd rad (%1) hittades i avinstallationsloggen +ConfirmUninstall=r du sker p att du vill ta bort %1 och alla tillhrande komponenter? +UninstallOnlyOnWin64=Denna installation kan endast avinstalleras p en 64-bitarsversion av Windows. +OnlyAdminCanUninstall=Denna installation kan endast avinstalleras av en anvndare med administrativa rttigheter. +UninstallStatusLabel=Var god och vnta medan %1 tas bort frn din dator. +UninstalledAll=%1 r nu borttaget frn din dator. +UninstalledMost=Avinstallationen av %1 r nu klar.%n%nEn del filer/kataloger gick ej att ta bort. Dessa kan tas bort manuellt. +UninstalledAndNeedsRestart=Fr att slutfra avinstallationen av %1 mste datorn startas om.%n%nVill du starta om nu? +UninstallDataCorrupted=Filen "%1" r felaktig. Kan inte avinstallera + +; *** Uninstallation phase messages + + + + + +ConfirmDeleteSharedFileTitle=Ta bort delad fil? +ConfirmDeleteSharedFile2=Systemet indikerar att fljande delade fil inte lngre anvnds av ngra program. Vill du ta bort den delade filen?%n%n%1%n%nOm ngot program fortfarande anvnder denna fil och den raderas, kommer programmet kanske att sluta fungera. Om du r osker, vlj Nej. Att lta filen ligga kvar i systemet kommer inte att orsaka ngon skada. +SharedFileNameLabel=Filnamn: +SharedFileLocationLabel=Plats: +WizardUninstalling=Avinstallationsstatus +StatusUninstalling=Avinstallerar %1... + +; *** Shutdown block reasons + + + + + +ShutdownBlockReasonInstallingApp=Installerar %1. +ShutdownBlockReasonUninstallingApp=Avinstallerar %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + + + + + + + +[CustomMessages] +NameAndVersion=%1 version %2 +AdditionalIcons=terstende ikoner: +CreateDesktopIcon=Skapa en genvg p skrivbordet +CreateQuickLaunchIcon=Skapa en genvg i Snabbstartfltet +ProgramOnTheWeb=%1 p Webben +UninstallProgram=Avinstallera %1 +LaunchProgram=Starta %1 +AssocFileExtension=Associera %1 med %2 filnamnstillgg +AssocingFileExtension=Associerar %1 med %2 filnamnstillgg... +AutoStartProgramGroupDescription=Autostart: +AutoStartProgram=Starta automatiskt %1 +AddonHostProgramNotFound=%1 kunde inte hittas i katalogen du valde.%n%nVill du fortstta nd? diff --git a/Files/Languages/Unofficial/Tatar.isl b/Files/Languages/Unofficial/Tatar.isl new file mode 100644 index 00000000..e55534b0 --- /dev/null +++ b/Files/Languages/Unofficial/Tatar.isl @@ -0,0 +1,324 @@ +; *** Inno Setup version 5.5.3+ Tatar messages *** +; +; Translate by: Irek Khaziev +; E-Mail: khazirek@mail.ru +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +LanguageName=<0422><0430><0442><0430><0440> +LanguageID=$0444 +LanguageCodePage=65001 + +[Messages] + +; *** Application titles +SetupAppTitle=Урнаштыру +SetupWindowTitle=Урнаштыру — %1 +UninstallAppTitle=Бетерү +UninstallAppFullTitle=Бетерү — %1 + +; *** Misc. common +InformationTitle=Мәгълүмат +ConfirmTitle=Раслау +ErrorTitle=Хата + +; *** SetupLdr messages +SetupLdrStartupMessage=Программа санакка %1 урнаштырачак, дәвам итәргәме? +LdrCannotCreateTemp=Вакытлы файлны ясап булмый. Урнаштыру туктатылды +LdrCannotExecTemp=Вакытлы каталогта файлны башкарып булмады. Урнаштыру туктатылды + +; *** Startup error messages +LastErrorMessage=%1.%n%nХата %2: %3 +SetupFileMissing=%1 файлы урнаштыру папкасында юк. Зинһар, проблеманы юк итегез яки программаның яңа юрамасын алыгыз. +SetupFileCorrupt=Урнаштыру файллары бозык. Зинһар, программаның яңа күчермәсен алыгыз. +SetupFileCorruptOrWrongVer=Урнаштыру файллары бозык яки бу урнаштыру программасы белән туры килми. Зинһар, проблеманы юк итегез яки программаның яңа юрамасын алыгыз. +InvalidParameter=Боерык юлында мөмкин булмаган шарт:%n%n%1 +SetupAlreadyRunning=Урнаштыру программасы инде кабызылган. +WindowsVersionNotSupported=Программа әлеге санакта урнаштырылган Windows юрамасын куллана алмый. +WindowsServicePackRequired=Программа %1 Service Pack %2 яки югарырак таләп итә. +NotOnThisPlatform=Әлеге программада %1 эшләмәячәк. +OnlyOnThisPlatform=Әлеге программаны %1 гына кабызып була. +OnlyOnTheseArchitectures=Программаны урнаштыру Windows юрамаларының түбәндәге процессор корылмалары өчен генә мөмкин:%n%n%1 +MissingWOW64APIs=Эшләгән Windows юрамасында 64-битлы урнаштыру башкару өчен мөмкинлек юк. Проблеманы юк итү өчен яңарту төргәген урнаштырырга кирәк (Service Pack) %1. +WinVersionTooLowError=Программа %1, %2 юрамасы яки югарырак таләп итә. +WinVersionTooHighError=Программа %1, %2 юрамасы яки югарырак белән урнаштырыла алмый. +AdminPrivilegesRequired=Программаны урнаштыру өчен системага Администратор булып керегез. +PowerUserPrivilegesRequired=Программаны урнаштыру өчен системага Администратор яки «Тәҗрибәле кулланучы» (Power Users) булып керергә кирәк). +SetupAppRunningError=Кабызылган %1 нөсхәсе табылды.%n%nЗинһар, барлык кушымта нөсхәләрен ябыгыз, аннары дәвам итү өчен «Ярар» төймәсенә, яки «Баш тарту» төймәсенә чыгу өчен басыгыз. +UninstallAppRunningError=Бетерүче кабызылган %1 нөсхәсен тапты.%n%nЗинһар, барлык кушымта нөсхәләрен ябыгыз, аннары дәвам итү өчен «Ярар» төймәсенә яки «Баш тарту» төймәсенә чыгу өчен басыгыз. + +; *** Misc. errors +ErrorCreatingDir="%1" папкасын ясап булмый +ErrorTooManyFilesInDir="%1" каталогында файлны ясап булмый, чөнки анда бик күп файл + +; *** Setup common messages +ExitSetupTitle=Урнаштыру программасыннан чыгу +ExitSetupMessage=Урнаштыру тәмамланмады. Чыксагыз, программа урнаштырылмаячак.%n%nУрнаштыруны урнаштыру программасын соңрак кабызып тәмамлый аласыз.%n%nУрнаштыру программасыннан чыгаргамы? +AboutSetupMenuItem=&Программа турында... +AboutSetupTitle=Программа турында +AboutSetupMessage=%1, юрама %2%n%3%n%nСәхифәсе %1:%n%4 +AboutSetupNote= +TranslatorNote=Tatar translation by Irek Khaziev, + +; *** Buttons +ButtonBack=< &Кире +ButtonNext=&Алга > +ButtonInstall=&Урнаштырырга +ButtonOK=Ярар +ButtonCancel=Баш тарту +ButtonYes=Ә&йе +ButtonYesToAll=Ә&йе, барысы өчен +ButtonNo=&Юк +ButtonNoToAll=&Юк, барысы өчен +ButtonFinish=&Тәмамларга +ButtonBrowse=&Күзәтү... +ButtonWizardBrowse=&Күзәтү... +ButtonNewFolder=&Яңа папка + +; *** "Select Language" dialog messages +SelectLanguageTitle=Урнаштыру телен сайлагыз +SelectLanguageLabel=Урнаштыру барышында файдаланучы телне сайлагыз: + +; *** Common wizard text +ClickNext=«Алга» дәвам итү, яки урнаштыру программасыннан чыгу өчен «Баш тарту» төймәсенә басыгыз. +BeveledLabel= +BrowseDialogTitle=Папкаларны күзәтү +BrowseDialogLabel=Исемлектән папканы сайлап, «Ярар» төймәсенә басыгыз. +NewFolderName=Яңа папка + +; *** "Welcome" wizard page +WelcomeLabel1=[name] урнаштыру остасына хуш килдегез +WelcomeLabel2=Программа санакка [name/ver] урнаштырачак.%n%nДәвам итү алдыннан барлык башка эшли торган кушымталарны ябарга кирәк. + +; *** "Password" wizard page +WizardPassword=Серсүз +PasswordLabel1=Программа серсүз белән сакланган. +PasswordLabel3=Зинһар, серсүзне кертегез, аннары «Алга» басыгыз. Серсүзләрне теркәүне саклап кертегез. +PasswordEditLabel=&Серсүз: +IncorrectPassword=Керткән серсүз дөрес түгел. Зинһар, кабатлап карагыз. + +; *** "License Agreement" wizard page +WizardLicense=Хокук килешүе +LicenseLabel=Зинһар, дәвам итү алдыннан түбәндәге мөһим мәгълүматны укып чыгыгыз. +LicenseLabel3=Зинһар, Хокук Килешүен укып чыгыгыз. Дәвам итү алдыннан аның шартларын кабул итегез. +LicenseAccepted=&Килешү шартларын кабул итәм +LicenseNotAccepted=&Килешү шартларын кабул итмим + +; *** "Information" wizard pages +WizardInfoBefore=Мәгълүмат +InfoBeforeLabel=Зинһар, дәвам итү алдыннан түбәндәге мөһим мәгълүматны укып чыгыгыз. +InfoBeforeClickLabel=Урнаштыруны дәвам итәргә әзер булгач, «Алга» басыгыз. +WizardInfoAfter=Мәгълүмат +InfoAfterLabel=Зинһар, дәвам итү алдыннан түбәндәге мөһим мәгълүматны укып чыгыгыз. +InfoAfterClickLabel=Урнаштыруны дәвам итәргә әзер булгач, «Алга» басыгыз. + +; *** "User Information" wizard page +WizardUserInfo=Кулланучы турында +UserInfoDesc=Зинһар, үзегез турында мәгълүмат кертегез. +UserInfoName=&Кулланучы исеме һәм фамилиясе: +UserInfoOrg=&Оешма: +UserInfoSerial=&Серия саны: +UserInfoNameRequired=Сез исем кертергә тиеш. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Урнаштыру папкасын сайлау +SelectDirDesc=[name] кайсы папкага урнаштырырга телисез? +SelectDirLabel3=Программа [name] түбәндәге папкага урнаштырылачак. +SelectDirBrowseLabel=Дәвам итү өчен «Алга» басыгыз. Башка папканы сайларга теләсәгез «Күзәтү» сайлагыз. +DiskSpaceMBLabel=Кимендә [mb] Мб тәлинкәдә буш урын кирәк. +CannotInstallToNetworkDrive=Челтәр тәлинкәсенә урнаштыруны башкарып булмый. +CannotInstallToUNCPath=UNC-юл буенча папкага урнаштырып булмый. +InvalidPath=Тәлинкә хәрефе белән тулы юлны күрсәтегез мәсәлән:%n%nC:\APP%n%nяки формада UNC:%n%n\\сервер_исеме\чыганак_исеме +InvalidDrive=Сайлаган тәлинкә яки челтәр юлы юк яки тыелган. Зинһар, башканы сайлагыз. +DiskSpaceWarningTitle=Тәлинкәдә урын җитми +DiskSpaceWarning=Урнаштыру өчен %1 Кб буш урын кирәк, ә сайлаган тәлинкәдә %2 Кб кына бар.%n%nШуңа карамастан урнаштыруны дәвам итәргәме? +DirNameTooLong=Папка исеме яки аңа юл яраган озынлыкны арттыра. +InvalidDirName=Күрсәтелгән папка исеме тыелган. +BadDirName32=Папка исемендә түбәндәге билгеләр була алмый: %n%n%1 +DirExistsTitle=Папка бар +DirExists=Папка%n%n%1%n%бар. Барыбер шул папкага урнаштырыргамы? +DirDoesntExistTitle=Папка юк +DirDoesntExist=Папка%n%n%1%n%nюк. Аны ясаргамы? + +; *** "Select Components" wizard page +WizardSelectComponents=Кисәкләрне сайлау +SelectComponentsDesc=Нинди кисәкләрне урнаштырырга? +SelectComponentsLabel2=Урнаштырырга теләгән кисәкләрне сайлагыз, урнаштырырга кирәк булмаган кисәкләрдән тамганы алыгыз. Дәвам итәргә әзер булгач, «Алга» басыгыз. +FullInstallation=Тулы урнаштыру +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Тыгыз урнаштыру +CustomInstallation=Сайлаулы урнаштыру +NoUninstallWarningTitle=Урнаштырылган кисәкләр +NoUninstallWarning=Урнаштыру программасы санакта түбәндәге урнаштырылган кисәкләрне тапты:%n%n%1%n%nКисәкләрне сайламау, аларны бетермәячәк.%n%nДәвам итәргәме? +ComponentSize1=%1 Кб +ComponentSize2=%1 Мб +ComponentsDiskSpaceMBLabel=Хәзерге сайлау тәлинкәдә [mb] Мб таләп итә + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Өстәмә йомышларны сайлагыз +SelectTasksDesc=Нинди өстәмә йомышлар башкарырга кирәк? +SelectTasksLabel2=[name] урнаштыруы барышында эшләнергә тиеш өстәмә йомышларны сайлагыз, шуннан соң «Алга» басыгыз: + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=«Башлау» менюсында папканы сайлагыз +SelectStartMenuFolderDesc=Урнаштыру программасы ярлыкларны кайда сакларга тиеш? +SelectStartMenuFolderLabel3=Кушымта «Башлау» менюсының түбәндәге папкасында ярлыклар ясаячак. +SelectStartMenuFolderBrowseLabel=Дәвам итү өчен «Алга» басыгыз. Башка папканы сайларга теләсәгез «Күзәтү» сайлагыз. +MustEnterGroupName=Папка исемен кертегез. +GroupNameTooLong=Төркем папкасы исеме яки аңа юл рөхсәт ителгән озынлыкны арттыра. +InvalidGroupName=Күрсәтелгән папка исеме тыелган. +BadGroupName=Папкалар исемендә түбәндәге билгеләр була алмый:%n%n%1 +NoProgramGroupCheck2=«&Башлау» менюсында папка ясамаска + +; *** "Ready to Install" wizard page +WizardReady=Барысы урнаштыруга әзер +ReadyLabel1=Урнаштыру программасы санакка [name] урнаштырырга әзер. +ReadyLabel2a=«Урнаштырырга» дәвам итү, яки урнаштыру рәвешләрен карарга яки үзгәртергә теләсәгез «Артка» басыгыз. +ReadyLabel2b=Дәвам итү өчен «Урнаштырырга» басыгыз. +ReadyMemoUserInfo=Кулланучы турында: +ReadyMemoDir=Урнаштыру папкасы: +ReadyMemoType=Урнаштыру төре: +ReadyMemoComponents=Сайланган кисәкләр: +ReadyMemoGroup=«Башлау» менюсында папка: +ReadyMemoTasks=Өстәмә йомышлар: + +; *** "Preparing to Install" wizard page +WizardPreparing=Урнаштыруга әзерләнү +PreparingDesc=Урнаштыру программасы санакка [name] урнаштыруына әзерләнә. +PreviousInstallNotCompleted=Алдагы программа урнаштыруы яки бетерүе тәмамланмады. Урнаштыруны тәмамлау өчен санакны киредән кабызырга кирәк.%n%nШуннан соң Урнаштыру программасын [name] урнаштыруын тәмамлау өчен яңадан кабызыгыз. +CannotContinue=Урнаштыруны дәвам итеп булмый. Программадан чыгу өчен «Баш тарту» төймәсенә басыгыз. +ApplicationsFound=Түбәндәге кушымталар урнаштыру программасы яңартырга тиеш булган файлларны куллана. Урнаштыру программасына әлеге кушымталарны үзе ябарга рөхсәт бирергә кирәк. +ApplicationsFound2=Түбәндәге кушымталар урнаштыру программасы яңартырга тиеш булган файлларны куллана. Урнаштыру программасына әлеге кушымталарны үзе ябарга рөхсәт бирергә кирәк. Урнаштыру тәмамлангач, урнаштыру программасы яңадан аларны кабызачак. +CloseApplications=&Автоматик рәвештә әлеге кушымталарны ябарга +DontCloseApplications=Ә&леге кушымталарны ябмаска +ErrorCloseApplications=Урнаштыру программасы барлык кушымталарны үзе яба алмады. Яңартылачак файлларны кулланган барлык кушымталарны урнаштыру алдыннан ябарга кирәк. + +; *** "Installing" wizard page +WizardInstalling=Урнаштыру... +InstallingLabel=Зинһар, [name] санакка урнаштырылганын көтегез. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=[name] урнаштыру остасын тәмамлау +FinishedLabelNoIcons=[name] программасы санакка урнаштырылды. +FinishedLabel=[name] программасы санакка урнаштырылды. Кушымтаны туры килүче билгечек аша кабызып була. +ClickFinish=Урнаштыру программасыннан чыгу өчен «Тәмамларга» төймәсенә басыгыз. +FinishedRestartLabel=[name] урнаштыруын тәмамлау өчен санакны киредән кабызырга кирәк. Хәзер аны эшләргәме? +FinishedRestartMessage=[name] урнаштыруын тәмамлау өчен санакны киредән кабызырга кирәк.%n%nХәзер аны эшләргәме? +ShowReadmeCheck=Мин README файлын карарга телим +YesRadio=Ә&йе, санакны хәзер киредән кабызырга +NoRadio=&Юк, кабат кабызуны соңрак башкарам +; used for example as 'Run MyProg.exe' +RunEntryExec=%1 кабызырга +; used for example as 'View Readme.txt' +RunEntryShellExec=%1 карарга + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Түбәндәге тәлинкәне кертергә кирәк +SelectDiskLabel2=Зинһар, %1 тәлинкәсен кертегез һәм «Ярар» төймәсенә басыгыз.%n%nБу тәлинкә файллары, түбәндә күрсәтелгән папкаларда табылмаса, дөрес юлны кертегез яки «Күзәтү» төймәсенә басыгыз. +PathLabel=&Юл: +FileNotInDir2="%1" файлы "%2" табылмады. Зинһар, дөрес тәлинкәне кертегез яки башка папканы сайлагыз. +SelectDirectoryLabel=Зинһар, түбәндәге тәлинкәгә юлны күрсәтегез. + +; *** Installation phase messages +SetupAborted=Урнаштыру тәмамланмады.%n%nЗинһар, проблеманы юк итеп, урнаштыруны яңадан кабызыгыз. +EntryAbortRetryIgnore=«Кабатлау» төймәсенә кабатлау өчен, «Үткәрергә» файлны үткәрү өчен (тәкъдим ителми) яки «Баш тарту» төймәсенә урнаштырудан баш тарту өчен басыгыз. + +; *** Installation status messages +StatusClosingApplications=Кушымталарны ябу... +StatusCreateDirs=Папкаларны ясау... +StatusExtractFiles=Файлларны чишү... +StatusCreateIcons=Программа ярлыкларын ясау... +StatusCreateIniEntries=INI-файлларны ясау... +StatusCreateRegistryEntries=Исемлек язмаларын ясау... +StatusRegisterFiles=Файлларны теркәү +StatusSavingUninstall=Бетерү өчен мәгълүматны саклау... +StatusRunProgram=Урнаштыруны тәмамлау... +StatusRestartingApplications=Кушымталарны киредән кабызу... +StatusRollback=Үзгәртүләрне артка чигү... + +; *** Misc. errors +ErrorInternal2=Эчке хата: %1 +ErrorFunctionFailedNoCode=%1: тоткарлык +ErrorFunctionFailed=%1: тоткарлык; коды %2 +ErrorFunctionFailedWithMessage=1: тоткарлык; коды %2.%n%3 +ErrorExecutingProgram=Файлны башкарып булмый:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Исемлек ачкычын ачуда хата:%n%1\%2 +ErrorRegCreateKey=Исемлек ачкычын ясауда хата:%n%1\%2 +ErrorRegWriteKey=Исемлек ачкычына яздыруда хата:%n%1\%2 + +; *** INI errors +ErrorIniEntry=INI-файлында "%1" язма ясауда хата. + +; *** File copying errors +FileAbortRetryIgnore=«Кабатлау» төймәсенә кабатлау өчен, «Үткәрергә» файлны үткәрү өчен (тәкъдим ителми) яки «Баш тарту» төймәсенә чыгу өчен басыгыз. +FileAbortRetryIgnore2=«Кабатлау» төймәсенә кабатлау өчен, «Үткәрергә» хатаны исәпләмәү өчен (тәкъдим ителми) яки «Баш тарту» төймәсенә чыгу өчен басыгыз. +SourceIsCorrupted=Башлангыч файл бозык +SourceDoesntExist=Башлангыч "%1" файлы юк +ExistingFileReadOnly=Булган файл «уку өчен генә» дип билгеләнгән.%n%n«Кабатлау»төймәсенә «уку өчен генә» аергычны бетерү өчен басыгыз, «Үткәрергә» - файлны үткәрү өчен яки «Баш тарту» төймәсенә чыгу өчен басыгыз. +ErrorReadingExistingDest=Булган файлны укуда хата килеп чыкты: +FileExists=Файл инде бар.%n%nАны кабат яздырыргамы? +ExistingFileNewer=Булган файл урнаштырыла торган файлдан яңарак. Булган файлны сакларга кирәк.%n%nБулган файлны сакларгамы? +ErrorChangingAttr=Булган файлның аергычларын үзгәртүдә хата килеп чыкты: +ErrorCreatingTemp=Билгеләнгән папкада файлны ясауда хата килеп чыкты: +ErrorReadingSource=Башлангыч файлны укуда хата килеп чыкты: +ErrorCopying=Файл күчермәсен ясауда хата килеп чыкты: +ErrorReplacingExistingFile=Булган файлны алмаштыруда хата килеп чыкты: +ErrorRestartReplace=RestartReplace хатасы: +ErrorRenamingTemp=Башкару папкасында файлның исемен алмаштыруда хата килеп чыкты: +ErrorRegisterServer=DLL/OCX теркәп булмый: %1 +ErrorRegSvr32Failed=RegSvr32 башкаруда хата, кире кайту коды %1 +ErrorRegisterTypeLib=Төрләр китапханәсен йөкләп булмый (Type Library): %1 + +; *** Post-installation errors +ErrorOpeningReadme=README файлны ачуда хата килеп чыкты. +ErrorRestartingComputer=Урнаштыру программасы санакны киредән кабыза алмады. Зинһар, аны үзегез башкарыгыз. + +; *** Uninstaller messages +UninstallNotFound="%1" файлы юк, бетерү мөмкин түгел. +UninstallOpenError="%1" файлын ачып булмый. Бетерү мөмкин түгел +UninstallUnsupportedVer="%1" бетерү өчен беркетмә файлы бу бетерү программа юрамасы белән билгеләнмәде. Бетерү мөмкин түгел +UninstallUnknownEntry=Бетерү файлының беркетмәсендә билгесез (%1) ноктасы килеп чыкты +ConfirmUninstall=%1 һәм аның барлык кисәкләрен бетерергәме? +UninstallOnlyOnWin64=Программаны 64-битлы Windows мохитында генә бетереп була. +OnlyAdminCanUninstall=Программа администратор өстенлекләре булган кулланучы белән генә бетерелә ала. +UninstallStatusLabel=Зинһар, көтеп торыгыз %1 санактан бетерелүен. +UninstalledAll=Программа %1 санактан тулысынча бетерелде. +UninstalledMost=%1 бетерүе тәмамланды.%n%nКайбер кисәкләрне бетереп булмады. Аларны үзегез бетерә аласыз. +UninstalledAndNeedsRestart=%1 бетерүен тәмамлау өчен санакны киредән кабызырга кирәк.%n%nХәзер башкарыргамы? +UninstallDataCorrupted="%1" файлы бозык. Бетерү мөмкин түгел. + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Бергә файдаланучы файлны бетерергәме? +ConfirmDeleteSharedFile2=Система киләсе бергә файдаланучы файл башка бернинди кушымта белән дә кулланмаганын күрсәтә. Файлны бетерергәме?%n%nБерәр программа һаман әлеге файлны файдаланса, һәм ул бетерелсә, алар дөрес эшли алмаячак. Шикләнсәгез, «Юк» төймәсен сайлагыз. Калдырылган файл системага зарар китермәячәк. +SharedFileNameLabel=Файл исеме: +SharedFileLocationLabel=Урнашуы: +WizardUninstalling=Бетерү халәте +StatusUninstalling=%1 бетерүе... + + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Урнаштыру %1. +ShutdownBlockReasonUninstallingApp=Бетерү %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1, %2 юрамасы +AdditionalIcons=Өстәмә билгечекләр: +CreateDesktopIcon=&Эш өстәлендә билгечек ясарга +CreateQuickLaunchIcon=&Тиз кабызу аслыгында билгечек ясарга +ProgramOnTheWeb=%1 сәхифәсе +UninstallProgram=%1 бетерүе +LaunchProgram=%1 кабызырга +AssocFileExtension=%2 &киңәйтүле файллар белән %1 ялгаргамы? +AssocingFileExtension=%1 %2 файллары белән ялгау... +AutoStartProgramGroupDescription=Үзе кабызу: +AutoStartProgram=Үзе кабызу %1 +AddonHostProgramNotFound=%1 күрсәткән папкада табылмады.%n%nБарыбер дәвам итәргәме? diff --git a/Files/Languages/Unofficial/Thai.isl b/Files/Languages/Unofficial/Thai.isl new file mode 100644 index 00000000..bb093c0f --- /dev/null +++ b/Files/Languages/Unofficial/Thai.isl @@ -0,0 +1,386 @@ +; Nathawat Chalapinyo +; Nathawat-LTSC@outlook.co.th +; *** Inno Setup version 6.1.0+ Thai messages *** +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Thai +LanguageID=$041E +LanguageCodePage=874 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=การติดตั้ง +SetupWindowTitle=การติดตั้ง - %1 +UninstallAppTitle=ถอนการติดตั้ง +UninstallAppFullTitle=%1 ถอนการติดตั้ง + +; *** Misc. common +InformationTitle=คำอธิบาย +ConfirmTitle=ยืนยัน +ErrorTitle=ผิดพลาด + +; *** SetupLdr messages +SetupLdrStartupMessage=กระบวนการนี้จะเริ่มการติดตั้ง %1. คุณต้องการติดตั้งหรือไม่? +LdrCannotCreateTemp=ไม่สามารถ สร้างโฟลเดอร์ข้อมูลชั่วคราวได้ การติดตั้งถูกยกเลิก +LdrCannotExecTemp=ไม่สามารถ ใช้ไฟล์ใน ที่เก็บข้อมูลชั่วคราวได้ การติดตั้งถูกยกเลิก +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nข้อผิดพลาด %2: %3 +SetupFileMissing=ไฟล์ %1 ในโฟลเดอร์ที่ติดตั้งไม่สมบูรณ์ โปรดตรวจสอบไฟล์การติดตั้งแล้วลองอีกครั้ง +SetupFileCorrupt=ไฟล์การติดตั้งเสียหาย โปรดตรวจสอบไฟล์การติดตั้งแล้วลองอีกครั้ง +SetupFileCorruptOrWrongVer=เวอร์ชั่นไฟล์การติดตั้งไม่ถูกต้องหรือเข้ากันไม่ได้ โปรดตรวจสอบไฟล์การติดตั้งแล้วลองอีกครั้ง +InvalidParameter=พารามิเตอร์ผิดพลาดที่ชุดคำสั่ง:%n%n%1 +SetupAlreadyRunning=การติดตั้งกำลังทำงานอยู่ +WindowsVersionNotSupported=โปรแกรมไม่รองรับเวอร์ชั่นของวินโดวน์ที่ใช้อยู่ +WindowsServicePackRequired=โปรแกรมต้องการ %1 Service Pack %2 หรือใหม่กว่า. +NotOnThisPlatform=โปรแกรมนี้ ไม่ทำงานบน %1. +OnlyOnThisPlatform=โปรแกรมนี้ ต้องทำงานบน %1. +OnlyOnTheseArchitectures=โปรแกรมนี้สามารถติดตั้งบน วินโดวน์รุ่นที่ออกแบบมาสำหรับสถาปัตยกรรมต่อไปนี้:%n%n%1 +WinVersionTooLowError=โปรแกรมนี้ต้องการ %1 เวอร์ชั่น %2 หรือใหม่กว่า +WinVersionTooHighError=โปรแกรมนี้ไม่สามารถติดตั้งบน %1 เวอร์ชั่น %2 หรือใหม่กว่า +AdminPrivilegesRequired=คุณต้องใช้ผู้ใช้ของผู้ดูแลระบบ เช่น administrator เมื่อติดตั้งโปรแกรมนี้ +PowerUserPrivilegesRequired=คุณต้องเข้าสู่ระบบ ด้วยผู้ใช้ผู้ดูแลระบบ เช่น administrator หรือกลุ่มผู้ใช้งาน Power Users เมื่อติดตั้งโปรแกรมนี้ +SetupAppRunningError=โปรแกรมติดตั้งพบว่า %1 กำลังทำงานอยู่%n%nโปรดปิดโปรแกรม และกด ตกลง เพื่อดำเนินการต่อ หรือ ยกเลิก เพื่อจบการทำงาน +UninstallAppRunningError=โปรแกรมถอนการติดตั้งพบว่า %1 กำลังทำงานอยู่%n%nโปรดปิดโปรแกรม และกด ตกลง เพื่อดำเนินการต่อ หรือ ยกเลิก เพื่อจบการทำงาน + +; *** Startup questions +PrivilegesRequiredOverrideTitle=เลือกโหมดการติดตั้ง +PrivilegesRequiredOverrideInstruction=เลือกโหมดการติดตั้ง +PrivilegesRequiredOverrideText1=%1 สามารถติดตั้งสำหรับผู้ใช้ทุกคน (ต้องการสิทธิ์ ระดับผู้ดูแลระบบ), หรือเฉพาะคุณเท่านั้น +PrivilegesRequiredOverrideText2=%1 สามารถติดตั้งสำหรับคุณเท่านั้น หรือสำหรับผู้ใช้ทุกคน (ต้องการสิทธิ์ ระดับผู้ดูแลระบบ) +PrivilegesRequiredOverrideAllUsers=ติดตั้งสำหรับ &ผู้ใช้ทั้งหมด +PrivilegesRequiredOverrideAllUsersRecommended=ติดตั้งสำหรับ &ผู้ใช้ทั้งหมด (แนะนำ) +PrivilegesRequiredOverrideCurrentUser=ติดตั้งสำหรับ &ฉันเท่านั้น +PrivilegesRequiredOverrideCurrentUserRecommended=ติดตั้งสำหรับ &ฉันเท่านั้น (แนะนำ) + +; *** Misc. errors +ErrorCreatingDir=โปรแกรมติดตั้งไม่สามารถสร้างโฟลเดอร์ "%1" ได้ +ErrorTooManyFilesInDir=ไม่สามารถสร้างไฟล์ในโฟลเดอร์ "%1" เพราะมีไฟล์จำนวนมากเกินไป + +; *** Setup common messages +ExitSetupTitle=ออกจาก การติดตั้ง +ExitSetupMessage=การติดตั้งยังไม่สมบูรณ์ ถ้าคุณจบการทำงานในเวลานี้ โปรแกรมจะไม่ถูกติดตั้ง%n%nคุณอาจต้องทำการติดตั้งโปรแกรมใหม่อีกครั้ง เพื่อให้การติดตั้งสมบูรณ์%n%nคุณต้องการจบการติดตั้ง? +AboutSetupMenuItem=&เกี่ยวกับ การติดตั้ง... +AboutSetupTitle=เกี่ยวกับ การติดตั้ง +AboutSetupMessage=%1 เวอร์ชั่น %2%n%3%n%n%1 โฮมเพจ:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< &ย้อนกลับ +ButtonNext=&ทำต่อ > +ButtonInstall=&ติดตั้ง +ButtonOK=ตกลง +ButtonCancel=ยกเลิก +ButtonYes=&ใช่ +ButtonYesToAll=ใช่สำหรับ &ทั้งหมด +ButtonNo=&ไม่ +ButtonNoToAll=ไม่สำหรับ &ทั้งหมด +ButtonFinish=&เสร็จ +ButtonBrowse=&เรียกดู... +ButtonWizardBrowse=&เรียกดู... +ButtonNewFolder=&สร้างโฟลเดอร์ใหม่ + +; *** "Select Language" dialog messages +SelectLanguageTitle=เลือกภาษาที่ต้องการ +SelectLanguageLabel=เลือกภาษา ที่ต้องการใช้ระหว่างการติดตั้ง + +; *** Common wizard text +ClickNext=กด ทำต่อ เพื่อดำเนินการต่อ หรือ กด ยกเลิก เพื่อจบการทำงาน +BeveledLabel= +BrowseDialogTitle=เลือกโฟลเดอร์ +BrowseDialogLabel=เลือกโฟลเดอร์ในรายการด้างล่างจากนั้น ให้กด ตกลง +NewFolderName=โฟลเดอร์ใหม่ + +; *** "Welcome" wizard page +WelcomeLabel1=ยินดีต้อนรับสู่ [name] โปรแกรมติดตั้ง +WelcomeLabel2=สิ่งนี้จะติดตั้ง [name/ver] บนคอมพิวเตอร์ของคุณ%n%nขอแนะนำให้คุณปิดแอปพลิเคชันอื่นๆ ทั้งหมดก่อนดำเนินการต่อ + +; *** "Password" wizard page +WizardPassword=รหัสผ่าน +PasswordLabel1=การติดตั้งนี้ ถูกป้องกันด้วยรหัสผ่าน +PasswordLabel3=กรุณาใส่รหัสผ่านที่ใช้ติดตั้งโปรแกรม จากนั้น ให้กด ทำต่อ เพื่อทำงาน (รหัสผ่านต้องตรงตามตัวพิมพ์เล็กและใหญ่) +PasswordEditLabel=&รหัสผ่าน: +IncorrectPassword=รหัสผ่านที่คุณใส่ไม่ถูกต้อง กรุณาลองอีกครั้ง + +; *** "License Agreement" wizard page +WizardLicense=ข้อตกลง +LicenseLabel=โปรดอ่านข้อมูลสำคัญต่อไปนี้ ก่อนดำเนินการต่อ +LicenseLabel3=โปรดอ่านข้อตกลงต่อไปนี้ คุณต้องยอมรับเงื่อนไขของข้อตกลงนี้ก่อนที่จะดำเนินการติดตั้งต่อไป +LicenseAccepted=ฉัน &ยอมรับ ข้อตกลง +LicenseNotAccepted=ฉัน &ไม่ยอมรับ ข้อตกลง + +; *** "Information" wizard pages +WizardInfoBefore=คำอธิบาย +InfoBeforeLabel=โปรดอ่านข้อมูลสำคัญ ก่อนดำเนินการต่อ +InfoBeforeClickLabel=เมื่อคุณพร้อมดำเนินการติดตั้งต่อ ให้กด ทำต่อ +WizardInfoAfter=คำอธิบาย +InfoAfterLabel=โปรดอ่านข้อมูลสำคัญ ก่อนดำเนินการต่อ +InfoAfterClickLabel=เมื่อคุณพร้อมดำเนินการติดตั้งต่อ ให้กด ทำต่อ + +; *** "User Information" wizard page +WizardUserInfo=ข้อมูล ผู้ใช้ +UserInfoDesc=โปรด กรอกข้อมูลของคุณ +UserInfoName=&ชื่อผู้ใช้: +UserInfoOrg=&หน่วยงาน: +UserInfoSerial=&หมายเลขซีเรียล: +UserInfoNameRequired=คุณต้องใส่ชื่อ + +; *** "Select Destination Location" wizard page +WizardSelectDir=เลือกตำแหน่งปลายทาง +SelectDirDesc=ควรติดตั้ง [name] ที่ไหน? +SelectDirLabel3=โปรแกรมติดตั้งจะติดตั้ง [name] ลงในโฟลเดอร์ต่อไปนี้ +SelectDirBrowseLabel=หากต้องการดำเนินการต่อ ให้กด ถัดไป หากคุณต้องการเลือกโฟลเดอร์อื่น ให้กด เรียกดู +DiskSpaceGBLabel=ต้องการพื้นที่ว่างในดิสก์อย่างน้อย [gb] GB +DiskSpaceMBLabel=ต้องการพื้นที่ว่างในดิสก์อย่างน้อย [mb] MB +CannotInstallToNetworkDrive=โปรแกรมติดตั้งไม่สามารถติดตั้งไปยังไดร์ฟเครือข่ายได้ +CannotInstallToUNCPath=โปรแกรมติดตั้งไม่สามารถติดตั้งไปยังตำแหน่ง UNC ได้ +InvalidPath=คุณต้องป้อนเส้นทางแบบเต็มด้วยอักษรระบุไดรฟ์ ตัวอย่างเช่น:%n%nC:\APP%n%nหรือเส้นทาง UNC แบบ:%n%n\\server\share +InvalidDrive=ไดร์ฟหรือการแชร์ที่คุณเลือกไม่มีอยู่ หรือไม่สามารถเข้าถึงได้ โปรดเลือกรายการอื่น +DiskSpaceWarningTitle=พื้นที่ดิสก์ไม่เพียงพอ +DiskSpaceWarning=การติดตั้งต้องการอย่างน้อย %1 KB ในการติดตั้ง แต่ไดร์ฟที่เลือกมี %2 KB เท่านั้น%n%nคุณต้องการดำเนินการต่อหรือไม่? +DirNameTooLong=ชื่อโฟลเดอร์หรือเส้นทางยาวเกินไป +InvalidDirName=ชื่อโฟลเดอร์ไม่ถูกต้อง +BadDirName32=ชื่อโฟลเดอร์ต้องไม่มีอักขระใดๆ ต่อไปนี้:%n%n%1 +DirExistsTitle=มีโฟลเดอร์อยู่แล้ว +DirExists=โฟลเดอร์:%n%n%1%n%nมีอยู่แล้ว คุณต้องการติดตั้งลงในโฟลเดอร์นี้เลยหรือไม่? +DirDoesntExistTitle=ไม่พบโฟลเดอร์ +DirDoesntExist=โฟลเดอร์:%n%n%1%n%nไม่มีอยู่ในขณะนี้ คุณต้องการสร้างโฟลเดอร์นี้เลยหรือไม่? + +; *** "Select Components" wizard page +WizardSelectComponents=เลือกส่วนประกอบ +SelectComponentsDesc=ส่วนประกอบไหนที่คุณต้องการติดตั้ง? +SelectComponentsLabel2=ทำเครื่องหมายเลือกส่วนประกอบที่คุณต้องการติดตั้ง; ลบเครื่องหมายส่วนประกอบที่คุณไม่ต้องการ กดทำต่อ เมื่อคุณเลือกเสร็จแล้ว +FullInstallation=ติดตั้งทุกอย่าง +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=ติดตั้งน้อยที่สุด +CustomInstallation=กำหนดส่วนประกอบเอง +NoUninstallWarningTitle=ส่วนประกอบเดิมมีอยู่แล้ว +NoUninstallWarning=โปรแกรมติดตั้งตรวจพบว่าส่วนประกอบต่อไปนี้ได้รับการติดตั้งบนคอมพิวเตอร์ของคุณแล้ว:%n%n%1%n%nการยกเลิกการเลือกคอมโพเนนต์เหล่านี้จะไม่เป็นการถอนการติดตั้ง%n%nคุณต้องการดำเนินการต่อหรือไม่? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=การเลือกปัจจุบันต้องการพื้นที่ดิสก์อย่างน้อย [gb] GB +ComponentsDiskSpaceMBLabel=การเลือกปัจจุบันต้องการพื้นที่ดิสก์อย่างน้อย [mb] MB + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=เลือกการทำงานเพิ่มเติม +SelectTasksDesc=กำหนดการทำงานเพิ่มเติม +SelectTasksLabel2=เลือกการทำงานเพิ่มเติม เพื่อการติดตั้งโปรแกรม [name] และ กด ทำต่อ + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=เลือกโฟลเดอร์เมนูเริ่ม +SelectStartMenuFolderDesc=โปรแกรมติดตั้ง ควรวางทางลัดของโปรแกรมไว้ที่ไหน? +SelectStartMenuFolderLabel3=โปรแกรมติดตั้ง จะสร้างทางลัดของโปรแกรมในโฟลเดอร์ Start Menu ต่อไปนี้ +SelectStartMenuFolderBrowseLabel=เพื่อดำเนินการต่อ กด ต่อไป หากคุณต้องการเลือกโฟลเดอร์อื่น ให้กด เรียกดู +MustEnterGroupName=คุณต้องใส่ชื่อโฟลเดอร์ +GroupNameTooLong=ชื่อโฟลเดอร์หรือเส้นทางยาวเกินไป +InvalidGroupName=ชื่อโฟลเดอร์ไม่ถูกต้อง +BadGroupName=ชื่อโฟลเดอร์ต้องไม่มีอักขระใดๆ ต่อไปนี้:%n%n%1 +NoProgramGroupCheck2=&ไม่ต้องสร้างโฟลเดอร์เมนูเริ่ม + +; *** "Ready to Install" wizard page +WizardReady=พร้อมที่จะติดตั้ง +ReadyLabel1=โปรแกรมติดตั้งพร้อมที่จะเริ่มติดตั้ง [name] บนคอมพิวเตอร์ของคุณแล้ว +ReadyLabel2a=กด ติดตั้ง เพื่อดำเนินการติดตั้งต่อ หรือกด ย้อนกลับ หากคุณต้องการตรวจสอบหรือเปลี่ยนแปลงการตั้งค่าใดๆ +ReadyLabel2b=กด ติดตั้ง เพื่อดำเนินการติดตั้งต่อ +ReadyMemoUserInfo=ข้อมูลผู้ใช้: +ReadyMemoDir=ตำแหน่งปลายทาง: +ReadyMemoType=ประเภทการติดตั้ง: +ReadyMemoComponents=ส่วนประกอบที่เลือก: +ReadyMemoGroup=โฟลเดอร์เมนูเริ่ม: +ReadyMemoTasks=งานเพิ่มเติม: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=กำลังดาวน์โหลดไฟล์เพิ่มเติม... +ButtonStopDownload=&หยุดการดาวน์โหลด +StopDownload=คุณแน่ใจหรือไม่ว่าต้องการหยุดการดาวน์โหลด? +ErrorDownloadAborted=การดาวน์โหลดถูกยกเลิก +ErrorDownloadFailed=การดาวน์โหลดล้มเหลว: %1 %2 +ErrorDownloadSizeFailed=การรับขนาดล้มเหลว: %1 %2 +ErrorFileHash1=แฮชไฟล์ล้มเหลว: %1 +ErrorFileHash2=แฮชไฟล์ไม่ถูกต้อง: คาดว่าเป็น %1, พบ %2 +ErrorProgress=ความคืบหน้าไม่ถูกต้อง: %1 จาก %2 +ErrorFileSize=ขนาดไฟล์ไม่ถูกต้อง: คาดไว้ %1, พบ %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=กำลังเตรียมการติดตั้ง +PreparingDesc=โปรแกรมติดตั้ง กำลังเตรียมการติดตั้ง [name] บนคอมพิวเตอร์ของคุณ +PreviousInstallNotCompleted=การติดตั้ง/การลบโปรแกรมก่อนหน้านี้ไม่เสร็จสมบูรณ์ คุณจะต้องรีสตาร์ทคอมพิวเตอร์เพื่อทำการติดตั้งให้เสร็จสมบูรณ์ %n%nหลังจากรีสตาร์ทคอมพิวเตอร์แล้ว ให้เรียกใช้โปรแกรมติดตั้งอีกครั้งเพื่อทำการติดตั้ง [name] ให้เสร็จสมบูรณ์ +CannotContinue=การติดตั้งไม่สามารถดำเนินการต่อได้ โปรดกดยกเลิก เพื่อออก +ApplicationsFound=แอปพลิเคชันต่อไปนี้กำลังใช้ไฟล์ที่ต้องอัปเดตโดยโปรแกรมติดตั้ง ขอแนะนำให้คุณอนุญาตให้โปรแกรมติดตั้งปิดแอปพลิเคชันเหล่านี้โดยอัตโนมัติ +ApplicationsFound2=แอปพลิเคชันต่อไปนี้กำลังใช้ไฟล์ที่ต้องอัปเดตโดยโปรแกรมติดตั้ง ขอแนะนำให้คุณอนุญาตให้โปรแกรมติดตั้งปิดแอปพลิเคชันเหล่านี้โดยอัตโนมัติ หลังจากการติดตั้งเสร็จสิ้น โปรแกรมติดตั้งจะพยายามรีสตาร์ทแอปพลิเคชัน +CloseApplications=&ปิดแอปพลิเคชันโดยอัตโนมัติ +DontCloseApplications=&อย่าปิดแอปพลิเคชัน +ErrorCloseApplications=โปรแกรมติดตั้งไม่สามารถปิดแอปพลิเคชันทั้งหมดโดยอัตโนมัติ ขอแนะนำให้คุณปิดแอปพลิเคชันทั้งหมดโดยใช้ไฟล์ที่ต้องอัปเดตโดยโปรแกรมติดตั้งก่อนดำเนินการต่อ +PrepareToInstallNeedsRestart=การติดตั้งต้องรีสตาร์ทเครื่องคอมพิวเตอร์ของคุณ หลังจากรีสตาร์ทคอมพิวเตอร์แล้ว ให้เรียกใช้โปรแกรมติดตั้งอีกครั้งเพื่อทำการติดตั้ง [name] ให้เสร็จสมบูรณ์%n%nคุณต้องการเริ่มระบบใหม่เดี๋ยวนี้หรือไม่ + +; *** "Installing" wizard page +WizardInstalling=กำลังติดตั้ง +InstallingLabel=โปรดรอสักครู่ในขณะที่โปรแกรมติดตั้งติดตั้ง [name] บนคอมพิวเตอร์ของคุณ + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=การติดตั้ง [name] เสร็จสมบูรณ์ +FinishedLabelNoIcons=การติดตั้งโปรแกรม [name] บนคอมพิวเตอร์ เสร็จสมบูรณ์ +FinishedLabel=การติดตั้งโปรแกรม [name] บนคอมพิวเตอร์เสร็จสมบูรณ์ แอปพลิเคชันอาจเปิดใช้งานโดยเลือกทางลัดที่ติดตั้งไว้ +ClickFinish=กด เสร็จ เพื่อจบการติดตั้ง +FinishedRestartLabel=เพื่อให้การติดตั้ง [name] เสร็จสมบูรณ์ โปรแกรมติดตั้งต้องเริ่มต้นระบบเครื่องคอมพิวเตอร์ของคุณใหม่ คุณต้องการเริ่มต้นใหม่ตอนนี้หรือไม่? +FinishedRestartMessage=เพื่อให้การติดตั้ง [name] เสร็จสิ้น โปรแกรมติดตั้งจะต้องเริ่มต้นะบบเครื่องคอมพิวเตอร์ของคุณใหม่ %n%nคุณต้องการเริ่มระบบใหม่เดี๋ยวนี้หรือไม่? +ShowReadmeCheck=ใช่ ฉันต้องการดูไฟล์ README +YesRadio=&ใช่ เริ่มต้นระบบคอมพิวเตอร์ใหม่ทันที +NoRadio=&ไม่ ฉันจะเริ่มต้นระบบคอมพิวเตอร์ในภายหลัง +; used for example as 'Run MyProg.exe' +RunEntryExec=เรียกใช้ %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=ดู %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=โปรแกรมติดตั้งต้องการดิสก์ถัดไป +SelectDiskLabel2=โปรดใส่ดิสก์ %1 และ กดตกลง%n%nหากพบไฟล์ในดิสก์นี้ในโฟลเดอร์อื่นนอกเหนือจากที่แสดงด้านล่าง ให้ป้อนเส้นทางที่ถูกต้องหรือกดเรียกดู +PathLabel=&เส้นทาง: +FileNotInDir2=ไม่พบไฟล์ "%1" ใน "%2" โปรดใส่ดิสก์ที่ถูกต้องหรือเลือกโฟลเดอร์อื่น +SelectDirectoryLabel=โปรดระบุตำแหน่งของดิสก์ถัดไป + +; *** Installation phase messages +SetupAborted=การติดตั้งไม่เสร็จสมบูรณ์%n%nโปรดแก้ไขปัญหาและเรียกใช้การติดตั้งอีกครั้ง +AbortRetryIgnoreSelectAction=เลือกการดำเนินการ +AbortRetryIgnoreRetry=&ลองอีกครั้ง +AbortRetryIgnoreIgnore=&ละเว้นข้อผิดพลาดและดำเนินการต่อ +AbortRetryIgnoreCancel=ยกเลิกการติดตั้ง + +; *** Installation status messages +StatusClosingApplications=กำลังปิดแอปพลิเคชัน... +StatusCreateDirs=กำลังสร้างไดเร็กทอรี... +StatusExtractFiles=กำลังแตกไฟล์... +StatusCreateIcons=กำลังสร้างทางลัด... +StatusCreateIniEntries=กำลังสร้างรายการ INI... +StatusCreateRegistryEntries=กำลังสร้างรายการรีจิสตรี... +StatusRegisterFiles=กำลังลงทะเบียนไฟล์... +StatusSavingUninstall=กำลังบันทึกข้อมูลการถอนการติดตั้ง... +StatusRunProgram=กำลังเสร็จสิ้นการติดตั้ง... +StatusRestartingApplications=กำลังเริ่มแอปพลิเคชันใหม่... +StatusRollback=กำลังย้อนกลับการเปลี่ยนแปลง... + +; *** Misc. errors +ErrorInternal2=ข้อผิดพลาดภายใน: %1 +ErrorFunctionFailedNoCode=%1 ล้มเหลว +ErrorFunctionFailed=%1 ล้มเหลว; รหัส %2 +ErrorFunctionFailedWithMessage=%1 ล้มเหลว; รหัส %2.%n%3 +ErrorExecutingProgram=ไม่สามารถเรียกใช้ไฟล์:%n%1 + +; *** Registry errors +ErrorRegOpenKey=ข้อผิดพลาดในการเปิดคีย์รีจิสทรี:%n%1\%2 +ErrorRegCreateKey=เกิดข้อผิดพลาดในการสร้างคีย์รีจิสทรี:%n%1\%2 +ErrorRegWriteKey=ข้อผิดพลาดในการเขียนคีย์รีจิสทรี:%n%1\%2 + +; *** INI errors +ErrorIniEntry=เกิดข้อผิดพลาดในการสร้างรายการ INI ในไฟล์ "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&ข้ามไฟล์นี้ (ไม่แนะนำ) +FileAbortRetryIgnoreIgnoreNotRecommended=&ละเว้นข้อผิดพลาดและดำเนินการต่อ (ไม่แนะนำ) +SourceIsCorrupted=ไฟล์ต้นฉบับเสียหาย +SourceDoesntExist=ไม่มีไฟล์ต้นฉบับ "%1" +ExistingFileReadOnly2=ไม่สามารถแทนที่ไฟล์ที่มีอยู่ได้ เนื่องจากไฟล์ถูกทำเครื่องหมายเป็นแบบอ่านอย่างเดียว +ExistingFileReadOnlyRetry=&ลบแอตทริบิวต์แบบอ่านอย่างเดียวแล้วลองอีกครั้ง +ExistingFileReadOnlyKeepExisting=&เก็บไฟล์ที่มีอยู่ +ErrorReadingExistingDest=เกิดข้อผิดพลาดขณะพยายามอ่านไฟล์ที่มีอยู่: +FileExistsSelectAction=เลือกการกระทำ +FileExists2=มีไฟล์อยู่แล้ว +FileExistsOverwriteExisting=&เขียนทับไฟล์ที่มีอยู่ +FileExistsKeepExisting=&เก็บไฟล์ที่มีอยู่ +FileExistsOverwriteOrKeepAll=&ทำเช่นนี้สำหรับความขัดแย้งครั้งต่อไป +ExistingFileNewerSelectAction=เลือกการดำเนินการ +ExistingFileNewer2=ไฟล์ที่มีอยู่ใหม่กว่าไฟล์ติดตั้งที่พยายามติดตั้ง +ExistingFileNewerOverwriteExisting=&เขียนทับไฟล์ที่มีอยู่ +ExistingFileNewerKeepExisting=&เก็บไฟล์ที่มีอยู่ (แนะนำ) +ExistingFileNewerOverwriteOrKeepAll=&ทำเช่นนี้สำหรับความขัดแย้งครั้งต่อไป +ErrorChangingAttr=เกิดข้อผิดพลาดขณะพยายามเปลี่ยนแอตทริบิวต์ของไฟล์ที่มีอยู่: +ErrorCreatingTemp=เกิดข้อผิดพลาดขณะพยายามสร้างไฟล์ในไดเรกทอรีปลายทาง: +ErrorReadingSource=เกิดข้อผิดพลาดขณะพยายามอ่านไฟล์ต้นฉบับ: +ErrorCopying=เกิดข้อผิดพลาดขณะพยายามคัดลอกไฟล์: +ErrorReplacingExistingFile=เกิดข้อผิดพลาดขณะพยายามแทนที่ไฟล์ที่มีอยู่: +ErrorRestartReplace=เริ่มต้นใหม่แทนที่ ล้มเหลว: +ErrorRenamingTemp=เกิดข้อผิดพลาดขณะพยายามเปลี่ยนชื่อไฟล์ในไดเรกทอรีปลายทาง: +ErrorRegisterServer=ไม่สามารถลงทะเบียน DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 ล้มเหลวด้วยรหัสออก %1 +ErrorRegisterTypeLib=ไม่สามารถลงทะเบียนไลบรารีประเภท: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-บิต +UninstallDisplayNameMark64Bit=64-บิต +UninstallDisplayNameMarkAllUsers=ผู้ใช้ทั้งหมด +UninstallDisplayNameMarkCurrentUser=ผู้ใช้ปัจจุบัน + +; *** Post-installation errors +ErrorOpeningReadme=เกิดข้อผิดพลาดขณะพยายามเปิดไฟล์ README +ErrorRestartingComputer=โปรแกรมติดตั้งไม่สามารถเริ่มต้นคอมพิวเตอร์ใหม่ได้ โปรดดำเนินการด้วยตนเอง + +; *** Uninstaller messages +UninstallNotFound=ไม่มีไฟล์ "%1" อยู่ ไม่สามารถถอนการติดตั้ง +UninstallOpenError=ไม่สามารถเปิดไฟล์ "%1" ได้ ไม่สามารถถอนการติดตั้ง +UninstallUnsupportedVer=ไฟล์บันทึกการถอนการติดตั้ง "%1" อยู่ในรูปแบบที่โปรแกรมถอนการติดตั้งเวอร์ชันนี้ไม่รู้จัก จึงไม่สามารถถอนการติดตั้งได้ +UninstallUnknownEntry=พบรายการที่ไม่รู้จัก (%1) ในบันทึกการถอนการติดตั้ง +ConfirmUninstall=คุณแน่ใจหรือไม่ว่าต้องการลบ %1 และส่วนประกอบทั้งหมดออกทั้งหมด? +UninstallOnlyOnWin64=โปรแกรมถอนการติดตั้งนี้สามารถถอนการติดตั้งได้บน Windows 64 บิตเท่านั้น +OnlyAdminCanUninstall=โปรแกรมถอนการติดตั้งนี้สามารถถอนการติดตั้งได้โดยผู้ใช้ที่มีสิทธิ์ของผู้ดูแลระบบเท่านั้น +UninstallStatusLabel=โปรดรอในขณะที่ %1 ถูกลบออกจากคอมพิวเตอร์ของคุณ +UninstalledAll=%1 ถูกลบออกจากคอมพิวเตอร์ของคุณเรียบร้อยแล้ว +UninstalledMost=%1 ถอนการติดตั้งเสร็จสมบูรณ์ %n%nองค์ประกอบบางอย่างไม่สามารถลบออกได้ สิ่งเหล่านี้สามารถลบออกได้ด้วยตนเอง +UninstalledAndNeedsRestart=ในการถอนการติดตั้ง %1 ให้เสร็จสมบูรณ์ คอมพิวเตอร์ของคุณจะต้อเริ่มต้นระบบใหม่ %n%nคุณต้องการเริ่มต้นระบบใหม่เดี๋ยวนี้หรือไม่? +UninstallDataCorrupted="%1" เสียหาย ไม่สามารถถอนการติดตั้ง + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=ลบไฟล์ที่ใช้ร่วมกัน? +ConfirmDeleteSharedFile2=ระบบระบุว่าไฟล์ที่ใช้ร่วมกันต่อไปนี้ไม่มีการใช้งานโดยโปรแกรมใดๆ อีกต่อไป คุณต้องการถอนการติดตั้งเพื่อลบไฟล์ที่ใช้ร่วมกันนี้หรือไม่%n%nหากโปรแกรมใดยังคงใช้ไฟล์นี้อยู่และถูกลบออก โปรแกรมเหล่านั้นอาจทำงานไม่ถูกต้อง หากคุณไม่แน่ใจ ให้เลือก ไม่ การทิ้งไฟล์ไว้ในระบบของคุณจะไม่ก่อให้เกิดอันตรายใดๆ +SharedFileNameLabel=ชื่อไฟล์: +SharedFileLocationLabel=ตำแหน่งที่ตั้ง: +WizardUninstalling=สถานะ ถอนการติดตั้ง +StatusUninstalling=กำลังถอนการติดตั้ง %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=กำลังติดตั้ง %1. +ShutdownBlockReasonUninstallingApp=ถอนการติดตั้ง %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 เวอร์ชัน %2 +AdditionalIcons=ทางลัดเพิ่มเติม: +CreateDesktopIcon=สร้างทางลัด &เดสก์ท็อป +CreateQuickLaunchIcon=สร้างทางลัด &เปิดใช้ด่วน +ProgramOnTheWeb=%1 บนเว็บ +UninstallProgram=ถอนการติดตั้ง %1 +LaunchProgram=เปิดใช้ %1 +AssocFileExtension=&เชื่อมโยง %1 กับนามสกุลไฟล์ %2 +AssocingFileExtension=กำลังเชื่อมโยง %1 กับนามสกุลไฟล์ %2... +AutoStartProgramGroupDescription=การเริ่มต้น: +AutoStartProgram=เริ่ม %1 โดยอัตโนมัติ +AddonHostProgramNotFound=ไม่พบ %1 ในโฟลเดอร์ที่คุณเลือก%n%nคุณต้องการดำเนินการต่อหรือไม่? diff --git a/Files/Languages/Unofficial/Urdu.isl b/Files/Languages/Unofficial/Urdu.isl new file mode 100644 index 00000000..555620e8 --- /dev/null +++ b/Files/Languages/Unofficial/Urdu.isl @@ -0,0 +1,388 @@ +; *** Inno Setup version 6.1.0+ Urdu messages *** +; +;Translated by Hamza Hayat +;E-mail: hayat9437786878@gmail.com +;Last Modified: 02-10-2020 (21:18 AM) +; +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Urdu +LanguageID=$0420 +LanguageCodePage=0 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName= +;WelcomeFontSize=12 +;TitleFontName= +;TitleFontSize=29 +;CopyrightFontName= +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=سیٹ اپ +SetupWindowTitle=سیٹ اپ - %1 +UninstallAppTitle=ناتنصیب +UninstallAppFullTitle=%1 ناتنصیب + +; *** Misc. common +InformationTitle=معلومات +ConfirmTitle=تصدیق +ErrorTitle=نقص + +; *** SetupLdr messages +SetupLdrStartupMessage=یہ تنصیب کرے گا %1. کیا آپ جاری رکھنا چاہتے ہیں؟ +LdrCannotCreateTemp=ایک عارضی مسل نہیں بنا سکے. سیٹ اپ ساقط +LdrCannotExecTemp=عارضی ڈائریکٹری میں مسل کا نفاذ نہیں کر سکتا. سیٹ اپ ساقط +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nنقص %2: %3 +SetupFileMissing=مسل %1 تنصیب ڈائریکٹری سے غائب ہے. مسئلہ کی تصحیح کریں یا پروگرام کی نئی نقل حاصل کریں. +SetupFileCorrupt=سیٹ اپ مسلیں خراب ہیں. برائے مہربانی پروگرام کی ایک نئی نقل حاصل کریں. +SetupFileCorruptOrWrongVer=سیٹ اپ مسلیں خراب ہیں، یا سیٹ اپ کے اس ورژن کے ساتھ مطابقت نہیں ہے. برائے مہربانی مسئلہ کی تصحیح کریں یا پروگرام کی نئی نقل حاصل کریں. +InvalidParameter=حکم لائن پر ایک ناجائز پیرامیٹر منظور کیا گیا:%n%n%1 +SetupAlreadyRunning=سیٹ اپ پہلے ہی چل رہا ہے. +WindowsVersionNotSupported=یہ پروگرام Windows کے اس ورژن کی معاونت نہیں کرتا جس پرآپ کا کمپیوٹر چل رہا ہے. +WindowsServicePackRequired=اس پروگرام کو %1 خدمت پیک %2 یا اس کے بعد کی درکار ہے. +NotOnThisPlatform=یہ پروگرام %1 پر نہیں چلایا جائے گا. +OnlyOnThisPlatform=اس پروگرام کی چلت %1 پر ہونی چاہیئے. +OnlyOnTheseArchitectures=یہ پروگرام صرف مندرجہ ذیل پروسیسر کے لئے ڈیزائن کیا گیا ونڈوز کے ورژن پر نصب کیا جا سکتا ہے:%n%n%1 +WinVersionTooLowError=اس پروگرام کو %1 ورژن %2 یا اس کے بعد کی ضرورت ہے. +WinVersionTooHighError=یہ پروگرام تنصیب نہیں کیا جا سکتا بر %1 ورژن %2 یا بعد. +AdminPrivilegesRequired=یہ پروگرام نصب کرتے وقت آپ کو بطور منتظم لاگ ان ہونا چاہیے. +PowerUserPrivilegesRequired=یہ پروگرام نصب کرتے وقت آپ کو بطور منتظم یا بجلی صارفین گروپ کے رکن کے طور پر لاگ ان ہونا چاہیے. +SetupAppRunningError=سیٹ اپ نے کھوج لگایا ہے کہ %1 اس وقت چل رہا ہے.%n%nبرائے مہربانی ابھی اس کی تمام مثالیں بند کریں، پھر کلک کریں ٹھيک ہے جاری رکھنے کے لئے، یا خروج کے لیے منسوخ کریں. +UninstallAppRunningError=ناتنصیب کاری نے کھوج لگایا ہے کہ %1 اس وقت چل رہا ہے.%n%nبرائے مہربانی ابھی اس کی تمام مثالیں بند کریں، پھر کلک کریں ٹھيک ہے جاری رکھنے کے لئے، یا خروج کے لیے منسوخ کریں. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=سیٹ اپ تنصیب موڈ منتخب کریں +PrivilegesRequiredOverrideInstruction=تنصیب موڈ منتخب کریں +PrivilegesRequiredOverrideText1=%1 تمام صارفین کے لیے تنصیب کی جا سکتی ہے (انتظامی استحقاق کی ضرورت ہوتی ہے)، یا صرف آپ کے لئے. +PrivilegesRequiredOverrideText2=%1 صرف آپ کے لیے تنصیب کیا جا سکتا ہے، یا تمام صارفین کے لئے (انتظامی استحقاق کی ضرورت ہوتی ہے). +PrivilegesRequiredOverrideAllUsers=تمام صارفین &کے لیے تنصیب کریں +PrivilegesRequiredOverrideAllUsersRecommended=تمام صارفین &کے لیے تنصیب کریں (تجویز) +PrivilegesRequiredOverrideCurrentUser=فقط میرے &لیے تنصیب کریں +PrivilegesRequiredOverrideCurrentUserRecommended=فقط میرے &لیے تنصیب کریں (تجویز) + +; *** Misc. errors +ErrorCreatingDir=سیٹ اپ ڈائریکٹری "%1" بنانے میں نااہل ہے +ErrorTooManyFilesInDir=ڈائریکٹری "%1" میں مسل نہیں بنا سکے کیونکہ یہ بہت زیادہ مسلوں کا حامل ہے + +; *** Setup common messages +ExitSetupTitle=سیٹ اپ خروج کریں +ExitSetupMessage=سیٹ اپ مکمل نہیں ہوا ہے. اگر آپ اب خروج کریں گے تو, پروگرام تنصیب نہیں کیا جائے گا.%n%nتنصیب مکمل کرنے کے لیے آپ ایک اور بار سیٹ اپ چلا سکتے ہیں.%n%nسیٹ اپ خروج کریں؟ +AboutSetupMenuItem=&سیٹ اپ کے بارے میں... +AboutSetupTitle=سیٹ اپ کے بارے میں +AboutSetupMessage=%1 ورژن %2%n%3%n%n%1 ابتدائی صفحہ:%n%4 +AboutSetupNote= +TranslatorNote= + +; *** Buttons +ButtonBack=< &پچھلا +ButtonNext=&اگلا > +ButtonInstall=&تنصیب کریں +ButtonOK=ٹھيک ہے +ButtonCancel=منسوخ +ButtonYes=&ہاں +ButtonYesToAll=ہاں &تمام +ButtonNo=&نہيں +ButtonNoToAll=تم&ام کے لیے نہیں +ButtonFinish=&تکمیل +ButtonBrowse=&براؤز... +ButtonWizardBrowse=ب&راؤز... +ButtonNewFolder=&نیا پوشہ بنائیں + +; *** "Select Language" dialog messages +SelectLanguageTitle=سیٹ اپ زبان منتخب کریں +SelectLanguageLabel=تنصیب کے دوران استعمال کرنے کے لیے زبان منتخب کریں. + +; *** Common wizard text +ClickNext=جاری رکھنے کے لیے اگلا پر کلک کریں، یا سیٹ اپ سے باہر نکلنے کے لیے منسوخ کریں. +BeveledLabel= +BrowseDialogTitle=پوشہ کے لیے براؤز کریں +BrowseDialogLabel=نیچے فہرست میں ایک پوشہ منتخب کریں، پھر کلک کریں ٹھيک ہے. +NewFolderName=نیا پوشہ + +; *** "Welcome" wizard page +WelcomeLabel1=[name] سیٹ اپ مددگار میں خوش آمدید +WelcomeLabel2=یہ آپ کے کمپیوٹر پر [name/ver] نصب کرے گا.%n%nیہ سفارش کی جاتی ہے کہ آپ جاری رکھنے سے قبل دیگر تمام ایپلی کیشن بند کریں. + +; *** "Password" wizard page +WizardPassword=پاس ورڈ +PasswordLabel1=اس تنصیب ویں پاس ورڈ کی حفاظت ہے. +PasswordLabel3=براہ مہربانی پاس ورڈ فراہم کریں، پھر جاری رکھنے کے لیے اگلا پر کلک کریں. پاس ورڈ کیس-حساس ہے. +PasswordEditLabel=&پاس ورڈ: +IncorrectPassword=داخل کردہ پاس ورڈ صحیح نہیں ہے. دوبارہ کوشش کریں. + +; *** "License Agreement" wizard page +WizardLicense=لائسنس معاہدہ +LicenseLabel=جاری رکھنے سے قبل درج ذیل اہم معلومات پڑھیں. +LicenseLabel3=براہ کرم مندرجہ ذیل لائسنس کے معاہدے کو پڑھیں. تنصیب کے ساتھ جاری رکھنے سے قبل اس معاہدے کی شرائط قبول کریں. +LicenseAccepted=میں &معاہدہ قبول کرتا ہوں +LicenseNotAccepted=میں &معاہدہ قبول نہیں کتا ہوں + +; *** "Information" wizard pages +WizardInfoBefore=معلومات +InfoBeforeLabel=جاری رکھنے سے قبل درج ذیل اہم معلومات پڑھیں. +InfoBeforeClickLabel=جب آپ سیٹ اپ کے ساتھ جاری رکھنے کے لیے تیار ہوں تو، کلک کریں اگلا. +WizardInfoAfter=معلومات +InfoAfterLabel=جاری رکھنے سے قبل درج ذیل اہم معلومات پڑھیں. +InfoAfterClickLabel=جب آپ سیٹ اپ کے ساتھ جاری رکھنے کے لیے تیار ہوں تو، کلک کریں اگلا. + +; *** "User Information" wizard page +WizardUserInfo=معلومات صارف +UserInfoDesc=براہ مہربانی اپنی معلومات درج کریں. +UserInfoName=&صارف نام: +UserInfoOrg=&تنظیم: +UserInfoSerial=&سیریل نمبر: +UserInfoNameRequired=آپ کو ایک نام داخل کرنا چاہیئے. + +; *** "Select Destination Location" wizard page +WizardSelectDir=مقصود محل وقوع منتخب کریں +SelectDirDesc=جہاں [name] نصب کیا جانا ہے؟ +SelectDirLabel3=سیٹ اپ درج ذیل پوشہ میں [name] تنصیب کرے گا. +SelectDirBrowseLabel=جاری رکھنے کے لیے، کلک کریں اگلا. اگر آپ مختلف فولڈر کو منتخب کرنا چاہتے ہیں، تو براؤز پر کلک کریں. +DiskSpaceGBLabel=کم ازکم [gb] GB مفت ڈسک گنجایش مطلوب ہے. +DiskSpaceMBLabel=کم ازکم [mb] MB مفت ڈسک گنجایش مطلوب ہے. +CannotInstallToNetworkDrive=سیٹ اپ نیٹ ورک ڈرائیو پر تنصیب نہیں کر سکتا. +CannotInstallToUNCPath=سیٹ اپ UNC راہ پر تنصیب نہیں کر سکتا. +InvalidPath=ڈرائیو حرف کے ساتھ ایک مکمل راہ داخل کریں; مثال ک لیے:%n%nC:\APP%n%UNC راستہ نہیں ہے کے فارم میں:%n%n\\server\share +InvalidDrive=آپ کی منتخب ڈرائیو یا UNC حصہ داری موجود نہیں یا قابل رسائی نہیں ہے. کوئی اور منتخب کریں. +DiskSpaceWarningTitle=کافی ڈسک گنجایش نہیں +DiskSpaceWarning=سیٹ اپ تنصیب کرنے کے لیے کم ازکم %1 KB خالی جگہ کی ضرورت ہے، لیکن منتخب ڈرائیو فقط %2 KB دستیاب ہے.%n%nکیا آپ بہرصورت جاری رکھنا چاہتے ہیں؟ +DirNameTooLong=نام پوشہ یا راہ بہت طویل ہے. +InvalidDirName=نام پوشہ جائز نہیں. +BadDirName32=نام پوشہ درج ذیل کریکٹروں میں سے کوئی شامل نہیں ہو سکتا:%n%n%1 +DirExistsTitle=پوشہ موجود ہے +DirExists=وہ پوشہ:%n%n%1%n%nپہلے ہی موجود ہے. کیا آپ بہرصورت پوشہ کو تنصیب کرنا چاہتے ہیں؟ +DirDoesntExistTitle=پوشہ موجود نہیں +DirDoesntExist=وہ پوشہ:%n%n%1%n%nموجود نہیں ہے. کیا آپ پوشہ بنانا چاہتے ہیں؟ + +; *** "Select Components" wizard page +WizardSelectComponents=اجزاء منتخب کریں +SelectComponentsDesc=کون سا اجزاء نصب کیا جانا چاہئے؟ +SelectComponentsLabel2=وہ اجزاء منتخب کریں جو آپ تنصیب کرنا چاہتے ہیں; وہ اجزاء صاف کریں جو آپ تنصیب نہیں کرنا چاہتے. جب آپ جاری رکھنے کے لیے تیار ہوں تو اگلا پر کلک کریں. +FullInstallation=مکمل تنصیب +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=کومپیکٹ تنصیب +CustomInstallation=مخصوص تنصیب +NoUninstallWarningTitle=اجزاء موجود ہیں +NoUninstallWarning=سیٹ اپ نے کھوج لگایا ہے کہ درج ذیل اجزاء آپ کے کمپیوٹر پر پہلے ہی نصب ہیں:%n%n%1%n%nان اجزاء کو غیر منتخب کرنے سے ان کو ناتنصیب نہیں کرے گا.%n%nکیا آپ بہرصورت جاری رکھنا چاہیں گے؟ +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=حالیہ انتخاب کو کم ازکم [gb] GB ڈسک گنجایش کی درکار ہے. +ComponentsDiskSpaceMBLabel=حالیہ انتخاب کو کم ازکم [mb] MB ڈسک گنجایش کی درکار ہے. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=اضافی مجموعہ کار منتخب کریں +SelectTasksDesc=کونسی اضافی کاموں کو انجام دیا جانا چاہئے؟ +SelectTasksLabel2=اس اضافی مجموعہ کار کو منتخب کریں جو آپ [name] نصب کرتے وقت انجام دینے کے لیے سیٹ اپ چاہتے ہیں، پھر کلک کریں اگلا. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=شروع مینیو پوشہ منتخب کریں +SelectStartMenuFolderDesc=پروگرام کی تیز راہیں کہاں سیٹ کریں؟ +SelectStartMenuFolderLabel3=سیٹ اپ درج ذیل شروع مینیو پوشہ میں پروگرام کا تیز راہیں بنا دے گا. +SelectStartMenuFolderBrowseLabel=جاری رکھنے کے لیے، کلک کریں اگلا. اگر آپ مختلف پوشہ منتخب کرنا چاہتے ہیں، براؤز پر کلک کریں. +MustEnterGroupName=آپ کو پوشہ نام داخل کرنا چاہیئے. +GroupNameTooLong=نام پوشہ یا راہ بہت طویل ہے. +InvalidGroupName=نام پوشہ جائز نہیں. +BadGroupName=نام پوشہ میں درج ذیل کریکٹروں میں سے کوئی بھی شامل نہیں ہو سکتا:%n%n%1 +NoProgramGroupCheck2=&شروع مینیو پوشہ مت بنائیں + +; *** "Ready to Install" wizard page +WizardReady=تنصیب کے لیے تیار +ReadyLabel1=سیٹ اپ اب آپ کے کمپیوٹر پر [name] نصب کرنے کے لیے تیار ہے. +ReadyLabel2a=تنصیب کے ساتھ جاری رکھنے کے لیے تنصیب پر کلک کریں، یا اگر آپ کوئی سیٹنگیں جائزہ یا تبدیل کرنا چاہتے ہیں تو واپس پر کلک کریں. +ReadyLabel2b=تنصیب کے ساتھ جاری رکھنے کے لیے تنصیب پر کلک کریں. +ReadyMemoUserInfo=معلومات صارف: +ReadyMemoDir=مقصود محل وقوع: +ReadyMemoType=سیٹ اپ قسم: +ReadyMemoComponents=منتخب اجزاء: +ReadyMemoGroup=شروع مینیو پوشہ: +ReadyMemoTasks=اضافی کام: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=اضافی مسلیں ڈاؤن لوڈ کر رہا ہے... +ButtonStopDownload=&ڈاؤن لوڈ روکیں +StopDownload=آپ کو یقین ہے کہ آپ ڈاؤن لوڈ روکنا چاہتے ہیں؟ +ErrorDownloadAborted=ڈاؤن لوڈ ساقط +ErrorDownloadFailed=ڈاؤن لوڈ ناکام: %1 %2 +ErrorDownloadSizeFailed=سائز کے حصول میں ناکامی: %1 %2 +ErrorFileHash1=مسل ہیش ناکام: %1 +ErrorFileHash2=ناجائز مسل ہیش: expected %1, found %2 +ErrorProgress=ناجائز پیش رفت: %1 of %2 +ErrorFileSize=ناجائز مسل سائز: expected %1, found %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=تنصیب کی تیاری کررہا ہے +PreparingDesc=سیٹ اپ آپ کے کمپیوٹر پر [name] نصب کرنے کی تیاری کر رہا ہے. +PreviousInstallNotCompleted=پچھلے پروگرام کی تنصیب/ہٹانا مکمل نہیں ہوئی. تنصیب مکمل کرنے کے لیے آپ کو کمپیوٹر پھر شروع کرنے کی ضرورت ہو گی.%n%nاپنے کمپیوٹر کو دوبارہ شروع کرنے کے بعد، [name] کی تنصیب مکمل کرنے کے لیے سیٹ اپ پھر چلائیں. +CannotContinue=سیٹ اپ جاری نہیں رہ سکتا. خروج کے لیے منسوخ پر کلک کریں. +ApplicationsFound=درج ذیل ایپلی کیشن ایسی مسلوں کا استعمال کر رہے ہیں جس کی سیٹ اپ کی طرف سے تازہ کاری کی ضرورت ہے. سفارش کی جاتی ہے کہ آپ ان ایپلی کیشنز کو خود بخود بند کرنے کے لیے سیٹ اپ کو اجازت دیں. +ApplicationsFound2=درج ذیل ایپلی کیشن ایسی مسلوں کا استعمال کر رہے ہیں جس کی سیٹ اپ کی طرف سے تازہ کاری کی ضرورت ہے. سفارش کی جاتی ہے کہ آپ ان ایپلی کیشنز کو خود بخود بند کرنے کے لیے سیٹ اپ کو اجازت دیں. تنصیب مکمل ہونے کے بعد، سیٹ اپ ایپلی کیشن پھر شروع کرنے کی کوشش کرے گا. +CloseApplications=&خود بخود ایپلی کیشنوں کو بند کریں +DontCloseApplications=&ایپلی کیشنوں کو بند نہ کریں +ErrorCloseApplications=سیٹ اپ خود بخود تمام ایپلی کیشنوں کو بند نہیں کر سکا. سفارش کی جاتی ہے کہ آپ مسلوں کا استعمال کر رہے تمام ایپلی کیشنز کو بند کریں جس کو جاری رکھنے سے قبل سیٹ اپ کی طرف سے تازہ کاری کی ضرورت ہے. +PrepareToInstallNeedsRestart=سیٹ اپ آپ کے کمپیوٹر کو پھر شروع کرنا چاہے گا. اپنے کمپیوٹر کو دوبارہ شروع کرنے کے بعد، [name] کی تنصیب مکمل کرنے کے لیے سیٹ اپ پھر چلائیں.%n%nکیا آپ ابھی پھر شروع کرنا چاہتے ہیں؟ + +; *** "Installing" wizard page +WizardInstalling=تنصیب کر رہا ہے +InstallingLabel=انتظار کریں جب تک سیٹ اپ آپ کے کمپیوٹر پر [name] تنصیب کتا ہے. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=[name] سیٹ اپ مددگار مکمل کیا جارہا ہے +FinishedLabelNoIcons=سیٹ اپ نے آپ کے کمپیوٹر پر [name] تنصیب کاری ختم کر دی ہے. +FinishedLabel=سیٹ اپ نے آپ کے کمپیوٹر پر [name] تنصیب کاری ختم کر دی ہے. ایپلی کیشن تنصیب شدہ تیزراہ منتخب کر کے شروع کی جا سکتی ہے. +ClickFinish=سیٹ اپ سے باہر نکلنے کے لیے تکمیل پر کلک کریں. +FinishedRestartLabel=[name] کی تنصیب مکمل کرنے کے لیے، سیٹ اپ آپ کے کمپیوٹر کو پھر شروع کرنا چاہے گا. کیا آپ ابھی پھر شروع کرنا چاہتے ہیں؟ +FinishedRestartMessage=[name] کی تنصیب مکمل کرنے کے لیے، سیٹ اپ آپ کے کمپیوٹر کو پھر شروع کرنا چاہے گا.%n%nکیا آپ ابھی پھر شروع کرنا چاہتے ہیں؟ +ShowReadmeCheck=جی ہاں، میں README فائل دیکھنا چاہتا ہوں +YesRadio=&ہاں، ابھی کمپیوٹر پھر شروع کریں +NoRadio=&نہیں، میں بعد میں کمپیوٹر پھر شروع کروں گا +; used for example as 'Run MyProg.exe' +RunEntryExec=چلایئں %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=دیکھیں %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=سیٹ اپ کو اگلے ڈسک کی ضرورت ہے +SelectDiskLabel2=ڈسک %1 داخل کریں اور ٹھیک ہے پر کلک کریں.%n%nاگر اس ڈسک پر مسلیں نیچے دکھائے گئے ایک کے علاوہ پوشہ میں موجود ہیں، صحیح راہ داخل کریں یا براؤز پر کلک کریں. +PathLabel=&راہ: +FileNotInDir2=مسل "%1" "%2" میں نہیں مل سکی. صحیح ڈسک داخل کریں یا کسی اور پوشہ کا انتخاب کریں. +SelectDirectoryLabel=اگلی ڈسک محل وقوع کی اختصاص کریں. + +; *** Installation phase messages +SetupAborted=سیٹ اپ مکمل نہیں ہوا.%n%nمسئلہ درست کریں اور سیٹ اپ پھر چلائیں. +AbortRetryIgnoreSelectAction=عمل منتخب کریں +AbortRetryIgnoreRetry=&دوبارہ کوشش کریں +AbortRetryIgnoreIgnore=&نقص نظرانداز کریں اور جاری رکھیں +AbortRetryIgnoreCancel=تنصیب منسوخ کریں + +; *** Installation status messages +StatusClosingApplications=اختتامی ایپلی کیشنوں... +StatusCreateDirs=ڈائریکٹریز بنانا... +StatusExtractFiles=مسلیں نکالنا... +StatusCreateIcons=شارٹ کٹ بنانا... +StatusCreateIniEntries=INI اندراجات بناناs... +StatusCreateRegistryEntries=رجسٹری اندراجات بنانا... +StatusRegisterFiles=مسل رجسٹر کر رہا ہے... +StatusSavingUninstall=ناتنصیب معلومات محفوظ کر رہا ہےناتنصیب معلومات محفوظ کر رہا ہے... +StatusRunProgram=تنصیب مکمل... +StatusRestartingApplications=ایپلی کیشن پھر شروع... +StatusRollback=تبدیلیوں کو رولنگ بیک... + +; *** Misc. errors +ErrorInternal2=اندرونی نقص: %1 +ErrorFunctionFailedNoCode=%1 ناکام +ErrorFunctionFailed=%1 ناکام; کوڈ %2 +ErrorFunctionFailedWithMessage=%1 ناکام; کوڈ %2.%n%3 +ErrorExecutingProgram=مسل کے نفاذ میں ناکام:%n%1 + +; *** Registry errors +ErrorRegOpenKey=رجسٹری کلید کھولنے میں نقص:%n%1\%2 +ErrorRegCreateKey=رجسٹری کلید بنانے میں نقص:%n%1\%2 +ErrorRegWriteKey=رجسٹری کلید میں تحریر میں نقص:%n%1\%2 + +; *** INI errors +ErrorIniEntry=مسل "%1" INI اندراج بنانے میں نقص. + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&یہ مسل چھوڑیں (سفارش کی نہیں) +FileAbortRetryIgnoreIgnoreNotRecommended=&نقص نظرانداز کریں اور جاری رکھیں (سفارش کی نہیں) +SourceIsCorrupted=ماخذ مسل خراب ہے +SourceDoesntExist=ماخذ مسل "%1" موجود نہیں +ExistingFileReadOnly2=موجود مسل تبدیل نہیں کی جا سکی کیونکہ اسے read-only نشان زد کیا گیا ہے. +ExistingFileReadOnlyRetry=&read-only خاصیت ہٹائیں اور پھر کوشش کریں +ExistingFileReadOnlyKeepExisting=&موجودہ مسل رکھیں +ErrorReadingExistingDest=موجود مسل کو پڑھنے کی کوشش کے دوران ایک نقص واقع ہوا: +FileExistsSelectAction=عمل منتخب کریں +FileExists2=مسل پہلے ہی موجود ہے. +FileExistsOverwriteExisting=&موجود مسل پر برتحریر کریں +FileExistsKeepExisting=&موجودہ مسل رکھیں +FileExistsOverwriteOrKeepAll=&اگلے تنازعات کے لئے یہ کریں +ExistingFileNewerSelectAction=عمل منتخب کریں +ExistingFileNewer2=موجودہ مسل ایک سیٹ اپ کے لیے نیا ہے جو تنصیب کی کوشش کر رہا ہے. +ExistingFileNewerOverwriteExisting=&موجود مسل پر برتحریر کریں +ExistingFileNewerKeepExisting=&موجودہ مسل رکھیں (تجویز) +ExistingFileNewerOverwriteOrKeepAll=&اگلے تنازعات کے لئے یہ کریں +ErrorChangingAttr=موجود مسل کے اوصاف تبدیل کرنے کی کوشش کے دوران نقص واقع ہوا: +ErrorCreatingTemp=مقصود ڈائریکٹری میں مسل بنانے کی کوشش کے دوران نقص واقع ہوا: +ErrorReadingSource=ماخذ مسل پڑھنے کی کوشش کے دوران نقص واقع ہوا: +ErrorCopying=مسل نقل کرنے کی کوشش کے دوران نقص واقع ہوا: +ErrorReplacingExistingFile=موجود مسل کی جگہ بنانے کی کوشش میں ایک نقص واقع ہوا: +ErrorRestartReplace=RestartReplace ناکام: +ErrorRenamingTemp=مقصود ڈائریکٹری میں مسل کا نام تبدیل کرنے کی کوشش کے دوران نقص واقع ہوا: +ErrorRegisterServer=DLL/OCX رجسٹر نہیں کر سکا: %1 +ErrorRegSvr32Failed=RegSvr32 خروج ضابطہ کے ساتھ ناکام %1 +ErrorRegisterTypeLib=قسم لائبریری رجسٹر نہیں کر سکا: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=تمام صارفین +UninstallDisplayNameMarkCurrentUser=موجودہ صارف + +; *** Post-installation errors +ErrorOpeningReadme=README مسل کھولنے کی کوشش کے دوران نقص واقع ہوا. +ErrorRestartingComputer=سیٹ اپ کمپیوٹر پھر شروع نہیں کر سکا. براہ کرم اسے دستی طور پر کریں. + +; *** Uninstaller messages +UninstallNotFound=مسل "%1" موجود نہیں. ناتنصیب نہیں کر سکتے. +UninstallOpenError=مسل "%1" نہیں کھولی جا سکی. ناتنصیب نہیں کر سکتے +UninstallUnsupportedVer=ناتنصیب لاگ مسل "%1" ناتنصیبکار کے اس ورژن کی طرف سے تسلیم شدہ وضع میں ہے. ناتنصیب نہیں کر سکتے +UninstallUnknownEntry=ایک نامعلوم اندراج (%1) ناتنصیب لاگ میں سامنا کیا گیا +ConfirmUninstall=آپ کو یقین کے آپ %1 اور اس کے تمام اجزاء کو مکمل طور پر ہٹانا چاہتے ہیں؟ +UninstallOnlyOnWin64=یہ تنصیب صرف 64-bit Windows پر ناتنصیب کی جا سکتی ہے. +OnlyAdminCanUninstall=یہ تنصیب صرف ایک صارف کی طرف سے انتظامی استحقاق کے ساتھ نا تنصیب کی جا سکتی ہے. +UninstallStatusLabel=انتظار کریں جبکہ %1 آپ کے کمپیوٹر سے ہٹا دیا جاۓ. +UninstalledAll=%1 آپ کے کمپیوٹر سے کامیابی سے ہٹا دیا گیا. +UninstalledMost=%1 ناتنصیب مکمل.%n%nکچھ عناصر نہیں ہٹایا جا سکا. یہ دستی طور پر ہٹا دیا جا سکتا ہے. +UninstalledAndNeedsRestart=%1 کی ناتنصیب مکمل کرنے کے لیے، آپ کا کمپیوٹر پھر شروع ہونا چاہیے.%n%nکیا آپ ابھی پھر شروع کرنا چاہتے ہیں؟ +UninstallDataCorrupted="%1" مسل خراب ہے. ناتنصیب نہیں کر سکتے + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=حصہ دارانہ مسل ہٹائیں? +ConfirmDeleteSharedFile2=نظام نشاندہی کرتا ہے کہ درج ذیل مشترکہ مسل کسی بھی پروگرام کے استعمال میں نہیں ہے. کیا آپ اس حصہ دارانہ مسل کو ہٹانے کے لیے ناتنصیب کرنا چاہیں گے?%n%nاگر کوئی پروگرام اب بھی اس مسل کا استعمال کر رہے ہیں اور اسے ہٹا دیا جاتا ہے، وہ پروگرام ٹھیک سے کام نہیں کر سکتے. اگر آپ کو یقین نہیں ہے، منتخب کریں نہیں. آپ کے سسٹم پر مسل چھوڑنا کسی بھی نقصان کا سبب نہیں ہوگا. +SharedFileNameLabel=مسل کا نام: +SharedFileLocationLabel=محل وقوع: +WizardUninstalling=غیر تنصیب حالت +StatusUninstalling=ناتنصیب %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=تنصیب %1. +ShutdownBlockReasonUninstallingApp=ناتنصیب %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 ورژن %2 +AdditionalIcons=اضافی شارٹ کٹس: +CreateDesktopIcon=ایک ڈیسک ٹاپ &تیز راہ بنائیں +CreateQuickLaunchIcon=ایک سریع &شروع تیز راہ بنائیں +ProgramOnTheWeb=%1 ویب پر +UninstallProgram=ناتنصیب %1 +LaunchProgram=شروع %1 +AssocFileExtension=&واپستہ %1 مع %2 مسل توسیع کریں +AssocingFileExtension=واپستہ %1 مع %2 مسل توسیع... +AutoStartProgramGroupDescription=آغاز: +AutoStartProgram=خودبخود شروع کریں %1 +AddonHostProgramNotFound=%1 آپ کی منتخب پوشہ میں نہیں واقع ہو سکا.%n%nکیا آپ بہرصورت جاری رکھنا چاہتے ہیں؟ diff --git a/Files/Languages/Unofficial/Uyghur.islu b/Files/Languages/Unofficial/Uyghur.islu new file mode 100644 index 00000000..e9f288dc --- /dev/null +++ b/Files/Languages/Unofficial/Uyghur.islu @@ -0,0 +1,385 @@ +; *** Inno Setup version 6.1.0+ Uyghur messages *** +; Translated by Irshat Ghalip (uqkun09@msn.cn) +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=ئۇيغۇرچە +LanguageID=$0480 +LanguageCodePage=0 +RightToLeft=yes +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=قاچىلاش +SetupWindowTitle=%1 - قاچىلاش +UninstallAppTitle=چىقىرىۋېتىش +UninstallAppFullTitle=%1 نى چىقىرىۋېتىش + +; *** Misc. common +InformationTitle=ئۇچۇر +ConfirmTitle=جەزملەشتۈرۈش +ErrorTitle=خاتالىق + +; *** SetupLdr messages +SetupLdrStartupMessage=ھازىر %1 قاچىلىنىدۇ. داۋاملاشتۇرامسىز؟ +LdrCannotCreateTemp=ۋاقىتلىق ھۆججەت قۇرالمىدى. قاچىلاش توختىتىلدى +LdrCannotExecTemp=ۋاقىتلىق مۇندەرىجىدىكى ھۆججەت ئىجرا بولمىدى. قاچىلاش توختىتىلدى +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nخاتالىق %2: %3 +SetupFileMissing=قاچىلاش مۇندەرىجىسىدە %1 ھۆججىتى يوق. مەسىلىنى تۈزۈتۈڭ ياكى پىروگراممىنىڭ يېڭى نۇسخىسىغا ئېرىشىڭ. +SetupFileCorrupt=قاچىلاش ھۆججەتلىرى بۇزۇلغان. پىروگراممىنىڭ يېڭى نۇسخىسىغا ئېرىشىڭ. +SetupFileCorruptOrWrongVer=قاچىلاش ھۆججەتلىرى بۇزۇلغان ياكى بۇ نەشرى بىلەن ماسلاشمايدۇ. مەسىلىنى تۈزۈتۈڭ ياكى پىروگراممىنىڭ يېڭى نۇسخىسىغا ئېرىشىڭ. +InvalidParameter=بۇيرۇق قۇرىدا ئىناۋەتسىز پارامېتىر بار:%n%n%1 +SetupAlreadyRunning=قاچىلاش پىروگراممىسى ئىجرا بولۇۋاتىدۇ. +WindowsVersionNotSupported=بۇ پىروگرامما كومپيۇتېرىڭىزدا ئىجرا بولۇۋاتقان Windows نەشرىنى قوللىمايدۇ. +WindowsServicePackRequired=بۇ پىروگرامما %1 مۇلازىمەت بولىقى %2 ياكى يېڭىسىنى تەلەپ قىلىدۇ. +NotOnThisPlatform=بۇ پىروگرامما %1 دا ئىجرا بولمايدۇ. +OnlyOnThisPlatform=بۇ پىروگرامما چوقۇم %1 دا ئىجرا قىلىنىشى كېرەك. +OnlyOnTheseArchitectures=بۇ پىروگراممىنى پەقەت تۆۋەندىكى بىر تەرەپ قىلغۇچ قۇرۇلمىسى ئۈچۈن لايىھەلەنگەن Windows نەشرىگە قاچىلاشقا بولىدۇ:%n%n%1 +WinVersionTooLowError=بۇ پىروگرامما %1 نەشرى %2 ياكى يېڭىسىنى تەلەپ قىلىدۇ. +WinVersionTooHighError=بۇ پىروگرامما %1 نەشرى %2 ياكى يېڭىسىغا قاچىلانمايدۇ. +AdminPrivilegesRequired=بۇ پىروگراممىنى قاچىلىغاندا چوقۇم باشقۇرغۇچى سالاھىيىتىدە كىرىشىڭىز كېرەك. +PowerUserPrivilegesRequired=بۇ پىروگراممىنى قاچىلىغاندا چوقۇم باشقۇرغۇچى ياكى ھوقۇقلۇق ئىشلەتكۈچىلەر گۇرۇپپىسىنىڭ ئەزاسى سالاھىيىتىدە كىرىشىڭىز كېرەك. +SetupAppRunningError=قاچىلاش پىروگراممىسى %1 نىڭ ئىجرا بولۇۋاتقانلىقىنى بايقىدى.%n%nئۇنىڭ ھەممە جەريانلىرىنى تاقاڭ ھەمدە «ماقۇل» نى چېكىپ داۋاملاشتۇرۇڭ. ياكى «ئىناۋەتسىز» نى چېكىپ چېكىنىڭ. +UninstallAppRunningError=چىقىرىۋېتىش پىروگراممىسى %1 نىڭ ئىجرا بولۇۋاتقانلىقىنى بايقىدى.%n%nئۇنىڭ ھەممە جەريانلىرىنى تاقاڭ ھەمدە «ماقۇل» نى چېكىپ داۋاملاشتۇرۇڭ. ياكى «ئىناۋەتسىز» نى چېكىپ چېكىنىڭ. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=قاچىلاش پىروگراممىسىنىڭ قاچىلاش ھالىتىنى تاللاش +PrivilegesRequiredOverrideInstruction=قاچىلاش ھالىتىنى تاللاش +PrivilegesRequiredOverrideText1=%1 نى بارلىق ئىشلەتكۈچىلەر (باشقۇرغۇچىلىق ھوقۇقى تەلەپ قىلىدۇ) ئۈچۈن ياكى سىز ئۈچۈنلا قاچىلاشقا بولىدۇ. +PrivilegesRequiredOverrideText2=%1 نى سىز ئۈچۈنلا ياكى بارلىق ئىشلەتكۈچىلەر (باشقۇرغۇچىلىق ھوقۇقى تەلەپ قىلىدۇ) ئۈچۈن قاچىلاشقا بولىدۇ. +PrivilegesRequiredOverrideAllUsers=بارلىق ئىشلەتكۈچىلەرگە قاچىلاش(&A) +PrivilegesRequiredOverrideAllUsersRecommended=بارلىق ئىشلەتكۈچىلەرگە قاچىلاش(&A) (تەۋسىيە) +PrivilegesRequiredOverrideCurrentUser=پەقەت مەن ئۈچۈنلا قاچىلاش(&M) +PrivilegesRequiredOverrideCurrentUserRecommended=پەقەت مەن ئۈچۈنلا قاچىلاش(&M) (تەۋسىيە) + +; *** Misc. errors +ErrorCreatingDir=قاچىلاش پىروگراممىسى «%1» مۇندەرىجىسىنى قۇرالمىدى +ErrorTooManyFilesInDir=«%1» مۇندەرىجىسىگە ھۆججەت قۇرالمىدى، چۈنكى ئۇنىڭدا بەك كۆپ ھۆججەت بار + +; *** Setup common messages +ExitSetupTitle=قاچىلاشتىن چېكىنىش +ExitSetupMessage=قاچىلاش تاماملانمىدى. ئەگەر ھازىر چېكىنسىڭىز، پىروگرامما قاچىلانمايدۇ.%n%nقاچىلاشنى تاماملاش ئۈچۈن، كېلەر قېتىم قاچىلاش پىروگراممىسىنى قايتا ئىجرا قىلسىڭىز بولىدۇ.%n%nقاچىلاشتىن چېكىنەمسىز؟ +AboutSetupMenuItem=قاچىلاش پىروگراممىسى ھەققىدە(&A)... +AboutSetupTitle=قاچىلاش پىروگراممىسى ھەققىدە +AboutSetupMessage=%1 نەشرى %2%n%3%n%n%1 باش بەت:%n%4 +AboutSetupNote= +TranslatorNote=Uyghur translation by Irshat Ghalip (uqkun09@msn.cn) + +; *** Buttons +ButtonBack=< قايتىش(&B) +ButtonNext=كېيىنكى(&N) > +ButtonInstall=قاچىلاش(&I) +ButtonOK=ماقۇل +ButtonCancel=ئىناۋەتسىز +ButtonYes=ھەئە(&Y) +ButtonYesToAll=ھەممىگە ھەئە(&A) +ButtonNo=ياق(&N) +ButtonNoToAll=ھەممىگە ياق(&O) +ButtonFinish=تامام(&F) +ButtonBrowse=كۆرۈش(&B)... +ButtonWizardBrowse=كۆرۈش(&R)... +ButtonNewFolder=يېڭى قىسقۇچ قۇرۇش(&M) + +; *** "Select Language" dialog messages +SelectLanguageTitle=قاچىلاش تىلىنى تاللاش +SelectLanguageLabel=قاچىلاش جەريانىدا ئىشلىتىدىغان تىلنى تاللاڭ. + +; *** Common wizard text +ClickNext=«كېيىنكى» نى چېكىپ داۋاملاشتۇرۇڭ ياكى «ئىناۋەتسىز» نى چېكىپ قاچىلاشتىن چېكىنىڭ. +BeveledLabel= +BrowseDialogTitle=قىسقۇچ كۆرۈش +BrowseDialogLabel=تۆۋەندىكى تىزىملىكتىن قىسقۇچ تاللاڭ ھەمدە «ماقۇل» نى چېكىڭ. +NewFolderName=يېڭى قىسقۇچ + +; *** "Welcome" wizard page +WelcomeLabel1=[name] نى قاچىلاش يېتەكچىسىگە خۇش كېلىپسىز +WelcomeLabel2=كومپيۇتېرىڭىزغا [name/ver] نى قاچىلايدۇ.%n%nداۋاملاشتۇرۇشتىن ئىلگىرى باشقا بارلىق دېتاللارنى تاقاش تەۋسىيە قىلىنىدۇ. + +; *** "Password" wizard page +WizardPassword=پارول +PasswordLabel1=بۇ قاچىلاش پارول بىلەن قوغدالغان. +PasswordLabel3=پارولنى كىرگۈزۈڭ ھەمدە «كېيىنكى» نى چېكىپ داۋاملاشتۇرۇڭ. پارول چوڭ-كىچىك ھەرپنى پەرقلەندۈرىدۇ. +PasswordEditLabel=پارول(&P): +IncorrectPassword=كىرگۈزگەن پارولىڭىز خاتا. قايتا سىناپ بېقىڭ. + +; *** "License Agreement" wizard page +WizardLicense=ئىجازەت كېلىشىمى +LicenseLabel=داۋاملاشتۇرۇشتىن ئىلگىرى تۆۋەندىكى مۇھىم ئۇچۇرلارنى ئوقۇڭ. +LicenseLabel3=تۆۋەندىكى ئىجازەت كېلىشىمىنى ئوقۇڭ. قاچىلاشنى داۋاملاشتۇرۇشتىن ئىلگىرى چوقۇم بۇ كېلىشىمنىڭ ماددىلىرىغا قوشۇلۇشىڭىز كېرەك. +LicenseAccepted=كېلىشىمگە قوشۇلىمەن(&A) +LicenseNotAccepted=كېلىشىمگە قوشۇلمايمەن(&D) + +; *** "Information" wizard pages +WizardInfoBefore=ئۇچۇر +InfoBeforeLabel=داۋاملاشتۇرۇشتىن ئىلگىرى تۆۋەندىكى مۇھىم ئۇچۇرلارنى ئوقۇڭ. +InfoBeforeClickLabel=قاچىلاشنى داۋاملاشتۇرۇشقا تەييارلانغاندا، «كېيىنكى» نى چېكىڭ. +WizardInfoAfter=ئۇچۇر +InfoAfterLabel=داۋاملاشتۇرۇشتىن ئىلگىرى تۆۋەندىكى مۇھىم ئۇچۇرلارنى ئوقۇڭ. +InfoAfterClickLabel=قاچىلاشنى داۋاملاشتۇرۇشقا تەييارلانغاندا، «كېيىنكى» نى چېكىڭ. + +; *** "User Information" wizard page +WizardUserInfo=ئىشلەتكۈچى ئۇچۇرى +UserInfoDesc=ئۇچۇرىڭىزنى كىرگۈزۈڭ. +UserInfoName=ئىشلەتكۈچى نامى(&U): +UserInfoOrg=ئىدارە(&O): +UserInfoSerial=تەرتىپ نومۇرى(&S): +UserInfoNameRequired=نامىنى كىرگۈزۈشىڭىز كېرەك. + +; *** "Select Destination Location" wizard page +WizardSelectDir=قاچىلاش ئورنىنى تاللاش +SelectDirDesc=[name] نى قەيەرگە قاچىلاش كېرەك؟ +SelectDirLabel3=قاچىلاش پىروگراممىسى [name] نى تۆۋەندىكى قىسقۇچقا قاچىلايدۇ. +SelectDirBrowseLabel=«كېيىنكى» نى چېكىپ داۋاملاشتۇرۇڭ. باشقا قىسقۇچ تاللىماقچى بولسىڭىز، «كۆرۈش» نى چېكىڭ. +DiskSpaceGBLabel=كەم دېگەندە [gb]GB بىكار دىسكا بوشلۇقى تەلەپ قىلىنىدۇ. +DiskSpaceMBLabel=كەم دېگەندە [mb]MB بىكار دىسكا بوشلۇقى تەلەپ قىلىنىدۇ. +CannotInstallToNetworkDrive=قاچىلاش پىروگراممىسى تور دىسكىسىغا قاچىلىيالمايدۇ. +CannotInstallToUNCPath=قاچىلاش پىروگراممىسى UNC يولىغا قاچىلىيالمايدۇ. +InvalidPath=دىسكا بەلگىسى بار تولۇق يولىنى كىرگۈزۈشىڭىز كېرەك؛ مەسىلەن:%n%nC:\APP%n%nياكى تۆۋەندىكىدەك UNC يولى:%n%n\\server\share +InvalidDrive=سىز تاللىغان دىسكا ياكى UNC ئورتاقلىشىش يوق ياكى زىيارەت قىلغىلى بولمايدۇ. باشقا بىرىنى تاللاڭ. +DiskSpaceWarningTitle=دىسكا بوشلۇقى يېتىشمىدى +DiskSpaceWarning=قاچىلاش ئۈچۈن كەم دېگەندە %1KB بىكار بوشلۇق كېتىدۇ، بىراق تاللانغان دىسكىدا ئاران %2KB بىكار بوشلۇق بار.%n%nشۇنداقتىمۇ داۋاملاشتۇرامسىز؟ +DirNameTooLong=قىسقۇچ نامى ياكى يولى بەك ئۇزۇن. +InvalidDirName=قىسقۇچ نامى ئىناۋەتسىز. +BadDirName32=قىسقۇچ نامى تۆۋەندىكى ھەرپ-بەلگىلەرنى ئۆز ئىچىگە ئالالمايدۇ:%n%n%1 +DirExistsTitle=قىسقۇچ بار +DirExists=قىسقۇچ:%n%n%1%n%nباركەن. شۇنداقتىمۇ مۇشۇ قىسقۇچقا قاچىلامسىز؟ +DirDoesntExistTitle=قىسقۇچ يوق +DirDoesntExist=قىسقۇچ:%n%n%1%n%nيوقكەن. بۇ قىسقۇچنى قۇرامسىز؟ + +; *** "Select Components" wizard page +WizardSelectComponents=بىرىكمە تاللاش +SelectComponentsDesc=قايسى بىرىكمىلەرنى قاچىلاش كېرەك؟ +SelectComponentsLabel2=قاچىلايدىغان بىرىكمىلەرنى تاللاڭ؛ قاچىلىمايدىغان بىرىكمىلەرنى تاللىماڭ. داۋاملاشتۇرۇشقا تەييارلانغاندا «كېيىنكى» نى چېكىڭ. +FullInstallation=تولۇق قاچىلاش +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=ئىخچام قاچىلاش +CustomInstallation=ئىختىيارى قاچىلاش +NoUninstallWarningTitle=بىرىكمە بار +NoUninstallWarning=قاچىلاش پىروگراممىسى كومپيۇتېرىڭىزغا تۆۋەندىكى بىرىكمىلەرنىڭ قاچىلانغانلىقىنى بايقىدى:%n%n%1%n%nبۇ بىرىكمىلەرنى تاللىمىغاندا ئۇلارنى چىقىرىۋەتمەيدۇ.%n%nشۇنداقتىمۇ داۋاملاشتۇرامسىز؟ +ComponentSize1=%1KB +ComponentSize2=%1MB +ComponentsDiskSpaceGBLabel=نۆۋەتتىكى تاللاش كەم دېگەندە [gb]GB دىسكا بوشلۇقى تەلەپ قىلىدۇ. +ComponentsDiskSpaceMBLabel=نۆۋەتتىكى تاللاش كەم دېگەندە [mb]MB دىسكا بوشلۇقى تەلەپ قىلىدۇ. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=قوشۇمچە ۋەزىپىلەرنى تاللاش +SelectTasksDesc=قايسى قوشۇمچە ۋەزىپىلەرنى قىلىش كېرەك؟ +SelectTasksLabel2=[name] نى قاچىلاۋاتقاندا قىلىدىغان ۋەزىپىلەرنى تاللاڭ ھەمدە «كېيىنكى» نى چېكىڭ. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=باشلاش تىزىملىكىگە قىسقۇچ تاللاش +SelectStartMenuFolderDesc=پىروگراممىنىڭ قىسقا يولىنى قەيەرگە قۇرۇش كېرەك؟ +SelectStartMenuFolderLabel3=قاچىلاش پىروگراممىسى باشلاش تىزىملىكىدىكى تۆۋەندىكى قىسقۇچقا پىروگراممىنىڭ قىسقا يولىنى قۇرىدۇ. +SelectStartMenuFolderBrowseLabel=«كېيىنكى» نى چېكىپ داۋاملاشتۇرۇڭ. باشقا قىسقۇچ تاللىماقچى بولسىڭىز، «كۆرۈش» نى چېكىڭ. +MustEnterGroupName=قىسقۇچ نامىنى كىرگۈزۈشىڭىز كېرەك. +GroupNameTooLong=قىسقۇچ نامى ياكى يولى بەك ئۇزۇن. +InvalidGroupName=قىسقۇچ نامى ئىناۋەتسىز. +BadGroupName=قىسقۇچ نامى تۆۋەندىكى ھەرپ-بەلگىلەرنى ئۆز ئىچىگە ئالالمايدۇ:%n%n%1 +NoProgramGroupCheck2=باشلاش تىزىملىكىگە قىسقۇچ قۇرمايمەن(&D) + +; *** "Ready to Install" wizard page +WizardReady=قاچىلاشقا تەييارلاندى +ReadyLabel1=قاچىلاش پىروگراممىسى كومپيۇتېرىڭىزغا [name] نى قاچىلاشقا تەييارلاندى. +ReadyLabel2a=قاچىلاشنى داۋاملاشتۇرۇش ئۈچۈن «قاچىلاش» نى چېكىڭ. تەڭشەكلەرنى تەكشۈرمەكچى ياكى ئۆزگەرتمەكچى بولسىڭىز «قايتىش» نى چېكىڭ. +ReadyLabel2b=قاچىلاشنى داۋاملاشتۇرۇش ئۈچۈن «قاچىلاش» نى چېكىڭ. +ReadyMemoUserInfo=ئىشلەتكۈچى ئۇچۇرى: +ReadyMemoDir=قاچىلاش ئورنى: +ReadyMemoType=قاچىلاش تىپى: +ReadyMemoComponents=تاللانغان بىرىكمىلەر: +ReadyMemoGroup=باشلاش تىزىملىكىدىكى قىسقۇچ: +ReadyMemoTasks=قوشۇمچە ۋەزىپىلەر: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=قوشۇمچە ھۆججەتلەرنى چۈشۈرۈۋاتىدۇ... +ButtonStopDownload=چۈشۈرۈشنى توختىتىش(&S) +StopDownload=چۈشۈرۈشنى راستتىنلا توختىتامسىز؟ +ErrorDownloadAborted=چۈشۈرۈش توختىتىلدى +ErrorDownloadFailed=چۈشۈرەلمىدى: %1 %2 +ErrorDownloadSizeFailed=چوڭلۇقىغا ئېرىشەلمىدى: %1 %2 +ErrorFileHash1=ھۆججەت Hash نى تەكشۈرەلمىدى: %1 +ErrorFileHash2=ئىناۋەتسىز ھۆججەت Hash: كۈتكىنى %1، تېپىلغىنى %2 +ErrorProgress=ئىناۋەتسىز ئىلگىرىلەش: %1، جەمئىي: %2 +ErrorFileSize=ئىناۋەتسىز ھۆججەت چوڭلۇقى: كۈتكىنى %1، تېپىلغىنى %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=قاچىلاشقا تەييارلىنىۋاتىدۇ +PreparingDesc=قاچىلاش پىروگراممىسى كومپيۇتېرىڭىزغا [name] نى قاچىلاشقا تەييارلىنىۋاتىدۇ. +PreviousInstallNotCompleted=ئالدىنقى پىروگراممىنى قاچىلاش ياكى چىقىرىۋېتىش تاماملانمىدى. قاچىلاشنى تاماملاش ئۈچۈن كومپيۇتېرىڭىزنى قايتا قوزغىتىشىڭىز كېرەك.%n%nكومپيۇتېرىڭىز قايتا قوزغالغاندىن كېيىن، قاچىلاش پىروگراممىسىنى قايتا ئىجرا قىلىپ [name] نى قاچىلاشنى تاماملاڭ. +CannotContinue=قاچىلاش پىروگراممىسىنى داۋاملاشتۇرغىلى بولمايدۇ. چېكىنىش ئۈچۈن «ئىناۋەتسىز» نى چېكىڭ. +ApplicationsFound=تۆۋەندىكى دېتاللار قاچىلاش پىروگراممىسى يېڭىلايدىغان ھۆججەتلەرنى ئىشلىتىۋاتىدۇ. قاچىلاش پىروگراممىسىنىڭ بۇ دېتاللارنى ئاپتوماتىك تاقىشىغا يول قويۇشىڭىز تەۋسىيە قىلىنىدۇ. +ApplicationsFound2=تۆۋەندىكى دېتاللار قاچىلاش پىروگراممىسى يېڭىلايدىغان ھۆججەتلەرنى ئىشلىتىۋاتىدۇ. قاچىلاش پىروگراممىسىنىڭ بۇ دېتاللارنى ئاپتوماتىك تاقىشىغا يول قويۇشىڭىز تەۋسىيە قىلىنىدۇ. قاچىلاش تاماملانغاندىن كېيىن، قاچىلاش پىروگراممىسى بۇ دېتاللارنى قايتا قوزغىتىشقا ئۇرۇنىدۇ. +CloseApplications=دېتاللارنى ئاپتوماتىك تاقاش(&A) +DontCloseApplications=دېتاللارنى تاقىماسلىق(&D) +ErrorCloseApplications=قاچىلاش پىروگراممىسى بارلىق دېتاللارنى ئاپتوماتىك تاقىيالمىدى. داۋاملاشتۇرۇشتىن بۇرۇن بۇ دېتاللارنى تاقاش تەۋسىيە قىلىنىدۇ. +PrepareToInstallNeedsRestart=قاچىلاش پىروگراممىسى كومپيۇتېرىڭىزنى قايتا قوزغىتىشى كېرەك. كومپيۇتېرىڭىز قايتا قوزغالغاندىن كېيىن، قاچىلاش پىروگراممىسىنى قايتا ئىجرا قىلىپ [name] نى قاچىلاشنى تاماملاڭ.%n%nھازىرلا قايتا قوزغىتامسىز؟ + +; *** "Installing" wizard page +WizardInstalling=قاچىلاۋاتىدۇ +InstallingLabel=قاچىلاش پىروگراممىسى كومپيۇتېرىڭىزغا [name] نى قاچىلاۋاتىدۇ، سەل ساقلاڭ. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=[name] نى قاچىلاش تامام +FinishedLabelNoIcons=قاچىلاش پىروگراممىسى كومپيۇتېرىڭىزغا [name] نى قاچىلاپ بولدى. +FinishedLabel=قاچىلاش پىروگراممىسى كومپيۇتېرىڭىزغا [name] نى قاچىلاپ بولدى. قاچىلانغان قىسقا يوللارنى تاللاش ئارقىلىق دېتالنى قوزغىتالايسىز. +ClickFinish=«تامام» نى چېكىپ قاچىلاش پىروگراممىسىدىن چېكىنىڭ. +FinishedRestartLabel=[name] نى قاچىلاشنى تاماملاش ئۈچۈن، قاچىلاش پىروگراممىسى كومپيۇتېرىڭىزنى قايتا قوزغىتىشى كېرەك. ھازىرلا قايتا قوزغىتامسىز؟ +FinishedRestartMessage=[name] نى قاچىلاشنى تاماملاش ئۈچۈن، قاچىلاش پىروگراممىسى كومپيۇتېرىڭىزنى قايتا قوزغىتىشى كېرەك.%n%nھازىرلا قايتا قوزغىتامسىز؟ +ShowReadmeCheck=ھەئە، چۈشەندۈرۈش ھۆججىتىنى ئوقۇيمەن +YesRadio=ھەئە، كومپيۇتېرنى ھازىرلا قايتا قوزغىتىمەن(&Y) +NoRadio=ياق، كومپيۇتېرنى سەل تۇرۇپ قايتا قوزغىتىمەن(&N) +; used for example as 'Run MyProg.exe' +RunEntryExec=%1 نى ئىجرا قىلىش +; used for example as 'View Readme.txt' +RunEntryShellExec=%1 نى كۆرۈش + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=قاچىلاش پىروگراممىسىغا كېيىنكى دىسكا لازىم +SelectDiskLabel2=%1 دىسكىنى سېلىپ، «ماقۇل» نى چېكىڭ.%n%nئەگەر بۇ دىسكىدىكى ھۆججەتلەرنى تۆۋەندىكى قىسقۇچلاردىن باشقىسىدا تاپقىلى بولسا، توغرا يولىنى كىرگۈزۈڭ ياكى «كۆرۈش» نى چېكىڭ. +PathLabel=يولى(&P): +FileNotInDir2=«%1» ھۆججىتى «%2» دىن تېپىلمىدى. توغرا دىسكىنى سېلىڭ ياكى باشقا قىسقۇچنى تاللاڭ. +SelectDirectoryLabel=كېيىنكى دىسكىنىڭ ئورنىنى بەلگىلەڭ. + +; *** Installation phase messages +SetupAborted=قاچىلاش پىروگراممىسى تاماملانمىدى.%n%nمەسىلىنى تۈزىتىپ، قاچىلاش پىروگراممىسىنى قايتا ئىجرا قىلىڭ. +AbortRetryIgnoreSelectAction=مەشغۇلات تاللاش +AbortRetryIgnoreRetry=قايتا سىناش(&T) +AbortRetryIgnoreIgnore=خاتالىققا پەرۋا قىلماي داۋاملاشتۇرۇش(&I) +AbortRetryIgnoreCancel=قاچىلاشنى بىكار قىلىش + +; *** Installation status messages +StatusClosingApplications=دېتاللارنى تاقاۋاتىدۇ... +StatusCreateDirs=مۇندەرىجىلەرنى قۇرۇۋاتىدۇ... +StatusExtractFiles=ھۆججەتلەرنى يېيىۋاتىدۇ... +StatusCreateIcons=قىسقا يوللىرىنى قۇرۇۋاتىدۇ... +StatusCreateIniEntries=INI مەزمۇنلىرىنى قۇرۇۋاتىدۇ... +StatusCreateRegistryEntries=تىزىملاش جەدۋىلىنى قۇرۇۋاتىدۇ... +StatusRegisterFiles=ھۆججەتلەرنى تىزىملاۋاتىدۇ... +StatusSavingUninstall=چىقىرىۋېتىش ئۇچۇرىنى ساقلاۋاتىدۇ... +StatusRunProgram=قاچىلاشنى تاماملاۋاتىدۇ... +StatusRestartingApplications=دېتاللارنى قايتا قوزغىتىۋاتىدۇ... +StatusRollback=ئۆزگەرتىشلەرنى قايتۇرۇۋاتىدۇ... + +; *** Misc. errors +ErrorInternal2=ئىچكى خاتالىق: %1 +ErrorFunctionFailedNoCode=%1 مەغلۇپ بولدى +ErrorFunctionFailed=%1 مەغلۇپ بولدى؛ كودى %2 +ErrorFunctionFailedWithMessage=%1 مەغلۇپ بولدى؛ كودى %2.%n%3 +ErrorExecutingProgram=ئىجرا قىلالمىغان ھۆججەت:%n%1 + +; *** Registry errors +ErrorRegOpenKey=تىزىملاش جەدۋىلىنى ئېچىش خاتالىقى:%n%1\%2 +ErrorRegCreateKey=تىزىملاش جەدۋىلىنى قۇرۇش خاتالىقى:%n%1\%2 +ErrorRegWriteKey=تىزىملاش جەدۋىلىنى يېزىش خاتالىقى:%n%1\%2 + +; *** INI errors +ErrorIniEntry=«%1» ھۆججىتىگە INI مەزمۇنىنى قۇرۇش خاتالىقى. + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=بۇ ھۆججەتنى ئۆتكۈزۈۋېتىش(&S) (تەۋسىيە قىلىنمايدۇ) +FileAbortRetryIgnoreIgnoreNotRecommended=خاتالىققا پەرۋا قىلماي داۋاملاشتۇرۇش(&I) (تەۋسىيە قىلىنمايدۇ) +SourceIsCorrupted=مەنبە ھۆججەت بۇزۇلغان +SourceDoesntExist=مەنبە ھۆججەت «%1» يوق +ExistingFileReadOnly2=بار ھۆججەتنى پەقەت ئوقۇشقىلا بولىدىغان بولغاچقا ئالماشتۇرغىلى بولمايدۇ. +ExistingFileReadOnlyRetry=ئوقۇشقىلا بولىدىغان خاسلىقنى چىقىرىۋېتىپ قايتا سىناش(&R) +ExistingFileReadOnlyKeepExisting=بار ھۆججەتنى ساقلاپ قىلىش(&K) +ErrorReadingExistingDest=بار ھۆججەتنى ئوقۇشتا خاتالىق كۆرۈلدى: +FileExistsSelectAction=مەشغۇلات تاللاش +FileExists2=ھۆججەت ئاللىبۇرۇن بار. +FileExistsOverwriteExisting=بار ھۆججەتنى قاپلىۋېتىش(&O) +FileExistsKeepExisting=بار ھۆججەتنى ساقلاپ قىلىش(&K) +FileExistsOverwriteOrKeepAll=كېيىنكى توقۇنۇشقا بۇنى قىلىش(&D) +ExistingFileNewerSelectAction=مەشغۇلات تاللاش +ExistingFileNewer2=بار ھۆججەت قاچىلىماقچى بولغان ھۆججەتتىن يېڭى. +ExistingFileNewerOverwriteExisting=بار ھۆججەتنى قاپلىۋېتىش(&O) +ExistingFileNewerKeepExisting=بار ھۆججەتنى ساقلاپ قىلىش(&K) (تەۋسىيە) +ExistingFileNewerOverwriteOrKeepAll=كېيىنكى توقۇنۇشقا بۇنى قىلىش(&D) +ErrorChangingAttr=بار ھۆججەتنىڭ خاسلىقىنى ئۆزگەرتىشتە خاتالىق كۆرۈلدى: +ErrorCreatingTemp=نىشان مۇندەرىجىگە ھۆججەت قۇرۇشتا خاتالىق كۆرۈلدى: +ErrorReadingSource=مەنبە ھۆججەتنى ئوقۇشتا خاتالىق كۆرۈلدى: +ErrorCopying=ھۆججەت كۆچۈرۈشتە خاتالىق كۆرۈلدى: +ErrorReplacingExistingFile=بار ھۆججەتنى ئالماشتۇرۇشتا خاتالىق كۆرۈلدى: +ErrorRestartReplace=قايتا ئالماشتۇرالمىدى: +ErrorRenamingTemp=نىشان مۇندەرىجىدىكى ھۆججەتنىڭ نامىنى ئۆزگەرتىشتە خاتالىق كۆرۈلدى: +ErrorRegisterServer=DLL/OCX نى تىزىملىتالمىدى: %1 +ErrorRegSvr32Failed=RegSvr32 مەغلۇپ بولدى، چېكىنىش كودى %1 +ErrorRegisterTypeLib=تىپ ئامبىرىنى تىزىملىتالمىدى: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2، %3) +UninstallDisplayNameMark32Bit=32 بىت +UninstallDisplayNameMark64Bit=64 بىت +UninstallDisplayNameMarkAllUsers=بارلىق ئىشلەتكۈچى +UninstallDisplayNameMarkCurrentUser=نۆۋەتتىكى ئىشلەتكۈچى + +; *** Post-installation errors +ErrorOpeningReadme=چۈشەندۈرۈش ھۆججىتىنى ئېچىشتا خاتالىق كۆرۈلدى. +ErrorRestartingComputer=قاچىلاش پىروگراممىسى كومپيۇتېرنى قايتا قوزغىتالمىدى. بۇنى ئۆزىڭىز قىلىڭ. + +; *** Uninstaller messages +UninstallNotFound=«%1» ھۆججىتى يوق. چىقىرىۋېتەلمەيدۇ. +UninstallOpenError=«%1» ھۆججىتىنى ئاچالمىدى. چىقىرىۋېتەلمەيدۇ +UninstallUnsupportedVer=چىقىرىۋېتىش خاتىرە ھۆججىتى «%1» نىڭ فورماتىنى بۇ نەشرىدىكى چىقىرىۋەتكۈچ تونۇيالمىدى. چىقىرىۋېتەلمەيدۇ +UninstallUnknownEntry=چىقىرىۋېتىش خاتىرىسىدە نامەلۇم مەزمۇنغا (%1) يولۇقتى +ConfirmUninstall=%1 ۋە ئۇنىڭ بارلىق بىرىكمىلىرىنى پۈتۈنلەي چىقىرىۋېتەمسىز؟ +UninstallOnlyOnWin64=بۇ قاچىلاشنى پەقەت 64 بىتلىق Windows دا چىقىرىۋەتكىلى بولىدۇ. +OnlyAdminCanUninstall=بۇ قاچىلاشنى پەقەت باشقۇرغۇچىلىق ھوقۇقى بار ئىشلەتكۈچى چىقىرىۋېتەلەيدۇ. +UninstallStatusLabel=كومپيۇتېرىڭىزدىن %1 چىقىرىلىۋاتىدۇ، سەل ساقلاڭ. +UninstalledAll=%1 نى كومپيۇتېرىڭىزدىن ئوڭۇشلۇق چىقىرىۋەتتى. +UninstalledMost=%1 چىقىرىۋەتتى.%n%nبەزى ئېلېمېنتلارنى چىقىرىۋېتەلمىدى. بۇلارنى ئۆزىڭىز چىقىرىۋەتسىڭىز بولىدۇ. +UninstalledAndNeedsRestart=%1 نى چىقىرىۋېتىش ئۈچۈن، كومپيۇتېرىڭىزنى قايتا قوزغىتىش كېرەك.%n%nھازىرلا قايتا قوزغىتامسىز؟ +UninstallDataCorrupted=«%1» ھۆججىتى بۇزۇلغان. چىقىرىۋېتەلمەيدۇ + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=ئورتاقلاشقان ھۆججەتنى چىقىرىۋېتەمسىز؟ +ConfirmDeleteSharedFile2=سىستېما تۆۋەندىكى ئورتاقلاشقان ھۆججەتنى ھېچقانداق پىروگراممىنىڭ ئىشلەتمەيدىغانلىقىنى كۆرسەتتى. بۇ ئورتاقلاشقان ھۆججەتنى چىقىرىۋېتەمسىز؟%n%nئەگەر بۇ ھۆججەتنى چىقىرىۋەتكەندىن كېيىن بىرەر پىروگرامما ئىشلەتسە، شۇ پىروگراممىدا نورمالسىزلىق چىقىشى مۇمكىن. ئەگەر ئىككىلەنسىڭىز، «ياق» نى تاللاڭ. ھۆججەت سىستېمىڭىزدا قالسا ھېچقانداق زىيىنى يوق. +SharedFileNameLabel=ھۆججەت نامى: +SharedFileLocationLabel=ئورنى: +WizardUninstalling=چىقىرىۋېتىش ھالىتى +StatusUninstalling=%1 نى چىقىرىۋاتىدۇ... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=%1 نى قاچىلاۋاتىدۇ. +ShutdownBlockReasonUninstallingApp=%1 نى چىقىرىۋاتىدۇ. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 نەشرى %2 +AdditionalIcons=قوشۇمچە قىسقا يولى: +CreateDesktopIcon=ئۈستەليۈزىگە قىسقا يول قۇرۇش(&D) +CreateQuickLaunchIcon=تېز قوزغىتىشقا قىسقا يول قۇرۇش(&Q) +ProgramOnTheWeb=توردىكى %1 +UninstallProgram=%1 نى چىقىرىۋېتىش +LaunchProgram=%1 نى قوزغىتىش +AssocFileExtension=%1 نى %2 ھۆججەت كېڭەيتمە نامى بىلەن باغلاش(&A) +AssocingFileExtension=%1 نى %2 ھۆججەت كېڭەيتمە نامى بىلەن باغلاۋاتىدۇ... +AutoStartProgramGroupDescription=قوزغىتىش: +AutoStartProgram=%1 نى ئاپتوماتىك قوزغىتىش +AddonHostProgramNotFound=سىز تاللىغان قىسقۇچتا %1 تېپىلمىدى.%n%nشۇنداقتىمۇ داۋاملاشتۇرامسىز؟ diff --git a/Files/Languages/Unofficial/Uzbek.isl b/Files/Languages/Unofficial/Uzbek.isl new file mode 100644 index 00000000..5b521723 --- /dev/null +++ b/Files/Languages/Unofficial/Uzbek.isl @@ -0,0 +1,325 @@ +; *** Inno Setup version 5.5.3+ Uzbek messages *** +; +; Translated from Russian by Shamsiddinov Zafar, zfrx94@mail.ru +; Updated translating version +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +LanguageName=<004F><2018><007A><0062><0065><006B><0063><0068><0061> +LanguageID=$0443 +LanguageCodePage=1251 + +[Messages] + +; *** Application titles +SetupAppTitle=Ornatish +SetupWindowTitle=%1 Ornatish +UninstallAppTitle=Uzoqlashtirish +UninstallAppFullTitle=%1 Uzoqlashtirish + +; *** Misc. common +InformationTitle=Ma'lumot +ConfirmTitle=Tasdiqlash +ErrorTitle=Xatolik + +; *** SetupLdr messages +SetupLdrStartupMessage=Ushbu %1 dasturi sizning kompyuteringizga ornatiladi, davom etirilsinmi? +LdrCannotCreateTemp=Vaqtinchalik faylni yaratib bolmadi. Ornatish bekor qilindi +LdrCannotExecTemp=Vaqtinchalik katalogdagi faylni bajarib bolmadi. Ornatish bekor qilindi + +; *** Startup error messages +LastErrorMessage=%1.%n%nXatolik %2: %3 +SetupFileMissing=%1 fayli ornatish jildda mavjud emas. Iltimos, muammoni bartaraf eting yoki dasturning yangi versiyasini oling. +SetupFileCorrupt=Ornatiladigan fayllar shikastlangan. Iltimos, dasturning yangi toliq nusxasini oling. +SetupFileCorruptOrWrongVer=Ushbu ornatiladigan fayl shikastlangan yoki ornatish dasturi versiyasiga muvofiq emas. Iltimos, muammoni bartaraf eting yoki dasturning yangi nusxasini oling. +InvalidParameter=Buyruqlar satrida ruxsat etilmagan parametr bor:%n%n%1 +SetupAlreadyRunning=Ornatish dasturi allaqachon ishga solingan. +WindowsVersionNotSupported=Ushbu ornatiladigan dastur, Windows versiyasini qollamaydi. +WindowsServicePackRequired=Bu dasturga %1 Service Pack %2 yoki undan oldingi versiya kerak. +NotOnThisPlatform=Bu dastur %1 da ishlamaydi. +OnlyOnThisPlatform=Bu dasturni faqat %1 da ishga solish mumkin. +OnlyOnTheseArchitectures=Ushbu dasturni Windows tizimining quyidagi arxitektorli prossesiriga ornatish mumkin:%n%n%1 +MissingWOW64APIs=Siz ishlatayotgan Windows versiyasida, 64-bitli ornatishni bajarish funksiyasi mavjud emas. Bu muammoni bartaraf etish uchun (Service Pack) %1 paketini ornatish kerak boladi. +WinVersionTooLowError=Bu dasturga %1 versiya %2 yoki undan yuqorisi kerak. +WinVersionTooHighError=Dastur %1 da %2 versiyasida ornatishning imkoni yoq. +AdminPrivilegesRequired=Ushbu dasturni ornatish uchun siz "Admin" tarzida tizimga kirishingiz kerak. +PowerUserPrivilegesRequired=Ushbu dasturni ornatish uchun siz "Admin" yoki (Power Users) tarzida kirishingiz kerak. +SetupAppRunningError=Aynan oz nusxasi ishlab turgani aniqlandi %1.%n%nIltmos, dasturning barcha nusxalarini yoping, songra davom etish uchun OK tugmasini bosing yoki chiqish uchun Bekor qilmoq tugmasini bosing. +UninstallAppRunningError=Uzoqlashtirgich dastur ishga solinganligini aniqladi %1.%n%nIltimos, uzoqlashtirishdan oldin ushbu dasturni yoping, song davom etish uchun OK tugmasini bosing yoki chiqish uchun Bekor qilmoq tugmasini bosing. + +; *** Misc. errors +ErrorCreatingDir="%1" jildini hosil qilib bolmadi +ErrorTooManyFilesInDir="%1" katalogida fayl yaratib bolmadi, unda juda kop fayllar bor + +; *** Setup common messages +ExitSetupTitle=Ornatish dasturidan chiqish +ExitSetupMessage=Ornatish tugallanmadi. Agar chiqsangiz, dastur ornatilmay qoladi.%n%nOrnatishni tugallash uchun dasturga keyinroq kirishingiz ham mumkin.%n%nOrnatish dasturidan chiqilsinmi? +AboutSetupMenuItem=&Dastur haqida... +AboutSetupTitle=Dastur haqida +AboutSetupMessage=%1, versiya %2%n%3%n%nSayt %1:%n%4 +AboutSetupNote= +TranslatorNote=Uzbek translation by Shamsiddinov Zafar // zfrx94@mail.ru + +; *** Buttons +ButtonBack=< &Ortga +ButtonNext=&Keyingi > +ButtonInstall=&Ornatmoq +ButtonOK=OK +ButtonCancel=Bekor qilmoq +ButtonYes=&Ha +ButtonYesToAll=Hammasiga &Ha +ButtonNo=&Yoq +ButtonNoToAll=H&ammasiga Yoq +ButtonFinish=&Tugallamoq +ButtonBrowse=&Tanlov... +ButtonWizardBrowse=&Tanlov... +ButtonNewFolder=&Jild yaratmoq + +; *** "Select Language" dialog messages +SelectLanguageTitle=Ornatish tilini tanlang +SelectLanguageLabel=Ornatish jarayonida ishlatiladigan, tilni tanlang: + +; *** Common wizard text +ClickNext=Davom etish uchun Keyingi tugmasini bosing yoki bekor qilish uchun, Bekor qilmoq tugmasini bosing. +BeveledLabel= +BrowseDialogTitle=Jild tanlovi +BrowseDialogLabel=Royxatdan jildni tanlang va ʻni bosing. +NewFolderName=Yangi jild + +; *** "Welcome" wizard page +WelcomeLabel1=[name]ni Ornatishga Xush kelibsiz +WelcomeLabel2=[name/ver] dasturi sizning kompyuteringizga ornatiladi.%n%nOrnatishdan oldin, boshqa dasturlarni yopish tavsiya etiladi. + +; *** "Password" wizard page +WizardPassword=Parol +PasswordLabel1=Bu dastur parol bilan himoyalangan. +PasswordLabel3=Iltimos, parolni kiriting, songra Keyingi tugmasini bosing. Parol kiritiloyotganda harflar katta-kichikligi inobatga olinishi kerak. +PasswordEditLabel=&Parol: +IncorrectPassword=Siz parolni notogri kirtingiz. Iltimos, qaytadan urinib koring. + +; *** "License Agreement" wizard page +WizardLicense=Litsenzion kelishuv +LicenseLabel=Marhamat, davom etish uchun quyidagi muhim ma'lumotni oqib chiqing. +LicenseLabel3=Iltimos, quyidagi Litsenzion kelishuvni oqib chiqing. Davom etirish oldidan siz kelishuv shartiga rozi bolishingiz kerak. +LicenseAccepted=Men &kelishuv shartiga roziman +LicenseNotAccepted=Men &kelishuv shartiga rozi emasman + +; *** "Information" wizard pages +WizardInfoBefore=Malumot +InfoBeforeLabel=Iltimos, davom etirishdan oldin, quyidagi malumotni oqib chiqing. +InfoBeforeClickLabel=Ornatishga tayyor bolsangiz, Keyingi tugmasini bosing. +WizardInfoAfter=Malumot +InfoAfterLabel=Iltimos, davom etirishdan oldin, muhim malumot bilan tanishib chiqing. +InfoAfterClickLabel=Ornatishga tayyor bolsangiz, Keyingi tugmasini bosing. + +; *** "User Information" wizard page +WizardUserInfo=Foydalanuvchi haqida malumot +UserInfoDesc=Iltimos, ozingiz haqingizda malumot kiriting. +UserInfoName=&Foydalanuvchining ism-sharifi: +UserInfoOrg=&Tashkilot: +UserInfoSerial=&Seriya raqami: +UserInfoNameRequired=Siz ism (nom) kiritishingiz kerak. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Ornatish jildi tanlovi +SelectDirDesc=[name] dasturini qayerga ornatishni xohlaysiz? +SelectDirLabel3=[name] dasturi quyidagi jildga ornatiladi. +SelectDirBrowseLabel=Davom etish uchun Keyingi tugmasini bosing. Agar boshqa jildni tanlamoqchi bolsangiz, unda Tanlov tugmasini bosing. +DiskSpaceMBLabel=Ornatishga [mb] Mb qattiq diskdan bosh joy kerak. +CannotInstallToNetworkDrive=Ornatishni tarmoq qattiq disklarida amalga oshirib bolmaydi. +CannotInstallToUNCPath=Ornatishni UNC-yolagi jildida amalga oshirib bolmadi. +InvalidPath=Siz toliq diskning harflari bilan yolakni korsatishingiz kerak; masalan:%n%nC:\APP%n%nyoki UNC: shaklida%n%n\\server_nomi\resurs_nomi +InvalidDrive=Tanlagan diskingiz yoki tarmoq diski mavjud emas yoki kirishga ruxsat yoq. Iltimos, boshqasini tanlang. +DiskSpaceWarningTitle=Qattiq diskda kerakli bosh joy yoq +DiskSpaceWarning=Ornatishga kamida %1 Kb bosh joy kerak, ammo siz tanlagan diskda %2 Kb bosh joy bor.%n%nKamiga davom etirishni xohlaysizmi? +DirNameTooLong=Jild nomi yoki uning nomining uzunligi ruxsat etilgandan oshgan. +InvalidDirName=Korsatilgan jild nomiga ruxsat yoq. +BadDirName32=Jild nomida quyidagi belgilar bolmasligi kerak: %n%n%1 +DirExistsTitle=Jild mavjud +DirExists=%n%n%1%n%njildi allaqachon mavjud. Ushbu jildga ornatishga hammasi togrimi? +DirDoesntExistTitle=Jild mavjud emas +DirDoesntExist=%n%n%1%n%jildi mavjud emas. Uni hosil qilishni xohlaysizmi? + +; *** "Select Components" wizard page +WizardSelectComponents=Komponentlar tanlovi +SelectComponentsDesc=Qaysi komponentlar ornatilishi kerak? +SelectComponentsLabel2=Kerakli komponentlarni ornatish uchun belgilang; ornatish kerak bolmaganlariga esa belgi olib tashlang. Ornatishga tayyor bolgandan song Keyingi tugmasini bosing. +FullInstallation=Toliq ornatish +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Qulay qilib ornatish +CustomInstallation=Tanlovli ornatish +NoUninstallWarningTitle=Ornatiladigan komponentlar +NoUninstallWarning=Ornatish dasturi aniqladiki, quyidagi komponentlar sizning kompyuteringizga allaqachon ornatilgan:%n%n%1%n%nUlarni ochirmasdan tanlangan komponent(lar)ni bekor qiling.%n%nDavom etasizmi? +ComponentSize1=%1 Kb +ComponentSize2=%1 Mb +ComponentsDiskSpaceMBLabel=Joriy tanlov kamida [mb] Mb qattiq diskda joy oladi. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Qoshimcha topshiriqlarni tanlash +SelectTasksDesc=Qaysi qoshimcha topshiriqlar bajarilishi kerak? +SelectTasksLabel2=[name]ni ornatish davomida qaysi qoshimcha topshiriqlar bajarilishi kerakligini tanlang, undan song Keyingi tugmasini bosing: + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup= menyusida jild tanlovi +SelectStartMenuFolderDesc=Ornatish dasturi qayerga yorliq hosil qilsin? +SelectStartMenuFolderLabel3=Dastur menyusining quyidagi jildiga yorliq hosil qiladi. +SelectStartMenuFolderBrowseLabel=Davom etish uchun Keyingi tugmasini bosing. Agar boshqa jildni tanlashni xohlasangiz, Tanlov tugmasini bosing. +MustEnterGroupName=Jild nomini kiritishingiz kerak. +GroupNameTooLong=Jild guruhi nomi yoki uning yolagi nomi uzunligi cheklovdan oshgan. +InvalidGroupName=Korsatilgan jild nomiga ruxsat etilmagan. +BadGroupName=Jild nomiga quyidagi belgilar bolmasligi kerak:%n%n%1 +NoProgramGroupCheck2= &menyusida jild yaratmaslik + +; *** "Ready to Install" wizard page +WizardReady=Ornatishga barchasi tayyor +ReadyLabel1=Ornatuvchi dasturi [name]ni kompyuteringizga ornatishga tayyor. +ReadyLabel2a=Davom etish uchun Ornatmoq tugmasini bosing, agar siz ornatish tanlovini ozgartirmoqchi bolsangiz Ortga tugmasini bosing. +ReadyLabel2b=Davom etirish uchun Ornatmoq tugmasini bosing. +ReadyMemoUserInfo=Foydalanuvchi haqida malumot: +ReadyMemoDir=Ornatish jildi: +ReadyMemoType=Ornatish turi: +ReadyMemoComponents=Tanlagan komponentlar: +ReadyMemoGroup= menyusidagi jild: +ReadyMemoTasks=Qoshimcha topshiriqlar: + +; *** "Preparing to Install" wizard page +WizardPreparing=Ornatishga tayyorlash +PreparingDesc=Ornatish dasturi kompyuteringizga [name]ni ornatishga tayyorlayapti. +PreviousInstallNotCompleted=Oldingi dastur versiyasini ornatish yoki ochirish tugamadi Ornatish tugallash uchun sizdan kompyuterni qayta qoshish talab etiladi.%n%nQayta qoshilgandan song, [name]ni ornatishni tugallash uchun yangidan Ornatish dasturiga kiring. +CannotContinue=Ornatishni davom etirishning imkoni yoq. Dasturdan chiqish uchun Bekor qilmoq tugmasini bosing. +ApplicationsFound=Quyidagi dastur fayllardan foydalanmoqda, shunday bolsa ham ornatish dasturi uni yangilasi kerak. Ornatish dasturi ushbu dasturni avtomatik yopishi tavsiya etiladi. +ApplicationsFound2=Quyidagi dastur fayllardan foydalanmoqda, shunday bolsa ham ornatish dasturi uni yangilasi kerak. Ornatish dasturi ushbu dasturni avtomatik yopishi tavsiya etiladi. Ornatilib bolgandan song, ornatish dasturi uni qayta ishga solib koradi. +CloseApplications=&Bu dasturni avtomatik yopish +DontCloseApplications=&Bu dasturi yopmang +ErrorCloseApplications=Ornatish dasturi avtomatik hamma dasturlarni yopa olmadi. Ornatishni davom etirishdan oldin hamma taalluqli dasturlarni yopish tavsiya etiladi. + +; *** "Installing" wizard page +WizardInstalling=Ornatilmoqda... +InstallingLabel=Iltimos, [name] dasturi kompyuteringizga ornatilgungacha, kuting. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=[name] dasturini ornatishni tugallash +FinishedLabelNoIcons=[name] dasturi kompyuteringizga ornatildi. +FinishedLabel=[name] dasturi kompyuteringizga ornatildi. Dasturga tegishli yorliq yordamida kirish mumkin. +ClickFinish=Ornatish dasturidan chiqish uchun Tugallamoq tugmasini bosing. +FinishedRestartLabel=[name] ornatishni tugallash uchun komyuterni qayta qoshish kerak. Hoziroq qaytqoshish amalga oshirilsinmi? +FinishedRestartMessage=[name] ornatishni tugallash uchun komyuterni qayta qoshish kerak.%n%nHoziroq qayta qoshilsinmi? +ShowReadmeCheck=Men README faylini korishni xohlayman +YesRadio=&Ha, hoziroq kompyuter qayta qoshilsin +NoRadio=&Yoq, keyinroq +; used for example as 'Run MyProg.exe' +RunEntryExec=%1ni ishga tushirish +; used for example as 'View Readme.txt' +RunEntryShellExec=%1ni korish + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Keyingi diskni joylash kerak +SelectDiskLabel2=Iltimos, %1 diskini qoying va OK tugmasini bosing.%n%nAgar fayllar ushbu diskdagi quyidagi korsatilgan farq qiladigan jilddan topilsa, togri yolakni kiriting yoki Tanlov tugmasini bosing. +PathLabel=&Yolak: +FileNotInDir2="%1" fayli "%2" dan topilmadi. Iltimos, muvofiq diskni qoying yoki boshqa jildni tanlang. +SelectDirectoryLabel=Iltimos, keyingi disk yolagini korsating. + +; *** Installation phase messages +SetupAborted=Ornatishni tugallab bolmadi.%n%nIltimos, muammoni bartaraf eting va qaytadan ornating. +EntryAbortRetryIgnore=Takroran urinib korish uchun tugmasini bosing, faylni otkazib yuborish uchun tugmasini, yoki ornatishni bekor qilish uchun tugmasini bosing. + +; *** Installation status messages +StatusClosingApplications=Dastur yopilmoqda... +StatusCreateDirs=Jild yaratilmoqda... +StatusExtractFiles=Fayllar ornatilmoqda... +StatusCreateIcons=Dastur yorliq(lar) yaratilmoqda... +StatusCreateIniEntries=INI-fayl yaratilmoqda... +StatusCreateRegistryEntries=Ryestrda qaydlar yaratilmoqda... +StatusRegisterFiles=Fayllarni qayd etilmoqda... +StatusSavingUninstall=Uzoqlashtirish uchun malumot yaratilmoqda... +StatusRunProgram=Ornatish tugallanmmoqda... +StatusRestartingApplications=Dastur qayta ishga tushirilmoqda... +StatusRollback=Ornatilganlarni bekor qilish... + +; *** Misc. errors +ErrorInternal2=Ichki xatolik: %1 +ErrorFunctionFailedNoCode=%1: uzilish +ErrorFunctionFailed=%1: uzilish; kod %2 +ErrorFunctionFailedWithMessage=%1: uzilish; kod %2.%n%3 +ErrorExecutingProgram=Faylini bajarib bolmadi:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Ryestr kalitini ochishda xatolik:%n%1\%2 +ErrorRegCreateKey=Ryestr kalitini yaratishda xatolik:%n%1\%2 +ErrorRegWriteKey=Ryestrga yozilmalarni yozishda xatolik:%n%1\%2 + +; *** INI errors +ErrorIniEntry="%1" INI-faylini yozishni yaratishda xatolik. + +; *** File copying errors +FileAbortRetryIgnore=Takrorlash uchun tugmasini, faylni otkazib yuborish uchun (tavsiya etilmaydi) , yoki chiqish uchun tugmasini bosing. +FileAbortRetryIgnore2=Takrorlash uchun tugmasini, xatolikni inobatga olmaslik uchun (tavsiya etilmaydi) , yoki chiqish uchun tugmalaridan birini bosing. +SourceIsCorrupted=Boshlangich fayl shikastlangan +SourceDoesntExist="%1" boshlangich faylni mavjud emas +ExistingFileReadOnly=Mavjud fayl faqat ochish uchun tarzida belgilangan.%n%nfaqat oqish uchun atributini olib tashlash uchun tugmasini bosing, faylni otkazib yuborish uchun , yoki chiqish uchun tugmasini bosing. +ErrorReadingExistingDest=Mavjud fayllarni oqish vaqtida xatolik: +FileExists=Fayl oldindan mavjud.%n%nQayta yozilsinmi? +ExistingFileNewer=Mavjud fayl, ornatiladiganiga nisbatan ancha yangi. Mavjud faylni saqlab qolish tavsiya etiladi.%n%nSiz mavjud faylni saqlab qolishni xohlaysizmi? +ErrorChangingAttr=Mavjud fayl atributini ozgartirish vaqtida xatolik roy berdi: +ErrorCreatingTemp=Belgilangan jildga fayllarni yozish vaqtida xatolik roy berdi: +ErrorReadingSource=Boshlangich faylni oqish vaqtida xatolik roy berdi: +ErrorCopying=Fayllarni nusxallash vaqtida xatolik roy berdi: +ErrorReplacingExistingFile=Mavjud faylni almashtirish vaqtida xatolik roy berdi: +ErrorRestartReplace=RestartReplace xatoligi: +ErrorRenamingTemp=Belgilangan jilddagi faylni qaytanomlashda xatolik roy berdi: +ErrorRegisterServer=DLL/OCXni qayd etib bolmadi: %1 +ErrorRegSvr32Failed=RegSvr32 bajarishda xatolik, qaytish kodi %1 +ErrorRegisterTypeLib=Manba tiplarini qayd etishning imkoni yoq (Type Library): %1 + +; *** Post-installation errors +ErrorOpeningReadme=README faylini ochish vaqtida xatolik. +ErrorRestartingComputer=Ornatish dasturi kompyuterni qayta qosha olmadi. Iltimos, buni ozingiz bajaring. + +; *** Uninstaller messages +UninstallNotFound="%1" fayli mavjud emas, uzoqlashtirishning imkoni yoq. +UninstallOpenError="%1" faylini ochishning imkoni yoq. Dasturni ochirib bolmaydi +UninstallUnsupportedVer=Uzoqlashtirish protokoli "%1" ushbu uzoqlashtirish-dasturi uchun noaniq. Uzoqlashtirishning imkoni yoq +UninstallUnknownEntry=Uzoqlashtirish protokoli uchun faylda nomalum punktga duch kelindi (%1) +ConfirmUninstall=Siz haqiqatan ham %1 dasturining hamma komponentlarini ochirmoqchimisiz? +UninstallOnlyOnWin64=Ushbu dasturni faqat 64-bitli Windows muhitida ochirish mumkin. +OnlyAdminCanUninstall=Bu dasturni faqat "Admin" ochirishi mumkin. +UninstallStatusLabel=Iltimos, %1 dasturi sizning kompyuteringizdan uzoqlashtirilgunga qadar, kutib turing. +UninstalledAll=%1 dasturi toliq kompyuteringizdan uzoqlashtirildi. +UninstalledMost=%1 uzoqlashtirish bajarildi.%n%nBir qancha elementlarni ochirib bolmadi. Siz u(lar)ni ozingiz ochirishingiz mumkin. +UninstalledAndNeedsRestart=%1 uzoqlashtirishni tugallash uchun kompyuterni qayta qoshish kerak boladi.%n%nHoziroq qayta qoshish bajarilsinmi? +UninstallDataCorrupted="%1" fayli shikastlangan. Uzoqlashtirishning imkoni yoq + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Birgalikda ishlatiladigan fayl ochirilsinmi? +ConfirmDeleteSharedFile2=Tizim korsatdiki, quyidagi birgalikda ishlatiladigan fayl boshqa dasturlar tomonidan ishlatilmayapti. Faylni ochirish tasdiqlansinmi?%n%nAgar keyinchalik qandaydir bir dastur bu faylni ishlatmoqchi bolsa lekin fayl ochirilsa, osha dastur soz ishlamasligi mumkin. Agar qolishini xohlasangiz, Yoq ni bosing. Qoloyotgan fayl tizimga xavf solmaydi. +SharedFileNameLabel=Fayl nomi: +SharedFileLocationLabel=Joylashgan joyi: +WizardUninstalling=Uzoqlashtirish holati +StatusUninstalling=%1 ni Uzoqlashtirish... + + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=%1 ni Ornatish. +ShutdownBlockReasonUninstallingApp=%1 ni Uzoqlashtirish. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1, versiya %2 +AdditionalIcons=Qoshimcha yorliqlar: +CreateDesktopIcon=Ishchi stolda yorliq yaratish +CreateQuickLaunchIcon=&Tezkor ishga tushirish panelida yoriliq yaratish +ProgramOnTheWeb=%1ning Internetdagi Sayti +UninstallProgram=%1ni Uzoqlashtirish +LaunchProgram=%1ni Ishga tushirish +AssocFileExtension=%1 fayli bilan, %2 kengaytmada &birikadi +AssocingFileExtension=%1 fayli bilan %2 birikmoqda... +AutoStartProgramGroupDescription=Avtomatik tushirish solish: +AutoStartProgram=Avtomatik %1ni ishga tushirish +AddonHostProgramNotFound=%1 korsatgan jildingizdan topilmadi.%n%nSiz xuddi shunday davom etirmoqchimisiz? diff --git a/Files/Languages/Unofficial/Valencian.isl b/Files/Languages/Unofficial/Valencian.isl new file mode 100644 index 00000000..e4e1e355 --- /dev/null +++ b/Files/Languages/Unofficial/Valencian.isl @@ -0,0 +1,322 @@ +; *** Inno Setup version 5.5.3+ Catalan (Valencian) messages *** +; +; Note: This Valencian language file is based on the Catalan one. +; +; Translated by Pau Sells i Garcia (pau.selles@softvalencia.org) Softvalenci Translators Team +; + +[LangOptions] + +LanguageName=Catal<00E0> (valenci<00E0>) +LanguageID=$0803 +LanguageCodePage=1252 + +[Messages] + +; *** Application titles +SetupAppTitle=Installaci +SetupWindowTitle=Installaci - %1 +UninstallAppTitle=Desinstallaci +UninstallAppFullTitle=Desinstallaci - %1 + +; *** Misc. common +InformationTitle=Informaci +ConfirmTitle=Confirmaci +ErrorTitle=Error + +; *** SetupLdr messages +SetupLdrStartupMessage=Este programa installar l'aplicaci %1. Voleu continuar? +LdrCannotCreateTemp=No s'ha pogut crear un fitxer temporal i per aix la installaci es cancellar +LdrCannotExecTemp=No s'ha pogut executar un fitxer a la carpeta temporal i per aix la installaci es cancellar + +; *** Startup error messages +LastErrorMessage=%1.%n%nError %2: %3 +SetupFileMissing=El fitxer %1 no es troba a la carpeta d'installaci. Resoleu el problema o obteniu una cpia nova de l'aplicaci. +SetupFileCorrupt=Els fitxers d'installaci estan malmesos. Heu d'obtindre una cpia nova de l'aplicaci. +SetupFileCorruptOrWrongVer=Els fitxers d'installaci estan malmesos, o sn incompatibles amb esta versi de l'installador. Resoleu el problema manualment o obteniu una cpia nova de l'installador. +InvalidParameter=S'ha passat un parmetre no vlid a la lnia d'ordes:%n%n%1 +SetupAlreadyRunning=La installaci ja s en curs. +WindowsVersionNotSupported=Esta aplicaci no s compatible amb la versi del Windows installada a l'ordinador. +WindowsServicePackRequired=Esta aplicaci necessita el %1 Service Pack %2 o posterior. +NotOnThisPlatform=Esta aplicaci no pot funcionar en %1. +OnlyOnThisPlatform=Esta aplicaci noms funcionar en %1. +OnlyOnTheseArchitectures=Esta aplicaci noms es pot installar en versions de Windows dissenyades per a les segents arquitectures de processador:%n%n%1 +MissingWOW64APIs=Esta versi de Windows no cont la funcionalitat necessria per a realitzar una installaci de 64 bits. Per tal de corregir este problema installeu el Service Pack %1. +WinVersionTooLowError=Esta aplicaci requereix una versi %2 o posterior de %1. +WinVersionTooHighError=Esta aplicaci no es pot installar en %1 versi %2 o posterior. +AdminPrivilegesRequired=Per poder installar esta aplicaci cal tindre privilegis d'administrador. +PowerUserPrivilegesRequired=Per poder installar esta aplicaci cal ser usuari administrador o b membre del grup d'usuaris Power Users. +SetupAppRunningError=L'installador ha detectat que l'aplicaci %1 s'est executant actualment.%n%nTanqueu l'aplicaci i feu clic a Avant per continuar o Cancella per eixir. +UninstallAppRunningError=L'installador ha detectat que l'aplicaci %1 s'est executant actualment.%n%nTanqueu l'aplicaci i feu clic a Avant per continuar o Cancella per eixir. + +; *** Misc. errors +ErrorCreatingDir=El programa d'installaci no ha pogut crear la carpeta %1 +ErrorTooManyFilesInDir=No s'ha pogut crear un fitxer a la carpeta %1 perqu cont massa fitxers + +; *** Setup common messages +ExitSetupTitle=Eixida de la installaci +ExitSetupMessage=La installaci encara no ha finalizat. Si eixiu ara, la installaci es cancellar.%n%nTot i aix, podeu tornar a executar este installador ms tard per completar la installaci.%n%nVoleu eixir de la installaci? +AboutSetupMenuItem=&Quant a la installaci... +AboutSetupTitle=Quant a la installaci +AboutSetupMessage=%1 versi %2%n%3%n%nPgina web de %1:%n%4 +AboutSetupNote= +TranslatorNote=Catalan translation by Pau Sells (pau.selles@softvalencia.org) + +; *** Buttons +ButtonBack=< &Arrere +ButtonNext=&Avant > +ButtonInstall=&Installa +ButtonOK=D'acord +ButtonCancel=Cancella +ButtonYes=&S +ButtonYesToAll=S a &tot +ButtonNo=&No +ButtonNoToAll=N&o a tot +ButtonFinish=&Finalitza +ButtonBrowse=&Navega... +ButtonWizardBrowse=&Navega... +ButtonNewFolder=Crea una carpeta &nova + +; *** "Select Language" dialog messages +SelectLanguageTitle=Selecci de la llengua +SelectLanguageLabel=Seleccioneu la llengua que preferiu durant la installaci: + +; *** Common wizard text +ClickNext=Feu clic Avant per continuar o Cancella per abandonar la installaci. +BeveledLabel= +BrowseDialogTitle=Selecci de carpeta +BrowseDialogLabel=Seleccioneu la carpeta de destinaci i feu clic a D'acord. +NewFolderName=Carpeta nova + +; *** "Welcome" wizard page +WelcomeLabel1=Vos donem la benvinguda a l'auxiliar d'installaci de l'aplicaci [name] +WelcomeLabel2=Este programa installar l'aplicaci [name/ver] a l'ordinador.%n%ns molt recomanable que abans de continuar tanqueu tots els altres programes oberts, per tal d'evitar conflictes durant el procs d'installaci. + +; *** "Password" wizard page +WizardPassword=Contrasenya +PasswordLabel1=Esta installaci est protegida amb una contrasenya. +PasswordLabel3=Introduu la contrasenya i feu clic a Avant per continuar. Esta contrasenya distingeix entre majscules i minscules. +PasswordEditLabel=&Contrasenya: +IncorrectPassword=La contrasenya introduda no s correcta. Torneu-ho a intentar. + +; *** "License Agreement" wizard page +WizardLicense=Acceptaci de la llicencia d's +LicenseLabel=Cal que llegiu i accepteu la llicncia d's abans de continuar. +LicenseLabel3=La llicncia d's especifica amb quins drets i deures est subjecte l'aplicaci que voleu installar. Cal que n'accepteu els termes abans de continuar la installaci. +LicenseAccepted=&Accepte l'acord +LicenseNotAccepted=&No accepte l'acord + +; *** "Information" wizard pages +WizardInfoBefore=Informaci +InfoBeforeLabel=Llegiu la informaci segent abans de continuar. +InfoBeforeClickLabel=Quan estigueu preparat per continuar, feu clic a Avant. +WizardInfoAfter=Informaci +InfoAfterLabel=Llegiu la informaci segent abans de continuar. +InfoAfterClickLabel=Quan estigueu preparat per continuar, feu clic a Avant. + +; *** "User Information" wizard page +WizardUserInfo=Informaci de l'usuari +UserInfoDesc=Introduu la vostra informaci. +UserInfoName=&Nom de l'usuari: +UserInfoOrg=&Organitzaci: +UserInfoSerial=&Nmero de srie: +UserInfoNameRequired=Cal introduir un nom. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Seleccioneu una carpeta de destinaci +SelectDirDesc=On voleu installar l'aplicaci [name]? +SelectDirLabel3=El programa d'installaci installar l'aplicaci [name] a la carpeta segent. +SelectDirBrowseLabel=Per continuar, feu clic a Avant. Si desitgeu seleccionar una altra carpeta, feu clic a Navega. +DiskSpaceMBLabel=Este programa necessita un mnim de [mb] MB d'espai lliure al disc. +CannotInstallToNetworkDrive=La installaci no es pot fer a un disc de xarxa. +CannotInstallToUNCPath=La installaci no es pot fer a un cam UNC. +InvalidPath=Cal donar un cam complet amb lletra d'unitat, per exemple:%n%nC:\Aplicaci%n%no b un cam UNC en la forma:%n%n\\servidor\compartit +InvalidDrive=El disc o cam de xarxa seleccionat no existeix, trieu-ne un altre. +DiskSpaceWarningTitle=No hi ha prou espai al disc +DiskSpaceWarning=El programa d'installaci necessita com a mnim %1 KB d'espai lliure, per el disc seleccionat noms t %2 KB disponibles.%n%nTot i amb aix, desitgeu continuar? +DirNameTooLong=El nom de la carpeta o del cam s massa llarg. +InvalidDirName=El nom de la carpeta no s vlid. +BadDirName32=Un nom de carpeta no pot contindre cap dels carcters segents:%n%n%1 +DirExistsTitle=La carpeta existeix +DirExists=La carpeta:%n%n%1%n%nja existeix. Voleu continuar i installar l'aplicaci en esta carpeta? +DirDoesntExistTitle=La carpeta no existeix +DirDoesntExist=La carpeta:%n%n%1%n%nno existeix. Voleu crear-la? + +; *** "Select Program Group" wizard page +WizardSelectComponents=Selecci de components +SelectComponentsDesc=Quins components voleu installar? +SelectComponentsLabel2=Seleccioneu els components que voleu installar; elimineu els components que no voleu installar. Feu clic a Avant per continuar. +FullInstallation=Installaci completa +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Installaci compacta +CustomInstallation=Installaci personalitzada +NoUninstallWarningTitle=Els components existeixen +NoUninstallWarning=L'auxiliar d'installaci ha detectat que els components segents ja es troben a l'ordinador:%n%n%1%n%nSi no estan seleccionats no es desinstallaran.%n%nVoleu continuar igualment? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceMBLabel=Esta selecci requereix un mnim de [mb] MB d'espai al disc. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Trieu tasques addicionals +SelectTasksDesc=Quines tasques addicionals cal executar? +SelectTasksLabel2=Trieu les tasques addicionals que voleu que siguen executades mentre s'installa l'apliaci [name], i desprs feu clic a Avant. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Trieu la carpeta del men d'inici +SelectStartMenuFolderDesc=On cal situar els enllaos del programa? +SelectStartMenuFolderLabel3=El programa d'installaci crear l'accs directe al programa a la carpeta segent del men d'inici. +SelectStartMenuFolderBrowseLabel=Per continuar, feu clic a Avant. Si desitgeu triar una altra carpeta, feu clic a Navega.... +MustEnterGroupName=Cal introduir un nom de carpeta. +GroupNameTooLong=El nom de la carpeta o del cam s massa llarg. +InvalidGroupName=El nom de la carpeta no s vlid. +BadGroupName=El nom del grup no pot contindre cap dels carcters segents:%n%n%1 +NoProgramGroupCheck2=&No crees una carpeta al men d'inici + +; *** "Ready to Install" wizard page +WizardReady=Preparat per a installar +ReadyLabel1=El programa d'installaci est preparat per a iniciar la installaci de l'aplicaci [name] a l'ordinador. +ReadyLabel2a=Feu clic a Installa per continuar amb la installaci, o Arrere si voleu revisar o modificar les opcions d'installaci. +ReadyLabel2b=Feu clic a Installa per continuar amb la installaci. +ReadyMemoUserInfo=Informaci de l'usuari: +ReadyMemoDir=Carpeta de destinaci: +ReadyMemoType=Tipus d'installaci: +ReadyMemoComponents=Components seleccionats: +ReadyMemoGroup=Carpeta del Men Inici: +ReadyMemoTasks=Tasques addicionals: + +; *** "Preparing to Install" wizard page +WizardPreparing=S'est preparant la installaci +PreparingDesc=S'est preparant la installaci de l'aplicaci [name] a l'ordinador. +PreviousInstallNotCompleted=La installaci o desinstallaci anterior no s'ha dut a terme. Caldr que reinicieu l'ordinador per a finalitzar esta installaci.%n%nDesprs de reiniciar l'ordinador, executeu este programa de nou per completar la installaci de l'aplicaci [name]. +CannotContinue=La installaci no pot continuar. Feu clic a Cancella per a eixir. +ApplicationsFound=Les segents aplicacions estan fent servir fitxers que necessiten ser actualitzats per la installaci. Es recomana que permeteu a la installaci tancar automticament estes aplicacions. +ApplicationsFound2=Les segents aplicacions estan fent servir fitxers que necessiten ser actualitzats per la installaci. Es recomana que permeteu a la installaci tancar automticament estes aplicacions. Desprs de completar la installaci s'intentar reiniciar les aplicacions. +CloseApplications=&Tanca automticament les aplicacions +DontCloseApplications=&No tanques les aplicacions +ErrorCloseApplications=El programa d'installaci no ha pogut tancar automticament totes les aplicacions. Es recomana que abans de continuar tanqueu totes les aplicacions que estan usant fitxers que han de ser actualitzats pel programa d'installaci. + +; *** "Installing" wizard page +WizardInstalling=S'est installant +InstallingLabel=Espereu mentre s'installa l'aplicaci [name] a l'ordinador. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=S'est finalitzant la installaci de l'aplicaci [name] +FinishedLabelNoIcons=La insallaci de l'aplicaci [name] a l'ordinador. +FinishedLabel=La installaci de l'aplicaci [name] a l'ordinador ha finalitzat correctament. Feu clic a qualsevol de les icones creades per a iniciar l'aplicaci. +ClickFinish=Feu clic a Finalitza per a eixir de la installaci. +FinishedRestartLabel=Per completar la installaci de [name] cal reiniciar l'ordinador. Voleu fer-ho ara? +FinishedRestartMessage=Per completar la installaci de l'aplicaci [name] cal reiniciar l'ordinador. Voleu fer-ho ara? +ShowReadmeCheck=S, vull llegir el fitxer LLEGIU-ME.TXT +YesRadio=&S, reinicia l'ordinador ara +NoRadio=&No, reiniciar l'ordinador ms tard +; used for example as 'Run MyProg.exe' +RunEntryExec=Executa %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Mostra %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=L'installador necessita el disc segent +SelectDiskLabel2=Introduu el disc %1 i feu clic a Continua.%n%nSi els fitxers d'este disc indicat es troben en una carpeta diferent, introduu-ne la ubicaci o b feu clic a Navega.... +PathLabel=&Ubicaci: +FileNotInDir2=El fitxer %1 no s'ha trobat en %2. Introduu el disc correcte o escolliu una altra carpeta. +SelectDirectoryLabel=Indiqueu on es troba el disc segent. + +; *** Installation phase messages +SetupAborted=La installaci no ha finalitzat correctament.%n%n%Resoleu el problema i executeu de nou el programa d'installaci. +EntryAbortRetryIgnore=Feu clic a Reintenta per a intentar-ho de nou, Ignora per a continuar igualment, o Abandona per a abandonar la installaci. + +; *** Installation status messages +StatusClosingApplications=S'estan tancant les aplicacions... +StatusCreateDirs=S'estan creant les carpetes... +StatusExtractFiles=S'estan extraient els fitxers... +StatusCreateIcons=S'estan creant les dreceres de l'aplicaci... +StatusCreateIniEntries=S'est modificant el fitxer INI... +StatusCreateRegistryEntries=S'est configurant el registre del sistema... +StatusRegisterFiles=S'estan registrant els fitxers... +StatusSavingUninstall=S'est guardant la informaci de desinstallaci... +StatusRunProgram=S'est finalitzant la installaci... +StatusRestartingApplications=S'estan reiniciant les aplicacions... +StatusRollback=S'estan desfent els canvis... + +; *** Misc. errors +ErrorInternal2=Error intern: %1 +ErrorFunctionFailedNoCode=%1 ha fallat +ErrorFunctionFailed=%1 ha fallat; codi %2 +ErrorFunctionFailedWithMessage=%1 ha fallat; codi %2.%n%3 +ErrorExecutingProgram=No es pot executar el fitxer:%n%1 + +; *** Registry errors +ErrorRegOpenKey=S'ha produt un error en obrir la clau de registre:%n%1\%2 +ErrorRegCreateKey=S'ha produt un error en crear la clau de registre:%n%1\%2 +ErrorRegWriteKey=S'ha produt un error en escriure a la clau de registre:%n%1\%2 + +; *** INI errors +ErrorIniEntry=S'ha produt un error en crear l'entrada INI al fitxer %1. + +; *** File copying errors +FileAbortRetryIgnore=Feu clic a Reintenta per a intentar-ho de nou, Ignora per a saltar-se este fitxer (no recomanat), o Abandona per a abandonar la installaci. +FileAbortRetryIgnore2=Feu clic a Reintenta per a intentar-ho de nou, Ignora per a continuar igualment (no recomanat), o Abandona per a abandonar la installaci. +SourceIsCorrupted=El fitxer d'origen est malms +SourceDoesntExist=El fitxer d'origen %1 no existeix +ExistingFileReadOnly=El fitxer s de noms lectura.%n%nFeu clic a Reintenta per a traure'n l'atribut de noms lectura i tornar-ho a intentar, Ignora per a saltar-se'l (no recomanat), o Abandona per a abandonar la installaci. +ErrorReadingExistingDest=S'ha produt un error en llegir el fitxer: +FileExists=El fitxer ja existeix.%n%nVoleu sobreescriure'l? +ExistingFileNewer=El fitxer existent s ms nou que el que s'intenta installar. Es recomana mantindre el fitxer existent.%n%nVoleu mantindre'l? +ErrorChangingAttr=S'ha produt un error en canviar els atributs del fitxer: +ErrorCreatingTemp=S'ha produt un error en crear un fitxer a la carpeta de destinaci: +ErrorReadingSource=S'ha produt un error en llegir el fitxer d'origen: +ErrorCopying=S'ha produt un error en copiar un fitxer: +ErrorReplacingExistingFile=S'ha produt un error en reemplaar el fitxer existent: +ErrorRestartReplace=Ha fallat reemplaar: +ErrorRenamingTemp=S'ha produt un error en canviar el nom d'un fitxer a la carpeta de destinaci: +ErrorRegisterServer=No s'ha pogut registrar el DLL/OCX: %1 +ErrorRegSvr32Failed=Ha fallat RegSvr32 amb el codi de eixida %1 +ErrorRegisterTypeLib=No s'ha pogut registrar la biblioteca de tipus: %1 + +; *** Post-installation errors +ErrorOpeningReadme=S'ha produt un error en obrir el fitxer LLEGIUME.TXT. +ErrorRestartingComputer=El programa d'installaci no ha pogut reiniciar l'ordinador. Cal fer-ho manualment. + +; *** Uninstaller messages +UninstallNotFound=El fitxer %1 no existeix. No es pot desinstallar. +UninstallOpenError=El fitxer %1 no pot ser obert. No es pot desinstallar +UninstallUnsupportedVer=El fitxer de desinstallaci %1 est en un format no reconegut per esta versi del desinstallador. No es pot desinstallar +UninstallUnknownEntry=S'ha trobat una entrada desconeguda (%1) al fitxer de desinstallaci. +ConfirmUninstall=Esteu segur de voler eliminar completament %1 i tots els seus components? +UninstallOnlyOnWin64=Este programa noms es pot desinstallar en Windows de 64 bits. +OnlyAdminCanUninstall=Este programa noms es pot desinstallar per un usuari amb privilegis d'administrador. +UninstallStatusLabel=Espereu mentre s'elimina l'aplicaci %1 de l'ordinador. +UninstalledAll=L'aplicaci %1 s'ha desinstallat correctament de l'ordinador. +UninstalledMost=L'aplicaci %1 s'ha desinstallat.%n%nAlguns elements no s'han pogut eliminar. Poden ser eliminats manualment. +UninstalledAndNeedsRestart=Per completar la installaci de %1, cal reiniciar l'ordinador.%n%nVoleu fer-ho ara? +UninstallDataCorrupted=El fitxer %1 est malms. No es pot desinstallar. + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Desinstallaci de fitxers compartits +ConfirmDeleteSharedFile2=El sistema indica que el fitxer compartit segent ja no s'utilitza per cap altre programa. Voleu suprimir este fitxer?%n%nSi algun programa encara el fa servir i s eliminat, podria no funcionar correctament. Si no n'esteu segur, trieu No. Deixar el fitxer al sistema no far cap mal. +SharedFileNameLabel=Nom del fitxer: +SharedFileLocationLabel=Ubicaci: +WizardUninstalling=Estat de la desinstallaci +StatusUninstalling=S'est desinstallant: %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=S'est installant %1. +ShutdownBlockReasonUninstallingApp=S'est desinstallant %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 versi %2 +AdditionalIcons=Icones addicionals: +CreateDesktopIcon=Crea una drecera a l'&escriptori +CreateQuickLaunchIcon=Crea una drecera a la &barra d'accs rpid +ProgramOnTheWeb=%1 a la Web +UninstallProgram=Desinstalla %1 +LaunchProgram=Executa %1 +AssocFileExtension=&Associa %1 amb l'extensi de fitxer %2 +AssocingFileExtension=S'est associant %1 amb l'extensi de fitxer %2... +AutoStartProgramGroupDescription=Inici: +AutoStartProgram=Inicia automticament l'aplicaci %1 +AddonHostProgramNotFound=No s'ha pogut trobar l'aplicaci %1 a la carpeta seleccionada.%n%nVoleu continuar igualment? \ No newline at end of file diff --git a/Files/Languages/Unofficial/Vietnamese.isl b/Files/Languages/Unofficial/Vietnamese.isl new file mode 100644 index 00000000..b440468f --- /dev/null +++ b/Files/Languages/Unofficial/Vietnamese.isl @@ -0,0 +1,384 @@ +; *** Inno Setup version 6.1.0+ Vietnamese messages *** +; Translated by Vu Khac Hiep (email: vukhachiep@gmail.com) +; To download user-contributed translations of this file, go to: +; https://jrsoftware.org/files/istrans/ +; +; Note: When translating this text, do not add periods (.) to the end of +; messages that didn't have them already, because on those messages Inno +; Setup adds the periods automatically (appending a period would result in +; two periods being displayed). + +[LangOptions] +; The following three entries are very important. Be sure to read and +; understand the '[LangOptions] section' topic in the help file. +LanguageName=Vietnamese +LanguageID=$042A +LanguageCodePage=0 +; If the language you are translating to requires special font faces or +; sizes, uncomment any of the following entries and change them accordingly. +;DialogFontName= +;DialogFontSize=8 +;WelcomeFontName=Verdana +;WelcomeFontSize=12 +;TitleFontName=Arial +;TitleFontSize=29 +;CopyrightFontName=Arial +;CopyrightFontSize=8 + +[Messages] + +; *** Application titles +SetupAppTitle=Cài đặt +SetupWindowTitle=Cài đặt - %1 +UninstallAppTitle=Gỡ cài đặt +UninstallAppFullTitle=Gỡ cài đặt - %1 + +; *** Misc. common +InformationTitle=Thông tin +ConfirmTitle=Xác nhận +ErrorTitle=Lỗi + +; *** SetupLdr messages +SetupLdrStartupMessage=Chương trình này sẽ cài đặt %1. Bạn có muốn tiếp tục không? +LdrCannotCreateTemp=Không thể tạo tệp tạm thời. Cài đặt bị hủy bỏ +LdrCannotExecTemp=Không thể chạy tệp trong thư mục tạm thời. Cài đặt bị hủy bỏ +HelpTextNote= + +; *** Startup error messages +LastErrorMessage=%1.%n%nLỗi %2: %3 +SetupFileMissing=Tệp %1 bị thiếu trong thư mục cài đặt. Hãy sửa lỗi hoặc lấy một bản sao mới của chương trình. +SetupFileCorrupt=Các tệp cài đặt đã bị hỏng. Hãy sửa lỗi hoặc lấy một bản sao của chương trình. +SetupFileCorruptOrWrongVer=Các tệp cài đặt bị hỏng, hoặc không tương thích với bản cài đặt này. Hãy sửa lỗi hoặc lấy một bản sao mới của chương trình. +InvalidParameter=Một thông số không hợp lệ đã được đưa vào dòng lệnh:%n%n%1 +SetupAlreadyRunning=Cài đặt này đang chạy. +WindowsVersionNotSupported=Chương trình này không tương thích với phiên bản Windows bạn đang chạy. +WindowsServicePackRequired=Chương trình này yêu cầu %1 Service Pack %2 hoặc mới hơn. +NotOnThisPlatform=Chương trình này sẽ không chạy trên %1. +OnlyOnThisPlatform=Chương trình này phải chạy trên %1. +OnlyOnTheseArchitectures=Chương trình này chỉ có thể được cài đặt trên phiên bản Windows được thiết kế cho các hệ vi xử lí:%n%n%1 +WinVersionTooLowError=Chương trình này yêu cầu %1 phiên bản %2 hoặc mới hơn. +WinVersionTooHighError=Chương trình này không thể được cài đặt trên %1 phiên bản %2 hoặc mới hơn. +AdminPrivilegesRequired=Bạn phải được đăng nhập như người quản trị khi cài đặt chương trình này. +PowerUserPrivilegesRequired=Bạn phải được đăng nhập như người quản trị hoặc thành viên trong nhóm Người dùng mạnh khi cài đặt chương trình này. +SetupAppRunningError=Cài đặt phát hiện %1 đang chạy.%n%nHãy đóng tất cả các tiến trình của nó ngay, rồi click OK để tiếp tục, hoặc Hủy để thoát. +UninstallAppRunningError=Gỡ cài đặt phát hiện %1 đang chạy.%n%nHãy đóng tất cả các tiến trình của nó ngay, rồi click OK để tiếp tục, hoặc Hủy để thoát. + +; *** Startup questions +PrivilegesRequiredOverrideTitle=Select Setup Install Mode +PrivilegesRequiredOverrideInstruction=Select install mode +PrivilegesRequiredOverrideText1=%1 can be installed for all users (requires administrative privileges), or for you only. +PrivilegesRequiredOverrideText2=%1 can be installed for you only, or for all users (requires administrative privileges). +PrivilegesRequiredOverrideAllUsers=Install for &all users +PrivilegesRequiredOverrideAllUsersRecommended=Install for &all users (recommended) +PrivilegesRequiredOverrideCurrentUser=Install for &me only +PrivilegesRequiredOverrideCurrentUserRecommended=Install for &me only (recommended) + +; *** Misc. errors +ErrorCreatingDir=Cài đặt không thể tạo ra thư mục "%1" +ErrorTooManyFilesInDir=Không thể tạo một tệp trong thư mục "%1" vì nó chứa quá nhiều tệp + +; *** Setup common messages +ExitSetupTitle=Thoát cài đặt +ExitSetupMessage=Cài đặt chưa hoàn thành. Nếu bạn thoát bây giờ, chương trình sẽ không được cài đặt.%n%nBạn có thể chạy lại Cài đặt một lần khác để hoàn thành cài đặt.%n%nThoát ngay? +AboutSetupMenuItem=&Về trình cài đặt... +AboutSetupTitle=Về trình cài đặt +AboutSetupMessage=%1 phiên bản %2%n%3%n%n%1 trang chủ:%n%4 +AboutSetupNote= +TranslatorNote=Giao diện người dùng tiếng Việt bởi: Vũ Khắc Hiệp + +; *** Buttons +ButtonBack=< &Trước +ButtonNext=T&iếp > +ButtonInstall=&Cài đặt +ButtonOK=OK +ButtonCancel=Hủy +ButtonYes=&Có +ButtonYesToAll=Có c&ho tất cả +ButtonNo=&Không +ButtonNoToAll=Khô&ng cho tất cả +ButtonFinish=&Hoàn thành +ButtonBrowse=&Duyệt... +ButtonWizardBrowse=D&uyệt... +ButtonNewFolder=Tạ&o thư mục mới + +; *** "Select Language" dialog messages +SelectLanguageTitle=Chọn ngôn ngữ cài đặt +SelectLanguageLabel=Chọn ngôn ngữ để sử dụng khi cài đặt: + +; *** Common wizard text +ClickNext=Nhấn Tiếp để tiếp tục, hoặc Hủy để thoát cài đặt +BeveledLabel= +BrowseDialogTitle=Tìm thư mục +BrowseDialogLabel=Chọn một thư mục trong danh sách sau rồi ấn OK. +NewFolderName=Tạo thư mục mới + +; *** "Welcome" wizard page +WelcomeLabel1=Chào mừng tới trình cài đặt [name] +WelcomeLabel2=Chương trình này sẽ cài [name/ver] trên máy tính của bạn.%n%nChúng tôi khuyên bạn đóng mọi chương trình khác lại trước khi cài đặt. + +; *** "Password" wizard page +WizardPassword=Mật khẩu +PasswordLabel1=Việc cài đặt được bảo vệ bằng mật khẩu. +PasswordLabel3=Hãy nhập mật khẩu, rồi nhấn Tiếp để tiếp tục. Mật khẩu phân biệt chữ hoa/thường. +PasswordEditLabel=&Mật khẩu: +IncorrectPassword=Mật khẩu bạn đã nhập không đúng. Hãy thử lại. + +; *** "License Agreement" wizard page +WizardLicense=Thỏa thuận cấp phép +LicenseLabel=Hãy đọc những thông tin quan trọng sau trước khi tiếp tục. +LicenseLabel3=Hãy đọc Thỏa thuận cấp phép sau. Bạn phải chấp nhận các điều khoản của cài đặt này trước khi tiếp tục. +LicenseAccepted=Tô&i chấp nhận thỏa thuận +LicenseNotAccepted=Tôi khôn&g chấp nhận thỏa thuận + +; *** "Information" wizard pages +WizardInfoBefore=Thông tin +InfoBeforeLabel=Hãy đọc những thông tin quan trọng sau trước khi tiếp tục. +InfoBeforeClickLabel=Khi bạn đã sẵn sàng cài đặt tiếp, click Tiếp. +WizardInfoAfter=Thông tin +InfoAfterLabel=Hãy đọc những thông tin quan trọng sau trước khi tiếp tục. +InfoAfterClickLabel=Khi bạn đã sẵn sàng cài đặt tiếp, click Tiếp. + +; *** "User Information" wizard page +WizardUserInfo=Thông tin người dùng +UserInfoDesc=Hãy nhập thông tin của bạn. +UserInfoName=Tên n&gười dùng: +UserInfoOrg=Tổ c&hức: +UserInfoSerial=&Số serial: +UserInfoNameRequired=Bạn phải nhập một tên. + +; *** "Select Destination Location" wizard page +WizardSelectDir=Chọn vị trí cài đặt +SelectDirDesc=[name] nên được cài đặt ở đâu? +SelectDirLabel3=[name] sẽ được cài đặt vào thư mục sau: +SelectDirBrowseLabel=Để tiếp tục. nhấn Tiếp. Nếu bạn muốn chọn một thư mục khác, nhấn Duyệt. +DiskSpaceGBLabel=Cần có ít nhất [gb] GB ổ đĩa trống. +DiskSpaceMBLabel=Cần có ít nhất [mb] MB ổ đĩa trống. +CannotInstallToNetworkDrive=Cài đặt không thể cài vào một ổ đĩa mạng. +CannotInstallToUNCPath=Cài đặt không thể cài vào đường dẫn UNC. +InvalidPath=Bạn phải nhập đường dẫn đầy đủ với chữ cái ổ đĩa, ví dụ:%n%nC:\APP%n%nhoặc một đường dẫn UNC theo mẫu:%n%n\\server\share +InvalidDrive=Ổ đĩa hoặc chia sẻ UNC bạn đã chọn không tồn tại hoặc không truy cập được. Hãy chọn cái khác. +DiskSpaceWarningTitle=Không đủ dung lượng đĩa +DiskSpaceWarning=Cài đặt yêu cầu ít nhất %1 KB dung lượng trống để cài đặt, nhưng ổ đĩa đã chọn chỉ còn %2KB.%n%nBạn muốn tiếp tục bằng mọi giá? +DirNameTooLong=Tên thư mục hoặc đường dẫn quá dài. +InvalidDirName=Tên thư mục không hợp lệ. +BadDirName32=Tên thư mục không được chứa các kí tự sau:%n%n%1 +DirExistsTitle=Thư mục đã tồn tại +DirExists=Thư mục:%n%n%1%n%nđã tồn tại. Bạn có muốn cài đặt vào thư mục đó bằng mọi giá? +DirDoesntExistTitle=Thư mục không tồn tại +DirDoesntExist=Thư mục:%n%n%1%n%nkhông tồn tại. Bạn có muốn tạo thư mục không? + +; *** "Select Components" wizard page +WizardSelectComponents=Chọn các thành phần +SelectComponentsDesc=Những thành phần nào nên được cài đặt? +SelectComponentsLabel2=Chọn các thành phần bạn muốn cài đặt, bỏ chọn các thành phần bạn không muốn. Click Tiếp khi bạn đã sẵn sàng để tiếp tục. +FullInstallation=Cài đặt đầy đủ +; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) +CompactInstallation=Cài đặt rút gọn +CustomInstallation=Cài đặt tủy chỉnh +NoUninstallWarningTitle=Thành phần đã tồn tại +NoUninstallWarning=Cài đặt phát hiện các thành phần sau đã được cài đặt trên máy tính của bạn:%n%n%1%n%nBỏ chọn những thành phần này sẽ không cài đặt chúng.%n%nBạn có muốn tiếp tục bằng mọi giá? +ComponentSize1=%1 KB +ComponentSize2=%1 MB +ComponentsDiskSpaceGBLabel=Lựa chọn này yêu cầu ít nhất [gb] GB không gian đĩa. +ComponentsDiskSpaceMBLabel=Lựa chọn này yêu cầu ít nhất [mb] MB không gian đĩa. + +; *** "Select Additional Tasks" wizard page +WizardSelectTasks=Chọn các tác vụ bổ sung +SelectTasksDesc=Các tác vụ bổ sung nào nên được thực hiện? +SelectTasksLabel2=Chọn các tác vụ bổ sung mà bạn muốn cài đặt thực hiện khi cài đặt [name], rồi nhấn Tiếp. + +; *** "Select Start Menu Folder" wizard page +WizardSelectProgramGroup=Chọn thư mục bắt đầu +SelectStartMenuFolderDesc=Các lối tắt đến chương trình nên được đặt ở đâu? +SelectStartMenuFolderLabel3=Cài đặt sẽ tạo các lối tắt đến chương trình trong thư mục bắt đầu sau. +SelectStartMenuFolderBrowseLabel=Để tiếp tục, click Tiếp. Nếu bạn muốn chọn thư mục khác, click Duyệt. +MustEnterGroupName=Bạn phải nhập tên một thư mục. +GroupNameTooLong=Tên thư mục hoặc đường dẫn quá dài. +InvalidGroupName=Tên thư mục không hợp lệ. +BadGroupName=Tên thư mục không được chứa các kí tự sau:%n%n%1 +NoProgramGroupCheck2=&Không tạo thư mục bắt đầu + +; *** "Ready to Install" wizard page +WizardReady=Sẵn sàng cài đặt +ReadyLabel1=[name] đã sẵn sàng để dược cài đặt trên máy tính của bạn. +ReadyLabel2a=Click Cài đặt để tiếp tục, hoặc click Trước nếu bạn muốn xem lại/thay đổi bất kì cài đặt nào. +ReadyLabel2b=Click Cài đặt để tiếp tục cài đặt. +ReadyMemoUserInfo=Thông tin người dùng: +ReadyMemoDir=Vị trí đích: +ReadyMemoType=Kiểu cài đặt: +ReadyMemoComponents=Các thành phần được chọn: +ReadyMemoGroup=Thư mục bắt đầu: +ReadyMemoTasks=Các tác vụ bổ sung: + +; *** TDownloadWizardPage wizard page and DownloadTemporaryFile +DownloadingLabel=Đang tải các tập tin bổ sung... +ButtonStopDownload=&Dừng tải xuống +StopDownload=Bạn có chắc chắn muốn dừng tải xuống không? +ErrorDownloadAborted=Tải xuống bị hủy bỏ +ErrorDownloadFailed=Tải xuống không thành công: %1 %2 +ErrorDownloadSizeFailed=Getting size failed: %1 %2 +ErrorFileHash1=File hash failed: %1 +ErrorFileHash2=Invalid file hash: expected %1, found %2 +ErrorProgress=Invalid progress: %1 of %2 +ErrorFileSize=Invalid file size: expected %1, found %2 + +; *** "Preparing to Install" wizard page +WizardPreparing=Chuẩn bị cài đặt +PreparingDesc=[name] đang chuẩn bị được cài đặt trên máy tính của bạn. +PreviousInstallNotCompleted=Việc cài đặt/gỡ bỏ một chương trình chưa được hoàn tất trước đó. Bạn sẽ phải khởi động lại máy tính để hoàn tất cài đặt đó.%n%nSau khi chởi động lại, chạy Cài đặt một lần nữa để hoàn tất cài đặt [name]. +CannotContinue=Cài đặt không thể tiếp tục. Nhấn Hủy để thoát. +ApplicationsFound=Những chương trình sau đang sử dụng các tệp cần được cập nhật bởi trình cài đặt. Chúng tôi khuyên bạn cho phép Cài đặt đóng các chương trình này. +ApplicationsFound2=Những chương trình sau đang sử dụng các tệp cần được cập nhật bởi trình cài đặt. Chúng tôi khuyên bạn cho phép Cài đặt đóng các chương trình này. Sau khi hoàn thành cài đặt, chúng tôi sẽ thử khởi động lại các chương trình này. +CloseApplications=Tự độn&g đóng các chương trình này +DontCloseApplications=Không đóng các chương t&rình này +ErrorCloseApplications=Cài đặt không thể đóng mọi chương trình. Chúng tôi khuyên bạn đóng các chương trình đang sử dụng các tệp cần được cập nhật bởi Cài đặt một cách thủ công trước khi tiếp tục. +PrepareToInstallNeedsRestart=Setup must restart your computer. After restarting your computer, run Setup again to complete the installation of [name].%n%nWould you like to restart now? + +; *** "Installing" wizard page +WizardInstalling=Đang cài đặt +InstallingLabel=Hãy đợi khi [name] đang được cài đặt trên máy tính của bạn. + +; *** "Setup Completed" wizard page +FinishedHeadingLabel=Hoàn thành cài đặt [name] +FinishedLabelNoIcons=[name] đã được cài đặt xong trên máy tính của bạn. +FinishedLabel=[name] đã được cài đặt xong trên máy tính của bạn. Chương trình có thể được khởi động bằng cách click vào lối tắt đến chương trình. +ClickFinish=Click Hoàn thành để thoát Cài đặt. +FinishedRestartLabel=Để hoàn thành cài đặt [name], máy tính của bạn cần đươc khởi động lại. Bạn có muốn khởi động lại ngay? +FinishedRestartMessage=Để hoàn thành cài đặt [name], máy tính của bạn cần đươc khởi động lại.%n%nBạn có muốn khởi động lại ngay? +ShowReadmeCheck=Có, tôi muốn xem tệp README +YesRadio=&Có, khởi động lại máy tính ngay +NoRadio=&Không, tôi sẽ khởi động lại máy tính sau +; used for example as 'Run MyProg.exe' +RunEntryExec=Chạy %1 +; used for example as 'View Readme.txt' +RunEntryShellExec=Xem %1 + +; *** "Setup Needs the Next Disk" stuff +ChangeDiskTitle=Cài đặt cần đĩa tiếp theo +SelectDiskLabel2=Hãy chèn đĩa %1 và click OK.%n%nNếu các tệp trên đĩa này có thể được tìm thấy trên một thư mục khác với được hiển thị dưới đây, nhập đường dẫn hoặc click Duyệt. +PathLabel=Đườ&ng dẫn: +FileNotInDir2=Tệp "%1" không thể được xác định trong "%2". Hãy chọn đia xđúng hoặc chọn thư mục khác. +SelectDirectoryLabel=Hãy chọn vị trí của đĩa tiếp theo. + +; *** Installation phase messages +SetupAborted=Cài đặt không được hoàn thành.%n%nHãy sửa lỗi và chạy Cài đặt lại. +AbortRetryIgnoreSelectAction=Chọn hành động +AbortRetryIgnoreRetry=&Thử lại +AbortRetryIgnoreIgnore=&Bỏ qua lỗi và tiếp tục +AbortRetryIgnoreCancel=Hủy + +; *** Installation status messages +StatusClosingApplications=Đang đóng các chương trình... +StatusCreateDirs=Đang tạo các thư mục... +StatusExtractFiles=Đang giải nén các tệp... +StatusCreateIcons=Đang tạo các lối tắt... +StatusCreateIniEntries=Đang tạo các đầu vào INI... +StatusCreateRegistryEntries=Đang tạo các đầu vào registry... +StatusRegisterFiles=Đang đăng kí các tệp... +StatusSavingUninstall=Đang lưu thông tin gỡ cài đặt... +StatusRunProgram=Đang hoàn thành cài đặt... +StatusRestartingApplications=Đang khởi động lại các chương trình... +StatusRollback=Đang hoàn lại các thay đổi... + +; *** Misc. errors +ErrorInternal2=Lỗi nội bộ: %1 +ErrorFunctionFailedNoCode=%1 thất bại +ErrorFunctionFailed=%1 thất bại với mã lỗi %2 +ErrorFunctionFailedWithMessage=%1 thất bại với mã lỗi %2.%n%3 +ErrorExecutingProgram=Không thể chạy tệp:%n%1 + +; *** Registry errors +ErrorRegOpenKey=Lỗi khi mở registry:%n%1\%2 +ErrorRegCreateKey=Lỗi khi tạo registry:%n%1\%2 +ErrorRegWriteKey=Lỗi khi viết registry:%n%1\%2 + +; *** INI errors +ErrorIniEntry=Lỗi tạo đầu vào INI cho tệp "%1". + +; *** File copying errors +FileAbortRetryIgnoreSkipNotRecommended=&Bỏ qua tệp này (không khuyến nghị) +FileAbortRetryIgnoreIgnoreNotRecommended=&Bỏ qua để tiếp tục bằng mọi giá (không khuyến nghị) +SourceIsCorrupted=Tệp nguồn bị hỏng +SourceDoesntExist=Tệp nguồn "%1" không tồn tại +ExistingFileReadOnly2=Tệp đã tồn tại với đánh dấu chỉ đọc. +ExistingFileReadOnlyRetry=&Xóa thuộc tính chỉ đọc và thử lại +ExistingFileReadOnlyKeepExisting=&Giữ tập tin hiện có +ErrorReadingExistingDest=Một lỗi đã xảy ra khi đọc tệp: +FileExistsSelectAction=Select action +FileExists2=Tệp đã tồn tại. +FileExistsOverwriteExisting=G&hi đè tệp hiện có +FileExistsKeepExisting=&Giữ tệp hiện có +FileExistsOverwriteOrKeepAll=&Do this for the next conflicts +ExistingFileNewerSelectAction=Select action +ExistingFileNewer2=Tệp hiện có mới hơn tệp mà Thiết lập đang cố gắng cài đặt. +ExistingFileNewerOverwriteExisting=&Ghi đè tệp hiện có +ExistingFileNewerKeepExisting=&Giữ tệp hiện có (khuyến nghị) +ExistingFileNewerOverwriteOrKeepAll=&Do this for the next conflicts +ErrorChangingAttr=Một lỗi đã xảy ra khi thay đổi thuộc tính của tệp sau: +ErrorCreatingTemp=Một lỗi đã xảy ra khi tạo một tệp trong thư mục đích: +ErrorReadingSource=Một lỗi đã xảy ra khi đọc tệp nguồn: +ErrorCopying=Một lỗi đã xảy ra khi sao chép tệp: +ErrorReplacingExistingFile=Một lỗi đã xảy ra khi thay thế tệp: +ErrorRestartReplace=Khởi động lại & Thay thế (RestartReplace) thất bại: +ErrorRenamingTemp=Một lỗi đã xảy ra khi đổi tên tệp trong thư mục đích: +ErrorRegisterServer=Không thể đăng kí DLL/OCX: %1 +ErrorRegSvr32Failed=RegSvr32 thất bại với mã thoát %1 +ErrorRegisterTypeLib=Không thể đăng kí thư viện kiểu: %1 + +; *** Uninstall display name markings +; used for example as 'My Program (32-bit)' +UninstallDisplayNameMark=%1 (%2) +; used for example as 'My Program (32-bit, All users)' +UninstallDisplayNameMarks=%1 (%2, %3) +UninstallDisplayNameMark32Bit=32-bit +UninstallDisplayNameMark64Bit=64-bit +UninstallDisplayNameMarkAllUsers=All users +UninstallDisplayNameMarkCurrentUser=Current user + +; *** Post-installation errors +ErrorOpeningReadme=Một lỗi đã xảy ra khi mở tệp README. +ErrorRestartingComputer=Cài đặt không thể khởi động lại máy tính. Hãy làm việc này một cách thủ công. + +; *** Uninstaller messages +UninstallNotFound=Tệp "%1" không tồn tại. Không thể gỡ cài đặt. +UninstallOpenError=Tệp "%1" không thể được mở. Không thể gỡ cài đặt +UninstallUnsupportedVer=Tệp nhật kí gỡ cài đặt "%1" có định dạng không thể được xác định bởi phiên bản gỡ cài đặt này. Không thể gỡ cài đặt +UninstallUnknownEntry=Một đầu vào không xác định (%1) đã bị phát hiện trong nhật kí gỡ cài đặt +ConfirmUninstall=Bạn có muốn dỡ bỏ hoàn toàn %1 và mọi thành phần của nó? +UninstallOnlyOnWin64=Cài đặt này chỉ có thể được gỡ bỏ trên Windows 64 bit. +OnlyAdminCanUninstall=Cài đặt này chỉ có thể được gỡ bỏ bằng một người dùng có quyền người quản trị. +UninstallStatusLabel=Hãy đợi khi %1 được gỡ khỏi máy tính của bạn. +UninstalledAll=%1 đã được gỡ bỏ thành công khỏi máy tính của bạn. +UninstalledMost=%1 đã được gỡ bỏ thành công.%n%nMột số thành phần không thể được gỡ bỏ. Hãy làm việc này một cách thủ công. +UninstalledAndNeedsRestart=Để hoàn thành việc gỡ cài đặt %1, bạn phải khởi động lại máy tính.%n%nBạn có muốn khởi động lại ngay? +UninstallDataCorrupted=Tệp "%1" bị hỏng. Không thể gỡ cài đặt + +; *** Uninstallation phase messages +ConfirmDeleteSharedFileTitle=Gỡ bỏ tệp được chia sẻ? +ConfirmDeleteSharedFile2=Hệ thống chỉ ra các tệp được chia sẻ sau không được sử dụng bởi chương trình nào. Bạn có muốn gỡ bỏ tệp này?%n%nNếu có một chương trình vẫn sử dụng tệp này mà tệp bị gỡ bỏ, chúng có thể không chạy tốt. Nếu bạn không chắc chắn, chọn Không. Để lại tệp trên hệ thống của bạn sẽ không gây ra tổn hại. +SharedFileNameLabel=Tên tệp: +SharedFileLocationLabel=Vị trí: +WizardUninstalling=Trạng thái gỡ cài đặt +StatusUninstalling=Đang gỡ cài đặt %1... + +; *** Shutdown block reasons +ShutdownBlockReasonInstallingApp=Đang cài đặt %1. +ShutdownBlockReasonUninstallingApp=Đang gỡ cài đặt %1. + +; The custom messages below aren't used by Setup itself, but if you make +; use of them in your scripts, you'll want to translate them. + +[CustomMessages] + +NameAndVersion=%1 phiên bản %2 +AdditionalIcons=Các lối tắt bổ sung: +CreateDesktopIcon=Tạo một &lối tắt trên Desktop +CreateQuickLaunchIcon=Tạo một lối tắt &Khởi động nhanh +ProgramOnTheWeb=%1 trên Web +UninstallProgram=Gỡ cài đặt %1 +LaunchProgram=Khởi động %1 +AssocFileExtension=&Gán %1 với đuôi tệp %2 +AssocingFileExtension=Đang gán %1 với đuôi tệp %2... +AutoStartProgramGroupDescription=Khởi động: +AutoStartProgram=Tự động khởi động %1 +AddonHostProgramNotFound=%1 không thể được xác định trong thư mục bạn đã chọn.%n%nBạn có muốn tiếp tục bằng mọi giá? diff --git a/Files/SetupClassicIcon.ico b/Files/SetupClassicIcon.ico new file mode 100644 index 00000000..b274e4c6 Binary files /dev/null and b/Files/SetupClassicIcon.ico differ diff --git a/Files/WizClassicImage-IS.bmp b/Files/WizClassicImage-IS.bmp new file mode 100644 index 00000000..cf844e09 Binary files /dev/null and b/Files/WizClassicImage-IS.bmp differ diff --git a/Files/WizClassicImage.bmp b/Files/WizClassicImage.bmp new file mode 100644 index 00000000..cb05a063 Binary files /dev/null and b/Files/WizClassicImage.bmp differ diff --git a/Files/WizClassicSmallImage-IS.bmp b/Files/WizClassicSmallImage-IS.bmp new file mode 100644 index 00000000..1e8e4979 Binary files /dev/null and b/Files/WizClassicSmallImage-IS.bmp differ diff --git a/Files/WizClassicSmallImage.bmp b/Files/WizClassicSmallImage.bmp new file mode 100644 index 00000000..63f42104 Binary files /dev/null and b/Files/WizClassicSmallImage.bmp differ diff --git a/Files/isbunzip.dll b/Files/isbunzip.dll new file mode 100644 index 00000000..814e8680 Binary files /dev/null and b/Files/isbunzip.dll differ diff --git a/Files/isbzip.dll b/Files/isbzip.dll new file mode 100644 index 00000000..1afeefd5 Binary files /dev/null and b/Files/isbzip.dll differ diff --git a/Files/islzma.dll b/Files/islzma.dll new file mode 100644 index 00000000..81fd05ac Binary files /dev/null and b/Files/islzma.dll differ diff --git a/Files/islzma32.exe b/Files/islzma32.exe new file mode 100644 index 00000000..7562645e Binary files /dev/null and b/Files/islzma32.exe differ diff --git a/Files/islzma64.exe b/Files/islzma64.exe new file mode 100644 index 00000000..fd58a59e Binary files /dev/null and b/Files/islzma64.exe differ diff --git a/Files/isscint.dll b/Files/isscint.dll new file mode 100644 index 00000000..5f8ef49b Binary files /dev/null and b/Files/isscint.dll differ diff --git a/Files/isunzlib.dll b/Files/isunzlib.dll new file mode 100644 index 00000000..8c4ed510 Binary files /dev/null and b/Files/isunzlib.dll differ diff --git a/Files/iszlib.dll b/Files/iszlib.dll new file mode 100644 index 00000000..b326e3a7 Binary files /dev/null and b/Files/iszlib.dll differ diff --git a/ISHelp/.gitignore b/ISHelp/.gitignore new file mode 100644 index 00000000..5fd86ab5 --- /dev/null +++ b/ISHelp/.gitignore @@ -0,0 +1,5 @@ +c.bat +compilesettings.bat +e*.bat +isxclasses_generated.xml +isxfunc_generated.xml diff --git a/ISHelp/ISHelpGen/.gitignore b/ISHelp/ISHelpGen/.gitignore new file mode 100644 index 00000000..5f56909a --- /dev/null +++ b/ISHelp/ISHelpGen/.gitignore @@ -0,0 +1,3 @@ +*.dcu +*.dof +*.cfg diff --git a/ISHelp/ISHelpGen/ISHelpGen.dpr b/ISHelp/ISHelpGen/ISHelpGen.dpr new file mode 100644 index 00000000..d3b944f3 --- /dev/null +++ b/ISHelp/ISHelpGen/ISHelpGen.dpr @@ -0,0 +1,1042 @@ +program ISHelpGen; + +{$APPTYPE CONSOLE} + +uses + Windows, + SysUtils, + Classes, + ActiveX, + ComObj, + TypInfo, + XMLParse in 'XMLParse.pas', + UIsxclassesParser in 'UIsxclassesParser.pas'; + +const + Version = '1.13'; + + XMLFileVersion = '1'; + + SNewLine = #13#10; + +type + TElement = ( + el_Text, + elA, + elAnchorLink, + elB, + elBody, + elBR, + elContents, + elContentsHeading, + elContentsTopic, + elDD, + elDL, + elDT, + elExample, + elExamples, + elExtLink, + elFlag, + elFlagList, + elHeading, + elI, + elIndent, + elKeyword, + elLI, + elLink, + elOL, + elP, + elParam, + elParamList, + elPre, + elPreCode, + elSetupDefault, + elSetupFormat, + elSetupValid, + elSetupTopic, + elSmall, + elTable, + elTD, + elTopic, + elTR, + elTT, + elU, + elUL); + TElementSet = set of TElement; + + TKeywordInfo = class + public + Topic, Anchor: String; + end; + +var + SourceDir, OutputDir: String; + ISPP: Boolean; + Keywords, DefinedTopics, TargetTopics, SetupDirectives: TStringList; + TopicsGenerated: Integer = 0; + CurrentTopicName: String; + CurrentListIsCompact: Boolean; + CurrentTableColumnIndex: Integer; + +const + { When IE 6 is rendering a frame in Standards mode (due to a !DOCTYPE tag) + and a vertical scroll bar must be displayed, the scroll bar obscures the + right edge of the content. This hack works around that by forcing the + vertical scroll bar to always be shown. It is applied only to IE 6, since + neither IE 5.x nor IE 7 exhibit this behavior. + See http://groups.google.com/group/macromedia.dreamweaver/browse_thread/thread/fb755be2e0ee9267 } + IE6FramesHack = + ''; + +procedure UnexpectedElementError(const Node: IXMLNode); +begin + raise Exception.CreateFmt('Element "%s" is unexpected here', [Node.NodeName]); +end; + +function ElementFromNode(const Node: IXMLNode): TElement; +var + I: Integer; +begin + case Node.NodeType of + NODE_ELEMENT: + begin + I := GetEnumValue(TypeInfo(TElement), 'el' + Node.NodeName); + if I < 0 then + raise Exception.CreateFmt('Unknown element "%s"', [Node.NodeName]); + Result := TElement(I); + end; + NODE_TEXT, NODE_ENTITY_REFERENCE: Result := el_Text; + else + raise Exception.CreateFmt('ElementFromNode: Unknown node type %d', [Node.NodeType]); + end; +end; + +function IsWhitespace(const Node: IXMLNode): Boolean; +{ Returns True if the node is text that consists only of whitespace } +var + S: String; + I: Integer; +begin + Result := False; + if Node.NodeType = NODE_TEXT then begin + S := Node.Text; + for I := 1 to Length(S) do + if not CharInSet(S[I], [#9, #10, ' ']) then + Exit; + Result := True; + end; +end; + +function IsFirstNonWhitespaceNode(Node: IXMLNode): Boolean; +{ Returns True if there are no preceding non-whitespace sibling elements } +begin + repeat + Node := Node.PreviousSibling; + until (Node = nil) or not IsWhitespace(Node); + Result := (Node = nil); +end; + +function IsLastNonWhitespaceNode(Node: IXMLNode): Boolean; +{ Returns True if no non-whitespace sibling elements follow } +begin + repeat + Node := Node.NextSibling; + until (Node = nil) or not IsWhitespace(Node); + Result := (Node = nil); +end; + +function NodeHasChildren(Node: IXMLNode): Boolean; +{ Returns True if the node has non-whitespace children } +begin + Node := Node.GetFirstChild; + while Assigned(Node) do begin + if not IsWhitespace(Node) then begin + Result := True; + Exit; + end; + Node := Node.NextSibling; + end; + Result := False; +end; + +function ListItemExists(const SL: TStrings; const S: String): Boolean; +var + I: Integer; +begin + for I := 0 to SL.Count-1 do + if SL[I] = S then begin + Result := True; + Exit; + end; + Result := False; +end; + +function StringChange(var S: String; const FromStr, ToStr: String): Integer; +var + FromStrLen, I, EndPos, J: Integer; + IsMatch: Boolean; +label 1; +begin + Result := 0; + if FromStr = '' then Exit; + FromStrLen := Length(FromStr); + I := 1; +1:EndPos := Length(S) - FromStrLen + 1; + while I <= EndPos do begin + IsMatch := True; + J := 0; + while J < FromStrLen do begin + if S[J+I] <> FromStr[J+1] then begin + IsMatch := False; + Break; + end; + Inc(J); + end; + if IsMatch then begin + Inc(Result); + Delete(S, I, FromStrLen); + Insert(ToStr, S, I); + Inc(I, Length(ToStr)); + goto 1; + end; + Inc(I); + end; +end; + +procedure SaveStringToFile(const S, Filename: String); +var + F: TFileStream; + U: UTF8String; +begin + F := TFileStream.Create(Filename, fmCreate); + try + U := UTF8String(S); + F.WriteBuffer(U[1], Length(U)); + finally + F.Free; + end; +end; + +function EscapeHTML(const S: String; const EscapeDoubleQuotes: Boolean = True): String; +begin + Result := S; + StringChange(Result, '&', '&'); + StringChange(Result, '<', '<'); + StringChange(Result, '>', '>'); + if EscapeDoubleQuotes then + StringChange(Result, '"', '"'); + { Also convert the Unicode representation of a non-breaking space into   + so it's easily to tell them apart from normal spaces when viewing the + generated HTML source } + StringChange(Result, #$00A0, ' '); +end; + +procedure CheckTopicNameValidity(const TopicName: String); +var + I: Integer; +begin + if TopicName = '' then + raise Exception.Create('Topic name cannot be empty'); + { Security: Make sure topic names don't include slashes etc. } + for I := 1 to Length(TopicName) do + if not CharInSet(TopicName[I], ['A'..'Z', 'a'..'z', '0'..'9', '_', '-']) then + raise Exception.CreateFmt('Topic name "%s" includes invalid characters', [TopicName]); +end; + +procedure CheckAnchorNameValidity(const AnchorName: String); +var + I: Integer; +begin + if AnchorName = '' then + raise Exception.Create('Anchor name cannot be empty'); + for I := 1 to Length(AnchorName) do + if not CharInSet(AnchorName[I], ['A'..'Z', 'a'..'z', '0'..'9', '_', '-', '.']) then + raise Exception.CreateFmt('Anchor name "%s" includes invalid characters', [AnchorName]); +end; + +function GenerateTopicFilename(const TopicName: String): String; +begin + CheckTopicNameValidity(TopicName); + Result := 'topic_' + Lowercase(TopicName) + '.htm'; +end; + +function GenerateTopicLink(const TopicName, AnchorName: String): String; +begin + if TopicName <> '' then + Result := GenerateTopicFileName(TopicName) + else begin + Result := ''; + if AnchorName = '' then + raise Exception.Create('Cannot create link with neither a target topic nor anchor'); + end; + if AnchorName <> '' then begin + CheckAnchorNameValidity(AnchorName); + Result := Result + '#' + AnchorName; + end; +end; + +function GenerateAnchorHTML(const AnchorName, InnerContents: String): String; +{ Generates HTML for an anchor on the current topic, also updating + DefinedTopics and checking for duplicates } +var + S: String; +begin + if CurrentTopicName = '' then + raise Exception.Create('Cannot create anchor outside of topic'); + CheckAnchorNameValidity(AnchorName); + + S := CurrentTopicName + '#' + AnchorName; + if ListItemExists(DefinedTopics, S) then + raise Exception.CreateFmt('Anchor name "%s" in topic "%s" defined more than once', + [AnchorName, CurrentTopicName]); + DefinedTopics.Add(S); + + Result := Format('%s', [EscapeHTML(AnchorName), InnerContents]); +end; + +function GenerateTopicLinkHTML(const TopicName, AnchorName, InnerContents: String): String; +{ Generates HTML for a link to a topic and/or anchor, also updating + TargetTopics } +var + S: String; +begin + if TopicName <> '' then + S := TopicName + else begin + S := CurrentTopicName; + if S = '' then + raise Exception.Create('Cannot create link outside of topic with empty target topic'); + if AnchorName = '' then + raise Exception.Create('Cannot create link with neither a target topic nor anchor'); + end; + CheckTopicNameValidity(S); + if AnchorName <> '' then begin + CheckAnchorNameValidity(AnchorName); + S := S + '#' + AnchorName; + end; + if not ListItemExists(TargetTopics, S) then + TargetTopics.Add(S); + + Result := Format('%s', + [EscapeHTML(GenerateTopicLink(TopicName, AnchorName)), InnerContents]); +end; + +procedure CreateKeyword(const AKeyword, ATopicName, AAnchorName: String); +var + KeywordInfo: TKeywordInfo; +begin + KeywordInfo := TKeywordInfo.Create; + KeywordInfo.Topic := ATopicName; + KeywordInfo.Anchor := AAnchorName; + Keywords.AddObject(AKeyword, KeywordInfo); +end; + +function ParseFormattedText(Node: IXMLNode): String; +var + S: String; + I: Integer; + B: Boolean; +begin + Result := ''; + Node := Node.FirstChild; + while Assigned(Node) do begin + case ElementFromNode(Node) of + el_Text: + Result := Result + EscapeHTML(Node.Text, False); + elA: + begin + S := Node.Attributes['name']; + Result := Result + GenerateAnchorHTML(S, ParseFormattedText(Node)); + end; + elAnchorLink: + begin + S := Node.Attributes['name']; + Result := Result + GenerateTopicLinkHTML('', S, ParseFormattedText(Node)); + end; + elB: + Result := Result + '' + ParseFormattedText(Node) + ''; + elBR: + Result := Result + '
'; + elDD: + Result := Result + '
' + ParseFormattedText(Node) + '
'; + elDL: + Result := Result + '
' + ParseFormattedText(Node) + '
'; + elDT: + Result := Result + '
' + ParseFormattedText(Node) + '
'; + elExample: + Result := Result + '
' + SNewLine + + '
Example:
' + ParseFormattedText(Node) + '
'; + elExamples: + Result := Result + '
' + SNewLine + + '
Examples:
' + ParseFormattedText(Node) + '
'; + elFlag: + begin + S := Node.Attributes['name']; + if CurrentTopicName = '' then + raise Exception.Create(' used outside of topic'); + CreateKeyword(S, CurrentTopicName, S); + Result := Result + '
' + GenerateAnchorHTML(S, EscapeHTML(S)) + + '
' + SNewLine + '
' + ParseFormattedText(Node) + + '
'; + end; + elFlagList: + Result := Result + '
' + ParseFormattedText(Node) + '
'; + elI: + Result := Result + '' + ParseFormattedText(Node) + ''; + elIndent: + Result := Result + '
' + ParseFormattedText(Node) + '
'; + elLI: + begin + Result := Result + '' + ParseFormattedText(Node) + ''; + end; + elLink: + begin + S := Node.Attributes['topic']; + Result := Result + GenerateTopicLinkHTML(S, Node.OptionalAttributes['anchor'], + ParseFormattedText(Node)); + end; + elExtLink: + begin + S := EscapeHTML(Node.Attributes['href']); + if Pos('ms-its:', S) = 1 then + Result := Result + Format('%s', [S, ParseFormattedText(Node)]) + else + Result := Result + Format('%s [external link]', + [S, S, ParseFormattedText(Node)]); + end; + elHeading: + begin + if IsFirstNonWhitespaceNode(Node) then + Result := Result + '

' + else + Result := Result + '

'; + Result := Result + ParseFormattedText(Node) + '

'; + end; + elOL: + Result := Result + '
    ' + ParseFormattedText(Node) + '
'; + elP: + begin + if Node.HasAttribute('margin') and (Node.Attributes['margin'] = 'no') then + Result := Result + '
' + ParseFormattedText(Node) + '
' + else + Result := Result + '

' + ParseFormattedText(Node) + '

'; + end; + elParam: + begin + { IE doesn't support immediate-child-only selectors in CSS (e.g. + "DL.paramlist > DT") so we have to apply the class to each DT + instead of just on the DL. } + S := Node.Attributes['name']; + if CurrentTopicName = '' then + raise Exception.Create(' used outside of topic'); + CreateKeyword(S, CurrentTopicName, S); + Result := Result + '
' + GenerateAnchorHTML(S, EscapeHTML(S)) + ''; + if Node.Attributes['required'] = 'yes' then + Result := Result + '  (Required)'; + Result := Result + '
' + ParseFormattedText(Node) + '
'; + end; + elParamList: + Result := Result + '
' + ParseFormattedText(Node) + '
'; + elPre: + begin + Result := Result + ' inside example boxes: Don't include a + bottom margin if
 is the last element } 
+          if (ElementFromNode(Node.ParentNode) in [elExample, elExamples]) and
+             IsLastNonWhitespaceNode(Node) then
+            Result := Result + ' class="nomargin"';
+          Result := Result + '>' + ParseFormattedText(Node) + '
'; + end; + elPreCode: + Result := Result + '
' + ParseFormattedText(Node) + '
'; + elSmall: + Result := Result + '' + ParseFormattedText(Node) + ''; + elTable: + Result := Result + '' + ParseFormattedText(Node) + '
'; + elTD: + begin + Result := Result + '' + ParseFormattedText(Node) + ''; + Inc(CurrentTableColumnIndex); + end; + elTR: + begin + I := CurrentTableColumnIndex; + CurrentTableColumnIndex := 0; + Result := Result + '' + ParseFormattedText(Node) + ''; + CurrentTableColumnIndex := I; + end; + elTT: + Result := Result + '' + ParseFormattedText(Node) + ''; + elU: + Result := Result + '' + ParseFormattedText(Node) + ''; + elUL: + begin + B := CurrentListIsCompact; + CurrentListIsCompact := (Node.HasAttribute('appearance') and (Node.Attributes['appearance'] = 'compact')); + Result := Result + '
    ' + ParseFormattedText(Node) + '
'; + CurrentListIsCompact := B; + end; + else + UnexpectedElementError(Node); + end; + Node := Node.NextSibling; + end; +end; + +function GenerateSetupDirectiveTopicName(const Directive: String): String; +begin + Result := 'setup_' + Lowercase(Directive); +end; + +procedure ParseTopic(const TopicNode: IXMLNode; const SetupTopic: Boolean); +var + TopicDirective, TopicName, TopicTitle: String; + BodyText, SetupFormatText, SetupValidText, SetupDefaultText, S: String; + Node: IXMLNode; +begin + if not SetupTopic then begin + TopicName := TopicNode.Attributes['name']; + TopicTitle := TopicNode.Attributes['title']; + end + else begin + TopicDirective := TopicNode.Attributes['directive']; + TopicName := GenerateSetupDirectiveTopicName(TopicDirective); + CreateKeyword(TopicDirective, TopicName, ''); + if TopicNode.HasAttribute('title') then + TopicTitle := '[Setup]: ' + TopicNode.Attributes['title'] + else + TopicTitle := '[Setup]: ' + TopicDirective; + end; + + CheckTopicNameValidity(TopicName); + if ListItemExists(DefinedTopics, TopicName) then + raise Exception.CreateFmt('Topic "%s" defined more than once', [TopicName]); + DefinedTopics.Add(TopicName); + + CurrentTopicName := TopicName; + + Node := TopicNode.FirstChild; + while Assigned(Node) do begin + if not IsWhitespace(Node) then begin + case ElementFromNode(Node) of + elBody: + BodyText := ParseFormattedText(Node); + elKeyword: + CreateKeyword(Node.Attributes['value'], TopicName, Node.OptionalAttributes['anchor']); + elSetupDefault: + begin + if not SetupTopic then + raise Exception.Create(' is only valid inside '); + {
is used instead of

since the data could + contain

's of its own, which can't be nested. + NOTE: The space before

is intentional -- as noted in + styles.css, "vertical-align: baseline" doesn't work right on IE6, + but putting a space before
works around the problem, at + least when it comes to lining up normal text with a single line + of monospaced text. } + SetupDefaultText := '

Default value:

' + + '
' + ParseFormattedText(Node) + + '
' + SNewLine; + end; + elSetupFormat: + begin + if not SetupTopic then + raise Exception.Create(' is only valid inside '); + { See comments above! } + SetupFormatText := '

Format:

' + + '
' + ParseFormattedText(Node) + + '
' + SNewLine; + end; + elSetupValid: + begin + if not SetupTopic then + raise Exception.Create(' is only valid inside '); + { See comments above! } + SetupValidText := '

Valid values:

' + + '
' + ParseFormattedText(Node) + + '
' + SNewLine; + end; + else + UnexpectedElementError(Node); + end; + end; + Node := Node.NextSibling; + end; + + CurrentTopicName := ''; + + S := + '' + SNewLine + + '' + SNewLine + + '' + SNewLine + + '' + SNewLine + + '' + SNewLine + + '' + EscapeHTML(TopicTitle, False) + '' + SNewLine + + IE6FramesHack + SNewLine + + '' + SNewLine + + '' + SNewLine + + '' + SNewLine + + '' + SNewLine + + '

' + EscapeHTML(TopicTitle, False) + '

' + SNewLine + + '
'; + + if TopicName = 'whatisinnosetup' then begin + S := S + SNewLine + SNewLine + + ''; + end; + + if SetupTopic then begin + if (SetupFormatText <> '') or + (SetupValidText <> '') or + (SetupDefaultText <> '') then + S := S + SNewLine + '' + SNewLine + + SetupFormatText + SetupValidText + SetupDefaultText + '
'; + S := S + SNewLine + '
Description:
'; + end; + + S := S + + BodyText + + '
' + SNewLine + + '' + SNewLine + + '' + SNewLine; + + { Normalize the line breaks (MSXML converts CRLF -> LF) } + StringChange(S, #13#10, #10); + StringChange(S, #10, #13#10); + + SaveStringToFile(S, OutputDir + GenerateTopicFilename(TopicName)); + Inc(TopicsGenerated); +end; + +procedure GenerateHTMLHelpContents(const ContentsNode: IXMLNode); +var + SL: TStringList; + + procedure AddLeaf(const Title, TopicName: String); + begin + SL.Add(Format('
  • ' + + '' + + '', + [EscapeHTML(Title), EscapeHTML(GenerateTopicLink(TopicName, ''))])); + end; + + procedure HandleSetupDirectivesNode; + var + I: Integer; + begin + SL.Add('
      '); + for I := 0 to SetupDirectives.Count-1 do + AddLeaf(SetupDirectives[I], GenerateSetupDirectiveTopicName(SetupDirectives[I])); + SL.Add('
    '); + end; + + procedure HandleNode(const ParentNode: IXMLNode); + var + Node: IXMLNode; + begin + SL.Add('
      '); + Node := ParentNode.FirstChild; + while Assigned(Node) do begin + if not IsWhitespace(Node) then begin + case ElementFromNode(Node) of + elContentsHeading: + begin + SL.Add(Format('
    • ' + + '', + [EscapeHTML(Node.Attributes['title'])])); + if Node.Attributes['title'] = '[Setup] section directives' then + HandleSetupDirectivesNode + else + HandleNode(Node); + end; + elContentsTopic: + AddLeaf(Node.Attributes['title'], Node.Attributes['topic']); + else + UnexpectedElementError(Node); + end; + end; + Node := Node.NextSibling; + end; + SL.Add('
    '); + if not ISPP and (ParentNode = ContentsNode) then begin + { Don't put next 2 lines on 1 line or hhc will hang... } + SL.Add(''); + SL.Add(''); + end; + end; + +begin + SL := TStringList.Create; + try + SL.Add(''); + + HandleNode(ContentsNode); + + SL.Add(''); + SL.WriteBOM := False; + SL.SaveToFile(OutputDir + 'hh_generated_contents.hhc', TEncoding.UTF8); + finally + SL.Free; + end; +end; + +procedure GenerateStaticContents(const ContentsNode: IXMLNode); +var + SL: TStringList; + CurHeadingID: Integer; + + procedure AddLeaf(const Title, TopicName: String); + begin + SL.Add(Format('' + + '%s', + [EscapeHTML(GenerateTopicLink(TopicName, '')), EscapeHTML(Title)])); + end; + + procedure HandleSetupDirectivesNode; + var + I: Integer; + begin + SL.Add(''); + for I := 0 to SetupDirectives.Count-1 do + AddLeaf(SetupDirectives[I], GenerateSetupDirectiveTopicName(SetupDirectives[I])); + SL.Add('
    '); + end; + + procedure HandleNode(const ParentNode: IXMLNode); + var + Node: IXMLNode; + begin + SL.Add(''); + Node := ParentNode.FirstChild; + while Assigned(Node) do begin + if not IsWhitespace(Node) then begin + case ElementFromNode(Node) of + elContentsHeading: + begin + Inc(CurHeadingID); + SL.Add(Format('' + + '', + [CurHeadingID, CurHeadingID, CurHeadingID, CurHeadingID, EscapeHTML(Node.Attributes['title'])])); + SL.Add(Format(''); + end; + elContentsTopic: + AddLeaf(Node.Attributes['title'], Node.Attributes['topic']); + else + UnexpectedElementError(Node); + end; + end; + Node := Node.NextSibling; + end; + SL.Add('
    > %s
    ', [CurHeadingID])); + if Node.Attributes['title'] = '[Setup] section directives' then + HandleSetupDirectivesNode + else + HandleNode(Node); + SL.Add('
    '); + end; + +var + TemplateSL: TStringList; + S: String; +begin + SL := TStringList.Create; + try + CurHeadingID := 0; + HandleNode(ContentsNode); + + TemplateSL := TStringList.Create; + try + TemplateSL.LoadFromFile(OutputDir + 'contents-template.htm'); + S := TemplateSL.Text; + if StringChange(S, '%CONTENTSTABLES%' + SNewLine, SL.Text) <> 1 then + raise Exception.Create('GenerateStaticContents: Unexpected result from StringChange'); + TemplateSL.Text := S; + TemplateSL.WriteBOM := False; + TemplateSL.SaveToFile(OutputDir + 'contents.htm', TEncoding.UTF8); + finally + TemplateSL.Free; + end; + finally + SL.Free; + end; +end; + +procedure GenerateHTMLHelpIndex; + + function MultiKeyword(const Keyword: String): Boolean; + var + I, N: Integer; + begin + N := 0; + for I := 0 to Keywords.Count-1 do begin + if Keywords[I] = Keyword then begin + Inc(N); + if N > 1 then + Break; + end; + end; + Result := N > 1; + end; + +var + SL: TStringList; + I: Integer; + Anchor: String; +begin + SL := TStringList.Create; + try + SL.Add('
      '); + for I := 0 to Keywords.Count-1 do begin + { If a keyword is used more then once, don't use anchors: the 'Topics Found' + dialog displayed when clicking on such a keyword doesn't display the correct + topic titles anymore for each item with an anchor. Some HTML Help bug, see + http://social.msdn.microsoft.com/Forums/en-US/devdocs/thread/a2ee989e-4488-4edd-b034-745ed91c19e2 } + if not MultiKeyword(Keywords[I]) then + Anchor := TKeywordInfo(Keywords.Objects[I]).Anchor + else + Anchor := ''; + SL.Add(Format('
    • ' + + '' + + '' + + '', + [EscapeHTML(Keywords[I]), + EscapeHTML(GenerateTopicLink(TKeywordInfo(Keywords.Objects[I]).Topic, + Anchor))])); + end; + SL.Add('
    '); + SL.WriteBOM := False; + SL.SaveToFile(OutputDir + 'hh_generated_index.hhk', TEncoding.UTF8); + finally + SL.Free; + end; +end; + +procedure GenerateStaticIndex; + + function EscapeForJSStringLiteral(const S: String): String; + begin + Result := S; + StringChange(Result, '\', '\\'); + StringChange(Result, '"', '\"'); + { Note: Escaping " isn't really necessary here since EscapeHTML will + replace all " with " } + end; + +var + S, T: String; + I: Integer; +begin + S := 'var contentsIndexData=['; + + for I := 0 to Keywords.Count-1 do begin + T := Lowercase(TKeywordInfo(Keywords.Objects[I]).Topic); + if TKeywordInfo(Keywords.Objects[I]).Anchor <> '' then + T := T + '#' + TKeywordInfo(Keywords.Objects[I]).Anchor; + if Pos(':', T) <> 0 then + raise Exception.CreateFmt('GenerateStaticIndex: Invalid character in topic name/anchor "%s"', [T]); + if I <> 0 then + S := S + ','; + S := S + Format('"%s:%s"', [EscapeForJSStringLiteral(EscapeHTML(T)), + EscapeForJSStringLiteral(EscapeHTML(Keywords[I]))]); + end; + + S := S + ('];' + SNewLine + 'init_index_tab_elements();'); + SaveStringToFile(S, OutputDir + 'contentsindex.js'); +end; + +procedure CheckForNonexistentTargetTopics; +var + I: Integer; +begin + for I := 0 to TargetTopics.Count-1 do + if not ListItemExists(DefinedTopics, TargetTopics[I]) then + raise Exception.CreateFmt('Link target topic "%s" does not exist', + [TargetTopics[I]]); + //Writeln(Format('Warning: Link target topic "%s" does not exist', + // [TargetTopics[I]])); +end; + +procedure Go; + + procedure TransformFile(const FromXml, FromXsl, ToXml: String); + var + Doc, StyleDoc: TXMLDocument; + begin + Writeln('- Generating ' + ToXml); + Doc := TXMLDocument.Create; + try + StyleDoc := TXMLDocument.Create; + try + Writeln(' - Loading ' + FromXml); + Doc.LoadFromFile(SourceDir + FromXml); + Writeln(' - Loading ' + FromXsl); + StyleDoc.LoadFromFile(SourceDir + FromXsl); + Writeln(' - Transforming'); + SaveStringToFile(Doc.Root.TransformNode(StyleDoc.Root), + SourceDir + ToXml); + finally + StyleDoc.Free; + end; + finally + Doc.Free; + end; + end; + + procedure GenerateIsxClassesFile; + var + IsxclassesParser: TIsxclassesParser; + begin + Writeln('- Generating isxclasses_generated.xml'); + IsxclassesParser := TIsxclassesParser.Create; + try + IsxclassesParser.Parse(SourceDir + 'isxclasses.pas'); + IsxclassesParser.SaveXML(SourceDir + 'isxclasses.header', + SourceDir + 'isxclasses.header2', + SourceDir + 'isxclasses.footer', + SourceDir + 'isxclasses_generated.xml'); + finally + IsxclassesParser.Free; + end; + end; + + procedure ReadSetupDirectiveNames(Node: IXMLNode); + begin + while Assigned(Node) do begin + if ElementFromNode(Node) = elSetupTopic then + SetupDirectives.Add(Node.Attributes['directive']); + Node := Node.NextSibling; + end; + end; + + procedure DoDoc(Filename: String); + var + Doc: TXMLDocument; + Node: IXMLNode; + begin + Writeln('- Parsing ', Filename); + Doc := TXMLDocument.Create; + try + Doc.LoadFromFile(SourceDir + Filename); + Doc.StripComments; + + Node := Doc.Root; + if Node.HasAttribute('version') and (Node.Attributes['version'] <> XMLFileVersion) then + raise Exception.CreateFmt('Unrecognized file version "%s" (expected "%s")', + [Node.Attributes['version'], XMLFileVersion]); + Node := Node.FirstChild; + ReadSetupDirectiveNames(Node); + while Assigned(Node) do begin + if not IsWhitespace(Node) then begin + case ElementFromNode(Node) of + elContents: + begin + Writeln(' - Generating hh_generated_contents.hhc'); + GenerateHTMLHelpContents(Node); + Writeln(' - Generating contents.htm'); + GenerateStaticContents(Node); + end; + elSetupTopic: ParseTopic(Node, True); + elTopic: ParseTopic(Node, False); + else + UnexpectedElementError(Node); + end; + end; + Node := Node.NextSibling; + end; + finally + Doc.Free; + end; + end; + +var + I: Integer; +begin + if not ISPP then begin + TransformFile('isxfunc.xml', 'isxfunc.xsl', 'isxfunc_generated.xml'); + GenerateIsxClassesFile; + end else + TransformFile('ispp.xml', 'ispp.xsl', 'ispp_generated.xml'); + + Keywords := TStringList.Create; + Keywords.Duplicates := dupAccept; + Keywords.Sorted := True; + DefinedTopics := TStringList.Create; + DefinedTopics.Sorted := True; + TargetTopics := TStringList.Create; + TargetTopics.Sorted := True; + SetupDirectives := TStringList.Create; + SetupDirectives.Duplicates := dupError; + SetupDirectives.Sorted := True; + try + if not ISPP then begin + DoDoc('isetup.xml'); + DoDoc('isx.xml'); + DoDoc('isxfunc_generated.xml'); + DoDoc('isxclasses_generated.xml'); + end else + DoDoc('ispp_generated.xml'); + + CheckForNonexistentTargetTopics; + + Writeln('- Generating hh_generated_index.hhk'); + GenerateHTMLHelpIndex; + Writeln('- Generating contentsindex.js'); + GenerateStaticIndex; + finally + SetupDirectives.Free; + TargetTopics.Free; + DefinedTopics.Free; + if Assigned(Keywords) then begin + for I := Keywords.Count-1 downto 0 do + TKeywordInfo(Keywords.Objects[I]).Free; + Keywords.Free; + end; + end; +end; + +var + StartTime, EndTime: DWORD; +begin + try + Writeln('ISHelpGen v' + Version + ' by Jordan Russell & Martijn Laan'); + + if ParamCount <> 1 then begin + Writeln('usage: ISHelpGen [source-dir]'); + Halt(2); + end; + SourceDir := ParamStr(1) + '\'; + OutputDir := SourceDir + 'Staging\'; + + ISPP := FileExists(SourceDir + 'ispp.xml'); + if ISPP then + Writeln('Running in ISPP mode'); + + OleCheck(CoInitialize(nil)); { for MSXML } + + StartTime := GetTickCount; + Go; + EndTime := GetTickCount; + + Writeln('Success - ', TopicsGenerated, ' topics generated (', + EndTime - StartTime, ' ms elapsed)'); + except + on E: Exception do begin + Writeln('Error: ', TrimRight(E.Message)); + Halt(1); + end; + end; +end. diff --git a/ISHelp/ISHelpGen/ISHelpGen.dproj b/ISHelp/ISHelpGen/ISHelpGen.dproj new file mode 100644 index 00000000..a49b999e --- /dev/null +++ b/ISHelp/ISHelpGen/ISHelpGen.dproj @@ -0,0 +1,102 @@ + + + {058C4E22-A1B3-4C10-9062-05B58D9E9747} + ISHelpGen.dpr + True + Debug + 1 + Console + None + 19.5 + Win32 + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + 1 + true + vcl;rtl;vclx;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;CLXIB;ibxpress;VCLIB;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;Rave50CLX;Rave50VCL;dclOfficeXP;SynEdit_D6;MwDel70;db321d7r;RemObjects_RODX_D7;RemObjects_BPDX_D7;PKIECtrl7;PKIEDB7;kprocs7;sq7;RemObjects_Indy_D7;RemObjects_Enterprise_D7;secbbox70;indy;sbindy970;$(DCC_UsePackage) + ISHelpGen + 1043 + System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + false + false + false + false + false + false + false + Dcu\$(MainSource) + + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + 1033 + + + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + false + true + + + + MainSource + + + + + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + + + + Delphi.Personality.12 + + + + + ISHelpGen.dpr + + + + True + False + + + 12 + + + + diff --git a/ISHelp/ISHelpGen/UIsxclassesParser.pas b/ISHelp/ISHelpGen/UIsxclassesParser.pas new file mode 100644 index 00000000..2b1e920f --- /dev/null +++ b/ISHelp/ISHelpGen/UIsxclassesParser.pas @@ -0,0 +1,201 @@ +unit UIsxclassesParser; + +interface + +uses + Classes; + +type + TIsxclassesParser = class + private + FLines: TStringList; + FTypes: TStringList; + public + constructor Create(); + destructor Destroy(); override; + procedure Parse(const FileName: String); + procedure SaveXML(const HeaderFileName, HeaderFileName2, FooterFileName, OutputFileName: String); + end; + +implementation + +uses + Windows, + SysUtils; + +constructor TIsxclassesParser.Create(); +begin + inherited; + FLines := TStringList.Create(); + FTypes := TStringList.Create(); +end; + +destructor TIsxclassesParser.Destroy(); +begin + FTypes.Free(); + FLines.Free(); + inherited; +end; + +procedure TIsxclassesParser.Parse(const FileName: String); +var + F: TextFile; + S: String; + P: Integer; +begin + AssignFile(F, FileName); + Reset(F); + try + while not Eof(F) do begin + ReadLn(F, S); + FLines.Add(S); + P := Pos('=', S); + if P > 1 then + FTypes.Add(Trim(Copy(S, 1, P-1))) + end; + finally + CloseFile(F); + end; +end; + +procedure TIsxclassesParser.SaveXML(const HeaderFileName, HeaderFileName2, FooterFileName, OutputFileName: String); + + procedure FCopyFile(const SourceFileName, DestFileName: String; AppendToDestFile: Boolean); + var + F1, F2: TextFile; + S: String; + begin + AssignFile(F1, SourceFileName); + Reset(F1); + try + AssignFile(F2, DestFileName); + if AppendToDestFile then begin + if FileExists(DestFileName) then + Append(F2) + else + Reset(F2); + end else + Rewrite(F2); + try + while not Eof(F1) do begin + ReadLn(F1, S); + WriteLn(F2, S); + end; + finally + CloseFile(F2); + end; + finally + CloseFile(F1); + end; + end; + + function FGetNextPart(var Text: PChar): String; + var + P: PChar; + begin + case Text^ of + #0: + begin + Result := ''; + end; + #1..#32: + begin + P := Text; + Inc(Text); + while CharInSet(Text^ , [#1..#32]) do + Inc(Text); + SetString(Result, P, Text - P); + end; + '(', ')', ',', '=', ':', ';', '[', ']': + begin + Result := Text^; + Inc(Text); + end; + '0'..'9', 'A'..'Z', 'a'..'z', '_', '.': + begin + P := Text; + Inc(Text); + while CharInSet(Text^ , ['0'..'9', 'A'..'Z', 'a'..'z', '_', '.']) do + Inc(Text); + SetString(Result, P, Text - P); + end; + else + raise Exception.CreateFmt('Invalid symbol ''%s'' found', [Text^]); + end; + end; + + function FLinkTypes(const S: String): String; + var + Text: PChar; + NextPart: String; + begin + Result := ''; + Text := PChar(S); + + NextPart := FGetNextPart(Text); + while NextPart <> '' do begin + if FTypes.IndexOf(NextPart) >= 0 then begin + if Result = '' then //start of line = object definition + NextPart := '' + NextPart + '' + else + NextPart := '' + NextPart + ''; + end; + Result := Result + NextPart; + NextPart := FGetNextPart(Text); + end; + end; + + function FConvertLeadingSpacesToNbsp(const S: String): String; + var + I: Integer; + begin + Result := S; + I := 1; + while (I <= Length(Result)) and (Result[I] = ' ') do begin + Delete(Result, I, 1); + Insert(' ', Result, I); + Inc(I, Length(' ')); + end; + end; + +var + F: TextFile; + I: Integer; + S: String; +begin + FCopyFile(HeaderFileName, OutputFileName, False); + + AssignFile(F, OutputFileName); + Append(F); + try + for I := 0 to FTypes.Count-1 do begin + S := ''; + WriteLn(F, S); + end; + WriteLn(F, ''); + WriteLn(F, ''); + WriteLn(F, ''); + finally + CloseFile(F); + end; + + FCopyFile(HeaderFileName2, OutputFileName, True); + + AssignFile(F, OutputFileName); + Append(F); + try + WriteLn(F, '


    '); + for I := 0 to FLines.Count-1 do begin + S := FLinkTypes(FLines[I]); + S := FConvertLeadingSpacesToNbsp(S); + WriteLn(F, S, '
    '); + end; + WriteLn(F, '

    '); + finally + CloseFile(F); + end; + + FCopyFile(FooterFileName, OutputFileName, True); +end; + +end. diff --git a/ISHelp/ISHelpGen/XMLParse.pas b/ISHelp/ISHelpGen/XMLParse.pas new file mode 100644 index 00000000..f0c2d8af --- /dev/null +++ b/ISHelp/ISHelpGen/XMLParse.pas @@ -0,0 +1,225 @@ +unit XMLParse; + +{ XML parser. Currently just calls MSXML 6.0 to do the real work. } + +interface + +uses + Windows, SysUtils, Variants; + +type + IXMLNode = interface + function GetAttribute(const AName: String): String; + function GetOptionalAttribute(const AName: String): String; + function GetFirstChild: IXMLNode; + function GetNodeName: String; + function GetNextSibling: IXMLNode; + function GetNodeType: Integer; + function GetParentNode: IXMLNode; + function GetPreviousSibling: IXMLNode; + function GetRealMSXMLNode: OleVariant; + function GetText: String; + function HasAttribute(const AName: String): Boolean; + function TransformNode(const Stylesheet: IXMLNode): String; + property Attributes[const AName: String]: String read GetAttribute; + property OptionalAttributes[const AName: String]: String read GetOptionalAttribute; + property FirstChild: IXMLNode read GetFirstChild; + property NextSibling: IXMLNode read GetNextSibling; + property NodeName: String read GetNodeName; + property NodeType: Integer read GetNodeType; + property ParentNode: IXMLNode read GetParentNode; + property PreviousSibling: IXMLNode read GetPreviousSibling; + property Text: String read GetText; + end; + + TXMLDocument = class + private + FDoc: OleVariant; + function GetRoot: IXMLNode; + public + constructor Create; + procedure LoadFromFile(const AFilename: String); + procedure StripComments; + property Root: IXMLNode read GetRoot; + end; + +const + { Values for the NodeType property } + NODE_INVALID = 0; + NODE_ELEMENT = 1; + NODE_ATTRIBUTE = 2; + NODE_TEXT = 3; + NODE_CDATA_SECTION = 4; + NODE_ENTITY_REFERENCE = 5; + NODE_ENTITY = 6; + NODE_PROCESSING_INSTRUCTION = 7; + NODE_COMMENT = 8; + NODE_DOCUMENT = 9; + NODE_DOCUMENT_TYPE = 10; + NODE_DOCUMENT_FRAGMENT = 11; + NODE_NOTATION = 12; + +implementation + +uses + ActiveX, ComObj; + +type + TXMLNode = class(TInterfacedObject, IXMLNode) + private + FRealNode: OleVariant; + function GetFirstChild: IXMLNode; + function GetAttribute(const AName: String): String; + function GetOptionalAttribute(const AName: String): String; + function GetNextSibling: IXMLNode; + function GetNodeName: String; + function GetNodeType: Integer; + function GetParentNode: IXMLNode; + function GetPreviousSibling: IXMLNode; + function GetRealMSXMLNode: OleVariant; + function GetText: String; + function HasAttribute(const AName: String): Boolean; + function TransformNode(const Stylesheet: IXMLNode): String; + public + constructor Create(const ARealNode: OleVariant); + end; + +function IsVarAssigned(const AVariant: OleVariant): Boolean; +begin + case VarType(AVariant) of + varEmpty: Result := False; + varDispatch: Result := Assigned(TVarData(AVariant).VDispatch); + else + raise Exception.Create('IsVarAssigned: Unexpected variant type'); + end; +end; + +function MakeNode(const ARealNode: OleVariant): IXMLNode; +begin + if IsVarAssigned(ARealNode) then + Result := TXMLNode.Create(ARealNode) + else + Result := nil; +end; + +function VariantToString(const V: OleVariant): String; +begin + if VarType(V) <> varOleStr then + raise Exception.Create('VariantToUTF8String: Expected varOleStr'); + Result := TVarData(V).VOleStr; +end; + +{ TXMLDocument } + +constructor TXMLDocument.Create; +begin + inherited Create; + FDoc := CreateOleObject('MSXML2.DOMDocument.6.0'); + FDoc.setProperty('ProhibitDTD', False); + FDoc.resolveExternals := True; + FDoc.async := False; + FDoc.preserveWhitespace := True; +end; + +function TXMLDocument.GetRoot: IXMLNode; +begin + Result := MakeNode(FDoc.documentElement); +end; + +procedure TXMLDocument.LoadFromFile(const AFilename: String); +begin + if not FDoc.load(AFilename) then begin + if Integer(FDoc.parseError.line) <> 0 then + raise Exception.CreateFmt('XML parse error (line %d, column %d): %s', + [Integer(FDoc.parseError.line), Integer(FDoc.parseError.linepos), + FDoc.parseError.reason]) + else + raise Exception.CreateFmt('XML parse error: %s', [FDoc.parseError.reason]); + end; +end; + +procedure TXMLDocument.StripComments; +begin + FDoc.selectNodes('//comment()').removeAll; +end; + +{ TXMLNode } + +constructor TXMLNode.Create(const ARealNode: OleVariant); +begin + inherited Create; + FRealNode := ARealNode; +end; + +function TXMLNode.GetAttribute(const AName: String): String; +var + N: OleVariant; +begin + N := FRealNode.attributes.getNamedItem(AName); + if not IsVarAssigned(N) then + raise Exception.CreateFmt('Attribute "%s" does not exist', [AName]); + Result := VariantToString(N.value); +end; + +function TXMLNode.GetOptionalAttribute(const AName: String): String; +var + N: OleVariant; +begin + N := FRealNode.attributes.getNamedItem(AName); + if not IsVarAssigned(N) then + Result := '' + else + Result := VariantToString(N.value); +end; + +function TXMLNode.GetFirstChild: IXMLNode; +begin + Result := MakeNode(FRealNode.firstChild); +end; + +function TXMLNode.GetNodeName: String; +begin + Result := VariantToString(FRealNode.nodeName); +end; + +function TXMLNode.GetNextSibling: IXMLNode; +begin + Result := MakeNode(FRealNode.nextSibling); +end; + +function TXMLNode.GetNodeType: Integer; +begin + Result := FRealNode.nodeType; +end; + +function TXMLNode.GetParentNode: IXMLNode; +begin + Result := MakeNode(FRealNode.parentNode); +end; + +function TXMLNode.GetPreviousSibling: IXMLNode; +begin + Result := MakeNode(FRealNode.previousSibling); +end; + +function TXMLNode.GetRealMSXMLNode: OleVariant; +begin + Result := FRealNode; +end; + +function TXMLNode.GetText: String; +begin + Result := VariantToString(FRealNode.text); +end; + +function TXMLNode.HasAttribute(const AName: String): Boolean; +begin + Result := IsVarAssigned(FRealNode.attributes.getNamedItem(AName)); +end; + +function TXMLNode.TransformNode(const Stylesheet: IXMLNode): String; +begin + Result := VariantToString(FRealNode.transformNode(Stylesheet.GetRealMSXMLNode)); +end; + +end. diff --git a/ISHelp/ISHelpGen/compile.bat b/ISHelp/ISHelpGen/compile.bat new file mode 100644 index 00000000..bf835d26 --- /dev/null +++ b/ISHelp/ISHelpGen/compile.bat @@ -0,0 +1,39 @@ +@echo off + +rem Inno Setup +rem Copyright (C) 1997-2022 Jordan Russell +rem Portions by Martijn Laan +rem For conditions of distribution and use, see LICENSE.TXT. +rem +rem Batch file to compile ISHelpGen + +setlocal + +if exist compilesettings.bat goto compilesettingsfound +:compilesettingserror +echo ishelp\ishelpgen\compilesettings.bat is missing or incomplete. It needs to be created +echo with the following lines, adjusted for your system: +echo. +echo set DELPHIXEROOT=C:\Program Files\Embarcadero\RAD Studio\20.0 [Path to Delphi 10.4 Sydney (or later)] +goto failed2 + +:compilesettingsfound +set DELPHIXEROOT= +call .\compilesettings.bat +if "%DELPHIXEROOT%"=="" goto compilesettingserror + +rem ------------------------------------------------------------------------- + +set DELPHIXEDISABLEDWARNINGS=-W-SYMBOL_DEPRECATED -W-SYMBOL_PLATFORM -W-UNSAFE_CAST -W-EXPLICIT_STRING_CAST -W-EXPLICIT_STRING_CAST_LOSS -W-IMPLICIT_INTEGER_CAST_LOSS -W-IMPLICIT_CONVERSION_LOSS + +echo Compiling ISHelpGen.dpr: +"%DELPHIXEROOT%\bin\dcc32.exe" --no-config -NSsystem;system.win;winapi -Q -B -H -W %DELPHIXEDISABLEDWARNINGS% %1 -U"%DELPHIXEROOT%\lib\win32\release" ISHelpGen.dpr +if errorlevel 1 goto failed + +echo Success! +exit /b 0 + +:failed +echo *** FAILED *** +:failed2 +exit /b 1 diff --git a/ISHelp/Staging/.gitignore b/ISHelp/Staging/.gitignore new file mode 100644 index 00000000..70408238 --- /dev/null +++ b/ISHelp/Staging/.gitignore @@ -0,0 +1,6 @@ +contents.htm +contentsindex.js +hh_generated_contents.hhc +hh_generated_index.hhk +isetup.chm +topic_*.htm diff --git a/ISHelp/Staging/contents-template.htm b/ISHelp/Staging/contents-template.htm new file mode 100644 index 00000000..66e3baeb --- /dev/null +++ b/ISHelp/Staging/contents-template.htm @@ -0,0 +1,37 @@ + + + + + +Inno Setup Help Contents + + + + + + +
    + + + + + + + +
    ContentsIndex 
    +
    + +
    + +
    +%CONTENTSTABLES% +
    + + + +
    + + + diff --git a/ISHelp/Staging/contents.css b/ISHelp/Staging/contents.css new file mode 100644 index 00000000..480ba716 --- /dev/null +++ b/ISHelp/Staging/contents.css @@ -0,0 +1,125 @@ +/* + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + Style sheet used by contents.htm +*/ + +BODY { + font-family: "Segoe UI", Tahoma, sans-serif; + font-size: 75%; /* 9pt (12px/16px) */ + margin: 0; + color: WindowText; + background-color: Window; +} +INPUT { + font: inherit; +} + + +#tabbar { + background-color: ButtonFace; + color: WindowText; + padding-top: 6px; + cursor: default; + -moz-user-select: none; +} +#tabbar TD { + padding: 0; + font-weight: bold; +} +#tabbar TD.selectedtab { + background-color: Window; + padding: 2px 6px 3px 6px; + border-bottom: none; +} +#tabbar TD.unselectedtab { + padding: 3px 7px 2px 7px; + cursor: pointer; +} +#tabbar A { + background-color: transparent; + color: WindowText; + text-decoration: none; + outline: none; +} +#tabbar TD.selectedtab A { + cursor: default; +} +#tabbar TD.unselectedtab:hover A { + color: #0078D4; +} + + +#tabbody-contents A { + /* Using inline-block because otherwise, second line of wrapped text + doesn't line up with first, and on IE6, the focus rect doesn't extend + all the way to the edges of Highlight area */ + display: inline-block; + padding: 1px 2px; +} +#tabbody-contents A:link, +#tabbody-contents A:visited, +#tabbody-contents A:active { + color: WindowText; + background-color: transparent; + text-decoration: none; +} +#tabbody-contents A:hover { + color: #0078D4; + background-color: transparent; +} +#tabbody-contents A.selectedlink:link, +#tabbody-contents A.selectedlink:visited { + color: WindowText; + background-color: ButtonFace; +} +/* It would be cleaner to use :focus, but IE<8 doesn't support it */ +#tabbody-contents A.focusedlink:link, +#tabbody-contents A.focusedlink:visited { + color: HighlightText; + background-color: Highlight; + outline-color: WindowText; /* needed for focus rect to appear on Firefox (3.5) */ +} +#tabbody-contents TABLE { + border-collapse: collapse; +} +#tabbody-contents TD { + padding: 0 0 1px 0; +} +#tabbody-contents IMG { + width: 16px; + height: 16px; + border-style: none; + padding-right: 2px; +} + + +#tabbody-index { + padding: 4px 2px; + white-space: nowrap; + -moz-user-select: none; +} +#tabbody-index A { + display: inline-block; + min-width: 100%; + overflow: visible; +} +#tabbody-index A:link, +#tabbody-index A:visited, +#tabbody-index A:active { + color: WindowText; + background-color: transparent; + text-decoration: none; +} +#tabbody-index A:hover { + color: #0078D4; + background-color: transparent; +} +#tabbody-index A:focus { + color: HighlightText; + background-color: Highlight; + outline-color: WindowText; /* needed for focus rect to appear on Firefox (3.5) */ +} diff --git a/ISHelp/Staging/contents.js b/ISHelp/Staging/contents.js new file mode 100644 index 00000000..07aee26c --- /dev/null +++ b/ISHelp/Staging/contents.js @@ -0,0 +1,286 @@ +/* + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + JavaScript code used by contents.htm +*/ + +function get_absolute_top(obj) +{ + var y = obj.offsetTop; + while ((obj = obj.offsetParent)) { + y += obj.offsetTop; + } + return y; +} + +function get_viewport_element() +{ + // On IE 6 in Standards mode & Firefox 1.5, properties like + // scrollTop and clientHeight are set on document.documentElement. + // On IE 5, they're on document.body; the ones on documentElement + // are zero. + + if (document.documentElement.clientHeight) { + return document.documentElement; + } else { + return document.body; + } +} + +function is_element_displayed(element) +{ + do { + if (element.style.display == "none") return false; + } while (element != document.body && (element = element.parentNode)); + + return true; +} + +function ensure_elements_visible(elementTop, elementBottom) +{ + if (!is_element_displayed(elementTop) || !is_element_displayed(elementBottom)) { + return; + } + + var yTop = get_absolute_top(elementTop); + var yBottom = get_absolute_top(elementBottom) + elementBottom.offsetHeight; + + // Subtract 1 from yTop so that if elementTop contains a link with text that starts at + // exactly yTop, the link's focus rectangle won't get chopped off on Firefox (3.x), + // where focus rectangles are inflated by 1px (unlike IE). + // (Adding 1 to yBottom isn't necessary since our TDs have 1px of bottom padding.) + if (yTop > 0) yTop--; + + // Make yTop and yBottom relative to the top of the visible client area + var viewportScrollTop = get_viewport_element().scrollTop; + yTop -= viewportScrollTop; + yBottom -= viewportScrollTop; + + var clientHeight = get_viewport_element().clientHeight; + + if (yTop < 0) { + // Scroll up to make the top of elementTop visible + window.scrollBy(0, yTop); + } else if (yBottom > clientHeight) { + // How far do we have to scroll down for elementBottom to be entirely visible? + var delta = yBottom - clientHeight; + // Don't allow any part of elementTop to be scrolled off the top + if (delta > yTop) delta = yTop; + if (delta > 0) window.scrollBy(0, delta); + } +} + +function toggle_node(id) +{ + var objContent = document.getElementById("nodecontent_" + id); + var expanding = (objContent.style.display == "none"); + objContent.style.display = expanding ? "" : "none"; + + document.getElementById("nodeimg_" + id).src = + expanding ? "images/contentsheadopen.png" : "images/contentsheadclosed.png"; + + if (expanding) { + // Scroll expanded items into view. This is similar to calling scrollIntoView() but + // doesn't do any scrolling if the items are already fully visible. + + var objCaption = document.getElementById("nodecaption_" + id); + ensure_elements_visible(objCaption, objContent); + } +} + +function init_contents(toggleNode) +{ + var i; + if (toggleNode == 0) { + for (i = 1; document.getElementById("nodecontent_" + i) != null; i++) { + toggle_node(i); + } + } else { + toggle_node(toggleNode); + } + + var elements = document.getElementById("tabbody-contents").getElementsByTagName("a"); + for (i = 0; i < elements.length; i++) { + elements[i].onfocus = node_focused; + elements[i].onblur = node_blurred; + } +} + +var curSelectedNode = null; +var curFocusedNode = null; + +function update_selected_node_class() +{ + if (curSelectedNode) { + var newClass = (curFocusedNode == curSelectedNode) ? "focusedlink" : "selectedlink"; + if (curSelectedNode.className != newClass) { + curSelectedNode.className = newClass; + } + } +} + +function set_selected_node(newSel) +{ + if (curSelectedNode == newSel) return; + + if (curSelectedNode) { + curSelectedNode.className = ""; + } + curSelectedNode = newSel; + if (curSelectedNode) { + update_selected_node_class(); + + // Expand parent nodes (may scroll) + var p = curSelectedNode; + while ((p = p.parentNode) && p.id != "tabbody-contents") { + if (p.id && p.id.indexOf("nodecontent_") == 0 && p.style.display == "none") { + toggle_node(p.id.substring(12)); + } + } + + // Then scroll the node's parent TR into view + p = curSelectedNode.parentNode.parentNode; + ensure_elements_visible(p, p); + } +} + +function node_focused(evt) +{ + curFocusedNode = evt ? evt.target : event.srcElement; + if (curFocusedNode == curSelectedNode) { + update_selected_node_class(); + } else { + set_selected_node(curFocusedNode); + } +} + +function node_blurred(evt) +{ + curFocusedNode = null; + update_selected_node_class(); +} + +var topic_name_regexp = /(?:^|[/\\])topic_([a-z0-9_\-]+)\.htm$/; + +function topic_name_from_path(path) +{ + var matches = path.match(topic_name_regexp); + return matches ? matches[1] : ""; +} + +function sync_contents() +{ + var bodyFrame = window.parent.frames["bodyframe"]; + if (!bodyFrame) return; + + var bodyTopic = topic_name_from_path(bodyFrame.window.location.pathname); + if (bodyTopic == "") return; + + // If the currently selected node already points to bodyTopic, just return. + // This check is needed to keep the selection from jumping to "[Run] section" + // when "[UninstallRun] section" is clicked (both have the same target topic). + if (curSelectedNode && topic_name_from_path(curSelectedNode.getAttribute("href")) == bodyTopic) { + return; + } + + var elements = document.getElementById("tabbody-contents").getElementsByTagName("a"); + var i; + for (i = 0; i < elements.length; i++) { + if (topic_name_from_path(elements[i].getAttribute("href")) == bodyTopic) { + if (curSelectedNode != elements[i]) { + // If we're changing the selection while a node is currently + // focused -- which can happen if Back is pressed after + // clicking/selecting a node -- we need to move the focus. + // Otherwise, the focus rectangle would stay where it is, + // while the highlight moved to a different node. + + if (curFocusedNode) elements[i].focus(); + set_selected_node(elements[i]); + } + break; + } + } +} + +function select_tab(newTab) +{ + var tabs = ["contents", "index"]; + + var i; + for (i = 0; i < tabs.length; i++) { + if (tabs[i] != newTab) { + document.getElementById("tab-" + tabs[i]).className = "unselectedtab"; + document.getElementById("tabbody-" + tabs[i]).style.display = "none"; + } + } + + document.getElementById("tab-" + newTab).className = "selectedtab"; + document.getElementById("tabbody-" + newTab).style.display = ""; + + if (newTab == "index") init_index_tab(); +} + +var indexTabInited = false; + +function init_index_tab() +{ + if (indexTabInited) return; + indexTabInited = true; + + var script = document.createElement("script"); + script.src = "contentsindex.js"; + script.type = "text/javascript"; + document.getElementsByTagName("head")[0].appendChild(script); + + // contentsindex.js calls init_index_tab_elements() +} + +function init_index_tab_elements() +{ + var html = "ERROR!"; + + if (contentsIndexData) { + var len = contentsIndexData.length; + var htmlArray = new Array(len); + var i, matches; + var re = /^([^#:]+)(#[^:]+)?:(.+)$/ + + for (i = 0; i < len; i++) { + matches = contentsIndexData[i].match(re); + if (!matches) break; + htmlArray[i] = '' + matches[3] + "
    "; + } + + // Note: On IE6, joining an array is ~5x faster than using "html +=" to build a long string + if (i == len) { // were all processed? + html = htmlArray.join(""); + } + } + + var indexBody = document.getElementById("tabbody-index"); + indexBody.onclick = index_tab_element_clicked; + indexBody.innerHTML = html; +} + +function index_tab_element_clicked(evt) +{ + // If an index link is clicked and only the hash changes on bodyframe + // (i.e. still same page), bodyframe doesn't receive any notification. + // So we must manually tell it to update the highlight. + + var element = evt ? evt.target : event.srcElement; + if (element.tagName.toLowerCase() == "a") { + var href = element.getAttribute("href"); + if (href != null && href != "" && element.getAttribute("target") == "bodyframe") { + var bodyFrame = window.parent.frames["bodyframe"]; + if (bodyFrame) { + bodyFrame.set_href_and_highlight_anchor(href); + } + } + } +} diff --git a/ISHelp/Staging/hh_isppredirect.xhtm b/ISHelp/Staging/hh_isppredirect.xhtm new file mode 100644 index 00000000..23c91e76 --- /dev/null +++ b/ISHelp/Staging/hh_isppredirect.xhtm @@ -0,0 +1,11 @@ + + + + + + +ISPP Redirect Page + + + + diff --git a/ISHelp/Staging/hh_project.hhp b/ISHelp/Staging/hh_project.hhp new file mode 100644 index 00000000..8a880f13 --- /dev/null +++ b/ISHelp/Staging/hh_project.hhp @@ -0,0 +1,25 @@ +[OPTIONS] +Compatibility=1.1 or later +Compiled file=isetup.chm +Contents file=hh_generated_contents.hhc +Default Window=$global_ismain +Default topic=topic_whatisinnosetup.htm +Display compile progress=Yes +Full-text search=Yes +Full text search stop list file=stoplist.stp +Index file=hh_generated_index.hhk +Language=0x409 English (United States) +Title=Inno Setup Help + +[WINDOWS] +$global_ismain=,"hh_generated_contents.hhc","hh_generated_index.hhk",,,,,,,0x22520,,0x300e,,,,,,,,0 + + +[FILES] +hh_isppredirect.xhtm + +[MERGE FILES] +ispp.chm + +[INFOTYPES] + diff --git a/ISHelp/Staging/images/contentsheadclosed.png b/ISHelp/Staging/images/contentsheadclosed.png new file mode 100644 index 00000000..fe717600 Binary files /dev/null and b/ISHelp/Staging/images/contentsheadclosed.png differ diff --git a/ISHelp/Staging/images/contentsheadopen.png b/ISHelp/Staging/images/contentsheadopen.png new file mode 100644 index 00000000..77a421c6 Binary files /dev/null and b/ISHelp/Staging/images/contentsheadopen.png differ diff --git a/ISHelp/Staging/images/contentstopic.png b/ISHelp/Staging/images/contentstopic.png new file mode 100644 index 00000000..b6633419 Binary files /dev/null and b/ISHelp/Staging/images/contentstopic.png differ diff --git a/ISHelp/Staging/images/extlink.png b/ISHelp/Staging/images/extlink.png new file mode 100644 index 00000000..ffe46c13 Binary files /dev/null and b/ISHelp/Staging/images/extlink.png differ diff --git a/ISHelp/Staging/index.htm b/ISHelp/Staging/index.htm new file mode 100644 index 00000000..610c4b6b --- /dev/null +++ b/ISHelp/Staging/index.htm @@ -0,0 +1,48 @@ + + + + + +Inno Setup Help + + + + + + + <body> + <p>Your browser does not support frames.</p> + <p><a href="contents.htm">View the table of contents</a></p> + </body> + + + diff --git a/ISHelp/Staging/index.php b/ISHelp/Staging/index.php new file mode 100644 index 00000000..f09dae09 --- /dev/null +++ b/ISHelp/Staging/index.php @@ -0,0 +1,17 @@ + diff --git a/ISHelp/Staging/stoplist.stp b/ISHelp/Staging/stoplist.stp new file mode 100644 index 00000000..5c6c6fe4 --- /dev/null +++ b/ISHelp/Staging/stoplist.stp @@ -0,0 +1,86 @@ +a +about +after +against +all +also +among +an +and +are +as +at +be +became +because +been +between +but +by +can +come +do +during +each +early +for +form +found +from +had +has +have +he +her +his +however +in +into +is +it +its +late +later +me +made +many +may +more +most +near +no +non +not +of +on +only +or +other +over +several +she +some +such +than +that +the +their +then +there +these +they +this +through +to +under +until +use +was +we +were +when +where +which +who +with +you diff --git a/ISHelp/Staging/styles.css b/ISHelp/Staging/styles.css new file mode 100644 index 00000000..9df72fd2 --- /dev/null +++ b/ISHelp/Staging/styles.css @@ -0,0 +1,145 @@ +/* + Inno Setup + Copyright (C) 1997-2010 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + $jrsoftware: ishelp/Staging/styles.css,v 1.7 2010/09/17 03:48:14 jr Exp $ +*/ + +BODY { + font: small arial, sans-serif; + margin: 0; +} +PRE, TT { + font: small "courier new", monospace; +} +P, H1, H2, H3, H4, H5, BLOCKQUOTE, PRE, FORM, OL, UL, LI, DL, DD, TABLE, .examplebox, DIV.margined { + /* only the end of paragraphs etc. has a margin */ + margin-top: 0; + margin-bottom: 0.6em; +} +UL, DD { + /* specify both of these for firefox compat. */ + margin-left: 0; + padding-left: 2em; +} +TABLE { + /* equivalent of cellspacing="0" */ + border-collapse: collapse; +} +TD { + /* equivalent of cellpadding="0" */ + padding: 0; + /* note: "baseline" is broken on IE6; it only aligns correctly when there's + a single line of text, and that text is directly inside the tag + (not inside a
    ). otherwise it behaves more like "top". + (firefox 1.5 and opera 9 don't have this problem) */ + vertical-align: baseline; +} +A:link, A:visited, A:active { + color: #008000; +} +A.highlighted { + background-color: #ffff00; + color: black; +} + +.small { + /* what we want is an 8pt font. 8pt/10pt = 80%, but on firefox that + actually creates a font smaller than 8pt, so use 82% */ + font-size: 82%; +} +.heading { + margin-top: 0.6em; + font-size: 120%; + font-weight: bold; +} +.notopmargin { + margin-top: 0; +} +.indent { + margin-left: 2em; +} +PRE.nomargin { + margin: 0; +} +LI.compact { + margin-bottom: 2px; +} + +.topicheading { + background: ButtonFace; + color: WindowText; + padding: 4px 8px; + margin: 0; + font-size: 120%; + font-weight: bold; +} +.topicbody { + padding: 8px; +} + +.examplebox { + background: #f8f8f8; + color: black; + padding: 4px; + border: 1px solid #e0e0e0; + /* on IE6, if the content of the box is wider than the page, + the width of the box is increased. on firefox 1.5, by default + the box width stays the same, and the content is drawn outside + the box. that looks ugly. "overflow: auto" tells it to put a + scroll bar on the box when the content is too wide. (IE6 + apparently ignores "overflow: auto", at least here.) */ + overflow: auto; +} +.exampleheader { + font-size: 82%; + font-weight: bold; + margin-bottom: 0.6em; +} + + +DT.paramlist { + margin-bottom: 0.6em; +} +DD.paramlist { + /* give a little extra spacing between items */ + margin-bottom: 1.2em; +} + +DT.flaglist { + font-weight: bold; +} + +TD.cellleft { + white-space: nowrap; +} +TD.cellright { + padding-left: 2em; +} + +TABLE.setuphdr { + margin: 0; +} +TD.setuphdrl { + font-weight: bold; + white-space: nowrap; +} +TD.setuphdrr { + padding-left: 1em; +} + + +#redirectbox { + position: absolute; + background: InfoBackground; + color: InfoText; + padding: 16px 24px; + border: 1px solid ThreeDDarkShadow; + font-size: 120%; + font-weight: bold; + box-shadow: #808080 0 0 12px; + -moz-box-shadow: #808080 0 0 12px; /* for Firefox 3.6 */ + -webkit-box-shadow: #808080 0 0 12px; /* for Chrome 6.0 */ +} diff --git a/ISHelp/Staging/topic.js b/ISHelp/Staging/topic.js new file mode 100644 index 00000000..ebcad95c --- /dev/null +++ b/ISHelp/Staging/topic.js @@ -0,0 +1,172 @@ +/* + Inno Setup + Copyright (C) 1997-2020 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + JavaScript code used by topic_*.htm +*/ + +window.onload = topic_loaded; + +var redirectBox = null; +var topicRedirectURL; +var curHighlightedAnchor = null; +var lastHash = ""; + +function is_href_local_anchor(path) +{ + // Returns true if an A element's HREF points to an anchor on the current page. + + if (path.charAt(0) == "#") { + return true; + } + + // On IE (6), # HREFs are prepended with a full path when read via DOM. + // Check if 'path' includes a hash, and if the part before the hash + // matches the current window.location. + + var re = /^([^#]+)(#.*)?$/; + var pathMatches = path.match(re); + if (pathMatches && pathMatches[2] !== undefined && pathMatches[2] != "") { + var curLocationMatches = window.location.href.match(re); + if (curLocationMatches && curLocationMatches[1] == pathMatches[1]) { + return true; + } + } + + return false; +} + +function get_viewport_element() +{ + // On IE 6 in Standards mode & Firefox 1.5, properties like + // scrollTop and clientHeight are set on document.documentElement. + // On IE 5, they're on document.body; the ones on documentElement + // are zero. + + if (document.documentElement.clientHeight) { + return document.documentElement; + } else { + return document.body; + } +} + +function create_redirect_box() +{ + redirectBox = document.createElement("div"); + redirectBox.id = "redirectbox"; + redirectBox.innerHTML = "Loading contents..."; + redirectBox.style.visibility = "hidden"; + document.body.appendChild(redirectBox); + + var viewport = get_viewport_element(); + redirectBox.style.left = Math.max(0, Math.floor(viewport.scrollLeft + (viewport.clientWidth - redirectBox.offsetWidth) / 2)) + "px"; + redirectBox.style.top = Math.max(0, Math.floor(viewport.scrollTop + (viewport.clientHeight - redirectBox.offsetHeight) / 2)) + "px"; + redirectBox.style.visibility = ""; +} + +function topic_loaded() +{ + document.body.onclick = topic_element_clicked; + update_anchor_highlight(); + + var matches; + + if (window == window.top && + (window.location.protocol == "http:" || window.location.protocol == "https:") && + (window.location.hostname == "jrsoftware.org" || window.location.hostname == "www.jrsoftware.org") && + (matches = window.location.pathname.match(/^(\/.+\/)topic_([a-z0-9_\-]+)\.htm$/)) && + window.location.hash != "#noredir") { + + topicRedirectURL = matches[1] + "index.php?topic=" + matches[2]; + + if ((matches = window.location.hash.match(/^#([a-zA-Z0-9_\-.]+)$/))) { + topicRedirectURL += "&anchor=" + matches[1]; + } + + create_redirect_box(); + window.setTimeout(topic_redirect, 1500); + } + + // HTML Help: If an Index entry is clicked and only the hash changes, + // we don't receive any notification by default. + if (window.location.protocol == "mk:") { + if ("onhashchange" in window) { + // IE 8+ supports the onhashchange event. + window.onhashchange = update_anchor_highlight; + } else { + // On older IE versions, we have to poll. + window.setInterval(update_anchor_highlight, 300); + } + } +} + +function topic_redirect() +{ + document.body.removeChild(redirectBox); + redirectBox = null; + + window.location.href = topicRedirectURL; +} + +function set_anchor_highlight(newAnchor) +{ + if (curHighlightedAnchor != newAnchor) { + if (curHighlightedAnchor) curHighlightedAnchor.className = ""; + curHighlightedAnchor = newAnchor; + if (curHighlightedAnchor) curHighlightedAnchor.className = "highlighted"; + } +} + +function update_anchor_highlight() +{ + var anchorName = ""; + var hash = window.location.hash; + if (hash === lastHash) { + // This function can be called from setInterval, + // so exit quickly if the hash hasn't changed. + return; + } + lastHash = hash; + if (hash.charAt(0) == "#") { + anchorName = hash.substr(1); + } + + var newAnchor = null; + if (anchorName != "") { + var anchors = document.getElementsByTagName("a"); + var i; + for (i = 0; i < anchors.length; i++) { + if (anchors[i].getAttribute("name") === anchorName) { + newAnchor = anchors[i]; + break; + } + } + } + set_anchor_highlight(newAnchor); +} + +function set_href_and_highlight_anchor(href) +{ + // At the moment an onclick event is fired, window.location.hash hasn't + // been updated yet. This function synchronously updates window.location, + // then moves the highlight to the new hash's anchor. + + // Clear current highlight first, so user doesn't see it scrolling. + lastHash = ""; + set_anchor_highlight(null); + window.location.href = href; + update_anchor_highlight(); +} + +function topic_element_clicked(evt) +{ + var element = evt ? evt.target : event.srcElement; + if (element.tagName.toLowerCase() == "a") { + var href = element.getAttribute("href"); + if (href != null && is_href_local_anchor(href)) { + set_href_and_highlight_anchor(href); + } + } +} diff --git a/ISHelp/compile.bat b/ISHelp/compile.bat new file mode 100644 index 00000000..7578441f --- /dev/null +++ b/ISHelp/compile.bat @@ -0,0 +1,55 @@ +@echo off + +rem Inno Setup +rem Copyright (C) 1997-2010 Jordan Russell +rem Portions by Martijn Laan +rem For conditions of distribution and use, see LICENSE.TXT. +rem +rem Batch file to compile the help file +rem +rem $jrsoftware: ishelp/compile.bat,v 1.5 2010/06/07 22:15:42 jr Exp $ + +setlocal + +if exist compilesettings.bat goto compilesettingsfound +:compilesettingserror +echo ishelp\compilesettings.bat is missing or incomplete. It needs to be created +echo with the following lines, adjusted for your system: +echo. +echo set HHCEXE=%%ProgramFiles%%\HTML Help Workshop\hhc.exe [Path to help compiler] +goto failed2 + +:compilesettingsfound +set HHCEXE= +call .\compilesettings.bat +if "%HHCEXE%"=="" goto compilesettingserror + +rem ------------------------------------------------------------------------- + +echo Generating help files using ISHelpGen: +echo. +ISHelpGen\ISHelpGen.exe . +if errorlevel 1 goto failed + +echo. +echo Running HTML Help Compiler (hhc.exe): +echo. +if exist Staging\isetup.chm del Staging\isetup.chm +if exist Staging\isetup.chm goto failed +"%HHCEXE%" Staging\hh_project.hhp +if %errorlevel% neq 1 goto failed +if not exist Staging\isetup.chm goto failed + +rem HHC leaves behind a temporary file each time it runs... +if exist "%TEMP%\~hh*.tmp" del /q "%TEMP%\~hh*.tmp" + +copy Staging\isetup.chm ..\Files\ISetup.chm +if not exist ..\Files\ISetup.chm goto failed + +echo Success! +exit /b 0 + +:failed +echo *** FAILED *** +:failed2 +exit /b 1 diff --git a/ISHelp/isetup.dtd b/ISHelp/isetup.dtd new file mode 100644 index 00000000..2eb104c5 --- /dev/null +++ b/ISHelp/isetup.dtd @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ISHelp/isetup.xml b/ISHelp/isetup.xml new file mode 100644 index 00000000..aed7a311 --- /dev/null +++ b/ISHelp/isetup.xml @@ -0,0 +1,5806 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Inno Setup version 6.3.0
    +Copyright © 1997-2024 Jordan Russell. All rights reserved.
    +Portions Copyright © 2000-2024 Martijn Laan. All rights reserved.
    +Inno Setup home page +

    + +


    +Inno Setup is a free installer for Windows programs by Jordan Russell and Martijn Laan. First introduced in 1997, Inno Setup today rivals and even surpasses many commercial installers in feature set and stability.

    + +


    +Key features:

    + +
      + +
    • Support for every Windows release since 2009, including: Windows 11, Windows 10, Windows 11 on Arm, Windows 10 on Arm, Windows Server 2019, Windows Server 2016, Windows 8.1, Windows 8, Windows Server 2012, Windows 7, and Windows Server 2008 R2. (No service packs are required.)
    • + +
    • Extensive support for installation of 64-bit applications on the 64-bit editions of Windows. The x64 and Arm64 architectures are both supported.
    • + +
    • Extensive support for both administrative and non administrative installations installations.
    • + +
    • Supports creation of a single EXE to install your program for easy online distribution. Disk spanning is also supported.
    • + +
    • Resizable standard Windows wizard interface.
    • + +
    • Customizable setup types, e.g. Full, Minimal, Custom.
    • + +
    • Complete uninstall capabilities.
    • + +
    • Installation of files:
      +Includes integrated support for "deflate", bzip2, and 7-Zip LZMA/LZMA2 file compression. The installer has the ability to compare file version info, replace in-use files, use shared file counting, register DLL/OCX's and type libraries, and install fonts.
    • + +
    • Creation of shortcuts anywhere, including in the Start Menu and on the desktop.
    • + +
    • Creation of registry and .INI entries.
    • + +
    • Running other programs before, during or after install.
    • + +
    • Support for multilingual installs, including right-to-left language support.
    • + +
    • Support for password-protected and encrypted installs.
    • + +
    • Support for digitally signed installs and uninstalls, including dual signing (SHA1 & SHA256).
    • + +
    • Silent install and silent uninstall.
    • + +
    • Unicode installs.
    • + +
    • Integrated preprocessor option for advanced compile-time customization.
    • + +
    • Integrated Pascal scripting engine option for advanced run-time install and uninstall customization.
    • + +
    • Full source code is available from GitHub.
    • + +
    • Tiny footprint: only about 1.5 mB overhead with all features included.
    • + +
    • All features are fully documented.
    • + +
    • Used by Microsoft Visual Studio Code and Embarcardero Delphi.
    • + +
    + +


    +Is it really free of charge, even for commercial use?

    + +

    Yes, it may be used completely free of charge, even when deploying commercial applications.

    + +

    (Note: "Completely free of charge" must not be confused with "completely free". Inno Setup is copyrighted software, not public domain software. There are some restrictions on distribution and use; see the LICENSE.TXT file for details.)

    + + +
    + + + + + + + +

    Installations are created by means of scripts, which are ASCII or Unicode (UTF-8 encoded) text files with a format somewhat similar to .INI files. (No, it's not as complicated as you might be thinking!).

    + +

    Scripts have an ".iss" (meaning Inno Setup Script) extension. The script controls every aspect of the installation. It specifies which files are to be installed and where, what shortcuts are to be created and what they are to be named, and so on.

    + +

    Script files are usually edited from inside the "Inno Setup Compiler" Compiler IDE program. After you have finishing writing the script, the next and final step is select "Compile" in the Compiler IDE. What this does is create a complete, ready-to-run Setup program based on your script. By default, this is created in a directory named "Output" under the directory containing the script.

    + +

    To give you an idea of how this all works, start the Compiler IDE, click File | Open, and select one of the script files in the Examples subdirectory located under the Inno Setup directory. (It may be helpful to use the sample scripts as a template for your own scripts.)

    + +


    See also:
    +Script Format Overview +

    + + +
    + + + + + + + + + + + + +

    Inno Setup Scripts are arranged into sections. Each section controls a different aspect of the installation. A section is started by specifying the name of the section enclosed in square brackets []. Inside each section is any number of entries.

    + +

    There are two different main types of sections: those such as [Setup] whose entries contain directive names and values (in the form Directive=Value), and those such as [Files] whose entries are divided into parameters.

    + +

    Here is an example:

    + + +[Setup] +AppName=My Program + +[Files] +Source: "MYPROG.EXE"; DestDir: "{app}" + + +

    Note that it is legal to specify multiple sections of the same name.

    + +

    You can put "comments" in the script (which are ignored by the compiler) by placing a semicolon at the beginning of a line. For example:

    + + +; This is a comment. I could put reminders to myself here... + + +

    A C-like #include directive is supported, which pulls in lines from a separate file into the script at the position of the #include directive. The syntax is:

    + + +#include "filename.txt" + + +

    If the filename is not fully qualified, the compiler will look for it in the same directory as the file containing the #include directive. The filename may be prefixed by "compiler:", in which case it looks for the file in the compiler directory.

    + +

    A #preproc directive is supported, which specifies whether to use the built-in preprocessor which only supports the above #include directive or to use Inno Setup Preprocessor (ISPP) which supports many more directives. The syntax is:

    + +#preproc builtin +#preproc ispp + + +

    By default, scripts use ISPP if available, and .isl files use the built-in preprocessor.

    + +

    If an Unicode file is used, it must be UTF-8 encoded.

    + +


    See also:
    +Parameters in Sections
    +Constants
    +Common Parameters
    +Components and Tasks Parameters
    +[Setup] section
    +[Types] section
    +[Components] section
    +[Tasks] section
    +[Dirs] section
    +[Files] section
    +[Icons] section
    +[INI] section
    +[InstallDelete] section
    +[Languages] section
    +[Messages] section
    +[CustomMessages] section
    +[LangOptions] section
    +[Registry] section
    +[Run] section
    +[UninstallDelete] section
    +[UninstallRun] section
    +Pascal Scripting: Introduction +Compiler IDE Keyboard Commands +

    + + +
    + + + + + + + +

    All of the sections in a script, with the exception of [Setup], [Messages], [CustomMessages], [LangOptions], and [Code], contain lines separated into parameters. The following is an example of a [Files] section:

    + + +[Files] +Source: "MYPROG.EXE"; DestDir: "{app}" +Source: "MYPROG.CHM"; DestDir: "{app}" +Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme + + +

    Each parameter consists of a name, followed by a colon, and then a value. Unless otherwise noted, parameters are optional in that they assume a default value if they are not specified. Multiple parameters on a line are separated by semicolons, and can be listed in any order.

    + +

    The value of a parameter is traditionally surrounded in double quotes (") when it contains a user-defined string, such as a filename. Using quotes is not required, though, but by doing so it makes it possible to embed leading and trailing spaces in the value, as well as semicolons and double-quote characters.

    + +

    To embed a double-quote character inside a quoted value, use two consecutive double-quote characters. For example:

    + + +"This "" contains "" embedded "" quotes" + + +

    The compiler would see that as:

    + + +This " contains " embedded " quotes + + +

    If you want the value of a parameter to be a single double-quote character, use four double-quote characters: """". The outer two are needed to surround the string in quotes; the inner two are used to embed a single double-quote character.

    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    The majority of the script entries can have constants embedded in them. These are predefined strings enclosed in brace characters { }. Setup or Uninstall translates the constants to their literal values, depending on the user's choices and system configuration. For example, {win}, as described below, would translate to "C:\WINDOWS" on most systems.

    + +

    A "{" character is treated as the start of the constant. If you want to use that actual character in a place where constants are supported, you must use two consecutive "{" characters. (You do not need to double "}" characters.)

    + +

    When a backslash immediately follows a constant, Setup or Uninstall will automatically remove the backslash if the value of the constant ends in a backslash already. Thus, if the value of a particular constant is "C:\", {constantname}\file will translate to "C:\file", not "C:\\file". If you want to prevent this from happening, enclose the backslash in { } characters, e.g. {app}{\}.

    + +

    The following is the list of supported constants.

    + +Directory Constants + +
    + +
    {app}
    +
    +

    The application directory, which the user selects on the Select Destination Location page of the wizard.
    +For example: If you used {app}\MYPROG.EXE on an entry and the user selected "C:\MYPROG" as the application directory, Setup will translate it to "C:\MYPROG\MYPROG.EXE".

    +
    + +
    {win}
    +
    +

    The system's Windows directory.
    +For example: If you used {win}\MYPROG.INI on an entry and the system's Windows directory is "C:\WINDOWS", Setup or Uninstall will translate it to "C:\WINDOWS\MYPROG.INI".

    +
    + +
    {sys}
    +
    +

    The system's System32 directory.
    +For example: If you used {sys}\CTL3D32.DLL on an entry and the system's Windows System directory is "C:\WINDOWS\SYSTEM", Setup or Uninstall will translate it to "C:\WINDOWS\SYSTEM\CTL3D32.DLL".

    +

    On 64-bit Windows, by default, the System32 path returned by this constant maps to the directory containing 32-bit system files, just like on 32-bit Windows. (This can be overridden by enabling 64-bit install mode.)

    +
    + +
    {sysnative}
    +
    +

    On 64-bit Windows, the directory containing 64-bit system files. On 32-bit Windows, the directory containing 32-bit system files.

    +
    + +
    {syswow64}
    +
    +

    On 64-bit Windows, the system's SysWOW64 directory, typically "C:\WINDOWS\SysWOW64". This is the actual directory in which 32-bit system files reside. On 32-bit Windows, 32-bit system files do not reside in a separate SysWOW64 directory, so this constant will resolve to the same directory as {sys} if used there.

    +

    Do not use this constant unless you have a specific need to obtain the name of the actual directory in which 32-bit system files reside. Gratuitously using {syswow64} in places where {sys} will suffice may cause problems. (See the documentation for the [Files] section's sharedfile flag for one example.)

    +
    + +
    {src}
    +
    +

    The directory in which the Setup files are located.
    +For example: If you used {src}\MYPROG.EXE on an entry and the user is installing from "S:\", Setup will translate it to "S:\MYPROG.EXE".

    +
    + +
    {sd}
    +
    +

    System Drive. The drive Windows is installed on, typically "C:". This directory constant is equivalent to the SystemDrive environment variable.

    +
    + +
    {commonpf}
    +
    +

    Program Files. The path of the system's Program Files directory. {commonpf} is equivalent to {commonpf32} unless the install is running in 64-bit install mode, in which case it is equivalent to {commonpf64}.

    +
    + +
    {commonpf32}
    +
    +

    32-bit Program Files. The path of the system's 32-bit Program Files directory, typically "C:\Program Files" on 32-bit Windows and "C:\Program Files (x86)" on 64-bit Windows.

    +
    + +
    {commonpf64}
    +
    +

    64-bit Windows only: 64-bit Program Files. The path of the system's 64-bit Program Files directory, typically "C:\Program Files". An exception will be raised if an attempt is made to expand this constant on 32-bit Windows.

    +
    + +
    {commoncf}
    +
    +

    Common Files. The path of the system's Common Files directory. {commoncf} is equivalent to {commoncf32} unless the install is running in 64-bit install mode, in which case it is equivalent to {commoncf64}.

    +
    + +
    {commoncf32}
    +
    +

    32-bit Common Files. The path of the system's 32-bit Common Files directory, typically "C:\Program Files\Common Files" on 32-bit Windows and "C:\Program Files (x86)\Common Files" on 64-bit Windows.

    +
    + +
    {commoncf64}
    +
    +

    64-bit Windows only: 64-bit Common Files. The path of the system's 64-bit Common Files directory, typically "C:\Program Files\Common Files". An exception will be raised if an attempt is made to expand this constant on 32-bit Windows.

    +
    + +
    {tmp}
    +
    +

    Temporary directory used by Setup or Uninstall. This is not the value of the user's TEMP environment variable. It is a subdirectory of the user's temporary directory which is created by Setup or Uninstall at startup (with a name like "C:\WINDOWS\TEMP\IS-xxxxx.tmp"). All files and subdirectories in this directory are deleted when Setup or Uninstall exits. During Setup, this is primarily useful for extracting files that are to be executed in the [Run] section but aren't needed after the installation.

    +
    + +
    {commonfonts}
    +
    +

    Fonts directory. Normally named "Fonts" under the Windows directory.

    +
    + +
    {dao}
    +
    +

    DAO directory. This is equivalent to {commoncf}\Microsoft Shared\DAO.

    +
    + +
    {dotnet11}
    +
    +

    32-bit .NET Framework version 1.1 install root directory.

    +

    An exception will be raised if an attempt is made to expand this constant on a system with no .NET Framework version 1.1 present.

    +
    + +
    {dotnet20}
    +
    +

    .NET Framework version 2.0-3.5 install root directory. {dotnet20} is equivalent to {dotnet2032} unless the install is running in 64-bit install mode, in which case it is equivalent to {dotnet2064}.

    +

    An exception will be raised if an attempt is made to expand this constant on a system with no .NET Framework version 2.0-3.5 present.

    +
    + +
    {dotnet2032}
    +
    +

    32-bit .NET Framework version 2.0-3.5 install root directory.

    +

    An exception will be raised if an attempt is made to expand this constant on a system with no .NET Framework version 2.0-3.5 present.

    +
    + +
    {dotnet2064}
    +
    +

    64-bit Windows only: 64-bit .NET Framework version 2.0-3.5 install root directory.

    +

    An exception will be raised if an attempt is made to expand this constant on a system with no .NET Framework version 2.0-3.5 present.

    +
    + +
    {dotnet40}
    +
    +

    .NET Framework version 4.0 and later install root directory. {dotnet40} is equivalent to {dotnet4032} unless the install is running in 64-bit install mode, in which case it is equivalent to {dotnet4064}.

    +

    An exception will be raised if an attempt is made to expand this constant on a system with no .NET Framework version 4.0 or later present.

    +

    Also see IsDotNetInstalled.

    +
    + +
    {dotnet4032}
    +
    +

    32-bit .NET Framework version 4.0 and later install root directory.

    +

    An exception will be raised if an attempt is made to expand this constant on a system with no .NET Framework version 4.0 or later present.

    +
    + +
    {dotnet4064}
    +
    +

    64-bit Windows only: 64-bit .NET Framework version 4.0 and later install root directory.

    +

    An exception will be raised if an attempt is made to expand this constant on a system with no .NET Framework version 4.0 or later present.

    +
    + +
    + +Shell Folder Constants + +

    Inno Setup supports another set of directory constants, referred to as shell folder constants. They can be used in the same way as the other directory constants.

    + +

    The "common" constants refer to the All Users profile.

    + +

    The "user" constants refer to the profile of the user running Setup. This user is often not the same as the currently logged-in user, so use the "user" constants with caution.

    + + + +
    + +
    {group}
    +
    +

    The path to the Start Menu folder, as selected by the user on Setup's Select Start Menu Folder wizard page. This folder is created in the All Users profile unless the installation is running in non administrative install mode, in which case it is created in the current user's profile.

    +
    + +
    {localappdata}
    +
    +

    The path to the current user's local (non-roaming) Application Data folder.

    +
    + +
    {userappdata} & {commonappdata}
    +
    +

    The path to the Application Data folder.

    +
    + +
    {usercf}
    +
    +

    The path to the current user's Common Files folder. Only Windows 7 and later supports {usercf}; if used on previous Windows versions, it will translate to the same directory as {localappdata}\Programs\Common.

    +
    + +
    {userdesktop} & {commondesktop}
    +
    +

    The path to the desktop folder.

    +
    + +
    {userdocs} & {commondocs}
    +
    +

    The path to the My Documents folder.

    +
    + +
    {userfavorites}
    +
    +

    The path to the current user's Favorites folder. (There is no common Favorites folder.)

    +
    + +
    {userfonts}
    +
    +

    The path to the current user's Fonts folder. Only Windows 10 Version 1803 and later supports {userfonts}. Same directory as {localappdata}\Microsoft\Windows\Fonts.

    +
    + +
    {userpf}
    +
    +

    The path to the current user's Program Files folder. Only Windows 7 and later supports {userpf}; if used on previous Windows versions, it will translate to the same directory as {localappdata}\Programs.

    +
    + +
    {userprograms} & {commonprograms}
    +
    +

    The path to the Programs folder on the Start Menu.

    +
    + +
    {usersavedgames}
    +
    +

    The path to the current user's Saved Games folder. (There is no common Saved Games folder.)

    +
    + +
    {usersendto}
    +
    +

    The path to the current user's Send To folder. (There is no common Send To folder.)

    +
    + +
    {userstartmenu} & {commonstartmenu}
    +
    +

    The path to the top level of the Start Menu.

    +
    + +
    {userstartup} & {commonstartup}
    +
    +

    The path to the Startup folder on the Start Menu.

    +
    + +
    {usertemplates} & {commontemplates}
    +
    +

    The path to the Templates folder.

    +
    + +
    + +Auto Constants + +

    Besides the "common" and "user" constants, Inno Setup also supports "auto" constants. These automatically map to their "common" form unless the installation is running in non administrative install mode, in which case they map to their "user" form.

    +

    It is recommended you always use these "auto" constants when possible to avoid mistakes.

    + + + + + + + + + + + + + + + + + + +
    AdministrativeNon administrative
    autoappdatacommonappdatauserappdata
    autocfcommoncfusercf
    autocf32commoncf32usercf
    autocf64commoncf64usercf
    autodesktopcommondesktopuserdesktop
    autodocscommondocsuserdocs
    autofontscommonfontsuserfonts
    autopfcommonpfuserpf
    autopf32commonpf32userpf
    autopf64commonpf64userpf
    autoprogramscommonprogramsuserprograms
    autostartmenucommonstartmenuuserstartmenu
    autostartupcommonstartupuserstartup
    autotemplatescommontemplatesusertemplates
    +
    + +Renamed Constants + +

    Inno Setup 6 renamed some of the directory and shell folder constants. The old names are still supported, but it is recommended to update your scripts to the new names (or the "auto" form) and the compiler will issue a warning if you don't.

    + + + + + + + + + + + + +
    Old nameNew name
    cfcommoncf
    cf32commoncf32
    cf64commoncf64
    fontscommonfonts
    pfcommonpf
    pf32commonpf32
    pf64commonpf64
    sendtousersendto
    +
    + +Other Constants + +
    + +
    {\}
    +
    +

    A backslash character. See the note at the top of this page for an explanation of what the difference between using {\} and only a \ is.

    +
    + +
    {%NAME|DefaultValue}
    +
    +

    Embeds the value of an environment variable.

    +
      +
    • NAME specifies the name of the environment variable to use.
    • +
    • DefaultValue determines the string to embed if the specified variable does not exist on the user's system.
    • +
    • If you wish to include a comma, vertical bar ("|"), or closing brace ("}") inside the constant, you must escape it via "%-encoding." Replace the character with a "%" character, followed by its two-digit hex code. A comma is "%2c", a vertical bar is "%7c", and a closing brace is "%7d". If you want to include an actual "%" character, use "%25".
    • +
    • NAME and DefaultValue may include constants. Note that you do not need to escape the closing brace of a constant as described above; that is only necessary when the closing brace is used elsewhere.
    • +
    + +
    +{%COMSPEC}
    +{%PROMPT|$P$G}
    +
    +
    +
    + +
    {cmd}
    +
    +

    The full pathname of the system's standard command interpreter, Windows\System32\cmd.exe. Note that the COMSPEC environment variable is not used when expanding this constant.

    +
    + +
    {computername}
    +
    +

    The name of the computer the Setup or Uninstall program is running on (as returned by the Windows GetComputerName function).

    +
    + +
    {drive:Path}
    +
    +

    Extracts and returns the drive letter and colon (e.g. "C:") from the specified path. In the case of a UNC path, it returns the server and share name (e.g. "\\SERVER\SHARE").

    +
      +
    • Path specifies the path.
    • +
    • If you wish to include a comma, vertical bar ("|"), or closing brace ("}") inside the constant, you must escape it via "%-encoding." Replace the character with a "%" character, followed by its two-digit hex code. A comma is "%2c", a vertical bar is "%7c", and a closing brace is "%7d". If you want to include an actual "%" character, use "%25".
    • +
    • Path may include constants. Note that you do not need to escape the closing brace of a constant as described above; that is only necessary when the closing brace is used elsewhere.
    • +
    + +
    +{drive:{src}}
    +{drive:c:\path\file}
    +{drive:\\server\share\path\file}
    +
    +
    +
    + +
    {groupname}
    +
    +

    The name of the folder the user selected on Setup's Select Start Menu Folder wizard page. This differs from {group} in that it is only the name; it does not include a path.

    +
    + +
    {hwnd}
    +
    +

    (Special-purpose) Translates to the window handle of the Setup program's background window.

    +
    + +
    {wizardhwnd}
    +
    +

    (Special-purpose) Translates to the window handle of the Setup wizard window. This handle is set to '0' if the window handle isn't available at the time the translation is done.

    +
    + +
    {ini:Filename,Section,Key|DefaultValue}
    +
    +

    Embeds a value from an .INI file.

    +
      +
    • Filename specifies the name of the .INI file to read from.
    • +
    • Section specifies the name of the section to read from.
    • +
    • Key specifies the name of the key to read.
    • +
    • DefaultValue determines the string to embed if the specified key does not exist.
    • +
    • If you wish to include a comma, vertical bar ("|"), or closing brace ("}") inside the constant, you must escape it via "%-encoding." Replace the character with a "%" character, followed by its two-digit hex code. A comma is "%2c", a vertical bar is "%7c", and a closing brace is "%7d". If you want to include an actual "%" character, use "%25".
    • +
    • Filename, Section, Key and DefaultValue may include constants. Note that you do not need to escape the closing brace of a constant as described above; that is only necessary when the closing brace is used elsewhere.
    • +
    + +
    {ini:{win}\MyProg.ini,Settings,Path|{autopf}\My Program}
    +
    +
    + +
    {language}
    +
    +

    The internal name of the selected language. See the [Languages] section documentation for more information.

    +
    + +
    {cm:MessageName}
    +{cm:MessageName,Arguments}
    +
    +

    Embeds a custom message value based on the active language.

    +
      +
    • MessageName specifies the name of custom message to read from. See the [CustomMessages] section documentation for more information.
    • +
    • Arguments optionally specifies a comma separated list of arguments to the message value.
    • +
    • If you wish to include a comma, vertical bar ("|"), or closing brace ("}") inside the constant, you must escape it via "%-encoding." Replace the character with a "%" character, followed by its two-digit hex code. A comma is "%2c", a vertical bar is "%7c", and a closing brace is "%7d". If you want to include an actual "%" character, use "%25".
    • +
    • Each argument in Arguments may include constants. Note that you do not need to escape the closing brace of a constant as described above; that is only necessary when the closing brace is used elsewhere.
    • +
    + +
    {cm:LaunchProgram,Inno Setup}
    +
    +

    The example above translates to "Launch Inno Setup" if English is the active language.

    +
    + +
    {reg:HKxx\SubkeyName,ValueName|DefaultValue}
    +
    +

    Embeds a registry value.

    +
      +
    • HKxx specifies the root key; see the [Registry] section documentation for a list of possible root keys.
    • +
    • SubkeyName specifies the name of the subkey to read from.
    • +
    • ValueName specifies the name of the value to read; leave ValueName blank if you wish to read the "default" value of a key.
    • +
    • DefaultValue determines the string to embed if the specified registry value does not exist, or is not a string type (REG_SZ or REG_EXPAND_SZ).
    • +
    • If you wish to include a comma, vertical bar ("|"), or closing brace ("}") inside the constant, you must escape it via "%-encoding." Replace the character with a "%" character, followed by its two-digit hex code. A comma is "%2c", a vertical bar is "%7c", and a closing brace is "%7d". If you want to include an actual "%" character, use "%25".
    • +
    • SubkeyName, ValueName, and DefaultValue may include constants. Note that you do not need to escape the closing brace of a constant as described above; that is only necessary when the closing brace is used elsewhere.
    • +
    + +
    {reg:HKA\Software\My Program,Path|{autopf}\My Program}
    +
    +
    + +
    {param:ParamName|DefaultValue}
    +
    +

    Embeds a command line parameter value.

    +
      +
    • ParamName specifies the name of the command line parameter to read from.
    • +
    • DefaultValue determines the string to embed if the specified command line parameter does not exist, or its value could not be determined.
    • +
    • If you wish to include a comma, vertical bar ("|"), or closing brace ("}") inside the constant, you must escape it via "%-encoding." Replace the character with a "%" character, followed by its two-digit hex code. A comma is "%2c", a vertical bar is "%7c", and a closing brace is "%7d". If you want to include an actual "%" character, use "%25".
    • +
    • ParamName and DefaultValue may include constants. Note that you do not need to escape the closing brace of a constant as described above; that is only necessary when the closing brace is used elsewhere.
    • +
    + +
    {param:Path|{autopf}\My Program}
    +
    +

    The example above translates to c:\My Program if the command line /Path="c:\My Program" was specified.

    +
    + +
    {srcexe}
    +
    +

    The full pathname of the Setup program file, e.g. "C:\SETUP.EXE".

    +
    + +
    {uninstallexe}
    +
    +

    The full pathname of the uninstall program extracted by Setup, e.g. "C:\Program Files\My Program\unins000.exe". This constant is typically used in an [Icons] section entry for creating an Uninstall icon. It is only valid if Uninstallable is yes (the default setting).

    +
    + +
    {sysuserinfoname}
    +{sysuserinfoorg}
    +
    +

    The name and organization, respectively, that Windows is registered to. This information is read from the registry.

    +
    + +
    {userinfoname}
    +{userinfoorg}
    +{userinfoserial}
    +
    +

    The name, organization and serial number, respectively, that the user entered on the User Information wizard page (which can be enabled via the UserInfoPage directive). Typically, these constants are used in [Registry] or [INI] entries to save their values for later use.

    +
    + +
    {username}
    +
    +

    The name of the user who is running Setup or Uninstall program (as returned by the GetUserName function).

    +
    + +
    {log}
    +
    +

    The log file name, or an empty string if logging to a log file is not enabled.

    +
    + +
    + + +
    + + + + + + + +

    There are three optional parameters that are supported by all sections whose entries are separated into parameters. They are:

    + + + + +

    A space separated list of language names, telling Setup to which languages the entry belongs. If the end user selects a language from this list, the entry is processed (for example: the file is installed).

    +

    An entry without a Languages parameter is always processed, unless other parameters say it shouldn't be.

    +

    Besides space separated lists, you may also use boolean expressions containing language names. See Components and Tasks parameters for examples of boolean expressions.

    + +
    Languages: en nl
    +
    + + + +

    A minimum Windows version for the entry to be processed. If you use 0 then the entry will never be processed. Build numbers and/or service pack levels may be included. This overrides any MinVersion directive in the script's [Setup] section.

    +

    An entry without a MinVersion parameter is always processed, unless other parameters say it shouldn't be.

    + +
    MinVersion: 6.2
    +
    + + + +

    Essentially the opposite of MinVersion. Specifies the minimum Windows version for the entry not to be processed. For example, if you use 6.2 and the user is running Windows 7, the entry will be processed, but if the user is running Windows 8 (which reports its version as 6.2) or later, it will not be processed. Putting 0 means there is no upper version limit. Build numbers and/or service pack levels may be included. This overrides any OnlyBelowVersion directive in the script's [Setup] section.

    +

    If 0 is not used: should be higher than 6.1 otherwise the entry is never processed. (Windows Vista/Server 2008 are no longer supported.)

    +

    An entry without an OnlyBelowVersion parameter is always processed, unless other parameters say it shouldn't be.

    + +
    OnlyBelowVersion: 6.2
    +
    + + +
    + + +
    + + + + + + + +

    There are two optional parameters that are supported by all sections whose entries are separated into parameters, except [Types], [Components] and [Tasks]. They are:

    + + + + +

    A space separated list of component names, telling Setup to which components the entry belongs. If the end user selects a component from this list, the entry is processed (for example: the file is installed).

    +

    An entry without a Components parameter is always processed, unless other parameters say it shouldn't be.

    + +
    +[Files]
    +Source: "MYPROG.EXE"; DestDir: "{app}"; Components: main
    +Source: "MYPROG.CHM"; DestDir: "{app}"; Components: help
    +Source: "README.TXT"; DestDir: "{app}"
    +
    +
    + + + +

    A space separated list of task names, telling Setup to which task the entry belongs. If the end user selects a task from this list, the entry is processed (for example: the file is installed).

    +

    An entry without a Tasks parameter is always processed, unless other parameters say it shouldn't be.

    +

    Note that the Don't create a Start Menu folder checkbox on the Select Start Menu Folder wizard page doesn't affect [Icons] entries that have Tasks parameters since they have their own checkboxes.

    + +
    +[Icons]
    +Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"; Components: main; Tasks: startmenu
    +Name: "{group}\My Program Help"; Filename: "{app}\MyProg.chm"; Components: help; Tasks: startmenu
    +Name: "{commondesktop}\My Program"; Filename: "{app}\MyProg.exe"; Components: main; Tasks: desktopicon
    +
    +
    + + +
    + +


    +Besides space separated lists, you may also use boolean expressions containing component or task names as Components and Tasks parameters. Supported operators include not, and, and or. For example:

    + + +[Components] +Name: a; Description: a +Name: b; Description: b + +[Tasks] +Name: p; Description: a or b; Components: a or b +Name: q; Description: a and b; Components: a and b +Name: r; Description: not a or b; Components: not a or b +Name: s; Description: not (a or b); Components: not (a or b) +Name: t; Description: a or b - old style; Components: a b + + + +
    + + + + + + + + +

    This section contains global settings used by the installer and uninstaller. Certain directives are required for any installation you create. Here is an example of a [Setup] section:

    + + +[Setup] +AppName=My Program +AppVersion=1.5 +DefaultDirName={autopf}\My Program +DefaultGroupName=My Program + + +

    By default, any leading or trailing whitespace in a directive's value will be stripped. It is possible to avoid this by surrounding the directive's value in double quotes (").

    + +


    The following directives can be placed in the [Setup] section:

    + +

    (bold = required)

    + +Compiler-related + +
      +
    • ASLRCompatible
    • +
    • Compression
    • +
    • CompressionThreads
    • +
    • DEPCompatible
    • +
    • DiskClusterSize
    • +
    • DiskSliceSize
    • +
    • DiskSpanning
    • +
    • Encryption
    • +
    • InternalCompressLevel
    • +
    • LZMAAlgorithm
    • +
    • LZMABlockSize
    • +
    • LZMADictionarySize
    • +
    • LZMAMatchFinder
    • +
    • LZMANumBlockThreads
    • +
    • LZMANumFastBytes
    • +
    • LZMAUseSeparateProcess
    • +
    • MergeDuplicateFiles
    • +
    • MissingMessagesWarning
    • +
    • MissingRunOnceIdsWarning
    • +
    • NotRecognizedMessagesWarning
    • +
    • Output
    • +
    • OutputBaseFilename
    • +
    • OutputDir
    • +
    • OutputManifestFile
    • +
    • ReserveBytes
    • +
    • SignedUninstaller
    • +
    • SignedUninstallerDir
    • +
    • SignTool
    • +
    • SignToolMinimumTimeBetween
    • +
    • SignToolRetryCount
    • +
    • SignToolRetryDelay
    • +
    • SignToolRunMinimized
    • +
    • SlicesPerDisk
    • +
    • SolidCompression
    • +
    • SourceDir
    • +
    • TerminalServicesAware
    • +
    • UsedUserAreasWarning
    • +
    • UseSetupLdr
    • +
    • VersionInfoCompany
    • +
    • VersionInfoCopyright
    • +
    • VersionInfoDescription
    • +
    • VersionInfoOriginalFileName
    • +
    • VersionInfoProductName
    • +
    • VersionInfoProductTextVersion
    • +
    • VersionInfoProductVersion
    • +
    • VersionInfoTextVersion
    • +
    • VersionInfoVersion
    • +
    + +Installer-related + +

    Functional: These directives affect the operation of the Setup program, or are saved and used later by the uninstaller.

    + +
      +
    • AllowCancelDuringInstall
    • +
    • AllowNetworkDrive
    • +
    • AllowNoIcons
    • +
    • AllowRootDirectory
    • +
    • AllowUNCPath
    • +
    • AlwaysRestart
    • +
    • AlwaysShowComponentsList
    • +
    • AlwaysShowDirOnReadyPage
    • +
    • AlwaysShowGroupOnReadyPage
    • +
    • AlwaysUsePersonalGroup
    • +
    • AppendDefaultDirName
    • +
    • AppendDefaultGroupName
    • +
    • AppComments
    • +
    • AppContact
    • +
    • AppId
    • +
    • AppModifyPath
    • +
    • AppMutex
    • +
    • AppName
    • +
    • AppPublisher
    • +
    • AppPublisherURL
    • +
    • AppReadmeFile
    • +
    • AppSupportPhone
    • +
    • AppSupportURL
    • +
    • AppUpdatesURL
    • +
    • AppVerName
    • +
    • AppVersion
    • +
    • ArchitecturesAllowed
    • +
    • ArchitecturesInstallIn64BitMode
    • +
    • ChangesAssociations
    • +
    • ChangesEnvironment
    • +
    • CloseApplications
    • +
    • CloseApplicationsFilter
    • +
    • CreateAppDir
    • +
    • CreateUninstallRegKey
    • +
    • DefaultDialogFontName
    • +
    • DefaultDirName
    • +
    • DefaultGroupName
    • +
    • DefaultUserInfoName
    • +
    • DefaultUserInfoOrg
    • +
    • DefaultUserInfoSerial
    • +
    • DirExistsWarning
    • +
    • DisableDirPage
    • +
    • DisableFinishedPage
    • +
    • DisableProgramGroupPage
    • +
    • DisableReadyMemo
    • +
    • DisableReadyPage
    • +
    • DisableStartupPrompt
    • +
    • DisableWelcomePage
    • +
    • EnableDirDoesntExistWarning
    • +
    • ExtraDiskSpaceRequired
    • +
    • InfoAfterFile
    • +
    • InfoBeforeFile
    • +
    • LanguageDetectionMethod
    • +
    • LicenseFile
    • +
    • MinVersion
    • +
    • OnlyBelowVersion
    • +
    • Password
    • +
    • PrivilegesRequired
    • +
    • PrivilegesRequiredOverridesAllowed
    • +
    • RestartApplications
    • +
    • RestartIfNeededByRun
    • +
    • SetupLogging
    • +
    • SetupMutex
    • +
    • ShowLanguageDialog
    • +
    • TimeStampRounding
    • +
    • TimeStampsInUTC
    • +
    • TouchDate
    • +
    • TouchTime
    • +
    • Uninstallable
    • +
    • UninstallDisplayIcon
    • +
    • UninstallDisplayName
    • +
    • UninstallDisplaySize
    • +
    • UninstallFilesDir
    • +
    • UninstallLogging
    • +
    • UninstallLogMode
    • +
    • UninstallRestartComputer
    • +
    • UpdateUninstallLogAppName
    • +
    • UsePreviousAppDir
    • +
    • UsePreviousGroup
    • +
    • UsePreviousLanguage
    • +
    • UsePreviousPrivileges
    • +
    • UsePreviousSetupType
    • +
    • UsePreviousTasks
    • +
    • UsePreviousUserInfo
    • +
    • UserInfoPage
    • +
    + +

    Cosmetic: These directives only affect the appearance of the Setup program.

    + +
      +
    • AppCopyright
    • +
    • BackColor
    • +
    • BackColor2
    • +
    • BackColorDirection
    • +
    • BackSolid
    • +
    • FlatComponentsList
    • +
    • SetupIconFile
    • +
    • ShowComponentSizes
    • +
    • ShowTasksTreeLines
    • +
    • WindowShowCaption
    • +
    • WindowStartMaximized
    • +
    • WindowResizable
    • +
    • WindowVisible
    • +
    • WizardImageAlphaFormat
    • +
    • WizardImageFile
    • +
    • WizardImageStretch
    • +
    • WizardResizable
    • +
    • WizardSizePercent
    • +
    • WizardSmallImageFile
    • +
    • WizardStyle
    • +
    + +Obsolete + +

    These directives are obsolete and should not be used in any new scripts.

    + +
      +
    • AlwaysCreateUninstallIcon
    • +
    • DisableAppendDir
    • +
    • DontMergeDuplicateFiles
    • +
    • MessagesFile
    • +
    • UninstallIconFile
    • +
    • UninstallIconName
    • +
    • UninstallStyle
    • +
    • WizardImageBackColor
    • +
    • WizardSmallImageBackColor
    • +
    + + +
    + + + + + + + + +

    This section is optional. It defines all of the setup types Setup will show on the Select Components page of the wizard. During compilation a set of default setup types is created if you define components in a [Components] section but don't define types. If you are using the default (English) messages file, these types are the same as the types in the example below.

    + +

    Here is an example of a [Types] section:

    + + +[Types] +Name: "full"; Description: "Full installation" +Name: "compact"; Description: "Compact installation" +Name: "custom"; Description: "Custom installation"; Flags: iscustom + + +

    The following is a list of the supported parameters:

    + + + + +

    The internal name of the type. Used as parameter for components in the [Components] section to instruct Setup to which types a component belongs.

    + +
    Name: "full"
    +
    + + + +

    The description of the type, which can include constants. This description is shown during installation.

    + +
    Description: "Full installation"
    +
    + + + +

    This parameter is a set of extra options. Multiple options may be used by separating them by spaces. The following options are supported:

    + + + +

    Instructs Setup that the type is a custom type. Whenever the end user manually changes the components selection during installation, Setup will set the setup type to the custom type. Note that if you don't define a custom type, Setup will only allow the user to choose a setup type and they can no longer manually select/unselect components.

    +

    Only one type may include this flag.

    +
    +
    + + +
    Flags: iscustom
    +
    + + + +
    + +

    Common Parameters

    + + +
    + + + + + + + + +

    This section is optional. It defines all of the components Setup will show on the Select Components page of the wizard for setup type customization.

    + +

    By itself a component does nothing: it needs to be 'linked' to other installation entries. See Components and Tasks Parameters.

    + +

    Here is an example of a [Components] section:

    + + +[Components] +Name: "main"; Description: "Main Files"; Types: full compact custom; Flags: fixed +Name: "help"; Description: "Help Files"; Types: full +Name: "help\english"; Description: "English"; Types: full +Name: "help\dutch"; Description: "Dutch"; Types: full + + +

    The example above generates four components: A "main" component which gets installed if the end user selects a type with name "full" or "compact" and a "help" component which has two child components and only gets installed if the end user selects the "full" type.

    + +

    The following is a list of the supported parameters:

    + + + + +

    The internal name of the component.

    +

    The total number of \ or / characters in the name of the component is called the level of the component. Any component with a level of 1 or more is a child component. The component listed before the child component with a level of 1 less than the child component, is the parent component. Other components with the same parent component as the child component are sibling components.

    +

    A child component can't be selected if its parent component isn't selected. A parent component can't be selected if none of its children are selected, unless a Components parameter directly references the parent component or the parent component includes the checkablealone flag.

    +

    If sibling components have the exclusive flag, only one of them can be selected.

    + +
    Name: "help"
    +
    + + + +

    The description of the component, which can include constants. This description is shown to the end user during installation.

    + +
    Description: "Help Files"
    +
    + + + +

    A space separated list of types this component belongs to. If the end user selects a type from this list, this component will be installed.

    +

    If the fixed flag isn't used (see below), any custom types (types using the iscustom flag) in this list are ignored by Setup.

    + +
    Types: full compact
    +
    + + + +

    The extra disk space required by this component, similar to the ExtraDiskSpaceRequired directive for the [Setup] section.

    + +
    ExtraDiskSpaceRequired: 0
    +
    + + + +

    This parameter is a set of extra options. Multiple options may be used by separating them by spaces. The following options are supported:

    + + + +

    Specifies that the component can be checked when none of its children are. By default, if no Components parameter directly references the component, unchecking all of the component's children will cause the component to become unchecked.

    +
    + +

    Specifies that the component should not automatically become checked when its parent is checked. Has no effect on top-level components, and cannot be combined with the exclusive flag.

    +
    + +

    Instructs Setup that this component is mutually exclusive with sibling components that also have the exclusive flag.

    +
    + +

    Instructs Setup that this component can not be manually selected or unselected by the end user during installation.

    +
    + +

    Instructs Setup to ask the user to restart the system if this component is installed, regardless of whether this is necessary (for example because of [Files] section entries with the restartreplace flag). Like AlwaysRestart but per component.

    +
    + +

    Instructs Setup not to warn the user that this component will not be uninstalled after they deselected this component when it's already installed on his/her machine.

    +

    Depending on the complexity of your components, you can try to use the [InstallDelete] section and this flag to automatically 'uninstall' deselected components.

    +
    +
    + + +
    Flags: fixed
    +
    + + + +
    + +

    Common Parameters

    + + +
    + + + + + + + + +

    This section is optional. It defines all of the user-customizable tasks Setup will perform during installation. These tasks appear as check boxes and radio buttons on the Select Additional Tasks wizard page.

    + +

    By itself a task does nothing: it needs to be 'linked' to other installation entries. See Components and Tasks Parameters.

    + +

    Here is an example of a [Tasks] section:

    + + +[Tasks] +Name: desktopicon; Description: "Create a &desktop icon"; GroupDescription: "Additional icons:"; Components: main +Name: desktopicon\common; Description: "For all users"; GroupDescription: "Additional icons:"; Components: main; Flags: exclusive +Name: desktopicon\user; Description: "For the current user only"; GroupDescription: "Additional icons:"; Components: main; Flags: exclusive unchecked +Name: quicklaunchicon; Description: "Create a &Quick Launch icon"; GroupDescription: "Additional icons:"; Components: main; Flags: unchecked +Name: associate; Description: "&Associate files"; GroupDescription: "Other tasks:"; Flags: unchecked + + +

    The following is a list of the supported parameters:

    + + + + +

    The internal name of the task.

    +

    The total number of \ or / characters in the name of the task is called the level of the task. Any task with a level of 1 or more is a child task. The task listed before the child task with a level of 1 less than the child task, is the parent task. Other tasks with the same parent task as the child task are sibling tasks.

    +

    A child task can't be selected if its parent task isn't selected. A parent task can't be selected if none of its children are selected, unless a Tasks parameter directly references the parent task or the parent task includes the checkablealone flag.

    +

    If sibling tasks have the exclusive flag, only one of them can be selected.

    + +
    Name: "desktopicon"
    +
    + + + +

    The description of the task, which can include constants. This description is shown to the end user during installation.

    + +
    Description: "Create a &desktop icon"
    +
    + + + +

    The group description of a group of tasks, which can include constants. Consecutive tasks with the same group description will be grouped below a text label. The text label shows the group description.

    + +
    GroupDescription: "Additional icons"
    +
    + + + +

    A space separated list of components this task belongs to. If the end user selects a component from this list, this task will be shown. A task entry without a Components parameter is always shown.

    + +
    Components: main
    +
    + + + +

    This parameter is a set of extra options. Multiple options may be used by separating them by spaces. The following options are supported:

    + + + +

    Specifies that the task can be checked when none of its children are. By default, if no Tasks parameter directly references the task, unchecking all of the task's children will cause the task to become unchecked.

    +
    + +

    Instructs Setup that this task should be unchecked initially when Setup finds a previous version of the same application is already installed.

    +

    If the UsePreviousTasks [Setup] section directive is no, this flag is effectively disabled.

    +
    + +

    Specifies that the task should not automatically become checked when its parent is checked. Has no effect on top-level tasks, and cannot be combined with the exclusive flag.

    +
    + +

    Instructs Setup that this task is mutually exclusive with sibling tasks that also have the exclusive flag.

    +
    + +

    Instructs Setup to ask the user to restart the system at the end of installation if this task is selected, regardless of whether it is necessary (for example because of [Files] section entries with the restartreplace flag). Like AlwaysRestart but per task.

    +
    + +

    Instructs Setup that this task should be unchecked initially.

    +
    +
    + + +
    Flags: unchecked
    +
    + + + +
    + +

    Common Parameters

    + + +
    + + + + + + + + +

    This optional section defines any additional directories Setup is to create besides the application directory the user chooses, which is created automatically. Creating subdirectories underneath the main application directory is a common use for this section.

    + +

    Note that you aren't required to explicitly create directories before installing files to them using the [Files] section, so this section is primarily useful for creating empty directories.

    + +

    Here is an example of a [Dirs] section:

    + + +[Dirs] +Name: "{app}\data" +Name: "{app}\bin" + + +

    The example above will, after Setup creates the application directory, create two subdirectories underneath the application directory.

    + +

    The following is a list of the supported parameters:

    + + + + +

    The name of the directory to create, which normally will start with one of the directory constants.

    + +
    Name: "{app}\MyDir"
    +
    + + + +

    Specifies additional attributes for the directory. This can include one or more of the following: readonly, hidden, system, notcontentindexed. If this parameter is not specified, Setup does not assign any special attributes to the directory.

    +

    If the directory already exists, the specified attributes will be combined with the directory's existing attributes.

    + +
    Attribs: hidden system
    +
    + + + +

    Specifies additional permissions to grant in the directory's ACL (access control list). It is not recommended that you use this parameter if you aren't familiar with ACLs or why you would need to change them, because misusing it could negatively impact system security.

    +

    For this parameter to have an effect the directory must be located on a partition that supports ACLs (such as NTFS), and the current user must be able to change the permissions on the directory. In the event these conditions are not met, no error message will be displayed, and the permissions will not be set.

    +

    This parameter should only be used on directories private to your application. Never change the ACLs on top-level directories like {sys} or {commonpf}, otherwise you can open up security holes on your users' systems.

    +

    In addition, it is recommended that you avoid using this parameter to grant write access on directories containing program files. Granting, for example, everyone-modify permission on the {app} directory will allow unprivileged users to tamper with your application's program files; this creates the potential for a privilege escalation vulnerability. (However, it is safe to change the permissions on a subdirectory of your application's directory which does not contain program files, e.g. {app}\data.)

    +

    The specified permissions are set regardless of whether the directory existed prior to installation.

    +

    This parameter can include one or more space separated values in the format:

    +

    <user or group identifier>-<access type>

    +

    The following access types are supported for the [Dirs] section:

    + + +

    Grants "Full Control" permission, which is the same as modify (see below), but additionally allows the specified user/group to take ownership of the directory and change its permissions. Use sparingly; generally, modify is sufficient.

    +
    + +

    Grants "Modify" permission, which allows the specified user/group to read, execute, create, modify, and delete files in the directory and its subdirectories.

    +
    + +

    Grants "Read & Execute" permission, which allows the specified user/group to read and execute files in the directory and its subdirectories.

    +
    +
    + +
    Permissions: users-modify
    +
    + + + +

    This parameter is a set of extra options. Multiple options may be used by separating them by spaces. The following options are supported:

    + + + +

    Instructs Setup to create the directory as usual, but then delete it once the installation is completed (or aborted) if it's empty. This can be useful when extracting temporary data needed by a program executed in the script's [Run] section.

    +

    This flag will not cause directories that already existed before installation to be deleted.

    +
    + +

    Instructs Setup to enable NTFS compression on the directory. If it fails to set the compression state for any reason (for example, if compression is not supported by the file system), no error message will be displayed.

    +

    If the directory already exists, the compression state of any files present in the directory will not be changed.

    +
    + +

    Instructs the uninstaller to always attempt to delete the directory if it's empty. Normally the uninstaller will only try to delete the directory if it didn't already exist prior to installation.

    +
    + +

    Instructs the uninstaller to not attempt to delete the directory. By default, the uninstaller deletes any directory specified in the [Dirs] section if it is empty.

    +
    + +

    Instructs Setup to disable NTFS compression on the directory. If it fails to set the compression state for any reason (for example, if compression is not supported by the file system), no error message will be displayed.

    +

    If the directory already exists, the compression state of any files present in the directory will not be changed.

    +
    +
    + + +
    Flags: uninsneveruninstall
    +
    + + + +
    + +

    Components and Tasks Parameters

    + +

    Common Parameters

    + + +
    + + + + + + + + +

    This optional section defines any files Setup is to install on the user's system.

    + +

    Here is an example of a [Files] section:

    + + +[Files] +Source: "MYPROG.EXE"; DestDir: "{app}" +Source: "MYPROG.CHM"; DestDir: "{app}" +Source: "README.TXT"; DestDir: "{app}"; Flags: isreadme + + +

    See the Remarks section at the bottom of this topic for some important notes.

    + +

    The following is a list of the supported parameters:

    + + + + +

    The name of the source file. The compiler will prepend the path of your installation's source directory if you do not specify a fully qualified pathname.

    +

    This can be a wildcard to specify a group of files in a single entry. When a wildcard is used, all files matching it use the same options.

    +

    When the flag external is specified, Source must be the full pathname of an existing file (or wildcard) on the distribution media or the user's system (e.g. "{src}\license.ini").

    +

    Constants may only be used when the external flag is specified, because the compiler does not do any constant translating itself.

    + +
    +Source: "MYPROG.EXE"
    +Source: "Files\*"
    +
    +
    + + + +

    The directory where the file is to be installed on the user's system. Will almost always begin with one of the directory constants. If the specified path does not already exist on the user's system, it will be created automatically, and removed automatically during uninstallation if empty.

    + +
    +DestDir: "{app}"
    +DestDir: "{app}\subdir"
    +
    +
    + + + +

    This parameter specifies a new name for the file when it is installed on the user's system. By default, Setup uses the name from the Source parameter, so in most cases it's not necessary to specify this parameter.

    + +
    DestName: "MYPROG2.EXE"
    +
    + + + +

    Specifies a list of patterns to exclude, separated by commas. This parameter cannot be combined with the external flag.

    +

    Patterns may include wildcard characters ("*" and "?"). Note that unlike the Source parameter, a simple Unix-style pattern matching routine is used for Excludes. Dots in the pattern are always significant, thus "*.*" will not exclude a file with no extension (instead, use just "*"). Also, question marks always match exactly one character, thus "?????" will not exclude files with names less than five characters long.

    +

    If a pattern starts with a backslash ("\") it is matched against the start of a path name, otherwise it is matched against the end of a path name. Thus "\foo" will only exclude a file named "foo" at the base of the tree. On the other hand, "foo" will exclude any file named "foo" anywhere in the tree.

    +

    The patterns may include backslashes. "foo\bar" will exclude both "foo\bar" and "subdir\foo\bar". "\foo\bar" will only exclude "foo\bar".

    + +
    +Source: "*"; Excludes: "*.~*"
    +Source: "*"; Excludes: "*.~*,\Temp\*"; Flags: recursesubdirs
    +
    +
    + + + +

    This parameter must be combined with the external flag and specifies the size of the external file in bytes. If this parameter is not specified, Setup retrieves the file size at startup. Primarily useful for files that aren't available at startup, for example files located on a second disk when disk spanning is being used.

    + +
    +ExternalSize: 1048576; Flags: external
    +
    +
    + + + +

    Specifies additional attributes for the file. This can include one or more of the following: readonly, hidden, system, notcontentindexed. If this parameter is not specified, Setup does not assign any special attributes to the file.

    + +
    Attribs: hidden system
    +
    + + + +

    Specifies additional permissions to grant in the file's ACL (access control list). It is not recommended that you use this parameter if you aren't familiar with ACLs or why you would need to change them, because misusing it could negatively impact system security.

    +

    For this parameter to have an effect the file must be located on a partition that supports ACLs (such as NTFS), and the current user must be able to change the permissions on the file. In the event these conditions are not met, no error message will be displayed, and the permissions will not be set.

    +

    This parameter should only be used on files private to your application. Never change the ACLs on shared system files, otherwise you can open up security holes on your users' systems.

    +

    The specified permissions are set regardless of whether the file existed prior to installation.

    +

    This parameter can include one or more space separated values in the format:

    +

    <user or group identifier>-<access type>

    +

    The following access types are supported for the [Files] section:

    + + +

    Grants "Full Control" permission, which is the same as modify (see below), but additionally allows the specified user/group to take ownership of the file and change its permissions. Use sparingly; generally, modify is sufficient.

    +
    + +

    Grants "Modify" permission, which allows the specified user/group to read, execute, modify, and delete the file.

    +
    + +

    Grants "Read & Execute" permission, which allows the specified user/group to read and execute the file.

    +
    +
    + +
    Permissions: users-modify
    +
    + + + +

    Tells Setup the file is a font that needs to be installed. The value of this parameter is the name of the font as stored in the registry or WIN.INI. This must be exactly the same name as you see when you double-click the font file in Explorer. Note that Setup will automatically append " (TrueType)" to the end of the name.

    +

    If the file is not a TrueType font, you must specify the flag fontisnttruetype in the Flags parameter.

    +

    It's recommended that you use the flags onlyifdoesntexist and uninsneveruninstall when installing fonts to the {autofonts} directory.

    +

    If the installation is running in non administrative install mode, Windows 10 Version 1803 or later is required to successfully install a font.

    +

    For compatibility with 64-bit Windows, fonts should not be installed to the {sys} directory. Use {autofonts} as the destination directory instead.

    + +
    Source: "OZHANDIN.TTF"; DestDir: "{autofonts}"; FontInstall: "Oz Handicraft BT"; Flags: onlyifdoesntexist uninsneveruninstall
    +
    + + + +

    Specifies the strong assembly name of the file. Used by Uninstall only.

    +

    This parameter is ignored if the gacinstall flag isn't also specified.

    + +
    StrongAssemblyName: "MyAssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdef123456, ProcessorArchitecture=MSIL"
    +
    + + + +

    This parameter is a set of extra options. Multiple options may be used by separating them by spaces. The following options are supported:

    + + + +

    Causes the {sys} constant to map to the 32-bit System directory when used in the Source and DestDir parameters, the regserver and regtypelib flags to treat the file as 32-bit, and the sharedfile flag to update the 32-bit SharedDLLs registry key. This is the default behavior in 32-bit install mode.

    +
    + +

    Causes the {sys} constant to map to the 64-bit System directory when used in the Source and DestDir parameters, the regserver and regtypelib flags to treat the file as 64-bit, and the sharedfile flag to update the 64-bit SharedDLLs registry key. This is the default behavior in 64-bit install mode.

    +
    + +

    Disables the compiler's automatic checking for unsafe files. It is strongly recommended that you DO NOT use this flag, unless you are absolutely sure you know what you're doing.

    +
    + +

    (Not recommended; see below)
    +Instructs Setup to proceed to comparing time stamps (last write/modified time) if the file being installed already exists on the user's system, and at least one of the following conditions is true:

    +
      +
    • Neither the existing file nor the file being installed has version info.
    • +
    • The ignoreversion flag is also used on the entry.
    • +
    • The replacesameversion flag isn't used, and the existing file and the file being installed have the same version number (as determined by the files' version info).
    • +
    +

    If the existing file has an older time stamp (last write/modified time) than the file being installed, the existing file will replaced. Otherwise, it will not be replaced.

    +

    Use of this flag is not recommended except as a last resort, because there is an inherent issue with it: NTFS partitions store time stamps in UTC (unlike FAT partitions), which causes local time stamps -- what Inno Setup works with by default -- to shift whenever a user changes their system's time zone or when daylight saving time goes into or out of effect. This can create a situation where files are replaced when the user doesn't expect them to be, or not replaced when the user expects them to be.

    +
    + +

    Always ask the user to confirm before replacing an existing file.

    +
    + +

    By default the compiler skips empty directories when it recurses subdirectories searching for the Source filename/wildcard. This flag causes these directories to be created at install time (just like if you created [Dirs] entries for them).

    +

    Must be combined with recursesubdirs.

    +
    + +

    Instructs Setup to install the file as usual, but then delete it once the installation is completed (or aborted). This can be useful for extracting temporary data needed by a program executed in the script's [Run] section.

    +

    This flag will not cause existing files that weren't replaced during installation to be deleted.

    +

    This flag cannot be combined with the isreadme, regserver, regtypelib, restartreplace, sharedfile, or uninsneveruninstall flags.

    +
    + +

    Don't copy the file to the user's system during the normal file copying stage but do statically compile the file into the installation. This flag is useful if the file is handled by the [Code] section exclusively and extracted using ExtractTemporaryFile.

    +
    + +

    Prevents Setup from verifying the file checksum after extraction. Use this flag on files you wish to modify while already compiled into Setup.

    +

    Must be combined with nocompression.

    +
    + +

    This flag instructs Inno Setup not to statically compile the file specified by the Source parameter into the installation files, but instead copy from an existing file on the distribution media or the user's system. See the Source parameter description for more information.

    +
    + +

    Specify this flag if the entry is installing a non-TrueType font with the FontInstall parameter.

    +
    + +

    Install the file into the .NET Global Assembly Cache. When used in combination with sharedfile, the file will only be uninstalled when the reference count reaches zero.

    +

    To uninstall the file Uninstaller uses the strong assembly name specified by parameter StrongAssemblyName.

    +

    An exception will be raised if an attempt is made to use this flag on a system with no .NET Framework present.

    +
    + +

    Don't compare version info at all; replace existing files regardless of their version number.

    +

    This flag should only be used on files private to your application, never on shared system files.

    +
    + +

    File is the "README" file. Only one file in an installation can have this flag. When a file has this flag, the user will asked if they would like to view the README file after the installation has completed. If Yes is chosen, Setup will open the file, using the default program for the file type. For this reason, the README file should always end with an extension like .txt, .wri, or .doc.

    +

    Note that if Setup has to restart the user's computer (as a result of installing a file with the flag restartreplace or if the AlwaysRestart [Setup] section directive is yes), the user will not be given an option to view the README file.

    +
    + +

    Prevents the compiler from attempting to compress the file. Use this flag on file types that you know can't benefit from compression (for example, JPEG images) to speed up the compilation process and save a few bytes in the resulting installation.

    +
    + +

    Prevents the file from being stored encrypted. Use this flag if you have enabled encryption (using the [Setup] section directive Encryption) but want to be able to extract the file using the [Code] section support function ExtractTemporaryFile before the user has entered the correct password.

    +
    + +

    When combined with either the regserver or regtypelib flags, Setup will not display any error message if the registration fails.

    +
    + +

    Only install the file if a file of the same name already exists on the user's system. This flag may be useful if your installation is a patch to an existing installation, and you don't want files to be installed that the user didn't already have.

    +
    + +

    Only install the file if it doesn't already exist on the user's system.

    +
    + +

    Always overwrite a read-only file. Without this flag, Setup will ask the user if an existing read-only file should be overwritten.

    +
    + +

    By default, when a file being installed has an older version number (or older time stamp, when the comparetimestamp flag is used) than an existing file, Setup will not replace the existing file. (See the Remarks section at the bottom of this topic for more details.) When this flag is used, Setup will ask the user whether the file should be replaced, with the default answer being to keep the existing file.

    +
    + +

    Instructs the compiler or Setup to also search for the Source filename/wildcard in subdirectories under the Source directory.

    +
    + +

    Register the DLL/OCX file. With this flag set, Setup will call the DllRegisterServer function exported by the DLL/OCX file, and the uninstaller will call DllUnregisterServer prior to removing the file. When used in combination with sharedfile, the DLL/OCX file will only be unregistered when the reference count reaches zero.

    +

    In 64-bit install mode, the file is assumed to be a 64-bit image and will be registered inside a 64-bit process. You can override this by specifying the 32bit flag.

    +

    See the Remarks at the bottom of this topic for more information.

    +
    + +

    Register the type library (.tlb). The uninstaller will unregister the type library (unless the flag uninsneveruninstall is specified). As with the regserver flag, when used in combination with sharedfile, the file will only be unregistered by the uninstaller when the reference count reaches zero.

    +

    In 64-bit install mode running on an x64-compatible edition of Windows, the type library will be registered inside a 64-bit process. You can override this by specifying the 32bit flag.

    +

    See the Remarks at the bottom of this topic for more information.

    +
    + +

    When this flag is used and the file already exists on the user's system and it has the same version number as the file being installed, Setup will compare the files and replace the existing file if their contents differ.

    +

    The default behavior (i.e. when this flag isn't used) is to not replace an existing file with the same version number.

    +
    + +

    When an existing file needs to be replaced, and it is in use (locked) by another running process, Setup will by default display an error message. This flag tells Setup to instead register the file to be replaced the next time the system is restarted (by calling MoveFileEx or by creating an entry in WININIT.INI). When this happens, the user will be prompted to restart their computer at the end of the installation process.

    +

    NOTE: This flag has no effect if the user does not have administrative privileges. Therefore, when using this flag, it is recommended that you leave the PrivilegesRequired [Setup] section directive at the default setting of admin.

    +
    + +

    Instructs Setup to enable NTFS compression on the file (even if it didn't replace the file). If it fails to set the compression state for any reason (for example, if compression is not supported by the file system), no error message will be displayed.

    +
    + +

    Specifies that the file is shared among multiple applications, and should only be removed at uninstall time if no other applications are using it. Most files installed to the Windows System directory should use this flag, including .OCX, .BPL, and .DPL files.

    +

    Windows' standard shared file reference-counting mechanism (located in the registry under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs) is used to keep track of how many applications depend on the file. Each time the file is installed, the reference count for the file is incremented. (This happens regardless of whether the installer actually replaces the file on disk.) When an application using the file is uninstalled, the reference count is decremented. If the count reaches zero, the file is deleted (with the user's confirmation, unless the uninsnosharedfileprompt flag is also specified).

    +

    If Setup is run more than once, the reference count for the file will be incremented more than once. The uninstaller will decrement the reference count the same number of times, however, so no references are leaked (provided the UninstallLogMode [Setup] section directive isn't changed from its default setting of append).

    +

    When this flag is used, do not specify {syswow64} in the DestDir parameter; use {sys} instead. Even though {sys} and {syswow64} map to the same underlying directory in 32-bit install mode, the path name must exactly match what every other existing installer is using; otherwise, a second reference count for the file would be created, which could result in the file being removed prematurely. If you need to install a shared file to the 32-bit System directory in 64-bit install mode, specify {sys} in the DestDir parameter and additionally include the 32bit flag.

    +
    + +

    This flag instructs the compiler to digitally sign the original source files before storing them. Ignored if [Setup] section directive SignTool is not set.

    +
    + +

    This flag instructs the compiler to check the original source files for a digital signature before storing them.

    +
    + +

    This flag instructs the compiler to digitally sign the original source files before storing them, but only if the files are not already signed. Ignored if [Setup] section directive SignTool is not set.

    +
    + +

    This flag instructs the compiler -- or Setup, if the external flag is also used -- to silently skip over the entry if the source file does not exist, instead of displaying an error message.

    +
    + +

    When solid compression is enabled, this flag instructs the compiler to finalize the current compression stream and begin a new one before compressing the file(s) matched by Source. This allows Setup to seek to the file instantly without having to decompress any preceding files first. May be useful in a large, multi-component installation if you find too much time is being spent decompressing files belonging to components that weren't selected.

    +
    + +

    This flag instructs the compiler to compress the found files sorted by extension before it sorts by path name. This potentially decreases the size of Setup if solid compression is also used.

    +
    + +

    This flag instructs the compiler to compress the found files sorted by name before it sorts by path name. This potentially decreases the size of Setup if solid compression is also used. If sortfilesbyextension is also used, files are first sorted by extension.

    +
    + +

    This flag causes Setup to set the time/date stamp of the installed file(s) to that which is specified by the TouchDate and TouchTime [Setup] section directives.

    +

    This flag has no effect if combined with the external flag.

    +
    + +

    When uninstalling the shared file, automatically remove the file if its reference count reaches zero instead of asking the user. Must be combined with the sharedfile flag to have an effect.

    +
    + +

    When uninstalling the file, remove any read-only attribute from the file before attempting to delete it.

    +
    + +

    When this flag is used and the file is in use at uninstall time, the uninstaller will queue the file to be deleted when the system is restarted, and at the end of the uninstallation process ask the user if they wants to restart. This flag can be useful when uninstalling things like shell extensions which cannot be programmatically stopped. Note that administrative privileges are required for this flag to have an effect.

    +
    + +

    Never remove the file. This flag can be useful when installing very common shared files that shouldn't be deleted under any circumstances, such as MFC DLLs.

    +

    Note that if this flag is combined with the sharedfile flag, the file will never be deleted at uninstall time but the reference count will still be properly decremented.

    +
    + +

    Instructs Setup to disable NTFS compression on the file (even if it didn't replace the file). If it fails to set the compression state for any reason (for example, if compression is not supported by the file system), no error message will be displayed.

    +
    +
    + + +
    Flags: isreadme
    +
    + + + +
    + +

    Components and Tasks Parameters

    + +

    Common Parameters

    + +Remarks + +

    If a file already exists on the user's system, it by default will be replaced according to the following rules:

    +
      +
    1. If the existing file is an older version than the file being installed (as determined by the files' version info), the existing file will be replaced.
    2. +
    3. If the existing file is the same version as the file being installed, the existing file will not be replaced, except if the replacesameversion flag is used and the content of the two files differs.
    4. +
    5. If the existing file is a newer version than the file being installed, or if the existing file has version info but the file being installed does not, the existing file will not be replaced.
    6. +
    7. If the existing file does not have version info, it will be replaced.
    8. +
    +

    Certain flags such as onlyifdoesntexist, ignoreversion, and promptifolder alter the aforementioned rules.

    + +

    If Setup is unable to replace an existing file because it is in use by another process, it will make up to 4 additional attempts to replace the file, delaying one second before each attempt. If all attempts fail, an error message will be displayed.

    + +

    Setup registers all files with the regserver or regtypelib flags as the last step of installation. However, if the [Setup] section directive AlwaysRestart is yes, or if there are files with the restartreplace flag, all files get registered on the next reboot (by creating an entry in Windows' RunOnce registry key).

    + +

    When files with a .HLP extension (Windows help files) are uninstalled, the corresponding .GID and .FTS files are automatically deleted as well. Similarly, when a .CHM (HTML Help) file is deleted, any .CHW (generated index) file is automatically deleted.

    + + +
    + + + + + + + + +

    This optional section defines any shortcuts Setup is to create in the Start Menu and/or other locations, such as the desktop.

    + +

    Here is an example of an [Icons] section:

    + + +[Icons] +Name: "{group}\My Program"; Filename: "{app}\MYPROG.EXE"; WorkingDir: "{app}" +Name: "{group}\Uninstall My Program"; Filename: "{uninstallexe}" + + +

    The following is a list of the supported parameters:

    + + + + +

    The name and location of the shortcut to create. Any of the shell folder constants or directory constants may be used in this parameter.

    +

    Keep in mind that shortcuts are stored as literal files so any characters not allowed in normal filenames can't be used here. Also, because it's not possible to have two files with the same name, it's therefore not possible to have two shortcuts with the same name.

    + +
    +Name: "{group}\My Program"
    +Name: "{group}\Subfolder\My Program"
    +Name: "{commondesktop}\My Program"
    +Name: "{commonprograms}\My Program"
    +Name: "{commonstartup}\My Program"
    +
    +
    + + + +

    The command line filename for the shortcut, which normally begins with a directory constant.

    +

    In addition to file and folder names, URLs (web site addresses) may also be specified. When a URL is specified, Setup will create an "Internet Shortcut" (.url) file, and ignore the Parameters, WorkingDir, HotKey, and Comment parameters.

    +

    On 64-bit Windows, note that the {sys} constant will map to the native 64-bit System directory when the shortcut is launched by a 64-bit process, such as Windows Explorer. This is true regardless of whether the install is running in 64-bit install mode. To create a shortcut that always points to the 32-bit System directory, use {syswow64} instead. (The same applies to the WorkingDir and IconFilename parameters.)

    + +
    +Filename: "{app}\MYPROG.EXE"
    +Filename: "{uninstallexe}"
    +Filename: "{app}\FolderName"
    +Filename: "http://www.example.com/"
    +
    +
    + + + +

    Optional command line parameters for the shortcut, which can include constants.

    + +
    Parameters: "/play filename.mid"
    +
    + + + +

    The working (or Start In) directory for the shortcut, which specifies the initial current directory for the program. This parameter can include constants.

    +

    If this parameter is not specified or is blank, Setup will try to extract a directory name from the Filename parameter. If that fails (unlikely), the working directory will be set to {sys}.

    + +
    WorkingDir: "{app}"
    +
    + + + +

    The hot key (or "shortcut key") setting for the shortcut, which is a combination of keys with which the program can be started.

    +

    Note: If you change the shortcut key and reinstall the application, Windows may continue to recognize old shortcut key(s) until you log off and back on or restart the system.

    + +
    HotKey: "ctrl+alt+k"
    +
    + + + +

    Specifies the Comment (or "description") field of the shortcut, which determines the popup hint for it. This parameter can include constants.

    + +
    Comment: "This is my program"
    +
    + + + +

    The filename of a custom icon (located on the user's system) to be displayed. This can be an executable image (.exe, .dll) containing icons or a .ico file. If this parameter is not specified or is blank, Windows will use the file's default icon. This parameter can include constants.

    + +
    IconFilename: "{app}\myicon.ico"
    +
    +

    Note: when Setup is running on 64-bit Windows, it will automatically replace {commonpf32}\'s value in the filename with '%ProgramFiles(x86)%\' to work around a bug in 64-bit Windows: 64-bit Windows replaces it with '%ProgramFiles%\' instead which is incorrect.

    + + + +

    Zero-based index of the icon to use in the file specified by IconFilename. Defaults to 0.

    +

    If IconIndex is non-zero and IconFilename is not specified or is blank, it will act as if IconFilename is the same as Filename.

    + +
    IconIndex: 0
    +
    + + + +

    Specifies the Windows 7 (or later) Application User Model ID for the shortcut. Ignored on earlier Windows versions. This parameter can include constants.

    + +
    AppUserModelID: "MyCompany.MyProg"
    +
    + + + +

    Specifies the Windows 10 (or later) Application User Model Toast Activator CLSID for the shortcut. Ignored on earlier Windows versions.

    + +
    AppUserModelToastActivatorCLSID: "B784B1A4-D682-4FE6-BDBA-21EDDAE42795"
    +
    + + + +

    This parameter is a set of extra options. Multiple options may be used by separating them by spaces. The following options are supported:

    + + + +

    When this flag is set, Setup will set the "Close on Exit" property of the shortcut. This flag only has an effect if the shortcut points to an MS-DOS application (if it has a .pif extension, to be specific). If neither this flag nor the dontcloseonexit flags are specified, Setup will not attempt to change the "Close on Exit" property.

    +
    + +

    When this flag is set, the installer will only try to create the icon if the file specified by the Filename parameter exists.

    +
    + +

    Same as closeonexit, except it causes Setup to uncheck the "Close on Exit" property.

    +
    + +

    Prevents the Start menu entry for the new shortcut from receiving a highlight on Windows 7 and additionally prevents the new shortcut from being automatically pinned the Start screen on Windows 8 (or later). Ignored on earlier Windows versions.

    +
    + +

    Prevents a Start menu entry from being pinnable to Taskbar or the Start Menu on Windows 7 (or later). This also makes the entry ineligible for inclusion in the Start menu's Most Frequently Used (MFU) list. Ignored on earlier Windows versions.

    +
    + +

    When this flag is set, Setup sets the "Run" setting of the icon to "Maximized" so that the program will be initially maximized when it is started.

    +
    + +

    When this flag is set, Setup sets the "Run" setting of the icon to "Minimized" so that the program will be initially minimized when it is started.

    +
    + +

    Instructs the uninstaller not to delete the icon.

    +
    + +

    When this flag is set, specify just a filename (no path) in the Filename parameter, and Setup will retrieve the pathname from the "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths" registry key and prepend it to the filename automatically.

    +
    +
    + + +
    Flags: runminimized
    +
    + + + +
    + +

    Components and Tasks Parameters

    + +

    Common Parameters

    + + +
    + + + + + + + + +

    This optional section defines any .INI file entries you would like Setup to set on the user's system.

    + +

    Here is an example of an [INI] section:

    + + +[INI] +Filename: "MyProg.ini"; Section: "InstallSettings"; Flags: uninsdeletesection +Filename: "MyProg.ini"; Section: "InstallSettings"; Key: "InstallPath"; String: "{app}" + + +

    The following is a list of the supported parameters:

    + + + + +

    The name of the .INI file you want Setup to modify, which can include constants. If this parameter does not include a path, it will write to the Windows directory. If this parameter is blank, it will write to WIN.INI in the Windows directory.

    + +
    Filename: "{app}\MyProg.ini"
    +
    + + + +

    The name of the section in which to create the entry, which can include constants.

    + +
    Section: "Settings"
    +
    + + + +

    The name of the key to set, which can include constants. If this parameter is not specified or is blank, no key is created.

    + +
    Key: "Version"
    +
    + + + +

    The value to assign to the key, which can use constants. If this parameter is not specified, no key is created.

    + +
    String: "1.0"
    +
    + + + +

    This parameter is a set of extra options. Multiple options may be used by separating them by spaces. The following options are supported:

    + + + +

    Assign to the key only if the key doesn't already exist in the file. If this flag is not specified, the key will be set regardless of whether it already existed.

    +
    + +

    Delete the entry when the program is uninstalled. This can be combined with the uninsdeletesectionifempty flag.

    +
    + +

    When the program is uninstalled, delete the entire section in which the entry is located. It obviously wouldn't be a good idea to use this on a section that is used by Windows itself (like some of the sections in WIN.INI). You should only use this on sections private to your application.

    +
    + +

    Same as uninsdeletesection, but deletes the section only if there are no keys left in it. This can be combined with the uninsdeleteentry flag.

    +
    +
    + + +
    Flags: uninsdeleteentry
    +
    + + + +
    + +

    Components and Tasks Parameters

    + +

    Common Parameters

    + + +
    + + + + + + + + +

    This optional section is identical in format to the [UninstallDelete] section, except its entries are processed as the first step of installation.

    + + +
    + + + + + + + + + +

    Inno Setup supports multilingual installations. The [Languages] section defines the languages to make available to the Setup program.

    + +

    Setup determines the default language to use for its messages in the following order:

    + +
      +
    1. It searches for a language whose LanguageID setting (normally specified in the [LangOptions] section of the language's .isl file) matches both the primary language identifier and sublanguage identifier of the current user's UI language or locale (depending on the setting of LanguageDetectionMethod).
    2. +
    3. If no match is found, it searches for just a primary language identifier match. If two or more available languages have the same primary language identifier, it selects the first one listed in the [Languages] section.
      Exception: Simplified Chinese is excluded from consideration in this step if the user's UI language or locale (depending on the setting of LanguageDetectionMethod) is Traditional Chinese, and vice versa.
    4. +
    5. If no match is found, it defaults to the first language specified in the [Languages] section.
    6. +
    + +

    If the ShowLanguageDialog [Setup] section directive is set to yes (the default), a Select Language dialog will be displayed which gives the user an opportunity to override the language Setup chose. See the [LangOptions] section help topic for details.

    + +

    The following is an example of a [Languages] section. It defines two languages: English, based on the standard Default.isl file, and Dutch, based on a third-party translation.

    + + +[Languages] +Name: "en"; MessagesFile: "compiler:Default.isl" +Name: "nl"; MessagesFile: "compiler:Languages\Dutch.isl" + + + + + +

    The internal name of the language, which you can set to anything you like. This can used as a prefix on [LangOptions] or [Messages] section entries to have the entries apply to only one language. The {language} constant returns the internal name of the selected language.

    + +
    Name: "en"
    +
    + + + +

    Specifies the name(s) of the .isl file(s) to read the default messages from. The file(s) must be located in your installation's source directory when running the compiler, unless a fully qualified pathname is specified or the pathname is prefixed by "compiler:", in which case it looks for the file in the compiler directory.

    +

    Each message file may contain a [LangOptions] section, a [Messages] section, and a [CustomMessages] section.

    +

    When multiple files are specified, they are read in the order they are specified, thus the last message file overrides any language options or messages from previous files. Any language options or messages in the main script override the ones from message files.

    +

    If an Unicode file is used, it must be UTF-8 encoded.

    + +
    +MessagesFile: "compiler:Dutch.isl"
    +MessagesFile: "compiler:Default.isl,compiler:MyMessages.isl"
    +
    +
    + + + +

    Specifies the name of an optional license agreement file, in .txt or .rtf (rich text) format, which is displayed before the user selects the destination directory for the program. This file must be located in your installation's source directory when running the compiler, unless a fully qualified pathname is specified or the pathname is prefixed by "compiler:", in which case it looks for the file in the compiler directory.

    +

    If an Unicode .txt file is used, it must be UTF-8 (with or without a BOM) or UTF-16LE encoded.

    + +
    LicenseFile: "license-Dutch.txt"
    +
    + + + +

    Specifies the name of an optional "readme" file, in .txt or .rtf (rich text) format, which is displayed before the user selects the destination directory for the program. This file must be located in your installation's source directory when running the compiler, unless a fully qualified pathname is specified or the pathname is prefixed by "compiler:", in which case it looks for the file in the compiler directory.

    +

    If an Unicode .txt file is used, it must be UTF-8 (with or without a BOM) or UTF-16LE encoded.

    + +
    InfoBeforeFile: "infobefore-Dutch.txt"
    +
    + + + +

    Specifies the name of an optional "readme" file, in .txt or .rtf (rich text) format, which is displayed after a successful install. This file must be located in your installation's source directory when running the compiler, unless a fully qualified pathname is specified or the pathname is prefixed by "compiler:", in which case it looks for the file in the compiler directory.

    +

    This differs from isreadme files in that this text is displayed as a page of the wizard, instead of in a separate Notepad window.

    +

    If an Unicode .txt file is used, it must be UTF-8 (with or without a BOM) or UTF-16LE encoded.

    + +
    InfoAfterFile: "infoafter-Dutch.txt"
    +
    + + +
    + + +
    + + + + + + + + + + + +

    A [Messages] section is used to define the messages displayed by the Setup program and uninstaller. Normally, you need not create a [Messages] section in your script file, since all messages are, by default, pulled in from the file Default.isl included with Inno Setup (or whichever file is specified by a [Languages] section entry).

    + +

    However, particular messages can be overridden by creating a [Messages] section in your script file. To do this, first you will need to know the ID of the message you want to change. This can be easily found by searching Default.isl. For example, say you wanted to change the "&Next" button on the wizard to read "&Forward". The ID of this message is "ButtonNext", so you would create a [Messages] section like this:

    + + +[Messages] +ButtonNext=&Forward + + +

    Some messages take arguments such as %1 and %2. You can rearrange the order of the arguments (i.e. move the %2 before a %1) and also duplicate arguments if needed (i.e. "%1 ... %1 %2"). On messages with arguments, use two consecutive "%" characters to embed a single "%". "%n" creates a line break.

    + +

    If you wish to translate all of Inno Setup's text to another language, instead of modifying Default.isl or overriding each message in every script you create, make a copy of Default.isl with another name like MyTranslation.isl. On any installation you wish to use MyTranslation.isl, create a [Languages] section entry pointing to the file.

    + +

    In cases where there are multiple [Languages] section entries, specifying a [Messages] section entry in your script (as opposed to an .isl file) will by default override that message for all languages. To apply a [Messages] section entry to only one language, prefix it with the language's internal name followed by a period. For example:

    + + +en.ButtonNext=&Forward + + +

    If a message is missing or not recognized for a language, the compiler will warn you about this, which can be disabled using MissingMessagesWarning and NotRecognizedMessagesWarning.

    + +Special-purpose messages + +

    The BeveledLabel message can be used to specify a line of text that is shown in the lower left corner of the wizard window and uninstaller window. The following is an example:

    + + +[Messages] +BeveledLabel=Inno Setup + + +

    The HelpTextNote message can be used to specify one or more lines of text that are added to the list of parameters in the summary shown when passing /HELP on the command line. The following is an example:

    + + +[Messages] +HelpTextNote=/PORTABLE=1%nEnable portable mode. + + +

    These special-purpose messages default to an empty string so make sure to provide a non-empty default for all languages from your main script if you want to use these messages.

    + + +
    + + + + + + + + +

    A [CustomMessages] section is used to define the custom message values for {cm:...} constants. See the Constants documentation for more information.

    + +

    An example of a task with a description taken from the [CustomMessages] section using a {cm:...} constant:

    + + +[CustomMessages] +CreateDesktopIcon=Create a &desktop icon + +[Tasks] +Name: desktopicon; Description: "{cm:CreateDesktopIcon}" + + +

    Messages may take arguments, from %1 up to %9. You can rearrange the order of the arguments (i.e. move the %2 before a %1) and also duplicate arguments if needed (i.e. "%1 ... %1 %2"). On messages with arguments, use two consecutive "%" characters to embed a single "%". "%n" creates a line break.

    + +

    In cases where there are multiple [Languages] section entries, specifying a [CustomMessages] section entry in your script (as opposed to an .isl file) will by default override that message for all languages. To apply a [CustomMessages] section entry to only one language, prefix it with the language's internal name followed by a period. For example:

    + + +nl.CreateDesktopIcon=Maak een snelkoppeling op het &bureaublad + + +

    Currently, the .isl files for all languages that come with Inno Setup have the following custom messages defined and translated for each language (shown here with their English values):

    + + +NameAndVersion=%1 version %2 +AdditionalIcons=Additional icons: +CreateDesktopIcon=Create a &desktop icon +CreateQuickLaunchIcon=Create a &Quick Launch icon +ProgramOnTheWeb=%1 on the Web +UninstallProgram=Uninstall %1 +LaunchProgram=Launch %1 +AssocFileExtension=&Associate %1 with the %2 file extension +AssocingFileExtension=Associating %1 with the %2 file extension... +AutoStartProgramGroupDescription=Startup: +AutoStartProgram=Automatically start %1 +AddonHostProgramNotFound=%1 could not be located in the folder you selected.%n%nDo you want to continue anyway? + + +

    You may use these predefined custom messages in your own script. An example which uses UninstallProgram:

    + + +[Icons] +Name: "{group}\{cm:UninstallProgram,My Program}"; Filename: "{uninstallexe}" + + + +
    + + + + + + + + + + + + + + + + + + + + + + +

    A [LangOptions] section is used to define the language-specific settings, such as fonts, used by the Setup program and uninstaller. Normally, you need not create a [LangOptions] section in your script file, since the language-specific settings are, by default, pulled in from the file Default.isl included with Inno Setup (or whichever file is specified by a [Languages] section entry).

    + +

    The following is an example of a [LangOptions] section. (The settings listed below are the defaults.)

    + + +[LangOptions] +LanguageName=English +LanguageID=$0409 +LanguageCodePage=0 +DialogFontName= +DialogFontSize=8 +WelcomeFontName=Verdana +WelcomeFontSize=12 +TitleFontName=Arial +TitleFontSize=29 +CopyrightFontName=Arial +CopyrightFontSize=8 +RightToLeft=no + + +

    LanguageName is the native name of the language (so not the English name). It is displayed in the list of available languages on the Select Language dialog in a multilingual installation.

    + +

    LanguageID is the numeric "language identifier" of the language. Refer to the list of valid language identifiers on MSDN. This, along with LanguageCodePage, is used for the purpose of auto-detecting the most appropriate language to use by default, so be sure it is set correctly. It should always begin with a "$" sign, since language identifiers are in hexadecimal. If no language identifier currently exists for the language, set this to zero.

    + +

    LanguageCodePage specifies the "code page" (character set) used by the compiler to convert any ASCII text in the language's files to Unicode text. Note that any text in the .iss file such as a [CustomMessages] entry for the language is never converted and should be in Unicode already.
    +If no code page currently exists for the language, set LanguageCodePage to zero and only use Unicode text (UTF-8) in the languages's files.
    +If LanguageCodePage is set to zero but ASCII text is used in one of the language's files, the system code page will be used to convert the text in the file to Unicode.

    + +

    DialogFontName and DialogFontSize specify the font name and point size to use in dialogs. If no DialogFontName setting is present, then the value of the DefaultDialogFontName [Setup] section directive is used for the font name. If the specified font name does not exist on the user's system or is an empty string, 8-point Microsoft Sans Serif or MS Sans Serif will be substituted.

    + +

    WelcomeFontName and WelcomeFontSize specify the font name and point size to use at the top of the Welcome and Setup Completed wizard pages. If the specified font name does not exist on the user's system or is an empty string, 12-point Microsoft Sans Serif or MS Sans Serif will be substituted.

    + +

    TitleFontName and TitleFontSize specify the font name and point size to use when displaying the application name on the background window (only visible when WindowVisible=yes). If the specified font name does not exist on the user's system, 29-point Arial will be substituted. If the specified font name is an empty string, 29-point Microsoft Sans Serif or MS Sans Serif will be substituted.

    + +

    CopyrightFontName and CopyrightFontSize specify the font name and point size to use when displaying the AppCopyright message on the background window (only visible when WindowVisible=yes). If the specified font name does not exist on the user's system, 8-point Arial will be substituted. If the specified font name is an empty string, 8-point Microsoft Sans Serif or MS Sans Serif will be substituted.

    + +

    RightToLeft specifies whether the language is written from right to left. If set to yes, text alignment and reading order will be reversed (with some intentional exceptions), and controls will be arranged from right to left ("flipped").

    + +


    +In cases where there are multiple [Languages] section entries, specifying a [LangOptions] section directive in your script (as opposed to an .isl file) will by default override that directive for all languages. To apply a [LangOptions] section directive to only one language, prefix it with the language's internal name followed by a period. For example:

    + + +en.LanguageName=English + + + +
    + + + + + + + + + + + + + + + + + + + + +

    This optional section defines any registry keys/values you would like Setup to create, modify, or delete on the user's system.

    + +

    By default, registry keys and values created by Setup are not deleted at uninstall time. If you want the uninstaller to delete keys or values, you must include one of the uninsdelete* flags described below.

    + +

    The following is an example of a [Registry] section.

    + + +[Registry] +Root: HKLM; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty +Root: HKLM; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey +Root: HKLM; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}" + + +

    The following is a list of the supported parameters:

    + + + + +

    The root key. This must be one of the following values:

    + + + + + + + +
    HKCU(HKEY_CURRENT_USER)
    HKLM(HKEY_LOCAL_MACHINE)
    HKCR(HKEY_CLASSES_ROOT)
    HKU(HKEY_USERS)
    HKCC(HKEY_CURRENT_CONFIG)
    +
    +

    Additionally one special value is allowed:

    + + + +
    HKA(equals HKLM in administrative install mode, HKCU otherwise)
    +
    +

    HKCU and HKA should only be used for settings which are compatible with roaming profiles.

    +

    Using HKCR is not recommended, use HKA with the Subkey parameter set to "Software\Classes" instead.

    +

    The values (including HKA) may have a suffix of 32 or 64. Root key values with a suffix of 32 (for example, HKLM32) map to the 32-bit view of the registry; root key values with a suffix of 64 (for example, HKLM64) map to the 64-bit view of the registry.

    +

    Root key values with a suffix of 64 can only be used when Setup is running on 64-bit Windows, otherwise an error will occur. On an installation supporting both 32- and 64-bit architectures, it is possible to avoid the error by adding a Check: IsWin64 parameter, which will cause the entry to be silently skipped when running on 32-bit Windows.

    +

    A root key value without a suffix (for example, HKLM) is equivalent to the value with a suffix of 32 (for example, HKLM32) unless the install is running in 64-bit install mode, in which case it is equivalent to the value with a suffix of 64 (for example, HKLM64).

    + +
    Root: HKLM
    +
    + + + +

    The subkey name, which can include constants.

    + +
    Subkey: "Software\My Company\My Program"
    +
    + + + +

    The data type of the value. This must be one of the following:

    +

    +none
    +string
    +expandsz
    +multisz
    +dword
    +qword
    +binary

    +

    If none (the default setting) is specified, Setup will create the key but not a value. In this case the ValueData parameter is ignored.
    +If string is specified, Setup will create a string (REG_SZ) value.
    +If expandsz is specified, Setup will create an expand-string (REG_EXPAND_SZ) value.
    +If multisz is specified, Setup will create an multi-string (REG_MULTI_SZ) value.
    +If dword is specified, Setup will create a 32-bit integer (REG_DWORD) value.
    +If qword is specified, Setup will create a 64-bit integer (REG_QWORD) value.
    +If binary is specified, Setup will create a binary (REG_BINARY) value.

    + +
    ValueType: string
    +
    + + + +

    The name of the value to modify, which can include constants. If this is blank, it will modify the "Default" value.

    + +
    ValueName: "Version"
    +
    + + + +

    The data for the value. If the ValueType parameter is string, expandsz, or multisz, this is a string that can include constants. If the data type is dword or qword, this can be a decimal integer (e.g. "123"), a hexadecimal integer (e.g. "$7B"), or a constant which resolves to an integer. If the data type is binary, this is a sequence of hexadecimal bytes in the form: "00 ff 12 34". If the data type is none, this is ignored.

    +

    On a string, expandsz, or multisz type value, you may use a special constant called {olddata} in this parameter. {olddata} is replaced with the previous data of the registry value. The {olddata} constant can be useful if you need to append a string to an existing value, for example, {olddata};{app}. If the value does not exist or the existing value isn't a string type, the {olddata} constant is silently removed. {olddata} will also be silently removed if the value being created is a multisz type but the existing value is not a multi-string type (i.e. it's REG_SZ or REG_EXPAND_SZ), and vice versa.

    +

    On a multisz type value, you may use a special constant called {break} in this parameter to embed line breaks (nulls).

    + +
    ValueData: "1.0"
    +
    + + + +

    Specifies additional permissions to grant in the registry key's ACL (access control list). It is not recommended that you use this parameter if you aren't familiar with ACLs or why you would need to change them, because misusing it could negatively impact system security.

    +

    For this parameter to have an effect the current user must be able to change the permissions on the registry key. In the event these conditions are not met, no error message will be displayed, and the permissions will not be set.

    +

    This parameter should only be used on registry keys private to your application. Never change the ACLs on a top-level key like HKEY_LOCAL_MACHINE\SOFTWARE, otherwise you can open up security holes on your users' systems.

    +

    The specified permissions are set regardless of whether the registry key existed prior to installation. The permissions are not set if ValueType is none and the deletekey flag or deletevalue flag is used.

    +

    This parameter can include one or more space separated values in the format:

    +

    <user or group identifier>-<access type>

    +

    The following access types are supported for the [Registry] section:

    + + +

    Grants "Full Control" permission, which is the same as modify (see below), but additionally allows the specified user/group to take ownership of the registry key and change its permissions. Use sparingly; generally, modify is sufficient.

    +
    + +

    Grants "Modify" permission, which allows the specified user/group to read, create, modify, and delete values and subkeys.

    +
    + +

    Grants "Read" permission, which allows the specified user/group to read values and subkeys.

    +
    +
    + +
    Permissions: users-modify
    +
    + + + +

    This parameter is a set of extra options. Multiple options may be used by separating them by spaces. The following options are supported:

    + + + +

    When this flag is specified, Setup will create the value only if a value of the same name doesn't already exist. This flag has no effect if the data type is none, or if you specify the deletevalue flag.

    +
    + +

    When this flag is specified, Setup will first try deleting the entire key if it exists, including all values and subkeys in it. If ValueType is not none, it will then create a new key and value.

    +

    To prevent disasters, this flag is ignored during installation if Subkey is blank or contains only backslashes.

    +
    + +

    When this flag is specified, Setup will first try deleting the value if it exists. If ValueType is not none, it will then create the key if it didn't already exist, and the new value.

    +
    + +

    When this flag is specified, Setup will not attempt to create the key or any value if the key did not already exist on the user's system. No error message is displayed if the key does not exist.

    +

    Typically this flag is used in combination with the uninsdeletekey flag, for deleting keys during uninstallation but not creating them during installation.

    +
    + +

    Don't display an error message if Setup fails to create the key or value for any reason.

    +
    + +

    This is only applicable when the ValueType parameter is string or expandsz. When this flag is specified and the value did not already exist or the existing value isn't a string type (REG_SZ or REG_EXPAND_SZ), it will be created with the type specified by ValueType. If the value did exist and is a string type, it will be replaced with the same value type as the pre-existing value.

    +
    + +

    When the program is uninstalled, set the value's data to a null string (type REG_SZ). This flag cannot be combined with the uninsdeletekey flag.

    +
    + +

    When the program is uninstalled, delete the entire key, including all values and subkeys in it. It obviously wouldn't be a good idea to use this on a key that is used by Windows itself. You should only use this on keys private to your application.

    +

    To prevent disasters, this flag is ignored during installation if Subkey is blank or contains only backslashes.

    +
    + +

    When the program is uninstalled, delete the key if it has no values or subkeys left in it. This flag can be combined with uninsdeletevalue.

    +

    To prevent disasters, this flag is ignored during installation if Subkey is blank or contains only backslashes.

    +
    + +

    Delete the value when the program is uninstalled. This flag can be combined with uninsdeletekeyifempty.

    +

    NOTE: In Inno Setup versions prior to 1.1, you could use this flag along with the data type none and it would function as a "delete key if empty" flag. This technique is no longer supported. You must now use the uninsdeletekeyifempty flag to accomplish this.

    +
    +
    + + +
    Flags: uninsdeletevalue
    +
    + + + +
    + +

    Components and Tasks Parameters

    + +

    Common Parameters

    + + +
    + + + + + + + + + + +

    The [Run] section is optional, and specifies any number of programs to execute after the program has been successfully installed, but before the Setup program displays the final dialog. The [UninstallRun] section is optional as well, and specifies any number of programs to execute as the first step of uninstallation. Both sections share an identical syntax, except where otherwise noted below.

    + +

    Programs are executed in the order they appear in the script. By default, when processing a [Run]/[UninstallRun] entry, Setup/Uninstall will wait until the program has terminated before proceeding to the next one, unless the nowait, shellexec, or waituntilidle flags are used.

    + +

    Note that by default, if a program executed in the [Run] section queues files to be replaced on the next reboot (by calling MoveFileEx or by modifying wininit.ini), Setup will detect this and prompt the user to restart the computer at the end of installation. If you don't want this, set the RestartIfNeededByRun directive to no.

    + +

    The following is an example of a [Run] section.

    + + +[Run] +Filename: "{app}\INIT.EXE"; Parameters: "/x" +Filename: "{app}\README.TXT"; Description: "View the README file"; Flags: postinstall shellexec skipifsilent +Filename: "{app}\MYPROG.EXE"; Description: "Launch application"; Flags: postinstall nowait skipifsilent unchecked + + +

    The following is a list of the supported parameters:

    + + + + +

    The program to execute, or file/folder to open. If Filename is not an executable (.exe or .com) or batch file (.bat or .cmd), you must use the shellexec flag on the entry. This parameter can include constants.

    + +
    Filename: "{app}\INIT.EXE"
    +
    + + + +

    Valid only in a [Run] section. The description of the entry, which can include constants. This description is used for entries with the postinstall flag. If the description is not specified for an entry, Setup will use a default description. This description depends on the type of the entry (normal or shellexec).

    + +
    Description: "View the README file"
    +
    + + + +

    Optional command line parameters for the program, which can include constants.

    + +
    Parameters: "/x"
    +
    + + + +

    The initial current directory for the program. If this parameter is not specified or is blank, it uses the directory from the Filename parameter; if Filename does not include a path, it will use a default directory. This parameter can include constants.

    + +
    WorkingDir: "{app}"
    +
    + + + +

    Valid only in a [Run] section. Determines the message displayed on the wizard while the program is executed. If this parameter is not specified or is blank, a default message of "Finishing installation..." will be used. This parameter can include constants.

    + +
    StatusMsg: "Installing BDE..."
    +
    + + + +

    Valid only in an [UninstallRun] section. If the same application is installed more than once, "run" entries will be duplicated in the uninstall log file. By assigning a string to RunOnceId, you can ensure that a particular [UninstallRun] entry will only be executed once during uninstallation. For example, if two or more "run" entries in the uninstall log have a RunOnceId setting of "DelService", only the latest entry with a RunOnceId setting of "DelService" will be executed; the rest will be ignored. Note that RunOnceId comparisons are case-sensitive. If you don't assign a string to RunOnceId, the compiler will warn you about this, which can be disabled using MissingRunOnceIdsWarning.

    + +
    RunOnceId: "DelService"
    +
    + + + +

    Specifies the action to be performed on the file. Must be combined with the shellexec flag. Commonly available verbs include "open" and "print". If this parameter is not specified or is blank, the default verb for the file type will be used (typically "open").

    + +
    Verb: "print"
    +
    + + + +

    This parameter is a set of extra options. Multiple options may be used by separating them by spaces. The following options are supported:

    + + + +

    Causes the {sys} constant to map to the 32-bit System directory when used in the Filename and WorkingDir parameters. This is the default behavior in 32-bit install mode.

    +

    This flag cannot be combined with the shellexec flag.

    +
    + +

    Causes the {sys} constant to map to the 64-bit System directory when used in the Filename and WorkingDir parameters. This is the default behavior in 64-bit install mode install.

    +

    This flag can only be used when Setup is running on 64-bit Windows, otherwise an error will occur. On an installation supporting both 32- and 64-bit architectures, it is possible to avoid the error by adding a Check: IsWin64 parameter, which will cause the entry to be silently skipped when running on 32-bit Windows.

    +

    This flag cannot be combined with the shellexec flag.

    +
    + +

    If this flag is specified, the command line parameters for the program will not be included in the log file.

    +
    + +

    If this flag is specified, the wizard will be hidden while the program is running.

    +
    + +

    If this flag is specified, the output of the program will be included in the log file.

    +

    This flag cannot be combined with the nowait, runasoriginaluser, shellexec, and waituntilidle flags.

    +
    + +

    If this flag is specified, it will not wait for the process to finish executing before proceeding to the next [Run] entry, or completing Setup. Cannot be combined with waituntilidle or waituntilterminated.

    +
    + +

    Valid only in a [Run] section. Instructs Setup to create a checkbox on the Setup Completed wizard page. The user can uncheck or check this checkbox and thereby choose whether this entry should be processed or not. Previously this flag was called showcheckbox.

    +

    If Setup has to restart the user's computer (as a result of installing a file with the flag restartreplace or if the AlwaysRestart [Setup] section directive is yes), there will not be an opportunity for the checkbox to be displayed and therefore the entry will never be processed.

    +

    The isreadme flag for entries in the [Files] section is now obsolete. If the compiler detects a entry with an isreadme flag, it strips the isreadme flag from the [Files] entry and inserts a generated [Run] entry at the head of the list of [Run] entries. This generated [Run] entry runs the README file and has flags shellexec, skipifdoesntexist, postinstall and skipifsilent.

    +
    + +

    If this flag is specified, the spawned process will inherit Setup/Uninstall's user credentials (typically, full administrative privileges).

    +

    This is the default behavior when the postinstall flag is not used.

    +

    This flag cannot be combined with the runasoriginaluser flag.

    +
    + +

    Valid only in a [Run] section. If this flag is specified, the spawned process will execute with the (normally non-elevated) credentials of the user that started Setup initially (i.e., the "pre-UAC dialog" credentials).

    +

    This is the default behavior when the postinstall flag is used.

    +

    If a user launches Setup by right-clicking its EXE file and selecting "Run as administrator", then this flag, unfortunately, will have no effect, because Setup has no opportunity to run any code with the original user credentials. The same is true if Setup is launched from an already-elevated process. Note, however, that this is not an Inno Setup-specific limitation; Windows Installer-based installers cannot return to the original user credentials either in such cases.

    +

    This flag cannot be combined with the runascurrentuser flag.

    +
    + +

    If this flag is specified, it will launch the program in a hidden window. Never use this flag when executing a program that may prompt for user input.

    +
    + +

    If this flag is specified, it will launch the program or document in a maximized window.

    +
    + +

    If this flag is specified, it will launch the program or document in a minimized window.

    +
    + +

    This flag is required if Filename is not a directly executable file (an .exe or .com file). When this flag is set, Filename can be a folder or any registered file type -- including .chm, .doc, and so on. The file will be opened with the application associated with the file type on the user's system, the same way it would be if the user double-clicked the file in Explorer.

    +

    By default, when the shellexec flag is used it will not wait until the spawned process terminates. If you need that, you must add the flag waituntilterminated. Note that it cannot and will not wait if a new process isn't spawned -- for example, if Filename specifies a folder.

    +
    + +

    If this flag is specified in the [Run] section, Setup won't display an error message if Filename doesn't exist.

    +

    If this flag is specified in the [UninstallRun] section, the uninstaller won't display the "some elements could not be removed" warning if Filename doesn't exist.

    +

    When this flag is used, Filename must be an absolute path.

    +
    + +

    Valid only in a [Run] section. Instructs Setup to skip this entry if Setup is not running (very) silent.

    +
    + +

    Valid only in a [Run] section. Instructs Setup to skip this entry if Setup is running (very) silent.

    +
    + +

    Valid only in a [Run] section. Instructs Setup to initially uncheck the checkbox. The user can still check the checkbox if they wishes to process the entry. This flag is ignored if the postinstall flag isn't also specified.

    +
    + +

    If this flag is specified, it will wait until the process is waiting for user input with no input pending, instead of waiting for the process to terminate. (This calls the WaitForInputIdle Win32 function.) Cannot be combined with nowait or waituntilterminated.

    +
    + +

    If this flag is specified, it will wait until the process has completely terminated. Note that this is the default behavior (i.e. you don't need to specify this flag) unless you're using shellexec flag, in which case you do need to specify this flag if you want it to wait. Cannot be combined with nowait or waituntilidle.

    +
    +
    + + +
    Flags: postinstall nowait skipifsilent
    +
    + + + +
    + +

    Components and Tasks Parameters

    + +

    Common Parameters

    + + +
    + + + + + + + + +

    This optional section defines any additional files or directories you want the uninstaller to delete, besides those that were installed/created using [Files] or [Dirs] section entries. Deleting .INI files created by your application is one common use for this section. The uninstaller processes these entries as the last step of uninstallation.

    + +

    Here is an example of a [UninstallDelete] section:

    + + +[UninstallDelete] +Type: files; Name: "{win}\MYPROG.INI" + + +

    The following is a list of the supported parameters:

    + + + + +

    Specifies what is to be deleted by the uninstaller. This must be one of the following:

    + + +

    The Name parameter specifies a name of a particular file, or a filename with wildcards.

    +
    + +

    Functions the same as files except it matches directory names also, and any directories matching the name are deleted including all files and subdirectories in them.

    +
    + +

    When this is used, the Name parameter must be the name of a directory, but it cannot include wildcards. The directory will only be deleted if it contains no files or subdirectories.

    +
    +
    + +
    Type: files
    +
    + + + +

    Name of the file or directory to delete.

    +

    NOTE: Don't be tempted to use a wildcard here to delete all files in the {app} directory. Doing this is strongly recommend against for two reasons. First, users usually don't appreciate having their data files they put in the application directory deleted without warning (they might only be uninstalling it because they want to move it to a different drive, for example). It's better to leave it up to the end users to manually remove them if they want. Also, if the user happened to install the program in the wrong directory by mistake (for example, C:\WINDOWS) and then went to uninstall it there could be disastrous consequences. So again, DON'T DO THIS!

    + +
    Name: "{win}\MYPROG.INI"
    +
    + + +
    + +

    Components and Tasks Parameters

    + +

    Common Parameters

    + + +
    + + + + + + + +

    The Inno Setup Example Scripts are located in a separate folder. Please click the "Inno Setup Example Scripts" shortcut created in the Start Menu when you installed Inno Setup, or open the "Examples" folder in your Inno Setup directory.

    + + +
    + + + + + + + +

    Prior to Inno Setup 6 two versions of Inno Setup were available: Non Unicode Inno Setup and Unicode Inno Setup. Starting with Inno Setup 6 there's only one version available: Unicode Inno Setup.

    +

    Key features of Unicode Inno Setup are its ability to display any language on any system regardless of the system code page, and its ability to work with Unicode filenames.

    +

    If you don't remember which version you installed, click the "Inno Setup Compiler" shortcut created in the Start Menu. If the version number displayed in its title bar says "(a)" you are running Non Unicode Inno Setup. Otherwise you are running Unicode Inno Setup.

    +

    For the most part the two versions are used identically, and any differences between them are noted throughout the help file. However, the following overview lists the primary differences:

    +
      +
    • Unicode Inno Setup supports UTF-8 encoded .iss and .isl files. Starting with Inno Setup 6.3, a BOM is no longer required. UTF-16 is not supported.
    • +
    • Any existing ANSI .isl language files are automatically converted during compilation using the LanguageCodePage setting of the language.
    • +
    • Any [Messages] and [CustomMessages] entries in existing ANSI .iss script files must to be converted to Unicode manually if the language used a special LanguageCodePage.
    • +
    • Unicode Inno Setup supports UTF-8 and UTF-16LE encoded .txt files for LicenseFile, InfoBeforeFile, and InfoAfterFile. Starting with Inno Setup 6.3, a BOM is no longer required.
    • +
    • Any language specific plain text ANSI files used for LicenseFile, InfoBeforeFile, or InfoAfterFile are automatically converted during compilation using the LanguageCodePage setting of the language.
    • +
    • The [Setup] directive ShowUndisplayableLanguages is ignored by Unicode Inno Setup.
    • +
    • Existing installations of your programs done by non Unicode installers can be freely updated by Unicode installers, and vice versa.
    • +
    • Unicode Pascal Scripting notes: +
        +
      • The Unicode compiler sees type 'String' as a Unicode string, and 'Char' as a Unicode character. Its 'AnsiString' type hasn't changed and still is an ANSI string. Its 'PChar' type has been renamed to 'PAnsiChar'.
      • +
      • The Unicode compiler is more strict about correct ';' usage: it no longer accepts certain missing ';' characters.
      • +
      • Some support functions had their prototype changed: some parameters of CreateOutputMsgMemoPage, RegQueryBinaryValue, RegWriteBinaryValue, OemToCharBuff, CharToOemBuff, LoadStringFromfile, SaveStringToFile, and GetMD5OfString are of type AnsiString now instead of String.
      • +
      • Added new SaveStringsToUTF8File, and GetMD5OfUnicodeString support functions.
      • +
      • Added new 'Int64' type, supported by IntToStr. Also added new StrToInt64, StrToInt64Def, and GetSpaceOnDisk64 support functions.
      • +
      • Added new TStringStream class.
      • +
      • If you want to compile an existing script that imports ANSI Windows API calls with the Unicode compiler, either upgrade to the 'W' Unicode API call or change the parameters from 'String' or 'PChar' to 'AnsiString'. The 'AnsiString' approach will make your [Code] compatible with both the Unicode and the non Unicode version.
      • +
      +
    • +
    +

    Note: Unicode Inno Setup can only create Unicode installers and like wise the non Unicode version can only create non Unicode installers. If you want to be able to create both Unicode and non Unicode installers on one computer, you have to install both versions of Inno Setup into different folders.

    + + +
    + + + + + + + + + + + +

    The Frequently Asked Questions is now located in a separate document. Please click the "Inno Setup FAQ" shortcut created in the Start Menu when you installed Inno Setup, or open the "isfaq.url" file in your Inno Setup directory.

    + +

    For the most recent Frequently Asked Questions, go to https://jrsoftware.org/isfaq.php

    + + +
    + + + + + + + +

    Below is a list of all the wizard pages Setup may potentially display, and the conditions under which they are displayed.

    + +
      + +
    • +Welcome
      +Shown if DisableWelcomePage is set to no. +
    • + +
    • +License Agreement
      +Shown if LicenseFile is set. Users may proceed to the next page only if the option "I accept the agreement" is selected. +
    • + +
    • +Password
      +Shown if Password is set. Users may proceed to the next page only after entering the correct password. +
    • + +
    • +Information
      +Shown if InfoBeforeFile is set. +
    • + +
    • +User Information
      +Shown if UserInfoPage is set to yes. +
    • + +
    • +Select Destination Location
      +Shown if DisableDirPage is set to no or auto. +
    • + +
    • +Select Components
      +Shown if there are any [Components] entries. +
    • + +
    • +Select Start Menu Folder
      +Shown if there are any [Icons] entries and if DisableProgramGroupPage is set to no or auto. +
    • + +
    • +Select Tasks
      +Shown if there are any [Tasks] entries, unless the [Tasks] entries are all tied to components that were not selected on the Select Components page. +
    • + +
    • +Ready to Install
      +Shown by default, but can be disabled via DisableReadyPage. +
    • + +
    • +Preparing to Install
      +Normally, Setup will never stop or pause on this page. The only time it will is if Setup determines it can't continue or if it detects applications using files that need to be updated.

      +The former can happen if the PrepareToInstall event function returned an error or if one or more files specified in the [Files] and [InstallDelete] sections were queued (by some other installation) to be replaced or deleted on the next restart. In this case, it tells the user they need to restart their computer and then run Setup again. Note that this check is performed on silent installations too, but any messages are displayed in a message box instead of inside a wizard page.

      +The latter can happen if CloseApplications is set to yes or force. +
    • + +
    • +Installing
      +Shown during the actual installation process. +
    • + +
    • +Information
      +Shown if InfoAfterFile is set. +
    • + +
    • +Setup Completed
      +Shown by default, but can be disabled in some cases via DisableFinishedPage. +
    • + +
    + +

    See the AllPagesExample.iss example script for an example which shows all these pages.

    + + +
    + + + + + + + +

    Once the actual installation process begins, this is the order in which the various installation tasks are performed:

    + +
      + +
    • If CloseApplications was set to yes, Setup closes applications using files that need to be updated.
    • + +
    • [InstallDelete] is processed.
    • + +
    • The entries in [UninstallDelete] are stored in the uninstall log (which, at this stage, is stored in memory).
    • + +
    • The application directory is created, if necessary.
    • + +
    • [Dirs] is processed.
    • + +
    • A filename for the uninstall log is reserved, if necessary.
    • + +
    • [Files] is processed. (File registration does not happen yet.)
    • + +
    • [Icons] is processed.
    • + +
    • [INI] is processed.
    • + +
    • [Registry] is processed.
    • + +
    • Files that needed to be registered are now registered, unless the system needs to be restarted, in which case no files are registered until the system is restarted.
    • + +
    • The Add/Remove Programs entry for the program is created, if necessary.
    • + +
    • The entries in [UninstallRun] are stored in the uninstall log.
    • + +
    • The uninstaller EXE and log are finalized and saved to disk. After this is done, the user is forbidden from cancelling the install, and any subsequent errors will not cause what was installed before to be rolled back.
    • + +
    • [Run] is processed, except for entries with the postinstall flag, which get processed after the Setup Completed wizard page is shown.
    • + +
    • If RestartApplications was set to yes, Setup restarts closed applications which support being restarted.
    • + +
    • If ChangesAssociations was set to yes or to a scripted boolean expression evaluating to True, file associations are refreshed now.
    • + +
    • If ChangesEnvironment was set to yes or to a scripted boolean expression evaluating to True, other applications are notified at this point.
    • + +
    + +

    All entries are processed by the installer in the order they appear in a section.

    + +

    You can see the order yourself by loading a script into the Compiler IDE and pressing F7 (Step Into) repeatedly: each time Setup or Uninstall is about to process an entry the IDE will pause Setup or Uninstall and show you the entry.

    + +

    Changes are undone by the uninstaller in the opposite order in which the installer made them. This is because the uninstall log is parsed from end to beginning.

    + +

    In this example:

    + + +[INI] +Filename: "{win}\MYPROG.INI"; Section: "InstallSettings"; Flags: uninsdeletesectionifempty +Filename: "{win}\MYPROG.INI"; Section: "InstallSettings"; Key: "InstallPath"; String: "{app}"; Flags: uninsdeleteentry + + +

    the installer will first record the data for first entry's uninsdeletesectionifempty flag in the uninstall log, create the key of the second entry, and then record the data for the uninsdeleteentry flag in the uninstall log. When the program is uninstalled, the uninstaller will first process the uninsdeleteentry flag, deleting the entry, and then the uninsdeletesectionifempty flag, deleting the section.

    + +

    Note that the uninstaller processes [UninstallRun] and [UninstallDelete] entries in the same order they appear in the script (not in reverse order).

    + + +
    + + + + + + + + + +

    An installation can run in one of two modes: administrative or non administrative. Which mode is selected is specified by the PrivilegesRequired and PrivilegesRequiredOverridesAllowed [Setup] section directives.

    + +

    In administrative install mode:

    +
      +
    • The {group} folder is created in the All Users profile.
    • +
    • The "auto" form of the directory and Shell Folder constants is mapped to the "common" form.
    • +
    • The "user" form of these constants should NOT be used: user-level files and settings must be handled by the application itself, and never in an administrative install mode installer.
    • +
    • The HKA, uninstall info, and font install root keys will be HKEY_LOCAL_MACHINE.
    • +
    + +

    In non administrative install mode:

    +
      +
    • The {group} folder is created in the current user's profile.
    • +
    • The "auto" form of the directory and Shell Folder constants is mapped to the "user" form.
    • +
    • The HKA, uninstall info, and font install root keys will be HKEY_CURRENT_USER.
    • +
    + +

    Notes:

    +

    Regardless of the version of Windows, if the installation is running in administrative install mode then you should be careful about making any per-user area changes: user-level files and settings must be handled by the application itself, and never in an administrative install mode installer. The compiler will warn you about this, which can be disabled using UsedUserAreasWarning.

    +

    If the installation is running in non administrative install mode, but administrative privileges are available anyway then Setup or the [Code] section might still make use of these privileges. For this reason the uninstaller will always be marked as requiring administrative privileges in this case, just as if the installation was running in administrative install mode.

    + + +
    + + + + + + + + + +

    An installation can run in one of two modes: 32-bit or 64-bit. 64-bit install mode is selected if the user is running a 64-bit version of Windows and the system's processor architecture is included in the value of the ArchitecturesInstallIn64BitMode [Setup] section directive. Otherwise, 32-bit install mode is used.

    + +

    How do the two modes of installation differ? Primarily, the differences lie in where things are installed by default.

    + +

    In 32-bit install mode:

    + +
      +
    • The System32 path returned by the {sys} constant maps to the 32-bit System directory by default.
    • +
    • The {commonpf} constant is equivalent to {commonpf32}.
    • +
    • The {commoncf} constant is equivalent to {commoncf32}.
    • +
    • [Registry] writes to the 32-bit view by default.
    • +
    • The {reg:...} constant reads the 32-bit view by default.
    • +
    • The Reg* [Code] support functions access the 32-bit view by default.
    • +
    • The useapppaths flag of the [Icons] section reads the "App Paths" key in the 32-bit view of the registry.
    • +
    • The regserver and regtypelib flags of the [Files] section load and register files inside a 32-bit process by default.
    • +
    • The sharedfile flag of the [Files] section updates the "SharedDLLs" key in the 32-bit view of the registry by default.
    • +
    • The Uninstall key is created in the 32-bit view of the registry.
    • +
    + +

    In 64-bit install mode:

    + +
      +
    • The System32 path returned by the {sys} constant maps to the 64-bit System directory by default when used in the [Dirs], [Files], [InstallDelete], [Run], [UninstallDelete], and [UninstallRun] sections. This is because Setup/Uninstall temporarily disables WOW64 file system redirection when files/directories are accessed by those sections. Elsewhere, System32 and {sys} map to the 32-bit System directory, as is normal in a 32-bit process.
    • +
    • The {commonpf} constant is equivalent to {commonpf64}.
    • +
    • The {commoncf} constant is equivalent to {commoncf64}.
    • +
    • [Registry] writes to the 64-bit view by default.
    • +
    • The {reg:...} constant reads the 64-bit view by default.
    • +
    • The Reg* [Code] support functions access the 64-bit view by default.
    • +
    • The useapppaths flag of the [Icons] section reads the "App Paths" key in the 64-bit view of the registry.
    • +
    • The regserver and regtypelib flags of the [Files] section load and register files inside a 64-bit process by default.
    • +
    • The sharedfile flag of the [Files] section updates the "SharedDLLs" key in the 64-bit view of the registry by default.
    • +
    • The Uninstall key is created in the 64-bit view of the registry.
    • +
    + + +
    + + + + + + + + +

    Because Inno Setup is a 32-bit application, there are some limitations to be aware of when utilizing its 64-bit installation features:

    + +
      + +
    • The System32 path returned by the {sys} constant does not always map to the 64-bit System directory. When Setup/Uninstall is running in 64-bit install mode, it maps to the 64-bit System directory when used in the [Dirs], [Files], [InstallDelete], [Run], [UninstallDelete], and [UninstallRun] sections because Setup temporarily disables WOW64 file system redirection when files/directories are accessed by those sections. Elsewhere, System32 and {sys} map to the 32-bit System directory, as is normal in a 32-bit process.
    • + +
    • +

      In the [Code] section, when Setup/Uninstall is running in 64-bit install mode, functions that access files disable WOW64 file system redirection (unless overridden by a call to EnableFsRedirection). However, there are exceptions, listed below. These functions never disable file system redirection, meaning you cannot pass them (or get back) the name of a file located in the 64-bit System directory:

      + + + + + + + + + + +
      *Ini*(all of the functions that manipulate .INI files)
      BrowseForFolder
      CreateShellLink
      GetOpenFileName
      LoadDLL(see following point)
      ModifyPifFile
      SetCurrentDir
      ShellExec(use Exec instead)
      UnregisterFont
      +

      Additionally, no VCL classes are capable of disabling file system redirection. For example, you cannot call the LoadFromFile method of TBitmap to load a bitmap file from the 64-bit System directory.

      +
    • + +
    • You cannot load/use 64-bit DLLs in the [Code] section, because Windows does not allow 32-bit processes to load 64-bit DLLs (and vice versa). A 32-bit process can, however, launch 64-bit EXEs. Use the Exec function or the [Run] section to do that.
    • + +
    + + +
    + + + + + + + +
      + +
    • +

      To easily auto update your application, first make your application somehow detect a new version of your Setup.exe and make it locate or download this new version. Then, to auto update, start your Setup.exe from your application with for example the following command line:

      + + +/SP- /silent /noicons "/dir=expand:{autopf}\My Program" + + +

      After starting setup.exe, exit your application as soon as possible. Note that to avoid problems with updating your .exe, Setup has an auto retry feature.

      + +

      Optionally you could also use the skipifsilent and skipifnotsilent flags and make your application aware of a '/updated' parameter to for example show a nice message box to inform the user that the update has completed.

      +
    • + +
    • +

      Inno Setup's own installers accept an additional /PORTABLE=1 command line parameter to enable portable mode which causes the installers to install to the desktop by default and to not create an uninstaller nor an entry in the Add/Remove Programs Control Panel applet. For example:

      + + +/portable=1 /silent /currentuser + +
    • + +
    • The Inno Setup backup domain can be found at www.innosetup.nl. There's currently no website active on this domain but in case of emergencies it will be activated.
    • + +
    + + +
    + + + + + + + + +

    Besides the keyboard commands listed in the menus, the Compiler IDE supports the following additional keyboard commands:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Indent block.Tab
    Unindent block.Shift+Tab
    Delete to start of word.Ctrl+Backspace
    Delete to end of word.Ctrl+Delete
    Delete to start of line.Ctrl+Shift+Backspace
    Delete to end of line.Ctrl+Shift+Delete
    Go to start of document. Shift extends selection.Ctrl+Home
    Go to start of line.Alt+Home
    Go to end of document. Shift extends selection.Ctrl+End
    Go to end of line.Alt+End
    Scroll up.Ctrl+Up
    Scroll down.Ctrl+Down
    Cut line.Ctrl+L
    Copy line.Ctrl+Shift+T
    Delete line.Ctrl+Shift+L
    Switch line with previous.Ctrl+T
    Duplicate selection or line.Ctrl+D
    Go to previous paragraph. Shift extends selection.Ctrl+[
    Go to next paragraph. Shift extends selection.Ctrl+]
    Go to previous word. Shift extends selection.Ctrl+Left
    Go to next word. Shift extends selection.Ctrl+Right
    Go to previous word part. Shift extends selection.Ctrl+/
    Go to next word part. Shift extends selection.Ctrl+\
    Extend selection.Shift+Arrow
    Add additional selection.Ctrl+Click or Ctrl+Drag
    Perform rectangular block selection.Alt+Shift+Arrow or Alt+Drag
    Extend rectangular selection to start of caret's line.Alt+Shift+Home
    Extend rectangular selection to end of caret's line.Alt+Shift+End
    Revert multiple selections into a single one or a single selection into an empty one.Esc
    Complete word.Ctrl+Space or Ctrl+I or Alt+Right (the last only if the Delphi key map is not active; all only if there's only a single selection)
    Fillup complete word.Tab or Enter or Space (for ISPP directives) or \ (for constants) or : (for constants and section parameters) or ] (for sections) or = (for section directives).
    Cancel complete word.Esc
    Switch between the active memo and the active bottom pane.F6
    + + +
    + + + + + + + + + + +
      + +
    • +

      You can compile scripts from the command line using the console-mode compiler, ISCC.exe. Command line usage is as follows:

      + + +

      iscc [options] <script name>

      +

      Or to read from standard input:

      +

      iscc [options] -

      +iscc "c:\isetup\samples\my script.iss" +
      + +

      As shown in the example above, filenames that include spaces must be enclosed in quotes.

      + +

      Valid options are: "/O-" to disable output (overriding any Output setting in the script), "/O+" to enable output (overriding any Output setting in the script), "/O" to specify an output path (overriding any OutputDir setting in the script), "/F" to specify an output filename (overriding any OutputBaseFilename setting in the script), "/S" to specify a Sign Tool (any Sign Tools configured using the Compiler IDE will be specified automatically), "/Q[p]" for quiet compile (print only error messages, "p" will show progress info), and "/?" to show a help screen.

      + + +iscc /Qp /O"My Output" /F"MyProgram-1.0" /Sbyparam=$p "c:\isetup\samples\my script.iss" + + +

      ISCC will return an exit code of 0 if the compile was successful, 1 if the command line parameters were invalid or an internal error occurred, or 2 if the compile failed.

      +
    • + +
    • +

      Alternatively, scripts can also be compiled by the Compiler IDE from the command line. Command line usage is as follows:

      + + +

      compil32 /cc <script name>

      +compil32 /cc "c:\isetup\samples\my script.iss" +
      + +

      As shown in the example above, filenames that include spaces must be enclosed in quotes.

      + +

      Running the Compiler IDE from the command line does not suppress the normal progress display or any error messages. The Compiler IDE will return an exit code of 0 if the compile was successful, 1 if the command line parameters were invalid, or 2 if the compile failed.

      +
    • + +
    • +

      The Setup Script Wizard can be started from the command line. Command line usage is as follows:

      + + +

      compil32 /wizard <wizard name> <script name>

      +compil32 /wizard "MyProg Script Wizard" "c:\temp.iss" +
      + +

      As shown in the example above, wizard names and filenames that include spaces must be enclosed in quotes.

      + +

      Running the wizard from the command line does not suppress any error messages. The Setup Script Wizard will return an exit code of 0 if there was no error and additionally it will save the generated script file to the specified filename, 1 if the command line parameters were invalid, or 2 if the generated script file could not be saved. If the user cancelled the Setup Script Wizard, an exit code of 0 is returned and no script file is saved.

      +
    • + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    The Setup program accepts optional command line parameters. These can be useful to system administrators, and to other programs calling the Setup program.

    + +

    Also see Uninstaller Command Line Parameters.

    + +
    + +
    /HELP, /?
    +
    +

    Shows a summary of this information. Ignored if the UseSetupLdr [Setup] section directive was set to no.

    +
    + +
    /SP-
    +
    +

    Disables the This will install... Do you wish to continue? prompt at the beginning of Setup. Of course, this will have no effect if the DisableStartupPrompt [Setup] section directive was set to yes.

    +
    + +
    /SILENT, /VERYSILENT
    +
    +

    Instructs Setup to be silent or very silent. When Setup is silent the wizard and the background window are not displayed but the installation progress window is. When a setup is very silent this installation progress window is not displayed. Everything else is normal so for example error messages during installation are displayed and the startup prompt is (if you haven't disabled it with DisableStartupPrompt or the '/SP-' command line option explained above).

    +

    If a restart is necessary and the '/NORESTART' command isn't used (see below) and Setup is silent, it will display a Reboot now? message box. If it's very silent it will reboot without asking.

    +
    + +
    /SUPPRESSMSGBOXES
    +
    +

    Instructs Setup to suppress message boxes. Only has an effect when combined with '/SILENT' or '/VERYSILENT'.

    +

    The default response in situations where there's a choice is:

    +
      +
    • Yes in a 'Keep newer file?' situation.
    • +
    • No in a 'File exists, confirm overwrite.' situation.
    • +
    • Abort in Abort/Retry situations.
    • +
    • Cancel in Retry/Cancel situations.
    • +
    • Yes (=continue) in a DiskSpaceWarning/DirExists/DirDoesntExist/NoUninstallWarning/ExitSetupMessage/ConfirmUninstall situation.
    • +
    • Yes (=restart) in a FinishedRestartMessage/UninstalledAndNeedsRestart situation.
    • +
    • The recommended choice in a PrivilegesRequiredOverridesAllowed=dialog situation.
    • +
    +

    5 message boxes are not suppressible:

    +
      +
    • The About Setup message box.
    • +
    • The Exit Setup? message box.
    • +
    • The FileNotInDir2 message box displayed when Setup requires a new disk to be inserted and the disk was not found.
    • +
    • Any (error) message box displayed before Setup (or Uninstall) could read the command line parameters.
    • +
    • Any task dialog or message box displayed by [Code] support functions TaskDialogMsgBox and MsgBox.
    • +
    +
    + +
    /ALLUSERS
    +
    +

    Instructs Setup to install in administrative install mode. Only has an effect when the [Setup] section directive PrivilegesRequiredOverridesAllowed allows the commandline override.

    +
    + +
    /CURRENTUSER
    +
    +

    Instructs Setup to install in non administrative install mode. Only has an effect when the [Setup] section directive PrivilegesRequiredOverridesAllowed allows the commandline override.

    +
    + +
    /LOG
    +
    +

    Causes Setup to create a log file in the user's TEMP directory detailing file installation and [Run] actions taken during the installation process. This can be a helpful debugging aid. For example, if you suspect a file isn't being replaced when you believe it should be (or vice versa), the log file will tell you if the file was really skipped, and why.

    +

    The log file is created with a unique name based on the current date. (It will not overwrite or append to existing files.)

    +

    The information contained in the log file is technical in nature and therefore not intended to be understandable by end users. Nor is it designed to be machine-parsable; the format of the file is subject to change without notice.

    +
    + +
    /LOG="filename"
    +
    +

    Same as /LOG, except it allows you to specify a fixed path/filename to use for the log file. If a file with the specified name already exists it will be overwritten. If the file cannot be created, Setup will abort with an error message.

    +
    + +
    /NOCANCEL
    +
    +

    Prevents the user from cancelling during the installation process, by disabling the Cancel button and ignoring clicks on the close button. Useful along with '/SILENT' or '/VERYSILENT'.

    +
    + +
    /NORESTART
    +
    +

    Prevents Setup from restarting the system following a successful installation, or after a Preparing to Install failure that requests a restart. Typically used along with /SILENT or /VERYSILENT.

    +
    + +
    /RESTARTEXITCODE=exit code
    +
    +

    Specifies a custom exit code that Setup is to return when the system needs to be restarted following a successful installation. (By default, 0 is returned in this case.) Typically used along with /NORESTART. See also: Setup Exit Codes

    +
    + +
    /CLOSEAPPLICATIONS
    +
    +

    Instructs Setup to close applications using files that need to be updated by Setup if possible.

    +
    + +
    /NOCLOSEAPPLICATIONS
    +
    +

    Prevents Setup from closing applications using files that need to be updated by Setup. If /CLOSEAPPLICATIONS was also used, this command line parameter is ignored.

    +
    + +
    /FORCECLOSEAPPLICATIONS
    +
    +

    Instructs Setup to force close when closing applications.

    +
    + +
    /NOFORCECLOSEAPPLICATIONS
    +
    +

    Prevents Setup from force closing when closing applications. If /FORCECLOSEAPPLICATIONS was also used, this command line parameter is ignored.

    +
    + +
    /LOGCLOSEAPPLICATIONS
    +
    +

    Instructs Setup to create extra logging when closing applications for debugging purposes.

    +
    + +
    /RESTARTAPPLICATIONS
    +
    +

    Instructs Setup to restart applications if possible.

    +
    + +
    /NORESTARTAPPLICATIONS
    +
    +

    Prevents Setup from restarting applications. If /RESTARTAPPLICATIONS was also used, this command line parameter is ignored.

    +
    + +
    /LOADINF="filename"
    +
    +

    Instructs Setup to load the settings from the specified file after having checked the command line. This file can be prepared using the '/SAVEINF=' command as explained below.

    +

    Don't forget to use quotes if the filename contains spaces.

    +
    + +
    /SAVEINF="filename"
    +
    +

    Instructs Setup to save installation settings to the specified file.

    +

    Don't forget to use quotes if the filename contains spaces.

    +
    + +
    /LANG=language
    +
    +

    Specifies the language to use. language specifies the internal name of the language as specified in a [Languages] section entry.

    +

    When a valid /LANG parameter is used, the Select Language dialog will be suppressed.

    +
    + +
    /DIR="x:\dirname"
    +
    +

    Overrides the default directory name displayed on the Select Destination Location wizard page. A fully qualified pathname must be specified. May include an "expand:" prefix which instructs Setup to expand any constants in the name. For example: '/DIR=expand:{autopf}\My Program'.

    +
    + +
    /GROUP="folder name"
    +
    +

    Overrides the default folder name displayed on the Select Start Menu Folder wizard page. May include an "expand:" prefix, see '/DIR='. If the [Setup] section directive DisableProgramGroupPage was set to yes, this command line parameter is ignored.

    +
    + +
    /NOICONS
    +
    +

    Instructs Setup to initially check the Don't create a Start Menu folder check box on the Select Start Menu Folder wizard page.

    +
    + +
    /TYPE=type name
    +
    +

    Overrides the default setup type.

    +

    If the specified type exists and isn't a custom type, then any /COMPONENTS parameter will be ignored.

    +
    + +
    /COMPONENTS="comma separated list of component names"
    +
    +

    Overrides the default component settings. Using this command line parameter causes Setup to automatically select a custom type. If no custom type is defined, this parameter is ignored.

    +

    Only the specified components will be selected; the rest will be deselected.

    +

    If a component name is prefixed with a "*" character, any child components will be selected as well (except for those that include the dontinheritcheck flag). If a component name is prefixed with a "!" character, the component will be deselected.

    +

    This parameter does not change the state of components that include the fixed flag.

    + +Deselect all components, then select the "help" and "plugins" components:
    +/COMPONENTS="help,plugins" +
    + +Deselect all components, then select a parent component and all of its children with the exception of one:
    +/COMPONENTS="*parent,!parent\child" +
    +
    + +
    /TASKS="comma separated list of task names"
    +
    +

    Specifies a list of tasks that should be initially selected.

    +

    Only the specified tasks will be selected; the rest will be deselected. Use the /MERGETASKS parameter instead if you want to keep the default set of tasks and only select/deselect some of them.

    +

    If a task name is prefixed with a "*" character, any child tasks will be selected as well (except for those that include the dontinheritcheck flag). If a task name is prefixed with a "!" character, the task will be deselected.

    + +Deselect all tasks, then select the "desktopicon" and "fileassoc" tasks:
    +/TASKS="desktopicon,fileassoc" +
    + +Deselect all tasks, then select a parent task and all of its children with the exception of one:
    +/TASKS="*parent,!parent\child" +
    +
    + +
    /MERGETASKS="comma separated list of task names"
    +
    +

    Like the /TASKS parameter, except the specified tasks will be merged with the set of tasks that would have otherwise been selected by default.

    +

    If UsePreviousTasks is set to yes, the specified tasks will be selected/deselected after any previous tasks are restored.

    + +Keep the default set of selected tasks, but additionally select the "desktopicon" and "fileassoc" tasks:
    +/MERGETASKS="desktopicon,fileassoc" +
    + +Keep the default set of selected tasks, but deselect the "desktopicon" task:
    +/MERGETASKS="!desktopicon" +
    +
    + +
    /PASSWORD=password
    +
    +

    Specifies the password to use. If the [Setup] section directive Password was not set, this command line parameter is ignored.

    +

    When an invalid password is specified, this command line parameter is also ignored.

    +
    + +
    + + +
    + + + + + + + + + +

    The Setup program may return one of the following exit codes:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    0 +

    Setup was successfully run to completion or the /HELP or /? command line parameter was used.

    +
    1 +

    Setup failed to initialize.

    +
    2 +

    The user clicked Cancel in the wizard before the actual installation started, or chose "No" on the opening "This will install..." message box.

    +
    3 +

    A fatal error occurred while preparing to move to the next installation phase (for example, from displaying the pre-installation wizard pages to the actual installation process). This should never happen except under the most unusual of circumstances, such as running out of memory or Windows resources.

    +
    4 +

    A fatal error occurred during the actual installation process.

    +

    Note: Errors that cause an Abort-Retry-Ignore box to be displayed are not fatal errors. If the user chooses Abort at such a message box, exit code 5 will be returned.

    +
    5 +

    The user clicked Cancel during the actual installation process, or chose Abort at an Abort-Retry-Ignore box.

    +
    6 +

    The Setup process was forcefully terminated by the debugger (Run | Terminate was used in the Compiler IDE).

    +
    7 +

    The Preparing to Install stage determined that Setup cannot proceed with installation.

    +
    8 +

    The Preparing to Install stage determined that Setup cannot proceed with installation, and that the system needs to be restarted in order to correct the problem.

    +
    + +

    Before returning an exit code of 1, 3, 4, 7, or 8, an error message explaining the problem will normally be displayed.

    + +

    Future versions of Inno Setup may return additional exit codes, so applications checking the exit code should be programmed to handle unexpected exit codes gracefully. Any non-zero exit code indicates that Setup was not run to completion.

    + + +
    + + + + + + + + + + + + + + + + +

    The uninstaller program (unins???.exe) accepts optional command line parameters. These can be useful to system administrators, and to other programs calling the uninstaller program.

    + +

    Also see Setup Command Line Parameters.

    + +
    + +
    /SILENT, /VERYSILENT
    +
    +

    When specified, the uninstaller will not ask the user for startup confirmation or display a message stating that uninstall is complete. Shared files that are no longer in use are deleted automatically without prompting. Any critical error messages will still be shown on the screen. When '/VERYSILENT' is specified, the uninstallation progress window is not displayed.

    +

    If a restart is necessary and the '/NORESTART' command isn't used (see below) and '/VERYSILENT' is specified, the uninstaller will reboot without asking.

    +
    + +
    /SUPPRESSMSGBOXES
    +
    +

    Instructs the uninstaller to suppress message boxes. Only has an effect when combined with '/SILENT' and '/VERYSILENT'. See '/SUPPRESSMSGBOXES' under Setup Command Line Parameters for more details.

    +
    + +
    /LOG
    +
    +

    Causes Uninstall to create a log file in the user's TEMP directory detailing file uninstallation and [UninstallRun] actions taken during the uninstallation process. This can be a helpful debugging aid.

    +

    The log file is created with a unique name based on the current date. (It will not overwrite or append to existing files.)

    +

    The information contained in the log file is technical in nature and therefore not intended to be understandable by end users. Nor is it designed to be machine-parsable; the format of the file is subject to change without notice.

    +
    + +
    /LOG="filename"
    +
    +

    Same as /LOG, except it allows you to specify a fixed path/filename to use for the log file. If a file with the specified name already exists it will be overwritten. If the file cannot be created, Uninstall will abort with an error message.

    +
    + +
    /NORESTART
    +
    +

    Instructs the uninstaller not to reboot even if it's necessary.

    +
    + +
    + + +
    + + + + + + + + + +

    The uninstaller will return a non-zero exit code if the user cancels or a fatal error is encountered. Programs checking the exit code to detect failure should not check for a specific non-zero value; any non-zero exit code indicates that the uninstaller was not run to completion.

    + +

    Note that at the moment you get an exit code back from the uninstaller, some code related to uninstallation might still be running. Because Windows doesn't allow programs to delete their own EXEs, the uninstaller creates and spawns a copy of itself in the TEMP directory. This "clone" performs the actual uninstallation, and at the end, terminates the original uninstaller EXE (at which point you get an exit code back), deletes it, then displays the "uninstall complete" message box (if it hasn't been suppressed with /SILENT or /VERYSILENT).

    + + +
    + + + + + + + +

    As a convenience to new users who are unfamiliar with which files they should and should not distribute, the compiler will display an error message if one attempts to install certain "unsafe" files using the [Files] section. These files are listed below.

    + +

    (Note: It is possible to disable the error message by using a certain flag on the [Files] section entry, but this is NOT recommended.)

    + +
    + +
    Any DLL file from own Windows System directory
    +
    +

    You should not deploy any DLLs out of your own Windows System directory to {sys} because most of them are tailored for your own specific version of Windows, and will not work when installed on other versions. Often times a user's system will be rendered unbootable if you install a DLL from a different version of Windows. Another reason why it's a bad idea is that when you install programs on your computer, the DLLs may be replaced with different/incompatible versions without your knowledge. This could lead to unexpected and difficult-to-trace problems on users' systems when you build new installations.

    +

    Instead of deploying the DLLs from your Windows System directory, you should find versions that are specifically deemed "redistributable". Redistributable DLLs typically work on more than one version of Windows. To find redistributable versions of the Visual Basic and Visual C++ run-time DLLs, see the Inno Setup FAQ.

    +

    If you have a DLL residing in the Windows System directory that you are absolutely sure is redistributable, copy it to your script's source directory and deploy it from there instead.

    +
    + +
    ADVAPI32.DLL, COMDLG32.DLL, GDI32.DLL, KERNEL32.DLL, RICHED32.DLL, SHELL32.DLL, USER32.DLL, UXTHEME.DLL
    +
    +

    These are all core components of Windows and must never be deployed with an installation. Users may only get new versions of these DLLs by installing a new version of Windows or a service pack or hotfix for Windows.

    +
    + +
    (Special case) COMCAT.DLL, MSVBVM50.DLL, MSVBVM60.DLL, OLEAUT32.DLL, OLEPRO32.DLL, STDOLE2.TLB
    +
    +

    If DestDir is set to a location other than {sys} and the regserver or regtypelib flag is used, then the above files will be considered "unsafe". These files must never be deployed to and registered in a directory other than {sys} because doing so can potentially cause all programs on the system to use them in favor of the files in {sys}. Problems would result if your copies of the files are older than the ones in {sys}. Also, if your copies of the files were removed, other applications would break.

    +
    + +
    COMCTL32.DLL
    +
    +

    Microsoft does not allow separate redistribution of COMCTL32.DLL (and for good reason - the file differs between platforms), so you should never place COMCTL32.DLL in a script's [Files] section. You can however direct your users to download the COMCTL32 update from Microsoft, or distribute the COMCTL32 update along with your program.

    +
    + +
    SHDOCVW.DLL, SHLWAPI.DLL, URLMON.DLL, WININET.DLL
    +
    +

    These are core components of Internet Explorer and are also used by Windows Explorer. Replacing them may prevent Explorer from starting. If your application depends on these DLLs, or a recent version of them, then your users will need to install a recent version of Internet Explorer to get them.

    +
    + +
    MSCOREE.DLL
    +
    +

    This file is part of the Microsoft .NET Framework. You cannot safely install or update the .NET Framework by including this file with your installation. Call or direct your users to dotnetfx.exe instead.

    +
    + +
    + + +
    + + + + + + + + +

    Inno Setup was created by Jordan Russell and is currently maintained by Martijn Laan (since 5.4.3, released in 2011).

    + +

    The following is a list of those who have contributed significant code to the Inno Setup project, or otherwise deserve special recognition:

    + +
      + +
    • Jean-loup Gailly & Mark Adler: Creators of the zlib compression library that Inno Setup uses.
    • + +
    • Julian Seward: Creator of the bzlib compression library that Inno Setup uses.
    • + +
    • Igor Pavlov: Creator of the LZMA compression library that Inno Setup uses.
    • + +
    • Vince Valenti: Most of the code for the "Window" [Setup] section directives (1.12.4).
    • + +
    • Joe White: Code for ChangesAssociations [Setup] section directive (1.2).
    • + +
    • Jason Olsen: Most of the code for appending to existing uninstall logs (1.3).
    • + +
    • Martijn Laan: Rich Edit 2.0 & URL detection support (1.3.13); Silent uninstallation (1.3.25); System image list support in drive and directory lists (1.3.25); Silent installation (2.0); The [Types], [Components] and [Tasks] sections (2.0); The postinstall flag (2.0); The [Code] section (4.0); Subcomponents and subtasks support (4.0); Many other features after 4.0.
    • + +
    • Alex Yackimoff: Portions of TNewCheckListBox (4.0); ISPP (5.4.1).
    • + +
    • Carlo Kok: RemObjects Pascal Script (4.0).
    • + +
    • Creators of SynEdit: The syntax-highlighting editor used in the Compiler IDE (2.0 - 5.2.4).
    • + +
    • Creators of UniSynEdit: The syntax-highlighting editor used in the Compiler IDE (5.3 - 5.3.11).
    • + +
    • Creators of Scintilla: The syntax-highlighting editor used in the Compiler IDE (5.4).
    • + +
    • Zaher Dirkey: Initial work on improved right-to-left languages support (5.2.3).
    • + +
    • Evgeny Karpov of RemObjects Software: Initial work on Unicode support (5.3).
    • + +
    • Motaz Alnuweiri: 128x128 and 256x256 sizes of the Compiler IDE and document icons (5.5.3).
    • + +
    • DRON: Code for the improved image stretching (5.6).
    • + +
    • Sherlock Software: Most of the code for the CreateCallback support function (6.0).
    • + +
    • Vizit0r: Code for the "Debug Call Stack" view (6.0.3).
    • + +
    • Cristoph Nahr: Code for the .NET version detection (6.0.4).
    • + +
    • Sergii Leonov: Code for the Compiler IDE's MsgBox tool (6.1.0) and initial work on its [Registry] tool (6.3.0).
    • + +
    • Jens Geyer: Initial work on closeable tabs in the Compiler IDE (6.3.0).
    • + +
    • ser163: Code for the Compiler IDE's [Files] tool (6.3.0).
    • + +
    + +

    Special thanks to everyone answering questions on the forum and on Stack Overflow, especially: Gavin Lambert, Deanna Hants, Jernej Simončič, Martin Prikryl and TLama.

    + + +
    + + + + + + + +

    To support Inno Setup, go to this page:
    +https://jrsoftware.org/isdonate.php

    +

    Thank you in advance for your support!

    + + +
    + + + + +yes or no +yes + +

    This tells the compiler which type of Setup to create. If this is yes, it compiles all setup data into a single EXE. If this is no, it compiles the setup data into at least three files: setup.exe, setup-0.bin, and setup-1.bin. The only reason you would probably want to use no is for debugging purposes.

    +

    Note: Do not use UseSetupLdr=no on an installation which uses disk spanning (DiskSpanning=yes). When UseSetupLdr is yes, the setup program is copied to and run from the user's TEMP directory. This does not happen when UseSetupLdr is no, and could result in errors if Windows tries to locate the setup.exe file on the disk and can't find it because a different disk is in the drive.

    +

    Note: Do not use UseSetupLdr=no to avoid digital signature verification startup delays on a large Setup, use disk spanning instead. See SignTool for more information. Also note that digitally signing a UseSetupLdr=no based Setup will lead to an invalid digital signature for Uninstall.

    + +
    + + + +A value in the form of $bbggrr, where rr, gg, and bb specify the two-digit intensities (in hexadecimal) for red, green, and blue respectively. Or it may be one of the following predefined color names: clBlack, clMaroon, clGreen, clOlive, clNavy, clPurple, clTeal, clGray, clSilver, clRed, clLime, clYellow, clBlue, clFuchsia, clAqua, clWhite. +clBlue for BackColor,
    clBlack for BackColor2
    + +

    The BackColor directive specifies the color to use at the top (or left, if BackColorDirection=lefttoright) of the setup window's gradient background. BackColor2 specifies the color to use at the bottom (or right).

    +

    The setting of BackColor2 is ignored if BackSolid=yes.

    + +
    +BackColor=clBlue
    +BackColor2=clBlack
    +
    +BackColor=$FF0000
    +BackColor2=$000000
    +
    +
    + +
    + + +toptobottom or lefttoright +toptobottom + +

    This determines the direction of the gradient background on the setup window. If BackColorDirection is toptobottom, it is drawn from top to bottom; if it is lefttoright, it is drawn from left to right.

    + +
    + + +yes or no +no + +

    This specifies whether to use a solid or gradient background on the setup window. If this is yes, the background is a solid color (the color specified by BackColor; BackColor2 is ignored).

    + +
    + + + +

    This required directive specifies the name of the application being installed. Do not include the version number, as that is defined by the AppVersion and/or AppVerName directives. AppName is displayed throughout the Setup program and uninstaller in window titles, wizard pages, and dialog boxes. The value may include constants.

    +

    If DisableWelcomePage is set to yes (which it is by default) then AppVerName is displayed in window titles instead of AppName.

    +

    The value of this directive is also used as the default value for the AppId, VersionInfoDescription, and VersionInfoProductName directives if those are not specified.

    +
    AppName=My Program
    +

    See also:
    +AppVerName +

    + +
    + + + +

    This directive specifies the version number of the application being installed. The value of this directive, which may include constants, is used in the default value for the AppVerName directive, and is displayed in the Version field of the application's Add/Remove Programs entry. It is also used to set the MajorVersion and MinorVersion values in the Uninstall registry key when possible.

    +

    This directive is required and cannot be empty if the AppVerName directive is not set.

    +
    AppVersion=1.5
    + +
    + + +AppName version AppVersion, localized according to the active language's NameAndVersion custom message + +

    This directive specifies the name of the application plus its version number. The value of this directive is displayed on the Welcome page of Setup's wizard, and is used as the default title of the application's Add/Remove Programs entry (see UninstallDisplayName). The value may include constants.

    +

    If DisableWelcomePage is set to yes (which it is by default) then AppVerName is also displayed in window titles instead of AppName.

    +

    This directive is required if the AppVersion directive is not set.

    +
    +AppVerName=My Program 1.5
    +AppVerName=My Program version 1.5
    +AppVerName={cm:NameAndVersion,My Program,1.5}
    +
    +

    See also:
    +AppName +

    + +
    + + +AppName + +

    The value of AppId is stored inside uninstall log files (unins???.dat), and is checked by subsequent installations to determine whether it may append to a particular existing uninstall log. Setup will only append to an uninstall log if the AppId of the existing uninstall log is the same as the current installation's AppId. For a practical example, say you have two installations -- one entitled My Program and the other entitled My Program 1.1 Update. To get My Program 1.1 Update to append to My Program's uninstall log, you would have to set AppId to the same value in both installations.

    +

    AppId also determines the actual name of the Uninstall registry key, to which Inno Setup tacks on "_is1" at the end. (Therefore, if AppId is "MyProgram", the key will be named "MyProgram_is1".) Pre-1.3 versions of Inno Setup based the key name on the value of AppVerName.

    +

    AppId is a not used for display anywhere, so feel free to make it as cryptic as you desire. The value may include constants.

    +

    If you use a {code:..} constant to allow your user to customize AppId, you do not need to return the real value until just before the installation starts: if necessary you may return an empty or generic value at earlier times. If not empty, this value will only be used to attempt to restore previous install settings (like the settings stored by [Setup] section directive UsePreviousAppDir). If empty, it isn't used for anything.

    +

    The length of AppId with all constants evaluated should never exceed 127 characters.

    +
    AppId=MyProgram
    + +
    + + + +

    This directive is used to prevent the user from installing new versions of an application while the application is still running, and to prevent the user from uninstalling a running application. It specifies the names of one or more named mutexes (multiple mutexes are separated by commas), which Setup and Uninstall will check for at startup. If any exist, Setup/Uninstall will display the message: "[Setup or Uninstall] has detected that [AppName] is currently running. Please close all instances of it now, then click OK to continue, or Cancel to exit." The value may include constants.

    +

    Use of this directive requires that you add code to your application which creates a mutex with the name you specify in this directive. Examples of creating a mutex in Delphi, C, and Visual Basic are shown below. The code should be executed during your application's startup.

    +

    Delphi:

    + +CreateMutex(nil, False, 'MyProgramsMutexName'); + +

    C:

    + +CreateMutex(NULL, FALSE, "MyProgramsMutexName"); + +

    Visual Basic (submitted by Peter Young):

    + +'Place in Declarations section: +Private Declare Function CreateMutex Lib "kernel32" _ + Alias "CreateMutexA" _ + (ByVal lpMutexAttributes As Long, _ + ByVal bInitialOwner As Long, _ + ByVal lpName As String) As Long + +'Place in startup code (Form_Load or Sub Main): +CreateMutex 0&, 0&, "MyProgramsMutexName" + +

    It is not necessary to explicitly destroy the mutex object upon your application's termination; the system will do this automatically. Nor is it recommended that you do so, because ideally the mutex object should exist until the process completely terminates.

    +

    Note that mutex name comparison in Windows is case sensitive.

    +

    To specify a mutex name containing a comma, escape the comma with a backslash.

    +

    See the topic for CreateMutex in the MS SDK help for more information on mutexes.

    +
    AppMutex=MyProgramsMutexName,Global\MyProgramsMutexName
    +

    See also:
    +SetupMutex
    +CloseApplications

    + +
    + + + +

    This directive is used to prevent Setup from running while Setup is already running. It specifies the names of one or more named mutexes (multiple mutexes are separated by commas), which Setup will check for at startup. If any exist, Setup will display the message: "Setup has detected that Setup is currently running. Please close all instances of it now, then click OK to continue, or Cancel to exit." If none exist, Setup will create the mutex(es) and continue normally. The value may include constants.

    +

    To specify a mutex name containing a comma, escape the comma with a backslash.

    +

    See the topic for CreateMutex in the MS SDK help for more information on mutexes.

    +
    SetupMutex=MySetupsMutexName,Global\MySetupsMutexName
    +

    See also:
    +AppMutex +

    + +
    + + + +

    Specifies a copyright message that Setup will display in the bottom-right corner of Setup's background window when WindowVisible is yes.

    +

    The value of this directive is also used as the default value for the VersionInfoCopyright directive if it is not specified.

    +
    AppCopyright=Copyright (C) 1997-2005 My Company, Inc.
    + +
    + + + +

    This string is displayed on the "Support" dialog of the Add/Remove Programs Control Panel applet. The value may include constants.

    + +
    +AppComments=Hello.
    +
    +
    + +
    + + + +

    This string is displayed on the "Support" dialog of the Add/Remove Programs Control Panel applet. The value may include constants.

    + +
    +AppContact=My Company Customer Support
    +
    +
    + +
    + + + +

    This string is displayed on the "Support" dialog of the Add/Remove Programs Control Panel applet. The value may include constants.

    +

    The value of this directive is also used as the default value for the VersionInfoCompany directive if it is not specified.

    + +
    +AppPublisher=My Company, Inc.
    +AppPublisherURL=http://www.example.com/
    +
    +
    + +
    + + + +

    A link to the specified URL is displayed on the "Support" dialog of the Add/Remove Programs Control Panel applet. The value may include constants.

    + +
    +AppPublisher=My Company, Inc.
    +AppPublisherURL=http://www.example.com/
    +
    +
    + +
    + + + +

    This string, which may be a URL, is displayed on the "Support" dialog of the Add/Remove Programs Control Panel applet. The value may include constants.

    + +
    +AppReadmeFile=http://www.example.com/readme.html
    +
    +
    + +
    + + + +

    This string is displayed on the "Support" dialog of the Add/Remove Programs Control Panel applet. The value may include constants.

    + +
    +AppSupportPhone=1-800-555-1212
    +
    +
    + +
    + + + +

    A link to the specified URL is displayed on the "Support" dialog of the Add/Remove Programs Control Panel applet. The value may include constants.

    + +
    +AppSupportURL=http://www.example.com/support.html
    +
    +
    + +
    + + + +

    A link to the specified URL is displayed on the "Support" dialog of the Add/Remove Programs Control Panel applet. The value may include constants.

    + +
    +AppUpdatesURL=http://www.example.com/updates.html
    +
    +
    + +
    + + + +

    The value of this required directive is used for the default directory name, which is used in the Select Destination Location page of the wizard. Normally it is prefixed by a directory constant.

    +

    If UsePreviousAppDir is yes (the default) and Setup finds a previous version of the same application is already installed, it will substitute the default directory name with the directory selected previously.

    + +If you used:
    +
    DefaultDirName={sd}\MYPROG
    +In Setup, this would typically display:
    +C:\MYPROG

    +If you used:
    +
    DefaultDirName={autopf}\My Program
    +In Setup, this would typically display:
    +C:\Program Files\My Program +
    + +
    + + +yes or no, or a scripted boolean expression +yes + +

    This determines if Inno Setup's automatic uninstaller is to be included in the installation. If this is yes or to a scripted boolean expression evaluating to True the uninstaller is included. Otherwise, no uninstallation support is included, requiring the end-user to manually remove the files pertaining to your application.

    +

    Setting this to a boolean expression can be useful if you want to offer the user a 'portable mode' option.

    +
    [Setup]
    +Uninstallable=not IsTaskSelected('portablemode')
    +
    +[Tasks]
    +Name: portablemode; Description: "Portable Mode"
    +

    See also:
    +CreateUninstallRegKey +

    + +
    + + +major.minor +6.1 or higher +6.1sp1 (Windows 7 with Service Pack 1 or Windows Server 2008 R2 with Service Pack 1) + +

    This directive lets you specify a minimum version of Windows that your software runs on. Build numbers and/or service pack levels may be included.

    +

    If the user's system does not meet the minimum version requirement, Setup will give an error message and exit.

    + +
    + + +major.minor +0 or higher than 6.1 +0 + +

    This directive lets you specify a minimum version of Windows that your software will not run on. Specifying 0 means there is no upper version limit. Build numbers and/or service pack levels may be included.

    +

    This directive is essentially the opposite of MinVersion.

    + +
    + + +yes or no +yes + +

    This directive lets you disable warnings about messages missing for a language.

    +

    See also:
    +NotRecognizedMessagesWarning +

    + +
    + + +yes or no +yes + +

    This directive lets you disable the missing RunOnceIds warning. See RunOnceId for more information.

    + +
    + + +yes or no +yes + +

    This directive lets you disable warnings about messages not recognized for a language.

    +

    See also:
    +MissingMessagesWarning +

    + +
    + + +yes or no +yes + +

    This directive lets you disable the used user areas warning. See Non Administrative Install Mode for more information.

    + +
    + + +admin, or lowest +admin + +

    This directive affects whether elevated rights are requested (via a User Account Control dialog) when the installation is started.

    +

    When set to admin (the default), Setup will always run with administrative privileges and in administrative install mode. If Setup was started by an unprivileged user, Windows will ask for the password to an account that has administrative privileges, and Setup will then run under that account.

    + +

    When set to lowest, Setup will not request to be run with administrative privileges even if it was started by a member of the Administrators group and will always run in non administrative install mode. Do not use this setting unless you are sure your installation will run successfully on unprivileged accounts.

    +

    See also:
    +PrivilegesRequiredOverridesAllowed +

    + +
    + + + + +One or more of the following, separated by spaces:
    commandline
    dialog
    +(blank) + +

    Can be set to one or more overrides which allow the end user to override the script's default PrivilegesRequired setting.

    +

    If override commandline is allowed then Setup will support two additional command line parameters to override the script's default PrivilegesRequired setting: /ALLUSERS and /CURRENTUSER. See Setup Command Line Parameters for more details.

    +

    If override dialog is allowed then Setup will ask the user to choose the install mode based on the script's default PrivilegesRequired setting using a suppressible dialog. Allowing dialog automatically allows commandline and when one of the command line parameters is used then Setup will not ask the user.

    +

    See also:
    +UsePreviousPrivileges

    + +
    + + +yes or no +no + +

    Obsolete in 4.1.2. Pre-4.1.2 versions of Inno Setup had a different directory selection interface, and the DisableAppendDir directive was used to control its behaviour.

    + +
    + + +yes or no +no + +

    When set to yes, Setup will display a message box if the directory the user selects doesn't exist. Usually you will also set DirExistsWarning=no when this is yes.

    + +
    + + + +

    Obsolete in 3.0. This directive is no longer supported. If you wish to create an Uninstall icon, use the new {uninstallexe} constant in the Filename parameter of an [Icons] section entry.

    + +
    + + +0 + +

    Normally, the disk space requirement displayed on the wizard is calculated by adding up the size of all the files in the [Files] section. If you want to increase the disk space display for whatever reason, set ExtraDiskSpaceRequired to the amount of bytes you wish to add to this figure. (1048576 bytes = 1 megabyte)

    + +
    + + + + + + +zip
    +zip/1 through zip/9
    +bzip
    +bzip/1 through bzip/9
    +lzma
    +lzma/fast
    +lzma/normal
    +lzma/max
    +lzma/ultra   (review memory requirements below before using)
    +lzma/ultra64   (review memory requirements below before using)
    +lzma2
    +lzma2/fast
    +lzma2/normal
    +lzma2/max
    +lzma2/ultra   (review memory requirements below before using)
    +lzma2/ultra64   (review memory requirements below before using)
    +none
    +lzma2/max + +

    This specifies the method of compression to use on the files, and optionally the level of compression. Higher levels compress better but take longer doing so, and may also require more memory while compressing/decompressing.

    +

    zip is the method of compression employed by .zip files ("deflate"). It is fast in both compression and decompression, and has very low memory requirements (less than 1 MB for both compression and decompression at level 9), but generally does not compress nearly as well as the other supported methods. zip, like lzma2, has one special property, though: it will not expand incompressible data (e.g., files that are already compressed). If a compression level isn't specified, it defaults to 7.

    +

    bzip is the method of compression employed by the bzip2 compressor. It almost always compresses better than zip but is usually slower in both compression and decompression. Up to 4 MB of memory is required during decompression, and up to 8 MB during compression. If a compression level isn't specified, it defaults to 9.

    +

    lzma is the method of compression employed by the 7-Zip LZMA compressor. It typically compresses significantly better than the zip and bzip methods. However, depending on the compression level used, it can be significantly slower at compressing, and consume a lot more memory. The following table summarizes the approximate memory requirements for each of the supported lzma compression levels. If a compression level isn't specified, it defaults to max.

    + + + + + + + + + + + + +
    Decompression (dictionary size)Compression (4 MB + 11 * dictionary size)
    fast (worst)32 KB3 MB
    normal2 MB26 MB
    max (default)8 MB92 MB
    ultra32 MB356 MB
    ultra64 (best)64 MB708 MB
    128 MB1.38 GB
    256 MB2.75 GB
    512 MB5.5 GB
    1 GB11 GB
    +
    +

    lzma2 is the method of compression employed by the 7-Zip LZMA2 compressor. LZMA2 is a modified version of LZMA that offers a better compression ratio for incompressible data (random data expands about 0.005%, compared to 1.35% with original LZMA), and optionally can compress multiple parts of large files in parallel, greatly increasing compression speed but with a possible reduction in compression ratio (see LZMANumBlockThreads). Like LZMA, it can consume a lot of memory; see the above table. If a compression level isn't specified, it defaults to max.

    +

    none specifies that no compression be used.

    +

    See also:
    +SolidCompression
    +LZMAAlgorithm
    +LZMABlockSize
    +LZMADictionarySize
    +LZMAMatchFinder
    +LZMANumBlockThreads
    +LZMANumFastBytes
    +LZMAUseSeparateProcess +

    + +
    + + + + +auto
    +1
    +2 (or higher)
    +auto + +

    Controls whether the multi-threaded match finder is enabled on the LZMA and LZMA2 compressors. Enabling the multi-threaded match finder can speed up the compression process by 50% or more on systems with multiple processor cores, and 20% or more on systems with Intel processors featuring Hyper-Threading Technology.

    +

    A value of auto (the default) enables the multi-threaded match finder for all compression levels except fast, which doesn't support it.

    +

    A value of 1 always disables the multi-threaded match finder.

    +

    Values of 2 or higher are currently equivalent to auto.

    +

    Note that for the LZMA2 compressor, this directive only controls whether the multi-threaded match finder is used. To enable support for compressing multiple parts of large files in parallel, set LZMANumBlockThreads.

    +

    See also:
    +LZMANumBlockThreads

    +
    + + +yes or no +no + +

    If yes, solid compression will be enabled. This causes all files to be compressed at once instead of separately. This can result in a much greater overall compression ratio if your installation contains many files with common content, such as text files, especially if such common content files are grouped together within the [Files] section.

    +

    The disadvantage to using solid compression is that because all files are compressed into a single compressed stream, Setup can no longer randomly access the files. This can decrease performance. If a certain file isn't going to be extracted on the user's system, it has to decompress the data for that file anyway (into memory) before it can decompress the next file. And if, for example, there was an error while extracting a particular file and the user clicks Retry, it can't just seek to the beginning of that file's compressed data; since all files are stored in one stream, it has seek to the very beginning. If disk spanning was enabled, the user would have to re-insert disk 1.

    + +
    + + +none, or one of the LZMA compression levels +normal + +

    This specifies the level of LZMA compression to use on Setup's internal structures. Generally, there is little reason to change this from the default setting of normal.

    + +
    + + +yes or no +yes + +

    If this is set to no, no directory for the application will be created, the Select Destination Location wizard page will not be displayed, and the {app} directory constant is equivalent to the {win} directory constant. If the uninstall feature is enabled when CreateAppDir is no, the uninstall data files are created in the system's Windows directory.

    + +
    + + +yes or no, or a scripted boolean expression +yes + +

    If this is set to no or to a scripted boolean expression evaluating to False, Setup won't create an entry in the Add/Remove Programs Control Panel applet.

    +

    Setting this to no can be useful if your installation is merely an update to an existing application and you don't want another entry created, but don't want to the disable the uninstall features entirely (via Uninstallable=no). In this case, UpdateUninstallLogAppName is usually set to no as well.

    +

    See also:
    +Uninstallable +

    + +
    + + +auto, yes, or no +auto + +

    When set to auto, the default setting, Setup will show a "The directory ... already exists. Would you like to install to that directory anyway?" message if the user selects a directory that already exists on the Select Destination Location wizard page, except when another version of the same application is already installed and the selected directory is the same as the previous one (only if UsePreviousAppDir is yes, the default setting).

    +

    When set to yes, Setup will always display the "Directory Exists" message when the user selects an existing directory.

    +

    When set to no, Setup will never display the "Directory Exists" message.

    + +
    + + +auto, yes, or no +auto + +

    If this is set to yes, Setup will not show the Select Destination Location wizard page.

    +

    If this is set to auto, at startup Setup will look in the registry to see if the same application is already installed, and if so, it will not show the Select Destination Location wizard page.

    +

    If the Select Destination Location wizard page is not shown, it will always use the default directory name.

    +

    Also see AlwaysShowDirOnReadyPage.

    + +
    + + +yes or no +no + +

    If this is set to yes, Setup will not show the Setup Completed wizard page, and instead will immediately close the Setup program once the installation process finishes. This may be useful if you execute a program in the [Run] section using the nowait flag, and don't want the Setup Completed window to remain in the background after the other program has started.

    +

    Note that the DisableFinishedPage directive is ignored if a restart of the computer is deemed necessary, or if a file is assigned to the InfoAfterFile [Setup] section directive. In those cases, the Setup Completed wizard page will still be displayed.

    + +
    + + +auto, yes, or no +auto + +

    If this is set to yes, Setup will not show the Select Start Menu Folder wizard page.

    +

    If this is set to auto, at startup Setup will look in the registry to see if the same application is already installed, and if so, it will not show the Select Start Menu Folder wizard page.

    +

    If the Select Start Menu Folder wizard page is not shown, it will always use the default Start Menu folder name.

    +

    Also see AlwaysShowGroupOnReadyPage.

    + +
    + + +yes or no +no + +

    If this is set to yes, Setup will not show a list of settings on the Ready to Install wizard page. Otherwise the list is shown and contains information like the chosen setup type and the chosen components.

    + +
    + + +yes or no +no + +

    If this is set to yes, Setup will not show the Ready to Install wizard page.

    +

    When Setup is not running silently, this directive is ignored if no other wizard page before the Ready to Install wizard page has been shown yet.

    +

    Setting this to yes does not automatically change the caption of the Next button on the new last pre-installation wizard page to Install. You must do so manually instead. For example, if the new last pre-installation wizard page is the Select Program Group page:

    +
    [Setup]
    +DisableReadyPage=yes
    +
    +[Code]
    +procedure CurPageChanged(CurPageID: Integer);
    +begin
    +  if CurPageID in [wpSelectProgramGroup, wpReady] then
    +    WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall)
    +  else if CurPageID = wpFinished then
    +    WizardForm.NextButton.Caption := SetupMessage(msgButtonFinish)
    +  else
    +    WizardForm.NextButton.Caption := SetupMessage(msgButtonNext);
    +end;
    + +
    + + +yes or no +yes + +

    If this is set to yes, Setup will not show the Welcome wizard page.

    + +
    + + +yes or no +no + +

    If this is set to yes, Setup will show a User Information wizard page which asks for the user's name, organization and possibly a serial number. The values the user enters are stored in the {userinfoname}, {userinfoorg} and {userinfoserial} constants. You can use these constants in [Registry] or [INI] entries to save their values for later use.

    +

    For the serial number field to appear, a CheckSerial event function must be present.

    +

    The DefaultUserInfoName, DefaultUserInfoOrg and DefaultUserInfoSerial directives determine the default name, organization and serial number shown. If UsePreviousUserInfo is yes (the default) and Setup finds that a previous version of the same application is already installed, it will use the name, organization and serial number entered previously instead.

    +

    On silent installs, the default user name, organization, and serial number values will be assumed. Setup will not check whether the user name is blank (since the user has no way of correcting it), however it will still check the serial number.

    + +
    + + +{sysuserinfoname} + +

    Specifies the default name shown on the User Information wizard page. This can include constants.

    + +
    + + +{sysuserinfoorg} + +

    Specifies the default organization shown on the User Information wizard page. This can include constants.

    + +
    + + + +

    Specifies the default serial number shown on the User Information wizard page. This can include constants.

    + +
    + + +yes or no +no + +

    Normally, Inno Setup's {group} constant points to the All Users start menu if the user has administrative privileges. If this directive is set to yes, it always uses current user's profile.

    +

    You should be careful about using this option: it may not achieve what you are intending. The compiler will warn you about this, which can be disabled using UsedUserAreasWarning.

    + +
    + + +yes or no +yes + +

    If set to no the compiler will only check the script for errors and skip creating setup files. Note: it will still clean the output directory and delete the manifest file, unless OutputDir and OutputManifestFile are set to an empty string.

    + +
    + + +mysetup + +

    This directive allows you to assign a different name for the resulting Setup file(s), so you don't have to manually rename them after running the compiler.

    +

    Setting this to setup is not recommended: all executables named "setup.exe" are shimmed by Windows application compatibility to load additional DLLs, such as version.dll. These DLLs are loaded unsafely by Windows and can be hijacked.

    +
    OutputBaseFilename=MyProg100
    + +
    + + +{app} + +

    Specifies the directory where the "unins*.*" files for the uninstaller are stored.

    +

    Note: You should not assign a different value here on a new version of an application, or else Setup won't find the uninstall logs from the previous versions and therefore won't be able to append to them.

    +
    UninstallFilesDir={app}\uninst
    + +
    + + + +

    This lets you specify a particular icon file (either an executable or an .ico file) to display for the Uninstall entry in the Add/Remove Programs Control Panel applet. The filename will normally begin with a directory constant.

    +

    If the file you specify contains multiple icons, you may append the suffix ",n" to specify an icon index, where n is the zero-based numeric index.

    +

    If this directive is not specified or is blank, Windows will select an icon itself, which may not be the one you prefer.

    + +
    +UninstallDisplayIcon={app}\MyProg.exe
    +UninstallDisplayIcon={app}\MyProg.exe,1
    +
    +
    + +
    + + + +

    This lets you specify a custom name for the program's entry in the Add/Remove Programs Control Panel applet. The value may include constants. If this directive is not specified or is blank, Setup will use the value of [Setup] section directive AppVerName for the name.

    +
    UninstallDisplayName=My Program
    +

    See also:
    +Side-by-side installation

    + +
    + + + +

    On Windows 7 and later, Setup uses this directive to set the EstimatedSize value in the Uninstall registry key when possible since the Windows 7 Add/Remove Programs Control Panel (called Program and Features) no longer automatically calculates it. If an UninstallDisplaySize is not set, Setup estimates the size itself by taking the size of all files installed and adding any ExtraDiskSpaceRequired values set. Note: Windows 7 without any service pack only supports the display of values smaller than 4 GB.

    +

    Set in bytes. (1048576 bytes = 1 megabyte)

    +
    UninstallDisplaySize=1073741824
    + +
    + + + +

    Obsolete in 3.0. This directive is no longer supported. If you wish to create an Uninstall icon, use the new {uninstallexe} constant in the Filename parameter of an [Icons] section entry.

    + +
    + + +yes or no +no + +

    If set to yes, the uninstaller will always create a log file if it is launched from the Add/Remove Programs Control Panel applet. Equivalent to passing /LOG on the command line.

    +

    This directive has no effect if CreateUninstallRegKey is not set to yes.

    +

    See also:
    +SetupLogging

    + +
    + + +append, new, or overwrite +append + +

    append, the default setting, instructs Setup to append to an existing uninstall log when possible.

    +

    new, which corresponds to the behavior in pre-1.3 versions of Inno Setup, instructs Setup to always create a new uninstall log.

    +

    overwrite instructs Setup to overwrite any existing uninstall logs from the same application instead of appending to them (this is not recommended). The same rules for appending to existing logs apply to overwriting existing logs.

    +
    UninstallLogMode=append
    + +
    + + +yes or no +no + +

    When set to yes, the uninstaller will always prompt the user to restart the system at the end of a successful uninstallation, regardless of whether it is necessary (e.g., because of [Files] section entries with the uninsrestartdelete flag).

    + +
    + + +yes or no +yes + +

    If yes, when appending to an existing uninstall log, Setup will replace the AppName field in the log with the current installation's AppName. The AppName field of the uninstall log determines the title displayed in the uninstaller. You may want to set this to no if your installation is merely an upgrade or add-on to an existing program, and you don't want the title of the uninstaller changed.

    + +
    + + + +

    The value of this directive is used for the default Start Menu folder name on the Select Start Menu Folder page of the wizard. If this directive is blank or isn't specified, it will use "(Default)" for the name.

    +

    Keep in mind that Start Menu folders are stored as literal directories so any characters not allowed in normal directory names can't be used in Start Menu folder names.

    +
    DefaultGroupName=My Program
    + +
    + + +yes or no +yes + +

    When this is set to yes, Setup will not show the This will install... Do you wish to continue? prompt.

    +

    This setting has no effect if UseSetupLdr is set to no.

    + +
    + + + +yes or no +no + +

    If set to yes, the disk spanning feature will be enabled. Instead of storing all the compressed file data inside SETUP.EXE, the compiler will split it into multiple SETUP-*.BIN files -- known as "slices" -- suitable for copying onto separate floppy disks, CD-ROMs, or DVD-ROMs. Each generated slice contains a number in its name which indicates the disk onto which it should be copied. (For example, SETUP-2.BIN should be placed on disk 2.) The generated SETUP.EXE always goes on disk 1 along with the SETUP-1*.BIN file.

    +

    The size of each slice and the number of slices to create for each disk are determined by the values of the DiskSliceSize and SlicesPerDisk [Setup] section directives, respectively. Other disk spanning-related directives that you may want to tweak include DiskClusterSize and ReserveBytes.

    +

    Note that it is required that you set this directive to yes if the compressed size of your installation exceeds 2,100,000,000 bytes, even if you don't intend to place the installation onto multiple disks. (The installation will still function correctly if all the SETUP-*.BIN files are placed on the same disk.)

    + +
    + + +262144 through 2100000000, or max +max (2100000000) + +

    This specifies the maximum number of bytes per disk slice (SETUP-*.BIN file). Normally, this should be set to the total number of bytes available on the disk media divided by the value of the SlicesPerDisk [Setup] section directive, which defaults to 1.

    +

    This directive is ignored if disk spanning is not enabled using the DiskSpanning [Setup] section directive.

    +

    To optimally fill 4.7 GB recordable DVDs, use:

    + +SlicesPerDisk=3 +DiskSliceSize=1566000000 + +

    To optimally fill 8.5 GB (dual-layer) recordable DVDs, use:

    + +SlicesPerDisk=5 +DiskSliceSize=1708200000 + +

    To optimally fill 700 MB (80-minute) recordable CDs, use:

    + +SlicesPerDisk=1 +DiskSliceSize=736000000 + +

    To optimally fill 1.44MB floppy disks, use:

    + +SlicesPerDisk=1 +DiskSliceSize=1457664 + + +
    + + +512 (the standard cluster size for floppy disks) + +

    This specifies the cluster size of the disk media. The compiler needs to know this in order to properly fill each disk to capacity.

    +

    This directive is ignored if disk spanning is not enabled using the DiskSpanning [Setup] section directive.

    + +
    + + +1 through 26 +1 + +

    The number of SETUP-*.BIN files to create for each disk. If this is 1 (the default setting), the files will be named SETUP-x.BIN, where x is the disk number. If this is greater than 1, the files will be named SETUP-xy.BIN, where x is the disk number and y is a unique letter.

    +

    One reason why you may need to increase this from the default value of 1 is if the size of your disk media exceeds 2,100,000,000 bytes -- the upper limit of the DiskSliceSize [Setup] section directive. If, for example, your disk media has a capacity of 3,000,000,000 bytes, you can avoid the 2,100,000,000-byte disk slice size limit by setting SlicesPerDisk to 2 and DiskSliceSize to 1500000000 (or perhaps slightly less, due to file system overhead).

    + +
    + + +0 + +

    This specifies the minimum number of free bytes to reserve on the first disk. This is useful if you have to copy other files onto the first disk that aren't part of the setup program, such as a Readme file.

    +

    The compiler rounds this number up to the nearest cluster.

    +

    This directive is ignored if disk spanning is not enabled using the DiskSpanning [Setup] section directive.

    + +
    + + +yes or no +yes + +

    Normally two file entries referring to the same source file will be compressed and stored only once. If you have a bunch of identical files in your installation, make them point to the same source file in the script, and the size of your installation can drop significantly. If you wish to disable this feature for some reason, set this directive to no.

    + +
    + + +yes or no + +

    Obsolete in 4.2.5. Use MergeDuplicateFiles instead.

    +

    MergeDuplicateFiles=no is equivalent to DontMergeDuplicateFiles=yes.

    + +
    + + +yes or no +yes + +

    Setting this to no prevents the user from cancelling during the actual installation process, by disabling the Cancel button and ignoring clicks on the close button. This has the same effect as passing /NOCANCEL to Setup on the command line.

    + +
    + + +yes or no +no + +

    When set to yes, Setup will display a Don't create a Start Menu folder check box on the Select Start Menu Folder wizard page, which allows the user to skip creation of program shortcuts on the Start Menu.

    +

    Only [Icons] entries that have a Name parameter starting with {group}\ and no Tasks parameter are affected by default. To force the check box to have an effect on a particular [Icons] entry, add a Check: not WizardNoIcons parameter.

    + +
    + + +yes or no +no + +

    When set to no, the default, the user will not be allowed to enter a root directory (such as "C:\") on the Select Destination Location page of the wizard.

    + +
    + + +yes or no +yes + +

    If set to no, the user will not be allowed to enter a UNC path (such as "\\server\share") on the Select Destination Location page of the wizard.

    +

    To fully disallow installation to network locations, you must also set AllowNetworkDrive to no.

    + +
    + + +yes or no +yes + +

    If set to no, the user will not be allowed to enter a network drive on the Select Destination Location page of the wizard.

    +

    To fully disallow installation to network locations, you must also set AllowUNCPath to no.

    + +
    + + + + +yes or no +no + +

    When set to yes, Setup will always prompt the user to restart the system at the end of a successful installation, regardless of whether this is necessary (for example, because of [Files] section entries with the restartreplace flag).

    + +
    + + + + +yes or no +yes + +

    When set to yes, and a program executed in the [Run] section queues files to be replaced on the next reboot (by calling MoveFileEx or by modifying wininit.ini), Setup will detect this and prompt the user to restart the computer at the end of installation.

    + +
    + + + +

    Obsolete in 4.0. This directive is no longer supported. Use the new [Languages] section to specify a custom messages file.

    + +
    + + + +

    Specifies the name of an optional license agreement file, in .txt or .rtf (rich text) format, which is displayed before the user selects the destination directory for the program. This file must be located in your installation's source directory when running the compiler, unless a fully qualified pathname is specified or the pathname is prefixed by "compiler:", in which case it looks for the file in the compiler directory.

    +

    If the user selects a language for which the LicenseFile parameter is set, this directive is effectively ignored. See the [Languages] section documentation for more information.

    +

    If an Unicode .txt file is used, it must be UTF-8 (with or without a BOM) or UTF-16LE encoded.

    +
    LicenseFile=license.txt
    + +
    + + + +

    Specifies the name of an optional "readme" file, in .txt or .rtf (rich text) format, which is displayed before the user selects the destination directory for the program. This file must be located in your installation's source directory when running the compiler, unless a fully qualified pathname is specified or the pathname is prefixed by "compiler:", in which case it looks for the file in the compiler directory.

    +

    If the user selects a language for which the InfoBeforeFile parameter is set, this directive is effectively ignored. See the [Languages] section documentation for more information.

    +

    If an Unicode .txt file is used, it must be UTF-8 (with or without a BOM) or UTF-16LE encoded.

    +
    InfoBeforeFile=infobefore.txt
    + +
    + + + +

    Specifies the name of an optional "readme" file, in .txt or .rtf (rich text) format, which is displayed after a successful install. This file must be located in your installation's source directory when running the compiler, unless a fully qualified pathname is specified or the pathname is prefixed by "compiler:", in which case it looks for the file in the compiler directory.

    +

    This differs from isreadme files in that this text is displayed as a page of the wizard, instead of in a separate Notepad window.

    +

    If the user selects a language for which the InfoAfterFile parameter is set, this directive is effectively ignored. See the [Languages] section documentation for more information.

    +

    If an Unicode .txt file is used, it must be UTF-8 (with or without a BOM) or UTF-16LE encoded.

    +
    InfoAfterFile=infoafter.txt
    + +
    + + +yes or no, or a scripted boolean expression +no + +

    When set to yes or to a scripted boolean expression evaluating to True, Setup will tell Explorer to refresh its file associations information at the end of the installation, and Uninstall will do the same at the end of uninstallation.

    +

    If your installation creates a file association but doesn't have ChangesAssociations set to yes, the correct icon for the file type likely won't be displayed until the user logs off or restarts the computer.

    + +
    + + +yes or no, or a scripted boolean expression +no + +

    When set to yes or to a scripted boolean expression evaluating to True, at the end of the installation Setup will notify other running applications (notably Windows Explorer) that they should reload their environment variables from the registry.

    +

    If your installation creates or changes an environment variable but doesn't have ChangesEnvironment set to yes, the new/changed environment variable will not be seen by applications launched from Explorer until the user logs off or restarts the computer.

    + +
    + + +yes or no +yes + +

    When this directive is yes, the default, at startup Setup will look in the registry to see if the same application is already installed, and if so, it will use the directory of the previous installation as the default directory presented to the user in the wizard.

    +

    Note that Setup cannot re-use settings from a previous installation that had Uninstallable set to no, since the registry entries it looks for are not created when Uninstallable is no.

    + +
    + + +yes or no +yes + +

    When this directive is yes, the default, at startup Setup will look in the registry to see if the same application is already installed, and if so, it will use the Start Menu folder name of the previous installation as the default Start Menu folder name presented to the user in the wizard. Additionally, if AllowNoIcons is set to yes, the Don't create a Start Menu folder setting from the previous installation will be restored.

    +

    Note that Setup cannot re-use settings from a previous installation that had Uninstallable set to no, since the registry entries it looks for are not created when Uninstallable is no.

    + +
    + + +yes or no +yes + +

    When this directive is yes, the default, at startup Setup will look in the registry to see if the same application is already installed, and if so, it will use the language of the previous installation as the default language presented to the user in the wizard.

    +

    Note that this directive does not change the language used by the Select Language dialog itself. See the [Languages] section help topic for details on which language the Select Language dialog uses by default.

    +

    Also note that Setup cannot re-use settings from a previous installation that had Uninstallable set to no, since the registry entries it looks for are not created when Uninstallable is no.

    +

    UsePreviousLanguage must be set to no when AppId includes constants.

    + +
    + + +yes or no +yes + +

    When this directive is yes, the default, at startup Setup will look in the registry to see if the same application is already installed in one of the two install modes, and if so, it will use that install mode and not ask the user.

    +

    If PrivilegesRequiredOverridesAllowed does not allow dialog, this directive is effectively ignored.

    +

    UsePreviousPrivileges must be set to no when AppId includes constants and PrivilegesRequiredOverridesAllowed allows dialog.

    +

    See also:
    +PrivilegesRequiredOverridesAllowed

    + +
    + + +yes or no +yes + +

    When this directive is yes, the default, at startup Setup will look in the registry to see if the same application is already installed, and if so, it will use the setup type and component settings of the previous installation as the default settings presented to the user in the wizard.

    +

    Note that Setup cannot re-use settings from a previous installation that had Uninstallable set to no, since the registry entries it looks for are not created when Uninstallable is no.

    + +
    + + +yes or no +yes + +

    When this directive is yes, the default, at startup Setup will look in the registry to see if the same application is already installed, and if so, it will use the task settings of the previous installation as the default settings presented to the user in the wizard.

    +

    Note that Setup cannot re-use settings from a previous installation that had Uninstallable set to no, since the registry entries it looks for are not created when Uninstallable is no.

    + +
    + + +yes or no +yes + +

    When this directive is yes, the default, at startup Setup will look in the registry to see if the same application is already installed, and if so, it will use the name, organization and serial number entered previously as the default settings presented to the user on the User Information wizard page.

    +

    Note that Setup cannot re-use settings from a previous installation that had Uninstallable set to no, since the registry entries it looks for are not created when Uninstallable is no.

    + +
    + + + +

    Specifies a password you want to prompt the user for at the beginning of the installation.

    +

    When using a password, you might consider setting Encryption to yes as well, otherwise files will be stored as plain text and it would not be exceedingly difficult for someone to gain access to them through reverse engineering.

    +

    The password itself is not stored as clear text; it's stored as a 160-bit SHA-1 hash, salted with a 64-bit random number. (Note: When encryption is enabled, this stored hash is not used for the encryption key; a different hash with a different salt is generated for that.)

    + +
    + + +(blank) + +

    Specifies the name(s) of the bitmap file(s) to display on the left side of the wizard. Wildcards are supported and the files(s) must be located in your installation's source directory when running the compiler, unless a fully qualified pathname is specified or the pathname is prefixed by "compiler:", in which case it looks for the file in the compiler directory.

    +

    256-color bitmaps may not display correctly in 256-color mode, since it does not handle palettes.

    +

    When multiple files are specified, Setup will automatically select the one which best matches the system's DPI setting. The recommended size of the bitmap per DPI setting is:

    + + + + + + + + +
    100%164x314
    125%192x386
    150%246x459
    175%273x556
    200%328x604
    225%355x700
    250%410x797
    +

    If this directive is not specified or is blank, built-in wizard images supporting multiple DPI settings will be used.

    +

    To use the old default wizard images set this directive to compiler:WizClassicImage.bmp.

    +
    WizardImageFile=myimage.bmp,myimage2.bmp
    +

    See also:
    +WizardSmallImageFile
    +WizardImageAlphaFormat
    +WizardImageStretch

    + +
    + + +(blank) + +

    Specifies the name(s) of the bitmap file(s) to display in the upper right corner of the wizard. Wildcards are supported and the file(s) must be located in your installation's source directory when running the compiler, unless a fully qualified pathname is specified or the pathname is prefixed by "compiler:", in which case it looks for the file in the compiler directory.

    +

    256-color bitmaps may not display correctly in 256-color mode, since it does not handle palettes.

    +

    When multiple files are specified, Setup will automatically select the one which best matches the system's DPI setting. The recommended size of the bitmap per DPI setting is:

    + + + + + + + + +
    100%55x55
    125%64x68
    150%83x80
    175%92x97
    200%110x106
    225%119x123
    250%138x140
    +

    If this directive is not specified or is blank, built-in wizard images supporting multiple DPI settings will be used.

    +

    To use the old default wizard images set this directive to compiler:WizClassicSmallImage.bmp.

    +
    WizardSmallImageFile=mysmallimage.bmp,mysmallimage2.bmp
    +

    See also:
    +WizardImageFile
    +WizardImageAlphaFormat
    +WizardImageStretch

    + +
    + + +yes or no +yes + +

    If set to no, Setup will be truly "full screen" -- it won't have a caption bar or border, and it will be on top of the taskbar.

    +

    This directive has no effect if WindowVisible is not set to yes.

    + +
    + + +yes or no +yes + +

    If set to yes, the Setup program's background window will initially be displayed in a maximized state, where it won't cover over the taskbar.

    +

    This directive has no effect if WindowVisible is not set to yes.

    + +
    + + +yes or no +yes + +

    If set to no, the user won't be able to resize the Setup program's background window when it's not maximized.

    +

    This directive has no effect if WindowVisible is not set to yes.

    + +
    + + +yes or no +no + +

    If set to yes, there will be a gradient background window displayed behind the wizard.

    +

    Note that this is considered a legacy feature; it likely will be removed at some point in the future.

    + +
    + + +none, defined, premultiplied +none + +

    If set to none, the default, any wizard image which is a 32 bit bitmap file should not have an alpha channel.

    +

    If set to premultiplied, any wizard image which is a 32 bit bitmap file should have its red, green and blue channel values premultiplied with the alpha channel value.

    +

    If set to defined, any wizard image which is a 32 bit bitmap file should not have its red, green and blue channel values premultiplied with the alpha channel value.

    +

    This directive has no effect for a wizard image which is not a 32 bit bitmap file.

    + +
    + + + +

    Obsolete in 5.5.7. This directive formerly specified the background color used to fill any unused space around the wizard bitmap when WizardImageStretch was set to no. Now any unused space is filled with the standard window color (usually white). If you wish to create a colored border around the image, do so by modifying the bitmap itself.

    + +
    + + +yes or no +yes + +

    If set to yes, the default, the wizard images will be stretched or shrunk if the images are larger or smaller than required.

    +

    If set to no, the wizard images will be centered in their respective areas if the images are larger than required, and clipped if the images are smaller than required.

    + +
    + + +yes or no +yes if WizardStyle is set to modern, no otherwise + +

    If set to yes, the user will be able to resize the main Setup wizard window.

    +

    Use Anchors and KeepSizeY properties to add full support for WizardResizable and WizardSizePercent to all your custom controls, custom wizard pages and TSetupForm forms if you have any. See the CodeClasses.iss example script for an example.

    +

    See also:
    +WizardSizePercent

    + +
    + + +a,b, where a is the horizontal size, and b is the vertical size. +each size: 100 through 150 +120,120 if WizardStyle is set to modern, 100,100 otherwise + +

    Lets you increase the default size of all Setup and Uninstall wizard windows without increasing the font size. A size of for example 120 means a 20% size increase.

    +

    If you specify only one size it will be used as both the horizontal and the vertical size.

    +
    WizardSizePercent=120
    +

    Use Anchors and KeepSizeY properties to add full support for WizardResizable and WizardSizePercent to all your custom controls and wizard pages if you have any. See the CodeClasses.iss example script for an example.

    +

    Note: Some of the wizard windows such as the Select Language dialog will only increase in size horizontally.

    +

    See also:
    +WizardResizable
    +DialogFontSize

    + +
    + + + +

    Obsolete in 5.0.4. This directive formerly specified the background color used to fill any unused space around the small wizard bitmap when WizardImageStretch was set to no. Now any unused space is filled with the standard window color (usually white). If you wish to create a colored border around the image, do so by modifying the bitmap itself.

    + +
    + + + +

    Specifies a new source directory for the script.

    +
    SourceDir=c:\files
    + +
    + + +Output + +

    Specifies the "output" directory for the script, which is where the compiler will place the resulting SETUP.* files. By default, it creates a directory named "Output" under the directory containing the script for this.

    +

    If OutputDir is not a fully-qualified pathname, it will be treated as being relative to SourceDir, unless the pathname is prefixed by "userdocs:", in which case it will be treated as being relative to the the My Documents folder of the currently logged-in user. Setting OutputDir to . will result in the files being placed in the source directory.

    +
    OutputDir=c:\output
    + +
    + + +classic or modern +classic + +

    If this directive is set to modern, Setup and Uninstall will show a more modern look and also the defaults for WizardResizable and WizardSizePercent change to respectively yes and 120,120.

    +

    Use Anchors and KeepSizeY properties to add full support for WizardResizable and WizardSizePercent to all your custom controls and wizard pages if you have any. See the CodeClasses.iss example script for an example.

    + +
    + + + +

    Obsolete in 5.0.0.

    + +
    + + +yes or no +yes + +

    If this directive is set to yes, Setup will always show the components list for customizable setups. If this is set to no Setup will only show the components list if the user selected a custom type from the type list.

    + +
    + + +yes or no +no + +

    If this directive is set to yes, Setup will always show the selected directory in the list of settings on the Ready to Install wizard page. If this is set to no, Setup will not show the selected directory if DisableDirPage is yes.

    + +
    + + +yes or no +no + +

    If this directive is set to yes, Setup will always show the selected Start Menu folder name in the list of settings on the Ready to Install wizard page. If this is set to no, Setup will not show the selected Start Menu folder name if DisableProgramGroupPage is yes.

    +

    If no Start Menu folder is going to be created by Setup, this directive is effectively ignored.

    + +
    + + +yes or no +yes + +

    When this directive is set to yes, Setup will use 'flat' checkboxes for the components list. Otherwise Setup will use '3D' checkboxes.

    + +
    + + +yes or no +yes + +

    When this directive is set to yes, Setup will show the size of a component in the components list. Depending on the largest component, Setup will display sizes in kilobytes or in megabytes.

    + +
    + + +yes or no +no + +

    When this directive is set to yes, Setup will show 'tree lines' between parent and sub tasks.

    + +
    + + +Tahoma + +

    Specifies the name of the font that should be used in dialogs on languages that do not set DialogFontName in their [LangOptions] section.

    +

    If the specified font name does not exist on the user's system or is an empty string, 8-point Microsoft Sans Serif or MS Sans Serif will be substituted.

    + +
    + + +yes, no, or auto +yes + +

    When set to yes and there are multiple [Languages] section entries, a Select Language dialog will be displayed to give the user an opportunity to override the language Setup chose by default. See the [Languages] section documentation for more information.

    +

    When set to no, the dialog will never be displayed.

    +

    When set to auto, the dialog will only be displayed if Setup does not find a language identifier match.

    +

    See also:
    +UsePreviousLanguage

    + +
    + + +uilanguage, locale, none +uilanguage + +

    When set to uilanguage, Setup will determine the default language to use by checking the user's "UI language" (by calling GetUserDefaultUILanguage(), or on Windows versions where that function is unsupported, by reading the registry). This is the method that Microsoft recommends. The "UI language" is the language used in Windows' own dialogs. Thus, on an English edition of Windows, English will be the default, while on a Dutch edition of Windows, Dutch will be the default. On the MUI edition of Windows, the default will be the currently selected UI language.

    +

    When set to locale, Setup will determine the default language to use by calling GetUserDefaultLangID(). This function returns the setting of "Your locale" in Control Panel's Regional Options. It should however be noted that the "Your locale" option is not intended to affect languages; it is only documented to affect "numbers, currencies, times, and dates".

    +

    When set to none, Setup will use the first language specified in the [Languages] section as the default language.

    + +
    + + +0 through 60 +2 + +

    By default, time stamps on files referenced by non external [Files] section entries are rounded down to the nearest 2-second boundary. FAT partitions have only a 2-second time stamp resolution, so this ensures that time stamps are set the same way on both FAT and NTFS partitions.

    +

    The rounding can be altered or disabled by setting the TimeStampRounding directive. Setting it to 0 will disable the rounding. Setting it to a number between 1 and 60 will cause time stamps to be rounded down to the nearest TimeStampRounding-second boundary.

    + +
    + + +yes or no +no + +

    By default, time stamps on files referenced by non external [Files] section entries are saved and restored as local times. This means that if a particular file has a time stamp of 01:00 local time at compile time, Setup will extract the file with a time stamp of 01:00 local time, regardless of the user's time zone setting or whether DST is in effect.

    +

    If TimeStampsInUTC is set to yes, time stamps will be saved and restored in UTC -- the native time format of Win32 and NTFS. In this mode, a file with a time stamp of 01:00 local time in New York will have a time stamp of 06:00 local time when installed in London.

    + +
    + + +(blank) + +

    Specifies a custom program icon to use for Setup/Uninstall. The file must be located in your installation's source directory when running the compiler, unless a fully qualified pathname is specified or the pathname is prefixed by "compiler:", in which case it looks for the file in the compiler directory.

    +

    It is recommended to include at least the following sizes in your icon: 16x16, 32x32, 48x48, 64x64, and 256x256.

    +

    If this directive is not specified or is blank, a built-in icon supporting the above sizes will be used.

    +

    To use the old default icon set this directive to compiler:SetupClassicIcon.ico.

    +
    SetupIconFile=MyProgSetup.ico
    + +
    + + +AppPublisher if AppPublisher doesn't include constants, an empty string otherwise + +

    Specifies the company name value for the Setup version info.

    + +
    + + +AppCopyright if AppCopyright doesn't include constants, an empty string otherwise + +

    Specifies the copyright value for the Setup version info.

    + +
    + + +"AppName Setup" if AppName doesn't include constants, an empty string otherwise + +

    Specifies the file description value for the Setup version info.

    +

    This setting has no effect if UseSetupLdr is set to no.

    + +
    + + + +

    Specifies the original file name value for the Setup version info.

    + +
    + + +AppName if AppName doesn't include constants, an empty string otherwise + +

    Specifies the product name value for the Setup version info.

    + +
    + + +VersionInfoProductVersion if set, else AppVersion if set and does not include constants, else VersionInfoTextVersion + +

    Specifies the textual product version value for the Setup version info.

    + +
    + + +A value in the form of up to 4 numbers separated by dots +VersionInfoVersion + +

    Specifies the binary product version value for the Setup version info.

    +

    Partial version numbers are allowed. Missing numbers will be appended as zero's.

    +

    Note that this value is only known to be displayed by Explorer on Windows Vista SP2. Other versions display the textual product version value (VersionInfoProductTextVersion) instead.

    + +
    + + +VersionInfoVersion + +

    Specifies the textual file version value for the Setup version info.

    +

    Note that this value was only displayed on Explorer's Version tab on Windows 98 and earlier. Later versions display the binary version value (VersionInfoVersion) instead.

    +

    This setting has no effect if UseSetupLdr is set to no.

    + +
    + + +A value in the form of up to 4 numbers separated by dots +0.0.0.0 + +

    Specifies the binary file version value for the Setup version info.

    +

    Partial version numbers are allowed. Missing numbers will be appended as zero's.

    +

    This setting has no effect if UseSetupLdr is set to no.

    + +
    + + + +

    Obsolete in 5.0.0. As Setup and Uninstall have been merged into a single executable, setting a custom icon for Uninstall is no longer possible.

    + +
    + + +yes or no +yes + +

    By default, when a folder in the dialog displayed by the Browse... button on the Select Destination Location wizard page is clicked, Setup automatically appends the last component of DefaultDirName onto the new path. For example, if DefaultDirName is {autopf}\My Program and "Z:\" is clicked, the new path will become "Z:\My Program".

    +

    Setting this directive to no disables the aforementioned behavior. In addition, it causes a Make New Folder button to appear on the dialog.

    + +
    + + +yes or no +yes + +

    By default, when a folder in the dialog displayed by the Browse... button on the Select Start Menu Folder wizard page is clicked, Setup automatically appends the last component of DefaultGroupName onto the new path. For example, if DefaultGroupName is My Program and "Accessories" is clicked, the new path will become "Accessories\My Program".

    +

    Setting this directive to no disables the aforementioned behavior. In addition, it causes a Make New Folder button to appear on the dialog.

    + +
    + + +current, none, or YYYY-MM-DD +current + +

    The date used in the time/date stamp of files referenced by [Files] section entries that include the touch flag.

    +

    A value of current causes the current system date (at compile time) to be used. A value of none leaves the date as-is. Otherwise, TouchDate is interpreted as an explicit date in YYYY-MM-DD (ISO 8601) format. If TimeStampsInUTC is set to yes, the date is assumed to be a UTC date.

    +
    TouchDate=2004-01-31
    + +
    + + +current, none, HH:MM, or HH:MM:SS +current + +

    The time used in the time/date stamp of files referenced by [Files] section entries that include the touch flag.

    +

    A value of current causes the current system time (at compile time) to be used. A value of none leaves the time as-is. Otherwise, TouchTime is interpreted as an explicit time in HH:MM or HH:MM:SS format. If TimeStampsInUTC is set to yes, the time is assumed to be a UTC time.

    +
    TouchTime=13:00
    + +
    + + +yes or no +no + +

    If set to yes, files that are compiled into the installation (via [Files] section entries) will be encrypted using ARCFOUR encryption, with a 160-bit key derived from the value of the Password [Setup] section directive.

    +

    Because of encryption import/export laws in some countries, encryption support is not included in the main Inno Setup installer but downloaded by it instead. See the Inno Setup Downloads page for more information.

    +

    If encryption is enabled and you call the ExtractTemporaryFile function from the [Code] section prior to the user entering the correct password, the function will fail unless the noencryption flag is used on the [Files] section entry for the file.

    +

    The key used for encryption is a 160-bit SHA-1 hash of 64-bit random salt plus the value of Password.

    + +
    + + + +

    When this directive is set, a separate "Modify" button in the Add/Remove Programs Control Panel applet will be displayed. Setting it is optional. The value may include constants.

    +
    AppModifyPath="{app}\Setup.exe" /modify=1
    + +
    + + + +

    When this directive is set, the compiler will create a manifest file detailing information about the files compiled into Setup. The file will be created in the output directory unless a path is included.

    +
    OutputManifestFile=Setup-Manifest.txt
    + +
    + + + + + +

    These are used in the values of ArchitecturesAllowed and ArchitecturesInstallIn64BitMode.

    + +
    + +
    arm32compatible
    +
    +

    Matches systems capable of running 32-bit Arm binaries. Only Arm64 Windows includes such support.

    +
    + +
    arm64
    +
    +

    Matches systems running Arm64 Windows.

    +
    + +
    win64
    +
    +

    Matches systems running 64-bit Windows, regardless of OS architecture.

    +

    This may be useful in an installer that doesn't ship any architecture-specific binaries, but requires access to something 64-bit, like HKLM64 in the [Registry] section, or the native 64-bit Program Files directory.

    +
    + +
    x64compatible
    +
    +

    Matches systems capable of running x64 binaries. This includes systems running x64 Windows, and also Arm64-based Windows 11 systems, which have the ability to run x64 binaries via emulation.

    +
    + +
    x64os
    +
    +

    Matches systems running x64 Windows only — not any other systems that have the ability to run x64 binaries via emulation.

    +

    In most cases, x64compatible should be used instead of x64os, because x64compatible allows x64 apps to be installed on Arm64 Windows 11 systems as well.

    +

    However, x64os is appropriate in unusual cases where an x64 app/binary is known to require true x64 Windows and cannot function under emulation. x64 device drivers are one example; x64 emulation isn't supported in kernel mode.

    +

    Before Inno Setup 6.3, x64os was named x64. The compiler still accepts x64 as an alias for x64os, but will emit a deprecation warning when used.

    +
    + +
    x86compatible
    +
    +

    Matches systems capable of running 32-bit x86 binaries. This includes systems running x86 Windows, x64 Windows, and also Arm64 Windows 10 and 11 systems, which have the ability to run x86 binaries via emulation.

    +

    Given that Setup itself is currently always built as a 32-bit x86 binary, this always matches.

    +
    + +
    x86os
    +
    +

    Matches systems running 32-bit x86 Windows only.

    +

    x86os usually only makes sense when installing 32-bit x86 device drivers. When installing a regular 32-bit app, x86compatible should be used instead (or just leave ArchitecturesAllowed unset).

    +

    Before Inno Setup 6.3, x86os was named x86. The compiler still accepts x86 as an alias for x86os.

    +
    + +
    +

    See also:
    +Architecture Identifier Matchers like IsX64Compatible
    +ProcessorArchitecture

    + +
    + + + + + + +A space separated list of architecture identifiers.
    +Or, a boolean expression containing architecture identifiers. See Components and Tasks parameters for examples of boolean expressions.
    + +x86compatible + +

    Specifies which architectures Setup is allowed to run on. If none of the specified architecture identifiers match the current system, Setup will display an error message (WindowsVersionNotSupported) and exit.

    +

    If your application's binaries are all 32-bit, then there is normally no need to set this directive; the default value of x86compatible is correct. If your application's binaries are built for the x64 or Arm64 architectures, you should set this directive to either x64compatible or arm64 respectively.

    +

    If you are installing device drivers, then the proper setting is x86os, x64os, or arm64, depending on the architecture of the drivers.

    + +
    +; Require two architecture identifier matches at the same time.
    +; - An x64 app installer that includes some 32-bit x86 binaries:
    +ArchitecturesAllowed=x64compatible and x86compatible
    +; - An Arm64 app installer that includes some x64 binaries:
    +ArchitecturesAllowed=arm64 and x64compatible
    +; - An Arm64 app installer that includes some Arm32 binaries:
    +ArchitecturesAllowed=arm64 and arm32compatible
    +
    +; Only allow installation on systems that aren't x64-compatible.
    +; Useful in a situation where you have separate x86 & x64 installers,
    +; and don't want users of x64-compatible OSes (x64 + Arm64 Win11)
    +; erroneously running the x86 installer.
    +ArchitecturesAllowed=x86compatible and not x64compatible
    +
    +; Allow installation on x64-compatible systems, but deny Arm64.
    +; Useful if you provide a separate installer for Arm64 systems.
    +ArchitecturesAllowed=x64compatible and not arm64
    +
    +; The "os" variant is appropriate when installing something that
    +; cannot operate in an emulated environment, such as a device driver.
    +ArchitecturesAllowed=x64os
    +
    +; Allow installation only on 64-bit Windows, but don't check the
    +; architecture.
    +; (Don't use this if installing any architecture-specific binaries.)
    +ArchitecturesAllowed=win64
    +
    +
    +

    See also:
    +ArchitecturesInstallIn64BitMode

    + +
    + + + + + + + +A space separated list of architecture identifiers.
    +Or, a boolean expression containing architecture identifiers. See Components and Tasks parameters for examples of boolean expressions.
    +(blank) + +

    Specifies the architectures on which Setup should enable 64-bit install mode. If this directive is not specified or is blank, Setup will always use 32-bit install mode.

    +

    Generally, 64-bit install mode should only be enabled on installers that ship 64-bit binaries (x64 or Arm64).

    +

    Since 64-bit install mode is only supported on systems running 64-bit Windows, the specified expression must never match systems running 32-bit Windows. So, for example, don't set this directive to a value like x86compatible, since that will match systems running 32-bit Windows. If the expression does indeed match a system running 32-bit Windows, Setup will display an error message and exit.

    +

    Be sure you have read the 64-bit Installation Limitations topic before setting this directive.

    +

    If your application runs only on 64-bit architectures, you should set ArchitecturesAllowed to the same value as this directive to prevent Setup from running on 32-bit Windows.

    + +
    +; Only allow the installer to run on x64-compatible systems,
    +; and enable 64-bit install mode.
    +ArchitecturesAllowed=x64compatible
    +ArchitecturesInstallIn64BitMode=x64compatible
    +
    +
    +

    See also:
    +ArchitecturesAllowed

    + +
    + + +yes or no +yes + +

    Specifies whether the compiler should set the "Terminal Services aware" flag in the headers of the Setup and Uninstall programs. This feature is new to version 5.1.7 and defaults to yes; previous versions never set the flag.

    +

    Most importantly, the "Terminal Services aware" flag affects the behavior of the {win} constant (and GetWinDir support function) on servers with Terminal Services installed in application mode.

    +

    When the flag is set, {win} will consistently return the system's real Windows directory, typically "C:\WINDOWS", just as on systems that do not have Terminal Services installed.

    +

    When the flag is not set, Windows runs the program in compatibility mode, where {win} may return either the real Windows directory or a user-specific Windows directory, such as "C:\Documents and Settings\<user name>\WINDOWS". Which one you get depends on the name of the program's EXE file and how it is launched. If the program is named setup.exe or install.exe, or if it is launched from the Add/Remove Programs Control Panel applet, then Windows will put the system in "install mode", which effectively makes the program (and all other programs running in the session) behave as if the "Terminal Services aware" flag were set. Otherwise, the program is treated as a legacy application and is given a private Windows directory. (This is true even if the user running the program has full administrative privileges.)

    +

    Because the behavior that results from setting TerminalServicesAware to no is inconsistent and hard to predict, it is recommended that you use the default setting of yes. Only use no as a temporary fix if you encounter troubles on systems with Terminal Services after upgrading from a previous Inno Setup version.

    + +
    + + +yes or no +yes + +

    Specifies whether the compiler should set the "NX Compatible" flag in the headers of the Setup and Uninstall programs to mark them compatible with data execution prevention (DEP). This feature is new to version 5.5.7 and defaults to yes; previous versions never set the flag.

    +

    Setting this to no might be needed if you're using a buggy third-party DLL from [Code].

    + +
    + + +yes or no +yes + +

    Specifies whether the compiler should set the "Dynamic Base" flag in the headers of the Setup and Uninstall programs. This feature is new to version 5.5.7 and defaults to yes; previous versions never set the flag.

    + +
    + + + + +yes or no +no + +

    If set to yes, Setup will always create a log file. Equivalent to passing /LOG on the command line.

    +

    See also:
    +UninstallLogging

    + +
    + + + + + +yes or no +yes if a SignTool is set, no otherwise + +

    Specifies whether the uninstaller program (unins???.exe) should be deployed with a digital signature attached. When the uninstaller has a valid digital signature, users will not see an "unknown publisher" warning when launching it.

    +

    The first time you compile a script with this directive set to yes, a uniquely-named copy of the uninstaller EXE file will be created in the directory specified by the SignedUninstallerDir directive (which defaults to the output directory). Depending on the SignTool setting, you will either then be prompted to attach a digital signature to this file using an external code-signing tool (such as Microsoft's signtool.exe) or the file will be automatically signed on the fly. On subsequent compiles, the signature from the file will be embedded into the compiled installations' uninstallers.

    +

    Upgrading to a newer version of Inno Setup, or changing certain [Setup] section directives that affect the contents of the uninstaller EXE file (such as SetupIconFile and VersionInfo directives), will cause a new file to be created under a different name.

    +

    If a file generated by this directive is deleted, it will be recreated automatically if necessary on the next compile.

    +

    When the uninstaller has a digital signature, Setup will write the messages from the active language into a separate file (unins???.msg). It cannot embed the messages into the EXE file because doing so would invalidate the digital signature.

    +

    When set to yes, any temporary self-copies used by Setup are digitally signed too.

    +

    Details on obtaining signing certificates and using code-signing tools are beyond the scope of this documentation.

    + +
    + + +OutputDir + +

    Specifies the directory in which signed uninstaller files should be stored. By default, such files are stored in the output directory.

    +

    Separate script files may share the same SignedUninstallerDir setting. By setting up a common directory to hold signed uninstaller files, you won't have to re-sign the uninstaller each time you compile a new script file with a distinct OutputDir setting.

    +

    If SignedUninstallerDir is not a fully-qualified pathname, it will be treated as being relative to SourceDir. Setting SignedUninstallerDir to . will result in the files being placed in the source directory.

    +
    SignedUninstallerDir=c:\signeduninstallers
    + +
    + + + + + +A name followed by zero or more parameters, space separated + +

    Specifies the name and parameters of the Sign Tool to be used to digitally sign:

    +
      +
    • Setup
    • +
    • Uninstall if SignedUninstaller is set to yes
    • +
    • Original source files if the [Files] section's sign or signonce flag is used
    • +
    +

    When Setup has a valid digital signature, users will not see an "unidentified program" warning when launching it.

    +

    The specified Sign Tool name and its command have to be defined in the Compiler IDE (via the Tools | Configure Sign Tools... menu) or on the compiler command line (via the "/S" parameter), else an error will occur.

    +

    The following special sequences may be used in Sign Tool parameters and commands:

    +

    $f, replaced by the quoted file name of the file to be signed. (required)

    +

    $p, replaced by the Sign Tool parameters.

    +

    $q, replaced by a quote, useful for defining a Sign Tool which contains quotes from the command line.

    +

    $$, replaced by a single $ character.

    + +

    Assume the following Sign Tools have been defined in the Compiler IDE:

    +
    +mystandard=signtool.exe sign /a /n $qMy Common Name$q /t http://timestamp.comodoca.com/authenticode /d $qMy Program$q $f
    +mycustom=signtool.exe $p
    +byparam=$p
    +
    +

    then some examples would be:

    +
    +[Setup]
    +SignTool=mystandard
    +
    +[Setup]
    +SignTool=mycustom sign /a /n $qMy Common Name$q /t http://timestamp.comodoca.com/authenticode /d $qMy Program$q $f
    +
    +[Setup]
    +SignTool=byparam signtool.exe sign /a /n $qMy Common Name$q /t http://timestamp.comodoca.com/authenticode /d $qMy Program$q $f
    +
    +

    The Setup section may also list multiple SignTool directives which will be executed in order of appearance. This can be used to dual sign (SHA1 & SHA256) Setup and Uninstall:

    +
    +[Setup]
    +SignTool=mycustom sign /a /n $qMy Common Name$q /fd sha1 /t http://timestamp.comodoca.com/authenticode /d $qMy Program$q $f
    +;the /as parameter in the following SignTool requires a recent signtool.exe version and a SHA256 (SHA-2) certificate
    +SignTool=mycustom sign /a /n $qMy Common Name$q /as /fd sha256 /td sha256 /tr http://timestamp.comodoca.com/rfc3161 /d $qMy Program$q $f
    +
    +

    Note: for security reasons you should give a unique name to any Sign Tool set to $p, and not use a byparam name copied from this example. Consider what happens if you #include a third-party file that says:

    +
    +[Setup]
    +SignTool=byparam format c: 
    +
    +
    +

    Further details on obtaining signing certificates and using code-signing tools are beyond the scope of this documentation.

    +

    Note: If you use a Sign Tool and your Setup contains a large amount of data, it is recommended that you enable Disk spanning with DiskSliceSize set to max. If you don't do this, the user might experience a long delay after starting Setup caused by Windows verifying the digital signature against all your data. There should be no security reduction from using disk spanning in practice: all files extracted from the unsigned .bin files undergo SHA-1 verification (provided dontverifychecksum isn't used). The SHA-1 hashes for this (along with all other metadata) are kept inside Setup's EXE, which is protected by the digital signature.

    +

    See also:
    +SignToolMinimumTimeBetween
    +SignToolRetryCount
    +SignToolRunMinimized

    + +
    + + + + + +0 + +

    If not set to 0, specifies the minimum number of milliseconds that should have elapsed between consecutive digital signing actions by the compiler. For example, if set to 5000 then the compiler will perform 1 digital signing per 5 seconds at most. Can be used to avoid being rejected by rate limiting timestamp services.

    +

    See also:
    +SignTool

    + +
    + + + + + +2 + +

    Specifies the number of times the compiler should automatically retry digital signing on any errors.

    +

    See also:
    +SignTool
    +SignToolRetryDelay

    + +
    + + + + + +500 + +

    Specifies the number of milliseconds the compiler should wait before any automatic digital signing retries specified by SignToolRetryCount.

    +

    See also:
    +SignTool
    +SignToolRetryCount

    + +
    + + + + + +yes or no +no + +

    When set to yes, the compiler will run Sign Tools in a minimized window. Has no effect if the sign tool is a console program.

    +

    See also:
    +SignTool

    + +
    + + +0 or 1 +0 if the LZMA compression level is set to fast
    +1 otherwise
    + +

    Controls the algorithm used by the LZMA and LZMA2 compressors.

    +

    A value of 0 enables the fast algorithm.

    +

    A value of 1 enables the normal algorithm.

    + +
    + + +1024 through 262144 +4 * LZMADictionarySize with a minimum of 1024 and a maximum of 262144 + +

    Controls the block size used by the LZMA2 compressor, in kilobytes, when LZMANumBlockThreads is set to 2 or higher.

    +

    Note that setting this too high can negate the benefits of using multiple block threads. Typically, the block size should be no more than the total size of your data divided by the number of block threads.

    +

    See also:
    +LZMADictionarySize
    +LZMANumBlockThreads

    + +
    + + +4 through 131072 (by default)
    +4 through 1048576 if LZMAUseSeparateProcess is set to yes and running on 64-bit Windows (x64)
    +32 if the LZMA compression level is set to fast
    +2048 if the LZMA compression level is set to normal
    +8192 if the LZMA compression level is set to max
    +32768 if the LZMA compression level is set to ultra
    +65536 if the LZMA compression level is set to ultra64
    + +

    Controls the dictionary size used by the LZMA and LZMA2 compressors, in kilobytes. A larger dictionary size can provide a better compression ratio at the expense of compression speed and memory requirements.

    +

    Review the memory requirements listed in the Compression topic before using.

    +

    If an "Out of memory" error is seen after increasing the dictionary size, LZMAUseSeparateProcess may need to be set.

    +

    See also:
    +LZMABlockSize

    + +
    + + +HC or BT +HC if the LZMA compression level is set to fast
    +BT otherwise
    + +

    Controls the match finder method used by the LZMA and LZMA2 compressors.

    +

    A value of HC enables the Hash Chain method with 4 hash bytes.

    +

    A value of BT enables the Binary Tree method with 4 hash bytes.

    +

    The Binary Tree method can provide a better compression ratio at the expense of compression speed.

    + +
    + + +1 through 32 +1 + +

    When compressing a large amount of data, the LZMA2 compressor has the ability to divide the data into "blocks" and compress two or more of these blocks in parallel through the use of additional threads (provided sufficient processor power is available). This directive specifies the number of threads to use -- that is, the maximum number of blocks that the LZMA2 compressor may compress in parallel.

    +

    The memory required during compression when multiple block threads are used is roughly:

    +

    LZMANumBlockThreads * (Normal memory usage + (LZMABlockSize * 2))

    +

    Since LZMA2 (and LZMA) uses two threads for match-finding by default (see CompressionThreads), there ideally should be two processor cores available for each block thread. Thus, to see the maximum benefit from a value of 2, four cores are needed.

    +

    Dividing the data into multiple blocks can reduce the compression ratio, as the compressor cannot find matches across blocks. Using a large block size can help to mitigate this.

    +

    If an "Out of memory" error is seen when multiple block threads are enabled in combination with a compression level that uses a large dictionary size (such as ultra64), LZMAUseSeparateProcess may need to be set.

    +

    See also:
    +LZMABlockSize

    + +
    + + +5 through 273 +64 if the LZMA compression level is set to max, ultra, or ultra64
    +32 otherwise
    + +

    Controls number of fast bytes used by the LZMA and LZMA2 compressors. A larger number of fast bytes can provide a better compression ratio at the expense of compression speed.

    + +
    + + +force, yes, or no +yes + +

    If set to yes or force and Setup is not running silently, Setup will pause on the Preparing to Install wizard page if it detects applications using files that need to be updated by the [Files] or [InstallDelete] section, showing the applications and asking the user if Setup should automatically close the applications and restart them after the installation has completed.

    +

    If set to yes or force and Setup is running silently, Setup will always close and restart such applications, unless told not to via the command line.

    +

    If set to force Setup will force close when closing applications, unless told not to via the command line. Use with care since this may cause the user to lose unsaved work.

    +

    Note: Setup uses Windows Restart Manager to detect, close, and restart applications.

    +

    See also:
    +CloseApplicationsFilter
    +RegisterExtraCloseApplicationsResources
    +RestartApplications
    +AppMutex

    + +
    + + +A list of file name wildcards, separated by commas +*.exe,*.dll,*.chm + +

    Limits which [Files] and [InstallDelete] entries Setup will check for being in use. Only files matching one of the wildcards will be checked.

    +

    Setting this to *.* can provide better checking at the expense of speed.

    +

    See also:
    +CloseApplications
    +RestartApplications

    + +
    + + +yes or no +yes + +

    When set to yes and CloseApplications is also set to yes, Setup restarts the closed applications after the installation has completed.

    +

    Note: For Setup to be able to restart an application after the installation has completed, the application needs to be using the Windows RegisterApplicationRestart API function.

    +

    See also:
    +CloseApplications
    +CloseApplicationsFilter

    + +
    + + + + +

    For compatibility with previous Inno Setup versions, 1 and 0 may be used in place of yes and no, respectively.

    +

    Additionally, it allows true and false to be used in place of yes and no.

    + +
    + + +yes, no, or x86 +no + +

    Controls whether LZMA compression is performed inside the main compiler process or in a separate process.

    +

    Using a separate process for LZMA compression allows the compressor to allocate larger amounts of memory, which makes it possible for higher LZMADictionarySize and LZMANumBlockThreads settings to be used. Additionally, on 64-bit Windows (x64), a small increase in compression speed may be observed.

    +

    On 64-bit Windows (x64), there are no limitations on the amount of memory the compressor may use, as it runs inside a native 64-bit process. On 32-bit Windows, however, due to address space constraints, typically only about 1.5 GB is available for use by the compressor.

    +

    A value of yes enables the use of a 64-bit process on 64-bit Windows (x64), and a 32-bit process on 32-bit Windows.

    +

    A value of x86 enables the use of a 32-bit process only (normally only useful for debugging purposes).

    +

    A value of no disables the use of a separate process for LZMA compression.

    +

    Note that this directive only affects the compression of files specified in the [Files] section; compression of Setup's internal structures is always performed inside the main compiler process.

    + +
    + + + + +

    When a new version of an application is installed over an existing version, instead of creating a new uninstall log file (unins???.dat), Setup will by default look for and append to an existing uninstall log file that belongs to the same application and is in the same directory. This way, when the application is uninstalled, changes made by all the different installations will be undone (starting with the most recent installation).

    +

    The uninstaller will use the messages from the most recent installation of the application. However, there is an exception: if an installation was built with an older version of Inno Setup that included an older version of the uninstaller than the existing one on the user's system, neither the existing uninstaller nor its messages will be replaced. In this case the uninstall log will still be appended to, though, since the file format is backward compatible.

    +

    The application name displayed in the uninstaller will be the same as the value of the [Setup] section directive AppName from the most recent installation, unless UpdateUninstallLogAppName is set to no.

    +

    To disable the uninstall log-appending feature set the [Setup] section directive UninstallLogMode.

    + +
    + + + + +

    "Same application" refers to two separate installation runs that share the same AppId setting (or if AppId is not set, the same AppName setting), and the same administrative or non administrative install mode, and the same 32-bit or 64-bit install mode*. Two of such installation runs will usually lead to only one actual installation of the files.

    +

    (* = This requirement does not apply to any same application information retrieved from the registry in non administrative install mode since the HKEY_CURRENT_USER key is shared between the 32-bit and 64-bit registry. It does however always apply to the uninstall log since the 32-bit and 64-bit uninstall logs are kept separate, even in non administrative install mode. In practice this means you should avoid offering both a 32-bit and a 64-bit non administrative installer to your users without giving these installers different AppId, DefaultDirName, DefaultGroupName, and UninstallDisplayName settings.)

    +

    See also:
    +Side-by-side installation

    + +
    + + + + +

    "Side-by-side installation" refers to two separate installation runs that share the same AppId setting (or if AppId is not set, the same AppName setting) but not the other "Same application" requirements. Two of such installation runs will usually lead to two actual installations of the files. To avoid entries with identical names in the Add/Remove Programs Control Panel applet Setup will automatically mark the new entry with a text like "Current user" or "64-bit" when necessary during a side-by-side installation.

    + +
    + + + + +

    By default, the compiler expects to find files referenced in the script's [Files] section Source parameters, and files referenced in the [Setup] section, under the same directory the script file is located if they do not contain fully qualified pathnames. To specify a different source directory, create a SourceDir directive in the script's [Setup] section.

    + +
    + + + + +

    The versions specified in MinVersion and OnlyBelowVersion can optionally include build numbers and/or service pack levels.

    + +
    +6.1sp1
    +10.0.22000
    +
    +
    +

    If a build number is not specified or is zero, Setup will not check the system's build number.

    +

    If a service pack level is not specified or is zero, Setup will not check the system's service pack level.

    +

    When a service pack level is specified, Setup will only compare it against the system's service pack level if the specified major and minor versions match the system's version. For example, if MinVersion specifies 6.1sp1, Setup will only check for SP1 on Windows 7 and Windows Server 2008 R2 (6.1) systems.

    +

    In an OnlyBelowVersion parameter, if the specified version matches the system's version, then Setup will normally consider the system's version to be too high. However, when a service pack level is specified, the specified version is allowed to match the system's version.

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    6.1.7600Windows 7
    or Windows Server 2008 R2
    6.1.7601Windows 7 with Service Pack 1
    or Windows Server 2008 R2 with Service Pack 1
    6.2.9200Windows 8
    or Windows Server 2012
    6.3.9200Windows 8.1
    or Windows Server 2012 R2
    6.3.9600Windows 8.1 with Update 1
    10.0.10240Windows 10 Version 1507
    10.0.10586Windows 10 Version 1511 (November Update)
    10.0.14393Windows 10 Version 1607 (Anniversary Update)
    or Windows Server 2016
    10.0.15063Windows 10 Version 1703 (Creators Update)
    10.0.16299Windows 10 Version 1709 (Fall Creators Update)
    10.0.17134Windows 10 Version 1803 (April 2018 Update)
    10.0.17763Windows 10 Version 1809 (October 2018 Update)
    or Windows Server 2019
    10.0.18362Windows 10 Version 1903 (May 2019 Update)
    10.0.18363Windows 10 Version 1909 (November 2019 Update)
    10.0.19041Windows 10 Version 2004 (May 2020 Update)
    10.0.19042Windows 10 Version 20H2 (October 2020 Update)
    10.0.19043Windows 10 Version 21H1 (May 2021 Update)
    10.0.19044Windows 10 Version 21H2 (November 2021 Update)
    10.0.19045Windows 10 Version 22H2 (2022 Update)
    10.0.20348Windows Server 2022 Version 21H2
    10.0.22000Windows 11 Version 21H2 (original release)
    10.0.22621Windows 11 Version 22H2 (2022 Update)
    10.0.22631Windows 11 Version 23H2 (2023 Update)
    10.0.26100Windows 11 Version 24H2 (2024 Update)
    +

    Note that except for Windows 11 there is normally no need to specify the build numbers (i.e., you may simply use "6.2" for Windows 8).

    + +
    + + + + + + + + + + + + + + + +
    adminsAdministrators group
    authusersAuthenticated Users group
    creatorownerCreator Owner
    everyoneEveryone group
    guestsGuests group
    iisiusrsIIS users group
    networkserviceNetwork service account
    serviceLocal service account
    systemLocal system account
    usersUsers group
    + +
    + +
    diff --git a/ISHelp/isx.xml b/ISHelp/isx.xml new file mode 100644 index 00000000..1e213c83 --- /dev/null +++ b/ISHelp/isx.xml @@ -0,0 +1,803 @@ + + + + + + + + + + + + + +

    The Pascal scripting feature (modern Delphi-like Pascal) adds lots of new possibilities to customize your Setup or Uninstall at run-time. Some examples:

    + +
      + +
    • Support for aborting Setup or Uninstall startup under custom conditions.
    • + +
    • Support for adding custom wizard pages to Setup at run-time.
    • + +
    • Support for extracting and calling DLL or other files from the Pascal script before, during or after the installation.
    • + +
    • Support for scripted constants that can do anything the normal constants, the read-from-registry, read-from-ini and read-from-commandline constants can do + more.
    • + +
    • Support for run-time removal of types, components and/or tasks under custom conditions.
    • + +
    • Support for conditional installation of [Files], [Registry], [Run] etc. entries based on custom conditions.
    • + +
    • Lots of support functions to do from the Pascal script just about everything Inno Setup itself does/can do + more.
    • + +
    + +

    An integrated run-time debugger to debug your custom Pascal script is also available.

    + +

    The scripting engine used by Inno Setup is RemObjects Pascal Script by Carlo Kok. Like Inno Setup, RemObjects Pascal Script is freely available and comes with source. See http://www.remobjects.com/ps for more information.

    + +

    Note: the Pascal scripting feature works exclusively at run-time, and has no compile-time functionality.

    + +


    See also:
    +Creating the [Code] section
    +Event Functions
    +Scripted Constants
    +Check Parameters
    +BeforeInstall and AfterInstall Parameters
    +Uninstall Code
    +Examples
    +Support Functions Reference
    +Support Classes Reference
    +Using Custom Wizard Pages
    +Using DLLs and .NET assemblies
    +Using COM Automation objects
    +Debugging +

    + + +
    + + + + + + + + + +

    The [Code] section is an optional section that specifies a Pascal script. A Pascal script can be used to customize Setup or Uninstall in many ways. Note that creating a Pascal script is not easy and requires experience with Inno Setup and knowledge about programming in Pascal or at least a similar programming language.

    + +

    The Code*.iss, UninstallCode*.iss, and AllPagesExample.iss example scripts in the "Examples" subdirectory in your Inno Setup directory contain various example [Code] sections. Please study them carefully before trying to create your own Pascal script.

    + +

    Note: to learn more about the Pascal programming language you may find useful to refer to Marco Cantù's free Essential Pascal book. See http://www.marcocantu.com/epascal/ and https://www.marcocantu.com/epascal/EssentialPascal.zip.

    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    The Pascal script can contain several event functions which are called at appropriate times.

    + +Setup event functions + +

    Setup supports following event functions:

    + +
    + +
    function InitializeSetup(): Boolean;
    +
    +

    Called during Setup's initialization. Return False to abort Setup, True otherwise.

    +
    + +
    procedure InitializeWizard();
    +
    +

    Use this event function to make changes to the wizard or wizard pages at startup. You can't use the InitializeSetup event function for this since at the time it is triggered, the wizard form does not yet exist.

    +
    + +
    procedure DeinitializeSetup();
    +
    +

    Called just before Setup terminates. Note that this function is called even if the user exits Setup before anything is installed.

    +
    + +
    procedure CurStepChanged(CurStep: TSetupStep);
    +
    +

    You can use this event function to perform your own pre-install and post-install tasks.

    +

    Called with CurStep=ssInstall just before the actual installation starts, with CurStep=ssPostInstall just after the actual installation finishes, and with CurStep=ssDone just before Setup terminates after a successful install.

    +
    + +
    procedure CurInstallProgressChanged(CurProgress, MaxProgress: Integer);
    +
    +

    You can use this event function to monitor progress while Setup is extracting files, creating shortcuts, creating INI entries, and creating registry entries.

    +
    + +
    function NextButtonClick(CurPageID: Integer): Boolean;
    +
    +

    Called when the user clicks the Next button. If you return True, the wizard will move to the next page; if you return False, it will remain on the current page (specified by CurPageID).

    +

    Note that this function is called on silent installs as well, even though there is no Next button that the user can click. Setup instead simulates "clicks" on the Next button. On a silent install, if your NextButtonClick function returns False prior to installation starting, Setup will exit automatically.

    +
    + +
    function BackButtonClick(CurPageID: Integer): Boolean;
    +
    +

    Called when the user clicks the Back button. If you return True, the wizard will move to the previous page; if you return False, it will remain on the current page (specified by CurPageID).

    +
    + +
    procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
    +
    +

    Called when the user clicks the Cancel button or clicks the window's Close button. The Cancel parameter specifies whether normal cancel processing should occur; it defaults to True. The Confirm parameter specifies whether an "Exit Setup?" message box should be displayed; it usually defaults to True. If Cancel is set to False, then the value of Confirm is ignored.

    +
    + +
    function ShouldSkipPage(PageID: Integer): Boolean;
    +
    +

    The wizard calls this event function to determine whether or not a particular page (specified by PageID) should be shown at all. If you return True, the page will be skipped; if you return False, the page may be shown.

    +

    Note: This event function isn't called for the wpPreparing, and wpInstalling pages, nor for pages that Setup has already determined should be skipped (for example, wpSelectComponents in an install containing no components).

    +
    + +
    procedure CurPageChanged(CurPageID: Integer);
    +
    +

    Called after a new wizard page (specified by CurPageID) is shown.

    +
    + +
    function CheckPassword(Password: String): Boolean;
    +
    +

    If Setup finds the CheckPassword event function in the Pascal script, it automatically displays the Password page and calls CheckPassword to check passwords. Return True to accept the password and False to reject it.

    +

    To avoid storing the actual password inside the compiled [Code] section which is stored inside Setup, you should use comparisons by hash only: calculate the SHA-1 hash of your salted password yourself and then compare that to GetSHA1OfString(Password). This way the actual value of the password remains protected.

    +

    Note: If Setup is run with a /PASSWORD= command line parameter, your CheckPassword function will be called before any other event function is called, including InitializeSetup.

    +
    + +
    function NeedRestart(): Boolean;
    +
    +

    Return True to instruct Setup to prompt the user to restart the system at the end of a successful installation, False otherwise.

    +
    + +
    function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
    +
    +

    If Setup finds the UpdateReadyMemo event function in the Pascal script, it is called automatically when the Ready to Install wizard page becomes the active page. It should return the text to be displayed in the settings memo on the Ready to Install wizard page as a single string with lines separated by the NewLine parameter. Parameter Space contains a string with spaces. Setup uses this string to indent settings. The other parameters contain the (possibly empty) strings that Setup would have used as the setting sections. The MemoDirInfo parameter for example contains the string for the Selected Directory section.

    +
    + +
    procedure RegisterPreviousData(PreviousDataKey: Integer);
    +
    +

    To store user settings entered on custom wizard pages, place a RegisterPreviousData event function in the Pascal script and call SetPreviousData(PreviousDataKey, ...) inside it, once per setting.

    +
    + +
    function CheckSerial(Serial: String): Boolean;
    +
    +

    If Setup finds the CheckSerial event function in the Pascal script, a serial number field will automatically appear on the User Info wizard page (which must be enabled using UserInfoPage=yes in your [Setup] section!). Return True to accept the serial number and False to reject it. When using serial numbers, it's important to keep in mind that since no encryption is used and the source code to Inno Setup is freely available, it would not be too difficult for an experienced individual to remove the serial number protection from an installation. Use this only as a convenience to the end user and double check the entered serial number (stored in the {userinfoserial} constant) in your application.

    +
    + +
    function GetCustomSetupExitCode: Integer;
    +
    +

    Return a non zero number to instruct Setup to return a custom exit code. This function is only called if Setup was successfully run to completion and the exit code would have been 0. Also see Setup Exit Codes.

    +
    + +
    function PrepareToInstall(var NeedsRestart: Boolean): String;
    +
    +

    You can use this event function to detect and install missing prerequisites and/or to shutdown any application which is about to be updated.

    +

    Return a non empty string to instruct Setup to stop at the Preparing to Install wizard page, showing the returned string as the error message. Set NeedsRestart to True (and return a non empty string) if a restart is needed. If Setup is stopped this way, it will exit with a dedicated exit code as described in Setup Exit Codes. Any custom exit code set by the /RESTARTEXITCODE= command line parameter will not be used in this case.

    +

    This function is called before Setup checks for files being in-use if CloseApplications is set to yes.

    +

    This function is only called if Setup didn't already determine it can't continue because one or more files specified in the [Files] and [InstallDelete] sections were queued (by some other installation) to be replaced or deleted on the next restart.

    +
    + +
    procedure RegisterExtraCloseApplicationsResources;
    +
    +

    To register extra files which Setup should check for being in-use if CloseApplications is set to yes, place a RegisterExtraCloseApplicationsResources event function in the Pascal script and call RegisterExtraCloseApplicationsResource inside it, once per file.

    +
    + +
    + +Uninstall event functions + +

    Uninstall supports following event functions:

    + +
    + +
    function InitializeUninstall(): Boolean;
    +
    +

    Return False to abort Uninstall, True otherwise.

    +
    + +
    procedure InitializeUninstallProgressForm();
    +
    +

    Use this event function to make changes to the progress form at startup. You can't use the InitializeUninstall event function for this since at the time it is triggered, the progress form does not yet exist.

    +
    + +
    procedure DeinitializeUninstall();
    +
    + +
    procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
    +
    + +
    function UninstallNeedRestart(): Boolean;
    +
    +

    Return True to instruct Uninstall to prompt the user to restart the system at the end of a successful uninstallation, False otherwise.

    +
    + +
    + +Constants + +

    Here's the list of constants used by these functions:

    + +
      + +
    • TSetupStep values
      +ssInstall, ssPostInstall, ssDone
    • + +
    • TUninstallStep values
      +usAppMutexCheck, usUninstall, usPostUninstall, usDone
    • + +
    • PageID values for predefined wizard pages
      +wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished
    • + +
    + +Event Attributes + +

    Normally a script can contain only one implementation per event function. Using event attributes it is possible to have multiple implementations of the same event function in your script. This is especially useful in included scripts implementing an event function to avoid conflicts with the main script.

    + +

    Here is an example of a script which contains three implementations of the InitializeWizard event function.

    + + +[Code] +procedure InitializeWizard; +begin + Log('InitializeWizard called'); +end; + +<event('InitializeWizard')> +procedure InitializeWizard2; +begin + Log('InitializeWizard2 called'); +end; + +<event('InitializeWizard')> +procedure InitializeWizard3; +begin + Log('InitializeWizard3 called'); +end; + + +

    The following rules apply:

    + +
      +
    • The implementations will be called in order of their definition except that any main implementation (=the implementation without an event attribute) will be called last.
    • +
    • Event attributes may be used for all event functions. If the event function has a return value then lazy evaluation is performed:
    • +
        +
      • InitializeSetup, BackButtonClick, NextButtonClick, InitializeUninstall: All implementations must return True for the event function to be treated as returning True and an implementation returning False stops the calls to the other implementations.
      • +
      • CheckPassword, CheckSerial, ShouldSkipPage, NeedRestart: All implementations must return False for the event function to be treated as returning False and an implementation returning True stops the calls to the other implementations.
      • +
      • UpdateReadyMemo, PrepareToInstall: All implementations must return an empty string for the event function to be treated as returning an empty string and an implementation returning a non empty string stops the calls to the other implementations.
      • +
      • GetCustomSetupExitCode: All implementations must return zero for the event function to be treated as returning zero and an implementation returning a non zero number stops the calls to the other implementations.
      • +
      +
    • Event attributes may only be used on procedures or functions which do not already have the name of an event function.
    • +
    • If the event function uses var parameters then the value will be passed on from implementation to implementation.
    • +
    • To call an implementation with an event attribute yourself from [Code] you should use the normal name of the function, just as if the implementation had no event attribute.
    • +
    + + +
    + + + + + + + + + +

    The Pascal script can contain several functions which are called when Setup wants to know the value of a scripted {code:...} constant. The called function must have 1 String parameter named Param, and must return a String or a Boolean value depending on where the constant is used.

    + +

    The syntax of a {code:...} constant is: {code:FunctionName|Param}

    + +
      + +
    • FunctionName specifies the name of the Pascal script function.
    • + +
    • Param specifies the string parameter to pass to the function. If you omit Param, an empty string will be passed.
    • + +
    • If you wish to include a comma, vertical bar ("|"), or closing brace ("}") inside the constant, you must escape it via "%-encoding." Replace the character with a "%" character, followed by its two-digit hex code. A comma is "%2c", a vertical bar is "%7c", and a closing brace is "%7d". If you want to include an actual "%" character, use "%25".
    • + +
    • Param may include constants. Note that you do not need to escape the closing brace of a constant as described above; that is only necessary when the closing brace is used elsewhere.
    • + +
    + + +
    DefaultDirName={code:MyConst}\My Program
    +
    + +

    Here is an example of a [Code] section containing the MyConst function used above.

    + + +[Code] +function MyConst(Param: String): String; +begin + Result := ExpandConstant('{autopf}'); +end; + + +

    If the function specified by the {code:...} constant is not included in the [Code] section, it must be a support function. Here is an example.

    + + +[INI] +FileName: "{app}\MyIni.ini"; Section: "MySettings"; Key: "ShortApp"; String: "{code:GetShortName|{app}}" + + +


    See also:
    +Constants +

    + + +
    + + + + + + + + +

    There is one optional parameter that is supported by all sections whose entries are separated into parameters. This is:

    + + + + +

    The name of a check function that determines whether an entry has to be processed or not. The function must either be a custom function in the [Code] section or a support function.

    +

    Besides a single name, you may also use boolean expressions. See Components and Tasks parameters for examples of boolean expressions.

    +

    For each check function, may include a comma separated list of parameters that Setup should pass to the check function. Allowed parameter types are String, Integer and Boolean. String parameters may include constants. These constants will not be automatically expanded. If you want to pass an expanded constant, there's one special support function that may be called from within a parameter list for this: ExpandConstant.

    + +
    [Files]
    +Source: "MYPROG.EXE"; DestDir: "{app}"; Check: MyProgCheck
    +Source: "A\MYFILE.TXT"; DestDir: "{app}"; Check: MyDirCheck(ExpandConstant('{app}\A'))
    +Source: "B\MYFILE.TXT"; DestDir: "{app}"; Check: DirExists(ExpandConstant('{app}\B'))
    +
    + + +
    + +

    All check functions must have a Boolean return value. If a check function (or the boolean expression) returns True, the entry is processed otherwise it's skipped.

    + +

    Setup might call each check function several times, even if there's only one entry that uses the check function. If your function performs a lengthy piece of code, you can optimize it by performing the code only once and 'caching' the result in a global variable.

    + +

    A check function isn't called if Setup already determined the entry shouldn't be processed.

    + +

    A check function for a [Files] section entry using a wildcard but not the external flag is called once per file matching the wildcard, instead of once per entry. Use CurrentFileName to check for which file the function is called.

    + +

    Here is an example of a [Code] section containing the check functions used above. Function DirExists is a support function and therefore not included in this [Code] section.

    + + +[Code] +var + MyProgChecked: Boolean; + MyProgCheckResult: Boolean; + +function MyProgCheck(): Boolean; +begin + if not MyProgChecked then begin + MyProgCheckResult := MsgBox('Do you want to install MyProg.exe to ' + ExtractFilePath(CurrentFileName) + '?', mbConfirmation, MB_YESNO) = idYes; + MyProgChecked := True; + end; + Result := MyProgCheckResult; +end; + +function MyDirCheck(DirName: String): Boolean; +begin + Result := DirExists(DirName); +end; + + + +
    + + + + + + + + + +

    There are two optional parameters that are supported by all sections whose entries are separated into parameters except for [Languages], [Types], [Components] and [Tasks]. These are:

    + + + + +

    The name of a function that is to be called once just before an entry is installed. The function must either be a custom function in the [Code] section or a support function.

    +

    May include a comma separated list of parameters that Setup should pass to the function. Allowed parameter types are String, Integer and Boolean. String parameters may include constants. These constants will not be automatically expanded. If you want to pass an expanded constant, there's one special support function that may be called from within a parameter list for this: ExpandConstant.

    + +
    [Files]
    +Source: "MYPROG.EXE"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall
    +Source: "A\MYFILE.TXT"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall2('{app}\A\MYFILE.TXT')
    +Source: "B\MYFILE.TXT"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall2('{app}\B\MYFILE.TXT')
    +Source: "MYPROG.CHM"; DestDir: "{app}"; BeforeInstall: Log('Before MYPROG.CHM Install')
    +
    + + + +

    The name of a function that is to be called once just after an entry is installed. The function must either be a custom function in the [Code] section or a support function.

    +

    May include a comma separated list of parameters that Setup should pass to the function. Allowed parameter types are String, Integer and Boolean. String parameters may include constants. These constants will not be automatically expanded. If you want to pass an expanded constant, there's one special support function that may be called from within a parameter list for this: ExpandConstant.

    + +
    [Files]
    +Source: "MYPROG.EXE"; DestDir: "{app}"; AfterInstall: MyAfterInstall
    +Source: "A\MYFILE.TXT"; DestDir: "{app}"; AfterInstall: MyAfterInstall2('{app}\A\MYFILE.TXT')
    +Source: "B\MYFILE.TXT"; DestDir: "{app}"; AfterInstall: MyAfterInstall2('{app}\B\MYFILE.TXT')
    +Source: "MYPROG.CHM"; DestDir: "{app}"; AfterInstall: Log('After MYPROG.CHM Install')
    +
    + + +
    + +

    All BeforeInstall and AfterInstall functions must not have a return value.

    + +

    A BeforeInstall or AfterInstall function isn't called if Setup already determined the entry shouldn't be processed.

    + +

    A BeforeInstall or AfterInstall function for a [Files] section entry using a wildcard but not the external flag is called once per file matching the wildcard, instead of once per entry. Use CurrentFileName to check for which file the function is called.

    + +

    Here is an example of a [Code] section containing the functions used above. Functions CurrentFileName and Log are support functions and therefore not included in this [Code] section.

    + + +[Code] +procedure MyBeforeInstall(); +begin + MsgBox('About to install MyProg.exe as ' + CurrentFileName + '.', mbInformation, MB_OK); +end; + +procedure MyBeforeInstall2(FileName: String); +begin + MsgBox('About to install ' + FileName + ' as ' + CurrentFileName + '.', mbInformation, MB_OK); +end; + +procedure MyAfterInstall(); +begin + MsgBox('Just installed MyProg.exe as ' + CurrentFileName + '.', mbInformation, MB_OK); +end; + +procedure MyAfterInstall2(FileName: String); +begin + MsgBox('Just installed ' + FileName + ' as ' + CurrentFileName + '.', mbInformation, MB_OK); +end; + + + +
    + + + + + + + + +

    The Pascal script can also contain code invoked at uninstall time. See the Event Functions topic for more information.

    + +

    There is one thing that's important to be aware of when designing code to be executed at uninstall time: In cases where multiple versions of an application are installed over each other, only one Pascal script is run at uninstall time. Ordinarily, the script from the most recent install will be chosen. If, however, you were to downgrade your version of Inno Setup in a new version of your application, the script from the install built with the most recent Inno Setup version may be chosen instead. A similar situation can occur if a user installs an older version of your application over a newer one.

    + +

    When producing an installation that is a "patch" for another install, and the patch install shares the same uninstall log as the original install (i.e. Uninstallable is set to yes and AppId is the set the same as the original install), make sure the patch includes a copy of the full [Code] section from the original install. Otherwise, no code would be run at uninstall time.

    + +

    If, however, the patch install has Uninstallable set to no then Setup will not touch the existing uninstaller EXE or uninstall log; in this case, the patch install need not contain a copy of the [Code] section from the original install.

    + + +
    + + + + + + + +

    The Pascal Scripting example scripts are located in separate files. Open one of the Code*.iss, UninstallCode*.iss, or AllPagesExample.iss example scripts in the "Examples" subdirectory in your Inno Setup directory.

    + + +
    + + + + + + + + +

    The Pascal script allows you to add custom pages to Setup's wizard. This includes "pre-built" wizard pages for common queries and completely custom wizard pages with the controls of your choice.

    + +

    To use custom wizard pages, first create them inside your InitializeWizard event function. You can either use pre-built pages created by the CreateInput...Page and CreateOutput...Page functions or "empty" pages created by the CreateCustomPage function. See Support Functions topic for a listing and explanation of all Create...Page functions.

    + +

    After creating each page, you add controls to it, either by calling the special methods of the pre-built pages, or by manually creating controls on the page yourself.

    + +

    Most of the Create...Page functions take a "page ID" as their first parameter; this identifies the existing page after which the newly created page should be placed. There are several ways to find the "page ID" of an existing page. The pages you create yourself have ID properties which hold their page IDs. Built-in wizard pages have predefined IDs. For example, for the Welcome wizard page this is wpWelcome. See the Support Functions topic for a listing of all predefined IDs.

    + +

    After the custom wizard pages are created, Setup will show and handle them just as if they were built-in wizard pages. This includes the calling of all page related event functions such as NextButtonClick and ShouldSkipPage.

    + +

    At any time during Setup you can retrieve the values entered by the user either by using the special properties of the pre-built pages, or by using the properties of the controls you created yourself.

    + +

    Open the "CodeDlg.iss" script in the "Examples" subdirectory of your Inno Setup directory for an example of how to use pre-built custom wizard pages and event functions. Open the "CodeClasses.iss" script for an example of how to use completely custom wizard pages and controls.

    + + +
    + + + + + + + + + +

    The Pascal script can call functions inside external DLLs. This includes both standard Win32 API functions inside standard Windows DLLs and custom functions in custom made DLLs. Additionally .NET assemblies can be called.

    + +

    Open the "CodeDll.iss" file in the "Examples" subdirectory in your Inno Setup directory for an example script using DLLs.

    + +

    The "Examples" subdirectory also contains three custom DLL example projects, one for Microsoft Visual C++, one for Microsoft Visual C# and one for Borland Delphi. The C# example shows how to make your .NET assemblies callable by the Pascal script.

    + +

    To be able to call a DLL function you should first write the function prototype as normal but instead of then writing the function body, you use the 'external' keyword to specify a DLL. If your function has for example prototype function A(B: Integer): Integer;, the following three forms are supported:

    + + +[Code] +function A(B: Integer): Integer; +external '<dllfunctionname>@<dllfilename>'; + +function A(B: Integer): Integer; +external '<dllfunctionname>@<dllfilename> <callingconvention>'; + +function A(B: Integer): Integer; +external '<dllfunctionname>@<dllfilename> <callingconvention> <options>'; + + +

    The first form specifies that the DLL function should be called using default calling convention, which is 'stdcall'. All standard Win32 API functions use 'stdcall' just like most custom DLL functions.

    + +

    The second form specifies that the DLL function should be called using a special calling convention. Valid calling conventions are: 'stdcall' (the default), 'cdecl', 'pascal' and 'register'.

    + +

    The third form specifies additional one or more options for loading the DLL, separated by spaces:

    + + + + + +

    Specifies that the DLL should be delay loaded. Normally the Pascal script checks at startup whether the DLL function can be called and if not, refuses to run. This does not happen if you specify delay loading using 'delayload'. Use delay loading if you want to call a DLL function for which you don't know whether it will actually be available at runtime: if the DLL function can't be called, the Pascal script will still run but throw an exception when you try to call the DLL function which you can catch to handle the absence of the DLL function.

    +
    + + +

    Specifies that the DLL should be loaded using the Windows flag LOAD_WITH_ALTERED_SEARCH_PATH, which, in essence, causes the loader to search for any dependent DLLs in the directory containing the DLL.

    +
    + + +

    Specifies that the DLL should only be loaded when the script is running from Setup.

    +
    + + +

    Specifies that the DLL should only be loaded when the script is running from Uninstall.

    +
    + +
    +
    + +

    An example (of the second form) if the DLL function has name 'A2' inside the DLL, the DLL has name 'MyDll.dll' and the DLL function uses the 'stdcall' calling convention:

    + + +[Code] +function A(B: Integer): Integer; +external 'A2@MyDll.dll stdcall'; + + +

    Constants may be used in the DLL filename.

    +

    During Setup, a special 'files:' prefix may also be used to instruct Setup to automatically extract one or more DLLs from the [Files] section before loading the first DLL. For example:

    + + +[Files] +Source: "MyDll.dll"; Flags: dontcopy +Source: "A.dll"; Flags: dontcopy +Source: "B.dll"; Flags: dontcopy + +[Code] +procedure MyDllFunc(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal); +external 'MyDllFunc@files:MyDll.dll stdcall'; + +procedure ADllFunc(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal); +external 'ADllFunc@files:A.dll,B.dll stdcall loadwithalteredsearchpath'; //A.dll depends on B.dll + + +

    If you use a 'files:' prefix and solid compression is enabled, be sure to list your DLLs at (or near) the top of the [Files] section. In order to extract an arbitrary file in a solid-compressed installation, Setup must first decompress all prior files (to a temporary buffer in memory). This can result in a substantial delay if a number of other files are listed above the specified file in the [Files] section.

    + +

    Use CreateCallback to be able to perform direct callbacks from DLL functions (like Windows API functions) to functions in your script

    + +
    + + + + + + + + + + +

    The Pascal script can access COM (also known as OLE or ActiveX) methods and properties via the COM Automation objects support. This allows you to access for example standard Windows COM servers, custom COM servers, Visual Basic ActiveX DLLs and .NET assemblies via COM Interop.

    + +
    + +
    IDispatch based COM
    + +
    + +

    There are two support functions to initialize IDispatch based COM Automation objects: CreateOleObject and GetActiveOleObject.

    + +

    Use CreateOleObject to create a new COM object with the specified class name. This function returns a variable of type Variant if successful and throws an exception otherwise.

    + +

    Use GetActiveOleObject to connect to an existing COM object with the specified class name. This function returns a variable of type Variant if successful and throws an exception otherwise. In case of some programs, this can be used to detect whether the program is running or not.

    + +

    The value returned by CreateOleObject or GetActiveOleObject can then be used to access the properties and methods of the COM object. The access is done via 'late binding' which means it is not checked whether the methods or properties you're trying to access actually exist until Setup actually needs to at run time.

    + +

    To access a property or method whose name is a reserved word, use IDispatchInvoke.

    + +

    Open the "CodeAutomation.iss" file in the "Examples" subdirectory in your Inno Setup directory for an example script using IDispatch based COM Automation objects.

    + +

    If you're using a .NET COM object and loading it fails since Inno Setup 5.5.9 try putting this line in your script before creating the COM object: LoadDLL(ExpandConstant('{sys}\mscoree.dll'), ErrorCode); and add a variable ErrorCode of type Integer.

    + +
    + +
    IUnknown based COM
    + +
    + +

    If the IDispatch interface isn't implemented by the object, you can use the IUnknown based COM support.

    + +

    To initialize IUnknown based COM Automation objects use CreateComObject.

    + +

    The value returned by CreateComObject can then be used to access the methods of the COM object after casting it to the desired interface. The access is done via 'early binding' which means the desired interface needs to be defined in the script, unlike for IDispatch based COM support.

    + +

    StringToGUID can be used to convert the string representation of a GUID into a 'real' GUID. Use OleCheck to check the return values of any method you call.

    + +

    If you copy the interface definition from any existing Delphi source code, remove the brackets around the interface GUID string. Also remove any calling conventions, Inno Setup assumes 'stdcall'. If the interface contains any functions you won't call, you can replace these by dummies to avoid having to define any special types used by them.

    + +

    Open the "CodeAutomation2.iss" file in the "Examples" subdirectory in your Inno Setup directory for an example script using IUnknown based COM Automation objects.

    + +
    + +
    General
    + +
    + +

    COM objects are released automatically when they go out of scope. There are no functions to 'destroy' or 'free' them.

    + +

    If you are extracting a COM Automation library to a temporary location and want to be able to delete it after using it, make sure you no longer have any references to the library and then call CoFreeUnusedLibraries. This Windows function will then attempt to unload the library so you can delete it.

    + +
    + +
    + + +
    + + + + + + +

    The Compiler IDE contains an integrated run-time debugger to debug your custom Pascal script, accessed via the Run menu. This debugger works very much like debuggers in other IDE's and uses the following menu items:

    + +
    + +
    Run To Cursor (F4)
    +
    +

    Runs or unpauses Setup until it reaches the line of the cursor, then pauses it.

    +
    + +
    Step Into (F7)
    +
    +

    Runs or unpauses Setup until it reaches the next line, then pauses it. By continually pressing F7 you can follow the entire execution flow of Setup.

    +
    + +
    Step Over (F8)
    +
    +

    Runs or unpauses Setup until it reaches the next line, then pauses it. Lines inside functions calls are skipped.

    +
    + +
    Step Out (Shift+F8)
    +
    +

    Unpauses Setup until it reaches the end of the current function, then pauses it on the next line.

    +
    + +
    Toggle Breakpoint (F5)
    +
    +

    Next time Setup reaches the line of the cursor, it pauses. There can be multiple breakpoints at once and breakpoints can be removed by pressing F5 again.

    +
    + +
    Pause
    +
    +

    Next time Setup reaches any line, it pauses.

    +
    + +
    + +

    When Setup is paused variables and constants can be inspected by hovering the mouse over them.

    + +

    To debug Uninstall instead of Setup first run Setup to completion then choose Target Uninstall (Ctrl+W) and finally use one of the above menu items.

    + +

    Lines which can be paused on are marked by a gray square in the gutter. The square turns green the first time Setup reaches the line.

    + +

    Besides lines in the Pascal script, lines in some other sections can also be paused on, again shown by a gray square in the gutter. For example, toggling a breakpoint on a line in the [Files] section will pause Setup when that file is about to be processed. On such lines Step Over and Step Out both act as Step Into.

    + + +
    + + + + + +

    See Pascal Scripting: Check Parameters for more information on boolean expressions and see Uninstallable for an example.

    + +
    + + + + + + +

    This is the list of support functions which test if the system matches an architecture identifier:

    +IsArm32Compatible
    +IsArm64
    +IsWin64
    +IsX64Compatible
    +IsX64OS
    +IsX86Compatible
    +IsX86OS

    +IsX64 (alias for IsX64OS; deprecated)
    +IsX86 (alias for IsX86OS)

    +

    See also:
    +ProcessorArchitecture

    + +
    + +
    diff --git a/ISHelp/isxclasses.footer b/ISHelp/isxclasses.footer new file mode 100644 index 00000000..bb30cdca --- /dev/null +++ b/ISHelp/isxclasses.footer @@ -0,0 +1,19 @@ +

    See also:
    +function CreateCustomForm: TSetupForm;
    +function CreateCustomPage(const AfterID: Integer; const ACaption, ADescription: String): TWizardPage;
    +function CreateDownloadPage(const ACaption, ADescription: String; const OnDownloadProgress: TOnDownloadProgress): TDownloadWizardPage;
    +function CreateInputDirPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; AAppendDir: Boolean; ANewFolderName: String): TInputDirWizardPage;
    +function CreateInputFilePage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String): TInputFileWizardPage;
    +function CreateInputOptionPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; Exclusive, ListBox: Boolean): TInputOptionWizardPage;
    +function CreateInputQueryPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String): TInputQueryWizardPage;
    +function CreateOutputMarqueeProgressPage(const ACaption, ADescription: String): TOutputMarqueeProgressWizardPage;
    +function CreateOutputMsgMemoPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; const AMsg: AnsiString): TOutputMsgMemoWizardPage;
    +function CreateOutputMsgPage(const AfterID: Integer; const ACaption, ADescription, AMsg: String): TOutputMsgWizardPage;
    +function CreateOutputProgressPage(const ACaption, ADescription: String): TOutputProgressWizardPage;
    +
    +function PageFromID(const ID: Integer): TWizardPage;
    +function MinimizePathName(const Filename: String; const Font: TFont; MaxLen: Integer): String;
    +

    + + + diff --git a/ISHelp/isxclasses.header b/ISHelp/isxclasses.header new file mode 100644 index 00000000..d08ada58 --- /dev/null +++ b/ISHelp/isxclasses.header @@ -0,0 +1,21 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/ISHelp/isxclasses.header2 b/ISHelp/isxclasses.header2 new file mode 100644 index 00000000..72332e1c --- /dev/null +++ b/ISHelp/isxclasses.header2 @@ -0,0 +1,15 @@ + + +

    Below is the list of support classes that can be used from within the Pascal script. There are also three support objects available globally:

    + + + +

    One special constant is available: crHand of type TControl.Cursor.

    + +

    The CodeClasses.iss example script in the "Examples" subdirectory in your Inno Setup directory shows how to use these classes.

    + +

    Note: you may find it useful to also refer to the Delphi Visual Component Library (VCL) Help files by Embarcadero Technologies, since the classes below are mostly simple wrappers around the VCL classes Inno Setup uses internally. See http://docwiki.embarcadero.com/RADStudio/Rio/en/VCL.

    \ No newline at end of file diff --git a/ISHelp/isxclasses.pas b/ISHelp/isxclasses.pas new file mode 100644 index 00000000..635ab527 --- /dev/null +++ b/ISHelp/isxclasses.pas @@ -0,0 +1,893 @@ +TObject = class + constructor Create; + procedure Free; +end; + +TPersistent = class(TObject) + procedure Assign(Source: TPersistent); +end; + +TComponent = class(TPersistent) + function FindComponent(AName: String): TComponent; + constructor Create(AOwner: TComponent); + property Owner: TComponent; read write; + procedure DestroyComponents; + procedure Destroying; + procedure FreeNotification(AComponent: TComponent); + procedure InsertComponent(AComponent: TComponent); + procedure RemoveComponent(AComponent: TComponent); + property Components[Index: Integer]: TComponent; read; + property ComponentCount: Integer; read; + property ComponentIndex: Integer; read write; + property ComponentState: Byte; read; + property DesignInfo: Longint; read write; + property Name: String; read write; + property Tag: Longint; read write; +end; + +TStrings = class(TPersistent) + function Add(S: String): Integer; + procedure Append(S: String); + procedure AddStrings(Strings: TStrings); + procedure Clear; + procedure Delete(Index: Integer); + function IndexOf(const S: String): Integer; + procedure Insert(Index: Integer; S: String); + property Count: Integer; read; + property Text: String; read write; + property CommaText: String; read write; + procedure LoadFromFile(FileName: String); + procedure SaveToFile(FileName: String); + property Strings[Index: Integer]: String; read write; + property Objects[Index: Integer]: TObject; read write; +end; + +TNotifyEvent = procedure(Sender: TObject); + +TStringList = class(TStrings) + function Find(S: String; var Index: Integer): Boolean; + procedure Sort; + property Duplicates: TDuplicates; read write; + property Sorted: Boolean; read write; + property OnChange: TNotifyEvent; read write; + property OnChanging: TNotifyEvent; read write; +end; + +TStream = class(TObject) + function Read(var Buffer: AnyString; ByteCount: Longint): Longint; + function Write(const Buffer: AnyString; ByteCount: Longint): Longint; + function Seek(Offset: Int64; Origin: Word): Int64; + procedure ReadBuffer(var Buffer: AnyString; ByteCount: Longint); + procedure WriteBuffer(const Buffer: AnyString; ByteCount: Longint); + function CopyFrom(Source: TStream; ByteCount: Int64): Int64; + property Position: Longint; read write; + property Size: Longint; read write; +end; + +THandleStream = class(TStream) + constructor Create(AHandle: Integer); + property Handle: Integer; read; +end; + +TFileStream = class(THandleStream) + constructor Create(Filename: String; Mode: Word); +end; + +TStringStream = class(TStream) + constructor Create(AString: String); +end; + +TGraphicsObject = class(TPersistent) + property OnChange: TNotifyEvent; read write; +end; + +TFontStyle = (fsBold, fsItalic, fsUnderline, fsStrikeOut); + +TFontStyles = set of TFontStyle; + +TFont = class(TGraphicsObject) + constructor Create; + property Handle: Integer; read; + property Color: Integer; read write; + property Height: Integer; read write; + property Name: String; read write; + property Pitch: Byte; read write; + property Size: Integer; read write; + property PixelsPerInch: Integer; read write; + property Style: TFontStyles; read write; +end; + +TCanvas = class(TPersistent) + procedure Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer); + procedure Chord(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer); + procedure Draw(X, Y: Integer; Graphic: TGraphic); + procedure Ellipse(X1, Y1, X2, Y2: Integer); + procedure FloodFill(X, Y: Integer; Color: TColor; FillStyle: Byte); + procedure LineTo(X, Y: Integer); + procedure MoveTo(X, Y: Integer); + procedure Pie(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer); + procedure Rectangle(X1, Y1, X2, Y2: Integer); + procedure Refresh; + procedure RoundRect(X1, Y1, X2, Y2, X3, Y3: Integer); + function TextHeight(Text: String): Integer; + procedure TextOut(X, Y: Integer; Text: String); + function TextWidth(Text: String): Integer; + property Handle: Integer; read write; + property Pixels: Integer Integer Integer; read write; + property Brush: TBrush; read; + property CopyMode: Byte; read write; + property Font: TFont; read; + property Pen: TPen; read; +end; + +TPenMode = (pmBlack, pmWhite, pmNop, pmNot, pmCopy, pmNotCopy, pmMergePenNot, pmMaskPenNot, pmMergeNotPen, pmMaskNotPen, pmMerge, pmNotMerge, pmMask, pmNotMask, pmXor, pmNotXor); + +TPenStyle = (psSolid, psDash, psDot, psDashDot, psDashDotDot, psClear, psInsideFrame); + +TPen = class(TGraphicsObject) + constructor Create; + property Color: TColor; read write; + property Mode: TPenMode; read write; + property Style: TPenStyle; read write; + property Width: Integer; read write; +end; + +TBrushStyle = (bsSolid, bsClear, bsHorizontal, bsVertical, bsFDiagonal, bsBDiagonal, bsCross, bsDiagCross); + +TBrush = class(TGraphicsObject) + constructor Create; + property Color: TColor; read write; + property Style: TBrushStyle; read write; +end; + +TGraphic = class(TPersistent) + procedure LoadFromFile(const Filename: String); + procedure SaveToFile(const Filename: String); + property Empty: Boolean; read write; + property Height: Integer; read write; + property Modified: Boolean; read write; + property Width: Integer; read write; + property OnChange: TNotifyEvent; read write; +end; + +TAlphaFormat = (afIgnored, afDefined, afPremultiplied); + +TBitmap = class(TGraphic) + procedure LoadFromStream(Stream: TStream); + procedure SaveToStream(Stream: TStream); + property AlphaFormat: TAlphaFormat; read write; + property Canvas: TCanvas; read write; + property Handle: HBITMAP; read write; +end; + +TAlign = (alNone, alTop, alBottom, alLeft, alRight, alClient); + +TAnchorKind = (akLeft, akTop, akRight, akBottom); + +TAnchors = set of TAnchorKind; + +TControl = class(TComponent) + constructor Create(AOwner: TComponent); + procedure BringToFront; + procedure Hide; + procedure Invalidate; + procedure Refresh; + procedure Repaint; + procedure SendToBack; + procedure Show; + procedure Update; + procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); + property Left: Integer; read write; + property Top: Integer; read write; + property Width: Integer; read write; + property Height: Integer; read write; + property Hint: String; read write; + property Align: TAlign; read write; + property ClientHeight: Longint; read write; + property ClientWidth: Longint; read write; + property ShowHint: Boolean; read write; + property Visible: Boolean; read write; + property Enabled: Boolean; read write; + property Cursor: Integer; read write; +end; + +TWinControl = class(TControl) + property Parent: TWinControl; read write; + property ParentBackground: Boolean; read write; + property Handle: Longint; read write; + property Showing: Boolean; read; + property TabOrder: Integer; read write; + property TabStop: Boolean; read write; + function CanFocus: Boolean; + function Focused: Boolean; + property Controls[Index: Integer]: TControl; read; + property ControlCount: Integer; read; +end; + +TGraphicControl = class(TControl) +end; + +TCustomControl = class(TWinControl) +end; + +TScrollBarKind = (sbHorizontal, sbVertical); + +TScrollBarInc = SmallInt; + +TScrollingWinControl = class(TWinControl) + procedure ScrollInView(AControl: TControl); +end; + +TFormBorderStyle = (bsNone, bsSingle, bsSizeable, bsDialog, bsToolWindow, bsSizeToolWin); + +TBorderIcon = (biSystemMenu, biMinimize, biMaximize, biHelp); + +TBorderIcons = set of TBorderIcon; + +TConstraintSize = 0..MaxInt; + +TSizeConstraints = class(TPersistent); + property MaxHeight: TConstraintSize; read write; + property MaxWidth: TConstraintSize; read write; + property MinHeight: TConstraintSize; read write; + property MinWidth: TConstraintSize; read write; +end; + +TPosition = (poDesigned, poDefault, poDefaultPosOnly, poDefaultSizeOnly, poScreenCenter, poDesktopCenter, poMainFormCenter, poOwnerFormCenter); + +TCloseAction = (caNone, caHide, caFree, caMinimize); + +TCloseEvent = procedure(Sender: TObject; var Action: TCloseAction); + +TCloseQueryEvent = procedure(Sender: TObject; var CanClose: Boolean); + +TEShiftState = (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble); + +TShiftState = set of TEShiftState; + +TKeyEvent = procedure(Sender: TObject; var Key: Word; Shift: TShiftState); + +TKeyPressEvent = procedure(Sender: TObject; var Key: Char); + +TForm = class(TScrollingWinControl) + constructor CreateNew(AOwner: TComponent); + procedure Close; + procedure Hide; + procedure Show; + function ShowModal: Integer; + procedure Release; + property Active: Boolean; read; + property ActiveControl: TWinControl; read write; + property Anchors: TAnchors; read write; + property AutoScroll: Boolean; read write; + property BorderIcons: TBorderIcons; read write; + property BorderStyle: TFormBorderStyle; read write; + property Caption: String; read write; + property Color: TColor; read write; + property Constraints: TSizeConstraints; read write; + property Font: TFont; read write; + property FormStyle: TFormStyle; read write; + property KeyPreview: Boolean; read write; + property Position: TPosition; read write; + property OnActivate: TNotifyEvent; read write; + property OnClick: TNotifyEvent; read write; + property OnDblClick: TNotifyEvent; read write; + property OnClose: TCloseEvent; read write; + property OnCloseQuery: TCloseQueryEvent; read write; + property OnCreate: TNotifyEvent; read write; + property OnDestroy: TNotifyEvent; read write; + property OnDeactivate: TNotifyEvent; read write; + property OnHide: TNotifyEvent; read write; + property OnKeyDown: TKeyEvent; read write; + property OnKeyPress: TKeyPressEvent; read write; + property OnKeyUp: TKeyEvent; read write; + property OnResize: TNotifyEvent; read write; + property OnShow: TNotifyEvent; read write; +end; + +TCustomLabel = class(TGraphicControl) +end; + +TAlignment = (taLeftJustify, taRightJustify, taCenter); + +TLabel = class(TCustomLabel) + property Alignment: TAlignment; read write; + property Anchors: TAnchors; read write; + property AutoSize: Boolean; read write; + property Caption: String; read write; + property Color: TColor; read write; + property FocusControl: TWinControl; read write; + property Font: TFont; read write; + property WordWrap: Boolean; read write; + property OnClick: TNotifyEvent; read write; + property OnDblClick: TNotifyEvent; read write; +end; + +TCustomEdit = class(TWinControl) + procedure Clear; + procedure ClearSelection; + procedure SelectAll; + property Modified: Boolean; read write; + property SelLength: Integer; read write; + property SelStart: Integer; read write; + property SelText: String; read write; + property Text: String; read write; +end; + +TBorderStyle = TFormBorderStyle; + +TEditCharCase = (ecNormal, ecUpperCase, ecLowerCase); + +TEdit = class(TCustomEdit) + property Anchors: TAnchors; read write; + property AutoSelect: Boolean; read write; + property AutoSize: Boolean; read write; + property BorderStyle: TBorderStyle; read write; + property CharCase: TEditCharCase; read write; + property Color: TColor; read write; + property Font: TFont; read write; + property HideSelection: Boolean; read write; + property MaxLength: Integer; read write; + property PasswordChar: Char; read write; + property ReadOnly: Boolean; read write; + property Text: String; read write; + property OnChange: TNotifyEvent; read write; + property OnClick: TNotifyEvent; read write; + property OnDblClick: TNotifyEvent; read write; + property OnKeyDown: TKeyEvent; read write; + property OnKeyPress: TKeyPressEvent; read write; + property OnKeyUp: TKeyEvent; read write; +end; + +TNewEdit = class(TEdit) +end; + +TCustomMemo = class(TCustomEdit) + property Lines: TStrings; read write; +end; + +TScrollStyle = (ssNone, ssHorizontal, ssVertical, ssBoth); + +TMemo = class(TCustomMemo) + property Alignment: TAlignment; read write; + property Anchors: TAnchors; read write; + property BorderStyle: TBorderStyle; read write; + property Color: TColor; read write; + property Font: TFont; read write; + property HideSelection: Boolean; read write; + property Lines: TStrings; read write; + property MaxLength: Integer; read write; + property ReadOnly: Boolean; read write; + property ScrollBars: TScrollStyle; read write; + property WantReturns: Boolean; read write; + property WantTabs: Boolean; read write; + property WordWrap: Boolean; read write; + property OnChange: TNotifyEvent; read write; + property OnClick: TNotifyEvent; read write; + property OnDblClick: TNotifyEvent; read write; + property OnKeyDown: TKeyEvent; read write; + property OnKeyPress: TKeyPressEvent; read write; + property OnKeyUp: TKeyEvent; read write; +end; + +TNewMemo = class(TMemo) +end; + +TCustomComboBox = class(TWinControl) + property DroppedDown: Boolean; read write; + property Items: TStrings; read write; + property ItemIndex: Integer; read write; +end; + +TComboBoxStyle = (csDropDown, csSimple, csDropDownList, csOwnerDrawFixed, csOwnerDrawVariable); + +TComboBox = class(TCustomComboBox) + property Anchors: TAnchors; read write; + property Color: TColor; read write; + property DropDownCount: Integer; read write; + property Font: TFont; read write; + property MaxLength: Integer; read write; + property Sorted: Boolean; read write; + property Style: TComboBoxStyle; read write; + property Text: String; read write; + property OnChange: TNotifyEvent; read write; + property OnClick: TNotifyEvent; read write; + property OnDblClick: TNotifyEvent; read write; + property OnDropDown: TNotifyEvent; read write; + property OnKeyDown: TKeyEvent; read write; + property OnKeyPress: TKeyPressEvent; read write; + property OnKeyUp: TKeyEvent; read write; +end; + +TNewComboBox = class(TComboBox) +end; + +TButtonControl = class(TWinControl) +end; + +TButton = class(TButtonControl) + property Anchors: TAnchors; read write; + property Cancel: Boolean; read write; + property Caption: String; read write; + property Default: Boolean; read write; + property Font: TFont; read write; + property ModalResult: Longint; read write; + property OnClick: TNotifyEvent; read write; +end; + +TNewButton = class(TButton) +end; + +TCustomCheckBox = class(TButtonControl) +end; + +TCheckBoxState = (cbUnchecked, cbChecked, cbGrayed); + +TCheckBox = class(TCustomCheckBox) + property Alignment: TAlignment; read write; + property AllowGrayed: Boolean; read write; + property Anchors: TAnchors; read write; + property Caption: String; read write; + property Checked: Boolean; read write; + property Color: TColor; read write; + property Font: TFont; read write; + property State: TCheckBoxState; read write; + property OnClick: TNotifyEvent; read write; +end; + +TNewCheckBox = class(TCheckBox) +end; + +TRadioButton = class(TButtonControl) + property Alignment: TAlignment; read write; + property Anchors: TAnchors; read write; + property Caption: String; read write; + property Checked: Boolean; read write; + property Color: TColor; read write; + property Font: TFont; read write; + property OnClick: TNotifyEvent; read write; + property OnDblClick: TNotifyEvent; read write; +end; + +TNewRadioButton = class(TRadioButton) +end; + +TSysLinkType = (sltURL, sltID); + +TSysLinkEvent = procedure(Sender: TObject; const Link: string; LinkType: TSysLinkType); + +TCustomLinkLabel = class(TWinControl) + property Alignment: TAlignment; read write; + property AutoSize: Boolean; read write; + property UseVisualStyle: Boolean; read write; + property OnLinkClick: TSysLinkEvent; read write; +end; + +TLinkLabel = class(TCustomLinkLabel) + property Anchors: TAnchors; read write; + property Caption: String; read write; + property Color: TColor; read write; + property Font: TFont; read write; +end; + +TNewLinkLabel = class(TLinkLabel) + function AdjustHeight: Integer; +end; + +TCustomListBox = class(TWinControl) + property Items: TStrings; read write; + property ItemIndex: Integer; read write; + property SelCount: Integer; read; + property Selected[Index: Integer]: Boolean; read write; +end; + +TListBoxStyle = (lbStandard, lbOwnerDrawFixed, lbOwnerDrawVariable); + +TListBox = class(TCustomListBox) + property Anchors: TAnchors; read write; + property BorderStyle: TBorderStyle; read write; + property Color: TColor; read write; + property Font: TFont; read write; + property MultiSelect: Boolean; read write; + property Sorted: Boolean; read write; + property Style: TListBoxStyle; read write; + property OnClick: TNotifyEvent; read write; + property OnDblClick: TNotifyEvent; read write; + property OnKeyDown: TKeyEvent; read write; + property OnKeyPress: TKeyPressEvent; read write; + property OnKeyUp: TKeyEvent; read write; +end; + +TNewListBox = class(TListBox) +end; + +TBevelKind = (bkNone, bkTile, bkSoft, bkFlat); + +TBevelShape = (bsBox, bsFrame, bsTopLine, bsBottomLine, bsLeftLine, bsRightLine, bsSpacer); + +TBevelStyle = (bsLowered, bsRaised); + +TBevel = class(TGraphicControl) + property Anchors: TAnchors; read write; + property Shape: TBevelShape; read write; + property Style: TBevelStyle; read write; +end; + +TCustomPanel = class(TCustomControl) +end; + +TPanelBevel = (bvNone, bvLowered, bvRaised, bvSpace); + +TBevelWidth = Longint; + +TBorderWidth = Longint; + +TPanel = class(TCustomPanel) + property Alignment: TAlignment; read write; + property Anchors: TAnchors; read write; + property BevelInner: TPanelBevel; read write; + property BevelKind: TBevelKind; read write; + property BevelOuter: TPanelBevel; read write; + property BevelWidth: TBevelWidth; read write; + property BorderWidth: TBorderWidth; read write; + property BorderStyle: TBorderStyle; read write; + property Caption: String; read write; + property Color: TColor; read write; + property Font: TFont; read write; + property OnClick: TNotifyEvent; read write; + property OnDblClick: TNotifyEvent; read write; +end; + +TNewStaticText = class(TWinControl) + function AdjustHeight: Integer; + property Anchors: TAnchors; read write; + property AutoSize: Boolean; read write; + property Caption: String; read write; + property Color: TColor; read write; + property FocusControl: TWinControl; read write; + property Font: TFont; read write; + property ForceLTRReading: Boolean; read write; + property ShowAccelChar: Boolean; read write; + property WordWrap: Boolean; read write; + property OnClick: TNotifyEvent; read write; + property OnDblClick: TNotifyEvent; read write; +end; + +TCheckItemOperation = (coUncheck, coCheck, coCheckWithChildren); + +TNewCheckListBox = class(TCustomListBox) + function AddCheckBox(const ACaption, ASubItem: String; ALevel: Byte; AChecked, AEnabled, AHasInternalChildren, ACheckWhenParentChecked: Boolean; AObject: TObject): Integer; + function AddGroup(ACaption, ASubItem: String; ALevel: Byte; AObject: TObject): Integer; + function AddRadioButton(const ACaption, ASubItem: String; ALevel: Byte; AChecked, AEnabled: Boolean; AObject: TObject): Integer; + function CheckItem(const Index: Integer; const AOperation: TCheckItemOperation): Boolean; + property Anchors: TAnchors; read write; + property Checked[Index: Integer]: Boolean; read write; + property State[Index: Integer]: TCheckBoxState; read write; + property ItemCaption[Index: Integer]: String; read write; + property ItemEnabled[Index: Integer]: Boolean; read write; + property ItemFontStyle[Index: Integer]: TFontStyles; read write; + property ItemLevel[Index: Integer]: Byte; read; + property ItemObject[Index: Integer]: TObject; read write; + property ItemSubItem[Index: Integer]: String; read write; + property SubItemFontStyle[Index: Integer]: TFontStyles; read write; + property Flat: Boolean; read write; + property MinItemHeight: Integer; read write; + property Offset: Integer; read write; + property OnClickCheck: TNotifyEvent; read write; + property BorderStyle: TBorderStyle; read write; + property Color: TColor; read write; + property Font: TFont; read write; + property Sorted: Boolean; read write; + property OnClick: TNotifyEvent; read write; + property OnDblClick: TNotifyEvent; read write; + property OnKeyDown: TKeyEvent; read write; + property OnKeyPress: TKeyPressEvent; read write; + property OnKeyUp: TKeyEvent; read write; + property ShowLines: Boolean; read write; + property WantTabs: Boolean; read write; + property RequireRadioSelection: Boolean; read write; +end; + +TNewProgressBarState = (npbsNormal, npbsError, npbsPaused); + +TNewProgressBarStyle = (npbstNormal, npbstMarquee); + +TNewProgressBar = class(TWinControl) + property Anchors: TAnchors; read write; + property Min: Longint; read write; + property Max: Longint; read write; + property Position: Longint; read write; + property State: TNewProgressBarState; read write; + property Style: TNewProgressBarStyle; read write; + property Visible: Boolean; read write; +end; + +TRichEditViewer = class(TMemo) + property Anchors: TAnchors; read write; + property BevelKind: TBevelKind; read write; + property BorderStyle: TBorderStyle; read write; + property RTFText: AnsiString; write; + property UseRichEdit: Boolean; read write; +end; + +TPasswordEdit = class(TCustomEdit) + property Anchors: TAnchors; read write; + property AutoSelect: Boolean; read write; + property AutoSize: Boolean; read write; + property BorderStyle: TBorderStyle; read write; + property Color: TColor; read write; + property Font: TFont; read write; + property HideSelection: Boolean; read write; + property MaxLength: Integer; read write; + property Password: Boolean; read write; + property ReadOnly: Boolean; read write; + property Text: String; read write; + property OnChange: TNotifyEvent; read write; + property OnClick: TNotifyEvent; read write; + property OnDblClick: TNotifyEvent; read write; + property OnKeyDown: TKeyEvent; read write; + property OnKeyPress: TKeyPressEvent; read write; + property OnKeyUp: TKeyEvent; read write; +end; + +TCustomFolderTreeView = class(TWinControl) + procedure ChangeDirectory(const Value: String; const CreateNewItems: Boolean); + procedure CreateNewDirectory(const ADefaultName: String); + property: Directory: String; read write; +end; + +TFolderRenameEvent = procedure(Sender: TCustomFolderTreeView; var NewName: String; var Accept: Boolean); + +TFolderTreeView = class(TCustomFolderTreeView) + property Anchors: TAnchors; read write; + property OnChange: TNotifyEvent; read write; + property OnRename: TFolderRenameEvent; read write; +end; + +TStartMenuFolderTreeView = class(TCustomFolderTreeView) + procedure SetPaths(const AUserPrograms, ACommonPrograms, AUserStartup, ACommonStartup: String); + property Anchors: TAnchors; read write; + property OnChange: TNotifyEvent; read write; + property OnRename: TFolderRenameEvent; read write; +end; + +TBitmapImage = class(TGraphicControl) + property Anchors: TAnchors; read write; + property AutoSize: Boolean; read write; + property BackColor: TColor; read write; + property Center: Boolean; read write; + property Bitmap: TBitmap; read write; + property ReplaceColor: TColor; read write; + property ReplaceWithColor: TColor; read write; + property Stretch: Boolean; read write; + property OnClick: TNotifyEvent; read write; + property OnDblClick: TNotifyEvent; read write; +end; + +TNewNotebook = class(TWinControl) + function FindNextPage(CurPage: TNewNotebookPage; GoForward: Boolean): TNewNotebookPage; + property Anchors: TAnchors; read write; + property PageCount: Integer; read write; + property Pages[Index: Integer]: TNewNotebookPage; read; + property ActivePage: TNewNotebookPage; read write; +end; + +TNewNotebookPage = class(TCustomControl) + property Color: TColor; read write; + property Notebook: TNewNotebook; read write; + property PageIndex: Integer; read write; +end; + +TWizardPageNotifyEvent = procedure(Sender: TWizardPage); +TWizardPageButtonEvent = function(Sender: TWizardPage): Boolean; +TWizardPageCancelEvent = procedure(Sender: TWizardPage; var ACancel, AConfirm: Boolean); +TWizardPageShouldSkipEvent = function(Sender: TWizardPage): Boolean; + +TWizardPage = class(TComponent) + property ID: Integer; read; + property Caption: String; read write; + property Description: String; read write; + property Surface: TNewNotebookPage; read; + property SurfaceColor: TColor; read; + property SurfaceHeight: Integer; read; + property SurfaceWidth: Integer; read; + property OnActivate: TWizardPageNotifyEvent; read write; + property OnBackButtonClick: TWizardPageButtonEvent; read write; + property OnCancelButtonClick: TWizardPageCancelEvent; read write; + property OnNextButtonClick: TWizardPageButtonEvent; read write; + property OnShouldSkipPage: TWizardPageShouldSkipEvent; read write; +end; + +TInputQueryWizardPage = class(TWizardPage) + function Add(const APrompt: String; const APassword: Boolean): Integer; + property Edits[Index: Integer]: TPasswordEdit; read; + property PromptLabels[Index: Integer]: TNewStaticText; read; + property SubCaptionLabel: TNewStaticText; read; + property Values[Index: Integer]: String; read write; +end; + +TInputOptionWizardPage = class(TWizardPage) + function Add(const ACaption: String): Integer; + function AddEx(const ACaption: String; const ALevel: Byte; const AExclusive: Boolean): Integer; + property CheckListBox: TNewCheckListBox; read; + property SelectedValueIndex: Integer; read write; + property SubCaptionLabel: TNewStaticText; read; + property Values[Index: Integer]: Boolean; read write; +end; + +TInputDirWizardPage = class(TWizardPage) + function Add(const APrompt: String): Integer; + property Buttons[Index: Integer]: TNewButton; read; + property Edits[Index: Integer]: TEdit; read; + property PromptLabels[Index: Integer]: TNewStaticText; read; + property SubCaptionLabel: TNewStaticText; read; + property Values[Index: Integer]: String; read write; +end; + +TInputFileWizardPage = class(TWizardPage) + function Add(const APrompt, AFilter, ADefaultExtension: String): Integer; + property Buttons[Index: Integer]: TNewButton; read; + property Edits[Index: Integer]: TEdit; read; + property PromptLabels[Index: Integer]: TNewStaticText; read; + property SubCaptionLabel: TNewStaticText; read; + property Values[Index: Integer]: String; read write; + property IsSaveButton[Index: Integer]: Boolean; read write; +end; + +TOutputMsgWizardPage = class(TWizardPage) + property MsgLabel: TNewStaticText; read; +end; + +TOutputMsgMemoWizardPage = class(TWizardPage) + property RichEditViewer: TRichEditViewer; read; + property SubCaptionLabel: TNewStaticText; read; +end; + +TOutputProgressWizardPage = class(TWizardPage) + procedure Hide; + property Msg1Label: TNewStaticText; read; + property Msg2Label: TNewStaticText; read; + property ProgressBar: TNewProgressBar; read; + procedure SetProgress(const Position, Max: Longint); + procedure SetText(const Msg1, Msg2: String); + procedure Show; +end; + +TOutputMarqueeProgressWizardPage = class(TOutputProgressWizardPage) + procedure Animate; +end; + +TDownloadWizardPage = class(TOutputProgressWizardPage) + property AbortButton: TNewButton; read; + property AbortedByUser: Boolean; read; + procedure Add(const Url, BaseName, RequiredSHA256OfFile: String); + procedure AddEx(const Url, BaseName, RequiredSHA256OfFile, UserName, Password: String); + procedure Clear; + function Download: Int64; + property ShowBaseNameInsteadOfUrl: Boolean; read write; +end; + +TUIStateForm = class(TForm) +end; + +TSetupForm = class(TUIStateForm) + function CalculateButtonWidth(const ButtonCaptions: array of String): Integer; + function ShouldSizeX: Boolean; + function ShouldSizeY: Boolean; + procedure FlipSizeAndCenterIfNeeded(const ACenterInsideControl: Boolean; const CenterInsideControlCtl: TWinControl; const CenterInsideControlInsideClientArea: Boolean); + property ControlsFlipped: Boolean; read; + property FlipControlsOnShow: Boolean; read write; + property KeepSizeY: Boolean; read; write; + property RightToLeft: Boolean; read; + property SizeAndCenterOnShow: Boolean; read write; +end; + +TMainForm = class(TSetupForm) + procedure ShowAboutBox; +end; + +TWizardForm = class(TSetupForm) + property CancelButton: TNewButton; read; + property NextButton: TNewButton; read; + property BackButton: TNewButton; read; + property OuterNotebook: TNotebook; read; + property InnerNotebook: TNotebook; read; + property WelcomePage: TNewNotebookPage; read; + property InnerPage: TNewNotebookPage; read; + property FinishedPage: TNewNotebookPage; read; + property LicensePage: TNewNotebookPage; read; + property PasswordPage: TNewNotebookPage; read; + property InfoBeforePage: TNewNotebookPage; read; + property UserInfoPage: TNewNotebookPage; read; + property SelectDirPage: TNewNotebookPage; read; + property SelectComponentsPage: TNewNotebookPage; read; + property SelectProgramGroupPage: TNewNotebookPage; read; + property SelectTasksPage: TNewNotebookPage; read; + property ReadyPage: TNewNotebookPage; read; + property PreparingPage: TNewNotebookPage; read; + property InstallingPage: TNewNotebookPage; read; + property InfoAfterPage: TNewNotebookPage; read; + property DiskSpaceLabel: TNewStaticText; read; + property DirEdit: TEdit; read; + property GroupEdit: TNewEdit; read; + property NoIconsCheck: TNewCheckBox; read; + property PasswordLabel: TNewStaticText; read; + property PasswordEdit: TPasswordEdit; read; + property PasswordEditLabel: TNewStaticText; read; + property ReadyMemo: TNewMemo; read; + property TypesCombo: TNewComboBox; read; + property Bevel: TBevel; read; + property WizardBitmapImage: TBitmapImage; read; + property WelcomeLabel1: TNewStaticText; read; + property InfoBeforeMemo: TRichEditViewer; read; + property InfoBeforeClickLabel: TNewStaticText; read; + property MainPanel: TPanel; read; + property Bevel1: TBevel; read; + property PageNameLabel: TNewStaticText; read; + property PageDescriptionLabel: TNewStaticText; read; + property WizardSmallBitmapImage: TBitmapImage; read; + property ReadyLabel: TNewStaticText; read; + property FinishedLabel: TNewStaticText; read; + property YesRadio: TNewRadioButton; read; + property NoRadio: TNewRadioButton; read; + property WizardBitmapImage2: TBitmapImage; read; + property WelcomeLabel2: TNewStaticText; read; + property LicenseLabel1: TNewStaticText; read; + property LicenseMemo: TRichEditViewer; read; + property InfoAfterMemo: TRichEditViewer; read; + property InfoAfterClickLabel: TNewStaticText; read; + property ComponentsList: TNewCheckListBox; read; + property ComponentsDiskSpaceLabel: TNewStaticText; read; + property BeveledLabel: TNewStaticText; read; + property StatusLabel: TNewStaticText; read; + property FilenameLabel: TNewStaticText; read; + property ProgressGauge: TNewProgressBar; read; + property SelectDirLabel: TNewStaticText; read; + property SelectStartMenuFolderLabel: TNewStaticText; read; + property SelectComponentsLabel: TNewStaticText; read; + property SelectTasksLabel: TNewStaticText; read; + property LicenseAcceptedRadio: TNewRadioButton; read; + property LicenseNotAcceptedRadio: TNewRadioButton; read; + property UserInfoNameLabel: TNewStaticText; read; + property UserInfoNameEdit: TNewEdit; read; + property UserInfoOrgLabel: TNewStaticText; read; + property UserInfoOrgEdit: TNewEdit; read; + property PreparingErrorBitmapImage: TBitmapImage; read; + property PreparingLabel: TNewStaticText; read; + property FinishedHeadingLabel: TNewStaticText; read; + property UserInfoSerialLabel: TNewStaticText; read; + property UserInfoSerialEdit: TNewEdit; read; + property TasksList: TNewCheckListBox; read; + property RunList: TNewCheckListBox; read; + property DirBrowseButton: TNewButton; read; + property GroupBrowseButton: TNewButton; read; + property SelectDirBitmapImage: TBitmapImage; read; + property SelectGroupBitmapImage: TBitmapImage; read; + property SelectDirBrowseLabel: TNewStaticText; read; + property SelectStartMenuFolderBrowseLabel: TNewStaticText; read; + property PreparingYesRadio: TNewRadioButton; read; + property PreparingNoRadio: TNewRadioButton; read; + property PreparingMemo: TNewMemo; read; + property CurPageID: Integer; read; + function AdjustLabelHeight(ALabel: TNewStaticText): Integer; + function AdjustLinkLabelHeight(ALinkLabel: TNewLinkLabel): Integer; + procedure IncTopDecHeight(AControl: TControl; Amount: Integer); + property PrevAppDir: String; read; +end; + +TUninstallProgressForm = class(TSetupForm) + property OuterNotebook: TNewNotebook; read; + property InnerPage: TNewNotebookPage; read; + property InnerNotebook: TNewNotebook; read; + property InstallingPage: TNewNotebookPage; read; + property MainPanel: TPanel; read; + property PageNameLabel: TNewStaticText; read; + property PageDescriptionLabel: TNewStaticText; read; + property WizardSmallBitmapImage: TBitmapImage; read; + property Bevel1: TBevel; read; + property StatusLabel: TNewStaticText; read; + property ProgressBar: TNewProgressBar; read; + property BeveledLabel: TNewStaticText; read; + property Bevel: TBevel; read; + property CancelButton: TNewButton; read; +end; diff --git a/ISHelp/isxfunc.xml b/ISHelp/isxfunc.xml new file mode 100644 index 00000000..2f17df80 --- /dev/null +++ b/ISHelp/isxfunc.xml @@ -0,0 +1,3019 @@ + + + + Inno Setup + Copyright (C) 1997-2020 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + + + Setup or Uninstall Info + + + GetCmdTail + function GetCmdTail: String; +

    Returns all command line parameters passed to Setup or Uninstall as a single string, including undocumented internal parameters used by Setup and Uninstall.

    +

    ParamStr

    +
    + + ParamCount + function ParamCount: Integer; +

    Returns the number of command line parameters passed to Setup or Uninstall, excluding undocumented internal parameters used by Setup and Uninstall.

    +

    ParamStr
    +GetCmdTail

    +
    + + ParamStr + function ParamStr(Index: Integer): String; +

    Returns the Index-th command line parameter passed to Setup or Uninstall, excluding undocumented internal parameters used by Setup and Uninstall.

    +

    Parameter number zero is the full file name with which Setup or Uninstall was started.

    +

    If Index is invalid, ParamStr returns an empty string.

    +

    ParamCount
    +GetCmdTail

    +
    +
    + + + ActiveLanguage + function ActiveLanguage: String; +

    Returns the name of the active language.

    +
    +
    + + + CustomMessage + function CustomMessage(const MsgName: String): String; +

    Returns the value of the [CustomMessages] entry with the specified name. If an entry with the specified name does not exist, an exception will be raised.

    +
    var
    +  S: String;
    +begin
    +  S := CustomMessage('CreateDesktopIcon');
    +  // S = 'Create a &desktop icon'
    +
    +  S := FmtMessage(CustomMessage('NameAndVersion'), ['My Program', '1.0']);
    +  // S = 'My Program version 1.0'
    +end;
    +
    + + FmtMessage + function FmtMessage(const S: String; const Args: array of String): String; +

    Formats the string S using the specified string arguments. A %1 in the format string will be replaced with the first value in the Args array; a %2 will be replaced with the second value; and so on. %% will be replaced with %.

    +

    If a %-specifier references a non-existing argument, it will be returned untouched. No exception will be raised.

    +
    var
    +  S: String;
    +begin
    +  S := FmtMessage('%1 version %2 will be installed.', ['My Program', '1.0']);
    +  // S = 'My Program version 1.0 will be installed.'
    +
    +  S := FmtMessage(SetupMessage(msgNotOnThisPlatform), ['Windows 2000']);
    +  // S = 'This program will not run on Windows 2000.'
    +end;
    +
    + + SetupMessage + function SetupMessage(const ID: TSetupMessageID): String; +

    Returns the value of the specified message.

    +
    var
    +  S: String;
    +begin
    +  S := SetupMessage(msgButtonNext);
    +  // S now equals '&Next >'
    +end;
    +
    +
    + + + WizardDirValue + function WizardDirValue: String; +

    Returns the current contents of the edit control on the Select Destination Location page of the wizard.

    +

    Unlike ExpandConstant('{app}'), this function will not fail if called after the wizard is shown but prior to the user selecting a directory. Rather, it will return the default directory name.

    +
    + + WizardGroupValue + function WizardGroupValue: String; +

    Returns the current contents of the edit control on the Select Start Menu Folder page of the wizard.

    +

    Unlike ExpandConstant('{group}'), this function will not fail if called after the wizard is shown but prior to the user selecting a folder. Rather, it will return the default folder name.

    +
    + + WizardNoIcons + function WizardNoIcons: Boolean; +

    Returns the current setting of the Don't create a Start Menu folder check box on the Select Start Menu Folder page of the wizard.

    +
    + + WizardSetupType + function WizardSetupType(const Description: Boolean): String; +

    Returns the name or description of the setup type selected by the user.

    +
    + + WizardSelectedComponents + function WizardSelectedComponents(const Descriptions: Boolean): String; +

    Returns a comma-separated list of names or descriptions of the components selected by the user.

    +

    WizardIsComponentSelected
    +WizardSelectComponents

    +
    + + WizardIsComponentSelected + function WizardIsComponentSelected(const Components: String): Boolean; +

    Returns True if the specified component is selected. Multiple components may be specified in the same manner as in a Components parameter.

    +

    WizardSelectedComponents
    +WizardSelectComponents

    +
    begin
    +  if WizardIsComponentSelected('helpfiles') then
    +    // the 'helpfiles' component is selected
    +end;
    +
    + + WizardSelectComponents + procedure WizardSelectComponents(const Components: String); +

    Selects the specified comma separated list of component names.

    +

    If a component name is prefixed with a "*" character, any child components will be selected as well (except for those that include the dontinheritcheck flag). If a component name is prefixed with a "!" character, the component will be deselected.

    +

    This function does not change the state of unspecified components. This function can change the state of specified components that include the fixed flag.

    +
    +

    WizardSelectedComponents
    +WizardIsComponentSelected

    +
    begin
    +  WizardSelectComponents('!helpfiles');
    +  // the 'helpfiles' component is deselected
    +end;
    +
    + + WizardSelectedTasks + function WizardSelectedTasks(const Descriptions: Boolean): String; +

    Returns a comma-separated list of names or descriptions of the tasks selected by the user.

    +

    WizardIsTaskSelected
    +WizardSelectTasks

    +
    + + WizardIsTaskSelected + function WizardIsTaskSelected(const Tasks: String): Boolean; +

    Returns True if the specified task is selected. Multiple tasks may be specified in the same manner as in a Tasks parameter.

    +

    WizardSelectedTasks
    +WizardSelectTasks

    +
    begin
    +  if WizardIsTaskSelected('desktopicon') then
    +    // the 'desktopicon' task is selected
    +end;
    +
    + + WizardSelectTasks + procedure WizardSelectTasks(const Tasks: String); +

    Selects the specified comma separated list of task names.

    +

    If a task name is prefixed with a "!" character, the task will be deselected.

    +

    This function does not change the state of unspecified tasks.

    +
    +

    WizardSelectedTasks
    +WizardIsTaskSelected

    +
    begin
    +  WizardSelectTasks('!desktopicon');
    +  // the 'desktopicon' task is deselected
    +end;
    +
    + + WizardSilent + function WizardSilent: Boolean; +

    Returns True if Setup is running silently, False otherwise.

    +
    +
    + + + IsUninstaller + function IsUninstaller: Boolean; +

    Returns True if Uninstall is running as opposed to Setup, False otherwise.

    +
    + + UninstallSilent + function UninstallSilent: Boolean; +

    Returns True if Uninstall is running silently, False otherwise.

    +
    +
    + + + CurrentFilename + function CurrentFilename: String; +

    Returns the destination file name of the [Files] entry that is currently being processed. The returned name may include constants.

    +

    Do not attempt to call this function from outside a Check, BeforeInstall or AfterInstall event function belonging to a [Files] entry.

    +
    + + CurrentSourceFilename + function CurrentSourceFilename: String; +

    Returns the source file name of the [Files] entry that is currently being processed. The returned name may include constants.

    +

    Do not attempt to call this function from outside a Check, BeforeInstall or AfterInstall event function belonging to a [Files] entry with the "external" flag.

    +
    +
    + + + ExpandConstant + function ExpandConstant(const S: String): String; +

    Changes all constants in S to their values. For example, ExpandConstant('{srcexe}') is changed to the filename of Setup.

    +

    An exception will be raised if there was an error expanding the constants.

    +
    + + ExpandConstantEx + function ExpandConstantEx(const S: String; const CustomConst, CustomValue: String): String; +

    Changes all constants in S to their values. Additionally, any constant equal to CustomConst will be changed to CustomValue.

    +

    An exception will be raised if there was an error expanding the constants.

    +
    +
    + + + GetPreviousData + function GetPreviousData(const ValueName, DefaultValueData: String): String; +

    Gets a value that was previously stored using SetPreviousData.

    +
    + + SetPreviousData + function SetPreviousData(const PreviousDataKey: Integer; const ValueName, ValueData: String): Boolean; +

    Sets a value that can be restored later using GetPreviousData. Call SetPreviousData inside a RegisterPreviousData event function, once per setting.

    +
    +
    + + + Terminated + function Terminated: Boolean; +

    Returns True if Setup or Uninstall is terminating, False otherwise.

    +
    +
    + + + RegisterExtraCloseApplicationsResource + function RegisterExtraCloseApplicationsResource(const DisableFsRedir: Boolean; const AFilename: String): Boolean; +

    Register an extra file which Setup should check for being in-use. Call RegisterExtraCloseApplicationsResource inside a RegisterExtraCloseApplicationsResources event function, once per file. Ignores CloseApplicationsFilter. Returns True if successful.

    +
    + + RmSessionStarted + function RmSessionStarted: Boolean; +

    Returns True if a Restart Manager session was started, False otherwise.

    +

    CloseApplications

    +
    +
    + + + GetWizardForm + function GetWizardForm: TWizardForm; +

    Returns the WizardForm support object, or raises an internal error if the object has not yet been created.

    +

    WizardForm

    +
    + + GetUninstallProgressForm + function GetUninstallProgressForm: TUninstallProgressForm; +

    Returns the UninstallProgressForm support object, or raises an internal error if the object has not yet been created.

    +

    UninstallProgressForm

    +
    + + GetMainForm + function GetMainForm: TMainForm; +

    Returns the MainForm support object, or raises an internal error if the object has not yet been created.

    +

    MainForm

    +
    +
    +
    + + Exception + + + Abort + procedure Abort; +

    Escapes from the current execution path without reporting an error.

    +

    Abort raises a special "silent exception" which operates like any other exception, but does not display an error message to the end user.

    +

    Abort does not cause Setup or Uninstall to exit unless it's called from one of these event functions (or another function invoked by them):

    +

    InitializeSetup
    +InitializeWizard
    +CurStepChanged(ssInstall)

    +

    InitializeUninstall
    +CurUninstallStepChanged(usAppMutexCheck)
    +CurUninstallStepChanged(usUninstall)

    +

    PrepareToInstall

    +
    + + RaiseException + procedure RaiseException(const Msg: String); +

    Raises an exception with the specified message.

    +
    begin
    +  RaiseException('Your message goes here');
    +
    +  // The following line will not be executed because of the exception
    +  MsgBox('You will not see this.', mbInformation, MB_OK);
    +end;
    +
    +
    + + + GetExceptionMessage + function GetExceptionMessage: String; +

    Returns the message associated with the current exception. This function should only be called from within an except section, or a function called from an except section.

    +

    Exception messages generally do not end in a period. Pass the result of this function to AddPeriod to add one.

    +
    var
    +  I: Integer;
    +begin
    +  I := 1;
    +  try
    +    // The following line will raise a "Division by zero" exception
    +    I := I div 0;
    +  except
    +    // Catch the exception, deal with it, and continue
    +    MsgBox('We caught this exception: ' + AddPeriod(GetExceptionMessage),
    +      mbError, MB_OK);
    +  end;
    +end;
    +
    + + ShowExceptionMessage + procedure ShowExceptionMessage; +

    Shows the message associated with the current exception in a message box. This function should only be called from within an except section, or a function called from an except section.

    +

    If logging is enabled (via the /LOG command line parameter or the SetupLogging [Setup] section directive or the UninstallLogging [Setup] section directive or debugging from the Compiler IDE) the message will be recorded in the log file and/or in the Compiler IDE's "Debug Output" view in addition to being shown.

    +
    var
    +  I: Integer;
    +begin
    +  I := 1;
    +  try
    +    // The following line will raise a "Division by zero" exception
    +    I := I div 0;
    +  except
    +    // Catch the exception, show it, and continue
    +    ShowExceptionMessage;
    +  end;
    +end;
    +
    +
    +
    + +

    System

    + + + IsAdmin + function IsAdmin: Boolean; +

    Returns True if Setup/Uninstall is running with administrative privileges.

    +
    + + IsAdminInstallMode + function IsAdminInstallMode: Boolean; +

    Returns True if Setup is running in administrative install mode or if Uninstall is running with administrative privileges.

    +
    + + GetWindowsVersion + function GetWindowsVersion: Cardinal; +

    Returns the version number of Windows packed into a single integer. The upper 8 bits specify the major version; the following 8 bits specify the minor version; the lower 16 bits specify the build number. For example, this function will return $0A002800 on Windows 10 Version 1507, which is version 10.0.10240.

    +

    To retrieve just the major version number, use: "GetWindowsVersion shr 24". To retrieve just the minor version number, use: "(GetWindowsVersion shr 16) and $FF". To retrieve just the build number, use: "GetWindowsVersion and $FFFF".

    +
    function IsWindows8OrLater: Boolean;
    +begin
    +  Result := (GetWindowsVersion >= $06020000);
    +end;
    +

    GetWindowsVersionEx

    +
    + + GetWindowsVersionEx + procedure GetWindowsVersionEx(var Version: TWindowsVersion); +

    Returns extended information about the version of Windows in a record.

    +

    TWindowsVersion is defined as:

    +
    +  TWindowsVersion = record
    +    Major: Cardinal;             // Major version number
    +    Minor: Cardinal;             // Minor version number
    +    Build: Cardinal;             // Build number
    +    ServicePackMajor: Cardinal;  // Major version number of service pack
    +    ServicePackMinor: Cardinal;  // Minor version number of service pack
    +    NTPlatform: Boolean;         // True if an NT-based platform
    +    ProductType: Byte;           // Product type (see below)
    +    SuiteMask: Word;             // Product suites installed (see below)
    +  end;
    +
    +

    The ProductType field can be one of the following values:

    +
    +  VER_NT_WORKSTATION
    +  VER_NT_DOMAIN_CONTROLLER
    +  VER_NT_SERVER
    +
    +

    It can also be zero if the product type could not be determined (unlikely). VER_NT_WORKSTATION indicates a non-server edition of Windows (e.g. Workstation, Professional, or Home).

    +

    The SuiteMask field can be a combination of the following values:

    +
    +  VER_SUITE_BACKOFFICE
    +  VER_SUITE_BLADE
    +  VER_SUITE_DATACENTER
    +  VER_SUITE_ENTERPRISE
    +  VER_SUITE_EMBEDDEDNT
    +  VER_SUITE_PERSONAL
    +  VER_SUITE_SINGLEUSERTS
    +  VER_SUITE_SMALLBUSINESS
    +  VER_SUITE_SMALLBUSINESS_RESTRICTED
    +  VER_SUITE_TERMINAL
    +
    +

    VER_SUITE_PERSONAL, for example, is set on Home edition of Windows XP, and VER_SUITE_BLADE is set on the Web edition of Windows Server 2003.

    +

    The following example demonstrates how you can disallow installation on certain editions of Windows, and check service pack levels on multiple operating system versions. (Neither of these things are possible with the MinVersion [Setup] section directive.)

    +
    function InitializeSetup: Boolean;
    +var
    +  Version: TWindowsVersion;
    +  S: String;
    +begin
    +  GetWindowsVersionEx(Version);
    +
    +  // Disallow installation on Home edition of Windows
    +  if Version.SuiteMask and VER_SUITE_PERSONAL <> 0 then
    +  begin
    +    SuppressibleMsgBox('This program cannot be installed on a Home edition of Windows.',
    +      mbCriticalError, MB_OK, IDOK);
    +    Result := False;
    +    Exit;
    +  end;
    +
    +  // Disallow installation on domain controllers
    +  if Version.ProductType = VER_NT_DOMAIN_CONTROLLER then
    +  begin
    +    SuppressibleMsgBox('This program cannot be installed on domain controllers.',
    +      mbCriticalError, MB_OK, IDOK);
    +    Result := False;
    +    Exit;
    +  end;
    +
    +  Result := True;
    +end;
    +
    + + GetWindowsVersionString + function GetWindowsVersionString: String; +

    Returns the version number of Windows in string form. On Windows 2000, for example, this function will return "5.00.2195".

    +
    +
    + + + IsWin64 + function IsWin64: Boolean; +

    Returns True if the system is running a 64-bit version of Windows. If False is returned, you cannot utilize any of Inno Setup's 64-bit-only features.

    +

    Another way to describe this function is: Returns True if the system matches architecture identifier win64.

    +

    Do not use this function to detect 64-bit install mode, use Is64BitInstallMode instead.

    +
    begin
    +  // Check IsWin64 before using a 64-bit-only feature to
    +  // avoid an exception when running on 32-bit Windows.
    +  if IsWin64 then
    +  begin
    +    MsgBox('64-bit program files reside in: ' +
    +      ExpandConstant('{autopf64}'), mbInformation, MB_OK);
    +  end;
    +end;
    +

    Is64BitInstallMode
    +ProcessorArchitecture

    +
    + + Is64BitInstallMode + function Is64BitInstallMode: Boolean; +

    Returns True if Setup or Uninstall is running in 64-bit install mode, or False if it is running in 32-bit install mode.

    +

    When True is returned, it is safe to assume that IsWin64 will also return True.

    +
    begin
    +  if Is64BitInstallMode then
    +    MsgBox('Installing in 64-bit mode', mbInformation, MB_OK)
    +  else
    +    MsgBox('Installing in 32-bit mode', mbInformation, MB_OK);
    +end;
    +

    IsWin64
    +ProcessorArchitecture

    +
    + + ProcessorArchitecture + function ProcessorArchitecture: TSetupProcessorArchitecture; +

    Returns the architecture of the system's Windows installation.

    +

    TSetupProcessorArchitecture is an enumerated type, defined as:

    +

    TSetupProcessorArchitecture = (paUnknown, paX86, paX64, paArm32, paArm64);

    +

    paUnknown is returned if Setup/Uninstall does not recognize the architecture of the Windows installation. It can be assumed that an "unknown" architecture is at least capable of executing 32-bit x86 code, or Setup/Uninstall wouldn't be running at all.

    +

    paArm32 is not a possible return value for this function because no version of Windows for 32-bit Arm processors had the ability to run x86 binaries. (An x86 emulator was first introduced in Arm64 Windows.)

    +
    var
    +  S: String;
    +begin
    +  case ProcessorArchitecture of
    +    paX86: S := 'x86';
    +    paX64: S := 'x64';
    +    paArm64: S := 'Arm64';
    +  else
    +    S := 'Unrecognized';
    +  end;
    +  MsgBox('Windows architecture: ' + S, mbInformation, MB_OK);
    +end;
    +

    Architecture Identifier Matchers like IsX64Compatible
    +Is64BitInstallMode

    +
    + + IsArm32Compatible + function IsArm32Compatible: Boolean; +

    Returns True if the system matches architecture identifier arm32compatible.

    +

    Architecture Identifier Matchers like IsX64Compatible
    +ProcessorArchitecture

    +
    + + IsArm64 + function IsArm64: Boolean; +

    Returns True if the system matches architecture identifier arm64.

    +

    Architecture Identifier Matchers like IsX64Compatible
    +ProcessorArchitecture

    +
    + + IsX64Compatible + function IsX64Compatible: Boolean; +

    Returns True if the system matches architecture identifier x64compatible.

    +

    Architecture Identifier Matchers like IsX64Compatible
    +ProcessorArchitecture

    +
    + + IsX64OS + function IsX64OS: Boolean; +

    Returns True if the system matches architecture identifier x64os.

    +

    Before Inno Setup 6.3, IsX64OS was named IsX64. The compiler still accepts IsX64 as an alias for IsX64OS, but will emit a deprecation warning when used.

    +

    Architecture Identifier Matchers like IsX64Compatible
    +ProcessorArchitecture

    +
    + + IsX86Compatible + function IsX86Compatible: Boolean; +

    Returns True if the system matches architecture identifier x86compatible.

    +

    Architecture Identifier Matchers like IsX64Compatible
    +ProcessorArchitecture

    +
    + + IsX86OS + function IsX86OS: Boolean; +

    Returns True if the system matches architecture identifier x86os.

    +

    Before Inno Setup 6.3, IsX86OS was named IsX86. The compiler still accepts IsX86 as an alias for IsX86OS.

    +

    Architecture Identifier Matchers like IsX64Compatible
    +ProcessorArchitecture

    +
    +
    + + + InstallOnThisVersion + function InstallOnThisVersion(const MinVersion, OnlyBelowVersion: String): Boolean; +

    This function is deprecated. Returns True if an entry with the specified MinVersion and OnlyBelowVersion parameters should be installed. If an invalid version string is passed, an exception will be raised.

    +

    This function is provided for backward compatibility only, and may be removed in a future release. New scripts should use GetWindowsVersion or GetWindowsVersionEx instead.

    +

    Prior to Inno Setup 5.5.0, this function returned irInstall rather than a Boolean True value. irInstall is now defined as an alias for True.

    +
    // Old method, deprecated
    +function IsWindows8OrLater: Boolean;
    +begin
    +  Result := InstallOnThisVersion('0,6.2', '0,0');
    +end;
    +
    +// New method
    +function IsWindows8OrLater: Boolean;
    +begin
    +  Result := (GetWindowsVersion >= $06020000);
    +end;
    +

    GetWindowsVersion
    +GetWindowsVersionEx

    +
    + + IsDotNetInstalled + function IsDotNetInstalled(const MinVersion: TDotNetVersion; const MinServicePack: Cardinal): Boolean; +

    Returns True if the .NET Framework with the specified MinVersion and MinServicePack parameters is installed.

    +

    TDotNetVersion is defined as:

    +

    TDotNetVersion = (net11, net20, net30, net35, net4Client, net4Full, net45, net451, net452, net46, net461, net462, net47, net471, net472, net48);

    +
    function InitializeSetup: Boolean;
    +begin
    +  Result := IsDotNetInstalled(net462, 0); //Returns True if .NET Framework version 4.6.2 is installed, or a compatible version such as 4.8
    +  if not Result then
    +    SuppressibleMsgBox(FmtMessage(SetupMessage(msgWinVersionTooLowError), ['.NET Framework', '4.6.2']), mbCriticalError, MB_OK, IDOK);
    +end;
    +
    + + IsMsiProductInstalled + function IsMsiProductInstalled(const UpgradeCode: String; const PackedMinVersion: Int64): Boolean; +

    Returns True if a MSI product with the specified UpgradeCode and PackedMinVersion is installed.

    +

    If there are multiple products installed with the specified UpgradeCode only the version of the first product returned by the system is checked.

    +

    An exception will be raised if an error occurs.

    +
    function InitializeSetup: Boolean;
    +begin
    +  Result := IsMsiProductInstalled('{20400CF0-DE7C-327E-9AE4-F0F38D9085F8}', PackVersionComponents(12, 0, 0, 0)); //Returns True if Visual C++ 2013 Redistributable (x64) is installed
    +  if not Result then
    +    SuppressibleMsgBox(FmtMessage(SetupMessage(msgWinVersionTooLowError), ['Visual C++ 2013 Redistributable (x64)', '12.0']), mbCriticalError, MB_OK, IDOK);
    +end;
    +
    +
    + + + GetEnv + function GetEnv(const EnvVar: String): String; +

    Gets the value of the specified environment variable.

    +
    + + GetUserNameString + function GetUserNameString: String; +

    Retrieves the name of the user currently logged onto the system.

    +
    + + GetComputerNameString + function GetComputerNameString: String; +

    Retrieves the name of the computer the Setup or Uninstall program is running on (as returned by the Windows GetComputerName function).

    +
    +
    + + + GetUILanguage + function GetUILanguage: Integer; +

    Returns the language identifier (LANGID) of the current user's UI language, which is either the language of Windows itself, or in the case of a MUI edition of Windows, the user interface language chosen in Control Panel's Regional Options. Returns 0 if the function fails (unlikely).

    +

    Refer to the list of valid language identifiers on MSDN.

    +
    begin
    +  if GetUILanguage = $0409 then
    +  begin
    +    // UI language is English (United States)
    +  end;
    +
    +  // You can use "and $3FF" to extract the primary language identifier
    +  if GetUILanguage and $3FF = $09 then
    +  begin
    +    // Matches any variant of English
    +  end;
    +end;
    +
    +
    + + + FontExists + function FontExists(const FaceName: String): Boolean; +

    Returns True if a font with the specified face name is installed on the system.

    +
    +
    + + + FindWindowByClassName + function FindWindowByClassName(const ClassName: String): HWND; +

    Retrieves a handle to the top-level window whose class name matches the specified string. This function does not search child windows, and does not perform a case-sensitive search. Returns 0 if no window is found.

    +
    + + FindWindowByWindowName + function FindWindowByWindowName(const WindowName: String): HWND; +

    Retrieves a handle to the top-level window whose window name matches the specified string. This function does not search child windows, and does not perform a case-sensitive search. Returns 0 if no window is found.

    +
    + + SendMessage + function SendMessage(const Wnd: HWND; const Msg, WParam, LParam: Longint): Longint; +

    Sends the specified message to the specified window. Does not return until the window procedure has processed the message.

    +
    + + PostMessage + function PostMessage(const Wnd: HWND; const Msg, WParam, LParam: Longint): Boolean; +

    Posts the specified message to the specified window, returning immediately. Returns True if successful.

    +
    + + SendNotifyMessage + function SendNotifyMessage(const Wnd: HWND; const Msg, WParam, LParam: Longint): Boolean; +

    Sends the specified message to the specified window without waiting for the message to be processed by the destination window procedure. Returns True if successful.

    +
    + + RegisterWindowMessage + function RegisterWindowMessage(const Name: String): Longint; +

    The RegisterWindowMessage function defines a new window message that is guaranteed to be unique throughout the system. The returned message value can be used when calling the SendBroadcastMessage or PostBroadcastMessage function.

    +
    + + SendBroadcastMessage + function SendBroadcastMessage(const Msg, WParam, LParam: Longint): Longint; +

    Sends the specified message to top-level windows in the system. Does not return until all window procedure have processed the message.
    The specified message must be unique. Use RegisterWindowMessage to get such a message.

    +
    + + PostBroadcastMessage + function PostBroadcastMessage(const Msg, WParam, LParam: Longint): Boolean; +

    Posts the specified message to top-level windows in the system, returning immediately.
    The specified message must be unique. Use RegisterWindowMessage to get such a message.

    +
    + + SendBroadcastNotifyMessage + function SendBroadcastNotifyMessage(const Msg, WParam, LParam: Longint): Boolean; + +
    + + + CreateMutex + procedure CreateMutex(const Name: String); +

    Creates a mutex with the specified name.

    +
    + + CheckForMutexes + function CheckForMutexes(Mutexes: String): Boolean; +

    Returns True if any of the mutexes in the comma-separated Mutexes string exist.

    +
    +
    + + + MakePendingFileRenameOperationsChecksum + procedure MakePendingFileRenameOperationsChecksum: String; +

    Calculates a checksum of the current PendingFileRenameOperations registry value. The caller can use this checksum to determine if PendingFileRenameOperations or WININIT.INI was changed (perhaps by another program).

    +
    var
    +  ChecksumBefore, ChecksumAfter: String;
    +begin
    +  ChecksumBefore := MakePendingFileRenameOperationsChecksum;
    +  // ...run a program...
    +  ChecksumAfter := MakePendingFileRenameOperationsChecksum;
    +  if ChecksumAfter <> ChecksumBefore then
    +    // PendingFileRenameOperations or WININIT.INI changed
    +end;
    +
    +
    + + + CreateCallback + function CreateCallback(Method: AnyMethod): Longword; +

    Allows you to perform direct callbacks from DLL functions (like Windows API functions) to functions in your script.

    +
    function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: Longword): Longword;
    +external 'SetTimer@user32.dll stdcall';
    +
    +var
    +  TimerCount: Integer;
    +
    +procedure MyTimerProc(Arg1, Arg2, Arg3, Arg4: Longword);
    +begin
    +  Inc(TimerCount);
    +  WizardForm.BeveledLabel.Caption := ' Timer! ' + IntToStr(TimerCount);
    +  WizardForm.BeveledLabel.Visible := True;
    +end;
    +
    +procedure InitializeWizard;
    +begin
    +  SetTimer(0, 0, 1000, CreateCallback(@MyTimerProc));
    +end;
    +
    + + UnloadDLL + procedure UnloadDLL(Filename: String); +

    Unloads the specified DLL that was loaded by the [Code] section using an "external" keyword. This can be useful if you need to delete the DLL.

    +

    The case of the filename and any path name must exactly match that of the function import. You will need to expand any constants in the filename yourself before passing it to UnloadDLL.

    +

    If the function import used a "files:" prefix, prepend the value of the {tmp} constant to the filename (e.g. ExpandConstant('{tmp}\filename.dll')).

    +

    It's not recommended that you try this, but if you attempt to call a function in a DLL that has been unloaded, the DLL will be re-loaded.

    +
    procedure DllFunc; external 'DllFunc@{app}\MyDll.dll stdcall uninstallonly';
    +
    +...
    +
    +begin
    +  // Call DllFunc
    +  DllFunc;
    +
    +  // Unload the DLL
    +  UnloadDLL(ExpandConstant('{app}\MyDll.dll'));
    +
    +  // Now we can delete the DLL
    +  DeleteFile(ExpandConstant('{app}\MyDll.dll'));
    +end;
    +
    + + DLLGetLastError + function DLLGetLastError(): Longint; +

    Returns value the last error code had right after the most recent DLL function call you made. Useful after calling Windows API functions (if the function sets the last error code).

    +

    It's recommended to use this function instead of directly calling the GetLastError Windows API function since Setup or Uninstall makes API calls of its own, so the last error code could be overwritten at any time.

    +

    Refer to the system error codes on MSDN.

    +
    function MessageBox(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';
    +
    +...
    +
    +begin
    +  if MessageBox(-1, '', '', -1) = 0 then
    +    MsgBox(SysErrorMessage(DLLGetLastError), mbError, mb_Ok);
    +
    +
    +
    + +

    String

    + + + Chr + function Chr(B: Byte): Char; +

    Returns the character with the specified ordinal value.

    +
    + + Ord + function Ord(C: Char): Byte; +

    Returns the ordinal value of the specified character.

    +
    + + Copy + function Copy(S: String; Index, Count: Integer): String; +

    Returns a string containing Count characters starting at S[Index].
    If Index is larger than the length of S, Copy returns an empty string.
    If Count specifies more characters than are available, only the characters from S[Index] to the end of S are returned.

    +
    + + Length + function Length(s: String): Longint; +

    Returns the length of the specified string.

    +
    + + Lowercase + function Lowercase(S: String): String; +

    Returns a copy of the string S, but with all 7-bit ASCII characters between 'A' and 'Z' converted to lowercase. To convert 8-bit international characters, use AnsiLowercase instead.

    +
    + + Uppercase + function Uppercase(S: String): String; +

    Returns a copy of the string S, but with all 7-bit ASCII characters between 'a' and 'z' converted to uppercase. To convert 8-bit international characters, use AnsiUppercase instead.

    +
    + + AnsiLowercase + function AnsiLowercase(S: String): String; +

    Returns a string that is a copy of the given string converted to lowercase. The conversion uses the current Windows locale. This function supports multi-byte character sets (MBCS).

    +
    + + AnsiUppercase + function AnsiUppercase(S: String): String; +

    Returns a string that is a copy of the given string converted to uppercase. The conversion uses the current Windows locale. This function supports multi-byte character sets (MBCS).

    +
    + + StringOfChar + function StringOfChar(c: Char; I : Longint): String; +

    Returns a string of length I with all characters set to character C.

    +
    + + Delete + procedure Delete(var S: String; Index, Count: Integer); +

    Removes a substring of Count characters from string S starting at S[Index].
    If Index is larger than the length of S, no characters are deleted. If Count specifies more characters than remain starting at the S[Index], Delete removes the rest of the string.

    +
    + + Insert + procedure Insert(Source: String; var Dest: String; Index: Integer); +

    Merges Source into Dest at the position Dest[Index].

    +
    + + StringChange + function StringChange(var S: String; const FromStr, ToStr: String): Integer; +

    This function is deprecated. It is equivalent to calling StringChangeEx with the SupportMBCS parameter set to False.

    +
    + + StringChangeEx + function StringChangeEx(var S: String; const FromStr, ToStr: String; const SupportDBCS: Boolean): Integer; +

    Changes all occurrences in S of FromStr to ToStr. If SupportDBCS is True (recommended unless you require binary safety), double-byte character sequences in S are recognized and handled properly. Otherwise, the function behaves in a binary-safe manner. Returns the number of times FromStr was matched and changed.

    +

    When working with strings containing paths or filenames, be sure to pass True in the SupportDBCS parameter. Otherwise, paths with Chinese, Japanese, or Korean characters may be corrupted.

    +
    var
    +  S: String;
    +begin
    +  S := ExpandConstant('{commonappdata}');
    +  // S = 'C:\Documents and Settings\All Users\Application Data'
    +
    +  StringChangeEx(S, '\', '/', True);
    +  // S = 'C:/Documents and Settings/All Users/Application Data'
    +end;
    +
    + + Pos + function Pos(SubStr, S: String): Integer; +

    Searches for Substr within S and returns an integer value that is the index of the first character of Substr within S.
    If Substr is not found, Pos returns zero. The Pos function is case-sensitive.

    +
    + + AddQuotes + function AddQuotes(const S: String): String; +

    Adds a quote (") character to the left and right sides of the string if the string contains a space and it didn't have quotes already. This is primarily used when spawning another process with a long filename as one of the parameters.

    +
    + + RemoveQuotes + function RemoveQuotes(const S: String): String; +

    Opposite of AddQuotes; removes any quotes around the string.

    +
    + + ConvertPercentStr + function ConvertPercentStr(var S: String): Boolean; +

    Expands all %-encoded characters in the string (see RFC 2396). Returns True if all were successfully expanded.

    +
    +
    + + + CompareText + function CompareText(const S1, S2: string): Integer; +

    Compares the strings S1 and S2 and returns 0 if they are equal. If S1 is greater than S2, CompareText returns an integer greater than 0. If S1 is less than S2, CompareText returns an integer less than 0. The CompareText function is not case-sensitive.

    +
    + + CompareStr + function CompareStr(const S1, S2: string): Integer; +

    Compares S1 to S2, with case-sensitivity. The return value is less than 0 if S1 is less than S2, 0 if S1 equals S2, or greater than 0 if S1 is greater than S2.

    +
    + + SameText + function SameText(const S1, S2: string): Boolean; +

    Compares the strings S1 and S2 and returns True if they are equal. The SameText function is not case-sensitive.

    +
    + + SameStr + function SameStr(const S1, S2: string): Boolean; +

    Compares S1 to S2, with case-sensitivity. The return value is True if they are equal.

    +
    + + IsWildcard + function IsWildcard(const Pattern: String): Boolean; +

    Returns True if the specified pattern contains a wildcard.

    +
    + + WildcardMatch + function WildcardMatch(const Text, Pattern: String): Boolean; +

    Returns True if the specified text matches the specified pattern.

    +
    +
    + + + Format + function Format(const Format: string; const Args: array of const): string; +

    Formats the series of arguments in the open array Args. Formatting is controlled by the format string Format; the results are returned as a string.

    +

    An exception will be raised if an invalid format string is specified, too few arguments are passed, or if any arguments are of the wrong type.

    +
    var
    +  S: String;
    +  I: Integer;
    +begin
    +  S := Format('%d files found', [10]);
    +  // S = '10 files found'
    +
    +  S := Format('Filename: %s', ['file.txt']);
    +  // S = 'Filename: file.txt'
    +
    +  I := 64;
    +  S := Format('%d in hex, padded to 8 digits: %.8x', [I, I]);
    +  // S = '64 in hex, padded to 8 digits: 00000040'
    +end;
    +
    +
    + + + Trim + function Trim(const S: string): String; +

    Trims leading and trailing spaces and control characters from the given string S.

    +
    + + TrimLeft + function TrimLeft(const S: string): String; +

    Trims leading spaces and control characters from the given string S.

    +
    + + TrimRight + function TrimRight(const S: string): String; +

    Trims trailing spaces and control characters from the given string S.

    +
    +
    + + + StrToIntDef + function StrToIntDef(s: string; def: Longint): Longint; +

    The StrToInt function converts the string passed in S into a number. If S does not represent a valid number, StrToInt returns the number passed in Def.

    +
    + + StrToInt + function StrToInt(s: string): Longint; +

    The StrToInt function converts the string passed in S into a number.

    +

    Use of StrToIntDef instead of StrToInt is recommended.

    +
    + + StrToInt64Def + function StrToInt64Def(s: string; def: Int64): Int64; +

    The StrToInt64Def function converts the string passed in S into a 64-bit number. If S does not represent a valid 64-bit number, StrToInt returns the 64-bit number passed in Def.

    +
    + + StrToInt64 + function StrToInt64(s: string): Int64; +

    The StrToInt64 function converts the string passed in S into a 64-bit number.

    +

    Use of StrToInt64Def instead of StrToInt64 is recommended.

    +
    + + StrToFloat + function StrToFloat(s: string): Extended; +

    The StrToFloat function converts the string passed in S into a floating point number. The character used for the decimal point should always be a dot.

    +
    + + IntToStr + function IntToStr(i: Int64): String; +

    The IntToStr function converts a 64-bit number into a string.

    +
    + + FloatToStr + function FloatToStr(e: extended): String; +

    The FloatToStr function converts a floating point number into a string.

    The character used for the decimal point will always be a dot.

    +
    +
    + + + CharLength + function CharLength(const S: String; const Index: Integer): Integer; +

    Returns the length in bytes (1 or 2) of the character in the specified string at the specified index.

    +

    In double-byte character sets (Chinese, Japanese, Korean), most non-ASCII characters occupy two bytes. Note that the second byte of a double-byte character -- known as the "trail byte" -- can be in the same range used by ASCII characters (below 128). Thus, when stepping through a string that may contain double-byte characters, such as a path or filename, care must be taken to not mistake trail bytes for single-byte ASCII characters.

    +
    function BackslashToSlash(const S: String): String;
    +var
    +  I: Integer;
    +begin
    +  Result := S;
    +  I := 1;
    +  while I <= Length(Result) do
    +  begin
    +    if Result[I] = '\' then
    +      Result[I] := '/';
    +    // Go to the next character. But do not simply increment I by 1.
    +    // Increment by CharLength() in case Result[I] is a double-byte character.
    +    I := I + CharLength(Result, I);
    +  end;
    +end;
    +
    +...
    +
    +begin
    +  // Show path of Common Files with backslashes changed to forward slashes
    +  MsgBox(BackslashToSlash(ExpandConstant('{cf}')), mbInformation, MB_OK);
    +end;
    +
    +
    + + + AddBackslash + function AddBackslash(const S: String): String; +

    Returns the specified string with a trailing backslash added, unless the string is empty or already ends in a slash or backslash.

    +
    + + RemoveBackslashUnlessRoot + function RemoveBackslashUnlessRoot(const S: String): String; +

    Returns the specified string with any trailing slashes/backslashes removed, unless the string specifies the root directory of a drive (e.g. "C:\" or "\"), in which case it leaves 1 slash.

    +
    + + RemoveBackslash + function RemoveBackslash(const S: String): String; +

    Returns the specified string with any trailing slashes/backslashes removed.

    +

    Use of this function is discouraged; use RemoveBackslashUnlessRoot instead when working with file system paths.

    +
    + + AddPeriod + function AddPeriod(const S: String): String; +

    Returns the specified string with a trailing period added, unless the string is empty or already ends in a period or other punctuation mark.

    +
    + + ChangeFileExt + function ChangeFileExt(const FileName, Extension: string): String; +

    Takes the file name passed in FileName and changes the extension of the file name to the extension passed in Extension.

    +
    + + ExtractFileExt + function ExtractFileExt(const FileName: string): String; +

    Extracts the extension part of the given file name. The resulting string includes the period character that separates the name and extension parts. The resulting string is empty if the given filename has no extension.

    +
    + + ExtractFileDir + function ExtractFileDir(const FileName: string): String; +

    Extracts the drive and directory parts of the given file name. The resulting string is empty if FileName contains no drive and directory parts.

    +
    + + ExtractFilePath + function ExtractFilePath(const FileName: string): String; +

    Extracts the drive and directory parts of the given file name. The resulting string is the leftmost characters of FileName, up to and including the colon or backslash that separates the path information from the name and extension. The resulting string is empty if FileName contains no drive and directory parts.

    +
    + + ExtractFileName + function ExtractFileName(const FileName: string): String; +

    Extracts the name and extension parts of the given file name. The resulting string is the rightmost characters of FileName, starting with the first character after the colon or backslash that separates the path information from the name and extension. The resulting string is equal to FileName if FileName contains no drive and directory parts.

    +
    + + ExtractFileDrive + function ExtractFileDrive(const FileName: string): String; +

    Returns a string containing the 'drive' portion of a fully qualified path name for the file passed in the FileName. For file names with drive letters, the resulting string is in the form '<drive>:'. For file names with a UNC path the resulting string is in the form '\\<servername>\<sharename>'. If the given path contains neither style of path prefix, the result is an empty string.

    +
    + + ExtractRelativePath + function ExtractRelativePath(const BaseName, DestName: String): String; +

    Converts a fully qualified path name into a relative path name. The DestName parameter specifies the file name (including path) to be converted. BaseName is the fully qualified name of the base directory to which the returned path name should be relative. BaseName may or may not include a file name, but it must include the final path delimiter.

    +

    ExtractRelativePath strips out common path directories and inserts '..\' for each level up from the BaseName.

    +
    var
    +  S: String;
    +begin
    +  S := ExtractRelativePath('c:\windows\system32\', 'c:\autoexec.bat');
    +  // S = ..\..\autoexec.bat
    +end;
    +
    + + ExpandFileName + function ExpandFileName(const FileName: string): String; +

    Returns a string containing a fully qualified path name for the file passed in the FileName. A fully qualified path name includes the drive letter and any directory and subdirectories in addition to the file name and extension.

    +
    + + ExpandUNCFileName + function ExpandUNCFileName(const FileName: string): String; +

    Returns a string containing a fully qualified path name for the file passed in the FileName. A fully qualified path name includes the drive portion of the filename in the UNC format '\\<servername>\<sharename>' if the drive letter is mapped to a network resource instead of a local drive and any directory and subdirectories in addition to the file name and extension.

    +
    +
    + + + GetDateTimeString + function GetDateTimeString(const DateTimeFormat: String; const DateSeparator, TimeSeparator: Char): String; +

    Returns the current date and time as a string using the specified formatting. The following format specifiers are supported:
    +
    +d Displays the day as a number without a leading zero (1-31).
    +dd Displays the day as a number with a leading zero (01-31).
    +ddd Displays the day as an abbreviation (Sun-Sat).
    +dddd Displays the day as a full name (Sunday-Saturday).
    +ddddd Displays the date using the system's short date format.
    +dddddd Displays the date using the system's long date format.
    +m Displays the month as a number without a leading zero (1-12).
    + If the m specifier immediately follows an h or hh specifier, the minute rather than the month is displayed.
    +mm Displays the month as a number with a leading zero (01-12).
    + If the mm specifier immediately follows an h or hh specifier, the minute rather than the month is displayed.
    +mmm Displays the month as an abbreviation (Jan-Dec).
    +mmmm Displays the month as a full name (January-December).
    +yy Displays the year as a two-digit number (00-99).
    +yyyy Displays the year as a four-digit number (0000-9999).
    +h Displays the hour without a leading zero (0-23).
    +hh Displays the hour with a leading zero (00-23).
    +n Displays the minute without a leading zero (0-59).
    +nn Displays the minute with a leading zero (00-59).
    +s Displays the second without a leading zero (0-59).
    +ss Displays the second with a leading zero (00-59).
    +t Displays the time using the system's short time format.
    +tt Displays the time using the system's long time format.
    +am/pm Uses the 12-hour clock for the preceding h or hh specifier.
    + Displays 'am' for any hour before noon, and 'pm' for any hour after noon.
    + The am/pm specifier can use lower, upper, or mixed case, and the result is displayed accordingly.
    +a/p Uses the 12-hour clock for the preceding h or hh specifier.
    + Displays 'a' for any hour before noon, and 'p' for any hour after noon.
    + The a/p specifier can use lower, upper, or mixed case, and the result is displayed accordingly.
    +/ Displays the date separator character given by the DateSeparator parameter.
    + If DateSeparator is set to #0, the system's date separator character will be used instead.
    +: Displays the time separator character given by the TimeSeparator parameter.
    + If TimeSeparator is set to #0, the system's time separator character will be used instead.
    +'xx'/"xx" Characters enclosed in single or double quotes are displayed as-is, and do not affect formatting.
    +
    +Format specifiers may be written in upper case as well as in lower case letters--both produce the same result.

    +
    +GetDateTimeString('ddddd', #0, #0);
    +GetDateTimeString('ddddd tt', #0, #0);
    +GetDateTimeString('dd/mm/yyyy hh:nn:ss', '-', ':');
    +
    +
    +
    + + + SetLength + procedure SetLength(var S: String; L: Longint); +

    Sets the length of a string.

    +
    + + CharToOemBuff + procedure CharToOemBuff(var S: AnsiString); +

    Translates an ANSI string to a string with characters from the OEM-defined character set.

    +
    + + OemToCharBuff + procedure OemToCharBuff(var S: AnsiString); +

    Translates a string with characters from the OEM-defined character set into an ANSI string.

    +
    + + Utf8Encode + function Utf8Encode(const S: String): AnsiString; +

    Encodes a Unicode string into a UTF-8 encoded ANSI string.

    +
    + + Utf8Decode + function Utf8Decode(const S: AnsiString): String; +

    Decodes a UTF-8 encoded ANSI string into a Unicode string.

    +
    +
    + + + GetMD5OfString + function GetMD5OfString(const S: AnsiString): String; +

    Gets the MD5 sum of the specified string, as a string.

    +
    var
    +  MD5: String;
    +begin
    +  MD5 := GetMD5OfString('Test');
    +  // MD5 = '0cbc6611f5540bd0809a388dc95a615b'
    +end;
    +
    +
    + + GetMD5OfUnicodeString + function GetMD5OfUnicodeString(const S: String): String; +

    Gets the MD5 sum of the specified string, as a string.

    +
    var
    +  MD5: String;
    +begin
    +  MD5 := GetMD5OfUnicodeString('Test');
    +  // MD5 = '8e06915d5f5d4f8754f51892d884c477'
    +end;
    +
    +
    + + GetSHA1OfString + function GetSHA1OfString(const S: AnsiString): String; +

    Gets the SHA-1 hash of the specified string, as a string.

    +
    var
    +  SHA1: String;
    +begin
    +  SHA1 := GetSHA1OfString('Test');
    +  // SHA1 = '640ab2bae07bedc4c163f679a746f7ab7fb5d1fa'
    +end;
    +
    +
    + + GetSHA1OfUnicodeString + function GetSHA1OfUnicodeString(const S: String): String; +

    Gets the SHA-1 hash of the specified string, as a string.

    +
    var
    +  SHA1: String;
    +begin
    +  SHA1 := GetSHA1OfUnicodeString('Test');
    +  // SHA1 = '9ab696a37604d665dc97134dbee44cfe70451b1a'
    +end;
    +
    +
    + + GetSHA256OfString + function GetSHA256OfString(const S: AnsiString): String; +

    Gets the SHA-256 hash of the specified string, as a string.

    +
    var
    +  SHA256: String;
    +begin
    +  SHA256 := GetSHA256OfString('Test');
    +  // SHA256 = '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08'
    +end;
    +
    +
    + + GetSHA256OfUnicodeString + function GetSHA256OfUnicodeString(const S: String): String; +

    Gets the SHA-256 hash of the specified string, as a string.

    +
    var
    +  SHA256: String;
    +begin
    +  SHA256 := GetSHA256OfUnicodeString('Test');
    +  // SHA256 = 'e6fa3ca87b1b641ab646d3b4933bba8d0970763f030b6578a60abdeae7366247'
    +end;
    +
    +
    +
    + + + SysErrorMessage + function SysErrorMessage(ErrorCode: Integer): String; +

    Returns a localized error message string that corresponds to the given operating system error code.

    +

    Refer to the system error codes on MSDN.

    +
    +
    + + + MinimizePathName + function MinimizePathName(const Filename: String; const Font: TFont; MaxLen: Integer): String; +

    Returns a minimized filename that will not take more than MaxLen pixels to display with the given font. The minimizing is done by replacing the middle part with '...' as needed.

    +
    MyLabel.Caption := MinimizePathName(MyPathName, MyLabel.Font, MyLabel.Width);
    +

    TFont

    +
    +
    +
    + +

    Array

    + + + GetArrayLength + function GetArrayLength(var Arr: Array): Longint; +

    Gets the length of an array.

    +
    + + SetArrayLength + procedure SetArrayLength(var Arr: Array; I: Longint); +

    Sets the length of an array. Always call SetArrayLength before accessing the elements in an array.

    +
    +
    +
    + +

    Variant

    + + + Null + function Null: Variant; +

    Returns a variant with a value of Null.

    +
    + + Unassigned + function Unassigned: Variant; +

    Returns a variant with no value assigned.

    +
    +
    + + + VarIsEmpty + function VarIsEmpty(const V: Variant): Boolean; +

    Returns True if the specified variant is unassigned.

    +

    VarIsClear

    +
    + + VarIsClear + function VarIsClear(const V: Variant): Boolean; +

    Returns True if the specified variant's value is undefined.

    +

    VarIsEmpty

    +
    + + VarIsNull + function VarIsNull(const V: Variant): Boolean; +

    Returns True if the specified variant has a value of Null assigned.

    +
    + + VarType + function VarType(const V: Variant): TVarType; +

    Returns the type code of the specified variant.

    +

    The lower twelve bits of a variant type code (the bits defined by the varTypeMask bit mask) define the type of the variant. The varArray bit is set if the variant is an array of the given type. The varByRef bit is set if the variant is a reference to a value of the given type as opposed to an actual value.

    +

    The following variant type code constants are defined:

    +
    +const
    +  varEmpty    = $0000;
    +  varNull     = $0001;
    +  varSmallint = $0002;
    +  varInteger  = $0003;
    +  varSingle   = $0004;
    +  varDouble   = $0005;
    +  varCurrency = $0006;
    +  varDate     = $0007;
    +  varOleStr   = $0008;
    +  varDispatch = $0009;
    +  varError    = $000A;
    +  varBoolean  = $000B;
    +  varVariant  = $000C;
    +  varUnknown  = $000D;
    +  varByte     = $0011;
    +  varString   = $0100;
    +  varTypeMask = $0FFF;
    +  varArray    = $2000;
    +  varByRef    = $4000;
    +
    +
    +
    +
    +
    + +

    File System

    + + + DirExists + function DirExists(const Name: String): Boolean; +

    Returns True if the specified directory name exists. The specified name may include a trailing backslash.

    +
    + + FileExists + function FileExists(const Name: String): Boolean; +

    Returns True if the specified file exists.

    +
    + + FileOrDirExists + function FileOrDirExists(const Name: String): Boolean; +

    Returns True if the specified directory or file name exists. The specified name may include a trailing backslash.

    +
    + + FileSize + function FileSize(const Name: String; var Size: Integer): Boolean; +

    Sets Size to the size of the specified file in bytes. Returns True if the file size was set successfully and False otherwise. Only supports file sizes smaller than 2 GB. To get all 64 bits of the file size, use FileSize64 instead.

    +
    + + FileSize64 + function FileSize64(const Name: String; var Size: Int64): Boolean; +

    Sets Size to the size of the specified file in bytes. Returns True if the file size was set successfully and False otherwise.

    +
    + + GetSpaceOnDisk + function GetSpaceOnDisk(const Path: String; const InMegabytes: Boolean; var Free, Total: Cardinal): Boolean; +

    Returns the number of free and total bytes or megabytes on a drive. Path specifies a directory on the drive or UNC share to check; it can be either the root (e.g. C:\) or an existing subdirectory. The setting of the InMegabytes parameter determines whether it returns figures in bytes or in megabytes (2^20), rounded down. Returns True if successful, False otherwise.

    +

    The figures returned by this function are capped at 2147483647 (2^31-1). Therefore, if InMegaBytes is False, it will return no more than 2147483647 bytes. If InMegaBytes is True, it will return no more than 2147483647 megabytes.

    +
    var
    +  Path: String;
    +  FreeMB, TotalMB: Cardinal;
    +begin
    +  // Get and display free megabytes on the Program Files drive
    +  Path := ExpandConstant('{autopf}');
    +  if GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then
    +  begin
    +    MsgBox('There are ' + IntToStr(FreeMB) + ' megabytes free on ' +
    +      Path, mbInformation, MB_OK);
    +  end
    +  else begin
    +    // the function failed
    +  end;
    +end;
    +

    GetSpaceOnDisk64

    +
    + + GetSpaceOnDisk64 + function GetSpaceOnDisk64(const Path: String; var Free, Total: Int64): Boolean; +

    Returns the number of free and total bytes on a drive. Path specifies a directory on the drive or UNC share to check; it can be either the root (e.g. C:\) or an existing subdirectory. Returns True if successful, False otherwise.

    +
    var
    +  Path: String;
    +  FreeBytes, TotalBytes: Int64;
    +begin
    +  // Get and display free bytes on the Program Files drive
    +  Path := ExpandConstant('{autopf}');
    +  if GetSpaceOnDisk64(Path, FreeBytes, TotalBytes) then
    +  begin
    +    MsgBox('There are ' + IntToStr(FreeBytes) + ' bytes free on ' +
    +      Path, mbInformation, MB_OK);
    +  end
    +  else begin
    +    // the function failed
    +  end;
    +end;
    +

    GetSpaceOnDisk

    +
    +
    + + + FileSearch + function FileSearch(const Name, DirList: string): String; +

    Searches through the directories passed in DirList for a file named Name. DirList should be directory names separated by semicolons. If FileSearch locates a file matching Name, it returns a string containing a fully-qualified path name for that file. If no matching file exists, FileSearch returns an empty string.

    +
    + + FindFirst + function FindFirst(const FileName: String; var FindRec: TFindRec): Boolean; +

    Retrieves information about the first file matching the wildcard specified by FileName. Returns True if successful.

    +

    TFindRec is defined as:

    +
    +  TFindRec = record
    +    Name: String;               // name of the found file (no path)
    +    Attributes: LongWord;       // file attributes
    +    SizeHigh: LongWord;         // size of the file, upper 32 bits
    +    SizeLow: LongWord;          // size of the file, lower 32 bits
    +    CreationTime: TFileTime;    // time file was created
    +    LastAccessTime: TFileTime;  // time file was last accessed
    +    LastWriteTime: TFileTime;   // time file was last modified
    +    AlternateName: String;      // file's short name (empty if none)
    +    FindHandle: THandle;        // used internally
    +  end;
    +
    +

    TFileTime is defined as:

    +
    +  TFileTime = record
    +    dwLowDateTime: DWORD;
    +    dwHighDateTime: DWORD;
    +  end;
    +
    +

    Valid file attributes are:

    +
    +  FILE_ATTRIBUTE_READONLY
    +  FILE_ATTRIBUTE_HIDDEN
    +  FILE_ATTRIBUTE_SYSTEM
    +  FILE_ATTRIBUTE_DIRECTORY
    +  FILE_ATTRIBUTE_ARCHIVE
    +  FILE_ATTRIBUTE_DEVICE
    +  FILE_ATTRIBUTE_NORMAL
    +  FILE_ATTRIBUTE_TEMPORARY
    +  FILE_ATTRIBUTE_SPARSE_FILE
    +  FILE_ATTRIBUTE_REPARSE_POINT
    +  FILE_ATTRIBUTE_COMPRESSED
    +  FILE_ATTRIBUTE_OFFLINE
    +  FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
    +  FILE_ATTRIBUTE_ENCRYPTED
    +
    +

    If FindFirst returns True, call FindNext to enumerate the rest of the files, and then FindClose.

    +

    The following example counts the number of files in the Windows System directory.

    +
    var
    +  FilesFound: Integer;
    +  FindRec: TFindRec;
    +begin
    +  FilesFound := 0;
    +  if FindFirst(ExpandConstant('{sys}\*'), FindRec) then begin
    +    try
    +      repeat
    +        // Don't count directories
    +        if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
    +          FilesFound := FilesFound + 1;
    +      until not FindNext(FindRec);
    +    finally
    +      FindClose(FindRec);
    +    end;
    +  end;
    +  MsgBox(IntToStr(FilesFound) + ' files found in the System directory.',
    +    mbInformation, MB_OK);
    +end;
    +

    FindNext
    +FindClose

    +
    + + FindNext + function FindNext(var FindRec: TFindRec): Boolean; +

    Retrieves information about the next matching file after a call to FindFirst. Returns True if successful.

    +

    For an example, see the documentation for FindFirst.

    +

    FindFirst
    +FindClose

    +
    + + FindClose + procedure FindClose(var FindRec: TFindRec); +

    Ends a find sequence, and frees the resources associated with it. You should always call this when FindFirst returns True.

    +

    For an example, see the documentation for FindFirst.

    +

    FindFirst
    +FindNext

    +
    +
    + + + GetCurrentDir + function GetCurrentDir: String; +

    Returns a string containing the name of the current directory.

    +
    + + SetCurrentDir + function SetCurrentDir(const Dir: string): Boolean; +

    Sets the current directory. The return value is True if the current directory was successfully changed, or False if an error occurred.

    +
    + + GetWinDir + function GetWinDir: String; +

    Returns fully qualified path of the Windows directory. Only includes a trailing backslash if the Windows directory is the root directory.

    +
    + + GetSystemDir + function GetSystemDir: String; +

    Returns fully qualified path of the Windows System directory. Only includes a trailing backslash if the Windows System directory is the root directory.

    +
    + + GetSysWow64Dir + function GetSysWow64Dir: String; +

    64-bit Windows only: returns fully qualified path of the SysWOW64 directory. This is the actual directory in which 32-bit system files reside. An empty string is returned if this function is called on 32-bit Windows, or if for some reason it fails to retrieve the path on 64-bit Windows (unlikely).

    +
    var
    +  S: String;
    +begin
    +  S := GetSysWow64Dir;
    +  // Must check the result -- an empty string is returned
    +  // if there is no SysWOW64 directory.
    +  if S <> '' then
    +    MsgBox('SysWOW64 directory: ' + S, mbInformation, MB_OK)
    +  else
    +    MsgBox('There is no SysWOW64 directory.', mbInformation, MB_OK);
    +end;
    +
    + + GetTempDir + function GetTempDir: String; +

    Returns fully qualified path of the temporary directory, with trailing backslash. This does not use the Win32 function GetTempPath, due to platform differences.
    Gets the temporary file path as follows:
    1. The path specified by the TMP environment variable.
    2. The path specified by the TEMP environment variable, if TMP is not defined or if TMP specifies a directory that does not exist.
    3. The path specified by the USERPROFILE environment variable, if both TMP and TEMP are not defined or specify nonexistent directories.
    4. The Windows directory, if all the above TMP, TEMP and USERPROFILE are not defined or specify nonexistent directories.

    +
    + + GetShellFolderByCSIDL + function GetShellFolderByCSIDL(const Folder: Integer; const Create: Boolean): String; +

    Gets the path of the specified shell folder. Folder specifies the value of a CSIDL constant (a complete list of which can be found in ShlObj.h). If Create is True, the folder will be created if it does not exist. On failure, an empty string is returned.

    +

    It is recommended that you always specify True in the Create parameter. Otherwise, the function may fail if the CSIDL value is valid but the directory does not currently exist. (This is a Windows issue.)

    +
    const
    +  CSIDL_MYPICTURES = $0027;
    +
    +...
    +
    +var
    +  Path: String;
    +begin
    +  Path := GetShellFolderByCSIDL(CSIDL_MYPICTURES, True);
    +  if Path <> '' then
    +  begin
    +    MsgBox('My Pictures path = ' + Path, mbInformation, MB_OK);
    +  end
    +  else
    +  begin
    +    // handle failure
    +  end;
    +end;
    +
    +
    + + + GetShortName + function GetShortName(const LongName: String): String; +

    Returns the short version of the specified long filename. If the short version of the long filename is not found, the long filename is returned.

    +
    + + GenerateUniqueName + function GenerateUniqueName(Path: String; const Extension: String): String; +

    Generates a unique filename for a file in the specified path with the specified extension.

    +
    +
    + + + IsProtectedSystemFile + function IsProtectedSystemFile(const Filename: String): Boolean; +

    Returns True if the specified file is protected by Windows File Protection (and therefore can't be replaced).

    +
    +
    + + + GetMD5OfFile + function GetMD5OfFile(const Filename: String): String; +

    Gets the MD5 sum of the specified file, as a string. An exception will be raised upon failure.

    +
    + + GetSHA1OfFile + function GetSHA1OfFile(const Filename: String): String; +

    Gets the SHA-1 hash of the specified file, as a string. An exception will be raised upon failure.

    +
    + + GetSHA256OfFile + function GetSHA256OfFile(const Filename: String): String; +

    Gets the SHA-256 hash of the specified file, as a string. An exception will be raised upon failure.

    +
    +
    + + + EnableFsRedirection + function EnableFsRedirection(const Enable: Boolean): Boolean; +

    Controls whether built-in support functions that access files disable WOW64 file system redirection (with some exceptions). Specify True in the Enable parameter to leave redirection enabled when those functions are called; specify False to disable it. Returns the previous redirection state (True if redirection was enabled).

    +

    If False is passed in the Enable parameter and the user isn't running a supported 64-bit version of Windows, an exception will be raised. To avoid the exception, call IsWin64 first.

    +

    After you've performed the operation that required changing the redirection state, be sure to restore the previous state. Always use a try..finally language construct to ensure that the previous state is restored even if an exception occurs. See below for an example.

    +

    By default, file system redirection is enabled in 32-bit install mode, and disabled in 64-bit install mode.

    +

    This function has no effect on calls to functions in external DLLs. When invoking external functions, file system redirection is always left enabled.

    +

    It is legal to call this function with True in the Enable parameter if the user isn't running a 64-bit version of Windows. In such a case, the call has no effect.

    +

    The following example demonstrates how to launch an executable located in the 64-bit System directory. (Note: In 64-bit install mode, it isn't necessary to call EnableFsRedirection because file system redirection is already disabled by default.)

    +
    var
    +  OldState: Boolean;
    +  ResultCode: Integer;
    +begin
    +  // First verify that the user is running a supported 64-bit version
    +  // of Windows, because calling EnableFsRedirection(False) will
    +  // raise an exception otherwise.
    +  if IsWin64 then
    +  begin
    +    // Turn off redirection, so that cmd.exe from the 64-bit System
    +    // directory is launched.
    +    OldState := EnableFsRedirection(False);
    +    try
    +      Exec(ExpandConstant('{cmd}'), '', '', SW_SHOWNORMAL,
    +        ewWaitUntilTerminated, ResultCode);
    +    finally
    +      // Restore the previous redirection state.
    +      EnableFsRedirection(OldState);
    +    end;
    +  end;
    +end;
    +
    +
    +
    + +

    File

    + + + Exec + function Exec(const Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ResultCode: Integer): Boolean; +

    Executes the specified executable or batch file, using the same credentials as Setup/Uninstall. The Wait parameter specifies whether the function should return immediately or wait until the launched process has terminated or is idle. Returns True if the specified file was executed successfully, False otherwise.

    +

    If True is returned and Wait is ewWaitUntilTerminated then ResultCode returns the exit code of the process.

    +

    If False is returned then ResultCode specifies the error that occurred. Use SysErrorMessage(ResultCode) to get a description of the error.

    +

    TExecWait is defined as:

    +

    TExecWait = (ewNoWait, ewWaitUntilTerminated, ewWaitUntilIdle);

    +

    Use the ShellExec function instead if you need to launch a file that is not an executable or batch file.

    +

    Do not include quotes in the Filename parameter; the function will add them automatically.

    +

    The WorkingDir parameter can be an empty string, in which case it will try to extract a pathname from the Filename parameter and use that as the initial current directory for the process. If no pathname was specified in Filename, a default directory will be used.

    +

    If you have a single string containing both a filename and parameters (e.g. a command line obtained from an UninstallString registry value), you need not separate them yourself; just pass '>' in the Filename parameter, and the full command line in the Params parameter. (Note that when this is done, the function's special platform-independent support for .bat and .cmd files is disabled; it simply passes the specified command line to CreateProcess without any processing.)

    +

    By default, when Setup/Uninstall is running in 64-bit install mode, this function disables WOW64 file system redirection when calling CreateProcess. It is possible to override this by calling EnableFsRedirection.

    +

    Note: compared to ISPP's Exec the ShowCmd and Wait parameters are swapped!

    +
    var
    +  ResultCode: Integer;
    +begin
    +  // Launch Notepad and wait for it to terminate
    +  if Exec(ExpandConstant('{win}\notepad.exe'), '', '', SW_SHOWNORMAL,
    +     ewWaitUntilTerminated, ResultCode) then
    +  begin
    +    // handle success if necessary; ResultCode contains the exit code
    +  end
    +  else begin
    +    // handle failure if necessary; ResultCode contains the error code
    +  end;
    +end;
    +

    ExecAndLogOutput
    +ExecAsOriginalUser

    +
    + + ExecAsOriginalUser + function ExecAsOriginalUser(const Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ResultCode: Integer): Boolean; +

    Executes the specified executable or batch file, using the (normally non-elevated) credentials of the user that started Setup initially. See Exec and the [Run] section flag runasoriginaluser for more information.

    +

    This function is not supported at uninstall time.

    +

    In very unusual failure cases (e.g. if the initial Setup process died unexpectedly), it is possible for this function to raise an exception instead of just returning False.

    +
    + + ShellExec + function ShellExec(const Verb, Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ErrorCode: Integer): Boolean; +

    Opens the specified file or performs another action specified by Verb, using the same credentials as Setup/Uninstall. The filename can be an executable file, a document file, a folder, or a URL. Verb may be an empty string, in which case the default verb for the file type is used (usually "open"). The Wait parameter specifies whether the function should return immediately or wait until the launched process has terminated or is idle. Returns True if the specified file was opened successfully, False otherwise. If False is returned then ErrorCode specifies the error that occurred. Use SysErrorMessage(ErrorCode) to get a description of the error.

    +

    TExecWait is defined as:

    +

    TExecWait = (ewNoWait, ewWaitUntilTerminated, ewWaitUntilIdle);

    +

    Note that passing a Wait value other than ewNoWait will have no effect if a new process isn't spawned (for example, if the file is opened inside an already-running instance of the program that handles the file type).

    +

    Refer to the system error codes on MSDN.

    +
    var
    +  ErrorCode: Integer;
    +begin
    +  if not ShellExec('', ExpandConstant('{app}\filename.rtf'),
    +     '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode) then
    +  begin
    +    // handle failure if necessary
    +  end;
    +end;
    +

    ShellExecAsOriginalUser

    +
    + + ShellExecAsOriginalUser + function ShellExecAsOriginalUser(const Verb, Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ErrorCode: Integer): Boolean; +

    Opens the specified file or performs another action specified by Verb, using the (normally non-elevated) credentials of the user that started Setup initially. See ShellExec and the [Run] section flag runasoriginaluser for more information.

    +

    This function is not supported at uninstall time.

    +

    In very unusual failure cases (e.g. if the initial Setup process died unexpectedly), it is possible for this function to raise an exception instead of just returning False.

    +

    Refer to the system error codes on MSDN.

    +
    +
    + + + ExtractTemporaryFile + procedure ExtractTemporaryFile(const FileName: String); +

    Extracts the specified file from the [Files] section to a temporary directory. To find the location of the temporary directory, use ExpandConstant('{tmp}').

    +

    The extracted files are automatically deleted when Setup exits.

    +

    An exception will be raised if the file wasn't extracted successfully, if the file wasn't found, or if the file was found but couldn't be processed because of its MinVersion and/or OnlyBelowVersion parameters.

    +

    Use Flags: dontcopy in the [Files] section to tell Setup to skip the file during the normal file copying stage.

    +

    Use Flags: noencryption in the [Files] section if encryption is enabled and you call the ExtractTemporaryFile function prior to the user entering the correct password.

    +

    When solid compression is enabled, be sure to list your temporary files at (or near) the top of the [Files] section. In order to extract an arbitrary file in a solid-compressed installation, Setup must first decompress all prior files (to a temporary buffer in memory). This can result in a substantial delay if a number of other files are listed above the specified file in the [Files] section.

    +

    ExtractTemporaryFiles
    +DownloadTemporaryFile

    +
    [Files]
    +Source: "Readme.txt"; Flags: dontcopy noencryption
    +
    +[Code]
    +function InitializeSetup: Boolean;
    +var
    +  S: AnsiString;
    +begin
    +  // Show the contents of Readme.txt (non Unicode) in a message box
    +  ExtractTemporaryFile('Readme.txt');
    +  if LoadStringFromFile(ExpandConstant('{tmp}\Readme.txt'), S) then
    +  begin
    +    MsgBox(S, mbInformation, MB_OK);
    +  end;
    +
    +  Result := True;
    +end;
    +
    + + ExtractTemporaryFiles + function ExtractTemporaryFiles(const Pattern: String): Integer; +

    Extracts the files matching the wildcard specified by Pattern from the [Files] section to a temporary directory. Returns the number of extracted files. To find the location of the temporary directory, use ExpandConstant('{tmp}').

    +

    The extracted files are automatically deleted when Setup exits.

    +

    An exception will be raised if no files were extracted successfully, no files were found, or if files were found but none could be processed because of their MinVersion and/or OnlyBelowVersion parameters.

    +

    Use Flags: dontcopy in the [Files] section to tell Setup to skip the file during the normal file copying stage.

    +

    When solid compression is enabled, be sure to list your temporary files at (or near) the top of the [Files] section. In order to extract an arbitrary file in a solid-compressed installation, Setup must first decompress all prior files (to a temporary buffer in memory). This can result in a substantial delay if a number of other files are listed above the specified file in the [Files] section.

    +

    ExtractTemporaryFile

    +
    [Files]
    +Source: "Readme.txt"; Flags: dontcopy
    +Source: "MyProg.exe"; DestDir: "{app}"
    +Source: "MyProg.chm"; DestDir: "{app}"
    +
    +[Code]
    +function InitializeSetup: Boolean;
    +var
    +  S: AnsiString;
    +  ResultCode: Integer;
    +begin
    +  // Show the contents of Readme.txt (non Unicode) in a message box
    +  ExtractTemporaryFiles('{tmp}\Readme.txt');
    +  if LoadStringFromFile(ExpandConstant('{tmp}\Readme.txt'), S) then
    +  begin
    +    MsgBox(S, mbInformation, MB_OK);
    +  end;
    +
    +  // Extract all MyProg files and launch it. Note how {app} is left unexpanded.
    +  ExtractTemporaryFiles('{app}\MyProg.*');
    +  ExecAsOriginalUser(ExpandConstant('{tmp}\')+'{app}\MyProg.exe', '', '',
    +    SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode);
    +
    +  Result := True;
    +end;
    +
    + + DownloadTemporaryFile + function DownloadTemporaryFile(const Url, FileName, RequiredSHA256OfFile: String; const OnDownloadProgress: TOnDownloadProgress): Int64; +

    Downloads the file from the specified URL to a temporary directory using the specified name. To find the location of the temporary directory, use ExpandConstant('{tmp}').

    +

    If RequiredSHA256OfFile is set it will compare this to the SHA-256 of the downloaded file and raise an exception if the hashes don't match.

    +

    An exception will be raised if there was an error. Otherwise, returns the number of bytes downloaded. Returns 0 if RequiredSHA256OfFile is set and the file was already downloaded.

    +

    Supports HTTPS (but not expired or self-signed certificates) and HTTP. Redirects are automatically followed and proxy settings are automatically used. Safe to use from services.

    +

    For basic authentication use SetDownloadCredentials.

    +

    Set OnDownloadProgress to a function to be informed of progress, or nil otherwise.

    +

    TOnDownloadProgress is defined as:

    +

    TOnDownloadProgress = function(const Url, FileName: string; const Progress, ProgressMax: Int64): Boolean;

    +

    ProgressMax will be 0 if the file size is still unknown. Return True to allow the download to continue, False otherwise.

    +

    SetDownloadCredentials
    +DownloadTemporaryFileSize
    +DownloadTemporaryFileDate
    +CreateDownloadPage
    +ExtractTemporaryFile

    +
    +[Code]
    +function OnDownloadProgress(const Url, Filename: string; const Progress, ProgressMax: Int64): Boolean;
    +begin
    +  if ProgressMax <> 0 then
    +    Log(Format('  %d of %d bytes done.', [Progress, ProgressMax]))
    +  else
    +    Log(Format('  %d bytes done.', [Progress]));
    +  Result := True;
    +end;
    +
    +function InitializeSetup: Boolean;
    +begin
    +  try
    +    DownloadTemporaryFile('https://jrsoftware.org/download.php/is.exe?dontcount=1', 'innosetup-latest.exe', '', @OnDownloadProgress);
    +    DownloadTemporaryFile('https://jrsoftware.org/download.php/iscrypt.dll?dontcount=1', 'ISCrypt.dll', '2f6294f9aa09f59a574b5dcd33be54e16b39377984f3d5658cda44950fa0f8fc', @OnDownloadProgress);
    +    Result := True;
    +  except
    +    Log(GetExceptionMessage);
    +    Result := False;
    +  end;
    +end;
    +

    See CodeDownloadFiles.iss for another example which uses CreateDownloadPage instead.

    +
    + + SetDownloadCredentials + procedure SetDownloadCredentials(const User, Pass: String); +

    Sets username and password for all following downloads. Set an empty string to delete the previous setting.

    +

    DownloadTemporaryFile
    DownloadTemporaryFileSize
    DownloadTemporaryFileDate

    +
    + + DownloadTemporaryFileSize + function DownloadTemporaryFileSize(const Url): Int64; +

    Returns the size of the file from the specified URL, without downloading the file. If the server does not provide the size, -1 will be returned.

    +

    An exception will be raised if there was an error.

    +

    See DownloadTemporaryFile for other considerations.

    +
    + + DownloadTemporaryFileDate + function DownloadTemporaryFileDate(const Url): String; +

    Returns the last modified date of the file from the specified URL, without downloading the file. If the server does not provide the last modified file date, '' will be returned.

    +

    An exception will be raised if there was an error.

    +

    See DownloadTemporaryFile for other considerations.

    +
    +
    + + + RenameFile + function RenameFile(const OldName, NewName: string): Boolean; +

    Attempts to change the name of the file or directory specified by OldFile to NewFile. If the operation succeeds, RenameFile returns True. If it cannot rename the file (for example, if a file called NewName already exists), it returns False.

    +
    + + FileCopy + function FileCopy(const ExistingFile, NewFile: String; const FailIfExists: Boolean): Boolean; +

    Copies ExistingFile to NewFile, preserving time stamp and file attributes.
    If FailIfExists is True it will fail if NewFile already exists, otherwise it will overwrite it.
    Returns True if successful, False otherwise.

    +
    + + DeleteFile + function DeleteFile(const FileName: string): Boolean; +

    Erases the file named by FileName from the disk.
    If the file cannot be deleted or does not exist, the function returns False.

    +
    + + DelayDeleteFile + procedure DelayDeleteFile(const Filename: String; const Tries: Integer); +

    Attempts to delete Filename, retrying up to Tries times if the file is in use. It delays 250 msec between tries.

    +
    + + SetNTFSCompression + function SetNTFSCompression(const FileOrDir: String; Compress: Boolean): Boolean; +

    Changes the NTFS compression state of a file or directory. Returns True if successful.

    +

    If a directory is specified, the compression state of any files present in the directory will not be changed.

    +
    +
    + + + LoadStringFromFile + function LoadStringFromFile(const FileName: String; var S: AnsiString): Boolean; +

    Loads the specified binary or non Unicode text file into the specified string. Returns True if successful, False otherwise.

    +

    Use LoadStringFromLockedFile to load even if the file is already opened for writing by another program.

    +

    LoadStringsFromFile

    +
    + + LoadStringFromLockedFile + function LoadStringFromLockedFile(const FileName: String; var S: AnsiString): Boolean; +

    Loads the specified binary or non Unicode text file into the specified string, even if the file is already opened for writing by another program. Returns True if successful, False otherwise.

    +

    LoadStringFromFile

    +
    + + LoadStringsFromFile + function LoadStringsFromFile(const FileName: String; var S: TArrayOfString): Boolean; +

    Loads the specified text file into the specified string array. UTF-8 encoded files with or without a BOM are also supported. Returns True if successful, False otherwise.

    +

    Use LoadStringsFromLockedFile to load even if the file is already opened for writing by another program.

    +

    LoadStringFromFile

    +
    + + LoadStringsFromLockedFile + function LoadStringsFromLockedFile(const FileName: String; var S: TArrayOfString): Boolean; +

    Loads the specified text file into the specified string array, even if the file is already opened for writing by another program. UTF-8 encoded files with or without a BOM are also supported. Returns True if successful, False otherwise.

    +

    LoadStringsFromFile

    +
    + + SaveStringToFile + function SaveStringToFile(const FileName: String; const S: AnsiString; const Append: Boolean): Boolean; +

    Saves the specified string to the specified file. If Append is True and the specified file already exists, it will be appended to instead of overwritten. Returns True if successful, False otherwise.

    +

    This function does not automatically write a line break before or after the string. If Append is True and the existing file did not end in a line break, the function will effectively append to the existing last line. To avoid this you can put line break characters before and/or after your string:

    +

    SaveStringToFile('c:\filename.txt', #13#10 + 'the string' + #13#10, True);

    +
    + + SaveStringsToFile + function SaveStringsToFile(const FileName: String; const S: TArrayOfString; const Append: Boolean): Boolean; +

    Saves the specified string array to the specified file with ASCII encoding. If Append is True and the specified file already exists, it will be appended to instead of overwritten. Returns True if successful, False otherwise.

    +

    SaveStringsToUTF8File
    +SaveStringsToUTF8FileWithoutBOM

    +
    + + SaveStringsToUTF8File + function SaveStringsToUTF8File(const FileName: String; const S: TArrayOfString; const Append: Boolean): Boolean; +

    Saves the specified string array to the specified file with UTF-8 encoding with a BOM. If Append is True and the specified file already exists, it will be appended to instead of overwritten. Returns True if successful, False otherwise.

    +

    SaveStringsToFile
    +SaveStringsToUTF8FileWithoutBOM

    +
    + + SaveStringsToUTF8FileWithoutBOM + function SaveStringsToUTF8FileWithoutBOM(const FileName: String; const S: TArrayOfString; const Append: Boolean): Boolean; +

    Saves the specified string array to the specified file with UTF-8 encoding without a BOM. If Append is True and the specified file already exists, it will be appended to instead of overwritten. Returns True if successful, False otherwise.

    +

    SaveStringsToFile
    +SaveStringsToUTF8File

    +
    +
    + + + CreateDir + function CreateDir(const Dir: string): Boolean; +

    Creates a new directory. The return value is True if a new directory was successfully created, or False if an error occurred.

    +
    + + ForceDirectories + function ForceDirectories(Dir: string): Boolean; +

    Creates all the directories along the specified directory path all at once. If the first directories in the path do exist, but the latter ones don't, ForceDirectories creates just the ones that don't exist. Returns True if successful, False otherwise.

    +
    + + RemoveDir + function RemoveDir(const Dir: string): Boolean; +

    Deletes an existing empty directory. The return value is True if the empty directory was successfully deleted, or False if an error occurred.

    +
    + + DelTree + function DelTree(const Path: String; const IsDir, DeleteFiles, DeleteSubdirsAlso: Boolean): Boolean; +

    Deletes the specified directory if IsDir is set to True, or files/directories matching a wildcard if IsDir is set to False. Returns True if it was able to successfully remove everything.

    +

    If DeleteFiles is set to True, files inside the specified directory will be deleted if IsDir is True, or files matching the specified wildcard (including those with hidden, system, and read-only attributes) will be deleted if IsDir is False.

    +

    If DeleteFiles and DeleteSubdirsAlso are both set to True, subdirectories (and their contents) will be deleted in addition to files.

    +

    This function will remove directories that are reparse points, but it will not recursively delete files/directories inside them.

    +
    begin
    +  // Delete the directory C:\Test and everything inside it
    +  DelTree('C:\Test', True, True, True);
    +
    +  // Delete files matching C:\Test\*.tmp
    +  DelTree('C:\Test\*.tmp', False, True, False);
    +
    +  // Delete all files and directories inside C:\Test
    +  // but leave the directory itself
    +  DelTree('C:\Test\*', False, True, True);
    +end;
    +
    +
    + + + CreateShellLink + function CreateShellLink(const Filename, Description, ShortcutTo, Parameters, WorkingDir, IconFilename: String; const IconIndex, ShowCmd: Integer): String; +

    Creates a shortcut to a file or folder. Returns the resulting filename of the link, which may differ from Filename if it ended up creating a .pif file instead of a .lnk file. On failure, an exception will be raised.

    +

    Parameters:
    +Filename
    Filename of the shortcut file to be created. This should be the full path and must end with ".lnk".
    +Description
    Description of the link. This will be displayed on a supporting OS when the user hovers the mouse over the file or shows the properties.
    +ShortcutTo
    Target file for the shortcut. This must be the full path to the file. Double quotation marks to surround the path will be added automatically.
    +Parameters
    Parameters to pass to the target file of the shortcut. Parameters which may include spaces should have double quote marks surrounding them. e.g. ExpandConstant('"{app}\foo"')
    +WorkingDir
    Working directory for the target file. This should be set to an absolute directory.
    +IconFilename
    Path to file to supply the icon. If this is left as the empty string then the system default icon for the target file will be used.
    +IconIndex
    Zero-based index of the icon.
    +ShowCmd
    One of the SW_* constants

    +

    You will most likely want to remove this shortcut on uninstall. Do this by adding an entry to the UninstallDelete section.

    +
    CreateShellLink(
    +  ExpandConstant('{app}\config\Open licence database.lnk'),
    +  'Opens the licence database in SQLite',
    +  ExpandConstant('{app}\config\sqlite.exe'),
    +  ExpandConstant('"{app}\config\licences.db"'),
    +  ExpandConstant('{app}\config'),
    +  '',
    +  0,
    +  SW_SHOWNORMAL);
    +
    + + UnpinShellLink + function UnpinShellLink(const Filename: String): Boolean; +

    Attempt to unpin the shortcut with the specified filename. Returns True if the shortcut was successfully removed from the list of pinned items and/or the taskbar, or if the shortcut was not pinned at all.

    +
    +
    + + + RegisterServer + procedure RegisterServer(const Is64Bit: Boolean; const Filename: String; const FailCriticalErrors: Boolean); +

    Registers the DLL/OCX with the specified filename. If Is64Bit is True, the DLL/OCX will be loaded as a 64-bit image and registered in a 64-bit process. If FailCriticalErrors is True, the system will not display any critical-error-handler message boxes. Raises an exception if not successful.

    +
    begin
    +  // Register hhctrl.ocx located in the System directory.
    +  RegisterServer(Is64BitInstallMode, ExpandConstant('{sys}\hhctrl.ocx'), False);
    +end;
    +

    Because we specify Is64BitInstallMode in the first parameter, it will register the 64-bit OCX in the 64-bit System directory when Setup is running in 64-bit install mode. Otherwise, it will register the 32-bit OCX in the 32-bit System directory.

    +
    + + UnregisterServer + function UnregisterServer(const Is64Bit: Boolean; const Filename: String; const FailCriticalErrors: Boolean): Boolean; +

    Unregisters the DLL/OCX with the specified filename. If Is64Bit is True, the DLL/OCX will be loaded as a 64-bit image and unregistered in a 64-bit process. If FailCriticalErrors is True, the system will not display any critical-error-handler message boxes. Returns True if successful, False otherwise.

    +
    + + RegisterTypeLibrary + procedure RegisterTypeLibrary(const Is64Bit: Boolean; const Filename: String); +

    Registers the type library with the specified filename. If Is64Bit is True, the type library will be registered in a 64-bit process. Raises an exception if not successful.

    +
    begin
    +  // Register stdole2.tlb located in the System directory.
    +  RegisterTypeLibrary(Is64BitInstallMode, ExpandConstant('{sys}\stdole2.tlb'));
    +end;
    +

    Because we specify Is64BitInstallMode in the first parameter, it will register the 64-bit type library in the 64-bit System directory when Setup is running in 64-bit install mode. Otherwise, it will register the 32-bit type library in the 32-bit System directory.

    +
    + + UnregisterTypeLibrary + function UnregisterTypeLibrary(const Is64Bit: Boolean; const Filename: String): Boolean +

    Unregisters the type library with the specified filename. If Is64Bit is True, the type library will be unregistered in a 64-bit process. Returns True if successful, False otherwise.

    +
    + + IncrementSharedCount + procedure IncrementSharedCount(const Is64Bit: Boolean; const Filename: String; const AlreadyExisted: Boolean); +

    Increments or initializes the reference count for the specified file in the following registry key:

    +

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs

    +

    64-bit versions of Windows have two separate SharedDLLs keys, one for 64-bit files and one for 32-bit files. If Is64Bit is True, the 64-bit SharedDLLs key will be updated, otherwise the 32-bit SharedDLLs key will be updated. The setting of this parameter should correspond to the bitness of the file; for example, if it is a 32-bit DLL located in the 32-bit System directory, you should specify False. You may also specify Is64BitInstallMode in which case it will use the current install mode to determine which key to open.

    +

    Pass True in the AlreadyExisted parameter if the file already exists; in this case the initial reference count for the file will be 2 if the value for the file doesn't already exist in the registry. (This behavior is in line with Microsoft's requirements.)

    +

    An exception will be raised if the registry key cannot be opened for write access.

    +
    + + DecrementSharedCount + function DecrementSharedCount(const Is64Bit: Boolean; const Filename: String): Boolean; +

    Decrements the reference count for the specified file in the following registry key:

    +

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs

    +

    64-bit versions of Windows have two separate SharedDLLs keys, one for 64-bit files and one for 32-bit files. If Is64Bit is True, the 64-bit SharedDLLs key will be updated, otherwise the 32-bit SharedDLLs key will be updated. The setting of this parameter should correspond to the bitness of the file; for example, if it is a 32-bit DLL located in the 32-bit System directory, you should specify False. You may also specify Is64BitInstallMode in which case it will use the current install mode to determine which key to open.

    +

    Returns True if the count reached zero (meaning it's OK to delete the file). Returns False if the new count is greater than zero, or if the value for the file doesn't exist or is in an unrecognizable format.

    +

    An exception will be raised if the registry key cannot be opened for write access.

    +
    + + RestartReplace + procedure RestartReplace(const TempFile, DestFile: String); +

    Renames TempFile to DestFile the next time Windows is started. If DestFile already existed, it will be overwritten. If DestFile is '' then TempFile will be deleted. An exception will be raised upon failure.

    +
    + + UnregisterFont + procedure UnregisterFont(const FontName, FontFilename: String; const PerUserFont: Boolean); +

    Unregisters the font with the specified face and filename.

    +
    + + ModifyPifFile + function ModifyPifFile(const Filename: String; const CloseOnExit: Boolean): Boolean; +

    Changes the "Close on exit" setting of a .pif file. Returns True if it was able to make the change.

    +
    +
    +
    + +

    File Version

    + + + GetVersionNumbers + function GetVersionNumbers(const Filename: String; var VersionMS, VersionLS: Cardinal): Boolean; +

    Gets the version numbers of the specified file. Returns True if successful, False otherwise.

    +

    PackVersionNumbers

    +
    + + GetVersionComponents + function GetVersionComponents(const Filename: String; var Major, Minor, Revision, Build: Word): Boolean; +

    Gets the individual version components of the specified file. Returns True if successful, False otherwise.

    +

    PackVersionComponents

    +
    + + GetVersionNumbersString + function GetVersionNumbersString(const Filename: String; var Version: String): Boolean; +

    Gets the version of the specified file as a string (in "0.0.0.0" format). Returns True if successful, False otherwise.

    +
    + + GetPackedVersion + function GetPackedVersion(const Filename: String; var Version: Int64): Boolean; +

    Gets the packed version of the specified file. Returns True if successful, False otherwise.

    +

    Always use ComparePackedVersion or SamePackedVersion to compare packed versions.

    +

    PackVersionComponents

    +
    +
    + + + PackVersionNumbers + function PackVersionNumbers(const VersionMS, VersionLS: Cardinal): Int64; +

    Packs version numbers into a single value.

    +

    Always use ComparePackedVersion or SamePackedVersion to compare packed versions.

    +

    GetVersionNumbers
    +PackVersionComponents
    +UnpackVersionNumbers

    +
    + + PackVersionComponents + function PackVersionComponents(const Major, Minor, Revision, Build: Word): Int64; +

    Packs individual version components into a single value.

    +

    Always use ComparePackedVersion or SamePackedVersion to compare packed versions.

    +

    GetVersionComponents
    +PackVersionNumbers
    +UnpackVersionComponents

    +
    +
    + + + ComparePackedVersion + function ComparePackedVersion(const Version1, Version2: Int64): Integer; +

    Compares Version1 to Version2. The return value is less than 0 if Version1 is less than Version2, 0 if Version1 equals Version2, or greater than 0 if Version1 is greater than Version2.

    +
    + + SamePackedVersion + function SamePackedVersion(const Version1, Version2: Int64): Boolean; +

    Compares the packed versions Version1 and Version2 and returns True if they are equal.

    +
    +
    + + + UnpackVersionNumbers + procedure UnpackVersionNumbers(const Version: Int64; var VersionMS, VersionLS: Cardinal); +

    Unpacks a packed version into version numbers.

    +

    UnpackVersionComponents
    +PackVersionNumbers

    +
    + + UnpackVersionComponents + procedure UnpackVersionComponents(const Version: Int64; var Major, Minor, Revision, Build: Word); +

    Unpacks a packed version into individual version components.

    +

    UnpackVersionNumbers
    +PackVersionComponents

    +
    +
    + + + VersionToStr + function VersionToStr(const Version: Int64): String; +

    Returns the specified packed version as a string (in "0.0.0.0" format).

    +

    StrToVersion
    +UnpackVersionNumbers
    +UnpackVersionComponents

    +
    + + StrToVersion + function StrToVersion(const Version: String; var Version: Int64): Boolean; +

    Returns the specified string (in "0.0.0.0" format) as a packed version. Returns True if successful, False otherwise.

    +

    VersionToStr
    +PackVersionNumbers
    +PackVersionComponents

    +
    +
    +
    + +

    Registry

    + + + RegKeyExists + function RegKeyExists(const RootKey: Integer; const SubKeyName: String): Boolean; +

    Returns True if the specified registry key exists.

    +
    begin
    +  if RegKeyExists(HKEY_AUTO, 'Software\Jordan Russell\Inno Setup') then
    +  begin
    +    // The key exists
    +  end;
    +end;
    +
    + + RegValueExists + function RegValueExists(const RootKey: Integer; const SubKeyName, ValueName: String): Boolean; +

    Returns True if the specified registry key and value exist.

    +
    begin
    +  if RegValueExists(HKEY_CURRENT_USER, 'Console', 'WindowSize') then
    +  begin
    +    // The value exists
    +  end;
    +end;
    +
    +
    + + + RegGetSubkeyNames + function RegGetSubkeyNames(const RootKey: Integer; const SubKeyName: String; var Names: TArrayOfString): Boolean; +

    Opens the specified registry key and reads the names of its subkeys into the specified string array Names. Returns True if successful, False otherwise.

    +
    var
    +  Names: TArrayOfString;
    +  I: Integer;
    +  S: String;
    +begin
    +  if RegGetSubkeyNames(HKEY_CURRENT_USER, 'Control Panel', Names) then
    +  begin
    +    S := '';
    +    for I := 0 to GetArrayLength(Names)-1 do
    +      S := S + Names[I] + #13#10;
    +    MsgBox('List of subkeys:'#13#10#13#10 + S, mbInformation, MB_OK);
    +  end else
    +  begin
    +    // add any code to handle failure here
    +  end;
    +end;
    +
    + + RegGetValueNames + function RegGetValueNames(const RootKey: Integer; const SubKeyName: String; var Names: TArrayOfString): Boolean; +

    Opens the specified registry key and reads the names of its values into the specified string array Names. Returns True if successful, False otherwise.

    +
    var
    +  Names: TArrayOfString;
    +  I: Integer;
    +  S: String;
    +begin
    +  if RegGetValueNames(HKEY_CURRENT_USER, 'Control Panel\Mouse', Names) then
    +  begin
    +    S := '';
    +    for I := 0 to GetArrayLength(Names)-1 do
    +      S := S + Names[I] + #13#10;
    +    MsgBox('List of values:'#13#10#13#10 + S, mbInformation, MB_OK);
    +  end else
    +  begin
    +    // add any code to handle failure here
    +  end;
    +end;
    +
    +
    + + + RegQueryStringValue + function RegQueryStringValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean; +

    Queries the specified REG_SZ- or REG_EXPAND_SZ-type value, and returns the data in ResultStr. Returns True if successful. When False is returned, ResultStr is unmodified.

    +
    var
    +  Country: String;
    +begin
    +  if RegQueryStringValue(HKEY_CURRENT_USER, 'Control Panel\International',
    +     'sCountry', Country) then
    +  begin
    +    // Successfully read the value
    +    MsgBox('Your country: ' + Country, mbInformation, MB_OK);
    +  end;
    +end;
    +
    + + RegQueryMultiStringValue + function RegQueryMultiStringValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: String): Boolean; +

    Queries the specified REG_MULTI_SZ-type registry value, and returns the data in ResultStr. Returns True if successful. When False is returned, ResultStr is unmodified.

    +

    In a REG_MULTI_SZ-type value, each string is separated by a null character (#0).

    +
    + + RegQueryDWordValue + function RegQueryDWordValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultDWord: Cardinal): Boolean; +

    Queries the specified REG_DWORD-type registry value, and returns the data in ResultDWord. Returns True if successful. When False is returned, ResultDWord is unmodified.

    +
    var
    +  HistoryBufferSize: Cardinal;
    +begin
    +  if RegQueryDWordValue(HKEY_CURRENT_USER, 'Console',
    +     'HistoryBufferSize', HistoryBufferSize) then
    +  begin
    +    // Successfully read the value
    +    MsgBox('Console history buffer size: ' + IntToStr(HistoryBufferSize),
    +      mbInformation, MB_OK);
    +  end;
    +end;
    +
    + + RegQueryBinaryValue + function RegQueryBinaryValue(const RootKey: Integer; const SubKeyName, ValueName: String; var ResultStr: AnsiString): Boolean; +

    Queries the specified registry value, and returns the data in ResultStr. Returns True if successful. When False is returned, ResultStr is unmodified.

    +
    +
    + + + RegWriteStringValue + function RegWriteStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean; +

    Writes the specified REG_SZ-type registry value. Returns True if successful, False otherwise.

    +

    If the value already exists and is of type REG_EXPAND_SZ, the new value will also be of type REG_EXPAND_SZ. Otherwise, a REG_SZ-type value will be created.

    +
    begin
    +  RegWriteStringValue(HKEY_AUTO, 'Software\My Company\My Program',
    +    'Language', ExpandConstant('{language}'));
    +end;
    +
    + + RegWriteExpandStringValue + function RegWriteExpandStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean; +

    Writes the specified REG_EXPAND_SZ-type registry value. Returns True if successful, False otherwise.

    +
    begin
    +  RegWriteStringValue(HKEY_CURRENT_USER, 'Software\My Company\My Program',
    +    'UserName', '%UserName%);
    +end;
    +
    + + RegWriteMultiStringValue + function RegWriteMultiStringValue(const RootKey: Integer; const SubKeyName, ValueName, Data: String): Boolean; +

    Writes the specified REG_MULTI_SZ-type registry value. Returns True if successful, False otherwise.

    +

    In a REG_MULTI_SZ-type value, each string is separated by a null character (#0).

    +
    begin
    +  RegWriteMultiStringValue(HKEY_AUTO, 'Software\My Company\My Program',
    +    'MultiStringTest', 'String1' + #0 + 'String2' + #0 + 'String3');
    +end;
    +
    + + RegWriteDWordValue + function RegWriteDWordValue(const RootKey: Integer; const SubKeyName, ValueName: String; const Data: Cardinal): Boolean; +

    Writes the specified REG_DWORD-type registry value. Returns True if successful, False otherwise.

    +
    begin
    +  RegWriteDWordValue(HKEY_AUTO, 'Software\My Company\My Program',
    +    'ShowToolbar', 1);
    +end;
    +
    + + RegWriteBinaryValue + function RegWriteBinaryValue(const RootKey: Integer; const SubKeyName, ValueName: String; const Data: AnsiString): Boolean; +

    Writes the specified REG_BINARY-type registry value. Returns True if successful, False otherwise.

    +
    begin
    +  RegWriteBinaryValue(HKEY_AUTO, 'Software\My Company\My Program',
    +    'BinaryTest', 'Whatever' + #1#2#3#4);
    +end;
    +
    +
    + + + RegDeleteKeyIncludingSubkeys + function RegDeleteKeyIncludingSubkeys(const RootKey: Integer; const SubkeyName: String): Boolean; +

    Deletes the specified key and all subkeys. Returns True if successful, False otherwise.

    +
    + + RegDeleteKeyIfEmpty + function RegDeleteKeyIfEmpty(const RootKey: Integer; const SubkeyName: String): Boolean; +

    Deletes the specified subkey if it has no subkeys or values. Returns True if successful, False otherwise.

    +
    + + RegDeleteValue + function RegDeleteValue(const RootKey: Integer; const SubKeyName, ValueName: String): Boolean; +

    Deletes the specified value. Returns True if successful, False otherwise.

    +
    +
    +
    + +

    INI File

    + + + IniKeyExists + function IniKeyExists(const Section, Key, Filename: String): Boolean; +

    Returns True if the specified INI key exists.

    +
    + + IsIniSectionEmpty + function IsIniSectionEmpty(const Section, Filename: String): Boolean; +

    Returns True if the specified INI section is empty.

    +
    +
    + + + GetIniBool + function GetIniBool(const Section, Key: String; const Default: Boolean; const Filename: String): Boolean +

    Reads a Boolean from an INI file.

    +
    + + GetIniInt + function GetIniInt(const Section, Key: String; const Default, Min, Max: Longint; const Filename: String): Longint; +

    Reads a Longint from an INI file. If the Longint read is not between Min/Max then it returns Default. If Min=Max then Min/Max are ignored.

    +
    + + GetIniString + function GetIniString(const Section, Key, Default, Filename: String): String; +

    Reads a String from an INI file.

    +
    +
    + + + SetIniBool + function SetIniBool(const Section, Key: String; const Value: Boolean; const Filename: String): Boolean; +

    Writes a Boolean to an INI file.

    +
    + + SetIniInt + function SetIniInt(const Section, Key: String; const Value: Longint; const Filename: String): Boolean; +

    Writes a Longint to an INI file.

    +
    + + SetIniString + function SetIniString(const Section, Key, Value, Filename: String): Boolean; +

    Writes a string to an INI file.

    +
    +
    + + + DeleteIniSection + procedure DeleteIniSection(const Section, Filename: String); +

    Deletes the specified section from an INI file.

    +
    + + DeleteIniEntry + procedure DeleteIniEntry(const Section, Key, Filename: String); +

    Deletes the specified key from an INI file.

    +
    +
    +
    + +

    Custom Setup Wizard Page

    + + + CreateInputQueryPage + function CreateInputQueryPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String): TInputQueryWizardPage; +

    Creates a wizard page containing edit boxes.

    +

    To create edit boxes on the page, call the Add method. Use the Values property to get/set the text of the edit boxes.

    +
    var
    +  Page: TInputQueryWizardPage;
    +  UserName, UserCompany: String;
    +
    +...
    +
    +// Create the page
    +Page := CreateInputQueryPage(wpWelcome,
    +  'Personal Information', 'Who are you?',
    +  'Please specify your name and the company for whom you work, then click Next.');
    +
    +// Add items (False means it's not a password edit)
    +Page.Add('&Name:', False);
    +Page.Add('&Company:', False);
    +
    +// Set initial values (optional)
    +Page.Values[0] := ExpandConstant('{sysuserinfoname}');
    +Page.Values[1] := ExpandConstant('{sysuserinfoorg}');
    +
    +...
    +
    +// Read values into variables
    +UserName := Page.Values[0];
    +UserCompany := Page.Values[1];
    +
    +

    See AllPagesExample.iss for another example.

    +

    TInputQueryWizardPage

    +
    + + CreateInputOptionPage + function CreateInputOptionPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; Exclusive, ListBox: Boolean): TInputOptionWizardPage; +

    Creates a wizard page containing check boxes or radio buttons.

    +

    If Exclusive is True, radio buttons are displayed instead of check boxes, and only one item in the list may be selected at a time. If ListBox is True, the check boxes or radio buttons are placed inside a scrollable list box.

    +

    To create check boxes / radio buttons on the page, call the Add method. Use the Values property to get/set the checked state of items. On pages created with Exclusive=True, you can get/set the index of the one selected item via the SelectedValueIndex property.

    +
    var
    +  Page: TInputOptionWizardPage;
    +  IsRegisteredUser: Boolean;
    +
    +...
    +
    +// Create the page
    +Page := CreateInputOptionPage(wpWelcome,
    +  'License Information', 'Are you a registered user?',
    +  'If you are a registered user, please check the box below, then click Next.',
    +  False, False);
    +
    +// Add items
    +Page.Add('&I am a registered user');
    +
    +// Set initial values (optional)
    +Page.Values[0] := False;
    +
    +...
    +
    +// Read values into variables
    +IsRegisteredUser := Page.Values[0];
    +
    +

    See AllPagesExample.iss for another example.

    +

    TInputOptionWizardPage

    +
    + + CreateInputDirPage + function CreateInputDirPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; AAppendDir: Boolean; ANewFolderName: String): TInputDirWizardPage; +

    Creates a wizard page that contains edit boxes and Browse buttons for selecting directories. If AAppendDir is True, the value of ANewFolderName will be appended onto any folder name the user clicks. If AAppendDir is False and ANewFolderName is not empty, a Make New Folder button will be shown that creates a new folder with the specified default name.

    +

    To create directory selection boxes on the page, call the Add method. Use the Values property to get/set the items' values.

    +
    var
    +  Page: TInputDirWizardPage;
    +  DataDir: String;
    +
    +...
    +
    +// Create the page
    +Page := CreateInputDirPage(wpWelcome,
    +  'Select Personal Data Location', 'Where should personal data files be stored?',
    +  'Personal data files will be stored in the following folder.'#13#10#13#10 +
    +  'To continue, click Next. If you would like to select a different folder, click Browse.',
    +  False, 'New Folder');
    +
    +// Add item (with an empty caption)
    +Page.Add('');
    +
    +// Set initial value (optional)
    +Page.Values[0] := ExpandConstant('{userappdata}\My Company\My Program');
    +
    +...
    +
    +// Read value into variable
    +DataDir := Page.Values[0];
    +
    +

    See AllPagesExample.iss for another example.

    +

    TInputDirWizardPage

    +
    + + CreateInputFilePage + function CreateInputFilePage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String): TInputFileWizardPage; +

    Creates a wizard page that contains edit boxes and Browse buttons for selecting files.

    +

    To create file selection boxes on the page, call the Add method. Use the Values property to get/set the items' values.

    +

    An example Filter: 'Text files (*.txt)|*.txt|All files (*.*)|*.*'

    +
    var
    +  Page: TInputFileWizardPage;
    +  NotepadLocation: String;
    +
    +...
    +
    +// Create the page
    +Page := CreateInputFilePage(wpWelcome,
    +  'Select Notepad Location', 'Where is Notepad located?',
    +  'Select where Notepad is located, then click Next.');
    +
    +// Add item
    +Page.Add('&Location of notepad.exe:',        // caption
    +  'Executable files|*.exe|All files|*.*',    // filters
    +  '.exe');                                   // default extension
    +
    +// Set initial value (optional)
    +Page.Values[0] := ExpandConstant('{win}\notepad.exe');
    +
    +...
    +
    +// Read value into variable
    +NotepadLocation := Page.Values[0];
    +
    +

    See AllPagesExample.iss for another example.

    +

    TInputFileWizardPage

    +
    + + CreateOutputMsgPage + function CreateOutputMsgPage(const AfterID: Integer; const ACaption, ADescription, AMsg: String): TOutputMsgWizardPage; +

    Creates a wizard page containing only static text. The AMsg parameter specifies the text to display.

    +
    var
    +  Page: TOutputMsgWizardPage;
    +
    +...
    +
    +// Create the page
    +Page := CreateOutputMsgPage(wpWelcome,
    +  'Information', 'Please read the following important information before continuing.',
    +  'Blah blah blah.');
    +
    +

    See AllPagesExample.iss for another example.

    +

    TOutputMsgWizardPage

    +
    + + CreateOutputMsgMemoPage + function CreateOutputMsgMemoPage(const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; const AMsg: AnsiString): TOutputMsgMemoWizardPage; +

    Creates a wizard page containing static text as well as a read-only, multi-line edit control, capable of displaying RTF text. The ASubCaption parameter specifies the static text to display. AMsg specifies the text to assign to the edit control.

    +
    var
    +  Page: TOutputMsgMemoWizardPage;
    +
    +...
    +
    +// Create the page
    +Page := CreateOutputMsgMemoPage(wpWelcome,
    +  'Information', 'Please read the following important information before continuing.',
    +  'When you are ready to continue with Setup, click Next.',
    +  'Blah blah blah.');
    +
    +

    See AllPagesExample.iss for another example.

    +

    TOutputMsgMemoWizardPage

    +
    + + CreateOutputProgressPage + function CreateOutputProgressPage(const ACaption, ADescription: String): TOutputProgressWizardPage; +

    Creates a wizard page containing static text as well as a progress bar (which is hidden by default).

    +

    Unlike the other types of wizard pages, progress pages are not displayed as part of the normal page sequence (note that there is no AfterID parameter). A progress page can only be displayed programmatically by calling its Show method.

    +

    Call the Show method to activate and show the page. When you're finished with it, call the Hide method to revert to the previous page.

    +

    Always put the Hide call inside the finally part of a try..finally language construct, as demonstrated in CodeDlg.iss. Not calling Hide will result in the wizard being permanently stuck on the progress page.

    +

    To set the text on the page, call the SetText method. SetText takes two string parameters: use the first to tell the user what you're doing, and the second to display a file or directory name. Either parameter may be blank.

    +

    To show or update the progress bar, call the SetProgress method. SetProgress takes two integer parameters: the first specifies the position of the progress bar (zero-based), and the second specifies the highest possible position. If the second parameter is 0, the progress bar will be hidden.

    +

    See CodeDlg.iss and AllPagesExample.iss example scrips in the "Examples" subdirectory in your Inno Setup directory for examples.

    +

    TOutputProgressWizardPage
    +CreateOutputMarqueeProgressPage

    +
    + + CreateOutputMarqueeProgressPage + function CreateOutputMarqueeProgressPage(const ACaption, ADescription: String): TOutputMarqueeProgressWizardPage; +

    Creates a wizard page containing static text as well as a marquee progress bar.

    +

    See CreateOutputProgressPage for information on how to work with progress pages.

    +

    To animate the progress bar, call the Animate method. Do not call the SetProgress method, it will raise an internal error.

    +

    See AllPagesExample.iss for an example.

    +

    TOutputMarqueeProgressWizardPage

    +
    + + CreateDownloadPage + function CreateDownloadPage(const ACaption, ADescription: String; const OnDownloadProgress: TOnDownloadProgress): TDownloadWizardPage; +

    Creates a wizard page to download files and show progress.

    +

    Set OnDownloadProgress to a function to be informed of progress, or nil otherwise.

    +

    Unlike the other types of wizard pages, progress pages are not displayed as part of the normal page sequence (note that there is no AfterID parameter). A progress page can only be displayed programmatically by calling its Show method.

    +

    Call the Show method to activate and show the page. When you're finished with it, call the Hide method to revert to the previous page.

    +

    Always put the Hide call inside the finally part of a try..finally language construct, as demonstrated in CodeDownloadFiles.iss. Not calling Hide will result in the wizard being permanently stuck on the progress page.

    +

    To add a new file to download, call the Add method. Always call the Clear method before adding the first file.

    +

    To start the download, call the Download method. An exception will be raised if there was an error. Otherwise, Download returns the number of bytes downloaded.

    +

    Set the ShowBaseNameInsteadOfUrl property to True to show the base name of the file which is being downloaded to the user instead of the URL.

    +

    See DownloadTemporaryFile for other considerations and the definition of TOnDownloadProgress.

    +

    See CodeDownloadFiles.iss for an example.

    +

    TDownloadWizardPage
    +DownloadTemporaryFile
    +CreateOutputProgressPage

    +
    + + CreateCustomPage + function CreateCustomPage(const AfterID: Integer; const ACaption, ADescription: String): TWizardPage; +

    Creates a custom wizard page. The page is empty by default; you have to create your own controls afterward and place them on the page (by setting their Parent properties to the Surface property of the TWizardPage instance returned by this function).

    +

    See CodeClasses.iss and AllPagesExample.iss example scripts in the "Examples" subdirectory in your Inno Setup directory for examples.

    +

    TWizardPage

    +
    +
    + + + CreateCustomForm + function CreateCustomForm: TSetupForm; +

    Creates a form. The form is empty by default; you have to create your own controls afterward and place them on the form (by setting their Parent properties to the TSetupForm instance returned by this function).

    +

    You should call this function instead of creating TForm or TSetupForm instances directly. This function automatically initializes the font and other properties of the created form to be like Setup's other dialogs.

    +

    The [LangOptions] section's DialogFontName and DialogFontSize directives determine the font used by the form and, by default, any child controls created on the form.

    +

    See CodeClasses.iss for an example.

    +

    TForm
    +TSetupForm

    +
    +
    + + + PageFromID + function PageFromID(const ID: Integer): TWizardPage; +

    Given a page ID, returns a TWizardPage instance. Call this if, for example, you need to get at the surface of a page and only know its ID.

    +

    An exception will be raised if an invalid page ID is specified.

    +
    var
    +  Page: TWizardPage;
    +begin
    +  Page := PageFromID(wpWelcome);
    +  Page.Surface.Color := clBlue;
    +end;
    +

    TWizardPage

    +
    + + PageIndexFromID + function PageIndexFromID(const ID: Integer): Integer; +

    Given a page ID, returns an position index. Call this if, for example, you want to check whether a page is positioned before a certain other page.

    +
    function ShouldSkipPage(PageID: Integer): Boolean;
    +begin
    +  Result := PageIndexFromID(PageID) < PageIndexFromID(wpReady);
    +end;
    +
    + + ScaleX + function ScaleX(X: Integer): Integer; +

    Takes an X coordinate or width and returns it scaled to fit the size of the current dialog font. If the dialog font is 8-point MS Sans Serif and the user is running Windows in Small Fonts (96 dpi), then X is returned unchanged.

    +
    + + ScaleY + function ScaleY(Y: Integer): Integer; +

    Takes a Y coordinate or height and returns it scaled to fit the size of the current dialog font. If the dialog font is 8-point MS Sans Serif and the user is running Windows in Small Fonts (96 dpi), then Y is returned unchanged.

    +
    + + InitializeBitmapImageFromIcon + function InitializeBitmapImageFromIcon(const BitmapImage: TBitmapImage; const IconFilename: String; const BkColor: TColor; const AscendingTrySizes: TArrayOfInteger): Boolean; +

    Initializes the given bitmap image with an icon from the given icon file using the given background color for transparent parts.

    +

    The bitmap image should be scaled already and the function will load the largest fitting icon which has a size from the given array of sizes. After loading the function will set the size of the bitmap image to the loaded size.

    +

    The array must be sorted already from smallest to highest size.

    +

    Returns True if the icon could be loaded, False otherwise.

    +
    procedure InitializeWizard;
    +var
    +  Page: TWizardPage;
    +  BitmapImage: TBitmapImage;
    +begin
    +  Page := CreateCustomPage(wpWelcome, 'Test', 'Test');
    +
    +  BitmapImage := TBitmapImage.Create(Page);
    +  
    +  with BitmapImage do begin
    +    Width := ScaleX(32);
    +    Height := ScaleY(32);
    +    Parent := Page.Surface;
    +  end;
    +
    +  InitializeBitmapImageFromIcon(BitmapImage, 'MyProg.ico', Page.SurfaceColor, [32, 48, 64]);
    +end;
    +
    +
    +
    + +

    Dialog

    + + + MsgBox + function MsgBox(const Text: String; const Typ: TMsgBoxType; const Buttons: Integer): Integer; +

    Displays a message box. Text specifies the message to display. Typ specifies which icon to display in the message box. Buttons specifies which buttons to include in the message box. Returns an ID* constant indicating the button the user clicked, or 0 if the function fails (which shouldn't happen unless an invalid parameter is specified or system resources are exhausted).

    +

    TMsgBoxType is defined as:

    +

    TMsgBoxType = (mbInformation, mbConfirmation, mbError, mbCriticalError);

    +

    Supported flags for Buttons are:

    +

    MB_OK, MB_OKCANCEL, MB_ABORTRETRYIGNORE, MB_YESNOCANCEL, MB_YESNO, MB_RETRYCANCEL, MB_DEFBUTTON1, MB_DEFBUTTON2, MB_DEFBUTTON3, MB_SETFOREGROUND

    +

    Possible return values are:

    +

    IDOK, IDCANCEL, IDABORT, IDRETRY, IDIGNORE, IDYES, IDNO

    +
    begin
    +  // Display a simple message box with an OK button
    +  MsgBox('Hello.', mbInformation, MB_OK);
    +
    +  // Ask the user a Yes/No question
    +  if MsgBox('Are you sure?', mbConfirmation, MB_YESNO) = IDYES then
    +  begin
    +    // user clicked Yes
    +  end;
    +
    +  // Ask the user a Yes/No question, defaulting to No
    +  if MsgBox('Are you sure?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then
    +  begin
    +    // user clicked Yes
    +  end;
    +end;
    +

    SuppressibleMsgBox
    +TaskDialogMsgBox

    +
    + + SuppressibleMsgBox + function SuppressibleMsgBox(const Text: String; const Typ: TMsgBoxType; const Buttons, Default: Integer): Integer; +

    Displays a suppressible message box. If message boxes are being suppressed (see Setup Command Line Parameters), Default is returned. Otherwise, SuppressibleMsgBox acts the same as the regular MsgBox.

    +
    + + TaskDialogMsgBox + function TaskDialogMsgBox(const Instruction, Text: String; const Typ: TMsgBoxType; const Buttons: Cardinal; const ButtonLabels: TArrayOfString; const ShieldButton: Integer): Integer; +

    Displays a message box using a task dialog:
    +Instruction specifies the instruction to display.
    +Text specifies the message to display.
    +Typ specifies which icon to display in the task dialog. If set to mbConfirmation, no icon will be displayed.
    +Buttons specifies which buttons to include in the task dialog.
    +ButtonLabels specifies which custom button labels to use. If set to an empty array, the system's default button labels will be used. If a label consists of two strings separated by a newline, then the first string specifies the button label and the second string specifies the button note.
    +ShieldButton specifies which button to display a shield icon on. If set to 0, no shield icon will be displayed.

    +

    Returns an ID* constant indicating the button the user clicked, or 0 if the function fails (which shouldn't happen unless an invalid parameter is specified or system resources are exhausted).

    +

    TMsgBoxType is defined as:

    +

    TMsgBoxType = (mbInformation, mbConfirmation, mbError, mbCriticalError);

    +

    Supported flags for Buttons are:

    +

    MB_OK, MB_OKCANCEL, MB_YESNOCANCEL, MB_YESNO, MB_RETRYCANCEL, MB_ABORTRETRYIGNORE

    +

    If MB_ABORTRETRYIGNORE is used, ButtonLabels may not be an empty array and the button labels must be specified in the following special order: Retry, Ignore, Abort.

    +

    Supported values for ShieldButton and possible return values are:

    +

    IDOK, IDCANCEL, IDRETRY, IDYES, IDNO, IDABORT, IDIGNORE

    +
    begin
    +  case TaskDialogMsgBox('Choose A or B',
    +                        'You can choose A or B.',   
    +                        mbInformation,
    +                        MB_YESNOCANCEL, ['I choose &A'#13#10'A will be chosen.', 'I choose &B'#13#10'B will be chosen.'],
    +                        IDYES) of
    +    IDYES: MsgBox('You chose A.', mbInformation, MB_OK);
    +    IDNO: MsgBox('You chose B.', mbInformation, MB_OK);
    +  end;
    +end;
    +

    SuppressibleTaskDialogMsgBox
    +MsgBox

    +
    + + SuppressibleTaskDialogMsgBox + function SuppressibleTaskDialogMsgBox(const Instruction, Text: String; const Typ: TMsgBoxType; const Buttons: Cardinal; const ButtonLabels: TArrayOfString; const ShieldButton: Integer; const Default: Integer): Integer; +

    Displays a suppressible message box using a task dialog. If message boxes are being suppressed (see Setup Command Line Parameters), Default is returned. Otherwise, SuppressibleTaskDialogMsgBox acts the same as the regular TaskDialogMsgBox.

    +
    + + GetOpenFileName + function GetOpenFileName(const Prompt: String; var FileName: String; const InitialDirectory, Filter, DefaultExtension: String): Boolean; +

    Displays a dialog box that enables the user to select an existing file. Returns True if the user selected a file, False otherwise. The name of the selected file is returned in the FileName string.

    +

    An example Filter: 'Text files (*.txt)|*.txt|All files (*.*)|*.*'

    +
    var
    +  FileName: String;
    +begin
    +  // Set the initial filename
    +  FileName := '';
    +  if GetOpenFileName('', FileName, '',
    +     'Text Documents (*.txt)|*.txt|All Files|*.*', 'txt') then
    +  begin
    +    // Successful; user clicked OK
    +    // FileName contains the selected filename
    +  end;
    +end;
    +
    + + GetOpenFileNameMulti + function GetOpenFileNameMulti(const Prompt: String; var FileNameList: TStrings; const InitialDirectory, Filter, DefaultExtension: String): Boolean; +

    Displays a dialog box that enables the user to select one or more existing file(s). Returns True if the user selected a file, False otherwise. The name of the selected file(s) is returned in the FileNameList list.

    +

    An example Filter: 'Text files (*.txt)|*.txt|All files (*.*)|*.*'

    +
    var
    +  FileNameList: TStrings;
    +begin
    +  // Create the list
    +  FileNameList := TStringList.Create;
    +  try
    +    if GetOpenFileNameMulti('', FileNameList, '',
    +       'Text Documents (*.txt)|*.txt|All Files|*.*', 'txt') then
    +    begin
    +      // Successful; user clicked OK
    +      // FileNameList contains the selected filename(s)
    +    end;
    +  finally
    +    FileNameList.Free;
    +  end;
    +end;
    +
    + + GetSaveFileName + function GetSaveFileName(const Prompt: String; var FileName: String; const InitialDirectory, Filter, DefaultExtension: String): Boolean; +

    Displays a dialog box that enables the user to select a new file. Returns True if the user selected a file, False otherwise. The name of the selected file is returned in the FileName string.

    +

    An example Filter: 'Text files (*.txt)|*.txt|All files (*.*)|*.*'

    +
    var
    +  Filename: String;
    +begin
    +  // Set the initial filename
    +  Filename := '';
    +  if GetSaveFileName('', Filename, '',
    +     'Text Documents (*.txt)|*.txt|All Files|*.*', 'txt') then
    +  begin
    +    // Successful; user clicked OK
    +    // Filename contains the selected filename
    +  end;
    +end;
    +
    + + BrowseForFolder + function BrowseForFolder(const Prompt: String; var Directory: String; const NewFolderButton: Boolean): Boolean; +

    Displays a dialog box that enables the user to select a directory. The current value of Directory is used as the initially selected directory. If NewFolderButton is True, a New Folder button will be shown, allowing the user to create new folders. Returns True if the user selected a directory and clicked OK, False otherwise. The selected directory is returned in the Directory string.

    +
    + + ExitSetupMsgBox + function ExitSetupMsgBox: Boolean; +

    Displays the "Exit Setup?" message box, and returns True if the user selects Yes. Does not terminate Setup or Uninstall.

    +
    + + SelectDisk + function SelectDisk(const DiskNumber: Integer; const AFilename: String; var Path: String): Boolean; +

    Displays the "Setup Needs the Next Disk" message box, and returns True if the user enters a path containing the file specified by AFileName and selects OK. The selected path is returned in the Path string. The current value of Path is used as the initially selected path and DiskNumber is used only as information to the user.

    +
    +
    +
    + +

    COM Automation objects support

    + + + CreateOleObject + function CreateOleObject(const ClassName: string): Variant; +

    See the Using COM Automation objects topic.

    +
    + + GetActiveOleObject + function GetActiveOleObject(const ClassName: string): Variant; +

    See the Using COM Automation objects topic.

    +
    + + IDispatchInvoke + function IDispatchInvoke(Self: IDispatch; PropertySet: Boolean; const Name: String; Par: array of Variant): Variant; +

    Use IDispatchInvoke to access a COM Automation property or method whose name is a reserved word.

    +
    var
    +  AObject: Variant;
    +  AType: String;
    +begin
    +  AObject := CreateOleObject('MyObject');
    +  // Set a property named 'Type'
    +  // Cannot use "AObject.Type := 'MyType';" because Type is a reserved word
    +  IDispatchInvoke(AObject, True, 'Type', ['MyType']);
    +  // Get a property or call a method named 'Type'
    +  AType := IDispatchInvoke(AObject, False, 'Type', ['']);
    +end;
    +

    Using COM Automation objects

    +
    + + CreateComObject + function CreateComObject(const ClassID: TGUID): IUnknown; +

    See the Using COM Automation objects topic.

    +
    + + StringToGUID + function StringToGUID(const S: String): TGUID; +

    StringToGUID converts the string representation of a GUID into a 'real' GUID. An exception will be raised upon failure.

    +

    Using COM Automation objects

    +
    + + OleCheck + procedure OleCheck(Result: HResult); +

    Use OleCheck to wrap any IUnknown based COM methods you call, so that if that method fails, an exception will be raised.

    +

    Using COM Automation objects

    +
    + + CoFreeUnusedLibraries + procedure CoFreeUnusedLibraries; +

    See the Using COM Automation objects topic.

    +
    +
    +
    + +

    Setup Logging

    + + + Log + procedure Log(const S: String); +

    Logs the specified string in Setup's or Uninstall's log file and/or in the Compiler IDE's "Debug Output" view.

    +

    Calls to this function are ignored if logging is not enabled (via the /LOG command line parameter or the SetupLogging [Setup] section directive or the UninstallLogging [Setup] section directive or debugging from the Compiler IDE).

    +
    + + ExecAndLogOutput + function ExecAndLogOutput(const Filename, Params, WorkingDir: String; const ShowCmd: Integer; const Wait: TExecWait; var ResultCode: Integer; const OnLog: TOnLog): Boolean; +

    Identical to Exec except:

    +

    Console programs are always hidden and the ShowCmd parameter only affects GUI programs, so always using SW_SHOWNORMAL instead of SW_HIDE is recommended.

    +

    If OnLog is set to nil then the output of the executed executable or batch file is logged in Setup's or Uninstall's log file and/or in the Compiler IDE's "Debug Output" view.

    +

    If OnLog is not set to nil then the output is sent to the specified function, line by line.

    +

    Parameter Wait must always be set to ewWaitUntilTerminated when calling this function.

    +

    TOnLog is defined as:

    +

    TOnLog = procedure(const S: String; const Error, FirstLine: Boolean);

    +
    var
    +  Line: String;
    +
    +procedure ExecAndGetFirstLineLog(const S: String; const Error, FirstLine: Boolean);
    +begin
    +  if not Error and (Line = '') and (Trim(S) <> '') then
    +    Line := S; { First non-empty line found, store it }
    +  if FirstLine then
    +    Log('Output:');
    +  Log(S);
    +end;
    +
    +function ExecAndGetFirstLine(const Filename, Params, WorkingDir: String; var ResultCode: Integer): String;
    +begin
    +  Line := '';
    +  ExecAndLogOutput(Filename, Params, WorkingDir, SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode, @ExecAndGetFirstLineLog);
    +  Result := Line;
    +end;
    +

    Exec

    +
    +
    +
    + +

    Other

    + + + Sleep + procedure Sleep(const Milliseconds: LongInt); +

    Suspends the execution of Setup or Uninstall for a specified interval.

    +
    + + Random + function Random(const Range: Integer): Integer; +

    Returns a random number within the range 0 <= X < Range.

    +
    + + Beep + procedure Beep; +

    Beeps.

    +
    Beep; //Beeps
    +
    + + Set8087CW + procedure Set8087CW(NewCW: Word); +

    Sets the FPU control word.

    +
    Set8087CW($133f); //Disables all fpu exceptions }
    +
    + + Get8087CW + function Get8087CW: Word; +

    Returns the current value of the FPU control word.

    +
    +
    + + + BringToFrontAndRestore + procedure BringToFrontAndRestore; +

    Makes sure that Setup or Uninstall is visible and the foreground window.

    +
    +
    +
    + +

    Deprecated

    + + + LoadDLL + function LoadDLL(const DLLName: String; var ErrorCode: Integer): Longint; +

    Loads the specified DLL. Returns the DLL handle if the DLL was loaded successfully, zero otherwise. If zero is returned then ErrorCode specifies the error that occurred. Use SysErrorMessage(ErrorCode) to get a description of the error.

    +

    This function is deprecated. See the Using DLLs topic.

    +

    Refer to the system error codes on MSDN.

    +
    + + CallDLLProc + function CallDLLProc(const DLLHandle: Longint; const ProcName: String; const Param1, Param2: Longint; var Result: Longint): Boolean; +

    Calls the specified function in a DLL specified using the DLL handle returned by LoadDLL. Returns True is the procedure was called successfully, False otherwise.
    The function must use the standard calling convention, accept two 4 byte integer parameters and return a 4 byte integer result.

    +

    This function is deprecated. See the Using DLLs topic.

    +
    + + FreeDLL + function FreeDLL(const DLLHandle: Longint): Boolean; +

    Unloads a DLL specified using the DLL handle returned by LoadDLL.

    +

    This function is deprecated. See the Using DLLs topic.

    +
    +
    + + + CastStringToInteger + function CastStringToInteger(var S: String): Longint; +

    Casts a string to an integer so that a string can be passed to a DLL using CallDllProc.

    +

    This function is deprecated. See the Using DLLs topic.

    +
    + + CastIntegerToString + function CastIntegerToString(const L: Longint): String; +

    Casts an integer to a string so that a string can be received from a DLL using CallDllProc.

    +

    This function is deprecated. See the Using DLLs topic.

    +
    +
    +
    +
    + + + CurStep values + ssInstall, ssPostInstall, ssDone + + + CurPage values + wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished + + + Exec and ShellExec - ShowCmd values + SW_SHOW, SW_SHOWNORMAL, SW_SHOWMAXIMIZED, SW_SHOWMINIMIZED, SW_SHOWMINNOACTIVE, SW_HIDE + + + TMsgBoxType + mbInformation, mbConfirmation, mbError, mbCriticalError + + + MsgBox - Buttons flags + MB_OK, MB_OKCANCEL, MB_ABORTRETRYIGNORE, MB_YESNOCANCEL, MB_YESNO, MB_RETRYCANCEL, MB_DEFBUTTON1, MB_DEFBUTTON2, MB_DEFBUTTON3, MB_SETFOREGROUND + + + MsgBox - return values + IDOK, IDCANCEL, IDABORT, IDRETRY, IDIGNORE, IDYES, IDNO + + + Reg* - RootKey values (also see the [Registry] section documentation) + HKEY_AUTO, HKEY_AUTO_32, HKEY_AUTO_64,
    HKEY_CLASSES_ROOT, HKEY_CLASSES_ROOT_32, HKEY_CLASSES_ROOT_64,
    HKEY_CURRENT_USER, HKEY_CURRENT_USER_32, HKEY_CURRENT_USER_64,
    HKEY_LOCAL_MACHINE, HKEY_LOCAL_MACHINE_32, HKEY_LOCAL_MACHINE_64,
    HKEY_USERS, HKEY_USERS_32, HKEY_USERS_64,
    HKEY_PERFORMANCE_DATA,
    HKEY_CURRENT_CONFIG, HKEY_CURRENT_CONFIG_32, HKEY_CURRENT_CONFIG_64,
    HKEY_DYN_DATA,
    HKA, HKA32, HKA64, HKCR, HKCR32, HKCR64, HKCU, HKCU32, HKCU64, HKLM, HKLM32, HKLM64, HKU, HKU32, HKU64, HKCC, HKCC32, HKCC64
    +
    + + TSetupMessageID + Use 'msg' + the message name. Example: SetupMessage(msgSetupAppTitle) + + + TShouldProcessEntryResult + srNo, srYes, srUnknown + +
    +
    diff --git a/ISHelp/isxfunc.xsl b/ISHelp/isxfunc.xsl new file mode 100644 index 00000000..98767542 --- /dev/null +++ b/ISHelp/isxfunc.xsl @@ -0,0 +1,157 @@ + + + + + + + + + Inno Setup + Copyright (C) 1997-2020 Jordan Russell + Portions Copyright (C) 2000-2020 Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + This file is automatically generated. Do not edit. + + + + +Topics + + + + + + +

    The Pascal script can call several built-in support functions.

    + +Support functions + +

    Here's the list of support functions that can be called from within the Pascal script.

    + + + + + +Constants + +

    Here's the list of constants used by these functions:

    + + + + + +
    + + + + + +
    + +
    + + +

    + functions
    + + + +

    +
    + + +
    + + + +
    + + +
    +
    + + +

    +
    + +

    +
    + + + + + + +

    Prototype:

    +

    + +

    Description:

    + + + + + +

    not yet available

    +
    +
    + + + +

    Remarks:

    + +
    +
    + + + +

    Example:

    + +
    +
    + + + +

    See also:

    + +
    +
    + +
    +
    + + +

    + + +
    + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + +
    \ No newline at end of file diff --git a/Projects/.gitignore b/Projects/.gitignore new file mode 100644 index 00000000..46245fd1 --- /dev/null +++ b/Projects/.gitignore @@ -0,0 +1,6 @@ +*.dsk +*.res +*.dproj.local +*.groupproj.local +*.identcache +*.tvsconfig \ No newline at end of file diff --git a/Projects/Bin/.gitignore b/Projects/Bin/.gitignore new file mode 100644 index 00000000..c25b9e79 --- /dev/null +++ b/Projects/Bin/.gitignore @@ -0,0 +1,9 @@ +*.dcu +*.dll +*.exe +*.e32 +setup-*.bin +Default.isl +ISPPBuiltins.iss +*.chm +*.chw \ No newline at end of file diff --git a/Projects/Bin/Debug.iss b/Projects/Bin/Debug.iss new file mode 100644 index 00000000..ba17dc09 --- /dev/null +++ b/Projects/Bin/Debug.iss @@ -0,0 +1,32 @@ +; -- Debug.iss -- +; Opened when you run the Compil32.dproj project in Debug mode from the Delphi IDE +; Use it to test the compiler or Setup or the uninstaller + +#pragma message "ɯɐɹƃoɹd ʎɯ" + +#include "Debug2.iss" + +[Setup] +AppName=ɯɐɹƃoɹd ʎɯ +AppVerName=My Program version 1.5 +DefaultDirName={autopf}\My Program +UseSetupLdr=0 +OutputDir=. +AppVersion=1.2.3 +OutputBaseFilename=Setup +PrivilegesRequired=lowest + +[Languages] +Name: en; MessagesFile: "compiler:Default.isl" +Name: nl; MessagesFile: "..\..\Files\Languages\Dutch.isl" + +[Files] +Source: "..\..\Examples\MyProg.exe"; DestDir: "{app}" +Source: "..\..\Examples\MyProg.chm"; DestDir: "{app}" +Source: "..\..\Examples\Readme.txt"; DestDir: "{app}"; Flags: isreadme + +[Code] +function InitializeSetup: Boolean; +begin + Result := True; +end; \ No newline at end of file diff --git a/Projects/Bin/Debug2.iss b/Projects/Bin/Debug2.iss new file mode 100644 index 00000000..f38580bd --- /dev/null +++ b/Projects/Bin/Debug2.iss @@ -0,0 +1,8 @@ +; -- Debug2.iss -- +; Included by Debug.iss +; Use it to test the compiler or Compiler IDE's support for include files + +[Code] +procedure InitializeWizard; +begin +end; \ No newline at end of file diff --git a/Projects/Bin/synch-isfiles.bat b/Projects/Bin/synch-isfiles.bat new file mode 100644 index 00000000..5bc0fffb --- /dev/null +++ b/Projects/Bin/synch-isfiles.bat @@ -0,0 +1,11 @@ +copy ..\..\Files\Default.isl +copy ..\..\Files\ISPPBuiltins.iss +copy ..\..\Files\is*zip.dll +copy ..\..\Files\is*zlib.dll +copy ..\..\Files\isscint.dll +copy ..\..\Files\islzma.dll +copy ..\..\Files\islzma*.exe +copy ..\..\Files\ISetup.chm +copy ..\..\Files\ISPP.chm + +pause \ No newline at end of file diff --git a/Projects/Compil32.dpr b/Projects/Compil32.dpr new file mode 100644 index 00000000..9652ae00 --- /dev/null +++ b/Projects/Compil32.dpr @@ -0,0 +1,216 @@ +program Compil32; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + Compiler +} + +uses + SafeDLLPath in 'Src\SafeDLLPath.pas', + Windows, + SysUtils, + Forms, + PathFunc in '..\Components\PathFunc.pas', + CompForm in 'Src\CompForm.pas' {CompileForm}, + CmnFunc in 'Src\CmnFunc.pas', + CmnFunc2 in 'Src\CmnFunc2.pas', + CompFunc in 'Src\CompFunc.pas', + CompMsgs in 'Src\CompMsgs.pas', + CompInt in 'Src\CompInt.pas', + CompOptions in 'Src\CompOptions.pas' {OptionsForm}, + CompStartup in 'Src\CompStartup.pas' {StartupForm}, + CompWizard in 'Src\CompWizard.pas' {WizardForm}, + CompWizardFile in 'Src\CompWizardFile.pas' {WizardFileForm}, + CompFileAssoc in 'Src\CompFileAssoc.pas', + TmSchema in '..\Components\TmSchema.pas', + NewUxTheme in '..\Components\NewUxTheme.pas', + DebugStruct in 'Src\DebugStruct.pas', + BrowseFunc in 'Src\BrowseFunc.pas', + CompSignTools in 'Src\CompSignTools.pas' {SignToolsForm}, + CompInputQueryCombo in 'Src\CompInputQueryCombo.pas', + ScintInt in '..\Components\ScintInt.pas', + ScintEdit in '..\Components\ScintEdit.pas', + ScintStylerInnoSetup in '..\Components\ScintStylerInnoSetup.pas', + ModernColors in '..\Components\ModernColors.pas', + CompMsgBoxDesigner in 'Src\CompMsgBoxDesigner.pas' {MsgBoxDesignerForm}, + CompScintEdit in 'Src\CompScintEdit.pas', + CompFilesDesigner in 'Src\CompFilesDesigner.pas' {FilesDesignerForm}, + CompWizardFilesHelper in 'Src\CompWizardFilesHelper.pas', + NewTabSet in '..\Components\NewTabSet.pas', + NewStaticText in '..\Components\NewStaticText.pas', + BidiUtils in '..\Components\BidiUtils.pas', + DropListBox in '..\Components\DropListBox.pas', + NewCheckListBox in '..\Components\NewCheckListBox.pas', + NewNotebook in '..\Components\NewNotebook.pas', + TaskbarProgressFunc in 'Src\TaskbarProgressFunc.pas', + HtmlHelpFunc in 'Src\HtmlHelpFunc.pas', + UIStateForm in 'Src\UIStateForm.pas', + LangOptionsSectionDirectives in 'Src\LangOptionsSectionDirectives.pas', + MsgIDs in 'Src\MsgIDs.pas', + SetupSectionDirectives in 'Src\SetupSectionDirectives.pas', + CompTypes in 'Src\CompTypes.pas', + FileClass in 'Src\FileClass.pas', + Int64Em in 'Src\Int64Em.pas', + Compress in 'Src\Compress.pas', + TaskDialog in 'Src\TaskDialog.pas', + CompRegistryDesigner in 'Src\CompRegistryDesigner.pas' {RegistryDesignerForm}, + CompWizardRegistryHelper in 'Src\CompWizardRegistryHelper.pas', + MD5 in 'Src\MD5.pas'; + +{$SetPEFlags IMAGE_FILE_RELOCS_STRIPPED} +{$SETPEOSVERSION 6.1} +{$SETPESUBSYSVERSION 6.1} +{$WEAKLINKRTTI ON} + +{$R Res\Compil32.docicon.res} +{$R Res\Compil32.manifest.res} +{$R Res\Compil32.versionandicon.res} + +procedure SetAppUserModelID; +var + Func: function(AppID: PWideChar): HRESULT; stdcall; +begin + { For the IDE to be pinnable and show a Jump List, it is necessary to + explicitly assign an AppUserModelID because by default the taskbar excludes + applications that have "Setup" in their name. } + Func := GetProcAddress(GetModuleHandle('shell32.dll'), + 'SetCurrentProcessExplicitAppUserModelID'); + if Assigned(Func) then + Func('JR.InnoSetup.IDE.6'); +end; + +procedure RegisterApplicationRestart; +const + RESTART_MAX_CMD_LINE = 1024; + RESTART_NO_CRASH = $1; + RESTART_NO_HANG = $2; + RESTART_NO_PATCH = $4; + RESTART_NO_REBOOT = $8; +var + Func: function(pwzCommandLine: PWideChar; dwFlags: DWORD): HRESULT; stdcall; + CommandLine: WideString; +begin + { Allow Restart Manager to restart us after updates. } + + Func := GetProcAddress(GetModuleHandle('kernel32.dll'), + 'RegisterApplicationRestart'); + if Assigned(Func) then begin + { Rebuild the command line, can't just use an exact copy since it might contain + relative path names but Restart Manager doesn't restore the working + directory. } + if CommandLineWizard then + CommandLine := '/WIZARD' + else begin + CommandLine := CommandLineFilename; + if CommandLine <> '' then + CommandLine := '"' + CommandLine + '"'; + if CommandLineCompile then + CommandLine := '/CC ' + CommandLine; + end; + + if Length(CommandLine) > RESTART_MAX_CMD_LINE then + CommandLine := ''; + + Func(PWideChar(CommandLine), RESTART_NO_CRASH or RESTART_NO_HANG or RESTART_NO_REBOOT); + end; +end; + +procedure CreateMutexes; +{ Creates the two mutexes used by the Inno Setup's own installer/uninstaller to + see if the compiler is still running. + One of the mutexes is created in the global name space (which makes it + possible to access the mutex across user sessions in Windows XP); the other + is created in the session name space (because versions of Windows NT prior + to 4.0 TSE don't have a global name space and don't support the 'Global\' + prefix). } +const + MutexName = 'InnoSetupCompilerAppMutex'; +begin + CreateMutex(MutexName); + CreateMutex('Global\' + MutexName); { don't localize } +end; + +var + InitialCurDir: String; + +procedure CheckParams; + + procedure Error; + begin + MessageBox(0, SCompilerCommandLineHelp3, SCompilerFormCaption, + MB_OK or MB_ICONEXCLAMATION); + Halt(1); + end; + +var + P, I: Integer; + S: String; + Dummy: Boolean; +begin + P := NewParamCount; + I := 1; + while I <= P do begin + S := NewParamStr(I); + if CompareText(S, '/CC') = 0 then + CommandLineCompile := True + else if CompareText(S, '/WIZARD') = 0 then begin + if I = P then + Error; + CommandLineWizard := True; + CommandLineWizardName := NewParamStr(I+1); + Inc(I); + end + else if CompareText(S, '/ASSOC') = 0 then begin + try + RegisterISSFileAssociation(False, Dummy); + except + MessageBox(0, PChar(GetExceptMessage), nil, MB_OK or MB_ICONSTOP); + Halt(2); + end; + Halt; + end + else if CompareText(S, '/UNASSOC') = 0 then begin + try + UnregisterISSFileAssociation; + except + MessageBox(0, PChar(GetExceptMessage), nil, MB_OK or MB_ICONSTOP); + Halt(2); + end; + Halt; + end + else if (S = '') or (S[1] = '/') or (CommandLineFilename <> '') then + Error + else + CommandLineFilename := PathExpand(PathCombine(InitialCurDir, S)); + Inc(I); + end; + if (CommandLineCompile or CommandLineWizard) and (CommandLineFilename = '') then + Error; +end; + +begin + InitialCurDir := GetCurrentDir; + if not SetCurrentDir(PathExtractDir(NewParamStr(0))) then + SetCurrentDir(GetSystemDir); + + SetAppUserModelID; + CreateMutexes; + Application.Initialize; + CheckParams; + RegisterApplicationRestart; + + { The 'with' is so that the Delphi IDE doesn't mess with these } + with Application do begin + if CommandLineWizard then + Title := CommandLineWizardName + else + Title := SCompilerFormCaption; + end; + + Application.CreateForm(TCompileForm, CompileForm); + Application.Run; +end. diff --git a/Projects/Compil32.dproj b/Projects/Compil32.dproj new file mode 100644 index 00000000..0ae4f45b --- /dev/null +++ b/Projects/Compil32.dproj @@ -0,0 +1,174 @@ + + + {AA47247E-6E7B-4A22-8740-FB9041C2F93B} + Compil32.dpr + True + Debug + 1 + Application + VCL + 19.5 + Win32 + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + 00400000 + false + 1 + 1 + ..\Components\UniPs\Source;ISPP;$(DCC_UnitSearchPath) + VCL30;vclx30;VclSmp30;vcldb30;vcldbx30;$(DCC_UsePackage) + PS_MINIVCL;PS_NOGRAPHCONST;PS_PANSICHAR;PS_NOINTERFACEGUIDBRACKETS;$(DCC_Define) + Compil32 + true + 0 + 1033 + CompanyName=Jordan Russell;FileDescription=Inno Setup Compiler;FileVersion=0.0.0.0;InternalName=;LegalCopyright=Copyright (C) 1997-2008 Jordan Russell. Portions Copyright (C) 2000-2008 Martijn Laan.;LegalTrademarks=;OriginalFilename=;ProductName=Inno Setup;ProductVersion=0.0.0.0;Comments=Inno Setup home page: http://www.innosetup.com + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + false + false + false + false + false + false + false + Dcu\$(MainSource) + + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + 1033 + (None) + + + RELEASE;$(DCC_Define) + 0 + false + ..\Files + + + DEBUG;$(DCC_Define) + false + true + Bin + Debug.iss + + + + MainSource + + + + +
    CompileForm
    +
    + + + + + + +
    OptionsForm
    +
    + +
    StartupForm
    +
    + +
    WizardForm
    +
    + +
    WizardFileForm
    +
    + + + + + + +
    SignToolsForm
    +
    + + + + + + +
    MsgBoxDesignerForm
    +
    + + +
    FilesDesignerForm
    +
    + + + + + + + + + + + + + + + + + + + +
    RegistryDesignerForm
    +
    + + + + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + +
    + + Delphi.Personality.12 + + + + + Compil32.dpr + + + + True + False + + + 12 + + + +
    diff --git a/Projects/Dcu/.gitignore b/Projects/Dcu/.gitignore new file mode 100644 index 00000000..45239335 --- /dev/null +++ b/Projects/Dcu/.gitignore @@ -0,0 +1 @@ +*.dcu \ No newline at end of file diff --git a/Projects/Helper/Helper.c b/Projects/Helper/Helper.c new file mode 100644 index 00000000..2cdd8a4a --- /dev/null +++ b/Projects/Helper/Helper.c @@ -0,0 +1,448 @@ +/* + Inno Setup + Copyright (C) 1997-2008 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + 64-bit helper process + + Compiled on Visual Studio 2005 SP1 + Tested on x64 and IA-64 architectures (Athlon 64 and Merced specifically). + + $jrsoftware: issrc/Projects/Helper/Helper.c,v 1.8 2008/10/16 19:27:24 jr Exp $ +*/ + +#define _WIN32_IE 0x0600 +#include +#include +#include +#include + +#ifndef UNICODE +#error UNICODE isn't defined +#endif + +// As of Inno Setup 5.1.11, the helper is no longer used to register +// DLLs, so avoid linking in support for REQUEST_REGISTER_SERVER. +#undef IMPLEMENT_REGISTER_SERVER + +#define HELPER_VERSION 105 + +// Request commands +#define REQUEST_PING 1 +#define REQUEST_GRANT_PERMISSION 2 +#ifdef IMPLEMENT_REGISTER_SERVER +#define REQUEST_REGISTER_SERVER 3 +#endif +#define REQUEST_REGISTER_TYPE_LIBRARY 4 + +// These must be kept in synch with Struct.pas: +typedef struct { + SID_IDENTIFIER_AUTHORITY Authority; + BYTE SubAuthCount; + DWORD SubAuth[2]; +} TGrantPermissionSid; +typedef struct { + TGrantPermissionSid Sid; + DWORD AccessMask; +} TGrantPermissionEntry; + +// This value must be kept in synch with Struct.pas: +#define MAX_GRANT_PERMISSION_ENTRIES 32 + +// These must be kept in synch with Helper.pas: +typedef struct { + DWORD ObjectType; + DWORD EntryCount; + DWORD Inheritance; + WCHAR ObjectName[4096]; + TGrantPermissionEntry Entries[MAX_GRANT_PERMISSION_ENTRIES]; +} REQUEST_GRANT_PERMISSION_DATA; + +typedef struct { + BOOL Unregister; + BOOL FailCriticalErrors; + WCHAR Filename[4096]; + WCHAR Directory[4096]; +} REQUEST_REGISTER_SERVER_DATA; + +typedef struct { + BOOL Unregister; + WCHAR Filename[4096]; +} REQUEST_REGISTER_TYPE_LIBRARY_DATA; + +typedef struct { + DWORD SequenceNumber; + DWORD Command; + DWORD DataSize; + union { + BYTE Data[65536]; + REQUEST_GRANT_PERMISSION_DATA GrantPermissionData; + REQUEST_REGISTER_SERVER_DATA RegisterServerData; + REQUEST_REGISTER_TYPE_LIBRARY_DATA RegisterTypeLibraryData; + }; +} REQUEST_DATA; + +typedef struct { + DWORD SequenceNumber; + DWORD StatusCode; + DWORD ErrorCode; + DWORD DataSize; + BYTE Data[65536]; +} RESPONSE_DATA; + +static TCHAR SystemDir[MAX_PATH+1]; + +static DWORD GrantPermission(const DWORD ObjectType, const LPWSTR ObjectName, + TGrantPermissionEntry *Entries, const DWORD EntryCount, + const DWORD Inheritance) +{ + DWORD ErrorCode; + PSECURITY_DESCRIPTOR SD; + PACL Dacl, NewDacl; + EXPLICIT_ACCESSW ExplicitAccess[MAX_GRANT_PERMISSION_ENTRIES]; + DWORD I; + + // Note: SecureZeroMemory is used because memset/ZeroMemory aren't available + SecureZeroMemory(&ExplicitAccess, sizeof(ExplicitAccess)); + + if (EntryCount > ARRAYSIZE(ExplicitAccess)) { + return ERROR_INVALID_PARAMETER; + } + + ErrorCode = GetNamedSecurityInfoW(ObjectName, ObjectType, + DACL_SECURITY_INFORMATION, NULL, NULL, &Dacl, NULL, &SD); + if (ErrorCode != ERROR_SUCCESS) { + return ErrorCode; + } + + // From here on, use "goto out" instead of "return" + + for (I = 0; I < EntryCount; I++) { + TGrantPermissionEntry *E = &Entries[I]; + PSID Sid; + + if (!AllocateAndInitializeSid(&E->Sid.Authority, E->Sid.SubAuthCount, + E->Sid.SubAuth[0], E->Sid.SubAuth[1], 0, 0, 0, 0, 0, 0, &Sid)) { + ErrorCode = GetLastError(); + if (ErrorCode == 0) ErrorCode = ERROR_INVALID_PARAMETER; // just in case + goto out; + } + ExplicitAccess[I].grfAccessPermissions = E->AccessMask; + ExplicitAccess[I].grfAccessMode = GRANT_ACCESS; + ExplicitAccess[I].grfInheritance = Inheritance; + ExplicitAccess[I].Trustee.TrusteeForm = TRUSTEE_IS_SID; + ExplicitAccess[I].Trustee.TrusteeType = TRUSTEE_IS_UNKNOWN; + ExplicitAccess[I].Trustee.ptstrName = Sid; + } + + ErrorCode = SetEntriesInAclW(EntryCount, ExplicitAccess, Dacl, &NewDacl); + if (ErrorCode == ERROR_SUCCESS) { + ErrorCode = SetNamedSecurityInfoW(ObjectName, ObjectType, + DACL_SECURITY_INFORMATION, NULL, NULL, NewDacl, NULL); + LocalFree(NewDacl); + } + +out: + for (I = 0; I < EntryCount; I++) { + PSID Sid = ExplicitAccess[I].Trustee.ptstrName; + if (Sid) FreeSid(Sid); + } + LocalFree(SD); + + return ErrorCode; +} + +#ifdef IMPLEMENT_REGISTER_SERVER +static DWORD RegisterServer(const BOOL Unregister, const LPWSTR Filename, + const LPWSTR Directory, const BOOL FailCriticalErrors, DWORD *ErrorCode) +{ + DWORD retval = 0; + HRESULT OleInitResult; + UINT SaveErrorMode; + HANDLE LibHandle; + + // Initialize OLE. Regsvr32 does this. + OleInitResult = OleInitialize(NULL); + if (FAILED(OleInitResult)) { + *ErrorCode = OleInitResult; + return 4; + } + + SaveErrorMode = SetErrorMode(FailCriticalErrors ? + SEM_NOOPENFILEERRORBOX | SEM_FAILCRITICALERRORS : + SEM_NOOPENFILEERRORBOX); + + // If no directory was supplied, we use the system directory. + // Relative paths are assumed to be relative to the system directory. + SetCurrentDirectory(SystemDir); + if (*Directory) { + SetCurrentDirectoryW(Directory); + } + + LibHandle = LoadLibraryExW(Filename, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); + if (LibHandle) { + typedef HRESULT (STDAPICALLTYPE *DLLREGISTERSERVER)(void); + DLLREGISTERSERVER RegisterServerProc; + + RegisterServerProc = (DLLREGISTERSERVER)GetProcAddress(LibHandle, + Unregister ? "DllUnregisterServer" : "DllRegisterServer"); + if (RegisterServerProc) { + *ErrorCode = (*RegisterServerProc)(); + retval = 3; + } else { + *ErrorCode = GetLastError(); + retval = 2; + } + + FreeLibrary(LibHandle); + } else { + *ErrorCode = GetLastError(); + retval = 1; + } + + // Revert the current directory and error mode changes + SetCurrentDirectory(SystemDir); + SetErrorMode(SaveErrorMode); + + OleUninitialize(); + + return retval; +} +#endif + +static DWORD RegisterTypeLibrary(const BOOL Unregister, + const LPWSTR Filename, DWORD *ErrorCode) +{ + DWORD retval; + HRESULT hr; + ITypeLib *TypeLib; + TLIBATTR *LibAttr; + + retval = 1; + hr = LoadTypeLib(Filename, &TypeLib); + if (hr == S_OK) { + if (!Unregister) { + retval = 2; + hr = RegisterTypeLib(TypeLib, Filename, NULL); + } else { + retval = 3; + hr = TypeLib->lpVtbl->GetLibAttr(TypeLib, &LibAttr); + if (hr == S_OK) { + retval = 4; + hr = UnRegisterTypeLib(&LibAttr->guid, LibAttr->wMajorVerNum, + LibAttr->wMinorVerNum, LibAttr->lcid, LibAttr->syskind); + TypeLib->lpVtbl->ReleaseTLibAttr(TypeLib, LibAttr); + } + } + TypeLib->lpVtbl->Release(TypeLib); + } + + *ErrorCode = hr; + return retval; +} + +static void ProcessRequest(REQUEST_DATA *request, RESPONSE_DATA *response) +{ + response->SequenceNumber = request->SequenceNumber; + response->StatusCode = 0; // 0 means "didn't execute command" + response->ErrorCode = 0; + response->DataSize = 0; + + switch (request->Command) { + case REQUEST_PING: + response->StatusCode = 1; + break; + case REQUEST_GRANT_PERMISSION: + { + // response: + // StatusCode 1 if request was valid + // ErrorCode Error code from GrantPermission() + + REQUEST_GRANT_PERMISSION_DATA *data = &request->GrantPermissionData; + + if (request->DataSize == sizeof(*data) && + data->EntryCount <= ARRAYSIZE(data->Entries)) { + response->ErrorCode = GrantPermission(data->ObjectType, + data->ObjectName, data->Entries, data->EntryCount, + data->Inheritance); + response->StatusCode = 1; + } + } + break; +#ifdef IMPLEMENT_REGISTER_SERVER + case REQUEST_REGISTER_SERVER: + { + // response: + // StatusCode 1 if LoadLibrary failed, + // 2 if GetProcAddress failed, + // 3 if Dll(Un)RegisterServer called; possibly succeeded, + // 4 if OleInitialize failed + // ErrorCode Error code or HRESULT depending on the StatusCode + + REQUEST_REGISTER_SERVER_DATA *data = &request->RegisterServerData; + + if (request->DataSize == sizeof(*data)) { + response->StatusCode = RegisterServer(data->Unregister, + data->Filename, data->Directory, data->FailCriticalErrors, + &response->ErrorCode); + } + } + break; +#endif + case REQUEST_REGISTER_TYPE_LIBRARY: + { + // response: + // StatusCode 1 if LoadTypeLib didn't return S_OK + // Register only: + // 2 if RegisterTypeLib called; possibly succeeded + // Unregister only: + // 3 if ITypeLib::GetLibAttr didn't return S_OK + // 4 if UnRegisterTypeLib called; possibly succeeded + // ErrorCode An HRESULT + + REQUEST_REGISTER_TYPE_LIBRARY_DATA *data = &request->RegisterTypeLibraryData; + + if (request->DataSize == sizeof(*data)) { + response->StatusCode = RegisterTypeLibrary(data->Unregister, + data->Filename, &response->ErrorCode); + } + } + break; + } +} + +static BOOL WINAPI ConsoleCtrlHandlerRoutine(DWORD dwCtrlType) +{ + // By default, during shutdown, applications without windows are killed + // unconditionally. This handler suppresses that default handling, and + // just ignores the termination request. + // + // Note: This can cause a "Process not responding" dialog to appear, but + // that's still better than dying unconditionally. I don't think it's + // possible to programmatically abort the shutdown sequence in a + // non-windowed application. (Windowed applications, of course, can + // return FALSE in response to WM_QUERYENDSESSION. But we have no message + // loop so creating a window is not an option.) + + return TRUE; +} + +/* +void Test(void) +{ + TGrantPermissionEntry Entry = { 0 }; + Entry.Sid.Authority.Value[5] = 1; + Entry.Sid.SubAuthCount = 1; + Entry.AccessMask = 0x1200A9; + GrantPermission(SE_FILE_OBJECT, "c:\\testfile.txt", &Entry, 1, 0); +} +*/ + +int Main(void) +{ + int argc; + LPWSTR* argv; + LONGLONG llHandle; + HANDLE hPipe; + LONG retval = 0; + static REQUEST_DATA request; + static RESPONSE_DATA response; + + // Work around bug in Windows XP Gold & SP1: If the application manifest + // specifies COMCTL32.DLL version 6.0 (to enable visual styles), we must + // call InitCommonControls() to ensure that we actually link to + // COMCTL32.DLL, otherwise calls to MessageBox() fail. (XP SP2 appears + // to fix this.) + // NOTE: This workaround was brought over from RegDLL for consistency, + // but may not actually be needed here since Setup (currently) refuses + // to spawn Helper on pre-5.02 SP1 versions of Windows. + InitCommonControls(); + + SetErrorMode(SEM_FAILCRITICALERRORS); + + GetSystemDirectory(SystemDir, ARRAYSIZE(SystemDir)); + SetCurrentDirectory(SystemDir); + + // Give us a lower-than-default shutdown priority so that if for some + // reason a shutdown is initiated while we're running, Windows + // "shouldn't" try to kill us before Setup. + SetProcessShutdownParameters(0x100, 0); + + SetConsoleCtrlHandler(ConsoleCtrlHandlerRoutine, TRUE); + + // + // Get version and message-mode pipe handle from command line + // + + argv = CommandLineToArgvW(GetCommandLineW(), &argc); + if (argv == NULL) { + return MAKELONG(GetLastError(), 1); + } + if (argc != 3) { + return MAKELONG(0, 2); + } + if (StrToIntW(argv[1]) != HELPER_VERSION) { + return MAKELONG(0, 3); + } + if (!StrToInt64ExW(argv[2], STIF_SUPPORT_HEX, &llHandle)) { + return MAKELONG(0, 4); + } + hPipe = (HANDLE)(INT_PTR)llHandle; + + // + // Wait for and process incoming requests + // + + while (TRUE) { + DWORD dwBytesRead, dwResponseLength, dwBytesWritten; + + if (!ReadFile(hPipe, &request, sizeof(request), &dwBytesRead, NULL)) { + // We can normally expect ReadFile to fail with ERROR_BROKEN_PIPE + // when the client has disconnected. + // Note: We don't bother handling ERROR_MORE_DATA because the client + // shouldn't be sending us oversized requests in the first place. + if (GetLastError() != ERROR_BROKEN_PIPE) { + retval = MAKELONG(GetLastError(), 5); + } + break; + } + if (dwBytesRead < FIELD_OFFSET(REQUEST_DATA, Data) || + request.DataSize != dwBytesRead - FIELD_OFFSET(REQUEST_DATA, Data)) { + // Request message is too short or too long + retval = MAKELONG(0, 6); + break; + } + + ProcessRequest(&request, &response); + + dwResponseLength = FIELD_OFFSET(RESPONSE_DATA, Data) + response.DataSize; + if (!WriteFile(hPipe, &response, dwResponseLength, &dwBytesWritten, NULL)) { + // WriteFile could fail if the client disconnected for some reason. + retval = MAKELONG(GetLastError(), 7); + break; + } + if (dwBytesWritten != dwResponseLength) { + // Should never get here. + retval = MAKELONG(0, 8); + break; + } + } + + CloseHandle(hPipe); + + return retval; +} + +int mainCRTStartup(void) +{ + int retval; + + retval = Main(); + + // Good idea to call ExitProcess because it'll terminate any other + // threads the system might've created. A simple "return" won't. + ExitProcess(retval); + + return retval; +} \ No newline at end of file diff --git a/Projects/Helper/Helper.manifest.txt b/Projects/Helper/Helper.manifest.txt new file mode 100644 index 00000000..e9c94c10 --- /dev/null +++ b/Projects/Helper/Helper.manifest.txt @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Helper/Helper.rc b/Projects/Helper/Helper.rc new file mode 100644 index 00000000..3241cffb --- /dev/null +++ b/Projects/Helper/Helper.rc @@ -0,0 +1 @@ +1 24 Helper.manifest.txt diff --git a/Projects/Helper/Helper.sln b/Projects/Helper/Helper.sln new file mode 100644 index 00000000..29be6816 --- /dev/null +++ b/Projects/Helper/Helper.sln @@ -0,0 +1,32 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Helper", "Helper.vcproj", "{A8B688FC-C6AA-4051-9428-0002F49316CD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Itanium = Debug|Itanium + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Itanium = Release|Itanium + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A8B688FC-C6AA-4051-9428-0002F49316CD}.Debug|Itanium.ActiveCfg = Debug|Itanium + {A8B688FC-C6AA-4051-9428-0002F49316CD}.Debug|Itanium.Build.0 = Debug|Itanium + {A8B688FC-C6AA-4051-9428-0002F49316CD}.Debug|Win32.ActiveCfg = Debug|Win32 + {A8B688FC-C6AA-4051-9428-0002F49316CD}.Debug|Win32.Build.0 = Debug|Win32 + {A8B688FC-C6AA-4051-9428-0002F49316CD}.Debug|x64.ActiveCfg = Debug|x64 + {A8B688FC-C6AA-4051-9428-0002F49316CD}.Debug|x64.Build.0 = Debug|x64 + {A8B688FC-C6AA-4051-9428-0002F49316CD}.Release|Itanium.ActiveCfg = Release|Itanium + {A8B688FC-C6AA-4051-9428-0002F49316CD}.Release|Itanium.Build.0 = Release|Itanium + {A8B688FC-C6AA-4051-9428-0002F49316CD}.Release|Win32.ActiveCfg = Release|Win32 + {A8B688FC-C6AA-4051-9428-0002F49316CD}.Release|Win32.Build.0 = Release|Win32 + {A8B688FC-C6AA-4051-9428-0002F49316CD}.Release|x64.ActiveCfg = Release|x64 + {A8B688FC-C6AA-4051-9428-0002F49316CD}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Projects/Helper/Helper.vcproj b/Projects/Helper/Helper.vcproj new file mode 100644 index 00000000..5c462fdf --- /dev/null +++ b/Projects/Helper/Helper.vcproj @@ -0,0 +1,544 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Helper/x64/Release/Helper.exe b/Projects/Helper/x64/Release/Helper.exe new file mode 100644 index 00000000..98d09381 Binary files /dev/null and b/Projects/Helper/x64/Release/Helper.exe differ diff --git a/Projects/ISCC.dpr b/Projects/ISCC.dpr new file mode 100644 index 00000000..1bae8f11 --- /dev/null +++ b/Projects/ISCC.dpr @@ -0,0 +1,663 @@ +program ISCC; +{$APPTYPE CONSOLE} + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + Command-line compiler +} + +{x$DEFINE STATICCOMPILER} +{ For debugging purposes, remove the 'x' to have it link the compiler code + into this program and not depend on ISCmplr.dll. } + +uses + SafeDLLPath in 'Src\SafeDLLPath.pas', + Windows, + SysUtils, + Classes, + {$IFDEF STATICCOMPILER} Compile in 'Src\Compile.pas', {$ENDIF} + PathFunc in '..\Components\PathFunc.pas', + CmnFunc2 in 'Src\CmnFunc2.pas', + CompInt in 'Src\CompInt.pas', + FileClass in 'Src\FileClass.pas', + CompTypes in 'Src\CompTypes.pas', + Int64Em in 'Src\Int64Em.pas'; + +{$SetPEFlags IMAGE_FILE_RELOCS_STRIPPED} +{$SETPEOSVERSION 6.1} +{$SETPESUBSYSVERSION 6.1} +{$WEAKLINKRTTI ON} + +{$R Res\ISCC.manifest.res} +{$R Res\ISCC.versionandicon.res} + +type + PScriptLine = ^TScriptLine; + TScriptLine = record + LineText: String; + Next: PScriptLine; + end; + + TOptionID = 0..25; + + TOptions = packed set of TOptionID; + + TIsppOptions = packed record + ParserOptions: TOptions; + Options: TOptions; + VerboseLevel: Byte; + InlineStart: string[7]; + InlineEnd: string[7]; + SpanSymbol: AnsiChar; + end; + +var + StdOutHandle, StdErrHandle: THandle; + StdOutHandleIsConsole, StdErrHandleIsConsole: Boolean; + ScriptFilename: String; + Definitions, IncludePath, IncludeFiles, Output, OutputPath, OutputFilename: String; + SignTools: TStringList; + ScriptLines, NextScriptLine: PScriptLine; + CurLine: String; + StartTime, EndTime: DWORD; + Quiet, ShowProgress, WantAbort: Boolean; + ProgressPoint: TPoint; + LastProgress: String; + IsppOptions: TIsppOptions; + IsppMode: Boolean; + +procedure WriteToStdHandle(const Handle: THandle; const HandleIsConsole: Boolean; S: String); +begin + if Copy(S, 1, 1) <> #13 then + S := S + #13#10; + + if HandleIsConsole then begin + var CharsWritten: DWORD; + WriteConsole(Handle, @S[1], Length(S), CharsWritten, nil); + end else begin + var Utf8S := Utf8Encode(S); + var BytesWritten: DWORD; + WriteFile(Handle, Utf8S[1], Length(Utf8S), BytesWritten, nil); + end; +end; + +procedure WriteStdOut(const S: String; const Warning: Boolean = False); +var + CSBI: TConsoleScreenBufferInfo; + DidSetColor: Boolean; +begin + DidSetColor := Warning and StdOutHandleIsConsole and GetConsoleScreenBufferInfo(StdOutHandle, CSBI) and + SetConsoleTextAttribute(StdOutHandle, FOREGROUND_INTENSITY or FOREGROUND_RED or FOREGROUND_GREEN); + try + WriteToStdHandle(StdOutHandle, StdOutHandleIsConsole, S); + finally + if DidSetColor then + SetConsoleTextAttribute(StdOutHandle, CSBI.wAttributes); + end; +end; + +procedure WriteStdErr(const S: String; const Error: Boolean = False); +var + CSBI: TConsoleScreenBufferInfo; + DidSetColor: Boolean; +begin + DidSetColor := Error and StdErrHandleIsConsole and GetConsoleScreenBufferInfo(StdErrHandle, CSBI) and + SetConsoleTextAttribute(StdErrHandle, FOREGROUND_INTENSITY or FOREGROUND_RED); + try + WriteToStdHandle(StdErrHandle, StdErrHandleIsConsole, S); + finally + if DidSetColor then + SetConsoleTextAttribute(StdErrHandle, CSBI.wAttributes); + end; +end; + +function GetCursorPos: TPoint; +var + CSBI: TConsoleScreenBufferInfo; +begin + if not StdOutHandleIsConsole or not GetConsoleScreenBufferInfo(StdOutHandle, CSBI) then + Exit; + Result.X := CSBI.dwCursorPosition.X; + Result.Y := CSBI.dwCursorPosition.Y; +end; + +procedure SetCursorPos(const P: TPoint); +var + Coords: TCoord; + CSBI: TConsoleScreenBufferInfo; +begin + if not StdOutHandleIsConsole or not GetConsoleScreenBufferInfo(StdOutHandle, CSBI) then + Exit; + if P.X < 0 then Exit; + if P.Y < 0 then Exit; + if P.X > CSBI.dwSize.X then Exit; + if P.Y > CSBI.dwSize.Y then Exit; + Coords.X := P.X; + Coords.Y := P.Y; + SetConsoleCursorPosition(StdOutHandle, Coords); +end; + +procedure WriteProgress(const S: String); +var + CSBI: TConsoleScreenBufferInfo; + Str: String; +begin + if StdOutHandleIsConsole and GetConsoleScreenBufferInfo(StdOutHandle, CSBI) then begin + if Length(S) > CSBI.dwSize.X then + Str := Copy(S, 1, CSBI.dwSize.X) + else + Str := Format('%-' + IntToStr(CSBI.dwSize.X) + 's', [S]); + end else + Str := S; + + WriteToStdHandle(StdOutHandle, StdOutHandleIsConsole, Str); +end; + +function ConsoleCtrlHandler(dwCtrlType: DWORD): BOOL; stdcall; +begin + { Abort gracefully when Ctrl+C/Break is pressed } + WantAbort := True; + Result := True; +end; + +procedure ReadScriptLines(const F: TTextFileReader); +var + LineNumber: Integer; + PrevLine, L: PScriptLine; +begin + LineNumber := 1; + PrevLine := nil; + while not F.Eof do begin + New(L); + try + L.LineText := F.ReadLine; + if Pos(#0, L.LineText) <> 0 then + raise Exception.CreateFmt('Illegal null character on line %d', [LineNumber]); + L.Next := nil; + except + Dispose(L); + raise; + end; + if Assigned(PrevLine) then + PrevLine.Next := L + else begin + ScriptLines := L; + NextScriptLine := L; + end; + PrevLine := L; + Inc(LineNumber); + end; +end; + +procedure FreeScriptLines; +var + L, NextLine: PScriptLine; +begin + L := ScriptLines; + ScriptLines := nil; + NextScriptLine := nil; + while Assigned(L) do begin + NextLine := L.Next; + Dispose(L); + L := NextLine; + end; +end; + +function CompilerCallbackProc(Code: Integer; var Data: TCompilerCallbackData; + AppData: Longint): Integer; stdcall; + + procedure PrintProgress(Progress: String); + var + Pt: TPoint; + begin + if (Progress = '') or (LastProgress = Progress) then + Exit; + + Pt := GetCursorPos; + + if Pt.Y <= ProgressPoint.Y then + Exit + else if ProgressPoint.X < 0 then begin + ProgressPoint := Pt; + WriteStdOut(''); + Pt := GetCursorPos; + end; + + SetCursorPos(ProgressPoint); + WriteProgress(#13 + Progress); + LastProgress := Progress; + SetCursorPos(Pt); + end; + +var + S, BytesCompressedPerSecond, SecondsRemaining: String; +begin + if WantAbort then begin + Result := iscrRequestAbort; + Exit; + end; + Result := iscrSuccess; + case Code of + iscbReadScript: begin + { Note: In Inno Setup 3.0.1 and later we can ignore Data.Reset since + it is only True once (when reading the first line). } + if Assigned(NextScriptLine) then begin + CurLine := NextScriptLine.LineText; + NextScriptLine := NextScriptLine.Next; + Data.LineRead := PChar(CurLine); + end; + end; + iscbNotifyStatus: + if not Quiet then + WriteStdOut(Data.StatusMsg, Data.Warning) + else if ShowProgress then + PrintProgress(Trim(Data.StatusMsg)); + iscbNotifySuccess: begin + EndTime := GetTickCount; + if not Quiet then begin + WriteStdOut(''); + if Data.OutputExeFilename <> '' then begin + WriteStdOut(Format('Successful compile (%.3f sec). ' + + 'Resulting Setup program filename is:', + [(EndTime - StartTime) / 1000])); + WriteStdOut(Data.OutputExeFilename); + end else + WriteStdOut(Format('Successful compile (%.3f sec). ' + + 'Output was disabled.', + [(EndTime - StartTime) / 1000])); + end; + end; + iscbNotifyError: + if Assigned(Data.ErrorMsg) then begin + S := 'Error'; + if Data.ErrorLine <> 0 then + S := S + Format(' on line %d', [Data.ErrorLine]); + if Assigned(Data.ErrorFilename) then + S := S + ' in ' + Data.ErrorFilename + else if ScriptFilename <> '' then + S := S + ' in ' + ScriptFilename; + S := S + ': ' + Data.ErrorMsg; + WriteStdErr(S, True); + end; + iscbNotifyIdle: + if ShowProgress and (Data.CompressProgress <> 0) then begin + if Data.BytesCompressedPerSecond <> 0 then + BytesCompressedPerSecond := Format(' at %.2f kb/s', [Data.BytesCompressedPerSecond / 1024]) + else + BytesCompressedPerSecond := ''; + if Data.SecondsRemaining <> -1 then + SecondsRemaining := Format(', %d seconds remaining', [Data.SecondsRemaining]) + else + SecondsRemaining := ''; + PrintProgress(Format('Compressing: %.2f%% done%s%s', [Data.CompressProgress / Data.CompressProgressMax * 100, BytesCompressedPerSecond, SecondsRemaining])); + end; + end; +end; + +procedure ProcessCommandLine; + + procedure SetOption(var Options: TOptions; Option: Char; Value: Boolean); + begin + if Value then + Include(Options, Ord(UpCase(Option)) - Ord('A')) + else + Exclude(Options, Ord(UpCase(Option)) - Ord('A')) + end; + + procedure InitIsppOptions(var Opt: TIsppOptions; var Definitions, IncludePath, IncludeFiles: String); + begin + with Opt do begin + SetOption(Options, 'C', True); + SetOption(ParserOptions, 'B', True); + SetOption(ParserOptions, 'P', True); + VerboseLevel := 0; + InlineStart := '{#'; + InlineEnd := '}'; + end; + + Definitions := 'ISPPCC_INVOKED'#1; + IncludePath := ExtractFileDir(NewParamStr(0)); + IncludeFiles := ''; + end; + + procedure ReadOptionsParam(var Options: TOptions; Symbol: Char); + var + I: Integer; + S: String; + begin + for I := 1 to NewParamCount do + begin + S := NewParamStr(I); + if Length(S) = 4 then + if ((S[1] = '/') or (S[1] = '-')) and (UpCase(S[2]) = Symbol) then + case S[4] of + '-': SetOption(Options, S[3], False); + '+': SetOption(Options, S[3], True) + else + raise Exception.CreateFmt('Invalid command line option: %s', [S]); + end; + end; + end; + + function IsParam(const S: String): Boolean; + begin + Result := (Length(S) >= 2) and ((S[1] = '/') or (S[1] = '-')); + end; + + function GetParam(var S: String; Symbols: String): Boolean; + begin + Result := IsParam(S) and + (CompareText(Copy(S, 2, Length(Symbols)), Symbols) = 0); + if Result then + S := Copy(S, 2 + Length(Symbols), MaxInt); + end; + + function FindParam(var Index: Integer; Symbols: String): String; + var + I: Integer; + S: String; + begin + for I := Index to NewParamCount do + begin + S := NewParamStr(I); + if IsParam(S) and (CompareText(Copy(S, 2, Length(Symbols)), Symbols) = 0) then + begin + Result := Copy(S, 2 + Length(Symbols), MaxInt); + Index := I + 1; + Exit; + end; + end; + Index := MaxInt; + Result := ''; + end; + + procedure ShowBanner; + begin + WriteStdOut('Inno Setup 6 Command-Line Compiler'); + WriteStdOut('Copyright (C) 1997-2024 Jordan Russell. All rights reserved.'); + WriteStdOut('Portions Copyright (C) 2000-2024 Martijn Laan. All rights reserved.'); + if IsppMode then + WriteStdOut('Portions Copyright (C) 2001-2004 Alex Yackimoff. All rights reserved.'); + WriteStdOut('https://www.innosetup.com'); + WriteStdOut(''); + end; + + procedure ShowUsage; + begin + WriteStdErr('Usage: iscc [options] scriptfile.iss'); + WriteStdErr('or to read from standard input: iscc [options] -'); + WriteStdErr('Options:'); + WriteStdErr(' /O(+|-) Enable or disable output (overrides Output)'); + WriteStdErr(' /O Output files to specified path (overrides OutputDir)'); + WriteStdErr(' /F Overrides OutputBaseFilename with the specified filename'); + WriteStdErr(' /S= Sets a SignTool with the specified name and command'); + WriteStdErr(' /Q Quiet compile (print error messages only)'); + WriteStdErr(' /Qp Enable quiet compile while still displaying progress'); + if IsppMode then begin + WriteStdErr(' /D[=] Emulate #define public '); + WriteStdErr(' /$(+|-) Emulate #pragma option -(+|-)'); + WriteStdErr(' /P(+|-) Emulate #pragma parseroption -(+|-)'); + WriteStdErr(' /I Emulate #pragma include '); + WriteStdErr(' /J Emulate #include '); + WriteStdErr(' /{# Emulate #pragma inlinestart '); + WriteStdErr(' /} Emulate #pragma inlineend '); + WriteStdErr(' /V Emulate #pragma verboselevel '); + end; + WriteStdErr(' /? Show this help screen'); + if IsppMode then begin + WriteStdErr(''); + WriteStdErr('Example: iscc /$c- /Pu+ "/DLic=Trial Lic.txt" /IC:\INC;D:\INC scriptfile.iss'); + WriteStdErr(''); + end; + end; + +var + I: Integer; + S: String; +begin + if IsppMode then begin + InitIsppOptions(IsppOptions, Definitions, IncludePath, IncludeFiles); + { Also see below } + ReadOptionsParam(IsppOptions.Options, '$'); + ReadOptionsParam(IsppOptions.ParserOptions, 'P'); + end; + + for I := 1 to NewParamCount do begin + S := NewParamStr(I); + if (S = '') or IsParam(S) then begin + if GetParam(S, 'Q') then begin + Quiet := True; + ShowProgress := CompareText(S, 'P') = 0; + end + else if GetParam(S, 'O') then begin + if S = '-' then Output := 'no' + else if S = '+' then Output := 'yes' + else OutputPath := S; + end + else if GetParam(S, 'F') then + OutputFilename := S + else if GetParam(S, 'S') then begin + if Pos('=', S) = 0 then begin + ShowBanner; + WriteStdErr('Invalid option: ' + S, True); + Halt(1); + end; + SignTools.Add(S); + end else if IsppMode and GetParam(S, 'D') then begin + Definitions := Definitions + S + #1; + end + else if IsppMode and GetParam(S, 'I') then begin + IncludePath := IncludePath + ';' + S; + end + else if IsppMode and GetParam(S, 'J') then begin + IncludeFiles := IncludeFiles + S + #1; + end + else if IsppMode and GetParam(S, '{#') then begin + if S <> '' then IsppOptions.InlineStart := AnsiString(S); + end + else if IsppMode and GetParam(S, '}') then begin + if S <> '' then IsppOptions.InlineEnd := AnsiString(S); + end + else if IsppMode and GetParam(S, 'V') then begin + if S <> '' then IsppOptions.VerboseLevel := StrToIntDef(S, 0); + end + else if IsppMode and (GetParam(S, '$') or GetParam(S, 'P')) then begin + { Already handled above } + end + else if S = '/?' then begin + ShowBanner; + ShowUsage; + Halt(1); + end + else begin + ShowBanner; + WriteStdErr('Unknown option: ' + S, True); + Halt(1); + end; + end + else begin + { Not a switch; must be the script filename } + if ScriptFilename <> '' then begin + ShowBanner; + WriteStdErr('You may not specify more than one script filename.', True); + Halt(1); + end; + ScriptFilename := S; + end; + end; + + if ScriptFilename = '' then begin + ShowBanner; + ShowUsage; + Halt(1); + end; + + if not Quiet then + ShowBanner; +end; + +procedure Go; + + procedure AppendOption(var Opts: String; const OptName, OptValue: String); + begin + Opts := Opts + OptName + '=' + OptValue + #0; + end; + + function ConvertOptionsToString(const Options: TOptions): String; + var + I: TOptionID; + begin + Result := ''; + for I := 0 to 25 do + if I in Options then + Result := Result + Chr(Ord('a') + I); + end; + + procedure IsppOptionsToString(var S: String; Opt: TIsppOptions; Definitions, IncludePath, IncludeFiles: String); + begin + with Opt do begin + AppendOption(S, 'ISPP:ParserOptions', ConvertOptionsToString(ParserOptions)); + AppendOption(S, 'ISPP:Options', ConvertOptionsToString(Options)); + AppendOption(S, 'ISPP:VerboseLevel', IntToStr(VerboseLevel)); + AppendOption(S, 'ISPP:InlineStart', String(InlineStart)); + AppendOption(S, 'ISPP:InlineEnd', String(InlineEnd)); + end; + + AppendOption(S, 'ISPP:Definitions', Definitions); + AppendOption(S, 'ISPP:IncludePath', IncludePath); + AppendOption(S, 'ISPP:IncludeFiles', IncludeFiles); + end; + +var + ScriptPath: String; + ExitCode: Integer; + Ver: PCompilerVersionInfo; + F: TTextFileReader; + Params: TCompileScriptParamsEx; + Options: String; + Res: Integer; + I: Integer; + IDESignTools: TStringList; +begin + if ScriptFilename <> '-' then begin + ScriptFilename := PathExpand(ScriptFilename); + ScriptPath := PathExtractPath(ScriptFilename); + end + else begin + { Read from standard input } + ScriptFilename := ''; + ScriptPath := GetCurrentDir; + end; + + {$IFNDEF STATICCOMPILER} + Ver := ISDllGetVersion; + {$ELSE} + Ver := ISGetVersion; + {$ENDIF} + if Ver.BinVersion < $05000500 then begin + { 5.0.5 or later is required since we use TCompileScriptParamsEx } + WriteStdErr('Incompatible compiler engine version.', True); + Halt(1); + end; + + ProgressPoint.X := -1; + ExitCode := 0; + try + if ScriptFilename <> '' then + F := TTextFileReader.Create(ScriptFilename, fdOpenExisting, faRead, fsRead) + else + F := TTextFileReader.CreateWithExistingHandle(GetStdHandle(STD_INPUT_HANDLE)); + try + ReadScriptLines(F); + finally + F.Free; + end; + + if not Quiet then begin + WriteStdOut('Compiler engine version: ' + String(Ver.Title) + ' ' + String(Ver.Version)); + WriteStdOut(''); + end; + + FillChar(Params, SizeOf(Params), 0); + Params.Size := SizeOf(Params); + Params.SourcePath := PChar(ScriptPath); + Params.CallbackProc := CompilerCallbackProc; + Options := ''; + if Output <> '' then + AppendOption(Options, 'Output', Output); + if OutputPath <> '' then + AppendOption(Options, 'OutputDir', OutputPath); + if OutputFilename <> '' then + AppendOption(Options, 'OutputBaseFilename', OutputFilename); + + for I := 0 to SignTools.Count-1 do + Options := Options + AddSignToolParam(SignTools[I]); + + IDESignTools := TStringList.Create; + try + { Also automatically read and add SignTools defined using the IDE. Adding + these after the command line SignTools so that the latter are always + found first by the compiler. } + ReadSignTools(IDESignTools); + for I := 0 to IDESignTools.Count-1 do + Options := Options + AddSignToolParam(IDESignTools[I]); + finally + IDESignTools.Free; + end; + + if IsppMode then + IsppOptionsToString(Options, IsppOptions, Definitions, IncludePath, IncludeFiles); + + Params.Options := PChar(Options); + + StartTime := GetTickCount; + {$IFNDEF STATICCOMPILER} + Res := ISDllCompileScript(Params); + {$ELSE} + Res := ISCompileScript(Params, False); + {$ENDIF} + case Res of + isceNoError: ; + isceCompileFailure: begin + ExitCode := 2; + WriteStdErr('Compile aborted.', True); + end; + else + ExitCode := 1; + WriteStdErr(Format('Internal error: ISDllCompileScript returned ' + + 'unexpected result (%d).', [Res]), True); + end; + finally + FreeScriptLines; + end; + if ExitCode <> 0 then + Halt(ExitCode); +end; + +begin + SignTools := TStringList.Create; + try + StdOutHandle := GetStdHandle(STD_OUTPUT_HANDLE); + StdErrHandle := GetStdHandle(STD_ERROR_HANDLE); + var Mode: DWORD; + StdOutHandleIsConsole := GetConsoleMode(StdOutHandle, Mode); + StdErrHandleIsConsole := GetConsoleMode(StdErrHandle, Mode); + SetConsoleCtrlHandler(@ConsoleCtrlHandler, True); + try + IsppMode := FileExists(ExtractFilePath(NewParamStr(0)) + 'ispp.dll'); + ProcessCommandLine; + Go; + except + { Show a friendlier exception message. (By default, Delphi prints out + the exception class and address.) } + WriteStdErr(GetExceptMessage, True); + Halt(2); + end; + finally + SignTools.Free; + end; +end. diff --git a/Projects/ISCC.dproj b/Projects/ISCC.dproj new file mode 100644 index 00000000..89d89f10 --- /dev/null +++ b/Projects/ISCC.dproj @@ -0,0 +1,116 @@ + + + {CB865E8F-FE9C-46FD-90B0-AB3BDBD1C906} + ISCC.dpr + True + Debug + 1 + Console + None + 19.5 + Win32 + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + 00400000 + false + 1 + 1 + true + ..\Components\UniPs\Source;ISPP;$(DCC_UnitSearchPath) + VCL30;vclx30;VclSmp30;vcldb30;vcldbx30;$(DCC_UsePackage) + PS_MINIVCL;PS_NOGRAPHCONST;PS_PANSICHAR;PS_NOINTERFACEGUIDBRACKETS;$(DCC_Define) + ISCC + true + 0 + 1033 + System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + CompanyName=Jordan Russell;FileDescription=Inno Setup Command-Line Compiler;FileVersion=0.0.0.0;InternalName=;LegalCopyright=Copyright (C) 1997-2008 Jordan Russell. Portions Copyright (C) 2000-2008 Martijn Laan.;LegalTrademarks=;OriginalFilename=;ProductName=Inno Setup;ProductVersion=0.0.0.0;Comments=Inno Setup home page: http://www.innosetup.com + false + false + false + false + false + false + false + Dcu\$(MainSource) + + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + 1033 + + + RELEASE;$(DCC_Define) + 0 + false + ..\Files + + + DEBUG;$(DCC_Define) + false + true + Bin + Debug.iss + + + + MainSource + + + + + + + + + + + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + + + + Delphi.Personality.12 + + + + + ISCC.dpr + + + + True + False + + + 12 + + + + diff --git a/Projects/ISCmplr.dpr b/Projects/ISCmplr.dpr new file mode 100644 index 00000000..a477814d --- /dev/null +++ b/Projects/ISCmplr.dpr @@ -0,0 +1,176 @@ +library ISCmplr; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + Compiler DLL +} + +uses + SafeDLLPath in 'Src\SafeDLLPath.pas', + SysUtils, + CompInt in 'Src\CompInt.pas', + CompPreprocInt in 'Src\CompPreprocInt.pas', + Compile in 'Src\Compile.pas', + CompMsgs in 'Src\CompMsgs.pas', + Struct in 'Src\Struct.pas', + ScriptFunc in 'Src\ScriptFunc.pas', + ScriptFunc_C in 'Src\ScriptFunc_C.pas', + ScriptCompiler in 'Src\ScriptCompiler.pas', + ScriptClasses_C in 'Src\ScriptClasses_C.pas', + ResUpdate in 'Src\ResUpdate.pas', + CompExeUpdate in 'Src\CompExeUpdate.pas', + Compress in 'Src\Compress.pas', + CompressZlib in 'Src\CompressZlib.pas', + bzlib in 'Src\bzlib.pas', + LZMA in 'Src\LZMA.pas', + FileClass in 'Src\FileClass.pas', + ArcFour in 'Src\ArcFour.pas', + VerInfo in 'Src\VerInfo.pas', + PathFunc in '..\Components\PathFunc.pas', + CmnFunc2 in 'Src\CmnFunc2.pas', + Int64Em in 'Src\Int64Em.pas', + SHA1 in 'Src\SHA1.pas', + DebugStruct in 'Src\DebugStruct.pas', + LangOptionsSectionDirectives in 'Src\LangOptionsSectionDirectives.pas', + MsgIDs in 'Src\MsgIDs.pas', + SetupEnt in 'Src\SetupEnt.pas', + SetupSectionDirectives in 'Src\SetupSectionDirectives.pas', + SetupTypes in 'Src\SetupTypes.pas', + SimpleExpression in 'Src\SimpleExpression.pas', + MD5 in 'Src\MD5.pas', + RedirFunc in 'Src\RedirFunc.pas', + DotNetVersion in 'Src\DotNetVersion.pas'; + +{$IMAGEBASE $00800000} +{$SETPEOSVERSION 6.1} +{$SETPESUBSYSVERSION 6.1} +{$WEAKLINKRTTI ON} + +{$R Res\ISCmplr.images.res} +{$R Res\ISCmplr.version.res} + +function ISDllCompileScript(const Params: TCompileScriptParamsEx): Integer; +stdcall; +begin + Result := ISCompileScript(Params, False); +end; + +type + PWrapperData = ^TWrapperData; + TWrapperData = record + CallerParams: PCompileScriptParamsEx; + LastLineRead: String; + end; + +{ Does not support iscbNotifyPreproc } +function WrapperCallbackProc(Code: Integer; var Data: TCompilerCallbackData; + AppData: Longint): Integer; +stdcall; +var + WrapperData: PWrapperData; + CallerParams: PCompileScriptParamsEx; + AnsiStatusMsg, AnsiOutputExeFilename, AnsiErrorMsg, AnsiErrorFilename: AnsiString; +begin + WrapperData := PWrapperData(AppData); + CallerParams := WrapperData.CallerParams; + + case Code of + iscbReadScript: + begin + Result := CallerParams.CallbackProc(Code, Data, CallerParams.AppData); + if Assigned(Data.LineRead) then begin + WrapperData.LastLineRead := String(PAnsiChar(Data.LineRead)); + Data.LineRead := PWideChar(WrapperData.LastLineRead); + end; + end; + iscbNotifyStatus: + begin + if Assigned(Data.StatusMsg) then begin + AnsiStatusMsg := AnsiString(Data.StatusMsg); + Data.StatusMsg := PWideChar(PAnsiChar(AnsiStatusMsg)); + end; + Result := CallerParams.CallbackProc(Code, Data, CallerParams.AppData); + end; + iscbNotifySuccess: + begin + if Assigned(Data.OutputExeFilename) then begin + AnsiOutputExeFilename := AnsiString(Data.OutputExeFilename); + Data.OutputExeFilename := PWideChar(PAnsiChar(AnsiOutputExeFilename)); + end; + Result := CallerParams.CallbackProc(Code, Data, CallerParams.AppData); + end; + iscbNotifyError: + begin + if Assigned(Data.ErrorMsg) then begin + AnsiErrorMsg := AnsiString(Data.ErrorMsg); + Data.ErrorMsg := PWideChar(PAnsiChar(AnsiErrorMsg)); + end; + if Assigned(Data.ErrorFilename) then begin + AnsiErrorFilename := AnsiString(Data.ErrorFilename); + Data.ErrorFilename := PWideChar(PAnsiChar(AnsiErrorFilename)); + end; + Result := CallerParams.CallbackProc(Code, Data, CallerParams.AppData); + end; + else + Result := CallerParams.CallbackProc(Code, Data, CallerParams.AppData); + end; +end; + +function ISDllCompileScriptA(const Params: TCompileScriptParamsEx): Integer; +stdcall; +var + WrapperData: TWrapperData; + WrapperParams: PCompileScriptParamsEx; + P: PAnsiChar; + Options: String; +begin + if ((Params.Size <> SizeOf(Params)) and + (Params.Size <> SizeOf(TCompileScriptParams))) or + not Assigned(Params.CallbackProc) then begin + Result := isceInvalidParam; + Exit; + end; + WrapperData.CallerParams := @Params; + GetMem(WrapperParams, Params.Size); + try + Move(Params, WrapperParams^, Params.Size); + WrapperParams.CallbackProc := WrapperCallbackProc; + WrapperParams.AppData := Integer(@WrapperData); + if Assigned(Params.CompilerPath) then + WrapperParams.CompilerPath := PWideChar(String(PAnsiChar(Params.CompilerPath))); + if Assigned(Params.SourcePath) then + WrapperParams.SourcePath := PWideChar(String(PAnsiChar(Params.SourcePath))); + if (Params.Size <> SizeOf(TCompileScriptParams)) and Assigned(Params.Options) then begin + P := PAnsiChar(Params.Options); + while P^ <> #0 do begin + Options := Options + String(P) + #0; + Inc(P, StrLen(P) + 1); + end; + WrapperParams.Options := PWideChar(Options); + end; + Result := ISCompileScript(WrapperParams^, False); + finally + FreeMem(WrapperParams); + end; +end; + +function ISDllGetVersion: PCompilerVersionInfo; stdcall; +begin + Result := ISGetVersion; +end; + +exports + ISDllCompileScript name 'ISDllCompileScriptW', + ISDllCompileScriptA name 'ISDllCompileScript', + ISDllGetVersion; + +begin + { The user might call ISDllCompileScript from multiple threads + simultaneously, so set our instance of the Delphi memory manager to + thread-safe mode } + IsMultiThread := True; +end. diff --git a/Projects/ISCmplr.dproj b/Projects/ISCmplr.dproj new file mode 100644 index 00000000..cb64b5df --- /dev/null +++ b/Projects/ISCmplr.dproj @@ -0,0 +1,144 @@ + + + {25CA0A66-07DC-4224-9252-EBFFA7D81558} + ISCmplr.dpr + True + Debug + 1 + Library + VCL + 19.5 + Win32 + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + 00800000 + false + 1 + 1 + ..\Components\UniPs\Source;ISPP;$(DCC_UnitSearchPath) + VCL30;vclx30;VclSmp30;vcldb30;vcldbx30;$(DCC_UsePackage) + PS_MINIVCL;PS_NOGRAPHCONST;PS_PANSICHAR;PS_NOINTERFACEGUIDBRACKETS;$(DCC_Define) + true + ISCmplr + true + 0 + 1033 + CompanyName=Jordan Russell;FileDescription=Inno Setup Compiler;FileVersion=0.0.0.0;InternalName=;LegalCopyright=Copyright (C) 1997-2008 Jordan Russell. Portions Copyright (C) 2000-2008 Martijn Laan.;LegalTrademarks=;OriginalFilename=;ProductName=Inno Setup;ProductVersion=0.0.0.0;Comments=Inno Setup home page: http://www.innosetup.com + System;Xml;Data;Datasnap;Web;Soap;Vcl;$(DCC_Namespace) + false + false + false + false + false + false + false + Dcu\$(MainSource) + + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + 1033 + + + RELEASE;$(DCC_Define) + 0 + false + 0 + ..\Files + + + DEBUG;$(DCC_Define) + false + true + Bin + Bin\Compil32.exe + Debug.iss + + + + MainSource + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + + + + Delphi.Personality.12 + + + + + ISCmplr.dpr + + + + True + False + + + 12 + + + + diff --git a/Projects/ISPP/.gitignore b/Projects/ISPP/.gitignore new file mode 100644 index 00000000..b355ccfe --- /dev/null +++ b/Projects/ISPP/.gitignore @@ -0,0 +1,2 @@ +compilesettings.bat +!ISPP.version.res \ No newline at end of file diff --git a/Projects/ISPP/CTokenizer.pas b/Projects/ISPP/CTokenizer.pas new file mode 100644 index 00000000..887dfcf1 --- /dev/null +++ b/Projects/ISPP/CTokenizer.pas @@ -0,0 +1,571 @@ +{ + Inno Setup Preprocessor + Copyright (C) 2001-2002 Alex Yackimoff + + Inno Setup + Copyright (C) 1997-2020 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. +} + +unit CTokenizer; + +interface + +uses SysUtils; + +type + + EParsingError = class(Exception) + Position: Integer; + end; + + TTokenKind = (tkError, tkEOF, tkIdent, tkNumber, tkString, opGreater, + opLess, + opGreaterEqual, + opLessEqual, + opEqual, + opNotEqual, + + opOr, + opAnd, + + opAdd, + opSubtract, + opBwOr, + opXor, + opMul, + opDiv, + opBwAnd, + opShl, + opShr, + opMod, + opNot, + opBwNot, + + opAssign, + opAgnAdd, + opAgnSub, + opAgnOr, + opAgnXor, + opAgnMul, + opAgnDiv, + opAgnAnd, + opAgnShl, + opAgnShr, + opAgnMod, + + opInc, + opDec, + + + tkOpenParen, + tkOpenBracket, + tkOpenBrace, + tkCloseParen, + tkCloseBracket, + tkCloseBrace, + + tkPeriod, + tkComma, + tkColon, + tkSemicolon, + tkQuestion, + tkPtr); + + TTokenKinds = set of TTokenKind; + + TCTokenizer = class(TObject) + private + FEscapeSequences: Boolean; + FExprStart: PChar; + FIdent: string; + FToken: TTokenKind; + FNextTokenKnown: Boolean; + FNextToken: TTokenKind; + FNextTokenPos: PChar; + FNextIdent: string; + FStoredPos: PChar; + procedure IllegalChar(C: Char); + function InternalNextToken: TTokenKind; + protected + FExpr: PChar; + FExprOffset: Integer; + procedure EndOfExpr; + procedure Error(const Message: string); + procedure ErrorFmt(const Message: string; Args: array of const); + public + constructor Create(const Expression: string; + EscapeSequences: Boolean); + procedure SkipBlanks; + function NextToken: TTokenKind; + function NextTokenExpect(Expected: TTokenKinds): TTokenKind; + function TokenInt: Longint; + function PeekAtNextToken: TTokenKind; + function PeekAtNextTokenString: string; + procedure Store; + procedure Restore; + procedure SetPos(NewPos: PChar); + property Token: TTokenKind read FToken; + property TokenString: string read FIdent; + end; + +const + ExpressionStartTokens = [tkOpenParen, tkIdent, tkNumber, tkString, opNot, + opBwNot, opAdd, opSubtract, opInc, opDec, tkPtr]; + +implementation + +uses IsppConsts, CmnFunc2; + +{ TCTokenizer } + +constructor TCTokenizer.Create(const Expression: string; + EscapeSequences: Boolean); +begin + FExpr := PChar(Expression); + FExprStart := FExpr; + FEscapeSequences := EscapeSequences; +end; + +procedure TCTokenizer.SkipBlanks; +begin + while CharInSet(FExpr^, [#1..#32]) do Inc(FExpr); + if (FExpr^ = '/') and (FExpr[1] = '*') then + begin + Inc(FExpr, 2); + while True do + begin + while not CharInSet(FExpr^, [#0, '*']) do Inc(FExpr); + if (FExpr^ = '*') then + if FExpr[1] = '/' then + begin + Inc(FExpr, 2); + SkipBlanks; + Exit; + end + else + Inc(FExpr) + else + Error('Unterminated comment'); + end; + end +end; + +function TCTokenizer.InternalNextToken: TTokenKind; + + procedure Promote(T: TTokenKind); + begin + Result := T; + Inc(FExpr); + end; + + function GetString(QuoteChar: Char): string; + var + P: PChar; + S: string; + I: Integer; + C: Byte; + + procedure Unterminated; + begin + if FExpr^ = #0 then + Error('Unterminated string'); + end; + + begin + Inc(FExpr); + Result := ''; + while True do + begin + P := FExpr; + while not CharInSet(FExpr^, [#0, '\', QuoteChar]) do Inc(FExpr); + SetString(S, P, FExpr - P); + Result := Result + S; + Unterminated; + if FExpr^ = QuoteChar then + begin + Inc(FExpr); + Break; + end; + Inc(FExpr); + Unterminated; + case FExpr^ of + #0: Unterminated; + '0'..'7':// octal 400 = $100 + begin + C := 0; + I := 0; + while CharInSet(FExpr^, ['0'..'7']) and (I < 3) do + begin + Inc(I); + C := (C shl 3) + (Ord(FExpr^) - Ord('0')); + Inc(FExpr); + Unterminated; + end; + Result := Result + Char(C); + Continue; + end; + 'a': Result := Result + #7; + 'b': Result := Result + #8; + 'f': Result := Result + #12; + 'n': Result := Result + #10; + 'r': Result := Result + #13; + 't': Result := Result + #9; + 'v': Result := Result + #11; + 'x': + begin + Inc(FExpr); + C := 0; + I := 0; + while CharInSet(FExpr^, ['0'..'9', 'A'..'F', 'a'..'f']) and (I < 2) do + begin + Inc(I); + C := C shl 4; + case FExpr^ of + '0'..'9': C := C + (Ord(FExpr^) - Ord('0')); + 'A'..'F': C := C + (Ord(FExpr^) - Ord('A')) + $0A; + else + C := C + (Ord(FExpr^) - Ord('a')) + $0A; + end; + Inc(FExpr); + Unterminated; + end; + Result := Result + Char(C); + Continue; + end; + else + Result := Result + FExpr^ + end; + Inc(FExpr); + end; + SkipBlanks; + if FExpr^ = QuoteChar then + Result := Result + GetString(QuoteChar); + end; + +var + P: PChar; +begin + SkipBlanks; + Result := tkError; + case FExpr^ of + #0: + begin + Result := tkEOF; + Exit; + end; + '!': if FExpr[1] = '=' then Promote(opNotEqual) else Result := opNot; + '&': + case FExpr[1] of + '&': Promote(opAnd); + '=': Promote(opAgnAnd) + else + Result := opBwAnd + end; + '|': + case FExpr[1] of + '|': Promote(opOr); + '=': Promote(opAgnOr) + else + Result := opBwOr + end; + '^': if FExpr[1] = '=' then Promote(opAgnXor) else Result := opXor; + '=': if FExpr[1] = '=' then Promote(opEqual) else Result := opAssign; + '>': + case FExpr[1] of + '>': + begin + Promote(opShr); + if FExpr[1] = '=' then Promote(opAgnShr); + end; + '=': Promote(opGreaterEqual) + else + Result := opGreater + end; + '<': + case FExpr[1] of + '<': + begin + Promote(opShl); + if FExpr[1] = '=' then Promote(opAgnShl); + end; + '=': Promote(opLessEqual) + else + Result := opLess + end; + '+': + case FExpr[1] of + '=': Promote(opAgnAdd); + '+': Promote(opInc) + else + Result := opAdd + end; + '-': + case FExpr[1] of + '=': Promote(opAgnSub); + '-': Promote(opDec) + else + Result := opSubtract + end; + '/': if FExpr[1] = '=' then Promote(opAgnDiv) else Result := opDiv; + '%': if FExpr[1] = '=' then Promote(opAgnMod) else Result := opMod; + '*': if FExpr[1] = '=' then Promote(opAgnMul) else Result := opMul; + '?': Result := tkQuestion; + ':': Result := tkColon; + ';': Result := tkSemicolon; + ',': Result := tkComma; + '.': Result := tkPeriod; + '~': Result := opBwNot; + '(': Result := tkOpenParen; + '[': Result := tkOpenBracket; + '{': Result := tkOpenBrace; + ')': Result := tkCloseParen; + ']': Result := tkCloseBracket; + '}': Result := tkCloseBrace; + '@': Result := tkPtr; + 'A'..'Z', '_', 'a'..'z': + begin + P := FExpr; + repeat + Inc(FExpr) + until not CharInSet(FExpr^, ['0'..'9', 'A'..'Z', '_', 'a'..'z']); + SetString(FIdent, P, FExpr - P); + Result := tkIdent; + Exit; + end; + '0'..'9': + begin + P := FExpr; + repeat + Inc(FExpr) + until not CharInSet(FExpr^, ['0'..'9', 'A'..'F', 'X', 'a'..'f', 'x']); + SetString(FIdent, P, FExpr - P); + while CharInSet(FExpr^, ['L', 'U', 'l', 'u']) do Inc(FExpr); + Result := tkNumber; + Exit; + end; + '"', '''': + begin + if FEscapeSequences then + FIdent := GetString(FExpr^) + else + FIdent := AnsiExtractQuotedStr(FExpr, FExpr^); + Result := tkString; + Exit; + end; + end; + if Result = tkError then IllegalChar(FExpr^); + Inc(FExpr) +end; + +function TCTokenizer.PeekAtNextToken: TTokenKind; +var + P: PChar; + SaveIdent: string; +begin + if not FNextTokenKnown then + begin + P := FExpr; + SaveIdent := FIdent; + FNextToken := InternalNextToken; + FNextIdent := FIdent; + FIdent := SaveIdent; + FNextTokenPos := FExpr; + FExpr := P; + FNextTokenKnown := True; + end; + Result := FNextToken; +end; + +function TCTokenizer.NextToken: TTokenKind; +begin + if FNextTokenKnown then + begin + FToken := FNextToken; + FIdent := FNextIdent; + FExpr := FNextTokenPos; + FNextTokenKnown := False; + end + else + FToken := InternalNextToken; + Result := FToken; +end; + +function TCTokenizer.PeekAtNextTokenString: string; +begin + PeekAtNextToken; + Result := FNextIdent; +end; + +function TCTokenizer.TokenInt: Longint; +var + E: Integer; +begin + Val(FIdent, Result, E); + if E <> 0 then + Error('Cannot convert to integer'); +end; + +procedure TCTokenizer.Restore; +begin + FExpr := FStoredPos; + FNextTokenKnown := False; +end; + +procedure TCTokenizer.Store; +begin + FStoredPos := FExpr; +end; + +function TCTokenizer.NextTokenExpect(Expected: TTokenKinds): TTokenKind; + + function GetFriendlyTokenDesc(T: TTokenKind; Found: Boolean): string; + const + TokenNames: array[TTokenKind] of string = + ('illegal character', 'end of expression', 'identifier', 'number', 'string literal', + 'right angle bracket (">")', + 'left angle bracket ("<")', + 'greater-or-equal-to operator (">=")', + 'less-or-equal-to operator ("<=")', + 'equality operator ("==")', + 'inequality operator ("!=")', + 'logical OR operator ("||")', + 'logical AND operator ("&&")', + 'plus sign ("+")', + 'minus sign ("-")', + 'OR sign ("|")', + 'XOR operator ("^")', + 'star sign ("*")', + 'slash ("/")', + 'AND sign ("&")', + 'SHL operator ("<<")', + 'SHR operator (">>")', + 'percent sign ("%")', + 'exclamation sign ("!")', + 'tilde ("~")', + + 'equal sign ("=")', + 'compound assignment operator ("+=")', + 'compound assignment operator ("-=")', + 'compound assignment operator ("|=")', + 'compound assignment operator ("^=")', + 'compound assignment operator ("*=")', + 'compound assignment operator ("/=")', + 'compound assignment operator ("&=")', + 'compound assignment operator ("<<=")', + 'compound assignment operator (">>=")', + 'compound assignment operator ("%=")', + + 'increment operator ("++")', + 'decrement operator ("--")', + + 'opening parenthesis ("(")', + 'opening bracket ("[")', + 'opening brace ("{")', + 'closing parenthesis (")")', + 'closing bracket ("]")', + 'closing brace ("}")', + + 'period (".")', + 'comma (",")', + 'colon (":")', + 'semicolon (";")', + 'question sign ("?")', + 'call-context-of operator ("@")'); + + begin + case T of + tkIdent: + if Found then + Result := Format('identifier "%s"', [TokenString]) + else + Result := 'identifier'; + tkNumber: + if Found then + Result := Format('number %d (0x%0:.2x)', [TokenInt]) + else + Result := 'number'; + else + Result := TokenNames[T]; + end; + end; + + function Capitalize(const S: string): string; + begin + if (S <> '') and CharInSet(S[1], ['a'..'z']) then + Result := UpCase(S[1]) + Copy(S, 2, MaxInt) + else + Result := S; + end; + +var + M1, M2: string; + I: TTokenKind; + C: Integer; +begin + Result := NextToken; + if not (Result in Expected) then + begin + C := 0; + if Expected * ExpressionStartTokens = ExpressionStartTokens then + begin + M2 := 'expression'; + Expected := Expected - ExpressionStartTokens; + end; + for I := Low(TTokenKind) to High(TTokenKind) do + if I in Expected then + begin + Inc(C); + if M2 <> '' then + begin + if M1 <> '' then M1 := M1 + ', '; + M1 := M1 + M2; + M2 := ''; + end; + M2 := GetFriendlyTokenDesc(I, False); + end; + if M2 <> '' then + if M1 <> '' then + begin + if C > 2 then M1 := M1 + ','; + M1 := M1 + ' or ' + M2 + end + else + M1 := M2; + Error(Capitalize(Format('%s expected but %s found', [M1, GetFriendlyTokenDesc(Token, True)]))); + end; +end; + +procedure TCTokenizer.EndOfExpr; +begin + NextTokenExpect([tkEOF, tkSemicolon]) +end; + + +procedure TCTokenizer.Error(const Message: string); +begin + var E := EParsingError.Create(Message); + if FExprOffset <> -1 then + E.Position := FExprOffset + (FExpr - FExprStart) + 1; + raise E; +end; + +procedure TCTokenizer.ErrorFmt(const Message: string; + Args: array of const); +begin + Error(Format(Message, Args)); +end; + +procedure TCTokenizer.IllegalChar(C: Char); +begin + raise EParsingError.CreateFmt(SIllegalChar, [C, Ord(C)]); +end; + +procedure TCTokenizer.SetPos(NewPos: PChar); +begin + FExpr := NewPos; + FNextTokenKnown := False; +end; + +end. diff --git a/Projects/ISPP/Dcu/.gitignore b/Projects/ISPP/Dcu/.gitignore new file mode 100644 index 00000000..45239335 --- /dev/null +++ b/Projects/ISPP/Dcu/.gitignore @@ -0,0 +1 @@ +*.dcu \ No newline at end of file diff --git a/Projects/ISPP/Help/.gitignore b/Projects/ISPP/Help/.gitignore new file mode 100644 index 00000000..e4436d88 --- /dev/null +++ b/Projects/ISPP/Help/.gitignore @@ -0,0 +1 @@ +ispp_generated.xml \ No newline at end of file diff --git a/Projects/ISPP/Help/Staging/.gitignore b/Projects/ISPP/Help/Staging/.gitignore new file mode 100644 index 00000000..44a0dac0 --- /dev/null +++ b/Projects/ISPP/Help/Staging/.gitignore @@ -0,0 +1,6 @@ +contents.htm +contentsindex.js +hh_generated_contents.hhc +hh_generated_index.hhk +ispp.chm +topic_*.htm diff --git a/Projects/ISPP/Help/Staging/contents-template.htm b/Projects/ISPP/Help/Staging/contents-template.htm new file mode 100644 index 00000000..3ba4cc12 --- /dev/null +++ b/Projects/ISPP/Help/Staging/contents-template.htm @@ -0,0 +1,50 @@ + + + + + +Inno Setup Preprocessor Help Contents + + + + + + + +
    + + + + + + + + +
    ContentsIndex 
    +
    + +
    + +
    +%CONTENTSTABLES% +
    + + + + + +
    + + + diff --git a/Projects/ISPP/Help/Staging/contents.css b/Projects/ISPP/Help/Staging/contents.css new file mode 100644 index 00000000..480ba716 --- /dev/null +++ b/Projects/ISPP/Help/Staging/contents.css @@ -0,0 +1,125 @@ +/* + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + Style sheet used by contents.htm +*/ + +BODY { + font-family: "Segoe UI", Tahoma, sans-serif; + font-size: 75%; /* 9pt (12px/16px) */ + margin: 0; + color: WindowText; + background-color: Window; +} +INPUT { + font: inherit; +} + + +#tabbar { + background-color: ButtonFace; + color: WindowText; + padding-top: 6px; + cursor: default; + -moz-user-select: none; +} +#tabbar TD { + padding: 0; + font-weight: bold; +} +#tabbar TD.selectedtab { + background-color: Window; + padding: 2px 6px 3px 6px; + border-bottom: none; +} +#tabbar TD.unselectedtab { + padding: 3px 7px 2px 7px; + cursor: pointer; +} +#tabbar A { + background-color: transparent; + color: WindowText; + text-decoration: none; + outline: none; +} +#tabbar TD.selectedtab A { + cursor: default; +} +#tabbar TD.unselectedtab:hover A { + color: #0078D4; +} + + +#tabbody-contents A { + /* Using inline-block because otherwise, second line of wrapped text + doesn't line up with first, and on IE6, the focus rect doesn't extend + all the way to the edges of Highlight area */ + display: inline-block; + padding: 1px 2px; +} +#tabbody-contents A:link, +#tabbody-contents A:visited, +#tabbody-contents A:active { + color: WindowText; + background-color: transparent; + text-decoration: none; +} +#tabbody-contents A:hover { + color: #0078D4; + background-color: transparent; +} +#tabbody-contents A.selectedlink:link, +#tabbody-contents A.selectedlink:visited { + color: WindowText; + background-color: ButtonFace; +} +/* It would be cleaner to use :focus, but IE<8 doesn't support it */ +#tabbody-contents A.focusedlink:link, +#tabbody-contents A.focusedlink:visited { + color: HighlightText; + background-color: Highlight; + outline-color: WindowText; /* needed for focus rect to appear on Firefox (3.5) */ +} +#tabbody-contents TABLE { + border-collapse: collapse; +} +#tabbody-contents TD { + padding: 0 0 1px 0; +} +#tabbody-contents IMG { + width: 16px; + height: 16px; + border-style: none; + padding-right: 2px; +} + + +#tabbody-index { + padding: 4px 2px; + white-space: nowrap; + -moz-user-select: none; +} +#tabbody-index A { + display: inline-block; + min-width: 100%; + overflow: visible; +} +#tabbody-index A:link, +#tabbody-index A:visited, +#tabbody-index A:active { + color: WindowText; + background-color: transparent; + text-decoration: none; +} +#tabbody-index A:hover { + color: #0078D4; + background-color: transparent; +} +#tabbody-index A:focus { + color: HighlightText; + background-color: Highlight; + outline-color: WindowText; /* needed for focus rect to appear on Firefox (3.5) */ +} diff --git a/Projects/ISPP/Help/Staging/contents.js b/Projects/ISPP/Help/Staging/contents.js new file mode 100644 index 00000000..07aee26c --- /dev/null +++ b/Projects/ISPP/Help/Staging/contents.js @@ -0,0 +1,286 @@ +/* + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + JavaScript code used by contents.htm +*/ + +function get_absolute_top(obj) +{ + var y = obj.offsetTop; + while ((obj = obj.offsetParent)) { + y += obj.offsetTop; + } + return y; +} + +function get_viewport_element() +{ + // On IE 6 in Standards mode & Firefox 1.5, properties like + // scrollTop and clientHeight are set on document.documentElement. + // On IE 5, they're on document.body; the ones on documentElement + // are zero. + + if (document.documentElement.clientHeight) { + return document.documentElement; + } else { + return document.body; + } +} + +function is_element_displayed(element) +{ + do { + if (element.style.display == "none") return false; + } while (element != document.body && (element = element.parentNode)); + + return true; +} + +function ensure_elements_visible(elementTop, elementBottom) +{ + if (!is_element_displayed(elementTop) || !is_element_displayed(elementBottom)) { + return; + } + + var yTop = get_absolute_top(elementTop); + var yBottom = get_absolute_top(elementBottom) + elementBottom.offsetHeight; + + // Subtract 1 from yTop so that if elementTop contains a link with text that starts at + // exactly yTop, the link's focus rectangle won't get chopped off on Firefox (3.x), + // where focus rectangles are inflated by 1px (unlike IE). + // (Adding 1 to yBottom isn't necessary since our TDs have 1px of bottom padding.) + if (yTop > 0) yTop--; + + // Make yTop and yBottom relative to the top of the visible client area + var viewportScrollTop = get_viewport_element().scrollTop; + yTop -= viewportScrollTop; + yBottom -= viewportScrollTop; + + var clientHeight = get_viewport_element().clientHeight; + + if (yTop < 0) { + // Scroll up to make the top of elementTop visible + window.scrollBy(0, yTop); + } else if (yBottom > clientHeight) { + // How far do we have to scroll down for elementBottom to be entirely visible? + var delta = yBottom - clientHeight; + // Don't allow any part of elementTop to be scrolled off the top + if (delta > yTop) delta = yTop; + if (delta > 0) window.scrollBy(0, delta); + } +} + +function toggle_node(id) +{ + var objContent = document.getElementById("nodecontent_" + id); + var expanding = (objContent.style.display == "none"); + objContent.style.display = expanding ? "" : "none"; + + document.getElementById("nodeimg_" + id).src = + expanding ? "images/contentsheadopen.png" : "images/contentsheadclosed.png"; + + if (expanding) { + // Scroll expanded items into view. This is similar to calling scrollIntoView() but + // doesn't do any scrolling if the items are already fully visible. + + var objCaption = document.getElementById("nodecaption_" + id); + ensure_elements_visible(objCaption, objContent); + } +} + +function init_contents(toggleNode) +{ + var i; + if (toggleNode == 0) { + for (i = 1; document.getElementById("nodecontent_" + i) != null; i++) { + toggle_node(i); + } + } else { + toggle_node(toggleNode); + } + + var elements = document.getElementById("tabbody-contents").getElementsByTagName("a"); + for (i = 0; i < elements.length; i++) { + elements[i].onfocus = node_focused; + elements[i].onblur = node_blurred; + } +} + +var curSelectedNode = null; +var curFocusedNode = null; + +function update_selected_node_class() +{ + if (curSelectedNode) { + var newClass = (curFocusedNode == curSelectedNode) ? "focusedlink" : "selectedlink"; + if (curSelectedNode.className != newClass) { + curSelectedNode.className = newClass; + } + } +} + +function set_selected_node(newSel) +{ + if (curSelectedNode == newSel) return; + + if (curSelectedNode) { + curSelectedNode.className = ""; + } + curSelectedNode = newSel; + if (curSelectedNode) { + update_selected_node_class(); + + // Expand parent nodes (may scroll) + var p = curSelectedNode; + while ((p = p.parentNode) && p.id != "tabbody-contents") { + if (p.id && p.id.indexOf("nodecontent_") == 0 && p.style.display == "none") { + toggle_node(p.id.substring(12)); + } + } + + // Then scroll the node's parent TR into view + p = curSelectedNode.parentNode.parentNode; + ensure_elements_visible(p, p); + } +} + +function node_focused(evt) +{ + curFocusedNode = evt ? evt.target : event.srcElement; + if (curFocusedNode == curSelectedNode) { + update_selected_node_class(); + } else { + set_selected_node(curFocusedNode); + } +} + +function node_blurred(evt) +{ + curFocusedNode = null; + update_selected_node_class(); +} + +var topic_name_regexp = /(?:^|[/\\])topic_([a-z0-9_\-]+)\.htm$/; + +function topic_name_from_path(path) +{ + var matches = path.match(topic_name_regexp); + return matches ? matches[1] : ""; +} + +function sync_contents() +{ + var bodyFrame = window.parent.frames["bodyframe"]; + if (!bodyFrame) return; + + var bodyTopic = topic_name_from_path(bodyFrame.window.location.pathname); + if (bodyTopic == "") return; + + // If the currently selected node already points to bodyTopic, just return. + // This check is needed to keep the selection from jumping to "[Run] section" + // when "[UninstallRun] section" is clicked (both have the same target topic). + if (curSelectedNode && topic_name_from_path(curSelectedNode.getAttribute("href")) == bodyTopic) { + return; + } + + var elements = document.getElementById("tabbody-contents").getElementsByTagName("a"); + var i; + for (i = 0; i < elements.length; i++) { + if (topic_name_from_path(elements[i].getAttribute("href")) == bodyTopic) { + if (curSelectedNode != elements[i]) { + // If we're changing the selection while a node is currently + // focused -- which can happen if Back is pressed after + // clicking/selecting a node -- we need to move the focus. + // Otherwise, the focus rectangle would stay where it is, + // while the highlight moved to a different node. + + if (curFocusedNode) elements[i].focus(); + set_selected_node(elements[i]); + } + break; + } + } +} + +function select_tab(newTab) +{ + var tabs = ["contents", "index"]; + + var i; + for (i = 0; i < tabs.length; i++) { + if (tabs[i] != newTab) { + document.getElementById("tab-" + tabs[i]).className = "unselectedtab"; + document.getElementById("tabbody-" + tabs[i]).style.display = "none"; + } + } + + document.getElementById("tab-" + newTab).className = "selectedtab"; + document.getElementById("tabbody-" + newTab).style.display = ""; + + if (newTab == "index") init_index_tab(); +} + +var indexTabInited = false; + +function init_index_tab() +{ + if (indexTabInited) return; + indexTabInited = true; + + var script = document.createElement("script"); + script.src = "contentsindex.js"; + script.type = "text/javascript"; + document.getElementsByTagName("head")[0].appendChild(script); + + // contentsindex.js calls init_index_tab_elements() +} + +function init_index_tab_elements() +{ + var html = "ERROR!"; + + if (contentsIndexData) { + var len = contentsIndexData.length; + var htmlArray = new Array(len); + var i, matches; + var re = /^([^#:]+)(#[^:]+)?:(.+)$/ + + for (i = 0; i < len; i++) { + matches = contentsIndexData[i].match(re); + if (!matches) break; + htmlArray[i] = '' + matches[3] + "
    "; + } + + // Note: On IE6, joining an array is ~5x faster than using "html +=" to build a long string + if (i == len) { // were all processed? + html = htmlArray.join(""); + } + } + + var indexBody = document.getElementById("tabbody-index"); + indexBody.onclick = index_tab_element_clicked; + indexBody.innerHTML = html; +} + +function index_tab_element_clicked(evt) +{ + // If an index link is clicked and only the hash changes on bodyframe + // (i.e. still same page), bodyframe doesn't receive any notification. + // So we must manually tell it to update the highlight. + + var element = evt ? evt.target : event.srcElement; + if (element.tagName.toLowerCase() == "a") { + var href = element.getAttribute("href"); + if (href != null && href != "" && element.getAttribute("target") == "bodyframe") { + var bodyFrame = window.parent.frames["bodyframe"]; + if (bodyFrame) { + bodyFrame.set_href_and_highlight_anchor(href); + } + } + } +} diff --git a/Projects/ISPP/Help/Staging/hh_project.hhp b/Projects/ISPP/Help/Staging/hh_project.hhp new file mode 100644 index 00000000..d48c4bf6 --- /dev/null +++ b/Projects/ISPP/Help/Staging/hh_project.hhp @@ -0,0 +1,19 @@ +[OPTIONS] +Compatibility=1.1 or later +Compiled file=ispp.chm +Contents file=hh_generated_contents.hhc +Default Window=$global_ismain +Default topic=topic_isppoverview.htm +Display compile progress=Yes +Full-text search=Yes +Full text search stop list file=stoplist.stp +Index file=hh_generated_index.hhk +Language=0x409 English (United States) +Title=Inno Setup Preprocessor Help + +[WINDOWS] +$global_ismain=,"hh_generated_contents.hhc","hh_generated_index.hhk",,,,,,,0x22520,,0x300e,,,,,,,,0 + + +[INFOTYPES] + diff --git a/Projects/ISPP/Help/Staging/images/contentsheadclosed.png b/Projects/ISPP/Help/Staging/images/contentsheadclosed.png new file mode 100644 index 00000000..fe717600 Binary files /dev/null and b/Projects/ISPP/Help/Staging/images/contentsheadclosed.png differ diff --git a/Projects/ISPP/Help/Staging/images/contentsheadopen.png b/Projects/ISPP/Help/Staging/images/contentsheadopen.png new file mode 100644 index 00000000..77a421c6 Binary files /dev/null and b/Projects/ISPP/Help/Staging/images/contentsheadopen.png differ diff --git a/Projects/ISPP/Help/Staging/images/contentstopic.png b/Projects/ISPP/Help/Staging/images/contentstopic.png new file mode 100644 index 00000000..b6633419 Binary files /dev/null and b/Projects/ISPP/Help/Staging/images/contentstopic.png differ diff --git a/Projects/ISPP/Help/Staging/images/extlink.png b/Projects/ISPP/Help/Staging/images/extlink.png new file mode 100644 index 00000000..ffe46c13 Binary files /dev/null and b/Projects/ISPP/Help/Staging/images/extlink.png differ diff --git a/Projects/ISPP/Help/Staging/index.htm b/Projects/ISPP/Help/Staging/index.htm new file mode 100644 index 00000000..dd129d3a --- /dev/null +++ b/Projects/ISPP/Help/Staging/index.htm @@ -0,0 +1,48 @@ + + + + + +Inno Setup Preprocessor Help + + + + + + + <body> + <p>Your browser does not support frames.</p> + <p><a href="contents.htm">View the table of contents</a></p> + </body> + + + diff --git a/Projects/ISPP/Help/Staging/index.php b/Projects/ISPP/Help/Staging/index.php new file mode 100644 index 00000000..86b6e52c --- /dev/null +++ b/Projects/ISPP/Help/Staging/index.php @@ -0,0 +1,17 @@ + diff --git a/Projects/ISPP/Help/Staging/stoplist.stp b/Projects/ISPP/Help/Staging/stoplist.stp new file mode 100644 index 00000000..a6bfe254 --- /dev/null +++ b/Projects/ISPP/Help/Staging/stoplist.stp @@ -0,0 +1,85 @@ +a +about +after +against +all +also +among +an +and +are +as +at +be +became +because +been +between +but +by +can +come +do +during +each +early +form +found +from +had +has +have +he +her +his +however +in +into +is +it +its +late +later +me +made +many +may +more +most +near +no +non +not +of +on +only +or +other +over +several +she +some +such +than +that +the +their +then +there +these +they +this +through +to +under +until +use +was +we +were +when +where +which +who +with +you diff --git a/Projects/ISPP/Help/Staging/styles.css b/Projects/ISPP/Help/Staging/styles.css new file mode 100644 index 00000000..9df72fd2 --- /dev/null +++ b/Projects/ISPP/Help/Staging/styles.css @@ -0,0 +1,145 @@ +/* + Inno Setup + Copyright (C) 1997-2010 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + $jrsoftware: ishelp/Staging/styles.css,v 1.7 2010/09/17 03:48:14 jr Exp $ +*/ + +BODY { + font: small arial, sans-serif; + margin: 0; +} +PRE, TT { + font: small "courier new", monospace; +} +P, H1, H2, H3, H4, H5, BLOCKQUOTE, PRE, FORM, OL, UL, LI, DL, DD, TABLE, .examplebox, DIV.margined { + /* only the end of paragraphs etc. has a margin */ + margin-top: 0; + margin-bottom: 0.6em; +} +UL, DD { + /* specify both of these for firefox compat. */ + margin-left: 0; + padding-left: 2em; +} +TABLE { + /* equivalent of cellspacing="0" */ + border-collapse: collapse; +} +TD { + /* equivalent of cellpadding="0" */ + padding: 0; + /* note: "baseline" is broken on IE6; it only aligns correctly when there's + a single line of text, and that text is directly inside the tag + (not inside a
    ). otherwise it behaves more like "top". + (firefox 1.5 and opera 9 don't have this problem) */ + vertical-align: baseline; +} +A:link, A:visited, A:active { + color: #008000; +} +A.highlighted { + background-color: #ffff00; + color: black; +} + +.small { + /* what we want is an 8pt font. 8pt/10pt = 80%, but on firefox that + actually creates a font smaller than 8pt, so use 82% */ + font-size: 82%; +} +.heading { + margin-top: 0.6em; + font-size: 120%; + font-weight: bold; +} +.notopmargin { + margin-top: 0; +} +.indent { + margin-left: 2em; +} +PRE.nomargin { + margin: 0; +} +LI.compact { + margin-bottom: 2px; +} + +.topicheading { + background: ButtonFace; + color: WindowText; + padding: 4px 8px; + margin: 0; + font-size: 120%; + font-weight: bold; +} +.topicbody { + padding: 8px; +} + +.examplebox { + background: #f8f8f8; + color: black; + padding: 4px; + border: 1px solid #e0e0e0; + /* on IE6, if the content of the box is wider than the page, + the width of the box is increased. on firefox 1.5, by default + the box width stays the same, and the content is drawn outside + the box. that looks ugly. "overflow: auto" tells it to put a + scroll bar on the box when the content is too wide. (IE6 + apparently ignores "overflow: auto", at least here.) */ + overflow: auto; +} +.exampleheader { + font-size: 82%; + font-weight: bold; + margin-bottom: 0.6em; +} + + +DT.paramlist { + margin-bottom: 0.6em; +} +DD.paramlist { + /* give a little extra spacing between items */ + margin-bottom: 1.2em; +} + +DT.flaglist { + font-weight: bold; +} + +TD.cellleft { + white-space: nowrap; +} +TD.cellright { + padding-left: 2em; +} + +TABLE.setuphdr { + margin: 0; +} +TD.setuphdrl { + font-weight: bold; + white-space: nowrap; +} +TD.setuphdrr { + padding-left: 1em; +} + + +#redirectbox { + position: absolute; + background: InfoBackground; + color: InfoText; + padding: 16px 24px; + border: 1px solid ThreeDDarkShadow; + font-size: 120%; + font-weight: bold; + box-shadow: #808080 0 0 12px; + -moz-box-shadow: #808080 0 0 12px; /* for Firefox 3.6 */ + -webkit-box-shadow: #808080 0 0 12px; /* for Chrome 6.0 */ +} diff --git a/Projects/ISPP/Help/Staging/topic.js b/Projects/ISPP/Help/Staging/topic.js new file mode 100644 index 00000000..ebcad95c --- /dev/null +++ b/Projects/ISPP/Help/Staging/topic.js @@ -0,0 +1,172 @@ +/* + Inno Setup + Copyright (C) 1997-2020 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + JavaScript code used by topic_*.htm +*/ + +window.onload = topic_loaded; + +var redirectBox = null; +var topicRedirectURL; +var curHighlightedAnchor = null; +var lastHash = ""; + +function is_href_local_anchor(path) +{ + // Returns true if an A element's HREF points to an anchor on the current page. + + if (path.charAt(0) == "#") { + return true; + } + + // On IE (6), # HREFs are prepended with a full path when read via DOM. + // Check if 'path' includes a hash, and if the part before the hash + // matches the current window.location. + + var re = /^([^#]+)(#.*)?$/; + var pathMatches = path.match(re); + if (pathMatches && pathMatches[2] !== undefined && pathMatches[2] != "") { + var curLocationMatches = window.location.href.match(re); + if (curLocationMatches && curLocationMatches[1] == pathMatches[1]) { + return true; + } + } + + return false; +} + +function get_viewport_element() +{ + // On IE 6 in Standards mode & Firefox 1.5, properties like + // scrollTop and clientHeight are set on document.documentElement. + // On IE 5, they're on document.body; the ones on documentElement + // are zero. + + if (document.documentElement.clientHeight) { + return document.documentElement; + } else { + return document.body; + } +} + +function create_redirect_box() +{ + redirectBox = document.createElement("div"); + redirectBox.id = "redirectbox"; + redirectBox.innerHTML = "Loading contents..."; + redirectBox.style.visibility = "hidden"; + document.body.appendChild(redirectBox); + + var viewport = get_viewport_element(); + redirectBox.style.left = Math.max(0, Math.floor(viewport.scrollLeft + (viewport.clientWidth - redirectBox.offsetWidth) / 2)) + "px"; + redirectBox.style.top = Math.max(0, Math.floor(viewport.scrollTop + (viewport.clientHeight - redirectBox.offsetHeight) / 2)) + "px"; + redirectBox.style.visibility = ""; +} + +function topic_loaded() +{ + document.body.onclick = topic_element_clicked; + update_anchor_highlight(); + + var matches; + + if (window == window.top && + (window.location.protocol == "http:" || window.location.protocol == "https:") && + (window.location.hostname == "jrsoftware.org" || window.location.hostname == "www.jrsoftware.org") && + (matches = window.location.pathname.match(/^(\/.+\/)topic_([a-z0-9_\-]+)\.htm$/)) && + window.location.hash != "#noredir") { + + topicRedirectURL = matches[1] + "index.php?topic=" + matches[2]; + + if ((matches = window.location.hash.match(/^#([a-zA-Z0-9_\-.]+)$/))) { + topicRedirectURL += "&anchor=" + matches[1]; + } + + create_redirect_box(); + window.setTimeout(topic_redirect, 1500); + } + + // HTML Help: If an Index entry is clicked and only the hash changes, + // we don't receive any notification by default. + if (window.location.protocol == "mk:") { + if ("onhashchange" in window) { + // IE 8+ supports the onhashchange event. + window.onhashchange = update_anchor_highlight; + } else { + // On older IE versions, we have to poll. + window.setInterval(update_anchor_highlight, 300); + } + } +} + +function topic_redirect() +{ + document.body.removeChild(redirectBox); + redirectBox = null; + + window.location.href = topicRedirectURL; +} + +function set_anchor_highlight(newAnchor) +{ + if (curHighlightedAnchor != newAnchor) { + if (curHighlightedAnchor) curHighlightedAnchor.className = ""; + curHighlightedAnchor = newAnchor; + if (curHighlightedAnchor) curHighlightedAnchor.className = "highlighted"; + } +} + +function update_anchor_highlight() +{ + var anchorName = ""; + var hash = window.location.hash; + if (hash === lastHash) { + // This function can be called from setInterval, + // so exit quickly if the hash hasn't changed. + return; + } + lastHash = hash; + if (hash.charAt(0) == "#") { + anchorName = hash.substr(1); + } + + var newAnchor = null; + if (anchorName != "") { + var anchors = document.getElementsByTagName("a"); + var i; + for (i = 0; i < anchors.length; i++) { + if (anchors[i].getAttribute("name") === anchorName) { + newAnchor = anchors[i]; + break; + } + } + } + set_anchor_highlight(newAnchor); +} + +function set_href_and_highlight_anchor(href) +{ + // At the moment an onclick event is fired, window.location.hash hasn't + // been updated yet. This function synchronously updates window.location, + // then moves the highlight to the new hash's anchor. + + // Clear current highlight first, so user doesn't see it scrolling. + lastHash = ""; + set_anchor_highlight(null); + window.location.href = href; + update_anchor_highlight(); +} + +function topic_element_clicked(evt) +{ + var element = evt ? evt.target : event.srcElement; + if (element.tagName.toLowerCase() == "a") { + var href = element.getAttribute("href"); + if (href != null && is_href_local_anchor(href)) { + set_href_and_highlight_anchor(href); + } + } +} diff --git a/Projects/ISPP/Help/compile.bat b/Projects/ISPP/Help/compile.bat new file mode 100644 index 00000000..277f874c --- /dev/null +++ b/Projects/ISPP/Help/compile.bat @@ -0,0 +1,57 @@ +@echo off + +rem Inno Setup Preprocessor +rem Copyright (C) 2001-2004 Alex Yackimoff +rem Portions by Martijn Laan +rem +rem Batch file to compile the help file + +setlocal + +if exist compilesettings.bat goto compilesettingsfound +:compilesettingserror +echo Projects\ISPP\Help\compilesettings.bat is missing or incomplete. It needs +echo to be created with the following lines, adjusted for your system: +echo. +echo set HHCEXE=%%ProgramFiles%%\HTML Help Workshop\hhc.exe [Path to help compiler] +goto failed2 + +:compilesettingsfound +set HHCEXE= +call .\compilesettings.bat +if "%HHCEXE%"=="" goto compilesettingserror + +rem ------------------------------------------------------------------------- + +echo Synching IS files: +echo. +call synch-isfiles.bat +if errorlevel 1 goto failed + +echo Generating help files using ISHelpGen: +echo. +..\..\..\ishelp\ISHelpGen\ISHelpGen.exe . +if errorlevel 1 goto failed + +echo. +echo Running HTML Help Compiler (hhc.exe): +echo. +del Staging\ispp.chm +if exist Staging\ispp.chm goto failed +"%HHCEXE%" Staging\hh_project.hhp +if %errorlevel% neq 1 goto failed +if not exist Staging\ispp.chm goto failed + +rem HHC leaves behind a temporary file each time it runs... +if exist "%TEMP%\~hh*.tmp" del /q "%TEMP%\~hh*.tmp" + +copy Staging\ispp.chm ..\..\..\Files\ISPP.chm +if not exist ..\..\..\Files\ISPP.chm goto failed + +echo Success! +exit /b 0 + +:failed +echo *** FAILED *** +:failed2 +exit /b 1 diff --git a/Projects/ISPP/Help/isetup.dtd b/Projects/ISPP/Help/isetup.dtd new file mode 100644 index 00000000..2eb104c5 --- /dev/null +++ b/Projects/ISPP/Help/isetup.dtd @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/ISPP/Help/ispp.dtd b/Projects/ISPP/Help/ispp.dtd new file mode 100644 index 00000000..cc4dc5e8 --- /dev/null +++ b/Projects/ISPP/Help/ispp.dtd @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/ISPP/Help/ispp.xml b/Projects/ISPP/Help/ispp.xml new file mode 100644 index 00000000..96a1fa4c --- /dev/null +++ b/Projects/ISPP/Help/ispp.xml @@ -0,0 +1,2109 @@ + + + + + + + define'> + undef'> + dim'> + redim'> + emit'> + error'> + include'> + insert'> + pragma'> + file'> + ifdef'> + ifndef'> + ifexist'> + ifnexist'> + if'> + elif'> + else'> + endif'> + sub'> + endsub'> + for'> + expr'> + current preprocessor output'> + preprocessor output'> + ISPPBuiltins.iss'> + +]> + + + Introduction + +

    The main purpose of Inno Setup Preprocessor (ISPP) is to automate compile-time tasks and avoid repetition in your scripts. For example, you can declare a compile-time ISPP variable ‐ containing your application name, for instance ‐ and then use its value in several places of your script. If for some reason you need to change the name of your application, you'll have to change it only once in your script. Without ISPP, you would need to change all occurrences of your application name throughout the script.

    +

    Another example of using ISPP would be gathering version information from your application at compile-time by reading the version info of an EXE file, and using it in your AppVerName [Setup] section directive or anywhere else. Without ISPP, you would have to modify your script each time the version of your application changes.

    +

    ISPP can even scan your source folder and generate script lines for the found files. Without ISPP, you would have to manually maintain the list of files.

    +

    Conditional in- and exclusion of portions of script is also possible by using ISPP: you can create one single script for different versions/levels of your applications (for example, trial versus fully functional). Without ISPP, you would need multiple scripts.

    +

    Finally, ISPP makes it possible to split long lines using a line spanning symbol.

    +

    Note: ISPP works exclusively at compile-time, and has no run-time functionality.

    +
    + All topics + + Example Script + +

    An example script called ISPPExample1.iss is located in a separate folder. Please click the "Inno Setup Example Scripts" shortcut created in the Start Menu when you installed Inno Setup, or open the "Examples" folder in your Inno Setup directory.

    +

    Also see &builtins;.

    +
    +
    + + Directives Reference + +

    There are two kinds of directives in ISPP: simple and inline.

    +

    Simple directives occupy a whole line and begin with the # symbol. For example the following defines a variable called MyAppName:

    +
    +					#define MyAppName "My Program"
    +				
    +

    Inline directives appear inside other lines and begin with {# and end with }. For example the following sets Inno Setup's AppName directive to the value of the previously defined variable:

    +
    +					[Setup]
    +					AppName={#MyAppName}
    +				
    +

    As seen in the above example it is not necessary to specify the name of the &emit; directive when it is used inline, so {#MyAppName} is short for {#emit MyAppName}.

    +
    +
    +

    Directive usage syntax uses the following conventions.

    + + + + + + + +
    ()Group of tokens.
    []Optional token or group of tokens.
    |Mutually exclusive tokens.
    ...Previous token or group of tokens can be repeated.
    tokenReserved word or symbol(s). Must be typed exactly as shown.
    <token>Non-terminal. Its syntax is either shown before, or explained.
    +
    + Available directives + + #define + + #: + define + + + + + + + + + ident=expr + + + ident()expr + + + + + + + define + : + + + + , + + + + + + + + + ident=expr + + + *ident + + + + any + int + str + func + + + + + private + protected + public + + + + +

    The first syntax ("variable-definition") defines a variable named ident, or assigns a value to an element of an array named ident (use &dim; instead of define to define the array variable itself). If none of the public, protected, or private keywords are specified, default visibility is assumed.

    +

    The second syntax ("macro-definition") defines a user defined function named ident. When defining a user defined function there must be no whitespace between the name and opening parenthesis, otherwise it will be treated as variable declaration.

    +

    The third syntax ("default-visibility-set") sets the default visibility of further variable and user defined function definitions in this file. If no visibility declaration occurs in a file, public visibility is assumed by default.

    +
    +
    +
    +						#define MyAppName "My Program"
    +						#define MyAppExe MyAppName + ".exe"
    +						#define MyAppVer GetVersionNumbersString(MyAppExe)
    +						#define MyArray[0] 15
    +						#define Multiply(int A, int B = 10) A * B
    +					
    +
    +
    +

    &dim;, &undef;, .

    +

    .

    +
    +
    + + #dim, #redim + + dim + #redim + redim + + + + dimident + + + redimident + + + [expr] + + + {expr,expr} + + + +

    Use &dim; to define an array variable, set its dimension and optionally intialize it. All unitialized elements of the array are initialized to null (void). To assign an element value after declaring the array, use &define;. Instead of assigning element values with &define;, it is also possible to set an element value by using it as the left operand of an assignment.

    +

    Use &redim; to increase or decrease the dimension of an existing array variable. All new elements of the array are initialized to null (void) and existing elements are left unchanged. Identical to &dim; if ident isn't an existing array variable.

    +
    +
    +
    +						#dim MyArray[10]
    +						#define MyArray[0] 15
    +						#redim MyArray[20]
    +						#define MyArray[10] 30
    +						#redim MyArray[10]
    +						#dim MyArray2[3] {1, 2, 3}
    +					
    +
    +
    +

    &define;, &undef;, , .

    +
    +
    + + #undef + + #x + undef + + + + ident + + + + undef + x + + + + +

    Undefines (removes) a variable or user defined function. If no visibility (public, protected, or private) is specified, ISPP first tries to remove a private variable of the given name, then protected, then public.

    +
    +
    +
    +						#undef MyVar
    +						#undef MyFunction
    +						#undef public MyVar
    +					
    +
    +
    +

    &define;, &dim;, .

    +
    +
    + + #include + + #+ + include + + + + <filename> + expr + + + + include + + + + + + +

    Includes the &translation; of the specified file. If an Unicode file is used, it must be UTF-8 (with or without a BOM) encoded

    +

    If the filename is enclosed in quotes, ISPP first searches for the file in the directory where current file resides, then in the directory where the file that included current file resides, and so on. If the file is not found, it is searched on current include path, set via &pragma;, then on the path specified by INCLUDE environment variable.

    +

    If filename is an expression or specified in angle brackets, it is searched on current include path only.

    +

    The filename may be prefixed by "compiler:", in which case it looks for the file in the Compiler directory.

    +

    This directive cannot be used inline.

    +
    +
    +
    +						#include <file.iss>
    +						#include "c:&bs;dir&bs;file.iss"
    +						#include AddBackslash(CompilerPath) + "common.iss"
    +					
    +
    +
    +

    &file;, ⊂.

    +
    +
    + + #file + file + + + fileexpr + + + +

    Replaces the directive with the name of a temporary file containing the &translation; of the specified file. Upon end of compilation, the temporary file is automatically deleted. If an Unicode file is used, it must be UTF-8 (with or without a BOM) encoded.

    +

    Including a file using this directive creates a new independent instance of the preprocessor, passing it options currently in effect and all declared identifiers. If the included file modifies options in some way, they are not propagated back.

    +

    When using this directive in Inno Setup's Source parameter of the [Files] section, specify a DestName parameter too, else the file with not be installed with the original name.

    +

    This directive can only be used inline.

    +
    +
    +
    +						[Setup]
    +						LicenseFile=&ob;#file "mylic.txt"&cb;
    +					
    +
    +
    +

    &include;.

    +
    +
    + + #emit + + #= + emit + + + + expr + + + + emit + = + + + + +

    Replaces the directive with the value of &expr;.

    +

    When used inline, the name of this directive can be omitted unless &expr; begins with the name of another directive.

    +
    +
    +
    +						[Files]
    +						#emit 'Source: "file1.ext"; DestDir: ' + MyDestDir
    +						Source: "file2.ext"; DestDir: &ob;#MyDestDir&cb;
    +						#emit GenerateVisualCppFilesEntries ; user defined function
    +						
    +						[Code]
    +						const
    +						&dsp;AppName = '&ob;#SetupSetting("AppName")&cb;';
    +					
    +
    +
    +

    expr.

    +
    +
    + + #expr + + #! + expr + + + + expr + + + + expr + ! + + + + +

    Evaluates an expression ignoring its result. This directive acts like &emit; with the exception that it doesn't emit anything to the &translation;.

    +

    This directive is intended to be used with functions that produce side effects and do not return any significant value.

    +
    +
    +
    +						#expr SaveToFile(AddBackslash(SourcePath) + "Preprocessed.iss"), Exec(AddBackslash(CompilerPath) + "Compil32.exe", """" + AddBackslash(SourcePath) + "Preprocessed.iss""")
    +					
    +
    +
    +

    &emit;.

    +
    +
    + + #insert + insert + + + insertexpr + + + +

    Changes the insertion point. By default, each processed line is added to the end of the &translation;. Using &insert; the point at which the next processed line will be added to the &translation; can be changed. &insert; takes an expression which must evaluate to an integer. The insertion point will be set to this integer.

    +

    The insertion point is also always automatically incremented each time after a line has been added to the &translation;, so that each new line is inserted after the one previously inserted.

    +

    It is not recommended to use script generating functions (such as SetSetupSetting) which may insert a line by themselves, thus shifting a part of the &translation; one line down, whereas insertion point is not updated. This may result in different insertion point than expected.

    +

    The Find function can be used to produce values for the &insert; directive.

    +
    +
    +
    +						#insert FindSectionEnd("Icons")
    +						#insert FindSection("Setup") + 1
    +						#insert Find(0, "somefile.ext", FIND_CONTAINS)
    +					
    +
    +
    +

    append.

    +
    +
    + + #append + append + + + append + + + +

    Resets the insertion point (if previously changed using &insert;) to the end of the &translation;.

    +
    +
    +

    &insert;.

    +
    +
    + + #if, #elif, #else, #endif + + if + #elif + elif + #else + else + #endif + endif + + + + ifexpr + + + elifexpr + + + else + + + endif + + + +

    The &if;, &elif;, &else;, and &endif; conditional directives control in- and exclusion of portions of script.

    +

    ISPP first evaluates the expressions following each &if; or &elif; directive until it finds one evaluating to non-zero. It then selects the portion of script following this directive up to its associated &elif;, &else;, or &endif;. Earlier portions which followed an &if; or &elif; which evaluated to zero, or which follows any next &elif; are not selected and thus not seen by the Inno Setup compiler.

    +

    If no expression evaluated to non-zero, the preprocessor selects the script portion after the &else; directive if present, otherwise nothing is selected.

    +

    Finally, after selecting any script portion, ISPP preprocesses it too, so if it contains other preprocessor directives, ISPP carries out those directives as well.

    +

    Each &if; directive in a source file must be matched by a closing &endif; directive. Any number of &elif; directives can appear between the &if; and &endif; directives, but at most one &else; directive is allowed. The &else; directive, if present, must be the last directive before &endif;.

    +

    The &if;, &elif;, &else;, and &endif; directives can be nested. Each nested &else;, &elif;, or &endif; directive belongs to the closest preceding &if; directive.

    +

    Inline conditional directives may not be mixed with simple. If the &if; directive is simple (occupying a whole line), its associated directives (&elif;, &else;, or &endif;) must also be simple and not inline (appearing inside other lines).

    +
    +
    +
    +						#define Lang
    +						
    +						[Tasks]
    +						#if "English" == Lang = ReadIni(SetupSetting("MessagesFile"), &bs;
    +						&dsp;"LangOptions", "LanguageName")
    +						&dsp;Description: "For all users"; Name: all
    +						#elif "German" == Lang
    +						&dsp;Description: "Fur alle"; Name: all
    +						#else
    +						#&sp;error Unsupported language
    +						#endif
    +					
    +
    +
    + + #ifdef, #ifndef, #ifexist, #ifnexist + + ifdef + #ifndef + ifndef + #ifexist + ifexist + #ifnexist + ifnexist + + + + ifdefident + + + ifndefident + + + ifexistexpr + + + ifnexistexpr + + + +

    You can use the &ifdef;, &ifndef;, &ifexist;, and &ifnexist; directives anywhere &if; can be used. The ifdef identifier statement is equivalent to if 1 when the specified identifier has been defined, and equivalent to if 0 when the identifier has not been defined or has been undefined with the &undef; directive. These directives check only for the presence or absence of identifiers defined with &define;.

    +

    &ifexist; and &ifnexist; directives check for presence and absence of the file, respectively.

    +
    +
    +
    +						[Files]
    +						#ifexist "myfile.ext"
    +						&dsp;Filename: "myfile.ext"; DestDir: &ob;app&cb;
    +						#endif
    +						#ifdef Enterpise
    +						&dsp;Filename: "extra.dll"; DestDir: &ob;app&cb;
    +						#endif
    +					
    +
    +
    +

    +
    +
    + + #for + for + + + for&sp;&ob;expr1;expr2;expr3&cb;expr4 + + + +

    Use the &for; directive to get loop behaviour. &for; takes 4 expressions. The first expression (expr1) is called "initialization expression," the second expression (expr2) "condition," the third expression (expr3) "action," and the final expression (expr4) "loop body."

    +

    The logic the &for; directive follows is:

    +

    &dsp;1. The initialization expression is evaluated.

    +

    &dsp;2. The condition is evaluated. If it evaluates to 0, the loop ends.

    +

    &dsp;3. The loop body is evaluated.

    +

    &dsp;4. The action is evaluated.

    +

    &dsp;5. Process repeats from 2.

    +
    +
    +
    +						// Call AddFile user defined procedure 200 times
    +						#for &ob;i = 200; i > 0; i--&cb; AddFile
    +					
    +
    +
    +

    , .

    +
    +
    +

    ⊂, &include;.

    +
    +
    + + #sub, #endsub + + sub + #endsub + endsub + + + + subident + + + endsub + + + +

    ⊂ and &endsub; directives are used to declare a user defined procedure which is a portion of script which may be included later once or several times. You may think of a user defined procedure as being similar to an external file, and a call to a user defined procedure as being similar to inclusion of an external file, except that procedures may also be called from within expressions. Please note that it is strongly not recommended to call procedures which emit several lines to the &translation; from within compound expressions or directives.

    +

    A procedure is called by simply specifying its identifier, with which it was declared.

    +

    A procedure is not processed in any way until it is called, so if any errors exist in its body, they will only pop up when the procedure is called.

    +
    +
    +
    +						#sub AddFile
    +						&dsp;#if Copy(FileName, 1, 1) == "A"
    +						&dsp;&dsp;Source: &ob;#FileName&cb;; DestDir: &ob;app&cb;&bs;A
    +						&dsp;#else
    +						&dsp;&dsp;Source: &ob;#FileName&cb;; DestDir: &ob;app&cb;
    +						&dsp;#endif
    +						#endsub
    +					
    +
    +
    +

    , .

    +
    +
    +

    , &if;, &emit;.

    +
    +
    + + #pragma + + pragma + option + parseroption + inlinestart + inlineend + verboselevel + spansymbol + + + + + + + + + + + + pragma + + + optionparseroption + + + -letter + + + +- + + + pragmaexpr + + + inlinestartinlineend + + + pragmaexpr + + + messagewarningerror + + + pragma verboselevelexpr + + + pragma includeexpr + + + pragma spansymbolexpr + + + +

    &pragma; is a special directive. Please note that if ISPP fails to parse parameters of this directive (because of typo or wrong syntax), no error will occur ‐ only a warning will be issued; this is done for compatibility with other preprocessors, which can have their own syntax of &pragma; directive.

    +

    The "pragma-option" variant of &pragma; directive controls the options which ISPP uses to read the source. Each option has an assigned letter and you specify options by typing group name (option or parseroption), +then the letter prefixed by a dash. After the letter a plus must be used to turn the option on and minus turn it off. Multiple options can be specified at once (see syntax). +The first group of options (option) controls the general options, while the second group (parseroption) controls options specific to parser. The list of options is provided at the end of this topic.

    +

    The "pragma-itokens" variant is used to specify inline directive terminators: starting and ending, respectively. After the token description keyword (inlinestart or inlineend) a string type expression must follow. It must not evaluate to an empty string. It is allowed to specify the same token for both starting and ending terminators. By default, &ob;# (opening brace and a pound sign) and &cb; (closing brace) are assumed.

    +

    The "pramga-msg" variant issues a message of the type specified by the keyword following the directive name. Messages and warnings are sent to the messages window of the compiler. Errors are shown (by the compiler) using message boxes. Expression must be of type string. Also see the &error; directive.

    +

    The "pragma-verblev" variant turns on verbose mode and sets the level of verbosity which controls the importance of messages (see below). Least important messages will show up only when highest verbose level is set.

    +

    The "pragma-include" variant sets the include path. Expression may specify multiple paths delimited with semicolons. The list of these directories is used when ISPP tries to find a file, mentioned in &include; directive.

    +

    The "prama-spansymb" variant sets the symbol used to span multiple lines together. Expression must not evaluate to an empty string. Only first symbol in string is taken.

    +
    +
    + + + + +
    cIndicates that the &translation; should be sent to the compiler after preprocessing is done. Default state: on.
    eSpecifies whether empty lines or lines with only whitespace should be emitted to the &translation;. Default state: on.
    vTurns on/off the verbose mode. Default state: off.
    +
    +
    + + + + + +
    bShort-circuit boolean evaluation. Default state: on.
    mShort-circuit multiplication evaluation. (In "0 * A", A will not be evaluated, since the result of expression is known to be zero.) Default state: off.
    pPascal-style string literals. In off state, uses C-style string literals (with escape sequences). Default state: on.
    uAllow undeclared identifiers. If an undefined identifier is encountered, ISPP will raise an error unless this option is turned on, in which case a standalone identifier (the one that does not look like a function call) will be considered void value. Default state: off.
    +
    +
    + + + + + + + + + +
    0Verbosity level messages
    1Messages about any temporary files created by #file
    2#insert and #append messages
    4#dim, #define and #undef messages
    6Conditional inclusion messages
    8#emit messages
    9Macro and functions call messages
    10Local macro array allocation messages
    +
    +
    +
    +						#pragma parseroption -b- -u+
    +						#pragma option -c-
    +						#pragma warning "Variable value is: " + Str(MyVar)
    +						#pragma option -v+
    +						#pragma verboselevel 9
    +						#pragma inlinestart "$("
    +						#pragma inlineend ")"
    +						#pragma include __INCLUDE__ + ";D:&bs;INCLUDE"
    +						#pragma spansymbol "_"
    +					
    +
    +
    +

    Message, Warning, Error.

    +
    +
    + + #error + error + + + errortext + + + +

    Causes the Inno Setup compiler to issue an error message with the specified text. Unlike pragma error, text in error directive is not parsed, so it is recommended to use this directive instead of &pragma; when possible to avoid possible syntax errors that may hide real errors your script is trying to report.

    +
    +
    +
    +						#if VER < EncodeVer(5,4,2)
    +						&dsp;#error A more recent version of Inno Setup is required to compile this script (5.4.2 or newer)
    +						#endif
    +					
    +
    +
    +

    &pragma;, &if;, Error.

    +
    +
    +
    + + + Support Functions Reference + +

    There are a number of built-in support functions which you can use to perform compile-time actions and/or change your script. For example the following uses ISPP function GetVersionNumbersString to read version info from an EXE and uses the return value of the function to set the AppVerName [Setup] section directive using ISPP directive &emit;:

    +
    +          #define MyAppVer GetVersionNumbersString(AddBackslash(SourcePath) + "MyProg.exe")
    +          
    +          [Setup]
    +          AppVerName=MyProg version {#MyAppVer}
    +        
    +
    +
    +

    Function prototypes show the function result type, name, and parameters.

    +

    Return and parameter types int, str, any, and void respectively specify the integer type, the string type, any type, and the null type. The integer type is a signed 64-bit integer. When the null type is specified as a function result type then the function does not return a value.

    +

    A question mark (?) after an parameter type means that the parameter is optional.

    +
    + Available functions + + GetStringFileInfo +
    +
    +						str GetStringFileInfo(str 1, str 2, int? 3)
    +					
    +
    + +

    Retrieves string from specified file's (first parameter) version information resource.

    +

    Second parameter is the name of the version info string-value. This should be one of the predefined strings. Those strings and shortcuts are declared in &builtins;.

    +

    Third optional parameter should specify the language and charset identifier. For example: 0x04BE0409 stands for "English (United States)." If this parameter is omitted, ISPP scans for all available version info blocks to find the value.

    +

    The function returns an empty string, if it was unable to retrieve the desired string-value.

    +
    +
    + + Int +
    +
    +						int Int(any 1, int? 2)
    +					
    +
    + +

    Converts an expression (first parameter) to its integer representation. If the expression is an integer, the result of the function is the expression value. If the expression is void, the result is 0. If the expression is string, ISPP tries to convert it to integer; if such attempt fails, an error is raised unless second parameter specifies the default result.

    +
    +
    + + Str +
    +
    +						str Str(any)
    +					
    +
    + +

    Converts an expression to string. If the expression is integer, the result is its string representation. If the expression is void, the result is an empty string. Otherwise the result is the value of the expression.

    +
    +
    + + FileExists +
    +
    +						int FileExists(str)
    +					
    +
    + +

    Returns non-zero value if the specified file exists.

    +
    +
    + + DirExists +
    +
    +						int DirExists(str)
    +					
    +
    + +

    Returns non-zero value if the specified directory exists.

    +
    +
    + + ForceDirectories +
    +
    +						int ForceDirectories(str)
    +					
    +
    + +

    Creates all the directories along the specified directory path all at once. If the first directories in the path do exist, but the latter ones don't, ForceDirectories creates just the ones that don't exist. Returns non-zero value if successful.

    +
    +
    + + FileSize +
    +
    +						int FileSize(str)
    +					
    +
    + +

    Returns size, in bytes, of the specified file. If the file does not exist, the result is -1.

    +
    +
    + + ReadIni +
    +
    str ReadIni(str 1, str 2, str 3, str? 4)
    +
    + +

    Reads the value from an INI file. Parameter 1 must be the name of the INI file, parameter 2 ‐ the name of a section in the INI file, the third parameter is the key in the section to read. Last optional parameter can be used to provide the default value that will be returned on failure, if it is omitted, an empty string is returned.

    +
    +
    + + WriteIni +
    +
    void WriteIni(str 1, str 2, str 3, any 4)
    +
    + +

    Writes specified value to an INI file. Parameter 1 is the name of the INI file, parameter 2 ‐ the name of a section in the INI file, parameter 3 ‐ the name of a key in the section. Last parameter should be set to the value you wish to be written to the INI file, it can be of any type.

    +
    +
    + + ReadReg +
    +
    any ReadReg(int 1, str 2, str? 3, any? 4)
    +
    + +

    Reads the value of the specified key in the 32-bit or 64-bit system registry. First parameter is the root key, such as HKEY_LOCAL_MACHINE (32-bit) or HKEY_LOCAL_MACHINE_64 (64-bit). Constants for use with this parameter are declared in &builtins; accompanying ISPP. Second parameter specifies a subkey. Third parameter specifies the name of the value, if this parameter is omitted, a default value is assumed. Last optional parameter may be used to specify the default value that will be returned on failure.

    +

    Note that this function can return a value of any type depending on the type of actual value in the registry.

    +
    +
    + + Exec +
    +
    int Exec(str Filename, str? Params, str? WorkingDir, int? Wait, int? ShowCmd)
    +
    + +

    Executes specified executable or batch file.

    +

    The Filename parameter specifies the filename of the executable or batch file. If this does not includes quotes then the function will add them automatically. If you have a single string containing both a filename and parameters (e.g. a command line obtained from an UninstallString registry value), you need not separate them yourself; just pass '>' in this parameter, and the full command line in the Params parameter. (Note that when this is done, the function's special platform-independent support for .bat and .cmd files is disabled; it simply passes the specified command line to CreateProcess without any processing.)

    +

    The Params parameter may be used to specify parameters for the process.

    +

    The WorkingDir parameter may be used to specify the working directory of the process. If this is omitted or empty it will try to extract a pathname from the Filename parameter and use that as the initial current directory for the process.

    +

    The Wait parameter may be set to zero if you don't wish to wait for the process to finish, and non-zero otherwise. By default, non-zero value is assumed.

    +

    The ShowCmd parameter may be any of the SW_* constants defined in &builtins;. Console programs are always hidden and the ShowCmd parameter only affects GUI programs, so always using SW_SHOWNORMAL (the default) instead of SW_HIDE is recommended.

    +

    If the Wait parameter is omitted or is non-zero, the function returns the exit code of the process. Otherwise, the function result indicates whether the process has been successfully launched (non-zero for success).

    +

    Note: compared to Pascal Scripting's Exec the Wait and ShowCmd parameters are swapped!

    +
    +
    +

    ExecAndGetFirstLine

    +
    +
    + + ExecAndGetFirstLine +
    +
    str ExecAndGetFirstLine(str Filename, str? Params, str? WorkingDir)
    +
    + +

    Executes specified executable or batch file and reads the first non-empty line from its output.

    +

    The Filename parameter specifies the filename of the executable or batch file. If this does not includes quotes then the function will add them automatically. If you have a single string containing both a filename and parameters (e.g. a command line obtained from an UninstallString registry value), you need not separate them yourself; just pass '>' in this parameter, and the full command line in the Params parameter. (Note that when this is done, the function's special platform-independent support for .bat and .cmd files is disabled; it simply passes the specified command line to CreateProcess without any processing.)

    +

    The Params parameter may be used to specify parameters for the process.

    +

    The WorkingDir parameter may be used to specify the working directory of the process. If this is omitted or empty it will try to extract a pathname from the Filename parameter and use that as the initial current directory for the process.

    +
    +
    +

    Exec

    +
    +
    + + Copy +
    +
    str Copy(str 1, int 2, int? 3)
    +
    + +

    Extracts a substring from a string (first parameter). The 1-based index of the character from which the substring should start is specified by the second parameter. The third parameter specifies the number of characters to take, if it is omitted, all characters up to the end of the string are copied to the result.

    +
    +
    + + Pos +
    +
    int Pos(str 1, str 2)
    +
    + +

    Searches for a substring (first parameter) in another string (second parameter) and returns an integer value that is the 1-based index of the first character of the substring within the second string. Pos is case-sensitive. If the substring is not found, Pos returns zero.

    +
    +
    + + RPos +
    +
    int RPos(str 1, str 2)
    +
    + +

    Searches for a substring (first parameter) in another string (second parameter) and returns an integer value that is the 1-based index of the first character of the last occurrence of the substring within the second string. RPos is case-sensitive. If the substring is not found, RPos returns zero.

    +
    +
    + + Len +
    +
    int Len(str)
    +
    + +

    Returns the length of the given string.

    +
    +
    + + SaveToFile +
    +
    void SaveToFile(str)
    +
    + +

    Saves &curtrans; to the specified file.

    +
    +
    + + Find +
    +
    int Find(int 1, str 2, int? 3, str? 4, int? 5, str? 6, int? 7)
    +
    + +

    Intended to be used with &insert; directive: returns the index of the line in the &translation; depending on specified criteria.

    +

    First parameter denotes the index of the line to start the search from, usually it is set to zero.

    +

    Second, fourth, and sixth parameters should specify string(s) to search within each line. Only the second parameter must be specified, whereas fourth and sixth may be omitted.

    +

    Third, fifth, and seventh parameters should specify the search flags for each string meaning that third parameter specifies flags for second, fifth for fourth, and seventh for sixth.

    +

    If any of the 'flags' parameters is omitted but the string parameter preceding it is specified, FIND_MATCH | FIND_AND (i. e. 0) is assumed.

    +

    Values for third, fifth, and seventh parameters of Find function are declared in &builtins;. See Find flags topic for the description of each value.

    +
    +
    +

    &insert;.

    +
    + + Find flags + +

    One of the following four values must be specified:

    +

    FIND_MATCH (0) means that the line must match the search string.

    +

    FIND_BEGINS (1) means that the line must start with the search string.

    +

    FIND_ENDS (2) means that the line must end with the search string.

    +

    FIND_CONTAINS (3) means that the line must contain (i. e. it also can match, begin, or end with) the search string.

    +

    Any of the following modifiers may be combined with one of the previous using bitwise OR operator (|):

    +

    FIND_CASESENSITIVE (4) means that comparison must be case-sensitive.

    +

    FIND_AND (0) means that this criterium (the pair of parameters in Find function) must be met as well as previous criteria.

    +

    FIND_OR (8) means that it is allowed that this criterium is tested even if previous criteria were not met.

    +

    FIND_NOT (16) means that this criterium must not be met.

    +

    FIND_AND and FIND_OR are mutually exclusive. If both are specified, FIND_OR takes precedence.

    +

    Special flags:

    +

    FIND_TRIM (32) means that leading and trailing whitespaces must be stripped off from the line prior to testing it against all the criteria. This flag can only be used in the third parameter of the Find function. It is not mutually exclusive with any of the previously mentioned flags.

    +
    +
    +
    + + SetupSetting +
    +
    str SetupSetting(str)
    +
    + +

    Parses [Setup] section in &curtrans; to find the key whose name is specified as function parameter. Function returns the value of that key if it's found, or an empty string otherwise.

    +
    +
    + + SetSetupSetting +
    +
    void SetSetupSetting(str 1, str 2)
    +
    + +

    Modifies or generates [Setup] section directive given the key (first parameter) and its value (second parameter).

    +

    If there is no [Setup] section in &curtrans; (it may happen that function is called before that section in a script), its header (as well as directive itself) is generated by this function.

    +

    Please use this function carefully ‐ it should not be called when ISPP is in insert mode (i. e. after &insert; directive).

    +
    +
    + + LowerCase +
    +
    str LowerCase(str)
    +
    + +

    Returns a string with the same text as the string passed in its parameter, but with all letters converted to lowercase. The conversion affects only 7-bit ASCII characters between 'A' and 'Z'.

    +
    +
    + + UpperCase +
    +
    str UpperCase(str)
    +
    + +

    Returns a string with the same text as the string passed in its parameter, but with all letters converted to uppercase. The conversion affects only 7-bit ASCII characters between 'A' and 'Z'.

    +
    +
    + + EntryCount +
    +
    int EntryCount(str)
    +
    + +

    Returns the total number of entries in specified section in &curtrans;. It does not count empty lines or comments. Function takes care of multiple sections with the same name and counts all of them.

    +
    +
    + + GetEnv +
    +
    str GetEnv(str)
    +
    + +

    Returns the value of the environment variable whose name is specified as the parameter. Returns an empty string if the variable is not defined.

    +
    +
    + + DeleteFile +
    +
    void DeleteFile(str)
    +
    + +

    Marks the specified file for deletion after the compilation has completed. Does not return anything. Also see DeleteFileNow.

    +
    +
    + + DeleteFileNow +
    +
    void DeleteFileNow(str)
    +
    + +

    Deletes the specified file. Does not return anything. Also see DeleteFile.

    +
    +
    + + CopyFile +
    +
    void CopyFile(str 1, str 2)
    +
    + +

    Copies an existing file (first parameter) to a new file (second parameter). If the new file already exists, it will be overwritten.

    +
    +
    + + FindFirst +
    +
    int FindFirst(str, int)
    +
    + +

    Searches the directory specified by first parameter for the first file that matches the file name implied by first parameter and the attributes specified by second parameter. If the file is found, the result is a find handle, that should be used in subsequent calls to FindGetFileName, FindNext, and functions, otherwise the return value is 0.

    +

    The first parameter is the directory and file name mask, including wildcard characters. For example, '.&bs;*.*' specifies all files in the current directory).

    +

    The second parameter specifies the special files to include in addition to all normal files. Choose from these file attribute constants defined in &builtins; when specifying this parameter:

    + + + + + + + + +
    faReadOnlyRead-only files
    faHiddenHidden files
    faSysFileSystem files
    faVolumeIDVolume ID files
    faDirectoryDirectory files
    faArchiveArchive files
    faAnyFileAny file
    +

    Attributes can be combined by OR-ing their constants or values. For example, to search for read-only and hidden files in addition to normal files, pass faReadOnly | faHidden as the parameter.

    + +
    +
    +
    +						[Files]
    +						#define FindHandle
    +						#define FindResult
    +						#define Mask "*.pas"
    +						
    +						#sub ProcessFoundFile
    +						&dsp;#define FileName FindGetFileName(FindHandle)
    +						&dsp;#if LowerCase(Copy(FileName, 1, 4)) == "ispp"
    +						&dsp;&dsp;Source: &ob;#FileName&cb;; DestDir: &ob;app&cb;&bs;ispp
    +						&dsp;#else
    +						&dsp;&dsp;Source: &ob;#FileName&cb;; DestDir: &ob;app&cb;
    +						&dsp;#endif
    +						#endsub
    +						
    +						#for &ob;FindHandle = FindResult = FindFirst(Mask, 0); FindResult; FindResult = FindNext(FindHandle)&cb; ProcessFoundFile
    +						#if FindHandle
    +						&dsp;#expr FindClose(FindHandle)
    +						#endif
    +					
    +
    +
    +

    &define;, ⊂, &if;.

    +
    +
    + + FindNext +
    +
    int FindNext(int)
    +
    + +

    Returns the next entry that matches the name and attributes specified in a previous call to FindFirst. The parameter must be a find handle returned by FindFirst. The return value is non-zero if the function was successful.

    +
    +
    + + FindClose +
    +
    void FindClose(int)
    +
    + +

    Terminates a FindFirst/FindNext sequence. The parameter must be a non-zero find handle returned by FindFirst.

    +

    This function is obsolete since 1.2. ISPP automatically frees resources allocated in a call to FindFirst.

    +
    +
    + + FindGetFileName +
    +
    str FindGetFileName(int)
    +
    + +

    Feed FindGetFileName with the find handle returned by FindFirst to get the name of the file found by the last call to FindFirst or FindNext.

    +
    +
    + + FileOpen +
    +
    int FileOpen(str)
    +
    + +

    Opens a text file for reading and returns the file handle (or zero on failure) to be used in subsequent calls to File* functions.

    + +
    +
    + + FileRead +
    +
    str FileRead(int)
    +
    + +

    Reads the next line in a text file opened with FileOpen. The only parameter should be the file handle returned by FileOpen.

    +
    +
    +
    +						#define FileHandle
    +						#define FileLine
    +						#sub ProcessFileLine
    +						&dsp;#define FileLine = FileRead(FileHandle)
    +						&dsp;#pragma message FileLine
    +						#endsub
    +						#for &ob;FileHandle = FileOpen("c:&bs;autoexec.bat"); &bs;
    +						&dsp;FileHandle && !FileEof(FileHandle); ""&cb;
    +							&bs;
    +						&dsp;ProcessFileLine
    +						#if FileHandle
    +						&dsp;#expr FileClose(FileHandle)
    +						#endif
    +					
    +
    +
    +

    &define;, ⊂, &pragma;, &for;, &if;.

    +
    +
    + + FileReset +
    +
    void FileReset(int)
    +
    + +

    Resets the file pointer to zero, so the subsequent call to FileRead will read the first line of the file. The only parameter should be the file handle returned by FileOpen.

    +
    +
    + + FileEof +
    +
    int FileEof(int)
    +
    + +

    Returns zero if the file pointer does not point to the end of the file, or non-zero otherwise. If this function returns non-zero value, subsequent calls to FileRead will fail. The only parameter should be the file handle returned by FileOpen.

    +
    +
    + + FileClose +
    +
    void FileClose(int)
    +
    + +

    Closes a file opened using FileOpen. After calling FileClose, the file handle becomes invalid.

    +

    Note: opened files which are not closed using this function will be automatically closed after the script has been preprocessed.

    +
    +
    + + SaveStringToFile +
    +
    int SaveStringToFile(str Filename, str S, int? Append, int? UTF8)
    +
    + +

    Saves the specified string to the specified file. If Append is True or ommitted and the specified file already exists, it will be appended to instead of overwritten. If UTF8 is True or ommitted, the string will be saved with UTF8 encoding instead of ASCII encoding. Returns True if successful, or False otherwise.

    +

    This function does not automatically write a line break before or after the string. If Append is True or ommitted and the existing file did not end in a line break, the function will effectively append to the existing last line. To avoid this you can put line break characters (using NewLine) before and/or after your string.

    +
    +
    +
    +						#expr SaveStringToFile('c:\filename.txt', NewLine + 'the string' + NewLine)
    +					
    +
    +
    + + GetDateTimeString +
    +
    str GetDateTimeString(str, str, str)
    +
    + +

    Returns the current date and time as a string using the specified formatting.

    +

    The first parameter is the format string. The second and third parameters denote the DateSeparator and TimeSeparator parameters explained below.

    +

    The following format specifiers are supported:

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    dDisplays the day as a number without a leading zero (1-31).
    ddDisplays the day as a number with a leading zero (01-31).
    dddDisplays the day as an abbreviation (Sun-Sat).
    ddddDisplays the day as a full name (Sunday-Saturday).
    dddddDisplays the date using the system's short date format.
    ddddddDisplays the date using the system's long date format.
    mDisplays the month as a number without a leading zero (1-12). If the m specifier immediately follows an h or hh specifier, the minute rather than the month is displayed.
    mmDisplays the month as a number with a leading zero (01-12). If the mm specifier immediately follows an h or hh specifier, the minute rather than the month is displayed.
    mmmDisplays the month as an abbreviation (Jan-Dec).
    mmmmDisplays the month as a full name (January-December).
    yyDisplays the year as a two-digit number (00-99).
    yyyyDisplays the year as a four-digit number (0000-9999).
    hDisplays the hour without a leading zero (0-23).
    hhDisplays the hour with a leading zero (00-23).
    nDisplays the minute without a leading zero (0-59).
    nnDisplays the minute with a leading zero (00-59).
    sDisplays the second without a leading zero (0-59).
    ssDisplays the second with a leading zero (00-59).
    tDisplays the time using the system's short time format.
    ttDisplays the time using the system's long time format.
    am/pmUses the 12-hour clock for the preceding h or hh specifier. Displays 'am' for any hour before noon, and 'pm' for any hour after noon. The am/pm specifier can use lower, upper, or mixed case, and the result is displayed accordingly.
    a/pUses the 12-hour clock for the preceding h or hh specifier. Displays 'a' for any hour before noon, and 'p' for any hour after noon. The a/p specifier can use lower, upper, or mixed case, and the result is displayed accordingly.
    /Displays the date separator character given by the DateSeparator parameter. If DateSeparator is set to an empty string, the system's date separator character will be used instead.
    :Displays the time separator character given by the TimeSeparator parameter. If TimeSeparator is set to an empty string, the system's time separator character will be used instead.
    'xx'/"xx"Characters enclosed in single or double quotes are displayed as-is, and do not affect formatting.
    +

    Format specifiers may be written in upper case as well as in lower case letters--both produce the same result.

    +
    +
    +
    +						#define MyDateTimeString GetDateTimeString('ddddd', '', '')
    +						#define MyDateTimeString GetDateTimeString('ddddd tt', '', '')
    +						#define MyDateTimeString GetDateTimeString('dd/mm/yyyy hh:nn:ss', '-', ':')
    +					
    +
    +
    + + GetFileDateTimeString +
    +
    str GetFileDateTimeString(str, str, str, str)
    +
    + +

    Returns the date and time of the specified file as a string using the specified formatting.

    +

    The first parameter is the file name. The second, third and fourth parameters denote the format string, DateSeparator and TimeSeparator parameters as explained in the GetDateTimeString topic.

    +
    +
    +
    +						#define MyFileDateTimeString GetFileDateTimeString('myfile.txt', 'dd/mm/yyyy hh:nn:ss', '-', ':');
    +					
    +
    +
    + + GetMD5OfString +
    +
    str GetMD5OfString(str)
    +
    + +

    Gets the MD5 sum of the specified ANSI string, as a string.

    +
    +
    +
    +						#define MD5 GetMD5OfString('Test')
    +						// MD5 = '0cbc6611f5540bd0809a388dc95a615b'
    +					
    +
    +
    + + GetMD5OfUnicodeString +
    +
    str GetMD5OfString(str)
    +
    + +

    Gets the MD5 sum of the specified Unicode string, as a string.

    +

    Causes an internal error if called during non Unicode compilation.

    +
    +
    +
    +						#define MD5 GetMD5OfUnicodeString('Test')
    +						// MD5 = '8e06915d5f5d4f8754f51892d884c477'
    +					
    +
    +
    + + GetMD5OfFile +
    +
    str GetMD5OfFile(str)
    +
    + +

    Gets the MD5 sum of the specified file, as a string.

    +
    +
    + + GetSHA1OfString +
    +
    str GetSHA1OfString(str)
    +
    + +

    Gets the SHA-1 hash of the specified ANSI string, as a string.

    +
    +
    + + GetSHA1OfUnicodeString +
    +
    str GetSHA1OfString(str)
    +
    + +

    Gets the SHA-1 hash of the specified Unicode string, as a string.

    +

    Causes an internal error if called during non Unicode compilation.

    +
    +
    + + GetSHA1OfFile +
    +
    str GetSHA1OfFile(str)
    +
    + +

    Gets the SHA-1 hash of the specified file, as a string.

    +
    +
    + + Trim +
    +
    str Trim(str)
    +
    + +

    Returns a copy of the specified string without leading and trailing spaces.

    +
    +
    + + StringChange +
    +
    str StringChange(str, str, str)
    +
    + +

    Returns a copy of the first string, with all occurrences of the second string changed to the third string.

    +
    +
    +
    +						#define MyString "a ca c"
    +						#define MyString2 StringChange(MyString, " ", "b")
    +						// MyString2 = 'abcabc'
    +					
    +
    +
    + + IsWin64 +
    +
    int IsWin64()
    +
    + +

    Returns non-zero if the system is running a 64-bit version of Windows that provides the API support Inno Setup requires to perform 64-bit installation tasks, or zero otherwise.

    +
    +
    + + Defined +
    +
    +						int Defined(<ident>)
    +						int Defined <ident>
    +					
    +
    + +

    Special function. Returns non-zero if the specified identifier is defined with &define; directive.

    +

    Using parentheses is optional.

    +
    +
    + + TypeOf +
    +
    +						int TypeOf(<ident>)
    +						int TypeOf <ident>
    +					
    +
    + +

    Special function. Returns one of predefined TypeOf constants which are declared in &builtins; for the specified identifier.

    +

    Using parentheses is optional.

    +
    +
    + + DimOf +
    +
    +						int DimOf(<ident>)
    +						int DimOf <ident>
    +					
    +
    + +

    Special function. Returns the dimension of the specified identifier.

    +

    Using parentheses is optional.

    +
    +
    +

    &dim;, &redim;.

    +
    +
    + + GetVersionNumbers +
    +
    +						str GetVersionNumbers(str Filename, int *VersionMS, int *VersionLS)
    +					
    +
    + +

    Gets the version numbers of the specified file. Returns the version as a string (in "0.0.0.0" format) if successful, an empty string otherwise.

    +

    Declared in &builtins;.

    +
    +
    +

    PackVersionNumbers

    +
    +
    + + GetVersionComponents +
    +
    +						str GetVersionComponents(str Filename, int *Major, int *Minor, int *Revision, int *Build)
    +					
    +
    + +

    Gets the individual version components of the specified file. Returns the version as a string (in "0.0.0.0" format) if successful, an empty string otherwise.

    +

    Declared in &builtins;.

    +
    +
    +

    PackVersionComponents

    +
    +
    + + GetVersionNumbersString +
    +
    +						str GetVersionNumbersString(str Filename)
    +					
    +
    + +

    Returns the version of the specified file as a string (in "0.0.0.0" format) if successful, an empty string otherwise.

    +

    Also see GetStringFileInfo, which can also be used to retrieve file versions using "FileVersion" or "ProductVersion" as the second parameter. The difference is that GetVersionNumbersString takes it from the fixed block of version info, unlike GetStringFileInfo which extracts string from the language specific block.

    +
    +
    + + GetPackedVersion +
    +
    +						str GetPackedVersion(str Filename, int *Version)
    +					
    +
    + +

    Gets the packed version of the specified file. Returns the version as a string (in "0.0.0.0" format) if successful, an empty string otherwise.

    +

    Always use ComparePackedVersion or SamePackedVersion to compare packed versions.

    +

    Declared in &builtins;.

    +
    +
    +

    PackVersionComponents

    +
    +
    + + PackVersionNumbers +
    +
    +						int PackVersionNumbers(int VersionMS, int VersionLS)
    +					
    +
    + +

    Packs version numbers into a single value.

    +

    Always use ComparePackedVersion or SamePackedVersion to compare packed versions.

    +

    Declared in &builtins;.

    +
    +
    +

    GetVersionNumbers, PackVersionComponents, UnpackVersionNumbers

    +
    +
    + + PackVersionComponents +
    +
    +						int PackVersionComponents(int Major, int Minor, int Revision, int Build)
    +					
    +
    + +

    Packs individual version components into a single value.

    +

    Always use ComparePackedVersion or SamePackedVersion to compare packed versions.

    +

    Declared in &builtins;.

    +
    +
    +

    GetVersionComponents, PackVersionNumbers, UnpackVersionComponents

    +
    +
    + + ComparePackedVersion +
    +
    +						int ComparePackedVersion(int Version1, int Version2)
    +					
    +
    + +

    Compares Version1 to Version2. The return value is less than 0 if Version1 is less than Version2, 0 if Version1 equals Version2, or greater than 0 if Version1 is greater than Version2.

    +
    +
    + + SamePackedVersion +
    +
    +						int SamePackedVersion(int Version1, int Version2)
    +					
    +
    + +

    Compares the packed versions Version1 and Version2 and returns True if they are equal.

    +
    +
    + + UnpackVersionNumbers +
    +
    +						void UnpackVersionNumbers(int Version, int *VersionMS, int *VersionLS)
    +					
    +
    + +

    Unpacks a packed version into version numbers.

    +

    Declared in &builtins;.

    +
    +
    +

    UnpackVersionComponents, PackVersionNumbers

    +
    +
    + + UnpackVersionComponents +
    +
    +						void UnpackVersionComponents(int Version, int *Major, int *Minor, int *Revision, int *Build)
    +					
    +
    + +

    Unpacks a packed version into individual version components.

    +

    Declared in &builtins;.

    +
    +
    +

    UnpackVersionNumbers, PackVersionComponents

    +
    +
    + + VersionToStr +
    +
    +						void VersionToStr(int Version)
    +					
    +
    + +

    Returns the specified packed version as a string (in "0.0.0.0" format).

    +

    Declared in &builtins;.

    +
    +
    +

    StrToVersion, UnpackVersionNumbers, UnpackVersionComponents

    +
    +
    + + StrToVersion +
    +
    +						int StrToVersion(str Version)
    +					
    +
    + +

    Returns the specified string (in "0.0.0.0" format) as a packed version.

    +

    Declared in &builtins;.

    +
    +
    +

    VersionToStr, PackVersionNumbers, PackVersionComponents

    +
    +
    + + EncodeVer +
    +
    +						int EncodeVer(int Major, int Minor, int Revision = 0, int Build = -1)
    +					
    +
    + +

    Returns given four version elements encoded to a 32 bit integer number (8 bits for each element, i.e. elements must be within 0...255 range).

    +

    Declared in &builtins;.

    +
    +
    + + DecodeVer +
    +
    +						str DecodeVer(int Version, int Digits = 3)
    +					
    +
    + +

    Returns given 32 bit integer encoded version decoded to its string representation. The Digits parameter indicates how many elements to show (if the fourth element is 0, it won't be shown anyway).

    +

    Declared in &builtins;.

    +
    +
    + + FindSection +
    +
    +						int FindSection(str Section = "Files")
    +					
    +
    + +

    Returns the index of the line following the header of the section. This function is intended to be used with &insert; directive.

    +

    Declared in &builtins;.

    +
    +
    + + FindSectionEnd +
    +
    +						int FindSectionEnd(str Section = "Files")
    +					
    +
    + +

    Returns the index of the line following last entry of the section. This function is intended to be used with #insert directive.

    +

    Declared in &builtins;.

    +
    +
    + + FindCode +
    +
    +						int FindCode()
    +					
    +
    + +

    Returns the index of the line following either the [Code] section header, or the "program" keyword, if any.

    +

    Declared in &builtins;.

    +
    +
    + + ExtractFilePath +
    +
    +						str ExtractFilePath(str PathName)
    +					
    +
    + +

    Returns the directory portion of the given filename with a backslash. If PathName doesn't contain a directory portion, the result is an empty string.

    +

    Declared in &builtins;.

    +
    +
    + + ExtractFileDir +
    +
    +						str ExtractFileDir(str PathName)
    +					
    +
    + +

    Returns the directory portion of the given filename without a backslash (unless it is a root directory). If PathName doesn't contain a directory portion, the result is an empty string.

    +

    Declared in &builtins;.

    +
    +
    + + ExtractFileExt +
    +
    +						str ExtractFileExt(str PathName)
    +					
    +
    + +

    Returns the extension portion of the given filename, NOT including the period character.

    +

    Declared in &builtins;.

    +
    +
    + + ExtractFileName +
    +
    +						str ExtractFileName(str PathName)
    +					
    +
    + +

    Returns the name portion of the given filename. If PathName ends with a backslash, the result is an empty string.

    +

    Declared in &builtins;.

    +
    +
    + + ChangeFileExt +
    +
    +						str ChangeFileExt(str FileName, str NewExt)
    +					
    +
    + +

    Changes the extension in FileName with NewExt. NewExt must not contain period.

    +

    Declared in &builtins;.

    +
    +
    + + RemoveFileExt +
    +
    +						void RemoveFileExt(str FileName)
    +					
    +
    + +

    Removes the extension in FileName.

    +

    Declared in &builtins;.

    +
    +
    + + AddBackslash +
    +
    +						str AddBackslash(str S)
    +					
    +
    + +

    Appends a backslash to the string, if it's not already there, and returns the result.

    +

    Declared in &builtins;.

    +
    +
    + + RemoveBackslash +
    +
    +						str RemoveBackslash(str S)
    +					
    +
    + +

    Removes the trailing backslash from the string unless the string points to a root directory, and returns the result.

    +

    Declared in &builtins;.

    +
    +
    + + Delete +
    +
    +						void Delete(str *S, int Index, int Count = MaxInt)
    +					
    +
    + +

    Deletes the specified number of characters beginning with Index from S. S is passed by reference (therefore is modified).

    +

    Declared in &builtins;.

    +
    +
    + + Insert +
    +
    +						void Insert(str *S, int Index, str Substr)
    +					
    +
    + +

    Inserts specified Substr at Index'th character into S. S is passed by reference (therefore is modified).

    +

    Declared in &builtins;.

    +
    +
    + + YesNo +
    +
    +						int YesNo(str S)
    +					
    +
    + +

    Returns nonzero value if given string is "yes", "true" or "1". Intended to be used with the SetupSetting function.

    +

    Declared in &builtins;.

    +
    +
    + + Power +
    +
    +						int Power(int X, int P = 2)
    +					
    +
    + +

    Declared in &builtins;.

    +
    +
    + + Min +
    +
    +						int Min(int A, int B, int C = MaxInt)
    +					
    +
    + +

    Declared in &builtins;.

    +
    +
    + + Max +
    +
    +						int Max(int A, int B, int C = MinInt)
    +					
    +
    + +

    Declared in &builtins;.

    +
    +
    + + SameText +
    +
    +						int SameText(str S1, str S2)
    +					
    +
    + +

    Returns True if the given strings are identical, ignoring case.

    +

    Declared in &builtins;.

    +
    +
    + + SameStr +
    +
    +						int SameStr(str S1, str S2)
    +					
    +
    + +

    Returns True if the given strings are identical, with case-sensitivity.

    +

    Declared in &builtins;.

    +
    +
    + + Message +
    +
    +						void Message(str S)
    +					
    +
    + +

    Functional version of pragma message.

    +
    +
    + + Warning +
    +
    +						void Warning(str S)
    +					
    +
    + +

    Functional version of pragma warning.

    +
    +
    + + Error +
    +
    +						void Error(str S)
    +					
    +
    + +

    Functional version of &error;.

    +
    +
    + + AddQuotes +
    +
    +						str AddQuotes(str S)
    +					
    +
    + +

    Adds a quote (") character to the left and right sides of the string if the string contains a space and it didn't have quotes already. This is primarily used when spawning another process with a long filename as one of the parameters.

    +
    +
    +
    + + + #define + define + Functions + Local + + User Defined Functions + +

    You can define user defined functions.

    +

    A user defined function declaration consists of a formal parameter list and an expression. That expression is evaluated when the function is called (see below). The result of the function call is the result of the expression. The expression can contain parameter names, they are treated as usual variables.

    +

    The formal syntax of a user defined function is provided in &define; and &builtins; contains many example functions.

    +

    Please note that there must be no space between the function name and opening parenthesis.

    +

    Actual parameters for parameters declared as by-reference must be modifiable l-values (in other words, other defined variables or expressions that evaluate to l-values). If the expression modifies by-reference parameter, the variable that is passed as this parameter gets modified. By-value parameters can also be modified by the expression (using assignment operators), but this modification doesn't affect the value of a variable which could be passed as this parameter.

    +

    Though a user defined function can only contain one expression, sequential evaluation operators (comma), assignment operators (simple and compound) and conditional operators (?:) can be used to build more complicated functions.

    +
    +
    +

    In context of the expression, an additional array named Local is valid. Its elements can be used for temporary storage and reusing values in sequential expressions. Values stored in Local array are neither preserved from call to call (including recursive), nor are they accessible from anywhere except the expression.

    +
    +          #define DeleteToFirstPeriod(str *S) /* user defined function declaration */ &bs;
    +          &dsp;Local[1] = Copy(S, 1, (Local[0] = Pos(".", S)) - 1), &bs;
    +          &dsp;S = Copy(S, Local[0] + 1), &bs;
    +          &dsp;Local[1]
    +        
    +
    +
    + + + + Data types + Types + Comments + + Expression Syntax + +

    ISPP uses C/C++-like expression syntax. It supports simple and compound assignment operators, conditional operator, and sequential evaluation operator. Although ISPP is an interpreter, it does support short circuit boolean evaluation and never evaluates expressions (nor calls any user defined functions mentioned in those expressions) that should not be evaluated due to specific rules (for example, when conditional operator is used, always only 2 out of 3 operands are evaluated).

    +

    &builtins; contains many example expressions.

    +
    +
    +
      +
    • ISPP does not support a number of operators (reference, dereference, namespace resolution, member selection, etc.).
    • +
    • ISPP treats an identifier and the equality sign as a name of an parameter, if it is used in parameter list.
    • +
    • Arithmetic division operator (slash) performs integer division, since ISPP does not support floating point math.
    • +
    • ISPP does not check for validity of expressions in certain cases. For example, in conditional expression, "true" operand can be of string type, whereas "false" operand can be of integer type.
    • +
    • String literals can be quoted by both single and double quotes (in both modes ‐ C-style or Pascal-style). If a literal begins with a single quote, it must also end with a single quote. Double quotes may be used in single quoted string without any escaping, and vice versa. Within a string, the character used to quote the string must be escaped (the manner depends on current state of "Pascal-style string literals" parser option, see &pragma;). Also see predefined variable NewLine.
    • +
    +
    +
    +

    There are three types in ISPP: void, integer, and string. Variable of void type is declared by just specifying its name after &define; directive without any value. Such variables should be used with &ifdef; directive or Defined function.

    +

    If "allow undeclared identifiers" parser option is off (the default state, see &pragma;), an error is raised when undefined variable is mentioned. Otherwise, it will be treated as a value of type void.

    +

    Void is compatible with integer and string in expressions. For example, you can use addition operator with void and integer operands, in this case void operand will be treated as zero. In conjunction with string, void operand is treated as an empty string.

    +
    +
    +

    Comments may be embedded in an expression by using a slash and an asterisk. For example:

    +
    +					#emit Var1 /* this is a comment */ + Var2 /* this is also a comment */
    +				
    +

    Comments may also be placed at the end of an expression by using a semicolon or two slashes. For example:

    +
    +					#emit Var1 + Var2 ; this is a comment
    +					#emit Var1 + Var2 // this is also comment
    +				
    +

    Please note that line spanning feature is triggered before any further processing, so this is also a valid comment:

    +
    +					#emit Var1 + Var2 ; this is &bs;
    +					&dsp;still a comment
    +				
    +

    Comments may also be placed anywhere by starting a line with two slashes. For example:

    +
    +					// This is a comment
    +				
    +

    All of the comments listed above are not included in the &translation;, unlike (non ISPP) comments using a semicolon at the start of a line. For example:

    +
    +					#emit Var1 + Var2 ; this comment is not included
    +					// This comment is not included
    +          ; This comment IS included
    +				
    +
    +
    +

    In ISPP, it is possible to use named parameters when calling user defined function. Given the declaration:

    +
    +					#define MyFunction(int A = 2, int B = 2) A + B
    +				
    +

    This function can be called specifying parameter names:

    +
    +					#emit MyFunction(A = 5, B = 10)
    +					#emit MyFunction(B = 3)
    +					#emit MyFunction(B = 10, A = 5)
    +				
    +
      +
    • If a name is specified for one parameter, then all (required) parameters in the list must also be named.
    • +
    • The order of named parameters does not matter.
    • +
    • +

      Because of this extension, an assignment expression must be enclosed in parentheses, if not using extended call syntax, to avoid ambiguity:

      +
      +							#emit MyFunction((MyVar = 5), 10)
      +						
      +

      In the above example, the equality sign is treated as a direct assignment operator.

      +

      Although functions do not have named parameters, it is still required to enclose assignment expressions in parentheses when calling those functions.

      +
    • +
    • +

      By standard rule, comma is used to separate actual parameters. If you need to use sequential evaluation operator, you must include the expression in parentheses:

      +
      +							#emit MyFunction((SaveToFile("script.txt"), 5), 10)
      +						
      +

      In the above example, the first comma is treated as the sequential evaluation operator, whereas the second one as the parameter delimiter.

      +
    • +
    +
    +
    + + + __COUNTER__ + __FILE__ + __INCLUDE__ + __LINE__ + __OPT_X__ + __PATHFILENAME__ + __POPT_X__ + __WIN32__ + ISPP_INVOKED + ISPPCC_INVOKED + PREPROCVER + WINDOWS + UNICODE + CompilerPath + SourcePath + Ver + NewLine + Tab + + Predefined Variables + +

    There are a number of predefined variables provided ISPP:

    + + + + + + + + + + + + + + + + + + + +
    __COUNTER__int. Automatically increments each time it is used (afterwards).
    __FILE__str. Returns the name of the current file. Empty string for the root file.
    __INCLUDE__str. Returns the current include path (or paths delimited with semicolons) set via #pragma include.
    __LINE__int. Returns the number of the line in the current file.
    __OPT_X__void. Defined if specified option set via #pragma option -x+ is in effect. In place of "X" may be any letter from "A" to "Z." Use Defined function to test whether the variable is defined.
    __PATHFILENAME__str. Similar to __FILE__, but returns the full pathname of the file. Empty string for the root file.
    __POPT_X__void. Defined if specified parser option set via #pragma parseroption -x+ is in effect. In place of "X" may be any letter from "A" to "Z." Use Defined function to test whether the variable is defined.
    __WIN32__void. Always defined.
    ISPP_INVOKEDvoid. Always defined.
    ISPPCC_INVOKEDvoid. Defined if compilation was invoked using the console-mode compiler, ISCC.exe.
    PREPROCVERint. Returns the 32-bit encoded version of ISPP. Highest byte holds the major version, lowest byte holds the build number.
    WINDOWSvoid. Always defined.
    UNICODEvoid. Always defined.
    CompilerPathstr. Points to the directory where the compiler is located.
    SourcePathstr. Points to the directory where the current script is located, or the My Documents directory if the script has not yet been saved.
    Verint. Returns the 32-bit encoded version of Inno Setup compiler. Highest byte holds the major version, lowest byte the minor version.
    NewLinestr. Returns the newline character. Declared in &builtins;.
    Tabstr. Returns the tab character. Declared in &builtins;.
    +
    +
    + + Line Spanning + +

    By ending lines with ISPP's line spanning symbol preceded with a space, you can split long lines. For example:

    +
    +          #define MyAppName &bs;
    +          &dsp;"My Program"
    +        
    +

    The default line spanning symbol is "&bs;" which can be changed using &pragma;.

    +
    +
    + + ISPPBuiltins.iss + +

    The ISPPBuiltins.iss file is part of Inno Setup Preprocessor and is automatically installed to root of your Inno Setup folder. This file is automatically included at the start of preprocessing: some of ISPP's functions are actually implemented by this file instead of being built-in. It also contains common declarations such as special constants. The file is a regular Inno Setup Script file so you can use all of its techniques in your own script as well.

    +
    +
    + + + private + protected + public + visibility + + Visibility of Identifiers + +

    Variables (as well as user defined functions, read "variable or user defined function" anywhere it says "variable" below) can be explicitly defined as "public," "protected," or "private." To define such a variable, its name in its &define; directive should be prepended with one of the visibility keywords:

    +
    +					#define public MyVar 12
    +					#define protected MyVar 13
    +					#define private MyVar 14
    +				
    +

    In the example above, none of the last two declarations undefine any of the previous, though they share the same identifier (MyVar). This is because they are declared in different visibilities.

    +

    Public variables are ordinary variables accessible from anywhere after the point they are declared.

    +

    Protected variables are accessible only in the file they are declared in and in files included by that file via &include; or &file; directives. You can basically think of them as public variables which are automatically undefined once their file has finished.

    +

    Private variables are accessible only in the file they are declared in. They are not propagated to any other file, be it included or "parent" file.

    +

    Since ISPP does not have semantics of pushing and popping variable value, visibility resolution can be useful.

    +

    Note that you cannot explicitly refer to a variable in a specific visibility from expressions. Given the example above, if MyVar is mentioned in expression in declaration file, its identifier refers to private MyVar. If it is mentioned in included file, it refers to protected MyVar. If it is mentioned in one of the files above the declaration file on the include stack (i. e. one of the files from which a chain of &include; directives resulted in processing the declaration file), it refers to public MyVar.

    +

    Also note, that if we'd swap last two declarations from the above example, private MyVar would become inaccessible (until protected is undefined) because protected would be declared after it and would take precedence. But it wouldn't undefine its private counterpart.

    +

    Each file can set a default visibility, the visibility that will be used when no resolution clause is specified in variable declaration. This can be done using &define; directive, for example:

    +
    #define protected
    +

    sets protected visibility by default.

    +

    The default visibility isn't used when evaluating expressions, it is only used when a variable is defined or undefined without explicitly specifying its visibility. When default visibility is not set, public is assumed by default. Setting default visibility is not propagated on included or parent files.

    +

    In user defined function expressions, avoid using identifiers of lower visibility than the one the user defined function is declared in. This may cause "Undeclared identifier" errors if the user defined function is called from another file.

    +

    It is recommended that you use appropriate visibility when declaring variables to avoid problems with unexpected redefinition of a variable (for example in included third-party file). If no included files depend on a variable, declare it as private. If they do, but the parent file doesn't, declare it as protected. Declare it as public otherwise. If you're unsure, then protected visibility is the common case.

    +
    +
    + + Command Line Compiler Execution + +

    If Inno Setup Preprocessor is installed the console-mode compiler ISCC.exe automatically provides extra parameters to control Inno Setup Preprocessor:

    + + + + + + + + + +
    /D<name>[=<value>]Emulate #define public <name> <value>
    /$<letter>(+|-)Emulate #pragma option -<letter>(+|-)
    /P<letter>(+|-)Emulate #pragma parseroption -<letter>(+|-)
    /I<paths>Emulate #pragma include <paths>
    /J<filename>Emulate #include <filename>
    /{#<string>Emulate #pragma inlinestart <string>
    /}<string>Emulate #pragma inlineend <string>
    /V<number>Emulate #pragma verboselevel <number>
    +

    Example: iscc /$c- /Pu+ "/DLicenseFile=Trial License.txt" /Ic:\inc;d:\inc /Jdefines.iss "c:\isetup\samples\my script.iss"

    +
    +
    + + Preprocessor output + +

    Preprocessor output refers to the preprocessed version of the script.

    +
    +
    + + Current preprocessor output + +

    Current preprocessor output refers to the &translation; up to the line which ISPP is currently processing.

    +
    +
    + +
    +
    diff --git a/Projects/ISPP/Help/ispp.xsl b/Projects/ISPP/Help/ispp.xsl new file mode 100644 index 00000000..c8b54866 --- /dev/null +++ b/Projects/ISPP/Help/ispp.xsl @@ -0,0 +1,351 @@ + + + + + + + + + + + Inno Setup Preprocessor Reference + Copyright (C) 1997-2024 Jordan Russell + Portions Copyright (C) 2000-2020 Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + Portions Copyright (C) 2001-2004 Alex Yackimoff + + This file is automatically generated. Do not edit. + + + + + Table of contents + + + + + + + + + + + + + + + + + + + + Topics + + + + + + + +abcdefghijklmnopqrstuvwxyz +ABCDEFGHIJKLMNOPQRSTUVWXYZ + + + + + + + + + + + + + +
      + + + + + +
    • +
      +
      +
      + + + +
    • +
      +
      +
      +
      +
    +
    + +
    + + + +
    + + + + + + + + +
    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + Description + + + + + + + + + + +

    +
    + + +
    +
    + + +
  • + + + + + + + + Syntax + + + + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + < + + + + > + + + + + < + + > + + + + + + + + + + + + [ + + ] + + ... + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + : + +
    + + + + +
    + +
    : +
    +
    +
    +
    +
    +
    + + +
    +
    + + + + ( + + + + ) + + + + + + + | + + + + + + + + + ( + + ) + + ... + + + + + + + \ No newline at end of file diff --git a/Projects/ISPP/Help/synch-isfiles.bat b/Projects/ISPP/Help/synch-isfiles.bat new file mode 100644 index 00000000..a5ed0bbf --- /dev/null +++ b/Projects/ISPP/Help/synch-isfiles.bat @@ -0,0 +1,11 @@ +copy ..\..\..\ishelp\isetup.dtd +copy ..\..\..\ishelp\staging\contents.css staging +copy ..\..\..\ishelp\staging\contents.js staging +copy ..\..\..\ishelp\staging\styles.css staging +copy ..\..\..\ishelp\staging\topic.js staging +copy ..\..\..\ishelp\staging\images\contentsheadclosed.png staging\images +copy ..\..\..\ishelp\staging\images\contentsheadopen.png staging\images +copy ..\..\..\ishelp\staging\images\contentstopic.png staging\images +copy ..\..\..\ishelp\staging\images\extlink.png staging\images + +pause \ No newline at end of file diff --git a/Projects/ISPP/ISPP.dpr b/Projects/ISPP/ISPP.dpr new file mode 100644 index 00000000..179a3710 --- /dev/null +++ b/Projects/ISPP/ISPP.dpr @@ -0,0 +1,48 @@ +{ + Inno Setup Preprocessor + Copyright (C) 2001-2002 Alex Yackimoff + + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. +} + +library ISPP; + +uses + SysUtils, + Windows, + Classes, + CompPreprocInt in '..\Src\CompPreprocInt.pas', + IsppPreprocess in 'IsppPreprocess.pas', + IsppPreprocessor in 'IsppPreprocessor.pas', + IsppFuncs in 'IsppFuncs.pas', + IsppVarUtils in 'IsppVarUtils.pas', + IsppConsts in 'IsppConsts.pas', + IsppStack in 'IsppStack.pas', + IsppIntf in 'IsppIntf.pas', + IsppParser in 'IsppParser.pas', + IsppIdentMan in 'IsppIdentMan.pas', + IsppSessions in 'IsppSessions.pas', + CTokenizer in 'CTokenizer.pas', + IsppBase in 'IsppBase.pas', + PathFunc in '..\..\Components\PathFunc.pas', + CmnFunc2 in '..\Src\CmnFunc2.pas', + FileClass in '..\Src\FileClass.pas', + Int64Em in '..\Src\Int64Em.pas', + MD5 in '..\Src\MD5.pas', + SHA1 in '..\Src\SHA1.pas', + Struct in '..\Src\Struct.pas'; + +{$IMAGEBASE $01800000} +{$SETPEOSVERSION 6.1} +{$SETPESUBSYSVERSION 6.1} +{$WEAKLINKRTTI ON} + +{$R ISPP.version.res} + +exports + ISPreprocessScript name 'ISPreprocessScriptW'; + +end. diff --git a/Projects/ISPP/ISPP.dproj b/Projects/ISPP/ISPP.dproj new file mode 100644 index 00000000..4556c9fa --- /dev/null +++ b/Projects/ISPP/ISPP.dproj @@ -0,0 +1,130 @@ + + + {7BEFDB9E-3F9B-4206-BAC1-B332E573D3F8} + ISPP.dpr + True + Debug + 1 + Library + None + 19.5 + Win32 + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + 01800000 + 1 + 1 + vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOfficeXP;$(DCC_UsePackage) + true + ISPP + true + 0 + true + 1033 + CompanyName=Jordan Russell;FileDescription=Inno Setup Preprocessor;FileVersion=0.0.0.0;InternalName=;LegalCopyright=Copyright (C) 1997-2010 Jordan Russell. Portions Copyright (C) 2000-2010 Martijn Laan. Copyright © 2001-2004 Alex Yackimoff.;LegalTrademarks=;OriginalFilename=;ProductName=Inno Setup;ProductVersion=0.0.0.0;Comments=Inno Setup home page: http://www.innosetup.com + System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + false + false + false + false + false + false + false + Dcu\$(MainSource) + + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + 1033 + + + RELEASE;$(DCC_Define) + 0 + false + 0 + ..\..\Files + + + DEBUG;$(DCC_Define) + false + true + ..\Bin + ..\Bin\Compil32.exe + Debug.iss + ..\Bin + + + + MainSource + + + + + + + + + + + + + + + + + + + + + + + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + + + + Delphi.Personality.12 + + + + + ISPP.dpr + + + + True + False + + + 12 + + + + diff --git a/Projects/ISPP/ISPP.version.res b/Projects/ISPP/ISPP.version.res new file mode 100644 index 00000000..7df92a3a Binary files /dev/null and b/Projects/ISPP/ISPP.version.res differ diff --git a/Projects/ISPP/IsppBase.pas b/Projects/ISPP/IsppBase.pas new file mode 100644 index 00000000..a84ed320 --- /dev/null +++ b/Projects/ISPP/IsppBase.pas @@ -0,0 +1,79 @@ +{ + Inno Setup Preprocessor + Copyright (C) 2001-2002 Alex Yackimoff + + Inno Setup + Copyright (C) 1997-2010 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. +} + +unit IsppBase; + +interface + +uses IsppIntf, SysUtils; + +type + + ICallContext = interface; + + PIsppVariant = ^TIsppVariant; + TIsppVariant = record + Typ: TIsppVarType; + AsStr: string; + AsCallContext: ICallContext; + case TIsppVarType of + evInt: (AsInt: Int64); + evLValue: (AsPtr: PIsppVariant); + end; + + TIsppParamFlags = set of (pfTypeDefined, pfHasDefault, pfByRef, pfFunc); + + TIsppMacroParam = record + Name: string; + ParamFlags: TIsppParamFlags; + DefValue: TIsppVariant; + end; + + PParamList = ^TParamList; + TParamList = array[Byte] of TIsppMacroParam; + + TArgGroupingStyle = (agsNone, agsParenteses, agsBrackets, agsBraces); + + ICallContext = interface + procedure Add(const Name: string; const Value: TIsppVariant); + function Call: TIsppVariant; + function GroupingStyle: TArgGroupingStyle; + procedure Clone(out NewContext: ICallContext); + end; + + TIdentType = (itUnknown, itVariable, itMacro, itFunc, itDefinedFunc, + itTypeOfFunc, itDimOfFunc); + + IIdentManager = interface + function GetIdent(const Name: string; out CallContext: ICallContext): TIdentType; + function Defined(const Name: string): Boolean; + function TypeOf(const Name: string): Byte; + function DimOf(const Name: string): Integer; + end; + +function GetOption(const Options: TOptions; Option: Char): Boolean; +procedure SetOption(var Options: TOptions; Option: Char; Value: Boolean); + +implementation + +function GetOption(const Options: TOptions; Option: Char): Boolean; +begin + Result := (Ord(UpCase(Option)) - Ord('A')) in Options +end; + +procedure SetOption(var Options: TOptions; Option: Char; Value: Boolean); +begin + if Value then + Include(Options, Ord(UpCase(Option)) - Ord('A')) + else + Exclude(Options, Ord(UpCase(Option)) - Ord('A')) +end; + +end. diff --git a/Projects/ISPP/IsppConsts.pas b/Projects/ISPP/IsppConsts.pas new file mode 100644 index 00000000..415547b5 --- /dev/null +++ b/Projects/ISPP/IsppConsts.pas @@ -0,0 +1,118 @@ +{ + Inno Setup Preprocessor + Copyright (C) 2001-2002 Alex Yackimoff + + Inno Setup + Copyright (C) 1997-2020 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. +} + +unit IsppConsts; + +interface + +const + + { Common words/expressions } + + SLocal = 'LOCAL'; + SGlobal = 'GLOBAL'; + SAny = 'ANY'; + SInt = 'INT'; + SStr = 'STR'; + SIdent = 'Identifier'; + + { Directive parsing } + + SByRefNoDefault = 'By-reference parameter cannot have a default value'; + SDirectiveCannotBeInline = 'Directive ''%s'' cannot be inline'; + SDoubleElse = '''else'' was already specified'; + SElifAfterElse = '''elif'' after ''else'''; + SElseWithoutIf = '''else'' without ''if'''; + SEndifExpected = '''endif'' expected'; + SEndifWithoutIf = '''endif'' without ''if'''; + SErrorWhileOpeningFile = 'Error %d while opening file %s'; + SErrorWhileReadingFile = 'Error %d while reading file %s'; + SFileDirectiveCanBeOnlyInline = '''file'' directive can be only inline'; + SFileIsAlreadyBeingIncluded = 'File %s is already being included'; + SFileNotFound = 'File not found: %s'; + SInsertLineNoTooBig = 'Line number %d is out of current translation'; + SInvalidOptionName = 'Invalid option name'; + SInvalidTypeId = 'Invalid type identifier: %s'; + SMacroExpressionExpected = 'Macro expression expected'; + SNonEmptyStringExpected = 'Non empty string expected'; + STooManyFormalParams = 'Too many formal parameters'; + SUnknownPreprocessorDirective = 'Unknown preprocessor directive'; + SUnterminatedPreprocessorDirectiv = 'Unterminated preprocessor directive'; + + { Warnings } + + SDirectiveNotYetSupported = 'Directive ''%s'' not yet supported'; + SFailedToParsePragmaDirective = 'Failed to parse ''pragma'' directive'; + SFuncIdentForIfdef = 'Function identifier passed to ''ifdef''/''ifndef'' directive'; + SSpecFuncIdentForIfdef = 'Special function identifier passed to ''ifdef''/''ifndef'' directive, result is undefined'; + SSpecifiedConditionEvalatedToVoid = 'Specified condition evaluated to void, to test variable for existence use "defined" function'; + + { Status messages } + + SIncludingFile = 'Including file: %s'; + SProcessingExternalFile = 'Processing file: %s'; + + { Verbose messages } + + SChangedVerboseLevel = 'Changed level of verbosity: %d'; + SChangingInsertionPointToLine = 'Changing insertion point to line %d'; + SFinishedConditionalInclusion = 'Finished conditional inclusion (''endif'')'; + SLineEmitted = 'Emitted line: %s'; + SResettingInsertionPoint = 'Resetting insertion point'; + SStartingConditionalInclusionIf = 'Starting conditional inclusion (''if'')'; + STemporaryFileCreated = 'Created temporary file: %s'; + SUpdatingConditionalInclusionElif = 'Updating conditional inclusion (''elif'')'; + SUpdatingConditionalInclusionElse = 'Updating conditional inclusion (''else'')'; + + { Ident manager errors } + + SAllocatingMacroLocalArrayUpToEle = 'Allocating macro %s Local array up to element %d'; + SArrayDeclared = '%s array declared: %s'; + SArrayReDimmed = '%s array redimensioned: %s'; + SErrorExecutingMacro = 'Error at %1:d:%d in macro %0:s:'#13#10#13#10'%3:s'; + SErrorExecutingMacroFile = 'Error in %1:s at %d:%d in macro %0:s:'#13#10#13#10'%4:s'; + SErrorExecutingMacroUnexpected = 'Error executing macro %s: %s'; + SFuncError = 'Unexpected error when calling function %s'; + SFuncsNoSupportNamedParams = 'Functions do not support named parameters'; + SIndexIsOutOfArraySize = 'Index %d is out of array %s size'; + SIndexNotSpecifiedForArray = 'Index not specified for array %s'; + SInsufficientParams = 'Insufficient parameters'; + SLocalArraysIndexError = 'Local arrays can have up to 16 elements (0 to 15)'; + SLValueRequiredForByRefParam = 'L-value required for by-reference parameter %s'; + SMacroDefined = '%s macro defined: %s'; + SParameterlessVariable = 'Variable does not expect any parameters'; + SParamSpecifiedTwice = 'Parameter %s specified twice'; + SRedeclaredIdentifier = 'Identifier redeclared: %s'; + SRequiredParamMissing = 'Required parameter %s missing'; + SSuccessfullyCalledFunction = 'Successfully called function %s'; + SSuccessfullyCalledMacro = 'Successfully called macro %s'; + STooManyActualParams = 'Too many actual parameters'; + SUndefined = '%s %s undefined: %s'; + SUnknownParam = 'Unknown parameter: %s'; + SVariableDefined = '%s variable defined: %s'; + SWrongParamType = 'Actual parameter %s is not of the declared type'; + SBadLength = 'Bad dimension'; + + { Parser errors } + + SActualParamsNamingConflict = 'All actual parameters must appear either in order of their declaration, or by names'; + SCannotConvertToInteger = 'Cannot convert "%s" to integer'; + SExpectedButFound = '%s expected but %s found'; + SIllegalChar = 'Illegal character in input file: ''%s'' (0x%-2x)'; + SIntegerExpressionExpected = 'Integer expression expected'; + SLValueRequired = 'Left side cannot be assigned to (expression is not an l-value)'; + SOperatorNotApplicableToThisOpera = 'Operator not applicable to this operand type'; + SStringExpressionExpected = 'String expression expected'; + SUndeclaredIdentifier = 'Undeclared identifier: %s'; + SWrongUnaryOperator = 'Wrong unary operator'; + +implementation + +end. diff --git a/Projects/ISPP/IsppFuncs.pas b/Projects/ISPP/IsppFuncs.pas new file mode 100644 index 00000000..896d989e --- /dev/null +++ b/Projects/ISPP/IsppFuncs.pas @@ -0,0 +1,2032 @@ +{ + Inno Setup Preprocessor + Copyright (C) 2001-2002 Alex Yackimoff + + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. +} + +unit IsppFuncs; + +interface + +uses + Windows, Classes, IsppVarUtils, IsppIntf, IsppPreprocessor, IsppParser; + +procedure RegisterFunctions(Preproc: TPreprocessor); + +implementation + +uses + SysUtils, IniFiles, Registry, Math, IsppConsts, IsppBase, IsppIdentMan, + IsppSessions, DateUtils, FileClass, MD5, SHA1, PathFunc, CmnFunc2, Int64Em; + +var + IsWin64: Boolean; + +function PrependPath(const Ext: Longint; const Filename: String): String; +begin + var Preprocessor := TObject(Ext) as TPreprocessor; + Result := PathExpand(Preprocessor.PrependDirName(Filename, + Preprocessor.SourcePath)); +end; + +function CheckParams(const Params: IIsppFuncParams; + Types: array of TIsppVarType; Minimum: Byte; var Error: TIsppFuncResult): Boolean; +var + I: Integer; +begin + FillChar(Error, SizeOf(TIsppFuncResult), 0); + Result := False; + if Params.GetCount < Minimum then + begin + Error.ErrParam := Minimum; + Error.Error := ISPPFUNC_INSUFARGS; + Exit; + end + else if Params.GetCount > (High(Types) + 1) then + begin + Error.ErrParam := High(Types) + 1; + Error.Error := ISPPFUNC_MANYARGS; + Exit; + end + else + with IInternalFuncParams(Params) do + for I := 0 to Params.GetCount - 1 do + begin + if (Types[I] = evSpecial) or (Get(I)^.Typ = evNull) then Continue; + if Types[I] <> Get(I)^.Typ then + begin + if Types[I] = evStr then + Error.Error := ISPPFUNC_STRWANTED + else + Error.Error := ISPPFUNC_INTWANTED; + Error.ErrParam := I; + Exit; + end; + end; + Result := True; +end; + +function Int(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; + + procedure MakeError(E: Exception); + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL; + end; + +begin + if CheckParams(Params, [evSpecial, evInt], 1, Result) then + try + with IInternalFuncParams(Params) do + ResPtr^ := ToInt(Get(0)^); + except + on E: EConvertError do + with IInternalFuncParams(Params) do + begin + if GetCount > 1 then + ResPtr^ := Get(1)^ + else + MakeError(E); + end; + on E: Exception do + MakeError(E); + end; +end; + +function Str(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evSpecial], 1, Result) then + try + with IInternalFuncParams(Params) do + ResPtr^ := ToStr(Get(0)^); + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +{FileExists()} +function FileExists(Ext: Longint; const Params: IIsppFuncParams; const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + MakeBool(ResPtr^, NewFileExists(PrependPath(Ext, Get(0).AsStr))); + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function DirExists(Ext: Longint; const Params: IIsppFuncParams; const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + MakeBool(ResPtr^, CmnFunc2.DirExists(PrependPath(Ext, Get(0).AsStr))); + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function ForceDirectoriesFunc(Ext: Longint; const Params: IIsppFuncParams; const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + MakeBool(ResPtr^, ForceDirectories(PrependPath(Ext, Get(0).AsStr))); + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +{FileSize()} +function FileSize(Ext: Longint; const Params: IIsppFuncParams; const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + SearchRec: TSearchRec; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + if FindFirst(PrependPath(Ext, Get(0).AsStr), faAnyFile, SearchRec) = 0 then begin + try + MakeInt(ResPtr^, SearchRec.Size); + finally + FindClose(SearchRec); + end; + end else + MakeInt(ResPtr^, -1); + end + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +{ReadIni(,,,[])} +function ReadIni(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + Default: string; +begin + if CheckParams(Params, [evStr, evStr, evStr, evStr], 3, Result) then + try + with IInternalFuncParams(Params) do + with TIniFile.Create(Get(0).AsStr) do + try + if GetCount < 4 then Default := '' else Default := Get(3).AsStr; + MakeStr(ResPtr^, ReadString(Get(1).AsStr, Get(2).AsStr, Default)); + finally + Free + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function WriteIni(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evStr, evStr, evStr, evSpecial], 4, Result) then + try + with IInternalFuncParams(Params) do + with TIniFile.Create(Get(0).AsStr) do + try + case Get(3).Typ of + evInt: WriteInteger(Get(1).AsStr, Get(2).AsStr, Get(3).AsInt); + evStr: WriteString(Get(1).AsStr, Get(2).AsStr, Get(3).AsStr); + else + WriteString(Get(1).AsStr, Get(2).AsStr, ''); + end; + ResPtr^ := NULL; + finally + Free; + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +{ReadReg(,,[,])} +function ReadReg(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +const + ISPPRootKeyFlagMask = $7F000000; + ISPPRootKeyFlag64Bit = $02000000; + ISPPRootKeyValidFlags = ISPPRootKeyFlag64Bit; + + procedure CrackISPPRootKey(const ISPPRootKey: Longint; var RegView64: Boolean; + var RootKey: HKEY); + begin + { Allow only predefined key handles (8xxxxxxx). Can't accept handles to + open keys because they might have our special flag bits set. + Also reject unknown flags which may have a meaning in the future. } + if (ISPPRootKey shr 31 <> 1) or + ((ISPPRootKey and ISPPRootKeyFlagMask) and not ISPPRootKeyValidFlags <> 0) then + raise Exception.Create('Invalid root key value'); + + if ISPPRootKey and ISPPRootKeyFlag64Bit <> 0 then begin + if not IsWin64 then + raise Exception.Create('Cannot access 64-bit registry keys on this version of Windows'); + RegView64 := True + end + else + RegView64 := False; + RootKey := ISPPRootKey and not ISPPRootKeyFlagMask; + end; + +var + Name: string; + Default: TIsppVariant; + RegView64: Boolean; + ARootKey: HKEY; + AAccess: LongWord; +begin + if CheckParams(Params, [evInt, evStr, evStr, evSpecial], 2, Result) then + try + with IInternalFuncParams(Params) do begin + CrackISPPRootKey(Get(0).AsInt, RegView64, ARootKey); + AAccess := KEY_QUERY_VALUE; + if RegView64 then + AAccess := AAccess or KEY_WOW64_64KEY; + with TRegistry.Create(AAccess) do + try + RootKey := ARootKey; + if GetCount < 3 then Name := '' else Name := Get(2).AsStr; + if GetCount < 4 then Default := NULL else Default := Get(3)^; + if OpenKey(Get(1).AsStr, False) and ((Name = '') or ValueExists(Name)) then + case GetDataType(Name) of + rdString, rdExpandString: MakeStr(ResPtr^, ReadString(Name)); + rdInteger: MakeInt(ResPtr^, ReadInteger(Name)); + else + CopyExpVar(Default, ResPtr^); + end + else + CopyExpVar(Default, ResPtr^); + finally + Free + end; + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function GetEnvFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + MakeStr(ResPtr^, GetEnv(Get(0).AsStr)); + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +const + SSetup = '[SETUP]'; + +function SetupSetting(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; + + function Find(L: TStrings; const S: string): string; + var + I, J: Integer; + InSetupSection: Boolean; + N: string; + begin + InSetupSection := False; + Result := ''; + with L do + for I := 0 to Count - 1 do + begin + if Trim(Strings[I]) = '' then Continue; + if InSetupSection then + begin + if (Trim(Strings[I])[1] = '[') then + begin + if CompareText(Trim(Strings[I]), SSetup) <> 0 then + InSetupSection := False; + Continue; + end; + J := Pos('=', Strings[I]); + if J > 0 then N := Trim(Copy(Strings[I], 1, J - 1)); + if CompareText(N, S) = 0 then + begin + Result := Trim(Copy(Strings[I], J + 1, MaxInt)); + Break; + end; + end + else + if CompareText(Trim(Strings[I]), SSetup) = 0 then InSetupSection := True; + end; + end; + +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + MakeStr(ResPtr^, Find(TPreprocessor(Ext).StringList, Get(0).AsStr)); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +{SetSetupSetting(,)} +function SetSetupSetting(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; + + procedure DoSet(L: TStrings; const S, V: string); + var + I, J, FirstSetupSectionLine: Integer; + InSetupSection: Boolean; + N: string; + begin + FirstSetupSectionLine := -1; + InSetupSection := False; + with L do + begin + for I := 0 to Count - 1 do + begin + if Trim(Strings[I]) = '' then Continue; + if InSetupSection then + begin + if (Trim(Strings[I])[1] = '[') then + begin + if CompareText(Trim(Strings[I]), SSetup) <> 0 then + InSetupSection := False; + Continue; + end; + J := Pos('=', Strings[I]); + if J > 0 then N := Trim(Copy(Strings[I], 1, J - 1)); + if CompareText(N, S) = 0 then + begin + Strings[I] := S + '=' + V; + Exit; + end; + end + else + if CompareText(Trim(Strings[I]), SSetup) = 0 then + begin + InSetupSection := True; + if FirstSetupSectionLine < 0 then + FirstSetupSectionLine := I; + end; + end; + if FirstSetupSectionLine < 0 then + FirstSetupSectionLine := L.Add(SSetup); + L.Insert(FirstSetupSectionLine + 1, S + '=' + V); + end; + end; + +begin + if CheckParams(Params, [evStr, evStr], 2, Result) then + try + with IInternalFuncParams(Params) do + begin + ResPtr^.Typ := evNull; + DoSet(TPreprocessor(Ext).StringList, Get(0).AsStr, Get(1).AsStr); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +{EntryCount()} +function EntryCountFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + I, J: Integer; + DoCount: Boolean; + N, S: string; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + J := 0; + DoCount := False; + with IInternalFuncParams(Params), TStringList(TPreprocessor(Ext).StringList) do + begin + S := Get(0).AsStr; + for I := 0 to Count - 1 do + begin + N := Trim(Strings[I]); + if (N <> '') and (N[1] <> ';') and (N[1] = '[') then + begin + if DoCount then + DoCount := False + else + if CompareText(Copy(N, 2, Length(N) - 2), S) = 0 then + DoCount := True; + Continue; + end; + if DoCount and (N <> '') and (N[1] <> ';') then Inc(J); + end; + MakeInt(ResPtr^, J); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +{SaveToFile()} +function SaveToFile(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + TPreprocessor(Ext).SaveToFile(PrependPath(Ext, Get(0).AsStr)); + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +{Find([,[,,[,[,]]]])} +function FindLine(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +const + FIND_WHEREMASK = $01 or $02; + FIND_SENSITIVE = $04; + FIND_OR = $08; + FIND_NOT = $10; + FIND_TRIM = $20; +type + TFindWhere = (fwMatch, fwBegin, fwEnd, fwContains); +var + I: Integer; + StartFromLine: Integer; + Found, MoreFound, Second, Third: Boolean; + Flags: array[0..2] of Integer; + Strs: array[0..2] of string; + Str: string; + + function Compare(const S1, S2: string; Sensitive: Boolean): Boolean; + begin + if Sensitive then + Result := AnsiCompareStr(S1, S2) = 0 + else + Result := AnsiCompareText(S1, S2) = 0; + end; + + function Contains(const Substr: string; Sensitive: Boolean): Boolean; + var + L, I: Integer; + begin + Result := True; + L := Length(Substr); + for I := 1 to Length(Str) - L + 1 do + if Compare(Substr, Copy(Str, I, L), Sensitive) then Exit; + Result := False; + end; + + function Meets(const Substr: string; Sensitive: Boolean; Where: Byte): Boolean; + begin + Result := False; + case Where of + 1: if Length(Substr) <= Length(Str) then + Result := Compare(Substr, Copy(Str, 1, Length(Substr)), Sensitive); + 2: if Length(Substr) <= Length(Str) then + Result := Compare(Substr, Copy(Str, Length(Str) - Length(Substr) + 1, Length(Substr)), Sensitive); + 3: if Length(Substr) <= Length(Str) then + Result := Contains(Substr, Sensitive); + else Result := Compare(Substr, Str, Sensitive); + end; + end; + +begin + if CheckParams(Params, [evInt, evStr, evInt, evStr, evInt, evStr, evInt], 2, Result) then + try + with IInternalFuncParams(Params) do + begin + FillChar(Flags, SizeOf(Flags), 0); + Strs[0] := Get(1).AsStr; + Second := False; + Third := False; + if GetCount > 2 then + begin + Flags[0] := Get(2).AsInt; + if GetCount > 3 then + begin + Strs[1] := Get(3).AsStr; + Second := True; + if GetCount > 4 then + begin + Flags[1] := Get(4).AsInt; + if GetCount > 5 then + begin + Strs[2] := Get(5).AsStr; + Third := True; + if GetCount > 6 then Flags[2] := Get(6).AsInt; + end + end; + end + end; + StartFromLine := Get(0).AsInt; + if StartFromLine < 0 then StartFromLine := 0; + with TStringList(TPreprocessor(Ext).StringList) do + for I := StartFromLine to Count - 1 do + begin + Str := Strings[I]; + if Flags[0] and FIND_TRIM <> 0 then + Str := Trim(Str); + Found := Meets(Strs[0], Flags[0] and FIND_SENSITIVE <> 0, + Flags[0] and FIND_WHEREMASK) xor (Flags[0] and FIND_NOT <> 0); + + if Second and (((Flags[1] and FIND_OR <> 0{OR}) and not Found) or + ((Flags[1] and FIND_OR = 0{AND}) and Found)) then + begin + MoreFound := Meets(Strs[1], Flags[1] and FIND_SENSITIVE <> 0, + Flags[1] and FIND_WHEREMASK) xor (Flags[1] and FIND_NOT <> 0); + if Flags[1] and FIND_OR <> 0 then + Found := Found or MoreFound + else + Found := Found and MoreFound; + end; + + if Third and (((Flags[2] and FIND_OR <> 0{OR}) and not Found) or + ((Flags[2] and FIND_OR = 0{AND}) and Found)) then + begin + MoreFound := Meets(Strs[2], Flags[2] and FIND_SENSITIVE <> 0, + Flags[2] and FIND_WHEREMASK) xor (Flags[2] and FIND_NOT <> 0); + if Flags[2] and FIND_OR <> 0 then + Found := Found or MoreFound + else + Found := Found and MoreFound; + end; + + if Found then + begin + MakeInt(ResPtr^, I); + Exit; + end; + end; + MakeInt(ResPtr^, -2); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function Exec(const Filename, Params: String; WorkingDir: String; + const WaitUntilTerminated: Boolean; const ShowCmd: Integer; + const Preprocessor: TPreprocessor; const Log: Boolean; const LogProc: TLogProc; + const LogProcData: NativeInt; var ResultCode: Integer): Boolean; +var + CmdLine: String; + WorkingDirP: PChar; + StartupInfo: TStartupInfo; + ProcessInfo: TProcessInformation; +begin + {This function is a combination of InstFuncs' InstExec and Compile's InternalSignCommand } + + if Filename = '>' then + CmdLine := Params + else begin + if (Filename = '') or (Filename[1] <> '"') then + CmdLine := '"' + Filename + '"' + else + CmdLine := Filename; + if Params <> '' then + CmdLine := CmdLine + ' ' + Params; + if SameText(PathExtractExt(Filename), '.bat') or + SameText(PathExtractExt(Filename), '.cmd') then begin + { See InstExec for explanation } + CmdLine := '"' + AddBackslash(GetSystemDir) + 'cmd.exe" /C "' + CmdLine + '"' + end; + if WorkingDir = '' then + WorkingDir := PathExtractDir(Filename); + end; + + FillChar (StartupInfo, SizeOf(StartupInfo), 0); + StartupInfo.cb := SizeOf(StartupInfo); + StartupInfo.dwFlags := STARTF_USESHOWWINDOW; + StartupInfo.wShowWindow := ShowCmd; + if WorkingDir <> '' then + WorkingDirP := PChar(WorkingDir) + else + WorkingDirP := nil; + + var OutputReader: TCreateProcessOutputReader := nil; + try + var InheritHandles := False; + var dwCreationFlags: DWORD := CREATE_DEFAULT_ERROR_MODE; + + if Log and Assigned(LogProc) and WaitUntilTerminated then begin + OutputReader := TCreateProcessOutputReader.Create(LogProc, LogProcData); + OutputReader.UpdateStartupInfo(StartupInfo, InheritHandles); + if InheritHandles then + dwCreationFlags := dwCreationFlags or CREATE_NO_WINDOW; + end; + + Result := CreateProcess(nil, PChar(CmdLine), nil, nil, InheritHandles, + dwCreationFlags, nil, WorkingDirP, StartupInfo, ProcessInfo); + if not Result then begin + ResultCode := GetLastError; + Exit; + end; + + { Don't need the thread handle, so close it now } + CloseHandle(ProcessInfo.hThread); + if OutputReader <> nil then + OutputReader.NotifyCreateProcessDone; + + try + if WaitUntilTerminated then begin + while True do begin + case WaitForSingleObject(ProcessInfo.hProcess, 50) of + WAIT_OBJECT_0: Break; + WAIT_TIMEOUT: + begin + if OutputReader <> nil then + OutputReader.Read(False); + Preprocessor.CallIdleProc; { Doesn't allow an Abort } + end; + else + Preprocessor.RaiseError('Exec: WaitForSingleObject failed'); + end; + end; + if OutputReader <> nil then + OutputReader.Read(True); + end; + { Get the exit code. Will be set to STILL_ACTIVE if not yet available } + if not GetExitCodeProcess(ProcessInfo.hProcess, DWORD(ResultCode)) then + ResultCode := -1; { just in case } + finally + CloseHandle(ProcessInfo.hProcess); + end; + finally + OutputReader.Free; + end; +end; + +procedure ExecLog(const S: String; const Error, FirstLine: Boolean; const Data: NativeInt); +begin + var Preprocessor := TPreprocessor(Data); + if Error then + Preprocessor.WarningMsg(S) + else + Preprocessor.StatusMsg('Exec output: %s', [S]); +end; + +{ + int Exec(str FileName, str Params, str WorkingDir, int Wait, int ShowCmd, int Log) +} + +function ExecFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evStr, evStr, evStr, evInt, evInt, evInt], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + var ParamsS, WorkingDir: String; + var WaitUntilTerminated := True; + var ShowCmd := SW_SHOWNORMAL; + if GetCount > 1 then ParamsS := Get(1).AsStr; + if GetCount > 2 then WorkingDir := PrependPath(Ext, Get(2).AsStr); + if (GetCount > 3) and (Get(3).Typ <> evNull) then WaitUntilTerminated := Get(3).AsInt <> 0; + if (GetCount > 4) and (Get(4).Typ <> evNull) then ShowCmd := Get(4).AsInt; + var Preprocessor := TPreprocessor(Ext); + var ResultCode: Integer; + var Success := Exec(Get(0).AsStr, ParamsS, WorkingDir, WaitUntilTerminated, + ShowCmd, Preprocessor, True, ExecLog, NativeInt(Preprocessor), ResultCode); + if not WaitUntilTerminated then + MakeBool(ResPtr^, Success) + else + MakeInt(ResPtr^, ResultCode); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +type + PExecAndGetFirstLineLogData = ^TExecAndGetFirstLineLogData; + TExecAndGetFirstLineLogData = record + Preprocessor: TPreprocessor; + Line: String; + end; + +procedure ExecAndGetFirstLineLog(const S: String; const Error, FirstLine: Boolean; const Data: NativeInt); +begin + var Data2 := PExecAndGetFirstLineLogData(Data); + if not Error and (Data2.Line = '') and (S.Trim <> '') then + Data2.Line := S; + ExecLog(S, Error, FirstLine, NativeInt(Data2.Preprocessor)); +end; + +{ + str ExecAndGetFirstLine(str FileName, str Params, str WorkingDir,) +} + +function ExecAndGetFirstLineFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evStr, evStr, evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + var ParamsS, WorkingDir: String; + if GetCount > 1 then ParamsS := Get(1).AsStr; + if GetCount > 2 then WorkingDir := PrependPath(Ext, Get(2).AsStr); + var Data: TExecAndGetFirstLineLogData; + Data.Preprocessor := TPreprocessor(Ext); + Data.Line := ''; + var ResultCode: Integer; + var Success := Exec(Get(0).AsStr, ParamsS, WorkingDir, True, + SW_SHOWNORMAL, Data.Preprocessor, True, ExecAndGetFirstLineLog, NativeInt(@Data), ResultCode); + if Success then + MakeStr(ResPtr^, Data.Line) + else begin + Data.Preprocessor.WarningMsg('CreateProcess failed (%d).', [ResultCode]); + ResPtr^.Typ := evNull; + end; + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function LenFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + MakeInt(ResPtr^, Length(Get(0).AsStr)); + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function CopyFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + S: string; + B, C: Int64; +begin + if CheckParams(Params, [evStr, evInt, evInt], 2, Result) then + try + with IInternalFuncParams(Params) do + begin + S := Get(0).AsStr; + B := Get(1).AsInt; + if GetCount > 2 then C := Get(2).AsInt else C := MaxInt; + + { Constrain 64-bit arguments to 32 bits without truncating them } + if B < 1 then + B := 1; + if C > Maxint then + C := Maxint; + if (B > Maxint) or (C < 0) then begin + { Result should be empty in these cases } + B := 1; + C := 0; + end; + + MakeStr(ResPtr^, Copy(S, Integer(B), Integer(C))); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function PosFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evStr, evStr], 2, Result) then + try + with IInternalFuncParams(Params) do + begin + MakeInt(ResPtr^, Pos(Get(0).AsStr, Get(1).AsStr)); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function LowerCaseFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + MakeStr(ResPtr^, LowerCase(Get(0).AsStr)); + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function UpperCaseFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + MakeStr(ResPtr^, UpperCase(Get(0).AsStr)); + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function RPosFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; + + function RPos(const Substr, S: string): Integer; + begin + for Result := Length(S) - Length(Substr) + 1 downto 1 do + if Copy(S, Result, Length(Substr)) = Substr then + Exit; + Result := 0; + end; + +begin + if CheckParams(Params, [evStr, evStr], 2, Result) then + try + with IInternalFuncParams(Params) do + begin + MakeInt(ResPtr^, RPos(Get(0).AsStr, Get(1).AsStr)); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function GetVersionNumbersStringFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + Filename: string; + VersionHandle: Cardinal; + SIZE: Cardinal; + S: UINT; + Buf: Pointer; + FI: PVSFixedFileInfo; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + ResPtr^.Typ := evNull; + Filename := PrependPath(Ext, Get(0).AsStr); + Size := GetFileVersionInfoSize(PChar(Filename), VersionHandle); + if Size > 0 then + begin + GetMem(Buf, Size); + try + GetFileVersionInfo(PChar(Filename), VersionHandle, Size, Buf); + if VerQueryValue(Buf, '\', Pointer(FI), S) then + begin + MakeStr(ResPtr^, + IntToStr((FI.dwFileVersionMS and $FFFF0000) shr 16) + '.' + + IntToStr(FI.dwFileVersionMS and $FFFF) + '.' + + IntToStr((FI.dwFileVersionLS and $FFFF0000) shr 16) + '.' + + IntToStr(FI.dwFileVersionLS and $FFFF) + ); + end; + finally + FreeMem(Buf) + end; + end + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function ComparePackedVersionFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evInt, evInt], 2, Result) then + try + with IInternalFuncParams(Params) do + MakeInt(ResPtr^, Compare64(Integer64(Get(0).AsInt), Integer64(Get(1).AsInt))); + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function SamePackedVersionFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evInt, evInt], 2, Result) then + try + with IInternalFuncParams(Params) do + if Compare64(Integer64(Get(0).AsInt), Integer64(Get(1).AsInt)) = 0 then + MakeInt(ResPtr^, 1) + else + MakeInt(ResPtr^, 0) + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +{str GetStringFileInfo(str FileName, str StringName, int Lang)} +function GetFileVersionInfoItem(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + Buf: Pointer; + + function GetStringFileInfo(Lang: UINT; const Name: string; var Value: string): Boolean; + var + InfoBuf: Pointer; + InfoBufSize: Longword; + begin + Result := VerQueryValue(Buf, PChar('\StringFileInfo\' + IntToHex(LoWord(Lang), 4) + + IntToHex(HiWord(Lang), 4) + + '\' + Name), InfoBuf, InfoBufSize) and (InfoBufSize > 0); + if Result then SetString(Value, PChar(InfoBuf), InfoBufSize - 1) + end; + +type + TUINTArray = array[0..$100] of UINT; + PUINTArray = ^TUINTArray; +var + Filename: string; + VersionHandle: Cardinal; + Size: Integer; + Langs: PUINTArray; + LangCount, I: Integer; + Lang, LangsSize: UINT; + Value: string; + Success: Boolean; +begin + if CheckParams(Params, [evStr, evStr, evInt], 2, Result) then + try + with IInternalFuncParams(Params) do + begin + Success := False; + ResPtr^.Typ := evNull; + Filename := PrependPath(Ext, Get(0).AsStr); + Size := GetFileVersionInfoSize(PChar(Filename), VersionHandle); + if Size > 0 then + begin + GetMem(Buf, Size); + try + GetFileVersionInfo(PChar(Filename), VersionHandle, Size, Buf); + if GetCount > 2 then + begin + Lang := Get(2).AsInt; + Success := GetStringFileInfo(Lang, Get(1).AsStr, Value); + end + else + begin + if VerQueryValue(Buf, PChar('\VarFileInfo\Translation'), Pointer(Langs), + LangsSize) then + begin + LangCount := LangsSize div 4; + for I := 0 to LangCount - 1 do + begin + Success := GetStringFileInfo(Langs[I], Get(1).AsStr, Value); + if Success then Break; + end; + end; + end; + if Success then + MakeStr(ResPtr^, Value); + finally + FreeMem(Buf) + end; + end; + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function DelFileFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + QueueFileForDeletion(PrependPath(Ext, Get(0).AsStr)); + ResPtr^.Typ := evNull; + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function DelFileNowFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + DeleteFile(PChar(PrependPath(Ext, Get(0).AsStr))); + ResPtr^.Typ := evNull; + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function CopyFileFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evStr, evStr], 2, Result) then + try + with IInternalFuncParams(Params) do + begin + CopyFile(PChar(PrependPath(Ext, Get(0).AsStr)), PChar(PrependPath(Ext, Get(1).AsStr)), False); + ResPtr^.Typ := evNull; + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +type + PSearchRec = ^TSearchRec; + +procedure GarbageCloseFind(Item: Pointer); +begin + FindClose(PSearchRec(Item)^); + Dispose(Item); +end; + +function FindFirstFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + Filename: string; + F: PSearchRec; +begin + if CheckParams(Params, [evStr, evInt], 2, Result) then + try + with IInternalFuncParams(Params) do + begin + Filename := PrependPath(Ext, Get(0).AsStr); + New(F); + ResPtr^.Typ := evInt; + if FindFirst(Filename, Get(1).AsInt, F^) = 0 then + begin + ResPtr^.AsInt := Integer(F); + TPreprocessor(Ext).CollectGarbage(F, @GarbageCloseFind); + end + else + begin + ResPtr^.AsInt := 0; + Dispose(F); + end; + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function FindNextFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evInt], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + ResPtr.Typ := evInt; + if FindNext(PSearchRec(Get(0).AsInt)^) = 0 then + ResPtr^.AsInt := 1 + else + ResPtr^.AsInt := 0; + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function FindGetFileName(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evInt], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + MakeStr(ResPtr^, PSearchRec(Get(0).AsInt)^.Name); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function FindCloseFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evInt], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + FindClose(PSearchRec(Get(0).AsInt)^); + Dispose(PSearchRec(Get(0).AsInt)); + TPreprocessor(Ext).UncollectGarbage(Pointer(Get(0).AsInt)); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +procedure GarbageCloseFile(Item: Pointer); +var + F: ^TextFile; +begin + F := Item; + Close(F^); + Dispose(F); +end; + +function FileOpenFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + F: ^TextFile; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + New(F); + try + with IInternalFuncParams(Params) do + begin + FileMode := fmOpenRead or fmShareDenyWrite; + AssignFile(F^, PrependPath(Ext, Get(0).AsStr)); + {$I-} + Reset(F^); + {$I+} + if IOResult <> 0 then + begin + Dispose(F); + MakeInt(ResPtr^, 0) + end + else + begin + MakeInt(ResPtr^, Integer(F)); + TPreprocessor(Ext).CollectGarbage(F, @GarbageCloseFile); + end; + end; + except + Dispose(F); + raise + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function FileReadFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + F: ^TextFile; + S: string; +begin + if CheckParams(Params, [evInt], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + Integer(F) := Get(0).AsInt; + if Integer(F) = 0 then + raise Exception.Create('Invalid file handle'); + {$I-} + Readln(F^, S); + {$I+} + if IOResult <> 0 then + ResPtr^ := NULL + else + MakeStr(ResPtr^, S); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function FileResetFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + F: ^TextFile; +begin + if CheckParams(Params, [evInt], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + Integer(F) := Get(0).AsInt; + if Integer(F) = 0 then + raise Exception.Create('Invalid file handle'); + {$I-} + Reset(F^); + {$I+} + if IOResult <> 0 then + raise Exception.Create('Failed to reset a file') + else + ResPtr^ := NULL + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function FileEofFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + F: ^TextFile; + IsEof: Boolean; +begin + if CheckParams(Params, [evInt], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + Integer(F) := Get(0).AsInt; + if Integer(F) = 0 then + raise Exception.Create('Invalid file handle'); + {$I-} + IsEof := Eof(F^); + {$I+} + if IOResult <> 0 then + ResPtr^ := NULL + else + MakeBool(ResPtr^, IsEof); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function FileCloseFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + F: ^TextFile; +begin + if CheckParams(Params, [evInt], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + Integer(F) := Get(0).AsInt; + if Integer(F) = 0 then + raise Exception.Create('Invalid file handle'); + {$I-} + Close(F^); + {$I+} + ResPtr^ := NULL; + Dispose(F); + TPreprocessor(Ext).UncollectGarbage(Pointer(F)); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function SaveStringToFileFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + Filename: String; + F: TextFile; + DoAppend: Boolean; + CodePage: Word; +begin + if CheckParams(Params, [evStr, evStr, evInt, evInt], 2, Result) then + try + with IInternalFuncParams(Params) do + begin + Filename := PrependPath(Ext, Get(0).AsStr); + if (GetCount < 3) or (Get(2).AsInt <> 0) then DoAppend := True else DoAppend := False; + if (GetCount < 4) or (Get(3).AsInt <> 0) then CodePage := CP_UTF8 else CodePage := 0; + DoAppend := DoAppend and NewFileExists(Filename); + AssignFile(F, FileName, CodePage); + {$I-} + if DoAppend then + Append(F) + else + Rewrite(F); + {$I+} + if IOResult <> 0 then + MakeInt(ResPtr^, 0) + else begin + try + MakeInt(ResPtr^, 1); + if not DoAppend and (CodePage = CP_UTF8) then + Write(F, #$FEFF); //Strings are UTF-16 so this UTF-16 BOM will actually be saved as an UTF-8 BOM + Write(F, Get(1).AsStr); + finally + CloseFile(F); + end; + end; + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +type + PDateTime = ^TDateTime; + +procedure GarbageReleaseDateTime(Item: Pointer); +begin + Dispose(Item); +end; + +function FileGetDate(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + FileDate: PDateTime; + Age: TDateTime; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + if FileAge(PrependPath(Ext, Get(0).AsStr), Age) then + begin + New(FileDate); + FileDate^ := Age; + TPreprocessor(Ext).CollectGarbage(FileDate, GarbageReleaseDateTime); + MakeInt(ResPtr^, Int64(FileDate)); + end + else + MakeInt(ResPtr^, -1); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function GetNow(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + DateTime: PDateTime; +begin + if CheckParams(Params, [], 0, Result) then + try + with IInternalFuncParams(Params) do + begin + New(DateTime); + DateTime^ := Now; + TPreprocessor(Ext).CollectGarbage(DateTime, GarbageReleaseDateTime); + MakeInt(ResPtr^, Int64(DateTime)); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function GetDateFromDT(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evInt], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + MakeInt(ResPtr^, DateTimeToTimeStamp(PDateTime(Get(0).AsInt)^).Date); + end; + except + on E: EAccessViolation do + begin + FuncResult.Error('Invalid datetime value'); + Result.Error := ISPPFUNC_FAIL; + end; + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function GetTimeFromDT(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evInt], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + MakeInt(ResPtr^, DateTimeToTimeStamp(PDateTime(Get(0).AsInt)^).Time); + end; + except + on E: EAccessViolation do + begin + FuncResult.Error('Invalid datetime value'); + Result.Error := ISPPFUNC_FAIL; + end; + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function GetDateTimeString(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + NewDateSeparatorString, NewTimeSeparatorString: String; + OldDateSeparator, OldTimeSeparator: Char; +begin + if CheckParams(Params, [evStr, evStr, evStr], 3, Result) then + try + with IInternalFuncParams(Params) do + begin + OldDateSeparator := FormatSettings.DateSeparator; + OldTimeSeparator := FormatSettings.TimeSeparator; + try + NewDateSeparatorString := Get(1).AsStr; + NewTimeSeparatorString := Get(2).AsStr; + if NewDateSeparatorString <> '' then + FormatSettings.DateSeparator := NewDateSeparatorString[1]; + if NewTimeSeparatorString <> '' then + FormatSettings.TimeSeparator := NewTimeSeparatorString[1]; + MakeStr(ResPtr^, FormatDateTime(Get(0).AsStr, Now())); + finally + FormatSettings.TimeSeparator := OldTimeSeparator; + FormatSettings.DateSeparator := OldDateSeparator; + end; + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function GetFileDateTimeString(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + NewDateSeparatorString, NewTimeSeparatorString: String; + OldDateSeparator, OldTimeSeparator: Char; + Age: TDateTime; +begin + if CheckParams(Params, [evStr, evStr, evStr, evStr], 4, Result) then + try + with IInternalFuncParams(Params) do + begin + OldDateSeparator := FormatSettings.DateSeparator; + OldTimeSeparator := FormatSettings.TimeSeparator; + try + NewDateSeparatorString := Get(2).AsStr; + NewTimeSeparatorString := Get(3).AsStr; + if NewDateSeparatorString <> '' then + FormatSettings.DateSeparator := NewDateSeparatorString[1]; + if NewTimeSeparatorString <> '' then + FormatSettings.TimeSeparator := NewTimeSeparatorString[1]; + if not FileAge(PrependPath(Ext, Get(0).AsStr), Age) then begin + FuncResult.Error('Invalid file name'); + Result.Error := ISPPFUNC_FAIL + end else + MakeStr(ResPtr^, FormatDateTime(Get(1).AsStr, Age)); + finally + FormatSettings.TimeSeparator := OldTimeSeparator; + FormatSettings.DateSeparator := OldDateSeparator; + end; + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function GetMD5OfFile(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + F: TFile; + NumRead: Cardinal; + Context: TMD5Context; + Buf: array[0..65535] of Byte; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + MD5Init(Context); + F := TFile.Create(PrependPath(Ext, Get(0).AsStr), fdOpenExisting, faRead, fsReadWrite); + try + while True do begin + NumRead := F.Read(Buf, SizeOf(Buf)); + if NumRead = 0 then Break; + MD5Update(Context, Buf, NumRead); + end; + finally + F.Free; + end; + MakeStr(ResPtr^, MD5DigestToString(MD5Final(Context))); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function GetMD5OfString(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + S: AnsiString; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + S := AnsiString(Get(0).AsStr); + MakeStr(ResPtr^, MD5DigestToString(MD5Buf(Pointer(S)^, Length(S)*SizeOf(S[1])))); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function GetMD5OfUnicodeString(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + S: UnicodeString; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + S := Get(0).AsStr; + MakeStr(ResPtr^, MD5DigestToString(MD5Buf(Pointer(S)^, Length(S)*SizeOf(S[1])))); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function GetSHA1OfFile(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + F: TFile; + NumRead: Cardinal; + Context: TSHA1Context; + Buf: array[0..65535] of Byte; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + SHA1Init(Context); + F := TFile.Create(PrependPath(Ext, Get(0).AsStr), fdOpenExisting, faRead, fsReadWrite); + try + while True do begin + NumRead := F.Read(Buf, SizeOf(Buf)); + if NumRead = 0 then Break; + SHA1Update(Context, Buf, NumRead); + end; + finally + F.Free; + end; + MakeStr(ResPtr^, SHA1DigestToString(SHA1Final(Context))); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function GetSHA1OfString(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + S: AnsiString; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + S := AnsiString(Get(0).AsStr); + MakeStr(ResPtr^, SHA1DigestToString(SHA1Buf(Pointer(S)^, Length(S)*SizeOf(S[1])))); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function GetSHA1OfUnicodeString(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + S: UnicodeString; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + S := Get(0).AsStr; + MakeStr(ResPtr^, SHA1DigestToString(SHA1Buf(Pointer(S)^, Length(S)*SizeOf(S[1])))); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function TrimFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + MakeStr(ResPtr^, Trim(Get(0).AsStr)); + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function StringChangeFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + S: String; +begin + if CheckParams(Params, [evStr, evStr, evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + S := Get(0).AsStr; + StringChangeEx(S, Get(1).AsStr, Get(2).AsStr, True); + MakeStr(ResPtr^, S); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function IsWin64Func(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [], 0, Result) then + try + with IInternalFuncParams(Params) do + begin + MakeBool(ResPtr^, IsWin64); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function MessageFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do begin + { Also see Pragma in IsppPreprocessor } + TPreprocessor(Ext).StatusMsg(Get(0).AsStr); + ResPtr^ := NULL; + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function WarningFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do begin + { Also see Pragma in IsppPreprocessor } + TPreprocessor(Ext).WarningMsg(Get(0).AsStr); + ResPtr^ := NULL; + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +function ErrorFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +var + CatchException: Boolean; + ErrorMsg: String; +begin + CatchException := True; + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do begin + { Also see Pragma and pcErrorDir in IsppPreprocessor } + ErrorMsg := Get(0).AsStr; + if ErrorMsg = '' then ErrorMsg := 'Error'; + CatchException := False; + TPreprocessor(Ext).RaiseError(ErrorMsg); + end; + except + on E: Exception do + begin + if CatchException then begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end else + raise; + end; + end; +end; + +function AddQuotesFunc(Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; +begin + if CheckParams(Params, [evStr], 1, Result) then + try + with IInternalFuncParams(Params) do + begin + MakeStr(ResPtr^, AddQuotes(Get(0).AsStr)); + end; + except + on E: Exception do + begin + FuncResult.Error(PChar(E.Message)); + Result.Error := ISPPFUNC_FAIL + end; + end; +end; + +procedure RegisterFunctions(Preproc: TPreprocessor); +begin + with Preproc do + begin + { -1 as Ext parameter means that function will be called with Ext set to + preprocessor instance instead of -1. } + RegisterFunction('Int', Int, -1); + RegisterFunction('Str', Str, -1); + RegisterFunction('FileExists', FileExists, -1); + RegisterFunction('DirExists', DirExists, -1); + RegisterFunction('ForceDirectories', ForceDirectoriesFunc, -1); + RegisterFunction('FileSize', FileSize, -1); + RegisterFunction('ReadIni', ReadIni, -1); + RegisterFunction('WriteIni', WriteIni, -1); + RegisterFunction('ReadReg', ReadReg, -1); + RegisterFunction('Exec', ExecFunc, -1); + RegisterFunction('ExecAndGetFirstLine', ExecAndGetFirstLineFunc, -1); + RegisterFunction('Copy', CopyFunc, -1); + RegisterFunction('Pos', PosFunc, -1); + RegisterFunction('RPos', RPosFunc, -1); + RegisterFunction('Len', LenFunc, -1); + RegisterFunction('GetVersionNumbersString', GetVersionNumbersStringFunc, -1); + RegisterFunction('ComparePackedVersion', ComparePackedVersionFunc, -1); + RegisterFunction('SamePackedVersion', SamePackedVersionFunc, -1); + RegisterFunction('GetStringFileInfo', GetFileVersionInfoItem, -1); + RegisterFunction('SaveToFile', IsppFuncs.SaveToFile, -1); + RegisterFunction('Find', FindLine, -1); + RegisterFunction('SetupSetting', SetupSetting, -1); + RegisterFunction('SetSetupSetting', SetSetupSetting, -1); + RegisterFunction('LowerCase', LowerCaseFunc, -1); + RegisterFunction('UpperCase', UpperCaseFunc, -1); + RegisterFunction('EntryCount', EntryCountFunc, -1); + RegisterFunction('GetEnv', GetEnvFunc, -1); + RegisterFunction('DeleteFile', DelFileFunc, -1); + RegisterFunction('DeleteFileNow', DelFileNowFunc, -1); + RegisterFunction('CopyFile', CopyFileFunc, -1); + RegisterFunction('ReadEnv', GetEnvFunc, -1); + RegisterFunction('FindFirst', FindFirstFunc, -1); + RegisterFunction('FindNext', FindNextFunc, -1); + RegisterFunction('FindGetFileName', FindGetFileName, -1); + RegisterFunction('FindClose', FindCloseFunc, -1); + RegisterFunction('FileOpen', FileOpenFunc, -1); + RegisterFunction('FileRead', FileReadFunc, -1); + RegisterFunction('FileReset', FileResetFunc, -1); + RegisterFunction('FileEof', FileEofFunc, -1); + RegisterFunction('FileClose', FileCloseFunc, -1); + RegisterFunction('SaveStringToFile', SaveStringToFileFunc, -1); + RegisterFunction('FileGetDateTime', FileGetDate, -1); + RegisterFunction('Now', GetNow, -1); + RegisterFunction('DateTimeToDate', GetDateFromDT, -1); + RegisterFunction('DateTimeToTime', GetTimeFromDT, -1); + RegisterFunction('GetDateTimeString', GetDateTimeString, -1); + RegisterFunction('GetFileDateTimeString', GetFileDateTimeString, -1); + RegisterFunction('GetMD5OfFile', GetMD5OfFile, -1); + RegisterFunction('GetMD5OfString', GetMD5OfString, -1); + RegisterFunction('GetMD5OfUnicodeString', GetMD5OfUnicodeString, -1); + RegisterFunction('GetSHA1OfFile', GetSHA1OfFile, -1); + RegisterFunction('GetSHA1OfString', GetSHA1OfString, -1); + RegisterFunction('GetSHA1OfUnicodeString', GetSHA1OfUnicodeString, -1); + RegisterFunction('Trim', TrimFunc, -1); + RegisterFunction('StringChange', StringChangeFunc, -1); + RegisterFunction('IsWin64', IsWin64Func, -1); + RegisterFunction('Message', MessageFunc, -1); + RegisterFunction('Warning', WarningFunc, -1); + RegisterFunction('Error', ErrorFunc, -1); + RegisterFunction('AddQuotes', AddQuotesFunc, -1) + end; +end; + +procedure InitIsWin64; +var + IsWow64ProcessFunc: function(hProcess: THandle; var Wow64Process: BOOL): BOOL; stdcall; + Wow64Process: BOOL; +begin + IsWow64ProcessFunc := GetProcAddress(GetModuleHandle(kernel32), 'IsWow64Process'); + IsWin64 := Assigned(IsWow64ProcessFunc) and + IsWow64ProcessFunc(GetCurrentProcess, Wow64Process) and + Wow64Process; +end; + +initialization + InitIsWin64; + +end. + diff --git a/Projects/ISPP/IsppIdentMan.pas b/Projects/ISPP/IsppIdentMan.pas new file mode 100644 index 00000000..c8bb8cc8 --- /dev/null +++ b/Projects/ISPP/IsppIdentMan.pas @@ -0,0 +1,1107 @@ +{ + Inno Setup Preprocessor + Copyright (C) 2001-2002 Alex Yackimoff + + Inno Setup + Copyright (C) 1997-2020 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. +} + +unit IsppIdentMan; + +interface + +uses SysUtils, Classes, IsppIntf, IsppBase; + +type + + EIdentError = class(Exception); + EMacroError = class(EIdentError); + + TIdentManager = class; + + PIdent = ^TIdent; + TIdent = object + Name: string; + Hash: Longint; + IdentType: TIdentType; + end; + + PDefinable = ^TDefinable; + TDefinable = object(TIdent) + Scope: packed record + Locality: Word; // 0 means public + IsProtected: WordBool; // False means private, not used if Locality = 0 + end; + end; + + PVariable = ^TVariable; + TVariable = object(TDefinable) + Dim: Longint; + Value: array[0..0] of TIsppVariant; + end; + + TExprPosition = packed record + FileIndex, Line, Column: Word; + end; + + PMacro = ^TMacro; + TMacro = object(TDefinable) + Expression: string; + DeclPos: TExprPosition; + ParserOptions: TIsppParserOptions; + ParamCount: Integer; + Params: array[0..0] of TIsppMacroParam; + end; + + PFunc = ^TFunc; + TFunc = object(TIdent) + Code: TIsppFunction; + Ext: Longint; + end; + + PActualParams = ^TActualParams; + TActualParams = array of TVariable; + + IInternalFuncParams = interface(IIsppFuncParams) + function Get(Index: Integer): PIsppVariant; + function ResPtr: PIsppVariant; + end; + + TDefineScope = (dsAny, dsPublic, dsProtected, dsPrivate); // order matters + + TIdentManager = class(TObject, IIdentManager) + private + FCustomIdents: IIdentManager; + FFuncSender: Longint; + FRefCount: Integer; + FVarMan: TList; + FLocalLevel: Integer; + function FindIndex(const Name: string; AScope: TDefineScope): Integer; + function Find(const Name: string; AScope: TDefineScope): PIdent; + procedure FreeItem(Item: Pointer); + function MacroIdents: IIdentManager; + protected + function QueryInterface(const IID: TGUID; out Obj): HRESULT; stdcall; + public + constructor Create(const CustomIdents: IIdentManager; FuncSender: Longint); + destructor Destroy; override; + function _AddRef: Integer; stdcall; + function _Release: Integer; stdcall; + procedure BeginLocal; + procedure EndLocal; + function Defined(const Name: string): Boolean; + procedure DefineFunction(const Name: string; Handler: TIsppFunction; + Ext: Longint); + procedure DefineMacro(const Name, Expression: string; ExprPos: TExprPosition; + const ParserOptions: TIsppParserOptions; Params: array of TIsppMacroParam; + Scope: TDefineScope); + procedure DefineVariable(const Name: string; Index: Integer; + const Value: TIsppVariant; Scope: TDefineScope); + procedure Delete(const Name: string; Scope: TDefineScope); + procedure DimVariable(const Name: string; Length: Integer; Scope: TDefineScope; var ReDim: Boolean); + function GetIdent(const Name: string; out CallContext: ICallContext): TIdentType; + function TypeOf(const Name: string): Byte; + function DimOf(const Name: String): Integer; + end; + +const + + TYPE_ERROR = 0; + TYPE_NULL = 1; + TYPE_INTEGER = 2; + TYPE_STRING = 3; + TYPE_MACRO = 4; + TYPE_FUNC = 5; + TYPE_ARRAY = 6; + +implementation + +uses Windows, Types, IsppPreprocessor, CTokenizer, IsppParser, IsppVarUtils, IsppConsts, + IsppSessions; + +const + MaxLocalArraySize = 16; + GL: array[TDefineScope] of string = ('Public', 'Public', 'Protected', 'Private'); + +function MakeHash(const S: string): Longint; +var + I: Integer; +begin + Result := 0; + for I := 1 to Length(S) do + Result := ((Result shl 7) or (Result shr 25)) + Ord(UpCase(S[I])); +end; + +{ TCallContext } + +type + + TCallContext = class(TInterfacedObject) + private + procedure ErrorDefined(const ArgName: string); + procedure ErrorNotSpecified(const ArgName: string); + procedure ErrorTooMany; + procedure ErrorTooFew; + procedure ErrorWrongType(const ArgName: string); + protected + function GroupingStyle: TArgGroupingStyle; + end; + +procedure TCallContext.ErrorDefined(const ArgName: string); +begin + raise EIdentError.CreateFmt(SParamSpecifiedTwice, [ArgName]) +end; + +procedure TCallContext.ErrorNotSpecified(const ArgName: string); +begin + raise EIdentError.CreateFmt(SRequiredParamMissing, [ArgName]) +end; + +procedure TCallContext.ErrorTooMany; +begin + raise EIdentError.Create(STooManyActualParams); +end; + +procedure TCallContext.ErrorTooFew; +begin + raise EIdentError.Create(SInsufficientParams) +end; + +procedure TCallContext.ErrorWrongType(const ArgName: string); +begin + raise EIdentError.CreateFmt(SWrongParamType, [ArgName]) +end; + +function TCallContext.GroupingStyle: TArgGroupingStyle; +begin + Result := agsParenteses; +end; + +{ TVarCallContext } + +type + + TVarCallContext = class(TCallContext, ICallContext) + private + FVariable: PVariable; + FIndex: Integer; + protected + constructor Create(Variable: PVariable); + { ICallContext } + procedure Add(const Name: string; const Value: TIsppVariant); + function Call: TIsppVariant; + function GroupingStyle: TArgGroupingStyle; + procedure Clone(out NewContext: ICallContext); + end; + +constructor TVarCallContext.Create(Variable: PVariable); +begin + FVariable := Variable; + FIndex := -1; +end; + +procedure TVarCallContext.Add(const Name: string; + const Value: TIsppVariant); +begin + if FVariable.Dim <> 0 then + begin + if (Name = '') or (CompareText(Name, 'INDEX') = 0) then + begin + if FIndex <> -1 then ErrorDefined('Index'); + FIndex := ToInt(Value).AsInt; + end + else + raise EIdentError.CreateFmt(SUnknownParam, [Name]); + if (FIndex < 0) or (FIndex >= FVariable.Dim) then + raise EIdentError.CreateFmt(SIndexIsOutOfArraySize, [FIndex, FVariable.Name]); + end + else + raise EIdentError.Create(SParameterlessVariable); +end; + +function TVarCallContext.Call: TIsppVariant; +begin + if FIndex < 0 then + if FVariable.Dim <> 0 then + raise EIdentError.CreateFmt(SIndexNotSpecifiedForArray, [FVariable.Name]) + else + FIndex := 0; + Result.Typ := evLValue; + Result.AsPtr := @(FVariable^.Value[FIndex]); + SimplifyLValue(Result); +end; + +function TVarCallContext.GroupingStyle: TArgGroupingStyle; +begin + if FVariable.Dim <> 0 then + Result := agsBrackets + else + Result := agsNone +end; + +{ TMacroCallContext } + +var + MacroStack: TStrings; + +procedure PushMacro(const Name: string); +begin + if MacroStack = nil then + MacroStack := TStringList.Create + else ; + {if MacroStack.IndexOf(UpperCase(Name)) >= 0 then + raise EMacroError.CreateFmt(SRecursiveMacroCall, [Name]);} + MacroStack.Add(UpperCase(Name)); +end; + +procedure PopMacro; +begin + MacroStack.Delete(MacroStack.Count - 1); + if MacroStack.Count = 0 then + begin + MacroStack.Free; + MacroStack := nil + end; +end; + +type + +{ TMacroLocalArrayCallContext } + + TMacroCallContext = class; + + TMacroLocalArrayCallContext = class(TCallContext, ICallContext) + private + FMacroContext: TMacroCallContext; + FIndex: Integer; + public + constructor Create(MacroContext: TMacroCallContext); + procedure Add(const Name: String; const Value: TIsppVariant); + function Call: TIsppVariant; + function GroupingStyle: TArgGroupingStyle; + procedure Clone(out NewContext: ICallContext); + end; + +{ TMacroCallContext } + + TMacroArgument = record + Value: TVariable; + Defined: Boolean; + end; + + PMacroArgArray = ^TMacroArgArray; + TMacroArgArray = array[0..0] of TMacroArgument; + + TMacroCallContext = class(TCallContext, ICallContext, IIdentManager) + private + FIdentManager: IIdentManager; + FMacro: PMacro; + FList: PMacroArgArray; + FCurrentParam: Integer; + FLocalVars: TList; + procedure AdjustLocalArray(Index: Integer); + function FindFormalParam(const Name: string): Integer; + protected + constructor Create(const IdentManager: IIdentManager; Macro: PMacro); + destructor Destroy; override; + { IIdentManager} + function GetIdent(const Name: string; out CallContext: ICallContext): TIdentType; + function Defined(const Name: string): Boolean; + function TypeOf(const Name: string): Byte; + function DimOf(const Name: string): Integer; + { ICallContext } + procedure Add(const Name: string; const Value: TIsppVariant); + function Call: TIsppVariant; + procedure Clone(out NewContext: ICallContext); + end; + +constructor TMacroLocalArrayCallContext.Create(MacroContext: TMacroCallContext); +begin + FMacroContext := MacroContext; + FIndex := -1; +end; + +procedure TMacroLocalArrayCallContext.Add(const Name: String; + const Value: TIsppVariant); +begin + if (Name = '') or (CompareText(Name, 'INDEX') = 0) then + begin + if FIndex <> -1 then ErrorDefined('Index'); + FIndex := ToInt(Value).AsInt; + end + else + raise EIdentError.CreateFmt(SUnknownParam, [Name]); + if (FIndex < 0) or (FIndex >= MaxLocalArraySize) then + raise EIdentError.Create(SLocalArraysIndexError); +end; + +function TMacroLocalArrayCallContext.Call: TIsppVariant; +begin + if FIndex = -1 then FIndex := 0; + FMacroContext.AdjustLocalArray(FIndex); + Result.Typ := evLValue; + Result.AsPtr := FMacroContext.FLocalVars[FIndex]; +end; + +function TMacroLocalArrayCallContext.GroupingStyle: TArgGroupingStyle; +begin + Result := agsBrackets; +end; + +constructor TMacroCallContext.Create(const IdentManager: IIdentManager; + Macro: PMacro); +begin + FIdentManager := IdentManager; + FMacro := Macro; + FList := AllocMem(SizeOf(TMacroArgument) * Macro^.ParamCount); +end; + +destructor TMacroCallContext.Destroy; +var + I: Integer; +begin + if Assigned(FLocalVars) then + begin + for I := 0 to FLocalVars.Count - 1 do + Dispose(PIsppVariant(FLocalVars[I])); + FLocalVars.Free; + end; + FreeMem(FList) +end; + +procedure TMacroCallContext.Add(const Name: string; + const Value: TIsppVariant); +var + ParamIndex: Integer; +begin + if Name <> '' then + ParamIndex := FindFormalParam(Name) + else + ParamIndex := FCurrentParam; + if ParamIndex >= FMacro.ParamCount then + ErrorTooMany; + if FList[ParamIndex].Defined then + ErrorDefined(FMacro.Params[ParamIndex].Name); + + if Value.Typ = evSpecial then //parser is in "skip" state + else + if Value.Typ = evNull then + if pfHasDefault in FMacro.Params[ParamIndex].ParamFlags then + FList[ParamIndex].Value.Value[0] := FMacro.Params[ParamIndex].DefValue + else + ErrorNotSpecified(FMacro.Params[ParamIndex].Name) + else + if (pfByRef in FMacro.Params[ParamIndex].ParamFlags) and + (Value.Typ <> evLValue) then + raise EIdentError.CreateFmt(SLValueRequiredForByRefParam, [FMacro.Params[ParamIndex].Name]) + else + if (pfTypeDefined in FMacro.Params[ParamIndex].ParamFlags) and + (GetRValue(Value).Typ <> FMacro.Params[ParamIndex].DefValue.Typ) then + ErrorWrongType(FMacro.Params[ParamIndex].Name) + else + if pfByRef in FMacro.Params[ParamIndex].ParamFlags then + begin + FList[ParamIndex].Value.Value[0] := Value; + SimplifyLValue(FList[ParamIndex].Value.Value[0]); + end + else + begin + if FMacro.Params[ParamIndex].DefValue.Typ = evCallContext then + begin + if (pfFunc in FMacro.Params[ParamIndex].ParamFlags) and + (Value.AsCallContext.GroupingStyle <> agsParenteses) or + not (pfFunc in FMacro.Params[ParamIndex].ParamFlags) and + (Value.AsCallContext.GroupingStyle <> agsBrackets) then + ErrorWrongType(FMacro.Params[ParamIndex].Name); + end; + FList[ParamIndex].Value.Value[0] := GetRValue(Value); + end; + FList[ParamIndex].Defined := True; + FList[ParamIndex].Value.Name := FMacro.Params[ParamIndex].Name; + FList[ParamIndex].Value.Dim := 0; + Inc(FCurrentParam); +end; + +function TMacroCallContext.Call: TIsppVariant; +var + I: Integer; + Msg: string; +begin + PushMacro(FMacro.Name); + try + for I := 0 to FMacro.ParamCount - 1 do + if not FList[I].Defined then + if not (pfHasDefault in FMacro.Params[I].ParamFlags) then + ErrorNotSpecified(FMacro.Params[I].Name) + //raise EMacroError.CreateFmt(SNoReqParam, [FMacro.Params[I].Name]) + else + begin + FList[I].Value.Name := FMacro.Params[I].Name; + FList[I].Value.Dim := 0; + FList[I].Value.Value[0] := FMacro.Params[I].DefValue; + FList[I].Defined := True; + end; + try + Result := Parse(Self, FMacro.Expression, FMacro.DeclPos.Column, + @FMacro.ParserOptions); + except + on E: EParsingError do + begin + if E.Position > 0 then + begin + if FMacro.DeclPos.FileIndex > 0 then + Msg := Format(SErrorExecutingMacroFile, [FMacro.Name, + PeekPreproc.IncludedFiles[FMacro.DeclPos.FileIndex], + FMacro.DeclPos.Line, E.Position, E.Message]) + else + Msg := Format(SErrorExecutingMacro, [FMacro.Name, + FMacro.DeclPos.Line, E.Position, E.Message]); + E.Message := Msg; + E.Position := 0; + end; + raise; + end; + on E: Exception do + begin + E.Message := Format(SErrorExecutingMacroUnexpected, [FMacro.Name, E.Message]); + raise; + end; + end; + VerboseMsg(9, SSuccessfullyCalledMacro, [FMacro.Name]); + finally + PopMacro; + end; +end; + +function TMacroCallContext.Defined(const Name: string): Boolean; +var + I: Integer; +begin + Result := True; + if CompareText(Name, SLocal) = 0 then Exit; + for I := 0 to FMacro^.ParamCount - 1 do + if CompareText(FMacro^.Params[I].Name, Name) = 0 then + Exit; + Result := FIdentManager.Defined(Name) +end; + +function TMacroCallContext.FindFormalParam(const Name: string): Integer; +begin + for Result := 0 to FMacro.ParamCount - 1 do + if CompareText(FMacro.Params[Result].Name, Name) = 0 then Exit; + raise EMacroError.CreateFmt(SUnknownParam, [Name]); +end; + +function TMacroCallContext.GetIdent(const Name: string; + out CallContext: ICallContext): TIdentType; +var + I: Integer; +begin + Result := itVariable; + if CompareText(SLocal, Name) = 0 then + begin + CallContext := TMacroLocalArrayCallContext.Create(Self); + Exit; + end + else + for I := 0 to FMacro^.ParamCount - 1 do + if CompareText(FMacro^.Params[I].Name, Name) = 0 then + begin + if FMacro^.Params[I].DefValue.Typ = evCallContext then + FList[I].Value.Value[0].AsCallContext.Clone(CallContext) + else + CallContext := TVarCallContext.Create(@FList[I]); + Exit; + end; + Result := FIdentManager.GetIdent(Name, CallContext) +end; + +function TMacroCallContext.TypeOf(const Name: string): Byte; +var + I: Integer; +begin + if CompareText(Name, SLocal) = 0 then + begin + Result := TYPE_ARRAY; + Exit; + end; + for I := 0 to FMacro^.ParamCount - 1 do + if CompareText(FMacro^.Params[I].Name, Name) = 0 then + begin + case GetRValue(FList[I].Value.Value[0]).Typ of + evNull: Result := TYPE_NULL; + evInt: Result := TYPE_INTEGER + else + Result := TYPE_STRING + end; + Exit; + end; + Result := FIdentManager.TypeOf(Name) +end; + +{TFuncParam} + +type + + TFuncParam = class(TInterfacedObject, IIsppFuncParam) + private + FValue: PIsppVariant; + protected + constructor Create(Value: PIsppVariant); + function GetType: TIsppVarType; stdcall; + function GetAsInt: Int64; stdcall; + function GetAsString(Buf: PChar; BufSize: Integer): Integer; stdcall; + end; + +constructor TFuncParam.Create(Value: PIsppVariant); +begin + FValue := Value +end; + +function TFuncParam.GetAsInt: Int64; +begin + Result := FValue^.AsInt +end; + +function TFuncParam.GetAsString(Buf: PChar; BufSize: Integer): Integer; +begin + StrLCopy(Buf, PChar(FValue^.AsStr), BufSize); + Result := Length(FValue^.AsStr) +end; + +function TFuncParam.GetType: TIsppVarType; +begin + Result := FValue^.Typ +end; + +{ TFuncCallContext } + +type + + TFuncCallContext = class(TCallContext, ICallContext, IInternalFuncParams, + IIsppFuncResult) + private + FSender: Longint; + FFunc: PFunc; + FResult: TIsppVariant; + FParams: TList; + protected + constructor Create(Sender: Longint; Func: PFunc); + destructor Destroy; override; + { IIsppFuncParams } + function Get(Index: Integer): IIsppFuncParam; stdcall; + function GetCount: Integer; stdcall; + { IInternalFuncParams } + function IInternalFuncParams.Get = InternalGet; + function InternalGet(Index: Integer): PIsppVariant; + function ResPtr: PIsppVariant; + { IIsppFuncResult } + procedure SetAsInt(Value: Int64); stdcall; + procedure SetAsString(Value: PChar); stdcall; + procedure SetAsNull; stdcall; + procedure Error(Message: PChar); stdcall; + { ICallContext } + procedure Add(const Name: string; const Value: TIsppVariant); + function Call: TIsppVariant; + procedure Clone(out NewContext: ICallContext); + end; + +constructor TFuncCallContext.Create(Sender: Longint; Func: PFunc); +begin + FSender := Sender; + FFunc := Func; + FParams := TList.Create; +end; + +destructor TFuncCallContext.Destroy; +begin + FParams.Free; +end; + +procedure TFuncCallContext.Add(const Name: string; + const Value: TIsppVariant); +var + V: PIsppVariant; +begin + if Name <> '' then + raise EIdentError.Create(SFuncsNoSupportNamedParams); + New(V); + CopyExpVar(Value, V^); + FParams.Add(V); +end; + +function TFuncCallContext.Call: TIsppVariant; +var + InternalParams: IInternalFuncParams; + Error: TIsppFuncResult; + Ext: Longint; +begin + InternalParams := Self; + if FFunc.Ext = -1 then + Ext := FSender + else + Ext := FFunc.Ext; + Error := FFunc.Code(Ext, InternalParams, Self); + case Error.Error of + ISPPFUNC_FAIL: raise EIdentError.CreateFmt(SFuncError, [FFunc^.Name]); + ISPPFUNC_MANYARGS: ErrorTooMany; + ISPPFUNC_INSUFARGS: ErrorTooFew; + ISPPFUNC_INTWANTED: raise EIdentError.Create(SIntegerExpressionExpected); + ISPPFUNC_STRWANTED: raise EIdentError.Create(SStringExpressionExpected); + end; + Result := FResult; + VerboseMsg(9, SSuccessfullyCalledFunction, [FFunc.Name]); +end; + +procedure TFuncCallContext.Error(Message: PChar); +begin + raise Exception.Create(Message) +end; + +function TFuncCallContext.Get(Index: Integer): IIsppFuncParam; +begin + Result := TFuncParam.Create(FParams[Index]); +end; + +function TFuncCallContext.GetCount: Integer; +begin + Result := FParams.Count +end; + +function TFuncCallContext.InternalGet(Index: Integer): PIsppVariant; +begin + Result := FParams[Index] +end; + +function TFuncCallContext.ResPtr: PIsppVariant; +begin + Result := @FResult +end; + +procedure TFuncCallContext.SetAsInt(Value: Int64); +begin + MakeInt(FResult, Value) +end; + +procedure TFuncCallContext.SetAsNull; +begin + FResult := NULL +end; + +procedure TFuncCallContext.SetAsString(Value: PChar); +begin + MakeStr(FResult, Value) +end; + +{ TIdentManager } + +constructor TIdentManager.Create(const CustomIdents: IIdentManager; FuncSender: Longint); +begin + FCustomIdents := CustomIdents; + FVarMan := TList.Create; + FFuncSender := FuncSender; +end; + +destructor TIdentManager.Destroy; +var + I: Integer; +begin + for I := 0 to FVarMan.Count - 1 do + FreeItem(FVarMan[I]); + FVarMan.Free; +end; + +function TIdentManager.Defined(const Name: string): Boolean; +begin + Result := Find(Name, dsAny) <> nil +end; + +procedure TIdentManager.DefineFunction(const Name: string; + Handler: TIsppFunction; Ext: Integer); +var + F: PFunc; +begin + if Find(Name, dsAny) <> nil then Exit; + F := AllocMem(SizeOf(TFunc)); + F.Name := Name; + F.Hash := MakeHash(Name); + F.IdentType := itFunc; + F.Code := Handler; + F.Ext := Ext; + FVarMan.Add(F); +end; + +procedure TIdentManager.DefineMacro(const Name, Expression: string; + ExprPos: TExprPosition; const ParserOptions: TIsppParserOptions; + Params: array of TIsppMacroParam; Scope: TDefineScope); +var + P: PMacro; + ArrSize, I, J: Integer; +begin + if Scope = dsAny then Scope := dsPublic; + Delete(Name, Scope); + ArrSize := SizeOf(TIsppMacroParam) * (Length(Params)); + + for I := 1 to High(Params) do + for J := 0 to I - 1 do + if CompareText(Params[I].Name, Params[J].Name) = 0 then + raise EIdentError.CreateFmt(SRedeclaredIdentifier, [Params[I].Name]); + + P := AllocMem(SizeOf(TMacro) + ArrSize); + try + P^.Name := Name; + P^.Hash := MakeHash(Name); + P^.IdentType := itMacro; + P^.Scope.IsProtected := Scope = dsProtected; + if Scope >= dsProtected then P^.Scope.Locality := FLocalLevel; + P^.Expression := Expression; + P^.DeclPos := ExprPos; + P^.ParserOptions := ParserOptions; + P^.ParamCount := Length(Params); + for I := 0 to High(Params) do + P^.Params[I] := Params[I]; + FVarMan.Add(P); + except + FreeMem(P) + end; + VerboseMsg(4, SMacroDefined, [GL[Scope], Name]); +end; + +procedure TIdentManager.DefineVariable(const Name: string; Index: Integer; + const Value: TIsppVariant; Scope: TDefineScope); +var + V: PVariable; + Ident: PIdent; +begin + if Scope = dsAny then Scope := dsPublic; + Ident := Find(Name, Scope); + if (Ident <> nil) and (Ident.IdentType = itVariable) and (PVariable(Ident).Dim <> 0) then + begin + V := PVariable(Ident); + if (Index < 0) or (Index >= V.Dim) then + raise EIdentError.CreateFmt(SIndexIsOutOfArraySize, [Index, Name]); + V.Value[Index] := Value; + end + else + begin + if Index <> -1 then + raise EIdentError.CreateFmt(SUndeclaredIdentifier, [Name]); + Delete(Name, Scope); + V := AllocMem(SizeOf(TVariable)); + V^.Name := Name; + V^.Hash := MakeHash(Name); + V^.IdentType := itVariable; + V^.Scope.IsProtected := Scope = dsProtected; + if Scope >= dsProtected then V^.Scope.Locality := FLocalLevel; + V^.Dim := 0; + V^.Value[0] := Value; + FVarMan.Add(V); + end; + VerboseMsg(4, SVariableDefined, [GL[Scope], Name]); +end; + +procedure TIdentManager.Delete(const Name: string; Scope: TDefineScope); +var + P: PIdent; + S: TDefineScope; +const + VM: array[itVariable..itMacro] of string = ('variable', 'macro'); +begin + {if Scope = dsAny then + begin + P := Find(Name, dsPrivate); + if P = nil then P := Find(Name, dsProtected); + if P = nil then P := Find(Name, dsPublic) + end + else} + P := Find(Name, Scope); + if (P <> nil) and (P.IdentType in [itVariable, itMacro]) then + begin + //if PDefinable(P).Scope.Locality <> FLocalLevel then Exit; + S := dsPublic; + with PDefinable(P).Scope do + if Locality <> 0 then + if IsProtected then + S := dsProtected + else + S := dsPrivate; + VerboseMsg(4, SUndefined, [GL[S], + VM[P.IdentType], P.Name]); + FVarMan.Remove(P); + FreeItem(P); + end +end; + +procedure TIdentManager.DimVariable(const Name: string; Length: Integer; + Scope: TDefineScope; var ReDim: Boolean); +var + V, VOld: PVariable; + I, ReDimIndex: Integer; + Msg: String; +begin + if Length > 0 then begin + if Scope = dsAny then Scope := dsPublic; + + if ReDim then begin + ReDimIndex := FindIndex(Name, Scope); + if (ReDimIndex <> -1) and + ((PIdent(FVarMan[ReDimIndex]).IdentType <> itVariable) or + (PVariable(FVarMan[ReDimIndex]).Dim = 0)) then + ReDimIndex := -1; //not a variable or not an array, #dim normally + ReDim := ReDimIndex <> -1; + end else + ReDimIndex := -1; + + V := AllocMem(SizeOf(TVariable) + SizeOf(TIsppVariant) * (Length - 1)); + V.Name := Name; + V.Hash := MakeHash(Name); + V.IdentType := itVariable; + V.Dim := Length; + V^.Scope.IsProtected := Scope = dsProtected; + if Scope >= dsProtected then V^.Scope.Locality := FLocalLevel; + + if ReDimIndex = -1 then begin + Delete(Name, Scope); + for I := 0 to Length - 1 do + V.Value[I] := NULL; + FVarMan.Add(V); + Msg := SArrayDeclared; + end else begin + VOld := PVariable(FVarMan[ReDimIndex]); + for I := 0 to VOld.Dim - 1 do + if I < Length then + V.Value[I] := VOld.Value[I]; + for I := VOld.Dim to Length - 1 do + V.Value[I] := NULL; + FVarMan[ReDimIndex] := V; + FreeItem(VOld); + Msg := SArrayReDimmed; + end; + VerboseMsg(4, Msg, [GL[Scope], Name]); + end else + raise EIdentError.Create(SBadLength); +end; + +function TIdentManager.FindIndex(const Name: string; AScope: TDefineScope): Integer; +var + I: Integer; + H: Longint; +begin + Result := -1; + H := MakeHash(Name); + for I := FVarMan.Count - 1 downto 0 do + if (H = PIdent(FVarMan[I]).Hash) and ( + CompareText(PIdent(FVarMan[I]).Name, Name) = 0) then + begin + if (PIdent(FVarMan[I]).IdentType in [itVariable, itMacro]) then + with PDefinable(FVarMan[I])^.Scope do + case AScope of + dsAny: + if not ((Locality = 0) or (Locality = FLocalLevel) or IsProtected) then Continue; + dsPublic: + if Locality <> 0 then Continue; + dsProtected: + if not (IsProtected and (Locality <= FLocalLevel)) then Continue; + else + if IsProtected or (Locality <> FLocalLevel) then Continue; + end; + Result := I; + Exit + end; +end; + +function TIdentManager.Find(const Name: string; AScope: TDefineScope): PIdent; +var + I: Integer; +begin + I := FindIndex(Name, AScope); + if I >= 0 then + Result := FVarMan[I] + else + Result := nil; +end; + +function TIdentManager.GetIdent(const Name: string; + out CallContext: ICallContext): TIdentType; +var + P: PIdent; +begin + if CompareText(Name, 'DEFINED') = 0 then + Result := itDefinedFunc + else if CompareText(Name, 'TYPEOF') = 0 then + Result := itTypeOfFunc + else if CompareText(Name, 'DIMOF') = 0 then + Result := itDimOfFunc + else + begin + P := Find(Name, dsAny); + if P <> nil then + begin + Result := P.IdentType; + case P.IdentType of + itVariable: CallContext := TVarCallContext.Create(PVariable(P)); + itMacro: CallContext := TMacroCallContext.Create(MacroIdents, PMacro(P)); + itFunc: CallContext := TFuncCallContext.Create(FFuncSender, PFunc(P)); + else + Assert(False) + end; + end + else + Result := itUnknown; + end; +end; + +function TIdentManager.QueryInterface(const IID: TGUID; out Obj): HRESULT; +begin + if GetInterface(IID, Obj) then Result := 0 else Result := E_NOINTERFACE; +end; + +function TIdentManager.TypeOf(const Name: string): Byte; +var + P: PIdent; +begin + Result := TYPE_ERROR; + P := Find(Name, dsAny); + if P <> nil then + case P.IdentType of + itVariable: + if PVariable(P).Dim > 0 then + Result := TYPE_ARRAY + else + case PVariable(P).Value[0].Typ of + evNull: Result := TYPE_NULL; + evInt: Result := TYPE_INTEGER; + evStr: Result := TYPE_STRING + end; + itMacro: Result := TYPE_MACRO; + itFunc: Result := TYPE_FUNC + end +end; + +function TIdentManager._AddRef: Integer; +begin + Result := InterlockedIncrement(FRefCount) +end; + +function TIdentManager._Release: Integer; +begin + Result := InterlockedDecrement(FRefCount); + if Result = 0 then + Destroy; +end; + +procedure TIdentManager.BeginLocal; +begin + Inc(FLocalLevel); +end; + +procedure TIdentManager.EndLocal; +var + I: Integer; +begin + for I := FVarMan.Count - 1 downto 0 do + if (PIdent(FVarMan.Items[I]).IdentType in [itVariable, itMacro]) and + (PDefinable(FVarMan.Items[I]).Scope.Locality = FLocalLevel) then + begin + FreeItem(FVarMan[I]); + FVarMan.Delete(I); + end; + Dec(FLocalLevel); +end; + +procedure TIdentManager.FreeItem(Item: Pointer); + + function ZeroToOne(A: Integer): Integer; + begin + if A = 0 then Result := 1 else Result := A + end; + +begin + with PIdent(Item)^ do + begin + Finalize(Name); + case IdentType of + itVariable: with PVariable(Item)^ do Finalize(Value[0], ZeroToOne(Dim)); + itMacro: + with PMacro(Item)^ do + begin + Finalize(Params[0], ParamCount); + Finalize(Expression); + end; + end; + end; + FreeMem(Item); +end; + +function TIdentManager.MacroIdents: IIdentManager; +begin + if FCustomIdents <> nil then + Result := FCustomIdents + else + Result := Self +end; + +procedure TMacroCallContext.AdjustLocalArray(Index: Integer); +var + I: Integer; + V: PIsppVariant; +begin + if not Assigned(FLocalVars) then + FLocalVars := TList.Create; + if FLocalVars.Count > Index then Exit; + VerboseMsg(10, SAllocatingMacroLocalArrayUpToEle, [FMacro.Name, Index]); + for I := FLocalVars.Count to Index do + begin + New(V); + V.Typ := evNull; + FLocalVars.Add(V); + end; +end; + +procedure TVarCallContext.Clone(out NewContext: ICallContext); +begin + if FVariable.Dim = 0 then + NewContext := Self + else + NewContext := TVarCallContext.Create(FVariable); +end; + +procedure TMacroLocalArrayCallContext.Clone(out NewContext: ICallContext); +begin + NewContext := TMacroLocalArrayCallContext.Create(FMacroContext); +end; + +procedure TMacroCallContext.Clone(out NewContext: ICallContext); +begin + NewContext := TMacroCallContext.Create(FIdentManager, FMacro); +end; + +procedure TFuncCallContext.Clone(out NewContext: ICallContext); +begin + NewContext := TFuncCallContext.Create(FSender, FFunc); +end; + +function TIdentManager.DimOf(const Name: String): Integer; +var + Ident: PIdent; +begin + Ident := Find(Name, dsAny); + if Assigned(Ident) and (Ident.IdentType = itVariable) then + Result := PVariable(Ident)^.Dim + else + Result := 0; +end; + +function TMacroCallContext.DimOf(const Name: string): Integer; +begin + if CompareText(Name, SLocal) = 0 then + Result := MaxLocalArraySize + else + Result := FIdentManager.DimOf(Name); +end; + +end. + + diff --git a/Projects/ISPP/IsppIntf.pas b/Projects/ISPP/IsppIntf.pas new file mode 100644 index 00000000..754661fc --- /dev/null +++ b/Projects/ISPP/IsppIntf.pas @@ -0,0 +1,105 @@ +{ + Inno Setup Preprocessor + Copyright (C) 2001-2002 Alex Yackimoff + + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. +} + +unit IsppIntf; + +interface + +type + + TOptionID = 0..25; + + TOptions = set of TOptionID; + + PIsppParserOptions = ^TIsppParserOptions; + TIsppParserOptions = record + Options: TOptions; + end; + + TIsppOptions = record + ParserOptions: TIsppParserOptions; + Options: TOptions; + VerboseLevel: Byte; + InlineStart: String; + InlineEnd: String; + SpanSymbol: Char; + end; + + TIsppVarType = (evSpecial, evNull, evInt, evStr, evLValue, evCallContext); + + IIsppFuncParam = interface + function GetType: TIsppVarType; stdcall; + function GetAsInt: Int64; stdcall; + function GetAsString(Buf: PChar; BufSize: Integer): Integer; stdcall; + end; + + IIsppFuncResult = interface + procedure SetAsInt(Value: Int64); stdcall; + procedure SetAsString(Value: PChar); stdcall; + procedure SetAsNull; stdcall; + procedure Error(Message: PChar); stdcall; + end; + + IIsppFuncParams = interface + function Get(Index: Integer): IIsppFuncParam; stdcall; + function GetCount: Integer; stdcall; + end; + + TIsppFuncResult = packed record + Reserved: Byte; + ErrParam: Word; + Error: Byte; + end; + + TIsppFunction = function (Ext: Longint; const Params: IIsppFuncParams; + const FuncResult: IIsppFuncResult): TIsppFuncResult; stdcall; + + IPreprocessor = interface + procedure DefineVariable(Name: PChar; Typ: TIsppVarType; Value: Int64); + procedure QueueLine(Line: PChar); + end; + +const + + { TIsppFuncResult.Error values } + + // Function executed successfully + ISPPFUNC_SUCCESS = Byte($00); + // Unexpected failure + ISPPFUNC_FAIL = Byte($01); + // Too many arguments passed, ErrParam contains maximal number of arguments needed + ISPPFUNC_MANYARGS = Byte($02); + // Insufficient required arguments, ErrParam contains minimal number of arguments + ISPPFUNC_INSUFARGS = Byte($03); + // Wrong type of argument passed, ErrParam is the index of the argument + ISPPFUNC_INTWANTED = Byte($04); + // Wrong type of argument passed, ErrParam is the index of the argument + ISPPFUNC_STRWANTED = Byte($05); + +const + + { Parser options } + + optSCBE = TOptionID(Ord('B') - Ord('A')); + optSCME = TOptionID(Ord('M') - Ord('A')); + optPassNulls = TOptionID(Ord('N') - Ord('A')); + optPascalStrings = TOptionID(Ord('P') - Ord('A')); + optAllowUndeclared = TOptionID(Ord('U') - Ord('A')); + + { Preprocessor options } + + optPassToCompiler = TOptionID(Ord('C') - Ord('A')); + optEmitEmptyLines = TOptionID(Ord('E') - Ord('A')); + optCircMacroCall = TOptionID(Ord('R') - Ord('A')); + optVerbose = TOptionID(Ord('V') - Ord('A')); + +implementation + +end. diff --git a/Projects/ISPP/IsppParser.pas b/Projects/ISPP/IsppParser.pas new file mode 100644 index 00000000..66e3e319 --- /dev/null +++ b/Projects/ISPP/IsppParser.pas @@ -0,0 +1,593 @@ +{ + Inno Setup Preprocessor + Copyright (C) 2001-2002 Alex Yackimoff + + Inno Setup + Copyright (C) 1997-2010 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. +} + +unit IsppParser; + +interface + +uses IsppIntf, IsppBase, IsppIdentMan, CTokenizer; + +type + + TParser = class(TCTokenizer) + private + FIdentMan: IIdentManager; + FOptions: PIsppParserOptions; + function CheckLValue(const LValue: TIsppVariant): TIsppVariant; + function PrefixIncDec(LValue: TIsppVariant; Dec: Boolean): TIsppVariant; + function PostfixIncDec(LValue: TIsppVariant; Dec: Boolean): TIsppVariant; + function AssignOperation(LValue, RValue: TIsppVariant; Op: TTokenKind): TIsppVariant; + function PerformOperation(Op1, Op2: TIsppVariant; Op: TTokenKind): TIsppVariant; + function UnaryOperation(Op: TTokenKind; Op1: TIsppVariant): TIsppVariant; + protected + function Chain(Level: Byte; DoEval: Boolean): TIsppVariant; + function Factor(DoEval: Boolean): TIsppVariant; + function Assignment(DoEval: Boolean): TIsppVariant; + function Conditional(DoEval: Boolean): TIsppVariant; + function Sequentional(DoEval: Boolean): TIsppVariant; + public + constructor Create(const IdentMan: IIdentManager; const Expression: string; + Offset: Integer; Options: PIsppParserOptions); + function Evaluate: TIsppVariant; + function Expr(StopOnComma: Boolean): TIsppVariant; + function IntExpr(StopOnComma: Boolean): Int64; + function StrExpr(StopOnComma: Boolean): string; + end; + +function Parse(const VarMan: IIdentManager; const AExpr: string; Offset: Integer; Options: PIsppParserOptions): TIsppVariant; +function ParseStr(const VarMan: IIdentManager; const AExpr: string; Offset: Integer; Options: PIsppParserOptions): string; +function ParseInt(const VarMan: IIdentManager; const AExpr: string; Offset: Integer; Options: PIsppParserOptions): Int64; + +implementation + +uses SysUtils, IsppSessions, IsppConsts, IsppVarUtils; + +function Parse(const VarMan: IIdentManager; const AExpr: string; Offset: Integer; Options: PIsppParserOptions): TIsppVariant; +begin + with TParser.Create(VarMan, AExpr, Offset, Options) do + try + Result := Evaluate + finally + Free + end; +end; + +function ParseStr(const VarMan: IIdentManager; const AExpr: string; Offset: Integer; Options: PIsppParserOptions): string; +begin + with TParser.Create(VarMan, AExpr, Offset, Options) do + try + Result := StrExpr(True); + EndOfExpr; + finally + Free + end; +end; + +function ParseInt(const VarMan: IIdentManager; const AExpr: string; Offset: Integer; Options: PIsppParserOptions): Int64; +begin + with TParser.Create(VarMan, AExpr, Offset, Options) do + try + Result := IntExpr(True); + EndOfExpr; + finally + Free + end; +end; + +{ TParser } + +constructor TParser.Create(const IdentMan: IIdentManager; + const Expression: string; Offset: Integer; Options: PIsppParserOptions); +begin + inherited Create(Expression, not (optPascalStrings in Options^.Options)); + FExprOffset := Offset; + FIdentMan := IdentMan; + FOptions := Options; +end; + +function TParser.Evaluate: TIsppVariant; +begin + Result := Expr(False); + MakeRValue(Result); + EndOfExpr; +end; + +function TParser.Sequentional(DoEval: Boolean): TIsppVariant; +begin + Result := Assignment(DoEval); + while PeekAtNextToken = tkComma do + begin + NextToken; + Result := Assignment(DoEval) + end; +end; + +function TParser.Expr(StopOnComma: Boolean): TIsppVariant; +begin + if StopOnComma then + Result := Assignment(True) + else + Result := Sequentional(True) +end; + +function TParser.Factor(DoEval: Boolean): TIsppVariant; + + procedure PopulateCallContext(const CallContext: ICallContext); + const + Brackets: array[TArgGroupingStyle, Boolean] of TTokenKind = + ((tkError, tkError), (tkOpenParen, tkCloseParen), + (tkOpenBracket, tkCloseBracket), (tkOpenBrace, tkCloseBrace)); + type + TArgNamingState = (ansUnknown, ansNamed, ansUnnamed); + var + V: TIsppVariant; + ArgName: string; + ArgNamingState: TArgNamingState; + T: TTokenKind; + ArgFound: Boolean; + + procedure GetExpression; + begin + V := Assignment(DoEval); + Store; + T := NextTokenExpect([tkComma, Brackets[CallContext.GroupingStyle, True]]); + Restore; + ArgFound := True; + end; + + begin + ArgNamingState := ansUnknown; + ArgFound := False; + if PeekAtNextToken = Brackets[CallContext.GroupingStyle, False] then + begin + NextToken; + V := NULL; + ArgName := ''; + T := PeekAtNextToken; + while True do + case T of + tkComma: + begin + NextToken; + CallContext.Add(ArgName, V); + V := NULL; + T := PeekAtNextToken; + end; + tkCloseParen, tkCloseBracket, tkCloseBrace: + begin + NextToken; + if ArgFound then CallContext.Add(ArgName, V); + V := NULL; + Break + end; + tkIdent: + begin + Store; + NextToken; + ArgName := TokenString; + if PeekAtNextToken <> opAssign then + begin + if ArgNamingState = ansNamed then Error(SActualParamsNamingConflict); + ArgNamingState := ansUnnamed; + ArgName := ''; + Restore; + GetExpression; + end + else + begin + if ArgNamingState = ansUnnamed then Error(SActualParamsNamingConflict); + ArgNamingState := ansNamed; + NextToken; + GetExpression; + end; + end; + else + begin + if ArgNamingState = ansNamed then Error(SActualParamsNamingConflict); + ArgNamingState := ansUnnamed; + ArgName := ''; + GetExpression; + end; + end; + end; + end; + +var + I: Int64; + IdentType: TIdentType; + CallContext: ICallContext; + Op: TTokenKind; + ParenthesesUsed: Boolean; +begin + FillChar(Result, SizeOf(Result), 0); + case NextTokenExpect(ExpressionStartTokens) of + tkOpenParen: + begin + Result := Sequentional(DoEval); + NextTokenExpect([tkCloseParen]) + end; + tkPtr: + begin + NextTokenExpect([tkIdent]); + Result.Typ := evCallContext; + if not (FIdentMan.GetIdent(TokenString, Result.AsCallContext) in + [itVariable, itMacro, itFunc]) then + Error('Variable, macro, or function required'); + end; + tkIdent: + begin + CallContext := nil; + IdentType := FIdentMan.GetIdent(TokenString, CallContext); + case IdentType of + itUnknown: + if (optAllowUndeclared in FOptions.Options) and not + (PeekAtNextToken in [tkOpenParen, tkOpenBracket, tkOpenBrace]) then + begin + Result.Typ := evNull; + WarningMsg(SUndeclaredIdentifier, [TokenString]); + end + else + ErrorFmt(SUndeclaredIdentifier, [TokenString]); + itVariable, itMacro, itFunc: + begin + PopulateCallContext(CallContext); + if DoEval then + Result := CallContext.Call + end; + itDefinedFunc: + begin + ParenthesesUsed := PeekAtNextToken = tkOpenParen; + if ParenthesesUsed then NextToken; + NextTokenExpect([tkIdent]); + if DoEval then + MakeBool(Result, FIdentMan.Defined(TokenString)); + if ParenthesesUsed then NextTokenExpect([tkCloseParen]) + end; + itTypeOfFunc: + begin + ParenthesesUsed := PeekAtNextToken = tkOpenParen; + if ParenthesesUsed then NextToken; + NextTokenExpect([tkIdent]); + if DoEval then + MakeInt(Result, FIdentMan.TypeOf(TokenString)); + if ParenthesesUsed then NextTokenExpect([tkCloseParen]); + end; + itDimOfFunc: + begin + ParenthesesUsed := PeekAtNextToken = tkOpenParen; + if ParenthesesUsed then NextToken; + NextTokenExpect([tkIdent]); + if DoEval then + MakeInt(Result, FIdentMan.DimOf(TokenString)); + if ParenthesesUsed then NextTokenExpect([tkCloseParen]) + end; + end; + end; + tkNumber: + begin + if not TryStrToInt64(TokenString, I) then + ErrorFmt(SCannotConvertToInteger, [TokenString]); + MakeInt(Result, I); + end; + tkString: MakeStr(Result, TokenString); + opInc, opDec: + begin + Op := Token; + if DoEval then + Result := PrefixIncDec(CheckLValue(Factor(True)), Op = opDec) + else + Result := Factor(False); + end; + else + begin + Op := Token; + if DoEval then + Result := UnaryOperation(Op, Factor(True)) + else + Factor(False) + end; + end; + Op := PeekAtNextToken; + while Op in [opInc, opDec] do + begin + if DoEval then + Result := PostfixIncDec(CheckLValue(Result), Op = opDec); + NextToken; + Op := PeekAtNextToken; + end; +end; + +function TParser.PerformOperation(Op1, Op2: TIsppVariant; Op: TTokenKind): TIsppVariant; +var + A, B: Int64; + AsBool: Boolean; +begin + MakeRValue(Op1); + MakeRValue(Op2); + if Op1.Typ = evNull then + case Op2.Typ of + evNull: + begin + MakeInt(Op1, 0); + MakeInt(Op2, 0); + end; + evInt: MakeInt(Op1, 0); + evStr: MakeStr(Op1, ''); + end + else + if Op2.Typ = evNull then + case Op1.Typ of + evInt: MakeInt(Op2, 0); + evStr: MakeStr(Op2, ''); + end; + if (Op1.Typ <> Op2.Typ) or ((Op in [opSubtract..opShr]) and (Op1.Typ = evStr)) + then Error(SOperatorNotApplicableToThisOpera); + AsBool := False; + with Result do + try + if Op1.Typ = evStr then + begin + if Op = opAdd then MakeStr(Result, Op1.AsStr + Op2.AsStr) + else + begin + Typ := evInt; + A := CompareText(Op1.AsStr, Op2.AsStr); + case Op of + opGreater: AsBool := A > 0; + opLess: AsBool := A < 0; + opGreaterEqual: AsBool := A >= 0; + opLessEqual: AsBool := A <= 0; + opEqual: AsBool := A = 0; + opNotEqual: AsBool := A <> 0; + end; + AsInt := Int64(AsBool) + end; + end + else + if Op1.Typ = evInt then + begin + A := Op1.AsInt; + B := Op2.AsInt; + Typ := evInt; + case Op of + opGreater: AsBool := A > B; + opLess: AsBool := A < B; + opGreaterEqual: AsBool := A >= B; + opLessEqual: AsBool := A <= B; + opEqual: AsBool := A = B; + opNotEqual: AsBool := A <> B; + opAdd: AsInt := A + B; + opSubtract: AsInt := A - B; + opOr: AsBool := (A <> 0) or (B <> 0); + opBwOr: AsInt := A or B; + opXor: AsInt := A xor B; + opMul: AsInt := A * B; + opDiv: AsInt := A div B; + opAnd: AsBool := (A <> 0) and (B <> 0); + opBwAnd: AsInt := A and B; + opShl: AsInt := A shl B; + opShr: AsInt := A shr B; + opMod: AsInt := A mod B; + end; + if Op in [opGreater..opNotEqual, opOr, opAnd] then AsInt := Int64(AsBool) + end + except + on E: Exception do Error(E.Message); + end; +end; + +function TParser.UnaryOperation(Op: TTokenKind; Op1: TIsppVariant): TIsppVariant; +var + A: Int64; +begin + MakeRValue(Op1); + A := 0; // satisfy compiler + case Op1.Typ of + evNull:; + evInt: A := Op1.AsInt + else + Error(SWrongUnaryOperator); + end; + case Op of + opNot: MakeBool(Result, A = 0); + opBwNot: MakeInt(Result, not A); + opAdd: MakeInt(Result, A); + opSubtract: MakeInt(Result, -A) + end; +end; + +type + TShortCircuitEvalMode = (scemNone, scemStandard, scemOptional); + +const + OperatorPrecedence: array[0..9] of record + Operators: set of TTokenKind; + SCBE: TShortCircuitEvalMode; + SCBEValue: Boolean; + end = + ((Operators: [opOr]; SCBE: scemStandard; SCBEValue: True), + (Operators: [opAnd]; SCBE: scemStandard; SCBEValue: False), + (Operators: [opBwOr]; SCBE: scemNone; SCBEValue: False), + (Operators: [opXor]; SCBE: scemNone; SCBEValue: False), + (Operators: [opBwAnd]; SCBE: scemNone; SCBEValue: False), + (Operators: [opEqual, opNotEqual]; SCBE: scemNone; SCBEValue: False), + (Operators: [opLess, opLessEqual, + opGreater, opGreaterEqual]; SCBE: scemNone; SCBEValue: False), + (Operators: [opShl, opShr]; SCBE: scemOptional; SCBEValue: False), + (Operators: [opAdd, opSubtract]; SCBE: scemNone; SCBEValue: False), + (Operators: [opMul, opDiv, opMod]; SCBE: scemOptional; SCBEValue: False)); + +function TParser.Chain(Level: Byte; DoEval: Boolean): TIsppVariant; + + function CallNext: TIsppVariant; + begin + if Level = High(OperatorPrecedence) then + Result := Factor(DoEval) + else + Result := Chain(Level + 1, DoEval); + end; + +var + Operator: TTokenKind; + R: Shortint; +begin + Result := CallNext; + while PeekAtNextToken in OperatorPrecedence[Level].Operators do + begin + if DoEval and (OperatorPrecedence[Level].SCBE <> scemNone) and + (GetOption(FOptions.Options, 'B') or // short circuit bool eval + GetOption(FOptions.Options, 'M')) then // short circuit mul eval + begin + with GetRValue(Result) do + case Typ of + evInt: if AsInt = 0 then R := 0 else R := 1; + evStr: R := -1 + else + R := 0; + end; + if R <> -1 then + begin + if (OperatorPrecedence[Level].SCBE = scemStandard) and GetOption(FOptions.Options, 'B') + or (OperatorPrecedence[Level].SCBE = scemOptional) and GetOption(FOptions.Options, 'M') then + DoEval := not (OperatorPrecedence[Level].SCBEValue = Boolean(R)) + end; + end; + Operator := NextToken; + if DoEval then + Result := PerformOperation(Result, CallNext, Operator) + else + CallNext; + end; +end; + +function TParser.IntExpr(StopOnComma: Boolean): Int64; +var + V: TIsppVariant; +begin + Result := 0; + if StopOnComma then + V := Assignment(True) + else + V := Sequentional(True); + MakeRValue(V); + if V.Typ = evInt then + Result := V.AsInt + else + Error(SIntegerExpressionExpected); +end; + +function TParser.StrExpr(StopOnComma: Boolean): string; +var + V: TIsppVariant; +begin + if StopOnComma then + V := Assignment(True) + else + V := Sequentional(True); + MakeRValue(V); + case V.Typ of + evNull: Result := ''; + evStr: Result := V.AsStr; + else + Error(SStringExpressionExpected); + end; +end; + +function TParser.Assignment(DoEval: Boolean): TIsppVariant; +var + Op: TTokenKind; +begin + Result := Conditional(DoEval); + while PeekAtNextToken in [opAssign..opAgnMod] do + begin + Op := NextToken; + if DoEval then + Result := AssignOperation(CheckLValue(Result), Assignment(DoEval), Op) + else + Assignment(DoEval) + end; +end; + +function TParser.Conditional(DoEval: Boolean): TIsppVariant; +var + R: Boolean; + T, F: TIsppVariant; +begin + Result := Chain(0, DoEval); + while PeekAtNextToken = tkQuestion do + begin + NextToken; + if DoEval then + with GetRValue(Result) do + case Typ of + evNull: R := False; + evInt: R := AsInt <> 0; + else + R := AsStr <> ''; + end + else + R := False; + T := Sequentional(DoEval and R); + NextTokenExpect([tkColon]); + F := Conditional(DoEval and not R); + if DoEval then + if R then + Result := T + else + Result := F; + end; +end; + +function TParser.AssignOperation(LValue, RValue: TIsppVariant; + Op: TTokenKind): TIsppVariant; +begin + SimplifyLValue(LValue); + if Op = opAssign then + begin + LValue.AsPtr^ := GetRValue(RValue); + Result := LValue; + end + else + begin + Result := PerformOperation(LValue, RValue, TTokenKind(Ord(Op) - (Ord(opAgnAdd) - Ord(opAdd)))); + LValue.AsPtr^ := Result; + end; +end; + +function TParser.PostfixIncDec(LValue: TIsppVariant; Dec: Boolean): TIsppVariant; +var + V: TIsppVariant; +begin + Result := GetRValue(LValue); + SimplifyLValue(LValue); + if Dec then MakeInt(V, -1) else MakeInt(V, 1); + LValue.AsPtr^ := PerformOperation(Result, V, opAdd); +end; + +function TParser.PrefixIncDec(LValue: TIsppVariant; + Dec: Boolean): TIsppVariant; +var + V: TIsppVariant; +begin + SimplifyLValue(LValue); + if Dec then MakeInt(V, -1) else MakeInt(V, 1); + LValue.AsPtr^ := PerformOperation(GetRValue(LValue), V, opAdd); + Result := LValue; +end; + +function TParser.CheckLValue(const LValue: TIsppVariant): TIsppVariant; +begin + if LValue.Typ <> evLValue then Error(SLValueRequired); + Result := LValue; +end; + +end. + + diff --git a/Projects/ISPP/IsppPreprocess.pas b/Projects/ISPP/IsppPreprocess.pas new file mode 100644 index 00000000..02e83397 --- /dev/null +++ b/Projects/ISPP/IsppPreprocess.pas @@ -0,0 +1,306 @@ +{ + Inno Setup Preprocessor + Copyright (C) 2001-2002 Alex Yackimoff + + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. +} + +unit IsppPreprocess; + +interface + +uses + CompPreprocInt; + +function ISPreprocessScript(var Params: TPreprocessScriptParams): Integer; stdcall; + +implementation + +uses + SysUtils, CmnFunc2, PathFunc, + IsppBase, IsppPreprocessor, IsppSessions, IsppIntf, IsppIdentMan, IsppVarUtils, IsppConsts; + +procedure ReadScript(const Params: TPreprocessScriptParams; + const Preprocessor: TPreprocessor); +var + I: Integer; + LineText: PChar; + LineTextStr: String; +begin + I := 0; + while True do + begin + LineText := Params.LineInProc(Params.CompilerData, 0, I); + if LineText = nil then + Break; + LineTextStr := LineText; + Preprocessor.QueueLine(LineTextStr); + Inc(I); + end; +end; + +function CleanupProc(CleanupProcData: Pointer): Integer; stdcall; +begin + if PopPreproc = nil then + Result := 0 + else + Result := 1; { should never get here } +end; + +function DecodeStringOptions(const S: String; var Options: TOptions): Boolean; +var + I: Integer; +begin + Options := []; + Result := True; + for I := 1 to Length(S) do begin + case S[I] of + 'a'..'z': Include(Options, Ord(S[I]) - Ord('a')); + else + Result := False; + end; + end; +end; + +function ISPreprocessScript(var Params: TPreprocessScriptParams): Integer; stdcall; +const + Delta = Ord('a'); + DefaultOptions: TIsppOptions = + (ParserOptions: (Options: [Ord('b') - Delta, Ord('p') - Delta]); + Options: [Ord('c') - Delta, Ord('e') - Delta]; VerboseLevel: 0; + InlineStart: '{#'; InlineEnd: '}'; SpanSymbol: #0); +var + ISPPOptions: TIsppOptions; + Definitions, IncludePath, IncludeFiles: String; + Preprocessor: TPreprocessor; + V: TIsppVariant; + + function ParseOption(const OptName, OptValue: String): Boolean; + begin + Result := True; + if OptName = 'ISPP:ParserOptions' then + Result := DecodeStringOptions(OptValue, ISPPOptions.ParserOptions.Options) + else if OptName = 'ISPP:Options' then + Result := DecodeStringOptions(OptValue, ISPPOptions.Options) + else if OptName = 'ISPP:VerboseLevel' then + ISPPOptions.VerboseLevel := StrToIntDef(OptValue, 0) + else if OptName = 'ISPP:InlineStart' then + ISPPOptions.InlineStart := OptValue + else if OptName = 'ISPP:InlineEnd' then + ISPPOptions.InlineEnd := OptValue + else if OptName = 'ISPP:Definitions' then + Definitions := OptValue + else if OptName = 'ISPP:IncludePath' then + IncludePath := OptValue + else if OptName = 'ISPP:IncludeFiles' then + IncludeFiles := OptValue + else + Result := False; + end; + + function ParseOptions(P: PChar): Boolean; + var + EqPos: PChar; + OptName: String; + begin + Result := True; + if P = nil then + Exit; + while P^ <> #0 do begin + EqPos := StrScan(P, '='); + if EqPos = nil then begin + Result := False; + Break; + end; + SetString(OptName, P, EqPos - P); + P := EqPos + 1; + if not ParseOption(OptName, P) then begin + Result := False; + Break; + end; + Inc(P, StrLen(P) + 1); + end; + end; + + function ParseDefinitions(Definitions: PChar; VarMan: TIdentManager): Boolean; + + procedure ParseDefinition(const S: string); + var + I: Integer; + Name, V: string; + Value: TIsppVariant; + begin + Value := NULL; + I := Pos('=', S); + if I > 0 then + begin + Name := Copy(S, 1, I - 1); + V := Copy(S, I + 1, MaxInt); + if V <> '' then + MakeStr(Value, V) + end + else + Name := Trim(S); + VarMan.DefineVariable(Name, -1, Value, dsPublic); + end; + + var + DelimPos: PChar; + N: Integer; + Definition: string; + begin + Result := True; + while Definitions^ <> #0 do begin + DelimPos := StrScan(Definitions, #1); + if DelimPos = nil then begin + Result := False; + Break; + end; + N := DelimPos - Definitions; + if N > 0 then begin + SetString(Definition, Definitions, N); + ParseDefinition(Definition); + end; + Inc(Definitions, N + 1); + end; + end; + + function IncludeBuiltinsAndParseIncludeFiles(BuiltinsDir: String; IncludeFiles: PChar; Options: TOptions): Boolean; + + function Escape(const S: string): string; + var + I: Integer; + begin + Result := ''; + for I := 1 to Length(S) do + begin + Result := Result + S[I]; + if S[I] = '\' then Result := Result + '\'; + end; + end; + + procedure Include(FileName: String; Builtins: Boolean); + begin + if not GetOption(Options, 'P') then + FileName := Escape(FileName); + Preprocessor.IncludeFile(FileName, Builtins, False, True); + end; + + const + SBuiltins = 'ISPPBuiltins.iss'; + var + DelimPos: PChar; + N: Integer; + IncludeFile: String; + begin + Result := True; + IncludeFile := BuiltinsDir + SBuiltins; + if FileExists(IncludeFile) then + Include(IncludeFile, True) + else + Preprocessor.WarningMsg(SFileNotFound, [SBuiltins]); + while IncludeFiles^ <> #0 do begin + DelimPos := StrScan(IncludeFiles, #1); + if DelimPos = nil then begin + Result := False; + Break; + end; + N := DelimPos - IncludeFiles; + if N > 0 then begin + SetString(IncludeFile, IncludeFiles, N); + Include(IncludeFile, False); + end; + Inc(IncludeFiles, N + 1); + end; + end; + +var + SourcePath, CompilerPath, LineFilename, LineText: string; + LineNumber: Integer; +begin + if (Params.Size <> SizeOf(Params)) or + (Params.InterfaceVersion <> 3) then + begin + Result := ispeInvalidParam; + Exit; + end; + + SourcePath := Params.SourcePath; + CompilerPath := Params.CompilerPath; + + ISPPOptions := DefaultOptions; + Definitions := ''; + IncludePath := RemoveBackslashUnlessRoot(CompilerPath); + IncludeFiles := ''; + if not ParseOptions(Params.Options) then + begin + Result := ispeInvalidParam; + Exit; + end; + + { Hack: push a dummy item onto the stack to defer deletion of temp. files } + PushPreproc(nil); + try + Preprocessor := TPreprocessor.Create(Params, nil, ISPPOptions, SourcePath, + CompilerPath, Params.Filename); + try + Preprocessor.IncludePath := IncludePath; + + MakeStr(V, SourcePath); + Preprocessor.VarMan.DefineVariable('SourcePath', -1, V, dsPublic); + + MakeStr(V, CompilerPath); + Preprocessor.VarMan.DefineVariable('CompilerPath', -1, V, dsPublic); + + MakeInt(V, Params.CompilerBinVersion); + Preprocessor.VarMan.DefineVariable('Ver', -1, V, dsPublic); + + if not ParseDefinitions(PChar(Definitions), Preprocessor.VarMan) or + not IncludeBuiltinsAndParseIncludeFiles(Params.CompilerPath, PChar(IncludeFiles), + Preprocessor.FOptions.ParserOptions.Options) then + begin + Result := ispeInvalidParam; + Exit; + end; + + ReadScript(Params, Preprocessor); + Preprocessor.Stack.Resolved; + + if not GetOption(Preprocessor.FOptions.Options, 'C') then + Result := ispeSilentAbort + else + begin + Preprocessor.GetNextOutputLineReset; + while Preprocessor.GetNextOutputLine(LineFilename, LineNumber, LineText) do + Params.LineOutProc(Params.CompilerData, PChar(LineFilename), + LineNumber, PChar(LineText)); + Result := ispeSuccess; + end; + finally + Preprocessor.Free; + end; + except + on E: EPreprocError do {preprocessor (syntax most likely) error} + begin + Params.ErrorProc(Params.CompilerData, PChar(E.Message), + PChar(E.FileName), E.LineNumber, E.ColumnNumber); + Result := ispePreprocessError; + end; + on E: Exception do + begin + Params.ErrorProc(Params.CompilerData, + PChar(Format('Unexpected exception of class %s in ISPP.' + + #13#10#13#10'%s.', [E.ClassName, E.Message])), nil, 0, 0); + Result := ispePreprocessError; + end; + end; + if Result = ispeSuccess then + Params.PreprocCleanupProc := CleanupProc + else + PopPreproc; +end; + +end. diff --git a/Projects/ISPP/IsppPreprocessor.pas b/Projects/ISPP/IsppPreprocessor.pas new file mode 100644 index 00000000..7551a940 --- /dev/null +++ b/Projects/ISPP/IsppPreprocessor.pas @@ -0,0 +1,1872 @@ +{ + Inno Setup Preprocessor + Copyright (C) 2001-2002 Alex Yackimoff + + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. +} + +unit IsppPreprocessor; + +interface + +uses Windows, SysUtils, Classes, CompPreprocInt, IniFiles, Registry, IsppIntf, + IsppBase, IsppStack, IsppIdentMan, IsppParser; + +type + + TPreprocessor = class; + + EPreprocError = class(Exception) + FileName: string; + LineNumber: Integer; + ColumnNumber: Integer; + constructor Create(Preproc: TPreprocessor; const Msg: string); + end; + + TConditionalBlockInfo = packed record + BlockState, Fired, HadElse, Reserved: Boolean; + end; + + TConditionalVerboseMsg = (cvmIf, cvmElif, cvmElse, cvmEndif); + + TConditionalTranslationStack = class(TStack) + private + FPreproc: TPreprocessor; + FCache: Boolean; + FCacheValid: Boolean; + procedure VerboseMsg(Msg: TConditionalVerboseMsg; Eval: Boolean); + protected + function Last: TConditionalBlockInfo; + procedure UpdateLast(const Value: TConditionalBlockInfo); + public + constructor Create(Preproc: TPreprocessor); + procedure IfInstruction(Eval: Boolean); + procedure ElseIfInstruction(Eval: Boolean); + procedure ElseInstruction; + procedure EndIfInstruction; + function Include: Boolean; + procedure Resolved; + end; + + TPreprocessorCommand = (pcError, pcIf, pcIfDef, pcIfNDef, pcIfExist, + pcIfNExist, pcElseIf, pcElse, pcEndIf, pcDefine, pcUndef, pcInclude, + pcErrorDir, pcPragma, pcLine, pcImport, pcPrint, pcPrintEnv, pcFile, + pcExecute, pcGlue, pcEndGlue, pcDim, pcProcedure, pcEndProc, pcEndLoop, + pcFor, pcReDim); + + TDropGarbageProc = procedure(Item: Pointer); + + TIsppMessageType = (imtStatus, imtWarning); + + TPreprocessor = class(TObject, IIdentManager) + private + FCompilerParams: TPreprocessScriptParams; + FCompilerPath: string; + FCounter: Integer; + FCurrentFile: Word; + FCurrentLine: Word; + FDefaultScope: TDefineScope; + FFileStack: TStringList; { strs: files being included } + FIncludes: TStringList; { strs: files been included, for error msgs } + FIncludePath: string; + FInsertionPoint: Integer; + FLinePointer: Integer; + FMainCounter: Word; + FOutput: TStringList; { strs: translation } + FQueuedLine: string; + FQueuedLineCount: Integer; + FSourcePath: string; + FStack: TConditionalTranslationStack; + FIdentManager: TIdentManager; + FInProcBody: Boolean; + FInForBody: Boolean; + FProcs: TStringList; + FGarbageCollection: TList; + procedure DropGarbage; + function ProcessInlineDirectives(P: PChar): string; + function ProcessPreprocCommand(Command: TPreprocessorCommand; + var Params: string; ParamsOffset: Integer): Boolean; + procedure PushFile(const FileName: string); + procedure PopFile; + function CheckFile(const FileName: string): Boolean; + function EmitDestination: TStringList; + procedure SendMsg(Msg: string; Typ: TIsppMessageType); + function GetFileName(Code: Integer): string; + function GetLineNumber(Code: Integer): Word; + procedure RaiseErrorEx(const Message: string; Column: Integer); + procedure ExecProc(Body: TStrings); + protected + function GetDefaultScope: TDefineScope; + procedure SetDefaultScope(Scope: TDefineScope); + procedure InternalAddLine(const LineRead: string; FileIndex, LineNo: Word; + NonISS: Boolean); + function InternalQueueLine(const LineRead: string; FileIndex, LineNo: Word; + NonISS: Boolean): Integer; + function ParseFormalParams(Parser: TParser; var ParamList: PParamList): Integer; + { IUnknown } + function QueryInterface(const IID: TGUID; out Obj): HRESULT; stdcall; + function _AddRef: Integer; stdcall; + function _Release: Integer; stdcall; + { IIdentManager } + function LookupPredefined(Name: string; Value: PIsppVariant): Boolean; + function Defined(const Name: String): Boolean; + function GetIdent(const Name: String; + out CallContext: ICallContext): TIdentType; + function TypeOf(const Name: String): Byte; + function DimOf(const Name: String): Integer; + public + FOptions: TISPPOptions; + constructor Create(const CompilerParams: TPreprocessScriptParams; + VarManager: TIdentManager; const Options: TIsppOptions; + const SourcePath: string; const CompilerPath: string; const FileName: string = ''); + destructor Destroy; override; + procedure CallIdleProc; + procedure VerboseMsg(Level: Byte; const Msg: string); overload; + procedure VerboseMsg(Level: Byte; const Msg: string; const Args: array of const); overload; + procedure StatusMsg(const Msg: string); overload; + procedure StatusMsg(const Msg: string; const Args: array of const); overload; + procedure WarningMsg(const Msg: string); overload; + procedure WarningMsg(const Msg: string; const Args: array of const); overload; + function GetNextOutputLine(var LineFilename: string; var LineNumber: Integer; + var LineText: string): Boolean; + procedure GetNextOutputLineReset; + procedure IncludeFile(FileName: string; Builtins, UseIncludePathOnly, ResetCurrentFile: Boolean); + procedure QueueLine(const LineRead: string); + function PrependDirName(const FileName, Dir: string): string; + procedure RegisterFunction(const Name: string; Handler: TIsppFunction; Ext: Longint); + procedure RaiseError(const Message: string); + procedure SaveToFile(const FileName: string); + procedure CollectGarbage(Item: Pointer; Proc: TDropGarbageProc); + procedure UncollectGarbage(Item: Pointer); + property IncludedFiles: TStringList read FIncludes; + property IncludePath: string read FIncludePath write FIncludePath; + property SourcePath: string read FSourcePath; + property StringList: TStringList read FOutput; + property Stack: TConditionalTranslationStack read FStack; + property VarMan: TIdentManager read FIdentManager; + end; + +implementation + +uses IsppConsts, IsppFuncs, IsppVarUtils, IsppSessions, CTokenizer, PathFunc, + CmnFunc2, FileClass, Struct; + +const + PreprocCommands: array[TPreprocessorCommand] of String = + ('', 'if', 'ifdef', 'ifndef', 'ifexist', 'ifnexist', 'elif', 'else', + 'endif', 'define', 'undef', 'include', 'error', 'pragma', 'line', 'import', + 'emit', 'env', 'file', 'expr', 'insert', 'append', 'dim', 'sub', 'endsub', + 'endloop', 'for', 'redim'); + PpCmdSynonyms: array[TPreprocessorCommand] of Char = + (#0, '?', #0, #0, #0, #0, #0, '^', '.', ':', #0, '+', #0, #0, #0, #0, + '=', '%', #0, '!', #0, #0, #0, #0, #0, #0, #0, #0); + +function GetEnv(const EnvVar: String): String; + + function AdjustLength(var S: String; const Res: Cardinal): Boolean; + begin + Result := Integer(Res) < Length(S); + SetLength (S, Res); + end; + +var + Res: DWORD; +begin + SetLength(Result, 255); + repeat + Res := GetEnvironmentVariable(PChar(EnvVar), PChar(Result), Length(Result)); + if Res = 0 then begin + Result := ''; + Break; + end; + until AdjustLength(Result, Res); +end; + +function ParsePreprocCommand(var P: PChar; ExtraTerminator: Char): TPreprocessorCommand; +begin + for Result := TPreprocessorCommand(1) to High(TPreprocessorCommand) do + begin + if (P^ = PpCmdSynonyms[Result]) then + Inc(P) + else if (StrLIComp(P, @PreprocCommands[Result][1], Length(PreprocCommands[Result])) = 0) and + CharInSet(P[Length(PreprocCommands[Result])], [#0..#32, ExtraTerminator]) then + Inc(P, Length(PreprocCommands[Result])) + else + Continue; + Exit; + end; + if StrLIComp('echo', P, 4) = 0 then + begin + Result := pcPrint; + Inc(P, 4) + end + else if StrLIComp('call', P, 4) = 0 then + begin + Result := pcExecute; + Inc(P, 4); + end + else + Result := pcError; +end; + +{ EPreprocError } + +constructor EPreprocError.Create(Preproc: TPreprocessor; const Msg: string); +begin + inherited Create(Msg + '.'); + FileName := Preproc.GetFileName(-1); + LineNumber := Preproc.GetLineNumber(-1); +end; + +{ TPreprocessor } + +function CheckReservedIdent(const Ident: string): string; +begin + Result := UpperCase(Ident); + if (Result = SLocal) or + (Result = SGlobal) or + (Result = SInt) or + (Result = SStr) or + (Result = SAny) then + raise EParsingError.CreateFmt(SExpectedButFound, [SIdent, '''' + Result + '''']); + Result := Ident; +end; + +constructor TPreprocessor.Create(const CompilerParams: TPreprocessScriptParams; + VarManager: TIdentManager; const Options: TIsppOptions; + const SourcePath, CompilerPath, FileName: string); +begin + PushPreproc(Self); + if VarManager = nil then + FIdentManager := TIdentManager.Create(Self, Longint(Self)) + else + FIdentManager := VarManager; + FOptions := Options; + FIdentManager._AddRef; + FIdentManager.BeginLocal; + FCompilerParams := CompilerParams; + FCompilerPath := CompilerPath; + FSourcePath := SourcePath; + FFileStack := TStringList.Create; + FIncludes := TStringList.Create; + FIncludes.Add(FileName); //main file - no name + FInsertionPoint := -1; + FOutput := TStringList.Create; + FProcs := TStringList.Create; + FStack := TConditionalTranslationStack.Create(Self); + if VarManager = nil then IsppFuncs.RegisterFunctions(Self); +end; + +destructor TPreprocessor.Destroy; +begin + DropGarbage; + if PopPreproc <> Self then + RaiseError('Internal error: FSP'); + FStack.Free; + FProcs.Free; + FOutput.Free; + FIncludes.Free; + if FFileStack.Count <> 0 then + RaiseError('Internal error: FNE'); + FFileStack.Free; + FIdentManager.EndLocal; + FIdentManager._Release; +end; + +function TPreprocessor.GetFileName(Code: Integer): string; +begin + if Code = -1 then + Result := FIncludes[FCurrentFile] + else + Result := FIncludes[Longint(FOutput.Objects[Code]) shr 16]; +end; + +function TPreprocessor.GetLineNumber(Code: Integer): Word; +begin + if Code = -1 then + Result := FCurrentLine + else + Result := Word(FOutput.Objects[Code]) and $FFFF +end; + +function TPreprocessor.GetNextOutputLine(var LineFilename: string; var LineNumber: Integer; + var LineText: string): Boolean; +begin + Result := False; + if FLinePointer < FOutput.Count then + begin + LineFilename := GetFileName(FLinePointer); + LineNumber := GetLineNumber(FLinePointer); + LineText := FOutput[FLinePointer]; + Inc(FLinePointer); + Result := True; + end; +end; + +procedure TPreprocessor.GetNextOutputLineReset; +begin + FLinePointer := 0; +end; + +procedure TPreprocessor.InternalAddLine(const LineRead: string; FileIndex, LineNo: Word; + NonISS: Boolean); +var + IncludeLine: Boolean; + P, P1: PChar; + Command: TPreprocessorCommand; + DirectiveOffset: Integer; + State: Boolean; + S, S1: string; +begin + try + Inc(LineNo); + FCurrentFile := FileIndex; + FCurrentLine := LineNo; + P := PChar(LineRead); + IncludeLine := True; + if P^ <> #0 then + begin + P1 := P; + while CharInSet(P^, [#1..#32]) do Inc(P); + if P^ = '#' then + begin + Inc(P); + while CharInSet(P^, [#1..#32]) do Inc(P); + IncludeLine := FInProcBody; + Command := ParsePreprocCommand(P, #0); + if FInProcBody then + begin + case Command of + pcError: RaiseError(SUnknownPreprocessorDirective); + pcProcedure: RaiseError('Nested procedure declaration not allowed'); + pcEndProc: + begin + S := P; + ProcessPreprocCommand(Command, S, P - P1); + IncludeLine := False; + end + else + S := LineRead; + end; + end + else + begin + State := FStack.Include; + DirectiveOffset := P - P1; + //S := Copy(LineRead, DirectiveOffset + 1, MaxInt); + S := P; + case Command of + pcIf..pcIfNExist: + FStack.IfInstruction(FStack.Include and + ProcessPreprocCommand(Command, S, DirectiveOffset)); + pcElseIf: + FStack.ElseIfInstruction(FStack.Last.Fired or + (FStack.Include or not FStack.Last.BlockState) and + ProcessPreprocCommand(Command, S, DirectiveOffset)); + pcElse: FStack.ElseInstruction; + pcEndIf: FStack.EndIfInstruction + else + if State then + case Command of + pcPrint, pcPrintEnv: + begin + ProcessPreprocCommand(Command, S, DirectiveOffset); + VerboseMsg(8, SLineEmitted, [S]); + IncludeLine := True + end; + pcFile: RaiseError(SFileDirectiveCanBeOnlyInline); + else + ProcessPreprocCommand(Command, S, DirectiveOffset); + end; + end + end; + end + else + if not FInProcBody and not FStack.Include then + IncludeLine := False + else + if ((P^ = '/') and (P[1] = '/')) or + ((P^ = #0) and not (optEmitEmptyLines in FOptions.Options)) then //P^ is #0 if the line was all whitespace + IncludeLine := False + else + if (P^ <> #0) and (P^ <> ';') and not FInProcBody then + S := PChar(ProcessInlineDirectives(P1)) + else + S := P1; + end + else + begin + S := ''; + IncludeLine := optEmitEmptyLines in FOptions.Options + end; + if IncludeLine then + begin + P := PChar(S); + repeat + P1 := P; + while not CharInSet(P^, [#0, #10, #13]) do Inc(P); + SetString(S1, P1, P - P1); + if FInsertionPoint >= 0 then + begin + EmitDestination.InsertObject(FInsertionPoint, S1, + TObject(FileIndex shl 16 or LineNo)); + Inc(FInsertionPoint); + end + else + EmitDestination.AddObject(S1, TObject(FileIndex shl 16 or LineNo)); + while CharInSet(P^, [#10, #13]) do Inc(P); + until P^ = #0; + end; + except + on E: EParsingError do + RaiseErrorEx(E.Message, E.Position); + on E: EPreprocError do + raise; + on E: Exception do + RaiseError(E.Message); + end; +end; + +function TPreprocessor.ProcessInlineDirectives(P: PChar): string; +var + S: string; + Command: TPreprocessorCommand; + LineStack: TConditionalTranslationStack; + LineStart, P1, DStart, DEnd: PChar; + + function ScanForInlineStart(var P, D: PChar): Boolean; + var + I: Integer; + begin + Result := False; + while P^ <> #0 do + begin + if P^ = FOptions.InlineStart[1] then + begin + D := P; + Result := True; + for I := 2 to Length(FOptions.InlineStart) do + begin + Inc(D); + if D^ <> FOptions.InlineStart[I] then + begin + Result := False; + Break; + end; + end; + Inc(D); + end; + if Result then Break; + Inc(P); + end; + end; + + function ScanForInlineEnd(var P: PChar): PChar; + var + I: Integer; + begin + Result := nil; + while P^ <> #0 do + begin + if P^ = FOptions.InlineEnd[1] then + begin + Result := P; + for I := 2 to Length(FOptions.InlineEnd) do + begin + Inc(P); + if P^ <> FOptions.InlineEnd[I] then + begin + Result := nil; + Break; + end; + end; + Inc(P); + end; + if Result <> nil then Exit; + Inc(P); + end; + RaiseError(SUnterminatedPreprocessorDirectiv); + end; + +begin + LineStack := TConditionalTranslationStack.Create(Self); + try + Result := ''; + LineStart := P; + P1 := P; + while ScanForInlineStart(P, DStart) do + begin + SetString(S, P1, P - P1); + if LineStack.Include then Result := Result + S; + Command := ParsePreprocCommand(DStart, Char(FOptions.InlineEnd[1])); + if Command = pcError then + Command := pcPrint; + DEnd := DStart; + SetString(S, DStart, ScanForInlineEnd(DEnd) - DStart); + + case Command of + pcError: RaiseError(SUnknownPreprocessorDirective); + pcIf..pcIfNExist: + LineStack.IfInstruction(LineStack.Include and + ProcessPreprocCommand(Command, S, DStart - LineStart)); + pcElseIf: + LineStack.ElseIfInstruction(LineStack.Last.Fired or + (LineStack.Include or not LineStack.Last.BlockState) and + ProcessPreprocCommand(Command, S, DStart - LineStart)); + pcElse: LineStack.ElseInstruction; + pcEndIf: LineStack.EndIfInstruction; + else + if LineStack.Include then + case Command of + pcInclude, pcGlue..pcEndLoop: + RaiseError(Format(SDirectiveCannotBeInline, + [PreprocCommands[Command]])); + pcPrint, pcPrintEnv, pcFile: + begin + ProcessPreprocCommand(Command, S, DStart - LineStart); + Result := Result + S; + end; + else + ProcessPreprocCommand(Command, S, DStart - LineStart) + end; + end; + P1 := DEnd; + P := DEnd; + //Inc(P); + end; + Result := Result + P1; + LineStack.Resolved; + finally + LineStack.Free + end; +end; + +function TPreprocessor.GetDefaultScope: TDefineScope; +begin + if FFileStack.Count > 0 then + Result := TDefineScope(FFileStack.Objects[FFileStack.Count - 1]) + else + Result := FDefaultScope; +end; + +procedure TPreprocessor.SetDefaultScope(Scope: TDefineScope); +begin + if Scope = dsAny then Scope := dsPublic; + if FFileStack.Count > 0 then + FFileStack.Objects[FFileStack.Count - 1] := TObject(Scope) + else + FDefaultScope := Scope; +end; + +type + TParserAccess = class(TParser); + +function TPreprocessor.ProcessPreprocCommand(Command: TPreprocessorCommand; + var Params: string; ParamsOffset: Integer): Boolean; + + function ParseScope(Parser: TParser; ExpectedTokens: TTokenKinds = [tkIdent]): TDefineScope; + const + ScopeClauses: array[dsPublic..dsPrivate] of string = + ('public', 'protected', 'private'); + begin + Parser.NextTokenExpect([tkIdent]); + for Result := Low(ScopeClauses) to High(ScopeClauses) do + if CompareText(Parser.TokenString, ScopeClauses[Result]) = 0 then + begin + Parser.NextTokenExpect(ExpectedTokens); + Exit; + end; + Result := dsAny; + end; + + function GetScope(Parser: TParser): TDefineScope; + begin + Result := ParseScope(Parser); + if Result = dsAny then Result := GetDefaultScope; + end; + + procedure ParseDim(Parser: TParserAccess; ReDim: Boolean); + var + Name: string; + N, NValues, I: Integer; + Scope: TDefineScope; + Values: array of TIsppVariant; + begin + with Parser do + try + Scope := GetScope(Parser); + Name := CheckReservedIdent(TokenString); + NextTokenExpect([tkOpenBracket]); + N := IntExpr(True); + NValues := 0; + NextTokenExpect([tkCloseBracket]); + if PeekAtNextToken = tkOpenBrace then + begin + NextToken; + SetLength(Values, N); + NValues := 0; + while True do begin + if NValues >= N then + raise EIdentError.CreateFmt(SIndexIsOutOfArraySize, [NValues, Name]); + Values[NValues] := Expr(True); + MakeRValue(Values[NValues]); + Inc(NValues); + if PeekAtNextToken <> tkComma then + Break; + NextToken; + end; + NextTokenExpect([tkCloseBrace]); + end; + FIdentManager.DimVariable(Name, N, Scope, ReDim); + if ReDim and (NValues <> 0) then + Error('Initializers not allowed on #redim of existing array'); + for I := 0 to NValues-1 do + FIdentManager.DefineVariable(Name, I, Values[I], Scope); + finally + //Free + end; + end; + + procedure ParseDefine(Parser: TParserAccess); + var + Name: string; + Start, P: PChar; + IsMacroDefine: Boolean; + //Ident: string; + //Param: TIsppMacroParam; + ParamList: PParamList; + AParamCount: Byte; + AExpr: string; + VarIndex: Integer; + Scope: TDefineScope; + MacroExprPos: TExprPosition; + + begin + with Parser do + begin + Start := FExpr; + Scope := ParseScope(Parser, [tkEOF, tkIdent, tkSemicolon]); + if Scope = dsAny then + Scope := GetDefaultScope + else + if Token <> tkIdent then + begin + SetDefaultScope(Scope); + Exit; + end; + Name := CheckReservedIdent(TokenString); + IsMacroDefine := FExpr^ = '('; + if IsMacroDefine then + begin + NextToken; + AParamCount := ParseFormalParams(Parser, ParamList); + try + Inc(FExpr); + P := FExpr; + MacroExprPos.FileIndex := FCurrentFile; + MacroExprPos.Line := FCurrentLine; + MacroExprPos.Column := (FExpr - Start) + ParamsOffset; + while P^ <> #0 do Inc(P); + SetString(AExpr, FExpr, P - FExpr); + AExpr := Trim(AExpr); + if AExpr = '' then RaiseError(SMacroExpressionExpected); + FIdentManager.DefineMacro(Name, AExpr, MacroExprPos, FOptions.ParserOptions, + Slice(ParamList^, AParamCount), Scope); + finally + Finalize(ParamList^[0], AParamCount); + FreeMem(ParamList) + end; + end + else + begin + VarIndex := -1; + if PeekAtNextToken = tkOpenBracket then + begin + NextToken; + VarIndex := IntExpr(True); + NextTokenExpect([tkCloseBracket]); + end; + case PeekAtNextToken of + opAssign: NextToken; + tkEOF: + begin + FIdentManager.DefineVariable(Name, VarIndex, NULL, Scope); + Exit; + end + end; + FIdentManager.DefineVariable(Name, VarIndex, Evaluate, Scope); + end; + end; + end; + + procedure ParseUndef(Parser: TParserAccess); + var + Scope: TDefineScope; + begin + with Parser do + begin + Scope := GetScope(Parser); + FIdentManager.Delete(CheckReservedIdent(TokenString), Scope); + EndOfExpr; + end + end; + + procedure IncludeFile(const Params: string); + var + FileName: string; + + function TryPascal: Boolean; + begin + Result := not (optPascalStrings in FOptions.ParserOptions.Options); + if Result then + begin + Include(FOptions.ParserOptions.Options, optPascalStrings); + try + try + FileName := ParseStr(Self, Params, ParamsOffset, + @FOptions.ParserOptions); + except + Result := False + end; + finally + Exclude(FOptions.ParserOptions.Options, optPascalStrings); + end; + end + end; + + var + IncludePathOnly: Boolean; + + begin + FileName := Params; + if Pos(';', FileName) > 0 then + Delete(FileName, Pos(';', FileName), MaxInt); + FileName := Trim(FileName); + if (FileName <> '') and (FileName[1] = '<') and + (FileName[Length(FileName)] = '>') then + begin + FileName := Copy(FileName, 2, Length(FileName) - 2); + IncludePathOnly := True; + end + else + begin + try + FileName := ParseStr(Self, Params, ParamsOffset, @FOptions.ParserOptions); + except + if not TryPascal then + raise + end; + IncludePathOnly := False; + end; + + Self.IncludeFile(FileName, False, IncludePathOnly, False); + end; + + procedure Pragma(Parser: TParserAccess); + var + P: string; + + function StrPragma(AllowEmpty: Boolean): string; + begin + Result := Parser.StrExpr(True); + if (Result = '') and not AllowEmpty then + RaiseError(SNonEmptyStringExpected); + Parser.EndOfExpr; + end; + + procedure OptionPragma(var Options: TOptions); + var + C: Char; + V: Boolean; + begin + with Parser do + begin + NextTokenExpect([opSubtract]); + repeat + NextTokenExpect([tkIdent]); + if Length(TokenString) > 1 then + RaiseError(SInvalidOptionName); + C := TokenString[1]; + V := NextTokenExpect([opAdd, opSubtract]) = opAdd; + SetOption(Options, C, V); + until NextTokenExpect([tkEOF, opSubtract, tkSemicolon]) <> opSubtract; + end; + end; + + var + CatchException: Boolean; + ErrorMsg: string; + begin + CatchException := True; + try + with Parser do + begin + NextTokenExpect([tkIdent]); + P := LowerCase(TokenString); + if P = 'include' then + FIncludePath := StrPragma(True) + else if P = 'inlinestart' then + FOptions.InlineStart := StrPragma(False) + else if P = 'inlineend' then + FOptions.InlineEnd := StrPragma(False) + else if P = 'spansymbol' then + FOptions.SpanSymbol := StrPragma(False)[1] + else if P = 'parseroption' then + OptionPragma(FOptions.ParserOptions.Options) + else if P = 'option' then + OptionPragma(FOptions.Options) + else if P = 'verboselevel' then + begin + Include(FOptions.Options, optVerbose); + FOptions.VerboseLevel := IntExpr(True); + VerboseMsg(0, SChangedVerboseLevel, [FOptions.VerboseLevel]); + EndOfExpr; + end + else if P = 'warning' then begin + { Also see WarningFunc in IsppFuncs } + WarningMsg(StrPragma(True)) + end else if P = 'message' then begin + { Also see MessageFunc in IsppFuncs } + StatusMsg(StrPragma(True)) + end else if P = 'error' then begin + { Also see ErrorFunc in IsppFuncs } + ErrorMsg := StrPragma(True); + if ErrorMsg = '' then ErrorMsg := 'Error'; + CatchException := False; + RaiseError(ErrorMsg) + end + else + WarningMsg(SFailedToParsePragmaDirective); + end; + except + if CatchException then + WarningMsg(SFailedToParsePragmaDirective) + else + raise + end; + end; + + function DoFile(FileName: string): string; + + function GetTempFileName(const Original: string): string; + var + Path: string; + begin + SetLength(Path, MAX_PATH); + SetLength(Path, GetTempPath(MAX_PATH, PChar(Path))); + SetLength(Result, MAX_PATH); + if Windows.GetTempFileName(PChar(Path), PChar(UpperCase(Original)), 0, PChar(Result)) <> 0 then + SetLength(Result, StrLen(PChar(Result))) + else + RaiseLastOSError; + end; + + var + F: TTextFileReader; + ALine: string; + Preprocessor: TPreprocessor; + NewOptions: TIsppOptions; + begin + FileName := PrependDirName(FileName, FSourcePath); + if FileExists(FileName) then + begin + Result := GetTempFileName(ExtractFileName(FileName)); + StatusMsg(SProcessingExternalFile, [FileName]); + NewOptions := FOptions; + Preprocessor := TPreprocessor.Create(FCompilerParams, FIdentManager, + NewOptions, FSourcePath, FCompilerPath, FileName); + try + F := TTextFileReader.Create(Filename, fdOpenExisting, faRead, fsRead); + try + while not F.Eof do begin + ALine := F.ReadLine; + Preprocessor.QueueLine(ALine); + end; + finally + F.Free; + end; + Preprocessor.SaveToFile(Result); + QueueFileForDeletion(Result); + VerboseMsg(1, STemporaryFileCreated, [Result]); + finally + Preprocessor.Free; + end; + end + else + RaiseError(Format(SFileNotFound, [FileName])); + end; + + procedure ParseFor(Parser: TParserAccess); + var + Condition, Action, Body: PChar; + begin + Parser.NextTokenExpect([tkOpenBrace]); + Parser.Expr(False); + Parser.NextTokenExpect([tkSemicolon]); + { Skip condition and remember it } + Condition := Parser.FExpr; + Parser.Sequentional(False); + Parser.NextTokenExpect([tkSemicolon]); + Action := Parser.FExpr; + Parser.Sequentional(False); + Parser.NextTokenExpect([tkCloseBrace]); + Body := Parser.FExpr; + Parser.Sequentional(False); + Parser.EndOfExpr; + Parser.SetPos(Condition); + while Parser.IntExpr(False) <> 0 do + begin + Parser.SetPos(Body); + Parser.Sequentional(True); + Parser.SetPos(Action); + Parser.Sequentional(True); + Parser.SetPos(Condition); + end; + end; + + procedure Glue(LineNo: Integer); + begin + if LineNo > FOutput.Count then + RaiseError(Format(SInsertLineNoTooBig, [LineNo])); + FInsertionPoint := LineNo; + VerboseMsg(2, SChangingInsertionPointToLine, [FInsertionPoint]); + end; + + procedure EndGlue; + begin + VerboseMsg(2, SResettingInsertionPoint); + FInsertionPoint := -1; + end; + + procedure BeginProcDecl(Parser: TParserAccess); + var + ProcName: string; + begin + if FInForBody or FInProcBody then + RaiseError('Nested procedure declaration and compound loops not allowed'); + FInProcBody := True; + Parser.NextTokenExpect([tkIdent]); + ProcName := Parser.TokenString; + Parser.EndOfExpr; + FProcs.AddObject(ProcName, TStringList.Create); + EmitDestination.Add('#define private'); + end; + + procedure EndProcDecl; + begin + if not FInProcBody then + RaiseError('''endproc'' without ''procedure'''); + FInProcBody := False; + end; + +var + IfCondition: TIsppVariant; + DummyContext: ICallContext; + Parser: TParserAccess; +begin + Result := False; + Parser := TParserAccess.Create(Self, Params, ParamsOffset, @FOptions.ParserOptions); + with Parser do + try + case Command of + pcError: RaiseError(SUnknownPreprocessorDirective); + pcIf, pcElseIf: + begin + IfCondition := Evaluate; + case IfCondition.Typ of + evInt: Result := IfCondition.AsInt <> 0; + evStr: Result := IfCondition.AsStr <> '' + else + WarningMsg(SSpecifiedConditionEvalatedToVoid); + Result := False + end; + end; + pcIfdef, pcIfndef: + begin + NextTokenExpect([tkIdent]); + case GetIdent(TokenString, DummyContext) of + itUnknown: Result := Command = pcIfNDef; + itVariable, itMacro: Result := Command = pcIfDef; + itFunc: + begin + Result := Command = pcIfDef; + WarningMsg(SFuncIdentForIfdef); + end; + else + begin + Result := Command = pcIfNDef; + WarningMsg(SSpecFuncIdentForIfdef); + end; + end; + EndOfExpr; + end; + pcIfExist, pcIfNExist: + Result := FileExists(PrependDirName(StrExpr(False), FSourcePath)) xor (Command = pcIfNExist); + pcDefine: ParseDefine(Parser); + pcDim: ParseDim(Parser, False); + pcReDim: ParseDim(Parser, True); + pcUndef: ParseUndef(Parser); + pcInclude: IncludeFile(Params); + pcErrorDir: + begin + { Also see ErrorFunc in IsppFuncs } + if Params = '' then Params := 'Error'; + RaiseError(Params); + end; + pcPragma: Pragma(Parser); + pcPrint: Params := ToStr(Evaluate).AsStr; + pcPrintEnv: + begin + NextTokenExpect([tkIdent]); + Params := GetEnv(TokenString); + EndOfExpr; + end; + pcFile: Params := DoFile(StrExpr(False)); + pcExecute: Evaluate; + pcGlue: Glue(IntExpr(False)); + pcEndGlue: EndGlue; + pcFor: ParseFor(Parser); + pcProcedure: BeginProcDecl(Parser); + pcEndProc: EndProcDecl; + else + WarningMsg(SDirectiveNotYetSupported, [PreprocCommands[Command]]) + end; + finally + Free + end; +end; + +function TPreprocessor.InternalQueueLine(const LineRead: string; + FileIndex, LineNo: Word; NonISS: Boolean): Integer; //how many just been added +var + L: Integer; +begin + L := Length(LineRead); + if (L > 2) and (LineRead[L] = FOptions.SpanSymbol) and (LineRead[L - 1] <= #32) then + begin + FQueuedLine := FQueuedLine + TrimLeft(Copy(LineRead, 1, L - 1)); + Inc(FQueuedLineCount); + Result := 0; + end + else + if FQueuedLineCount > 0 then + begin + InternalAddLine(FQueuedLine + TrimLeft(LineRead), FileIndex, LineNo, NonISS); + FQueuedLine := ''; + Result := FQueuedLineCount + 1; + FQueuedLineCount := 0; + end + else + begin + InternalAddLine(LineRead, FileIndex, LineNo, NonISS); + Result := 1; + end; +end; + +procedure TPreprocessor.QueueLine(const LineRead: string); +begin + Inc(FMainCounter, InternalQueueLine(LineRead, 0, FMainCounter, False)); +end; + +procedure TPreprocessor.RegisterFunction(const Name: string; Handler: TIsppFunction; Ext: Longint); +begin + FIdentManager.DefineFunction(Name, Handler, Ext); +end; + +procedure TPreprocessor.SaveToFile(const FileName: string); +begin + var OldWriteBOM := FOutput.WriteBOM; + try + FOutput.WriteBOM := False; + FOutput.SaveToFile(FileName, TEncoding.UTF8); + finally + FOutput.WriteBOM := OldWriteBOM; + end; +end; + +function TPreprocessor.CheckFile(const FileName: string): Boolean; +begin + Result := FFileStack.IndexOf(ExpandFileName(FileName)) < 0; +end; + +procedure TPreprocessor.PopFile; +begin + FFileStack.Delete(FFileStack.Count - 1); +end; + +procedure TPreprocessor.PushFile(const FileName: string); +begin + FFileStack.AddObject(ExpandFileName(FileName), TObject(dsPublic)); +end; + +procedure TPreprocessor.CallIdleProc; +begin + FCompilerParams.IdleProc(FCompilerParams.CompilerData); +end; + +procedure TPreprocessor.VerboseMsg(Level: Byte; const Msg: string); +begin + if (optVerbose in FOptions.Options) and (FOptions.VerboseLevel >= Level) then + StatusMsg(Msg); +end; + +procedure TPreprocessor.VerboseMsg(Level: Byte; const Msg: string; + const Args: array of const); +begin + VerboseMsg(Level, Format(Msg, Args)); +end; + +procedure TPreprocessor.StatusMsg(const Msg: string); +begin + SendMsg(Msg, imtStatus); +end; + +procedure TPreprocessor.StatusMsg(const Msg: string; const Args: array of const); +begin + StatusMsg(Format(Msg, Args)); +end; + +procedure TPreprocessor.WarningMsg(const Msg: string); +begin + SendMsg(Msg, imtWarning); +end; + +procedure TPreprocessor.WarningMsg(const Msg: string; const Args: array of const); +begin + WarningMsg(Format(Msg, Args)); +end; + +procedure TPreprocessor.SendMsg(Msg: string; Typ: TIsppMessageType); +const + MsgPrefixes: array[TIsppMessageType] of string = ('', 'Warning: '); +var + LineNumber: Word; + FileName: String; +begin + Msg := MsgPrefixes[Typ] + Msg; + + LineNumber := GetLineNumber(-1); + if LineNumber <> 0 then begin + FileName := GetFileName(-1); + if FileName <> '' then + Msg := Format('Line %d of %s: %s', [LineNumber, PathExtractName(FileName), Msg]) + else + Msg := Format('Line %d: %s', [LineNumber, Msg]); + end; + + FCompilerParams.StatusProc(FCompilerParams.CompilerData, PChar(Msg), Typ = imtWarning); +end; + +function TPreprocessor.DimOf(const Name: String): Integer; +begin + Result := FIdentManager.DimOf(Name) +end; + +function TPreprocessor.EmitDestination: TStringList; +begin + if FInProcBody then + Result := TStringList(FProcs.Objects[FProcs.Count - 1]) + else + Result := FOutput; +end; + +procedure TPreprocessor.ExecProc(Body: TStrings); +var + I: Integer; +begin + for I := 0 to Body.Count - 1 do + InternalAddLine(Body[I], Integer(Body.Objects[I]) shr 16, + Integer(Body.Objects[I]) and $FFFF - 1, False); +end; + +{ TConditionalTranslationStack } + +constructor TConditionalTranslationStack.Create(Preproc: TPreprocessor); +begin + inherited Create; + FPreproc := Preproc; + FCache := True; +end; + +procedure TConditionalTranslationStack.IfInstruction(Eval: Boolean); +var + A: TConditionalBlockInfo; +begin + A.BlockState := Eval; + A.Fired := Eval; + A.HadElse := False; + PushItem(Pointer(A)); + FCacheValid := False; + VerboseMsg(cvmIf, Eval); +end; + +procedure TConditionalTranslationStack.ElseIfInstruction(Eval: Boolean); +var + A: TConditionalBlockInfo; +begin + if AtLeast(1) then + begin + A := Last; + with A do + begin + if HadElse then FPreproc.RaiseError(SElifAfterElse); + BlockState := not Fired and Eval; + Fired := Fired or Eval; + FCacheValid := False; + end; + UpdateLast(A); + VerboseMsg(cvmElif, Eval); + end + else + FPreproc.RaiseError(SElseWithoutIf); +end; + +procedure TConditionalTranslationStack.ElseInstruction; +var + A: TConditionalBlockInfo; +begin + if AtLeast(1) then + begin + A := Last; + with A do + begin + if HadElse then FPreproc.RaiseError(SDoubleElse); + BlockState := not Fired; + Fired := True; + HadElse := True; + FCacheValid := False; + end; + UpdateLast(A); + VerboseMsg(cvmElse, False); + end + else + FPreproc.RaiseError(SElseWithoutIf); +end; + +procedure TConditionalTranslationStack.EndIfInstruction; +begin + if AtLeast(1) then + begin + PopItem; + FCacheValid := False; + VerboseMsg(cvmEndif, False); + end + else + FPreproc.RaiseError(SEndifWithoutIf); +end; + +function TConditionalTranslationStack.Include: Boolean; +var + I: Integer; +begin + if FCacheValid then + Result := FCache + else + begin + FCacheValid := True; + if Count > 0 then + begin + Result := False; + FCache := False; + for I := Count - 1 downto 0 do + if not TConditionalBlockInfo(List[I]).BlockState then Exit; + end; + Result := True; + FCache := True; + end; +end; + +procedure TConditionalTranslationStack.Resolved; +begin + if Count > 0 then FPreproc.RaiseError(SEndifExpected); +end; + +function TConditionalTranslationStack.Last: TConditionalBlockInfo; +begin + Result := TConditionalBlockInfo(Longint(List.Last)) +end; + +procedure TConditionalTranslationStack.UpdateLast( + const Value: TConditionalBlockInfo); +begin + List.Items[List.Count - 1] := Pointer(Value) +end; + +procedure TConditionalTranslationStack.VerboseMsg( + Msg: TConditionalVerboseMsg; Eval: Boolean); +const + B: array[Boolean] of string = ('false', 'true'); +var + M: string; +begin + case Msg of + cvmIf: M := SStartingConditionalInclusionIf; + cvmElif: M := SUpdatingConditionalInclusionElif; + cvmElse: M := SUpdatingConditionalInclusionElse; + else + begin + FPreproc.VerboseMsg(6, SFinishedConditionalInclusion); + Exit; + end; + end; + FPreproc.VerboseMsg(6, M); +end; + +{ TPreprocessor } + +function TPreprocessor._AddRef: Integer; +begin + Result := -1 +end; + +function TPreprocessor._Release: Integer; +begin + Result := -1; +end; + +function TPreprocessor.QueryInterface(const IID: TGUID; out Obj): HRESULT; +begin + if GetInterface(IID, Obj) then Result := 0 else Result := E_NOINTERFACE +end; + +procedure TPreprocessor.RaiseError(const Message: string); +begin + RaiseErrorEx(Message, 0); +end; + +procedure TPreprocessor.RaiseErrorEx(const Message: string; Column: Integer); +var + E: EPreprocError; +begin + E := EPreprocError.Create(Self, Message); + E.ColumnNumber := Column; + raise E; +end; + +{ TPredefinedVarCallContext } + +type + + TPredefinedVarCallContext = class(TInterfacedObject, ICallContext) + private + FValue: TIsppVariant; + public + constructor Create(const Value: TIsppVariant); + procedure Add(const Name: String; const Value: TIsppVariant); + function Call: TIsppVariant; dynamic; + function GroupingStyle: TArgGroupingStyle; + procedure Clone(out NewCallContext: ICallContext); + end; + + TCounterCallContext = class(TPredefinedVarCallContext) + private + FCounter: PInteger; + public + constructor Create(Counter: PInteger); + function Call: TIsppVariant; override; + end; + + TProcCallContext = class(TInterfacedObject, ICallContext) + private + FPreproc: TPreprocessor; + FBody: TStrings; + FScopeUpdated: Boolean; + FIndex: Integer; + procedure UpdateScope; + public + constructor Create(Proprocessor: TPreprocessor; ProcBody: TStrings); + procedure Add(const Name: String; const Value: TIsppVariant); + function Call: TIsppVariant; + procedure Clone(out NewContext: ICallContext); + function GroupingStyle: TArgGroupingStyle; + end; + +constructor TCounterCallContext.Create(Counter: PInteger); +begin + FCounter := Counter; +end; + +function TCounterCallContext.Call: TIsppVariant; +begin + MakeInt(Result, FCounter^); + Inc(FCounter^); +end; + +constructor TPredefinedVarCallContext.Create(const Value: TIsppVariant); +begin + FValue := Value; +end; + +procedure TPredefinedVarCallContext.Add(const Name: String; + const Value: TIsppVariant); +begin + raise EIdentError.Create(SParameterlessVariable); +end; + +function TPredefinedVarCallContext.Call: TIsppVariant; +begin + Result := FValue; +end; + +function TPredefinedVarCallContext.GroupingStyle: TArgGroupingStyle; +begin + Result := agsNone; +end; + +{ IIdentManager } + +function LookupAlwaysDefined(const Name: string): Boolean; +const + AlwaysDefined: array[0..3] of string = + ('ISPP_INVOKED', 'WINDOWS', '__WIN32__', 'UNICODE'); +var + I: Integer; +begin + Result := True; + for I := Low(AlwaysDefined) to High(AlwaysDefined) do + if CompareText(AlwaysDefined[I], Name) = 0 then Exit; + Result := False; +end; + +const + SCounter = '__COUNTER__'; + +function TPreprocessor.Defined(const Name: String): Boolean; +begin + Result := LookupAlwaysDefined(Name) or LookupPredefined(Name, nil) or + (CompareText(Name, SCounter) = 0) or FIdentManager.Defined(Name); +end; + +function TPreprocessor.GetIdent(const Name: String; + out CallContext: ICallContext): TIdentType; +var + V: TIsppVariant; + I: Integer; +begin + Result := itVariable; + I := FProcs.IndexOf(Name); + if I >= 0 then + begin + Result := itFunc; + CallContext := TProcCallContext.Create(Self, TStrings(FProcs.Objects[I])); + end + else + if LookupAlwaysDefined(Name) then + CallContext := TPredefinedVarCallContext.Create(NULL) + else + if LookupPredefined(Name, @V) then + CallContext := TPredefinedVarCallContext.Create(V) + else + if CompareText(Name, SCounter) = 0 then + CallContext := TCounterCallContext.Create(@FCounter) + else + Result := FIdentManager.GetIdent(Name, CallContext) +end; + +function TPreprocessor.TypeOf(const Name: String): Byte; +var + V: TIsppVariant; +begin + if LookupAlwaysDefined(Name) then + Result := TYPE_NULL + else + if LookupPredefined(Name, @V) then + case V.Typ of + evInt: Result := TYPE_INTEGER; + evStr: Result := TYPE_STRING + else + Result := TYPE_NULL + end + else + if CompareText(Name, SCounter) = 0 then + Result := TYPE_INTEGER + else + Result := FIdentManager.TypeOf(Name) +end; + +function TPreprocessor.LookupPredefined(Name: string; + Value: PIsppVariant): Boolean; +begin + Result := True; + Name := UpperCase(Name); + if Name = '__FILE__' then + begin + if Value <> nil then MakeStr(Value^, ExtractFileName(FIncludes[FCurrentFile])) + end + else if Name = '__PATHFILENAME__' then + begin + if Value <> nil then MakeStr(Value^, FIncludes[FCurrentFile]) + end + else if Name = '__LINE__' then + begin + if Value <> nil then MakeInt(Value^, FCurrentLine) + end + else if Name = 'PREPROCVER' then + begin + if Value <> nil then MakeInt(Value^, SetupBinVersion) + end + else if Name = '__INCLUDE__' then + begin + if Value <> nil then MakeStr(Value^, FIncludePath); + end + else if (Length(Name) = 9) and (Copy(Name, 1, 6) = '__OPT_') and + (Copy(Name, 8, 2) = '__') then + begin + if Value <> nil then Value^ := NULL; + Result := GetOption(FOptions.Options, Name[7]); + end + else if (Length(Name) = 10) and (Copy(Name, 1, 7) = '__POPT_') and + (Copy(Name, 9, 2) = '__') then + begin + if Value <> nil then Value^ := NULL; + Result := GetOption(FOptions.ParserOptions.Options, Name[8]); + end + else + Result := False; +end; + +procedure TPredefinedVarCallContext.Clone( + out NewCallContext: ICallContext); +begin + NewCallContext := Self +end; + +procedure TPreprocessor.CollectGarbage(Item: Pointer; + Proc: TDropGarbageProc); +begin + if (Item = nil) or (@Proc = nil) then Exit; + if FGarbageCollection = nil then + FGarbageCollection := TList.Create; + FGarbageCollection.Add(Item); + FGarbageCollection.Add(@Proc); +end; + +procedure TPreprocessor.UncollectGarbage(Item: Pointer); +var + I: Integer; +begin + if FGarbageCollection = nil then Exit; + for I := 0 to FGarbageCollection.Count div 2 - 1 do + if FGarbageCollection.Items[I * 2] = Item then + begin + FGarbageCollection.Items[I * 2] := nil; + FGarbageCollection.Items[I * 2 + 1] := nil; + end; + FGarbageCollection.Pack; + if FGarbageCollection.Count = 0 then FreeAndNil(FGarbageCollection); +end; + +procedure TPreprocessor.DropGarbage; +var + I: Integer; + Proc: TDropGarbageProc; + Item: Pointer; +begin + if FGarbageCollection <> nil then + try + for I := 0 to FGarbageCollection.Count div 2 - 1 do + begin + Item := FGarbageCollection.Items[I * 2]; + Proc := FGarbageCollection.Items[I * 2 + 1]; + try + if @Proc <> nil then + try + Proc(Item); + except + end + else + if Item <> nil then + begin + try + TObject(Item).Free + except + try Dispose(Item) except end; + end; + end; + finally + FGarbageCollection.Items[I * 2] := nil; + FGarbageCollection.Items[I * 2 + 1] := nil; + end; + end; + finally + FreeAndNil(FGarbageCollection); + end; +end; + +function TPreprocessor.PrependDirName(const FileName, Dir: string): string; +var + P: PChar; +begin + P := FCompilerParams.PrependDirNameProc(FCompilerParams.CompilerData, + PChar(FileName), PChar(Dir), PChar(GetFileName(-1)), GetLineNumber(-1), 0); + if P = nil then + RaiseError('PrependDirNameProc failed'); + Result := P; +end; + +procedure TPreprocessor.IncludeFile(FileName: string; + Builtins, UseIncludePathOnly, ResetCurrentFile: Boolean); + + function IsDotRelativePath(const Filename: String): Boolean; + begin + { Check for '.\' and '..\' } + if (Length(Filename) >= 2) and (Filename[1] = '.') and PathCharIsSlash(Filename[2]) then + Result := True + else if (Length(Filename) >= 3) and (Filename[1] = '.') and (Filename[2] = '.') and + PathCharIsSlash(Filename[3]) then + Result := True + else + Result := False; + end; + + procedure AddToPath(var Path: string; const Dir: string); + begin + if (Dir <> '') and (Pos(';' + Dir + ';', ';' + Path + ';') = 0) then + begin + if Path <> '' then Path := Path + ';'; + Path := Path + Dir; + end; + end; + + function RemoveSlash(const S: string): string; + begin + Result := S; + if (Length(Result) > 3) and (Result[Length(Result)] = '\') then + Delete(Result, Length(Result), 1); + end; + + function DoSearch(const SearchDirs: String): String; + var + FilePart: PChar; + begin + SetLength(Result, MAX_PATH); + SetLength(Result, SearchPath(PChar(SearchDirs), PChar(FileName), nil, MAX_PATH, + PChar(Result), FilePart)); + end; + +var + CurPath, SearchDirs, FullFileName: String; + FileHandle: TPreprocFileHandle; + I, FileIndex: Integer; + J: Word; + LineText: PChar; + LineTextStr: string; +begin + if ResetCurrentFile then begin + FCurrentFile := 0; + FCurrentLine := 0; + end; + + { Expand any prefix on the filename (e.g. 'compiler:') } + FileName := PrependDirName(FileName, ''); + + if IsDotRelativePath(FileName) then + begin + { Make filenames beginning with '.\' and '..\' relative to the directory + containing the current file } + CurPath := PathExtractPath(FIncludes[FCurrentFile]); + if CurPath = '' then + CurPath := FSourcePath; + FileName := PathCombine(CurPath, FileName); + end + else if not PathIsRooted(FileName) then + begin + if not UseIncludePathOnly then + begin + for I := FFileStack.Count - 1 downto 0 do + AddToPath(SearchDirs, ExtractFileDir(FFileStack[I])); + if FIncludes[0] <> '' then + AddToPath(SearchDirs, ExtractFileDir(FIncludes[0])); + AddToPath(SearchDirs, RemoveSlash(FSourcePath)); + end; + + AddToPath(SearchDirs, FIncludePath); + AddToPath(SearchDirs, GetEnv('INCLUDE')); + + if not UseIncludePathOnly then + AddToPath(SearchDirs, RemoveSlash(FCompilerPath)); + end; + + FullFileName := DoSearch(SearchDirs); + + if FullFileName <> '' then + begin + if not CheckFile(FullFileName) then + RaiseError(Format(SFileIsAlreadyBeingIncluded, [FullFileName])); + if not Builtins then + StatusMsg(SIncludingFile, [FullFileName]); + PushFile(FullFileName); + try + FileHandle := FCompilerParams.LoadFileProc(FCompilerParams.CompilerData, + PChar(FullFileName), PChar(GetFileName(-1)), GetLineNumber(-1), 0); + if FileHandle < 0 then + RaiseError('LoadFileProc failed'); + FileIndex := FIncludes.Add(FullFileName); + FIdentManager.BeginLocal; + try + I := 0; + J := 0; + while True do + begin + LineText := FCompilerParams.LineInProc(FCompilerParams.CompilerData, + FileHandle, I); + if LineText = nil then + Break; + LineTextStr := LineText; + Inc(J, InternalQueueLine(LineTextStr, FileIndex, J, False)); + Inc(I); + end; + finally + FIdentManager.EndLocal + end; + finally + PopFile; + end; + end + else + RaiseError(Format(SFileNotFound, [FileName])); +end; + +// ParseFormalParams +// Parser must be behind the opening parenthesis + +function TPreprocessor.ParseFormalParams(Parser: TParser; + var ParamList: PParamList): Integer; +var + Param: TIsppMacroParam; + Ident: string; + + procedure Grow; + var + OldCapacity, NewCapacity: Integer; + begin + OldCapacity := ((Result div 4) * 4) * SizeOf(TIsppMacroParam); + NewCapacity := ((Result div 4 + 1) * 4); + if NewCapacity > High(Byte) then RaiseError(STooManyFormalParams); + NewCapacity := NewCapacity * SizeOf(TIsppMacroParam); + ReallocMem(ParamList, NewCapacity); + { Initilizing to zeroes is required to prevent compiler's attempts to + finilize not existing strings } + FillChar(ParamList^[Result], NewCapacity - OldCapacity, 0) + end; + +begin + with Parser do + begin + Result := 0; + ParamList := AllocMem(SizeOf(TIsppMacroParam) * 4); + while not (PeekAtNextToken in [tkEOF, tkCloseParen]) do + begin + Param.Name := ''; + Param.DefValue.AsStr := ''; + FillChar(Param, SizeOf(Param), 0); + Param.ParamFlags := []; + if NextTokenExpect([tkIdent, opMul]) = tkIdent then + begin + Ident := TokenString; + if not (PeekAtNextToken in [tkEOF, tkComma, tkCloseParen, opAssign]) then + begin + Ident := UpperCase(Ident); + if Ident = sAny then {do nothing } + else if Ident = sInt then Param.DefValue.Typ := evInt + else if Ident = sStr then Param.DefValue.Typ := evStr + else if Ident = 'FUNC' then + begin + Param.DefValue.Typ := evCallContext; + Include(Param.ParamFlags, pfFunc) + end + else if Ident = 'ARRAY' then Param.DefValue.Typ := evCallContext + else RaiseError(Format(SInvalidTypeId, [Ident])); + if Param.DefValue.Typ <> evSpecial then + Include(Param.ParamFlags, pfTypeDefined); + if NextTokenExpect([tkIdent, opMul]) = opMul then + begin + Include(Param.ParamFlags, pfByRef); + NextTokenExpect([tkIdent]); + end; + end; + end + else + begin + Include(Param.ParamFlags, pfByRef); + NextTokenExpect([tkIdent]); + end; + Ident := TokenString; + Param.Name := CheckReservedIdent(Ident); + if PeekAtNextToken = opAssign then + begin + if pfByRef in Param.ParamFlags then + RaiseError(SByRefNoDefault); + NextToken; + case Param.DefValue.Typ of + evSpecial: Param.DefValue := GetRValue(Expr(True)); + evInt: Param.DefValue.AsInt := IntExpr(True); + evStr: Param.DefValue.AsStr := StrExpr(True); + end; + Include(Param.ParamFlags, pfHasDefault); + end; + ParamList^[Result] := Param; + Inc(Result); + if Result mod 4 = 0 then + Grow; + if NextTokenExpect([tkComma, tkCloseParen]) = tkCloseParen then Break; + end; + end; +end; + +{ TProcCallContext } + +procedure TProcCallContext.Add(const Name: String; + const Value: TIsppVariant); +begin + UpdateScope; + if Name <> '' then + FPreproc.FIdentManager.DefineVariable(Name, -1, Value, dsPrivate); + FPreproc.FIdentManager.DefineVariable(SLocal, FIndex, Value, dsPrivate); + Inc(FIndex); +end; + +function TProcCallContext.Call: TIsppVariant; +begin + UpdateScope; + try + FPreproc.ExecProc(FBody); + finally + FPreproc.FIdentManager.EndLocal + end; +end; + +procedure TProcCallContext.Clone(out NewContext: ICallContext); +begin + NewContext := TProcCallContext.Create(FPreproc, FBody); +end; + +constructor TProcCallContext.Create(Proprocessor: TPreprocessor; + ProcBody: TStrings); +begin + FPreproc := Proprocessor; + FBody := ProcBody +end; + +function TProcCallContext.GroupingStyle: TArgGroupingStyle; +begin + Result := agsParenteses; +end; + +procedure TProcCallContext.UpdateScope; +var + ReDim: Boolean; +begin + if not FScopeUpdated then + begin + FPreproc.FIdentManager.BeginLocal; + ReDim := False; + FPreproc.FIdentManager.DimVariable(SLocal, 16, dsPrivate, ReDim); + FScopeUpdated := True; + end; +end; + +end. diff --git a/Projects/ISPP/IsppSessions.pas b/Projects/ISPP/IsppSessions.pas new file mode 100644 index 00000000..70345497 --- /dev/null +++ b/Projects/ISPP/IsppSessions.pas @@ -0,0 +1,144 @@ +{ + Inno Setup Preprocessor + Copyright (C) 2001-2002 Alex Yackimoff + + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. +} + +unit IsppSessions; + +interface + +uses IsppPreprocessor; + +procedure PushPreproc(APreproc: TPreprocessor); +function PopPreproc: TPreprocessor; +function PeekPreproc: TPreprocessor; +procedure WarningMsg(const Msg: string; const Args: array of const); +procedure VerboseMsg(Level: Byte; const Msg: string; const Args: array of const); +procedure QueueFileForDeletion(const FileName: string); + +implementation + +uses SysUtils, Classes, IsppStack, Windows; + +procedure WarningMsg(const Msg: string; const Args: array of const); +var + P: TPreprocessor; +begin + P := PeekPreproc; + if Assigned(P) then + P.WarningMsg(Msg, Args) +end; + +procedure VerboseMsg(Level: Byte; const Msg: string; const Args: array of const); +var + P: TPreprocessor; +begin + P := PeekPreproc; + if Assigned(P) then + P.VerboseMsg(Level, Msg, Args); +end; + +{ TPreprocessorFlowStack } + +type + + TPreprocessorFlowStack = class(TStack) + private + FReference: Pointer; + FTempFiles: TStringList; + public + constructor Create(var Reference); + destructor Destroy; override; + procedure Push(APreproc: TPreprocessor); + function Pop: TPreprocessor; + function Peek: TPreprocessor; + procedure QueueFile(const FileName: string); + end; + +constructor TPreprocessorFlowStack.Create(var Reference); +begin + inherited Create; + TPreprocessorFlowStack(Reference) := Self; + FReference := @Reference +end; + +destructor TPreprocessorFlowStack.Destroy; +var + I: Integer; +begin + TPreprocessorFlowStack(FReference^) := nil; + if FTempFiles <> nil then + begin + for I := 0 to FTempFiles.Count - 1 do + DeleteFile(PChar(FTempFiles[I])); + FTempFiles.Free; + end; + inherited Destroy; +end; + +function TPreprocessorFlowStack.Peek: TPreprocessor; +begin + Result := TPreprocessor(inherited Peek); +end; + +function TPreprocessorFlowStack.Pop: TPreprocessor; +begin + Result := TPreprocessor(inherited Pop); + if not AtLeast(1) then Free; +end; + +procedure TPreprocessorFlowStack.Push(APreproc: TPreprocessor); +begin + inherited Push(APreproc); +end; + +procedure TPreprocessorFlowStack.QueueFile(const FileName: string); +begin + if FTempFiles = nil then + begin + FTempFiles := TStringList.Create; + FTempFiles.Duplicates := dupIgnore; + end; + FTempFiles.Add(FileName); +end; + +var + FlowStack: TPreprocessorFlowStack; + +procedure PushPreproc(APreproc: TPreprocessor); +begin + if FlowStack = nil then + TPreprocessorFlowStack.Create(FlowStack); + FlowStack.Push(APreproc) +end; + +function PopPreproc: TPreprocessor; +begin + if FlowStack <> nil then + Result := FlowStack.Pop + else + Result := nil; +end; + +function PeekPreproc: TPreprocessor; +begin + if FlowStack <> nil then + Result := FlowStack.Peek + else + Result := nil; +end; + +procedure QueueFileForDeletion(const FileName: string); +begin + if FlowStack <> nil then + FlowStack.QueueFile(FileName) + else + DeleteFile(PChar(FileName)); +end; + +end. diff --git a/Projects/ISPP/IsppStack.pas b/Projects/ISPP/IsppStack.pas new file mode 100644 index 00000000..3cf49f9a --- /dev/null +++ b/Projects/ISPP/IsppStack.pas @@ -0,0 +1,113 @@ +{ + Inno Setup Preprocessor + Copyright (C) 2001-2002 Alex Yackimoff + + Inno Setup + Copyright (C) 1997-2020 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. +} + +unit IsppStack; + +interface + +uses Classes; + +type + +{ Borrowed from Delphi 5 Contnrs unit } + +{ TOrdered class } + + TOrderedList = class(TObject) + private + FList: TList; + protected + procedure PushItem(AItem: Pointer); virtual; abstract; + function PopItem: Pointer; virtual; + function PeekItem: Pointer; virtual; + property List: TList read FList; + public + constructor Create; + destructor Destroy; override; + + function Count: Integer; + function AtLeast(ACount: Integer): Boolean; + procedure Push(AItem: Pointer); + function Pop: Pointer; + function Peek: Pointer; + end; + +{ TStack class } + + TStack = class(TOrderedList) + protected + procedure PushItem(AItem: Pointer); override; + end; + + +implementation + +uses IsppConsts; + +{ TOrderedList } + +function TOrderedList.AtLeast(ACount: integer): boolean; +begin + Result := List.Count >= ACount; +end; + +function TOrderedList.Peek: Pointer; +begin + Result := PeekItem; +end; + +function TOrderedList.Pop: Pointer; +begin + Result := PopItem; +end; + +procedure TOrderedList.Push(AItem: Pointer); +begin + PushItem(AItem); +end; + +function TOrderedList.Count: Integer; +begin + Result := List.Count; +end; + +constructor TOrderedList.Create; +begin + inherited Create; + FList := TList.Create; +end; + +destructor TOrderedList.Destroy; +begin + List.Free; + inherited Destroy; +end; + +function TOrderedList.PeekItem: Pointer; +begin + Result := List[List.Count-1]; +end; + +function TOrderedList.PopItem: Pointer; +begin + Result := PeekItem; + List.Delete(List.Count-1); +end; + +{ TStack } + +procedure TStack.PushItem(AItem: Pointer); +begin + List.Add(AItem); +end; + + +end. + diff --git a/Projects/ISPP/IsppVarUtils.pas b/Projects/ISPP/IsppVarUtils.pas new file mode 100644 index 00000000..57b068bc --- /dev/null +++ b/Projects/ISPP/IsppVarUtils.pas @@ -0,0 +1,126 @@ +{ + Inno Setup Preprocessor + Copyright (C) 2001-2002 Alex Yackimoff + + Inno Setup + Copyright (C) 1997-2020 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. +} + +unit IsppVarUtils; + +interface + +uses IsppIntf, IsppBase, IsppPreprocessor; + +function SimplifyLValue(var Src: TIsppVariant): Boolean; +procedure MakeRValue(var Src: TIsppVariant); +function GetRValue(const Src: TIsppVariant): TIsppVariant; +procedure CopyExpVar(Src: TIsppVariant; var Dest: TIsppVariant); +procedure MakeInt(var Op: TIsppVariant; Value: Int64); +procedure MakeStr(var Op: TIsppVariant; const Value: string); +procedure MakeBool(var Op: TIsppVariant; Value: Boolean); +function TryStrToInt(Str: string; var Int: Integer): Boolean; +function ToInt(Op: TIsppVariant): TIsppVariant; +function ToStr(Op: TIsppVariant): TIsppVariant; + +const + NULL: TIsppVariant = (Typ: evNull; AsStr: ''; AsInt: 0); + +implementation + +uses SysUtils, IsppConsts; + +function SimplifyLValue(var Src: TIsppVariant): Boolean; +begin + Result := Src.Typ = evLValue; + if Result then + while Src.AsPtr^.Typ = evLValue do Src := Src.AsPtr^; +end; + +procedure MakeRValue(var Src: TIsppVariant); +begin + while Src.Typ = evLValue do Src := Src.AsPtr^; +end; + +function GetRValue(const Src: TIsppVariant): TIsppVariant; +begin + Result := Src; + MakeRValue(Result); +end; + +procedure CopyExpVar(Src: TIsppVariant; var Dest: TIsppVariant); +begin + MakeRValue(Src); + if Src.Typ = evStr then + begin + Dest.Typ := evStr; + Dest.AsInt := 0; + Dest.AsStr := Src.AsStr; + end + else + Move(Src, Dest, SizeOf(TIsppVariant)); +end; + +procedure MakeInt(var Op: TIsppVariant; Value: Int64); +begin + Op.Typ := evInt; + Op.AsInt := Value; + Op.AsStr := ''; +end; + +procedure MakeStr(var Op: TIsppVariant; const Value: string); +begin + Op.Typ := evStr; + Op.AsInt := 0; + Op.AsStr := Value; +end; + +procedure MakeBool(var Op: TIsppVariant; Value: Boolean); +begin + MakeInt(Op, Int64(Value)); +end; + +function TryStrToInt(Str: string; var Int: Integer): Boolean; +var + Err: Integer; +begin + if (Length(Str) > 2) and (Str[1] = '0') and ((Str[2] = 'x') or + (Str[2] = 'X')) then + Str := '$' + Copy(Str, 3, MaxInt); + Val(Str, Int, Err); + Result := Err = 0 +end; + +function ToInt(Op: TIsppVariant): TIsppVariant; +var + I: Integer; +begin + MakeRValue(Op); + I := 0; + if Op.Typ = evStr then + if (Op.AsStr = '') or TryStrToInt(Op.AsStr, I) then + MakeInt(Result, I) + else + raise EConvertError.CreateFmt('Cannot convert "%s" to integer', [Op.AsStr]) + else + if Op.Typ = evNull then + MakeInt(Result, 0) + else + CopyExpVar(Op, Result) +end; + +function ToStr(Op: TIsppVariant): TIsppVariant; +begin + MakeRValue(Op); + if Op.Typ = evInt then + MakeStr(Result, IntToStr(Op.AsInt)) + else + if Op.Typ = evNull then + MakeStr(Result, '') + else + MakeStr(Result, Op.AsStr) +end; + +end. diff --git a/Projects/Projects.groupproj b/Projects/Projects.groupproj new file mode 100644 index 00000000..ee4886dc --- /dev/null +++ b/Projects/Projects.groupproj @@ -0,0 +1,108 @@ + + + {C0278F77-1554-45D9-B1E9-69FB923E8771} + + + + + + + + + + + + + + + + + + + + + + + + + + Default.Personality.12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Res/Compil32.docicon.res b/Projects/Res/Compil32.docicon.res new file mode 100644 index 00000000..d6586a90 Binary files /dev/null and b/Projects/Res/Compil32.docicon.res differ diff --git a/Projects/Res/Compil32.manifest.rc b/Projects/Res/Compil32.manifest.rc new file mode 100644 index 00000000..f8d801a1 --- /dev/null +++ b/Projects/Res/Compil32.manifest.rc @@ -0,0 +1 @@ +1 24 Compil32.manifest.txt diff --git a/Projects/Res/Compil32.manifest.res b/Projects/Res/Compil32.manifest.res new file mode 100644 index 00000000..9a333e9b Binary files /dev/null and b/Projects/Res/Compil32.manifest.res differ diff --git a/Projects/Res/Compil32.manifest.txt b/Projects/Res/Compil32.manifest.txt new file mode 100644 index 00000000..fc70e8c4 --- /dev/null +++ b/Projects/Res/Compil32.manifest.txt @@ -0,0 +1,43 @@ + + + +Inno Setup IDE + + + + + + + + + + + + + + + true/pm + PerMonitorV2 + + + + + + + + + + + + diff --git a/Projects/Res/Compil32.versionandicon.res b/Projects/Res/Compil32.versionandicon.res new file mode 100644 index 00000000..39fb7d72 Binary files /dev/null and b/Projects/Res/Compil32.versionandicon.res differ diff --git a/Projects/Res/ISCC.manifest.rc b/Projects/Res/ISCC.manifest.rc new file mode 100644 index 00000000..b8cc2378 --- /dev/null +++ b/Projects/Res/ISCC.manifest.rc @@ -0,0 +1 @@ +1 24 ISCC.manifest.txt diff --git a/Projects/Res/ISCC.manifest.res b/Projects/Res/ISCC.manifest.res new file mode 100644 index 00000000..e129138a Binary files /dev/null and b/Projects/Res/ISCC.manifest.res differ diff --git a/Projects/Res/ISCC.manifest.txt b/Projects/Res/ISCC.manifest.txt new file mode 100644 index 00000000..3abcae7a --- /dev/null +++ b/Projects/Res/ISCC.manifest.txt @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Res/ISCC.versionandicon.res b/Projects/Res/ISCC.versionandicon.res new file mode 100644 index 00000000..29085680 Binary files /dev/null and b/Projects/Res/ISCC.versionandicon.res differ diff --git a/Projects/Res/ISCmplr.images.res b/Projects/Res/ISCmplr.images.res new file mode 100644 index 00000000..a9608870 Binary files /dev/null and b/Projects/Res/ISCmplr.images.res differ diff --git a/Projects/Res/ISCmplr.version.res b/Projects/Res/ISCmplr.version.res new file mode 100644 index 00000000..0049384c Binary files /dev/null and b/Projects/Res/ISCmplr.version.res differ diff --git a/Projects/Res/Setup.icon.res b/Projects/Res/Setup.icon.res new file mode 100644 index 00000000..94a33511 Binary files /dev/null and b/Projects/Res/Setup.icon.res differ diff --git a/Projects/Res/Setup.images.res b/Projects/Res/Setup.images.res new file mode 100644 index 00000000..8fab89f6 Binary files /dev/null and b/Projects/Res/Setup.images.res differ diff --git a/Projects/Res/Setup.version.rc b/Projects/Res/Setup.version.rc new file mode 100644 index 00000000..7076b3fc --- /dev/null +++ b/Projects/Res/Setup.version.rc @@ -0,0 +1,37 @@ +// Setup version resource +// Compiled with RC.EXE from the Platform SDK +// +// Note: The \0's in the values are to make this resource script compatible +// with Borland's BRCC32 as well. BRCC32 does not automatically null-terminate +// string values like Microsoft's RC does, resulting in garbage characters on +// Explorer's Version tab (on Windows 2000) if \0's aren't included. + +1 VERSIONINFO + FILEVERSION 51,1052,0 + PRODUCTVERSION 0,0,0,0 + FILEFLAGSMASK 0x3fL + FILEFLAGS 0x0L + FILEOS 0x4L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "FileDescription", "Setup/Uninstall\0" + VALUE "FileVersion", "51.1052.0.0\0" + // NOTE: Be sure to keep FILEVERSION in sync! + VALUE "Comments", "This installation was built with Inno Setup.\0" + VALUE "CompanyName", " \0" + VALUE "LegalCopyright", " \0" + VALUE "OriginalFileName", " \0" + VALUE "ProductName", " \0" + VALUE "ProductVersion", " \0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END diff --git a/Projects/Res/Setup.version.res b/Projects/Res/Setup.version.res new file mode 100644 index 00000000..898c31e5 Binary files /dev/null and b/Projects/Res/Setup.version.res differ diff --git a/Projects/Res/SetupLdr.offsettable.res b/Projects/Res/SetupLdr.offsettable.res new file mode 100644 index 00000000..bdebad6f Binary files /dev/null and b/Projects/Res/SetupLdr.offsettable.res differ diff --git a/Projects/Res/SetupLdr.version.rc b/Projects/Res/SetupLdr.version.rc new file mode 100644 index 00000000..57995b27 --- /dev/null +++ b/Projects/Res/SetupLdr.version.rc @@ -0,0 +1,37 @@ +// SetupLdr version resource +// Compiled with RC.EXE from the Platform SDK +// +// Note: The \0's in the values are to make this resource script compatible +// with Borland's BRCC32 as well. BRCC32 does not automatically null-terminate +// string values like Microsoft's RC does, resulting in garbage characters on +// Explorer's Version tab (on Windows 2000) if \0's aren't included. +// The spaces are placeholders. Longer texts will be truncated to the placeholder length. + +1 VERSIONINFO + FILEVERSION 0,0,0,0 + PRODUCTVERSION 0,0,0,0 + FILEFLAGSMASK 0x3fL + FILEFLAGS 0x0L + FILEOS 0x4L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "Comments", "This installation was built with Inno Setup.\0" + VALUE "CompanyName", " \0" + VALUE "FileDescription", " \0" + VALUE "FileVersion", " \0" + VALUE "LegalCopyright", " \0" + VALUE "OriginalFileName", " \0" + VALUE "ProductName", " \0" + VALUE "ProductVersion", " \0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END diff --git a/Projects/Res/SetupLdr.version.res b/Projects/Res/SetupLdr.version.res new file mode 100644 index 00000000..c240baef Binary files /dev/null and b/Projects/Res/SetupLdr.version.res differ diff --git a/Projects/Setup.dpr b/Projects/Setup.dpr new file mode 100644 index 00000000..ad8e818b --- /dev/null +++ b/Projects/Setup.dpr @@ -0,0 +1,338 @@ +program Setup; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + Setup program +} + +uses + SafeDLLPath in 'Src\SafeDLLPath.pas', + XPTheme in 'Src\XPTheme.pas', + Forms, + Windows, + SysUtils, + Messages, + RichEditViewer in '..\Components\RichEditViewer.pas', + CmnFunc in 'Src\CmnFunc.pas', + CmnFunc2 in 'Src\CmnFunc2.pas', + Main in 'Src\Main.pas' {MainForm}, + Install in 'Src\Install.pas', + Msgs in 'Src\Msgs.pas', + MsgIDs in 'Src\MsgIDs.pas', + Undo in 'Src\Undo.pas', + Struct in 'Src\Struct.pas', + NewDisk in 'Src\NewDisk.pas' {NewDiskForm}, + InstFunc in 'Src\InstFunc.pas', + InstFnc2 in 'Src\InstFnc2.pas', + Wizard in 'Src\Wizard.pas' {WizardForm}, + ScriptFunc_R in 'Src\ScriptFunc_R.pas', + ScriptFunc in 'Src\ScriptFunc.pas', + SetupTypes in 'Src\SetupTypes.pas', + ScriptRunner in 'Src\ScriptRunner.pas', + ScriptDlg in 'Src\ScriptDlg.pas', + ScriptClasses_R in 'Src\ScriptClasses_R.pas', + SelLangForm in 'Src\SelLangForm.pas' {SelectLanguageForm}, + Extract in 'Src\Extract.pas', + Int64Em in 'Src\Int64Em.pas', + SelFolderForm in 'Src\SelFolderForm.pas' {SelectFolderForm}, + Compress in 'Src\Compress.pas', + CompressZlib in 'Src\CompressZlib.pas', + bzlib in 'Src\bzlib.pas', + LZMADecomp in 'Src\LZMADecomp.pas', + FileClass in 'Src\FileClass.pas', + MD5 in 'Src\MD5.pas', + SHA1 in 'Src\SHA1.pas', + Logging in 'Src\Logging.pas', + DebugClient in 'Src\DebugClient.pas', + DebugStruct in 'Src\DebugStruct.pas', + ArcFour in 'Src\ArcFour.pas', + Uninstall in 'Src\Uninstall.pas', + UninstProgressForm in 'Src\UninstProgressForm.pas' {UninstProgressForm}, + UninstSharedFileForm in 'Src\UninstSharedFileForm.pas' {UninstSharedFileForm}, + SimpleExpression in 'Src\SimpleExpression.pas', + UIStateForm in 'Src\UIStateForm.pas', + SetupForm in 'Src\SetupForm.pas', + RegSvr in 'Src\RegSvr.pas', + BrowseFunc in 'Src\BrowseFunc.pas', + RedirFunc in 'Src\RedirFunc.pas', + SecurityFunc in 'Src\SecurityFunc.pas', + Helper in 'Src\Helper.pas', + VerInfo in 'Src\VerInfo.pas', + RegDLL in 'Src\RegDLL.pas', + ResUpdate in 'Src\ResUpdate.pas', + SpawnCommon in 'Src\SpawnCommon.pas', + SpawnServer in 'Src\SpawnServer.pas', + SpawnClient in 'Src\SpawnClient.pas', + TaskDialog in 'Src\TaskDialog.pas', + BidiUtils in '..\Components\BidiUtils.pas', + PathFunc in '..\Components\PathFunc.pas', + BidiCtrls in '..\Components\BidiCtrls.pas', + BitmapImage in '..\Components\BitmapImage.pas', + FolderTreeView in '..\Components\FolderTreeView.pas', + NewCheckListBox in '..\Components\NewCheckListBox.pas', + NewNotebook in '..\Components\NewNotebook.pas', + NewProgressBar in '..\Components\NewProgressBar.pas', + NewStaticText in '..\Components\NewStaticText.pas', + PasswordEdit in '..\Components\PasswordEdit.pas', + TmSchema in '..\Components\TmSchema.pas', + RestartManager in '..\Components\RestartManager.pas', + Resample in '..\Components\Resample.pas', + ASMInline in '..\Components\ASMInline.pas', + TaskbarProgressFunc in 'Src\TaskbarProgressFunc.pas', + DotNet in 'Src\DotNet.pas', + SetupEnt in 'Src\SetupEnt.pas', + Msi in 'Src\Msi.pas', + DotNetVersion in 'Src\DotNetVersion.pas', + NewUxTheme in '..\Components\NewUxTheme.pas'; + +{$SetPEFlags IMAGE_FILE_RELOCS_STRIPPED} +{$SETPEOSVERSION 6.1} +{$SETPESUBSYSVERSION 6.1} +{$WEAKLINKRTTI ON} + +{$R Res\Setup.icon.res} +{$R Res\Setup.images.res} +{$R Res\Setup.version.res} + +procedure ShowExceptionMsg; +var + S: String; +begin + if ExceptObject is EAbort then begin + Log('Got EAbort exception.'); + Exit; + end; + S := GetExceptMessage; + Log('Exception message:'); + LoggedAppMessageBox(PChar(S), Pointer(SetupMessages[msgErrorTitle]), + MB_OK or MB_ICONSTOP, True, IDOK); + { ^ use a Pointer cast instead of a PChar cast so that it will use "nil" + if SetupMessages[msgErrorTitle] is empty due to the messages not being + loaded yet. MessageBox displays 'Error' as the caption if the lpCaption + parameter is nil. } +end; + +type + TDummyClass = class + private + class function AntiShutdownHook(var Message: TMessage): Boolean; + end; + +class function TDummyClass.AntiShutdownHook(var Message: TMessage): Boolean; +begin + { This causes Setup/Uninstall/RegSvr to all deny shutdown attempts. + - If we were to return 1, Windows will send us a WM_ENDSESSION message and + TApplication.WndProc will call Halt in response. This is no good because + it would cause an unclean shutdown of Setup, and it would also prevent + the right exit code from being returned. + Even if TApplication.WndProc didn't call Halt, it is my understanding + that Windows could kill us off after sending us the WM_ENDSESSION message + (see the Remarks section of the WM_ENDSESSION docs). + - SetupLdr denys shutdown attempts as well, so there is little point in + Setup trying to handle them. (Depending on the version of Windows, we + may never even get a WM_QUERYENDSESSION message because of that.) + Note: TSetupForm also has a WM_QUERYENDSESSION handler of its own to + prevent CloseQuery from being called. } + Result := False; + case Message.Msg of + WM_QUERYENDSESSION: begin + { Return zero, except if RestartInitiatedByThisProcess is set + (which means we called RestartComputer previously) } + if RestartInitiatedByThisProcess or (IsUninstaller and AllowUninstallerShutdown) then begin + AcceptedQueryEndSessionInProgress := True; + Message.Result := 1 + end else + Message.Result := 0; + Result := True; + end; + WM_ENDSESSION: begin + { Should only get here if RestartInitiatedByThisProcess is set or an + Uninstaller shutdown was allowed, or if the user forced a shutdown. + Skip the default handling which calls Halt. No code of ours depends + on the Halt call to clean up, and it could theoretically result in + obscure reentrancy bugs. + Example: I've found that combo boxes pump incoming sent messages + when they are destroyed*; if one of those messages were a + WM_ENDSESSION, the Halt call could cause another destructor to be + to be entered (DoneApplication frees all still-existing forms) + before the combo box's destructor has returned. + * arguably a Windows bug. The internal ComboLBox window is created + as a child (WS_CHILD) of GetDesktopWindow(); when it is destroyed, + a WM_PARENTNOTIFY(WM_DESTROY) message is sent to the desktop window. + Because the desktop window is on a separate thread, pending sent + messages are dispatched during the SendMessage call. } + if Bool(Message.wParam) = True then begin + if not RestartInitiatedByThisProcess and IsUninstaller then + HandleUninstallerEndSession; + end else + AcceptedQueryEndSessionInProgress := False; + Result := True; + end; + WM_STYLECHANGING: begin + { On Delphi 2009, we must suppress some of the VCL's manipulation of + the application window styles in order to prevent the taskbar button + from re-appearing after SetTaskbarButtonVisibility(False) was used + to hide it. + - The VCL tries to clear WS_EX_TOOLWINDOW whenever a form handle is + created (see TCustomForm.CreateParams). Since + SetTaskbarButtonVisibility uses the WS_EX_TOOLWINDOW style + internally to hide the taskbar button, we can't allow that. + - The VCL tries to set WS_EX_APPWINDOW on the application window + after the main form is created (see ChangeAppWindow in Forms). + The WS_EX_APPWINDOW style forces the window to show a taskbar + button, overriding WS_EX_TOOLWINDOW, so don't allow that either. + (It appears to be redundant anyway.) } + if Integer(Message.WParam) = GWL_EXSTYLE then begin + { SetTaskbarButtonVisibility sets TaskbarButtonHidden } + if TaskbarButtonHidden then + PStyleStruct(Message.LParam).styleNew := + PStyleStruct(Message.LParam).styleNew or WS_EX_TOOLWINDOW; + PStyleStruct(Message.LParam).styleNew := + PStyleStruct(Message.LParam).styleNew and not WS_EX_APPWINDOW; + end; + end; + end; +end; + +procedure DisableWindowGhosting; +var + Proc: procedure; stdcall; +begin + Proc := GetProcAddress(GetModuleHandle(user32), 'DisableProcessWindowsGhosting'); + if Assigned(Proc) then + Proc; +end; + +procedure SelectMode; +{ Determines whether we should run as Setup, Uninstall, or RegSvr } +var + ParamName, ParamValue: String; + Mode: (smSetup, smUninstaller, smRegSvr); + F: TFile; + ID: Longint; + I: Integer; +begin + { When SignedUninstaller=yes, the EXE header specifies uninstaller mode by + default. Use Setup mode instead if we're being called from SetupLdr. } + SplitNewParamStr(1, ParamName, ParamValue); + if CompareText(ParamName, '/SL5=') = 0 then + Exit; + + Mode := smSetup; + + for I := 1 to NewParamCount do begin + if CompareText(NewParamStr(I), '/UNINSTMODE') = 0 then begin + Mode := smUninstaller; + Break; + end; + if CompareText(NewParamStr(I), '/REGSVRMODE') = 0 then begin + Mode := smRegSvr; + Break; + end; + end; + + if Mode = smSetup then begin + { No mode specified on the command line; check the EXE header for one } + F := TFile.Create(NewParamStr(0), fdOpenExisting, faRead, fsRead); + try + F.Seek(SetupExeModeOffset); + F.ReadBuffer(ID, SizeOf(ID)); + finally + F.Free; + end; + case ID of + SetupExeModeUninstaller: Mode := smUninstaller; + SetupExeModeRegSvr: Mode := smRegSvr; + end; + end; + + case Mode of + smUninstaller: begin + IsUninstaller := True; + AllowUninstallerShutdown := False; + RunUninstaller; + { Shouldn't get here; RunUninstaller should Halt itself } + Halt(1); + end; + smRegSvr: begin + try + RunRegSvr; + except + ShowExceptionMsg; + end; + Halt; + end; + end; +end; + +begin + { Delphi 2009 initially sets WS_EX_TOOLWINDOW on the application window. + That will prevent our ShowWindow(Application.Handle, SW_SHOW) calls from + actually displaying the taskbar button as intended, so clear it. } + SetWindowLong(Application.Handle, GWL_EXSTYLE, + GetWindowLong(Application.Handle, GWL_EXSTYLE) and not WS_EX_TOOLWINDOW); + + try + SetErrorMode(SEM_FAILCRITICALERRORS); + DisableWindowGhosting; + Application.HookMainWindow(TDummyClass.AntiShutdownHook); + TRichEditViewer.CustomShellExecute := ShellExecuteAsOriginalUser; + SelectMode; { Only returns if we should run as Setup } + except + { Halt on any exception } + ShowExceptionMsg; + Halt(ecInitializationError); + end; + + { Initialize. + Note: There's no need to localize the following line since it's changed in + InitializeSetup } + Application.Title := 'Setup'; + { On Delphi 3+, the application window by default isn't visible until a form + is shown. Force it visible like Delphi 2. Note that due to the way + TApplication.UpdateVisible is coded, this should be permanent; if a form + is shown and hidden, the application window should still be visible. } + ShowWindow(Application.Handle, SW_SHOW); + Application.OnException := TMainForm.ShowException; + try + Application.Initialize; + InitializeSetup; + Application.CreateForm(TMainForm, MainForm); + MainForm.InitializeWizard; + except + { Halt on any exception } + ShowExceptionMsg; + try + DeinitSetup(False); + except + { don't propagate any exceptions, so that Halt is always called } + ShowExceptionMsg; + end; + if SetupExitCode <> 0 then + Halt(SetupExitCode) + else + Halt(ecInitializationError); + end; + + { Run } + try + Application.Run; + except + { Show any exception and continue } + ShowExceptionMsg; + end; + + { Deinitialize (clean up) } + try + DeinitSetup(SetupExitCode = 0); + except + { Show any exception and continue } + ShowExceptionMsg; + end; + + Halt(SetupExitCode); +end. diff --git a/Projects/Setup.dproj b/Projects/Setup.dproj new file mode 100644 index 00000000..15d747d9 --- /dev/null +++ b/Projects/Setup.dproj @@ -0,0 +1,195 @@ + + + {BB7C6F6A-AC62-46BB-A790-0CF4A74B649E} + Setup.dpr + True + Debug + 1 + Application + VCL + 19.5 + Win32 + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + 00400000 + false + 1 + 1 + ..\Components\UniPs\Source;$(DCC_UnitSearchPath) + SETUPPROJ;PS_MINIVCL;PS_NOGRAPHCONST;PS_PANSICHAR;PS_NOINTERFACEGUIDBRACKETS;$(DCC_Define) + Setup + 1043 + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName= + Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;System.Bindings;$(DCC_Namespace) + false + false + false + false + false + false + false + Dcu\$(MainSource) + + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + 1033 + (None) + e32 + + + RELEASE;$(DCC_Define) + 0 + false + ..\Files + + + DEBUG;$(DCC_Define) + false + true + Bin + /LOG=Setup.log + + + + MainSource + + + + + + + +
    MainForm
    +
    + + + + + + +
    NewDiskForm
    +
    + + + +
    WizardForm
    +
    + + + + + + + +
    SelectLanguageForm
    +
    + + + +
    SelectFolderForm
    +
    + + + + + + + + + + + + + +
    UninstProgressForm
    +
    + +
    UninstSharedFileForm
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + +
    + + Delphi.Personality.12 + + + + + Setup.dpr + + + + True + False + + + 12 + + + +
    diff --git a/Projects/SetupLdr.dpr b/Projects/SetupLdr.dpr new file mode 100644 index 00000000..0c46e21d --- /dev/null +++ b/Projects/SetupLdr.dpr @@ -0,0 +1,538 @@ +program SetupLdr; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + Setup Loader +} + +uses + SafeDLLPath in 'Src\SafeDLLPath.pas', + XPTheme in 'Src\XPTheme.pas', + Windows, + Messages, + SysUtils, + Compress in 'Src\Compress.pas', + LZMADecompSmall in 'Src\LZMADecompSmall.pas', + SetupEnt in 'Src\SetupEnt.pas', + PathFunc in '..\Components\PathFunc.pas', + CmnFunc2 in 'Src\CmnFunc2.pas', + Msgs in 'Src\Msgs.pas', + MsgIDs in 'Src\MsgIDs.pas', + Struct in 'Src\Struct.pas', + InstFunc in 'Src\InstFunc.pas', + FileClass in 'Src\FileClass.pas', + Int64Em in 'Src\Int64Em.pas', + SHA1 in 'Src\SHA1.pas', + MD5 in 'Src\MD5.pas', + RedirFunc in 'Src\RedirFunc.pas', + SetupTypes in 'Src\SetupTypes.pas', + VerInfo in 'Src\VerInfo.pas'; + +{$SetPEFlags IMAGE_FILE_RELOCS_STRIPPED} +{$SETPEOSVERSION 6.1} +{$SETPESUBSYSVERSION 6.1} +{$WEAKLINKRTTI ON} + +{$R Res\Setup.icon.res} +{$R Res\SetupLdr.version.res} +{$R Res\SetupLdr.offsettable.res} + +procedure RaiseLastError(const Msg: TSetupMessageID); +var + ErrorCode: DWORD; +begin + ErrorCode := GetLastError; + raise Exception.Create(FmtSetupMessage(msgLastErrorMessage, + [SetupMessages[Msg], IntToStr(ErrorCode), Win32ErrorString(ErrorCode)])); +end; + +procedure ShowExceptionMsg; +begin + if ExceptObject is EAbort then + Exit; + MessageBox(0, PChar(GetExceptMessage), Pointer(SetupMessages[msgErrorTitle]), + MB_OK or MB_ICONSTOP); + { ^ use a Pointer cast instead of a PChar cast so that it will use "nil" + if SetupMessages[msgErrorTitle] is empty due to the messages not being + loaded yet. MessageBox displays 'Error' as the caption if the lpCaption + parameter is nil. } +end; + +const + { Exit codes that are returned by SetupLdr. + Note: Setup also returns exit codes with the same numbers. } + ecInitializationError = 1; { Setup failed to initialize. } + ecCancelledBeforeInstall = 2; { User clicked Cancel before the actual + installation started. } + +type + PLanguageEntryArray = ^TLanguageEntryArray; + TLanguageEntryArray = array[0..999999] of TSetupLanguageEntry; + +var + InitShowHelp: Boolean = False; + InitDisableStartupPrompt: Boolean = False; + InitLang: String; + ActiveLanguage: Integer = -1; + PendingNewLanguage: Integer = -1; + SetupHeader: TSetupHeader; + LanguageEntries: PLanguageEntryArray; + LanguageEntryCount: Integer; + SetupLdrExitCode: Integer = ecInitializationError; + SetupLdrWnd: HWND = 0; + OrigWndProc: Pointer; + RestartSystem: Boolean = False; + +procedure ProcessCommandLine; +var + I: Integer; + Name: String; +begin + for I := 1 to NewParamCount do begin + Name := NewParamStr(I); + if (CompareText(Name, '/SP-') = 0) or + (CompareText(Copy(Name, 1, 10), '/SPAWNWND=') = 0) then + InitDisableStartupPrompt := True + else if CompareText(Copy(Name, 1, 6), '/Lang=') = 0 then + InitLang := Copy(Name, 7, Maxint) + else if (CompareText(Name, '/HELP') = 0) or + (CompareText(Name, '/?') = 0) then + InitShowHelp := True; + end; +end; + +procedure SetActiveLanguage(const I: Integer); +{ Activates the specified language } +begin + if (I >= 0) and (I < LanguageEntryCount) and (I <> ActiveLanguage) then begin + AssignSetupMessages(LanguageEntries[I].Data[1], Length(LanguageEntries[I].Data)); + ActiveLanguage := I; + end; +end; + +function GetLanguageEntryProc(Index: Integer; var Entry: PSetupLanguageEntry): Boolean; +begin + Result := False; + if Index < LanguageEntryCount then begin + Entry := @LanguageEntries[Index]; + Result := True; + end; +end; + +procedure ActivateDefaultLanguage; +{ Auto-detects the most appropriate language and activates it. + Note: A like-named version of this function is also present in Main.pas. } +var + I: Integer; +begin + DetermineDefaultLanguage(GetLanguageEntryProc, SetupHeader.LanguageDetectionMethod, + InitLang, I); + SetActiveLanguage(I); +end; + +function SetupLdrWndProc(Wnd: HWND; Msg: UINT; WParam: WPARAM; LParam: LPARAM): LRESULT; +stdcall; +begin + Result := 0; + case Msg of + WM_QUERYENDSESSION: begin + { Return zero so that a shutdown attempt can't kill SetupLdr } + end; + WM_USER + 150: begin + if WParam = 10000 then begin + { Setup wants SetupLdr to restart the computer before it exits } + RestartSystem := True; + end + else if WParam = 10001 then begin + { Setup wants SetupLdr to change its active language } + PendingNewLanguage := LParam; + end; + end; + else + Result := CallWindowProc(OrigWndProc, Wnd, Msg, WParam, LParam); + end; +end; + +procedure ProcessMessages; +var + Msg: TMsg; +begin + while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin + TranslateMessage(Msg); + DispatchMessage(Msg); + end; +end; + +procedure ExecAndWait(const Filename, Parms: String; var ExitCode: Integer); +var + CmdLine: String; + StartupInfo: TStartupInfo; + ProcessInfo: TProcessInformation; +begin + CmdLine := '"' + Filename + '" ' + Parms; + + FillChar(StartupInfo, SizeOf(StartupInfo), 0); + StartupInfo.cb := SizeOf(StartupInfo); + if not CreateProcess(nil, PChar(CmdLine), nil, nil, False, 0, nil, nil, + StartupInfo, ProcessInfo) then + RaiseLastError(msgLdrCannotExecTemp); + CloseHandle(ProcessInfo.hThread); + { Wait for the process to terminate, processing messages in the meantime } + repeat + ProcessMessages; + until MsgWaitForMultipleObjects(1, ProcessInfo.hProcess, False, INFINITE, + QS_ALLINPUT) <> WAIT_OBJECT_0+1; + { Now that the process has exited, process any remaining messages. + (There may be an asynchronously-sent "restart request" message still + queued if MWFMO saw the process terminate before checking for new + messages.) } + ProcessMessages; + GetExitCodeProcess(ProcessInfo.hProcess, DWORD(ExitCode)); + CloseHandle(ProcessInfo.hProcess); +end; + +procedure SetupCorruptError; +begin + if SetupMessages[msgSetupFileCorrupt] <> '' then + raise Exception.Create(SetupMessages[msgSetupFileCorrupt]) + else + { In case the messages haven't been loaded yet, use the constant } + raise Exception.Create(SSetupFileCorrupt); +end; + +procedure RunImageLocally(const Module: HMODULE); +{ Force all of the specified module to be paged in to ensure subsequent + accesses don't cause the disk image to be read. + Based on code from http://www.microsoft.com/msj/0398/win320398.htm, with + some fixes incorporated. } + + procedure Touch(var X: DWORD); + { Note: Uses asm to ensure it isn't optimized away } + asm + xor edx, edx + lock or [eax], edx + end; + +var + SysInfo: TSystemInfo; + CurAddr: Pointer; + MemInfo: TMemoryBasicInformation; + ChangedProtection: Boolean; + OrigProtect: DWORD; + Offset: Cardinal; +begin + { Get system's page size } + GetSystemInfo(SysInfo); + + CurAddr := Pointer(Module); + if VirtualQuery(CurAddr, MemInfo, SizeOf(MemInfo)) = 0 then + Exit; + + { Perform this loop until we find a region beyond the end of the file } + while MemInfo.AllocationBase = Pointer(Module) do begin + { We can only force committed pages into RAM. + We do not want to trigger guard pages and confuse the application. } + if (MemInfo.State = MEM_COMMIT) and (MemInfo.Protect and PAGE_GUARD = 0) then begin + ChangedProtection := False; + + { Determine if the pages in this region are nonwriteable } + if (MemInfo.Protect = PAGE_NOACCESS) or + (MemInfo.Protect = PAGE_READONLY) or + (MemInfo.Protect = PAGE_EXECUTE) or + (MemInfo.Protect = PAGE_EXECUTE_READ) then begin + { Nonwriteable region, make it writeable (with the least protection) } + if VirtualProtect(MemInfo.BaseAddress, MemInfo.RegionSize, + PAGE_EXECUTE_READWRITE, @OrigProtect) then + ChangedProtection := True; + end; + + { Write to every page in the region. + This forces the page to be in RAM and swapped to the paging file. } + Offset := 0; + while Offset < Cardinal(MemInfo.RegionSize) do begin + Touch(PDWORD(Cardinal(MemInfo.BaseAddress) + Offset)^); + Inc(Offset, SysInfo.dwPageSize); + end; + + { If we changed the protection, change it back } + if ChangedProtection then + VirtualProtect(MemInfo.BaseAddress, MemInfo.RegionSize, OrigProtect, + @OrigProtect); + end; + + { Get next region } + Cardinal(CurAddr) := Cardinal(MemInfo.BaseAddress) + MemInfo.RegionSize; + if VirtualQuery(CurAddr, MemInfo, SizeOf(MemInfo)) = 0 then + Break; + end; +end; + +function GetSetupLdrOffsetTable: PSetupLdrOffsetTable; +{ Locates the offset table resource, and returns a pointer to it } +var + Rsrc: HRSRC; + ResData: HGLOBAL; +begin + Rsrc := FindResource(0, MAKEINTRESOURCE(SetupLdrOffsetTableResID), RT_RCDATA); + if Rsrc = 0 then + SetupCorruptError; + if SizeofResource(0, Rsrc) <> SizeOf(Result^) then + SetupCorruptError; + ResData := LoadResource(0, Rsrc); + if ResData = 0 then + SetupCorruptError; + Result := LockResource(ResData); + if Result = nil then + SetupCorruptError; +end; + +procedure ShowHelp(const CustomNote: String); +const + SNewLine = #13#10; +var + PrNote, Help: String; +begin + { do not localize } + + if proCommandLine in SetupHeader.PrivilegesRequiredOverridesAllowed then begin + PrNote := '/ALLUSERS' + SNewLine + + 'Instructs Setup to install in administrative install mode.' + SNewLine + + '/CURRENTUSER' + SNewLine + + 'Instructs Setup to install in non administrative install mode.' + SNewLine; + end else + PrNote := ''; + + Help := 'The Setup program accepts optional command line parameters.' + SNewLine + + SNewLine + + '/HELP, /?' + SNewLine + + 'Shows this information.' + SNewLine + + '/SP-' + SNewLine + + 'Disables the This will install... Do you wish to continue? prompt at the beginning of Setup.' + SNewLine + + '/SILENT, /VERYSILENT' + SNewLine + + 'Instructs Setup to be silent or very silent.' + SNewLine + + '/SUPPRESSMSGBOXES' + SNewLine + + 'Instructs Setup to suppress message boxes.' + SNewLine + + '/LOG' + SNewLine + + 'Causes Setup to create a log file in the user''s TEMP directory.' + SNewLine + + '/LOG="filename"' + SNewLine + + 'Same as /LOG, except it allows you to specify a fixed path/filename to use for the log file.' + SNewLine + + '/NOCANCEL' + SNewLine + + 'Prevents the user from cancelling during the installation process.' + SNewLine + + '/NORESTART' + SNewLine + + 'Prevents Setup from restarting the system following a successful installation, or after a Preparing to Install failure that requests a restart.' + SNewLine + + '/RESTARTEXITCODE=exit code' + SNewLine + + 'Specifies a custom exit code that Setup is to return when the system needs to be restarted.' + SNewLine + + '/CLOSEAPPLICATIONS' + SNewLine + + 'Instructs Setup to close applications using files that need to be updated.' + SNewLine + + '/NOCLOSEAPPLICATIONS' + SNewLine + + 'Prevents Setup from closing applications using files that need to be updated.' + SNewLine + + '/FORCECLOSEAPPLICATIONS' + SNewLine + + 'Instructs Setup to force close when closing applications.' + SNewLine + + '/FORCENOCLOSEAPPLICATIONS' + SNewLine + + 'Prevents Setup from force closing when closing applications.' + SNewLine + + '/LOGCLOSEAPPLICATIONS' + SNewLine + + 'Instructs Setup to create extra logging when closing applications for debugging purposes.' + SNewLine + + '/RESTARTAPPLICATIONS' + SNewLine + + 'Instructs Setup to restart applications.' + SNewLine + + '/NORESTARTAPPLICATIONS' + SNewLine + + 'Prevents Setup from restarting applications.' + SNewLine + + '/LOADINF="filename"' + SNewLine + + 'Instructs Setup to load the settings from the specified file after having checked the command line.' + SNewLine + + '/SAVEINF="filename"' + SNewLine + + 'Instructs Setup to save installation settings to the specified file.' + SNewLine + + '/LANG=language' + SNewLine + + 'Specifies the internal name of the language to use.' + SNewLine + + '/DIR="x:\dirname"' + SNewLine + + 'Overrides the default directory name.' + SNewLine + + '/GROUP="folder name"' + SNewLine + + 'Overrides the default folder name.' + SNewLine + + '/NOICONS' + SNewLine + + 'Instructs Setup to initially check the Don''t create a Start Menu folder check box.' + SNewLine + + '/TYPE=type name' + SNewLine + + 'Overrides the default setup type.' + SNewLine + + '/COMPONENTS="comma separated list of component names"' + SNewLine + + 'Overrides the default component settings.' + SNewLine + + '/TASKS="comma separated list of task names"' + SNewLine + + 'Specifies a list of tasks that should be initially selected.' + SNewLine + + '/MERGETASKS="comma separated list of task names"' + SNewLine + + 'Like the /TASKS parameter, except the specified tasks will be merged with the set of tasks that would have otherwise been selected by default.' + SNewLine + + '/PASSWORD=password' + SNewLine + + 'Specifies the password to use.' + SNewLine + + PrNote + + CustomNote + + SNewLine + + 'For more detailed information, please visit https://jrsoftware.org/ishelp/index.php?topic=setupcmdline'; + + MessageBox(0, PChar(Help), 'Setup', MB_OK or MB_ICONSTOP); +end; + +var + SelfFilename: String; + SourceF, DestF: TFile; + OffsetTable: PSetupLdrOffsetTable; + TempDir: String; + S: String; + TempFile: String; + TestID: TSetupID; + P: Pointer; + Reader: TCompressedBlockReader; + I: Integer; +begin + try + { Ensure all of SetupLdr is paged in so that in the case of a disk spanning + install Windows will never complain when the disk/CD containing SetupLdr + is ejected. } + RunImageLocally(HInstance); + + ProcessCommandLine; + + SelfFilename := NewParamStr(0); + SourceF := TFile.Create(SelfFilename, fdOpenExisting, faRead, fsRead); + try + OffsetTable := GetSetupLdrOffsetTable; + { Note: We don't check the OffsetTable.ID here because it would put a + copy of the ID in the data section, and that would confuse external + programs that search for the offset table by ID. } + if (OffsetTable.Version <> SetupLdrOffsetTableVersion) or + (GetCRC32(OffsetTable^, SizeOf(OffsetTable^) - SizeOf(OffsetTable.TableCRC)) <> OffsetTable.TableCRC) or + ((SourceF.Size.Hi = 0) and (SourceF.Size.Lo < OffsetTable.TotalSize)) then + SetupCorruptError; + + SourceF.Seek(OffsetTable.Offset0); + SourceF.ReadBuffer(TestID, SizeOf(TestID)); + if TestID <> SetupID then + SetupCorruptError; + try + Reader := TCompressedBlockReader.Create(SourceF, TLZMA1SmallDecompressor); + try + SECompressedBlockRead(Reader, SetupHeader, SizeOf(SetupHeader), + SetupHeaderStrings, SetupHeaderAnsiStrings); + + LanguageEntryCount := SetupHeader.NumLanguageEntries; + LanguageEntries := AllocMem(LanguageEntryCount * SizeOf(TSetupLanguageEntry)); + for I := 0 to LanguageEntryCount-1 do + SECompressedBlockRead(Reader, LanguageEntries[I], SizeOf(LanguageEntries[I]), + SetupLanguageEntryStrings, SetupLanguageEntryAnsiStrings); + finally + Reader.Free; + end; + except + on ECompressDataError do + SetupCorruptError; + end; + + ActivateDefaultLanguage; + + if InitShowHelp then begin + { Show the command line help. } + ShowHelp(SetupMessages[msgHelpTextNote]); + SetupLdrExitCode := 0; + end else begin + { Show the startup prompt. If this is enabled, SetupHeader.AppName won't + have constants. } + if not(shDisableStartupPrompt in SetupHeader.Options) and + not InitDisableStartupPrompt and + (MessageBox(0, PChar(FmtSetupMessage1(msgSetupLdrStartupMessage, SetupHeader.AppName)), + PChar(SetupMessages[msgSetupAppTitle]), MB_YESNO or MB_ICONQUESTION) <> IDYES) then begin + SetupLdrExitCode := ecCancelledBeforeInstall; + Abort; + end; + + { Create a temporary directory, and extract the embedded setup program + there } + Randomize; + TempDir := CreateTempDir(IsAdminLoggedOn); + S := AddBackslash(TempDir) + PathChangeExt(PathExtractName(SelfFilename), '.tmp'); + TempFile := S; { assign only if string was successfully constructed } + + SourceF.Seek(OffsetTable.OffsetEXE); + + try + P := nil; + DestF := TFile.Create(TempFile, fdCreateAlways, faWrite, fsNone); + try + GetMem(P, OffsetTable.UncompressedSizeEXE); + FillChar(P^, OffsetTable.UncompressedSizeEXE, 0); + try + Reader := TCompressedBlockReader.Create(SourceF, TLZMA1SmallDecompressor); + try + Reader.Read(P^, OffsetTable.UncompressedSizeEXE); + finally + Reader.Free; + end; + except + on ECompressDataError do + SetupCorruptError; + end; + TransformCallInstructions(P^, OffsetTable.UncompressedSizeEXE, False, 0); + if GetCRC32(P^, OffsetTable.UncompressedSizeEXE) <> OffsetTable.CRCEXE then + SetupCorruptError; + { Preallocate the bytes to avoid file system fragmentation } + DestF.Seek(OffsetTable.UncompressedSizeEXE); + DestF.Truncate; + DestF.Seek(0); + DestF.WriteBuffer(P^, OffsetTable.UncompressedSizeEXE); + finally + FreeMem(P); + DestF.Free; + end; + except + on E: EFileError do begin + SetLastError(E.ErrorCode); + RaiseLastError(msgLdrCannotCreateTemp); + end; + end; + + FreeAndNil(SourceF); + + { Create SetupLdrWnd, which is used by Setup to communicate with + SetupLdr } + SetupLdrWnd := CreateWindowEx(0, 'STATIC', 'InnoSetupLdrWindow', 0, + 0, 0, 0, 0, HWND_DESKTOP, 0, HInstance, nil); + Longint(OrigWndProc) := SetWindowLong(SetupLdrWnd, GWL_WNDPROC, + Longint(@SetupLdrWndProc)); + + { Now execute Setup. Use the exit code it returns as our exit code. } + ExecAndWait(TempFile, Format('/SL5="$%x,%d,%d,', + [SetupLdrWnd, OffsetTable.Offset0, OffsetTable.Offset1]) + + SelfFilename + '" ' + GetCmdTail, SetupLdrExitCode); + + { Synchronize our active language with Setup's, in case we need to + display any messages below } + if PendingNewLanguage <> -1 then + SetActiveLanguage(PendingNewLanguage); + end; + finally + SourceF.Free; + if TempFile <> '' then + { Even though Setup has terminated by now, the system may still have + the file locked for a short period of time (esp. on multiprocessor + systems), so use DelayDeleteFile to delete it. } + DelayDeleteFile(False, TempFile, 13, 50, 250); + if TempDir <> '' then + RemoveDirectory(PChar(TempDir)); + if SetupLdrWnd <> 0 then + { SetupLdrWnd must be destroyed before RestartComputer is called, + otherwise SetupLdrWndProc would deny the shutdown request } + DestroyWindow(SetupLdrWnd); + if Assigned(LanguageEntries) then begin + Finalize(LanguageEntries[0], LanguageEntryCount); + FreeMem(LanguageEntries); + LanguageEntries := nil; + end; + end; + if RestartSystem then begin + if not RestartComputer then + MessageBox(0, PChar(SetupMessages[msgErrorRestartingComputer]), + PChar(SetupMessages[msgErrorTitle]), MB_OK or MB_ICONEXCLAMATION or + MB_SETFOREGROUND); + end; + except + ShowExceptionMsg; + end; + Halt(SetupLdrExitCode); +end. diff --git a/Projects/SetupLdr.dproj b/Projects/SetupLdr.dproj new file mode 100644 index 00000000..4d2e85a9 --- /dev/null +++ b/Projects/SetupLdr.dproj @@ -0,0 +1,122 @@ + + + {4259E59E-2263-4FE8-8E6C-BFCBC7A6C66D} + SetupLdr.dpr + True + Debug + 1 + Application + None + 19.5 + Win32 + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + 00400000 + false + 1 + 1 + SetupLdr + 1043 + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=;CFBundleName= + System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace) + false + false + false + false + false + false + false + Dcu\$(MainSource) + SETUPLDRPROJ;$(DCC_Define) + + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + Debug + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + 1033 + (None) + e32 + + + RELEASE;$(DCC_Define) + 0 + false + ..\Files + + + DEBUG;$(DCC_Define) + false + true + Bin + + + + MainSource + + + + + + + + + + + + + + + + + + + + + Base + + + Cfg_1 + Base + + + Cfg_2 + Base + + + + Delphi.Personality.12 + + + + + SetupLdr.dpr + + + + True + False + + + 12 + + + + diff --git a/Projects/Src/ArcFour.pas b/Projects/Src/ArcFour.pas new file mode 100644 index 00000000..dbd70f48 --- /dev/null +++ b/Projects/Src/ArcFour.pas @@ -0,0 +1,76 @@ +unit ArcFour; + +{ + Inno Setup + Copyright (C) 1997-2004 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + Interface to ISCrypt.dll (ARCFOUR encryption/decryption) + + $jrsoftware: issrc/Projects/ArcFour.pas,v 1.2 2004/04/26 19:11:23 jr Exp $ +} + +interface + +uses + Windows; + +type + TArcFourContext = record + state: array[0..255] of Byte; + x, y: Byte; + end; + +function ArcFourInitFunctions(Module: HMODULE): Boolean; +procedure ArcFourInit(var Context: TArcFourContext; const Key; + KeyLength: Cardinal); +procedure ArcFourCrypt(var Context: TArcFourContext; const InBuffer; + var OutBuffer; Length: Cardinal); +procedure ArcFourDiscard(var Context: TArcFourContext; Bytes: Cardinal); + +implementation + +var + _ISCryptGetVersion: function: Integer; stdcall; + _ArcFourInit: procedure(var context: TArcFourContext; const key; + key_length: Cardinal); stdcall; + _ArcFourCrypt: procedure(var context: TArcFourContext; const in_buffer; + var out_buffer; length: Cardinal); stdcall; + +function ArcFourInitFunctions(Module: HMODULE): Boolean; +begin + _ISCryptGetVersion := GetProcAddress(Module, 'ISCryptGetVersion'); + _ArcFourInit := GetProcAddress(Module, 'ArcFourInit'); + _ArcFourCrypt := GetProcAddress(Module, 'ArcFourCrypt'); + if Assigned(_ISCryptGetVersion) and Assigned(_ArcFourInit) and + Assigned(_ArcFourCrypt) then begin + { Verify that the DLL's version is what we expect } + Result := (_ISCryptGetVersion = 1); + end + else begin + Result := False; + _ISCryptGetVersion := nil; + _ArcFourInit := nil; + _ArcFourCrypt := nil; + end +end; + +procedure ArcFourInit(var Context: TArcFourContext; const Key; + KeyLength: Cardinal); +begin + _ArcFourInit(Context, Key, KeyLength); +end; + +procedure ArcFourCrypt(var Context: TArcFourContext; const InBuffer; + var OutBuffer; Length: Cardinal); +begin + _ArcFourCrypt(Context, InBuffer, OutBuffer, Length); +end; + +procedure ArcFourDiscard(var Context: TArcFourContext; Bytes: Cardinal); +begin + _ArcFourCrypt(Context, Pointer(nil)^, Pointer(nil)^, Bytes); +end; + +end. diff --git a/Projects/Src/BrowseFunc.pas b/Projects/Src/BrowseFunc.pas new file mode 100644 index 00000000..ed01ea52 --- /dev/null +++ b/Projects/Src/BrowseFunc.pas @@ -0,0 +1,264 @@ +unit BrowseFunc; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + Functions for browsing for folders/files +} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms; + +function BrowseForFolder(const Prompt: String; var Directory: String; + const ParentWnd: HWND; const NewFolderButton: Boolean): Boolean; +function NewGetOpenFileName(const Prompt: String; var FileName: String; + const InitialDirectory, Filter, DefaultExtension: String; + const ParentWnd: HWND): Boolean; +function NewGetOpenFileNameMulti(const Prompt: String; const FileNameList: TStrings; + const InitialDirectory, Filter, DefaultExtension: String; + const ParentWnd: HWND): Boolean; +function NewGetSaveFileName(const Prompt: String; var FileName: String; + const InitialDirectory, Filter, DefaultExtension: String; + const ParentWnd: HWND): Boolean; + +implementation + +uses + CommDlg, ShlObj, ActiveX, + PathFunc; + +function BrowseCallback(Wnd: HWND; uMsg: UINT; lParam, lpData: LPARAM): Integer; stdcall; +var + ShouldEnable: Boolean; + Path: array[0..MAX_PATH-1] of Char; +begin + case uMsg of + BFFM_INITIALIZED: + begin + if lpData <> 0 then + SendMessage(Wnd, BFFM_SETSELECTION, 1, lpData); + end; + BFFM_SELCHANGED: + begin + { In a BIF_NEWDIALOGSTYLE dialog, BIF_RETURNONLYFSDIRS does not cause + the OK button to be disabled automatically when the user clicks a + non-FS item (e.g. My Computer), so do that ourself. } + ShouldEnable := SHGetPathFromIDList(PItemIDList(lParam), Path); + SendMessage(Wnd, BFFM_ENABLEOK, 0, Ord(ShouldEnable)); + end; + end; + Result := 0; +end; + +function BrowseForFolder(const Prompt: String; var Directory: String; + const ParentWnd: HWND; const NewFolderButton: Boolean): Boolean; +const + BIF_NONEWFOLDERBUTTON = $200; + BIF_NEWDIALOGSTYLE = $0040; +var + InitialDir: String; + Malloc: IMalloc; + BrowseInfo: TBrowseInfo; + DisplayName, Path: array[0..MAX_PATH-1] of Char; + ActiveWindow: HWND; + WindowList: Pointer; + IDList: PItemIDList; +begin + Result := False; + InitialDir := RemoveBackslashUnlessRoot(Directory); { Win95 doesn't allow trailing backslash } + if FAILED(SHGetMalloc(Malloc)) then + Malloc := nil; + FillChar(BrowseInfo, SizeOf(BrowseInfo), 0); + with BrowseInfo do begin + hwndOwner := ParentWnd; + pszDisplayName := @DisplayName; + lpszTitle := PChar(Prompt); + ulFlags := BIF_RETURNONLYFSDIRS or BIF_NEWDIALOGSTYLE; + if not NewFolderButton then + ulFlags := ulFlags or BIF_NONEWFOLDERBUTTON; + lpfn := BrowseCallback; + if InitialDir <> '' then + Pointer(lParam) := PChar(InitialDir); + end; + ActiveWindow := GetActiveWindow; + WindowList := DisableTaskWindows(0); + CoInitialize(nil); + try + IDList := SHBrowseForFolder(BrowseInfo); + finally + CoUninitialize(); + EnableTaskWindows(WindowList); + { SetActiveWindow(Application.Handle) is needed or else the focus doesn't + properly return to ActiveWindow } + SetActiveWindow(Application.Handle); + SetActiveWindow(ActiveWindow); + end; + try + if (IDList = nil) or not SHGetPathFromIDList(IDList, Path) then + Exit; + Directory := Path; + finally + if Assigned(Malloc) then + Malloc.Free(IDList); + end; + Result := True; +end; + +type + TGetOpenOrSaveFileNameFunc = function(var OpenFile: TOpenFilename): Bool; stdcall; + +function NewGetOpenOrSaveFileName(const Prompt: String; var FileName: String; + const InitialDirectory, Filter, DefaultExtension: String; + const ParentWnd: HWND; const GetOpenOrSaveFileNameFunc: TGetOpenOrSaveFileNameFunc; + const Flags: DWORD): Boolean; + + function AllocFilterStr(const S: string): string; + var + P: PChar; + begin + Result := ''; + if S <> '' then + begin + Result := S + #0; // double null terminators + P := PathStrScan(PChar(Result), '|'); + while P <> nil do + begin + P^ := #0; + Inc(P); + P := PathStrScan(P, '|'); + end; + end; + end; + + function GetMultiSelectString(const P: PChar): String; + var + E: PChar; + begin + E := P; + while E^ <> #0 do + Inc(E, StrLen(E) + 1); + SetString(Result, P, E - P); + end; + +var + ofn: TOpenFileName; + lpstrFile: array[0..8191] of Char; + TempFilter: String; + SaveCurDir: String; + ActiveWindow: HWND; + WindowList: Pointer; + FPUControlWord: Word; +begin + StrPLCopy(lpstrFile, FileName, (SizeOf(lpstrFile) div SizeOf(lpstrFile[0])) - 1); + + FillChar(ofn, SizeOf(ofn), 0); + ofn.lStructSize := SizeOf(ofn); + ofn.hwndOwner := ParentWnd; + TempFilter := AllocFilterStr(Filter); + ofn.lpstrFilter := PChar(TempFilter); + ofn.lpstrFile := lpstrFile; + ofn.nMaxFile := SizeOf(lpstrFile) div SizeOf(lpstrFile[0]); + ofn.lpstrInitialDir := PChar(InitialDirectory); + ofn.lpstrTitle := PChar(Prompt); + ofn.Flags := Flags or OFN_NOCHANGEDIR; + ofn.lpstrDefExt := Pointer(DefaultExtension); + + ActiveWindow := GetActiveWindow; + WindowList := DisableTaskWindows(0); + try + asm + // Avoid FPU control word change in NETRAP.dll, NETAPI32.dll, etc + FNSTCW FPUControlWord + end; + try + SaveCurDir := GetCurrentDir; + if GetOpenOrSaveFileNameFunc(ofn) then begin + if Flags and OFN_ALLOWMULTISELECT <> 0 then + FileName := GetMultiSelectString(lpstrFile) + else + FileName := lpstrFile; + Result := True; + end else + Result := False; + { Restore current directory. The OFN_NOCHANGEDIR flag we pass is + supposed to do that, but the MSDN docs claim: "This flag is + ineffective for GetOpenFileName." I see no such problem on + Windows 2000 or XP, but to be safe... } + SetCurrentDir(SaveCurDir); + finally + asm + FNCLEX + FLDCW FPUControlWord + end; + end; + finally + EnableTaskWindows(WindowList); + { SetActiveWindow(Application.Handle) is needed or else the focus doesn't + properly return to ActiveWindow } + SetActiveWindow(Application.Handle); + SetActiveWindow(ActiveWindow); + end; +end; + +function NewGetOpenFileName(const Prompt: String; var FileName: String; + const InitialDirectory, Filter, DefaultExtension: String; + const ParentWnd: HWND): Boolean; +begin + Result := NewGetOpenOrSaveFileName(Prompt, FileName, InitialDirectory, Filter, DefaultExtension, + ParentWnd, GetOpenFileName, OFN_HIDEREADONLY or OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST); +end; + +function NewGetOpenFileNameMulti(const Prompt: String; const FileNameList: TStrings; + const InitialDirectory, Filter, DefaultExtension: String; + const ParentWnd: HWND): Boolean; + + function ExtractStr(var P: PChar): String; + var + L: Integer; + begin + L := StrLen(P); + SetString(Result, P, L); + if L > 0 then + Inc(P, L + 1); + end; + +var + Files, Dir, FileName: String; + P: PChar; +begin + Result := NewGetOpenOrSaveFileName(Prompt, Files, InitialDirectory, Filter, DefaultExtension, + ParentWnd, GetOpenFileName, OFN_HIDEREADONLY or OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST or + OFN_ALLOWMULTISELECT or OFN_EXPLORER); + if Result then begin + FileNameList.Clear; + P := PChar(Files); + Dir := ExtractStr(P); + FileName := ExtractStr(P); + if FileName = '' then begin + { When only one file is selected, the list contains just a file name } + FileNameList.Add(Dir); + end + else begin + repeat + { The filenames can include paths if the user typed them in manually } + FileNameList.Add(PathCombine(Dir, FileName)); + FileName := ExtractStr(P); + until FileName = ''; + end; + end; +end; + +function NewGetSaveFileName(const Prompt: String; var FileName: String; + const InitialDirectory, Filter, DefaultExtension: String; + const ParentWnd: HWND): Boolean; +begin + Result := NewGetOpenOrSaveFileName(Prompt, FileName, InitialDirectory, Filter, DefaultExtension, + ParentWnd, GetSaveFileName, OFN_OVERWRITEPROMPT or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST); +end; + +end. diff --git a/Projects/Src/CmnFunc.pas b/Projects/Src/CmnFunc.pas new file mode 100644 index 00000000..258734e8 --- /dev/null +++ b/Projects/Src/CmnFunc.pas @@ -0,0 +1,390 @@ +unit CmnFunc; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + Common VCL functions +} + +{$B-} + +interface + +uses + Windows, Messages, SysUtils, Forms, Graphics, Controls, StdCtrls, Classes; + +type + TWindowDisabler = class + private + FFallbackWnd, FOwnerWnd: HWND; + FPreviousActiveWnd, FPreviousFocusWnd: HWND; + FWindowList: Pointer; + public + constructor Create; + destructor Destroy; override; + end; + + { Note: This type is also present in ScriptFunc_C.pas } + TMsgBoxType = (mbInformation, mbConfirmation, mbError, mbCriticalError); + + TMsgBoxCallbackFunc = procedure(const Flags: LongInt; const After: Boolean; + const Param: LongInt); + +{ Useful constant } +const + EnableColor: array[Boolean] of TColor = (clBtnFace, clWindow); + +procedure UpdateHorizontalExtent(const ListBox: TCustomListBox); +function MinimizePathName(const Filename: String; const Font: TFont; + MaxLen: Integer): String; +function AppMessageBox(const Text, Caption: PChar; Flags: Longint): Integer; +function MsgBoxP(const Text, Caption: PChar; const Typ: TMsgBoxType; + const Buttons: Cardinal): Integer; +function MsgBox(const Text, Caption: String; const Typ: TMsgBoxType; + const Buttons: Cardinal): Integer; +function MsgBoxFmt(const Text: String; const Args: array of const; + const Caption: String; const Typ: TMsgBoxType; const Buttons: Cardinal): Integer; +procedure ReactivateTopWindow; +procedure SetMessageBoxCaption(const Typ: TMsgBoxType; const NewCaption: PChar); +function GetMessageBoxCaption(const Caption: PChar; const Typ: TMsgBoxType): PChar; +procedure SetMessageBoxRightToLeft(const ARightToLeft: Boolean); +function GetMessageBoxRightToLeft: Boolean; +procedure SetMessageBoxCallbackFunc(const AFunc: TMsgBoxCallbackFunc; const AParam: LongInt); +procedure TriggerMessageBoxCallbackFunc(const Flags: LongInt; const After: Boolean); + +implementation + +uses + Consts, PathFunc, CmnFunc2; + +var + MessageBoxCaptions: array[TMsgBoxType] of PChar; + MessageBoxRightToLeft: Boolean; + MessageBoxCallbackFunc: TMsgBoxCallbackFunc; + MessageBoxCallbackParam: LongInt; + MessageBoxCallbackActive: Boolean; + +type + TListBoxAccess = class(TCustomListBox); + +procedure UpdateHorizontalExtent(const ListBox: TCustomListBox); +var + I: Integer; + Extent, MaxExtent: Longint; + DC: HDC; + Size: TSize; + TextMetrics: TTextMetric; +begin + DC := GetDC(0); + try + SelectObject(DC, TListBoxAccess(ListBox).Font.Handle); + + //Q66370 says tmAveCharWidth should be added to extent + GetTextMetrics(DC, TextMetrics); + + MaxExtent := 0; + for I := 0 to ListBox.Items.Count-1 do begin + GetTextExtentPoint32(DC, PChar(ListBox.Items[I]), Length(ListBox.Items[I]), Size); + Extent := Size.cx + TextMetrics.tmAveCharWidth; + if Extent > MaxExtent then + MaxExtent := Extent; + end; + + finally + ReleaseDC(0, DC); + end; + + if MaxExtent > SendMessage(ListBox.Handle, LB_GETHORIZONTALEXTENT, 0, 0) then + SendMessage(ListBox.Handle, LB_SETHORIZONTALEXTENT, MaxExtent, 0); +end; + +function MinimizePathName(const Filename: String; const Font: TFont; + MaxLen: Integer): String; + + procedure CutFirstDirectory(var S: String); + var + P: Integer; + begin + if Copy(S, 1, 4) = '...\' then + Delete(S, 1, 4); + P := PathPos('\', S); + if P <> 0 then + begin + Delete(S, 1, P); + S := '...\' + S; + end + else + S := ''; + end; + +var + DC: HDC; + Drive, Dir, Name: String; + DriveLen: Integer; +begin + DC := GetDC(0); + try + SelectObject(DC, Font.Handle); + + Result := FileName; + Dir := PathExtractPath(Result); + Name := PathExtractName(Result); + + DriveLen := PathDrivePartLength(Dir); + { Include any slash following drive part, or a leading slash if DriveLen=0 } + if (DriveLen < Length(Dir)) and PathCharIsSlash(Dir[DriveLen+1]) then + Inc(DriveLen); + Drive := Copy(Dir, 1, DriveLen); + Delete(Dir, 1, DriveLen); + + while ((Dir <> '') or (Drive <> '')) and (GetTextWidth(DC, Result, False) > MaxLen) do + begin + if Dir <> '' then + CutFirstDirectory(Dir); + { If there's no directory left, minimize the drive part. + 'C:\...\filename' -> '...\filename' } + if (Dir = '') and (Drive <> '') then + begin + Drive := ''; + Dir := '...\'; + end; + Result := Drive + Dir + Name; + end; + finally + ReleaseDC(0, DC); + end; +end; + +procedure SetMessageBoxCaption(const Typ: TMsgBoxType; const NewCaption: PChar); +begin + StrDispose(MessageBoxCaptions[Typ]); + MessageBoxCaptions[Typ] := nil; + if Assigned(NewCaption) then + MessageBoxCaptions[Typ] := StrNew(NewCaption); +end; + +function GetMessageBoxCaption(const Caption: PChar; const Typ: TMsgBoxType): PChar; +const + DefaultCaptions: array[TMsgBoxType] of PChar = + ('Information', 'Confirm', 'Error', 'Error'); +begin + Result := Caption; + if (Result = nil) or (Result[0] = #0) then begin + Result := MessageBoxCaptions[Typ]; + if Result = nil then + Result := DefaultCaptions[Typ]; + end; +end; + +procedure SetMessageBoxRightToLeft(const ARightToLeft: Boolean); +begin + MessageBoxRightToLeft := ARightToLeft; +end; + +function GetMessageBoxRightToLeft: Boolean; +begin + Result := MessageBoxRightToLeft; +end; + +procedure SetMessageBoxCallbackFunc(const AFunc: TMsgBoxCallbackFunc; const AParam: LongInt); +begin + MessageBoxCallbackFunc := AFunc; + MessageBoxCallbackParam := AParam; +end; + +procedure TriggerMessageBoxCallbackFunc(const Flags: LongInt; const After: Boolean); +begin + if Assigned(MessageBoxCallbackFunc) and not MessageBoxCallbackActive then begin + MessageBoxCallbackActive := True; + try + MessageBoxCallbackFunc(Flags, After, MessageBoxCallbackParam); + finally + MessageBoxCallbackActive := False; + end; + end; +end; + +function AppMessageBox(const Text, Caption: PChar; Flags: Longint): Integer; +var + ActiveWindow: HWND; + WindowList: Pointer; +begin + if MessageBoxRightToLeft then + Flags := Flags or (MB_RTLREADING or MB_RIGHT); + + TriggerMessageBoxCallbackFunc(Flags, False); + try + { If the application window isn't currently visible, show the message box + with no owner window so it'll get a taskbar button } + if IsIconic(Application.Handle) or + (GetWindowLong(Application.Handle, GWL_STYLE) and WS_VISIBLE = 0) or + (GetWindowLong(Application.Handle, GWL_EXSTYLE) and WS_EX_TOOLWINDOW <> 0) then begin + ActiveWindow := GetActiveWindow; + WindowList := DisableTaskWindows(0); + try + { Note: DisableTaskWindows doesn't disable invisible windows. + MB_TASKMODAL will ensure that Application.Handle gets disabled too. } + Result := MessageBox(0, Text, Caption, Flags or MB_TASKMODAL); + finally + EnableTaskWindows(WindowList); + SetActiveWindow(ActiveWindow); + end; + Exit; + end; + + Result := Application.MessageBox(Text, Caption, Flags); + finally + TriggerMessageBoxCallbackFunc(Flags, True); + end; +end; + +function MsgBoxP(const Text, Caption: PChar; const Typ: TMsgBoxType; + const Buttons: Cardinal): Integer; +const + IconFlags: array[TMsgBoxType] of Cardinal = + (MB_ICONINFORMATION, MB_ICONQUESTION, MB_ICONEXCLAMATION, MB_ICONSTOP); +begin + Result := AppMessageBox(Text, GetMessageBoxCaption(Caption, Typ), Buttons or IconFlags[Typ]); +end; + +function MsgBox(const Text, Caption: String; const Typ: TMsgBoxType; + const Buttons: Cardinal): Integer; +begin + Result := MsgBoxP(PChar(Text), PChar(Caption), Typ, Buttons); +end; + +function MsgBoxFmt(const Text: String; const Args: array of const; + const Caption: String; const Typ: TMsgBoxType; const Buttons: Cardinal): Integer; +begin + Result := MsgBox(Format(Text, Args), Caption, Typ, Buttons); +end; + +function ReactivateTopWindowEnumProc(Wnd: HWND; LParam: LPARAM): BOOL; stdcall; +begin + { Stop if we encounter the application window; don't consider it or any + windows below it } + if Wnd = Application.Handle then + Result := False + else + if IsWindowVisible(Wnd) and IsWindowEnabled(Wnd) and + (GetWindowLong(Wnd, GWL_EXSTYLE) and (WS_EX_TOPMOST or WS_EX_TOOLWINDOW) = 0) then begin + SetActiveWindow(Wnd); + Result := False; + end + else + Result := True; +end; + +procedure ReactivateTopWindow; +{ If the application window is active, reactivates the top window owned by the + current thread. Tool windows and windows that are invisible, disabled, or + topmost are not considered. } +begin + if GetActiveWindow = Application.Handle then + EnumThreadWindows(GetCurrentThreadId, @ReactivateTopWindowEnumProc, 0); +end; + +procedure FreeCaptions; far; +var + T: TMsgBoxType; +begin + for T := Low(T) to High(T) do begin + StrDispose(MessageBoxCaptions[T]); + MessageBoxCaptions[T] := nil; + end; +end; + +{ TWindowDisabler } + +const + WindowDisablerWndClassName = 'TWindowDisabler-Window'; +var + WindowDisablerWndClassAtom: TAtom; + +function WindowDisablerWndProc(Wnd: HWND; Msg: UINT; WParam: WPARAM; + LParam: LPARAM): LRESULT; stdcall; +begin + if Msg = WM_CLOSE then + { If the fallback window becomes focused (e.g. by Alt+Tabbing onto it) and + Alt+F4 is pressed, we must not pass the message to DefWindowProc because + it would destroy the window } + Result := 0 + else + Result := DefWindowProc(Wnd, Msg, WParam, LParam); +end; + +constructor TWindowDisabler.Create; +const + WndClass: TWndClass = ( + style: 0; + lpfnWndProc: @WindowDisablerWndProc; + cbClsExtra: 0; + cbWndExtra: 0; + hInstance: 0; + hIcon: 0; + hCursor: 0; + hbrBackground: COLOR_WINDOW + 1; + lpszMenuName: nil; + lpszClassName: WindowDisablerWndClassName); +begin + inherited Create; + FPreviousActiveWnd := GetActiveWindow; + FPreviousFocusWnd := GetFocus; + FWindowList := DisableTaskWindows(0); + + { Create the "fallback" window. + When a child process hides its last window, Windows will try to activate + the top-most enabled window on the desktop. If all of our windows were + disabled, it would end up bringing some other application to the + foreground. This gives Windows an enabled window to re-activate, which + is invisible to the user. } + if WindowDisablerWndClassAtom = 0 then + WindowDisablerWndClassAtom := Windows.RegisterClass(WndClass); + if WindowDisablerWndClassAtom <> 0 then begin + { Create an invisible owner window for the fallback window so that it + doesn't display a taskbar button. (We can't just give it the + WS_EX_TOOLWINDOW style because Windows skips tool windows when searching + for a new window to activate.) } + FOwnerWnd := CreateWindowEx(0, WindowDisablerWndClassName, '', + WS_POPUP or WS_DISABLED, 0, 0, 0, 0, HWND_DESKTOP, 0, HInstance, nil); + if FOwnerWnd <> 0 then begin + FFallbackWnd := CreateWindowEx(0, WindowDisablerWndClassName, + PChar(Application.Title), WS_POPUP, 0, 0, 0, 0, FOwnerWnd, 0, + HInstance, nil); + if FFallbackWnd <> 0 then + ShowWindow(FFallbackWnd, SW_SHOWNA); + end; + end; + + { Take the focus away from whatever has it. While you can't click controls + inside a disabled window, keystrokes will still reach the focused control + (e.g. you can press Space to re-click a focused button). } + SetFocus(0); +end; + +destructor TWindowDisabler.Destroy; +begin + EnableTaskWindows(FWindowList); + { Re-activate the previous window. But don't do this if GetActiveWindow + returns zero, because that means another application is in the foreground + (possibly a child process spawned by us that is still running). } + if GetActiveWindow <> 0 then begin + if FPreviousActiveWnd <> 0 then + SetActiveWindow(FPreviousActiveWnd); + { If the active window never changed, then the above SetActiveWindow call + won't have an effect. Explicitly restore the focus. } + if FPreviousFocusWnd <> 0 then + SetFocus(FPreviousFocusWnd); + end; + if FOwnerWnd <> 0 then + DestroyWindow(FOwnerWnd); { will destroy FFallbackWnd too } + inherited; +end; + +initialization +finalization + FreeCaptions; +end. diff --git a/Projects/Src/CmnFunc2.pas b/Projects/Src/CmnFunc2.pas new file mode 100644 index 00000000..82ba49fe --- /dev/null +++ b/Projects/Src/CmnFunc2.pas @@ -0,0 +1,1753 @@ +unit CmnFunc2; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + Common non-VCL functions +} + +{$B-,R-} + +interface + +uses + Windows, SysUtils; + +const + KEY_WOW64_64KEY = $0100; + +type + TOneShotTimer = record + private + FLastElapsed: Cardinal; + FStartTick: DWORD; + FTimeout: Cardinal; + public + function Expired: Boolean; + procedure SleepUntilExpired; + procedure Start(const Timeout: Cardinal); + function TimeElapsed: Cardinal; + function TimeRemaining: Cardinal; + end; + + TLogProc = procedure(const S: String; const Error, FirstLine: Boolean; const Data: NativeInt); + + TCreateProcessOutputReader = class + private + FCreatedHandles: Boolean; + FOKToRead: Boolean; + FMaxTotalBytesToRead: Cardinal; + FTotalBytesRead: Cardinal; + FStdInNulDevice: THandle; + FStdOutPipeRead: THandle; + FStdOutPipeWrite: THandle; + FLogProc: TLogProc; + FLogProcData: NativeInt; + FReadBuffer: AnsiString; + FNextLineIsFirstLine: Boolean; + procedure CloseAndClearHandle(var Handle: THandle); + procedure LogErrorFmt(const S: String; const Args: array of const); + public + constructor Create(const ALogProc: TLogProc; const ALogProcData: NativeInt); + destructor Destroy; override; + procedure UpdateStartupInfo(var StartupInfo: TStartupInfo; + var InheritHandles: Boolean); + procedure NotifyCreateProcessDone; + procedure Read(const LastRead: Boolean); + property MaxTotalBytesToRead: Cardinal read FMaxTotalBytesToRead write FMaxTotalBytesToRead; + end; + + TRegView = (rvDefault, rv32Bit, rv64Bit); +const + RegViews64Bit = [rv64Bit]; + +function NewFileExists(const Name: String): Boolean; +function DirExists(const Name: String): Boolean; +function FileOrDirExists(const Name: String): Boolean; +function IsDirectoryAndNotReparsePoint(const Name: String): Boolean; +function GetIniString(const Section, Key: String; Default: String; const Filename: String): String; +function GetIniInt(const Section, Key: String; const Default, Min, Max: Longint; const Filename: String): Longint; +function GetIniBool(const Section, Key: String; const Default: Boolean; const Filename: String): Boolean; +function IniKeyExists(const Section, Key, Filename: String): Boolean; +function IsIniSectionEmpty(const Section, Filename: String): Boolean; +function SetIniString(const Section, Key, Value, Filename: String): Boolean; +function SetIniInt(const Section, Key: String; const Value: Longint; const Filename: String): Boolean; +function SetIniBool(const Section, Key: String; const Value: Boolean; const Filename: String): Boolean; +procedure DeleteIniEntry(const Section, Key, Filename: String); +procedure DeleteIniSection(const Section, Filename: String); +function GetEnv(const EnvVar: String): String; +function GetCmdTail: String; +function GetCmdTailEx(StartIndex: Integer): String; +function NewParamCount: Integer; +function NewParamStr(Index: Integer): string; +function AddQuotes(const S: String): String; +function RemoveQuotes(const S: String): String; +function GetShortName(const LongName: String): String; +function GetWinDir: String; +function GetSystemWinDir: String; +function GetSystemDir: String; +function GetSysWow64Dir: String; +function GetSysNativeDir(const IsWin64: Boolean): String; +function GetTempDir: String; +function StringChange(var S: String; const FromStr, ToStr: String): Integer; +function StringChangeEx(var S: String; const FromStr, ToStr: String; + const SupportDBCS: Boolean): Integer; +function AdjustLength(var S: String; const Res: Cardinal): Boolean; +function ConvertConstPercentStr(var S: String): Boolean; +function ConvertPercentStr(var S: String): Boolean; +function ConstPos(const Ch: Char; const S: String): Integer; +function SkipPastConst(const S: String; const Start: Integer): Integer; +function RegQueryStringValue(H: HKEY; Name: PChar; var ResultStr: String): Boolean; +function RegQueryMultiStringValue(H: HKEY; Name: PChar; var ResultStr: String): Boolean; +function RegValueExists(H: HKEY; Name: PChar): Boolean; +function RegCreateKeyExView(const RegView: TRegView; hKey: HKEY; lpSubKey: PChar; + Reserved: DWORD; lpClass: PChar; dwOptions: DWORD; samDesired: REGSAM; + lpSecurityAttributes: PSecurityAttributes; var phkResult: HKEY; + lpdwDisposition: PDWORD): Longint; +function RegOpenKeyExView(const RegView: TRegView; hKey: HKEY; lpSubKey: PChar; + ulOptions: DWORD; samDesired: REGSAM; var phkResult: HKEY): Longint; +function RegDeleteKeyView(const RegView: TRegView; const Key: HKEY; const Name: PChar): Longint; +function RegDeleteKeyIncludingSubkeys(const RegView: TRegView; const Key: HKEY; const Name: PChar): Longint; +function RegDeleteKeyIfEmpty(const RegView: TRegView; const RootKey: HKEY; const SubkeyName: PChar): Longint; +function GetShellFolderPath(const FolderID: Integer): String; +function GetCurrentUserSid: String; +function IsAdminLoggedOn: Boolean; +function IsPowerUserLoggedOn: Boolean; +function IsMultiByteString(const S: AnsiString): Boolean; +function FontExists(const FaceName: String): Boolean; +function GetUILanguage: LANGID; +function RemoveAccelChar(const S: String): String; +function GetTextWidth(const DC: HDC; S: String; const Prefix: Boolean): Integer; +function AddPeriod(const S: String): String; +function GetExceptMessage: String; +function GetPreferredUIFont: String; +function IsWildcard(const Pattern: String): Boolean; +function WildcardMatch(const Text, Pattern: PChar): Boolean; +function IntMax(const A, B: Integer): Integer; +function Win32ErrorString(ErrorCode: Integer): String; +function DeleteDirTree(const Dir: String): Boolean; +function SetNTFSCompression(const FileOrDir: String; Compress: Boolean): Boolean; +procedure AddToWindowMessageFilterEx(const Wnd: HWND; const Msg: UINT); +function ShutdownBlockReasonCreate(Wnd: HWND; const Reason: String): Boolean; +function ShutdownBlockReasonDestroy(Wnd: HWND): Boolean; +function TryStrToBoolean(const S: String; var BoolResult: Boolean): Boolean; +procedure WaitMessageWithTimeout(const Milliseconds: DWORD); +function MoveFileReplace(const ExistingFileName, NewFileName: String): Boolean; +procedure TryEnableAutoCompleteFileSystem(Wnd: HWND); +procedure CreateMutex(const MutexName: String); + +implementation + +uses + PathFunc; + +{ Avoid including Variants (via ActiveX and ShlObj) in SetupLdr (SetupLdr uses CmnFunc2), saving 26 KB. } + +const + shell32 = 'shell32.dll'; + +type + PSHItemID = ^TSHItemID; + _SHITEMID = record + cb: Word; { Size of the ID (including cb itself) } + abID: array[0..0] of Byte; { The item ID (variable length) } + end; + TSHItemID = _SHITEMID; + SHITEMID = _SHITEMID; + + PItemIDList = ^TItemIDList; + _ITEMIDLIST = record + mkid: TSHItemID; + end; + TItemIDList = _ITEMIDLIST; + ITEMIDLIST = _ITEMIDLIST; + + IMalloc = interface(IUnknown) + ['{00000002-0000-0000-C000-000000000046}'] + function Alloc(cb: Longint): Pointer; stdcall; + function Realloc(pv: Pointer; cb: Longint): Pointer; stdcall; + procedure Free(pv: Pointer); stdcall; + function GetSize(pv: Pointer): Longint; stdcall; + function DidAlloc(pv: Pointer): Integer; stdcall; + procedure HeapMinimize; stdcall; + end; + +function SHGetMalloc(var ppMalloc: IMalloc): HResult; stdcall; external shell32 name 'SHGetMalloc'; +function SHGetSpecialFolderLocation(hwndOwner: HWND; nFolder: Integer; + var ppidl: PItemIDList): HResult; stdcall; external shell32 name 'SHGetSpecialFolderLocation'; +function SHGetPathFromIDList(pidl: PItemIDList; pszPath: PChar): BOOL; stdcall; + external shell32 name 'SHGetPathFromIDListW'; + + +function InternalGetFileAttr(const Name: String): Integer; +begin + Result := GetFileAttributes(PChar(RemoveBackslashUnlessRoot(Name))); +end; + +function NewFileExists(const Name: String): Boolean; +{ Returns True if the specified file exists. + This function is better than Delphi's FileExists function because it works + on files in directories that don't have "list" permission. There is, however, + one other difference: FileExists allows wildcards, but this function does + not. } +var + Attr: Integer; +begin + Attr := GetFileAttributes(PChar(Name)); + Result := (Attr <> -1) and (Attr and faDirectory = 0); +end; + +function DirExists(const Name: String): Boolean; +{ Returns True if the specified directory name exists. The specified name + may include a trailing backslash. + NOTE: Delphi's FileCtrl unit has a similar function called DirectoryExists. + However, the implementation is different between Delphi 1 and 2. (Delphi 1 + does not count hidden or system directories as existing.) } +var + Attr: Integer; +begin + Attr := InternalGetFileAttr(Name); + Result := (Attr <> -1) and (Attr and faDirectory <> 0); +end; + +function FileOrDirExists(const Name: String): Boolean; +{ Returns True if the specified directory or file name exists. The specified + name may include a trailing backslash. } +begin + Result := InternalGetFileAttr(Name) <> -1; +end; + +function IsDirectoryAndNotReparsePoint(const Name: String): Boolean; +{ Returns True if the specified directory exists and is NOT a reparse point. } +const + FILE_ATTRIBUTE_REPARSE_POINT = $00000400; +var + Attr: DWORD; +begin + Attr := GetFileAttributes(PChar(Name)); + Result := (Attr <> $FFFFFFFF) and + (Attr and FILE_ATTRIBUTE_DIRECTORY <> 0) and + (Attr and FILE_ATTRIBUTE_REPARSE_POINT = 0); +end; + +function GetIniString(const Section, Key: String; Default: String; + const Filename: String): String; +var + BufSize, Len: Integer; +begin + { On Windows 9x, Get*ProfileString can modify the lpDefault parameter, so + make sure it's unique and not read-only } + UniqueString(Default); + BufSize := 256; + while True do begin + SetString(Result, nil, BufSize); + if Filename <> '' then + Len := GetPrivateProfileString(PChar(Section), PChar(Key), PChar(Default), + @Result[1], BufSize, PChar(Filename)) + else + Len := GetProfileString(PChar(Section), PChar(Key), PChar(Default), + @Result[1], BufSize); + { Work around bug present on Windows NT/2000 (not 95): When lpDefault is + too long to fit in the buffer, nSize is returned (null terminator + counted) instead of nSize-1 (what it's supposed to return). So don't + trust the returned length; calculate it ourself. + Note: This also ensures the string can never include embedded nulls. } + if Len <> 0 then + Len := StrLen(PChar(Result)); + { Break if the string fits, or if it's apparently 64 KB or longer. + No point in increasing buffer size past 64 KB because the length + returned by Windows 2000 seems to be mod 65536. And Windows 95 returns + 0 on values longer than ~32 KB. + Note: The docs say the function returns "nSize minus one" if the buffer + is too small, but I'm willing to bet it can be "minus two" if the last + character is double-byte. Let's just be extremely paranoid and check for + BufSize-8. } + if (Len < BufSize-8) or (BufSize >= 65536) then begin + SetLength(Result, Len); + Break; + end; + { Otherwise double the buffer size and try again } + BufSize := BufSize * 2; + end; +end; + +function GetIniInt(const Section, Key: String; + const Default, Min, Max: Longint; const Filename: String): Longint; +{ Reads a Longint from an INI file. If the Longint read is not between Min/Max + then it returns Default. If Min=Max then Min/Max are ignored } +var + S: String; + E: Integer; +begin + S := GetIniString(Section, Key, '', Filename); + if S = '' then + Result := Default + else begin + Val(S, Result, E); + if (E <> 0) or ((Min <> Max) and ((Result < Min) or (Result > Max))) then + Result := Default; + end; +end; + +function GetIniBool(const Section, Key: String; const Default: Boolean; + const Filename: String): Boolean; +begin + Result := GetIniInt(Section, Key, Ord(Default), 0, 0, Filename) <> 0; +end; + +function IniKeyExists(const Section, Key, Filename: String): Boolean; + function Equals(const Default: PChar): Boolean; + var + Test: array[0..7] of Char; + begin + Test[0] := #0; + if Filename <> '' then + GetPrivateProfileString(PChar(Section), PChar(Key), Default, + Test, SizeOf(Test) div SizeOf(Test[0]), PChar(Filename)) + else + GetProfileString(PChar(Section), PChar(Key), Default, + Test, SizeOf(Test) div SizeOf(Test[0])); + Result := lstrcmp(Test, Default) = 0; + end; +begin + { If the key does not exist, a default string is returned both times. } + Result := not Equals('x1234x') or not Equals('x5678x'); { <- don't change } +end; + +function IsIniSectionEmpty(const Section, Filename: String): Boolean; +var + Test: array[0..255] of Char; +begin + Test[0] := #0; + if Filename <> '' then + GetPrivateProfileString(PChar(Section), nil, '', Test, + SizeOf(Test) div SizeOf(Test[0]), PChar(Filename)) + else + GetProfileString(PChar(Section), nil, '', Test, + SizeOf(Test) div SizeOf(Test[0])); + Result := Test[0] = #0; +end; + +function SetIniString(const Section, Key, Value, Filename: String): Boolean; +begin + if Filename <> '' then + Result := WritePrivateProfileString(PChar(Section), PChar(Key), + PChar(Value), PChar(Filename)) + else + Result := WriteProfileString(PChar(Section), PChar(Key), + PChar(Value)); +end; + +function SetIniInt(const Section, Key: String; const Value: Longint; + const Filename: String): Boolean; +begin + Result := SetIniString(Section, Key, IntToStr(Value), Filename); +end; + +function SetIniBool(const Section, Key: String; const Value: Boolean; + const Filename: String): Boolean; +begin + Result := SetIniInt(Section, Key, Ord(Value), Filename); +end; + +procedure DeleteIniEntry(const Section, Key, Filename: String); +begin + if Filename <> '' then + WritePrivateProfileString(PChar(Section), PChar(Key), + nil, PChar(Filename)) + else + WriteProfileString(PChar(Section), PChar(Key), + nil); +end; + +procedure DeleteIniSection(const Section, Filename: String); +begin + if Filename <> '' then + WritePrivateProfileString(PChar(Section), nil, nil, + PChar(Filename)) + else + WriteProfileString(PChar(Section), nil, nil); +end; + +function GetEnv(const EnvVar: String): String; +{ Gets the value of the specified environment variable. (Just like TP's GetEnv) } +var + Res: DWORD; +begin + SetLength(Result, 255); + repeat + Res := GetEnvironmentVariable(PChar(EnvVar), PChar(Result), Length(Result)); + if Res = 0 then begin + Result := ''; + Break; + end; + until AdjustLength(Result, Res); +end; + +function GetParamStr(const P: PChar; var Param: String): PChar; + + function Extract(P: PChar; const Buffer: PChar; var Len: Integer): PChar; + var + InQuote: Boolean; + begin + Len := 0; + InQuote := False; + while (P^ <> #0) and ((P^ > ' ') or InQuote) do begin + if P^ = '"' then + InQuote := not InQuote + else begin + if Assigned(Buffer) then + Buffer[Len] := P^; + Inc(Len); + end; + Inc(P); + end; + Result := P; + end; + +var + Len: Integer; + Buffer: String; +begin + Extract(P, nil, Len); + SetString(Buffer, nil, Len); + Result := Extract(P, @Buffer[1], Len); + Param := Buffer; + while (Result^ <> #0) and (Result^ <= ' ') do + Inc(Result); +end; + +function GetCmdTail: String; +{ Returns all command line parameters passed to the process as a single + string. } +var + S: String; +begin + Result := GetParamStr(GetCommandLine, S); +end; + +function GetCmdTailEx(StartIndex: Integer): String; +{ Returns all command line parameters passed to the process as a single + string, starting with StartIndex (one-based). } +var + P: PChar; + S: String; +begin + P := GetParamStr(GetCommandLine, S); + while (StartIndex > 1) and (P^ <> #0) do begin + P := GetParamStr(P, S); + Dec(StartIndex); + end; + Result := P; +end; + +function NewParamCount: Integer; +var + P: PChar; + S: String; +begin + P := GetParamStr(GetCommandLine, S); + Result := 0; + while P^ <> #0 do begin + Inc(Result); + P := GetParamStr(P, S); + end; +end; + +function NewParamStr(Index: Integer): string; +{ Returns the Indexth command line parameter, or an empty string if Index is + out of range. + Differences from Delphi's ParamStr: + - No limits on parameter length + - Doesn't ignore empty parameters ("") + - Handles the empty argv[0] case like MSVC: if GetCommandLine() returns + " a b" then NewParamStr(1) should return "a", not "b" } +var + Buffer: array[0..MAX_PATH-1] of Char; + S: String; + P: PChar; +begin + if Index = 0 then begin + SetString(Result, Buffer, GetModuleFileName(0, Buffer, SizeOf(Buffer) div SizeOf(Buffer[0]))); + end + else begin + P := GetCommandLine; + while True do begin + if P^ = #0 then begin + S := ''; + Break; + end; + P := GetParamStr(P, S); + if Index = 0 then Break; + Dec(Index); + end; + Result := S; + end; +end; + +function AddQuotes(const S: String): String; +{ Adds a quote (") character to the left and right sides of the string if + the string contains a space and it didn't have quotes already. This is + primarily used when spawning another process with a long filename as one of + the parameters. } +begin + Result := Trim(S); + if (PathPos(' ', Result) <> 0) and + ((Result[1] <> '"') or (PathLastChar(Result)^ <> '"')) then + Result := '"' + Result + '"'; +end; + +function RemoveQuotes(const S: String): String; +{ Opposite of AddQuotes; removes any quotes around the string. } +begin + Result := S; + while (Result <> '') and (Result[1] = '"') do + Delete(Result, 1, 1); + while (Result <> '') and (PathLastChar(Result)^ = '"') do + SetLength(Result, Length(Result)-1); +end; + +function ConvertPercentStr(var S: String): Boolean; +{ Expands all %-encoded characters in the string (see RFC 2396). Returns True + if all were successfully expanded. } +var + I, C, E: Integer; + N: String; +begin + Result := True; + I := 1; + while I <= Length(S) do begin + if S[I] = '%' then begin + N := Copy(S, I, 3); + if Length(N) <> 3 then begin + Result := False; + Break; + end; + N[1] := '$'; + Val(N, C, E); + if E <> 0 then begin + Result := False; + Break; + end; + { delete the two numbers following '%', and replace '%' with the character } + Delete(S, I+1, 2); + S[I] := Chr(C); + end; + Inc(I); + end; +end; + +function SkipPastConst(const S: String; const Start: Integer): Integer; +{ Returns the character index following the Inno Setup constant embedded + into the string S at index Start. + If the constant is not closed (missing a closing brace), it returns zero. } +var + L, BraceLevel, LastOpenBrace: Integer; +begin + Result := Start; + L := Length(S); + if Result < L then begin + Inc(Result); + if S[Result] = '{' then begin + Inc(Result); + Exit; + end + else begin + BraceLevel := 1; + LastOpenBrace := -1; + while Result <= L do begin + case S[Result] of + '{': begin + if LastOpenBrace <> Result-1 then begin + Inc(BraceLevel); + LastOpenBrace := Result; + end + else + { Skip over '{{' when in an embedded constant } + Dec(BraceLevel); + end; + '}': begin + Dec(BraceLevel); + if BraceLevel = 0 then begin + Inc(Result); + Exit; + end; + end; + end; + Inc(Result); + end; + end; + end; + Result := 0; +end; + +function ConvertConstPercentStr(var S: String): Boolean; +{ Same as ConvertPercentStr, but is designed to ignore embedded Inno Setup + constants. Any '%' characters between braces are not translated. Two + consecutive braces are ignored. } +var + I, C, E: Integer; + N: String; +begin + Result := True; + I := 1; + while I <= Length(S) do begin + case S[I] of + '{': begin + I := SkipPastConst(S, I); + if I = 0 then begin + Result := False; + Break; + end; + Dec(I); { ...since there's an Inc below } + end; + '%': begin + N := Copy(S, I, 3); + if Length(N) <> 3 then begin + Result := False; + Break; + end; + N[1] := '$'; + Val(N, C, E); + if E <> 0 then begin + Result := False; + Break; + end; + { delete the two numbers following '%', and replace '%' with the character } + Delete(S, I+1, 2); + S[I] := Chr(C); + end; + end; + Inc(I); + end; +end; + +function ConstPos(const Ch: Char; const S: String): Integer; +{ Like the standard Pos function, but skips over any Inno Setup constants + embedded in S } +var + I, L: Integer; +begin + Result := 0; + I := 1; + L := Length(S); + while I <= L do begin + if S[I] = Ch then begin + Result := I; + Break; + end + else if S[I] = '{' then begin + I := SkipPastConst(S, I); + if I = 0 then + Break; + end + else + Inc(I); + end; +end; + +function GetShortName(const LongName: String): String; +{ Gets the short version of the specified long filename. If the file does not + exist, or some other error occurs, it returns LongName. } +var + Res: DWORD; +begin + SetLength(Result, MAX_PATH); + repeat + Res := GetShortPathName(PChar(LongName), PChar(Result), Length(Result)); + if Res = 0 then begin + Result := LongName; + Break; + end; + until AdjustLength(Result, Res); +end; + +function GetWinDir: String; +{ Returns fully qualified path of the Windows directory. Only includes a + trailing backslash if the Windows directory is the root directory. } +var + Buf: array[0..MAX_PATH-1] of Char; +begin + GetWindowsDirectory(Buf, SizeOf(Buf) div SizeOf(Buf[0])); + Result := StrPas(Buf); +end; + +function GetSystemWindowsDirectoryW(lpBuffer: LPWSTR; uSize: UINT): UINT; stdcall; external kernel32; + +function GetSystemWinDir: String; +{ Like get GetWinDir but uses GetSystemWindowsDirectory instead of + GetWindowsDirectory: With Terminal Services, the GetSystemWindowsDirectory + function retrieves the path of the system Windows directory, while the + GetWindowsDirectory function retrieves the path of a Windows directory that is + private for each user. On a single-user system, GetSystemWindowsDirectory is + the same as GetWindowsDirectory. } +var + Buf: array[0..MAX_PATH-1] of Char; +begin + GetSystemWindowsDirectoryW(Buf, SizeOf(Buf) div SizeOf(Buf[0])); + Result := StrPas(Buf); +end; + +function GetSystemDir: String; +{ Returns fully qualified path of the Windows System directory. Only includes a + trailing backslash if the Windows System directory is the root directory. } +var + Buf: array[0..MAX_PATH-1] of Char; +begin + GetSystemDirectory(Buf, SizeOf(Buf) div SizeOf(Buf[0])); + Result := StrPas(Buf); +end; + +function GetSysWow64Dir: String; +{ Returns fully qualified path of the SysWow64 directory on 64-bit Windows. + Returns '' if there is no SysWow64 directory (e.g. running 32-bit Windows). } +var + GetSystemWow64DirectoryFunc: function( + lpBuffer: PWideChar; uSize: UINT): UINT; stdcall; + Res: Integer; + Buf: array[0..MAX_PATH] of Char; +begin + Result := ''; + GetSystemWow64DirectoryFunc := GetProcAddress(GetModuleHandle(kernel32), + 'GetSystemWow64DirectoryW'); + if Assigned(GetSystemWow64DirectoryFunc) then begin + Res := GetSystemWow64DirectoryFunc(Buf, SizeOf(Buf) div SizeOf(Buf[0])); + if (Res > 0) and (Res < SizeOf(Buf) div SizeOf(Buf[0])) then + Result := Buf; + end; +end; + +function GetSysNativeDir(const IsWin64: Boolean): String; +{ Returns the special Sysnative alias, without trailing backslash. + Returns '' if there is no Sysnative alias. } +begin + { From MSDN: 32-bit applications can access the native system directory by + substituting %windir%\Sysnative for %windir%\System32. WOW64 recognizes + Sysnative as a special alias used to indicate that the file system should + not redirect the access. } + if IsWin64 then + { Note: Avoiding GetWinDir here as that might not return the real Windows + directory under Terminal Services } + Result := PathExpand(AddBackslash(GetSystemDir) + '..\Sysnative') { Do not localize } + else + Result := ''; +end; + +function GetTempDir: String; +{ Returns fully qualified path of the temporary directory, with trailing + backslash. This does not use the Win32 function GetTempPath, due to platform + differences. } +label 1; +begin + Result := GetEnv('TMP'); + if (Result <> '') and DirExists(Result) then + goto 1; + Result := GetEnv('TEMP'); + if (Result <> '') and DirExists(Result) then + goto 1; + { Like Windows 2000's GetTempPath, return USERPROFILE when TMP and TEMP + are not set } + Result := GetEnv('USERPROFILE'); + if (Result <> '') and DirExists(Result) then + goto 1; + Result := GetWinDir; +1:Result := AddBackslash(PathExpand(Result)); +end; + +function StringChangeEx(var S: String; const FromStr, ToStr: String; + const SupportDBCS: Boolean): Integer; +{ Changes all occurrences in S of FromStr to ToStr. If SupportDBCS is True + (recommended), double-byte character sequences in S are recognized and + handled properly. Otherwise, the function behaves in a binary-safe manner. + Returns the number of times FromStr was matched and changed. } +var + FromStrLen, I, EndPos, J: Integer; + IsMatch: Boolean; +label 1; +begin + Result := 0; + if FromStr = '' then Exit; + FromStrLen := Length(FromStr); + I := 1; +1:EndPos := Length(S) - FromStrLen + 1; + while I <= EndPos do begin + IsMatch := True; + J := 0; + while J < FromStrLen do begin + if S[J+I] <> FromStr[J+1] then begin + IsMatch := False; + Break; + end; + Inc(J); + end; + if IsMatch then begin + Inc(Result); + Delete(S, I, FromStrLen); + Insert(ToStr, S, I); + Inc(I, Length(ToStr)); + goto 1; + end; + if SupportDBCS then + Inc(I, PathCharLength(S, I)) + else + Inc(I); + end; +end; + +function StringChange(var S: String; const FromStr, ToStr: String): Integer; +{ Same as calling StringChangeEx with SupportDBCS=False } +begin + Result := StringChangeEx(S, FromStr, ToStr, False); +end; + +function AdjustLength(var S: String; const Res: Cardinal): Boolean; +{ Returns True if successful. Returns False if buffer wasn't large enough, + and called AdjustLength to resize it. } +begin + Result := Integer(Res) < Length(S); + SetLength(S, Res); +end; + +function InternalRegQueryStringValue(H: HKEY; Name: PChar; var ResultStr: String; + Type1, Type2: DWORD): Boolean; +var + Typ, Size: DWORD; + Len: Integer; + S: String; + ErrorCode: Longint; +label 1; +begin + Result := False; +1:Size := 0; + if (RegQueryValueEx(H, Name, nil, @Typ, nil, @Size) = ERROR_SUCCESS) and + ((Typ = Type1) or (Typ = Type2)) then begin + if Size = 0 then begin + { It's an empty string with no null terminator. + (Must handle those here since we can't pass a nil lpData pointer on + the second RegQueryValueEx call.) } + ResultStr := ''; + Result := True; + end + else begin + { Paranoia: Impose reasonable upper limit on Size to avoid potential + integer overflows below } + if Cardinal(Size) >= Cardinal($70000000) then + OutOfMemoryError; + { Note: If Size isn't a multiple of SizeOf(S[1]), we have to round up + here so that RegQueryValueEx doesn't overflow the buffer } + Len := (Size + (SizeOf(S[1]) - 1)) div SizeOf(S[1]); + SetString(S, nil, Len); + ErrorCode := RegQueryValueEx(H, Name, nil, @Typ, @S[1], @Size); + if ErrorCode = ERROR_MORE_DATA then begin + { The data must've increased in size since the first RegQueryValueEx + call. Start over. } + goto 1; + end; + if (ErrorCode = ERROR_SUCCESS) and + ((Typ = Type1) or (Typ = Type2)) then begin + { If Size isn't a multiple of SizeOf(S[1]), we disregard the partial + character, like RegGetValue } + Len := Size div SizeOf(S[1]); + { Remove any null terminators from the end and trim the string to the + returned length. + Note: We *should* find 1 null terminator, but it's possible for + there to be more or none if the value was written that way. } + while (Len <> 0) and (S[Len] = #0) do + Dec(Len); + { In a REG_MULTI_SZ value, each individual string is null-terminated, + so add 1 null (back) to the end, unless there are no strings (Len=0) } + if (Typ = REG_MULTI_SZ) and (Len <> 0) then + Inc(Len); + SetLength(S, Len); + if (Typ = REG_MULTI_SZ) and (Len <> 0) then + S[Len] := #0; + ResultStr := S; + Result := True; + end; + end; + end; +end; + +function RegQueryStringValue(H: HKEY; Name: PChar; var ResultStr: String): Boolean; +{ Queries the specified REG_SZ or REG_EXPAND_SZ registry key/value, and returns + the value in ResultStr. Returns True if successful. When False is returned, + ResultStr is unmodified. } +begin + Result := InternalRegQueryStringValue(H, Name, ResultStr, REG_SZ, + REG_EXPAND_SZ); +end; + +function RegQueryMultiStringValue(H: HKEY; Name: PChar; var ResultStr: String): Boolean; +{ Queries the specified REG_MULTI_SZ registry key/value, and returns the value + in ResultStr. Returns True if successful. When False is returned, ResultStr + is unmodified. } +begin + Result := InternalRegQueryStringValue(H, Name, ResultStr, REG_MULTI_SZ, + REG_MULTI_SZ); +end; + +function RegValueExists(H: HKEY; Name: PChar): Boolean; +{ Returns True if the specified value exists. Requires KEY_QUERY_VALUE access + to the key. } +begin + Result := RegQueryValueEx(H, Name, nil, nil, nil, nil) = ERROR_SUCCESS; +end; + +function RegCreateKeyExView(const RegView: TRegView; hKey: HKEY; lpSubKey: PChar; + Reserved: DWORD; lpClass: PChar; dwOptions: DWORD; samDesired: REGSAM; + lpSecurityAttributes: PSecurityAttributes; var phkResult: HKEY; + lpdwDisposition: PDWORD): Longint; +begin + if RegView = rv64Bit then + samDesired := samDesired or KEY_WOW64_64KEY; + Result := RegCreateKeyEx(hKey, lpSubKey, Reserved, lpClass, dwOptions, + samDesired, lpSecurityAttributes, phkResult, lpdwDisposition); +end; + +function RegOpenKeyExView(const RegView: TRegView; hKey: HKEY; lpSubKey: PChar; + ulOptions: DWORD; samDesired: REGSAM; var phkResult: HKEY): Longint; +begin + if RegView = rv64Bit then + samDesired := samDesired or KEY_WOW64_64KEY; + Result := RegOpenKeyEx(hKey, lpSubKey, ulOptions, samDesired, phkResult); +end; + +var + RegDeleteKeyExFunc: function(hKey: HKEY; + lpSubKey: PWideChar; samDesired: REGSAM; Reserved: DWORD): Longint; stdcall; + +function RegDeleteKeyView(const RegView: TRegView; const Key: HKEY; + const Name: PChar): Longint; +begin + if RegView <> rv64Bit then + Result := RegDeleteKey(Key, Name) + else begin + if @RegDeleteKeyExFunc = nil then + RegDeleteKeyExFunc := GetProcAddress(GetModuleHandle(advapi32), + 'RegDeleteKeyExW'); + if Assigned(RegDeleteKeyExFunc) then + Result := RegDeleteKeyExFunc(Key, Name, KEY_WOW64_64KEY, 0) + else + Result := ERROR_PROC_NOT_FOUND; + end; +end; + +function RegDeleteKeyIncludingSubkeys(const RegView: TRegView; const Key: HKEY; + const Name: PChar): Longint; +{ Deletes the specified key and all subkeys. + Returns ERROR_SUCCESS if the key was successful deleted. } +var + H: HKEY; + KeyName: String; + I, KeyNameCount: DWORD; + ErrorCode: Longint; +begin + if (Name = nil) or (Name[0] = #0) then begin + Result := ERROR_INVALID_PARAMETER; + Exit; + end; + if RegOpenKeyExView(RegView, Key, Name, 0, KEY_ENUMERATE_SUB_KEYS, H) = ERROR_SUCCESS then begin + try + SetString(KeyName, nil, 256); + I := 0; + while True do begin + KeyNameCount := Length(KeyName); + ErrorCode := RegEnumKeyEx(H, I, @KeyName[1], KeyNameCount, nil, nil, nil, nil); + if ErrorCode = ERROR_MORE_DATA then begin + { Double the size of the buffer and try again } + if Length(KeyName) >= 65536 then begin + { Sanity check: If we tried a 64 KB buffer and it's still saying + there's more data, something must be seriously wrong. Bail. } + Break; + end; + SetString(KeyName, nil, Length(KeyName) * 2); + Continue; + end; + if ErrorCode <> ERROR_SUCCESS then + Break; + if RegDeleteKeyIncludingSubkeys(RegView, H, PChar(KeyName)) <> ERROR_SUCCESS then + Inc(I); + end; + finally + RegCloseKey(H); + end; + end; + Result := RegDeleteKeyView(RegView, Key, Name); +end; + +function RegDeleteKeyIfEmpty(const RegView: TRegView; const RootKey: HKEY; + const SubkeyName: PChar): Longint; +{ Deletes the specified subkey if it has no subkeys or values. + Returns ERROR_SUCCESS if the key was successful deleted, ERROR_DIR_NOT_EMPTY + if it was not deleted because it contained subkeys or values, or possibly + some other Win32 error code. } +var + K: HKEY; + NumSubkeys, NumValues: DWORD; +begin + Result := RegOpenKeyExView(RegView, RootKey, SubkeyName, 0, KEY_QUERY_VALUE, K); + if Result <> ERROR_SUCCESS then + Exit; + Result := RegQueryInfoKey(K, nil, nil, nil, @NumSubkeys, nil, nil, + @NumValues, nil, nil, nil, nil); + RegCloseKey(K); + if Result <> ERROR_SUCCESS then + Exit; + if (NumSubkeys = 0) and (NumValues = 0) then + Result := RegDeleteKeyView(RegView, RootKey, SubkeyName) + else + Result := ERROR_DIR_NOT_EMPTY; +end; + +function GetShellFolderPath(const FolderID: Integer): String; +var + pidl: PItemIDList; + Buffer: array[0..MAX_PATH-1] of Char; + Malloc: IMalloc; +begin + Result := ''; + if FAILED(SHGetMalloc(Malloc)) then + Malloc := nil; + if SUCCEEDED(SHGetSpecialFolderLocation(0, FolderID, pidl)) then begin + if SHGetPathFromIDList(pidl, Buffer) then + Result := Buffer; + if Assigned(Malloc) then + Malloc.Free(pidl); + end; +end; + +function GetCurrentUserSid: String; +var + Token: THandle; + UserInfoSize: DWORD; + UserInfo: PTokenUser; + StringSid: PWideChar; +begin + Result := ''; + if not OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, Token) then + Exit; + UserInfo := nil; + try + UserInfoSize := 0; + if not GetTokenInformation(Token, TokenUser, nil, 0, UserInfoSize) and + (GetLastError <> ERROR_INSUFFICIENT_BUFFER) then + Exit; + + GetMem(UserInfo, UserInfoSize); + if not GetTokenInformation(Token, TokenUser, UserInfo, + UserInfoSize, UserInfoSize) then + Exit; + + if ConvertSidToStringSidW(UserInfo.User.Sid, StringSid) then begin + Result := StringSid; + LocalFree(StringSid); + end; + finally + FreeMem(UserInfo); + CloseHandle(Token); + end; +end; + +function IsMemberOfGroup(const DomainAliasRid: DWORD): Boolean; +{ Returns True if the logged-on user is a member of the specified local + group. } +const + SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = + (Value: (0, 0, 0, 0, 0, 5)); + SECURITY_BUILTIN_DOMAIN_RID = $00000020; + SE_GROUP_ENABLED = $00000004; + SE_GROUP_USE_FOR_DENY_ONLY = $00000010; +var + Sid: PSID; + CheckTokenMembership: function(TokenHandle: THandle; SidToCheck: PSID; + var IsMember: BOOL): BOOL; stdcall; + IsMember: BOOL; + Token: THandle; + GroupInfoSize: DWORD; + GroupInfo: PTokenGroups; + I: Integer; +begin + Result := False; + + if not AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, + SECURITY_BUILTIN_DOMAIN_RID, DomainAliasRid, + 0, 0, 0, 0, 0, 0, Sid) then + Exit; + try + { Use CheckTokenMembership if available. MSDN states: + "The CheckTokenMembership function should be used with Windows 2000 and + later to determine whether a specified SID is present and enabled in an + access token. This function eliminates potential misinterpretations of + the active group membership if changes to access tokens are made in + future releases." } + CheckTokenMembership := GetProcAddress(GetModuleHandle(advapi32), + 'CheckTokenMembership'); + if Assigned(CheckTokenMembership) then begin + if CheckTokenMembership(0, Sid, IsMember) then + Result := IsMember; + end + else begin { Should never happen } + GroupInfo := nil; + if not OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True, Token) then begin + if GetLastError <> ERROR_NO_TOKEN then + Exit; + if not OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, Token) then + Exit; + end; + try + GroupInfoSize := 0; + if not GetTokenInformation(Token, TokenGroups, nil, 0, GroupInfoSize) and + (GetLastError <> ERROR_INSUFFICIENT_BUFFER) then + Exit; + + GetMem(GroupInfo, GroupInfoSize); + if not GetTokenInformation(Token, TokenGroups, GroupInfo, + GroupInfoSize, GroupInfoSize) then + Exit; + + for I := 0 to GroupInfo.GroupCount-1 do begin + if EqualSid(Sid, GroupInfo.Groups[I].Sid) and + (GroupInfo.Groups[I].Attributes and (SE_GROUP_ENABLED or + SE_GROUP_USE_FOR_DENY_ONLY) = SE_GROUP_ENABLED) then begin + Result := True; + Break; + end; + end; + finally + FreeMem(GroupInfo); + CloseHandle(Token); + end; + end; + finally + FreeSid(Sid); + end; +end; + +function IsAdminLoggedOn: Boolean; +{ Returns True if the logged-on user is a member of the Administrators local + group. } +const + DOMAIN_ALIAS_RID_ADMINS = $00000220; +begin + Result := IsMemberOfGroup(DOMAIN_ALIAS_RID_ADMINS); +end; + +function IsPowerUserLoggedOn: Boolean; +{ Returns True if the logged-on user is a member of the Power Users local + group. } +const + DOMAIN_ALIAS_RID_POWER_USERS = $00000223; +begin + Result := IsMemberOfGroup(DOMAIN_ALIAS_RID_POWER_USERS); +end; + +function IsMultiByteString(const S: AnsiString): Boolean; +var + I: Integer; +begin + Result := False; + for I := 1 to Length(S) do + if IsDBCSLeadByte(Ord(S[I])) then begin + Result := True; + Break; + end; +end; + +function FontExistsCallback(const lplf: TLogFont; const lptm: TTextMetric; + dwType: DWORD; lpData: LPARAM): Integer; stdcall; +begin + Boolean(Pointer(lpData)^) := True; + Result := 1; +end; + +function FontExists(const FaceName: String): Boolean; +var + DC: HDC; +begin + Result := False; + DC := GetDC(0); + try + EnumFonts(DC, PChar(FaceName), @FontExistsCallback, @Result); + finally + ReleaseDC(0, DC); + end; +end; + +function GetUILanguage: LANGID; +{ Platform-independent version of GetUserDefaultUILanguage. May return 0 in + case of failure. } +var + GetUserDefaultUILanguage: function: LANGID; stdcall; + K: HKEY; + S: String; + E: Integer; +begin + GetUserDefaultUILanguage := GetProcAddress(GetModuleHandle(kernel32), + 'GetUserDefaultUILanguage'); + if Assigned(GetUserDefaultUILanguage) then + Result := GetUserDefaultUILanguage + else begin + { GetUserDefaultUILanguage is available on Windows 2000, Me, and later so + should never get here } + if RegOpenKeyExView(rvDefault, HKEY_USERS, '.DEFAULT\Control Panel\International', + 0, KEY_QUERY_VALUE, K) = ERROR_SUCCESS then begin + RegQueryStringValue(K, 'Locale', S); + RegCloseKey(K); + end; + Val('$' + S, Result, E); + if E <> 0 then + Result := 0; + end; +end; + +function RemoveAccelChar(const S: String): String; +var + I: Integer; +begin + Result := S; + I := 1; + while I <= Length(Result) do begin + if Result[I] = '&' then begin + System.Delete(Result, I, 1); + if I > Length(Result) then + Break; + end; + Inc(I, PathCharLength(Result, I)); + end; +end; + +function GetTextWidth(const DC: HDC; S: String; const Prefix: Boolean): Integer; +{ Returns the width of the specified string using the font currently selected + into DC. If Prefix is True, it first removes "&" characters as necessary. } +var + Size: TSize; +begin + { This procedure is 10x faster than using DrawText with the DT_CALCRECT flag } + if Prefix then + S := RemoveAccelChar(S); + GetTextExtentPoint32(DC, PChar(S), Length(S), Size); + Result := Size.cx; +end; + +function AddPeriod(const S: String): String; +begin + Result := S; + if (Result <> '') and (PathLastChar(Result)^ > '.') then + Result := Result + '.'; +end; + +function GetExceptMessage: String; +var + E: TObject; +begin + E := ExceptObject; + if E = nil then + Result := '[ExceptObject=nil]' { should never get here } + else if E is Exception then + Result := AddPeriod(Exception(E).Message) { usual case } + else + Result := E.ClassName; { shouldn't get here under normal circumstances } +end; + +function GetPreferredUIFont: String; +{ Gets the preferred UI font. Returns Microsoft Sans Serif, or MS Sans Serif + if it doesn't exist. + Microsoft Sans Serif (which is available on Windows 2000 and later) has two + advantages over MS Sans Serif: + 1) On Windows XP, it can display password dots in edit boxes. + 2) In my tests on Japanese XP, Microsoft Sans Serif can display Japanese + characters (MS Sans Serif cannot). } +begin + if FontExists('Microsoft Sans Serif') then + Result := 'Microsoft Sans Serif' + else + Result := 'MS Sans Serif'; +end; + +function IsWildcard(const Pattern: String): Boolean; +begin + Result := (Pos('*', Pattern) <> 0) or (Pos('?', Pattern) <> 0); +end; + +function WildcardMatch(const Text, Pattern: PChar): Boolean; +{ General-purpose wildcard matching function based on the widely used wildcat() + code by Rich $alz. In this implementation, however, the only supported + pattern matching characters are ? and *. + Note that this function uses Unix shell semantics -- e.g. a dot always + matches a dot (so a pattern of '*.*' won't match 'file'), and ? always + matches exactly 1 character (so '?????' won't match 'file'). + Also note: The InternalWildcardMatch function can recursively call itself + for each non-consecutive * character in the pattern. With enough * + characters, the stack could overflow. So ideally the caller should impose a + limit on either the length of the pattern string or the number of * + characters in it. } +type + TWildcardMatchResult = (wmFalse, wmTrue, wmAbort); + + function InternalWildcardMatch(T, P: PChar): TWildcardMatchResult; + begin + while P^ <> #0 do begin + if (T^ = #0) and (P^ <> '*') then begin + Result := wmAbort; + Exit; + end; + case P^ of + '?': ; { Match any character } + '*': begin + Inc(P); + while P^ = '*' do begin + { Consecutive stars act just like one } + Inc(P); + end; + if P^ = #0 then begin + { Trailing star matches everything } + Result := wmTrue; + Exit; + end; + while T^ <> #0 do begin + Result := InternalWildcardMatch(T, P); + if Result <> wmFalse then + Exit; + T := PathStrNextChar(T); + end; + Result := wmAbort; + Exit; + end; + else + if not PathCharCompare(T, P) then begin + Result := wmFalse; + Exit; + end; + end; + T := PathStrNextChar(T); + P := PathStrNextChar(P); + end; + if T^ = #0 then + Result := wmTrue + else + Result := wmFalse; + end; + +begin + Result := (InternalWildcardMatch(Text, Pattern) = wmTrue); +end; + +function IntMax(const A, B: Integer): Integer; +begin + if A > B then + Result := A + else + Result := B; +end; + +function Win32ErrorString(ErrorCode: Integer): String; +{ Like SysErrorMessage but also passes the FORMAT_MESSAGE_IGNORE_INSERTS flag + which allows the function to succeed on errors like 129 } +var + Len: Integer; + Buffer: array[0..1023] of Char; +begin + Len := FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or + FORMAT_MESSAGE_IGNORE_INSERTS or FORMAT_MESSAGE_ARGUMENT_ARRAY, nil, + ErrorCode, 0, Buffer, SizeOf(Buffer) div SizeOf(Buffer[0]), nil); + while (Len > 0) and ((Buffer[Len-1] <= ' ') or (Buffer[Len-1] = '.')) do + Dec(Len); + SetString(Result, Buffer, Len); +end; + +function DeleteDirTree(const Dir: String): Boolean; +{ Removes the specified directory including any files/subdirectories inside + it. Returns True if successful. } +var + H: THandle; + FindData: TWin32FindData; + FN: String; +begin + if (Dir <> '') and (Pos(#0, Dir) = 0) and { sanity/safety checks } + IsDirectoryAndNotReparsePoint(Dir) then begin + H := FindFirstFile(PChar(AddBackslash(Dir) + '*'), FindData); + if H <> INVALID_HANDLE_VALUE then begin + try + repeat + if (StrComp(FindData.cFileName, '.') <> 0) and + (StrComp(FindData.cFileName, '..') <> 0) then begin + FN := AddBackslash(Dir) + FindData.cFileName; + if FindData.dwFileAttributes and FILE_ATTRIBUTE_READONLY <> 0 then + SetFileAttributes(PChar(FN), FindData.dwFileAttributes and not FILE_ATTRIBUTE_READONLY); + if FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = 0 then + Windows.DeleteFile(PChar(FN)) + else + DeleteDirTree(FN); + end; + until not FindNextFile(H, FindData); + finally + Windows.FindClose(H); + end; + end; + end; + Result := RemoveDirectory(PChar(Dir)); +end; + +function SetNTFSCompression(const FileOrDir: String; Compress: Boolean): Boolean; +{ Changes the NTFS compression state of a file or directory. If False is + returned, GetLastError can be called to get extended error information. } +const + COMPRESSION_FORMAT_NONE = 0; + COMPRESSION_FORMAT_DEFAULT = 1; + FSCTL_SET_COMPRESSION = $9C040; + Compressions: array[Boolean] of Word = (COMPRESSION_FORMAT_NONE, COMPRESSION_FORMAT_DEFAULT); +var + Handle: THandle; + BytesReturned, LastError: DWORD; +begin + Handle := CreateFile(PChar(FileOrDir), GENERIC_READ or GENERIC_WRITE, + FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); + if Handle <> INVALID_HANDLE_VALUE then begin + Result := DeviceIoControl(Handle, FSCTL_SET_COMPRESSION, @Compressions[Compress], + SizeOf(Compressions[Compress]), nil, 0, BytesReturned, nil); + { Save the error code from DeviceIoControl as CloseHandle may overwrite it + (Windows 95's CloseHandle always sets it to zero) } + LastError := GetLastError; + CloseHandle(Handle); + SetLastError(LastError); + end else + Result := False; +end; + +var + ChangeWindowMessageFilterInited: BOOL; + ChangeWindowMessageFilterFunc: function(msg: UINT; dwFlag: DWORD): BOOL; stdcall; + ChangeWindowMessageFilterExInited: BOOL; + ChangeWindowMessageFilterExFunc: function(hWnd: HWND; msg: UINT; + action: DWORD; pChangeFilterStruct: Pointer): BOOL; stdcall; + +procedure AddToWindowMessageFilter(const Msg: UINT); +{ Adds a single message number to the process-wide message filter. } +const + MSGFLT_ADD = 1; +begin + if not ChangeWindowMessageFilterInited then begin + ChangeWindowMessageFilterFunc := GetProcAddress(GetModuleHandle(user32), + 'ChangeWindowMessageFilter'); + InterlockedExchange(Integer(ChangeWindowMessageFilterInited), Ord(True)); + end; + if Assigned(ChangeWindowMessageFilterFunc) then + ChangeWindowMessageFilterFunc(Msg, MSGFLT_ADD); +end; + +procedure AddToWindowMessageFilterEx(const Wnd: HWND; const Msg: UINT); +{ Adds a single message number to Wnd's window-specific message filter. Falls + back to modifying the process-wide message filter but in reality that should + never happen. } +const + MSGFLT_ALLOW = 1; +begin + if not ChangeWindowMessageFilterExInited then begin + ChangeWindowMessageFilterExFunc := GetProcAddress(GetModuleHandle(user32), + 'ChangeWindowMessageFilterEx'); + InterlockedExchange(Integer(ChangeWindowMessageFilterExInited), Ord(True)); + end; + if Assigned(ChangeWindowMessageFilterExFunc) then + ChangeWindowMessageFilterExFunc(Wnd, Msg, MSGFLT_ALLOW, nil) + else + AddToWindowMessageFilter(Msg); +end; + +function ShutdownBlockReasonCreate(Wnd: HWND; const Reason: String): Boolean; +var + ShutdownBlockReasonCreateFunc: function(Wnd: HWND; pwszReason: LPCWSTR): Bool; stdcall; +begin + { MSDN doesn't say whether you must call Destroy before a second Create, but it does say a Destroy + without a previous Create is a no-op, so call Destroy for safety. } + ShutdownBlockReasonDestroy(Wnd); + + ShutdownBlockReasonCreateFunc := GetProcAddress(GetModuleHandle(user32), 'ShutdownBlockReasonCreate'); + if Assigned(ShutdownBlockReasonCreateFunc) then + Result := ShutdownBlockReasonCreateFunc(Wnd, PChar(Reason)) + else + Result := False; +end; + +{ As MSDN says: if ShutdownBlockReasonCreate was not previously called, this function is a no-op. } +function ShutdownBlockReasonDestroy(Wnd: HWND): Boolean; +var + ShutdownBlockReasonDestroyFunc: function(Wnd: HWND): Bool; stdcall; +begin + ShutdownBlockReasonDestroyFunc := GetProcAddress(GetModuleHandle(user32), 'ShutdownBlockReasonDestroy'); + Result := Assigned(ShutdownBlockReasonDestroyFunc) and ShutdownBlockReasonDestroyFunc(Wnd); +end; + +function TryStrToBoolean(const S: String; var BoolResult: Boolean): Boolean; +begin + if (S = '0') or (CompareText(S, 'no') = 0) or (CompareText(S, 'false') = 0) then begin + BoolResult := False; + Result := True; + end + else if (S = '1') or (CompareText(S, 'yes') = 0) or (CompareText(S, 'true') = 0) then begin + BoolResult := True; + Result := True; + end + else + Result := False; +end; + +procedure WaitMessageWithTimeout(const Milliseconds: DWORD); +{ Like WaitMessage, but times out if a message isn't received before + Milliseconds ms have elapsed. } +begin + MsgWaitForMultipleObjects(0, THandle(nil^), False, Milliseconds, QS_ALLINPUT); +end; + +function MoveFileReplace(const ExistingFileName, NewFileName: String): Boolean; +begin + Result := MoveFileEx(PChar(ExistingFileName), PChar(NewFileName), + MOVEFILE_REPLACE_EXISTING); +end; + +var + SHAutoCompleteInitialized: Boolean; + SHAutoCompleteFunc: function(hwndEdit: HWND; dwFlags: dWord): LongInt; stdcall; + +procedure TryEnableAutoCompleteFileSystem(Wnd: HWND); +const + SHACF_FILESYSTEM = $1; +var + M: HMODULE; +begin + if not SHAutoCompleteInitialized then begin + M := SafeLoadLibrary(AddBackslash(GetSystemDir) + 'shlwapi.dll', + SEM_NOOPENFILEERRORBOX); + if M <> 0 then + SHAutoCompleteFunc := GetProcAddress(M, 'SHAutoComplete'); + SHAutoCompleteInitialized := True; + end; + + if Assigned(SHAutoCompleteFunc) then + SHAutoCompleteFunc(Wnd, SHACF_FILESYSTEM); +end; + +procedure CreateMutex(const MutexName: String); +const + SECURITY_DESCRIPTOR_REVISION = 1; { Win32 constant not defined in Delphi 3 } +var + SecurityDesc: TSecurityDescriptor; + SecurityAttr: TSecurityAttributes; +begin + { By default on Windows NT, created mutexes are accessible only by the user + running the process. We need our mutexes to be accessible to all users, so + that the mutex detection can work across user sessions in Windows XP. To + do this we use a security descriptor with a null DACL. } + InitializeSecurityDescriptor(@SecurityDesc, SECURITY_DESCRIPTOR_REVISION); + SetSecurityDescriptorDacl(@SecurityDesc, True, nil, False); + SecurityAttr.nLength := SizeOf(SecurityAttr); + SecurityAttr.lpSecurityDescriptor := @SecurityDesc; + SecurityAttr.bInheritHandle := False; + Windows.CreateMutex(@SecurityAttr, False, PChar(MutexName)); +end; + +{ TOneShotTimer } + +function TOneShotTimer.Expired: Boolean; +begin + Result := (TimeRemaining = 0); +end; + +procedure TOneShotTimer.SleepUntilExpired; +var + Remaining: Cardinal; +begin + while True do begin + Remaining := TimeRemaining; + if Remaining = 0 then + Break; + Sleep(Remaining); + end; +end; + +procedure TOneShotTimer.Start(const Timeout: Cardinal); +begin + FStartTick := GetTickCount; + FTimeout := Timeout; + FLastElapsed := 0; +end; + +function TOneShotTimer.TimeElapsed: Cardinal; +var + Elapsed: Cardinal; +begin + Elapsed := GetTickCount - FStartTick; + if Elapsed > FLastElapsed then + FLastElapsed := Elapsed; + Result := FLastElapsed; +end; + +function TOneShotTimer.TimeRemaining: Cardinal; +var + Elapsed: Cardinal; +begin + Elapsed := TimeElapsed; + if Elapsed < FTimeout then + Result := FTimeout - Elapsed + else + Result := 0; +end; + +{ TCreateProcessOutputReader } + +constructor TCreateProcessOutputReader.Create(const ALogProc: TLogProc; + const ALogProcData: NativeInt); +begin + if not Assigned(ALogProc) then + raise Exception.Create('ALogProc is required'); + + FLogProc := ALogProc; + FNextLineIsFirstLine := True; + FLogProcData := ALogProcData; + + var SecurityAttributes: TSecurityAttributes; + SecurityAttributes.nLength := SizeOf(SecurityAttributes); + SecurityAttributes.bInheritHandle := True; + SecurityAttributes.lpSecurityDescriptor := nil; + + var NulDevice := CreateFile('\\.\NUL', GENERIC_READ, + FILE_SHARE_READ or FILE_SHARE_WRITE, @SecurityAttributes, + OPEN_EXISTING, 0, 0); + if NulDevice = INVALID_HANDLE_VALUE then + LogErrorFmt('CreateFile failed (%d).', [GetLastError]) + else + FStdInNulDevice := NulDevice; + + var PipeRead, PipeWrite: THandle; + if not CreatePipe(PipeRead, PipeWrite, @SecurityAttributes, 0) then + LogErrorFmt('CreatePipe failed (%d).', [GetLastError]) + else begin + FStdOutPipeRead := PipeRead; + FStdOutPipeWrite := PipeWrite; + if not SetHandleInformation(FStdOutPipeRead, HANDLE_FLAG_INHERIT, 0) then + LogErrorFmt('SetHandleInformation failed (%d).', [GetLastError]); + end; + + FCreatedHandles := (FStdInNulDevice <> 0) and (FStdOutPipeRead <> 0) and + (FStdOutPipeWrite <> 0); + FOKToRead := FCreatedHandles; + FMaxTotalBytesToRead := 10*1024*1024; +end; + +destructor TCreateProcessOutputReader.Destroy; +begin + CloseAndClearHandle(FStdOutPipeRead); + CloseAndClearHandle(FStdOutPipeWrite); + CloseAndClearHandle(FStdInNulDevice); + inherited; +end; + +procedure TCreateProcessOutputReader.CloseAndClearHandle(var Handle: THandle); +begin + if Handle <> 0 then begin + CloseHandle(Handle); + Handle := 0; + end; +end; + +procedure TCreateProcessOutputReader.LogErrorFmt(const S: String; const Args: array of const); +begin + FLogProc(Format(S, Args), False, True, FLogProcData); +end; + +procedure TCreateProcessOutputReader.UpdateStartupInfo(var StartupInfo: TStartupInfo; + var InheritHandles: Boolean); +begin + if FCreatedHandles then begin + StartupInfo.dwFlags := StartupInfo.dwFlags or STARTF_USESTDHANDLES; + StartupInfo.hStdInput := FStdInNulDevice; + StartupInfo.hStdOutput := FStdOutPipeWrite; + StartupInfo.hStdError := FStdOutPipeWrite; + InheritHandles := True; + end else + InheritHandles := False; +end; + +procedure TCreateProcessOutputReader.NotifyCreateProcessDone; +begin + CloseAndClearHandle(FStdOutPipeWrite); + CloseAndClearHandle(FStdInNulDevice); +end; + +procedure TCreateProcessOutputReader.Read(const LastRead: Boolean); + + function FindNewLine(const S: AnsiString; const LastRead: Boolean): Integer; + begin + { This will return the position of the first #13 or #10. If a #13 is at + the very end of the string it's only accepted if we are certain we can't + be looking at a split #13#10 because there will be no more reads } + var N := Length(S); + for var I := 1 to N do + if ((S[I] = #13) and ((I < N) or LastRead)) or + (S[I] = #10) then + Exit(I); + Result := 0; + end; + + procedure LogLine(const S: AnsiString); + begin + FLogProc(UTF8ToString(S), False, FNextLineIsFirstLine, FLogProcData); + FNextLineIsFirstLine := False; + end; + +begin + if FOKToRead then begin + var TotalBytesAvail: DWORD; + FOKToRead := PeekNamedPipe(FStdOutPipeRead, nil, 0, nil, @TotalBytesAvail, nil); + if not FOKToRead then begin + var LastError := GetLastError; + if LastError <> ERROR_BROKEN_PIPE then + LogErrorFmt('PeekNamedPipe failed (%d).', [GetLastError]); + end else if TotalBytesAvail > 0 then begin + { Don't read more than our read limit } + if TotalBytesAvail > FMaxTotalBytesToRead - FTotalBytesRead then + TotalBytesAvail := FMaxTotalBytesToRead - FTotalBytesRead; + { Append newly available data to the incomplete line we might already have } + var TotalBytesHave: DWORD := Length(FReadBuffer); + SetLength(FReadBuffer, TotalBytesHave+TotalBytesAvail); + var BytesRead: DWORD; + FOKToRead := ReadFile(FStdOutPipeRead, FReadBuffer[TotalBytesHave+1], + TotalBytesAvail, BytesRead, nil); + if not FOKToRead then + LogErrorFmt('ReadFile failed (%d).', [GetLastError]) + else if BytesRead > 0 then begin + { Correct length if less bytes were read than requested } + SetLength(FReadBuffer, TotalBytesHave+BytesRead); + + { Check for completed lines thanks to the new data } + var P := FindNewLine(FReadBuffer, LastRead); + while P <> 0 do begin + LogLine(Copy(FReadBuffer, 1, P-1)); + if (FReadBuffer[P] = #13) and (P < Length(FReadBuffer)) and (FReadBuffer[P+1] = #10) then + Inc(P); + Delete(FReadBuffer, 1, P); + P := FindNewLine(FReadBuffer, LastRead); + end; + + Inc(FTotalBytesRead, BytesRead); + if FTotalBytesRead >= FMaxTotalBytesToRead then begin + { Read limit reached: break the pipe, throw away the incomplete line, and log an error } + FOKToRead := False; + FReadBuffer := ''; + LogErrorFmt('Maximum output length (%d) reached, ignoring remainder.', [FMaxTotalBytesToRead]); + end; + end; + end; + + { Unblock the child process's write, and cause further writes to fail immediately } + if not FOkToRead then + CloseAndClearHandle(FStdOutPipeRead); + end; + + if LastRead and (FReadBuffer <> '') then + LogLine(FReadBuffer); +end; + +end. diff --git a/Projects/Src/CompExeUpdate.pas b/Projects/Src/CompExeUpdate.pas new file mode 100644 index 00000000..92842049 --- /dev/null +++ b/Projects/Src/CompExeUpdate.pas @@ -0,0 +1,501 @@ +unit CompExeUpdate; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + PE header and resource update functions used by the compiler only +} + +interface + +uses + Windows, SysUtils, FileClass, VerInfo; + +procedure UpdateSetupPEHeaderFields(const F: TCustomFile; + const IsTSAware, IsDEPCompatible, IsASLRCompatible: Boolean); +procedure UpdateIcons(const FileName, IcoFileName: String; const DeleteUninstallIcon: Boolean); +procedure UpdateVersionInfo(const F: TCustomFile; + const NewBinaryFileVersion, NewBinaryProductVersion: TFileVersionNumbers; + const NewCompanyName, NewFileDescription, NewTextFileVersion, NewLegalCopyright, + NewProductName, NewTextProductVersion, NewOriginalFileName: String; + const SetFileVersionAndDescription: Boolean); +procedure PreventCOMCTL32Sideloading(const F: TCustomFile); + +implementation + +uses + ResUpdate, Math, Int64Em; + +procedure UpdateSetupPEHeaderFields(const F: TCustomFile; + const IsTSAware, IsDEPCompatible, IsASLRCompatible: Boolean); + + function SeekToPEHeader(const F: TCustomFile): Boolean; + var + DosHeader: packed record + Sig: array[0..1] of AnsiChar; + Other: array[0..57] of Byte; + PEHeaderOffset: LongWord; + end; + Sig: DWORD; + begin + Result := False; + F.Seek(0); + if F.Read(DosHeader, SizeOf(DosHeader)) = SizeOf(DosHeader) then begin + if (DosHeader.Sig[0] = 'M') and (DosHeader.Sig[1] = 'Z') and + (DosHeader.PEHeaderOffset <> 0) then begin + F.Seek(DosHeader.PEHeaderOffset); + if F.Read(Sig, SizeOf(Sig)) = SizeOf(Sig) then + if Sig = IMAGE_NT_SIGNATURE then + Result := True; + end; + end; + end; + +const + IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = $0040; + IMAGE_DLLCHARACTERISTICS_NX_COMPAT = $0100; + IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = $8000; + OffsetOfOperatingSystemVersion = $28; + OffsetOfImageVersion = $2C; + OffsetOfSubsystemVersion = $30; + OffsetOfDllCharacteristics = $46; +var + Header: TImageFileHeader; + Ofs: Cardinal; + OptMagic, DllChars, OrigDllChars: Word; +begin + if SeekToPEHeader(F) then begin + if (F.Read(Header, SizeOf(Header)) = SizeOf(Header)) and + (Header.SizeOfOptionalHeader = 224) then begin + Ofs := F.Position.Lo; + if (F.Read(OptMagic, SizeOf(OptMagic)) = SizeOf(OptMagic)) and + (OptMagic = IMAGE_NT_OPTIONAL_HDR32_MAGIC) then begin + { Update DllCharacteristics } + F.Seek(Ofs + OffsetOfDllCharacteristics); + if F.Read(DllChars, SizeOf(DllChars)) = SizeOf(DllChars) then begin + OrigDllChars := DllChars; + if IsTSAware then + DllChars := DllChars or IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE + else + DllChars := DllChars and not IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE; + if IsDEPCompatible then + DllChars := DllChars or IMAGE_DLLCHARACTERISTICS_NX_COMPAT + else + DllChars := DllChars and not IMAGE_DLLCHARACTERISTICS_NX_COMPAT; + { Note: because we stripped relocations from Setup(Ldr).e32 during + compilation IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE won't actually + enable ASLR, but allow setting it anyway to make checkers happy. } + if IsASLRCompatible then + DllChars := DllChars or IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE + else + DllChars := DllChars and not IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE; + if DllChars <> OrigDllChars then begin + F.Seek(Ofs + OffsetOfDllCharacteristics); + F.WriteBuffer(DllChars, SizeOf(DllChars)); + end; + Exit; + end; + end; + end; + end; + raise Exception.Create('UpdateSetupPEHeaderFields failed'); +end; + +procedure ResUpdateError(const Msg: String); +begin + raise Exception.Create('Resource update error: ' + Msg); +end; + +procedure ResUpdateErrorWithLastError(const Msg: String); +begin + ResUpdateError(Msg + ' (' + IntToStr(GetLastError) + ')'); +end; + +procedure UpdateVersionInfo(const F: TCustomFile; + const NewBinaryFileVersion, NewBinaryProductVersion: TFileVersionNumbers; + const NewCompanyName, NewFileDescription, NewTextFileVersion, NewLegalCopyright, + NewProductName, NewTextProductVersion, NewOriginalFileName: String; + const SetFileVersionAndDescription: Boolean); + + function WideStrsEqual(P1, P2: PWideChar): Boolean; + + function WideUpCase(C: WideChar): WideChar; + begin + Result := C; + if (Result >= 'a') and (Result <= 'z') then + Dec(Result, Ord('a') - Ord('A')); + end; + + begin + while True do begin + if WideUpCase(P1^) <> WideUpCase(P2^) then begin + Result := False; + Exit; + end; + if P1^ = #0 then + Break; + Inc(P1); + Inc(P2); + end; + Result := True; + end; + + procedure BumpToDWordBoundary(var P: Pointer); + begin + if Cardinal(P) and 3 <> 0 then + Cardinal(P) := (Cardinal(P) or 3) + 1; + end; + + function QueryValue(P: Pointer; Path: PWideChar; var Buf: Pointer; + var BufLen: Cardinal): Boolean; + var + EndP: Pointer; + ValueLength: Cardinal; + begin + Result := False; + Cardinal(EndP) := Cardinal(P) + PWord(P)^; + Inc(PWord(P)); + ValueLength := PWord(P)^; + Inc(PWord(P)); + Inc(PWord(P)); + if WideStrsEqual(PWideChar(P), Path) then begin + Inc(PWideChar(P), lstrlenW(P) + 1); + BumpToDWordBoundary(P); + Inc(Path, lstrlenW(Path) + 1); + if Path^ = #0 then begin + { Found the requested value } + Buf := P; + BufLen := ValueLength; + Result := True; + end + else begin + { Handle children. + Note: Like VerQueryValue, we always treat ValueLength as a byte count + when looking for child nodes. Many resource compilers, including + Borland's, wrongly set ValueLength to a *character* count on string + nodes. But since we never try to query for a child of a string node, + that doesn't matter here. } + Inc(Cardinal(P), ValueLength); + BumpToDWordBoundary(P); + while Cardinal(P) < Cardinal(EndP) do begin + Result := QueryValue(P, Path, Buf, BufLen); + if Result then + Exit; + Inc(Cardinal(P), PWord(P)^); + BumpToDWordBoundary(P); + end; + end; + end; + end; + + procedure ReplaceWithRealCopyrightSymbols(const Value: PWideChar); + var + Len, I, J: Integer; + begin + Len := lstrlenW(Value); + for I := 0 to Len-3 do begin + if (Value[I] = '(') and (Value[I+1] = 'C') and (Value[I+2] = ')') then begin + Value[I] := WideChar($00A9); + { Shift back two characters } + for J := I+1 to Len-3 do + Value[J] := Value[J+2]; + Value[Len-2] := ' '; + Value[Len-1] := ' '; + end; + end; + end; + + procedure UpdateStringValue(P: Pointer; const Path: PWideChar; NewValue: String); + var + Value: PWideChar; + ValueLen: Cardinal; + begin + if not QueryValue(P, Path, Pointer(Value), ValueLen) then + ResUpdateError('Unexpected version resource format (1)'); + Move(Pointer(NewValue)^, Value^, (Min(Length(NewValue), lstrlenW(Value)))*SizeOf(Char)); + ReplaceWithRealCopyrightSymbols(Value); + end; + + procedure UpdateFixedFileInfo(P: Pointer; const Path: PWideChar; + const NewFileVersion, NewProductVersion: TFileVersionNumbers; + const SetFileVersion: Boolean); + var + FixedFileInfo: PVSFixedFileInfo; + ValueLen: Cardinal; + begin + if not QueryValue(P, Path, Pointer(FixedFileInfo), ValueLen) then + ResUpdateError('Unexpected version resource format (2)'); + if FixedFileInfo.dwSignature <> $FEEF04BD then + ResUpdateError('Unexpected version resource format (3)'); + if SetFileVersion then begin + FixedFileInfo.dwFileVersionLS := NewFileVersion.LS; + FixedFileInfo.dwFileVersionMS := NewFileVersion.MS; + end; + FixedFileInfo.dwProductVersionLS := NewProductVersion.LS; + FixedFileInfo.dwProductVersionMS := NewProductVersion.MS; + end; + +var + ResOffset, ResSize: Cardinal; + VersRes: Pointer; +begin + { Locate the resource } + ResSize := SeekToResourceData(F, Cardinal(RT_VERSION), 1); + ResOffset := F.Position.Lo; + + GetMem(VersRes, ResSize); + try + { Read the resource } + F.ReadBuffer(VersRes^, ResSize); + + { Update the resource } + UpdateStringValue(VersRes, 'VS_VERSION_INFO'#0'StringFileInfo'#0'000004b0'#0'CompanyName'#0, NewCompanyName); + if SetFileVersionAndDescription then begin + UpdateStringValue(VersRes, 'VS_VERSION_INFO'#0'StringFileInfo'#0'000004b0'#0'FileDescription'#0, NewFileDescription); + UpdateStringValue(VersRes, 'VS_VERSION_INFO'#0'StringFileInfo'#0'000004b0'#0'FileVersion'#0, NewTextFileVersion); + end; + UpdateStringValue(VersRes, 'VS_VERSION_INFO'#0'StringFileInfo'#0'000004b0'#0'LegalCopyright'#0, NewLegalCopyright); + UpdateStringValue(VersRes, 'VS_VERSION_INFO'#0'StringFileInfo'#0'000004b0'#0'ProductName'#0, NewProductName); + UpdateStringValue(VersRes, 'VS_VERSION_INFO'#0'StringFileInfo'#0'000004b0'#0'OriginalFileName'#0, NewOriginalFileName); + UpdateStringValue(VersRes, 'VS_VERSION_INFO'#0'StringFileInfo'#0'000004b0'#0'ProductVersion'#0, NewTextProductVersion); + UpdateFixedFileInfo(VersRes, 'VS_VERSION_INFO'#0, NewBinaryFileVersion, NewBinaryProductVersion, SetFileVersionAndDescription); + + { Write the updated resource } + F.Seek(ResOffset); + F.WriteBuffer(VersRes^, ResSize); + finally + FreeMem(VersRes); + end; +end; + +function EnumLangsFunc(hModule: Cardinal; lpType, lpName: PAnsiChar; wLanguage: Word; lParam: Integer): BOOL; stdcall; +begin + PWord(lParam)^ := wLanguage; + Result := False; +end; + +function GetResourceLanguage(hModule: Cardinal; lpType, lpName: PChar; var wLanguage: Word): Boolean; +begin + wLanguage := 0; + EnumResourceLanguages(hModule, lpType, lpName, @EnumLangsFunc, Integer(@wLanguage)); + Result := True; +end; + +procedure UpdateIcons(const FileName, IcoFileName: String; const DeleteUninstallIcon: Boolean); +type + PIcoItemHeader = ^TIcoItemHeader; + TIcoItemHeader = packed record + Width: Byte; + Height: Byte; + Colors: Byte; + Reserved: Byte; + Planes: Word; + BitCount: Word; + ImageSize: DWORD; + end; + PIcoItem = ^TIcoItem; + TIcoItem = packed record + Header: TIcoItemHeader; + Offset: DWORD; + end; + PIcoHeader = ^TIcoHeader; + TIcoHeader = packed record + Reserved: Word; + Typ: Word; + ItemCount: Word; + Items: array [0..MaxInt shr 4 - 1] of TIcoItem; + end; + PGroupIconDirItem = ^TGroupIconDirItem; + TGroupIconDirItem = packed record + Header: TIcoItemHeader; + Id: Word; + end; + PGroupIconDir = ^TGroupIconDir; + TGroupIconDir = packed record + Reserved: Word; + Typ: Word; + ItemCount: Word; + Items: array [0..MaxInt shr 4 - 1] of TGroupIconDirItem; + end; + + function IsValidIcon(P: Pointer; Size: Cardinal): Boolean; + var + ItemCount: Cardinal; + begin + Result := False; + if Size < Cardinal(SizeOf(Word) * 3) then + Exit; + if (PChar(P)[0] = 'M') and (PChar(P)[1] = 'Z') then + Exit; + ItemCount := PIcoHeader(P).ItemCount; + if Size < Cardinal((SizeOf(Word) * 3) + (ItemCount * SizeOf(TIcoItem))) then + Exit; + P := @PIcoHeader(P).Items; + while ItemCount > Cardinal(0) do begin + if (Cardinal(PIcoItem(P).Offset + PIcoItem(P).Header.ImageSize) < Cardinal(PIcoItem(P).Offset)) or + (Cardinal(PIcoItem(P).Offset + PIcoItem(P).Header.ImageSize) > Cardinal(Size)) then + Exit; + Inc(PIcoItem(P)); + Dec(ItemCount); + end; + Result := True; + end; + + function DeleteIcon(const H: THandle; const M: HMODULE; const ResourceName: PChar): PGroupIconDir; + var + R: HRSRC; + Res: HGLOBAL; + GroupIconDir: PGroupIconDir; + I: Integer; + wLanguage: Word; + begin + { Load the group icon resource } + R := FindResource(M, ResourceName, RT_GROUP_ICON); + if R = 0 then + ResUpdateErrorWithLastError('FindResource failed (1)'); + Res := LoadResource(M, R); + if Res = 0 then + ResUpdateErrorWithLastError('LoadResource failed (1)'); + GroupIconDir := LockResource(Res); + if GroupIconDir = nil then + ResUpdateErrorWithLastError('LockResource failed (1)'); + + { Delete the group icon resource } + if not GetResourceLanguage(M, RT_GROUP_ICON, ResourceName, wLanguage) then + ResUpdateError('GetResourceLanguage failed (1)'); + if not UpdateResource(H, RT_GROUP_ICON, ResourceName, wLanguage, nil, 0) then + ResUpdateErrorWithLastError('UpdateResource failed (1)'); + + { Delete the icon resources that belonged to the group } + for I := 0 to GroupIconDir.ItemCount-1 do begin + if not GetResourceLanguage(M, RT_ICON, MakeIntResource(GroupIconDir.Items[I].Id), wLanguage) then + ResUpdateError('GetResourceLanguage failed (2)'); + if not UpdateResource(H, RT_ICON, MakeIntResource(GroupIconDir.Items[I].Id), wLanguage, nil, 0) then + ResUpdateErrorWithLastError('UpdateResource failed (2)'); + end; + + Result := GroupIconDir; + end; + +var + H: THandle; + M: HMODULE; + OldGroupIconDir, NewGroupIconDir: PGroupIconDir; + I: Integer; + F: TFile; + Ico: PIcoHeader; + N: Cardinal; + NewGroupIconDirSize: LongInt; +begin + Ico := nil; + + try + { Load the icons } + F := TFile.Create(IcoFileName, fdOpenExisting, faRead, fsRead); + try + N := F.CappedSize; + if Cardinal(N) > Cardinal($100000) then { sanity check } + ResUpdateError('Icon file is too large'); + GetMem(Ico, N); + F.ReadBuffer(Ico^, N); + finally + F.Free; + end; + + { Ensure the icon is valid } + if not IsValidIcon(Ico, N) then + ResUpdateError('Icon file is invalid'); + + { Update the resources } + H := BeginUpdateResource(PChar(FileName), False); + if H = 0 then + ResUpdateErrorWithLastError('BeginUpdateResource failed (1)'); + try + M := LoadLibraryEx(PChar(FileName), 0, LOAD_LIBRARY_AS_DATAFILE); + if M = 0 then + ResUpdateErrorWithLastError('LoadLibraryEx failed (1)'); + try + { Delete default icons } + OldGroupIconDir := DeleteIcon(H, M, 'MAINICON'); + if DeleteUninstallIcon then + DeleteIcon(H, M, 'Z_UNINSTALLICON'); + + { Build the new group icon resource } + NewGroupIconDirSize := 3*SizeOf(Word)+Ico.ItemCount*SizeOf(TGroupIconDirItem); + GetMem(NewGroupIconDir, NewGroupIconDirSize); + try + { Build the new group icon resource } + NewGroupIconDir.Reserved := OldGroupIconDir.Reserved; + NewGroupIconDir.Typ := OldGroupIconDir.Typ; + NewGroupIconDir.ItemCount := Ico.ItemCount; + for I := 0 to NewGroupIconDir.ItemCount-1 do begin + NewGroupIconDir.Items[I].Header := Ico.Items[I].Header; + NewGroupIconDir.Items[I].Id := I+100; //start at 100 to avoid overwriting other icons that may exist + end; + + { Update 'MAINICON' } + for I := 0 to NewGroupIconDir.ItemCount-1 do + if not UpdateResource(H, RT_ICON, MakeIntResource(NewGroupIconDir.Items[I].Id), 1033, Pointer(DWORD(Ico) + Ico.Items[I].Offset), Ico.Items[I].Header.ImageSize) then + ResUpdateErrorWithLastError('UpdateResource failed (3)'); + + { Update the icons } + if not UpdateResource(H, RT_GROUP_ICON, 'MAINICON', 1033, NewGroupIconDir, NewGroupIconDirSize) then + ResUpdateErrorWithLastError('UpdateResource failed (4)'); + finally + FreeMem(NewGroupIconDir); + end; + finally + FreeLibrary(M); + end; + except + EndUpdateResource(H, True); { discard changes } + raise; + end; + if not EndUpdateResource(H, False) then + ResUpdateErrorWithLastError('EndUpdateResource failed'); + finally + FreeMem(Ico); + end; +end; + +procedure PreventCOMCTL32Sideloading(const F: TCustomFile); +const + DependencyStartTag: AnsiString = ''; + DependencyEndTag: AnsiString = ''; + FileStartTag: AnsiString = ''#13#10; +var + S: AnsiString; + Offset: Integer64; + P,Q,R: Integer; +begin + { Read the manifest resource into a string } + SetString(S, nil, SeekToResourceData(F, 24, 1)); + Offset := F.Position; + F.ReadBuffer(S[1], Length(S)); + + { Locate and update the tag } + P := Pos(DependencyStartTag, S); + if P = 0 then + ResUpdateError(' tag not found'); + Q := Pos(DependencyEndTag, S); + if Q <= P then + ResUpdateError(' end tag not found'); + Q := Q+Length(DependencyEndTag); + if Length(COMCTL32Entry) > Q-P then + ResUpdateError(' tag shorter than replacement'); + R := Pos(FileStartTag, S); + if R <= Q then + ResUpdateError(' end tag after ?'); + + Inc64(Offset, P-1); + F.Seek64(Offset); + F.WriteAnsiString(AnsiString(Format('%*s', [Q-P-Length(COMCTL32Entry), ' ']))); + F.WriteAnsiString(AnsiString(Copy(S, Q, R-Q))); + F.WriteAnsiString(COMCTL32Entry); +end; + +end. diff --git a/Projects/Src/CompFileAssoc.pas b/Projects/Src/CompFileAssoc.pas new file mode 100644 index 00000000..6b82fad0 --- /dev/null +++ b/Projects/Src/CompFileAssoc.pas @@ -0,0 +1,188 @@ +unit CompFileAssoc; + +{ + Inno Setup + Copyright (C) 1997-2020 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + Compiler IDE's functions for registering/unregistering the .iss file association +} + +interface + +function RegisterISSFileAssociation(const AllowInteractive: Boolean; var AllUsers: Boolean): Boolean; +procedure UnregisterISSFileAssociation; + +implementation + +uses + Windows, SysUtils, PathFunc, ShlObj, CmnFunc, CmnFunc2; + +function GetRootkey: HKEY; +begin + if IsAdminLoggedOn then + Result := HKEY_LOCAL_MACHINE + else + Result := HKEY_CURRENT_USER; +end; + +procedure UnregisterISSFileAssociationDo(const Rootkey: HKEY; const ChangeNotify: Boolean); forward; + +function RegisterISSFileAssociation(const AllowInteractive: Boolean; var AllUsers: Boolean): Boolean; + + procedure SetKeyValue(const Rootkey: HKEY; const Subkey, ValueName: PChar; const Data: String); + + procedure Check(const Res: Longint); + begin + if Res <> ERROR_SUCCESS then + raise Exception.CreateFmt('Error creating file association:'#13#10'%d - %s', + [Res, Win32ErrorString(Res)]); + end; + + var + K: HKEY; + Disp: DWORD; + begin + Check(RegCreateKeyExView(rvDefault, Rootkey, Subkey, 0, nil, 0, KEY_SET_VALUE, + nil, K, @Disp)); + try + Check(RegSetValueEx(K, ValueName, 0, REG_SZ, PChar(Data), (Length(Data)+1)*SizeOf(Data[1]))); + finally + RegCloseKey(K); + end; + end; + +var + SelfName: String; + Rootkey: HKEY; +begin + Rootkey := GetRootkey; + AllUsers := Rootkey = HKEY_LOCAL_MACHINE; + + Result := AllUsers or not AllowInteractive or + (MsgBox('Unable to associate for all users without administrative privileges. Do you want to associate only for yourself instead?', + 'Associate', mbConfirmation, MB_YESNO) = IDYES); + if not Result then + Exit; + + SelfName := NewParamStr(0); + + SetKeyValue(Rootkey, 'Software\Classes\.iss', nil, 'InnoSetupScriptFile'); + SetKeyValue(Rootkey, 'Software\Classes\.iss', 'Content Type', 'text/plain'); + + SetKeyValue(Rootkey, 'Software\Classes\InnoSetupScriptFile', nil, 'Inno Setup Script'); + SetKeyValue(Rootkey, 'Software\Classes\InnoSetupScriptFile\DefaultIcon', nil, SelfName + ',1'); + SetKeyValue(Rootkey, 'Software\Classes\InnoSetupScriptFile\shell\open\command', nil, + '"' + SelfName + '" "%1"'); + SetKeyValue(Rootkey, 'Software\Classes\InnoSetupScriptFile\shell\OpenWithInnoSetup', nil, + 'Open with &Inno Setup'); + SetKeyValue(Rootkey, 'Software\Classes\InnoSetupScriptFile\shell\OpenWithInnoSetup\command', nil, + '"' + SelfName + '" "%1"'); + SetKeyValue(Rootkey, 'Software\Classes\InnoSetupScriptFile\shell\Compile', nil, 'Compi&le'); + SetKeyValue(Rootkey, 'Software\Classes\InnoSetupScriptFile\shell\Compile\command', nil, + '"' + SelfName + '" /cc "%1"'); + + SetKeyValue(Rootkey, PChar('Software\Classes\Applications\' + PathExtractName(SelfName) + '\SupportedTypes'), '.iss', ''); + + { If we just associated for all users, remove our existing association for the current user if it exists. } + if AllUsers then + UnregisterISSFileAssociationDo(HKEY_CURRENT_USER, False); + + SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil); +end; + +procedure UnregisterISSFileAssociationDo(const Rootkey: HKEY; const ChangeNotify: Boolean); + + function KeyValueEquals(const Rootkey: HKEY; const Subkey: PChar; const Data: String): Boolean; + var + K: HKEY; + S: String; + begin + Result := False; + if RegOpenKeyExView(rvDefault, Rootkey, Subkey, 0, KEY_QUERY_VALUE, K) = ERROR_SUCCESS then begin + if RegQueryStringValue(K, nil, S) and (PathCompare(Data, S) = 0) then + Result := True; + RegCloseKey(K); + end; + end; + + function KeyExists(const Rootkey: HKEY; const Subkey: PChar): Boolean; + var + K: HKEY; + begin + Result := (RegOpenKeyExView(rvDefault, Rootkey, Subkey, 0, KEY_QUERY_VALUE, + K) = ERROR_SUCCESS); + if Result then + RegCloseKey(K); + end; + + function GetKeyNumSubkeysValues(const Rootkey: HKEY; const Subkey: PChar; + var NumSubkeys, NumValues: DWORD): Boolean; + var + K: HKEY; + begin + Result := False; + if RegOpenKeyExView(rvDefault, Rootkey, Subkey, 0, KEY_QUERY_VALUE, K) = ERROR_SUCCESS then begin + Result := RegQueryInfoKey(K, nil, nil, nil, @NumSubkeys, nil, nil, + @NumValues, nil, nil, nil, nil) = ERROR_SUCCESS; + RegCloseKey(K); + end; + end; + + procedure DeleteValue(const Rootkey: HKEY; const Subkey, ValueName: PChar); + var + K: HKEY; + begin + if RegOpenKeyExView(rvDefault, Rootkey, Subkey, 0, KEY_SET_VALUE, K) = ERROR_SUCCESS then begin + RegDeleteValue(K, ValueName); + RegCloseKey(K); + end; + end; + +var + SelfName: String; + NumSubkeys, NumValues: DWORD; +begin + if not KeyExists(Rootkey, 'Software\Classes\InnoSetupScriptFile') and not KeyExists(Rootkey, 'Software\Classes\.iss') then + Exit; + + SelfName := NewParamStr(0); + + { NOTE: We can't just blindly delete the entire .iss & InnoSetupScriptFile + keys, otherwise we'd remove the association even if we weren't the one who + registered it in the first place. } + + { Clean up 'InnoSetupScriptFile' } + if KeyValueEquals(Rootkey, 'Software\Classes\InnoSetupScriptFile\DefaultIcon', SelfName + ',1') then + RegDeleteKeyIncludingSubkeys(rvDefault, Rootkey, 'Software\Classes\InnoSetupScriptFile\DefaultIcon'); + if KeyValueEquals(Rootkey, 'Software\Classes\InnoSetupScriptFile\shell\open\command', '"' + SelfName + '" "%1"') then + RegDeleteKeyIncludingSubkeys(rvDefault, Rootkey, 'Software\Classes\InnoSetupScriptFile\shell\open'); + if KeyValueEquals(Rootkey, 'Software\Classes\InnoSetupScriptFile\shell\OpenWithInnoSetup\command', '"' + SelfName + '" "%1"') then + RegDeleteKeyIncludingSubkeys(rvDefault, Rootkey, 'Software\Classes\InnoSetupScriptFile\shell\OpenWithInnoSetup'); + if KeyValueEquals(Rootkey, 'Software\Classes\InnoSetupScriptFile\shell\Compile\command', '"' + SelfName + '" /cc "%1"') then + RegDeleteKeyIncludingSubkeys(rvDefault, Rootkey, 'Software\Classes\InnoSetupScriptFile\shell\Compile'); + RegDeleteKeyIfEmpty(rvDefault, Rootkey, 'Software\Classes\InnoSetupScriptFile\shell'); + if KeyValueEquals(Rootkey, 'Software\Classes\InnoSetupScriptFile', 'Inno Setup Script') and + GetKeyNumSubkeysValues(Rootkey, 'Software\Classes\InnoSetupScriptFile', NumSubkeys, NumValues) and + (NumSubkeys = 0) and (NumValues <= 1) then + RegDeleteKey(Rootkey, 'Software\Classes\InnoSetupScriptFile'); + + { Clean up '.iss' } + if not KeyExists(Rootkey, 'Software\Classes\InnoSetupScriptFile') and + KeyValueEquals(Rootkey, 'Software\Classes\.iss', 'InnoSetupScriptFile') then begin + DeleteValue(Rootkey, 'Software\Classes\.iss', nil); + DeleteValue(Rootkey, 'Software\Classes\.iss', 'Content Type'); + end; + RegDeleteKeyIfEmpty(rvDefault, RootKey, 'Software\Classes\.iss'); + + if ChangeNotify then + SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil); +end; + +procedure UnregisterISSFileAssociation; +begin + UnregisterISSFileAssociationDo(GetRootkey, True); +end; + +end. diff --git a/Projects/Src/CompFilesDesigner.dfm b/Projects/Src/CompFilesDesigner.dfm new file mode 100644 index 00000000..f15d2483 --- /dev/null +++ b/Projects/Src/CompFilesDesigner.dfm @@ -0,0 +1,115 @@ +object FilesDesignerForm: TFilesDesignerForm + Left = 624 + Top = 375 + BorderStyle = bsDialog + Caption = '[Files] Entries Designer' + ClientHeight = 403 + ClientWidth = 575 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -12 + Font.Name = 'Segoe UI' + Font.Style = [] + Position = poDesktopCenter + OnCreate = FormCreate + OnDestroy = FormDestroy + TextHeight = 15 + object Panel1: TPanel + Left = 0 + Top = 361 + Width = 575 + Height = 42 + Align = alBottom + BevelOuter = bvNone + TabOrder = 0 + object Bevel1: TBevel + Left = 0 + Top = 0 + Width = 575 + Height = 3 + Align = alTop + Shape = bsBottomLine + end + object InsertButton: TButton + Left = 406 + Top = 11 + Width = 75 + Height = 25 + Caption = 'Insert' + Default = True + ModalResult = 1 + TabOrder = 0 + OnClick = InsertButtonClick + end + object CancelButton: TButton + Left = 490 + Top = 11 + Width = 75 + Height = 25 + Cancel = True + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 1 + end + end + object AppFilesEditButton: TButton + Left = 476 + Top = 107 + Width = 89 + Height = 23 + Caption = '&Parameters...' + TabOrder = 1 + end + object AppFilesRemoveButton: TButton + Left = 476 + Top = 135 + Width = 89 + Height = 23 + Caption = 'Remo&ve' + TabOrder = 2 + end + object AppFilesAddDirButton: TButton + Left = 476 + Top = 79 + Width = 89 + Height = 23 + Caption = 'Add fol&der...' + TabOrder = 3 + end + object AppFilesAddButton: TButton + Left = 476 + Top = 51 + Width = 89 + Height = 23 + Caption = '&Add file(s)...' + TabOrder = 4 + end + object AppFilesListBox: TDropListBox + Left = 8 + Top = 52 + Width = 453 + Height = 297 + ItemHeight = 15 + TabOrder = 5 + end + object AppFilesLabel: TNewStaticText + Left = 8 + Top = 32 + Width = 411 + Height = 16 + AutoSize = False + Caption = '&Files:' + FocusControl = AppFilesListBox + TabOrder = 6 + WordWrap = True + end + object NotCreateAppDirCheck: TCheckBox + Left = 8 + Top = 8 + Width = 253 + Height = 17 + Caption = '&Script has CreateAppDir=no' + TabOrder = 7 + end +end diff --git a/Projects/Src/CompFilesDesigner.pas b/Projects/Src/CompFilesDesigner.pas new file mode 100644 index 00000000..2c41bdc0 --- /dev/null +++ b/Projects/Src/CompFilesDesigner.pas @@ -0,0 +1,81 @@ +unit CompFilesDesigner; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + Files Designer form +} + +interface + +uses + Classes, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, + UIStateForm, NewStaticText, DropListBox, CompWizardFilesHelper; + +type + TFilesDesignerForm = class(TUIStateForm) + Panel1: TPanel; + InsertButton: TButton; + CancelButton: TButton; + AppFilesEditButton: TButton; + AppFilesRemoveButton: TButton; + AppFilesAddDirButton: TButton; + AppFilesAddButton: TButton; + AppFilesListBox: TDropListBox; + AppFilesLabel: TNewStaticText; + NotCreateAppDirCheck: TCheckBox; + Bevel1: TBevel; + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure InsertButtonClick(Sender: TObject); + private + FFilesHelper: TWizardFormFilesHelper; + function GetText: String; + procedure SetCreateAppDir(const Value: Boolean); + public + property CreateAppDir: Boolean write SetCreateAppDir; + property Text: string read GetText; + end; + +implementation + +{$R *.dfm} + +uses + CompFunc; + +procedure TFilesDesignerForm.FormCreate(Sender: TObject); +begin + InitFormFont(Self); + + FFilesHelper := TWizardFormFilesHelper.Create(Self, + NotCreateAppDirCheck, AppFilesListBox, AppFilesAddButton, AppFilesAddDirButton, + AppFilesEditButton, AppFilesRemoveButton); +end; + +procedure TFilesDesignerForm.FormDestroy(Sender: TObject); +begin + FFilesHelper.Free; +end; + +procedure TFilesDesignerForm.SetCreateAppDir(const Value: Boolean); +begin + NotCreateAppDirCheck.Checked := not Value; +end; + +function TFilesDesignerForm.GetText: String; +begin + Result := ''; + FFilesHelper.AddScript(Result); +end; + +procedure TFilesDesignerForm.InsertButtonClick(Sender: TObject); +begin + if FFilesHelper.FilesCount = 0 then + ModalResult := mrCancel; +end; + +end. diff --git a/Projects/Src/CompForm.dfm b/Projects/Src/CompForm.dfm new file mode 100644 index 00000000..f278343a --- /dev/null +++ b/Projects/Src/CompForm.dfm @@ -0,0 +1,23481 @@ +object CompileForm: TCompileForm + Left = 206 + Top = 97 + Caption = '*' + ClientHeight = 265 + ClientWidth = 361 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + KeyPreview = True + Menu = MainMenu1 + Position = poDefault + OnAfterMonitorDpiChanged = FormAfterMonitorDpiChanged + OnCloseQuery = FormCloseQuery + OnKeyDown = FormKeyDown + OnResize = FormResize + TextHeight = 13 + object Bevel1: TBevel + Left = 0 + Top = 29 + Width = 361 + Height = 1 + Align = alTop + Shape = bsTopLine + end + object BodyPanel: TPanel + Left = 0 + Top = 51 + Width = 361 + Height = 194 + Align = alClient + BevelOuter = bvNone + FullRepaint = False + TabOrder = 0 + object SplitPanel: TPanel + Left = 0 + Top = 86 + Width = 361 + Height = 4 + Cursor = crSizeNS + Align = alBottom + BevelOuter = bvNone + FullRepaint = False + TabOrder = 1 + Visible = False + OnMouseMove = SplitPanelMouseMove + end + object StatusPanel: TPanel + Left = 0 + Top = 90 + Width = 361 + Height = 104 + Align = alBottom + BevelOuter = bvNone + FullRepaint = False + TabOrder = 0 + Visible = False + object FindResultsList: TListBox + Left = 0 + Top = 0 + Width = 361 + Height = 83 + Style = lbOwnerDrawFixed + Align = alClient + BorderStyle = bsNone + ItemHeight = 13 + MultiSelect = True + TabOrder = 3 + Visible = False + OnDblClick = FindResultsListDblClick + OnDrawItem = FindResultsListDrawItem + OnKeyDown = OutputListKeyDown + end + object DebugCallStackList: TListBox + Left = 0 + Top = 0 + Width = 361 + Height = 83 + Style = lbOwnerDrawFixed + Align = alClient + BorderStyle = bsNone + ItemHeight = 13 + MultiSelect = True + TabOrder = 2 + Visible = False + OnDrawItem = DebugCallStackListDrawItem + OnKeyDown = OutputListKeyDown + end + object DebugOutputList: TListBox + Left = 0 + Top = 0 + Width = 361 + Height = 83 + Style = lbOwnerDrawFixed + Align = alClient + BorderStyle = bsNone + ItemHeight = 13 + MultiSelect = True + TabOrder = 1 + Visible = False + OnDrawItem = DebugOutputListDrawItem + OnKeyDown = OutputListKeyDown + end + object CompilerOutputList: TListBox + Left = 0 + Top = 0 + Width = 361 + Height = 83 + Style = lbOwnerDrawFixed + Align = alClient + BorderStyle = bsNone + ItemHeight = 13 + MultiSelect = True + TabOrder = 0 + OnDrawItem = CompilerOutputListDrawItem + OnKeyDown = OutputListKeyDown + end + object OutputTabSet: TNewTabSet + Left = 0 + Top = 83 + Width = 361 + Height = 21 + Align = alBottom + TabIndex = 0 + Tabs.Strings = ( + 'Compiler Output' + 'Debug Output' + 'Debug Call Stack' + 'Find Results') + OnClick = OutputTabSetClick + end + end + end + object StatusBar: TStatusBar + Left = 0 + Top = 245 + Width = 361 + Height = 20 + Panels = < + item + Alignment = taCenter + Bevel = pbNone + Text = ' 1: 1' + Width = 64 + end + item + Alignment = taCenter + Bevel = pbNone + Width = 64 + end + item + Alignment = taCenter + Bevel = pbNone + Text = 'Insert' + Width = 64 + end + item + Bevel = pbNone + Style = psOwnerDraw + Width = 110 + end + item + Bevel = pbNone + Style = psOwnerDraw + Width = 23 + end + item + Bevel = pbNone + Style = psOwnerDraw + Width = 128 + end + item + Bevel = pbNone + Width = 50 + end> + OnClick = StatusBarClick + OnDrawPanel = StatusBarDrawPanel + OnResize = StatusBarResize + end + object ToolBarPanel: TPanel + Left = 0 + Top = 0 + Width = 361 + Height = 29 + Align = alTop + BevelOuter = bvNone + TabOrder = 2 + object ToolBar: TToolBar + AlignWithMargins = True + Left = 7 + Top = 4 + Width = 351 + Height = 25 + Margins.Left = 7 + Margins.Top = 4 + Margins.Bottom = 0 + Images = ThemedToolbarVirtualImageList + ParentShowHint = False + ShowHint = True + TabOrder = 0 + Transparent = True + object BackNavButton: TToolButton + Left = 0 + Top = 0 + ImageIndex = 54 + ImageName = 'button-arrow-left' + OnClick = BackNavButtonClick + end + object ForwardNavButton: TToolButton + Left = 23 + Top = 0 + ImageIndex = 55 + ImageName = 'button-arrow-right' + OnClick = ForwardNavButtonClick + end + object ToolButton1: TToolButton + Left = 46 + Top = 0 + Width = 8 + Style = tbsSeparator + end + object NewMainFileButton: TToolButton + Left = 54 + Top = 0 + Hint = 'New Main Script (Ctrl+N)' + ImageIndex = 0 + ImageName = 'document-new' + OnClick = FNewMainFileClick + end + object OpenMainFileButton: TToolButton + Left = 77 + Top = 0 + Hint = 'Open Main Script (Ctrl+O)' + ImageIndex = 1 + ImageName = 'folder-open-filled-arrow-down-right' + OnClick = FOpenMainFileClick + end + object SaveButton: TToolButton + Left = 100 + Top = 0 + Hint = 'Save (Ctrl+S)' + ImageIndex = 2 + ImageName = 'save-filled' + OnClick = FSaveClick + end + object ToolButton2: TToolButton + Left = 123 + Top = 0 + Width = 8 + Style = tbsSeparator + end + object CompileButton: TToolButton + Left = 131 + Top = 0 + ImageIndex = 3 + ImageName = 'build' + OnClick = BCompileClick + end + object StopCompileButton: TToolButton + Left = 154 + Top = 0 + Hint = 'Stop Compile (Esc)' + Enabled = False + ImageIndex = 4 + ImageName = 'build-cancel-2' + OnClick = BStopCompileClick + end + object ToolButton3: TToolButton + Left = 177 + Top = 0 + Width = 8 + Style = tbsSeparator + end + object RunButton: TToolButton + Left = 185 + Top = 0 + ImageIndex = 5 + ImageName = 'debug-start-filled' + OnClick = RRunClick + end + object PauseButton: TToolButton + Left = 208 + Top = 0 + Hint = 'Pause' + Enabled = False + ImageIndex = 6 + ImageName = 'debug-break-all-filled' + OnClick = RPauseClick + end + object TerminateButton: TToolButton + Left = 231 + Top = 0 + Enabled = False + ImageIndex = 10 + ImageName = 'debug-stop-filled' + OnClick = RTerminateClick + end + object ToolButton4: TToolButton + Left = 254 + Top = 0 + Width = 8 + Style = tbsSeparator + end + object TargetSetupButton: TToolButton + Left = 262 + Top = 0 + Hint = 'Target Setup (Ctrl+Q)' + Grouped = True + ImageIndex = 7 + ImageName = 'install' + Style = tbsCheck + OnClick = RTargetClick + end + object TargetUninstallButton: TToolButton + Left = 285 + Top = 0 + Hint = 'Target Uninstall (Ctrl+W)' + Grouped = True + ImageIndex = 8 + ImageName = 'uninstall' + Style = tbsCheck + OnClick = RTargetClick + end + object ToolButton5: TToolButton + Left = 308 + Top = 0 + Width = 8 + Style = tbsSeparator + end + object HelpButton: TToolButton + Left = 316 + Top = 0 + Hint = 'Help (F1)' + ImageIndex = 9 + ImageName = 'button-help' + OnClick = HDocClick + end + end + end + object MemosTabSet: TNewTabSet + Left = 0 + Top = 30 + Width = 361 + Height = 21 + Align = alTop + TabIndex = 0 + Tabs.Strings = ( + 'Main Script') + TabPosition = tpTop + OnClick = MemosTabSetClick + OnCloseButtonClick = MemosTabSetOnCloseButtonClick + end + object MainMenu1: TMainMenu + AutoHotkeys = maManual + AutoLineReduction = maManual + Left = 8 + Top = 48 + object FMenu: TMenuItem + Caption = '&File' + OnClick = FMenuClick + object FNewMainFile: TMenuItem + Caption = '&New' + ShortCut = 16462 + OnClick = FNewMainFileClick + end + object FOpenMainFile: TMenuItem + Caption = '&Open...' + ShortCut = 16463 + OnClick = FOpenMainFileClick + end + object N19: TMenuItem + Caption = '-' + end + object FSave: TMenuItem + Caption = '&Save' + ShortCut = 16467 + OnClick = FSaveClick + end + object FSaveMainFileAs: TMenuItem + Caption = 'Save &As...' + OnClick = FSaveClick + end + object FSaveEncoding: TMenuItem + Caption = 'Save &Encoding' + object FSaveEncodingAuto: TMenuItem + Caption = '&Auto (ANSI or UTF-8)' + RadioItem = True + OnClick = FSaveEncodingItemClick + end + object FSaveEncodingUTF8WithoutBOM: TMenuItem + Caption = '&UTF-8' + RadioItem = True + OnClick = FSaveEncodingItemClick + end + object FSaveEncodingUTF8WithBOM: TMenuItem + Caption = 'UTF-8 with &BOM' + RadioItem = True + OnClick = FSaveEncodingItemClick + end + end + object FSaveAll: TMenuItem + Caption = 'Sa&ve All' + ShortCut = 24659 + OnClick = FSaveAllClick + end + object N1: TMenuItem + Caption = '-' + end + object FPrint: TMenuItem + Caption = '&Print...' + ShortCut = 16464 + OnClick = FPrintClick + end + object N22: TMenuItem + Caption = '-' + end + object FMRUMainFilesSep: TMenuItem + Caption = '-' + Visible = False + end + object FExit: TMenuItem + Caption = 'E&xit' + OnClick = FExitClick + end + end + object EMenu: TMenuItem + Caption = '&Edit' + OnClick = EMenuClick + object EUndo: TMenuItem + Caption = '&Undo' + OnClick = EUndoClick + end + object ERedo: TMenuItem + Caption = '&Redo' + OnClick = ERedoClick + end + object N3: TMenuItem + Caption = '-' + end + object ECut: TMenuItem + Caption = 'Cu&t' + OnClick = ECutClick + end + object ECopy: TMenuItem + Caption = '&Copy' + OnClick = ECopyClick + end + object EPaste: TMenuItem + Caption = '&Paste' + OnClick = EPasteClick + end + object EDelete: TMenuItem + Caption = 'De&lete' + OnClick = EDeleteClick + end + object ESelectAll: TMenuItem + Caption = 'Select &All' + OnClick = ESelectAllClick + end + object N4: TMenuItem + Caption = '-' + end + object EFind: TMenuItem + Caption = '&Find...' + ShortCut = 16454 + OnClick = EFindClick + end + object EFindInFiles: TMenuItem + Caption = 'F&ind in Files...' + ShortCut = 24646 + OnClick = EFindInFilesClick + end + object EFindNext: TMenuItem + Caption = 'Find &Next' + ShortCut = 114 + OnClick = EFindNextOrPreviousClick + end + object EFindPrevious: TMenuItem + Caption = 'Find Pre&vious' + ShortCut = 8306 + OnClick = EFindNextOrPreviousClick + end + object EReplace: TMenuItem + Caption = 'R&eplace...' + ShortCut = 16456 + OnClick = EReplaceClick + end + object N13: TMenuItem + Caption = '-' + end + object EGoto: TMenuItem + Caption = '&Go to Line...' + ShortCut = 16455 + OnClick = EGotoClick + end + object N18: TMenuItem + Caption = '-' + end + object ECompleteWord: TMenuItem + Caption = 'Complete &Word' + OnClick = ECompleteWordClick + end + end + object VMenu: TMenuItem + Caption = '&View' + OnClick = VMenuClick + object VZoom: TMenuItem + Caption = '&Zoom' + object VZoomIn: TMenuItem + Caption = 'Zoom &In' + OnClick = VZoomInClick + end + object VZoomOut: TMenuItem + Caption = 'Zoom &Out' + OnClick = VZoomOutClick + end + object N9: TMenuItem + Caption = '-' + end + object VZoomReset: TMenuItem + Caption = '&Reset' + OnClick = VZoomResetClick + end + end + object N8: TMenuItem + Caption = '-' + end + object VToolbar: TMenuItem + Caption = '&Toolbar' + OnClick = VToolbarClick + end + object VStatusBar: TMenuItem + Caption = 'St&atus Bar' + OnClick = VStatusBarClick + end + object N11: TMenuItem + Caption = '-' + end + object VNextTab: TMenuItem + Caption = '&Next Tab' + ShortCut = 16393 + OnClick = VNextTabClick + end + object VPreviousTab: TMenuItem + Caption = '&Previous Tab' + ShortCut = 24585 + OnClick = VPreviousTabClick + end + object VCloseCurrentTab: TMenuItem + Caption = 'C&lose Tab' + ShortCut = 16499 + OnClick = VCloseCurrentTabClick + end + object VReopenTab: TMenuItem + Caption = 'Re&open Tab' + end + object VReopenTabs: TMenuItem + Caption = 'Reopen &All Tabs' + OnClick = VReopenTabsClick + end + object MemosTabSetPopupMenu: TMenuItem + Caption = 'MemosTabSetPopupMenu' + Visible = False + OnClick = MemosTabSetPopupMenuClick + object VCloseCurrentTab2: TMenuItem + Caption = 'C&lose Current Tab' + OnClick = VCloseCurrentTabClick + end + object VReopenTab2: TMenuItem + Caption = 'Re&open Tab' + end + object VReopenTabs2: TMenuItem + Caption = 'Reopen &All Tabs' + OnClick = VReopenTabsClick + end + end + object NavPopupMenu: TMenuItem + Caption = 'NavPopupMenu' + Visible = False + OnClick = NavPopupMenuClick + end + object N20: TMenuItem + Caption = '-' + end + object VCompilerOutput: TMenuItem + Caption = '&Compiler Output' + RadioItem = True + OnClick = VCompilerOutputClick + end + object VDebugOutput: TMenuItem + Caption = '&Debug Output' + RadioItem = True + OnClick = VDebugOutputClick + end + object VDebugCallStack: TMenuItem + Caption = 'D&ebug Call Stack' + RadioItem = True + OnClick = VDebugCallStackClick + end + object VFindResults: TMenuItem + Caption = '&Find Results' + RadioItem = True + OnClick = VFindResultsClick + end + object VHide: TMenuItem + Caption = '&Hide Bottom Pane' + RadioItem = True + OnClick = VHideClick + end + object OutputListPopupMenu: TMenuItem + Caption = 'OutputListPopupMenu' + Visible = False + OnClick = SimpleMenuClick + object POutputListCopy: TMenuItem + Caption = '&Copy' + OnClick = POutputListCopyClick + end + object POutputListSelectAll: TMenuItem + Caption = 'Select &All' + OnClick = POutputListSelectAllClick + end + end + end + object BMenu: TMenuItem + Caption = '&Build' + OnClick = BMenuClick + object BCompile: TMenuItem + Caption = '&Compile' + OnClick = BCompileClick + end + object BStopCompile: TMenuItem + Caption = 'S&top Compile' + Enabled = False + OnClick = BStopCompileClick + end + object N2: TMenuItem + Caption = '-' + end + object BLowPriority: TMenuItem + Caption = '&Low Priority During Compile' + OnClick = BLowPriorityClick + end + object N17: TMenuItem + Caption = '-' + end + object BOpenOutputFolder: TMenuItem + Caption = '&Open Output Folder' + Enabled = False + OnClick = BOpenOutputFolderClick + end + end + object RMenu: TMenuItem + Caption = '&Run' + OnClick = RMenuClick + object RRun: TMenuItem + Caption = '&Run' + OnClick = RRunClick + end + object RParameters: TMenuItem + Caption = '&Parameters...' + OnClick = RParametersClick + end + object N5: TMenuItem + Caption = '-' + end + object RRunToCursor: TMenuItem + Caption = 'Run to &Cursor' + OnClick = RRunToCursorClick + end + object RStepInto: TMenuItem + Caption = 'Step &Into' + OnClick = RStepIntoClick + end + object RStepOver: TMenuItem + Caption = 'Step &Over' + OnClick = RStepOverClick + end + object RStepOut: TMenuItem + Caption = 'Step Out' + OnClick = RStepOutClick + end + object RToggleBreakPoint: TMenuItem + Caption = 'Toggle &Breakpoint' + OnClick = RToggleBreakPointClick + end + object RDeleteBreakPoints: TMenuItem + Caption = '&Delete All Breakpoints' + OnClick = RDeleteBreakPointsClick + end + object RPause: TMenuItem + Caption = 'P&ause' + Enabled = False + OnClick = RPauseClick + end + object RTerminate: TMenuItem + Caption = '&Terminate' + Enabled = False + OnClick = RTerminateClick + end + object N10: TMenuItem + Caption = '-' + end + object REvaluate: TMenuItem + Caption = '&Evaluate Constant...' + Enabled = False + OnClick = REvaluateClick + end + object N15: TMenuItem + Caption = '-' + end + object RTargetSetup: TMenuItem + Caption = 'Target &Setup' + GroupIndex = 1 + RadioItem = True + ShortCut = 16465 + OnClick = RTargetClick + end + object RTargetUninstall: TMenuItem + Caption = 'Target &Uninstall' + GroupIndex = 1 + RadioItem = True + ShortCut = 16471 + OnClick = RTargetClick + end + end + object TMenu: TMenuItem + Caption = '&Tools' + OnClick = TMenuClick + object TAddRemovePrograms: TMenuItem + Caption = '&Add/Remove Programs' + OnClick = TAddRemoveProgramsClick + end + object N23: TMenuItem + Caption = '-' + end + object TGenerateGUID: TMenuItem + Caption = 'Generate &GUID' + ShortCut = 24647 + OnClick = TGenerateGUIDClick + end + object TFilesDesigner: TMenuItem + Caption = 'Generate [F&iles] Entries...' + ShortCut = 24649 + OnClick = TFilesDesignerClick + end + object TRegistryDesigner: TMenuItem + Caption = 'Generate [&Registry] Entries...' + ImageIndex = 66 + ShortCut = 24658 + OnClick = TRegistryDesignerClick + end + object TMsgBoxDesigner: TMenuItem + Caption = 'Generate &MsgBox/TaskDialogMsgBox Call...' + ShortCut = 24653 + OnClick = TMsgBoxDesignerClick + end + object N7: TMenuItem + Caption = '-' + end + object TSignTools: TMenuItem + Caption = '&Configure Sign Tools...' + OnClick = TSignToolsClick + end + object N16: TMenuItem + Caption = '-' + end + object TOptions: TMenuItem + Caption = '&Options...' + OnClick = TOptionsClick + end + end + object HMenu: TMenuItem + Caption = '&Help' + OnClick = HMenuClick + object HDonate: TMenuItem + Caption = 'D&onate - Thank you!' + OnClick = HDonateClick + end + object N21: TMenuItem + Caption = '-' + end + object HShortcutsDoc: TMenuItem + Caption = '&Keyboard Commands' + OnClick = HShortcutsDocClick + end + object N14: TMenuItem + Caption = '-' + end + object HDoc: TMenuItem + Caption = 'Inno Setup &Documentation' + OnClick = HDocClick + end + object HExamples: TMenuItem + Caption = 'Inno Setup &Example Scripts' + OnClick = HExamplesClick + end + object HFaq: TMenuItem + Caption = 'Inno Setup &FAQ' + OnClick = HFaqClick + end + object HMailingList: TMenuItem + Caption = 'Inno Setup &Mailing List' + OnClick = HMailingListClick + end + object HWhatsNew: TMenuItem + Caption = 'Inno Setup &Revision History' + OnClick = HWhatsNewClick + end + object HWebsite: TMenuItem + Caption = 'Inno Setup &Web Site' + OnClick = HWebsiteClick + end + object N12: TMenuItem + Caption = '-' + end + object HISPPDoc: TMenuItem + Caption = 'Inno Setup &Preprocessor Documentation' + OnClick = HISPPDocClick + end + object HISPPSep: TMenuItem + Caption = '-' + end + object HAbout: TMenuItem + Caption = '&About Inno Setup' + OnClick = HAboutClick + end + end + end + object FindDialog: TFindDialog + OnFind = FindDialogFind + Left = 136 + Top = 48 + end + object ReplaceDialog: TReplaceDialog + OnFind = FindDialogFind + OnReplace = ReplaceDialogReplace + Left = 168 + Top = 48 + end + object CheckIfRunningTimer: TTimer + Enabled = False + Interval = 100 + OnTimer = CheckIfRunningTimerTimer + Left = 200 + Top = 48 + end + object BuildImageList: TImageList + ColorDepth = cd32Bit + Height = 17 + Left = 312 + Top = 48 + Bitmap = { + 494C010104002400040010001100FFFFFFFF2110FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000002200000001002000000000000022 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000F6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FF404040FF404040FF4040 + 40FF404040FF404040FF404040FF404040FF404040FF404040FF404040FF4040 + 40FF404040FF404040FF404040FFF6F6F6FFF6F6F6FF404040FF404040FF4040 + 40FF404040FF404040FF404040FF404040FF404040FF404040FF404040FF4040 + 40FF404040FF404040FF404040FFF6F6F6FFF6F6F6FF404040FF404040FF4040 + 40FF404040FF404040FF404040FF404040FF404040FF404040FF404040FF4040 + 40FF404040FF404040FF404040FFF6F6F6FFF6F6F6FF404040FF404040FF4040 + 40FF404040FF404040FF404040FF404040FF404040FF404040FF404040FF4040 + 40FF404040FF404040FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FF404040FF404040FFF6F6F6FFF6F6F6FF404040FF404040FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FF404040FF404040FFF6F6F6FFF6F6F6FF404040FF404040FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FF404040FF404040FFF6F6F6FFF6F6F6FF404040FF404040FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FF404040FF404040FFF6F6F6FFF6F6F6FF404040FF404040FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FF404040FF404040FFF6F6F6FFF6F6F6FF404040FF404040FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FF404040FF404040FFF6F6F6FFF6F6F6FF404040FF404040FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FF404040FF404040FFF6F6F6FFF6F6F6FF404040FF404040FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FF404040FF404040FFF6F6F6FFF6F6F6FF404040FF404040FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FF4040 + 40FF404040FFF6F6F6FFF6F6F6FF404040FF404040FFF6F6F6FFF6F6F6FF4040 + 40FF404040FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FF4040 + 40FF404040FFF6F6F6FFF6F6F6FF404040FF404040FFF6F6F6FFF6F6F6FF4040 + 40FF404040FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FF4040 + 40FF404040FFF6F6F6FFF6F6F6FF404040FF404040FFF6F6F6FFF6F6F6FF4040 + 40FF404040FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FF4040 + 40FF404040FFF6F6F6FFF6F6F6FF404040FF404040FFF6F6F6FFF6F6F6FF4040 + 40FF404040FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FF4040 + 40FF404040FFF6F6F6FFF6F6F6FF404040FF404040FFF6F6F6FFF6F6F6FF4040 + 40FF404040FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FF4040 + 40FF404040FFF6F6F6FFF6F6F6FF404040FF404040FFF6F6F6FFF6F6F6FF4040 + 40FF404040FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FF4040 + 40FF404040FFF6F6F6FFF6F6F6FF404040FF404040FFF6F6F6FFF6F6F6FF4040 + 40FF404040FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FF4040 + 40FF404040FFF6F6F6FFF6F6F6FF404040FF404040FFF6F6F6FFF6F6F6FF4040 + 40FF404040FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFD4D4D4FF626262FF626262FFD4D4D4FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FF868686FF404040FF404040FF404040FF404040FF404040FF404040FF8686 + 86FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FF626262FFD4D4D4FFF6F6F6FF404040FF404040FFF6F6F6FFD4D4D4FF6262 + 62FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FF404040FF404040FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FF404040FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFB3B3B3FF4B4B4BFF404040FF404040FF4B4B4BFFB3B3B3FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FF404040FF404040FF9C9C9CFF404040FF404040FF9C9C9CFF404040FF4040 + 40FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FF404040FF404040FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FFF6F6F6FF000000000000000000000000F6F6 + F6FF868686FF404040FF404040FF404040FF404040FF404040FF404040FF8686 + 86FFF6F6F6FF000000000000000000000000000000000000000000000000F6F6 + F6FF626262FFD4D4D4FFF6F6F6FF404040FF404040FFF6F6F6FFD4D4D4FF6262 + 62FFF6F6F6FF000000000000000000000000000000000000000000000000F6F6 + F6FFF6F6F6FF00000000F6F6F6FF404040FF404040FFF6F6F6FF00000000F6F6 + F6FFF6F6F6FF0000000000000000000000000000000000000000000000000000 + 0000F6F6F6FFF6F6F6FFD4D4D4FF626262FF626262FFD4D4D4FFF6F6F6FFF6F6 + F6FF00000000000000000000000000000000000000000000000000000000F6F6 + F6FF404040FF404040FF9C9C9CFF404040FF404040FF9C9C9CFF404040FF4040 + 40FFF6F6F6FF000000000000000000000000000000000000000000000000F6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FF404040FF404040FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000F6F6 + F6FFF6F6F6FFB3B3B3FF4B4B4BFF404040FF404040FF4B4B4BFFB3B3B3FFF6F6 + F6FFF6F6F6FF000000000000000000000000000000000000000000000000F6F6 + F6FF626262FFD4D4D4FFF6F6F6FF404040FF404040FFF6F6F6FFD4D4D4FF6262 + 62FFF6F6F6FF000000000000000000000000000000000000000000000000F6F6 + F6FFF6F6F6FF00000000F6F6F6FF404040FF404040FFF6F6F6FF00000000F6F6 + F6FFF6F6F6FF0000000000000000000000000000000000000000000000000000 + 0000F6F6F6FFF6F6F6FFD4D4D4FF626262FF626262FFD4D4D4FFF6F6F6FFF6F6 + F6FF00000000000000000000000000000000000000000000000000000000F6F6 + F6FF868686FF404040FF404040FF404040FF404040FF404040FF404040FF8686 + 86FFF6F6F6FF000000000000000000000000000000000000000000000000F6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FF404040FF404040FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000F6F6 + F6FFF6F6F6FFB3B3B3FF4B4B4BFF404040FF404040FF4B4B4BFFB3B3B3FFF6F6 + F6FFF6F6F6FF000000000000000000000000000000000000000000000000F6F6 + F6FF404040FF404040FF9C9C9CFF404040FF404040FF9C9C9CFF404040FF4040 + 40FFF6F6F6FF000000000000000000000000000000000000000000000000F6F6 + F6FFF6F6F6FF00000000F6F6F6FF404040FF404040FFF6F6F6FF00000000F6F6 + F6FFF6F6F6FF0000000000000000000000000000000000000000000000000000 + 0000F6F6F6FFF6F6F6FFD4D4D4FF626262FF626262FFD4D4D4FFF6F6F6FFF6F6 + F6FF00000000000000000000000000000000000000000000000000000000F6F6 + F6FF868686FF404040FF404040FF404040FF404040FF404040FF404040FF8686 + 86FFF6F6F6FF000000000000000000000000000000000000000000000000F6F6 + F6FF626262FFD4D4D4FFF6F6F6FF404040FF404040FFF6F6F6FFD4D4D4FF6262 + 62FFF6F6F6FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000F6F6 + F6FFF6F6F6FFB3B3B3FF4B4B4BFF404040FF404040FF4B4B4BFFB3B3B3FFF6F6 + F6FFF6F6F6FF000000000000000000000000000000000000000000000000F6F6 + F6FF404040FF404040FF9C9C9CFF404040FF404040FF9C9C9CFF404040FF4040 + 40FFF6F6F6FF000000000000000000000000000000000000000000000000F6F6 + F6FFF6F6F6FFF6F6F6FFF6F6F6FF404040FF404040FFF6F6F6FFF6F6F6FFF6F6 + F6FFF6F6F6FF000000000000000000000000424D3E000000000000003E000000 + 2800000040000000220000000100010000000000100100000000000000000000 + 000000000000000000000000FFFFFF0000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000} + end + object LightToolBarImageCollection: TImageCollection + Images = < + item + Name = 'document-new' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000020B49444154388DCD91CF4B54 + 7114C53FF7CD9B3733BE79F69CE78F4C0BC71C0C9A689115CECB492A086D1184 + 82306E82A236D2AA76ED63FE8636B610C59590B5A901235E045181B41A378364 + 04F5C2163354D3F7DBC2514C18A45D6775EFE59EC339F78A15116EE5DA01C80F + 388C0E386A75A366CCBF0DB16216CF3E25F9AD34F57A9D4AA582528ADD909991 + 0EEE5FEE1E03AA082B82288D36D09CFFA568B91724D6D6BEB1AC94BABDB9B959 + 2A97CB68AD77040C041AE40520DF98E71116A206D5F14BA3A16559E568343AE7 + BA6E3E93C920223B0291BB170ED297B22A086F8005416C34E3085388ACC463B1 + DAD1CCE0DCD8D48DC92008664CD37C61DBF67A18865B0E46071C25224A909220 + 9D0022D2B9D5A37AAB1F947F48E1FB3EC56231198BC51EBBAE7B269D4E0360AE + 6ED48C6C771CE01CB028225D5AEBCFC024222FAD7E9FF5482F372726240C4301 + 0E004F1289443B8031FFEE2B808FB008141AD10A088B68FCF8F075EFF8D599E5 + A5A5A5C120087410045A44DAB66F6026AD08A05B95D2D3224649B63294B456D3 + 91647BABB4786DA6696601FBAFF7350E693E7CF505CF4B3DFDF8D3F6F23D8A8B + 8715D1F430F1D385F7466B971B491D790EF4D004E6F71F8AD95585E7598F8686 + 4E5EB14E7418D1BEB358FDB959200BF436230398DB85D67AE4DA9D07AF938EB3 + 3D3AB6D7F67E02B6E338A7F623EC85F1AF84FF4FC0DCDDE4723969B6D80C7F00 + DBA09E1C89B68BCF0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000002E749444154388DEDD14D685C + 6514C6F1FF79EF9D7B939989E9DCA4C60849C6CCD8069B49522921DD4C1C2994 + 16A12BEB4289D636BB801B3F40C48D202206044553AA5DA81111945017E2C726 + D8115763B05D25A6ED68EA544B487BEF4D66DACCDCE342694313A1D5ADCFEA3D + 8BF7C7E1390230DC1D27DDE67061F93AEF1EEEA13BE5444061FC93F2AC63434D + 1DCEFA49541500DFF7595E5E66ABC870779C99A3BDD896E9AF477AB6114153CC + 44A085F05A349B70CC8E6A9DF3CF9D76BD0BBE1C57D52F55F5F8E2E2222B2B2B + 9B40936E73B12DD30F52B28D3CEDC604000512AE7910F8DEB53836D0DBF17B2C + 163B2D226F1B63C6B3D92CA9546A1368251CC3E1DDA93F8CF09B0853C0922087 + 507E423881F08588BC4CDF4167E96A7D6F2291B81804C18BC0AF9EE7CD55AB55 + 6AB5DA4DF0D4789678CC605BF2235001A6043120FB103E038E8244ADEA377A9A + ABC57D4FBD70B57F60F0C962B1F80870CEF3BC331B51FBEF036C2E57B040C680 + 3180E4EA2FE4E24D05EEED60F79E61EAF5BA999C9C3C09AC6732994FE7E7E7F1 + 7D1F1B2828FA57693024F006221680AA9E043E4440C4A66EDCB98F3F9A1EFAB9 + 7C1180E6E6666B6D6DED0363CC956432F9B5EFFB580B976BE587EFBFABEC58B2 + 0DE104302322038A4E233C8E300BE654CBA36F5E4A149ED9D330CEA0EBBAFB3B + 3B3BC9E572542A151386E1621004B3411060BBB690704C16F806E52BE008F004 + F01E4A5184F7557555AF573FB7E3AD07F2F9D167F3F9D11BD5944A252A95CA8D + D9AE47806A59D15714DE11310D01048844A654A3C0F27A7EB0B667EE060E6CDD + B7DC0467CE5C616F6FEB7ABDC97B6B2914F7B11D51A3CF53109B9643AFBABA7E + 6DDAEED8B9DD6A4B7F0BECDA0ADC18BB11C16BDFAD92C9DC93074646EFB35EEF + 8B4505719373B1F4C888696AD90F1CBC1D0CC0DEF07EA8ABAB2BFDC0B19746B7 + F57623963D442C3E083C7F3BD05620EDEDED637DBB72637702DC1AF35F3EFF0F + 02B71C250C434AA5D21D016118FE33B8B0B020131313FF763900FE04B0B205D3 + D9779BBF0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000003C4494441544889B5944F6C14 + 751CC53F6F667676BA4377B750FB07502991EE2E56AC111241EB4168BC183035 + 5E0C170F6A22260D318D86A496100F48D2440F9A186D35861B9A182F880A84C4 + 8BA85B0D54570D1A25055B62C952D242DBDDAF87EE9A6D77117AE09DBEBFF94E + BEEFF7DEFBCE082011386C6C0900F8F3F21C3FF465905404F61FCBE50F0C1CBD + 40D30A8F59A78E4BF321006606C0F8F838B3B3B3DC085E3C70F8F8D9F56C5A5D + E720ECD789EB56F942BA39E0C49E76024FEEE5EB2AF47D1D5D313EAD97802933 + 7B271E8F5B2E97A35028D42470EE6DAD63D3EA3A47D290D0A1F6A640A51B9A99 + 7157D2A72EE2A4248DD4FB6C4E37BA575DD73D070C4A7A2B0C43A5D3695CD7AD + 4D008030E01F492F4B1C42489210205288E388951187AB0F3FD8C1BA75EB9292 + 1CE04560F0FF48DCA2C1631BEA5915BA5F2212427B314249DB302E02FD2C5075 + E3B8B999D42EFDFE777E3EEA478753E974666C6CEC6920E6FBFE57894482C9C9 + C9FFF20170CFF577D0187AA5197C8148027B4BFD0E601AB103B39FC148E67F21 + 139D18DFB27DE7C59DBB5F78727E7EBE7D7474741BE0F9BE7F321E8F2F227124 + 154B1B53905410EA05163C9204340B8D4A4E11A3E0CD4D155BBD2BAFB535B8D4 + D7D7D3DBDB4B4F4F0FC03EA03F0C4352A9148EB3E0BE07EC2FCB29B16E009EA9 + B071CCCC864A399571EACCD99F38F7DB61CC8C6432492291209FCF0F00736118 + 1E0C8280E9E969BC63B9FC817453C09D0D3E827B80E3C08499352126803588A8 + 19FBE438F8F7EDC25DD5863B19F0F9074774FEFCF945A14A7ADDCC0E96CFDEC0 + D10B9CD8D3BE305C9CC0F0801D92CE18F62EB052E8556460B62FD2B655D14CF7 + C0E66BD73A0F6FDFB5D9F7FDB27A1B1E1ED6D0D0D02242AFB93E4210910B1CC1 + 8800DD60A32C845E047ACD4C925E31F4BDCD5FFB04F82808823E33F3ABF67209 + BCD9820114307BBE4871C6D059570E565E03C9CC8ABD667CE3B56EFCD46BC9AC + 30B3F700BF7CF3CA0C2B5714C0FBEEAF69DE3C39C12399A66F47277DFEB822ED + 7DA0600DC18204BFE309DCB5F71BC5E2616FCDA6D06D5CFF99A447CBC34B9B56 + AE91B488C40378E3E4258E4FDD8DA4E7849D9E9829FED810D87EE0947BC706EA + 3A9F1A003E34B3F7CBC36F15DE92F3DBCD2DAD0F45B63E4E6C6DFC008E4BA46D + 1B40277016882E6778158199395D5D5D8399EEDDF9682C56F97C4B79B82D31F9 + A619541E24291E8F77C562B1A5DE56D537E85565E02C57F272B1D4225B4E5DA3 + 5765D1220595F22B7E7635EB1BF4A818514D703B70DB2DAADAA26C36BB6859CC + 8C5A75ADDEC8C848ED2FB9F236D96C966C367B33E5B78C7F01F173C274C1A858 + 1C0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000003F5494441545885ED965F6C53 + 6518C69FF7F43BEDE97AD69D759D2D033AB7B9B90956633A03052F4006732C66 + 11412F703113D1CCC4ABADCC3F89374BC415883101630826C4E88D37B838B830 + 4282A35C6CBB60BA18F7D7866060133CDBDAB5D8F5BCDEACCDFEB4C5C4C9559F + AB93E7FBF23DBFEFFDDEF39D0364D1A9968D98EEF67EF1D5E1F26C53D64552EA + C15528E0B499D203A5AA00804A80D29EA3C004972A2011D64D22153E7CAC6E33 + 18F3C1CB77F41357A6A19A4D00C12D2F31BDB3C3890FF7B98B2589D4C3DFFD7D + 333CCB6B16636624120984C36130AF1DCF0A903418609E2792CE059E77775639 + 2D930E9B90C1706C289471FAE5CD38F894B605441F2FAAEED6B21A47E3DCF854 + 5F06802880668BC572757474F45F41A48BD9B1EB110476BBAA40D40BC651108F + 02F42B333B89A805C049520AF7AA874E472457DD75218467F5627EBF9F144589 + C462B1665DD77F1A1B1B7B2044BA074E5C99C6859F672718781B843E80DA4150 + 88E82300DF0078DD54B367422EDBBA53087109C0B700C2AB170C068336ABD5FA + BDA669CF555757832877C3D0A9968D285565D81509253661AD765A8A89E85D22 + 0AA42631730F337F76BFC0FD97DDB325464A11249B03E6DABD8A70D5F403783A + 55815028640C0D0D51474747341E8FEFD775BD3F572568BADBFB25002F089504 + D272E20260B00EC6248061B9AEA1CDDED2D30DA06B3900001A1C1C4467676764 + 09E25A3608E987DFE6DA6EDC5AF04DFD79DF31134DD80CC3D8C4CCC75784321F + 370C635342566DA2CCEB90AB76FA2CDE17DBACCFBCA20068CC04EAF3F9100C06 + 554551FA344DDB91ED385638DD4D1B7074BBD30FA28B00CE1051D7124C3BC04D + F01E0A95EC7FFF0080DD001C009E0590BEA9965720E50D0C0C20100844E2F178 + 93AEEBA1D5954837E16B3E07DEF4975680E82C989B99F9CCD2EECF80B919A0B3 + 3471B962F1EEEFFD005E007070797836D5D7D7A3A7A747B5582C7D9AA66DAFA8 + A8585B01478109BF74D51509493A07C6B1AB93F313E5C566DBA325CA7C52560B + A5DAC6288DFF58C50BF73E31B96ADF286A3DBF8D8479CD3DE0F7FB73B63C33CF + 45A3D1E2919191B427004036114C4476663EF2F5D03D3DD07B0B17DF7A2C5A0E + 2CC8259E6851D37B2F25EFBE7A2DD2FBC191E4DC6D3B27133324CC6B0242A150 + CE97DEEFF7DB577B020066228B68F87CFC66D2608CDC8E0300EECC2700E6B0A4 + D84144BB84B33258D47ABE9D93896932179CCC15944BAB1B510080C1C0F01FB1 + 1503B18401005364D5004003504EC2DC9769E7FF455226D3E3F16024EEA259FB + E3CD9627F61180ADEB9ABA4C2293A9280A6ECCAA970A0E7C7ADDEC766F03F0E4 + 43050080582CD6E076BBF7FC5FC129653C8287A93C401E200F9007C803E401B2 + 7E0D8107FFE3AD87FE01B79474641F6C52820000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000527494441545885EDD75B6C14 + 551CC7F1EF7F76F6527ADBD6C250A04093B1A20802162AD5122ED550452E4502 + 88110209545951A310A3C107438CA634E80B26C50A8888C19020022654208104 + 95C68DE225601B45081A4AE96EEC52285BE6EF432F16B2BB058A8487FE924D66 + 72CECCF9E4CCCCF99F15BAC9D93523BC827C7E2AD4323DBFE24477DD6F798C44 + 8DD9692602198005729B4857C7EC38983BDA4F616E32AD8EF2CED7F59C8BB462 + 1A82227E117C5D7DC3FA79297B380B11F8EAF8050ED435271C44558946A33D03 + 16E626336F4CE612817D93EF4E3B3D7FF31FA4F95C08F851BCE9DEB6C99E3A2C + 95F5730693E2311E53217ACEB00E8652DDC381AC583020ACAA3FD6D5D5110A85 + 6E1ED8EA2802D5205F0C4CF72CDBBBCCAED97CF43C801FF0A6795DBC3AA91F2B + 275B88C82B4089F4C9281934B6C8639CD9BFCB719CA1D7DE5C44001C60A96DDB + 1B6F06D9F9E0FAA698EC7BCE6660BA671CB0072853D51D22320F58A7AAD90249 + 885402E370278D4F79724DA30E29ACF4F97C8B63DD3C180C1208044444AE388E + B3545537DD28B2F323391769E5992D2789B45C390A2C17E13311790DC840F08A + 480E228780C781E99E7BA6347AF2262EF4F97CF3BB1B64D5AA558661189522B2 + C8B66D3232326E0C989D6692E377939EE462EBF78DA8EA76557D4B44DE06DE10 + 48018E022355758EAA9E087B2C9C48C366BDDC9CAACE95146028B01268BD7690 + 1933666817E4C21B419AEDEB5C269049DB92D2F16B52B4414406008860A96A8D + 88DC0BF4EF13AC0A85835521C468C4ED0B19A9D6DFC9935F5EE7B18B7281E763 + 205155A3BCBC7C83E3386ADBF6C7D7F3B84D417622E4A26420F80571C7EB2C22 + 6381B11DE78A5E429D46A2CD21E7FCEF3B5BEA0EADF6D8453FC5BB7EE6CC991D + C80F01B56D7B4B7748F354A8A564409A1BD325A0E0A0A92899880C12D82122FD + 3A41AA8781E5AADA288611C2F45D14771F8CA4748CF401F8464C039896684666 + CD9A056094979757B5233F498434BB96AF1CBF9B67C76634AD986045042A04FC + AAFA9D8814A8EA61112952D529C0FB170B563070C2821C71B907D0B614F50566 + 034F2402762055D558BB76ED47EDC8ADF19066D7931CBF87E58F58B47F1C1315 + 9D0A723F50000454B518E15D81DAB4D0CF7B11230FD80DC47D2DE2A5B4B41455 + 352A2A2A36B6233F8D85EC04DA591EAAE60FC174C922A0549542E037110601A8 + 12025D27481DC88668DDA1A92DC776EDF73E30E34511637D224C30188C59C873 + 7373292E2E36AAABAB378A88DAB6BDADA6A626363050D497CC64D704E06994F1 + F5916863D5B70DBCFE6876184044C2D1C297E8D370ECCB68DDE1D35C89AEBFB0 + BFE229337B78A569E52D06F2E301038140C29D868898AABA4944B65DDB66FED7 + 090097A2D38ED75FBA3C6FD34986DEE546212CD08AE9895885F306E15A9077E9 + 879D079A0FBE3757A3CDFD9C48FD59ACBC73B1061E33660C478E1CD14438E8AC + 38667BED8E0DDCFDCB3F9C0E450FB63A4AE537E769BEEC90EC15A4ADD887C5ED + 03D3D35F44F6F84697AE700F1CB9C189D4FFE51E9C3F0A98D41DE27AD25EBB63 + 03AB4F34517DA2E9AAC6965605340C12166F0A22E207DC22C607A695B7A47DE6 + 2601BE5B018C153351637D53148546810346AA056D15A62371DFB95B99B83BEA + ACAC2C46E51718DBFFCC6C6ECE2E284B7A682140D1ED40754DC219045EF8D5BC + 2F7976C9EA331ECB7A1028BB1DA8AEE90E98AEAA6F5A96755B30B192F04FD39D + 905E604FD30BEC697A813D4D2FB0A7E905F634BDC09EA617D8D3DCF1C0EE36AC + 44221182C1E0FF8AA8ADAD8DDBD62DB0B6B6560281C02D05DD48FE05EA45F53D + FB9464BD0000000049454E44AE426082} + end> + end + item + Name = 'folder-open-filled-arrow-down-right' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000024849444154388D95924F4893 + 7118C73FBF77EFF6E652D486C2F6AE256684216221D2BA1889819075A820120A + 822868045D721278E9601074280F75AACBBA4420AD43055E22D03C7428681058 + B9F7D5A5B9D4B639DD9FDFAF4313641AE9179EDBEFF3F93D0FCF232A5ABBA83B + 3BE8D69CC600701E8189621A8828591C4ABEB8974D8F3FE75F1181DB6FDD9AD3 + 35DADBECE90805BD046A0CE28BAB0C8F2588C692134ACA63898757B2B9F8A74D + 05BAE674854F96E0E4724135792AD8E972D0DFE917404734961C3877EAF8E051 + EBD706786A31870EF45DFB0B138A4E8A07BD7BE57B2B250042412FD158B2CF67 + FA07BB77545BC8A26FBDE0E3EC8A434708335063D0E4A9E0FE8946AE4727B5E6 + 7A37877C95046A0C10C2940D41BC37AECE0ADDE55D83676E1E10001A4A4DC717 + 57F991CA3161A7D95F57C1BBEFBF05407C7115949AAE7616C1E1AC2F1FA1A1DA + 890E4486C712B7C29D7E00DACD2ADACD2AD5E1AF64782C8153C848DBD4D39644 + FF25B35C506568B6AEA4BC138D25BB810D5B78194B4EF498F343C1D6C063C3B8 + ACD6C385B9399646462C5D7B7D77D9DF7DA1EBD5E77C381A4BF6ADDD81539391 + 1E737E28DCFA3564188E33E5BFCB741AC0D61BAD373C5AF8D2F9CD7FF8D987DD + 5D833F0B6E6A5D7982750B2D0777A59EB81CEAF466FB97990C80A54BA970A97C + 735BED52F448CB4C029805EA01DF666099C0D6A7530500BBD492B754FF4DE9BD + A5255205145825E396532C75A0A572924C4EDAC56D0A6426030A5B008C5EDCE3 + D8E7317242882D0B94522CAD145D3AC0B89D2D660BCAB15D81B594E70F1680FF + 8B96F41D350000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000034D49444154388D9D935F4C9B + 5518C67FEFF77D954007D88C16045AC65C8C6E02924CB300EA9C5133252E26CB + 60890B46C3328D5E189DBBD15DBA44A631C4191375F1CA2CD10BB9984D3647C2 + A2DBAC6036892423388654FE08B45D5B285DBFEF7BBD901171C5C9DEE4DC9CF7 + 39BFF33CEFC911CB1F22D0F13E9EF5D5952272086845A84289036755E9C2B5FB + E77A8E928E7CC3ADCAAC78E5333C65C11611E9DB52EE7DF4B5A6CA3B3B1ACBCD + 476A4BBD2E6C1E8D675F448C44E1BDCD91ECEFBF62C7A2FF09949A23172A45F8 + E5F9C680EFF08E10A6212B043D43731C0C8FE238DA6A4F8F8439FEC2AAB0ACAD + 5822BCB5A5DCEB3BBC23C4EB27AFD0B2A144F7D4F9F5DAA2CDA73F4D199D0F56 + E8BEC6807C3130FD6ED05F12FEB2F39EA085B3310F2F717E7CE19201B4B6D597 + 611A42734D09EF9C1A93AF0667249575E4931FA7249575646F831F1169C89985 + 21DB176A017AF3AC0F002C44AA42A50500B4D5FB0178FBD498BCBCEDAEE5AB83 + 4B7DDBE3AD2ADE7D74DA5F7B9FFED35AEAF43152A78F0160A09A88656C00AE2D + DA34D794D0F950051F9D9F5C1E667CA9EFB1AC44813FB46EB519FABD26167036 + 3C1CDFBD6BF37A3EEF9FE6E30B93F26F6178388EAA4E8672D1CBB9DE336DA942 + EFCAC7F82D02AA1BEEF6DDF1A6A54AD7772389E77A86E6CC97B696B3A7AE6C65 + 9CAC43F7B9092CD1AEA7035771C77ADB3376EE26774649498D934C7658B876BF + 2BD61B07C3A31FEE6B0CB0B7C14FB0B48078C6263C1CA7FBDC04A945FBEBED15 + B1EE9D75DA595CF8D4A67C7117221132172F8E8B6FDB2E82CFBECABC14ED74C4 + 3C2222F53744AA3A6989763D5C1EEB3E5477A5A9BA28FBAD0845F980E9DE5EB2 + 2323C72DEFD0494E345FF50D16DDFF439F6FFB03839E4DA164CEAAF2181ADFB8 + 6E61F899EA199EAC9CDD5FEC71DE5B0D06E0CECF03442D8075EE82AF69A13FF2 + C46315271C7FF2FBEB6AFE698A060A4DA7DD14DA45C81B330F70DC9ABFEE02FC + 816AA961C881028F1E28C2BED5F915A5AACB4023BEE8329FD3ACC2CCD2E69A4B + 3319705D51881A0093E91C40D44DA76F0BB86444456F005336C0F8ED3A74D369 + 5435019AB600A6FE0646ED89093203036B06DAB3B30051052C80F1640EE0673B + 16EB73E2F135035515E052346923008FD77AD9BFD50780C84D5FF97F432FCF66 + F90BFAC07407AAE3B5840000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000045C494441544889A5955B6814 + 7714C67F6776CC6E1263B68D6E4C93D5041B25EB858614298835A4155A2D4A31 + E283A5F820B41404A194A4162B15447CB07DB308B6D060449F4AA12DB64562A0 + 50916C551A3522B1D1DDDC36C624CDECEC75E6F421BB6BB43111FA3D0CDF70CE + 9CCB77CE7FFE228BBC54ECFE9CD2F52D00EB44E400D0825003C4517A513A15ED + 50279B1AFFFE04F1F08F3C2F64E9DE6394AE6B1144DA44E48BB222C3DC5C5BCE + 0ABF9778DA213C64713B961055BDA14AABAADB3FD67988C4CDCBCF9760E5F12B + 88D00E1CDB19AAE0704B10BFCFD4D94E5DF7A6A4EDE2008FEC4C44958DCEF444 + 6CF0CBDD68D27A9E047FAC15C3F87367C38BE6C96D75DC8CD98402256A880880 + AAAA88C8AD98CD9E737DD869E73CE8DEADE123548E5D9B37F8DDF134A6881C28 + 2B32CCC32D2BB819B369EDECE3FDC6009F36D7B82242FBC5010138F1761DFB9A + 029CBA32DC2A4AFBD67A7FE4B5152FB48988375708B99AF2BCFBB77EABDB04DE + D85C5B8EDFE7D1725F09EF352E936F7A46C41068DB52A391A99448AE931D0D15 + 72EACAB0A9C2965465E8AC0CF7B56A26D998AF58F5B1B2AA7A14E83611A90EFA + BD001822F25973500139D3336A00AA8088202212F47B55440C55AAB3759B58BE + FFE0A8515C960FA82222A00C7E122A746382DA898CEB2D0C45440E35075145CF + F48C8A698836552F0620917124E766FB8221C4B7B8F0DD5C300D30517AC383D3 + 9BF3551CFA6540EE4FA650C02368C671411555D59EA825AAAA264E6F45EC06E8 + 9BF58A51D0451F6B24AA4A736D29264AE7AD58E2F5AE7B53B4ACF20382E46479 + B5A60C54690894E02872FAEA08C0839764E2F7AADBE71B867E3D58234F6D5B3E + 97881C51D57DA6A21D281FB55D1CD8F0DDEED51C7FABF6096755554791A3971E + 706DC8C2146DDF56F3305359ECFB50024D0828CC3C66F3F49D3BEA5856D45427 + 9BC263B63EB23397F69CEB0BEE6B0AB0A3A142827EAFDA6947C283969CBE3AC2 + B5210B038E6F5C3A7961D79AC90D25A56BF6E762CD89747FBF0051296DDACEF2 + 5D6D38B22800F215422B60CEEE0078608AB66F5C3A79E1E3B57F57AE29B72F8B + 50FF74A705EEBA3AD1D1219A4E9F34E3E19FF876D3187F95353E0CFBD6EFBD5E + D4D03E45C91657677E768B0CB7B7BA24F9FBB6EAB1CCBB2B47375415A72F8850 + 3FDFF6682A2564B3A210350196B9E3EC485EEED8BEE4EECF13A14D3F444AEBCE + 3E4A15E13194AAE224ABCAEC508537F38147747FFEE4CE07D7B641158188497E + 2AAA4BBC6EAA63F5CB4B92AB19BF0D8C025EA01EA82E5437FBB83EF59EE7AE35 + B3CEA0331DC4E259167B3D51371E07F001AFCCA9ED93ABF84C9B1B8F23A0AECA + A00130389D0588E6B45B488105E15A160A09D08746BE0320A28EA36E2251A82E + DFF25C7C3E5B4E8951206300DC9FCC004445445C6BE612911C9EC5E7B3E51244 + 010C80E1E92C2891BC7EFF0F4AAEC8284061C88A4651D4EAEA82AE2E99F5C5B3 + F842B6E83F29F7710220091C2D783F793BFD87CF67CB8DA43B666767B27A3DC2 + D7EF54E5232F28C282C81D8DEB2349FE05DAE174E80E66F7B30000000049454E + 44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000458494441545885C5965D6C53 + 651CC67FEFCE29ED58DBAD6B3730906E8C6D31736C0C3A32D111500943C0E80D + 94392EFC48BC10F442638C261AD444424854D00B839A98B93916BD91108D1A35 + 11920EAB0B8C90A00EA4ACFBA2A1B33DEB3E7ACE79BD6837362964D9174FF2DE + FCCF7BCEF37B9FF37FCF790569D97DBB706DDFAF2839B97EA011A84590070C21 + 09022DE6F8685BF4878F8DF8E9369092F9900070ED3880B3FEC9320127EABCCE + EAA6B505D4AE74E0CA56898EE804C3719A3BAF1308C5CE017EADF3BB3F23ED07 + E707C2EEDB45D1A14059E9E18E81963FFA0D5DD78D4CD275DD68E9EC374A0F77 + 0C141F0A94E73EF4D4DCCD0165D9B3C7942C8BEDFBB7B71697F8AB0B00A41042 + FC7FA21082CA653914D82D4B7FEA1EAAB77AD77CA2FD7E4ACAB1C49C00B294A5 + 4E7F9DD759BDA7CA8394523EFDF55FA2E35AFCB637EC59E3A1CEEBACCEB258FD + F6F58FCEC91C200B4463534D0142088410E2B90DCB79E1643767AFC52530394A + 8F0405A974D8575300D0682D5E3B1F00F86A5738260B755E271FEC2CE1C0C96E + 71F63649F852F37DF6BC7C2A0BAD2CB72BB3065085102E57B63AAD58E775F27E + 1AE2C3C756CBDA958E69D75DD92A08E12A732FE178535179D2307B83BDA3DA70 + 72E6BBE2EAD038077FB98E2AA51C8A8EE86E4F8E65DA84FBBD4EDEDB51C2FE6F + 521053AF4547749072C8E92AC056B8A9497477BCB6D1ABDCD2B877D2F9815105 + 40057E0B86B5868672D72D933616DD84985A0F863580E0BD2545E46F395A212C + 5648F5CA8CD4FB4AC5E4F35490ADCD9D830DDBCAF298D87DE986CB282925CD9D + 830868D95AEEB6098B75CB4C8D334935C747DB0221F1D289AE48B5BFAA0080BF + 5FF6DD6E35A2BD2B4220143B5769B9DEB6DE7ECF33909B3B1BE3E23C0B9F3DBE + 02E178702FF93B5F2CB728E2D7B71E29F2EC5EE321C377082925ED5D11DEF8F1 + 6A245B24EB8F593FBFB13A74E63CA6B16C3600A987620884C0B3FB4DEC350DE5 + 405B9DD759BDAFA610DF0AFB947F814673E7208150EC9CC3A2FBDF5D77E9EAE6 + C2C829A1289B67EB6D6A1AD1D6D65E152979A2FB28DB56755DF9CABEBDF66CE8 + BEBD8150AC11F0217021890241816C5DE78E7DF96AE5657745DEF0B742289B66 + BD72C04C2400C22A408E0A1BC62F7C545FBCE4E2E555E39FFE3CE0F9E2522C87 + 615DC5A618943A126C5E7EC351931F7B5ECDE275C03D1773007378F826402461 + 007244B5598F54B913EF54B94367808B400C700015C00340F65C8D3302F4C593 + 00E174D1063C9C1E0BA609802C803E4D07E84917174569AF9EA900E1BB00904A + 203A629234CCBB00205300007D713D6C2612C8793A6CDE49D2343135CD18D3E5 + 959B009A3E22753D2AC7C6161CC04C2490A6D9FFCF50D29804185CC43E90E9F7 + DF17D7999A002CD24E98D8017DDA5480F8E2256026261248DE92C0E2000CA7FE + 03D31218980048CCED9C3F33805402FD197A202C17AF07C2039ACEE471B85FD3 + 9152F6247B7AC48DE3C7171C42A69B7012C094703A94B890675314329C88E6D7 + 5D923424FF8E990BEB3313FD07BEC21C88B07F6C2F0000000049454E44AE4260 + 82} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000608494441545885CDD85F6C5B + 571DC0F1EFB9BE8EFF257692DA59D33589F23F6559BB069A2E85411A5A243481 + 4A816E452ACDD4874A081E5631D0B622FA0769436205318100ADA80F7B604C19 + 5BD792B69AD0908A1234B5D5EAA41BD52A12B0E7344EE3C6F6BD8E63FBFE78B0 + EB266BA3A09090FCA4FB707DEECFFAE877CEEFDC632BEE8466C3FB857D946F7F + 0A652F69554A3D05F4A06801DC400C6108F8B3889CB2A693B762E77E45F2EF6F + B29CA10054898BAADE9FE1ACEFF02AA54EA054EFA6B56EB5A3A99C66BF0BB7DD + C6ED5496E09841FFF518A1F88C81C831414E18EFBF634DBC7604ACDC3201351B + 0F1CF825AEC64FD702E71BD7B85A8EEFAC636B4DD97D137296D03734C10BEF86 + 88A7B3A781279357CEA5275E3BB22C409BB77B3F655BBEEA55F0D76D75DE9657 + F7B4525FE99C3741538A871EF0F0A5E60ADEB971BB3599CE35DBD736F6656E85 + C88CDD5872A056DED38B82138D6B5C2DBFD9D584A7C48688C842890D954E5ED9 + DD8CD3AEED514AEDABF8F27741B32D3D50E98E56A554EFF19D7545DC77DEBAA1 + FE188C2E98DC167073B0B31AE098EEF5EBAEB66DCB0054AA77E35A8FBAB3E694 + 52AABBC1C78F2E8CF27A700240665F7D4313FCE42FFF2A7EC1FE8E2A1CBA56AB + 94DAE16AEA5C72A00E7C7147936FCE874F6C0C0070F8C2080AF8C6C3FEE25838 + 3EC307D154F1DEE7D4D9B2BE948B23F11E7BA0EEDCD20315CDCD7ED73D034F6C + 0C2002CF5F18514A215F6FF7DF273D1FCD7E171747E22D35154EF6765592B384 + 3F04E344CDFF7DEBD115CAE3B1DF7F713FB9298000CF9D1F51303FD263B781C2 + 5DE3B373A8CBBF0124F7FD6DFEEB378D1C596B71B09397639CBC1C431791582C + 959DB73C7B370510119E3B9FAFE4FD9E89A5B220DC2EABACC2EE69EFCC86877F + AF145497698BD3C151AF433B06F935180C8E19DB1F6FAB9CF7E96F3D528500CF + 9E1B516D0137A58EB9150FDE3400861AEBEB59D3F5EB666B3A2156626251B2A9 + D32F928D7C58BCD781FEFEEBB1EDCF7C7E3D364D1507FA862608C767E6243754 + 3A191E37D5D69AB262254763D30C8D990A38DBD558855656FE98CD1B80AA8645 + 0135D7DC37982E22A74253E91FF70D4F78F63C1C280E7C306ECEE956804AB79D + AD6EBB6C08DC6DAA97073EC612195CE72DB9F468ADB75629D5B528D93CA15BA9 + C42D9BDB7BEC8577433FFDCC836534145E73877B6A174C3EFBE1246F5E9BCC29 + E4D05EC7559CD3EB9EA624B0E885373B0E7454F0CD877CA8D2CE5DACD9FD434D + A1DEA8F6967CE5E4EE665A03EEFF0AF74CFF3F4967AD1F74BA422FBD98FA5DBB + 3D3AFA1E50B2144000044B01F8F71EA774D34E0770CA69D7F61CECAC667F4715 + 3EA77E4FCE486C9A97073EE6AD6B9339117976832FF9D22F36BFEF5D9B19BF28 + 99CCA796CA960987495DB932AE003C0E9DAF7DEF79AE55743169F3ED0375DCA1 + 6B355BD697D1E277E2B6DB88A5B2046F1A0C8D99CA12195470E8D1406CF0E823 + 1FF9D6B9A74F2BA53EBB543880D4D5AB9883835714C07AAFCEDF0ED457244ACA + 1D6F573E3EF6A7926E7D3CEDDC09F4002D28DC0831604821676B3CD397BEDD18 + 6657EDF866976EBD0AB42E250EC01818603A183CA303140E57765F363E7CB0FD + E6CF7B1FBCF4DBCBB1F2FE4B93DEFEB0E964C6D2706A16359E145BFC536CAE4C + B4B974EB69603FF9AD6AC9C3320C80900E3096CC02441171690EC711AF530E77 + 57C706BAAB63EF01A38009788126E073403B859F0BCB1592078675809C40D4C8 + 4A55A93D6219461DF9AA3C56B856240A150C17F7AC712307102A0CAC68880896 + 692A66030BD31C5E15C054EA4E63DC05465611B068100915815163750145640A + 481681A178065609303735057003E0EE1427F21594745A4936BB32B242584612 + 60F4DFF10C739B4424046099E64AD900B00C1320149A0D8C9A59042208D64A4F + F39D3D303495BD0B8CA70573C6CA0832BE5A8091E42C20AC8EAD462C0B49A514 + AB1568996671938E1A9F04E63B39B4924D2286018288483892F8047035BCEE2C + D344904950A979A758561258681080093337F7B019496400095BA6A9E267CE2C + F81FE17284954800840B6FB6B9C0A89103D4B058D6D16C24F2FFD7913F6A0157 + 23C93C70CEA9D8EBD038D051B102AC7BE3A3C9346FFF23B9D28C85E33FA8ECC1 + EF1FA5F11D0000000049454E44AE426082} + end> + end + item + Name = 'save-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000000BA49444154388D639C1730F7 + 1F03A9E03FC37F06460646060606061606060606FB2CABFF0C0C0C0C07A71D63 + 8C5F9BF01F9FDE85C10B18EDB311EA9948B61D0D8C1A008D0564B030780123D9 + 06C0A2930800B784FA5E3838ED185E2FD86759FD43760186010C0C0C0CB85223 + B6F0C1E985AAEA6A460606068261C2C4F0FFFFBD27179F115287DB80FF0C0C8E + 778EDCBFFBF8C2531489B6D6D6FF0C487EC50518C3B44319DC55DCA5191818F6 + 323232AA11B412292B3330303000004F87325F04D828D90000000049454E44AE + 426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000014449444154388DED94CF4A02 + 511487BF3B33B970244D66A14830E2B695968B0A5AD6B24D0FE0A6A097909E23 + 0B021F4217EE0A0277E1569CB2680299FEE9461A6F9B14D2D1AE18ADFAEDEE39 + E7F77138F79E2BCEF7CF062C2289442086470320B365CB8865D2EDF4685E3962 + F7644FAAB0AAC58AC86CDB442C530EBD0640C43289A5A2A3C2C45A42B9C171AF + A6EC54D43F7071194141B7E1FE2EB05AAC88A0F8DCC0582ACACEF1A6D2A39EA6 + BF99A1536F2B99ED8D55097C1B4F20F0B6DE162B765C86CC5020A8DFEBF3EC78 + E20BF8738700F9427EEA4EBB0D976AB112989B39C35AADC669A934AB240028F1 + DF9EDEE732CD044A64A1757DE7DFDF3C4E24D3E934D96C762EA03118F8654DD3 + FDE665EBC2EF7FE8D1E432009EE311B7E38443E189CDF11C0F809787D7D10D77 + 3B3D00442E99E368FD105DD30F80B2106249B99DB1EF1FE01334FE6334D2A0D3 + 3A0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000001E3494441544889ED943D6F13 + 4110869FD7BA0042E2EC2E964D08BD854C014850F017884414F117A8A12175F8 + 099450818453D35A42082A0A1FC5552050145DF035E86C890F01F250DC9DEF23 + 673BB11069986277666E7776F699B9D5938DC713003333493AAA5EF90D8150EA + 37337300EA2DD71A6D179045C1882818D1DDBA6C491840157AD1F67A03EA6D97 + 46BB6E6044C1D8A260846366D668BBAC5F59B3242DC507747381168BD71B288E + 733E89B3AF2818E1C4578CB390241202C745148B48D1A4716AC7C9721971CCCC + 62967146984DB3CD675AA5976C81657632FD4774F2889C5957F37A5E1A46A00A + BDCA3E2C331179BDC1DC8DD572044417AF5D60FDEADA726F51ACFFDB2E3A8136 + 4DE4E5A337A99AAF62B9A20290C4CDBBD78B2D3CB34DC978AE769AD6ECACE6E2 + 5AE90C63E88784FE5040A11E0BDB14A0D969D2DDEACE2D32BBEF14FAC399316A + 6544E935F3FE07DBDBF4FBFDC29A0C876543DE9F4C3549FAF5FD3729A234C304 + 1D994E614DE65336E4FDD336357B71E00FF5D90FE7FF924B8A63B0C9C49EBF7F + F5F1964D8CD6A5E621440F777626E986F263574694B9932E1AFF18FF74CFB877 + CCECD987D79F6E7FFDF28D53675790A4A11F1ABB9E167511A0BDB7FB532C9811 + 1D8C0150EB5C8BFB37EE513FEDAE203D0536FF069A54FE00364CA597608847B3 + 0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000016A494441545885ED973D4FC2 + 4018C7FFD7DCE82013AC9D5C1870D184A5AB3138F1017C1951BF806C1AFC021A + 171D60F165704457498C8389539BE058A386C000A7426262DB73681A8A42B570 + E596FEA64B9EE4797ED7EB937B0E900C018095B91CD4841A5D15EEAFE6D2EAB6 + 706E5C8002809A509149659CE80C00707090BE82C94C05802BE0A115B29E2B6A + 477764F5728D4300957C99689B83B9BDB522A2C024C402B1402C100B4817A041 + C14ABE4C82E2910AF8EF05410CDD8CF4238805A40B047681877F80088356C83A + 18F1F385120080B0D3D17F5B58FA118416D8291609FA73EEF40544E30A70009C + F7D8EB9B1C01F6C90020A757EBBDCE0B9BBEC0A97E06BD69D49C2F7BD9A83E76 + DBCFA325F64B258E3F5A2BB480E55838B83F84DE346E6DCB5E32AEEAEFEDA78E + A81A810CEC842A14DB0B5B4827D38B00AE0921B31365FFF11CF3633253D9BDD9 + FB1DA40AC5C6FC3A9233293738EEC71EF220F5D3F868E0F8E164CCE402F9067D + DD6A7E7E719D050000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000264494441545885ED98414FD3 + 6018809F0E261D1B4E81CC813161714462381813B97810A3261C3D7A07FF817A + 24911BFA17E40778B39C484485444E1EC04443B791495C22B36BA6C5E286B27D + 1E06650C581D5DC90E7D6EDFD7F7EBFBA4F9DAAFEF0B2D8E0410094618EC899F + 7E76516BB2CF572343C6C8D00E30D81367FCFAF82D60F4D4E4604F5000528DE0 + 82A22A8B96E02EA36D67DA2643BD416BA2F86B9B7249D01DEB76C52FFF258FAF + 4D42EEEAB0E64C7D8BD29F12C022704090506F906BF787ADF1FA870CC5DF7F19 + 9B1A7345706E720EB9D3CFC08D4BD6DCCAAB4F18DF36ADB1CF95CC4DC413748A + 27E8144FD0299EA0533C41A7B4BC60BB5D80A999ACBC5C7125B9A999C803E7EB + C6D41594BB3A68F7FB587F9F6EAA9895DCEF3BF0AB75644CBD8BD1A108D1A148 + 53A51AA5E5F7A027E8144FD029B6DFC16A760B1AC93EF278C2FD674575616647 + 4382009747E3227EFB6445FEDABB35F4A4D6D09A8605439110D1E168A3CB00C8 + 7ECE362CE8680FA6D3690A8582935BD8E248F0C5CC8CB4B1B1D12C972369F9B7 + B822280021D8D9DE4108517FC52953FD04674D7DEB47E2ED1AA2DC3A923E8054 + 3E8551349625B8F75DCDE5D537A9FF928CC562420E04DC17D4B6724C2F3DC728 + 6E2E83B8AB2573FAEA7C92B28DE4C38909FAFBFADC1704C89A59A6979EF1B368 + 7C1470474BE9B9D5D749CAA5B2AB02761C3AB6A2A1284F6E3E262C87AF02F3C1 + EECE0BFE801FA83417E57080502474A264A66652340A5437490FC5541A98538A + AA3C55D4D9C382FB928F08779CBB82C403497274FCEE737CCBB796054555168F + 15DC931CB9380240B3FCEA35CD6B51F504093DD1A4C42EF20F4D0CCD4F9BFA90 + E40000000049454E44AE426082} + end> + end + item + Name = 'build' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000015B49444154388DAD92BF4B42 + 5114C7BFF7BDF07736242E4A3C1B4A1BFA45701BA2ECBD700D091A8468E85F70 + 52C95968A9B1B1298806877E40280D3508D91448D020813C028750978C7B6F43 + 44BEF296619FE91CCE39DF73CEBD0790600B8411CA95B2A15C29EB8C2CC8D2A0 + 48233DD2B7C040A7E39E8AC1BB985059A3CE1A57879F5D1C1EF83777A07A7D4A + F3FA88B76E4F2402D331D883E15300FBF660F858080010185E4D427178B60018 + 985F4B48055EEB8F80401204E7EAA04F00E263820D00DB4208FDA556B1AC40A2 + D128E2F138344D038882F6C81C2EABCDC98B87E7B336E35508A83655092C85BC + 2BCBA343F7EE5A19E00CA669229FCF039452CEBA706736D9CCEE0D9BDD2BB3CA + 53AB5B0AA39472CB0A9D44FC2E1CAC8F0300C67CCEDE7EE12B137ED74F61AB40 + A15044A1582486AE0B00BFDA86A1BF17CADEA01728A5FCDB25A6D219924A6708 + 0021B32D05FF3EC15F219452DE8FC01B38AA13D8832AC4950000000049454E44 + AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000026049444154388DCD923D4C53 + 5118869F73DB6A5BFA732FDAA48D34708B31C1041D04AE5244ADD218F087451D + DC2C26C4C481C5410D83A8838931C1280CE2E664D4105D34110D091053065D64 + 68E00E1DD0D040221030947B1C4809D062312CBEDB7BCEFB3DE7CBF71D4111A9 + A7DAD09AAE3E07981D7D7725F3B2EBAF79A518F05FF5FF03ED1B0FB4E6EBF81B + 2FDB81ECF4DB477905DEE825769DED50007E8DBCB6A6FB1FFCBDC392EA18085E + 21E82A3DD741C9C1A6D53BD7BEC3949EE910402FF0D85BDB5ABC43696541F214 + C11B24D21128EF944890A0784A11826EE00210974B0B79409BDBED4655550281 + 00AAAAE29EFF8976A0713C2BC5A8254537821D801F00218E2A42241C8A68F6EF + B47DE1C3433C72015555713A9D2B9196969663EDEDEDC4E371ECF6958697962D + BE4DCEF33E3573FAC5D7A91BBFB3D60C60733914DFC5EADD776295EAE7437B3C + B81C36002CCB627070909E9E1EEC994CE653301894391880C3A65053E6A5A6CC + 4BB4DCC7B5FE710DA0B7752F0D15FE4EA073DD2214059FCF473A9D167933DCA8 + E3119527E72B41424385BF583C7F29857422A26E25960F1C1A1A667171915028 + 88AEEB727878440054EDAF920063DFC704407DFD11699AA6989CFC81D3E9241A + AD2F0C4CA7D3CCCECD61B7DB0987C34C982600E17019C0AAAFABAB656A2AC384 + 69E2F578D6B7681886954C2697B7AB6432B96C1886557086376FDD1600276331 + A9EBBA7CD6D7A700B4251296699AE2E3C08000B87FEFAE05884D6798535B2221 + 01346DE5C3E67C281444D354745D9785EA36054622FA5A2BD678E172B9D0346D + D51704A652A9CD1EDCB2720C611886B56DDA1AFD013E19F1F112C6B2CE000000 + 0049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000317494441544889B5953F6C53 + 5714C67FE7BD1BC7244EE21781636080F784AA444434312274E9801D65A92AC4 + D6485086A40506E6F2A74AD516981811282291182A95481D8AB2B0242C4C1D1C + 555513B54506AA0E10AAC42DB2EC24AE4F8717270FFF69ECAA3DD3D1BDDF39DF + 3DDF39E73DA141DB77F11EA1FDBDF32242692D977C3E916C28CE6A94E0DF5AD3 + 04AAFAFF12884853785333494B2B2D31178062F625A5DC6ACD60ABDDC1447B00 + D8587E8A6EAC354060D9C4CEDE64D7A163166015FF582EBE98BCB0755D96C874 + EF27FEF16D4CB427A4B05E7892E6D5579F502ABC7E335DD5EB4D2BE143C740B8 + 0D7C63BA62ADF17377B023DDFEBD086287CAC93B8147A25C0A7B8318676FF57B + 6BD60EA02C20F21E22F74D572C6477C5B62BB00D26DAD30ECC0209841FEBA5A9 + 22D08D02F9A5C7283A097A11D5F781AF815040A65DC0B7C03BAA7A5A5567F33F + 3D667DF9691581F4F5F5D1DBDB4B7F7F3F9D9D9DFEA96D308993FCF06A8D5F7E + 2F9CFFEDCFF55B8A3E40890396C2AA850CC73B5A3EF4BAC3F78FC4DBB0BF9F45 + 370A00E4F379161717595A5AC2C4E3F1CF464646747474948E8E8E6D1980DC7A + 8967D9020F7F5E5D9CFCEEC5A992AA228211E4FCF1BDE9A4D7F5D601A775221A + 36F0EE85AD11CEE7F3CCCCCCB0B2B2222697CB4DD8B64D2412D1CA256A0F591C + 8EB57138D6464F24A45FCCFD0AC0E7C307F48323BB07808137E4DD8C0F87C314 + 8B45C966B318F1691560D34755B5D23F33B8DDE4D1B7F700482D5CC007EA2C5A + 3D3B3DB0479B5DE5E63F154DE24D50F84C26C3DDA96900F13C97F1B1B1D2D4F4 + B495C9F8E3F7D1F81880DE9D9A1600CF732580111F338EEB1EDCDEF8600F1CC7 + 6138950220EA44111149241278AE47F91ED80113F52BADD503C77148A592C186 + 49627030D83C44445229FF67B359BD1C4D242A9B5C5BA2A07FF9CAD5B22B37AE + 5F2BCDCDCFCBDCDCBC6C56A0C9E409BD72F553ABFCDAEBD7BEA42257B544C131 + 2BCB503EF75C4F24E597EDBAAE8808414C65FC8E635A2983E7B9B8EEC12D1900 + 49264FD494256875256AC4DF01E7138888A4D3E9608FCACDFC477F27DCC2C282 + 5FE6D0D0D05FF564FA2FEC6FBC7875AD0EEC1A9F0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000027F494441545885ED96CF6B13 + 4114C7BF33BB9B6C129B349B5C4A52C15F6B4A41E2C543DC1E84620A8D3D3545 + 0505FF01ED596B91A29EC5B322F1A4F518C436172FA1520F454A50ABA78A454A + D3D264BBC9D264673C5883629B2CDB602E79C7E1FDF8F09DF7DE0C8143535293 + 90425158D5328AB3334ED340741A281F8BF7B9A3036BF5F24604C00FA779A8D3 + C0765917A00BD00568BE074417C2E35390C247A9F1618E95F32F5A26F49D1D81 + FFFC656AE945B6F1F21EB8B9D3D4BFA9029E53E770247E517347638B4A6A32EC + 1FBADAB27878625A714763EFBC03DA05DF99E196C04D012C7D0B9CB32510E800 + 72CAE84DC53F7465FFE2F124C2E9E9202134071013C07B4B2F1E0E60F7FB4714 + 67672A9CB14B007600CC07476FF5F6687F43F8E2498427A60384D2790026C047 + B75E3F36AA9FF22D01484B0FEC499BBEDB43A8300740E09C2761D5BC5472AFB1 + 7A2DC209312815E60170C6F94829F7A45C7AFBD44E6A90482482C1C1418C8D8D + A1BFBFFF4047DE3780C54DEA7FB3B29DDB36EB96CF456F546AFCB34724B14A8D + 3DF3CBA2307C2290D4A27249F8B674609EF5F57564B3592C2F2F637575154455 + 558442A14A3E9FAFDB212E9975E1FAAB2FF26E9DD5BE6E9AAE932179D72D52E9 + 795A3503B268D9C9A1699AA8EBBAB75028FC1A43C6980C80DB090EC82232E32A + AECDAE4800E01288941957119045D94EFC5EBDC6D53B5A44BD1E1199B48A544C + E199F469F47A1C7F2B9C7F4814AF8447A9E38E0BFFB68EAFE28E03EC7B05B7EF + 4C359AE4E183FBEC8F737AC8F37FF64EC71520AAAA22180CB28585055B63D80E + 4B2412C4300C5A28143AAF40CB316C433F347D6F3AAE40B7073A0ED068C24422 + 61EB73D27600D3346118C67F57A25AAD02007E02A7E2EC3215D0234700000000 + 49454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000041C494441545885ED975B6C14 + 5518C77F672F9D9DAE6D7769BADD6DEDF6AA88B656B78DA0314A1BA2D66D9468 + 1A2D262852303186187CD507F0CD18A4BE084221124242423424B4C687F6C178 + 0112760D118DA4711B4BD996067AD3BD75778E0FB69BDDE296A91DD392F4FF74 + CE7CF3FFE637F9CE77E68CC000594B2A29DABC3D3DBFD5FB295A64CA88D4988C + 48622E28A6A0B9FDD982E6F68182E6F65293926F445AC020C039B981CD80CDC0 + 9C8602FE2F5A035CAED60097AB35C0E56AD5035AF4DE68BB7F13366F3D5A3CC2 + F4F7A7414BE97E88C853297CF25584C94CF4B71F890F5F311650A97A98D2373E + 46982CAF006795CA86D8F8A9F775418A3C95D2370F62AB6AF40275854F6D1BB8 + DEBD9DE4CD6BBA007595D8525C8130591E12429C04BEB4D7B728259D1F82C9AC + 17EE5EA01FC10993926F3317B974C1E9064CDE1C466AC92B52CA2E21C433C019 + 7B436BDE6290224FA574C7416C558D65403F8875485ED4E2D1586AEA86B180F1 + A1CB8C9FFA00A9A5BE9052BE85A00D386D6F68B59674EEBF0D52E4A9B8767C82 + ADBAD1030C002E90CF6989E8A5B163EFEA2E2FC0E235CAD0EC8D2166C742E4D7 + B70405A6314C622FF0A0D555FD9552B14133DB1D8F0821B64A29BB95DAA629A5 + 7C7DA9106200F0484DB6C944E2E2D8F13DC4872EEB8603B0582C161445415555 + F2F3F31142E4BE7BE677ECE78F636DD97DF8CF59CD9A42740B38697555BD36EF + 12405E49A54B08D12F04E56621DA0A54F3F9E8378770CB29A8ACCC995ED33422 + 91089148844422412A95C2E2F57AA9A9A959DFD9D959D4D1D191B4DBED777CAB + 9978920BC3333F9CFDE5D689AFAF4EBCAE9844B2B658BDFAEB789406B7DDF7F3 + E85FFB6C56F3031D0DC5EFB5D63A624DE5F7F8D4778EDD31EFC4C4043D3D3DD6 + BEBEBE3F060707C3232323FF6C333333339FA552A9A7F5C001142816B6D439D9 + 52E7E4F38BA3F2A36FAF6D9B8CA524C07864F68CCD6AE6E8CB756CAC283CA02B + E19C9C4E27A15088582CB61FD8074BD8A87369F7636E929A9407BE1B110093D1 + 24475EBA8F8D1585CB4D0D180008F0F6260F494DCAC317C21CDA5AC7E35E63E0 + C02040803D4F94F1C2867554390DFD2531F6B060341CDC05A799550F98730D9E + EBED251C1E4DCF7775ED94F3E3EBE130BDBD7DE91DDDE77B94269F4F6678C512 + BD4B070C8747098542999F95F44362D15856ACA6BA5A1AE5D50DE8F1B8B31267 + CAA6DAA8CE48EC703A0CF3EA066CF7FB175E4ABF7599C7C3AEAE9D39E3FFC19B + 53776F932CD491A33DE9B1C7E3A6DDEF4F97E95220200281603AEEF73F2FCB3C + 9E4CAF58E0351E30D7A207989C98CC8AC7A2B1ACF8625EC3003317F65C13A4E5 + 703AB2E23635FB8BB298D730C0C59AA2C9E75BB897659D7A97D2140BB5EA9B64 + D503A64B1C0804569223AD70389C359F07FC29180C120C066F77AC8C86E60796 + 6834CAF4F4F4DE1584F957C5E37100FE0626A2761A39F1AEED0000000049454E + 44AE426082} + end> + end + item + Name = 'build-cancel-2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA8640000019E49444154384F637C6D + 6D399F818161EDB9CF9FB7C45CBFC930455599C14950D0072816BC5B5039B150 + D880E1F7DB270CEFB64C000A61029001BE407A0910477DFBFB772B1733B33790 + BD0C8863448F1EDF0CA4F102A6739FBF8014C500F132A0E666100DE2DFF9FE9D + A0661060DEF1EE3D439284F82D5626265E4646C62AA058DFDFFFFFA7FB5DBECA + F0EECF1F882A34C0C8CECDC0F0F73798CD345545990168B327909DF3FFFFFF6E + 10CDCCC8E8090A0B5C80555806CA021AE02424E801A45700713CD0E672100DE2 + 1BF1F282C4B182BF5FDE415990405CF09F8F6F034770C88647B2720C0A6F5E33 + FC5CB33AF0EFEB377E62478E2642D5A1808D1B37323C7FFE1C4C33AC32336568 + 8989D6FEFDEBD7B3BF7FFFFE0182673FAF5FD7FEB0761D2390BD1824860B9B9B + 9BFF65545353631014147C7EECD83151A80520F00A181E7B81811A09E5630556 + 56568C4C50B61894860131429A61006600185455D730823090F99F18361033C0 + BCF017E805B0002900E40516281B0EF6EEDDC7B077DF3E46672727B081D8D8CE + CE4E202E1850EC0294302007C05D00E593081818001688C55420DA1B6E000000 + 0049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA864000002F449444154384FA5935F + 48537114C7CFEFEE8FA36D7A85166938B791BD148553B310B29290F6604982DA + 5B28F618955A59F447CCCAF5E243487B084C4A28B4B4822826B2122571D253A4 + A0457FA649DE3B41A679B75FE7F7BB9BA84D5AF481C3EF7BFEDCB3DF39F78ECC + 14ECBD0C008B00F4D6C5894FE0094C41933D134EA6A7E9004807E6EEF5A6385E + 9D333A500204FBEFC3D2CC67AEE3C11A9E27845CA7945EA0145A06E682509092 + AC23401E61FE105A896560B08F5727808076139B5D2200370881BAB5CD144A13 + 6EC6D0CC290A1C1053DF0201051B36E3A54B319E8B768435ABF9380663A1102F + 4E04E12EEE6C2018040AD48D237FC0F17760FC01DEDAFBF8C70C3CFB39AB56AE + 4392756754A9084DB64CB6332D8ED989BE1D1BB5A3AEC6C6672A3659A0266DB3 + 5AB90E86AD7951A522D46C49D3E2C3ACD961B4A36827F0B65731E6463BDD64B7 + B1BAF5A1E1A850D1D45B33DAF12C01412825C9C9AF87040D6418927C746909D7 + 499AF1657D777FF9EA57CBFF245DBF08292623180C06EEB3CFA6F8975E0FBACA + E3FD6245E51E8DD108916030B4D0F9F0DDE293EE5341DD86A7B6E73DB64824C2 + 1F100401985E7BFA7C3E686B6B03E8C8CD81DAE262FD8B9E9EDE7038ACC44C99 + 9F6F080D0DC2D4C8FB54F41B57E6E2D9F0F0B0929F9F1F16AECC4AF04696EF7C + 9B9E76F12B442106C3357DDEEEC68DBBB6BF44B7418DFE1DF66133D4FFD56A70 + 7DD0802F26477513431B3D39922481DF3FCAB5D3994D254926939393DC2F2A3A + 4847FC7E224B3288A922E4389DD4EBED633F0A76BB9DD7306237E48416166002 + 1B30635A92A5659F110804B8662723966375CB381C0EC0657A3D1E4FDC65276A + B197B26AE418381A747575F371EA6ACF46D868FED151228A22ADAFABA52DEEDB + 449665E2CCCEA66565C7F83331E236DC969505D55555946993C9048585FB70A7 + 4EAAD5AAE515E5E5A0280A359B4DDC5FC9AA1DC6309BCDB80A3B379D4E472C16 + 0BD7566B064B1376329FC5D742D80E31E175B95C8568D1F0BF333E3E0EADADAD + 64B921C6F6ABA9FF01E0373FDA89B0088D4B5B0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA8640000038949444154484BB5544B + 4F5351109E730B161216D4A4581E625A45108C41440435461EBA104970E30241 + 8C14E2E30F281836023161C1828D48792426C41A21260AC644588058E2031479 + 044D0AA2BC8298A8207DDCF63A737A5B5EB6D0855F32F77C6766CECC9C39E75C + 367F2CED1C00E48024954CD96C62EED0304C58AC9017A6869A3DBB41602C15ED + 3750F28D21BB16CB03C29002D8E6C661F1ED13CE7D81123431C62E4A92D40220 + 5DFA66B5399A6767A1343ADA1DBC831C9DC0D277F4BEFA40DC1F08204131067F + 803C0FF335452AB729CA5CC18FA0AE9DFB00643B98E07770823065B38A3816A2 + 187127F90C9330064771FE8CEC2867B008D3D39FBF91FA0FA60D0A82B6FDF180 + 950760F0FB98E43CEEC881B62594B3C87B1F7F5F80EB5FA6C16E25957F10C62D + 16689E99C3F603EDA4560EAE40792981D4679324B833F915441C3743E8A92B32 + 5B8190A75643E9AE9D4859327EE85AFC4179813BC9C61D19B631A6684BD807DA + 2025AA7D23782F1DDB5A0835313A6A7432F69D7A4E95E760ADD49A4774BB50EA + 23954AE1617C1C5FE02FF0B2088780310A4E25D27BE8119D4E3BF20B98A415C7 + 42B4D747060874E03EB134D429B315D03B68650059A054E62862E3BAC5A424E8 + C1879625DAC1DE670A94A6A75BC0E93C6B11024F44F574BF91D7FD13D5D5D57C + 5C5E5E86919111181D1DE509421601626D27D3DF455CBD961BACD11CE05E78D8 + 8ECF9FEE2E1B0CBFC48F8329C331C9BDC76BABCAB96D135002A3D1C805EE1D4C + 84A2B454282928B82C8AA215C5BE4A5EDB6666B65B0607617262E6B0283AE6D7 + D9BD4A5D5D9D989292220A150B3F60C829E5BE1F1BBB8B07AA40C18E61EF5C48 + 12D4EAE7810909A723A2C23AD0A292F53E21AFA781BF5402B5C5DB2126A2B453 + 703CF435AF61F5749DC9834D6F860C5739080FD92202E8E34E4E55747675B1CE + CE2E1E272B3353CAC848976E9696B9E3B2AACA0AE72A1FE6F6292DBBC58BA5D6 + 5456DCF6C4E40948490AEA9F4EAB0396E98AA7D56ADD89F89C20FBB0D53E8835 + 3E04D2F1311A7FCDE1E1E1E598A0DC64327125ED84AFF2C109DE6CC41B1B1B99 + C160D8D8224E1066B319EA0D0D44994EA7057D5191D3D0D02098CDE3DC5EACD7 + A3AFE4F601F461E8E359EF0EB5A14534A7442A95CAB3ED505528B725E12BA716 + 1254A823ACF7214EEB65FAFF5BC44F1EE7347003612B9CE0CD26731AD6EE40AF + D7732519DD857AE3045F7E030303D0DFDFEF4AA0D168E827B6A51F997F00F80B + 5E991FD08C99E7830000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F4000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA86400000338494441545847ED965D + 48145114C7CFCCEEB8E5E7CE6E242106666EDA2AAEF694D98B8259D4BA961545 + A414512F86519065F464411F2FDA8314AB41A465A464BB21448FB2045AEAFAB1 + 8AF61041B9D5965FE3EA7ECC74EEECB8AD211536B812FEE0EECCB9E7CEFECF3D + F7DC3B437DD9B1BD0904C13AE2763715F70F82D3EB855F5151143C484B853C56 + 6D42B3746C6E6E7F46D75B21E0FD376841105E0045356C8E5C7BA4353D0DD633 + 4AC9152044BC08CD47D8DA27FD7E515CB3B702E24B6FC3BA435789B924285B56 + 26A444461EC37B330F7CD90837F3F8C0800333E193C4B7A0386B447F33B68A31 + 8FE76E46E71BF2AC2C28ACAE6F50C0AAED1A86794F01D5A06594A3056A75FFCB + F109A8D3A510F17D38EE09B67344DCD43700DF7D3EF16139A0C84F3CC3C0B374 + 3DE0321C47F39EC0F3A51E3FDFAC6294449CCCFCBCD3E3A92B42F177B3B3E411 + D950901F8EE7C1EA726126D85ECCC4078AA2CC4A9A62B1366EA2FB02CEBC8ECC + 5C6E718298817936AA54F03ADB000C4DD76010E558A0F7B1FB64416F1F744F4F + 0706C90C2D5DC582BB959C44C4F7A0790AC59BF07A145BC98D4D4910AB109325 + 3BE2BF4648D59ECFB244FC29D6C04510A012B3F011EDFA0DAA88E19D717183CF + BFBA604E9065FB0751885B2D15B79A86DD8DEBD18233AF1CF7F9EE9C700C8121 + 36A6076BE2138E33631043188443EE20148D5B53215FA32EC42DD82A087CE5A4 + D7537B7060086CD31C58510C0BB31B8318C3B124080709E2A1F373E06919A0F3 + D4EC2EACC51601844BB8BF6B4B0687A1676646749263D9D48FD5EF76D7A3598E + AD313B26BA5874CA048D2B701A40A89AF0796B0EE3CC7BB880F83C2408B2FF47 + DD6E339A67B19D111D7261DF964D776619C0101D25F52C0E39AC5E656680C554 + 16DC39FF05E241949090007ABD1E8C46232426268A8EC5105451D00549B1D585 + C99352D75FD1D6D626DD05703A9D60B158C06EB70702D0E974A0D56AB98E8E0E + F9DE327F2037375739353515155C4F9EE7D7E08514C2B23449EFE7511C2E5603 + 087B000BBF4043B85C7525F8AD70FD5A352FDD92FE60D04BEC5FF00D12F60C04 + CF019665FD369B4DDE97FD6FC8C9C9A1388E53ACDC1A0845867A58B0EEA1ACD6 + 40D833B0B29640EC5946388E53FC00D75742D5905358F00000000049454E44AE + 426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA86400000451494441545847ED975F + 4C5B551CC77FF7DEF6027A2F6DA13047E61F0412E34C96D2F160A69850D8CB4C + D8E6C312E3FBD46421B81835C19AF8AA2F3CF0409084C7F9A24C11352B7FDC83 + F165F8D239022BEDC4D0D2B29556606D697BFCFD4E6FEBBDB0553B6859C8BEC9 + 37E7FECEEF9CDE0FE7DF3D089153AFBA81818531767938B8029F06FE84626AAD + A986ABAF1C8746593E8DE16560ECAD4B8BB737AE44D6720DF65922C2590551E8 + 477F79B1E9287CFEFC735A6AB7086E3C07D783E1B7E87AB4997224C579A66053 + FD31AD766F923E7CF6D8CF585A0441E8670C7FBB56B9A68802CCC6E2B9169AF2 + 23774496BB31BC8ABE85EE69F8F5B7A8776B8B9A402AB85870F6BEB1FFA34AAA + 952470AA2A415A4551EC67004F9F54D46B16096026F6376F941F391DDC3CFAF4 + E2D6FDE86828444DCA2669663D060479525508D2260A62BF00EC29A7A27A5451 + 82E554323F722ECC13DC02BA07E1EE9DF5DE84CD6C16C3F209C709474A8374AA + CA4F18D609B991AC712A8AE79DC606B0CA7217D67F8736C085B7B7312CAF3820 + 6907643D4D376459B55992180802C12DA209EE6EA5E048054012415A68BA6B95 + 1F31B48B124202BC8DA635D75D693892A895058DADAE4222B7AEBEC1232883BB + DB84CF33E8BBE36B6B1585231946307F94584CE63730FC1E4D6B6E0221DFC7D2 + 7CCA62998EA73370636303C3CAA800A83B4A086E02D7DF127E5DBA0580AF313E + 42E72496A62E9B75A692901C90C31D47B82AB913C30974208B70A1CDCDC8F8BD + 289C509449AC7B4683942A0929E5A6F56584AB7A1DE31F00588065B3AE70723B + 726E7E01E81B6B3199F09C5409F2A8062922E46C2520A5EB8E1338AD7938B843 + 2317D94E44CE79E7C1974CF246D3EBEBB8BB0952A13604F9019602417EB1FC17 + 6F532E898D66F9352C695A112EEB0AA592E15EEF02DCD6E0F21A0804603818C4 + F31BDEC3B53982906E7CFE8C27CB281104F804CB6506AC7B35950A9FF7DE025F + 2291CBEED080FF0E0CAFAC6053F62E427E8555977299F209AF5BEC02BEAC2B9C + 4CAD9EBFF907C219476EA7386430849070312D881D5A75F974A1C1CEFD425595 + 56F3FF74F6C597E0CD8FAE685189C24BC8A1119EC3787DA9AB83D6D656E8ECEC + 84DEDE5E686A6AE2C9626A6969D19E4A97CFE7D39E762B81EBDFE3F1C0E4E424 + 6FC701ED763BBDF0E38E8E8E81C1C1C1CA7E6C1FA0B1B131D3C8C8C8F5582C76 + 467F5990D3E9743596EA3E58D1F941F9A2CE643235B8718965F76D669F443393 + F79E542EC07DD313C0BDEAB107A4EBFC43B5B4E407BFDFAF4500EDED0E66B3D9 + B408606A6ABAB009AC362B38DBDBE932C1857D8512FB6A91514501E90553D3FF + FE507373B3F1253B72FA97ECA5AF5E8FFD14F3BF42FB92B81D0E877B68688827 + 0E52A3A3A3E45FE2F1B8EB70EDE21B7373B4B80B46D1A6E08E46A34C9FA30DA6 + CF3FA4EF7FAA24C0B9B9DFF9E2CE5BABE68A46D70D39FD0E2615EB5B4C4F36C9 + A3E8F06E928390618ADBDADADC7D7D7D3C7190A2EB3E9A4FB101101FCBFE8F78 + 099A8DC7E3AE7F0019E3052D81E4242D0000000049454E44AE426082} + end> + end + item + Name = 'debug-start-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000015F49444154388D95D1BD4AC3 + 5018C6F12739D112100C68112DA48208221D0423E850D0A2732747EB8D08DA2B + F00EBC0217318E290EED26C58F745369441053B145C829C6E61C87DA34364D3F + DE25D3FF97F7E510B2B60F2995052664F04F0B00C73843A45416A2AA5D1375C3 + 22CBDB55DEFA1E0B2264290D51499CC5153947D96486A85A751CA80D4C278E8F + 0EB61057E4E47B9D1E5236B943546DA48D7C604F5BC4FCCC1436571730ABC849 + BB0BBD0C827C60773D09001004A117CA5116CB446D14023A1384FE4ECBF53B2D + 12E807F59C6689732B5571E83B05B1EE570020408A411A1631C671F75443A16C + A1D6A0450079EE3A05AFA2A365EAD14030B41BCD22C0F3709D8267EA685574E0 + 87024018608CE3FEB906A36CC1AE37FFFDD1332FFDB03352445802789EBB8EE1 + 9957F02AE130049C9EDF04426A78A63E30EC021CE09C97EC3A3DE1AE63B457D5 + 87863EC0BEDE808FC7347BBD85F7703172D8995F52ABF61A24DECCD800000000 + 49454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000001F549444154388DA5D1CF4FD2 + 6100C7F1F7F37CA9742B5468A072902F12856DE2A179779DAC0E9D3AB435CFBA + F557885BFD09FD014DB453AB9BFE03321D6B8B2D98185F37B083832F4993185F + 9E0E5FF9A108017E4ECF7379EDF37C1EA1859E22BC61D4B98995FC0AE7263789 + A6CD3D477BB0F4567AC3452DFCACC0C83D54210BB5CA70A09C5944BA03EF40BC + 17529B959E50F226B0A6CD2C22EFEB2B737EB77E77F456C42C57578594B3D213 + FA3E0C6C836E7D6521E8F1BF5A7A843EE594C5B34AC42C57D75AF0728111675F + 70130C4C8FFB03D3E3B89CA33C7938893EE59485DF0DB8FF293AC0466CD88B7F + 724C16CB958859FEBB2AA42368C3CB05EE5CDFB82B082084C0DD6C3C268B6795 + 791B6E34EE9CA227D81ED76538D2065FDAD8D173E16B12F44D10F44D70982B6A + 3BFBC69BECAFD26BE1B8FDD1F1F8C58674E9877250B015811020EC8BE4E23870 + C34CCE64E7C0207B52B2406D021B0295B68C38B5C476FF602667B27B60F0D386 + 62401445DA3A8E534B6CD91FD34FC34CDE6477DFE0E8A4540736812890AE1B7B + D412DB4DA891AE60266F373ACA9B751031601DA5D2D6711CABADD1D574802DA8 + 5407ECA7A15296D11BEA00F3A7653E7CF97601A91888288AD4FF1A75800A504A + 91CC9ED6812D601D4859C6DE40D0D5869F8135E047BF4FEB16A1CDBF44F81650 + D53FD4139F86861AF907BFEE1CED30F1748A0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000002E1494441544889AD934D6B1B + 5714869F739526B29288422C59C6942A6E2D09140743BC2C91B113BA2B85FE86 + 46DDF59FD40D24FD07DD14DC4DD73194765108719C4936A18D4ADD52591E7F69 + 8C251979EEE9623E621B8D1A195F109C41C379CE79EE3B623E98C714AA2860FF + FA0DDD7ACD459E54AA729FD4EC677366A2DC37338B5D3351410F5A70B87D3100 + 333587C997EBC0F7222623D9C20B33B3D8937C19F55AD0D9B908406501F8D418 + A9A9EA5722644CB6E098F252D7E42BA8B7796E50CA4CCD919AA82C00B5AFBF98 + A773D4BFE2B6BB775579207055AE171C535AEC9A7C3954371A2865A6E6907C79 + 01A87DFEC9C73A3B9DA35ACC49A7D74FBBFBDDBB0A0F442423D70BEBA6B4D433 + F9D248A0531BDC9F2F8A88C8B5B1F7F4F64779B975739C4EAF9F76DBDD0545EA + 228C4976D231A550DDC1E6FF82823B780B88FF084097999D1ED76A3106D554A9 + 0B64243BE9989948DD5662EA4E29BA77E7431DF45200CA71EB664E3A47B1BABA + 0861EA967A922F0DDC68A0A26883B3F5D5F4097547FD7418867A90BA49C7CCDC + 0BBE23AF19A76EA8A2A4FADAD8656E4FE7A8166FD0393A8ED47D29422648DD52 + D74C9451AFF96E8A924EA4AE5A1CE7B0779CDEDEEFD6E2D4650BEB8CBDDF33E1 + 54F174C3149DACCF3C13B700E1ED8F4BA34C7CF6B4F63AB2BAB6C1CB3F5DB196 + 7D411F010F51DD51AF89FD7DF57C80D6EE214F82C6A8550F78047C0BEC586F93 + E3F51FB06F7E05F503806AA05EA322A18E276EB858C523987819D55DF536E9BF + 58C1BEF919D4C6C35C82E00E54354E8BAAEAC9BAB5D791D5E71BBC6AB8F89636 + F0389A58DB4D7C6705FF8FD38D4F011255EC1DB2BAB6214EC3156B89542C83EE + A8D70A55FC02EA27F618A8682B9CD869B8048DF531F08D2ABBEA35F107A8180A + 8814458D5F365C7CAB1E48A462DB862A6C828AA100C2EB7CB8F24C4E345E06DD + 7E571543011A100E7C1BA908723C8A8AE11BA03F297C27886BDBFFE23B3F8EAC + 221160F7FE868DA76B00F69FE7D8D74FCEA522E9FC073A4EC07838C88C540000 + 000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000381494441545885EDCFDF6F53 + 651CC7F1CF734EEDBA8EEDAC3D838E76A1B06EB6A90E319060844591300217C6 + 1BFF00034A9625DE7AE93D2A228AC6E81FE044E33F60B9232644DBB55841B1DD + DA95B6D0D3F6B4E7B4A73F9FAF175032A276607BBCD177722E9EE439F9BC1EE0 + BF9EB8F520780E80ED5E0035AA40BBFEEF032C87DF8065E1D5B7C5E0A918EC72 + 874A29D3218F0044DF228449CF0F60C21961CAC7C5E0E918B3CB6D5EDA300DF2 + 6780E479F7F597FD6335A3BD54A9B7CF0A533E66099E8E32BBB3CDD52CD0D2CD + 07BC76740E47163CF04E4B6365AD7142ADB5DE14649F280496A24CF2B448CD00 + 4DCD3CC0E2FE19D8AC16C813A338E47761DF6EC9AEEACDE36AADF596E0F45AC4 + 8790CD81217F0B18B15A00008C3138274671C83F8D59F7A45DD59BAF94F5D639 + C1E9B50A81935126799A8340B6056CCD396EC341FF34E63C8E51556F1E2BEBCD + 7382D36B1702276370EC35A89A030CD53C402FC7B80D079F76617EC661D3EAAD + 974A5A6359989CD921064E4421CF1AA86601A36C1EA0D7E40E1B9E9F77C1BF47 + 1ED18CD662B1DA581624B724FA97626CCA57A7CAF6908100BDA4B1111C98DB85 + C01EA75537DA4794AAB1CC24B7430C2C4599ECABF5830C05D06BE20124E895AD + B546FBC542C55861925B16034B3141F6E954CD03F59279805EE3762B9EF3EDC2 + 337BE5A76A8DCE0B05D55861927BA7307FFC065C418D7405A815CC036C85ECF7 + EDC4B3FBA62C46B373B8503156D8B8CB25CE1F8BF1665D83F21B8481571E23C6 + EE7F6060B8FF688159460000833FB34FF9520D57C369DC48169A9CE84B229C27 + 3593E946AF8027AF9907C8157584C269FCBCAE3488E80BE2FC3CAFDCC976D7BE + 01AD5F03400FEF0E1590557484C229C4378A06117D0EE03DAE24F29DE8B7A0D4 + F54786870AC8143484C269DC4C15EB44F41980F7B992B8D78DAC826FFED4F7DF + 81009BF73484C229DC4A97F407C31F702551E8445641DB0C0F0448DFAD22144E + E1D7744923E032112E702551E46BDBBF7820C046BE8250388DDB9BE52A813E26 + A28BBCF07BA9BB76059479B2E12702ACE72A088553B89D512B005D027091E7E2 + 6A27B20ACAC7FFD1F06301925915DF875348DC51CB003E22C225CAC72BC318EE + 0B4864555CBF994732A796007C08D0273C17AF76225F0F6DB82FE0ABABB71410 + 5D20E0723717D7F9DAF087FF12400410D13B207CDACD446A9DD877C0DD5F4C19 + EEC5B61E84D9A360921B3CFD23A8983475F8FF7AFD016953CD2B1C3677C50000 + 000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000004A1494441545885EDD8DB4F14 + 571CC0F1EF394B2BC8020BBBDCD6B502A9B80BB4FAA262DBD4B469144CDB87FE + 0135B54DBCBCF52F68026DFF88BEF609426D6CD2C63682B135366A645101AB16 + 965D407697BD827B0176E6D707AAA15E229765491ABF8F2799994FCEE49C3919 + 78D9FF3CF5E440D1E12F512536CCD804C6ED1F2193D80AD7E32C4F0E141D388E + 76347EA76B9A872D9ECE04C5E5486C0272D92DE03D036869FB08BDCD7A0E38A3 + B4A551D7348F583CC7E214976D09F4E9196CFD10B5ADF4AB9606BB5ECAC9BEEC + A2714669DDA46B9A478B3C9D31555C8E5940E87381EFEDDBC927EF365351FAAA + 0EC5D37B179672A7D196DDBAA679D4E2E9884A690D929884C5D4D6005B1BECB8 + AACB705597D1DEE2A4C25AAC43F1D49B9985DC69A52C6EED68BAA3DD1D11CA6A + 91F8242C3E2C3CD0E9B002A0B5C2555DC6A156279565252A144FB765168D534A + EB165DD5F097C573745659EB30E381BC4357057C94568A1D0E2BEDADF5549517 + AB703CDD9A5D304EA1749BB637DEB5783A42AAAC16C923744DC09550A7C3CAA1 + 1627F68A12154EA45B32D9DC4994DAABED8DF7B4A72348791D920C41365978E0 + A39452D4DBADB4B73871D84A54389176A7177227516ABFB2ED1AD3EE23D3AAB2 + 01493E80ECFA36FC0D019F05ADAD2C2592CCEC4E65735F28A5DA95CD356E711F + 9952F6062431BD66685E802BA1B555A51CF4D4536FB71249665E4F65964EA078 + 5B57B87CDA7D6452D91B90E4F4AA3FA17905AE84D6546EE7A0A79E1D0E2BD1B9 + 6CD37C66E904F08EB6B9FC16F751BFAA5A1D7453802BA1D5B6ED1C70D7E1AA2E + 233A97699C4F2F7D061CD6365740BB8F4EE817403715F82474BFBB8E9D35E5C4 + E6B30D73E9C5E3C0FBCAE69AB4EC39EA53F626CC74145291C20357421D1525EC + DF53C7AEDA72E2F30BAF25538B9F021FA80AE7B465F77B63D4B6210FC3909A05 + 40E755B00668F3CE2A4E7DBC97CF8FBD218DF5156F69ADCF2BA5AF589C6D9DAF + 74764169F5D6015742B55668F5F8DC5CA414452BCFD1455B011311C61E24E8BF + 11C0174C2A11B90A7423F28B3917C4B8D907E968E18122C2FDE904FD37FCF843 + 734A44FE14912EE057732E8879B30F73EC7710F3F13505018A08F7A6E2F4DFF0 + 1308CF2B11B90C7489695E30933318B77E40C6FFF80FAC204011E16E20C685C1 + 0053B3F34A442E01DDC08019F5911BEA4302D79E09DB54A08870C71FA37FD0CF + 74E4A112918B4017C22533E6C3F0F66206AEADEA5E79058A08A31351FA07FD3C + 88A410A41FE812E1B2AC119657A08830EC8B30301860269642447E13A11BB822 + 311F396FEFF2AB5C471B029A220C8F47E81FF4138AA71191F3FFAECAAB667402 + 63A807095CDFC823D607344DE1D6F82C038301C2893422F233D02D22D7CDC818 + C6501F32B931D8BA80A629DC1C0B33E00D104E6440E42750DDC0A0393342CEDB + 830447F2025B13D03085A1BFC35CF40688243222C839A01B61C80C0E6F0A6C55 + 40C334F1DE5F8645931911380B748B70DB0C0E63787B370DF642E0F23E16203A + 9731813E11BE061991E0C8F2AADC64D87381C2F259E2B62F6282F488C837C01D + 636604C3DB0BA1C2C09E0B444044BE07BE1591BBC6D410C6ADB3101A2D28EC51 + 4FCF603A0AC871333681E1ED59FEE5F6B2976D5EFF00ECC66E7AF964DF280000 + 000049454E44AE426082} + end> + end + item + Name = 'debug-break-all-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000007F49444154388D6360A01030 + C218CC06A10C4CA22A2892FF3FBD60F8FFF30B56F13F27E73330303030B0C004 + 9944551898E54CFF212BFCF7E62ED3FF6FEFB08AC3F5A13BA923CDEE7F479ADD + 7F62C5310C20158C1A306A000303525286818A598718B129C4250E37E0FFA717 + 28699C818181E1FF87270CFF7F7CC22A4E3500004F6534CA97F4020E00000000 + 49454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000011149444154388DED94BD4A03 + 4114464F36519760946063AAFC145A5858A4B25110DB3C43ACECEC6D447C8D54 + D9670876418CFD22828D084B16C40DB198848C9A0593B1485C749C4020967BAA + 61BE3B67E61673E19F4944AB944DB2B8672C52EF02F539C45ACB19F3D1F31D7C + F4269AC86C6758DA3FCD03C75A7D7B1C3C386AD025B97558050A5A5E5757E7FE + 58174E290017A5DCBA0210832142862DC099E6D5ECEACA41366303E005FD0470 + 03F851A3A6164E2ABB00345D9FA6EBFFCACADB9B1C95F3009CD56EFF9CB54CC2 + 458885B13016CE83F12FD71AF7C06438E8B88F1DBC97DEDCC23670E9057D7DEF + 1B47C8B02564382BFF316097D3A4762AC65B95ECA2C237AC8DA2311F3D5DA3E4 + EBCC572FC417A295550677ECC58C0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000118494441544889ED953F4EC3 + 3014C6BF8F7681A543777201A6D21BB4ACBD007729EAC4A1126E907086A64888 + 15217568957C0CAEC176EC6629EA409F64E9D9EFE7F7E773A4007F6CF4765743 + B352A6D6AC3EA6D9FD6C3D72387DC4E06E91BCDBBE95D0E77B2FB3CF9F7F7B0E + 01924F001A922DC9D6F1972E13C4ACBF0CF325679DDF67329E50549B28F330CD + 0050009097EB28D3292099BCB3C9ADEC595ED61D86A46693CC61D6B4778F1620 + 6913F0904CD67719980F442429FFDCB3CE1B9CDA9212C99957C1EC56A2207691 + C867FE8F44973738FF1B9C4FA2E275C34336A4242AAA1A7042318992FF8397AA + EE741B988AAA8E263D5A40D20AC0CA1D371CDD32612C26915FFE660C5E8FD2ED + ECB650B3EF67BE3ED2F153DB37E87DE8C33E42D9440000000049454E44AE4260 + 82} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000008A4944415458856360180503 + 0C18B109321B84323089AAE0D4F4FFD30B863F27E753AC8781818181059B6226 + 5115066639D37FB80CFBF7E62E1335F4E074000C74A4D9FD4717AB9875086BA8 + 91AB07ABABE809461D30EA8051078C3A60D401A30E1875C0A803461D30EA00BC + AD62422D606AE8C1EA80FF9F5EE06CC733303030FCFFF0842A7A46C1A000004E + 7831806B0C343A0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000010B494441545885EDD8BF0A82 + 5014C7F1DFB5B47F084110D414B537064DD16ECFD0D66B84436B0FD06BE41E4D + ED824B50630D11B48820862D0515DEAE75A008CE075CBC9C7BBFA08B028CFD96 + 902D688D2EF4CE30D526E1628AF8B07EBC59AC20674D52CD479E83B3E724AE65 + 654342CF4398D53180B162FFBEC8E8CBF8795ED320CC6A0FC042316F0BA364CB + 16A58137B54A291E745B896B33C7953E817B23ABFDDC0F0098AF36D81FFD97B3 + CAC0829145B35E4ED321259B2F18CAE3A1914EFE020EA4E2402A0EA4E2402A0E + A4E2402A0EA4E2402A0EA4E2402A0EA4E2402AE5A77D1046D8EE4EA44364F341 + 1829679581FBA32F668EFB7ED59DB4FF7092A802EDEBF5A925FEE03562EC950B + 28AD319027FAC2200000000049454E44AE426082} + end> + end + item + Name = 'install' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000019149444154388DDD92B14B5B + 5118C5CF35AFC1BCC4679E97A7E2122825832274BB8B66788805057570B35051 + D0557088FE035954500A058762A76E2DE828E85415070775101D0C1849A10635 + C9EBD334DFBDE950A3A6F1A1E0E66FBADC73F871868FC183A60FB3D05B3B55E1 + F4A026FD71D8AB861ACFE489BC008176F7F2C3EC1E07F3EBC8FDF85A51F2D571 + 18F6085052B85C5D44E9DAA91684DEBE437D6CA80FC0EB406BC77CC9CDFE9BA8 + 1B681AFB04BF15990070AC9CF395ECFA52B540FD71016007C0CC2BC3F2C1B0E6 + 0040335B006012C018005B15DCCA75D168149C731894835EB8C8AB3AEBBBAA35 + 16000419635D00AE008CFA9C333BB4BF9C0E2437C1790338E7E09C43334D53DD + EA7EEEFE6E6FAC1DC844DEDB47976AEDE677F84D58B35BD21B6D8727DB877AB8 + 3E58314108A1E43D8AC5622E99C9C7FABFEC3547125BDF7A3EEF361FFDCAF712 + 9123FF4308A1AA04524A4944D9D4B9DBB9B8914232E30C12D155398B4F4DABF8 + D4B4925292A7A02C21A20411151ECACB0B3478C0180B01887BE5659E7D894C08 + A11EAF79F317F2EDEDFEF8A49D9B0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000022C49444154388DED934B4854 + 511CC6BFCF191D1F73CD71E696D3C399910C221015E52CA47C81D18041CB36E1 + C65C1604D53634A5BD18A4B6A81645109539D44697165786422AE24A16456338 + 668AA3E9DC3BA7458E7AC79A2186767DABF3F8CEEFFCBFF320D2C8EEF2E2C0E5 + 878D00C601E4CC5C12E9EC00809C8C8EBFD47F60F6B2A70E3802350080F8D7F7 + BF5D602B566177EF878CAF63FDF3EBF4C092B62EEC6AEE280450149FFB3017BD + DF6335ABE528EB1C804D71FB007C9C7FD08765EDB1C56389ECF055816437C9F1 + 5CD55FB6FBCC3548290100524AEC393B005BB1BB81E42B92ED0E5FD58E0A2D40 + 73791E00AE00F84E72CCEEF4782D152A9EA30443006E49C8910DBF45ACA8A8D8 + EAE41520BFFE14567D424938D551002A806E9277A494CD00460079D3B6F8E57C + C1CC0456261F0109D30A14428CA56CB2E0F41FE95AA83EFDE31B955100B5248B + A494311237F625E62FE43DBF5D1F9B9DE94B4D08FCBA94A6603028BDDEAD741E + 8FA7D27DA8B2A9F7C562F0DDDCEA13008D04AE1FF3175F3C575DD630B5F7C4E8 + DADA9AB21D148944100A8508214442D334335586614C4E45964A8F0FBD2C0CF4 + 4E7476DC7B834F0B2BAD86612C253DBA3E6DEAFAB4198D464D4DD34C214462C7 + 3BDC3C0BB2E6B05AF8ACFFE4C1B6B7B3B1C1FA72A55D75E6DD25999FF40C0D0F + 13005A5B5AA4CB55B219F98F22591B28CD7FEA77390649F693CCDD3EDF7BB547 + 26DBE170383370035A47B22E932FA97FF397755DCF1A9464500891C89AB64D3F + 01EA1CC9F28598C0460000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000002CD494441544889ED944B4894 + 5114C77F6766BE71464DCDD728E64C9182500A117D4A44D0F4D8886944D80312 + 66D5222A21A3368A3D4082B2072D9C4D4F6AD1225AD8C6B4458846A0122D22A4 + 08324A6A7A0D3D66E69BDB62FA6C667CCC582E3B9B7338F79CF33FFFFFE55E21 + 0DCBAF3F40EEFA3D1D4AA97611B14E5C682134F12C9D562C6955FD83A50DA094 + 4AF00B0E2022097EC101FED6FE4B94D26CC989457A13391B7DA02034F992F737 + 8E01D325B2BB5752B8F33862B5A1423F98BCDC4A2430310D208181252B8FFC6D + 47D0728B37DBF28AF76556EA14FBBA918CCC0489323CD5B87CE7D01697BAB4DC + E2B3F622B7A3A0A92D3503B1580101D82BB04B89680E4FCD453CD5090CF21B0E + 01169788F4011EE01A566D2C254034F41D2318C09A9DEF13118740372216A538 + 9F44BCE4F77037D0A0941A9B491E0071BBDD0909ADC8837D75233F4B576A5167 + DE7560077018C801DA8172A00FA10CC3A8B77D7933687F3D4670F0161891E900 + B5B5B51D26751189492196B7464995FF6BCD765B28ABE80A22CD28350E5402CF + 0197856843F6BBA783CE2777AB08BE6F36FB9367D9800E00115131278052CB1D + DF6BD6D638F6DF0DD85B5E7E0C2911D9AD6217E1D22C52BF6559F6D012A7B1AA + F7F1E77B617099FDF1B30085AEEB86DFEF372233D8D760F0CCC31701F1FAC7AC + 9EAEA1AB4BBB863F549C1ED6DB7AC7791D08AE0987C39333F5452291484F4F8F + A1EBBA613357E6CFFA28A5948848A6D379B0AEDC11EDDCE46EEBEC7BE59BF814 + 5AB67545C178EBBAB2F58559DA1D20D7ECB9DFDF8FC408E0F56E50A65CD31E5A + F21D89D05A579E635C6AAC38FAF15B78BCA2D0B9252F53BB2D22D92AEE631A18 + 78802991D7BB612A6F8B2F9A2D16E1F0F242A752CAF148446E0276F3DCF4A74E + 9EC054C2BC688039254A8ADB80A88858E39798A30798DF6727F3AC8F314847A2 + D9E21475310011919191917886530F65AE3855DDE8E8688CB6AEEBC67C69CFC7 + 7E0178B47F0A1D19B6C70000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000002B9494441545885ED975D4853 + 6118C7FFCFBB1DCF769C1FCB2F9044A6A16E063288B0A17DF895D9A62C49F242 + C8A48BAE828808F32E15EA260D82902248D41034D30A2FEA4EC4AB6242A382BE + D82893C00A8F3B676B3B5D64528667EECCF066FFDBF33CCFFFF7BEBCE73DFF43 + D0A8B4EA53E0F36C087DF163E9619FD631D06B6DE477DA20582B24D9FFD2A0D9 + 1D00D3DA4800089444F1B8C703B0554A00240012000900D5AB38C37D1182B542 + 90FDDE95C5E12EE04730FA4462C868EE84505C2EC83EEFCAE2DD0BAAE5AA3B60 + B4561875A9991EC1B6BF2AE7641F884F5637D771C86AED45CA1E67952E35D323 + 94561AA3F1AA0204FDDE008076004386027B4D76473FC8B001849E4366DB1518 + 771FA801300405EDB2CF1B880B6071B80B81577333009A89D1A021AFB42EA7E3 + FABF107A0ED96D57915CB2AF8E311A04D02CFBBC330BB7CE46F307E5E6E6C264 + 326D5CA04F02677741B41E2E57F486FB00DA25DF8B698443305AEC91E0C21B16 + FAFA194271793D4077281C720BAF9FCE859F4F22222DAB9A4B92042A2A2A82D9 + 6C8EA815F23C3FB5F7F89996E95061D97230F200400780C74414511485016800 + 709BD751D311D347CFB391BE5159965CD1562F8A225B03989D9D55D48A83A1D0 + D4CCFBEF2DE7A73F947D93C293004E13D1A4A2288D00068C1C355DAECEF3384B + 3246394E1FD5DCE17090288A6CD3F74012C7B90E169AC7AE3558E653799D13C0 + C0EAA301A39E5C3DB5F9F38DB6ACB1CD98FFA998221963ACA1D29236DEEFB41C + 3BF7E8DDD125297C2F996327BA6BF3BD4EEB8E71C658FDFA9ECE4B5D7F85A6DE + 9EEE087E05AAD8015621EA2B2DE91337DDBBDC37E63ED9DAECD9DCA182F40922 + AA8B7516006CFA0CAC97A2284F14456925A21122AA89D5F8F719D09C8A574DDF + 12518AD619409C1FA378CDE306D80A2500B61D60ED2D70381CF1FE6569039024 + 09A2286ECB4E040251E3C2FFD74FE40CD1EADE2FCA890000000049454E44AE42 + 6082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000003D6494441545885ED975F6C53 + 551CC7BFBF736FFFDD76ED5A77BBB52CD03F0BCDE604DACC4008DAB131D414E7 + 8B801331B225F8FFDFCC24223C2CD499C5840E713C9A108C994882B12B1B09CE + 40464C3476C47FF14D468C6DC06DDA65CCC9DAE383EB70BAAD77EB35E3A19F97 + FBEFFCBEE793736FCEB987A0024CB2C0167A69F6FAD78F8FA811FB77B62A213A + 09A69AD03A534DA8DF54135223F276B68A5956026D57310F808A82049A73540B + 3547F07FA120982F05C17C2908E64B41305F0A82F922E66CC10494EC3C0CBD6B + 3D327F4EE2C6076FE0D68DE12577A473AD47C9CEC3202660E2DB018C9D3BAEA8 + 2EE7088A163B4CFE074DA2D5715E5BEAB9B76CFF09689DBE25C9E92B36A2B439 + 02CD5DE5FB459BA3DB127C5C71ADD2573C01601884F382D1B6D1DEDC0DED9A7B + 94C9DD5D0B79EF3B601AE91910BD078E2FC115FBE5169C1E4B2035D8C3013C0D + 8ED360D4CF8CC64DF67D5DD0AD59B768ADA1BA16F6A63048A3791E0CEF82F316 + 002747A35DEA0902C0686F177E1FECE11C7816C0878CA85FD04B9BEDCD116817 + 903454D7426E0A8344F145C658041C4F013835128D2075F923C582A22CCB282A + 2ACADDF2874F61D0DDE27FF81A5E489BCB3204EA633A2954D6DC3538F249E79C + A652F556C84D4700417C85883AC1F993E2E8D51EEDF77D6089AF207B3C8AE426 + 2727411E8F07B22C1F05B061B1C69C7310D1359BABF2B991C01337AF73D33100 + FB00ECE099E94BC4C420117DCE39673C3D0D12C45610DE06C7DE559991D3862F + DEF78C5FFFB91B804E911D7025954AB566A7990D7EBF3F1808047256399DCED5 + 0E9F2FD47E79ECE56F9237D30062C4C48781DB9F3E09621B803038F6DCEF329F + 69AB7178BF733F7A717C7CDCA1C42C1E8F63686808C03FE6C140208096961625 + F5C1743A1D3D566C697CAD6FB835FECB441A4014C0D199E70700B403786C9BD7 + 7C36DCB0BAA2C4A4FFACCABD4B915C96ACE0B256124110B696171B7A2321B731 + E034B671CE4F10D1A199C7ED9CF3DDDBBC96B31DDB5D6B4B4CFA01222A5F4E3F + 8092956401186341A759178B84DC3B5A7B7F3AF07562220DC2ABC4B1ABA1A238 + DAF180CB6795341788C8395FFDC1370FFD67FBD7F1563803CCDD16E6B51633C6 + EE5B65D1C78E3FE22DDAE2321F6444FEC62A5BB4F32177A555D20C2C24B71496 + 3D825988688BDDA43DD7DDE80D5DFB6DEA47B74D5FA517D905222A5DACAEBEAE + 4ED17A92B7E08CE466A356E8ABB44BAF03384344F65C35F5F575F346FDFB862A + 820040449B005C522B2FCB1DFF3F5810CC978260BEDCF182B3D34C2C16433C1E + 5F4997591289C4EC7956F0643299BC984C2657C6687EAE020059AD564892B4C2 + 2EF3333535B5D20AB9F90B8C7DFF181E5BB7B00000000049454E44AE426082} + end> + end + item + Name = 'uninstall' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000019749444154388DA5924F4B1B + 5114C57F6F66164D86B14E561A629C243520D988D03C423E4436D915A4D055B7 + 16A41A30B6821F40A4BB0A225976518A3B839FC0A5B810FC5310AD69A3327591 + 64DEC48D4A1C47257856EF9D7BDFB987731F84E0637C9846B1E0348A85AD46B1 + E07C7146C3DA00D083C4743CCE7CCA49037521C404507A3B60FD8AE9FAF9D6C5 + 25DD40BFD67BA98E26F89C4C64803AB074432F01F50FC34399E54CEAFE835E07 + A5588CC5746A4C68DA26B0087C1742548112E00A215673A6B971D1E934B7FF5F + DD0918B707CBD0019240F5B4DD5E6B7A1E39D3E477AB45DBF757DF44220A480E + E8C65EAF833B819FFF9A8C47A3F557BAC6B7E313BEA61D72A6C9B9E7F16E6797 + 4F23893580F5B33342055CA5A81C1E053305E04FA7C3CCFE41682D9849DF30B2 + D9EC7D454DC3B22C5E4723A03C4CDB269FCFE3BA2E4AA98702B66DFB41B256AB + 2D8C74BBB8EFA7BA93CB2BF33F06072997CB0BA116A494BE7A047F8B05A594F2 + 1EAB4B29FDBE33989DAB303B57016E3EE5530EBC56CB7BCE81F1D4346118E239 + 472F5EA390523ED8423FB806B64DDAC05EBD899A0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000020F49444154388DAD943D6853 + 5114C77FE7F9621293169F3631814AB5444A9A4220D53E71110C5A78437410EA + A27340829B3807B43AE9E6A04E0E22A21491584BD28214A91992A95408269B59 + 4C6A533B4869AE431B3F9AAFA2F94F97FB3FE777EFB9DC738436F2DA6CCC8C85 + 3871C0390EDC05A63ED66AD5A9E51536EAF57669685D6027813911890269B3BF + FFF0F3501097D632AD3530E0B0930E8D12703A268039A0B8636D01990977DFC0 + EC6810AFAE7707061C0E5E8D05F1391DA745E41DF002B8B9639F077E88C8FC48 + 9FDBFB3214C463B375064E1F3F866FBFE38C68DA2CF04CA1E240E3C1BE011710 + 3644D332232ED7915B83839D81FB048030F014D4F56C6D5DFDE92FD56A6BA026 + 812FC0902E5D4A7E53A922F010A512AFBF5654A2F01991ED2C11E1CAF20A4B6B + EB35949ADC522AFB7675B509D8E28CDF3A6AB7933F357E165800B481C50F9DC2 + 9B6FD80BF51CA80F0F0FB737AB15500A444029DC6E375EAFB733D0E3F1CCEFDE + 141162B1D8BD443CFEA9FEE0BE6F339356F6ABD7864A339749269397B2D9ECC5 + 7640314DB36E5996F2FBFD7F199665E1F7FBD9CCE7F97E2381F17E510192CBE5 + C8E7F34DA072B94C2A9512BD911C89443A96D2502412F9155B2C6E77A56118AA + 542A492A95A27543EE518F1E3F01201A3DC721C300E80ED4C3617530B3D0D29B + BE73BBB1945C2EB737A0689AD0615CED56EFFF2140A150F86F508321A669B69F + E7FFA09F102C9A28B7781A490000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000002D8494441544889BD94BD4F93 + 5114C67FE7B6252082C644D20A62D5442321212E6F40349ABA49357E30F93DC8 + E0E0A083C6303008E81FE0026E9A542202434D5C84E86034C680898A51E3570C + 837C24D880054A7B1CFAB634B4F4ADC6F82CEFB9F73EE73EF73CF79E5770C039 + 9F97EB5B36031C005A80E3130B0BD1236F46791F8D3AA563F22DB6F8BC746CF6 + 0304057A8143C0C0FAA2A25503B5356C2B29711470ADB47065838F56BF1F63E4 + 20700FF0D807F203F5A5C6F405D7AD8BBD8A44F81E8B155E8100ED9BAAB854BD + 11410FDB9B0F03376DCA5981BD88842B3C9ED250CD76769797152620C035FF26 + 5A2A2B1191A362CC5DE02549FF7FDAB490C219A0518C844BDC9ED577766C674F + 79B9B34085C7438BD78B20C7C49810F002680222993C55ED014E21D2688C7950 + EA72975DACDC509845762501E019D0B4A81A199DFD8588A4AB7C3D3B0BAABDC0 + 71602BB031E7EECB0566E271C616E6012EA0DA144B2466CE7FF8C8E39FD319EA + C2E5CF5F18989C4255FB50DD018CAEF464DD9983D94482236FDFB177ED9A04F0 + EB53748EA791083BCB56A3AA297B584C28E73F7C64687A9A229199854482DE89 + 496701806FF3F3DCFE319E45141154356D551CE8199F58C99934F236DABF40C1 + 029916FD09DCD5D5D57909D1681434F97A94E4578CC1292F2DE0F3F9DA52274B + F9ABAA1863A8AAAA7ADCDCDCFCA41E454221D5A9495C7575DCEEBCC1C3E7CF09 + 87C36D31FB37B13C3F75676EA00D4044520744445455A5A1A1E1743018FC5A2C + 42746CCC3FD7775F4BAFB60ED678BD54D6D6D2DFDFBF2F332747AC589615EFEE + EE8E2F3A60E656F7E2C4AE7A275A1A5D5D5D71CBB2E26E49D6A5B6B2D8256A56 + 6C0FEDE92CDEA347838A24E7F70702295E761FE4859D940B834343E9787F20B0 + 74C99AF1EEF2C5C5A7CF507CE264EA9966F13A3BDA97CF27050AB6C8E5428D49 + CFAFC85B8A81FFD0C9055B942B76E025054444868787332BCCD934CB6327DEC8 + C80800625956FC6FCB2F04BF01F6EFB00456BAA9BD0000000049454E44AE4260 + 82} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000002A5494441545885ED963F4C13 + 6118C69FEF2B69697AB59C912257DA52286570C3C8D0485C5C5CA443717130BA + 41A20B1328D020D48415273584907464318638502221C1DDB6C4A15D88696A62 + 6CB1B9DE9F5EEF1C308DD548EFAED5268667BCBCEFFBFCF2DCFB7D771698D483 + CB7D98F57A11E8B6E1FDB7B2D931B098699AE6FA111F0AF88376FBF6F51ED73E + 63B19CBC2B9DFC1B8069AE1FCB81C141007B8490310093D72E385F33164BC90C + 043552FCE8D47C08C01E80B51F8FD700ECCD78B8C053BFCFD840184860C93780 + D9818161426912C033002F08214B006E03A80078759561DEF86CD6E2DB62099A + CEB95D7A8A627E2FA63D5C9012BA0B60B920CB1B5F1505571C0E1C4B1264557D + 19B4DB6B84D2E4549FFB262134FB309B83AA6376D3C462833ECC783C214A6812 + 40AC20CB1B9154069F24090050541444521964056103408C129A9C72F786D647 + 8675BD8E336B16FD3ECC70DC28216417C04241923723A90C72A2D850F7B95A3D + 85A8089B00160821BB77DCEED1E723C1D600A6DCBDDD84901D00730549DA8AA4 + 7F376F80486790AD54B6A0610EC04ED47DA9BB25809C20889AA64E1444313199 + 3EFAA37923C411B2954A4253B5899CD0A4014D96F0EED1470CDB6CF97CB58A2F + 8AD26C561DE2562A0D9FD59A3F96E5A6F56702F0AA8A0F82A0CBF867956A3594 + 74F619BD37DAAE73808E0374711C0786617437504AE1743AE172D801458183BD + 88F1F17194CB65D46A3543E6A228A28B6118B02CABE7DAAE2B9148C4BC9A86F2 + FD7B185B5F5FDC76F5201A8DC60CB903E0799E925028049665D5C3C343BD1FB0 + BA8A372608BB7FA00220467BC3E130E1799E767E07FEB6C1FCE3270DE9C45757 + 1A12FBFF1388AFAEFCBA5B0D89743C819600D8FD030D264E40DB00DAA173808E + 03D48F61381C6E69994C0388A2089EE73B928460E277AFEDFA0E2515F10611D7 + 329C0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000037A494441545885EDD64F4C9B + 751CC7F1F7F76981F884875278DAB1C364C68D6E4B48D63A43969860A86E8A6B + 8B8947C741D4EDE2416FD39D883A7751E369C1648A31BA9D3C2817952E8BC603 + 8732B3D24060C245E94A44C65C1FFA14F979584BC095D07F5A12F99C9E3FBFDF + F7F77A9E5F9EE7F713AA100770AEFD61BC7575CC58161FFDFA5B35CA02E0ACB4 + 8003F8D8D741C86C750367405DF4D6D7ABF3B37315E3F2F5AB816B01BE1591D3 + C0BE638DC6372EA7534597966A07DC806B05BE031E11918780FD08BE6386F175 + 35905A399D7411863A0E12325B4DE07B40012FE76E3F0D8481CB67F6B66917F6 + B757344D2503754DE3CA211FA75ADC9E1C2E9B432DE69AC480A780E710197EA9 + 6D8FE3D28147CB469604D4358D2F8FF8E86A767935876314C8002752B6FDC7C6 + 7629DBBE91439ED434EDB3B0D7745CEA385016B268A0AE695C3D7C88E34DAE3D + 9AA645817BC089E9B4B5D43F39858800202244E213DCB6ED9F812022414DB4CF + 23A6E91C2A03591450D734AE1E394C97ABA94D44A2C01D5027A7D3E93B7DF109 + 52767653FB196B85BEFBC89B4010785244BE0899A673C877B024E4B6C00691FB + B82663AF885C03169552CF4CA7ADE5483C412A9B2DD86F0372422982C0132272 + 25D46AD60DF93AAA07F4D6D7D3E56A3272B89452EAD919CBBA1B892758D802B7 + 09797382949D4928A57A80E3220C87CC96EA01579502B88B52EFA154EF74DAFA + B318DC3A726585BE7882DBB63DA994EA41A94F5655D1BEED97BA79DBE6DCAD5F + 38D5DCFCE9BDB5BF787D768E85EC6AF123E490CFC7135C686F9F720A5397530B + 45F7959246DA22FB1A1A187FFCB16EE01AA0993FFE548DB240992BC97F995D60 + A5D905569A1D0F747A3C1E0CC3A8ACC8E2EF9BCE1B1B1BF17ABD15D504B02C0B + A76118783C9EF781A3A5161011C2E1F0C5D7CE9E9D5CFBF083B66C749486174F + B7CF7EF5028383837D636363910A7C37969797DFC8AF2447FD7E7F77201028B9 + 4A6F6F6FB7EE72910D47C84647D15F79F5960ED2DFDF4F67676759B2582CC6F8 + F838B061A90B04020C0C0C9455B050028100E53C703E79E0CEFF486A35F09B6F + 9D7F601FF0EE3B6FAFF18FFDC1EE1BDC2AC19E9EA27685B503067B0A5D7E60DA + 77FC14570D58E7F7E3BEFE83A24A9BE07CFE3F6FF0DFCA2EB0D2EC78E0FA7F70 + 646484582C564BCB7AE6E7E7D78FF3C0E16432793D994CD64654387300E276BB + D175BDC696C2C96432B5266C9FBF0133981FE63A1D38F80000000049454E44AE + 426082} + end> + end + item + Name = 'button-help' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000002E349444154388D6D935D6853 + 7718C67FFF73F2614FBE1AEC1756251B6D196EEA36B2D19B8E750C192B5E0E32 + CBA8422FDDAE76E30643866086DE0D418637636D163AD8C53E9C53EB70131A4B + D6981645AB81349DD08FCC9CC6D8B4CD39E7DD456B68589FCBE7799FE7FFBE2F + FF57B1057FF428E1F74FEABA118C811A04A228C20825200D32EA6CAC25CD6BDF + D8E55B491001400184073E21D477AC0748F6EE0F1EFEE8B556A29D01C24D2E4A + 558BF4E3A77C975926552867815825F3DB6C71ECCBCD10FF1B47897C95EAE93A + 777B7134B3605B9665EF04CBB2ECD1CC82DD75EEF662249EEA09BD730200BD7D + F86B5D73EFBA7AE648E4C5D8A1560019B9B3AC3EFE3947FCE63C97EF3F61B7E1 + A2BBC5E095761F6D3EB7319E33FB76ED3F78A9F2F7AF42249E1A8C25EED55F9E + 2CACD8472E65EDBB0B4FEDB58D9A3D9137EDDE0B53F664C1AC77124BDCB323F1 + D460B07F08BDF9DDE1F8A9B7F77675B71800EC097AF8E0600B1D010FBAA6E80C + 79B11C617A6195B75E08A194C2E7D1B8FCA0D4248E9DD08068B433C0767874F5 + 7CC10A504B951A7E8F56D7A39D015044755F331A4A85C34DAE8600A51422224F + 566BF2D9EF79B9FEC8E4C3C3AD757DB35E85013444CC52D562270CFD308BE1D6 + F865E8006D7E4F9D2F552D1031114103D2E9C795FF999552727FB9AA3EEFDF27 + 016F63875BF569677D154D84C4486609D9FA59DB331E7E1A15A594DA4E8A0823 + 992504126BF93B6852AB26270AE5ECD84CB1C17D2367D27D3EAD6EE4CC067E6C + A6C844A19CC5B193CFA6AEA08BB5E134F5F4FE7133BF126BF3B98D97DB0C9452 + 04BC3A6FEE0B70A8C387E1D11111C6668A7C717DAEE80803E5BFBE5F5E9DBE86 + BE3E7F17D7EEBDFFBADABB7E1ACF997D93FF543A7C1E8D3D412F2FB51AAC590E + 7FE657383D3ECFB7538B594718A8CEA6668B3F9E05C7D93C269446A87F8850FF + 715D737B63C00ED7C8A83876B27C2B6997AE5E04ABB669DD3E9F1E6AC7FFFA7B + 7823AFA2FB9BB764C1A956589F9BA692B982559C6FD8C97F38F86521099944DE + 0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000003DE49444154388D75945D6C53 + 651CC67FFF734EBB76A5EBC6BE815164EB3A24D1391D44B83030378C269AF881 + 5E80CCC4A8371A4362D444A33212BC504248F4C2C4044112D10CFC080C22C998 + 713A8C62748331C818631FD9B276EDBAAE3D5D4FCFEBC5B686A5F3B97CDFE779 + F2BECFFF9F475882A6E37B642FBE9D2F210E679D20AD40134200C8471101FA80 + 734AA963B6190F47CE7F46FCF2F7DC0D0110A79BB2D64F706F6CF0811C46645F + 7D85479A6A0A0994B8F0387422498BDEC9393A06228CCEA4E68003A00EC7FFB9 + 68874E7D087666D150D3297FF928EEEA07FD282E5417BB036DCD7EB656795909 + 195BD1DE17E250D72831D3FA09783EFE77472A74EA230074DF8E7D781B9FF401 + 5DDBFC0581AF7707B967B56B49AC6E8492321C4D916708F90E1D4D84CDE51E5A + 02455C1C8C06E3A94CC05919684F8747484F0C22EBDBBAD01C795F5617BB5BCF + ECD984C7A903D03D1CE3DD0BB7198FCDCB52368FD516A9832D7E7C2E038081A9 + 044F9FECC74CDBAD562C7462F4E3A7D0C4700645E4C5B6667FD66C2C96E295D3 + 3769AE29E4B7D7EE53D7DE6C50275F08AA9BE124FBCFDECA7E3F589ACFAB5B2A + 010EE805C586BB6E3B9A88B4DE5FE1D1EECE6C6D411EC77707796F471565AB9C + 380D8D2DEBBC1C7962235D4331B91335B3DC7D0D65E419DA7A411E75D734A201 + 4D4D358539E137ACF1DCBD0902C886C56C43092BCBF3B90C1AD779019A1C657E + 34446A0325AE1C4311C939FBF6DF295C86A89AD5CBF98112178804D00C0C20DF + E3D073C44B504AA9B1D83C073B47E81C8C72B0C54FC1E25096B0A0571E010C94 + 8A449256C94A6622C26C2AC33327FBD9B8DAC5E93D9BD85CEEC9E14592162822 + 4A2934A0AF6F72EE7F5F383095209CB0E4AB676BD54A66008BFA5EEC0C1A70AE + 632042C6562B922BBD4EDED8B64639F4DC4C01862326BD1309013AE62707D194 + 52C746665273ED57432B0A4CCB666B959750C25AD1F1E8EFE3D84AF528A5FE4C + F677A3D9E66C183870E8D22843D3668EE08B3F26D8736A407E199AC9B93B7B7D + 9A1FAE4D6780FDE9F028E6AD2BE8B6394BFEA6ED3D294B3DF0F36034B8DD5F40 + 89C7911515B917F6ECA1B5AB28741BCBCCDEEA18C252EA6D50DF4D7DF3015678 + 047D7EEC3A46E906E5ACA83E134F6502ED57C39B3336D495BA71191A6B0AF2B8 + B72C3F6B763B62D2D6798723DDE319CB56EF0087A3974E10BF7C0658EC43349D + 92E7DEC753BF0B11D90BB4E5195A55E33A6F4E1FF64D24C456AA07D8AFA067E6 + D271A2E73FCFBE7C59D09EFA5D143EFE3A86B7D81091666027508B641BBB9785 + C6FE2B1D1E65FAC74F316FF42CCB357772860377EDC3B86B1A7194FA41D71104 + 8542A5E7494F0D93BCFE2BE6E01550768EFC3F3CF88C34236EAC3F0000000049 + 454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000050C4944415448897D955B6C54 + 551885BFFF9C99332D33537AB337675AA188564B0C5A6CD53E7803D348490443 + 7C203E888009488C86E88B241AC1441F342A112F892FDE88F8608AF142141214 + 8482552EED80B4A0D8D232B4C3B4D333F7F3FBD04EEFB89ED6397BEDB5F75EE7 + 3FFF16A6403CF3285CF10CFEA6D58861E68BC82AA01568400800161041090107 + 55F54BA02B1B1B6268DFDBD87FEE67262447DC653751F6E41BB84B822622EB81 + ED225255EE73EBD22A1F81F916966910896708856D4EF7DB92CA3A59A00DD8A6 + AADDA37FFCC0D5BD3B209B9EBE80BB6C01151BDFC3F09514097C063CD2545DC0 + E6A64A1A837E358459B86A6764CFC9301FB7F73392CCC680A781AFECAE5FB8F2 + E94B90CD00608AC74BC5A65D9845154522FC9CE7329A5F5D5EC3CB0F06A92ECC + 4300190753B8D7325916F0E963B797CA9901DBEA1D49AD06FA5C37043B0C8F97 + C4B9DFC616287EF459E6DD72AF29C2DE3CD368FEE0B145DAB2B84873868EC2D1 + 4B23F2FDB908EDFFC664D0CE50E11F8B0BC0EF71C9CA5B8BE9BC12978B91448B + 20873CC1DBFE4E9C3F46367A05A9D9F10B62BA3602EFEF7CE426D62E29D55C0C + 97A229D9DAD6CDA9FED169F194CC73F3DA8A1A962F2A9CD08EA61C567FD625DD + 83F10BA8D6C77B4E24063EDA828161E603DB9BAA0B58BBA494DCCE931995F55F + 9FA37738C55B2B17F2C7D6A59C79EE2EFDFC895BA92EF4B0B5AD9B3F2F8FCA64 + 6406AF3E5C8D882C446463DE823B7195043044A45544AA36375532EE3D5655A6 + B0E9EE4A76ADAA65555D097E8F0B8F4BA431E8E793C76FA638DFCD07C7FAA79D + AC31E8A7E1469F021B3044F2EB9A3180D6729F5B1B837ECD01C010744D7D892E + 0BF85055C65FA3AAF82C937BAAFD74856DA6CE0174555D31C06D20B556452D06 + D0B0B4CA87217357CB5C1C4486E219BC96396BAC21E01FAB7FA1C1F416612012 + 08CCB76617FA24A6EE1047953D27C3FAEBDFC3B26251E12CF1A49704005C8095 + 2BB9A9465379EE39148EF3CA4FFFE8F1DE18CD3505BAA9B1729A4C5575DC4B50 + B5C61650BD762D9E299D3CFE98702A07E8194AB0F68B107ECB64E78A1AD6D497 + 4EC43A754EC49E6813D7407101A150D86EFEBF8C44849FBAA3D8A92CFB9FAAD7 + 0ABF95339DA53D1BB673348482011C3C3560CBA09D99A3E34C2299711081729F + FBFF641CE88902D8AADA9E890E60A8EA9E54C6C9EE39199E567233F9967B2AF5 + AF171AE61CCBF1E164866F3A0761ACC38E242E7460009D40DB47ED030CC4D2D7 + 2DCDDD47FBE5DDC37DD2D137F9F7CED4ED3A72994822EB28FAA6934E103FFB1B + 46363684C2B6916426F6FCB73D2433CE9C47DF7DF432EF1CEEA3A32F76BD68E4 + 93130382EA874047ECF7EFD0E4286666388CB7FE81888874F78EA456775E89CB + 43B585B8CDE99FC46B99726F4D017707FD9479DD3AD37C6B5B372947DB8175CE + 68341DFEF445349DC44C0FF4E02E0D6255D676825CBE1849B6EC3F7FCD5C5C9A + 2F81F99E8918EEA8F4B1B4CAABE57E6B22A2916456DEFAB54F761CB824A9ACB6 + 03ADAA4E34FCE576D27D7F01B92BD37453B6EE75F2EB9A11B81FF85844162EBB + D1A7AD75C53404FCB92B5323F18C84C236077BA27CD33948249175C663D9A6EA + D8835FEF24767CDFC4E92673305D14B56CA1E0BEB580E4216C126403503767E8 + 828DD2A6F0266887331AE5EADE1DC4BB0ECD90CD8055BD84C296CDE4D72C01C3 + 14515D8448031040B05022400838A668CC4927889DF88EE88FBB71ECE139F671 + 1DB84A82E4D7DD87555E8BE99BDDD4D283BD24FF394DFCEC1134393A87C318FE + 03D1B45DC94CDA63250000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000631494441545885CD975B6C14 + D719C77F67D67BF57D0D9BF53AF8B2C6C40623B06BF2509C0454A1AA24A618DA + 8A26ED1B6A13B5859762A12A7968A8541290AAD236B402554DA216A9B5B01353 + A25ED204993A20438CB9D80A5E8C5DF0AE6DECF57AD7DE5DEFECCCE9C3DA86F5 + 6DD77DEA5F9A8799F39DFFFF3FDF7CE73B73046942C9B2632DFF12A6A24A32EC + 2E84C1383F26758DF8840FD5D747A4AF132D389A2E2D225580B5723B39F507B0 + 94D716096168045E00AA0117021B9230E0056E039740B644076E0E053F6B267C + F39F20E5FF66C0F85419058D47B1946EA901DE1042346C586355EA4B72A87258 + 29CC3661352A44541D5F2846EF6884CB8341EE8E457429651B706CC6D7D7357E + FE38B10777566720B3F6450A1A9B2C8AD1FCB622C46B0D5576E5E036271B1DB6 + 5409A36734CCD9CE61DA7AFDBA2EE5695DD79A021FBD130DB6FF313D0339CFBD + 4CFEEE432E21B8E0B65BB69CD85DC6D6C2AC94C20B71C337C5918BF7E9F747BB + A5E4A560FB9FBC13174F2D8A333C799359FB22057B9B5C42D0BEC39D57F9EE37 + 37509C675952603AA6118C6A180D421A14B1E8459CD926F657AFA1F751C43918 + 88EE33176F6E969A1A9A19E84E8A9B9F6874945178E80F1625C3DCB1C39DB7E5 + B77BD7633424F38E4DAB9CE91CE6A32F26F0866202C020909B9ECAE41B9B0BF8 + 56F55A99614836A36A92575B3D7CDA1FE896BAF6E5E1333F8CCEDCEF5A6CC0F9 + EAEFB0946E39E5B65B7FD0FADD2A324D49C9A1DB37CDF75AFA783AD7CC77B63A + D8ECB461331A78341DA36330C47B5DA314E59838B3AF827C6BC6A26CED7DBF87 + 7E7FF437B1478387BCBF7805F4F8E3006BE5764A8F5FA971BF7555BDFE70525B + 88D15054ABFBD575EDA7FFB8AFA9F1F8A2714DD334FFF48CB6FFFDDBDA2BE77A + B4787C71D0F587939AFBADAB6AE9F12B3559CF7E7D5E5B01C8A93F00F07A4395 + 5D59AAE002D138BBD6E7F1939DEB58E27303906BC9E0D77BCAE9F24EF3EFC1E0 + A2A0AD85593454D915E0F5ECED071E1B50B2F2B1B86B5D42883D07B73997242F + B75B39B6AB04450831FBD996BC1C5926B1B33C974FFA2797E439B8CD8910628F + C951EA323ACB1306ACE57508C5D058B1C6A2A45AE752A6686BC0BA5C332353EA + 92631B1D362A0A2C8A10A2D15AF16CC280A9A81260477D49EE8AC46299D42FC4 + 585825D7625876BCBE341760C7AC2E4A86DD05B069A3C39A96C04A59988CC6E5 + C79E00DB8B73969D3FABB32923DF9530200C4610B80AB34D29C557CA823FACCA + D75A3D14E799F9EA86FC654DCEEAB8444662375566A96D56A392D2C01C9ECC82 + AAE9F2DDCF47E4AEDFDF469770665F054B75C639588D0A08315F6C19B38C9168 + 5C4FABE10B2198D31F9C88CAEFB77A0846358EBEB08EFDD5055249512C115507 + 2923F306A4AE010C7983B167D231F004E4E10BFD94DB2D9CF85A19B644E74C59 + A9BE500C6088842E4A7CC20B70A77734B2C2B46408210844E2DC1E098B23CF3F + 3D279E166675EEA87E6FC280EAF3005CBA3C184C9B046046D301B0ADA2760066 + 752EA9C39E8481C8BD6B4849CBDDB1B0DE3B1A4E9B28BDAE908CDED13077C7C2 + 3AD012E9EB4C18D00223CCFCE7D690945C38DB399C369923CB84E7C775D29195 + 7AF9CEE16CE7305272419DF00EC51EF6240C00043BFE0CF0E687BD7EBDDB3795 + 36E16AD0ED9BE2C35EBF0EBC19EAF8CBFC7305207CF363667C7D5DBA94A78F5C + 1C603AA6A5243CD5E1A5E2E43571AAC39B32763AA671E4E200BA94A7E393235D + A12BE7930D2075C65B8EA3EB5AD33D7FA4FB705B3FAA9672DF490BAA2639DCD6 + CF3D7FA45B4AD934FEC149A43A333F9E544BD9CFBF8C7DF78F5C02D1BED39D57 + FACB06F7A23FA3D5603AA671B8AD9F4FFA030352CAE7262F9FF306FE9AFC639A + C41E1BBC8562CE0C994BAA9B072666BEF2774FC0B9D969C399C63EB110377C53 + 1C3CEFE173EF54B744EE9ABEF137AFBFF504909CD945AF17EDBB8A8CAB218BBB + F6BD89A896DB7C6BBC6E60222A8AF3CCACCD342E0C5F849ED1303FFFF4013FFB + D703DD1F56DF91527E7BF2F2B9097FEBDB4B9E92965DCEE6B21A0AF61DC5B4B6 + A406780341C3336B6C294F465F8C8575246DC0B1F8E448D7F8072789F4B42F6B + 78E57EA218C8AA7B899CFA03181D654502D2381BD2A2FA8786829F353375E57C + 52C1ADDEC013301656605D5FF7F874AC1813B325203554BF1775D843C4736DC5 + B3E0FF1DFE0B6C26DD22171F283E0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000008A8494441545885DD987B70D4 + D515C73FE7B79BDDCD269BC726212424841888011A14D4220F83B6A588A368A7 + 58198B743A8E32857670E81FCED887ED8CD36AADC3D4226305ADD2A12868AD1A + 948EB4D6A005411E12A821C62018F2DA64F3DA6776F777FAC726016137D944FF + EA7766777EF3DB7BCFF9ECBDF79C7BEF112622C3826D4A15F6929958F34A301C + 2E101040897F99815E22DD2D84CF9D24D2F6C984DC40DC66CA72545E4FE6DC65 + 38672F416C4EB7C012600E301DC84170A0F8010FD0081C51F88F19E80D054EBD + CBC0A1D719FCFCD4570FE8A89C4FEECDEBB115CDB08BC8DD083F106431601802 + 53B26C9AE3B062B71A0422261E7F048F3F22008A06516A81E754F51FA1E6A3F4 + ECDD9232E8A88086331BF7771F2263568D21226B819F89487185DBA1B7CD74B3 + B02C8BD9939CD8ADC6657DFBC3518E9EF75377A68F3DA7BD7407A2A2AAC78007 + 55755FFF07AFD2FBE61FD1C1E0C4006DC55514AC790C6B4EE10C811D2272EDF5 + A52EFDF18222E697BA10497D754462CA1B1F77F3D4C136CEF68651D5BFAAEABA + C18EE601CFF607897A5BC607689F7615853FDC846173AE40F84B9E332DF357DF + 9ACAF2CADC71815DAAC1A8C99F0EB5B3F9602BD19836A9725BCCD7DDD8F1CC3A + 229EB3A901DA8AAB98BC760B86DDB90661DBDCA24CCBE615154C76D9260C76A9 + 8E9CF7B1FEB5263CFE4817B02CDADF7DBCEDA97B89F5B58F0E6838B329DAB09D + B4ACC21518BC7CC3B46CCB96DB2B70A659123A8A99AA875B06E468AB8FF68108 + 1153C9735A9959E0E48669596439AC4921CFF68458B3BB9196BE70872A8BC36D + A79BDBB7DC07D1C1E48005F73C8A73F68D950287E71667666EFF5E6552B83D0D + 5E7E57D7C2F9FE41112037DDAA6916C11B88123155EC56D1BBE614B071D11432 + ED896D347B43DCB5B3016F207242D105FDEFBD18EAA9FD436240C78CEB29BC77 + 9321C8C13C67DA35AFAF9995705A55551F7DB7459EFDB043AA0B9DBA767E118B + CBB24620A2A672B2DDCFAEFA2E5E39D9C5D41C3B2FDC7925C559899748DD993E + EE7DE513315537692CFAD3D627D710E9681EF97DE4AF15ACFE0D5657FE5A11B9 + EFB1E5D3985B9C99D0E08EE31ED9F47EABAC99374937AFA8A0323F1DDB4569C6 + 1061B2CBC637A7E7B060AA8B5DF55DFCFB4C1F2BABF3D5625C1E6165B90EBA03 + 114EB4FBAF13C3F8BB252BBF337062DF057BC3A3672B9E61077E3EBFD4A5CB2B + 7313C299AABAABBE8B9AF22CFDC54DA5588CD123FADA12174FDC524E8327283B + 3FF2246DBC71F114721C560BF0B073560DD6FCB22F0266CC5D8620778B48F14F + 1614254D258688BCFCFD2A1E5F5E9E72BAB9A9228779C519FAF2C9AEA46DB21D + 56D6CC9B840877805464CC5D7611A0612163F612807B2ADC0E9D5FEA1AD5A1CD + 62E04EB7427CFDA6F4B9615A360D9D4142515393D95D755501868888B03A63CE + 372E00DAA65461D8D3DD2252736B95FB4B25E264CA735A51105F3896D47861A6 + 8DAF97B800EE482B28C3C874C701ED253301A9018C456559293914115435E968 + 5CAAEE40140175D92DA3F65954960522D582B8ED255571406B5E09C01C436076 + A133559F294B55F55F9FF63273523A76EBE85135A7280389C745B535AF340E68 + A4BB00A61767D934D1A9640CDF638EE2CE8F3CD4770464F5D593C634382DD73E + FC5861A4C7D35C7C2F12727247D9961249446434BE70D4D4A73F6863F3C1366E + 2CCFD695D5F9CA18C7BB8B187265A8A975A887C336BED11B865455452E8A2C55 + D5BD8D3D3C5E779E737D61F9CEEC3C7D646919460AD1373283228EE177716425 + 108A98E306E49211E90E44F481DA660E9C1B902BF3D375FB9D95BA30C5C00308 + 0C33A8FA47008726C9E3F147260238644FD554B8FF6F4D34760579646999DE99 + 646B1B4D5D1718BA347EFDC230FDBD008D9DFE880C84A3E3861B9EB9A3AD3E3E + 6AF7CBAF974E65D555058C170EE0536F68F8B1D1F4F7C50123DD9F031C893BF1 + 27EC9882B4A52F7E8EBB764AE243462A3ADAEA43D130503FC485113E770AE080 + AA06EBCEF44DC8B088883914D11318B811D59DE903E5A0A2C1C1381746A4ED13 + 6281FE2050BBA7C14B3496F206F195EAB42740832728C0EEC19606CC902F0E08 + 1038F90EAAFAE7AE40545E6FE89E90839AF26C76DC75A51664A44DA8FF73473A + 50D4AFAA2F064EBD3BF2DE0018F8B01684BDAA7AECA9036D0C46C79F720A32D2 + 985FEA4A78471E4BCDDE10AFFDD70BCA5635635EDFB1B7467EB300C4FA3A715C + 318FB4DCE2E6BE70EC1EAB4518EBD875A98EB7FA38DB1B261C35713B531F4553 + 950DB5CD9CED09F580AEF21D7B2BE03F7A092040A4F32C99D7AD6806661C39EF + AB5E38358BA224F788445AB5B381178E764A2062B27446E21379226D3DDCC14B + 27BA04D8604607DFF3EC78081D5A7F3034C500839F9FA2FF835751747D24A64D + EB5E6BE26C6F2891CDAF4C6F37F5F0C4FE16547597AA6EEB7D7B1BB19E2FDE8D + BF9013C496CEE4755BB11556548AC8FE926C7BFEF32B2B29773B184BC75B7D84 + 634ABED34A455E7A4A700FBCD14C286A1E54D5A5C1A64381CEE73682C6920302 + 58DC5328FAD133585D7957036FBA9D69854FDC524E4D79F6984E5391A9CAB387 + 3BF8FDFE16A2A61E046E1DECFCACA7FDE9FB3103FD97B5BFEC46ADC101020DEF + E3ACBEA95D6CE9AF86A2E68D6F7CEC9DDC1D8830AF3813C704A27458CDDE201B + 6A9B79F1449798AABB557565C4F3D940C733EB19DA72C7060430037DF8EBFF89 + BD625E8FC595F702E03CD1E1BFEEA5135D46286252EE7690694B5C2D48A486CE + 008FD7B5F0CB7DE786A2950D8A3E146C3A14E97C7E63523818AB80694D23E7E6 + F5642F5C8918D66AE06144EEB00832BFD4C5A2B22CAA2767509E6BE7D20266B3 + 37C891F37EEA3EEBE3B427281A3F426D057E6B46C29E9E7DDB18D8BF03CCD173 + 6E4A1B675AE115E47C7B2DCE593588C8746035707BFC8243D23957D5307000D8 + 0DBCA4B1A8D7777C2FBDFB2E8FD62F05382C6B411999D7DC8273D612D2269521 + 481EF0352ED4A8D3517C4017F11A75BDA2C1C1D64602F5EFE03BB28758BF673C + 2EC70778B18C4CF7852A7FFCE275A1CA0F98FE0B55FE8B13EFFF9DFE07F072AA + 54BE6418950000000049454E44AE426082} + end> + end + item + Name = 'debug-stop-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000006C49444154388D6360A01030 + 32303030E4898A3218707292A4F1C1AF5F0C4D2F5E30B03030303018707232B8 + F0F1FE23C5804BDFBF33313030400C8001FEAEEEFFC468FE5856CA0863339162 + 2B36306AC0A8010C0C68291139859164C0835FBFE0699B5870E7E74F52EDC20E + 00445918C6387FF1D80000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000000A949444154388DEDD3310E82 + 401040D18F18B2D9A807584DECEDA9A5F32A7A098FA0A51C072A3D0125E516D4 + 60A6D9C44649483461C1925FCD14F3BA813F17006CA38858EB5150214221C21C + 20D69ACB66BD0792815E76ADAABC05DF2528750E8DF1929CB5200290031D90D0 + 1816C7931758A7375C59B6FBCCEBBA4713388113D8A7CE2F3B6BA9D39B17E0AC + FD096688741EDDA3EC3304003BA538AC9643A0B67BD3F0689EA38CAFBD001DA0 + 2EB1B85F6FFE0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000000E7494441544889ED95C16EC2 + 301044DF9A4845E22FC8A5557FA3BDF1F7957A62FD1B806432BD34C84E1CA06A + A21ECA9CC63BD68E76F6B0B030AC279B10666D7CE83ABADE6013029F2FCFB31A + EC3CF2713CD2E44533EB0024C9CCEC1ABFA249D2AAFF531800ACB65B356D0BA0 + AC3CC58B7772D739C6422C0C24A9695B9EDEDE874DEE83B0E45E948ACDE6E3DB + 37A6784DC3206B31365802A3887EC2476FC1407E44F41F227AECE0EF77B07844 + C37B60C95D08BBDC3A419557B4141D332B4C86F740E71849EE972C2555F92DAD + 6A905FA262F2097E4BA31F3000AFEBF548FC0DF6A713878AE1ECF80260AAD1E5 + DDCEE2550000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000000A14944415458856360180523 + 1D30A20BE4898A32187072D2C4B207BF7E3134BD788122C682AEC8809393C185 + 8FF71F2D1C70E9FB772674310C07C0004F7EC17F465E5EAA58FCFFF367862F13 + 276084365E0730F2F23230F1F151C501F882132348E80D461D30EA8051078C3A + 60D401A30E1875C0A80370B688FE7FFE8CB725430AF8FFF933E90EC0D586A336 + C070C0835FBFB0B65EA901EEFCFC490B6347C1100700ED8B2416F7249E410000 + 000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000000CF494441545885EDD7310E82 + 401085E1A7586D25E10270031A6A4F61F01C1CC4D633EC4968A9AC48E0005082 + 4202B1A130013626C35298F795339BCCDF2E40444687A5E1CD3D23526AD790BC + EBF1A8AAD9FCB4F438520A57D7BD03086D874DB2B469929F0327E1D1F32E8E1F + D8CB02309405C6BA5EDD9B02E1F801541C6F1EF5ADD5DA1878B47A7D030C9462 + A01403A51828C54029064A31508A81520C9462A01403A58CFFE2A12CD06A6D35 + 60280BE3DE14988D756DFC546F285B5B2C06E65D8FB469127B3D73CFD77BCF73 + 44FFE303277B327A1838E2BF0000000049454E44AE426082} + end> + end + item + Name = 'save-as-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000026449444154388D9D935F4853 + 511CC7BFF7AE392B69DAAC81A621390812D20711CCB4C0DB9DD34C31CB2D4819 + 45E0930F4EDF0B7AD64DC65E1A37B1D6EE76ABE5DF02F34F33B4497F885E224B + D8DC068D9CD3CAB5794F0FB1316B45F885F372F87DBFE77BCE8743599B6E89D8 + 8196C3CBF4F5E91BD80500359D9564C6FC9C6A173AFE1976BB85A313B3893D7A + 27A70300C80E0362B198FBEBFE8D920F5B4B282A2AFA7585FF95344B3A737FE4 + 51DBC4FB27DCE68FCD8ADCDCDC6BBF37A0FEB6A29BD1C9D0E19076F4D5B853D3 + A03963B55AE5144559B635E0AFD81321DB2493CB6683CAE0E5876E9743B64756 + A9D7EBC1711C08219E64404D67655A733C1E9F16865DDA51D738DF70AEE18442 + A1804EA7C3DADADABC288AADA90D0800A4229266499FF9F67975136F1FF3F58D + F555DDDDDDE8EBEB432412592084D4050281F5B414DA850ED236A47DFAB93074 + 7EE4E5D83DB5A6AECA6030A0BFBF1F82535828CC2C682ACD381EF1FBFDE93146 + BF47A7EC77EC3AD79C8BD79CD59C34180C301A8D109CC28B8AE2F266B5523D94 + 97910700A041C847DF1B7FD22CCD92BA2D372D5AEE2E676718A6BAA7A7072693 + 094E87D373AABCBAF9AA563F48C7E8DAC43C4D80D34BEE4F4BDED72B20846C84 + 0F7C6911A6043BC330D5BDBDBD30994CE0EDBCA72CBFB4F9127B91DB9D91599B + DA96BA70AC15EC11361F1426257B257363AB63A3F243D90EB3D98C818101D86C + B6C5425941237B901D946C49988431F999F8770EC4B6622B25CA92A3AB9130BC + DF7CC3C5652A747575C1E3F12C124258793C3BEC0D79D954C881F500FEE0AE52 + A9909393330F2002C02A8AE283603018F5F97CE9DE1A00F013C303037CAF6863 + AA0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000038849444154388DA5935D4C5B + 6518C7FF6FE9E9697048D7AEB546712448D64483EEC20EF0CE8C7634A53DCE44 + BCDD35913195420D3707AEB8B2D1AC4EC9867A6132A34BDA15C6A11037377152 + CA046D028365061CA5A11FD4D2C229E7F4F5828F140853B7E7EAFDC8F37BFFCF + F3FC5F7285BB5CC0D307EF9BF1F1BE193F940050F566255D8B6791176598CF99 + E9BF6527FF4C22D43FAE78CDF90A9DBFF310D9446EF74E0900478E3D03292F03 + B94D185F35FE67599A17CAA16495A014A0DB3214FFAFB28341089108416C67FF + 54404992C3B251324DAE4F5ECA9467603299B64A7E92604A99F04F377F6E1888 + 0C9E8DAE2E4F50D085B2B2B2779F4821FB2C1B128F8B961FEE5E6B5E4EC4FA5A + 5A5A34F5F5F5358490AB7B14AEAFAE63FEC7F9C73E52AA2B0D3D883FB0062203 + EFA5C4556F575717B1D96C2084606C6CECF82E505DC682504AFEB8367D28AC40 + 0B930975B2F1C6FDA1E65822E655A95464616101434343F07ABD28140AAE5DA0 + D164204693E171B0F0DDF1098B6FD4FF4E6A23F5B9DBED267ABD1E2E970B9224 + 4192A4F729A5978B4BDE35F42DEF182986A98EA87ECB576C587D53D7CFA63652 + 97DC6E37B1DBED100401B22C4396E5564AA9371A8D1E3EE537CE99A9B6524B36 + 32EBE3C255C1E6BBE3E7D29BE92F3A3B3B89DD6EC7F0F0307A7A7A4064725EC7 + E82EA613692C2D2D1DEE436DA516E515E5137F898FACC18511677A33FD654747 + 07696A6A4230184477773718C2B499F5E66F9C7A87D5003D806D63537AF0FB6E + 64D643E17B618BE733CFDBD158B4CFE5721187C3816030089EE7A156B16DF6BA + C6AF6B5F340B2C616B77F214A034347FFB21F2B97C71CFA685EF049BE7530F17 + 5DDE82399D4E8C8C8C80E779B00C7B817BCBF195A3C13EC894306600C076D715 + 14B06493B95FA77C1188D93C0088CA2A45A3FFDE757B3416ED6B6F6F5714C318 + 301F584F36F45B4F35DC6014CABAFD9529E71273E96A6DF5996C323738F9FD74 + 9DE6A5F281D0A389B59498BAD87ABE55C1711C464747C1F33C20E3C393DAD7AF + 54AC560811FFCC2900588B67F7023FF9C5830BB56D7F57EB5E3E23AE89ADF723 + 7381A9C4EFCD9AA39A528EE3100804D0DBDB0B49923ED229B59E13CC094B3EBD + 29E4D39B4211E7E6CE8200005BC2E274D569949012C84765C40BF1DB86E70CF5 + 8542012B2B2B22808F29A51E26A3C431BA354DB2C7A9C04C7C16B3F159EC3B06 + 6A6A6AA056AB03009E07D04F29FD96529A8CC562585C5C3CE086FDF10FABD099 + 7F997B0B7E0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004D2494441544889AD95DF4F53 + 7718C69FEFE90FDA9E967628A3A2842520432AD52053674C4C14D090FD209BBA + 252EDE2FB870B1FD05ECD2B5EA8DBBD0CD5D2C9899CD6834241B2532C41FE836 + 10AC2DF4D043A92D146DE9E998D8D273DE5DD0036D04E6C5BE57CFF99EE4F3BE + EF93F739877DDFF69D020044448C31F6BA7A9D7744449ACEBEAF119242D00280 + B5BC986C9B8B117AF814650E3BD91D6504B065CCEA7AE979C61B43CC3BC3DEDA + 5D81642445523485FCA32522B26D2E466563054D3E08C3EE28A31DC7771200CA + 27ADA1812BC388796750D95841A0304B46A482D7DCD2584B5DE53453B53AFE6A + 7AC52AC6B002409E834B05F03F1E4EC35E6AF4DC650281714BC5B44444EAD439 + 4D2B1A584FAB3700A010F9B2966CDB18C6277C093FEC5BEDB02C58A0CDD942EA + F8B9695F7B8B00C67426DDD8D0DD4787FA267F370C4F8DF4C98ADC08E06783C1 + F0B9768D69D96B680060A60D461F36A3E5FAFD9B0631257A78335F75E0C00174 + 77779F946579558B0080E53BB196566465246DCDB4DC8E0E1405A5A0C76C3157 + 9D3D7B16B5B5B50400376EDCF8F8158BFCDD7E126F8BF9DDD26ADAF08661CCBA + DB7AE4975B570DA3C1D15E8594AAF6F6766CDBB60D7EBF9FF5F7F703C05FF916 + B1CA772A72E08270BDC297B3B22F1C7BDAF2D3C52B7AE1B9E0E1CD7C95C562C1 + F9F3E7A1D3E970EEDC3948922466B3D993051655366EF9EF7031F80342B06960 + F80E177816F0F066BEDAED76A3A4A404EDEDEDE8ECEC04114D1251138050BE45 + 05DBD2FFED3D4ED5EABDDEAC0F186AF4CD3D815E8D7F7ACCC39BF9EA3367CEC0 + E170607C7C1C0B0B0B001022A2838AA28462B118D6DA220050BF4B0018D2F32F + 1FFB867DADDD03DD08A6C41E9EE7B7AAF04020808E8E0E2493C94946AC89D7F0 + A1502C844824B27E92ED0E3B761CDF09E731A7575BAD6BB99F1C548292E83199 + 4C356EB71B75757594079FB2E96CCDBBAC0DC9B6D20F41A92557575953E46902 + 117947EE3D3ADC75AD4BF3587CECE1CD7C8DDBED86C3E1204110980A7FB3B8F4 + E0DED2BD2FCA33E5BD90A941E56819636C71219B97E415DFD3F319EFD0EDA196 + AE6B5DDCE083C11EA3C958E372B9B07DFB762CC3E79253F6527B53DBFEF7E737 + A537FD161D9E71E6E79103D1CDA8778645BD330529D59BF5826FF849EB858B17 + 30F870D0633419DF76B95CA8AFAF872008AA2D61FBC6B2A663CD1F25F7EF7AF7 + 579D4EE7CC35B8528080A3A4D035A15F4464645AED5EB1D6595A6F4DF4654727 + 467B8DC66538A9F0B9B9B9F0067EC3C10FF6BD27EDA96BEC61C49C202A800380 + 36F552CA141B8A3F25C28FC28078F49FC40B98CBF8DE403C208829F1BAD164AC + 75B95C703A9D989898601D1D1D482412619BCED6B4A764F7FCC664A967EA61A4 + 1E44484653608C1514D19EBEEBC257FBBECC588BAC270844D34F624729A45C78 + F0FC8FF24579F1F0896327E0743A110C0691833FE5C035571BAAE25B942D9EB8 + 90A88F2301227AE56703005CF4EF284EDFF906523AB948449F109166ECD9F8D5 + 8814FD4CA3D1E81A1A1A70E9D2259C3A750AF1783C02E050112B0A541BAAE720 + 6317813444A401A0215AD6CB67B9A4B5C80A9BC1068E6328DF5A8E456487388E + DBC1711C65B35919C02D005F10D1787C360E3929AF17214CCF4F23236756922C + A5254869091CC76123958231F6A7A228BCA2289789E80700A2A228989D9D4538 + 1C5E179E7FFE058917D084AB1DDA590000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000004DC494441545885ED976D4C53 + 6714C7FFCF6D8598552DB208FB02A97E98894A48946EBC08EA78DBAC20906CC9 + 321435EE0370D148231A220395BDB82CEB2638D986E860CCBD98A05D5F302142 + 2460D8661CABC332905A1BE8A5A52D08D486FBB20F8E4AA51565CA97ED2437B9 + E7E63CCFEFFF9CE73CE7DE4BB6BDAC802C448685B2E1F1619C377CEFF5C5B210 + 19A2C3A3F98512607299A899BE78FA26293FCE2BA2ED5407B5F342DEBF869DCB + 3E2B2415C40933E77D3466D68385B6FF05FC070508BEEE8209E0797E840BE63E + 1DC5284243434151D48209201CC7F5B7FDD6BEA5C9D6C477DDFFE5FCAA55ABB6 + AC5EBD1A2291E8611F785EC672DC5F577E6DCD696CFEA12E353D757D545414AA + ABABB300BC151919D9F47C058860BAA4D364ABAF6BCE64E564ADA7691A8410C8 + 6432F19E3D7B3E5FBC7871D373DB028FDBD3CF840D6F6FEABA54BB3D7B7BCC34 + 1C00A4522900BC0020F0169CCB393B7FBA08B7AD2B982CFD4D7D0D1113B95C2E + F7C2474646A0542A01E0E8D4D4948F00F2CF85A4FCB879B3398EEBD55E6ECED4 + 74686A3373325F4D4B4B434949092A2A2AB072E54AD0348D8181813296653FB3 + 582CCFB608399EEB6DEFEECCB8785DFD75467646EC8103074008416565254A4B + 4B21914860369BDF6359B6D26834627272F2D91D438EE77BDB6F7466D46BBEFD + 2A353D2DBEB8B8D89BF688880848241258EE5ACA8385E0E346A311131313007C + 6B40C0AC3EF584708EEB6DBFD191F98DAEF1CB94B49478A552294CC39D4E2768 + 9A26F6417B79E2B2C4CB223785AB1357BD631FBB05FEDEDF8F1A1191FEA1A543 + 59CD7D974F27A7266F3C78F0A0B7CB399D4E141616C2CED82A7253DED6926E51 + 8BC96392CE1C3F670DECBC9017F06B89655963C3C9866DDA9F7435A96FA4261D + 3A74C8074ED334EC8CEDD82E45AE46BE26467FF5F76B4B1F94F9439B770DB02C + 7B4BAFD72B1A340DA793D393371F3E7CD80B77B95CA0691A36EBF0F15D8ADC9F + E56B62F4144585F89BE7A9049CCB394BCD806F53A9545F2426266E292D2DF507 + AFDCADD8A17E656D60F8530B980157A854AA53090909C9FEE0CC20F3FEEEAD3B + D4F2351BF4840486030025088020086EE75DD79C70B288F4D59FACDFAA52A9AA + E3E3E3538E1C390291480400181D1D4551511106EF0C7EF05AF8E6E698B51B74 + E4312BF70A18BDEF02800C83B6E7BEC3EC0C18C873BC652C722CBDEEC7BAAAD8 + D8D8B4B2B2321F384DD3B0DBED1FEECBDFA70EF7BCA47D5CDA7D0434FEF11D0C + 8CA185637985417B6B72E48E7F110EA7A3F64A5FEBBB718971AF979797CF5AB9 + D56AFD48A9545E52BCA9D041C09227810300C5F22C4E7655C1C0185A798EDF7A + 53776B6264C0E1132408027FADBDB3D16AB5E6161414CC820FF4DE3EB1F79DBD + 17376DDAA4A3286AD993C2013C3C95624A8C427921D6AD581B07022D2164A937 + 2A086DAD536D9F04850635D5D4D400785070FBF7EF47CF9F3D1F6F0C49D0AC5B + B24E0B0192B9802697893ADA7ACCEB7B1B11CBB3A8EAAAC2AEE8BC8EF025E152 + 02F2409E008C89EFA16FBCEF42495E09E9EEEE865AAD464B4BCB94DBED3EB108 + E2B2204F104C53A6594DC69F0DDD1BF29F814026168B111D1DFD22455196B0B0 + B0450CC3F40038230842BDDBEDB699CD668C8D8DCD4D0E34FF5C0152A9141445 + 6502686018A69665D94E87C301BBDD8EF1F1F17983A76DCE0C2C5FBE1C111111 + C4E3F108369B0D0E87033CFFEC7EA6FF06C5B12C782C2520110000000049454E + 44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000006D7494441545885EDD87B5013 + F90107F0EF6FB3D998581407A730383D1508826805EA8BF3C0A1F780AB41C6B6 + 3EA6D3A9336A6FDADA2AF5813878E75CB9F3C52B6C9C69A7D33AA3ADA71DBD96 + 6BE40E2BCF20243CAA771C5CAF3CDAABD631100844F2D84D36F9F50F0A350610 + 3454FFB8EF4C2693FDFD7EBB9FFDEDFEF6F7CB92D4C5A95087A9F1BCE4DCAD73 + 7EBF5975981A2FBDB0A10440E2B321F9E59B01C0FF7E27CE8F9CB73174D1FCF1 + 02F3E7FD087D610189488808AAC0DE6FA7BD753D64F19AAFD1B16DC203017D7F + B79089EA8F0111BA683E963CD468F89E8D44244420717B703BD6DC61466F5DCF + A3C79A14C804F5E8B3902F814F9B2F814F9BE70A48290DD8F65C000943EC60E9 + 6587D781909010C864B2F132768A76B3EE02403C9264FADBFDCFB7D439EAD577 + 87FFBD233E3EBE5E92A4FB5D5D5DB0DBEDCFB6073D92A7C970FBA6E6DCF50B7C + 8FADB79E9BC75D04D0C5B2ECA665CB9641A5523D3BA0288A46C3ED9B9B2FDFB8 + F26B8552F1DDF3E7CFA3A2A202BB77EF5601B82A93C9D64546463E23208BBFFE + 59FF61D6E51B577FA5502AB6E8743A4445458110823D7BF6203D3D9D0390C3B2 + ECFF1F4838D2D617D6FFFA879F56FE929BC37D47A7D361C992257E7542434301 + 40357A2E53A4A7B607E64E73D070F2AFB06D77E7DCFD565557954EF489DB72DE + C8A14B972EF5AB633018A0D7EB4129FD1DA5340038BEA28888FB2A8411316838 + C12E180DAD4D9BEBEF1B78D53CD5F6CCB44CCAF33CA2A2A2B072E54A00404343 + 038E1D3B0649928E01B86AB55AA706062B92576A34B4346619074C3A65887207 + CFF3888E8E8652A9C4810307C0F33C060707919F9F0F8FC7F32680937D7D7DB0 + 582CB3FF1C94BC52A3A9A34573C5F0479E5130DFE3791E313131008083070FC2 + ED7663FFFEFD1045111E8FE72D0027CC6633EEDCB90360966792515CABE662E5 + 1FB494A1DFE7791E6AF5FFFEFF300C83B4B434D8ED76E2717B8ECB207BF761DC + 44401AAC8F2449374D9FB66CBAF8D1A5121FF1FD40ABD5D2D8D858BF3A8D8D8D + 343F3F1F1CE18EC729E3CAB2C3B2FD7040E0280E98AD850702CC932CC7278B5C + C536773BBA35976BAE1679E1DDC96B791A1717E757A7A9A909478F1E859C61DF + 5E1BBE56ABF6A92B19CA6C78745F8FBD07851111FF6ABD4BC2132202971A13D6 + 77993EEBEFDC547BAFFE0CE4D855565686F8F8F8005C5E5E1EE432B660F3064D + F1DA456BF45D55BD2934B07FA63F48327F91F958A0DBED6EB8F29B2B59B5B7EA + CE5039F69469CBB07CF972BF3A46A3710CF74E76AAA62833E555BDD322A40100 + 2181172A6883C4E3F118AAABABB3DEAB78EF1495E30DAD568B8484844970F277 + B35335859929AFEA394E9136D57E9F0868FDA715956F558E9FAEC7E331545555 + 6D3E7BF6EC0941107E545A5A8A152B56F8B531994CC8CBCB03CBB027B253379D + 990E0E78C2F5A0DBE1465FA79900A00FE1DE71B95C3F292D2D1D9F19C6D2DCDC + 8C23478E8CE14E67A6BCA6E738EEB1B85120A5132EB5A713C121186A0DB5593A + 9DAE4010849F96949460D5AA5501B8DCDC5C303EE664D68BAFCF08370A1CCD03 + 4BCF002213C2C1A9B8693564E630A60BC517B2CA4DE56FBB5CAE7D252525484C + F47F0BD1D2D232863BB576E19AA2E4F0E4BF701CB76EBA380060044904801F3A + ACCE8E4F3EE8246EA7FBB18DE421F2E6A188E1CC4BD72F1D77B95C39C5C5C548 + 4A4A9A10C771DCE96DD9DB4EAD5BBCEE239F40D7CF040700CCFB9FBD8FEEC11E + 0B80971D5667FBC7E51D44744C8DB449B6376B7B6A7F4CE5F440616121929393 + FDCA5B5B5B919B9B0B9665CFECDCB9F3D4AE9FEDAA50CD9B3BA39E1B078A5E11 + A5C652740F760F0078D939E4BAFD49790711ED132FB57C3EDF174693B1C1DC6F + DEB777EF5EAC5EBDDAAFBCADAD0D870F1F8657F216EED8BEE3E4D6AD5B2B140A + 45C00C31DDB000308AD4E2E7EB73AC316131AF38875DD73F2EEF5CAD4E5B4A9D + 432E00A36FA500C0E976FEBEAEA6EE358EE3C23332320270870E1D82DBE92E7A + 296AC3E98DF11B2B86BA875E0446473E242F86EFD90210F601C7A440BF47B742 + A640CEFA1CA8C362E613422A0921FE9785523A143A1C57DEF3C189D48DA95B0A + 0A0AC68BC6EE39A7C3591CAB529F4C5F987E8305FB8D1974160030BBCA77FB6D + F07B0E8A5E115A931639EBF7DB62C3625328A8DFF423F84418FF615A287AC42C + 8D46435C2E17AAABAB71EDDA35B4B7B7139FCF57C410E648BC2A0E322A5BF368 + FB27C98C5AABD56A2C58B0601FC771A5191919A8A9A981C3E118027011C06F29 + A5ED56AB15BDBDBD4F857A2220CBB2484A4A0221E41621E4EB94D21A4AE93900 + 7FA2948A56AB15168B0523232341C3013398EA944A2508218B00E829A5DFA694 + 7EE1703860B15860B55AE1F57A830A1BCBB47B70EEDCB9888E8E06A514369B0D + 030303703A9DB3827A38FF01696E2A5C0C71FD750000000049454E44AE426082} + end> + end + item + Name = 'save-all-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000010649444154388DC592B14E02 + 411086BFB9EC03486762B5D168614349682E56345A116DB1C6C0034007C147B0 + 8607F011483031F6F646298CDB924843626E2CEE4EEF60D1BB58F8373B9BD9F9 + BF9DDD1132EAD63A5477AB11256400CE8E4EB1158BDDB1004189FAC800D88A2D + 4D4E41A65BEBFC4ED664956F721A98426401144DA21CC80084EDBADEDD3C48EB + F6523DE54C9A6309AFE233DE3EFEA2FF3730D9CDA439DEE8B1B041D8AE7B1F30 + 23AF79EE06BE574ECCA3420600EB5FB9ADADD5C70AB7744180EAF3EBE35B2ED9 + EBF7E3D1F9416EE918CC86188593A7FB97A9AAEEA7C9EBD1289DBAAD64F7EE00 + 908BE3731A078D3D602A22875E9CA2486C385FCC83C16CF895FA04BA9D53019D + 11C5FB0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000001B549444154388DCD94BF4B23 + 4118869FD91D1371178DBAA8491AF14795030F151B0BB5B1B5106B4F03E77F61 + AF8D7FC2DD82ADE0C20956C71D2888A0A828C44222A2A810827A89A0DE662C4C + E226BA24976B7C61E063E6E5F9DEE11B4650A6C5F105AC062B57BE5FAD24409B + D1466F6B0F00413D08305603EB33B024017A5B7B88F7C74780D11A83FD02F68A + 09F3EA04466A4C56802217C7170AD7B4F3CB5FCA538B62F5D36B91FF34000128 + 14A288D3CA2D12A07BB8536552591E1F5C8666867C79DBDFB60904754CCB5027 + 9BA7E23D8F04302D83BF8F2EDC3FD1F1A9C317183002D437D4615A86AFE74DE4 + FFD5C7077ADF21E9649AF5F9755F733A9926126BAF0E188A3456EC1E89B557F4 + BD02A34D9896412695F5359B96810C4A6E2E6E2B030132A92CFBCED1BBEF0BA0 + 6F22A642D1A6EA127A35BDF24595EFD993DF7D1BE5F51BD03414EEDDF59F37A7 + 3FD6D6D8D9DDADC078959370985D8DA329D44C72EBCC3D3FB82C3184C3619A43 + A16A5836F99F0640E672EEB2A6E9EEC946D2B6BA5A7480ABC32BA28108DCBFD4 + 051506E61D9C93706C8044EA180031101E606EF02BBAA64F01CB42883ADF2CA5 + 3F0D8036BB1A2FB13C03B6FD761F45892E950000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000253494441544889C595B16E13 + 411086BF490ED9149CDD25B265853E0514A4800290434741910851414D0D0F80 + C3334003054820A188923A42888A8822C555203B5612FBDCD917241020FF14E7 + 3BAFCFB9C441484CB3BF76E77676BF9D99333256F00A3CBDF904331B02489299 + 59561FB7966849F2DC8D018AF3C564EA5136F829ED3A70CD734FED9AA40D4773 + 943E6E4D92A501123B09CB8C882469DECC908457F00A7F8745CE98868CB1B86E + 9E8B66162CA94E06D3588FB0B87EDE69B04C20B2A3B1249BA788004A155FE5AA + 4F7B7B9F85E5452D2E2F00E61C75528741482F08EDFC4A8D7E27D2A013E592F4 + 24A95CF559BA54D3EEA73D169717B870FBA272BF00D894F582504B2B35B1BD67 + FD83412ECAB9F88AA35B67748223AB473E892329B58C06983BF6A4FFC03C4969 + 1A4C6B72B48CB1638AE3BF209AA864803008615336AE9E691D06E1EC88B213BD + 20B45E10BAF599A7670BE072BF7AFFF2D059D30CFAC437F0464C0531DFFEC180 + FEC100929E264DE972C5A75C2DC50F3EE29E546FB2F94425BBD6EF44EC6EEFE1 + 74CD69442B3595ABA5D3239224E286C5DDB7F78EC4F572ED05A071EAE6236A00 + 0DCFCCECD7F7DF2922C66966CD669366ABC58DD5D5B809A5CDCDD25F621EA267 + 9F9FD33DEC3287F4AE1384D60D7A53D9D16AB5D8DADA9A0945D6BA875DDA8336 + 9E609DA1DE7CF9D0BCA5A1E2871CE1AAD7EBD4EBF5E4EA4A31E6236A000D3790 + 17FD887EFA45FF8EA4D75F3FB6D6CE968B02D8D9DC495207F78DE34C8B04FB86 + 44BF13A588122C00DD6FF1689573151E5E7940A9E09FC1EC15B0FE574C607EE3 + FD63DA83F6C4E41F6AA6C773D025EA490000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000001E5494441545885ED973D4BC3 + 4018C7FF776D15AC4333283A886412AC8582E0D0A55F40072D080EA273D52FA0 + 9BD27E01A58B22EDE622B8894BB10E4505B72ABE80AD2846EA4B23AD454C9338 + 686B84E44CDFCCD2FF7677CF3DF7BBE7F2BF24040C8D0D8C82E77856485DCA16 + B2B0B302788E87B7C7AB340B2023662813A02C7FD0A7024022922433DBB36AAD + 0BC60251A2CD0500B4D6648D520BC072003BCB6ABC8B475B87835E1D5C83DA28 + 5C7D2E1C6D1CA2B3ABD3547262A7E81DEA05D7CF193AC9FE97D53E8A12EE530F + 95B6782BFEBDB20A150404003C131ECAF50F1B86566CD850ABCDFDE47A7B2E32 + E34DDD03F5E8E9F211B140D43A8076A703FEA04FDB45B48DA6BBA0DDD9C61CB7 + DC862D00CB01745D100B44895EFFBF00942FA43A657A03961F410B80791597BF + DBCCC81FF429D0397BE9BD543B0000987933B25C93BB139188246B07A857F9D7 + 028482A07BD4425E300FB0B8B444C2A1906E9959120A0296F7570CC729BE0BAC + C84DFBFF60EAAB34AABA73B6776109048DA7E3906469F229FDB27DBA7B0EA5A4 + 0F110E855454597E5300A9EC29568FD74A922C4D3DDFE4B652BBE7904B72A3D7 + 31546547EE6E371646E66D0E9B639310325D7526CD97B056193143590FE1AF09 + EE2E372606C70110906A8A5DBE2974E6087901EB271B86533F01FB1CA0F44538 + BE410000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000339494441545885ED97CB4F13 + 5114877F77A674C632BC1A1EA50D812811021A9BD89A605C10880909C6C7025C + ABFF00F80768A23B498C2BB7AE5D18352EC49810126C540C58541288A0D45A4A + 01E91BA68599EB02DA506867A60FA00BBEDDCC3D73E6CB9D7BCF3D43A081FEF6 + 3E085C9996D082B214F642A725D066B1A1DA503D72D0427B70CEACCEDCD524B8 + 43675D4B0DE5CB79882111BED91572AEDF4A0B6112598E607E748E34DA1B2800 + 043C4104174300A06D0613985A6B5169A940C013846F7605D69BD642F861E9C7 + 12E647E7D0646F00002C004941A6206F38408E05F3A5E805356F128625A3D296 + 4C29A590250AAE8C23B1708C72655C3EEFB702A85414EC6FEF83CD6253CC52C5 + 5781304C97DBE9C19ACB8F8D9008BD410FC75307841A216B2BB68441FDD97A98 + AD9611009D8A8202579628C28A81D2A684A02784A02794BC17F685B55B515010 + 90C465F45F94315B2DAA8F253F715D4B0D35B5D60200A65E4F13FBAD0BD4D864 + D42EA0C0BBFBC3E4D4A52608D5A534B21AC5BC6381C4D737214B321856791B24 + 05F9721E95968AE480B1C908D3195341040140A82E4DC91FF145F0FDC53750BA + 7D92A80A1E36B1B0883F9F5D90E21200A0C25C9E36EEC80479418FB6CBA7C196 + B0BB6F93BD71475607D91276AF5C5A8ABE501F0BE6CBB160BE642C33E3CFC6A1 + 2FD51FA64B5AD20A26FE0D0A45A3BD81F239763D690513FF06C540D1AFC163C1 + 7C516D16C49088A5D995AC13579ACB53DAAB74504A41C8BEFE200575C1700CAE + 2F6E52D76ED2BCB3D77EAF6D4B2A08C6A271F8DD4130EC7E4131246A174CD0F3 + A0476B2886EF0DABC66C0436303D3C03794B568C3BB27E50DA9401A04B2D2E6B + C189C94978BD5E5CE9EDCDC52B85DBAFEEA8C664BD8B037E3FBC5E6F4E42B9C0 + 805280D29485594C246670C837B312FBF5C9054A0B7A0CE78D6ECC35069BF9FC + 5B4EC75F734F785E52999E38D9D198B13E757777A3FB1005999F6B7378FCF109 + 625BE27B0A7AD5FDD5B33EEF58289A99D401C0DC8EE460C7C008AFE37BFF4E2D + BE8947E382C16848AE4DE773A7E6A491E508C412060B69C6B25DEB29DFB1D9D8 + 8CC18E01702C7F91103C246AE75026764F7EE60C5D5ACACCBEC79BAB9A71A3ED + FAF6608E7E1A05F1E8C3906AAAFF2EC716D789819C920000000049454E44AE42 + 6082} + end> + end + item + Name = 'printer' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000000CC49444154388DA592310E83 + 300C45BF692416160E8127C64A9672AE4E65A613E7CAC4C8D673446269D2A104 + 416920156F8B1C7F5BFF9B30C1CC28CBD221016B6D360C0300407D178D317EAF + 596B4DCB779632718FD3028A99010045512437E5798ED047229264DC12EFBD27 + 220226138F8C8BE968AD69F6A0EA7AAABA9E00FC2536C7F8BC5D432345FEEE0B + 00DB8C6318635C1874FA90360200706F9A9F9B3CDA769E1CD8C498B2C12A466B + 6D067C8E4329E5523670CE5DC6715C17991922E25E078888ABEB3AEE416A1281 + 372726657EA727BB7B0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000001AF49444154388DBD94316BDB + 5010C77F2FD8C21E8AE3C105093AD8C55EBAD4A620D052B22AFD164A279B184A + BF4730F5AAAFD0A9D2D8E2C5E373966A7007E3A1D15428B5504A0D791D1CA556 + F2089287FEB77B77F7E3EEBD7B27B8956118F4FBFDD7C017CAE9248AA2D966B3 + 01A0A28B984EA7AA0869341A89FB675AE060302851605E470767FE2F60A5D3E9 + ECC84787B195525896C576BBDD015BADD6E73DFF31C070382CC3BC68341A3F85 + D8BD8FB06DFBC6755D659AE6C1150A2188E398300C4505C0755D9E3E7FC1F75F + 7F00B09F3D51C08391784C524AC230FC37361FBFFEE0C3FC4A007C7BFFAAD01C + EA74073C772CCE1D2B0395AA4E0B04582E974C26935280F1784CAFD7D3039324 + 61B15808CFF30AB5ECFBBE48922417ABFD7A9EE77115C7FCBEBED6826AF53A96 + 69E2FBFE039F1608100401ABD54A7B97ED765BBD3D3BD3E609DBB66FEE1FCEE7 + F3422D3B8E2394524A64537D5BE1C95ECC4BE002E0531010C7B116649A266F4E + 4F33F39D52EA326356A2289A0154AB55BADD6E2EA95EAB6981C7CDE6BE79B95E + AF67699AEE80D9A6350CE32E424A89009AF9C49CA49400082148D3944737B66E + 1317D55F0BFF899155DA3ABF0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000200494441544889AD56BD8E9B + 4010FE2642B229DC4322219147400A969CE24E3C8A5D275DDA9CCE8F7025023F + 8A7529EC12F75664AAA4A5A2B2B949C1EEDE780DE4CE775FE3197667BE9DBF5D + 1304822080EFFB77CCFC938808009899BBE49EB5FBAAAA96FBFDDEF874D083C5 + 62C142ED938D9E6559A79F0B02E6D67E3E9FDB8E06916519695B890FF6079D01 + 52E893A50E80A4ED20C17BA337452CE2ED932DBD33454E100446994C26202230 + 33ACEE18EC22E9D8755D489F8EEFFB77FAE4CAF60600F23CD74E8C4FCBBFD105 + C1ED683422CFF39E0F1AC7717311D77B623A9D3EA569DA9C4EA753A3F012F97F + FBD2346DE2386ECE8AFCB0FDAB63A7EF5F3F3154FBBD058EEC8A87CD1FB3F06D + F6115053FAC22EB2E59640558D01E0F78F2F66E3957791945B023BA4A2285014 + 4567E7F4759196A328421445E729B20976BB1DF23C87F0246B61D7C5E8FAD417 + 04760E99990060B3D93C598EBA64A3CF663343A47E5B02590371878188E87038 + E0509683C7FF1C8608C3D07C5393DD5D0366965389B22CB15EAF3194224A9233 + 027197B5847D93BCDD6E5FF51EE814D97088E85E33AAB06E99F9E6CA14FD02F0 + 08C0DC454E55554BBDEABA2EC6E331415D7857A4E8F1783C2EEBBA7E8E403ED0 + 4110C0F33CA8883849122449A21DCB83778100A0AE6B0C3EFA3AB4D56AA5DB0E + 6298600D9AD9AF6D6DF4BE687DFF1286D0F5A2FD03F6F0ABB8A5751860000000 + 0049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000124494441545885ED96319284 + 2010451B972A121253E32D4E3091E79A688C35DA73116D6868E41DBAE80826D2 + B2565B71C575037F26ADE5E3039F16C0A8280AD05A73E55D2222E8FB7EB126B9 + 8FB4D690E7B94F0180881957630106596BC3919F976529D6EA2CD95FE906B801 + 6E00C9255EAA140400504A813166364E44208C31C9128F530821082166818488 + D9988447132F8663FA3024E4F57BE0E7C0E7D7F76855F77C780058CDF2A3E21C + 387B3936014E9DF554B325E89E8FE9EC4F07B97C135E0EB0DA116D7533B1B2D6 + B2A7E96EC9361D18F4AAAA5DCBD1D47554886D5E46299660F53222A2C5BE5D29 + 0552CA11EC8803DEFB0F229ABDE39CE32D1A9C49E10022666DDB2ED62FDF03D1 + 004D5DEF75220AF8FF1FC35469B81B803B1DBF91738EADBD01697E6EBE560366 + 2B0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000224494441545885ED983F8ADB + 4014877FA3484EE56041548515ACB14913C8A2140BAE16CF1152E4006ADD6C2E + 12086A55E618319BC65D86F511DCA8512123835023DE36B260BDD278F4CFEB05 + 7F2010D21BCD276986F7661824E8BA0EDBB66521AD098200699A563BC81A6B9A + 06CBB2BE02F8D5B558CE7D1886EBC68239230077AEEB52675A007CDF67F9B3A5 + A80802005CD76D257488EFFB4A715AA7BDF6C045B02D17C1B65C04DB72F682BA + AEEBD0B472CFC160D06BE74404C3302AFB2122E8B66DEFF36D55DAB901002144 + 1F8E3793C9048CB1B27BDB388ED76C3C1EC3B2AC2580BB3E0C641011B10A3B00 + 0F711CCF8B5CECBA2E759D6F15795184F8BE5FE4EAF39F2465177FAF82E2FCD3 + 8701BE7FF97832A143AA0419F24F7F7B357C55C1B3FFC53241961FAF4AE92FFE + F3E37331B386EFDF9DCEA68452C1DBABE1A93D2A79D363F02C38BAAA134260B1 + 58F432593CCF23C771A431CACB4ECFF33A5D17ABBEB4B2E0B137ED0B65C13D51 + 14218AA2469D99A609D3346BB5A92D2884C0DFE5B2D198E4F33971CE6BB551AE + 0757AB55A76370369BB13AF5E03DE41575B1BBF55F88C6D5B5E338F8F67C2CFF + 24A2C7AA8A1A00F420081086E1BA2CC2300C4CA7D367D7CCD108E3EBEB4682E6 + E8C53778DC6C36FF9224298DCFB20C7A9AA6951B88658B99BA835CD696318624 + 49B0DBED2ADB9CFD24A92DC83907E7BCD30923E3EDE7E23DAA3BA25DA322B805 + F0D093E0F6588054908810C7F11AC0BC33A503B22C93DE7F026C6FAA38C6EE11 + 110000000049454E44AE426082} + end> + end + item + Name = 'command-undo-1' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000020649444154388D8D924D4854 + 6114869F33F78ECDAF5A3A48894C38983F248154D4C24D449B46AA5D4CAD4234 + 305A14E1B64D1105499B885AB4956855A48582162EA44C910ADA642D4C472619 + 739A99EBCCBDF7B449B38C66DEE5E13BCF77CEC311362578B68D403CD68E70D4 + 9ECF0CA42F8F532A9EDFCDAD04E2B15684119426F199259B3700FE332DF8E3B1 + 3DC028CA532D3A7D99FBB365014CFFF14602F1584C905160D4719CDECCC09416 + 675365012432D8B51B18073E809E53CB769CC5ECD6970A0A59B5EC7C61368535 + F205CDD94864B0EBA5887496F51DB8AA3A0DDCB457ACC7995BAF3155B51B1803 + 66143D4FC17535676F1DB5AA42406A4538093C34AB7D072AAF1CEC9750DF3E7C + 9D0DCD828C01CFDC5CB1E7FBB549B53FADFC4500B3693B81440BDEE69AFD1E91 + 7185D346616A09A32EB86C462B8781EBE23562DB0EEF1A2ABEFF869BB6FE9C7F + D9626D6201B36DC782110954099C32000A53498CBA60CA8C56BE006E88D768F0 + EEAD1DB69E7FFE97059CAF3F081C89025CF4AC1BCEDC9DC19A987F071C03E690 + FFA8B4361C89B1B95E789304483A8BD9C9DCE0C72D2BAC27D4DD8E591FEEF9A5 + A6FC48C44F30D186EFD0CE0E1179A568A2E4C11BF521C2173A429EB037ECA9F5 + D7809C10E807EE69CE7E5212201506DEC6EA4B02571514D519A0DBCDDB8F56EF + BCA524401DC5495BB7057DA0B0AA6B4EB638BD446E680E3795E727EDA2CC389A + 80E6C00000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000002AF49444154388D95D45B888D + 5114C0F1FFDADFF79DFB3083F170087318D749DED444E4ED28924B2999310F42 + 4AE3010F8A5C9E4694924B6E9912A228C9C3C82D22BC285333193494EB0C2373 + C639F37D672F0F66DC9A33E3AC97BD6BEDF56BB5F76A0BFF44BC7606B1742A0C + 6C41B4A1E74A5B6FE65CCBBFC70A86F90BAB994E2C9D0A215C42D889CA3C531A + FE6F0CC0EDDFC46AA6115D98F2800BA8A441D7014D7ECBE7E2C1C8CAC944D329 + 4790B3088B55ED46E064E64C33D95B6F8A03A3E90AE24B261BA051449659B5F5 + AA7AB4FB522BB9EBAF8AC200A4FCFC22039C1291D5AABA55D1FDE42D41EB9782 + 45DABF66F3F8CFBF90BBF91AFB35F70B3C26226B55D5075E02880CDE85FE143B + 81FBC009DB9B7FDE7DB185DCD597B856ED53471C4500E531104061517F6A2E30 + 5660930AF51272F696AC9ABEC7443D5CE0B0AAF5107340B10E50A7D9209F7BF8 + 6EE03B8AB9C88828DE8461A8917241F619915DAA44E24B2BB7BB99C666123555 + 0705758D9806550D08BB7536E3DB4C6373C14E657898D8AAA99FC273C7AE3198 + EF22B20DE5B213B475617B7C42B3CA1F00BD22B21918E755965D95B887FFF4D3 + C0622E8FFFF8039484F02696DE16618340990310B475A1199FD0ACD1F700ED43 + 935E65E935EDCD0FFAE24173079105E37D13716702739C5F89DFE85DC011A11E + E441D0997DE13F795F10C4829B4CE05594CE4698E7FE99FBDE37C889DAAA1DAA + DC00BD6BDF7E2B8CF5853775044012A573C0F90857277192096C578EEC8DF641 + B1487A0289DAAA9888B4A35C1F6284076BCB105D3489D8D24A8C6B0E89B0DEAA + 56BB4357FE8ED8F229882798F2286ED5284C4978A4116910913A556D001E1505 + C6574C1909BA0FC50063806A044F557783EECADE794351201006E62358A003E5 + 08CA71455BB34DED749F7E561C98FFD8F31648F5FF37EAE7F15B3E936D6A2778 + F515801F787911D5A3976D1C0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000380494441544889A5955F485E + 7518C73FDFF31E7DFFF8373751D485CA1AAD0941268DD14514A260CB51AD60FD + 13EAA28B88DD74330A1A41D4BAE8224888888617335CBB88362816C25A5A6E52 + 910C692E29DB34F7AAAFA6EFDFF39EA78B57DD5CA6F6EE7B739E737EBFF3FDFC + 9E2F87E7887554DCD544B8BD01E01964E72C6B13B13707F07E9D5B6FFB86726E + 7D50D4B587507B3D8897109F82FAE488C0F6F0FF3607706F350FB73520F43CD0 + 8DF137F0AA01787E5E80D50E222FDC43B8AD1E8943888F8145A0C3B0A164FF04 + A90B53F977107C62672E73E920E8138CA46FF698C460AA7F82C58F7E06CBCB1F + 37DC5E4FD1937703744AEAC1F00C3B00F66D7C788AF86D9803A8B2773F400770 + 12C8028F9BD9D708BC912896CE6E6860CB704BFB78E3315283D7F0AF27D600DA + 10A73042C028F0FDEAA27206D20DB395FA2673032681F386F593B574E2DC044B + 3D9720EEA1EDBD8F9E166ACF3F8435FAC3E0086627BCA925E6DF1A44DB4E7414 + 3B724E030F0217C15E04A51108616668F9D837D72BF78685408D824EE0694921 + DFEC03E070E64ACC5471BC1D27E8960A9D91B4CF37BF0F78169F4CBC7794EC4C + 629D83E614A88EA03BC2049BAB70CA83004D487D825DC011C3DE95DBB48DB2D7 + 5A50D02D13FA0A68013E037B2EFB573C1B3B3A803F9BDC3818D721B4BF91C8C1 + 5D484E9D230D238ACD674FC09F4EE08DCD117AA02625579F831E015A418D4E71 + E117C1966A4B0D4D6209EFBF01BEE18DCEE24513049BAB16108B8E9C03402200 + E04F27C88CC508EEAD492AE09C025A25B521EE748A0ABF0C36575BF28749486E + 0001FCDF17D08E120AEA4AAE200E0325ABA322331265FED81096CECE006D66F6 + 8B5017D0ED54457077576C1CD3B2D267C601E6806B888635D3741592F2A240AB + 998D00635B725E962D65960B0C43FF1AD7999128F3EF5DC0D2D969137B0D8EF9 + D371BCD1D92D01420FEF002847D402E3EE7A9B32235162470770EB4BE300E91F + A7B1CDBE24C0DD59B632EE9F120AFAD8596DFAD61655787F35452FDF4BA0A8A0 + 56D230506A58D3BA1D6CA6406D312A0CE05404712A2314ECABA1F0AE0A84764B + 9C042A8137307ECB0B50F2CA7D143496D76116012B003518D6293824296C66DD + 60EF64A7E3E40500C0EC38F010E45256EEFAA799BD6E588F2D665878FFE26D00 + A46F309B4278C0558CEFC0CE9A2995B93CC7E2873F919D5ACA0FE05F4FE085DC + B785DDF8D9F98677798EE4F9AB642ECD809F5BF90794647E416C343D02000000 + 0049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000429494441545885BD96DB6F14 + 551CC73FBF99DDD95DDAEDFD4EC8D696602C769BDA5688410DA0606C132EF141 + 23F82421349A60A23E69E2BF80461E14132F0D89C8E5C19A00A56F9AD09A7095 + 7B286DB194B6A4B7D9D9DD6167E6F8C052525C6DC36EF93E9E9C73BE9F73FD7D + 6191D22261B44878B1DD172D7D319D825BEA09EF6DA90FBE163154D2B19C1BD3 + 3903D016EA10EAA823FC4E43AD2E5AAF2EDA5EBD3A3F67E60B0284DAEBC8DFB1 + 7A05422FD0A73CF559EAE2BDA703106C7F86BC9D0D35402F8AF34AA977CDFD67 + DDFB7DA33905F0656A3436AC206F47439520BDC035E5796F9BFBCF39F6EF2339 + 35CF081058B79CF0FB4DE522720A18544ABD65FEF0D7FDA53087C78E20B06E39 + E1CEE652D1A407B80B6CB7BA2ED9F689A12531079047E635843B5F284E9BC780 + 37633F5D8A277E1B583273481F816F6D15F97B9A0B4493E34052A13AACAECB4B + 6E0E20FEC6320A3E7D315FFCFA09811285DA46CA9B71FF8E3DF1A40AE5A19855 + B69B708767B1CF8C91BA30012A0340DEAE46966DACFD52443EC862219920148A + 61A047A10EB813567FECC72BA4FEBC3B1F20B07E05E1DD4D8582F40021603BAE + 8A79E6FD2736D78A0C012906A2C016846D28BA156A4FE2C4AD71EBFB4B73BB21 + 90FEF1763614839C024CA554BBF9F5592B9BA7A79587309A2A08BE1EC117295C + 29F02D50076A73E2D4D0D5D8818B40BA183937A65009276934551C01768B265B + 8DD6AA5FDC31CB7187CD270250710767608664EF10DEB43D693C5FD625BA1605 + F9DC575774D0B913B3DCDBE6A36A988648A4213A45A4DD68AD3C9C0DC4DCDC03 + 33A4AE4FAAC04B35BF8AAE75086CF0AD2A39943C7E6B7E39766E4CA16C37AE37 + 961ED5443E149137FC2D958753A3A6EB65F12A00BC8904EE645205DAAAFE00F6 + 49D077D21D3147FE95079CEB5310D42DFFB325C704F9084D36065AAA8E3803D3 + AE3716CF0AC21D9AC51F2D9FD44B438D223428C7EBCE18489C8BF720A8C78C55 + 25C704F94474EDD5C0DAEAA3A981692F5B08653B04D754FB4176E1D3F6FD6739 + 8E775D21DE7D7304D80044C5D00F167EDCE6F337966505903A3781820B884424 + E40BFD6F20B1BA2E13EFBE791BD888A255FCFA178135355901A8B8833B6DCFC8 + 832F209C310F3C0E010C2EEBA85F0FCCBAA3D95D460C0DBD2050A8500A301704 + 7808619F1F1F84F4FDC8C63F5A8E68D2886218DB4D2C0A2017C60F15DC540BB0 + 15E87186673347B2A592D1528911AD58096C53A857EC33630BC7F25C498F1410 + EE6CD605BE01BA3D2BD5679FBEF37476C068AD24BCA759D7F2FCDF01F50AD566 + FD7C1592EE1202183AFE6819A14DB518D18A95E995D7039BEDFED171FBE4839C + 993380FCF756E37FAEB41A408A02A215068A459379790068B3FB47C7CDAFCECE + 8DCB19805E9587BFAE682E40CC4B444ABDAC62A97EEBD035922707E78DCB1980 + 174BE14E2597A7CD3D14B3D84EC21936B1CFDCC53E3D0A49375776B9D33F46F7 + C39A915C04300000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000057D494441545885CDD75B6C14 + 7514C7F1EF999D99DDEE765BE8D5B610C94A45B9D8966A8ACA8B2684808946C2 + 83318821102F898235C6A88FBE68628CC6C4C4680C5051130D62E45220CA5D05 + 12099552451190626DA177BA7477E7727C60A9208552DD6DFD25FBB0D9FF7FE6 + 9333333BE7C0FF3C32AAD58690FBD25D98B30A0D3CF5E3EF1CC639D89E25DAC5 + 046E78A521E4AD9A4DB0F6A6224302BB0DC3E830F282C7927BCE649107E6A870 + 73CA0B80ED289520BD5995A53332F012AEAE3C1FD80A4C031E54CFDF9DD87E2A + CBBC918086105D59835D5716051A5166028BD4F7BFE97FE710A9037F8E2F30FC + 6C15C139E511413603B3155D8CA75BC70A775D6064E90C42732685053602758A + 3EE2AB6E1A7877EC70D7044696CE20BC301602BE04E6024B50365C68384AEABB + B1C30118D7C0D9C07A84FB80650A9F0D341C25D1786A4C71F08F0A46964E27BC + 3066019F23CC4759A1F0717C6D3389C693638E83CB2A98F3D8EDE42C8899C0A7 + 883C80F234C29AF8DA6606C70907E90A861E8C91B3301610918F44E461CFF757 + 021F3807DA717FEFC79A5E98D193FA7107AF6D001C7FC4B562DF5346FECA5A03 + 648D882C51D57DC0870022A37B555F2F8A8292003A80664D799DCEB16E06F7B5 + 5E7CF0AE8195D0E24AA28BA7CD1331B632DAE6E1DFC757D5C34083AAFFA1D795 + 880F341C1DB6F110FBEE32F256D62222CF8BC81BAABA137802F0325A41558010 + 3009B813784844EA54F59CC20BA0EB06B79D24BEB6057CFD1B08105A3085DCC7 + 6722C88B22BCA64A03B03C79A0CD1F58D79211A0911FC488DA98B74CC0AE29C5 + 8CE5837097206F8AC85C555DADE893C9FD7FBAE7DFFE61685F00C03DDE8BC61D + ECEAE26F413C11A947A8302BA29B0052DFB7A117DCFFF4F1BB1378ED719C962E + 123B4E936CEAC02C8FB61945396B0045E4398119818AE87A15D46DE9FA1B7825 + B2642F8088D403A566E584CD12B6709ACE65A49297A2DD4992BB5A51CFC79A59 + B45BA0277DCE8039AD6067EAF059B4277965C37A19723760A537149A5327344A + 2480D3D499512480FB73377E6F027B76E94160B2C033186C340A72DA53DFFE71 + 75477D09695617EF000D1B62D403F9E6D489DBFCB081FB63169027FA90B08555 + 39710FB04290DB0265914F127BCF0CDFF2BBC77B515BB06E2DF85A903C11A9F7 + D1B05539E16B4D7AB8BFF4641CE9B474119C3B292911CB36842714F9C8EF49F4 + 5E7326718F742111136BEAC4ED40A12146BD2076F08E921D1A77708F67B8E3F7 + 155525585D724A449E034EABE3EFBFEED0E43475221113B3B2A011284DDF9362 + 5797ECCA06D2EB88137E20D68F188F0236229F8F38D5394DE72EDD1F5B808AF4 + 5F906B5515EFF5FB53B8BF651099F2B16A4B0914E4CC03A6E8A0FBFE55FDE070 + 89371CE5C296130A3CA5AA6B04795590A78273CA32874BC76B1B40A10F210A37 + 3A76A691801F5E185BA16807B0094F47D835FA18110B8150BAB1B871E010D257 + DFAE2B7B59132E03AB9B330EB4A61500C4805674944080F8BA16E2197A3FFF33 + 56553112B1A208B350B6F87DC9AB6792F14C68C11404592488056C717EEDF9FF + 00ED9A128255A506F0BCAA362BBA3F75A863F497381B099447C87DBA1A117956 + 4466A9EA62B7EB024E4BD7F85730501E21FFA53A0279C17B81D754F52B55FD62 + 70C371F0757C2B18BC6F32B98FCFC40899F703EB8193C0B2D4B12E923B5A817F + F114FFD718C539D835A584E6DF8C59110D0BF20AF022F013B0C0EB49F49C7FEB + D050DB9F35A0911F246F55EDD077C90F62442D242F680BD4000F01CB45285265 + 35B0CA3B1B8FF7BD7E00ED4B0EEDCB5E056D037B46511DF0295C363409458298 + AAEA009B7D5F5F070E260F7530F05E137A3E75C561B27D897B815DC0C5F14C49 + A074287A04D8A56877AAA593C18D27700E9F1DF600599B83256A93BB64FAB0BF + F9F114EEEFFD38473AF1BB13D9228C4DFE02439E763BD854C399000000004945 + 4E44AE426082} + end> + end + item + Name = 'command-redo-1' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000022549444154388D8D924F4893 + 711CC63FDFDFFBEE9D7B7D9D3567FE49AD83211E0AB50C820A2D2B0F29451274 + 0C04A30E21857511C20E151D0A4B29A18B456097224C023DD5A115CB0AA1700E + F312AE692D4A9D4EE7AF832894917BEE9F0F0F0F8F9042721A6FE329DED10C0C + 4CBD7B3E34F9A80DF422002A1581B26C802D08FD4E796DA9FF782B880060A422 + 488C8F90BE6D7F9F98560970D99557DC6BACCFFF16FFF4223541F2E704F17010 + BBACF69932CCAD825CB2F28A9F2AB71D130071B9712AEBB14B77A3EC4C0F9029 + 207F8B0C5F3E86C76B00F78012A04A4C7F2139276FE0CA2A68005A44A8004969 + 1BADF54BC93FD78395BDE91A701AB80EFA89D64C2E4EC7F4F2D2CB516E1BB16C + 05DC01CAB5D6D5A6955D741838A3B5AE4A8C8783B1BE766647076131F9076CFA + 8BC86DEA14D3B2BB80ED40753C14183141CE021DF391D160E4EE29F4DCF4AAAA + A6BF90DCA64E4CAFBF03A843B36F26F46A387ABF05855001F4C706BAFE090364 + 35B46266F8DB411AD01C8887021FA3DD1760611E855E5A5BCFCDACB5D928E883 + F15060E86B770B2C240030D6D534D6001ED3B77160EA6D1FA057917363EF11D3 + 0ACC868391C9C757576000D97C25508FF010CDDE9991D783DF7B6FB210FDBC56 + 9B95184E65DDB04A737C08B75C59052A63D7B158C6CE238653768844742C91FC + 11F9AF40451F5C24391D3B0F34024795A80FAECC0D5FDC05A5CDCAE3ACD94000 + 94E3C3BBE7C4D295D39C7411F102BF267ADAA666C36FFE2BF80D0C1BB78BB790 + 356F0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000002F549444154388D95D47F68D4 + 751CC7F1E7EBF3FDEE7B3F76677373336A6B5B6BB464AC1FB342246ACA20C919 + 56208244880582515ED62893020BC222DA1F21F54FB02866442BD090A8F0C764 + 08915829613015BCC41DBBE5ADDDDCEDEEDEFD31B245DBB5FBFCF3F9E3F3E2C1 + 8B37BC3FA28C13BB6F23CB1EEB0D809780B7277FF97E3AF5E91E2816AE675C39 + A017AF017810E935C4E795ED6B82DACD7BC179FF64CA01E50754DED53D222929 + 94003A2AEA9ABEA8A86B2A66CF1C05B3F2C07CFA123357CE136DEF3A051A9553 + 02B8A3A2AE79D0ABA92F4E9D39521E0830337A81FC589248FB433F808D3BB984 + 416BE8C6962FBD68DCF477D08563C43A1F2174EB3DB8481C955281A0BE0D0511 + 845E90B4CFCC3E06B6FA009577AFA37A43022F126F05B601AB11CB014F256833 + 9BBDA120E94933CBF9B1953DD43CFE0A427B10AF621481618C6120FFBF55C1C7 + 6C139299D969BFFAD15D487A53D2CB66D66FF02266A9DCE57314AEA62866AFCE + AB446E5F8517AB7666D62FE77C334B00EFFBAE225829A9D7CC3EB0A26D9FFA6D + 98F457EF924F5F5AB0D292D59B8875AE77601F39E7369B59AF99F5658606F041 + CF9AD91F66B62B7BF628A94F7683154A62D53D3B85EC43A12D66B6DBE09DCC89 + 038C1FEAC3211E000E5B3E373936B8AF2416EDE86669CF4E01FB85B69AD9EBC0 + 5B99A101C60FBE07CCAEDE3220397DF134C5C974E9E9D73622E896F4B4616F00 + 7BE762003EC618E2A6A0BE0DF90196CF2D08E6531700BE31B32EE05866E800E9 + 39D82C08C731D6B9F09268D5C3DBB3E307FB1604B33F7DCB2810D4351D2B4C8C + 317172F03F19EF86B5DB9272DA21581A6A68FFDA45AB98BEF83314E66F3A7365 + 846B233F924BFE3AEFBB57B5E6A9A4E4A2929E076E0935AC38115FF5C454E8E6 + 36420D2B08377690FBFD5CC951FC0B4422DCD2F91D20891DA0E79C1F7405CB9B + D7861B3B36445A3A8F4F9C1C9C2A5EFB7371E0F4F95380116EBAF388C97D2628 + 02AD401BA259A83F333430B158F0FAA6FAB58DC4EFDF48E4B67B5128C2DC4FE1 + F2FE672864528B02FF02ACCF225CB468FFA50000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000003A4494441544889A59561485D + 6518C77FFF73EEF55CEF756D2EA7B43535B362B4AD8D5C200D466BD256EB8B68 + 128DD5860CA2F62182A03E8C3EE9872056838445B4C51A48590912451BC61AD2 + 56429BA25894CE9CD5E6EDCE5DAF7ABDDEF3F4E16A6EE174DEFE1F5ECEFBF27F + FFBFE779389C23B290BBBC8835AF9CC40945EE466CC3F878BCF72C574EBC0EE9 + D44D5E272B40241F7911804F41C710F5B9EB1EA5704F03B8C1FF0FB0B92A0F62 + 16079A84F6E6AEDB4AE1730DE006E68AC906E02762909E2254BE65587006A845 + D408FD1A2828EECAB9EB3EC6BBBF05F3B3030024072E403A45E8DE8A21A043A8 + 0EA806FA02AB8A7BDCE5AB99E839933D6016A2602E5EE98641E09CA46724D500 + 5DDE9AF23E377C07BAF18293B792C886ED78C5EB714279FF9E8B052407EFFE47 + 905C2455213EC770815AA02D73D70D905F75806595353839B939488F015B11AB + 314252C66666CC3EDFB8B7CC66F6B80228074D82554B5E98C217DE2654FA1092 + 9E051A80E2EC07372733FB2A7067F51B844A3749B2C3920E1A4C62F61158ABC1 + 6F429340A6D25B766060606639923E98E9E22C5017886C7C1C89D7402F9B591F + 46AD61DDFE449C89BE0E5223BF938EFD81A5A7E7ADD20945C87FF2208E170E0A + 9D90B4C5CC3ACCEC69337F2C00940287801133ABC26C287EFE0BAE7DDD843F11 + 5F7004F2C214ED3F8CBCB00B1C47D498D90FC053985D8FB6341290744052AEEF + FBAF0243D7DA8F31FACDD145E79B097F8750C90617E943CCEA109D183BCDD2A3 + D19646129D6D384095614949CDC9CB3F337AEAFDC5C3737229DA7738130E4705 + 7B809F307699F9B1684B23639D6D991122DD83316C66B17847F38DAFDB2D1528 + 28C12BD908D024699F4137B0D3CC8F465B1A19FBB16DCE8B21C8AC7E32B168F8 + 7FF48B615D185566FED5684BC34DE1990EB07EA435A0157915BB6F2B757AE412 + C9C18B18F6165069F857E60B077057ECA82F93B40DE80F161477A6AE0E90FAAB + 7F61427A9A44D769A6637F32DE7B3615EFF884F1EEF679AD2A69FCBE4CA21BB8 + 8ED9C37E6AEAF2DF5F1E61ECFC67E0FBB7D5D1427257ECA88FCD7C4E7623EDC2 + 0DB4871FA81C09AFDF8E138AE0E4E5E30443B8CB56928E47970C50D181F70895 + 6D76848E487AD1B0097C4E225A0DEB174A491AF79389A14B87B62F19E08C34BF + C97474C837EC25C39EC71841EC075A852E02BD66766CC9C933722D992071E114 + C182B50457955C146A02CE0183C000D023E9BCA553DF8DB61F5F32E0A67F49CE + DA07C9DBFC045EE9269CA037E31002FCA94986DFDDBB64C03FB2A9818B7C5B64 + 5E0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000482494441545885C597596C54 + 5518C77FDFBD77F669A18BB4B56524529696B660580A2ADAC54AA258C4206FE0 + 42C50483316820F1814445C38B228D122309C6BA44118A5608553106455A08D8 + 80E962292074003B74DF66A69DB9C787224228AD745AFC3F9E7BBEFC7E3927F9 + CE777546397AEC448C98244C7F2798E6F0FB47136EBB7B36096BB64747CF5B3A + C512EFF1F5561F04D49035DA680A58E252D00DE3294DD77E72CF2A9819BF7C23 + C8D088513D01658670CD7AF8A866B17980CDD6A4D4FD465CF2E5DE9A83B747C0 + EC6E23D0701C57567EB918D65460933529759F1E9BDCECAFF985C1AE63540500 + C29D97F1371CC39599BF4F0CEB0C84D7AC89A965BA3BAED55FF7EBD80BFC2311 + F0D6E0CACAFF56746396886CB4A5A47D2336677BE0D491B1170008B75D24E8AD + 55CEACBC32D18C7908AFDA3D997BC4EAECB85662CC040042AD17087A6B952B33 + FF6BD1F5FB81F5F6BB324BC5EAE80A9C3A3AF60200A1960BF4796B4D5766DE1E + D1F43C609DCD93B90BDDD21D3C7D0CB959A135251D67FA426C9E0C34BBDB86C8 + 7889A06F183177228E689B085F006E50792D7BB7FA6E10B0A6A4115BF832B689 + 3332446435B00861B20CD7516E314AA9D280B7769971EDA23B7B29B185EBA234 + DDF2AE202B14AA1C780B459589D9A27A3B4C150E8D08A8D9DD88C56E053E0526 + 807A31D858CD5501D7BC25C42DDD902CF01D1054A8B9FDED4D27BA2A4BF1D71D + A2BFE90CA8A1FBFACD624D4927B1A8D8102B5F02492872BAABCA2FB695BD3320 + 6049984CDC63EB5C02FB813F156A59E7CF9F07DA7FF810D51F1C11F45F781A09 + 45C5BA66777F86E21E20A7BBAADCDBBCF30D50E68040CCE2B56816DB6600857A + B2A56C4BA0FBF0CE88C057E1AB8A75DDEE2E01B281DCEEAAF2F3CD3B5F0735F0 + 541B46BC07C794EC49C06A20A7AB62977F34E096A4694C7876ABA63BA276000B + 9552B93D27BE3F7B2D1CC070A6DD87204F0347423D1D156DFBB7450C37E23D24 + 3CF3B6188EE8EDC0434AA9DC9EFA8AD3CD5F6DBA0E0E605893A7031400BB7B8E + ED45F5F92386273EBF4D8CA8F80F8047805C7F7D657D73C90608F7DFB85FB339 + 01A60327FD7F1C8E0C1E9742E2EAF731A2E2DF43781C455E6F7D459DEF93F583 + C20134101089524A75F4379F8F48C03E790E46F41D6B80E5280AFCF595D5BE92 + 0D101A1C7E450050AA4B44C61931891109845A1A51A6F911F080BFBEF26453C9 + 7A08F50D59635CB9F33A20CB3E75FE81E0B9DF472C10387D9C4BDB8AFCBA3BB6 + D6DF7074583880D6F75703C0016049D49C42D02D231600E8F3D6E0AF3BF49FE0 + 00BA19E8212AFB8973226CD6ECCE1F15CA1B3CF35B4412B712DDEC6EC53E7541 + BB65FC84449017EC93667EDCE73B170AF9CEDE1E01807EDF59DCB31F3D28A215 + 89688B5C1939A52AE80F051BAB6F8F40B8C3870A87FBEDA973CB04D68A682B1D + 53E71F71A43FD8A4427D03DF237C946E96EB06927105CF313E7F55B4C0161159 + A1942A07762BA80A77B5B4983D6D26E110E19EF6A6A61D2F0DFFE377AB02008E + 690B88297C054B6C728608834E44A1CECBC98D6F2EBE34260200683A8EE9F7E2 + 4C7F109B67C60D3361B8ABB5E962F1CA513981FF3D7F038509BC328A6C643900 + 00000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000005CD494441545885CDD86B7094 + 6715C0F1FF792F7B4D20906C9216C96582D54A9348476A63C7114D412E5ADAA1 + 56DB6AABD112418102D5564766C0D80FF2013AADA4531861DAA9A340653A75DA + CA94183B825053269706622D974DA44036096968F6CDEE66DF3D7E48406E85E8 + EC929E4FEF9733E737679EF7799EF3C0C73C24D305ACBC2242DFFF0D6676AEE1 + 7ED8978A6CFA2EEEE09931E71B19B40110A89C8D9D13BADD32CD366F4E7E5961 + EDB3985993C79C9F71A000229CC5200FA1C10E159714D6D68F19997160B46D0F + EEE099C3C01C8420D060874AA6162CAEC7180332E36B10C00E1553B8B81E333B + 7706B007E803662522E193A7372F2575953599F10E020CF774727AF352DCC133 + CDC05C2004ECB143C505F98F6CC2F04F1C5FE079E4734B709DC126559D0F4C11 + 913DDEFC9250FEC3EB118FFF8A79E6F50202A49C0162E11682E5D5270CCBB30F + E147822CB0720A77FA4A670C45DB1AC04D8E1F10C01DE8267EBC856045759798 + F65BC0328479564EE10E5FE98CD8A5C8EB0E3C878C1D6F2658517D5C6CFB6D60 + 1930DB1C41C62F448E0BF03C32DC42B0A2FAA898760BB05CE02BE6C4821D9ED2 + CA84D3D600A9E4D8B7192B548499950B0292C6DDC95B52C9A4D98B51586888EC + 50D8AF299D3FD4B1D789FCEE89AB57F24DFB3C59B7CEC37FF31D98FEEC094039 + 702342209D48553DF7B95044EE56D506E0EB670FEC8A5DB18A7DC33426DFFD53 + 7C45E51E411E44F89E88DC0E5869535D1B5DEB1C7D7BCB650583B7CE27F79EC7 + 11DB3357904D2252AAAAEDAAFA24F016D0054445D2D9410005A813916FABEA33 + AABA6538D2797147B2AA16917BD76388481D223F43F5B0A6F4AB8ABE911C88E0 + B437120FB7E23A1FE0F69F4E0B2E70CB9799BC6039C0BA51DCB3282B9CF646FA + FFB4E1BF406FD9E7C8FDDA4A446483883CAAAA9B55599EEC3F99E87FBD1EE750 + 23A4DCB4A02EC44D9AB714E01722B24655B780FE38DADE48CFEFD740CA1D018A + C74FDEBD6B10D3AA19C56D546575F4F09BF46D5F8B2686D20A3B870B3D508718 + D61322B24E55B7013F8CBED3A8E77030BAE8B3AB16614DCABF11D8A8AA6F28FA + D860F36EFA76D681A6B76B00FE5B6611BABF0E31ACD522F2A4AABE083C126DFF + CB45B8F3C00955F721C8CF011BA84D9CE8D0BE973283F37D661679F7D721A6B5 + 4244D6A734F507941AA7BD3175290EC0F24C9D8E95931F041E065E543719EEDD + F9ABB4AF37006F4905F9DF5C8B88B514910DAAFA12CA43CEB166B767FBDA2BD6 + B47C259500734424984AE90BD18EBD0C771FCB00AE92829AA7303CBEC5883C8D + EACB280FC6C22D6EEFF3AB2199B8629E65878A01AA54D5013D103DF85A067015 + 14D46CC4F0F86B44A45ED15715FD56BCB33519D9B6EAAA3FA185690294014780 + 64EC68535A719EA9D3473B17784890E7547537F08D78B86DB87BEBCA6BEE1086 + 8C9CFED9C0803B1049FB96E2BFA90AC3135820C26F156D0016C5C2AD89EEAD8F + 8EA9D6C8955F89037EC39F9D561C00A924C05E559E01EE89855B6363C58D0047 + 0EC22E9052F1F8B16F989656DFD97DDB71DEDD3F307CE6D42AE7DDFD43FF0B0E + C01A7D863828C212904F072B66FFF3835347D206D4C410916D2BFFEF7C23D6D5 + 0EB05BC105EECB9E79D7474E58E31146EC4813A9E1F8FBA8FE1958620473B272 + EEFCC178BBCE87899BC4CA2FC35358F69E61C80A20E02D2ADF9DE83E4632121E + 6FDFC8D034DCD349F66D0B4F8A614C1661194887FF535F383CDCDB35EE481320 + 15ED07DB8BAFE4B38DC097109689691F0B9657B71BDE00F1CE772E1BA8AF2B10 + 207EBC196F71B96BE54ED925708721B20A98E22D2AFF7BD6CC8543466002AE33 + 70D5879E4CC445838578FC84BEF36BFC9FBCCD165887B01A25063C0FEC52F887 + C61DE7D22BFFC05F5F60E85F07320F04C030C99953CBC42F3E00A679B3208F03 + F78A484021856A2FE05C3034FDA467C72FFF3878F0D58C002F7F59502576A409 + E75023E29BD06BE77DE26531ADA7817D40077002E17D41C24018F89B73E8CD7F + 274EBD9711E0356747F1F8F14D9B89B768FA47BE2C7CD8F40AF1706B46801FFB + F80F396473F282DA75610000000049454E44AE426082} + end> + end + item + Name = 'clipboard-cut' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000002B249444154388D75914B6854 + 7714C67FE7DE9B3899C95C136F9A514862C6CC085285224A176237A5508A2E4A + C185A015DCF8086844B0D0852E8AE003D245C54004C14DA5F6015DB534B89141 + 69172A2A8D0C661CC68866728DF3F04EC6DCFF3D2E1AA331F65B1D0EDFF9C1F7 + 1D9B7965B3593299CC5ED7756FFABECFFB34303040369BDDD3D1D171AB5C2E03 + 60BDE3194E26939BFAFAFA961CA752293CCFDB007CFFF67E01104511AA7A1CF8 + 39954A75799EB7604A2412F4F6F626819F80EFA2285A0A28954A8461380C5C07 + 7E4CA7D3763C1EC7711C32990C96658D02E3C698B3C562710160BF1E8C310441 + 80E7797F88C82111E9735D77CC755D1289C420F0A5AA7E512C169B954A652900 + A0D96CA2AA73AEEB8E89C888E338F9582CD60E5C04B6F9BEFF7072727251378B + 0000F57A9D783CFEACADADEDDFF9C36BC05810047FE6F379547591FFDD2F0050 + 2E9751D5AB400D38A1AABF4D4D4DF17679FF0B701C87FEFE7E44E40250001E8A + C8C59E9E1E62B1D8128000B474A771B7EEC46EEF246EEA744D5C1DB2C2D9A3C0 + 26559D1591BFD5691D9D59FDC9E96A6B275150A57AE3575E96EE212DDD69561D + BCD06A2D4B9C0276834A5B2197687D7C67DB8BD2FDBF66671BAC58BBF1E370E5 + 87D782355BEA884428972233F7CDD3D1C197E27DF52DC9CDDB8781B4A2FB8048 + 907362E6CAC1C4CD0361CD27F9D167E7B11C4F5507015B44468007C1FDDC11E9 + FEFA0CF1755BA75575FDB3DFCF3E09679ED0BDFB4CA7585631AC94979BDA34CB + 7AD6555475B5FFCBC999A851E5835DA7568A70B7F968BCCB99AF4100C2AA8F79 + F11CD4BCF741A63E43D4A84064C0B20145BC1D27486EFCFC4D04134662B7FC00 + F88DC2EDFDA63E4DFB864F4780151A99FF2258F679A0D0C8FF3364D56E5C414D + 780C2808724FEC9671E0A9AA0ED57297A9E5AEA091390C4C89658F8B65DF0126 + 143D56CD5DE6156A53268C3B049DCB0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000003CB49444154388D7D945F6895 + 7518C73FCFFB9E73B6B3E9D9697F8EEB381ADB294E9AC5DA56374D0453D49560 + 99944E84A02E0205A1CB502A2FBA3088A02E86D182A4B259510A251383AC4036 + 5D94FB83DB6CAECD6DA7FDF39CBDE7EC3DE77DDFA70B8F4337D773F583E7FBFD + C0F3E7F708F9080402D4D5D53D05D8994CE6CF9E9E1E3CCF63A588C7E38442A1 + C74424D8D7D7D7954AA5003096E88A80D3C160301C8BC5568445A3514A4A4A56 + 89483B507C776E29F01A10063E0F87C3128D4697C142A1106BD7AE0568052279 + CF72A0E338D8B63DAEAA2DC0761139128D460985428B62BFDF4F2C164344DE00 + 5E060EB8AE3B6EDBF6A2C6BCF350552CCBA2BCBCFC3AE088C83B4057381C1E98 + 9999C1755DE2F138C160B00138A5AAC755B575787898F9F9F945A02C2D291289 + 505D5D2D22F20DB049559FB62C6BC8B22C22914858442E037FABEAB64422E1DE + B871E31EFF3220406D6D2D6565652111B9042CA8EA33404644BE031A817ACBB2 + 12BDBDBDA8EA3DDEA5430160787898743A9D047603B522D20A34013B54F515C7 + 7112030303CB602B023DCF63707010C7717A81D7807D2252076C017E1D1A1A22 + 9BCDDECF7A7F2040369BBD631A051CE038A08EE3904EA757B2DDBF8700353535 + 545454AC01BA8071E016B01E684C2693E3FDFDFDFF0F34569552585B8FE12F20 + 682A0F9929D374ED0E6003D0A8AA6911E90446D50C6CBEA9A1DC5C0EF05C1686 + AEE026FF05C00750F4C416CAF71CC1F017AC03B6899B3572DDA7E2E648E74635 + CC662F971DC9E57214048BF708DE2FD9CAF5AD81FABD572BFC410F38E7794EDF + EC8F1F93BAF825E27FF011A207DB10D377149123A8F6039EC086C0D81F3F9BA9 + C496A9EE0B649233546DDE8B5B5C7E26177DBC59E12A6088C8A39EEABBA0C726 + 3F7B13DFAA8666C43077006FA1FA82A2675140D86A573DF93DAEFB225ED1B7BE + D99B641EDEB41BC37C164FB72BDA91EFD64E81D32AD2B9BAF1F99F0C23B81A44 + 5A8076553D3BD57E8CC94F0EE1D9990E544F6218FBFD6B6A0954C6408CFDA89E + 54CFE998FAEA6D26DB0EE3E5EC3340BB408B5914C690DB732905C69CD43456F7 + 391686BAB047FB00C680D2BB76A114187566C7B1FE3ACFC2B54B6427AFDFD629 + 6500BEFCAE77012FF942E547D7BCFA81EDA4A6288CD5FB815DC0792F9B41B319 + 804E6097AFACEABDC881F773DE428AC2AA7505C0CE7C85C8EA8DFB287DEE5099 + 2097817F800F010F3808C4818664E79909676E8207B6BE5E297005E8073EE2F6 + C7380C54A9D290FCFDEB6963BEF3079CE9B16960631E78026803A654B5C95BB0 + 266E5DF894D46FA770E71213F943310DB4219C0046146DF2D273D3C98B5FF01F + 71BEB27629F292A90000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004F649444154488985955D6C1C + F515C57F677676BC5E4FBC5E9BC85ECBDB38649D384E2822E52B01551002A208 + 8544F9100409A254C5AA1A9040BC55BC547D40F000B412082954456A2B543E02 + 4429AA4A005135904489888D136CE7CBB8368B705833F6EE26FB31B70FBBA480 + 6373DEFE33E79E33F7DEA3FF88EF209D4E934AA5B601FF2C954AC1D0D010E572 + 99852089DEDE5E7CDFF725DD99CBE55E1B1D1DBDF4DEB94C4D1FB0C7F33C6532 + 19242D68904EA7F17D1F49CFD76BBF87CB1914802DC0E3BEEF934EA7E7156F6D + 6DA5BDBD1D49BF02EE078A3F6A6066CF0303C0EF810DEDEDEDB4B5B5CD118FC5 + 6274777703AC019E054E002F2C6870FEFC792A954ADECCB601B392FE22E927DD + DDDDC4E3F1FF17390ECB962D2312892425BD025480ED66363B353535BF41A150 + 607C7C1CE09499ED04DA80BF3B8ED390C964884422002C59B284783C8EA43DC0 + 95C0AFCDEC64369B2597CB7DCF20F2C3960A8502AEEBE2FBFE88A408709FA48E + 4824B2AFB1B111D775E9ECEC44D263C023F5B13C353333C3D9B367E78C728E01 + 401004241209A2D1E8BF255D2B69BB994DC662B1632D2D2D0037497A19386A66 + 3BCAE572756464846AB53A476BDE0C46A351FAFAFAF03C2F29E90890026E31B3 + 73F57393995D0B8C0D0F0F1304C165752E175300CAE53267CE9C01C8015B8110 + 7815680666CCEC41606C6262625E71986744DFA2542A1186218944220B4C020F + 48EA33B38DC0F1E9E969C6C6C6169298BF834B04C7C1CC007AEA8F6E93F43840 + 18863F56BE7007894482A54B9722E91EE08FC010300CDC2BE9443C1E3F51A954 + C8E7F3F36AE88747798D00785E94DECC953478D11EE0106066B61698917488DA + 2ED686C6C9E153A799CDD76E092B5F000BE71A34FDEC6E5A6EDD89DBD605329C + 5291A6A17D4D8D670FFEC711ABCD6CAB99BD59A7AF937400E9F485CEABD7CD5E + B529A8C69380A8E4BE60E6C85B04EFBF0C66B51D2436FC92C5DB7E4BF48AAEB5 + 12FB85BEB186787061D9CF072A8B3357551B9A9FAC3634BF190401939393840D + 8B0E561A938F95AFC8AC2CACB8E378186F0D244D0BF6BBC98E1B9377F4D3BAFD + 099070A31D195AD6EF02B405E9AF987D09FC1923AC34A7364EDFFC1B22B9F153 + 2A17F9F2FD57B8509C20B6AE1F226E3E4C746228045EA2F6B19B24E703B370C7 + A26B7EF14661E03D9458BF9396DBFB939246A9DD88779BD9B7C16E92B4577083 + 85B6223F78205B9A1AA365FDAE0E49C3C02133DB0CE401243503FB112B0D7AF2 + C7DEC9394E6C1192EE0292608F86955230F5EAEFC8BED84F580CF2060F1BF838 + BA27DAD183975A8EA44D806FC6C3562DE7BFFADB1364F7ECA65AF826001EC548 + 0AEE72623E0EB53F561AC08C4F0B431F923FF60E17CF0D307DE04F60368C54C1 + 48A34BB1482395C186678FECA330F82E174F1F25F8E875CC6CB0DE7D17808301 + F0DF5AA6B4AA71F98D78E955B8C94E9AD76E056985208AEA9C1AC6059ED0F2A6 + 9F6EC0EB5A85DBDA89BFE64E24ADAEE5B5C657E2F6876859BFAB5562E4BB3BB0 + 5211798D4D92F6023798D98AE26707B3E5A9CF69BEF9DE547D071F99B1996AB9 + 6080E3BACDA0FDC04A33EBC90FBC9B738AA38741F635D08FB81E1894F49CD310 + 7F46D200700BD86E205B18F998C2A9C3005F00BB815B2506E5469F71DCE873A0 + 41E03AA01FC815470E13A94E67715BBBF0523D27C10E08F5021B116B80018C87 + 0CDE2E4D7CC6D76F3D4DF5AB31BC5486E8E2EEE3820F9156D5F95703470DDB85 + F1AF8BE73E21F78F3FF03F4393F6FE330C08D80000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000551494441545885B5965B6C14 + 7514C67F67666767DBDD76CBDAB51776BB5B88240854848A1A7DC068E22D3118 + 121F1035A2D18AC84550628C98A8D107311850108809262289C1788946B91863 + 7C4109374D4D2CE5B240972DB48BECADDDEECCFC7DA045DAD2ED96EA79988799 + EFFBCE97EF7FCECCE814A9BABA3A6A6A6A48A55228A58A418795883069D2247C + 3E1FA9546A449C564CC4E7F3110804E685C3E13135874BE6ABABAB1FACACAC2C + 8A2B6A404410910DC160B0B2A2A2A2E4E6A669525757570E6C180D5BD4407FEC + 3522F276341A45444A32108944D0757D0D10FA2F0CAC075ACACACA6E9F3871E2 + A8CD038100555555D38115C0078EE35CBB81783C8E52EA75E014B0A5B6B6D628 + 2B2B1B11AFEB3A0D0D0D026C02124AA935F178FCDA0DE472391289445629B518 + B851D3B4D5D16874447C2814C2ED763F252277004B93C964E6E2C58B450DE845 + 9F02994C864020D06E18C614E019B7DBBDD3B2ACEE6C363B08E7F57A8946A341 + 11F90AD86559D61B478F1E655C4700E0380EB1580CA5D48B4056443E0A87C362 + 18C6205CFF90AE050CA5D4D23367CE50281446931F3D01807C3E8FC7E3C99697 + 979F1791654087699A0793C92400B5B5B50483C1BB80B5C0EA4C26B327168B95 + 224D697B05B85C2E66CC988161187B819B9552D3DADBDB13994C86A6A62653D7 + F5C340DA719CDB5B5B5BED9E9E9E9274473D8281B22C8BD3A74F03B4001E1179 + 3F1289D0D8D888AEEBAB81C94AA996CECECE929B4389473050B95C0E9FCF9734 + 4DD3D134ED055DD70F98A6991391CF818DF97C7EDBB163C7C6F4DD28F90806CA + 344DA64D9B66B85CAEFD409552EA2611D9A6947AACADAD6DD4B51B5A634A00C0 + B66D00C7EFF71F04968B885729B5A8BBBBBB2F91488C55AEF419B8B22CCB4229 + 35C07D1EB8A5B7B7F75AA4C66EC0300CC2E1B021225B802470524436D7D7D7BB + 3C1ECFFF6F201289E072B95E1291E9C02AA045449A344D5B59EC353D528D6906 + AAAAAA08854237003B809F6DDB5E5528144EE8BADE082C76BBDD9F170A85642E + 972B59B3E404745D271289006C0614F05C3C1EE7F8F1E328A556016911D9D4D0 + D0C0D0D774B1725DEDA6181EBCB31EC03379369A610250DED385FBF42F8BC4B1 + E62AA55ECD66B3ED894402A5145D5D5DDDC160F04511F95433DC4F841F5AF249 + C677E9DF41D905F2B1DF49EFFF06D59B1DDE6B98A3EA066A9E780F57303C4F60 + 39D00C88388503950776DC68761C8A2B47CDFEB3F58FC2C01751D77566DC3413 + C3F47CDF573BBD39D5FC68ABD2DDCDFDFA0780F556BA7BE7B94F5EA2EFCC9F23 + 1B10C3A47ED9A718D5E1B5C0B35CFA1BDADD1FF93DC072E3C2A96FEC7C6EE1C9 + 8F57E2A4BB2FF342CF7E885911D864F9EB175E8D076CB373179776AC5B709907 + 4386B062CE3C7CB3EE9F0FBCA95073FBCEB66FEFDEF9562CFDDBD731D784BA9F + 8C40FD774EB9FF1DE5AB3EA5E08FDEA3BF5DE679E73C3CDFF154BC36120FE17D + CDF00CE20D33E09FFB38EEEB1BB702DBFB3ADA769CDDF834D6F918F6DF09B287 + 7EC01D9ADA69548735E049CD5DB635FDEB97E3E2C1902D70F96B406806765FF8 + 6123587DFF3E540EC96FD701EC1291999AB7CA355EDE300320A05000EA4A9101 + 2DDB42A94B20FA2FE3E30D3160A7CE01EC07EE9F706F0BE883F779C27D8B11E1 + 3EA538E8E452F67879306406747F90B229B75D00DE75F96BF79A93667714BA62 + 68A68FEB1E7E195FD3DDB3802DC02BD9237B5A7BDAF68D8BD79FDD15417ABCD4 + AFF80CC35FF336B00CD8C8E0755A026C76F2D9951DEB1660FFDD392EDEB004B0 + 0AE44F1CA17CEA9D3F6A66F961601EC2328447FACDBE6CF7A4379CDFFE2A85F8 + 5FE3E70D4DE0CA242A6F9D8F67CAAD681E2F00AAAF87DE134748EFFB023B75FE + 6AB46BE2FD03F7107FB738AEFB300000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000008A6494441545885AD987B7094 + E515C67FCF7E7BC9662F61B3BB81901B414CBD21D6225ED07AA197B1ED60D1D2 + 5A7BF502322A15956AE950AD62ADD516AA850A8E565BB51D74462B1DC7CBB415 + B1C0A823280A85404902844012423624D9DD6C764FFF48700889B8099C999DD9 + F9E69CE73CDF79CF39EF778E431E525E5E4E717131A9548ADEDEDE7C4C3E55DC + 6E37555555442211DADBDB3F53DF950F68341A251E8F4FACAEAE3E2E72001515 + 15C462B15362B1585EFA79110490B422180CBA4A4A4A464C2E180C128BC590F4 + 98A4134EF03C4937959595E1F178864D4E12E3C68D03F891A48BF3B5CB9BA099 + F500F7BBDDEEF2AAAAAA61131C33660C7EBF3F2AE9A17EAC134B10F8ADA4B0A4 + A5914884482492B7A1CFE7A3ACAC0C49BF911407169B595EB64E3E4A2E978B70 + 38BC0E9829E90260733018DCD2DADA4A3E8E264C9880DFEFBF08F83D50676657 + B7B4B4F49EB02A6E6A6AA2BBBB3B05CCB13E468F78BDDE51E5E5E59F695B5C5C + 4C51519107784C7D957173269349EEDEBD3B1FD7F91F717D7D3DB95C6E35F094 + A452490F969494100C063FD5C6711C2A2B2B01E64B3ACDCC569AD9EBBB76ED22 + 9BCDE6E537AF2306C86432388E4330187C1BF8317011F0662814DAD5D2D232A4 + 4D454505E170B85AD2DF804E339B9E4824BAF6ECD993AFDB6115098D8D8DA4D3 + E983C06D925C9296171414F84A4B4B07E9060201E2F1389296492A0416E472B9 + FD0D0D0DC371997F0401CC8C542A45341AFD1838A7BF6072814060F5C1830707 + 5C83353535F87CBE99921698D93A33BBA5B1B131AFEBED48195604011289046D + 6D6D98D9CD66D609DCE572B94EED6FC2008C1E3D9A402010069698598F99CD49 + 2693D6D4D4345C77C32708D0D0D040369B6D00EE96E493F4782814523C1EC7E3 + F1D05FDDF74B1A0B2C063EAEAFAF1F89ABE11DF161C9E5726432192291C87BC0 + D7249D07EC0B8542EF078341FC7EFF6449CBCDACFE70CF6B6E6E1E11C1114510 + A0B5B5958E8E8EAC99CD36B30CF0A0E33863C3E1B0032CEFC71E56CF3BA104E1 + 93DEF881992D915424E951200B2446D2F38692FCBE798E21A5A5A5545454F881 + 4D924E32B31966B615684F2412FB6B6B6B8F0BFFB822087DD7602A954A0277F4 + 3FFA03D094C96486DDF38692E326E8F57A71BBDD009703482A97F480C7E339FC + FCB8E4B809565757E338CE8592669959A799ED953447D2F9276244382E82D168 + 947038EC95B4A21FEB1EE096FEFF2BFC7EBF67A86B703832A23E087DD3594D4D + 0D8EE32C94F42D33DB6066B380FF0213FB3FEB7B42A1D0DB070E1C1871258FB8 + 8AABABAB89C7E3A7021B00C7CCCE4BA7D31BBABABA8846A36381CD80CFCCCE3A + 74E850EDD6AD5B47E46744471C0E8789C562025648F2D157B91BEAEAEA686868 + 2093C9EC0516482A90B422140A29DF31F36839660455102430F132BC15A723A7 + BF22CD2849D4124C34CC7689E566D6606667B4B6B676D5D5D5017DB9397EFC78 + 495A2369AA19B39281D14FEE8D9E0987C74D337A1AB7D2F5D1BFC975B60D9F60 + 60D257895C311FA7305425F83E301908020DDE96EDFF19B5F6B1C5B26C91994D + CF6432AF6CDAB469409ED5D4D450346AD46982F77139DDED53AEBBB567ECC48B + 812AA09BBED478369749EF6CFFE71374BCF5CC903C862C92E0946F129BB910C7 + EB5B287801E932A0B7FF777E2E18BB265D36C9E774B5ADEA0DC4163536ECA4F3 + 60EB008CAE8C5134695A4BAEA834D231F90797F6969C7C2550092480D1485701 + 37CB717BFD274F592DAF9FD4F6773F3B82EE683965F39E431EDF4392E69BD9B3 + C002C31A2D9D44DE42494C0796CACC4FA6FB82E4BE9DB5FBFE386B004EF4CA05 + 84BE7079B51CCF7A433960AEC14B96EECEC9EB07A954B048D27566B6CCB0B9FB + FF348F54ED3BC78EE0A82FDF40C1B84917223D8ED952C36E4C6E5B7FA8F9CF3F + E5E0ABCBE8D9BB0D5FD599DB9C82E08BB8743D8EF742275CF25472C77B6413FB + 0170058B897FFB1EE4785E009519363597EE5EDBF6F2C3D6B2F25E3ADF7909F9 + 029DDEB2CFAD020A25DD6AD83A2718DDD9B5F1D5017C065571C1847300E661B6 + 0FE3AECE0DAFD1FCD4EDF4B634402E4B72CB1A9A965E4B6FA2B901E36E495325 + 4DF1F7D9F5618CFF3C729C8992A601F7593AB963DFF23974BEF70FE8ED21DBD1 + 42DB8BBFA6FD8D15182C34B35D42B7F9C79F0DAE81311B44D01D2905B8045895 + 4D1D4AB5ADFADDD12AE43ADB687BE551307B1E30E0E27EBB233074098019CF27 + D63C47A669FB209CC4EA67C8ECFB5F06F83BF0451C474E51FCD804E5785D9222 + 4063BAFE432CD539081820B9752D06ED867503B123B3598E0F8C984116B12FB9 + 75ED9018E4B224B7AD0768941400FC47AB0C6ED4B95CCECCDA80725FE519E0F6 + 0E895D70D2648062A142A085233720B92C88168103565A30FEECA10902BEBED4 + 2837B34E8C24476D520611EC6DDB03F02670852B50E42FFEC6BC41A0F2FA29FE + FA4F90F41DFA3AC19BD98EE6A1304CE8EAA2CBAEC51D1FBC110B9E3B03DFD81A + 2F3003584D2E6BD9A39AF62082A9FA0F31588214175A1C3A7706D199F7E00A16 + 03E0AD389DD29B9EC013AB3809B8CFCCDE02DE4FEDDC7814866D36B337805FB8 + 0A42A78CB96119FED32FFDE405477D6536D1E9771CDE7895034BD2BB3743EFC0 + CDDCA03EE8299D40E9DCA771B9DCF74BFAB999BD60D8CF2C9BADCB7634E38E8C + 750457018FF4BFE0F9E9BDB53B9B1EFDE1009CD8F77E4560E2B44AC17AC063C6 + 6DC856660F1DE875790B91AFB052F080A46BCC6C891977343F7327C92D6B8E4D + 10203CED7A225FBA0189F9C8752FE0C36C07D0014C9034CACC3602DFCDA5BB6B + 9B96DF38A84A5DC1624AE7FE054F383A1EE9AF92A6985902D80104259DDC3F0D + 2E027BA073C3EBB43EFFCB415C86BCEAD2751BB14C1ADFB8B3D6C9E53C0DEC07 + 5C881E60AD992D02EEEC3DD8D4DAFCF4ED64F60E1E8CAC274972CB5BF8AA261E + 748A624F02EF0249C08DD883F1AC99CD065EE958BB92B6971F8621768DC7FC9A + 71058B099D331D5FE519C857F889726FFB7E92DBDFA5EBA37F0DCA99A1C47FCA + 540A4FFB22EE5839EA47C965D2F434D6D2F5C16B649AEB3ED5F6FFB62A920205 + 9FFAA20000000049454E44AE426082} + end> + end + item + Name = 'clipboard-copy' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000010E49444154388DAD93316A84 + 401885DF2C8338D915B510146C9D03D80803C909929B790AAF60D2671BBD80DD + 54222208828D8D4226CDAEB06A1285BCF2CDF0CDFFFD30248AA22F6C44293500 + 78EBFBFE534A09A5D4D6355000C8B26C752A8438EBBA9E0278755DF7DA34CDCF + 805B0800D4757D4AD314BEEFA36D5B0080E338300C034A294CD384B22CE789E8 + 9298E739922499B50821608C8131366B699A366BAD00E338628F561004572925 + 4E9B62BF248EE327C6586A59D60BE7FC38200C4315C7F19931F66E9AE6F34AE1 + AF0821EE8F5E007C1C022CF72284B81C5658E6FF015DD71D0250001042907BE1 + 79DE31C0300C0F535455054AF7EF961645F15070CE61DBF66E00591637C0E617 + DFCA37F1436332AB8F7DBC0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000019649444154388DD5D43D6BC2 + 401807F0FF734A06271D441027B9805B314BB6BE408B93DFA16D960E078EBAB6 + AB43D7BE7E874E190B5D1C8F4CE2DBA2284ED5944CBE90EBD248304144A7FEA7 + CB73C7EF9EBBC091699A3E764429E500B8F23CEFBBDBEDC2F7772E0799A6E9D7 + 6A35A5EB7A64D2B66DD8B64D7FE8A5EBBAB35EAFB7134C0280AEEB300C23DCD5 + FD62B180E338C8E57298CD66582E97A7A954EA43D3B4F03AAC56AB2818741B0C + 46A3D143B3D93C198FC769D77537C7D434EDAC5C2E432905003F4A2967301860 + 3E9FC7829B4C261348291F019C6F76A3CD7EC1D80770C7397F0BA3B1E07ABD06 + 005896A52CCB8ACC4B292184608CB127DFF715E7FC3D40591CB86F1A8D0631C6 + 9E89E896738E4C26731C58AD5655BD5E27C6D80B11DD70CE8F03A59454281450 + A95488885E88E83AF60EF78D1082429F0900AF07818661A0D56AA9AD6E218448 + 1C75E4B8FC5370381C1E0C2681C8DF42A9543A0ABCD82E763A9DC3C176BBFDB5 + 5DCCE7F348A7D387819EE7458AC11B379D4E21A5DC0BEAF7FB00426F6038C562 + 11D96CF613A1E76BDFFC02B98AA7327E4FAEFA0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000214494441544889B595BD8EDA + 401485CF0D14E0291020B45494915B2C0165F63568112582CD926C19296953A5 + 8D6CD7BC09120D1512E2058805C2852504857D52802D2F607E02B9D51DCFB5CF + B9DF8C67A4D1680400409222224939C95F245FD7EB35A7D3297CDFC735910680 + 6AB54AC3300080B1B928B72C0B22D20540A5545FD7F5AB45D2246918065AAD16 + 938A4CD344A954C262B1E80108344DFBAA691A3DCFBB2CB047410012C7E2FB7E + CA711C8C4623D4EB754C26136432196C361B88089E9E9E90CFE741EE7C91C47C + 3E3FEA2A9DA4EC380E7ABDDEA7E572F9ECFB3E822078375F2814E2C33F247FE7 + 72B92374698616F6CEC3DCF33CB8AEFBBCDD6EBF5DE4B06BFFA3A6695F0ED727 + 8E080788A2F687C3616420AC09C7B66D8B655942F24544A0947A27F2E11A77D7 + 44B3D98488BC00F8A994125DD7914AA59211C5E35CCD7EC84EA7439232180C3E + 030894526FBAAE27238A7FE4D40F181B8725EC76BB0080C160D007204AA9B7C4 + 5D746B589625FB3540B158C46AB57A25C987202249CBB24EBDDABF1B51BBDD46 + BBDD3E3ABF6CDB16D3341FB78B92E2BF0B3C620D4ECE8569E21AC4BF73619B26 + DD213B810337517ECBA5722ED224699A264CD344D80900D46AB548E05E44DFC3 + 07615B24311E8FA323FA2E44AEEBFE38D55A369B452693B911C871A467B3D9C9 + 894AA58272B91C398DBB8ED75D44744E5D444012B66D87AD2346E808EB21E28B + 02A18BFD06F8A7F80B2D1DCC37E37502640000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000190494441545885ED963D6F82 + 401C877F6730FAC7B3428C893A9AC0E2A28E97B47E82F693011FA6B5733BC927 + 70D1C9B791916830E97551ABC417502169C23341C25D9E3B1E72B066B309CE39 + E222A5C466B3C1743A859432F6F81D0AE71CBAAEFFDC20E003782B140A5FE3F1 + F866096577311C0E63CD20842811D13B8057C330BE2793C94D12B9D8230EB06D + 5B5555F543D3B4BE6118608CA52BD0E9746059964A44034DD3FAF57A3DF61C4A + E8FEEC1296CB65CE755D044100CFF3D06EB7E1380EF2F93CAAD52A168B056AB5 + 1ACAE5F2D1B86BB18605CEE2BA2E1CC7398A75341AFD99330622021185052EC6 + 1A59200802008F8FF5AE06A2B2EDE464ACA90874BB5D69DBF63ED643895404B6 + 12873BF1629A261863E9090040AFD783655925221A542A95E756AB153DC27B10 + 428417CA017C168BC5A7C405CE7D3542080EA4D8C029526FE014994026900964 + 0291053CCF4B44607F1608212EFED2361A8D6404D6EB357CDFBFBA13F3F91C8A + F2F8B34B99CD66911E344D13BAAE3F5CE0FF449814B15FEAB5581313881A6B1C + 56AB157E01E09796F80E06D5370000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000002BC494441545885EDD83F4FDB + 401CC6F1E7629BED7284CAD16541458278A3D8231282A1AFA0EAD8566D59993A + B1F50520558A05EAD066C88B0812B403DD10435C65636B11121E524C1046018B + BB0E49DA04E5AFED34A8CA77C992FBE9934B7C724C745D07A514519352A256AB + E1ECEC2CF2ACD6544A29745DFF006029EC102925009401BCD3344D9C9C9CC4E5 + 83DA785D324D73D5B2AC50434AA5121CC7599352A638E76F00C4866C02615916 + D6D7D7430F725D57FABEFFA25AAD4ACEF95BC4844C449ED088730EDBB6C1187B + 0920CF394FCCCECE469E1B1B1000B2D92C72B91C1863AF007CE69C2752A954A4 + 996AFFB7B427A52C5C5F5F17AEAEAE2084C0EDED2D6AB51A18632897CB505515 + 2B2B2BD8DBDB431004C9E9E9E90B4551BACE3B3F3F8710626020E9071442FCDC + DADAFA717878F85A0801292582208094124747472084200802DCDDDD8110B296 + 4EA7914EA73B7D5001E0A3AEEB95E3E3E3AEC8303B88D3D3D3C7979797EF4DD3 + 94C3AE6FE6380E91523EA3943E350CE35737642860E3DCC3CECE4E581F969797 + C1185BAC56AB5F7B2163BD48866D73731386612C02F842297D641806128976D2 + 5881C96412B66DC3308C2700F629A533F79163050275642E9743369B5D427D27 + DB9063070200630CB66D3791FB94D25413F92080C05FE4C2C28289FA4EA6E6E6 + E686BF8AE36C6363A3E3B94B08B1A4949F344D7B3E36E0F6F676D73374777717 + C562710608710EC655AF5B3BC7710000849087F31BBC1F21F56FFFC1029B4D80 + 519B00A33601466D028CDA0418B5A181BEEF23088251583AF6E76EA6582CA254 + 2AF55DC01843A5521929AAB526B0E0BAEE37D775FB2E5014E5A0D79380B8533D + CFC3CDCD4D61D0058AA22093C9AC8E12D59AEA791E3CCF1B78C1D4D4143299CC + 0849EDFD7F57F1BF2ED27F927C3E1F97A3ADD6D3242CF002C0C1A8808DBE0303 + 3C0FBC9FA669989F9F8F9FD321DFF7F11BCACA036191C1B07D0000000049454E + 44AE426082} + end> + end + item + Name = 'clipboard-paste' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000018C49444154388D9D933D6FDA + 5018468F0DA5D8418248490618408A200BBBA51BA90B2D5952A93F2043F7B079 + EBD685252EED5A21F2133A14B2A00EA5837F40592259192052A534519212B9A2 + 6EECDB2541B6F808CDD9EE7DF51E3D8F74AF428872B98CAEEBFBC01B40052CCF + F3DEF5FB7D7CDF6716CAE1AB1CE76395EE59929B27ABDBD96CF65BA3D120168B + 619A26C3E17047FB3BFAF27CDD25A7070CAE3DDE7E3D9F08E22F365301C0A7AB + 0C0A50A954643E9F07A05AADD26AB5BAE3449AD7E540A228CAF7B3B11A89706A + 6E05EEB1E51B8611F873300C23708F0F6E4FCDADE0682F1FD98F870F42086566 + D1054C04B66D4706F57A5DED743A00ACA69FF2E1A34D7AB4867331A250283018 + 0C905246138429954A0001C0D5AF3F7CB67F0020A5E66E6C68BB8944A2E738CE + 7C81E779F7C964F85E08B1924C26DBC0CB62B1D853672D3F8465592B9AA6B533 + 99CCB3B9091651ABD514200574FE5B10AE2484483DAA4298B902E9BB4B092615 + C6CEFBC8E0F6E7C9F282CB6673EA05FEBE5E5B4E30F539EE702E4680FEE0F3FE + 07F14E9DA96448B2630000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000026649444154388DA5D14F4893 + 711CC7F1F7EFD93F9B6E616D82C4320C3759194ED070C176C98B5E2428760CBC + E9B143DEC47374B4E358072F056187196460460882ECE9B26C0E4269E1217A9C + D336E7F63CBF0ED670CE9E14BFA7E7C7E7E1C5EFF3FD098E8CC562A1A7A707BB + DD7E077802DC04BE008F0DC3584CA7D3944A25CC46DCBFE14697902B5AD8562E + D2EA69BB0E7C1A19197146A351969797999B9B2B03FDBB3BF9F485D20FAE36EB + D89443E065BA500F7E7B1498AA18F03AE7E055AE89B2CE607777F7503C1E4708 + 01C0F8F838AAAA2E59159646AFECCB7BBEB270580098F63DCDD4815660AAC973 + 499257B03B9BB8D1D5C5C0C0400D038844220821A2D96C366A73DB707A9BD135 + 4D00D3C72B5B019C838338946DBA1C0E6666661AF6128BC588C5624C4C4CE0E8 + 28E3BCDDCA6E3279E20EAD470FAAAA8A70386CB272B8D5119466790D1C1E1EA6 + FFEE785DB8B6B696989D9D7D9ECFE701B05915B60BFB7CDDD4D015173BF9221E + 8F074DD3300CA31E6C6F6F17BECB7D75603018DC5C5959D9585D5D7D0850A91A + BCF9B0C1BB8F6018162AD596486767CB33AFD7FB3393C96018467DE586EB5BAD + 148BC56BC05428146AA8AAAAAA0039EA72B98602818096C964CC412925521E3A + 273D56381CC6ED76F7160A8585BFA862069E66262727F1FBFDBDC05B97CBD57A + 6E30914820A54408D1072C9856FEDF8C8D8DD5F6EAF7FB6532990C9D17AC7DA7 + 5229E6E7E7C5B92B1F1F73D038404AFD4C60ADB25EF88C51CAD585D5AA0559D9 + 3B3B585E5FA7BAB5D51056A582B1A79D197C7F90CD9E185614EB4669AF1910A4 + 52295328FBC7102F1EF8FEF9D38154887F6F8BFED295C5D3DEF037C8AAE66B06 + AF2D7B0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000345494441544889B595CB4F1B + 5714C67F67C6A5D8A328A9301256AB14A43618A1586250E81EB1A8DA051B366C + B158B7A5552B4595FA9092D02EBA6367B3EA3F512A2F2DA591F02CD287050D0A + 0105B5A1C4B43636D8734F1763BB636327B0E8B7FAEED53DAFEF9C7BAFD085C1 + C141262727B12C6B4444EE00EF0116B001DC56D5BDEDED6D4AA552B7694F88F3 + 8A0060546828BC71FD4D868787AF020FA2D1E85BB3B3B3D8B64D2E97A352A9EC + A9EAAD6AB5FAACF8DBAF44046CD1B6B36A4331DA15E0C9CA0D4078588AF0C3C1 + 000FFE8A6090CF6CDBBEBBB6B6462A955280ADAD2D595E5EA65EAFDF03FDFCE6 + B506EF8E9C716BA88E15E4C8FBDFEFF2F0CFD38E0096881811CCCD6B75FFA7A3 + 01A36219E0EEE8E828A9542AC84244C6C7C799989840446E8B58E6E7E301F34E + BCEEDB961811F1FB4914018824121A492420BFC3D4D494BAAE4B2291404450FD + AFE6858505666666B45028E0799E44A7A7691C1C68E3E0A06F0F22AAAA914482 + A8EBAAEA235CD76569694981B6736D92B9B9B9D65A3CCFD3A8EB6AB55090FAD3 + A7FD03888808684B8A6C364B269321D80E9CF7E24DA804761D959E93A80949A7 + D33D0F6D6C6C7CB9BFBFDFE164241EE3F1EE11C30A3AF02A7EED14B1EC73C1E4 + C9CA0D3F3A3D4DD475197CFBA39E0172B99CBDBABA4AA552A1592957AF0CF07A + 3CC66B769DEA7199E7273EBB158BBFCB27148B457C3FE8BB25A19AA5896E3E36 + 3686887C01F822620073FCCF99F965E7B99FFFBD620ACFC4EC946DDF57F9CE71 + 1C492693D8B67D4EA2BEA8D56AED8CD2E974B7D80A90C964003E00D4719C4F92 + C9A4168BC5608A5A1621DAC1C3684D583732998CC4E3710E0F0F3F048CE3389F + 269349BD9044614808AD352000F3F3F32C2E2E02AC00DF3A8E23D6CBE4B90C3C + CF23168B3134348488AC00DF5CA807178188E0799E789E07415F04F8F8D23DE8 + DE6FADF3F97CCB3100D96C966C367BFE26B78CC2BC2B53093B7FC18D07828FE4 + 7FC5852452BF46ABFA7E12F5E04180B044FED1FDA0C4E0116B73BFBC076A80CB + 4BD431458DA3FBEDE8AD03AACAD9E37DD4F4FD535E8888AAEAC9E626279B9B10 + 9A8230AF5DB98E1A734E861EB2F494E8AB5E59877969EF0F8C8902B0BEBE1E96 + A8AF4DF33E10F9F151F9EB9795B9756AE16B10A0F9A85D18FF0219AAD90497F7 + 286A0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000028F494441545885ED97416F12 + 4114C7FF6F972E2CB2054A4D6A6C4282B8BD986C433898B99968F4D078323121 + 3D78A01E31EA27F003B0245CFB09B446A34631E9C598062EEDC5239C48438A29 + B1A464C30AC2786859C122D0A5A51EF81FDFCC9BF9CD9B376F66084314080410 + 0A85E6892809E0FEB1F93DE7FCF9EEEE6EA55C2E0F1B62A084418D4484603038 + 43449BB1586C3593C9CC663299D9582CB64A449B8B8B8B330E87632C007A7233 + 006DC16519F64D019FF72494EA22445184A2280FA2D1E8CB743A0D22020070CE + 914824B0BDBDFDD0308CD7CD6613979D6DDCBBF21357DD6D6BAC62B581175FF6 + 070238B40517EE5CF3B4BB8D6F0E7CF0FF6182A669BC337927329AA6616767E7 + 95C7E30100FC02F0E8C6014757C76FDFCD811106002B7E736B6BDCB26E6D5036 + 9BE57D3D8E158FC7118FC7AD3E8C319A7BBCC681A3F97FACAFD33F9DBB3494F0 + BC7522835CD79F12B001C6D8482BE8F57D466641E7008DECDB3785B3D9EC69E7 + EE88000CDCBABFF5DF6DC148A12B954A422E9743A3D1E8B1F3968176AD8CD661 + 19F5EA3CF2951A545505E71CCD6613C562119CF706C85615C9E572D075BD3DBC + A70CBF5F06E7FC10C08A24495B8542A107C2164067E5C38E6A478CB159A7D3F9 + C9E7F3ADA8AAFA359FCF5B1013CB816432794996E58F5EAFF756381C86200893 + 058844225CD775B7DBEDFEE0F57A6F2F2D2D4114C5C99E82E5E565A452295951 + 94778AA2DC0D8542F672C08E1863DD8B9501BC9524C93D11807EC9CA18730117 + 5C8888E8E22BE114600A3005B005C05BC699019CA884662135D4A95DDB3B3300 + 5B11681D8EF71DEB96158151DFF10050AFCE9F1D40B1DA18E907D3AD7CA586A3 + 0B6D7C9DFAED0F00AAAAC2EFF78FF0261C2CC330045BD7B1699A300C63EC235C + AFD7F11B0EA9D36E4E04F8970000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000003DF494441545885ED984F6823 + 551CC7BFBF64663A99644D3709A1949E0CD926DBA2B05D745794966DEB160AA5 + 82DD4B0F2B144F6DA1EBA5D0832C5E3C897AA8A7E422F4A215C143AC86C2824A + 557687449496E6E061A5A12EAD49669B699299791ED2C4240DECA4939215FAB9 + 0CFCDE9BDF7CDEBF79BC473089C3E140281402CFF3D701DC07F0C649D10F00EE + EBBAFE707777178AA2984D690A325B7160600092244D10D1D7A3A3A3C2F8F838 + 00201E8F637373B3C8187BAB542A6D24934930C6DA26C85D16ED700AF59E3A23 + E435C2B101300688A2084992BA8828323B3B2B2C2C2C54EB0E0F0FA3A7A74758 + 5B5B8B088210F07ABD855C2E0702D06507248E81A37AE182C6F024AF9B12A48F + 6EF7E0CEA0FB6500DD9560A648F8FC4F077E7CC2C300557AE4259EE73FD9D8D8 + 8024497549F2F93C262626502A959600FC464400185EF194F0CE8B2AFC629D60 + 66EB713E79E78BC7A604B993E7C700462AC16E81E1A06883713203CA1F04FC7E + 3F6B9403004992E0F7FBB1B7B7F7694DDB71A411F38BAC711A3D0070CB945D8D + 201CD7AE31C7D0D07F051F3EC0DCDB53989B9B3395687D7D1D00AA5D158D46F1 + F0A76FE07977A41A531F3D822ACB66DD0000B6966A7700AE69D07303C4C9905B + 6C6D2DB22C83B817C0796E403BDC620099FE633C5BD07B93AE5CFD05A954CA92 + E495AB438CF3DEA4B2E0D9682A08004B4B4B67CD59CB997AAD96FFE71C6C05C3 + 30EE298A925055B5E90E621433D0B20E18EADF283CD5A16862E6AF82019FCF57 + ADA3280A0A858229C19687445194C4E2E222F6F7F7479A6E71CC00633AC07440 + 37A0E95D28E95DD38180A7D2A0AF8AC5E2EF3B3B3B383E3E7EA660CBA8AA5A91 + 7B3F180CB6F46E2A9582A228F38220BC190E8713DBDBDBA7242D0B32C6C01843 + 3018C4EAEA6A4BEFCECFCF23954A79154589F33C7F3B1C0ECB8D921D5F243333 + 33989C9CF40088F33C7F3D140A4114C56A79C7056D361B565656303535D50DE0 + 7BBBDDFE6A281482D3E92C977756AF8CCD66C3F2F232A6A7A7DD76BBFD3B9EE7 + 5FEBEFEF87CBE5EABC603A9D862CCB482412181B1BC3E0E0E02522FA96E3B8D7 + FBFAFAAC2F12ABC462318AC562753122BAC418FB00C0AD8E0A9EACFA533FCF68 + 348A482402E0399983CD202210D1F32B58E142D02A178256B910B4CA85A0552C + 0B32A6A1C96ED5369AEEC5DAC196E9047A36533E6F9C13CD050F7F369D40CF16 + CB87A273C2F210EB9903C030DAE1D2946A0FAAB24CADDE3C01C053C907433FFF + 21BE879A0BCC56C8EEFF93D034D748DB8C1AE03EFBF5105FFE914D9E3581DD79 + 195AB70BE9741AD168B42D52B51756962F777C3E1F0281C05D0077ADE66A2091 + CBE5DEB32CE876BBD1DBDBDB0EA1531C1D1DE15F9457707117DD22AB00000000 + 49454E44AE426082} + end> + end + item + Name = 'select-all' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000006B49444154388D63E4485EF7 + 8F0107F8F7E62ED3FF6FEF1898E54C71AA6161606060E848B3FB8F2E5131EB10 + 23321F971A265C26130B8681018C14C7C2BF377771BAE2FF87270CFF7F7C62C0 + A786E5FFB777389DF7FFC72786FF3FBF30E053C382CF79A309894E06509C9000 + 5F814AAA6AB123A20000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000012F49444154388DE594B14A03 + 311CC6BFD82037B4D8D2E1F010841B32573239598A93F816BE411FC107F0519C + 3A16E9D629D0A15386B8DD9142E9D5137AD3C5E17AA297901627C56F0AFF7C7C + 09F9FF7F21C1C37309BF6665BA1C997C85161BBD0018FACC1400EEAF6313F5DB + D6A6901A42EA6F35CE42C359687993F53B267345280044FD36E2A86B9954BAB5 + 6ABD4EE0F4D63AF15DFF27FA878114A8BAE96A804A32676DEA08DAE4C567E0AC + 391A0D2DBEAE55BA751E5E8B9CDE3DFAC20000E5FA156697A1757175D04B4DBE + 3A6832BB0C28DE708C97EE71F26941D2E5788FDE1380813710C090B3D0F43A81 + B5A992ACF95E83F8FCECC645CA262F20A4AED0E32C74E234858D5F1C7571CB2F + 9D870BA9FFC060FFFE400A549FA34B354ECD9A0BC93A8302C064AEC8B1371052 + 131FAA1F804D7B98DDEF51D30000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000168494441544889ED943D6A02 + 511485BF272F90CE3A3603F66982902A4408D65944C81E4CA5A4C91E5C4436E0 + 146AABB3838C30169322084E0A53E949E11B7F88F323A4F454E7C23DEFCD39F7 + CD35974FEF6B004932C6981CDE5DCDC6AF4A62ECF56307E8146924C902D4AFAA + AAD7AA801100E880FBC18C636835BC4CCD344E14C60BAC24D56B551E6E3C1D3D + 05E84FA2835A12C618E569A4C884F102BBB1B5B9B920A22D5C6980CC8870924A + D617FC17AC246DF273373B64715763CCC675669FA3E788CA45E40733FA93E8E4 + 88DABD51914616E896743BDCE30352DB053017AD9792E7C3FAEB0396732ADE6D + 698D5512976E6639473FDF9CA2B16E71A58323870F56B3F1D02DBB7BA059A491 + 84053A40FA2A4C0E17BB3934814E198D95A456C34B97DDFEE0B6BCDD1B1DD84E + 9FE9DBF35DA6C60F22FC203AFFC9E7657784BBFAB488A671222932A92D24F679 + 56447E1091A5997E263B0761BC208C17794EFF3800E407D1F1EE3DFC02322F9F + 0EC40A0FC70000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000009149444154588563601860C0 + C8C0C0C0C06C10CAC024AA4292C6FF9F5E30FC39399F8152FD2C0C0C0C0C4CA2 + 2A0CCC72A6FF4831E0DF9BBB4C303625FA5990053BD2ECFE13A3B962D621466C + E2E4E867C2A7901E60D401A30E1875C0A803504A425C251CB1801CFD2C0C0C90 + 8A01B96C2706FCFFF004C1A650FFC806A3ED81D1F6C0A803461D30EA8051078C + B607061C0000DA6762CF8066A1DD0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000000F8494441545885ED973D0E82 + 4010463F408D0536DA101B6DA92CED940B780D3BAFE041BC81B517C00B989068 + AB5660B326261484085A680C1A7FB2CC1A28E6953BD997D7ED0E50723400D01A + 1674CB268952B1C3E5B8876A5F050074CB46753019027072FADCF36ABE3CDF03 + 55FA2A9943A75E33A6ED962965F24588284E0060F93252E2CB06A2DD32311EF5 + A484B385876D707A3B53E1D3A56E17000752E1402A1C488503A9702095A7B7D8 + 1721660B4F4AE08BF0EB8CEACB06BA519C7C7CF87FE0BE3B53E1BB7D589B5D18 + 9D7E1ED1833458233D6CF00F1F43817712AA8F7712DE498A8603A97020150EA4 + C281544A1FC83B09EF24457305F358C215ACC4C2430000000049454E44AE4260 + 82} + end> + end + item + Name = 'find' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000001EE49444154388D95924F6892 + 611CC73FCFBBE98BF876D0B666E16E795147B865170B8240A46187885A1AC40E + A3EDD2A120068308BA740A3AC55A1434ECB04510B1CB82B5A03F906C054EE90F + 04E59257A10C713175EEE9A0522F6AB2EFF1797E9FCFEFF9FD78042DA2F9C3D8 + C39754C56C990022083C004892C043B955B99D7F76A75478318B68820F86D97D + 6ACA296021E8B2794787FA1870580148E81BDC5FC9B2F839BF060CE717A7D70D + 0245B3E1BCF25855CC96B79347FBBD637E47AB073213D7B9B19C5E93DBD5438A + A1FBE07114B36522E8B2B58501C6FC0E822E9B57285DE30681DAEF06888C0EF5 + B5851BA9D7440D02D1AD82C0D398F97F19705841088FD27CD5B4D7F6916010C8 + EA1648994CE81B1DD95A8D4C1A04E5CC4780D8BD956C4741BD26D6F5EF61F557 + 965D8191F75F7E6E9EB49894DEC17D1A42184792523213D779B09A4B48E4F85F + 8150B09FB88CBA777F0038FFEA6BE15B2AF7BB778F66C26EE9A65295AC668A5C + 5F4A33FB2E9700860B2FE7F2A201F79CBE8AE60B1D01E6811129E51B21C40520 + 0AB811802405C4E4B69C2EBC9E2BE5176E215AC1A5F5D4F28F2737B11E3886EA + 74234C6A7DC915CA994F14E34F297FFF50EBDD73E61A9A2F74187884E06C299D + 7AAEDFBD88DC2C765C2480A2F94201601E4164A730D4FEC139205A4AA796760A + 03FC010F39B70CB07E86710000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000029A49444154388D9DD34F4854 + 5114C7F1EF7D33CEC3D748A3235AA0396048D3C269A1B5A836AEDCA4119492A4 + 6590A6D5D6200A6AE5225068E3BFADA141980A691B11AA8D192904865A1A920A + 3ACFC9714667E6BDB92DA6C87AA3A8BFC55D1D3EF71EEE39821DA26887C9BCFC + 10EDC4593B42540055088A00171040320E7483ECDDFAFED958E97984B9B684D8 + 093B52DF8E23CB5300F438559BAFDCEBE6746E1A19A976F44D83B18520FD537E + 3622E624506904FDD3CB6DB7928359354FD1BCE70A80B725F9AECCE6520F6E2D + C552E70FC7B83F3CCFC8B7C02A92F391C5E9690BA8E61572F476BB1DC45849BE + CBD776F1383625E9BD00987149FDAB5946BE062641162BFF17388BCB0051E154 + 6DBEE652CFAE18804D1134977A70AA361F884A0BA8E67801AACABDEEA46D268B + 5B4BA1DCEB06B86A0185AA01149DC94DDB13F627897A616D590008E14A4FB5EF + 0B4C4FB583C0650165E208E89BC6BE407DD300290356301601E4F8D842705FE0 + EFFA710B185D9A01E8EE9FF2E30FC7F684F9C331FAA7FC00DD1630F4691829E9 + D98898134D43F31871B92B66C4254D43F36C44CC09093D1630BE15048109BC1C + 9DFB29EAFA66580D257FE96A28465DDF2CA3738115A032A62F9AFF4CAD9A5748 + F6CD561455BB01B423790C5C3AE4B09D2AF366587679604A2714352780CA7824 + 3CB3DCD1F07797D5BC42B26B5B5154ED3A820E240D52D205D22684B802540145 + 085C48D6808F40B794F285A12F9A2BCF1F10FDF12501AA1E1FD9B52D280EAD06 + 213A91B211E8D45F3FC35C5FC5597C0135E76462E8052013D3105D9C2634F186 + E0870130A200886D2FAB46882E908D483AF5C116D6DFF7EEFA21C9228E3D1941 + 7168D508BA803B40873ED8C2FABBFD63008AE2D0AE21441792BB40873E70700C + 40013CC4E3F780767DE0606D6ECF2F28E60B04457AFF610000000049454E44AE + 426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000039F494441544889AD955F685B + 551CC73FBFDCDCB6697AA9A459FA92F82265464110C4D2AE15C18A4FABE24461 + 2B2885FAB081CE69ADE88BFA502B1DB82A08B6D0B70C143AECBAB74ED0EA5AEA + 1F10C145290A9A4E636862D3B499C9BDC9CF87245DD6A459D1FDE0C2EFDCF3FB + 7DBF87EFF99E73845B44CBE15EFC4FBD816175B8041E058E03BD0821009418B0 + 0C44142E6B2E5B4C5D3AC7F63717019046E056EFD3F88E9E0671850566801EBF + D7A43B64116A6F062096CEB11ACBB0B16303AC288C8046B7AE7CC2DF0BEFED4F + D072B897CEE7CE22E27A18F8D4EF35ADD1FE2083611FA6215A5D6B17542E4653 + 4C7EB9CEC68E9D019E50F4F3D4C2B9FA046236137CF5022EAB232CB07277A0D5 + 9A3DD645C06BAA88ECF6A8EAEE585535B16DCBF085357E4A6433408F3A76D455 + 8FA0ED81A3B84A9ACFF8BDA6357BAC8BCEB6A6466A02D0693531FB64177EAF69 + 0133B8DDAEBA04DEFB1F436000E819ED0F12F09AAAAA5A596925AAC7953CD066 + EA687F10A04790815A02C3A4A9F32E80137EAFC960D8879403D8CDF78EABF3C1 + B00FBFD704385E43208689347B007ABA4356CD861E244C43B43B6401F4BAF7AD + 1242152B5624D89B379A2BF786F62110AA8F48B5531AB9A83AAFC0D4DDE47277 + 2C96CEED3B7DAB88A573A0C46A098A05D4CE03ACACC632D805AD714A2317A9AA + DA056535960158A921502787B3F11B40249975988F26EBBAA6918BE6A3294966 + 1D80485D89767EB80CB0A8AACB934BD78867F20796269EC933B9B48EAA2E832E + D625D8FEF612AAA8C2F3C9AC9D1F9E5BE3CF0390C4337986E7D64866ED2D60A4 + 086AD4541926879E7913F35048041903FA92593B3F7F3565B4B7B8A5ABC38321 + DC64D57C4165EEC7A4BCB0F02BB1746E0B785C55BFDBFA22B2E7B2334C0243E3 + 78C27D88C8A4206754750A982E7F477CAD260F06DBB8F38ED219F97D33C7D7EB + DBA4B236C0156044557FBE1EFD8A44E4F52A02C34D606882D6701FC0BB2232AA + CA14E899B24B44441EE1C68313044059A7F4E09C073ED36251D34B113617A7A1 + 6097090C93C0D03B78C247449009E015604AE1E5423AA11B1FBF85E7DE87F0DE + 378061F9EAEA5FFC679BECD525B696CE63C77FD9FD2F18268113E378EEE94760 + 029151D00F505E7236FFD2F8CC299CE47AA9DA6560B47762B45A3783E7AFE3A4 + FE808253432C8167CF5664191791D7B4047EDA4927343E7DF206F87F0CB7A70C + 0E8C95C0B504FED1499CD4B5FF050EE012785B44C6800FA16AE5B7011C4A97DD + F75A2CBE8FEA8BCE6642E3D3A77092B7071CE05F79A5D585682DC09A00000000 + 49454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000049A494441545885BD975B6C14 + 551880BFB3B39776BB2DBBED42D7528A184B6969B92526586E62A42D8D468CDC + 4490B73EC8C504A33E289848108DD118E385C8251A4CC0D4824A221428B754AA + 2F9AA2764B05A176D1B6BBED6EB7DD6DA7BB33C7876DA982B00BDDF23FCECCFF + 7FDF3967E69C7F04A30883CD416A412996DC228CF609800024005AD0877AAD99 + B0BB1EBDB7EB9635C4DD808D59B9D897549156F2A85328C6D540393003413608 + 8994ED4023704CEADAC190BB3E10A8DD45B4F3CAE805D24B57E058BAD16A3059 + B6A6180D1B2B0B32AD8F3D68A738DBCA789B0924748422FCD21EE2F8EF016A5B + FC7D839AFE9E8C46DEF29FF8540D9EDD7FF7028ECA4D642C58932F84F87A5951 + D6B45716E532C166BE6DCE5F41951DA7DB38D6E26F049E0A36D4B4767FF3CEF5 + FB4AE2235F85BDAC6AAA49319CDB5176FFE42D0B724933C74F4FB718A92C7030 + 2EC5E8AABF1A7CDA9C5B78586A911EF56A63E20246E724B2D7BE6D138A726A67 + F994BC1533C627EA0D801082593936322C4AC6B92B3D8FA43C30E7B3B0FB7B4D + EFED4A4C206BF956CCAE296F2E2F763EFEC2BC897704FF77CCBC2F8D165FBFEB + 72B7AA1933279E0DFD7C1443BC24655C36D6825297D5A43CFFF2A2DCBB86436C + 265E5D3C09B362D8929AFF90DDE8CC8B2F905A381FA128EB9E2CCAB464594DA3 + 1200C8C9B0503ED561138855D692C5F10552F28A012ACAF21DA3860F4759BE1D + 60A925675A024BE070816056892B2D690243B5661A1DAEF80206538AD96C3038 + 1CA9C6A40964A79940E04288F802C4DE1D99343A0C6D7FB13D30AE80D4A2AA1A + D57B7A06A249E37B431190B21329E30B688176800BBFB68793263054EB82D6E7 + 8F2FA0B63501D49EB8E44F9AC050AD5AD5F35B7C81F0C5F348E4FEC34D5D9140 + FFE897A1B36F90EF2EFAC3120EF4379F8F2F10F5B632F0C74F9E3E55DBFD6EFD + B5510BEC3CE3418DEA1F0C7ADC5D831E77425F0181DA5D485D7BED4063E79523 + EE5B7737F1E260A3976FDD5D6E29E50EFFB18F81044F432DE8C33A7DA1AAA43B + C3A72EF73C31D96EA160BCF58EE05F5EF0B2ED646B87D429EFFDE150476F4375 + 8202C28073E536AC53E72E44F089A6CB176B5BFCD33B4211C79C1C1BA9A6DB4F + A22F1461DBC9563E6AF8BB594ACAC32D0D977CD5DB41EAB1F289C06DB32B1600 + D5C0EA68A0E38C326E428610627B9A59A95A5694651E6EC932AD26A4947485A3 + B196EC528023EEEE81FE88F6219237823FD684BA8FBC0F5A640491007CFE10FC + 19B5ADE94CFBDECD9873F2C9ACDC8C7962618E10AC23D69496180D220B90515D + 76116B4A8F025FA8D72E76FA6B7731D0D270332621B8608DDAD674BA7DCF66E4 + 40DFF5C7CC93A6632D9C8F25AF1825C38921C56604A43ED0A769411FAAA789FE + E6F30CB75FFF8BBAF98AC0B9F2756C732AE621F90A7856F5349DBA119EACF8AF + C0C8C84B811AA45CAB7ADC75ED7BC7060E3072C6DE00979ABE36D2F1675DE7E7 + 2F8D197C4440089C2BB7629B5DF13050A3A3AF537DAD75DE7D1BD0FBBAC70C1E + 13108621F8D2B9C02129792EE26B3DE9DDB371CCE100C6F4D215C3F0C3C0FA41 + EFD5131DBB37DDF68732A902068B15C02591EB23DED6E39DBB37DC3338801029 + 36EC4BAA108A42A06EDF3D8503FC034BC3E24B553F518D0000000049454E44AE + 426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000639494441545885C5D87B7054 + E519C7F1EF7BF672760FBBC92631AC29988D9064D0426813A74A407410D351DB + 99945E68A90583973F8AB55AC7561D3B4EDBA976C60B71AC95126E29ED14DA29 + 9D86A18C721944A8B6694094A263361A828009EC6677936C36BB7BCED33F9250 + 9824653726E4F7F7D9F7FDEC73CEFB9CF73D8A098EA3A80CD7AC4AEC0533D174 + 0305080202921E2075AE83818EE3244FBF0F9675D9F1D444A094CB43CE826FE0 + BD7119365FA1A150B7020B805214798342BA810F817F0872D08C74257A8EEEA6 + E7F09FB07AC39307F47CA996BC3BD660737BCB80C780E52EBBE6A9289AC6EC7C + 173EB71D11E8EE4F130CF5F3DEA77192A61505FE20C2F356327E32BAA781D8E1 + ED20232B3A6EA072BAB9EA5B4F63CCBDC5A9503F071EB961A6D7BEAA723A4B66 + FB70D9B5517F174F9ABC1E8CB0A5A593F73E8D0F803C2B22CF2482CD66D7D69F + 20C9FECF0E544E37FED5F5E8818AAB95524D7E8FB3EA674B8BB9BD2C2FE33144 + 849D1F84F9C5FE5384E3A9378165C933C1F0D975F75F821C17B070E5F318D72F + 2A5270B06A8667D6ABB5A514188EF10CC5D99E240FEC68E54457FC3FC0ADFD6D + 2DE1CE8D0F81650260CB76406FF57272AA97BB9462EF0D33BDD7377EB39C1C97 + 7D5C3800AF6EE32BD7E5F3E6C7B1E9E7FA520B1CF99FDB2AE9940CB4BF03C0E8 + 0FCA18D13CF9F86EBF0FA5F14C91D7F9C575B5B3713BB2FE8F2392A3DB59BFAC + 8C7CC37133F064EE923A6C0533B207E62C5A81E6F67C5E291EFC654D0979EEF1 + DDD6D152E475F2D325D7003CA11CCE40CEA2155902351B9EAABB50A8C7AB8B73 + 6CB7CCCA9D30DC70BE3A279F79574FD315EA516FE51D6077660ED40315D83C3E + 1FF0F5BA2AFF84E3009452DC53E507C5DD4A77EBAEF21BB30016CF45295593EB + B2EB375F3BF1D51B4E4DA90FA74DCB05B5D815F842E640C7F4004075D50C0F76 + 6D42DE90A3C670DA98E7375050ED282CCE1C68F71501949716B8260D379CD202 + 3740B9A61BD9AD62202FCF3DFE9E9769F207E7C847A92C80837755A989D9005D + 7E2E855264D36604804877223D39A88B12E94F83D02D229903CD9E1040EB47A1 + C4E4C986D2164E00B44A3A9939301D3A0DF0D6BF4FF7605A32593612698B77CF + F601BC9D0A7D923930D17E0C1179AD3B914EBDD5119B34E0BE608444DAEA1591 + 0303EDC732070EB4BF8324FB43084D5B8E744D0A4E44683CD209B04D2C339E08 + 36670E945482BE637B009E3DF0515426A38A7B82115A4EF7A580E7FA4F1CC48A + 47B3EB83D137B62266EAA888343CF95A3BB1095CD1E7FB523CBDB70390174508 + 46F66F06B2DCB05AFD3134D734F4C0BC03B184597BBC2B5E78D79C7C6C9FF1D5 + 174F9ADCBBA395B6507FB320AB62CD7F33FB9A9BB2070220169ECA3B530AE5FD + 249A5C7AF44C2FB7CDF6A18F7148BA5C42F114F7FEA595A3677A83887C3975EE + 64ECFCEF9F00339D3D500F54E0AF7B01CDEEAC43F122C253A7A203457FFFB0BB + B0FC2A37D7F8F4AC70FBDA22DCBF23485BB8BF45446ACCDE7067E7A687B1067B + 2E90C5A1490F54E05F5D8FA61BF7A0588FF07D113680184AA9E794520F2C2EC9 + D15655F95918C81973C793322DDEF838CAE6962EDEEE88A5819780A7925DEDC9 + AEDFFD98F4F98E4BAECF08A897CCC7BF7A2D9AD35885A201610DD010DEFD0AF6 + DCE9786FFA1A4AB3CF071E076A735D7667E50CCFA807F723677AE94D9A09843F + 8BC8AF800F7A5B76116E7A61C4993823E045955B89521B40D620348477AE1DFC + 1AC0E0F718DF6DF7615CB71065B3E70135C04D401990C7E09B3CCCF0A70F91BD + 88198BBF7F98E8814692A74E8C39FFFF05EA254338A7B112C506E041607D78E7 + 5A6287B68FB85E337271CF59885E3C174761009BB700E5700220A924664F8874 + E8148993EF92686DC68C9DBB5C7DC6065EC0E9C6F7406D44E407287E1B6EFA5F + E5AE4446ED0D176EABD3B81BD4462CEB21B8F2388011DB63BDA4027F5D3D9AD3 + F82E8A4D92B67E08B22EB2AFE18AE3460007FB5C3D9A6EAC40A9CD96653E8CC8 + ABB183DB89EEDF74C57197002F544E37BE83525B2C311F11F84DF4F03662AFBF + 3C2538187A062F6A25DF46D128223F52A25E891EFA23B1DD538703B03B8ACA86 + 17C4108E4745E4D7B143DB89ED9A5A1C80E62C2A43D38DB9A01A11794C89BC1C + 3BB48DC8AEFAA9B601601F3A0C1D176431C23F07712F4DB5EB421480317F298E + C212CC5888DE7FFD75AA4D97E4BF2BE28652B5758AE10000000049454E44AE42 + 6082} + end> + end + item + Name = 'replace' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000002DA49444154388D6D924D685C + 6514869FF3CD77E7EFCE6D3A33666C6ED284109B981642845A5C584504112C82 + 42518B0C58D112170ABA50D052115D1531DA850B292EBA7063C16DBBF06727A8 + 318468179550A39D19C998E0FCDDDCDCB9F7B868A738E0BB7D5F1ECE034700CA + E5323333334F016F475174747575954AF53CF9C3C71300550D80ABAA5AAD7D52 + 6D47F5EB0C62002A950AC02BC011C7711E28954A7706493F321A471520129117 + D2E3F7F2DF987C3E8FE77973C061E01CB0741B3820A071DF00392042CC10C0DE + 1E2F011755F53311B95E2814EE0AF2F9268049E76E69A0B12A6753396FF88272 + B9EC02551179C718F3B7889444E47456FA7714E2BD20A3CA5B02EF3BE5896140 + 2A953A057C134591E976BB46558F02676CAB61060A49D0568184FF89059E002E + D46A351A8D060B0B0B2BD96CF6A6E96D2F0E14249DEDA3ACA09CEEB7B6860161 + 183E0D245B5BB78A7ABD8EEFFB8F84ED9D38FCE35783080AA0CAEEC60AFF7C77 + 690820B3B3B3ECEEEEB2B9B93954F8BE8FEBBAC471CCC6C606AE31BC717082C7 + 4A453392B2E309BA7DADD7EDDA62B1988461688220A0D3E9100401D65A7CDFDF + 678CF95D55EF6B369B373E3F38CE43FBF79F04968118D8E767321F1B00C7718A + D3D3D3AFCDCFCFE3BA2EA3A3A31863AA404644961E9D9AE2F8C8C802B0ACAA27 + 76A26852552715BD6C813EE001CF596BA7E6E6E65E4F9264F01B6780F3F95CEE + 1C22CF039F7EDF6AFDFCCC2FD73894CFB50EA4D36B56553F1291DF44C402C7AC + B53FA96A03D853D54B2272B2233CDB833117562FD6FF225065ADDB63ADDBC3B6 + DBED370B85C2BBC057404355BF10912F817B44E44FA0B0AD8CD554AF1C1239F2 + E2D801AEEEEC70CCF398CC6610C771585C5CBC5B445E55D5B3C08488FCA8AAF7 + F7FBFD3D6B2D22F2ED9346DE7B39653E1478A917C7577229332BCAC3A9244988 + E3B81B86E1D7BD5E4F5DD77D5C44EAAD56EBF2FAFA7AC718D3F13CCF3415EF41 + 23175C910FD2C62C839C40E4877F01383631C983AA9D4E0000000049454E44AE + 426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000003D649444154388D6D944B6CD4 + 551487BFDF9D7FE75506E7D199A1C55A6849694D4B114DBA102D05454D080413 + 2401435C2842353E56BAD040941089B8302E1488180C31C485F1111726A6A021 + 3E178406058229CA986128B456994E3B63E77F5C509BE27892BB38C977BFDC73 + 72EE1133D1D3D34328147A1B586866EB878686A8469334BFF8711F701CC0B02A + C630B0CFCC0E5F7EEB312AF9F3CC0D07904824080683B7005B81878045994CE6 + 26D0CCFA311E008E201D14F4845AEFE4BFE10032990C92B6017F013F497A329D + 4E23692EFB55397F7ED0CCF66296072D57305223F4C2E130F3E7CF07D8091C02 + F2C09E4020B03B954A95E7B07DA1A6A51E703FB0C0C4B74C576A85332F590DB4 + 99D921E04F49FB804D0D0D0D4727664049C7E7949F03AED76517D596DCD0D000 + B053529D73EE77E7DC7549714903A100E04FFF2B71BEEF3BDFFC36A02078A52E + D1582BF43C6F21B0DECC769859FFCCD904F4BAE9CA1DAEF4C72C5C3A77128C8B + C03740538D0DF0243D01FC62660773B91C939393B4B7B7236950F80381E2C851 + 7F5E1A49BBEA3BEF01B80D690B663BCCFE4768662549AF572A150A8502006363 + 632493C937657E9FAB94C68113401F60C035CCB6021F4D9E3D59235477773792 + 1819199915C66231162F5E0C728C2FB98F4AAA75F68201F67799D299418A3F7E + 562B6C6DBD01E7F379A6A6A66E6EB073B4B4B4CCE6972E5DA25AAD52EF1CDB9B + 1A599B889309060198A85639552CE2A5D3E941E0F9AB57AF9EFEAF30954A914E + A76F05DE33B38D131313C5896BD7F8625937EDD148B3A497817E2004FCD011AD + 7FD503569959BCA3A3C303A60B8502B95C0E806C360BB043D21AE0D14C26F3CE + E66884F6FA488BD077C045603F30096C947844BDBDBDBE99F5038F03A3C07385 + 4281B1B1313A3B3B83927E03AE035366B6EC0D41679DF7013796C89A0BA5D274 + AE526175220E863CA0626659490780CF0197CD669F49A55248DA0484CD6CB5A4 + D3C0AA4AC07D0DAC03B69D2B95A61F1C3A43C9F7690C06F124F3CCEC8073EED8 + 9CD63D0D143CCFDB0B3C05BC2FE92CF0A9A481029C5A2ECD33B35FDFBD5CA0E4 + FB005CAEDCF8D7CECC9E35B31566B6C1CCAE98D959E030B042522FD031932F00 + 365C30E266360534AE4D266AC626303E3E4E3C1E2F040281D780A899AD01AE48 + DA03D4033FCFACB151205B06B7D2A9144677B586C3C79684C374CD8BF2E1ED9D + BCD0DC5C2780AEAE2E2291C852601CB8022425E5CC6C4BB95CFEA4582C128BC5 + 088542030178697B40EBD6397702F8123802F8C0C340A300C2E130C964120049 + 343535DD2D69BF99AD1C1E1EAE8E8E8E924C26696B6B8B493AD92536EF0AB860 + 54DA0BDC0B08F8DE60F73FB5858645A2BB47CD0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000052549444154488975946F6CDD + 551DC63FCFEFDEDE3FBDBD7FDADEDDEB4DEF6A6919ED56B2280424442133D18D + 880E5E2CCE083209662C4C309A9457B089864034E2340E5F2044168D46261188 + 9390A610D148F6C2C53FD5FD716E266D735B5CBBF6B677EDFDF3F8E2DED6C55D + CF8B93F3FBE53CDFE739CF79CE57B4463E9FA7BFBF3F2C691298B0BDFFECD9B3 + 2C2C2CD0F3A94749DFF1F943B69F942483B1E7810960CCF63FA7BFBF8FEAF469 + FE7704EB8B5C2E87A49D928680CF49CAE4F3F96B00B60F633F05FC02D8019C00 + 229D5B3F7ACD5E8030402A9522168B011CB0BD0824812FA452A9EFB5FE637B1D + F3547DE9DF045D3D481A077E8EF4E1A02BFB5E3B8260DD1E4983C04EE039E0F7 + C07E20C8E5720048DA00D5CB97D649BB2481A9B5950F84239108E9749A56C19A + ED1F493A27E918B0239BCD8EAF04C1D5984391C216014560AFED93C0295F596A + 4B1064B35924C5810780D78029DBAFD89E030E844221BABBBBAFB6E849E009E0 + 8B401C302211BFE1D6F6042D0BF6009B24ED0982A021A9222907DC0D6C8EB8BA + 6191A41010B29D323C887493E0ABA164B63D41474707920E00E76D1FB67D18F8 + BAEDA79BF5F45068F97D68343640E553BFA1B6B2B08CFD63EC33C08D6DAB0361 + 493703B7008FDA3EBAB8B8882492C924926E041E0AAD5CFAA6AA151CE9C4365D + 1FDA8571A7D06EE006E038B83D01700058027E522E97397DFA3492D8BE7D3BD1 + 68F4287042D52BF7AABA02914E2435008470F3624EDA7CB75129B727B0FDBCA4 + B76D5F2E954A4033F3737373F4F5F58D0363B8FEAE6A6B255A328DC15C01FE64 + 3C0EAE5E1E7FA92D8146474791846D26272737D2120E87191E1E4612B5780F0B + 433B7034D91470D55C2F2FB074F235D6FEF5E7F604FDFDFD00542A15E6E6E6DA + 6E4A26936432998DEFD9D95956575701880701F7E5737CBC3BCD40340634D356 + AAAEF187C5CB840B85C221E0EDF9F9F977FE1F415F5F1FC964728BA43DB69F09 + 82A071F1E2453E188DF2B36D230C75C6257417CD581780D92162AFDF9E4AFD3A + 542C16276C5F90F44E2C162393C9B0B2B242A315CB783CCEE6CD9B91F42CF035 + E0BD582C766E7676969F8E0C339A4824241D070E0143AD23DC162878104804AD + 24108944C8E572F7E672B960EBD6AD442211A0D9A7805E602F80A44742A110F7 + 5C37C0CDC92E241D013E89FD65E3BCED9B8C3F607BBFED1F06FA6F17BB4BD22B + 928E44A3D160646484783C4E6F6F2F92F60131E038CD863834D8DD836000B81F + 78CE70F4EF4BE5FA97CE9C61627EA1BE54ABBD50AED7CF87818AED01E01BC0B3 + 921E078268347A707474D49202E061E0B7B61F93F41949FB2B62AC2EDD191661 + DB2FCDACAEB17BF26FCCD7EAFCEAFD4B1BF717D87E51D203926AC0E32DC71E96 + F49DD6E1760183C00F8019E097C0BE45E85C8682CD1AD6F4B15289F95AFD9A80 + 846D7F057857D230906BA9AD006FAC7B0E5C011292F6DA9E96D47B193E3B6F97 + D352D822B12DD1D9B65F6B606080743A4D2412C94A7A0BB8DEF63DC0B8A42DC0 + 5F2585016C5B926C3B027F7C2CA4833B82E077867D75FBD8D83FCEF37269969D + DDDD7CA2BBF96E04303838486F6FEF2D925E05EEB73DD152FF6DE011DB1F93B4 + 7895B0DDC033B7893BC6C2A12351C8DBBE13383F57ADB2A9A303601B1008A050 + 28502C160112C072A3D120088284A40BC09BB6EF2B954A2C2F2FD3D3D3432693 + E99274210D270E86F4ADDB83E0AD56CA5E05A668BE874F03A7C200333333ACAE + AE1204C13240474707C562B1009C039EAFD7EB4C4D4D51AFD7A9542A64329932 + F0C2226C3AD5F05F6E953F12969E007609B28669E045C3D3FF017ED213B3A1CE + 0BFE0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000777494441545885CD966B705C + 6519C77FEFB9EC39D9FB49F6926D96A4AD691A5B6DA802D6695194322A4C1964 + B00C23D84E9D019B192F0CA82378E1362AA3CC6881423F884EED5805FCA02054 + E4938882D8564A13B43753B7D96437DD64DB64377BC99EC70FDD846EB325F18B + E37FE6CC99F3BEEFF33CFFF779CFF33E7F45134422111CC74129C5F1E3C7A9D5 + 6A0DF3E1ABB7612557CD7D4BFDED960B94FEF577A6F63F0F33D566AEE7C16836 + D8D1D1A12CCB7A0BB8BBADAD6D5F369B6D98B792ABF0AEBAB206A87304C445C8 + 036FF82FFDC4F702976FFAE3E8AE7EA45A5A908076E140381CC6B2AC8DC032A0 + 3F1E8F5FD4D8AD4C6BE5536F6B3367C64C415602BB81BD5672D57ADFE59B160C + 0E4D32108BC500FA81AF03DFB26D7B692010189A9C9C9C675CCD0E917E742B80 + 6881B65CDBA6BBF6FAD67CDC06BE6C75F4BE3AB508020D19B02C8B50287409B0 + 5E449E02762BA5EE78B72CCCC29DCC31F1875D88C800D0A95A828B087F018158 + 2C8652EA76604FB95C2E8AC893C0D670386C99A6F9AE8E94EDA7F5BAAFA094FA + 083028A5C5ECFFBC23D0348D4824E201B6011F4BA552241289E37EBFFFA0A669 + 9F89C5627B8687871B8CCDB624F12D3F44F38531133D11CDF4DC02DC0D7CB47C + F2D07F47A0B5B515C3306E040E572A9523F97C1E4DD3F0FBFD3B816F44A3D13D + E9741A119933D65A02AE77D5950D0E45E4272272C22D15164560EE08E2F1384A + A97EE00980152B56108D461191178084699A6BC3E17083F16C1554B227B55AB9 + D82222EB80254AA95FB45E7F27684DAB7C7E067C3E1F5EAFF7FD4AA9F5C006CB + B2B02CAB6163C0F6783C7EFBC4C4C4DCE07955009A5EF6ADFDE45F23377CED06 + 655A0386CFF9A019EBDA5F1D3DBE7006EABBDF2E22DFAE542A5AA15068785CD7 + 6D076E0C040261DBB69B7B726B14F6FF8EA983FBAAC00160B9D2179101C33070 + 1C27086C1691D5C78E1DE3C29AEFE9E9190B87C32F2AA5B6C462B11F972FE2CC + 5AB616EFEAAB74602DF0B0B8EEC204A2D128BAAEDF06BC542A9532CD2E9C6C36 + 4B2814DAA9947A2A1289EC18D1758177AA40D97EF460D432DB3ADE07DC031C75 + 4B8583D5B1A18509F8FD7E80DB80AF663299A68BF2F93C954AE52F9665150DC3 + B8C2B6EDD7A1B10A0429231C037E29F0C8C4EF772EAA2119A55209E09A5AAD36 + 99CBE52EBA309BCD924C26AFAA56AB93E5EC49D05B74007403CD1B52325311B7 + 78966AE604936FFC96F2D09B0B06FFBF80B22C0BC330A8D56AD4B3F13F85D1D5 + D585E338DF29140AF71F3E7C785146A669B274E9520072B91CE3E3E34DD7253D + 1E6E8A45E9F3F9303535373E5828F2CCD8698E4E4FA37A7A7A701CC72D140ADA + 62092C59B28464327917F0E162B1785333BB6DED711E58B6D46769DA1781CD40 + 2FE704CC51E0E99A2B3F7AF4D4A9A9866EA89422180C52AF8CA6504A118BC534 + 603B708DD7EBED0C04020D6B6E8BC778F83DCB97599A7600580DF4975CB7B538 + 530B236C03BA754DBD747334D22848DADBDBE9E8E8D8A0941A4CA552E3A3A3A3 + F308388E83C7E3B916C802BF01EE88C7E3F7CEDE1F615DE7FEAE4E4F7D6EC744 + B5FAF88327FFCDD3D9316AC0A79CF0DFEE5FB6746BD2B65ADF2A161B09E8BA8E + 886CD4346D476767E73540EE42127571D20FEC1491D79452AF84C3E1074CD32C + 57AB556E88440818E656E0E4E4CCCCE3D7BD7598A3D3EFFCDCCF8D4FF072FE0C + 41431FCF5767D0440411A95996A59D3973866AB57A1FF002F0726767675B7B7B + FB9C714B4B0B7EBFBF1BB854449E2997CBC780039AA66D8E46A300AC0B054071 + 33C2138FA44E35049FC5B4EB92A954298BCCB5E303BAAE7FA1BBBB5BABF7FB6F + 02CFD74944EA3A715631F5034FE5F3F9723A9D06D8495DBC2AA5F0EB3A409F20 + AFFF2A3B362FF885D0CE9E3D8B887C0ED8629A66C5EBF5BA4A29572975AF52AA + 0FD8110A85D0759D4824E2056E057665B359C6C7C7A956AB2F0251D3342F731C + 67D66F68AC5299383D33B330814C26C3F0F0F03FA7A6A63E5428148C52A9A489 + 8826220F89C821E04B854281482482AEEB9F055E0152EDEDED74777723222EE7 + 44CCF9127EB2CDE309F9B479AA7F3E0180743ACDE0E020478E1CC13DD7421F02 + 3601578F8C8C9C4EA7D3733F9F52EAD34A29371C0EBB8EE3B89665B94AA91F00 + 37FBFDFE362C1BE090AED465D747DA16476016B1580CCBB2EE03AE05368E8C8C + E452A914C16010DBB637009E5AAD364FB0542A150DD8AB94FAFC31CB03F02C70 + FB3D9D49E24DD4B44FD3E8F3F948783CA8F327128904894462BDAEEB6F8F8E8E + 8EA75229E09C3E741C672FF0A76C36FBF8D0D05083C36030486F6FEF5AE0D77E + A4FB67866EB528F526220F9E989EFEF99DC74FF0E7B3E7EE890DC100DF5DBE8C + F7FA7C579E999979A58180528AD6D6565CD76556FB793C1EFAFAFA124AA94322 + B27C606060B2582CCEDBD59A356BB06DFB55E0FBB788FBDCADA6D98B621FF022 + F064AA541A345066BBE5E9AB57D215E2BA1B1A8E4044C8E5729C2F3C5B5A5A00 + D601BBA7A6A69A0607A85F588F01EB1E1D3BCD4F4747FF01B216380DECBDC4B6 + A712B635A6947A0C1810E1037B32D931D5D4DB79B06D9BAEAE2E0CC360787898 + 7C3EDF749DAEEBAC5CB912804C26432E97635DD0CF2DB118BD5E1F7A3D52D515 + 068A459ECD8EF1DAE424FF01AF16FF8123B9E1F80000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000A0C494441545885ED98696C5C + D51580BFF3E6CDF266F12C9EE771122F8903C410C05052A56C71A16C95202C2D + 7B80469425A66A49372AB5A0364A415D54B56C01C452045243515BCA22356189 + 4C15A06A03A4842684C024B163E2C493B13D1ECF78EC79A73F662638B18778DA + FEEC91469A37F7DEF3BE39F79C73CFB94215314D93E6E666004484643289AA4E + 99E79DDB41E8F34BA7D5A180934D93DFB999DCB637C029567B5D5531AB0DD8B6 + 8D6DDBEDC0CF812B868787F303030353E6B9EB9B082DBAF07AE06B9F8229C018 + CA1E85EEBA25D73E5BE8FB30BFEFF1DB298E1CA809D0A836D0D0D000F00D11B9 + 10B8BCFC5C4D5A81B94037D08DD28DF20EE017F8B520EF7A671F3337BEECEE9A + E0A08A05C3E1301E8F27082C53D5ED4057201078CAEFF7333A3A5A4DD7AEF103 + 7D3F19D9F412AE500C23588FEFA845181E7F9D88FC1178D237B7A3D3B45B99D8 + BFEBBF036C6868404496013955BDDC308C7755F5738944E2ED64325955D944FA + 13065F79F4E0B37883D857DC39EC5FD879BB886C56A5D5AC9FB3AB16C0295BEC + F57A894422002B80C780F754F55511E9AAAFAFC7E572CD58B98E8D905EF710AA + BAB5FC53B3F823335E3F2DA06DDB88C8992272ACAA3E528EDC35C0552212B56D + BBA617844EFD2AC0D180087CC244E13F071411E2F1384097AABE04ECEEE9E941 + 559F070E88C80D8944A2AA32717B31A3B3F0CC3A1AFFF167D170C32F097DE12B + 6E11F999AABEA5AA1F1553BD35011EE283B1580CD3341B814B81A5994C86FEFE + 7EE2F178D1EFF73F2222B77A3C9EDF84C3611D1A1A3A5C57D8D7727C67F30F9E + ABE44B0FB000B819A807BE3491EAA5B0675B4D8087583091486018C6D7815DC0 + CBFBF6ED0360FFFEFD008F027345E49C2A29E7246003B041443688C83A11B957 + 448E0736AB6A464D1FAEBADA5CE420A0DFEF271008B8809B8087008D46A3B4B5 + B5110E8701F6027F02BACA69E8705DDD657D86AA1A8EE3B81C555B5597021111 + 79CB1D8ECF899C7F4B4D8007B7B8EC5B178948B3AA5E0D5C54F64780CAB6CD12 + 91F922D2DCD0D0D0D3DB7BA83FE53EDAC4DE47BAC070E1AAB3D5DB746CAA6EC9 + 352FFA5A4E580F748BC82AFF719D37A6585D1BA0699AD4D7D723225DAAFA3AA5 + 6D3A64A288A0AAA8EA3211B9C5B6ED1FEDD9B3677AAD4E91E2E05E4607F732FA + AFD749DC786FC19A7FCAC3C02AC30ACE18EE20603C1EC7308C6380B381C52323 + 239BA6090262B1189665ED03EE72BBDDABA2D168E18849C32932B67333D6FC53 + F280BB26BA0A6039B7AD00FEAEAA9B7A7B7B191E1E9E323997CB317FFEFCA745 + E41EE0B24422B1B6E7B3B41B2E02279D4FDD926B012E00DEA6585B4563D6D5D5 + E1F3F9FCC0F5C0CA7C3E3F2D1C403A9DA6502864BC5EEFD3405730185CEBF7F9 + 0F8EBB1BE612BFFC4EC4F4600463781AE7E30A44EA806F8BC835AA7AEED8EEF7 + 6B038CC56288C8D54051557F5F492DD389AA323030C09C3973D600FF044E8844 + 22EF8D97863BCC50FD6BA145175602CA0022080B500EA8EA9540F7F0C6B5B501 + 9683A107F8A1E338D3D67C9365FFFEFDCC9E3DFB7D11F929502CAFAFA4984F45 + 006510650BCAEBC57C663CFDD27D8C6ED95013A0D4D5D5D1D8D88861180C0F0F + D3D7D777C4452D2D2D589645B158242521B4F59443C65DD146009CEC10CED828 + E3FD1F93DBFE165AC8D504F77FF95F88B4B5B561DB7602C8F7F6F60E554DBE9F + 21814000CBB200C866B3E47247DECA9869B23814226C9A257F2DCBEE7C9E4D99 + 11C6CA0D5AE5A8FB1D2547FF49CD74405B5B1B96655D027C92C964FEB675EBD6 + AA739BBD5E56CF6BE5BC6814D3301602A70209A0007C88EA86A189E2D0437D7D + DCB7A7AF7A5737530987C3F87CBE00F038B025180C2EA9D6BB2C0E857866E1B1 + 045CAED3815F89C82255DD05F4025E60012266D86DAEB9A3A5F9C7A78742D929 + 15B5611844A35162B1186EF7914FA672FF722DA53473BA88744C578E1D65F958 + BBB09D80CB7523A5B2EC7D759C7645DB5285F125F96271B1AADAA82E072E0356 + 357BBD532DD8D4D4846DDBB66118DE7C3EDFBB6DDB36C6C7C7A7859BD4BF7401 + 0F028B81AE783C7E4B4F4F0FC549C7DAEAD656022E5727C81A545728FAD8FA74 + 9A5FECEE6573368B57842FC7A2E377B6B63CDB6CF9D623381FE6F35301CB565B + 2522E7589675767B7B7B4F35C8B2F5CE149185AA7A31B009F8AD88DC61DBF6E0 + DEBD7B0198EBF372762C2A82DC07FA98A28FADDEB99B7B27E5DC31559E4B1DE0 + E5F42017C6634300AFA5074BD9BF5C46619A26854201C771BE43A9AADE605956 + 4B7B7BFB94ED16914A91719BAABEA8AABB54F5CF405A44964FDEE6F3A2514464 + 09C802555DF542EAC021709325EB383CB36F8067F60DB07F7C02A37C6EE68160 + 2C1623954A31343434AAAA1701C93264EBE190E5167496885CAAAA0F643219F2 + F9FC04F030B0C2E3F148B912A7DD6F019C07FA26F0C93DBB764F0B379D548264 + 3D70BD699A8B172E5C2891480411C9014B818F80D72A9086515A52B6D0CDAAFA + 31F06A7F7F3FFDFDFD50EA5D9A0DC338BFD2019A6240A981DABC353BCA8E7C7E + E680C3C3C3A8EAFDC03AC330DE300CA3E876BB1D117144242B22E788C83CE02F + 966599A6691208040804026E11B90978707C7C5CD3E934A9548A62B1D80FFC01 + B82D1C0EE3F57A2BEF0AA33AB8259B9D311C80914AA51818189850D5EB1DC799 + AFAA5F04CE52D5CAE76555CD032B5575425549241288C8A5401DF0642E97231E + 8F138D462BF9EF01E002119937C917F3885811776DA9D704482693F4F5F5E1F1 + 7876023B63B158A5895A0D9C015CAAAAEB76ECD80194FC0FB80DD803AC0C87C3 + 957433F90E3107ACB06DFBFBC648064A4177D469E1305E918347D9112D58F932 + 3636462693C1E572556E17EE0656029754E0D2E934F1781C11395144CEA0D48A + 768A4827D079D8F7EDC072D334AD422804B011E80C1A86F7AA8699F7C653EC1D + 8BC500EE02BE095CACAAAF54E0E0607074A96AB7AA9E3D323232F55F1B067EBF + DF12911EE0AA770DE389EB94E7111E40E4863B5B9B1FD938345C35583A020102 + 2E17C9E9123580AAAE53D58DC0AB93E1A2D1281E8F27025C0B2CCF66B3542B0C + 3A3A3A725EAFF709E0B66DC813BB54B3AD227703F7D499EEEEE78E3FEE8315DB + 77F0D749FD4F9DCBC5F79A9BB875F62C41A4B5BF50D829872BF6F97C34353521 + 220C0C0C1C840358B06001E170F85BC0778179C96472A27C2D324566CF9ECD9C + 3973DA44E403555D728E216FAE340D43906781D350BD45E1F94D9911360E0DD1 + ECF5726E3442D0345B44E47EA05D1DE7D82980D5C4344D4E3EF96411916DC053 + 131313ABDF79E79D692FD6A174649E78E289B85CAE178041C771AEBB697890CB + E2711391D594FCFB23A01BD57D8884800E903341FF01BA3C373EF1C18C6F234D + D3A4B1B1D12F224DC0FDFDFDFD23D335F715711C07CBB2F0FBFD9533EDAD47DF + DB82DB10675128F88A213C0932011C85C831408852A77897AADEF5612E975AB6 + 6D3B33B6A06118343535E1F797FAE06432C9D8D8D867AEF1FBFDB4B4B400A54A + BBA7A7D4E6377B3D5CD9D0C049C100C1C36E6CB78E8EF2FAE010EB0FA42902FF + 06ED1005A4A02270E30000000049454E44AE426082} + end> + end + item + Name = 'control-edit' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000000BE49444154388DC592310E82 + 3018855F0D17F86781CD0E12599B30D0E095D453A8897A209A327008DC046726 + 56EB8409291A6207DED23479EFCBFFBF16985B8C73EE04F088E8E5040080B22C + CD3FE1244998D75F9AFA6119FC20345A172C570A9CAF5055776CB30C52A6C309 + 00E0D9D46C0C20658A38DEE0783AB3C37E678868E0594C19B50F1191B5EA24C0 + 2F4D02B46DDB9FD69A9F0E967E30FA125A17C8954214ADCDE57AFB5EA21F8463 + 7926653A0858062184DB47EABACEB9C879F50692B0341C9F0AA3AA0000000049 + 454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000012B49444154388DD592BF4FC2 + 4014C73F6D2F9D28A1896DD4C49A9414128D031172249818075CD4FF1667DC8F + 41C22C24E0AFB00A9DDAE26060A0542176D0CF76F75E3EF7BE2F077F1DCD34CD + 5C85A256AB5DE62A04BA790A9152264AA9F8B728A56229652296E2288A88A328 + F5A0A6EB98A6C9D37048B7FBC0B1E761DB3683C180A01270D16AA52203F0FEF6 + CACBF3445B175AC5E2E2E4F40CAB50C0F38E504A310F439ACD26CE9E931A40A4 + 6E32705D97EB761B80D170C4DDEDCDC63E7D5BE1124337D00D23B3BEB3F02776 + 16C6494C12C799F5AD77389D4E79ECF7E9A91EF330A4D3B9270802AAD5CA66E1 + FEC1218EE32ED6459AFE15E26336633C9ED0683456DFA66497B285420884C81E + B8ECFB947D7F75AED7CF37F66952CAE4FBB0BB2180AB3C859A655979FAFE019F + 01A18E586BD072150000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000001B3494441544889ED94C14E1A + 511486BFD30CB0F04A358A090B864565485A1977C35AFA1AD6BE49AD69FB0C6D + 67D3F63DA40FA04B5337536908AB5969443684F1B88021C354048CECFC57FFDC + FB9FFBDFF39FCC8567CC80D8B6BD5403AB582C1E02A82A22C2BC7C1E9DAA62A9 + EA8764C1227C2E5DBD5EBFF57D3F1A0C0683688479F82C9DEFFB91E77991B568 + A6DDEE0D27A7271863D8755DC230D456EB9F6C6C6E885BABFDA7B734D1D7F99F + B3984A42230085C2169B852DAEAE2E69367FA3AA1C1F37A5D7EBA1AA54AB0EB5 + 9D9DF159F1B1960C27A300DDEB6B196DEA687DCCF3F9970A502A95F8F2F91341 + 10F0E3E72FB6B75FF16E7F9F4C2693AE01E0C5A211018808954A4501CAE532D9 + 6C76AA7622A245398020E3B5946E68908C281D4B8A4F68521DC93D35C023234A + DE56D107758F32505582E0AF00B4DB6DFAFDFE54EDC40C56F3F9E47526782E97 + 03A0D3E9F0F5DB775415630C17172D0E3F1E51AD3AF2FEE0E0E119BC7E538B37 + EF9B01AACADADA3A6F1B0DCCAA61D775350C43463F5A7A86438374EBB3B8312B + 341A7BE36FDBB6E317595555D235E2795E3435C02780252247B1E3329E6B711C + 67990D3C6336EE00B01E6DBEA24776AB0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000000DE494441545885ED95310EC2 + 201885DFDF7464F9D7EE3AE8014CDB63A9AB56573551EF648D57A88760226512 + 1771D026A80334916F212490F741C8038844FE1DCAB20C428820E15A6BA44208 + 30F32D8480522A49EDA4AE6BE333BC280A0280C4676817A97BC9672C96158808 + C3E1004D73853106EB556500901781F5AA8294129BED8EE6B3A96166B8C23B05 + 2EE79373D32B93BCBC01A0472898D979724BF0371005A2401478EB81495EFEF2 + 2710004829F1189F9DF0B5C0AFD82A1E8F47667F3886A9E20E9C6DD89F3760FF + 67EF025A6B28A582DC44DBB6216223919E71077B7E4042EE4430150000000049 + 454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000175494441545885EDD7BF4AC3 + 4000C7F1DFA509248BB5D8401D7AD06C6DA54726111771B16F50F73C81CFA0CE + 3E411EC1CE7511172BFE5932A758EC032425CB0D259C4B2BA504A489E582DC67 + 0907C9E53BE4B81CA0288AB25344D775689A26BB239310023AA514B66D3300FB + B28336CC932409F4E5E00EC099C4982C4F00CE5781F03C4F789E272F678DEFFB + F07D1F0050CE8F6F8DFEFB2DF97CCD66988413989609D6EB89300C4914C5A8D7 + 0FC018931F388F637C4EA788E308A3D103310C03878D06168B4539021963608C + 81732EAE6F6EB5CBC14074BB9DADE7C90C7C7D792645E2DA9D23B157AD02002C + CB22CB6BAEB94ABF485460512AB0281558940A2C2A7327393E39157FF502CEB9 + 004038E7B99EDFD95E1C0401DEDE3F104711A9542AE27E38C4783C46B3D944BF + 7F213FB056ABC169B56075DAE86DFC6E6D6367819452504A5743E2BA6EAE794A + BF4888E338B06DFB11253C342549F27368BA42098F9D00404CD3846118B26332 + A5692A3B415194FFEF1BEC896421A69682900000000049454E44AE426082} + end> + end + item + Name = 'debug-step-into' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000001D549444154388D9593316853 + 511486BFFB729F2F92A72FA94D8744A890FADC544474B2608788A8A353141441 + BAE8A0081D74510441C1A1A28B501C14ED96C1AA4B1637B574D3499124A54843 + 1AD246F3C8EB3D0ED590DAD7142F1CB81C7EFEF39FF39FA3B2D75F61A7872F02 + 1328955360B1C50B9B8BD9CADDD30B00DA4E0F5F006E809C33C1AFD9B03E6F58 + 0DFB12ACB61ADDBF062680F3CB9F5E7FAC17EF239D804C2683EBBA7D493CDFFF + 43A054CE043F67EBC507482700C0755D52A994D9AA1500AD2016D6E78D74DADD + 64BBDDA6D56A7567E1380E5AEB680200CC5AB1F8C81112FBC7682C9629BF7FD1 + 05F9BEBFA9222D606203590B4B9BC1B337E3DA1B7A02DC8AEDD8555D9A99ECC5 + 46BA6321F2D57212879227C61163DAC03250F2460BBB53A7AEF4624D5458C03D + A578961C2D1CD65EDA02AEA2780794BC63856C323FDEAB6043E8B0599BD23B07 + 41A9E7CAD239059680A00091A7DBFDA327F95EFAAB60630B0B8F2FD1FC509C0A + AA5FF6858D1F5A442C442641BE019783EAE7BE0A542F5BE6DA4BB60DED7988E2 + 0CC2F195B93795DAF41DFCBD239BBBB04E4EDC75800184B195B9B795DAF46D10 + E9EBC23A058903791207F3746A6596661E81AC15EDB7072A2AF9EF2DB8AE8B6D + DB515022F7F37F6EE137F602A172A4E0AE6F0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000025949444154388D95944F4854 + 511487BFF3DE9B199B722C9B315BE49B78BB208C36220845449B5AE4CA1681A3 + 9B8C0C0437B9125DB588146C618BA86002CD22CA5AB4080A321DA2853BDBD428 + 946834D28C8399F33C2D6694196BFEF883BBB89C7BBE7BB8BF7B8ED4778DE2B3 + 4F844418005A45A40E102A57C78FC7830F573FBD02C0F2851B83021F80347043 + 55E70115A9983997BFB1041904D2AADA9C59595C4B4D4FB0B1F415D9CCE0F178 + 2A22BACB71BC5E6F16085C04FA322B8B6BDF4722E85A1280603088E33836102E + 4B0C34000D39A0C82154E753D34FB661798A00FD159599932159037463E9CBFF + E20380B19B650188089AF993BDC15F83A7DE21B59921168B15D073CFD00EB417 + ABD00250550C7F0DE2DDC3E1AB77F184C2B6C242F2FD98AEBC1CDE991307DE15 + 052AAC0355BEA32759FF3687150A57033181A781964BDDC04E681C785BBC42D5 + 59E05CA0A9F5F5C6721CDC4C0AD3EA15E1018A065ADABA01F2A0114A1825F6CD + 9956813155ED041EB1E922A605C26590FBA88EAAEAF5E4D438E64C14C7718AB1 + 7215C233A04F0CB9873288692D009A0DEB2F11B906B88196B69EF44C14B28614 + 3725F1FC16072EF4DC16D39C10E43C421D8AA00822C71475818F7939714A9822 + 00E6FE7AF61E3F83E1F3E36F3C8B276423C81D842B281D0AD1C4E410BECF6FCA + 764FC1043003751CE97B01C20842174A07683431394C726A7CEB1FF653C214A3 + 806E9820EC039A503A816D589E4A768F957FD25DFDC9EFF8EC6A55B8B1197013 + 93433B6150C6947F869E585ECCEA831828A41305B1DADA5A6CDB3E059CAE18B8 + A55D8DAF3C5965E2117639BEFE02A80ECD81E5B2E5B90000000049454E44AE42 + 6082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000309494441544889AD954D685C + 7514C57FE7BD17A7699AA626C1898B69DD741389AE42D408460B5594B66E3A01 + BB93B6B86A41A22E94C445850A455DE8AA20BA28A89B50C722883404FC009516 + 6C16BA505B5A17A6C9048798BCCC4CE6B8C89B6426997412EB5DDDFFC73DF79E + F3FFB8EA7EE10C6D7D07403C2534827804D3214900B6DDC8DF64ED93D2ED1BC7 + 6E9DCB56B710B5F51D40D2ABC05BC04DCC05602609609B36B57E22423CB902EE + 4F6D8E03F1F27C9EF2F4755C5CDC6E02CA85DBF5098446809B86E3CB0B85383F + 7E9685A909002491C964B6952005B4EDDD5BC7E051CC054C3C3B7E96C504BC9A + A0A7A707496300B6A995AD76DCC8B74D04740033CBF3F93AF05AB33D5A0BBA6E + ED8E7E24246397A7AF6F4A5B5278370C56060D0EB452A93035B5E162108621BD + BDBD00639B569558E42A97B0A55A2E5DCFBF466BEFE300FCF3F3D7CCE5DEAB0B + 0A82A02AC168738956A828BAEF0100763E38C4AE8123089D02AEED1E1C9E1001 + F9DC3B754992B8B0A944C605A03BEA4893DAF750C2445DC0EB40ABD091F6C1A3 + 1360F2B977D72BD05C22CCF7C073E057BAB26FC6F33F8C8399453C037C055C14 + 3AD43E989D34622E61B2558902C339A48CE07C4BE7FD3BEE7DFA25A89401AE02 + 0711312227F4C4EEC78ED279E86590AA728492C2E4966DF08130022E63BF8174 + 463088C24BC0CC8AD0007C0B1C063E9774B87D303BB970F5CBAD4BB474E31AA9 + 7D7D6F837F4C7ED363C96FBA465542A2DDF6096092B5B730BA1970D582BF3E3C + CDDFDF7D46A5185FB6FDACED4E43683BB42B2DC0796C6C5FB4FDA28B3195C542 + 55E3649FC3463E10AE96A2D44E5ABA3304A95D74674709F7A403C107C049440E + 335C29C54BD31F8D50FCE30AFDFDFDD81EDBD24B06F0D202C53F7FA5EDE18344 + 1D6901EF4B3A697CC966D8A57869FAE311E2DF7E2208822D4B14359C157B8021 + DB5F005917D7C0570B5A9368FD5C9DBF214169F6162E17E714DD3304142AA58D + E0B0FA929B4AD4B027EED83F40EBFE0100167FF986F8F72B75EB411054CF60F9 + 3F25A8ADB2514793443A9DBE53E8AA353E831AA0FFA3A335B5BBE968FF02916A + D2F578D4740F0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000030F494441545885ED964D481C + 6718C77FEFECECACAEE3C2BA4342D45D7B690F065A0A4DF1905B0239190F4D3C + 049B801E4A9B5B2FC54A5CE2A1901CCDADADEDCD9098433E109234D183A0A114 + DA924DA9162FDA9284ACBABB6676867566DE1C566D96F563475773487E303033 + EFF3F1E7F9CFFB32F0B6235E7F50634DD4B79D42359A1180285DDE16D7CA91BE + 3EE02B475DBB097F780CA3B33FACA8A15EA00B415C20143FC59CDC8B26E0A96F + 016AAC09A3331956546D0CB0816E2999715F2E7848AFE262EEF2E2733FCDD705 + D4B79D4251B55EC0969E7B3CF3E0472737791D699B7EEBF9460508C69A01BA80 + EECC8321273BF6F39E372E11801020445C4A6F3A37796DD3E05028444B4B4B55 + 1ADBB6CDDCDC5C5140F18B4771CDACDC6AECAAAA128D46934072B7024CD354E0 + B55D0080E76C99E4BA2EA6695E042EEE56806559940BD806DBB649A55225EF1A + 1B1BD175DDB780959595CA04E8474E128AB762FDF32BF9C763E5EBBA4E341AAD + 7CAFAE5262812C5E52A98F090241708BEA14BD81D867DF360B18D03F693F9F56 + 8396F9FBBD9242B66DAF17F3C39A05AB8912A47C06E2BDBA8F8EFF1FE579E079 + 0B404228815B46677F6DDDC7274A0A398E43A150F07D9558E09819801101DF34 + B47FDDE1BECC60CF4CE1E533A447062CA3B3FFA45094DB82C04DE374B203296C + F38FBBC0EE2D10005AE23087BE1A8A0A9802FE94907416E6A79DF4BCC4F3D0E2 + AD04F48630823B481CE9791D2F86FBEC7C6A9C4422412412F1DB1FCBB2989D9D + 2D4EA030F784CCC3A1A5E8B19EA3C02501BF694622AC1989F24C01284A5FCDFB + 9F5EC8A7C6D72DF04BD92EC8FEF20385FFFE4E478E9EE9091ACD5F2084215627 + A4D44610AA560B5C03B2C07785F9BF802A59B015351FB471F0F3CB3522A8DD2A + 0A96ED8BA383F9DCC45580EA58B0194A6D8403672FD70875AD39ED8BA357D69B + 03D5B3602384AAA1A89A013C93F0E5D2E8603E37315C125395836833DCE5344B + F7BFFF37146F3D67CD3C6279EA4659CC6E0FA26D8FE2ECD84F5BAEEFA90595B0 + A71654C29E5BB01DEF2CD8570B36FBFBD9370B763AEE8DD891053B1DF746AC59 + F0C679058B8D97CCD7AFE6DA0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000488494441545885ED985F685B + 551CC73FBFDCDB26ED92AEB959BA56A55BB331C13F542AC35587BA4D50B02A42 + 411161B39332063E5406A282B00705116D755261886E8AE0C017AD821B329C52 + 441161A8C5873953485DD6348DBB77BB6DBADC1C1F6ED2A62E6BD3DC54F7E017 + 02879BDFFD9D0FE7FCCEF97D13F85FDE2457FB420BB71602AE1A52919493C331 + 5355BFBF78769F46D3DD4FD074E7E36821A351446E4258E30172F6F2F49FDF27 + 5E7DB46A407D6154CFFABE411A62B737032F23EC11A4A1EACCAEE240CC4B8279 + C0F003FB69E8E88A02DF0011142FE5459D10852952F50AE6BCC0CD03FA8206A1 + EE5E10791708A2D4D6FCDCCCB8397A8C99333FE06492554FA01C6F8C3A40A0A3 + 0BF1E9B788488F52AAD799BD389E7CA79FCB937F784A5E0BF900A4AE1E11EE51 + 4AD90AF5D9F4E743D7041C1456B0506311200538F6CF27977D31180CB279F3E6 + 55034B26932493C992532C222845DE9A46CDCD2C9B4044F0FBFDBB81F75781EF + A0A66907A1E4148B3B2B2A37B792445F023B6A8AE62A5E1CE84B042D29DBB619 + 1B1B3B0F9C2F7D5E575787CFE7AB1EAD243F7800741C07CBB2AE781E8BC58846 + A39D4073D574104F2412E3B66D570E18EAEEA5F1D69D90CF91FEF47572A9F1A5 + C207817B3D001E2C7C1600154AA10A26417CA0F2F3D15A5314E3910322F01A70 + A4B57FF897E4E1FD4B41EEF400B748BA0B07284C208C42029BBAD4EC991F17A2 + 341D600DB01D78520F45EEBB1AE4E4E424A6697A065B5C83EEE27DE713590BEC + 08F70C9C4C0E3F3D7FDD38569A6CFCF4C5C0C6CEFB118EA3F84A0F4576B5F60F + FF7AFEF07E2E9740B6B4B4108D4677031B3DF07D9D48244ED9B6EDDE2EFABA0D + 5C7FE06304F9167715B7679367FECA7CF126B3677F82BC83D437B0BE6F884047 + E75AE0048A0DC0CE9C951E2B5DC9C2217903B8CD03E0D144227174626262C1E8 + B5F40DD2B0A57B93C02870017851893A8EE358CE05D7704A9D1F2D6800341756 + B21DD895B3D263E70EEDC13153B4B5B5D1DCECE500BB4AA5524C4D4D2D1C92F4 + 27AFD0F6CC91DFF550E40E6058448E0922683E7CC675E5B30828A54E6821E346 + 3D72C325C74C91CBE5C866B39E011DC7014A4EB163A63877680F46EF0BE38D5B + B63DA8F22A26225DFF74D44AA9021ACF8B10039E03B954ACD7502854932DCE66 + B3473399CCE27BD03153A4DE1B405FB781FAF69BCF8A70B6142EB8F561FC1B3B + 11781B9198423D05EAA3E99121E6267E2B4D751AB74CAA55BC38A8D82A87EE7A + 8C48CF00088710D987527D0A3ECC8C0C628E1E9B8F0B87C33436367A6073659A + 26966555D649B4A62891870600DE42D887527B290307EE161B86E119B0D84A2B + 0214F7A20E02DB50EC053E982E0307A0EB3A7EBFFF241E5BDD15766B2939569A + 59F7A2EE069CF4C8205619B8120DE0D12C140715D7A0E8F568A1C8B23FC483C1 + 208140C0039B2BDBB659919B51B939729973CBC6155ADDBF6FB756A8DADBAD1A + AB6676CBDB3F4365F49FD560A5AAB5DD5AAD2DEEC45B2F8E03A760156A706666 + 06D3349FF59AA7E888AA066C6F6F47D7CBBFBE2A766BA5320CA3D8D25643E5ED + 56153A55139C2B152F0EAABE665A5B5BD134AD2634E554B45BD7BCFE06F4E9D2 + F5100E7B350000000049454E44AE426082} + end> + end + item + Name = 'debug-step-over' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000001CD49444154388D8592316853 + 511486BF73F3DA9736AF3409A643324488BCCD0E0E3A3819042737DD142A3848 + 4745E8A083EDD882430517C1A9A01D840C55171D1C1C34B582A28214314DC421 + 3E49D2B42FC9EBBD0E6A486BDEF39FEE39F7F09DFFE75EC95D7BC848267F0998 + 43A420A01850A7FA517D5B9E214CD648263F035C0773417776D703AFA6C7B48F + ED7B48D025F1E32B8EEB86038039E062ABBCF6DA2B2D627A1D5CD7652295D27F + 8712A9540440A4A03B3BEB5E6909D3EB00E0FB3EED76BB1FC5B66D2CCB1A0E10 + 88055E4D9B9EDF6F562A957D43AEEB921A70743002EC05A11607A4863587FB1A + AE08070794CD66711CA75FFF39473890DF77F123C7494C1749363F33D1AA0EDD + F80FC0808EA5730A65E943E76FC4ADC9A9BBDD46EDA6FFBEA4F6BEBCF93F0063 + 36959D38963C73A56CB4F6815630997BDE38395B6CE895EACFB5E548402C79FA + 725B84C578FEE82B658F7F17518F115C60219E9F7E84B25AFE663914A08266FD + 3EB084C88AC4ACAE88689059440AC0BD31F744B483F6BB67C8E8F85B8CB983D1 + F3CA4EDC02D20819E0DCCE8717CDDD4F2F4301325864AF3E6074EAF06D84B318 + 4E6D6F3CD9AAAF2E80097F907DFF40C51D1B4863286E6F3CDDAAAFCE83319111 + 7E01A34E9DC55C7BCC090000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000024D49444154388DADD4CD4B94 + 5114C7F1EFB93AEFF8D2F4A446A50F8C50249AB40971E1F462D6A6ACBF2082A0 + 1641D2A25A94142D5A066E244CB46D6E5AD9A2859BB256A611B4A9718434B1B0 + 1975C6675E9ED3429286669C093ACBDFE57EB88773EF95A6ABC3F85A3AF78870 + 1FB820220D80F07799D8AD6345E2C2AAF6D9472C8137C006705B55E3800A8A64 + D248DE41F2398C93C4B2ACF2A0200F800D55EDCAAD2EA5D7A69F935D8E5117F0 + B0BF3ED023F94C1475917C2EBA2B12290F02FDC09DDCEA527A71E8129A4E0210 + B22CAAFC111BE829AB1480228DA8C6D7A627B631806C364B32991C07C67F671E + 8F87402050AE654441B3CB5F0A161289048944A220B32C8B482432080C963E21 + 2022682E53695763C0D48EE03F960D44FF3758725025C170384C73737341668C + 81AD218D17DB5314F41D68C37FB08B90BB8E772336283B0CA024A8AA54D53761 + 8275345E19C27883E7CD66622A3B3D32E6F9B93055EC1D9604155D530807DB4F + B0199B41BCC11A60D8F5D7CDFFECBED6278B1FE33F261EE23AA98A40B11FBD7D + 01E4D5D58BEB3393843A4E623CBE768457289F153DE3CCCF26974707D04CBA2C + 6814EE21F48991273547CFB648B557800F402F42AB20937EBBB3B6F1F2E38A4E + 68D449CDA29C06BAC5989831262F22AE20EF41768B4817F0CC677754067E1BB9 + 8EF37DE1B5AAB6A9EA6145A3AA7A5C55FB4157145D01EEBA4EF976E18F8FD4BB + EF10265043F8DC4D3C0D76ADC04B845694536E2635B7FCF4064E7CAE2CB87D0F + 335F3F515DBF176F831D02260BB0D1CA300053244B01EF507AB7B0019CF9CA30 + 805F62E1E5B4CBC9F03A0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000002E8494441544889A5954F6854 + 5718C57FE7BE97193226BE90647408D1A860C1C6A49B89A4CB34E9A60BFF76A1 + 6E548C75D3A51474A30645D75D2888500A15EC4A5782A5B594DA2EBA680B2DA6 + CDA69110C1A871944C669CCC9BAF8B37D1313398377A5687CB77CFB9DFE17EF7 + AAFBE039D60C8C82F848E80462182390240033B315DC9BFDF210A5D97F88037F + CDC02892BE00CE033318D780C75531AACA8045BC52C14938E7E21920462271FB + D68C71A0182ECC539E9BC6968A742B8F977F82CA45542EE10A39D2BD01F464E3 + 19089D00660CC6C3C5E7C5F91B1759FCFB47009C73F465B348AAAC8C0BA9517C + AF7133331FF121C6358CE2931B172954C557E04CACE3368C0802E071B8305F27 + 6E66E472398089DA75490441F0B2A6B67E25F785649895E7A6EBDCCD8CA9A9A9 + BA75E71C4343439859B87A44D51359A9D06CF70067572BF0ADB6AF2650DD36B1 + 7A44CBB7A24928BA45F1227A131A0D94E779CBF4DD2272CE91CD361EA8778AA8 + 65FD16927D833819E811B2B07ED0681C4B2D7F199199E1DABB22F1F42632C72F + E3A582345679FEE2B7AF5E241FFC7546BCD55DC037580212FEBACD28D14A4BCF + 7BB854D009FC84DCE442FFCE03E5F6CC844DFD4CF9E983E60D309B06065D4B92 + 8E8F8F539ABD07664F91EE0247C3B6F4F5FCFB9FEC2F6F1C2E3DBCF2394B73FF + 3565E0758C8DAF070E0377921BFA67BCB569FCF62E70EE96A0073800EA57A2F5 + 666AFB4858F8F7572AF95C7C8360ECE8EF429F4A3A2629E707EBEE23B728C980 + 5B885E4907816D2E91BA991A18A92CFC793BF6E43B2A956706A3C01FC025A487 + 924220044A18472CFA71F622AE7A6D9DF86BBB6377E03FBA7E9AAE7DA7665DA2 + 754CD20E6098E8855DC607A0DD6079E06B9A1C7C01781D19DA867692ECD90A40 + A2771B7E7B77242EBEC34801BB0DFBA130F90B73DF9C847029BE412D927D8364 + 3EBB843C3F128714C62EC3EE1426EF56C5CBB13BA87B68FC8E0C727E27701B94 + C2D80354C54F35250ED18F560713F3820B98DD33F8FE9578BC586AF13F639874 + DD30F2BD4A0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000002B6494441545885ED954F4814 + 511CC73F6F765C77C7D5589D88765524E88F0A6504E1C1EAA0D125E9620A6217 + A34BD74E1269041EECD839E912FE431091C08318941841104117A32E6A68A88B + 4E8E3BECCECEEBE0FA275757DD598BA02F0CCCCC7BBFF97E78DFF79B077F5962 + FB835A1426BFBA01552F4600E2F7E11425A2068B034F5C01A81B37DAF95AF4C6 + 764D5173DB8016042502A1A42BB68D853030E71A402D0AA33776688AEA1D072C + A0554ABE2456971CA4B36771E267E4871BF34D80FCEA0614D5DB0658D249D42D + 8F3DB78DC901A465BAFDFEC100728A8A015A80D6E5B16E7B65FCC5AE9343A110 + 8140206BE6966525F7801020448994CE9431D9BF6741201020180CEE9DC92165 + 9AA6A202C91D8F92305764BA65B72C0BD334D36ECCC3281A8D6E7501008E9DB6 + 607A7A7AD7F79946138FC7770064A84CA3D98CC0AD328D2635820C65DB36B158 + ECD075FF23F81FC1BF1741BA1FCE1F89E0C8CE8283EAE8CF827DB4D759E04607 + 0210BE00C79B1EE329D08531D127CD8FA359035000E4FA2595FC228127276592 + AFAC0AADBCA63E377C6E54BFDDEECFBB7823BB00EBF6721E4459DE85BA944989 + D508D271C6008F509461BDB1DD9F57951D080F40EEE9CBE486CE960AB8E93B75 + A92F36F7157B69760BC058C08E7CB7B5CAAB834211CD02A549ABB836684766ED + F8FC37570002C05B5AC9C9FBDD4101EF804F123AECA599297B7146E26C759DB7 + A4024FA050433082C4968E736BA1E7A1B5F6F9B53B008063D7EF11ACBDAB035D + 40931042DBAF584AD969BC1F7A1419EA720F00E0AFB842414D33397AB18A10BA + D831AEF80B10AAD70FF4032B40FDE2606774F5C3487600D2C977A69A13779EFA + 448E77185041D6475E3D5B33DEF6666C7E6000351822F4A0CFA7A81BE624CD7B + 5C99C3661BEE33492B4051BDE5404C66D11C926DB89F125103B5303C2F13F15E + E3CDCBB831E16ED9B7EB176FDA2BA99AF6082C0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000003BD494441545885D5985D685B + 6518C77FCFC9B1696D92AE495336C444287AD3EE620E6765CA205E0C8529CEC1 + C481DB147516BF2D88F54204BD98085A95098254D15E08435027289BBA5D8830 + 87182CDB8589A6505C6DED57BEBAD3247DBC681B3A48D734E7BC43FF702ECEC7 + F39CDF79DFFFFB9C8717FEE3925A17ED8E384DB16E44406A3F52538B4E91E2C8 + 0F9EC101D8AB4F7CA128917D03B4DCD86B81EC12613B426B9D90B3A5E9BF068D + 01FA4251B63C35841DECD80E0C89488FA25328B93A07710C18F4946E3560E4FE + 8115B8D340525577A8E839162B94E726EB4A56999BF09A6F09D0EE88D37253AF + 050C014994C4C2786A61FAEB412EFDF10B2C563C7FF18600FDB16E963C273DAA + BAC3F93BBD30FEFEA3E8C2FC9A81E17018CBB28CC2954AA595291644B85955A7 + 143D3773E2ED2BC201C46231FC7EFF2B06F932D96CF6631B400410694535072C + 4D6B7DDA65080EA00D562D12591EC6F2F4C5BA3C97CFE7711C2761109042A170 + 791DDC8852A9D49AF70281009D9D9D8DA6AE6A9507BD55737333D168F42070D0 + 459A5FB3D9ECF34600979501CEB88C373382C56291B1B1B133B803C4711CA353 + EC3A4F3E9F37036859D64A8D7453274F3B8E9330E9C18F58FAAF37AA5930E4C1 + 5C2E473A9D1E0546DDE431566682C1205D5D5D71E006176966B3D96CD2E4141F + C2A5078184C976E455C0727124C08507D76BB7D2E974A3A9AB72E5C1ABDA6EB9 + D0D56BB736AAFF75BBE5A5360CE80B8409F4EE05A0903C4979D2552D5E575540 + 0550455A02570C883EF406CDB19E6D402974EB7D23173FE8330A6955E1D03260 + 5BFE005620BC66802F1801780D38E50B467A363F760C3B1A370B088A2A7F22B2 + 052112BA7DFF9A01A5890CC0832C3594A7EC60A4DB24A4055099CF017C836A51 + 90FEB63B0ED0BAEDEE9A0193C3035CCA24E780DD08A3C07726210540EC26AE7B + F904764BE805118EAAF28CC2312793D4F9D4592A33E3970735B5D07E571F56D3 + B59B10BE45890177967353E7C73DF664755B2870CB3D44F6BE84881C45A41FD5 + 1184932839911ABB47AACBDE6593883CA9AAFF2824E67F3F7B61E2C3A73D03AC + AEE2FCCF5F62B76FA62D71F84594CF05FA507623B4D6FE3401D5958FB4800E81 + AD58BE0B9ED1516303B3E9FA6E423B1F587703D36EEB442D0B41DE03791CF410 + 303CF5C59BE47E3A6E0EB01E8576EEA77DCF7308BC2B224754F530F0E9F4576F + 91FDF133CFE0A05A66EA57F0B67DB4EF791681774438A2AA0F9B826B08B0756B + 02415E47E409551E013E3105070DFC8BB55206388EEA7985E1198370D08007AF + 89C609DFDB8F583E0ABF7DEFE982A8A57F01D4FC617D782F2EAF000000004945 + 4E44AE426082} + end> + end + item + Name = 'debug-step-out' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000001D449444154388D8592416B13 + 4118869FD99D74E376CD668BB1252DCD21BAC72ADE2D185011FD035221D68378 + F124857AF0E4C58322D8A247F1504110A1425B89E0C1ABD1120F160B554903C5 + D636D558C99264C68325B47193BCA7F986779EF9BE7746B04743375F46A57BF8 + 1170EBE7DB9952797E8A6E32F616BA51AF0215E08D3B3A36E49DBFDE15608A03 + 07714F65714F5EC4B46398B6BB80C0076E4753232F3064A5BA926F0B1083379E + 1149A4C6814984480B3034E87F2DE95C505A3AB7363DDE7E844822751998007D + 492BD5A3B536D07A0AF417E06A50FAD4358349205BC9CFBD6B6C7F57C07D0417 + D0647E2F2EAC6ECDDEEB0890089156C19FF75BB377199C786E017D666523637F + CEADF67C7C4DDFD1239D0102CC7A794DE95A95F2DC83A0F7F8996C62A380BDB9 + ACECB8DBF13080D4A04CB7DFC0906AA79063A790233A3C8C88C59A4F6C591652 + CA362368BD6258BD27E267AFE5B75F3D04AD28168BFB4CBEEFE3799E0A07C01D + 2178121F1DCB3AC74E7FA8AD7F5534EA4D436DB304CBF3D0F2E99A80FAAF1F8F + 65EC10083123BD8174C41BD8670C4A4BC62E20B40361C6FB713357B0923E0881 + 6831D4D6BFE12D3EC5F3BCD00C5AFDA1EA96C17F4A2693388ED3AC77D7E11984 + 6D3A8ED3F6C656FD05F54396C36A90A8FD0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000024049444154388D9593CD4B54 + 6114C67FE7DEEB95C646651C6D16A2D6B8280C5D454481D0220317E13F90AE0C + 6D11B50872132191E0A29DA06D44DC848B8C367DB848A10F2C88202C88E80E14 + 3433D7019BD16AE6CE3D2D6602351DAF0F1C5E0EE7F0BCCF799FF7089B60D636 + D23CF24804C681692FBBFAE1C7D4305E3A4150185B32D302A801CE000B56B8E1 + 786C7002ABB175FF8446A80EB16C0A292707F4203865D28ED8E004550149C58A + 3413E9BBCE81F61388C851A00910847AE01E8A0F9CF5B2AB2BDF6EF7EE4968C5 + 8626B1C20DA781291139B6B9A8A02288AADE31C3910B814636C3914EE009F042 + 7DFFB0EFFBA6AA1AAADA099A56D565E0622115CC18439051E099AA0E6E7C5E4E + A89757A003580012404F21EDAC25A786831102DDC0CC6FE73D99F9718CAAEA30 + F0144850F47A34FD652D337D15339FC3B6ED3DC312915A55CDACBF7B8CE63750 + BF9815C3BC6CE473CF6BDFCED6D9C94F5DB1F616A0259042AB74085EE63BC55C + 86F4EC0D421DDDF3357F32D8C98F57046E0662DA34B2828A152DFDB38D9525DC + B951D65FDE47E056B9277058AA9A025AC227FBC8BD7908C50200AEEBE2BAEE96 + DBA3D128F178BC1FE8AF34F203E09A7DE8C85CECD2E4AF9F4B3314925F512FBF + 437B01C00116772394D6B1D78D02AF801C7097D2575111D9DEBB981DEF251E8F + B7026DBB2A2CA49C745553DBA9F27B8D894869F5FEC7BFBD1FA082516284EAA8 + 3F3FC4C1AE7318D52190D222EF84B2C2DDB84A8415ABDB10D4941D61180696B5 + B55CCE1D2A99B2879A8A06EC4B611903EC7353FE02AE2DC6221A83AFFF000000 + 0049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000031B494441544889AD944F685C + 5514C67FE7BD379DC99F3269D326419DA6B6146430B6D144852C6A8A0B15DA5D + AB452928C4850B4589B850128A2275A188E84A10222EA4BA31DAA21222851A53 + 140A4DC8A24148B434EDD4496B12CDBC99CCFB5C24195FA6E3CC0B7857DF3DE7 + BDF37DDFB9F71EA36CD5DFDBCBCE67DEC6B0178109A11F167FFC82F9AFDF2BFF + 34D2726E8BB831C09A81D781AF0CEBDDDA7394ED875FFE7F0882E5051059E031 + C05F2339B8B5E718DB0EBFB2690217C062091AF63F4AE3FD8F136BBE0BAFA905 + 27D1780D18C1388E71C2B0B1782A3DEBD62759BEFC5364028BB777D07CFC4D62 + C956C3EC41838781A6D52C000780238825E088E0DCD50F4E50B87A391281D7FA + ECFB3889863B814F81473664B52EC30035027D48E7CC2CB203C712F5496004E8 + 045E406A95E4022E28067C6CAB5E86259E53C1A7F8F7426402CFB07E8CBD0A74 + 0838BF92FD1D6FDB1DC8751DC33E02FA848681A7B492CB6786FA29DE9C8BEE00 + 388AF81638FFD7C428B7468730C733C33E049E07CE483C1914727E66A89FDCAF + BF442E0EE0617637D2970445E687DFA56E6F17184D402FF08DE32F1EDB726DCA + 2F4E7E4F4B3E03BB766D8EC02026C8E73333044BF314B257D04AFEA6795B0EA2 + 60A161EAAC5F373B3E680A505B1BE1039654DA57C292F024092058CC0290BF32 + C5F5A157A9DBF750C641ECBC751182E2804245C32BBCAF84BD3526F35A769792 + B9E90BE4A62FE0380ED6D58599B9E52AA33B400BC00E2FD94ABCFD3EFCD94BA5 + 024110303939795B5F5DD7259D4E030CD638026CF7A9F1B3C03D92D285F9B9DC + 8DCF5EA330375DF527C771E8EEEE4652B196036B3F357EC8E03BA4CF057D28C8 + F9339728DC9841F9E58A044B63A739B02FDA6DF28051E00DCCDE32E8C1DC3389 + 3D9D7F24F674FEAB62A3B293CB1323EBB9C19A67E0CF4E106FEF7807F4F3DAAB + 7E1A91AC326F4E86F0402D07CEF54F5EE2CFB1D304F9DCA8A427246D17B892DC + F59954864B2A2BE43660C02DC9B4783DB11DA9F55D555541F6371ED8DF11A945 + D1E76ED8F6266E9157AD9099914AA52AC6432D2AC52BBEE45A046DABF367B05C + E57FA9DE948350A181102ECF55C5FF00E6A6B2A4BFE5F1E80000000049454E44 + AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000002E3494441545885ED564D4814 + 61187EBE6F776657765456F36F35A82C03E98730431022EAA2A5505122149EA4 + 0E1EEAD04D8B3C74B19B54D8A5BA989256D4C12229282DAC63172B0A4AFC4134 + D359C79DE6E77B3B6C2EFEA5BB3B535E7A6060069E799F87F7E1FDDE0F586778 + E22506F6562375DF51906DC19A1AF9B706782088BCB36DB9FE8DC55702BB0EBD + 3086076DEBFBB02B0678DC4C220D841226C95DD9752D724A51992B06E2EA0099 + 3AC49C66F8B6957631CECF308FE74860E7C1FBC6F0A070DA09B6F043CA29446A + 790DE4DC2D605C52185B6CD09BBD1990E4340EF618C057B28C9AF13B174CFDF3 + BBA40D78E75F027B2A9179B2299D734F3380D38CB18C35FEDD0DAF7C29B0E3C0 + 45C706A4AC4DD870A2318D71CF2B00C3002A85F1F3831D51ED8564EE57C065BF + 0CA01344A964A3C59C184A5A3C6640293B06E6F136011813C2AE9EEEB926D481 + 6EC0326344B9A018B9F5AD1218EE1221551055AA2FDBC3EAEB4EE706A48C1000 + D412706AFA599B50FB3B1691983F809CFA5689FB957B206413898AE9FE7635DC + 7BDD9138101B4306301602D197F09BEE652426F9C17D8110001244156A5F871A + EE712E0EFCEE008B3E5CCCCD1019916524313B85F0C0836FBE82E2E3739F0630 + D37BD315F198817990B056661161EAD155D744FF68602D844221288AE29AB8AE + EB8919501405C16050B86540D3349E90015DD7A1695AFCFB630D442291C43A30 + 34B4F2A1936C34A669460D50F4115CC964F04A8B0EA078906C340B2220806814 + 8C152A2555A3B36F1F265428D9686211D8EA24007432A031A3EADC611151C5DC + FBE77117B22C0B866124AA0FD334A3EB58CEDF8EBC86DB698CF33E4497D1654B + 9DFC24C293AB16B0B56975FCD6792A2A2A72168131F2113F9EDE5083950DFB19 + 63CD009E48E9591948CF5AB5803533910F60CC49048B2E24BEADA5482BAF8D5E + 483C520A965C5896C29E9D8A8CB5D651B253A0EBFAEA02F1C271044EE1780A9C + C2C914B862C08583C8195C9B82B5F07F1DFF8D75BCEEF805F0B1513316615434 + 0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000043E494441545885CD984D8C13 + 6518809FB77F5396361BBADB5AD6A525342A201283269E00170F48D444C570E0 + C21145C1F89728D1701049E44A000514D90B1A63F4A25108FFE84913081149D8 + A44096E56765BB1DB65DFA33F37AE86E65B705DBCE34F1394D66FABEF374BE77 + E67BBF0FFEE7785B09F2F73C82BF3B81968B6871DC6DA72948B301339F7C81EE + D59B01A2E5BFAF0C5FFFFC35ACB111F7CD26F0341B104C2E46E01D11F9C31F4D + A6E2EB77E10D45DAE106B4208855466DFA5146118EFA6373E7C5D7EF6E9B64D3 + 8299C37B290EA5876DCB7A46952C70CC1F4BB64DB26E0D06928B317A17E09911 + AEFB03CFCC08A1A75E048FC43CC81144C2A8F695862FA7DDAEC929F7F7459374 + ADFE9060725140449E039E00C288C87451559D3C8C89C81A55AE80F6E5CF9F4E + DFEC7FD735415FF5A0AB97F8FACFF086662D17D88F904449031914B42654983C + ABAA651199A3962E934030ED9ADDDD825D2F6FC6179AB514F80538A6CA4A542F + DAF96CDD6F9D37D485F803009F88C812BB6CBD81CA8142FA8C9B7E1541FF03F3 + 08A696F8807DC029557DBE30F89735F2C3768A572FD404752CEA23BA762B085B + 41DEB76C7B23E8EEECC983648FEC735F30D03B1F813E1179C8567DA578F58275 + 63EF06B478A72660C6C26544D76E453CDE8F05F9C0567B93A2BB467FFB86DB87 + 76B82A571594CABBF2B8AA0EA37A6EE4E79D75E5003A162E453CDE8D22B2D9B6 + F54D60A7F9EB416EFFE8BE5C55908A65074A0EA030F0FB3D03D4B650D56F55C9 + 2ADA9F3DFD35D936C94D11140404CA996BF70D183DB4075FA8EBBA043AFAEF5C + 3E4BF6F09EB6C94D116C147B6C849BFDEFB5C3A52E4D0B4E128944F0789A9FCA + 9BA1542AB52E984824300C638B9B42D3B8649AE68196052758EE8A4A7D3AC1C1 + 108F8D8D51281456B8E7534B2E976B5D706060E09ED742A110B158ACD5D455A6 + D4A04E74041E177ABA603048341A5D07AC7390E68C699A6FFFFB04953C30537C + 01FC0FCEA754670E6E924BC00987F1952738D1DB9D1591A8A28F45566D3877E3 + CBB7C0B65ACA9CCFE7191C1C3CE1509042A150998403731E65F6EB5FF804FE04 + AEA8EAB3F9F327AC5BDF6FC76EA13B8E4422241209276E40E545AC36CAB337F5 + 63F43CBC14E430E831854D58E58BC56B171B5EFB5AB76F317CF023BABBBB49A5 + 525B0027DFC9E3A669AEA8D6E0ADEFB6117F75CF29F107560AEC17E1025E5FDA + E85D90AB6DF86B5165A89C195A75D7A9AF80E30E044761DA9AC4482EA66BCD16 + FC919EBBD7244683EBFB4C3933B46DF0D397300C837038ECC0AD42A954AA7367 + 5F808E457DD5555DCDBFB80F566E94CC4F3B26873809CC75E0376A9AE6D9A6B7 + 3E1AC1CD1A6CA7A0E33CA66936BF79D4086ED6A0D36EA62EE17098542AB51C78 + DA411A57DAADFB311767ED5827B4B03FD850E6CE4E7A7A7A1CE7C9E572AD0B26 + 12097CBE760E008C8F8F3B5B93188671D44DA1694C6BB75AC351B7F21F5C0207 + 35188FC7F17A5BDA836F9842A1D0D6FCAEF00F07938F00F25867720000000049 + 454E44AE426082} + end> + end + item + Name = 'debug-breakpoint-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000020649444154388D8D933D4C53 + 5118869F73AEBD9496D24B6202570642B449D9844598DC9848EA821D1C8C38E0 + 00ACAEEEC6C5BA38C0A691412721441385C1D481D08568804411944B1313A1B7 + 7FB7877B8F036DF849A07DA733BCEF7372BEF3BD8273EA374D52F13803E136AE + 080140A061C3ABB25828F0ADEA9DF18BC6212A254F7ABA19B72C5B0831058C09 + 480068D802DE6BAD5F7C705DE7F19EC33FDF3F0144A5E0755F1F372391B40885 + 5E9AC323B1D0D02046770F007E7E1FB596A3F635EB6AA5267F78DEFCF8CF6DFE + FAFE31E0E9359BBB5D5D696959AFA2130F8561DBE75F760C721C4A73B33A3838 + B8B7ECBAF3F7777611FDA6C9A71BD76DC334BF774CCFC42E0A9F861433CFDDA0 + 564BA6B77FEDCB54BC1329C494393CD2340C60D836E6F0484C08317D27DE894C + 86C30063A1A1C1A6E186EADEB164388C0C1D7F55A231B05654F7264242205B4E + 5D2019680DB0E5E7F32D87EADE2D5F83DCF03C8005955B6B1950F72E6C7A55E4 + 52C1456B9DA965B345DF719ADFEE38D4B259576B324B0517B95EADF2D12D3A5A + A9C9D2DCACBE0CD25824ADD4A35CA5EC7C2E163100BE944A8CC662EBD6D1D1A6 + 5A5D1DD5A5729B884610ED1108027C670F6F7985CABBB7AE2E9727F24ABD79B0 + B3CB61109C94E9AA61F0ACB797DB1DD14BCB94AB549C99DF7FD8550A38D5C686 + 6E45DA49C52D06C26DD477045FC3A6E7B1583864A5582238E5FF0F6C0AEAF274 + C9E3050000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000002C049444154388D9D94C16B1B + 471487BF99D5A81BED7AD7C431D871B587E8961C4A948B827D488FB12128E740 + 6F2D248142A9A1D0FF20E0404F39943681D4F79840E59E43844A207BE82D3886 + DA692F712475ED5D59F1EECEF41039D8954854FF8EF3E67DCCBCF77B4F304216 + 50731C6A4E89D98242006610EBE639AD24A19924BC35662857FCF7A0EE7B7C3B + 3D4D502CFA085107E6816010DE069A18B3F63ACBA27B6FDEF0B0D3251F05B480 + BB7367B9EEFB0A21BE0396A5EB4E142A15C4D41400A6DD26DBDC44C7F11EB082 + 31779E2649FAE5AB57F4B4390EFC61EE2CD727272781C7D275E7EDC52554B58A + B0AC633F30794E1A86F41BBFA2E3B8095C6B25C93F37FEDC221F3C8CBAEFF1CD + F4B44288DFACD9D979F7D66D0AE7CE21A41CAE9194587373A88B17C936360213 + C70B65555C3D305A3FEBED6359C08FE54FF10B85EFA5EB7EE1DEBA8DF4FD51BD + 3A0EB66DD4F90BA4611898F420FDCCB69FAC76BBC89A5322287EE201CBF6E2D2 + 58B04349DFC75E5C025876AD8277D5F390B5920382BA74DD0955AD8E0D3B94AA + 5691AE3B81A07ED929216795025828542A430D1847C2B228542A000B334A7158 + F5B21C58E3241AE49681F7C021839F40E228705BB73B27260D72B7016427CF00 + 9AD9E64B4C9E7F286FA44C9E936DBE046876B31CF97BD203C39A8EE3BD340CFF + 37300DC3C3515C6B2509F26992D0CEB20858E9371AE8281A1BA6A3887EA301B0 + 92691DADEFEE62E5406A0C575CB765D283CFB38D8D409DBF80B0ED8FC2929F7F + 4277DA4DE0AB079D8E5EDFDB7B37CB7FECEF73A9744A07C5E22313C70B691806 + C27190333343F36CF29CF4F9737ABF3C44773A4DE0DA8B7EBFF7F55F7F9372C4 + 2E2529B85F0EA8392525C65E5FDC79F1B69FDED8DA62277BD7D063FEB3809B67 + CE7073EA34AE657D70C1F6B58E56BB5DEEBEDEA17764738F34B42725573D8FCB + 4E8919A5DE5F324037CB69F512D6A35D7646D8EC5F5A3A279F79497429000000 + 0049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000389494441544889A5964F481C + 7714C73FEF37AEFB67B675AD9A3528AED02E011B0A6B487BC841C8B9A13D28F4 + 52B587DA436A4E52E8A150E8B9345402C58B7A2BE83125879E84069A43DD43AD + 85D842C6348D663746D78C3B9BDD99D783BBCB5A7737D27E2FF3DEFC86F77DF3 + 9DC7FB8ED0067163B862DB8C4422C48C41AAF71528ABB2E979DC3B3A2257A9B4 + AC21CD6E0E8642DCE8EDE1BD448288180BE1229001CE571F790C6451362A1AF8 + 3F1E1E722B9FE757AFF47282C9EE6E3EEF3F474C8C8DC82C3003A45A34E8000B + A0F3BEAAFB5DFE295F3FC9E1B722F8EC5C1FD77B7B41640C581663863AD2690D + 6546B1865398AE8402121CECE33F702867D7A96C6D8906C1363085B276BB70C0 + 8DBF1ED549EA0493DDDD7C75BE1F443E0016AD64B2333A3E81954AA9880880AA + D6E35AEE3B8E145757F077775F001F817EBFF8748F2F777601B06A9A2F0C0D12 + 32660C58ED78FD8DCEF8CC27989E1E6D214D1D2691A0F3D225F1B7B7ADE0D9DE + 35909FDE8A469D9F5D9747E50A0660B6B787A8181B58B692C94E7B7A1A8944A8 + 752B5534C627F248047B7A1A2B99EC04962DB0E7FAFA8E1B881BC3FB890482CC + 8A3143D1F10908875FDAF92984C31A1D9F408C1902F9F4B26D73211CC65CB163 + 848D58081F77A4D36AA5525AD357555BC6CDCEAC544A3BD269459811C1BA1A8F + 63462251042E02C3A1CC685B595A4AD4108732A300C3206F8E44229898318064 + 00ACE156E37E7634D4188D19434735E907305D89DADB520FDAC4CDCE4C57028E + C7BF1FA14E508388C889796F15B73AFBF77498EA7507203838389B0E6DD05063 + 07C0943500C802F8CE83FF4DD050235B0E14B3E99540D9009CF27A9666E377D6 + 3155552DAF67011C948D4DCFC3DC735DCAAA3EB050D9BA2FBEE3FCE731F51D47 + 2A5BF7055850D4BFEBBA989CEFB3F6FC10605E8360BBB8BA02A552539F688B52 + 498AAB2B5437EBFC1FA512D962F1F823DFCCE5F1555D60CADFDD7DE12E2DA19E + D756AE13B9E7E12E2DD536EA942AEECD5C9E80EA367D52A91016E1ED58CC41E4 + CFE0D9DEB5CAE66F963530202691682B91EF3872B4B488FFF061755DF3C39D42 + 816F7239A0C10F2CE0DBC101DE7DB50B600C696338FBFBF84E33C3D1B55F8A45 + 3E74B67183E024418DE48B6492C99ED730882DC2992C53611E55F74EA1C0DCDF + 8FEBC54F11D4F04E2CC65C5F2F976D1B41EAA62F55D3D706D357D4FFDDF3B895 + CF73BB7078AA56DB69B9100E73F59578DBDF96BBCF5DB2C522418B1AFF00C284 + 05A7A231DC810000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000413494441545885ED974D4C1B + 471886DF5976BDC31ACBAD4D137E5C0E08F16705293D814BE0E05EA256AA54D4 + 0BA80AADC2BDAAD41B39A5D73655D41E5AAAFEA4B139855354F550722010E7E7 + 94142B4E8520550504CCE25D51AFD7EBD99D1E0C8E171283A939B5EF7177E67B + 9FD9FDE69B6F80FFBA4835833B650F228A173D94A251145DB33566E3B169E2AE + 6160D1346B07200078DFEFC7878D4174CB721F216404C020802E00C1DD612A80 + 2700E639E737FEB4AC473FA8DB886B1A2CCE8F0FD02DCBB8D2DA825E4A8740C8 + 6784D237A5701862470784D34D10BC5E008093CDC2D97806B6B4844232096E9A + 0BE07C72C5B2E63E5D5DC3835CAE7A80F33E1FBE0CB5D65341B842289DA0D1B7 + E019180091E58A2BE2F93CAC4402E6EC6FE0A6396573FEF1A5B57533A6694707 + 38EFF3E1EBD743AFD61172536C6FEF5746C720F8FD158DF7CBD17518F118D8F2 + F25DCEF93B97D6D7333F670E42D4ED7FD02DCBB8D6D6562F09C2AF525F5FBFF7 + C2380445A9CA1C0008A590CE9E8593DE0C399B9B43C3DE86E90786C1FE2A145E + 0E2000B8D6D68666D9F395D8DEFEAEF7C2388828566D5E82100448E130EC95E5 + 1034EDB588A2DC8C653260FB3C4B7ACFEF474F3D1D22944E28A363FFCABC0421 + 8A5046C740289D68F648431F0502AEF72E808BC10008219769345AF53FAF24C1 + EF078D464108B93C1E0CA07C5925804ED9831E4ACF104A073D03919A99EFC933 + 1001A174F0B4289EE9F73ECFA91240BFE2050819917AC3876EB5E388C832A4DE + 3040C8C8C06EFD70018429058073624747CDCDF7B41BFB5C6FD1CB0DD0584CB8 + 2EA1A9E9C400766377359625F7F3242C96A4A050F6796A0E508C1D2CAF7EAE5D + 50D5D1784CEDF770017060DBC9664FCCDCC966C181ED170268CC068094B3F1EC + E4008AB15399A2971BE049B18998674B4B2706B01B7BFE8FB286A50470C73000 + CE670AC924783E5F73739ECFA3904C029CCFDC318C83008BA689A796F5909BE6 + 829548D41CC04A24C04D7341B3ED87B7CBF2CC9584DFAB2A38E793E6AD5938BA + 5E337347D761DE9A053826AF6F675C6D9A0B605AD3F1D4B2E6782E3765C463E0 + 8C1D0856AD386330E231F05C6E4A6585B96F55D5F5DED50FD80092391323AFF8 + 67A1695127BD1992C26110C1C5599DF9741C2C95BAC7391FFD6475952DEECBAF + 031DD11A63D8628C457DBE19676363D85E590E899D9D2065F5FB2872741DC64F + 3F82A552F700BC7D35BDB573A4960C007E374DA88C99C30D0D7168DA29EBFEFD + 378820A0AEB9F9D02685E7F3B0E6E761C4AEC349A7BFE39C8F5E4D6FED7C914E + BF707CC5EA1B51147CDEDA8216493A565BAEDAF6DCE4DA1A7ED9F9FBA51E8796 + FF7A42703110C007C1004E49621F41E58B09C06F68CC7E14DBCEE01B5585EE38 + 15E31FF9FC1101F47BBD88280A7AEA8B57B3BDC91C806EDB789C2B5ECD6E67B3 + 87DE88FED79EFE017C61B86C57AF05870000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000572494441545885ED98DD6F1C + D519879FF7CCAC67776777ED682D4C6C76491C611069219652010DF9AC6884A5 + A04AF155CB4563A496AAB755CD9FD014A15E50D15C1057AD5AB517984AA455D5 + 883491AB7089AD1455C28218BCF636C6AC0BEB78F66B665E2EFC817737764C6C + 6F6FF8DDCC68E69CF33E7366E63DBFF3C2D7DA9E642706E9B42CA2C6D45DF355 + B9E5FBDB1EFB9E00FB9C360652298EB82E07A351E2C6C445643F905A695254D5 + A98AAAF77EB9CCF5258F7F148B4C94CBBB0B78CA75F9496727DF4AC48D20DF01 + 068113C00111A99B42550D810F816BC01B8A5EF94FA91C5EFCB4C068B1B8B380 + F7DB36BFE8DECB8944C2127801916111D96FBABAD4EEEBC37A208349A7915874 + 19AE54262C14086672F89393847373A2AA53A89E57B8F86EA914BC349B67B25A + DD3EE013F118BFC964485BD621447E2BC67A2CD27F08E7E831AC9E9EAD3C1FC1 + EC2C957F8D511B9F40C3E006AAE796C270E2E7F93C7F2D2E6EDAD7DAECE6B3C9 + 24AF6733B8C69C139137ED6CB6C73D3784F3D4B731A9D4665DEB64522922DFF8 + 2691830709F3B35D61B1F8C38848FED9546A623108192F95BE3AE013F138AF67 + 33448CF99931E655E7C8D376FCF9E731EDED5B066B024D26891C3E0CA5B21DCE + CC3C27E01D4FB8EF4C55AABC5FA96C1DF07EDBE6CF0F6649D8F6391179D5F9EE + 6962030348432AB9178931441E7904C410DCFCF01955CD9D4A2426FEB9789BF9 + 20D81AE0AF7BBA7934163B84C89BCE91A7EDD8C0C0B6C11A65F7F6A24B1E412E + 77DA16F9DBE158ECD69F3EFB0C6D68D73425275D9713C9A485C8889DCD3AD133 + 67761C6E55D13367B0B359079191876351EBFB1D1D4D6D9A007FDC9906181263 + 1E8F9D1D44AC4DFFA36D492C8BD8D941C498C741865EE84C37BDD23AC0BEB636 + 9E725D2322C391FE7EACEEEE5D835B95D5DD4DA4BF1F1186F7B7B599E3AEBB31 + E0407B0AE09488F43A478FED3ADCAA9CA3C710915EE0D40AC39D019F745D1019 + 34F775E95693F04EC8EAE9C1DCD7A5880C3EB9D90C3E168D029CB4FBFA5A06B7 + AA9598273391087BD6A5B3B5B34ECB5A7625C8012B936939E0724C39A0107FD0 + 719A01A3C62022FB108C49A75B0E68D269443022B22F2A5F5A84C6349302D65C + 492B25B1581DC3AA1A01A5EEF0FF515DF046C022806EE22E764BEB627EBEFEFA + 1AA0AFCAB2A9240C0B8556B20110160AA084AAFA91BF6E455E03BCE5FB54C2D0 + 53F46630936B3960309343D19B80F751E54BA75DF78A3F58F66457FDC9C9D6D2 + 012B31AF7EEEFB7CBACE76D5018E2D2D013A1ACECD4990CFB70C2EC8E709E7E6 + 04181D5BF2EAEED5015E2E2E82724555A72A63632D03AC8C8D2D7FFF70E5F262 + FD8EAF0E70BC5CE6BD523950D5F3B589715A318B413E4F6D621C553D3F57AD05 + 97176F6F0C0830B2FC075FD420B8511A7D03BD830DDF296910B012E30670F18F + FF5BA0A2F59EBA0970B458E45DCF0B5475C89F9EAE942F5DDA35C0F2A54BF8D3 + D315551DCA55ABC185C242539B3BDAE571AFC4D98E8E5B6DC6E4C399DC7388C1 + EEEDDD59B8B7DFA67AED2AC08B81EADF7F3A33CB54ADB635C04210F071B5C640 + 2A390178C1CD0F9ED1250FFBA187B6BDB3D320A0FCD65B54AF5D45558755F5B5 + 5F7E32CF5F3628876CB8E198AC54280621C713EE3B20B920377D3A989CB4AD4C + 06934CDE135C90CFE3FDFE77D4DEFB77057851555F1B5958E095F9F90DFBDCD5 + 157CAF3DC5F9BD7B891AD38FC8C80E953E867CD5F1973F99E7C25D96D52DD996 + 471D875FF574F37034BA23C5A3996A3518CEFF97EB9E7797C85FC15759C00FF6 + 74F0A3749A071CC708AC95DF040ED0507E4335D4BAF21B57E66BB5F00F0B0B5C + 2834A7936D03AE073D9E701948B573C48DB337124190384243019329506FC1F7 + B9EE2D17302F2FDEA6BA45B07B066CD41ECB625F5B1B8ED40FE5ABF271B57AC7 + 7ACBD76AA5BE003C5F53CC0D4A57DE0000000049454E44AE426082} + end> + end + item + Name = 'variables' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000018949444154388DA5924F4B54 + 6114C67FE7DCD72B084A05DA66486F211488428BFECC3417DDD5A29D1F603E40 + 106E5CF659EE57D08D81BB861931046BC0DA082374AB95F80F5AD4BCEF69E160 + DEE13613F4EC5ECEF3FC0EEFC311AE499267C42B6BB340065213C15122337A60 + 2DA0513044C95380ECC5E324AD2F568854AD0CE043889A9D3CDDDAED665A98A8 + 03A4D60F97652F17A9525FAC00522BB8444004372C7C1D22821BED1C21277753 + A2B9278846E8F43C9313B16EB40EB93939FEC7A41ACDDC987870E7F6D49B782C + 5A2D00E2E5D77340264215C45DFCF8C9CEC1B7813DD653D1F6C3F999C6CBDA3D + C6C7DC15C401D9F347493D5D1ADEFABB8F797D7BEF28BB3F7BEBD54232BDEA43 + 3033BC8254FBE1BFFE3352255DAA108CEAE1D7D3CF3E046B7672C05AAEDF7AE9 + E64108E03E1D1DFB9D83EFBEF490FE4567E71784932F311608F987F2531D263B + CDF9B5B97EF5FEEF3B5033BC0F61A4B1EFE99915EB52B056B393330CE243A0D9 + C931B33603000734B676BBD9DBF7DD2A48792746CFB036D008F97E61F41BDA5C + 905768E2EF9D0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000022F49444154388DAD94CD4B54 + 6114C67FE7BDF78E334DCC0C730D478D686A9391082D26218A920A5C451004AD + DA196DEA0F3004EB1FB055B6932010AC55907D40E0467291D0C2C2226D61343A + A38D9A736B9C7B5A34E1C71DCDC17E9B7771DEF7E17938EF39C226CCA1533867 + 6E19A01BB82E220D806CBEB70E55D52C701FB86B6FAE5AAD1701BAF7849D9ECE + 4C1A371E4140B75403F28562C3B3B1A99E15AF444050425180AECE4C9A4C4BE3 + 36C6D638DC9400E0F1C864970996051149B9F1C88EC4FEE2C62388482A2028B2 + FED83995FB52C5E1EEB0B11CA4F93812AA4474C244C3CED999DC32B1681DC6AC + F7AA3896498643F605DB32D744241470EA5CBA87249AEA05B98CD02095B0B665 + B0AD8DC18D08758E953D988A0F9D6EDB7F20958C3E171117E0F3D7EF3C78FA0E + DB249ADB107999D85BE72663E1ED3F1C30BFE831FE69B6777EB178FE4AC7911B + C95864706364A1EF58DA75AF9E3B8A65FEDD8AB2AF3C7AF5DE9D98CEF54D4CE7 + 3B4EB636CF89C8BED5B2AFAA940C487BA6A57147620096114EB4A4F095F62FD9 + 45BFECEBA4EFAB8E7DF806E8A82D42C8B1CC9693500DDB3288109AC92DF3F0C5 + 4429BBF08385252F0FDC0C4C4A2D2C2C79CC2F7903AA3AA8AA43AC7AF95D092A + 507A3B38802A5AF2F0A74783B35C2BE5F10D4DE6BF4F8A01B4A68EACA15AE5A5 + 51D5D95CA15893D25CA188AACE5613B451FA87DF4CDD06A8FFB34CB7B604E40A + 4586C7A640E9D7D55F5504A177E567892723935D9575BF2D9575DF8F70C7FFF8 + 3A50FF0DDE11C0F71182A7300000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000307494441544889AD95CD6E1B + 6514869F33FF535A871A47AD908A301562538B864D5D40A40822B6FC09D87003 + A8E5069A05ADD20B40D970032CBA692F2005918555AF88902B2124140B2859B4 + CE4F07D2F178667C58CCB819C79EA48D7857EFF9BE3373BEF3CEF79E11A6C038 + 3B8F3DFF35C045E0064853044F5555446494578C475C953E681BB8AACA5D997C + BD607FF61DC6F1DA45E04EB5E27B8D7A0DC73601058A8F14E38C0FE2944EB7C7 + 56D0EF83BE3F59C0F270BEFC1E117E78A1E25FBAFCF11CBE63E9B44ECB100E12 + 59BEB5C65610FE6494A749F35CBD86EF582A3900A480625CE4BE6369A35E03A4 + 39B5800888E067B21C0D7626A9679525A8AA66BA8E3813FCC0BD9C9616C8DA16 + DDE3E3B7667FBC9F93A76505C400D3C97BF300706CE39B7438248C123C77EF1C + 7B8DA92B22AFA9EA82881C67FC7A3DE196F1EA7B186F7C8171ECE4E8E4000C53 + BD7E6FBDC746EF5F1C6BFC5B88806B9BCC3E7F8C575E9C3975BAFADCB269189F + 8CA93792C87EFB2B80B71096446882B8AAAAC950E5E1A390073B8FA7CA001A09 + D29E9DF117E7E7CE7CFEFAD9D99B96697E5A904800B580371159A9565CB7519F + C5B1CD5C03C98F339D0FE2D4E9741FBEF3E051B8F2E3CF7F2E544F78575E3E3D + F381889C28766B21DCA8563CF7CA4773F8EEB319EAD2F933B27C7BCDDD0CC2A5 + 5FFFD87CF7A553953B067C0810C7A902910172A151AFE1BBD30D55C645447C37 + 3394AA5CD8E8ED12C5E96F2222E120A1D3ED01B42D11BC4C96A3C1B14D447037 + FF096975FE8EE264A89D6E8FEDA0DF07AE96FAE05911EC0E68DDDB208C926834 + 4D81BBD6D338F62027E76B24A992A4C36BAA5C030555D2DF57B10E736C192F16 + 1311549578F55B74E77EB6F7781BC2EDF2517114E8CE7D74737D6CED7F93A80C + 462E1170F8D52CF2A254053A5940956810A7A509876110A7A832286BC2006D77 + BA3DC22811CD019914077155D570904866286D8F64DE0F0BD5C5ADA0BFB27C7B + CD6DD46B62DB6636099FCCB4E93CCE7FEEDB413F4275111DA2FD604A01A4850E + 17B6827069F597BF9A80F3B4EA006D5417415AE97A0B767B1349FF01B306CC19 + CA4B45CF0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000263494441545885ED97316813 + 611886DFEFFEBB4BD22454A98106AD5A4B9454A143105B1CBAB8985A87EA5A0B + CEDA4DD4C1C52EBA6A2747E7462891421B0709D4E05010419A80A7484BDB41A5 + C5A4E75DEEEE73482891923F6A92BAE4DD8E7BF9BEE7FFEEEEBDFF2734104562 + 10F131400F80A891BBB19801B836DC4206BCF11ED2921489414BCE0449684F01 + 5C27A250F3005C0430C7EC4D97338F8AAACC2CE29741427B123FD13395BC700A + 7E5D70B3003F6D37B8F0F6D3D4EA976F1067AFDC944E40BD741FE2F8F99D0737 + 8643A180DE6CEF3D154D1B33CF7345EFABD1ADC88C048008E156360780504007 + 118509042980FC0D6981080D000E401D800E800A54E376700CD07E8F5B251243 + B84B57E6973FE270D8F7C745FD9AF01D3D12BED8DB137C2C14252105A0C86968 + C9872112DA2C806B4414AC35FCD8B591FBB0F1378B023397FCBA9A1A1D3A961C + 1DEA5B10A23E842A069320A1CD26CEF44E8E8F0C20E0539B8E5BD372BAD23963 + F2F5BB35F447BBEFF6470FBDAAE755A0050060A2DABCD9DE0080804FC5F8C800 + ACB23BF179736759E6552A714BA15635AF8520A2A0693B9614A0ED712B7BA05C + FD0A0E5AA6E530339718DCFE1C289AE57DCD5FE60C009863D76EFF04F26BDFA3 + F79E65F7AE99B904200560DACB2FB51F60B754DAE4EDF5CAA4196030D829C32B + 2CC233B2ED07E0ED75D8F377EADEFFEFFF820E4007409146652BD4A0BEC2A884 + 8369392DED6B5A0E98516AB43E05AE0D00A974CE40AB204CCB41FA8D01805F54 + EBD795EA16321027876FAF14B6B052D8DAB723FA17D5C4ED2D777551EA250050 + FA1210E7AE56F684A0A64F44CC5C3982E797E01959A9F717A553D6E53B4F9FB6 + 0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000357494441545885ED984D6C1B + 451480BF37BB4B6C3789D724544E6335495520CD4FA1082184A21421115AB8F5 + C681134242C0A10724AE51C509904002718213124772E000022181D3032A0224 + 534A200928B55B85A6C109C58D9DF5EEE360474951C09BDAC639F893ECBDBCD1 + 7CFB3CF3DE8C85B03831CCF014269E0201093D303C5AFD0E561609E6BF00DF0B + 394FD4C5397D0E89F71F16E12C302688DD504B05453780B4A2EFE8F25CC1FBEC + D57053588F3C8F35FCF83181D944572431988C6399C6E7B0E4F9CCE7F21437CB + DFAB72B2FCED87053BCC4073680C81D787FAE289679F1CC7B1AD86CB6D91BF51 + E4ED99EF4E1436BC17ADBED1D74C98412216208F4E8CA79A2A0790E88A70FFD1 + 830093188B50822088108B75844A78DDC43A1C801848384169C696AD39A72042 + D80CB68EB660BDB405EB65DF0B862E6CB665BEDC2CFBAAAAC81EEB8EAA422519 + 032232B077C1A88BFDC0D3C8A1E395E62C726B933ED08365E4B1D94C8E9FB379 + 6EA70DDB96A1A73BC2509F3BD1D31D7DD718190B2778470CE7F4398CDB3F06BC + 014C8A48E49F8125CF67F1EA3A8B57D7F76E07A094117EEC8D47A79F78707062 + 74A8F77C1849DBBA770AE3F60F005F8D0CF6BA0F0D27E9702CBD3D8B7FC70FD4 + FA25973F7E3E93FBE8930BBF9DE975A32FF4F574A66B0A4A3C0570F6F0C16EF7 + 99A9114C13FBDADDA90400B399ECF44F4BAB2792771E58AAB5264D75B18D1E4D + B94D95DBE29E54025446AEE56F022CD58A370208625BE6FFA938961110ECCD72 + 0010D48AAF58B5E0B402FC67B952AD7CF665A1F60355D032B45050D1AD027E0B + 81AA2E5CC9035C040DDF491ACDFA5F25E62EFF11E970B6AF1025CFD76FE696C9 + FEFE671E782B28ACB64EF0FAFA061F7C7E291904DB5954D52290065E56AF78D9 + CFCCB44EB0BA8B8FEC90A3F28B2BC1F545FCAFDF83B56CEB04018AEF9FA919B3 + 2F77F14EDA82F5D216AC97B660BD18057669894D27EC9CD50C6AB1E4F9CDB3D9 + 41C9F351A51836DE545F25FDC3AF2BDC2C7ACD330302552ECC2D033ABBDB4966 + 37C41C3B85F3F0739D08E94457E4BEF12377B1F384D128FC206021B746F6DA8D + 35454F062B0B17BD8F5FA92D8871704E4D6392C39DC04BC02410D9EBE5BC16AA + 5A062E016FAA575CF23E9D4657E6430802D811ACD1A7B62FEE957F541B2D5879 + 1656F13333E85A36D4B8BF015749217AD69784520000000049454E44AE426082} + end> + end + item + Name = 'heart-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000023C49444154388D95924D4854 + 6114869FEFDE3B8D3936062E021D176235EA2CDC48CB82947E374250500BA532 + 6861B470D7225CB82B681349A5189830062E5A284AB42F28B541622CB321E7CE + 983F8313CD9DFBF77D2D34431C09DFD5C777DEE7E59CC311A74221FA6B23070E + EA5A8F407400D5C002F0E497E73D7594A2CA306E21C46DA01E3051BC70957CD0 + 639A8E988D468DC3863E1E88C55ACBCE9C45ABAAC2374D8A13E3788B8BA30046 + 5DDDE5B2F317D0ABAB916B6B14A72671E7E6DED8525E14A9585377201A7D547E + FD0642D3F82BE579FC7EFE0C80D0CD2E8461FCAB4949616000773E79D7003A83 + AD6D3B60006118945FBDB6FDDE51D334826D6DB8F3C94E0341831E89504A5A38 + 5CF21F608B69D050F8F8FE9EC63DB5C9F81A30EDA552FBE6B798690D883BEFDF + ED3B608B896BAE54436E2291D94F175E2A859B4864500C6923B9F58292F28E15 + 8FA3ECE27F616517B1E27194947726F21B05FD63C1A23D5CF9B9C22E1E91D9E5 + 964073334288D2B094148687F152DFFBF39EFFB0EBC712BAAD143396457B65E5 + 94585D3DA172B9A34653D3AE102525D6681CF7D3ECA4AF5447F7525ACE168BE8 + 0019CFE39BE3C873E143632A9369913F97EB03B1D8F67129CFA330F212776666 + 0AD4A5DE6CD619DBC8036C06007CB16D52B6E3B556845E899595E3FEC2D798D1 + D888721C0A830378C9E4A82FE595BEECB23DB89EDBEE6CD7B02743211ED74644 + 58D7EF69E1F07D0099CFF7DA52F6F5A44DF53A9FDFE12FB9AD63C120FD3535D4 + 97054F03988EFBB63B9DE68365EDF2FE013DE40F5D62A27AF40000000049454E + 44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000031649444154388DA5D4416C93 + 651CC7F1EFF3F6EDDBF232B2CDC5ACA15933D4643A589A90148C07E4E0C1841A + 0F9381E0C19B265CB6839E3C71E4628C17D93451221162E26242899986A00726 + 78A88354C14AA0659BACB5EBF676EDDBF67DDFE7EF81319919A8E3777A92E7F7 + FF3CF95F1EF5A419E2F344828168B44729F52EF02A1007EE02191139B1E8FBF3 + 75ADE9B3ACED4AA9778034D00BCC035F2372E20FCFAB1C2D1451933BFAD96DDB + 43C037A1DEDE98B5F7798C9E1EF45295F6952B0473734BC041EEE5CB503CDE65 + EDD983D1D58DAE54685FFE916061E12EF0F29D56FB9A2A0C0E76A0B8164E2613 + F6E1D751A6C9FD88D63433195A3F7CDF0088EC7BD18E1E3880328CBF3BBE4FE3 + CC1778333345842113C531A3BB3B618F1C5A870128C3209A4EA397976C80683A + 8D526A7DC734B1470E512B1613BA5A3D6602C3562A85B22C368A520AFBB5836B + E70D3B9685954AD19C9A1A36510C84E2F10D8B6B03D1E823EF01568D01430911 + FEB1EAA6629A28881802B774A9FCD89E2E9511B8650017FDEBBF3E36B86A5C34 + 104EF9F9BC0A4AA54D6341A9849FCF2BE09421C8B4687DA1793EB369B0793E83 + 687D0161DA98726A88C89897CB79ED6CF67F63ED6C162F97F344642CD774095D + 755D8E7475964CA5DAFEEFF997C23B77627474FC272C5858A0F1D9A7E079EF21 + 32F9F6EC2CA165ADA90701FBB76DBB44100CF9D76F3C174E265191C82331ED38 + D4C7C7915A6D1218FDA452E1CCB24308E0E766937ECBE2D968F41CAEBBDFFFED + 465F78D7AE87A2DA71A84F8CA3CBE54B02C3971B0D6F746E1E817B20C0B7B51A + 2F6CB5BDB8657D252B2BFBFC5F727DE1C141D4962DEBB1C545EA273F222895A6 + 81F4CD5673E5C8ED224D1178101420E338ECB5EDD676D33C2BAE9BF2AECE3C15 + DAD18FD1D905805F2C509F984057ABDF89C82B375BADDAE142816AA0D71E0C3D + F8BA27706ED9E19948C47B3A12394BBB1DF3B2D9DD6A6B07C1EC2CEEE9D388EB + 7E2C226FFCD46834DF2CDEE1CF2058B7C186DF4708381E8B71F4896E80B79452 + EF0388C8187072CA71189D9BA7B1BAE6BF82F733D2D9C9F1588CA86124017C64 + E6C352990F2A9587CEFC05DECF63D77E7B9F630000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000040F494441544889AD955B6C14 + 7514C67F6766D8EDA6B795DE560BDB106928C85BF1C13486180524A0A641F101 + 1362A0411E8CD117A36FA889F2A03131410DD108492172D1074894222144A24D + A06281DA1A8AE5D2764B939696BD4C7776E67F7CE8B6027617827E4FDF3FE7CB + F99FF3CDCC376201EFC7626C7A280A228F0ABC8EC86A817A8549E01755FD1238 + 39EC794C06014B231180A744641BF08440546108D50EE033E0F2C96492ED8343 + C8BB75B56CABAE02652B229F4A2814711A1BB1AAAAD0741AFFD225F4561245DB + 157D4D00902F04D92415E5388D8D486929666C6C5AEB792EF006E8571D9349E4 + F2B2A53822AF00DFCC6B6A92C88B2F211515CA0C7C9FECA953923DDE811AF313 + 8058D633E155AB09AF5CA938CEAC546FDD12F7D041727D7D0A6C56D576B9BA6C + 591D42AFB3787165E9D636C4B6515515110166B977F62CEE816F0124B2F1650D + AD5831A74E8380F4EEDDF897FB2751965A085BC4B2A391D656C4B62984507333 + A19616422D2D1A6A6E2EA813DB26D2DA8A585614618B03ACB31BE26AD5D4AAEA + 3FCEDC7E98E125EBD6038882922FCFA5B36A6BB11B1AF00706D659084D767DFD + F4ED7914E4B68D38CEBD7540BE6793252A65122E29B8F28342C2250894398A8E + 9B54B2B6D0BAC578B19A49255118B78033C1952BD3B7DEC7EA721B8AE9F23DCF + 58C031333A2A269190FFC199E9E9130931A3A3021CB35475BFAAA6B3A77F46F3 + 9859B7182F56CBF74AA9EA7E4B601CD895EBEAC22412FFD922934848AEAB0BE0 + 7360DCEACAB8A0BA538D19710F1F4283E081ADD120C03D7C08356604D59D3772 + 3EF68097654365A52B70856472A306FE7480E5A79A996C2E7EF779EAC71FC4EF + EE46555F45F5B7F7466E600FE57C1EB16D964722BD0835E6EAD5C7ADEA6AB162 + B13B5EC77B2177EE9C648F1E456117F049672ACD07A3A3D8009DAECBB3E5E5CC + 779C13408BFF67DF22BB212E7655F57D3D03BFFF92B8FBDAD12038096C9EF0FD + 60F3F5EB4C1A337D81A7CAE9749A17A2954158AC2318B3C6BF7831662F8C63CD + 9F5FD422BFBF5F327BF6A09ED7ADB0DE379A6E1B1CA4279B0560363E6F0601BF + 675C9EAFAC987244BE230856F9E7CFC7EC876362D5D4CC6997FF478F64F6EE45 + 3DAF1B58A3AA636F278639964CCE6AEEC8E7C15C8EDEEC146BCBCB33161CC498 + 27FD0B17164A5999D80B16CC5A0288D7D929EE8103A8EFFFAAAA6B81B11D2323 + ECBB3971C710FFFA01FCE579F4B82E4F9795BA61CB3E88EAF2A0AF6F89663238 + 8D8D82314C1D3942F67887A83147810D9E31933B8613EC9998B8BB1D05E3E1B1 + 9212DAE371A2F36C4B908F80B79C785C00FC6BD714F858E11D2F08CCF6C1214E + A45273F6299A3FF5F31CBE8EC759120E03B48AC86E00556D03BEBFE1FBB45DBB + CEF9A9A9823DEE1970A596C58775753C17AD44601180C240672ACD9B896146FC + E25FFEDFB4813F6F667570110000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000055E494441545885C5565B6C54 + 55145DE7DC3B736F673A6D4379B5A5054AD1D242A20484406285422441112124 + 3C7EAD8D89510C1FFE69628821D1A026C6184403410B1208A0B6699162C514AB + 586C8985F298B6406728336D67A6F3BAAF73B71F2D55DA0E6911EAFABCF7ECBD + D6B9FBEEBD17F03F838D7C20035897918175191E94A8AA9CCEF92C009249E4EF + 308CE4B9580CC7C2118484B82FCEC339366466608DC7832245495318CB052092 + B6DD7D4DD7ADDA8128AA0706A011A516F094AA626F5E2E0A15650D63EC4DC6F9 + 6A9695A532CE6187C3822CAB09C0BE9810551F0402F681FE100060636626DE99 + 3183673BE4ED005E65B2BC9C67654964DBA0705823DB3E4B449FDC31CD336FFB + FD38174F8C165096EEC6BEFC7C97CAF917D2B4695B95F23570949682A92A0080 + 2C0BD6F5EBD01B7E82D5D1718188B69D08473A7B2D0B1553B3E732C60ECB8585 + 4B95E756419E3F1F4C9607E3340D665B1BF4FA3310C1E0114154B1CBE74F9C88 + 44FE1130DBE140CDBC4267BA24D53A972C294BDBB419CCE118B3664404A3B111 + DAF7DF05C8B6CB0180715EAFBEB861BA73E54A3036AAAA8371A689E4F1E3309A + FFF8D9245AB7B9A3D368D5344800B077561E8A55F57DC7C245DB5DDB778049D2 + 984900803106B9A0003C3BDB6DB6FDF50218DBE1DABA2D5759B62C2539003049 + 825C5A0AFB4ECF1C0403EAC234F54C55280C69AED389F766CE9CCD5CAEAFDD15 + 151257949449FE0D292707A4EB99F2EC39996A59D9B8621863908B8A60FCFEDB + D2E9C0A1A6783C226DC9CAC4B31ECF5BCA8A15AB9C8B168D2BD13DC885F32017 + 1581713EEE18E67482623149DCBC391012A2812F54D30060ADA3A47442E400C0 + 6479F8679B0886B8D62E4A53C1D307D517F39C9C09277A580C7115BB39070703 + 189071AFDD26034C55073901700020200EC39834013074101027005CB76D00B8 + 21828149E317C12000DCD06D1BBC433700E0BCF07A274FC020D7F90EC3006F4A + 2400C209A3A5053462513C0E10118C96160038D1144F8037C5E3E8135683F0F9 + AE8BAECEC72E40747542F87CD775DB6EA88F46C12D0055FD2102B047ABAB7BAC + 5F8188A0D5D501C09E539108456C7BB00B0EF4F72326C421CBEBBD64B6B63E36 + 01666B2B2CAFF79269D3A1CF7BFB000CB561AF10F83410144454A99D3A29EC68 + F49193DBD128B4532705112A0FF5F709EF50DB0FAFBD9664126B3C1EDF34222E + 7CFE32C7E2C50FDC6E1301D93612070F42F4F4ECF69946D56BDD3E9843A51E16 + 6003B8104F605356E62F7238B41CA631CFF1C4938F448056FD03CC3F2F9E366D + AAACB8759BBA4C73F8DD7D8BBF4F08DC320C5A9F9151236EDEDCC0DCEEA97241 + C17F22D71B1BA1D5D5B683B07EF7DD9E64F588F28E721ED774032068CBDDAE6A + EBDAD52D7C4AB647CACD7D2872A3B919C9E3C7FC44545E150AF57C18EC1D7566 + 4CEBD39448205796230BD5B41AEBCAE52D3C7B8A5BCA999808E362339247BF0D + 8068F5D981A877A7DF8FB11A3CA5F7AA8FC550E074F42D50946AB3ADED65969E + EE91F3F3C745AEFF7A1EC963C7FC202A6F88C6AE567677C34A7136A50002F063 + 348A3C59EE2D559593567BFB3A08912D1515A5369E44D06B6BA1D5D45C03505E + 3F3070A3B2BB1BC603865B6AF73924E2742C06052CBCD4E53A627575AEB0EFDE + 2D7014178F7242A4EB481CAE82D1D4D408E0F9A3FDA13B6FF8FC296F3E2E01F7 + D09848E0AE652557B9DDDF5020906B5DB9F2B43CAF08DCED0600884000F12FF7 + C3F27ABF22A2AD7B03C1D8EE4060CC9A8FC48426CD72970B9FE5CF42B62CBFC2 + 14E5E3B49736A60140F2D4C924E9FACE9810FB77F9FCA89DC0249DF0A8CB9365 + 7C342B0FCFB8DD250C380C00046C6BD7B4CBAFDFEEC68DC970561CC0CE6953D1 + 51B240ED2A59A0BE3B73069C8F686C4F3AFE06E5A57A09FC89FA630000000049 + 454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000729494441545885CD986B6C14 + D715C77F7766F6C1AE6D6C03EB07A6B43C4C426D48422305480B49086D93162A + B5525B48498ADAA4216AAB28AA422BF503AA404D2BA4A8899AD0B828A8808402 + 2A8D20044231342949310E0487976A60FD003FD6D878BD3B3B3BAFD30F361604 + C7C690D8FD7F9BB9F7FCCF6FEEDEBD67E6C0FFB9D4608393830116E4E4303518 + 22AA69FDF7939EC7D96C9643A914ADAE3B6882025D67414E9499E13085BAD17F + 3F2B3EE7B2361F98694E59D9E101CE8F44782E368139918886520B8085C03420 + 0A74021F036F2372AABA27C5FA44823ACBBAFEE102019E8FC5589C974B406933 + 517C03A8000A8134500F1C44E4D019CBF25F4A74B0ABA76770401D585354C463 + E30A95523C01EAB74AD727EB93BE805654840A0611338DD7DC8CDFDEAE44E4DF + 88FCC68577377474B0BE3D8107FCB8A080D5C5458495FA2A4AAD534ACDD76231 + D1CBCA50912862DBF8ED6D788D8D88E73580FC4E84D7F77627E5D9964B98BEDC + 08A8032F9795F1CDBCDC7CA5D456150A7D3DB46021C179F3D0A2D11B9ECC6B6B + 237BB01AA7B61611F99388FC6A4F32E9B6382E2BC7151A4AA93F2AA57E119833 + 87D0C207D08B8A6EF0F0D369ECC387C91E3A8864B37B4564D951337365456343 + 3F643FE0F3B118ABC68FCB45A96ABDB8F8EEC8E34FA08F1F3FD00EB84E6E7D3D + E696CDF8A9D46E84EF818052DBB59C9C4723CB1FC398366D480FAFA30373D3EB + 78ADADC7401E78F34AB2E7E7172FF62F1C33C321D64F9C88A6D4163D167B30FA + F42AF4FCFC218D01B4C2428C8A0ADC8FEBCA259B9D82524BB5B163BF1B5DF50C + 4659D9CD7944220466CFC63D75AA44D266F98C70F88D13990C176CBB17706D49 + 09E5E1F01265186BA23F7D12BDB0F0A68CAF4D604C9D86535B5BA974BD32E7C9 + A7D08B8B87E5A182418C2953706A6AEEC4F78F4F0F05CF6EE9BA825EA0EBFCBE + B4144DA9CDA1B9F34A82F7DE3B2CE37EC8BC3C54248231630681995FBE358FDC + 5C2495C26B6A2C8F19C66BFB923D68F747A3184A5528A5E604E7CFBF25E3AB0A + DE3797E07D736FCF63FE7C94527350AA62416E0E5AE59830C0222D16137DC284 + DB32574AA1D4A067FF90D2274C408BC5045854191E83D677BACFD26F72438F84 + FA5866151A3A57EB57B1CA1B3B8A48D7AB8FA51840EBFB410CA56B9F1E31C252 + BD75DF5080D65754BAC5CC8C22D2F5924C06E08A009A2B0250EF25DA4715EA5A + F5B19C73C5478BDB5980235E5313E279A34B0688E7E13535011C89676DB4E319 + 0B11398065396E7DFD68F3E1D6D7836539221C386E59681F663298BEDF2DF096 + 73B466B4F9708ED620B05B21DDEFA5D268B6086F2593007F76EAEAF03B3B470D + CEEFECC4A9AB0378E5FD749A56D7ED3D073775762122FBC5F36AACFDEF8C1AA0 + B5FF1DC4F36A4464FFA6CE2E805EC03ACBE283741A84D54E6D2D6EEF261D51B9 + 4D4D38B5B500ABE3B6CDBEBED7FFFED3796D5B3B2272507C7F5B66C7F611FD47 + 8BE791D9B11DF1FD6D2272F085B676AE66D7AF4E6A775D8A0C838AC8987F494F + CFE3CAF7A3C6F4E9230298DDFB36CE8913098125EFA652E61F1289FEB1EBEADB + BAF6765A6D3B81C8CA6C75B538A74F7DEE70CEE95364ABAB0558697A5E62754B + EB75E3FAB517B608A72D8BA5F9F9FFD5C070CF9EFD5AA0A262C08FA6CF425E22 + 417AE346C471D621F2975F5FBAC47F3E5172F54F0635390E8E2FDC1FCD3984EB + DCE39D395B1EB8EB2E5430F899C2F9A914E6860DF8C9EE5DC0D39B3BBBE4E5CB + 976F98770320C0D14C86A9C1A09487426F4A26B3D83B7FBE34307B36CA30069A + 3E6C8965615655E1B5B61C15916F1F3533F633CDCDC80073070404F8672AC5DC + 68C4290D04FE21C9E4B7BC787C7C60F62C947E7B90626749FF75236E43FC8C88 + 2C3E97CD76FFA8B1115306C21B04D003F6257B5894936B8E0B183BFD2B5D4BBD + 78BC30505979CB2B2996457AE346DC0BE7CF010FB53B4EDBF278036D831C699F + 0A086089B02799E4C1DCDC9E42C3D8E177753DE2D5D78F372A2A86BD27FD741A + B3AA0AB7217EA617CEBDF4C38606E28E3368DCA08000E655C8684E4F81A1BF21 + C9E443EEC99325C61D77A245223705E75DBE8CB9E155BC96966322F270C271DA + 7ED0D0C039DB1E3276484000D3EF7DA1B82732C62C0D04B68A69CE713FFA68AA + 3EF98B68437420DC781CB3EA35FCAEAE7D22F2E879DBBEB2BCA1910B43ACDCB0 + 00A17725777527B9231CB2BF140A6EC3B663CEB10FBFA28DCD439F3871C018BB + E608E6E6BF2196B5419015C74CD35AD1D048CB103DC55B02047080DDC924F9BA + EECF1E3366372209E7E4C987FD9EA46E4C9F8ED27BEDC471C8ECFC3BD6DEBD0E + BEFF4B44D6EC4926FDA79A9BE9F6FDE1A41CBCC33A98BE9F9FCFDAD21202300F + A5B6EA25259322CB9603606EDD82D7D2D2042C1391C32F263A78F19AFA3A2280 + 007787C3BC34A98C49C14001A82A150C7E07406C7B27F0934ED7ED7AAEF92207 + D2E95BCE717B7D0A2057D378A1B49447F272514AFD0C408457DF37D33CDB7C71 + C81EF6E70E7855CBF2F35932B6B73BF15E3AC52B1D9719FD6FC411D0FF009587 + 5B3E70DC08820000000049454E44AE426082} + end> + end + item + Name = 'alert-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000026E49444154388D8D934D4894 + 5114869F7BBF9FF966FCD471C61274B4D4691C1505CB1C15114C120AB21F5A45 + 8B7646615010B40FDAB48EC07451EB20C4FEDCE4D6221206179A0B13B3214D1C + FC19673E9DEFB608354BAD777539E77D1FCE3970057BE86E6B90DE58B00BC100 + 600237DF4CAD3CEF194AFCE5D5FE2C5CADCFE7C6C90261197238EFECD932ABAE + CEE74C4C7495E6E90F97D6B32AFE3DB33FE041E7616EB716D65B861CD683C12A + 6F63239A6D93999EB66426DD79AA3C67A4D0A725DF4DA7B63362EBD171D4C7D3 + 4BA1B0D0B4F739EDED7E331C46885F6DA51499F171D64647BF2AD76DBCF6626E + 61E44B6AF704F7DA0A3916F4F4F962B106ABA6663B0C2084402F2A42391B79D9 + F979CB94E2EDABA95500E49629946F6842CA335634BAD75D01B06AAA01BA4BF3 + 8DEDDA36A024570F088FC712A6B92F40E6DA08218A2B0A0CA1CBDF0035873C04 + BD7A58DAF6BE61002135A4DFAFDBA676BCB3DCDE01F436054070D908850E0400 + 782A2B41D073A725802E403B5F6573AB3958210D63C0EEE8300E5A01400B0470 + 2627EB83A61ADC74D5BC3674A5D43234F932A7B9F9C8FF4C20741D6959726366 + A63516F23D9396A13DF684C38D9EDADA7F86B76446227822917A4D8A7E1D6871 + D7D6488F8DA1F9FD48DB4678BD08D344E83A002A9B45390E2A9DC65D5D259B4C + E2A6520027F4ACAB1A48244E6F241231A04A41D9F286ACCDB10C4B57594091C9 + 8252EEA225D52C300B7C564A7D005E8B8057D254E2251C3029CD37F0D9B90CCE + 173CAA6E68BE7EF142374BC9247D7DFD14AB85589BFDE3E3CABAC3DCF226938B + 193E7D4BEFFC852DD9B64D341ACD9352F601E78045E0BEE3384FE2F138AEEBEE + F2FF04BBF8B998BCE474B90000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000033D49444154388D8DD44B689C + 5514C0F1FFB9F77ECF99CC4C273349E791B474E2678C89CD6342D362B4633585 + B8B08F8DB8A9D485DDA95BDD28082EB40815C18D6EC48554ED42A475E163D945 + 050543506AA4262D2438659266924E32339F8BD0D43AA99D037771EFB9F7C7E1 + C03DC27D221733FC706A2FAEA5CE006F0216F07E48F8F6E90B37F8EECFEA8EEF + F44E87BE25BCFE788AFDBBDDA22875C13F783062EFDBE7D617164A84E1CF9D9E + FEEDD2D555369B6D80435D0E5F3DDFC344DEEF41E45D934C3E142D9530A9149B + 8B8B345756927BE2F6C51303B1F5CB0B6B2C551BF7BC57FFDEE46386CF4EE6C8 + 7458CF213263D2E9697764643BEF04013A91984298C944CDC4A727F2E463E6FE + 159E9DEA66B0DB9B00BEF18B4537522A6192C9EDBC492671FAFB09D7D7238D72 + F9A467D4F97C87A97CFDFB6A6B85315BF14C210270CE0902CB1B1D45445A7A24 + 5AE34F4E6265320911DE79BA102566AB5670A0CB41441E1691A2373CDC02DD83 + 8AE06EDD39A6159181B4DD0A462C41441E11DB0E7522F1BF208049A711115B44 + 0A31F76EE7B6C1A0D301D8258EF3400C401C07940A81CC44DE6F058FF6450186 + 743CDE1E288249A7014AC7FB63385AEE8213798F918CAB80E326976B0B04B00B + 0580539DBEF64E8F6EB549F996F0DE541722F2A25856AF13046D834E10A07CBF + 0B78E5D50349F6C40DFAC367338C65BD1E44BEF4C7C73D3B9F6F1B14AD518EC3 + C6B56B878C92F36359EFA63ADA177511F9C2CA6677B943436D6377C20E02ECDE + 5E4F443E7FACDB8D2811F948777414A3478E204A3D58F86F9522440E1F46C7E3 + FB45E463034CA135B5D959742A858EC751D128A2771C44DB11369B34AB559ACB + CBD4CBE53BF7270D70A851A9BCBC76E5CA53C0A322E203886D87E2BA88318865 + 6D21F5FAD6AAD5086FD70442C230AC01B3C08FC007F2C613299EDC1BA12F69A3 + 058548AEDEA4F7FB45E7851B75FFCCB1E929546303803FFEBACE4FBFFC5A9DCE + DE7E29EB359604990FC3701ED89CAF6C7279618DEDDF6F6BA12766D8DD61C8A5 + 12FCED64B3AB0D3D3332321C1B2F16A9542A5CBCF42DD5D55BE77ABCCDD7C2A5 + AB2CD71A5C5FA933BF5CE7D6C6D6B46D1D2780D69AC1C1416CDB1E1391B3C001 + E026F04918866F95CBE5FADCDCDC8EBDFD0737FED379FD9563A8000000004945 + 4E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000043D4944415448899D964B6C54 + 5518C77FFF73EFDC7BA77766FA9C3E297DD002A950892D012196F0AAC122EACE + C480C485B030B8209A800B4CDCB121D1283E48247161A26C5C91B0C485914449 + 0951A984F228AF52028CA5D3F6CECC71515A5BE8F0F0BFFA7FF7DEF33DFEE73B + DFB9E20938DC57C72B8B13AEA48F8177059E85EFADB57BAF6472631B8F5E6422 + 6F8BAE378F735E9770E85D1422699FA4FDFEA24595DED2A54919B34BD2A78D29 + 9775CD258F4DD029F6625777395F6EADC3778D9174D46B6A2A4D6CDA64BDA626 + ECC404B9E1E1E780839B5B1385285FE0B7EBE34F5781111CEEABE5A397D29478 + 4E9FA4BF243599540A0049326188245FD2CF259EE9DEDF93E6B32D35E8692AD8 + B3AA821D2BCA003E30D2376E656565B8762D4147074848925B55854926C9DFBE + DD602727B703E79654F97FE62DFC7A353BC7DF9CA035A1C3C9775A88C7CC1BC0 + 8F7E5B9BC29E1E8B33BF92766242A3274E10DDB8316E2D6BC6A3427FCFB783DC + BC9F9F5FA2D79624095CF9C021B7BA5AE1BA75E038E801A6259A81EFDB446F2F + 260C03894341CCD0D79E2CBE072BEA02805EA031DED5858A643EC74110107476 + 02F408BB786543503C40E01A24AD96E310ABAFC75A6B01EC03CCE6B36DAFB111 + 40A055BE3BB76FDCD9C6825217A0C6C4E3D3D9CB5A6BA7E599CD67DB260CA71E + 889A8EB43F7F05614C2CAEF001AAE4CFFDE889705DCCD49AD6BAA4CBD24AEFD1 + 005BDA931821E005A7A2625E598A490458B7B616603360DEEA2C9B1BC0087677 + 9783F4A2A4865843C3BC9D339B3F6C7B6D6D48B4825E7E73798AC654ECBF00EF + AD2CA77DAAAC0FE5FB78CDCDCF2611E03537639229240E788EF4C9FA34029CEE + FA8083BDB53846AF1A9903F1AE2EDCFAFA399B598CCFB1256B8240D1A54B0BAC + B5D75ACABDDF47C672A87F770BE5F1D842C429379D4EA7B66D03638ACFDF27E0 + 9FE3C7150D0D65B076E564C19E37657137441C33BE9F4E6CD83073B89E750FA6 + 79D8D383098214D2B19851CA48FA42C67487EBD7E39496FEDFC467E024122436 + 6E448ED329E9880B6C95E7D9DCCD9B20E1545460E2712CCCC834DD920FF387ED + 42364BFECE1D72C3C3C8F3ACCD6637B8C0EB85F1F103D9D3A7D7489A1A24B118 + 260C31F138261E47B118C462C87D70F073396C2E878D220AE3E3D86C96C2E828 + 368A84B5586B23E014B04FE7DF6FC77384B5B64C5227B00C68019AEEE7D4742F + 32DDE5A14FE080F21300B28E6733639358EC9D945B3867C43070191804CE5A6B + FB815B004A7A86B50BE32CAB0EE8A8F66948BAA44397A4EFF2D3553FF1C3E5F8 + D0F39DCB936FEFD86EA73BF2DCC080BEFAFA08ED8968CFCE96ECE7EDC91CD9A8 + C0C8589EA14C8E3F6E8D333032C1C94B63F3DE7208284F96D0B6A4032BED35C6 + 1C5CD8D8487B7B1B77EFDEA3FFCC1945517456D8D563A399B10B7F0F10152C93 + F9477D151DF8D9C9889230C4F7FD5F808BF73299D60B838315D7AE5F1F29140A + DF596B775AC85CBC7C85CCFD2CC5FE5CFE057F3A8F93FC1A10AD000000004945 + 4E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000054D494441545885B5575B6C14 + 5518FECE99999DCBCE6C77DABDB6DB6E5B6BD8B45B608B2D18AC051B5A082008 + 6D30F860104D242131C60442139FD060D0E88351131FF48118D1840886101303 + 112989C4A8B43E006DCA36B4B0BDD165BBDDEE6D76C6875EB46C177769F9DE66 + E6FCFFF7FD73BE73CE7F081E033E9B0907022AEC120300486806CEDC98C2C5DB + B1827391420336948938B5B74CE459FA0180FD004C00CE1B06DE3ED93D3EF6D9 + EFE1272BE0C22B15F03B85337C4DCD6E69FD7A806591E8E941FCFAF5DE54466F + DCF065509B8867F2CE470B212F1129EA1CBC8FCAF26E734B0BA8D90CCAF3101B + 1BC19596AE3631747BBD932FA8A0BC04983982AE661BAE1EAC960821AFB22525 + 200CB3F09D1002D6660380D64FB7BBE9E1A662B07996C6FCDF802A2B876F3B3D + 68AF51F699587AC15459D92EF8FD602C96C5030941666AAA894BCCECD95821FD + F5BC57BC7B2918432C6D3C32FF233DE0303338BFBF022E853BC958ADEFC89B37 + 83B5DB738E370C03E96010B1EEEEB41E8F1FECBB9FFCE6A5D3C388A6F49C318F + FC035FEC2885DF211C611DF6772D3B776657FD70358480515598BC5E263538F8 + A2CA1ABFD9CCCCED9F07722FCF9C33D55C21A2A552AAA5027F5C696B03E5F337 + 1763B5426E6D6508255F75D659CC35C55CE1023AEB8A4008E9120201969ACD79 + 93CF8373BBC157579752425EDFE72F2A5CC0B31E912794EEE257AD2A987C1EBC + CF0700FB9E29150B17E054D83A4655A5427EFDC3609D4E104A1B3C162EA7D796 + 14A00A14007150497A6C7200202C0BC2F39C55A06A4102AC02030390C1E5364F + DE224C26F02C2929B7B0F90BA873F02080F771CCF73098E2620024B0B972E95C + 4B0A68AD3603C0FAB9ED7559E03C1E00D8B5A776E93D244B40114FB1AD469108 + A5ED73C1CB82A9BA1A84657735B845C7064FF66AC81270B8A91812470F705EAF + 4CC5DCCB275F509E07EFF3F1203872F4B9922CC245CFB576135E6B501550D225 + 0602CB269F87B8762D08C71D5AE716AB5EF62F9E8A0501024BF0C9561738867C + 24F87CAE9598FF05124982D8D0208090CFBB9AED2855FE5D110B1BC4C7ED2E34 + 7BCD1D8CC57242D9B265D179BF12601D0EA487869EE252F1D17A27FFC70F37A6 + A01B73020E35AA78639DEA272C774ED9B6CDC428CA8A9203B32725E77623D9D7 + F7429999B9A00A74E4D2E00C9816AF840FDB5C2594D28BF2A64D4ED30A383F17 + A82080161571A96070EB6A177FFAFE4C26C6BCD9A8628D4BFC5E0C049AC4FAFA + 27463E0F56554108B16AA1D05A5DC7A979136ADAC80892FDFDD06385F7F6F942 + 4F24901C1840FADE3D00982604602F0FCEA0B3D6D28950A8231D0A750068A692 + 646354158CA280CA32A82C830822A82880F03C08C781701C40E7F4EB3A0C4D83 + 914EC348A66024E2D01309E8B118F4E969E8D12832E13032D3D353308C6E18F8 + 2E6318A72F0563B33DA14B66B0FD69051B2B24AC71F2B099590F21F001A40A80 + 178027AD13FB509C692BB75B299349826849105D9BED292963E80C8FC84C0A26 + A4FBCCAC31046002C05D0077000401DC9C4E65067A4692C6B5E1199CBB1945F0 + 417AE9A654315154A91C3C160E650A8762892263B6E34AD872BBEBD851AF7D89 + C6D4300C1C7FFF04DCDAA86F0D37D2FF20AE61624643685AC3DD290D772269DC + 8B6A59714B9E91D1948EDED1247A47930BEFBC5E194EA7E5EC2F977F7DABB363 + 6F56CCF59E5E4C4E4EFE3DA691FEAFFF0CE5704136F2DE6D32990C6C36DBB5A1 + E1E11D93E1B0C3566283280A884422B8D27D1567CFFD18D1757DEFD8D8582812 + 89E42DA0A0BBA1D3E9447979B94C293D06A013B3FE9800F01380F7A2D168F0D6 + AD5BD0F5DCF78065090000599661B7DB21FDA75D4BA7D30887C3181F1F2F341D + FE011CE188F3BF71FA720000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000070A494441545885C5987D6CD5 + 5719C73FCFEFFCDEEEDBEFF6B6BDB7EFEFD0162854283048C7D0C290910CB738 + 7C05829BC368086631D3FD61B63F966DC6680C3159625C74892C24C6A9318B2F + A001711AB5DB100C0C6A97A5B4584A4B4BDB6B7B7BDF8E7F5CBA314B6FE98BE3 + 9BDC7F7EBF737ECFE73CF739CFF39C232C813AEA026CAF0FE098927BA0E1FCE0 + 14AF9C1B652AA317F56D59CC642570E481527637852C44BE00EC046CE02FC08B + EF8E246FECFB791F9747D37707F0D0C6084FB6178744E4B8E1BA1BEDFA7A508A + 544F0F99B1B13EADF5B6B35713DDBB8FF5DE1DC0BF3E5E4779C87A5185C35FF2 + 1E7C10C3EF0740A7D3C44F9C20D9DBFB77ADF5E6878E5DE6CCD5A905D930160A + 571D36290B9A0EB0CFBF61E37B7000629AF8DBDB11917B0459D350E82CD4CCFC + 014B8326DFFD7809270FD402DC272201152D9E314E791E62DB1AA1E5F9ED319E + DE1AC573E6EF8F79CD7860598093076AD8B32ABCCE52C61F0CC3F8AD5952A2C5 + 346F3B5E725EFDB16B1A2F7D715DA4E4C4FE1A3655BAF302BCE3187C746D01CF + 7C348A08DF108C67ADFA3AE56B6BC38C44669DA3B526D5D7C7646727E9A1A1EB + 5AEBBDE98C3E7EE8D7FDFCA6FB3F4B07D8511BE0479F28C350C611B1AC4381AD + 5B71EAEBEF6C6580CE66997CE30D26CF9E4DEB6CF6F38954F6678FFCB48F7F5E + 9B7BE3A8B906788EC1B13D95046C75582CF3E9D0AE5DD85555770C0720225815 + 1588691AE92B57769B86F1BB8D95BE7FBF726E94B9D2F89C31F8950D0514FAD4 + 32846F05DADBB14A4BE70577AB7CADAD38CB973B22BCBCACD0B61E59E5CD3927 + 2FA012F8744B0122F28C555EEED88D8D0B869B967FF3660CC7592122FB0E7CA4 + 6071801BCA7D14F9CC88C01EB7B5159145E5F59C41D7C5696E0638B832EA501A + C81F65790157C66C806DE238965551B168B869D9757508AC078A57C6F2A79DBC + 80614781D0AA8A8A1063C145678654713118862122AB0B7D8BF06071CEFDD15B + CBD852480C03715D0DC40A7DF9179EF76DC03200FCB3558AC5482C0BC0ABF4AC + BCE3F2023614DA003171E7579EEE44462804B06C53A52FFFB8D95EF82DA1B9D8 + 016836BCB9F3D57C65C66200F735153BD48467F7E2AC801D75011CD3A811A4EA + E6C79654767535C00641AA3FB33A3C7FC0CFB684011E364241549E8660A152D1 + 282A121184C7F7AE09CFDA8ADDF6695B99CBBD357E010EDACB972F4982FE5F89 + 086E4B0BC097C3AE0A1F6CBBBD1366002A816F6E8D02F22931CD2677E5CA2587 + 9B96D3D888F2BC08F0E4C1B6026AC233B3C50CC0C7D615D056EE064478C16D69 + 61A973E0AD12A5F0AD5F0FF084631A0DCF77CC8CF50FA4F1D5318723BBCA300D + E388F2BC6DC18E0E44CDD9912D4A2A12213D306066C7C757541758478727329C + 1D78BF4F7CCF7AD4AF38FAC94A8AFCE6C322F2EDE08E1DA8F0ECBB6BA9242298 + 25254C7575D593C90EDD53E5EF3CF14E9CEB9399F70195C04B0F55D012739A41 + 5EF3AF5FEF384BD05ADDA90CD7455C97F4E5CB1FB30C5EDB52ED1F78F5C238C9 + 8CCEC5E073DB626CAEF41780FCD2AEAD0DB96BD77E6870D3729A9BB11B1A7C88 + BC5A1BB10B7FB8BB1425A0762D0FF2D496622522BF300B0B378476EEFCBFC7DD + ED2422585555A47A7B237A727273A5671D4393319A8A6C44E46B86EBDE1FDCB1 + 63BA88DF15896511DAB9132310D822C8D7CB3D0BE3E6C14EEB6C96A9AE2E3223 + 2368BDB81BA9852A3336C6D4A54BE8540A840901CCFE780AADF98E9E9ABA31F9 + D65B871367CEAC129F4F9BD128AAB010150E63844218C1204620B0E8C6556B8D + 4E24C8C6E364C7C7C98C8E92191E263D3848767C5CB4D6FF02BE07FA07FDF174 + CE7DFBD784796C5D01B5111B11A903B6006DC02AA051A00C118508E238DAF0F9 + 109F0FB1EDDCCFB272713B1DBBD92C3A93C9792295243B9544271239B0440232 + 999B7F9B1E06BA80F3C09BC069ADF58591890C2F9FBDC1F7FF36FCC1837B43C4 + 6253959F353187C6229B6545369EA3002C11A902AA35C42E8E99ADE747CDA7B6 + B76FC4268DA427914C1AD1B97B402D0AAD2CB4E9F0E7CE7F48859B3ED6E4A5DF + 5430883008BA57430F9A78260BEF8C24E91E4E72A63F41E79549CE0D2498BEF7 + 9CB30BF05B42A56751E559447C8AB2B043AF5D5DDC9F30079EF8EA61AAAB673F + C40F0F0FF3EC732F48999B5ED56A0FBE3D3A1E676432C3702243FF789ABEB114 + 57E399BCF6E7ECE527529AAEEB49BAAE27732B12A1ADAD66C830F4EB7F3CFDA7 + 7BF7EDFDDCAC734F9E3A8DD6FAC29509E3EDE39D434C4C4CCC656E861694F082 + C1208EE35CE8BF7A757F3299540D0DF518B76C9E743ACDF113BFE7E4A9531960 + 6F2A957AB7B77761B7AC0B6AF47C3E1FCDCDCD28A5EE370CE3279EE745573437 + E1791E63E3E35CBC7889D1D1D111E051ADF5AFBABBBB191919F9F00021E7C586 + 86066CDB0E027B45640B500C5C075ED75A1FCD66B3633D3D3D0C0D0D2DD4CC22 + 6FF995A2A8A88870388CBAA53C66B359E2F138D7AE5D239D5EF80D3FC07F01B7 + D8182086C9EE420000000049454E44AE426082} + end> + end + item + Name = 'home' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000001CF49444154388DA5904B6813 + 511885CF7D643A9318F322B5A15A853626B4544AA9126629D8468DA008BA2876 + 23149A859BEE0AC55DA169215DB9EC42A1A5B87413C8424149C020B8F0819222 + DA6C4434C46992693377AEAB3EACED34E0D9DDFB9FFF3B3F87E01029DD318427 + 3270F94E4D03B045BD96FDB1320373FDCD3F5E76F0C33D3486CE898CCADDBEE5 + 932A9FEE6074B44595A8673899B3CD86B5BDF1EE0800A1F027D308A61E9CA68C + E77A43DAD8933B31DCBD1046F19B31586D8AABDAF944CE15EAAE353E15015BEC + 0188EA41E7BD799C18B9A61390FCE55E7F74F976145D5E05018DE3567F08E59F + 66E44BD51C5722D19216D3BF363F1721CD3A180F9F45D7E423A83D03F729A16B + 5389886F6EF41C54D7DE710AA7B81E0F80009E5265739C794335CF50F2F5D6C6 + 0790330FF39C69DE2C11ADF4D2CDB84CC58387F5BAAB7CB98AF4D3F7C4E61D8F + A510539469DE5562B752FE17591CB70C0057FA02F03F5F04B1B61284B1352AA5 + 5C502A6F2FB96A95639777C48DEFD0D65F2624304BDC176FA087D5E19375BB50 + 28C87600BAAE9386CD68799382364ACF60FF6A3F7D47B2F91BCD8FAFC09D52F6 + BF8FBA8E3AA50821A865598E1EC7A1699A300CC3C9E20C6847FF0DF8ABC483C5 + B533FB035DA297A57C648CE00000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000002A149444154388DAD925F4893 + 5118C69FF7FBE63E67730EB726869BA4A294096D996462A4F6EFC2A228A1B042 + 705EB5DB122ABA8B88A23F17120683A48BBAB0AE6A17491161F647DC9488AC51 + 51A99F994EA773EAF66D6F3722CEB9A9D47377DEF33CBFF370CE212491AEAA01 + FABD760882EA0CC00A335A27BBDA31FEF416108D2C9B11971B925A03C3D10BC8 + A83CAE1648BC43441789A816C086544BF13329B72432D3DF050ECFC567E34ED0 + AD87A9E13AD4D9855944D44E44158EF26C66065ADECAC4CC6F001C0BFB86E491 + FBCD08CBDEC40DA58D5664D96F436DB49412D1F3756AB1F8666D1E4E5A4D28B7 + E85064D4E0E5777F4E38C227444D7A97D67A604099184678F86B3C505B7A10A6 + FACB1052B5F544786CD64B996D7585D861D12D980B0C1AD414E8F1FAC764FAC4 + 5CE4148929C369C5BB3DA44EC3ECB71E801922041199479AA1DFD32490205E15 + 88AE959B75AAB6BA229833A4B83B32A4A5E0F06603FA4782E24F7FE810009394 + 5BD22159B644673E7781B29A5A909ABF4D4FC00322DA7FDA6AE2F35566560971 + D71BA3489471A373905ADF0F13337732739DE2937F0BA979B64D04BCA36864DF + CED007BE546359110600A24038BB2B872B677B9822A10A22EA4E31646F1788E8 + 0A316BB57D8F9E6807BA7945D2126986FA58EB7ED84E512504D03981396AA7E9 + B132F5487F0F11AD5C6D898888A43F5F3E8AE3BFCA18B0AB7C1D7747753C0331 + 3846800558E66FAE2461768A94574EDFA8224135F5E21E24A311949FBF56CEA2 + 964078E013A60707A14A6674BBDDF0783C3133ABD50A9BCD96309314E8F178E0 + 743AFD007AE7475B1B1B1B3392018564C079F52A8A521D0A85AA1781FF098860 + 3008BFDFBF1AEBEA806BD17F07C63C4A201080DBED5E58CBB21C17906539C613 + 08041203BD5E2F391C8EA40D5C2E17B95CAE84FB7F0145D3F385BA1374FB0000 + 000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000036E494441544889B5545D681C + 65143DE79B99DDD96477936CD2AC89609AB54D05A549435A49021AB03658C416 + 5AADA8F8105ADF84A2F82E566911C152059FD6824545919287FA83A2066B2C25 + 64C222422BB5924D1B5BB58949379B64333BD70767747676936C1E3C3070EFCC + B9DFB97FDF10EB40D536A0E9E9D710497583C01020B608DE5BB93989DFCFBC04 + FBD6D49AF1DA5A1F8D96AD480E9D44B8759B41F24D00AF926A1F8006555BF74D + 74C7A05398FE19F6CCF58D0BD46CDF8DE6675F871E6B6C24390CE0505B838978 + 58E3DC52F17E92FD34C29F453BF7E4A56863793253AD0051B7FB301AF7BD08A5 + 873A497E45B2FB81F63A9C3ED08127B76FC2A53F16919D2BA4003C0EA5CE47B6 + ECFCCDD87417162F5F001C7B75011589A3E9A96388EDDA0F9207410C934C0EF5 + 247162B01D35869288A1F1D17B1258B61D4C4C2FD4037C8644D648A67E8C6CEB + C3D29531388BB7CB05F4442B9A874EC26CEF52245F0670CAD455F8F8E0661CD9 + 798728FA1221D0DF16C7E684C9F3BFCE1B2B82FD04625AACF1DBDAEE479CC2F5 + 4BB067A6FF13303B7A913CFC168CFA649CE487008EB4C4427CF7E0560CA4EA84 + 2E00803E743445642055CFEF27E738BF54EC25D94B3DF445B46B4FDE292CA230 + F51318EB3F84C4DEE701A56D217996E47D3B5A6BE5EDC7EE46321A82888877B8 + DFF6FB33F9151C3D77153F646F5344AE8AC80140320B99AFC1B6E31740F26100 + 1F00483C74A786534F744958F3F5A40AD88EE0858FC7F9F93540801C04CF09E4 + 2345F228804F01C4A3994FB02B6F4958A390849778253BE8EB8AD2B99091D8D8 + 1910A251F17D92C714800880D9D0CDCB7B6B7EF96E43595782393526A1ECF883 + 224E16C0B42EE29C80C8E9F0B5F11B2EC7EBB717C355ECB26F5E6C64F2E278A1 + E5DE2EC730E7F5B98B6785E2DC68FE33E36D8800FF6C8B2BB4EE907D36482274 + EB0A725FBE33BF0C0DFA5FC36F402905F6F400DCD860578553C4C2F839E4F379 + E8D5F0FD6D09B4685D9408882FDA6FF7F5F579E6BF2592C4E8E86830A62C8112 + 01B79FABCD60444446DCD703EE5371067E91AA5AE462C4B6ED578AC5224CD3A4 + 2BB02E94DF09B6C8F33D3397CB617676D6CB502AF0CA5A5422E05FC10A3F383F + 0F70E711E081814D2C11F83F50D51649A06E1181772137BC459665955C58F730 + 067800C0743A0D3F6F626262ED2D1211B12C0B9665052B2DAB0080A4D3E920AF + 0C7F036F5BAA4BF2085DF20000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000449494441545885ED945D4CDB + 5518C69F73FEE7DFF25DCA4781526819A5A51D5FDD3040A5032611199A297388 + 2C5126CC65C912B9D10B2F98C96276B198C5A8247ECC65C9124CD44D26612A54 + 6770CCC5B94C5BB4830DC6F81C1B303E0A1DD01E2F4C365008A583EC86E7FE79 + 9FDF3979DE5780AF0A8901CBD90FBA691BF8BD3EC035EED318E29329760BC4FC + 1A8148038F0298E373B36FCFB77EE8F6DCBCB0EA59C26A0D34B51462EE817022 + 4A1B92E3C3CAC382FDCDA3CEB96CAAC9690293CEF001DB3A010812B0FC1A30E3 + 8E744A694B8129DEB42B4F07935681798F27F1D6F0E46EAA309C270AFD6D4FEF + EF807B760D018214108B0F4150A6964924ACA17CBB21D29CA2C4C5F6010C8E4C + A1C0148FC8507FF9B5BED1577850D40DAA31B7F341BB57BD581180C4A4405254 + 4B6948D4BB6121FEC7AA4B52454DB40C675A3B3172771C7747A7707D68129634 + 15366BC2C5CEBEB1175DF00BA4DA829FF8C410E7F77A7D07A0C66721E6BF114A + 44BFAFB4B1F2CAAA92543026E0C4391B9223FDF0E5C12CFE6AAE1A3FB70F91C6 + CBBDC8D44723DBA8C4E088D3EB5E2C0D404530CB410869CF1B08212D96345556 + 59413286C7A6F179930DFBB7C5F3F7CA53216102248CA274AB12D3AE797CD0F4 + 17498C95232F3DCEEB5EFC1F20201C62512D049569A744A48DBBF3F431791971 + B8DA398C86D60E7C5299C1F75A3420E4E1061342F0A42E1C9B95C13872C64624 + 1286FC0CEF7AB10880441920161F2254A6AC0D0D96D655ED489326A9E468FAB5 + 0B1D378771B6C6CCCD49E1CB7EA7362A08CF65C4A0EE7B07E9B933054BAA0AC6 + 157AF1E01954FF345876553011D8C98418D9CE3D85460802417D8B03F1328693 + FB32B93C50B26CF8424DCECCA1FAC415621F9AC69E4223044A506F75A0A36FAC + 99735EE1B67D33EABE7C0A0087002A42C8D907D1F4929650DA9C6D545A2A9E32 + 607CFA3E3E6BFC13A5A6287CBC770B0F9432AFC201402A0AD895198B09E77DF2 + D1770E6863E5D896AE5AB21702331F00D3173EC3183DF7822529AE70AB1A8E5B + 23F8C2FA378E96A5F09AA22450B2FA8B4D0881451F81E4A8401C396D23FE7E22 + F2D2E316F72222B19DC23F042078DD94A4087D22391AD62B3DB0FED6856F6B72 + F8CBD971AB0EFEAF4A3262607D2B97FFE118C0D90BD791921001833A3C00E0C5 + 607E20549D05B6FDCD4881D2AB094A59F450673B6C75559E6899DF23872FD4F8 + F41CF4AFBD4FFDD5E9B83DEAEC0447E6DCF96353D4D37309EE6BD63B1E0FAFEC + EDEE39BEA9BB9EAF753800C80244687ABEE613FD5D870154CC77FE38E5E9FE05 + 0C00DC978E830445348779FA9B0578AA01F03527004009218AFE96776E1035DC + 173F05807F01E09EC5FC0F8721D5E900B97C3DB21F4832DA01B7FDF443A8754D + F3421B00DE9FB705329BCD4B5EA6B6B6B65597D727000070BBDDD4E5720100A4 + 522918631E5FE6F80CE072B960B7DB01003A9D0E721FB7E7B17760036003E0B1 + 032CB986CB1D9A95E48B6F1180CBE582D3E9F4EA576666661ED90700FF00A805 + 9F195826B0270000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000005EF494441545885ED957D4C55 + E71DC73FBF73CEBD977BB9E0E5720179973715F0057022EA3AA6386DD7A4AEE9 + 56D4455C5D5717BB17B62C76D9B276FB6BD996AC66E96CB6A089B6C6A69D71AB + 0A96B611525B17ABDEA688655C518C22081729D78B70B997F3EC0F3BB356F085 + 8BA97FF8494E72729E73BEE793E7F99EE7E84C1589B9E80BD6A16595C3E83508 + F64D49AC4C4948EE4358966E422CF6C78051659A8722FFDE81D9D61075B61E9D + 9986FE95F518E5DF13D12DCF8BC83611598B68612DA3EC883893312F7A41995F + 82A0CD89B17C0B7A7E659C88EC89B11A9BBEBBA248E6E478E43F1706AAC64C35 + 47DC331AB48CD251F3E249080F4FEA35935B62572696AAE7D0E2A7E723B22FC9 + E528AA59594C728203809E2B43BCD2D88A7F70A415C5E36A78A023DCF467544F + EB5DBFEAAE6750B22BB0AEFC15E24858252287666725666E7C642E2EA78D0FDB + 7AE81D18A2202381B282647AAE0C25FB0323EBC562FF58CBAB3CA3468228FF99 + 7B24281A7AE993188B7F80E8962D9AC8F665A559F6272A67A26BC2810F3A38EC + 3DCFE9CE7EAE85221466255252908C32554CE7E5C0A47B79674B6CC4607CFD67 + 68990B1C225267B5E8D5DFA99CC5BCBC248646C2EC7EE73481ABC3ECDEB45045 + 4C45CDDF8F8B2BDEC1BA1585C4C6586839DBC71B4DED84C2637B95521B95BF23 + 187EF70F70AD7F0A04A7A561A9FA259A2B3D1BD8E78EB7CFAF5959446AA293EE + FE20BB1A4F93E5B2F1DAE672959578BD83E7FDD758F3F231B9F0E908EBBF514C + 9AC739E95EDE728925A30CEBAAE79158F73281C6FCF4849CEF3F3A1777BC9D96 + B37DEC7CAB9587E724F3FAB3E5CA1367BBF19CCB61615D45069F7405E4D5E633 + 24C6C5909F3EB95E4E28A8CF7F0263E966C4B0FC4413D9F5D0BC0C67F5B2D958 + 0D8DB74F9CE7C0071DFC66F56CF5C7EA39588D9B632C86C6EAB254EC169D970E + B54968748CD993E8E5CDC9460C7A652D7AD1376D22526731F4E7BE5D3953AB2C + C924141E63CFBB6DB475FA79F5870BD586AF662332714B44848A7C37E5B909FC + ED1D9FB4777D4A61969BC2EC4452121C77B45F7E3E3D6E3A96AA2D883B3B5D60 + AFCB19B370FDCA223292E2F00F0EB3ABB19578ABF0FAE6456A566ADC8462E371 + AE6F8835DB8EC9A5C02835AB8A99EE8EBDA35EDE9841499D8BF5E1DFA2C5252D + 15783B2775DACCA71F9D4792CB81EFE2003B1A5A5834631AFFFCE91295E1B6DF + 951C4042AC95758B333975615076379FC133CD4E5E9AEBB6BDD401B4E2C7B07C + EDC788C5F60CF0DAE2A2B4F8B55585D8AC3A475ABA78A3A99D1F55E5F2F28652 + E5B04EFEEF6835341E5F9086A10B2F35B44978CC6456969B92FC897B29FAFC27 + D1CBAA2D22FCC5D0B567562FCDA7BC309570C464DF7BED7CD2E9E7AF35A5AA7A + 51C6A4C5C6A3F1D4659EAA3B2129894ED62C2FC46E336EDA2FCD73EF0775BD60 + 199A27E7D722F28B8D8FCC655E5E1283432176349C622838C29BB54BD48AE2E4 + 299503C84B76F2ADB254F61EBB20873FEE223FDD456E9A8BACE4784EFA2E1703 + 5719BE7A44174F1E9252F811506D189A2B36C642DD81160A92EC1CFCF912333F + C539E572FFC31D6B656D45A6FAE8DC15D9F3DE59925C0E8EB676E11F1CF62AC5 + D3E645EF98AEFA7C68D915218989FFF052FFD08693BECB9AA3E738754FCD370B + 664CEDB28E87CDD0C8317AD5FE37FFC5D1DE58FC83C3432856A940775FE4F09F + D088848834BF8832C78E2AA55EB0062F3D9B79E92D34650AD7B7A17B7E08484A + DF51891B6C5F0D6C526ACC17697A1122231800EA4A2791E3AFA02FACF9BDA7FF + 0422B2ED9E4FDD17101149E97DFFE000F198A70FA2FA3B00AE0B0298ADFB315B + F7E32C29019B6DC2A07B496CA897C83F367FEE9AF6A598DC050F04A3E5BE1734 + 6E7FCBADD9BA752B3E9F6FDCB18282026A6B6BA3CA8F5AD0E7F3E1F57A9B81E6 + 2F0C557E764445D4829FD11C08047E1708040070381CB8DDEE17B88F04090402 + 74757501E0F17870BBDD53927BDF7F240F04A3E58160B43C108C9609F7C1FAFA + 7ABC5EEF6D03BABBBB6F39B67DFBF6A83226126CAAAFAFBF6DF0FFD139DEB59E + 9E9EE63B11BC15370906834142A1D0F2BB0D0A854237CEC3E13081406027B033 + 2A3BE0BF06FE7892D10020D50000000049454E44AE426082} + end> + end + item + Name = 'button-info' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000026549444154388D9593DD4B93 + 611887AFE77D67CE4D9D33B649A6CC183BD13E168B24F040A1A8C4F36148059D + 04E27F5044041576D649440491B3B1830E8248348D4A70CA72E9EAC418F8097E + AC36D7727EBCEFFB74300D4DA1BC0E9FFBFEFD78EE2FC126C5FE16EC17DB55D5 + 521A007109F023B0234901519041637D3594EE7BAC67064320250002C0DEDC81 + ADA1D50B84EAAB4B8FB7F91CF82B4BB0179948E534A2733F791E5B22329D1903 + 02D9D89B8964F876DEA4F8540BEEFB11AFA7737821189BD7354DD3F742D3343D + 189BD73D9DC30BEE7B11AFADE92A00AAEBDA43552930F7DE39E73E1238E64008 + 01C04022CDD9A75F449DCB424DB9192104752E2B4E6B81A53F916E30571F7D92 + FDF45AAAE517DA5BEBAB4BAFDF68AAFA23DEC25E64E27455BE942D6A9D164666 + B3157359FD9BBEB21C5780D6369F6397B8A6DC4CC79943D4949B77BC0B2168F3 + 39005ACD353E14C0EFAF2CE16F0612693C0FA2622091DE15F3579680C0AF5ACB + 5010C2BEFD8BFF433E5FD80114A44CA772DABE0C52390DA44C23250A108DCE65 + F765B0991F35D65650A4A4BB2BB688DCDCAC7F21A5A42BB68884EED5C9CF2872 + 23171A9ACE8C85E3C9FF3208C7930C4D67C630F4D0AFD11E54A9AD1B45DEFA77 + EF2797034E6B81A5D6694108B16B8C524AC2F12437DF4E250D4973E6E38BA595 + F13ED4B599AF980E1EFE6E72795EF527D20D23B3D90AEB018532B3894293C28F + 158D0F93CBDCEA9FE1D9E8C2982169CE4D4426922FEF8261E48F09A1606BBC8C + ADF18AAA141406803DAE91A034F4506630A4A77A1F81B691976EAF4FB5B9283E + 799E42F709D4E2B2CDB0C4C865599B1A271BEB414BCEECE8C96FC533130A98BB + 6A390000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000034549444154388DA5944D4C5C + 6514869FF3DD3BC30C57187E064AB5756CE132288962ED682C0BD3223675D198 + 26E2C22034317155174D8C6E8C0A8B26468921D1E8C2A451171243EA4FECD4D0 + 44DAD84A4DAD31D016AC2356908065B86007E60E33733F17202919BA68FB2EBF + 73DEE79CEF2C5EE17F2983D013ED84F61C447CFE06413A8116041B2846E30023 + C071ADF551CF4D259D13EF933AF725374A00C41FA4BAF31D82DB7784407A10E9 + 68AAB1A4A5AE0C3B1CC0F21938E91CC3338BC4C71C2617328B4017E89ED4AF27 + BDD9BE37C1CBAF0295C1A6177B09D63E1241F35D6D65D0EE6E8DF0D8D6123652 + DED3F48FCC72E4D424FFBAB96F80E752BFC433B37D6F01608476775012DB1F02 + 4EED8A94DA9FB545D956115803249269AE245D8A4C85E5375022346EB278CA2E + E764623E9ACAE46DFF66BB3F9B9C203B9D4085761F044D4F6D45D0FEF0993A2C + BFB16EA38F7E9AE6F9BE31393DBEB0EE7D7B45808F0FD8047CAA0D682FDF7708 + 948112D31F159117BA5B230530809DF7DCC581C64A1D292B2AA845AB8A79E9D1 + CD005D4669A5196C68468948E7433596BAD9CDDA1EACE2ED7DDBD8B965E37AC7 + 8E6A8A4C75AF204F06EB6228A0A5A5AE6CC36680812B0EBD67A7B8F4CFD286F5 + 50C024B632ACC5571D4121526F87031B36030CFC3E4FEFD929B97C1320801D0E + 80888D325140B1E52BBCDDAD68C5AF2D01145A3B4E3A774740279D038DA3B546 + 012323338B77045CF50FE3E551C0F1F89843DED3B705BBEAB80C4F2F09105F9E + 49A0B4D6472716328BFD17676F0BD8FBE3149ED6435AEBF3E9CB67509E7B3D09 + 741D199C647CCEBD25D8B7A3737C75692E0F1CCE262771FFB880E1B9D729BEBF + 792893D30F0F24E6A3CD9152C2966FCDD46A97F3F2AEBB79A0BAB800F64A7C9C + 9CD6AF82FEE2DAE76F904B4E602CFF3D8A59759FF6D7D41E4B65F276FFC56463 + DE8386AA200153156CF5A7E3D2FDFD5FBC77662A9FF3F46B40CFFCE0A7A4CE1D + 0356F31065107EF675ACA6BD88483BD05D64AAADB12D2505793832BD249ED643 + C0610D430B839F307FE283B58172E374AB692F654F1FC22CA93445A415D803D4 + 236B893DCC4A62FF9C4D4E32F7F5BBB8BF0DADFBC13A2000A68F60FDE304EB62 + F8AA226018088246A3B3CB64AF5D253DFA036EE20268AFC0FE1F96DB42665B4A + 7FA20000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000433494441544889A5954D6C54 + 6514869F73EFCC6D87CE94FE51DA3253A4256831846086B4912E1405D2D49280 + 91B8306E1030415D9890B8B10B1234118D0425F803BA51031117A418A2244282 + 0252A08A5806858A282D4329D369A777663A3FC7457BE9DFB486F0ACDEE49CBC + DF3DEF77EEBDC238246F1645AB5FC6D7B01E314C8F88AC055A8020821FB08008 + 4A0838A1AA0780CB99D85DEE1ED985FDEB3126238E70973F44F98BEFE02E0D98 + 886C045A45A46AAED7ADCBAABCF8675B58A641249E26D46B73E9962DC3996C06 + 6803B6A9EAB5A15FBEE3CEA11D90494D3CC05DBE808ACD1F62784B8B05BE04D6 + 345417B2B5A192FA804F0D610A77ECB41CBCD8CBBEF65B0C263331E025E06BFB + F28FDCFEE20DC8A4013025AF808A2D7B308B2B8A45F821DF65346E5F359F3757 + 06A82ECA4700198571BAC03259EEF7EABA47CBE4F7B06DDD1C1C5E0F74BBE604 + 3A8CBC02127F9C1939A0A4F955663DFCB829C2A17CD368FC78DD426D5A54AC8E + A163BAF74C0FA76E0C88651A54165AF726F1E5B9E499474AE8BC1D97EB914493 + 2027F3028BFF4E5C3D4B267A1BC357BF1E6023CA9AD6A7AA75C5FC4205D0511C + BDF7E71E769FEAE642776C4ACD32457735D7686DA9C705EC1724BF68F516000C + 0CD303B4365417B261491993A370F472BF9786808F4A9F354D6406DB9FAE4644 + 6A10D99CBFE0315CA57E5C22D22222555B1B2A755C2A53D8FFEC225475427493 + A90FF808CEF36AFBBF839B30E4034F5DA31A40CB5CAF5BEB033E9D3CFA4C3A57 + 0DD0B57525008B416AAD8A5A0C20B8ACCA8B21B9B7C5D14B7777C8C277CFC967 + E7C232535FD0EF1B5D0C8266413106227EFFECB1AD7850C6BCC40FE0022CCB34 + 70C6751A736801D0FFE91BF512542D0003D5FEFE789A5CE38ED78EC9742F9EA3 + 23F1B4D3DB0F8A018442BDF6030633C69531AF100A0670E2B7B02D7D767AFA1D + BD0F8E7745016C556D4F47C318AA7A70389DCD1CBCD83BE36A3A069AA3E6E881 + 649AC39D7D30F2851D4CFCD5810174026D9FB68709C7520F74077B4EF7104964 + B28AEECCA612C4AF9CC1C8C4EEA2B06D30998EBDFE6D17C97436E7E823C63346 + 239F9F0F0BAA9F001DB10B47D1E410326BE92AE63CBF1D11790EE1AB276B8A8C + 5DCD355A6019F793BBBCD6768D783ADB8EB23233D46FDF7C6F03597B003315EE + C25D16C0AAACED04E9B91E49361DBBDA6F2E2AF3887F765ECEB81C06931979FF + A76ED971FC1F19CE683BD0A29A8DF61E6825D5FDE7BDC9C17453FEC2DB78EA1A + 117802D8272235CBE779B5A5AE84A0DFE7FC3235124F4BA8D7E6445794C39D7D + 441299EC682CDB54B376DF376F113B776442B423982E8A9B5EA170C50640F211 + B608B209A89BE6526C9436859DA01DD9A128770EED207EF9E494BB9B8055BD84 + A2A6AD78E62F01C314515D884810F02358281120049C5534964D25889D3F4AF4 + FB8FC8DA03399E631A5CA5013C752BB0E6D6627A8BA6D4537D3749DEB844FCCA + 693439349D0DFF0164E91202BC32FEEE0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000506494441545885CD975D4C93 + 5718C77FE72D2D2D5FD682B5968D8F028AA86130D4C4B1CCC579831F011713B7 + 65D92EBC98C9E29DC41B6F74C93631BB20992E8B376ED9CC1C032746E332E70C + 063598212A340AB232470B886D69A12D2D7DCF2E8A88A25050C9FE77EF7B9E73 + FEBFF37D1E419C52524C18F25E4797594882C98AD06827CAA41A65CCE322E2EA + 24D8D942D437106FB38899020C856F9056BE037D5E69A6109A2AE02D60256045 + 9084240038815BC045900D21C78D5EDFE53A02377E0729E706A05D9C4B7AD55E + F439C525C03E21C496A51906A53C3B8DE566034B527518B40AC1888ACB1FC63E + 10E4528F8F3B8341554AD9081C187575B63EA8FF82F0BDF6D90124976E22BDAA + 5AAF68130F2A42ECDAB2DCA4EC5C6DA1C89C34D380D13110E0684B1F8D76B7AA + 4A794455A3D5DEB38743BEA61FE203487BF37D1656ECB60AC1699B495F5C5391 + CB6B4B5266347E52D75DC3EC39F337DDEE509B946CF635FDE8F49CA99D12A799 + FC915CBA89F4CA6AAB1034ADB7190B8F6D5F4A96513F6B73004BAA8E77576660 + BF1FB4F47843DB12B356D5C968C43FEA687B3A80D69C8BF9E31ABDA24938BFDE + 662CFCA6321FBD569993F943E9340A15CB4CDCEA0F187BBCA10D7A5BE9B15077 + EB58D4DB3715C0FCE197684D995FD94C862DC7B62F9DD1BCB6D9C9073FDD1600 + 6B5F4D7D669C4611BC936FE45CA7C7E20DA9C6C4EC5567FD574F8254015020B6 + D5F439C5258A10BB6A2A7248D6699ED9E05C94ACD35053918B22C42EDDA2EC92 + 94B24D8F0001D22BABD19A32BFDE5A94BEFCA3D2C57135BAF6D55476AFB34EDB + FBC9B2A4EA707842E2F6FDA059637AE5C4F0955F0050949485E86DA55621C4D6 + 9DAB2DB3EDDCACB473B50521C4569D39C7AAB5E4C5000C79650845535590A157 + E2D9E70F55DBEC24FFD03551DBEC8CBB4E9139898274BD2284A83214AC8901E8 + 320B01D697672F984D67E6ACF29C0500EBC77D51124C5680154566C3BC008CFB + AC4858688D01088D1604D625A9BA790118F7B18A84D86D3ABED94592E1390F9D + 7865D02A20C4C4628BB94A190C8DA9F302108CA82065700240AA51805EA72F3C + 2F002E7F18A097982FCA98C709D06E1F084E53EDC569DCA73DE28E6D5F25E2EA + 02B878A9C7372F00E33E17237D5D3180E0DD6B4849C39DC1806A1F08BC5473FB + 40803B830115680876B6C400A2DE7E46FFB9D92B25A78FB6F44DDFC273EA684B + 1F52723AE271F686FFED880100F89A4F00EC3F6577AB6DAEE19762DEE61AE694 + DDAD02FBFDCD3F4FFC57000237CE33EAEA6C55A53CB2E78C839170F4859A8F84 + A3EC39E34095F2C8D8507FABFF4AFD44D9C49B5097B502CB27DFEA1545D3FCB6 + CD587CA4321FAD66C657FB8C8A4425BB4E7671A1DBDB26A55C37F07D7528D8D1 + 34513EF1F2880EDD478D84C60C056B1A1D9ED16DEDFD01E3867C233ACDDC4FC8 + 9170944F4FDDE542B7D721A5DC3874E9B86778D2F03F060010EEB9899298EC4F + CC5E59E7F08C6EF8ADCB6B596549C232877BE2BA6B989DF55DFCE51C6E93C88D + 23D7CF39DD276B80C71395296FAF50E755E458C4AFB7957EE7094517D4DD7C50 + E6F0844496319145C9DA27C3A7A86320C0E77FDEE3B33FEEA9EE40E4B094F2BD + A14BC73DEE93079F9A253D739213734B48DFB617DDA2EC12601F822DCB329266 + CC8C6E0F0654248DC081B1A1FED607BF1E62F29CC70D0080A221A56C3369E53B + D09A733305C4911BD21071F7F6FA2ED7317CA51E19199DD622EE65AE5D528021 + BFEC5176AC6863B52520A344DC4E227D5D04BBAE4D9B0BFEEFF41F1ED60A2C02 + 4B58310000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000006FF494441545885C5985B6C14 + D719C77F67BCDE9B776DEF1A636CEC18624C0DC450D3B42681DA694543A88050 + 055588A6546DD5224122221E4A9546257D8AAA3EB4528225122B2141A1A1AE14 + 11CCA5A9AB14572DB7DA2008C576C0C4066CCCDABBEBCB5E6776BE3E2CC62CD7 + B5EBE2FFC3ECE8CC39737E3A3BE77FBEEF534C445A06D69915D88AE761C92B46 + B3BB41810284E4C50C07D107AE12EBFE1CBDF78B094D03C977A62DFBDC25B8AA + 56E05C508BB23ABD0A6A8185C01C2017851D2104F8800EA045E05F6638180D9F + 3FCAF0C94F885F393FF980F6B9D5789EDB82B5B0DCA694DA80E2470AB50CD034 + 0533B3AD926BB760B3688475135F48C717D2158020118446E05D11F94BB4B395 + C091BAB4411F08A83973F0BEF02A59F36B34A5D426E0574AA9A232AF5D56CFF3 + F27469360BA63BB159B4BBC60EC50C5AAF8568BE3CC8C1763F03614389C86960 + BB88340D9DF898E0A1379178646280D6A20AF237FE164B6E41B9820F95524F2E + 2971CB4B4F15525DE246A9F4BF0E3D211CB830C0CEE3BD74056388C85E11D91C + EFEB1CF67DB01DC37F757C80B6598B28F8F1EFD1ACCE3528F6E439335DAF2F7F + 8C95733DE302BB5371C364D7C9EBBC75BC0723211745589D1819E8E87B7B33BA + AF2B3D406B51053336D5A1D99C1B51D45715BA32DE5A53C60CB775C26077AAE5 + DA085BF65FC417D2FB8115C6D0C099DE9D3F253178FDC1809A3387C2AD1F9099 + 5DB0068D3F7F73564E46DDF365383333260D6E545D81281B1B3AB83A18EB1361 + 59ACB7BDF37ADDCFC088A7F44B9979DAFADF602B7962AE521CAE2A72D9EB5F28 + 4F1BEE74CF08DDC11831C3C4EBCC7C68FF5C8785DAD9391C6C0FB8A286F94C86 + 3BEF7DCDEA30A21D27EE0D682F5F8267C5264DA10EE5393367EDF9FE57F0381E + 3ED1A8D6FFB18DDDAD37545837F94EB927AD311E87858A7C07072EF867004EDB + CC799F86CFFF1D3314B8D5E7963F78566E46A17EAE947AF2F5E58F4DEA37F720 + D5CCCE61C357F305785965582A739FDD94F2DC02C9D5B31695DB80D7AA4BDCB2 + 726E7A2B70BBFEB0EA71E20991694ECBB8C76E5B3693C60BFE8C60D4D8E19C5F + B3CE32AD14A33FB9AB3580ACAA1528D406A554D1CB4F154EC84AAA8A5C5497B8 + 29CB738C7B6C8EDDC2C6C5D3518AB5A0CAB2AA56DC7AA6A16590B5A016E08765 + 5EBB5497B8C73D012437C9892BC35C1A78F0C9703FAD5F948FA694528A17B316 + 7E7B0CD03AB302CDE6F02AA56A565578276CC4AF3476F2837DED6AD7C9BBBD2C + 1D15B8AC7CA3D80DB03633BF14CDE54D02DA8AE701AA06D09696664FE8E593A5 + A5A5D9A054A542796DC51549404B5E31C0424DC18202E794022E2CCC4225F745 + A525AF04004D73B801E614655BE55E51C9A3D42C8F6DF4B64C73B880511F54E4 + 7AECE3B787C9D66D0C1E75F314D66E6E09BB758A570F188B2B95B28FB6255B84 + 705437A704EA768547194442A36D9A247F7DBE903E154C29EA1F63E89764FA85 + 668682001D3742BA1A8E19538496D4257F74F4B6C30C0D02A0E90357005A005A + 7B42F71CF8A8D4DA33822031E0DC4D2EB458F7798063221269BE3C38957C345F + 1E04E1B8209178920B4DEFFD8244782802341E6CF36324644AE0DA7D61DA7C11 + 0534C4AFB6614647928000E1CF3F4344DEEB0F1BEA93B68129017CB7A50F4142 + 22F251F8FCD15BED1AC0F0BF1B417144444EEF3CD64BDC78B496D3E98FB2FF3F + 7E10DE1133E11F397D381530DE7D8E68672BC0F6AE608C5DA72616914C44A608 + 3B9ABAD0136600E48DD0992324827DA9800081C37588489388ECDD79AC87D66B + 238F04B0FE541FC7BA8715F04BD388FB824DF529CF53823FCFDA5F90BDE47BD9 + 0A752A3F2B73CEBE0D1594E6DAF97FE9AF1703BCB4FF1286290D22B23E70A48E + A1A37B52FAA41CC0C1436F12BF7E69484456FB427AFFC63F757079CC3C271DEE + 95039D18A61C17919F442E9E64A879EF5DFD5293DE8441A4E304598B960F6836 + 67D3502CB1B6B13DE0AAC87750EA999C953445A83FD5C76B9F76114FC8716095 + EEEB1ABEB17B1BA2DFBD187765E5121926DCF64F9C95DFBAAEAC8E8FA386F9CC + 810BFE1903619DC5452EECFF43D4D3E98FB0B5B1938FCEF62B53A44144D6E9BE + 2F87FBDEDEC2CD23F7E18000667890D0B9BF612B5B1CC870E7BD0F38CFF685BE + BEEF6CBF16D54D667BEDB8ACE99743DA6E84F95DF3557EDDD44D57201A00B60A + F26AE4E249FDC6EE6DF785838715302D99E43EB7859CA7D7A1344B25B003A5D6 + 66285475899BA5A5D954CEC862B6C7C69D05CC4E7F84966B219ABF1CA4DD1751 + 920CA1DE01DE30F5982FD054CFF03F3E04F3C19E9B560A9759F038B9CF6EC239 + BF06A5D41CE045E0F96482C37DFF73118901C78006609F240CFFC89923049BEA + 4904D2F3DA71E59896FC525C5FFB2ECEF9B5644E2F45A1F2802718AB513B1046 + 807E9235EA738244E23D1D84CF7DC648CB411243BEF14C393EC0DBA5B9BC6355 + FE64E23556E507CCD058955FA28FC6F4A744FF054019EC15B10EC7C800000000 + 49454E44AE426082} + end> + end + item + Name = 'application' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000009E49444154388D636475AD64 + A004B030CB99FEA3C800060606868E34BBFFF8145DDEBE9441C733FAFF95ED4B + 1991E9CA5987989828B19D818181819123791D455E60303737FFF7170940F97F + FE1201CCCDCDFF51EC05165C127BF7EE65D8BB6F1F2336396727A7FFCECECEF8 + 0D70767666707676C61B3BA32E8000CA53A2B9B939464AFCFFFFFF7F464646AC + CE47072C5FBF7E4571C5FFFF105713A99F0100BB2874DF007910460000000049 + 454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000015349444154388DC554BF4B02 + 511CFFBC7AD105A7DC7181209C98E15D434B093905222D0DED426363822D36B7 + DE967F4137C5B934DED8564D72BB0EC1398893A21EDC20BD16512CCFF78E843E + DBFB7C3EEFC3F707EF919DF32A3609BA6D945F371A08A05430524C4D487F0A1A + 8C43B4DA7D4201A060A4904B2BDC4B6FB6052D6B42CB1EB10FDB22570F4FECDD + B688963591334A68B5FBA071AA3838BBC05E52859454717C79BDC40D661E22DD + BC7CC5EC6E2DE8E1E7336AB53B96CFE7E764B57A4B7E723C743A1D341A8F84CA + 411727E95D9C9AFB737115C7831CF890832E7F86BEEF633A9D46EA9452643299 + C59917E8349B180E87244A571485DDD7EBE2813333E3F984031DC7C1783289D4 + 13B28C4AA5221EA8EB3AC2308CD42569F9850905F296122BF0DF97B2256A1405 + 0500D775E179DE92B08A5B875EAF070020C562F1D707CBD8A2434222C7B7BAC2 + D168548E7583836F72766C1F7A583EF70000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000018C494441544889D555B14AC3 + 50143D57DEE098A95D4479A554970C8D901FB08B20F809827E858B22D4FA01CE + F905270787B4532691F41314C121059B0E76D4E360525E435A5FD00ADEE9E4E6 + BE77EF39EF5EAE28FF08AB34A5DCC37300200911812DB689230945F2CC3C5005 + DBC4291191CEEE16F7BC4D4A5602C9A5F8ED35C1749CA0D674391D8FA40C87F1 + B3840F4F58AB2468668FF72106D7A7428065D88C55240930A735E3B80C6BBF23 + B5A64B0144FB1DD69A2E4C9C05020064FDE4E6C3469622B6892349551F45F0DA + 1EDB5E1BC8A9000882A0D45FC00BFF0DE321E33886AA2711F73776707CB03D77 + F0B617A1CC6F6B4112C9CB5DF4D54579E612BA8BFC36120100944D35699A228E + 631010B345CCEF1C7B9E07C7716631CAA673D23445D8EFDBD402AD351CC7991F + 347C2351A3D1C055AF574522FC9D44B609FA8341CEA890036262AD352BBF81D6 + 9A97DD2E8D8B4C2B9D834A6F30994C24936879F9984954BD4DFFB744BF36C9C5 + 6D55E6AFBAD1C4F7FDF7D25B7FC994885CE419CDA56DDA4F96BEB45AAD5512C0 + 27D345ADE379EDFFCC0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000012F494441545885636018E980 + 91D9209481495465402CFFFFE905030B93A80A03B39CE9BF8170C0BF37779958 + 609C8E34BBFFF4B4BC62D621460606060616420A8905CBF3BC19191818182226 + 6DFDC7C0C0C0B022CF9B09179F91818111A68F895A0E2017502D0422276D8545 + 2123317CB803587F7D64F8C78088137A02B69FEF1918E5742D1824B9FEFF3B76 + EC18CE44686565C578ECD8B17F0C68AEA70458595931BEF9C3C5C4C4F1F31DB5 + CC241970FE7C3D4413615575355951D1D6DA8A118D6439A0ADB595DC420BC3E1 + A351301A05A351301A05A35130E00EA04A8B083D4DB4B5B6FE858A33A38963A4 + 81E11102581225130EF1C1970819D5D4D41804050509F68CFEFFFFFF9F919191 + AA0DD7AF5FBF32B1FCF8F183E1EBD7AF7843E2FF7F484852D97E86EFDFBF53D5 + 3CB20000896272E31A7C3E800000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000263494441545885ED974F6B13 + 4118877FD3A4984D49C9AA28D34BD962EA498406EC4D2404C16CBF83977AF573 + 78D39EEDC5A3272F9D08B207052F3924207A8B768D4867F5602A9BB00949773C + 340B49BB7FDA8C9B8DC5E7B2ECCC3BEF3CE19DD9CC00FF9183E0520E643193B4 + 872FE26880F4E29D8748AD976E03C8272D748243977FFA901EBD3C05702F4119 + 3FDE0228798228175745B9B89A9CCE1846BD05A3DE0200A42362A766BF66C0AC + 190080D2E3270200CC9A41A2DA0840C6F3C426D8FDF5033F3F7FF42613E7699B + 89E0D2E5EBB876E39698A66D26826B9B65AC6D96BD57729EB609C1D49103E20E + 61D45BC45B98F3007187480DBB482FDB5F70E5DB2B6C3DB82F2A954AE8A09D9D + 672814D61115274BB55AC5DEEB37F86D77905EEA7E47AEE3A0B03CC0DD9B5743 + 07BE24ED33C5C9D27C3F40AEB30F6177B040E09E2EFC1C400010B858485A240A + E95DFC7C7717A6694A1541D334F1687BDBB74F5A50D775F41C27F03B7616328A + 12D8272DB842A96C8A50A4050F3847CF71A472641425F0874A0B32C6E67B0D8E + 124BADC1302EFE67A6DE68E0B0DD96CA9157551437367CFBA40539E7E09C4BE5 + A0BD5E609FB4E096AECBA608E5E2AFC13DC6E44B4C696025A40529A550327217 + FFBCAA06F6490B06EDBEBFC5DCAFC1B9178CE556E7B771745D172B94E2807330 + C626FEBB63DD247E70CE4F1D207A8EE38E9E304DF364E5667B2FA6C747A78949 + 338A42464F689A267CE27D894530A05C04383EE0061DADFCF8773609630C8D46 + 2334B8D96C82731E1927CBF806F3045F5896F5CEB2ACD0814208D8B60DCE3908 + 89FD36FD150088AAAAC866B3714F3615FD7E3F698568FE00C6C7E7DAD8D14852 + 0000000049454E44AE426082} + end> + end + item + Name = 'folder-open-filled-find' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000024049444154388D8D935F4853 + 7114C7BFE7EEA7D339977F50A70E6688952519680F455A81BDF4B29792F0C522 + EA2D83085FAC854451E4430FBD04624405D9434410122B34EA21240B2D532167 + 7377B2316B6AF76EBBD7ED9E1ED291DA95BEAF5FBE9F73BE070EF5792AD0526D + 7F454487B122665E66469F9632CE9D793E977E1388C34C020088E850F9CD7126 + 220080A1C545ECC1F9B334F5AEA0D753716A3894D0B4F4DA60604147F7501402 + 7F424444BC6A4A561B8A4EDEC1C293AE561A7DD9DA5C65A1F593C722494B6683 + 7F898415856D3D286CEB0100FEDB9BEBDC99014AF54EAB69BFCDE4DE9205EFC1 + 12D0EC856D321195FF676E1E800CA09C998DB170C22500041D1E8F5394969AA6 + 98F95B746EA9637078C127C773B9D85844BD3EB9EBA7E68700201B8AB2172600 + 66CC7CFAE168F24E34EC0B48B68F6CC70E30A605A7AE658BD0B800103454D574 + FAE2B2B8D83D5AD398A482A7F78F6FA5864A3B3E87D5DACE81EF0F67C9CD1200 + 791380FA61DEF1C2AFD8BAAE1E71D37EB7035621A1D1958F5B47AB00C22569A5 + 8219202AAB39296654D739F3D61875657900A85AE2CD2B943973F56C005323A1 + 5F6B8C919002304F0A5537648B09800D56F2B3F42200CFBCBED92666A0A1D28E + 2F91382EFB020CE00ABD6E775B6A8AADFAEA1F64C24034E2DAD3E2CD3E5D3CA9 + 38FAC1B801C003603B806900D7534BD101F15E4EA41329B6AC07C44A76E39E7A + AC794673F40338A147FC436925765BCAB1C1D093D08213587CFB081B9E2453BE + BD07B6DA038F41B8AB05BF0E867B3B6024371EFB37EE2DF281BA75427B000000 + 0049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000033F49444154388D95944D4C5C + 5518869F73E7CE1D2EC38F8596A24C09536A6D8289C4B61AA93FB1555C68AC6D + 240617124D5CE8CAB8D018174D08DBDA446D345A8DC5C44D353404135C588BA5 + C50AADD58442A840CB5040FE19E6CECC9D3BF77C2EAC0DCA20F86E4E4EBEF73C + 79BF7CE71C75F4A9AD34D414BF0C7CA894CA6385446458B434399EEE79A9ED26 + 7D1369D693796B7D317FCF73A1FC3D87646531F54BC776E7E2A9CE8250E0D92F + 0F5774BD7F719ED9A49F13D43FED7275C6C50485421966498450F503FF3059DB + F7A242E170E2C72F3AC256E0A3771ED992504AE5E275BD7761B6EB1610C8E901 + A51445CFBC85595A69A7FBBF7F537C6F95C79B1844D2CBCD40D7CA96D794528A + 705D23E1BAC69CF5D98F9BC88CF4DEDE9B7B2BF210919CE68D4A44A8AF2E209D + D598557758A780DA645F1BEEF0CFFF1BE64D0C0234D59485F4929BDF6202D160 + 454571B0BC1CC83DC17FC9CF2E2CB4BB63B10EDF9798428A03A88741C4D78209 + C4022525B5F6EEDD1B688DB1B8E3BFD03960F676966E299DCA16DE6D8B3B56E3 + 5D6BABCD0C32E25CC004C6B5E36C24D9E2AC1B7CB2A57FD74CD71F25AD59028D + CA24003064565D69B39F78553FF4CA251388E94462FD3E352D9F0D45467F98DA + 7C365A62EF3B72A092FB2B0A647239C307E727EE6B1F983B6384C20F6E34A13F + 9DB64E7E3B5EF6BC1D0CEC3BD9B093F2420B80E8A63C8E3E1D65219D2D3837BA + D46C00E3924C2AD1FABF806323CBF90B8B5EF0C0A3D1E2DBB0BFA594A2E1DECD + A0D86F08120358276536ED1B88100A99B99F95651A009681701311BD0EB0725B + 386D8702BAA7FB7A1C27B3FA7A7D37B400C24F46D2938CC0B476D61E8C88E8A2 + A017B194FFD5ACE339AF9FFE9DA9E50C006E5673BC6782D357E77CA0D99C5CCE + B2A3D41A4FF55DDAEA0E0CE6E2A5FDE83D875BBDFDC349DF3C0178E76FC4AF3C + F6C96FB5771559CC27B338197F1E784D44BACDC984C78E52EBB8BFB454A5E3F1 + 5534C7B0CFB6A622DD5F5B914F7DD441A01EE1B2AFA52EB6E8EE4231039CD19E + 9B98EB3886AAAF0E535396B70A04A0EC42461F3FA2FA833B4F78CA3C8448BDCE + A4FAE6DA8F61D80518211B006FE606A96BBDE8E4D25A3FE15F3237DDC9B6B7DB + 0A816F50BCABDD54EFD4E76FE05EFF75CD337F0235227818CA8A6BF200000000 + 49454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004394944415448899595596C54 + 7514C67F67E6CE74DA69076C5ADA526A1484B6582511AA9808F8003CD848105C + 20314A2492A8488CF19190F8A4892F04259AA82C11310A819858134516D33420 + 95264A1195B5B49466289D7DB97397E343A7D3029D52BF97FBDDFCCFFAFDCF3D + 57B62EAD62D3A2CAFB817611990FA0AA2A2292E76955DD87F24E2CEB98EB0F5D + E75CD864AA30F2CF754073F9F23754C48302020AE0C4C2A5E9AE839BD475674E + 2BF5AEDBBFB63EB3E5C71BFC3E909D3470C6565C050304200050B162B34E64EC + 6B682176E8FD365CE7F0F48077FD576B1B22F7AABC6D5F2F67C32606022282AA + 324E96F11269F0891710A384E881ADCBC5B5874683DC6997E7AAAAA3CA1424BA + 27CA16AEC257378FEC3F1D8A9D1B49C098940AE42E9DD6DCE5AEDBFC8C7CF642 + 45E3ABBB931B758D94D735162D22A12AE6A5D3B727583CABB4F0524CA2897891 + B382DC1B17DEC7C96B698C476B02EF02CB0012477602CAD87514E7234129A453 + 45F2F208B06D4D73A8BDC22F670CE015A00520FEF32745DB9F048AC87954AF01 + A5C07C601BD0039C31807EA3BABA25B47AF53D65B9839B4E2CBE63B8E7C2C77D + 572303113B8017972A2722556EE4699F5A576EA51D0CA0CF4DA5FE6FD537B38E + E7B98E58C3A96FEDD6B273A169ABD2AEAF49D074C84D753C64F71E6FB22E7345 + 7EC100FAD534C1B651C398748AF2DC325DCFF3DF5C9979EACB7F67B5C52DDFA7 + 0AF5A3E7114F882EFF23ED5DFE96D774D93343862A7DE2BAE266327843A142C0 + 6212817C71323CBD73F7C5592B6396EF704B6DD0FBDE927A1EAB2F27613AFC70 + 7E98ED9D036D19CB39225EDF538688F683E0A652850493C17465E781ABB5BE68 + CEB7B3A9BACCFBF54B8D04FD5E5455CB7C5ED9D85ACBDCAA525E3F746181E3EA + 160F483FC014EF213C6CFAFFEE89861E0799F3D6937504FDDEBB8C963C10D2C5 + 0D158AB0DE030CAA6ACE4D26D13C46E598800F0C9B0609CB3B07556DA90916F5 + 79B8260830C7A3681C88BBA9149207508C070D51BCA20944E456C62AEA339CB1 + 40897BF21FE5F5294AF4607569AEA23A90EB54347BF0EC1013EDF748C696A317 + A300C73C195B01FAA62891A7CCE334877C761865EF777F0EB1AB6B10DB1DB30B + 2773BCF9FD2522193B0B7C600C266C6657FAFB9D789C6C77F7C83892FF0DDDCE + 1DA9ABDFDC69CF3B7D2353D20C3CEB82F9E1AFFD25FBFFB8290BEA82244D87DF + FA12A42C270D6C50D51EA3376631BBD21FD65C8E4C7737F94A0A5B2CCF5DD71F + 78BB6B68C6E73BDCD94D919CFF08221E545B5599DF1BC96EE88D641B1152281D + 0ADB412F9AD7CE221FADA8E1C596D0D85A9C0096F83851D2CAEEE09AC601EF8C + A33AD2D472E0BC6B9988E11F6B19706237499C69277A7C0F525B6E505D76F72C + 8F47C9D257492C7A79AE85FF988A784057A29C8B1EDF43F4E82EBC9533F1F84A + 468227877112B7C075013006933683497BD204959900D3F027810BA09B55F92B + 76622F919F3E03C00E5F2DEAFB1FBBEE9993B9BD77E60000000049454E44AE42 + 6082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000040B494441545885E5975B4C5C + 4518C77F73CE2EB0B8E82E17B15081D26BD046695A4D9A96FAE005426A498CA6 + DB4692FAD4A855D260098931A95131A4D687AA691AE5412318487A898926B5D4 + AA556BD2342A8268B1D86581DD52BB67E1ECB29773CEF8C0AD49A140D9E283FF + E43C4C3227FFDF7CF3CD37DFC0FF5D026099DB4EEDC66C1C3601424C3F534A4C + 29F9E24F9D63DD23C90578BF72095B5767BC01D40A21ECD3FBCB04701229771F + EF1E1EA83F758570422687A2695B1EDEBDABA2093D6898A639ED6744238676F2 + 03A3AFB6C4EFDDBBEAF1AFAA0B599595B2606F01D05495CF63CB9D665E63D7AC + 4B8A5D3A4FB0B9569AA14063C2B41ACE0F44F5F944E2B21667FF99A1C9B16DBE + C4A9C5EBC9A9392A4227DEAC139DED751B0BD41992667AFD1A88AAD78FE70D00 + A03A33C9DCF9CEC470CECB1FD8577203AC722B00C994D25495CF83F7A42D9A61 + 91CB4E53551E079FC80540F4ED5D1D47A0CEF25F722531FD7ADCB1E148AF6993 + 48BFDBB3234F713A17C5DBD27582CDCD7E2D6A99309603FD5624B228E600E35E + FD8323065300E1F0E2018C79F507C2FF31C044046CB719C000BE077E06742965 + AE3932B2790C203109E0BB0D00524A9AB5B8EDD5F6C1ACBEDF824EC2A60DB71A + A5E49A8F35AA2FDDAFFB2601921D016949F67CDE9773F8DDCE650F5F8DA51C04 + B6207021F182E784CCF234EA0F7D1911BE066C09D3EA5793082025075A7A971C + 6EEC287E25333DE5ADD7CBF2944757B870A5D9B8ACC596B5755CADF9F842E0D9 + 8C75154F0A5BCA3971F6B922476176FA887BD72EC44CCDC8DC35783194BE72E7 + 770F54663BEF686DF1AC26D779E3957DE692C6EE633DFF1896B55619D48D5169 + 1841198B2DD41CE09396DE25B188A136BC5D5E34AD39C023C52EAAD7E56681D8 + A75CD10D48521E48C9D91F875CF715B9D3966F587AF3CAFAF4DA6C806DCAE018 + 40524E8284C05034A5A0D09D3AEB7616BA5341880265BC2024250202321CAA15 + D2468D59E76AA30648A94D4420390082D23577E9173A03117D70387ED3B9A77A + 34806F94C00440722EA4ED154B87460D4B1EDADFEEC592D3374B013DCEA11F06 + 2C2407262320939103A675D1A15A02F8B6FD2F8DE78FF730303C75BAA4949CF3 + 0EE369E966289CA83742819F8422A0B766E5FD8AA2FCB220779BEDB33F4A2AAB + EBAE6DDD742D666F05AA814DAA22F694DC9D9EE176D8F83B18C3AB457B807A33 + 123AEA6FAA196BCB3F7D2A1F579A3AF3AB68360905FFBD5B78CFB9A34C53EF6C + 03B6C77CDD5F9B7A10C78AF56942B597022E095E2B1EED8A74B4CBE0C92398A1 + 000B2E7D08859C675EC3595A5E06B421F0C4FABA4EFB3F7C092BAA23ECA92869 + 4EC69F2098610DACA953724B6DF9F5CAAC78116769F966A015293D31DFEF93E6 + 003211C34CCC5C65170C60CF290078419A7267E2CAE5D3FE8F5E9E349F8BFE05 + 44BB04831F55BBE30000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000005BF494441545885ED985F7054 + D51DC73FE7DE9BCD2ED9ECB2D96C4C1A4DF8A396883A46DA072D0EC507A5281D + 99C1B15A2B383ED0A9FFB063EDB44319C7515B1FAAB5561D5BADAD4EACB4801D + 19C48958409C5251F10F91082A1AC86637C9C26EB2B97B37BB7BCFAF0FD9A488 + 404292253EF4F37467EEFD9EF9CC3DE7F7BBE71EF83F13430D5F980AEA2AAD31 + 070B1AE2038592481D8D0208941BACBFEE2CBE595D1E042E5460A0D471032202 + 9012910FDF8B3972E7E66E3AFAF2A5155C3AA7924717D7CD04762AA52263098A + C807203FB473BAFD9ED66E36EE1F2889A005601A0AE0DAB2DA73AA23ABD68B32 + CB4E1A72FBBAE9FBE7FD173A6D5BDEAAF018B7FDE1EABAE79A77A778607B2FAE + 9440B088D7A808319A1C80193C83D04DBFC7F3E6F3D3FA5FF9ED9F29E416DC72 + F1F4DBE737F832EB3E4A93CCBAE316FAC747FD5F15540AD409D6DC89504AE1BF + EC263C8DCD245B7EBABC70A473FE9C6AEFFAD50BBCD9531DEB28EE3BAEE044F0 + 345C4064D5060676FC6576BEE3FD7BC43DF5CAD64E9A42EC6305DC77ECBD090B + 0218BE4A0257DC3EEEFCE067BB38FCD48AE38F3DEE514F13D6B573037CBBDE37 + D51E232C3B2F00C017A91CEF7465B11EBEB26E4DF1DE02371925FDDAE3A75DAA + 70243A7CB9E6E145B500FFFE7B5BDF9677BAB25882FCCC0C857C86CF07084EDB + 86D32E0860D5D509B0A6D0DB8BE4F3BF00B6C0509144BDE79F7FB6B7A9694AC4 + 8E25D9D282E4F3D1E1EFBC0144B56D4FAD5511D11AC9380A88C6BE8E823A9301 + 0481CE5EFB68C14C664AC586D1B63DBC5DEA8AA5870585A87C4DDEA0D8360247 + 107186A7D8424DC914E7806DC07F8028608AD68D6E7FFF7CC02F4022E31605A1 + 53723925F9BCA8B2D1773213A4003C91D7EAA1F65445F7BB8703F464CB510A6A + 4C9BA69EFD34944D0B75275223010B240A0A6DDB98D3A79752EE881696EDEA0D + BEF1587BA3B12755B9448B5A04CC46E122EC33E4EC97FDC1EBB60506F760067E + 8DDBDF8B3A78D73926CAC804AE5A6C96D5D7974ACE76350B5B0E7C63F763ED8D + F31CD77CB6DC32E67EA731C0ECB01757437B6F865D87D2B85ADE1458E1A60F7F + 1E7FEA27587D83AE1BF4AAB8B6ED92D989F0F357A3D5BB7FB777C6829C36365D + DD54E55BBDB081EA8A2F2FA98E6496D5AD1DF3771EECDF695586BF1BB9F1C18F + 8D623997B2D5EC4B0C96FDF191BD33C2396DACFD51738DEF91AB667D450EA031 + E4E5D965E772F9ECE911605D79ED2C8F111F70013A4B58C9CF6C3A14D171C77B + F7AC2A6FE4970BCF3AE9EEDD32150F7D6F2641AFD5046AB951ECD8A56C355BB6 + C6C300D7DFD85C439939FA1634E4B3583A7728631CEACF9754500B9F1C484F0B + 2BA51AE6D5FBC79C2B3E7B91114F97F40D0A901D74550580DF638E39E8F798A0 + 94DF287E52A2E2384AF4F87F174F805210AE2C737B8142573A37E660573A0722 + 3123365040842880B69DC91644299AE704071C1179FBF54F53A3078A149FDD5E + 2C12898288CE94649AAF59549F40C1936B3F4C7030951D35F076679A6D07FA40 + 78D248663583AE6445385C8A7528224B2FA94999A6D22D4EDEDDB1F2A54FE93E + C954EF4F38DCF1F2676891A705D96901C4D20566863CD1423C1E36BCDEC9B353 + CA3642553FD8D17D86EB8A9A075CF049C2492C796E6FF5AD97D4F1FDA62A42BE + A1861D4BE758B727C19F76C5C9E4DD0DC06D99BDDB874EB75E5C56CFA50D151B + 95528B27CF0E5B05824BB69EB964FB6F9297CFCB14CC566023C28F51AC025629 + A56AC2D32CD122241D5789C817C08308CF3807DE95EEBFDE3D24F8E8A25A9616 + FF472770AEF2250A186CF65EC6E3FE1B2ECE18DE5660137073B6A34D5BE13331 + 2B8296427D0B9805B8C03E113ED09994F4ED7891BE379E07ED323936C760FAAB + A85DF9049E9A19CDC06BC02BC00A7BCF56DDF3C26A304CBC0D73B142758C1CF2 + 0AE49331060FB541E17F6B74D20547E42223729B81E576DBBF74CF0BBF8253EC + B59372787434A12B56E289CCB80868457855901599B6ADBAE76FA72E5712414C + 0BA049B46C467373F6F3F7DC9EB5F78E4B0EE0BF588D9C7F5E52592E00000000 + 49454E44AE426082} + end> + end + item + Name = 'gear-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000031949444154388D75935D685B + 7518C67FFF93D694E4E4E39C242623927436B1F1A259A917718EC6E985176EAB + 82F88128A20E2FD4C9D44D5164CA18DEC8A86E56D01B05BF76294D7BB195E9E8 + A863A8B0B6E07A13694B62129A9C9AA4A761C9C9F97B91297E6CCFF5F33EEFF3 + 3CBCAFE03A5C2E17F1781C5555C784101352CA932B2B2BCD76BBCDC8C8884B51 + 94A3C0B956AB75696D6D8D46A3018003C0E170904EA75D0303039FF87CDEA958 + 2CB6D7303683A150E85A241219025E4E2613476C5B3EDBED76938140E0BC6118 + D72CCBA20F4051148410F70783C1E78EBC7618CBEA727A6AEAA0DFE73B08F047 + BDCE334F3FC52D4EA798FCF0D493E5727956519433404FC0B66DA49473D56AB5 + 5028146F4B248678EBCD37F82FF2F9DFA8542A2529E5B49412000540D7758410 + 77793C9E1D9AAEFD6FF02FF8353FAAAADE0A8C6A5A8FE7482693040201FAFAFA + BE7EE2F1C7E243B7EFC4B22CBE9BCEF1E557DF70FEFB1FA8371A24130954B71B + BFDFAF2C2D2D0FBB5CAECF555545D134EDB2D3E9B43D1ECF9ED15D6900A66766 + 999FBF98334D336A9A66747EFE626E7A661680D15D693C1ECF9EFEFE7E5BD3B4 + CB2293C9D893273F90FFB4FAF63BC7D8DEDE8EAEAEAE96DBED36C96432E276BB + 8BEF9F38FEAF48AFBE7EB4D7C18D20A5949D4E07CBB200E4CD788E6834FAE0D9 + 7373D1851F2FB1F7DE2C4208EA8D06EBEBEB77E8BA7E21140AA942884F77EFBE + 7BF8CE540ADBB639F6DE717233B3424AF9B3629A66A6D3E928CD6673E1CAE222 + 0013FBF791CD8E1F70BBDD45B7DB55CC8E8F1F98D8BF0F802B8B4B349BCD05CB + B214D3343302201C0E138BC5EEF17ABD170EBF72C81108E837B46B1806931F9D + EE361A8DFB4AA5D242A150E87550AD569152FED46C368B35A376B3B818C6265B + 5B5B65E0975AADC7FBFB9415457920140CC6760E0E629A26A73E9EC2E7F30150 + AFD739F4D28B0C0EC6D91189447F2F951E16429C0110D07BA6B1B131AF10E233 + 5DD71F8D84C3FC7AF5EA17C0B7D7973F924A0DBF50AB196C6C6CE480E7979797 + 6BAD56AB2700A0691AB1580CA7D399051E024EE4F3F9CD76BB4D2A95F20821DE + 05CE5A9635572C16A9542A00FC092CBA39E6E18248F00000000049454E44AE42 + 6082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000046A49444154388D7D945D6C93 + 6514C77FE7EDDB76DD5B5A58D7C1BA31C980B650A88A40F918C40408608C0A28 + 1F3726245C2831313178A3227E5C69FCB89160247EC40B9D98087A634234C10D + B2CE0D956EDDBA89CBB63236E8CA36C6E8BAF57D1F2F26CD50F07FF1E4799E93 + E7774ECE39CF1166C9300C6A6A6A70BBDD2E11D9AF946A2D140A6D894402D334 + 59BE7C396EB73B0C6C524AD5E7F3F9F1743ACDC8C848912177363E9F8FDADA5A + 44642FF08EC3E1A8999A9ACA2AA542B95C6EC4B22C0CC39823221D4EA73390CF + E787805794525F0E0D0DA9743A0D807607E8F17810916376BBFDEB6D5BB7D4BC + F1FA6B54F8FD3E11B9505A5A9A72BBDD291189FB7CBEC0B1A3AFF2D8CE1D0B9C + 4EE76722F2BE6118C50875EED6DC8A0A3F3B776C47D334F6ECD9452AD515F2FB + FD00643219C2E110A5A5A56CDBBA858ECE4E7A7BFBBCB3014560A1504029F5EE + C0C0D5C32D2DAD7A2CB6965030482818E45E6A69BD486F6F9FA9947AD334CDE2 + BD062022F87C3E44649FD3E9D40381C03D21B35559B900A7D3691391DD1E8F07 + BBDD0E80ADBCBC1C9FCF87D7EB2D1791334FEFD9ED88449603609A264DF13867 + CFFEC46FBFFF416E3247552080A669783D1EDC6E37C964479D889CD475FDB6AE + EBD856AC58B171CE9C390745E490CF57163DB07F1F2282699A7C72F2531A1ACF + DFB89EC97C7E3D9369E9E8E85CDCD7D7EF5AF5F043689A46552040EBC58B8E5C + 6E72A96118E179F3E6156C55555589AAAAAAEDF3E75784636BD7B268D1030034 + C59B69683C7F0378C434CD7ACBB27ED434ED9B6C36FBACD7EB75D52C5C888820 + 224C17A6C32E57E9A3E3E3E37B7411F1EE7AF209B564C9E2BB72D4994A01D45B + 96D59F4C26314D934824D2EF7038EA3B53A9C31B37AC0760F3A63A366FAAE3F2 + E5BF387EE2638FC6FDA46656CBB2304D13D334B12C6BC6A2EE5F2C5D293576FA + FB1F3C2E5709D1952BD9BCA90E8065CB42B4279307745D7F2F1289F49BA64949 + 49490D7060D9B25011D0D8789E4B6D6DE4729328A56EEAC0E30303035B800747 + 46469EAADBB8014DD358178B9148B4977575775F74381CF5FFBCDF1F0A06CBD6 + C562005896C5B98646B2D9EC19E012F0B30402015C2E17656565E522D2B36FEF + 33C6FA75B162DBC49B9BE9ECEC2A46BD2E16C366B301108F37537FEADBDB40ED + E8E868E6D6AD5B33C3C166B3118D46D175FDC59292920F5E38FC3C0B1756DF3F + 5140FACA153E3A7E82C9C9C9234AA90FDBDADAC8E7F3333FC5344D86878701BE + 9A9A9A9ABE3230F0BF3080AB57AF92CFE70BC0A9B1B131F2F9FC4C518AD5D175 + 44E4C8FCF915F6D8DA35007477FF49672A85DF5F0E4026334C381C22140CB266 + F56A2E5C68D2FBD3E9A3369BEDB922E75F8ED5E8E818E77E69A06EE306BE3B7D + 86A16BD7BA67DBDBDB93A1978FBC44F3AF2D646FDC805933F5AE43656525D5D5 + D59A881C02DE360CA37C6262E2A6526A69A1501806B0DBED5EA0CB300CFFC4C4 + C418F09652EA78369B9DEEE9E9E13F74BFDF4F757535BAAECF15918340936559 + F14422C1F4F434D16814A7D3B90AD8027C61595666707090C1C1C13B4DCFDFA0 + 2BC448D76C28620000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000005B44944415448896D955D6C1C + E515869F7766FFEC5D7B371BDBB1BDC1BBFE5312474A2B814DA426517E8088A0 + F6BA25015A22AAF6A68214D19B5EA256AD20515AB5AAD48A9692805A21A12A04 + 0A2D2D82368D2322950AC78E7F62C77670B0975DDB321B3BE399D30BEF6E9C90 + 4FFA46E7D3CCBCE73BEF79CF39E28E954824686B6B231E8F037C45D206337B7F + 616181E1E1610032990CADADAD48FA9A9979C005CFF3989C9CA45028DC86E7AE + 3F64B35972B91C914864B3A45F49FA05F06DE07A341ABD180A85482412343737 + 23E99B92CE483A2AE9AB8EE35C4CA7D385643249B158C4CC6E77108D46E9E8E8 + 40D2F724BD118944EE7DE0C07EB98E43A150DC094CD5D5D5EDABAFAFEF939493 + F4622E97ADDBBD6B972627A7B6FABEFF94243F1289FC7B696989E5E56500B4DE + C18E1D3BA292F2D96C5BED138F3D463ABD814F3F9DE185E32764669899491280 + 248E3DFD03DBBC79338B8B8BBC72FA554646467D60D3E5CB978B0B0B0B00842A + 0ECAFFAD001F158BF37B6A6B6B00686969B6A78E3E492211279D4E0358A15060 + E98B2FC864320628168BF1F9E70580FF99D9C25D736066156E275656569E701C + 87AEAE4E03686868A0BEBE9E70384C381CA6BEBE9E8686862AC8DFFEFE9E3EF9 + 640033FB0E30363B3BCBCD9B3701702A1F35353555A2F8BEEBBAB4E772ACA343 + 77DAEBCFB96C16D775917414A0B1B1F156048EE3E0380E1D1D1D8442A143929E + 7FE4D0C3F4F5F5AE8F5457AF4EF2DF8F3FD6C4C45584482693156AD5D8D84028 + 14626464743BF0514D4DCD483E9FC7CC506FEF2D2049EF373634ECFED173CF9A + EBAEB1B7BCBCAC53A75FE5D2E050557A92E8D9B69523871F25168B1980EFFBFC + ECE72F682E9FFFD0CCF656301D492724DD94E44BDAB3F3FEBE4AB80274EAF46B + 0C5C1A5C31B36366D650DEC7062E0DAE9C3AFD5A9535D775D9B9B30F497BCA58 + 37259D703399CC99AEAE4EB7AFB797AECE4EFA7AEF23168B214957272779F3EC + 5B00CF01274BA5D2F28D1B3796A3D168BFA4A57C3E7F70EBD62DA4522900D2E9 + B462B1185D5D9D209C42A1786F0870BB3A3B39F8D083B69E7433B3F1F1099569 + F963A954627070902008E8EEEE26954ABD021C9F189F20DBD66600C964D20E3E + F4E01AC0BB6874742CE454D47037B5AC97F0EAEA2A411000E0791E80551E7753 + 5B6585CC6C75746CCCE5DDB5AADE797F5F552165A9023C5E575777B2BBBB1BCF + F3686C6C44D2E39268CFE5AA60F3F3F39CEFBF00A0D1B13180553793C9A48BC5 + F9FB4647C79CB12B57944824E8686F479292C924535353CCCDE5F74A5A8AC562 + 23F178BC46D277819F6EEFE909EDDFB7B77209CEFDE7BCDEFEEB3B1A1D1DA350 + 28FAC0AF1D337B2608828899B966F6417FFF057CDFC7D6C8B723871F657BCFB6 + A8A4E392E6CAFBF8F69E6DD12387BF554997F9BECFF9FE0B98D98765AC88993D + A3DADA5A24B165CB964AA19D79E4D0C33C70607F35D995421B9F98A85297CDB6 + 01549BDF7BFFF8276F9E7D8B2008BE019C1D1E1EC6F33C5CCFF3F03C8F72AF1F + 31B36D57AE8C6FBFE79ECDD59297A4542A452E9BB5F6F69C52A9549516491A1C + 1AE24F7F7E9D20085E077E522C16999999C1F3BC5BBD686666A6A2925FFABECF + 95F189CAEDD738B8C35E7F1E1F9FA8D0FA1B33E3FAF5EBD5C4571DB8AE8BE338 + 48FA712211E7C05AF2043034745953D3D32A954A2A954A9A9E9ED6D0D0E5AA34 + 0FECDF472A9544D2F392140A55A7C0AD79505E31604F5353137E59F39FCDCEEA + 772FFD5E41107C69E0FCF0D8D3645A5B31335A5B5A999F5FE893B411C8572F5E + 31C2E1309B366D5A9564C5E2FCAEF3FD17DC7038C4B973E7F96C76B668664725 + 7D00BC0DBC6C66BB676767E34160BCF4879799BE76CD074E9AD95F0A85C29747 + 26404F4F0FF1781C49DB80178183E557CF9AD989C5C5457CDF67C3860D487A12 + F8AD24CCEC5FC03133BBE8791E030303956ABFDD81249A9B9B696969A974D4BD + 401A78A3542AD9C0C00066466767271B376E04F83AE001EF0441607373735CBB + 768DD5D5D52AE6FF0137DD94530E5F99310000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000073A494441545885C5575B701B + 6715FEF6A295D696B49225D9B26C39561DBBF1258D2FB2C1EEA4F421A53050DC + F0C04C61860969CBA5645A12D20019A60C2D1468A0C99449286D6798B4E9B4C0 + 4C703A3CD1195A481327E04BEDD0C851E5C4B612DD6D2B5ADD56BBAB9F875A2A + B257713B3CF49BD183F69CFF7CDF7FF6FFCF390B7CC2A03673E0380ECDCDCDE0 + 799E2784E443A1104926939ABE3CCFC3E3F180A2A85A599633376EDC402693B9 + 657CA69A81A669B85C2EB4B5B5D5188DC6C30683614CA7D3F59A4CA63FC76231 + 104236AC696F6F87C9643A6130185ED7EBF5750E87E3A25EAFCFA7D369148BC5 + 8F2E80E779747777C362B13CC030CCD8407FDF7D7BF7ECD1F97C735D92249D25 + 842C88A258B1C666B3A1A1A161D02208BF7BFCFBFB1955553F7D23147AB0A6A6 + 265D5F5F3F9DCBE5483E9FDFC0A5F90A1C0E073C1ECF2FDCCDCD87BEBCFB7E78 + 3CAD0080999959FCE1E4CBEF168BC53B298A6AA328AA0100082131424880A6E9 + B7BEF6D5078606BD03008050288CD37F1943607EFE642C16DBBBB0B0B0818BD5 + CCCB07C83A9DCE323900DC71C776DCE6F1F42E2E2DDD7438ECACD9640600A4C4 + 14E2F184D2E276B3DE81FEB2BFCBD588A6261702F3F395E9DA2C030683013D3D + 3D468661AE1CD8FF98D3DDDC5CB689A2088EE3A0D7EB2BD648928442A10093C9 + 547E16894470E43747571545B93D10082CAFAEAE6EE0A2B504E4F37924128934 + 21E4276FBCF1D78A03673299369003805EAFAF202784E0F4D819A8AAFA84288A + 9AE4550594B200C09C12539065B99A5B55140A05DCBC791300F42CCB82A6B5A9 + 346F81D3E984C3E1B85B1084971FDDF708555B5BFBB105B02C8BED3DDD989A7E + 7757B158FC2745518BA9546A83DF8633C0300C76ECD8A16359F63FDF7AF8A1AD + 9D9DDB2AECB22CE3FCF8382626A7118944CA82BD037D18191E864EA7ABF0BFEC + 9BC30B2FBE1428168B3DB3B3B372A150A8E45B2FC06EB7C366B37D7DDBB6DBBF + F1F9CFDD5B614B2693387EE279FC7B62F24C2A95FAB6A228FB54557D5A14C5BF + CDCD5DB1BEF7DEE56DDDDD5DA5D707007038EC585858AC5B5E59B9AA28CACCFA + FAC158AD56B8DDEE1231EAEAEAC0B2ECB1DDF78F6EA977382A767EFCC4F30885 + C33F5455F5B16030B8343F3FAF8442214592A425A3D1F8C76C369BF3FBDFDF35 + 34340886F9706F3CCF636A7ADACAF3FC49B3D95CE6A1691AACDD6E87D56A7D87 + A2A891D2029D4E473A3A3A2A949E1FBF8050387C4655D5233E9F0FD96CB66C4B + 24121045119D9D9D4742E1F0F0F9F10BA39FB96B67D9DED1D10E8EE3EEA228AA + C8711C008010728EE3B89D2C00501435F2ECAF9F211455BD374D4E4E01C0D160 + 3058415E822449585C5CC4D6AD5B8F4E4E4E5508D0E97478E6974F03005923C7 + 8183874600802E91DE8A1C00C291088AC5E2442291A8EAB3BABA0A599627C26B + 87B31AFE97B36A1DD0022144B30BFE3F280BD82CB0D3E904C3305E9BCD56D5C7 + 6C3683E338AFD3E9BC65AC12172104ECDAAECE1D3878E8CE9203C7E9C8CF9F7A + 122CFB61AFF2F6F721180CEE77BBDD67455184244915415996456B6B2B00ECF7 + F6F755D81445C1E11F3F015996CBEF9910720E00E86432894C26B3339D4ED399 + 4C862E140AB42415CE5EF1FB2B828C8C0CC3D5D838AAD3E90E767676C26AB596 + 6D8220A0ABAB0B0683E1A0ABB171746464B862ED15BF1F8542E1AC2CCB742693 + A1D7B876AEACAC80C966B388C7E388C7E3284D3A168B05D96C76D43B30500EC2 + 300CBABBBBE0F7BF7F4F3697EBB5D96CA1FAFAFAB8D3E9D43534340CB32C7BCC + D5D8B8EF9B0F3F88F5A5FBF4E9312496977F1A8D4667028140992F9D4E6B97E2 + DEDE5E1DC330D54BF1F9714C4CAD2BC5FD7D1819D9588A7DBE39FCFEC5970284 + 909E4B972EC9EBA722CDBBD7D4D40497CB75B720086F1EF8DEA3B4C562D172DB + 14C96412CF1E7BAE984AA5EE89C5626F6B4D449ADD309D4EC362B12C1042D2BE + B9B9CF0E0D7A2B0EE447812449F8EDF113585959795C92A4D7038180E64DD3AC + 038410AC8DDE89DA9A5A94CAE7C701C771301A8D2084A4445184AAAA9A7E9A02 + 589685D3E9D45314F5E47D5FFC424595144511F975571000F29204319D2EFFA7 + 280ABB47BF0486617E66B3D94CD5660ACDBC5A2C16300CF3C8F69EEE168FA7B5 + FC9C108293AF9CC2B56B0B8AC36E67CDE6B5A13495423C91505AB76C61F77DF7 + 3B65C1CDCDCD181AF4D65FB8F8AF1FD9EDF6C35A1F299A02D602B4E5F312E2F1 + 381C6B6DD9E79B4320307F19C050241ABD2D128D96C6F22880F9F9AB57DF9999 + 99EDEBEDDD01E0834398CDE600A0BD5AAFD13C840CC3C066B3BDB9B2BA9A1ABF + 70F153B95C4EDFE276E3D4ABAF414CA71F8A46A397FD7E7F3C12895C5BFBC565 + 59560441985B0A5EDF33E81DC0DFDF7A1BAF9C7A35170A857F450839B8BCBC2C + 6B65A06A0B34180C686969812008F514453DA5E7B8BD52A1F00F555577CDCCCC + 4051940D59EBE9E901CFF3AFE9F5FAAF4892F427003FC864324B4B4B4B583F09 + 6D2AA0044110E076BBC1F37C1380443018942255DAAD2008686F6F67699A6E92 + 6579F1FAF5EB88C7E39B517CB2F82FAF1B433DDE5441680000000049454E44AE + 426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000009F7494441545885CD585B7053 + D7155DE75EE95EC99690AEF5B085656C908C01430CB181346D200F6212DB8424 + E4316D42D24E3B69A6D34E2785642669F3D34C93E9076DA76D66924C129A904C + A76DF211C0181CA02109C676CC40FC008C254BD8605DBDD0C3926C3DEE3DFDB0 + 4D2C5B92A1E4236B461FD259FB9CA5F3D87B9D037CC7416E84CCF33C0C06C3B5 + EFC16010C964B2600CC330282D2D05C330A094627C7C1CE3E3E3DFAE40966561 + B1585056560686617E006007A5F4CD442271616060A0606C555515CC66B315C0 + 2E00C7011C080683B87CF9F2827FEEBA041A8D4658AD562895CA4A42C81F0921 + 8F1A8D46F8FDFE7E4AE93AB7DB2DFBFDFE9CB1454545A8ADAD0521E4A8D168BC + 2B1C0E2393C91C03F01B4992FA455184288A902429EFF86C2171353535282B2B + 2B5628142F13423E5C5A5555F7931F3F8D3B37DF81539D5D6649922E1717179F + F1F97CA094CE8BB7DBEDE0386E8752A97CE1D7BFFA25BE7FFB6DB87AF5EA32BF + 3FF00CC330A55AADB6CB68344E048341C8B29C5343C1195CBF7EBD9210D22BE8 + F5CB5B5A9A71EBBAB520642AE4D3A3C7D07AA84D04B05C92A438C3304A42881E + 0028A5615996D30CC3A80921E7B6DC73F79296E6A66BFD9EBF30884F3ED90FD1 + EBF501A83D7FFEFCD57CFB92292410000FA0B2A5B909F5B7AEBB260E00366FDA + 0441D09701F82FCBB24E86612608215E42889761980996659D8490CF743ADD92 + 7BB7DC93D5E9CA1535D8F1F043006002A02B244051A85192A418CBB27F6D3B72 + E4F9BABA5BA0507C43E73825B66FDB868173E7EA972E5D8A52B319C5C5451400 + E2F104F1FA7C552E97BBAAB67625789ECFEA5796657CB2FF0000BC0FC095C964 + F26A28B8C4168B0556AB554708197A70FB03863B376F2A44BF6E9CEC3885FF7C + F47114C08A5028E41D1A1ACACB2DB8C4A228229D4E4700FCBEFDD3A388271237 + 2D2E9148E050DB610078459224EFC8C848417E41816AB57A26C1F2C964123EAF + EFA6058AA217939393000042C8BCE59F8B8269A6BABA1A3CCFDFCF30CCBB3B9F + FC1159B972C54D0B140401269309BD7D7DF71242BAB55AAD231008E44C530505 + 969696C26432098490F62DF7DCADD9BCE98EBC83C662310C9C3B8F8181731876 + B9108946A1D568C0715C4EBEC552867426435C2ED7169665DF25844C46A3D19C + DCBCA7D862B18010F23BB3D96CBE6F6B634ECE782C8683AD87D0D3731A922485 + 010C4E37D5B02CAB6F68A8474B7313B41ACDBCD8FBB736A2AFAFAFD4E7F3FFD6 + 6C36EF1E1B1BCB595172EE41BD5E0FA552290078E6FEFB1AB3D2CB0C3C1E117B + F6FC195D5DDDBD9224350330499274BB2449B7534A4D922435777575F7EED9F3 + 67783CE2FC99512870DFD6AD00F073866184D926643658954A05ABD50A411050 + 5252024110603018C071DCD3BA458B1E7CECD147C030D9FF633C16C3DFFEFE3A + C291C847009A92C9E4A0DBEDA62E970B63636388C7E354AD563B388EDB3B994C + AE18181858D5D0503F6FC9CD66133ABBBA95A954CAAD52A94E171717431004E8 + F57A088280743A0D45595919CC66F366002F015012426636ECF2D56B568365E7 + 6FD383AD87108E447A29A53BA3D1686A686828AB96462211442211D86CB65449 + 49C9CE7024B2FC40EBA15B7EF8F863D9B3C3B258B3BA16273B4EBDAC52A91E57 + ABD53363A701FC81E3B8CF15D3E5EB45BBDDB6C56EB36575B07A75ED3C71B158 + 1C3D3DA701E0C5542A354FDC6C389D4EF03C9FD268342FF6F49C6EDDD6DC0C8D + A6388BF3BDDB6E8356ABB500B0CCFCE6703AE170382921E49A40CE6EB321DF61 + 980D87C3014992C294D2F6D1D1D1BCE26670E9D225AC5AB5AA5D92A4B0C3E1D0 + AF5D5B97D56EB596C36A2DCFFAEDF09176381C4E25307D48669B808510080601 + 6050966539140A2DC88FC7E34826933280C1E9D8EB022104849005DD4C5E504A + F326D7B95868960B819919EC7A319D0E96B32CCBE874059D1280A972A956AB19 + 00CBF3A5925C989900C5B4B894C3E9C4E123ED59A435AB6B515E9EBD3FAAED36 + B02C2B4892D468B55A0F472291820359AD5610421A599615AAEDB679ED97AF5C + 417F7FF6BDC6E174025327F95A2579CDE1701287C3393BCDD4C462B1B247763C + 9C15ACD168D0505F8FAEEEEE578B8A8A8E2F5BB62C353C3C9C535C454505F47A + 3D07E0D586FA7A68725494CECE2E7C79B2C303E0E2ACB1D3005E030085CFE703 + C77127082127660E0BC771E079FED9BEBEFED71F7AE841B07312754B4B130607 + 07EBC291C83E83C1B093E7F9D4C8C808E2F13880A965B55AADD0EBF51C21649F + 5EA7AB6B6969C25C489284DEBE7E0078259D4EBF39E37266B69CC7E3C96D584B + 4A4A60B3D90442C8C8D34F3D59B46EEDDA791C8FC78337DE7A1B9148E46B002F + 514ADB93C9A44C29854AA56208218D005ED5E97475CF3EF333582C96797D9C39 + 7316EFEDFB200160C9E8E868C8E3F1CCE3E43CC5A15008994C2604E0ADB6C3ED + C865C92D160B76EF7A0E1B376CA86359B69510E257A9541D6AB5BA8310E26759 + B675E3860D75BB773D97535C269341DBD49E7F93521A0A0402B9A4E4B7FC8B17 + 2F467979B9307D2B33CFBE95CD452C16C390C389E0749E33180CA8B6DB72EEB9 + 191C6C3D84A3C78EFB28A5AB028140C8E572DD98408661505B5B0B954AD5C430 + CCFEA79E7C82AC5B377FA9FF1F9C397316EF7FF0219565795B269369EBEFEF47 + 3A9DCEC9CD6B5829A598989880C160182284C4FA07061AABED7608827053E29C + C3C37867EF3F20CBF20B00F6B9DD6EC462B1BCFC8295647C7C1C131313001051 + 2A95309B4D37250E004ACD66701C074AE964269341381C2EC82F782731180C30 + 9BCD6A42C8C78DF76ED17E1B77128EE3A050B0181CBCB8916198B70BD9FD0505 + 56575743A9543EAF5BB468FBCE9D4F4031C71BF6F6F6E1E8B1E388C5E248A692 + 48A55288C56210BD5E5C18BC88CFBFF802C0D4FD6636AC562BCE9EFDBA289148 + F0C5C5C547028140DE07A4822F0B3CCF17017861EBD646F073DC702693C1FE03 + 07110806CF7ED5735A4F08A9C437B55D067009C055A773F8D615352BC071CA6F + 065528F0C0032D78FB9DBDBF6018E64F3CCF5F4EA55239352CE4662880646767 + 175C2E775643C7A94E04A6F2CADD94529B2CCB6A4A69E9F4474D29B5514AEFBA + 1A0A793E3B71222BD6238AF8E2CB9300900150D0EA145C6293C994512814FF8C + 44A3E6EEAFBE5AE3F3FBC9928A252004D8FBDEFB48A5522F4B9274A2AFAF0FA2 + 28CAA2282644514C78BD5ED9E3F1A0A4A424A550288223A3A3DBD7AF6F802449 + 3870B015FFFAF747F0FB036D987A08757B3C9E9CC50058E06D46A954A2A2A202 + 46A311003602F80BC7711BACD6720C0FBB2E514A578E8D8D25AF5CB992335E10 + 04D8ED764208E9AA5CB2A43E1008209E485C00B08B527A38168B61760DBFE119 + 946519A15008E170186AB5FA0AC771EF4A92E40C87C30CA574772693713B9DCE + BC7E727272125AAD162A95AA2312892C4EA7D36F00F8692A95BAE876BB313A3A + 9A3741CFE0861ED10D06038C4623666C91288A58C80FF23C8FCACACA6B57D768 + 340A8FC7734326F93B8DFF0118EB5A76FF0231300000000049454E44AE426082} + end> + end + item + Name = 'key-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000026B49444154388D85924D6B13 + 5114869F3B993499D884C41851FCA8A535015B5392625B15ECAADD88E01F70A1 + B41B5DBA50D16CF53F28B872AB221A84D6B6A80B2182A048AB18D3D446C5A6C6 + 664C269D4966AE8BD0F811B5EFEAF05ECEC339EF3D82BF4811903AB68D33C9D0 + 4E21C445E08480DD1256816924D79E158C3713F73E21FE06B87034CCB9A1F0B0 + 70290FBC070F6EF5C4622881008E6160E572D45EBC30A5659D7AFEB176BB0DB0 + 27A0F2E474774875BBE63BC7C7B777ECDD0B8053AD62BE7B872B1844F1FBD1EF + DF371DD31A54FE048CF774E27289B39E68B4D52CA5444FA7313299EBDFA7A6B2 + 8EAEA325931E21B8D406E8DDDA0130D6D1D3F3D3B46D9CB26E49292F02E946A9 + 84A7F93EA6B605D05C2A2C7CBE9F96AAE21D8877ACBF7CF951F1FB354F348AD0 + 340484DB009D6E015070CAE50384422DDF373484964868B85C0845C15E5B4342 + E137C04432C889987F07B04F9A66FB706E77AB5E5F5800B8DBFA85C964902BA3 + 919D428819DFA143312D9168036CC8CC66A9CCCD7D96D249A80093834152C7B6 + EF4230E31B1EDEAF0D0C206D9B46B18895CBA14622288100D23030B359AC7C7E + 11294F3E7A5F2DAA93832152A3913DC08C6F64A4478BC701A8CCCE622DE60179 + 1B90C06E9A9738259137EFCCEBB50BD32BA8A9D1481742CC6C397CB8DBDBDF8F + ACD769ACAC502F14B01DA7EB4BB55E789CAFE14809C06AD5E661B6C27CB19991 + 0A4C6F3972A4DBDBD70780ADEBE8E97405C8AC1AF6B7911BF97F6601A00A217A + BD7D7D12C0C864B04B2580F7CBBA35967E5BF96FF3C6042DD5973FD0F85ABA2C + E1D542D1E4EAD3D54D0162F97CCCF9D59052C68FDF5A7AAD9B364BE5C6A6801F + 3718F77B434B69E80000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000032749444154388D95D45F68DB + 5514C0F1EFF9FD7EF9DB26FD65ABB60DD3960EB3EDC50A45AC7563B029687F7B + F041742FBE087B13F62008820A3E08A22FA2F35141D117451119D31642BBBD98 + D99788A06EDA64B696266B97D924ED6F496E727C484D0DEDAA3D6FF7DCCBE7DE + 73EFE10A7B447FD4E6DD27073831DC1312911780B3C098404461099851E5BD5A + B3F5EB1BB3AB7CF6D33A72372C1A10BE3E7B3F47FA834745E42B2B1239124AA5 + 70060610C7A1592E535F58A0B1B262805781775E4BDFBC3BF8E6A97B787ECCBD + 0F91ABC19191819E9327B142A11DEB6A0B0B6C5CBE8C1AF38A69EADBBB8289B0 + C5D573A38403D63781C1412F76E60C625900A82AFEFC3CF55C0EDB75891E3F8E + 2916A9A6D3469587ACDDC0470F450907ACA322E24527273B1840FDFA75FC6CB6 + DC2C97CFD71717BFDFB87285D0E1C30492494784F3BB82A9FE20C069ABAF0FA7 + BFBF6BCEDCBE0DF003AA17808F9AED31C1D15180277605B762D88EC7772483C3 + C388C869442E026F05474600B0E371040E397B809BDA68EC4806868688799ED4 + F3F9A76CD72574EC18006A0C0AFE0ED01618BB3708CA8F666D0D350671BA9705 + 924902C96457CE140A00D9AE926D81F7A7063935DADBA3F0A21589A0C6EC5144 + 3B5ABE4FEDDA35503EED6C6D0B5C981A642A15EB15918B765FDF8998E76185C3 + 7B62DA68504DA769D56A59453F763A983784F7406F0C914BB6EB4EC63D0FABA7 + 07556D97542C6227129DE656551ACBCBF8990CA654CA014F2F951B0DE960A958 + 1CF8D676DD897F63FEFC3CA6586CDF9108B6EB82E3D0AA54D03B779AAAFA89C2 + CBAB1BA6F4DCE74B385B980B7C6727120FC73D0F2B1A05A09ECBE167B335E017 + E0035473A6547A1008034B28B30885E9DFCABC3EBB46A16A70BC542C014C3B07 + 0E8CC73C0F2B126963F93C8DE56580DF4D4BC7572A0DE6F21BAC6E36E7000428 + F94DE66E6CF2C7FA767B39C025E7E0C1F1D8D4540703A8A6D342ABB50EFCB552 + 313CF6E18DFF7C6D0047441E894E4CA81589B42F7A7171BB1DD06750D2A0FF0B + FBE784205B9F4EAB45756646547513682A9897A60B7CF973657F60F3D6AD0EB8 + 158FAB6A46603F87DB06373399AE7F51109EFD6289CC9FFEFE34E06FDB1245A7 + 21717E5D0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004524944415448899D94CB6F54 + 551CC73FDF7B67E6CE4CA5B4764029541E015A0B561228E1D1102071014416F2 + 0A0B61615CA8D1BD8685FF8031625C180C51835845564A88F25214038DD48684 + 878447FAB685A6CCD0CE74E6CEBD3F17A5A50507C1DFEA9CFCCEFD7ECFE77BCF + 39E231EA85E9313ED93483D9153124AD077603AB811A816F700D386666FB84AE + 5EE8CBF1D691BF694FFBE8BFC497CD887360CB4C1251E759499F496C503C41B4 + BA1AA7BC1C8280607010BFB7178A45DFE023833DBD19DFDF71A8EBD106157187 + 13BB66932A8BD4483AA568746EB2B111AFAE0E5CD726AEB55C4EB9F3E7C95FB9 + 82997D0F6CBB3690F7DD4719BCDB9462D573C988A49F1CCFAB2FDFB489D8DCB9 + C8719024002B1414DCBA25C562780BE6A364926267672D90A84CB8C722A5C43D + 57BC525F8ED06B929695AD59636E2A65709FDAEFEAD2F0C99358A1201CC7128D + 8D241A1A08060618B974E91DD07EA794415D2A46B9E708F1863B7DBA45E7CC31 + 009B50C3A74F13E6F36D16DA060B82C3B99616824C86C4D2A52812890A5E2F69 + B0689A87E01960B1376FDE7824BA5796CF2B1C1E063800F6A399EDC54C413A8D + E2718B56578378A96444A341683E20B7B2F2E1B6E7E1565410DCB9F336525EB0 + 13D725525505805B59893A3AE69524B05193D143E03898D9A488007B6AFD7ADC + A95367031F3BF1F8AAB2B56B4D89848D7F0391D2040666D629892093215A5D2D + 33B3B1A800DCAA2A9BBA7DBB2C9B45F138725D00999985990C40E7BF12A4120E + BB5F2C07E80606FD8E8E92FB90845356068E73FF5E148BF2BBBB017E7D882095 + 7439B86526B5553117F814A932326DDAA48826814E988F8D472E5E5438326266 + B63FF2A0F8D75B67B2B0CA8B48FA42D2CE4463A325962C19479F18D1C4F9D8D8 + EFEA2277FE3CC061E0374D146FDE3A8B0555B1A8A42F25ED482C5F6EF1868649 + 2284A118BDC9930D8280FCE5CB645B5A64C5629B61EB72BEA52393C4535E54F0 + 95A42D89152B2CB1783163FCF9EB3770127165CF9C41F138D19A1A9C29534418 + 120C0E52B879933093C1CC8E18EC3223FDDEF13E944ABA346F9BC582A7633149 + DF48DA9C5CB9126FD1A2F16C0BD76F68F8E753981998A5810EA01E187BCB4680 + 33C05EC37EC8F9217B4EF4F3DDA5BB449AB7CD62619517079A256D4EAE5A6D5E + FDF39362C99E3B8B85611B70CEB0CF305A810A4933802266DD06D96208C76F0C + F1C1EFB7B93AE00310B9277E48D2C6645393C5EBEAC66329B4B713E672A2E803 + 9C2B04F66667BAC01F3D39FEECCDDF01EE8C510E648BB4F68E702B1B4C3A9511 + A0598EB331D9D484575B3B7EE6CCCC726D6D2AF6F58D2FEE4AFBACFBBC9D27A9 + 88C4CB5E7D3D5E6DAD49929941188E3ECB6618FC22B35781E12752BE4F20399E + 37FE4383FE7EEE1E3D2A04E617058C84D0FDFEA97E6E3F80FF580636E12ADE7B + C714160A00878076B0BF0CE3DB8B19B2BE95562A652049C5DE5ECBB5B64A4030 + 3434D6DBD737543CD13754C408099F5CFB3E81DFD383DFD3F350F3E085341F9E + 1DF87FCAF7EA1F965419756C46EB810000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000510494441545885AD975B6C14 + 551880BF99D9996EBB33DB02A52DDD1628DB127C011240A2468CA93C48D7600D + 92A831260A448990C803F1C1172F4FBCC84D344234F1D20721A01083D84068F1 + 010344A920174BB7B5D7A51797BDB4B33B97E343A154BB5BB6B4FFDBCCFCFF7C + DFB9CC9C7324A6193E55E2E92A1F2BCBF3995FA8FEE75957CCE2F75E93C6B624 + F1B49BB15E9A0E78FBEAD9BCB6ACC85BA0292F22B11E5801CC0304D0035C048E + 0D5BEED16F2E47D37BCE0F4D107928812573340EAD2F677E91FA3292BC4BABAC + 9CA70583784A4B917D3E00DC44023B1221D5DA8AD5DDDD89103B7AE3D6D12DC7 + 7BB81C493DBCC092628D231B2B15BF5739E0993D7B936FCD1A3C252593D6587D + 7D249B9B71A2D1BDB194B3E395235DE29E843215B84F9538BCB192125DFD5CAD + A878C3BF6E1D8ADFFFC03A45D7D16A6A702291D5EA4872D6DAA0EFA7C37FC630 + 6D3135819D4F14531BD45FF5CC99F3BE7FDD3A2455CD9AEB44A338D128725E1E + 92A220290A6A5515567BFBEA7CD7BAA26BF2B533E164EE43509827F3EB964505 + 3E4DB9E5AFAF2FF1141767CC138E43E2CC19D2E17017D02D7BBD2BF5DA5A450D + 0480D1E1889D38D169D9EEE2C70EB5A5E55C059E09FA2850E597D4050BB2C201 + CC9616D2E1F071C771AB7B62E9C75DD3AC4D9C3EED08CB02402D2B430D042A55 + 457A21B4D82067814703F900F579D5D593E6595D5D00FB3E6CEEB7D67CD9C18D + 81D439D7342FDA8383633977DFF1FCAA80174FAE020B467F322B3D656593E649 + 5E2FC0C227E7FB08FF63516E783C40401EBD0F80A7B4146055A55FCB5DC0A7C9 + 1E4996E74AF9F993E679972EC5EAF87B576D50A736A887816DDAC2AA0AA5A868 + 2C47D6758072247217909024A407CF59B5B414E3B9D02CB3A5E5A0304DD44000 + EFB26559F3731648D9AE251C675098E69C07F5825A5A8ABA766DD6E76E3209D0 + 07E43E093B6336C0253B12C9B5246BD8B76F035CEA8DDBB909189A4CF56C0DE0 + 7ABAA363DA02E9D656801F7EEB1D79B080A1C97CBB21C0D232EFEBB2CFB72D7F + F9F269C1EDFE7ED29D9DBD4270F8E45F89C9E7C028BC82E565DE4D8AAE7F66D4 + D5494A61E143C38565916C6A022176FEDC1A37C3512BBBC038F86659D73F3542 + 21299785673278BCB1117B68E85022E5347CD43C0064F90AC6C1B728BA7E60BA + 707B6080645313F6E0E0178E2BB6EE38D547C71D2BB3C038F89B8A61EC37EAEA + 32C2DD540A392F0FF38F2BD8B72368C1209E9212E482028410889191FB1B92F6 + F67E21C4CE44DAFDEA9D937D9CBA951C7B8FF47F78C3860A969579DF520C639F + 51179214BF31016EF5F490686C445BB408F3FAF55B08B11F78165821C9723180 + 70DD7EE002F03D8286C6B6F8F0076707C65A3E41605CCBB72A86B1D7088524C5 + 980877A251EE1C3B362C2CEB5D6031885DE73A86BB1D17027E0FFE3C59054422 + EDDABD719B0BDD23FC7833C1CDA174C6E1F10094F814BE5E1FE09132EFDB8ADF + D863D485C80487D1BD9EB0AC5F6E0CA43EF9F1669CBE84CD775763B8E27E0765 + 2CCC129E92028586FA726A8AB56D8ADFBFDBA8ABCB087762318465E1C4E2005C + EC1961F7F9A1A9B0320BBCF7D45C6A8AF3B77B8AFC1F1BA110CAE84A352192E7 + 9AB1BA7BDA802410162263DAD405744D4692D935197C5C6C6E6E4F9E4DD92ED7 + FACD9911185D65254DD1F5096D72532970EF1E241C1709D871AA8FDB496746E0 + A3029344FCC409ECA1A128600320A636C1A62D7037D6B4F48D5CBD7761BB3334 + F8B90A4812841A3A67149A5160E8E0C1873EA84E4BA0239AA6256266D917CC6C + 77678A7F01DE8008087351042E0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000006DD494441545885BDD85B6C1C + 6715C0F1FF999DBDF8B2EB78BD6B79E3C4A4F12D214DD35C5144238451146297 + A62A5555A8042F8507F204A848BC514425247828087828D0281441A92AA8AA36 + B44DA2240D4950E4B438171C3771E45BBC4ED7B1BD5EEF7D660E0F76163BBEAD + 1DBBE765B53BE73BF39B9D33DFCC37C22A44A5CFE0B1BA32B6547B0997B9666C + B36CA57B2447C79D0CED83196C5DB896AC24EC0BB53EBEB73BC8BECF9561BAE4 + 61E02BC0562002788051E0A6AA9E074EC69256FACF57E2BCFAD118E35967F580 + 01AFC14B2D619ED81410419E457841441E352A2AD40C8530CACAC030D06C167B + 6C0CEBD34F51CB4A0047517E3E92B6A22F9E8EF18FEB899507D657BA3972682D + 1B2A3D0F21F29AB8DD7B7D9B37E3DDBC195745C59C63D4B2C8F5F490E9E8C0BA + 7B3701BC80EAEFFFF8F1182F9E8ECDC875CD59A1C8A82977F1F767D7B32EE07E + 0C9153EE75EB1AFDADAD78376EC4F0F9E61D278681190CE2DDBC19A3A4C46B45 + A38FA35ABB2352F2CF80D7D0333DA90707BA04FEF2F47A36567A7689C807BE2D + 5B02E52D2D185E6FD1354404B3BA1A776D2DF99E9E1D6A5991ED35BE7762298B + 2B77B20F063CBCBB92A73E1F088AC8496F5353A86CDF3E4496D731465919EE48 + 84DCCD9B3B508DEE5E5BF2D19BD7C649E57579C080D7E0778FAFC5E7365E7655 + 567ED97FE000E25AB8945A1699CB97495FBC48A6B3132791C0150A21A659408A + C743BEBFFF4B3ED3386A1A3271A627B53CE0738F54F0D5467F3DF0077F4B8BE1 + 5AB366619C6D9338768C6C57D7A0339178D949A64E5A434375F9BEBEA0A7A1A1 + 807485C3E47B7BBD4E3AED6EAEF2BE77E4E3518CE5000F3494037CC70C875D66 + 6DEDA2F9D9EBD7C90F0DC55475CF58DAFE497F3CF712AABBECD1D1EECCE5CB85 + 3C11C1B76D1BC0B74BDD52D2F250D9D2812E81ED111FC0939E8686A2FA2E7FFB + 36C09BC99C137DF2F57EF6FFA997EB7773E3C0D1A96D85F06CD8809866408496 + 3DB5BEA5036B03265E97840569744722C50D9A3C08B7AD60DB8002AA00E6FD07 + 28A689595D0DC81737ACF12C1D182937011A1064B1DEBB179EBA3A8067025E57 + E35BDF5CCF3BCFD5D11CF2D600CFBB27B7CD88A9BA0D5ED3C05C2A504410910A + 5CAE42732F0A6C6CC4D3D313C8F5F65EAC2A35DFA82A35F3C0D3EE9A9AB06FEB + D6D9FB989C4B2B80A5030154B14415552DAA07C53028DFBF9FDC8D1B815C5FDF + F3A8E2AEADC5BB69D3DCD393E30058CB025AB622C2108E83663248494951E3C4 + 30F03637E36D6E5E34D7492601A2C0D27BB0379E07E586AAA6AD586CF101CB08 + 6B7818E0CA48DA5E3A70246D93B19C2CF0AF7C5FDF8AE3EC781C271E17E0E427 + C3B9A5015D02BF698BE033A502A8B24746561C98EDEC44553B50BD7AB62F597C + 0FDEC3B535F9D700EFB982C1EDE5FBF7AF28CE9E9820D3D909CA2F061316ED83 + 99E280F7E1DE3783C15DFEB6368C222F90624255497EF8219ACF5F00FDEB2BED + A3401157B14BE0B76D115A9BFC9553B89DAB814B9D3F4F7E60604CD16F758FE4 + F468C7D8E2C0FB701F9855553BFCADAD2B8BB32C92E7CE91EDEA4A821E4AE59C + 5B878F450BABBD7981D370C129DC767F5BDB828FF2859D3A0E622C7CFDA92AD6 + EDDB242F5CC01E1D1D50E5EBB643FB0FDF1FA233962BE4CD791BB80F77DCACAA + 7A74219C3A0E9ACD62949490B9768D747B3B9EFA7ADC757598A1104669E9649E + 6561C7E3588383646FDEC48AC56CE0882A3F1E4DDB2387DF8D72AE3F35A3F62C + E0345C1570DC0C85B6F95B5BE7C7A9923C7D1A6B78186F7D3DE94B976C55FD25 + B013D827223E44C030A61E6540556F006F01AFA86AF7BB9F24F8E999618626AC + 59F56700EFC39D3043A14716C59D3D4BF67AD7286817938BF4EFA2FABAA58A29 + E241A409A801DC407C0A178BA56C4E764F70B423CE7F63D939EBC3B41EF4BA84 + 5F1DACA1B5C91F024E98E1D0567F6B2B8677FE9ED3749A5C5797807E43558F03 + 86ADEAFCECCC30AF5F8D531FF4E422E5E6D580D7B87A6F4C74C2229AB0B8359A + 9FB7EE2C608929BC7628C29EF56561E0B8190E4FE18A5B42AAD2F7A3E37738D7 + 977246D236A9FCE42578E54EB6B07C5C6E98A5A6F0EA136BD9B9CE17C6901366 + 38FCF04238CDE7B1A66E719AC9147EEF1DCB33303EBB871E34CCEFEFAD626F5D + 69B5889C30ABABB7F80F1E5CF09FB313E324DE7E5B5014F97F0FEB226FA9960D + 0C96BA10437E6D86C38BE2A687A3CE5A94D1499CE626171AAB009CFAACF6D4D5 + 2DEDB505E49EFA5B7F2E9A983CADB1D4CA9F5E001364C1C776751C72B76E15BE + 3B131353406168C2E276627560D3808B84E3903C754A5435064C9B1B74EE378E + 2B1C4B59937C4D552FAE9A649E281A2802CFBC31C0BF07D2ABE9991505603E1A + 854B976625A8F3999CC979E31EF03F56348A158DCE93A600E39F0D696698DD23 + 392EF4A77EB070DAE41C37DF9BF8D58CFF010714DD7FDA4E75CC000000004945 + 4E44AE426082} + end> + end + item + Name = 'letter-a-arrow-right-2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000024849444154388D9591CD4B54 + 6114C67FE7BD77E6DE9B38CC0C33238A12A86D04EF481154D022FB80162D7227 + B488C24A0869D51FD0C7AE7D0B09A2555882D5C2689D2B174E328E24442BC386 + 4B388EB7B9CDDCB96F8BD41C87020FBC7038EF799E739EF30887889EFB6FCD78 + 3AF71E98DA5E9A2F79330F310E43E0B817222399AD0BF222DE7D6CDE4CF778E6 + BF9A93E76F60F50EB5D49412045E020AF8D071FCF2C53602C330E8EFEF271A74 + 89FA4F47FF5D49EBA76D04994C86542A753228AF2EFEB23B143AA26138046184 + 1C4960A6BA11E41E30A935D7E42081EBBAD8B6BD004C00023C0AC3F06AA15020 + 7B6B1AEBE8D09412B90B9CDB5E9A5F57FBC1894402DBB6CF009DCD66B354AFD7 + 578041D334CFA6D3698CCE8CA9444E01A3DB4BF3EBDECC835617FAFAFA701CE7 + 3130E779DE62B55A25914828602C168BCD96BF7F8BD0D1ECCFD58F5B3FDE3C01 + ADD993108BC5C8E7F319A5D48AD67AB0582C56C330249FCF2794525FB4D6C3A5 + 5269C3F7FD566776936C368B52EA3AF0DAF7FD6AAD56A3D168B0B9B9B905BC12 + 919BB95CAECD080110115CD715CBB23E0363411014832000C0B22C1CC71906DE + 4551345028149A6118EE119800C96492783C7E494406804F8EE3E0384EDB34A5 + D4954C2633B7B1B1D12A2197CB2122B7B5D6E3411018BEEFB7BC5AAD6668ADC7 + 81C98332C4B22C5CD7ED159185288A069797971BF57ABDA5C9300C4646466286 + 617CD55A8FAEADADAD552A953F1BEC4C9F009E572A95363040B3D9C4F3BC06F0 + 4C44EE747575FD9560DB36C00960BA5C2EB7817763E76F1AC8EFBFCF6FAB74DF + 8A7977B09E0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000002FE49444154388D9D934D681C + 6518C77FCF7C66DBFDEACCEE6C172305770984404D3D781005C14BA0270F2242 + 457291B4270FB654F02045684150C1436D40BC94228252513C486CF120DE1A28 + B28544D9881F24DB6CBAD9CC76BBCBEE3C1EF6A3597693431F78991966DEDFFB + FF3FCF7F84272833759CA7CE7FEB1A967113F8286A3DBCB5F5E53BB436EE623C + 091040D15684DE05BE33DC232FE7163FC53D7112F3D05D8689953E8E114B8C2C + 11415219DCDC332B22E2011F8B65FF7AF4E42B7FC9613CEB589EA72FDE4C01F3 + 1355AA0E6E2F01A780D3D641B0D9D959ECA4CF5EA73D8FE5DC9EF48DC8A81E55 + 7D6F22309148904824A6944EF151F5CF5FBA473386445D22E708EA264064A84E + 557322720B78A0AAAF4FB45C2814F07DFF4DE059E0DDFEF53470656D6D2DAAED + 3D24BBF809B1C2A9C010E367600F58685736EA6353B66D1BCFF300967A0214E0 + 3FE07D60210802CCB8C7D48979D71059014260A17D7FA3BEB57C6E3C36994C06 + 7A43785E55AF55AB553A9DCE7DE01BE06C2A95C2B52DC49016C8E581B2CD6BE7 + E8863BE3B129140A5896F50150053E2B97CB8808F1787C0BF810B8DE7D14D676 + FEF983A859FFBDFDEFBD56F5EB4B44E14E6F50FB61E9749A99999924F0377026 + 0CC3EF4BA512B1588CB9B9390CC3B803FCD4E9742EAEAEAEEE8FCDB0462C0741 + 0070A6AFEEC74AA50240B3D9240C4380ABC0A2699A53BEEF8FC14680AEEB924A + A506C358EE76BBDD300C711C07C771A8D56AA8EA0DC01291D7FA878FD5D0F2F4 + F434F97CFE25C3306EABEA1B40657F70F7D9BB001C53D5174AA5128D46630468 + 412FF1D96C161159EA3DCA5763278FFE150A3C1704C19D72B93C6ED9F33C6CDB + 0E805755F545553581894B554D555D01CEFABE8F698E06C582E13016817B5114 + FDB6BEBECEEEEEEEC41E158B453CCFBB0A5C17910BD96CF6C1E6E6E66385B158 + 8C783C6E006F039FB7DBED036100954A0555FD01A88AC85BB95C6ED472BF770B + 405A556F0CA27250D5EB759ACD66175806961CC7916432F918D8EF41115856D5 + C6F6F6F6A1C0814AE00BA001E46DDB1EBEFB1F0D511B18EF7151790000000049 + 454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000003F6494441544889A595DD8B94 + 6518C67FD7FBBE3BE3EBECEE389F363ACCE296B42B1998E4499A12D449641081 + A11559A02D41442884078227FD019EE447E816751659141D581E4827212694C1 + C2AEAE8BBAAB3BBB32CEEEECEC38B3EFDC1DECECE6B83B2678C303CFCDFD705D + F7F7231E53FC675E26B5FB88E738CE69E01CD05F1EF89DFC378720A8E13C2E01 + 80198E411CE904F0AEDFBB95F49ECFC16DC37D7C7458B9E995C0F1DACE086D41 + 7C2234EC257397436BD6A347C1F07BB7E2773FD7D2EEAD7D7ADE6EF892CE205E + C2D86B66DF7A0F03968424563EB999CE6DBBB79BD90EE93F9FCC8C05DDCC68B8 + FB17C676D02989FA4309BABBBB89C7E3CC76862999ED000E9B59D39B07F5FB2C + 00AFB62CB2E779C46231246DF1EEDEC4A9CD1E716A15D7A9965D055557E002AE + 2417C9055C3373C13E6E407C67667B5BD62093C990CD6643924E9B74D042ED63 + C01AACFE8439DEE56225A85D1F1D438E4B74E7A7ACC8F622A94F728E62F683C1 + 1EAB56AA2D2348A7D300AF01BB64B64195299C7BD31B9DEACC05B7527C63557D + 8AFAF8159CF6342B323D00FB251DC5EC27C3765BAD52CD7F7D60F9398846A384 + 422124F5018366762E0802CCEC2C7005E89344329904C7058838723EC3F8D9E0 + 2DAB566AF9FE0354AE5C5C9E60F5EAD500BDC08BC071C0868787B1F98A1E075E + 90F46C3A9DC666EF829831B36DCC8357F35F1DA472F522C0D2410B87C3747575 + 21E910B0D1CCDE9F999999BD71E306BEEFE3FBFE90A48F8036D7757F29DE1CA2 + 347695A0303675EFFAE5A0F8DB492AC39716F19614399BCD92C964564ABA0E7C + 6F66FBAE5DBBC6E4E4241D1D1DF4F4F4007C29E94D33CB158BC5A9C1C1C156A5 + 6C4ED1425E25ED025601C78220E0CE9D3B004C4F4F532E97018E496A97F47634 + 1A251C0E3F1A412C16A3ADAD4DC03EE00F33BB343939D9344C131313007F9AD9 + 05603FE0343A6E59699AE4542A85A4CDC0F3C07B00A150885C2EB7F8C6755D24 + 19700C38056C4BA552E7474747A9D7EBAD097CDFA7B3B31333DBDFD82F1B241D + 8EC7E34DFB46D242443E80A43ECFF3CE27128985E89A64B1C85D5D5DA4D3E998 + A41120F220E883F7051DA89AD953A552696C6060600981B31076229140D23B40 + 18586F669E997980B7DCBD71D6038EA40FDADBDB894422CB47904C2659B76E1D + 92FE01AE9AD9EBB76FDF5EEC9EE5A4A3A3835C2E87A41F814D66D63D31313137 + 3232B234824617EC90D40B7C51AFD7B975EB16E572B9E5191F1FA756ABC17CCB + AE95B433994CE279CD3F8013894488442248FAD0CC86CCECD742A1C0DCDC5C4B + EF17249FCF636667CDAC793FDD4FD0E89235CC6FCE934090CFE7FF171CE667C2 + CC02E004B05D526F2291589A22602D3000F497CB654AA5D22311D46A350A8502 + 403FF03790BABFCB00FE054040C12603A957F60000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000004E9494441545885B5975F6C53 + 7514C73FE7DEB6F7DEB62B6BBB76AE2CDB30303452C03F417DD108249A10131E + 2421812C4160BC195F35068D313168A2045F041E24FE8130D03044215112894A + E44191C89C11632203876D69B7AE1DEDDA7B7F3E58C636D6B51DF27DBAC9EF9C + 7BBEE7DC73BEE77785BB8CAE37CF36235A1FF042EEA793BFA58EBC0E4A4D9E6B + 779B8053181F4531049CF63FF44C7778C34E905B61F5F9BC341008D0D1D14138 + 1CC6711C0A854255DBC25FBF60AD587B42D35D7190D73CF72CFE5C6F8EA56FFC + 7A66FE043A3B3B0906837D9665AD73B95CC7AE5FBF5ED5D61EB9C6C49541E58D + AF3E2EBAEB411179D5D3B6F8B866FA32854BE71A276018061D1D1D0B45E43DE0 + 4FDBB68F2693C9397DCAE9AB146F917844445E313B97F78BE11D914609B4B7B7 + 138BC57602CB8177B2CBD69FCDFA626DF5F8BA4231342BE0023E40B817C553AE + 46828B0891484407B62AA5B6974AA5B3B6BF0563E1FD571B4D0440A176374420 + 180CE276BBD70145A5D457172F5E24FA40022B34BAD0711CCA76794E7FCD0A20 + 2E8F05F421E246D8DE1081482402B003D89F4EA795C7E3A1FDD2F1A55C3A7E5F + 3E9FEF1F1818A8EA6B2E799468CF5BA6C001C040A9D5A3DF1E4CD5AD03A66912 + 080416014F2AA50E2412096CDB4629750338E8F57A5BBD5EEFACBEC69255447B + 76199ADBF80C68578EB336FBFDE164E68B3DF50B5124124144B601FDE3E3E3C9 + 5C2E47B1582497CB5D064E8BC8F3D168F4F6E09D71A29B767934B7F929B04829 + B566ECFCC97FD2277603752AA1A669B4B4B4B8812DC0BEA9635779DE0B6C0B87 + C39AAE4F9FECD62DEFBA75D33A022C51B02677FED4B5F4D13726E5B82E02A150 + 0897CBB51EC8D8B67D66AAF0A4D369CAE5F24940D375FDE970383CCD570CAF01 + 8C006BF2E74FFE7D7DC62EA84B88BABABA300C630F7028954A9DCB643293674A + 29DC6EB7F2FBFD7EE0598FC7733891484C9E97534313E2721F1B1FFC2E9BEE7F + 7B5A70809A42645916F178BC1BF811E8181818C8E4F3F96936A669128FC7DB44 + E40FA5D4D2C1C1C12BB95CAE9EDC6A7F824A63F50247F3F9FC6DC1010A850263 + 6363C3C09722B275B6669C17814AF399400FB0776A6967A272B60FD81A0A855C + 339B715E04C2E130BAAE3F075CB56DFB87B9B65E2693A1542A7D0D14344D5B57 + 11AD3B2330A5FC7B53A9148EE354B5554A914AA514B01FD871C7047C3E1F3E9F + 6F19B04229F5C95CE5BF8944228152EA00F084699A8B9A9A9A6AFA54DD05950C + 7A815340B0BBBB3B58F36DFC570911F94644B647A3D197C7C6C6E6B49F750C75 + 5D67E5CA953E5DD787004BA4E16B8328A5D2B66D775DB87061A25CAEBE2567AD + 40A5F93602BFDBB6FD58B1586C28BA6118E8BA7E51D3B4F59148A46F7878B831 + 02539AEFFD6432C9E5CB971B22108BC5686F6FDF27223B6A11B8AD09FD7E3F96 + 653D0C2C564A1DAEA7F96622994CA294FA0858659AE6D24020503F8168348A88 + F4021F67B3D9F1B9AEDCD5502A95181919C9004780DEB994711A015DD7098542 + 01602333D66EA3A88CE45EA027180C9A6EB7BB3681969616446413F073A9541A + 98BAF51AC5E8E828C562F11C3024221BAA09D33402ADADAD88C80E2AD9AB19AB + B3514CB9ACF4D624D0D4D484699A8F036D8EE3D4FCD9A80715F93E08C43D1E4F + BCB9B9796E02C066E0C36C365B6C74F66743A519C7804322B279C18205B7D94C + EAC0C4C4048EE3BCA8699AF57F647F138944826030F892522A375B52FF020B28 + FCBEE32CDA000000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000006C0494441545885C5985D6C5B + 6719C77FCFF1398EED7CD88E1DBB29A44BE89A8C42698A4415B14DA84C5C54B4 + 151A68151568B4CA925D0C682BF171B131A983AA7C7642089430C2C598FAC1CA + CA2848E36265DDCAF8284362D934E5A65FF9689CB84E623B766CE73C5CE4B85A + 1A27B19D08FE97F6F33EE7F73EEFFB7FDEF71CE1FFA47B8EBF8118E6312089F2 + C3F88593242F9F591267FEEFD116248629409B881C50743EB4E7F04F5025F9D7 + B38BE25CEBF130CBB2304D1397CB85AAA2AAAB8E317C7EDC1BB7BEACA2ED8618 + 4780696F7BD7DFE7B3497237DF593F40D334E9ECECA4B9B9F9E31B366CC85B96 + 353B3535B5EAB8CCD03F7035DDA335D10F9D073E2C2247148D7BB674FD733E11 + 233F36B43E809148844020701FF06F20E0F57A2F8C8E8E963152C9BCFB1A56A4 + 55AD48DB79E0238618470589F9B6DE7F253F7E957CECDADA015B5B5BB12CEB49 + 11D909BC07BC541E20A0CAEC3BAFE18EB4D956B4ED3CB04D0C8E20C698EFA3BB + DECA8F5F45D602D7D0D04047478757446E026781D7E79AB79DBA9EAE2CAD182E + EA1FD88FB87D96C08B22F259457B74BE30B026174722114464BF88D4DBB67D1C + 48CF6DFC18C1D6AE6F011D95E452800573A51414A44F0C73BE6A40D334090402 + 003DAAFA27551D8EC7E368368BC076A0AB927C5284041130005168A91AB0A9A9 + 09C3303A4564A7AAEE4DA5525CBB768DE8D404B5E9F801807C3E8F6DDB65E533 + FD11300C407E0E3CAECA3308DF5D13200BD5BBAEAAAFC46231EAEAEAD83472A9 + 91914BDB802B376EDC48DFBA756BD55CF5F7EFA771CF6104F9A9883CAEAAC781 + A7675E3F83510D9CDFEFA7A6A6A60E38003C572814EC4422F1FE903F02DDCE24 + 5654DD271F5980133929224FD8B6FD03557D72E6F2696E5F38591DA0638E0340 + 8DAA0E4C4C4CA0AAA452290A85C26DE045A0C7E3F1D0D0D0B06C9EDAAE2FD0B8 + F73088FC4844BE6EABFD6355FD76EAAD57B8FD8767012A07B42C0BBFDF0FD00B + FC1E189F9898004055999C9C04E81391FB804F45229192797CDB7611DE771441 + 4E18224755F559946FA4075F257EEED89DB88A019B9A9A10919D22D209F44F4F + 4F33373777E7FF582C86AABEA9AA6F8B486F3018C4B2ACA579BEF80C6218DF33 + 0CE39BAAFA33553D9A1E7C95F8E9A7E17DC6AA18D059DE5E551D52D58BC5EA15 + 95CD6649A552007DC0E744A4291C0E2FC9E3DC663EA0AABF50F46BB38317993C + F51DB0E717C55504E85423003C02FC329FCFEB5DE600607C7C1CE005200F1C2C + B5CC336F9C56E010CA13B36F5F64E2D4534BE080CA8EBAF6F6760281C0578113 + C0A6D1D1D1F8F0F0F0D2A4227476766259561FB04B553B868686747A7A7A519C + 196C06A0301D2B09071554D0ED7617CDD1039C53D5782C162B195B348BAAF68B + C86611F94CA92A161263141263CBC25504188D4611910745642BD0373535452E + 975B36DED99BFF52D52B404F2010286996D55416A088E06CF45E551D54D5CBCB + 55AFA86C36CBCCCC0C403FB047443696D3B8AB020C068398A619061E06FA73B9 + 1C77EFA7527226711A98050E2DD713D70CE8B496AF0005E03777B796E5944824 + C8E57269161CDD6D59962B180CAE2FA0C7E3A1BEBE5E80C78033AA3A5D2E2050 + 344B1FF04111D95DE932AF0AE854EF2111B917E84F2412E4F3F9B21FE02CF320 + F026D0EBF7FB71BBDD658F5FB10F8A083B76ECC034CDB3409BAA7EA25028303F + BF7C5B2825B7DB8D61185F0206802DA3A3A3D74BF5CF525AF13ED8D8D888CBE5 + 6A06F6013911B969595655EDC2799601748742A1A7464646CA7A7F5E11D059DE + 834006F83E2C54B51A39300F0207DD6EF7B14020902F754C960DE8F57AA9ABAB + 33806EE005DBB64F8C8D8D550507E0F3F9080402BF330CE35D605F341A3DB726 + 40A767ED16914DAADA9F4824181919A91AD0B22CB66FDF3EA4AA7F017AEAEBEB + CF793C1EB2D9EC8AE34ABAD8300C42A11022D2A3AA7F53D5FFAC7672ACA67C3E + 8F53B13E11F9B488DC5B4ECB2909180A85304DB305D8ADAAFD994C866432B926 + 4058389F55F5BCAA4E003DE17078D53D5D12D0995937300DFC76ADD52B6A6666 + 86B9B9B93CF06BE051D3346B1A1B1B2B03F4F97CD4D6D69AC021E07955CDC4E3 + F175018485C66DDBF67340A3887C3E1A8D5606E898632FD00CF4C7E3F18A1BF3 + 4A728EBEABC09F819EDADA5ABC5E6F79802E97AB688E5EE092AABEB75ECB5B54 + A150C0F97ED82F220F88C8D695CCB20830140AE172B9368BC843AADA373B3B4B + 3A9D5E5740B8F3E67741554754B5271C0E6318A5AF058B7E752EA58FA9EA24F0 + D27A57AFA8643249369B9D070644E4CB2E97CBB79C5916013A676C333060DB76 + 6E3DCD71B79C2AFE0A9802B62C77C3597492A45229DC6EF7A322C2E4E464D95F + A6AA513C1EA7A5A56518D85C2814C8643225E3FE0BDEB1E2D94E9B99C2000000 + 0049454E44AE426082} + end> + end + item + Name = 'symbol-cancel' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000025949444154388D7D924D4F13 + 5114869F33B7CE24C49971C020A3B2938F4A5CC8C28DC002D0445994851F2C10 + 23CAC29FE04F3171210D88A6C55888FA1F0C4A222924D20289890A74D080E1B6 + 94322EA0582B7A96E7E679CEBDF73D0A2076B28E4BB6CD4A3E4F210CF95F5922 + 0CD4D713ADA961617B9B48ACAE8E272DCD1780C6C153F56F6EA617D82C95FE09 + C7A32D747BDE75E0B31789CC194E4401340213EDB6DD97688BE22875243CBA0F + F7011340A31351A8957C9E4ED75DF42D330D8CFB96F5B1D37516A772C1E173CA + 937BF6274F008319AD5F3F5A5A4615C290A95C40A7EB7CF22D6BBE5292CA0500 + D5F09D8CD6D3FD7369568B45A47C454729926D512EDA760C88873030BBB5F5F6 + 7B7197EE5AEF9AC0736028AB752A760003BF056549A2ED3CEDF6F1181087F0F6 + FE89BC0086325AA7FA2BE0BF0455927E60F4A07D37A3F5AB6A18C0A81614F6F6 + F8B1538430D487CD10BD592CA2F7F6FE4AE78FBC4C11E2D1667A3CEF2A2209E0 + 1E904218F74DF343C709279BCA6DB053B16CAA127EDADA448F577B454492C070 + 46EB972BF9C2826F998B888CFBA6F9BEC3B597A682E050A2E060495ACFD1E3D5 + F61A622481FB59AD27FBE7D23C5B5BA3CB75177CCB5C1491B106D39CE970ECA5 + E960834218A24C11469B9BE8F5BC5E3154127890D57AB21C55210C49E5023AF7 + 251911193B6D9A33971D77692A0850B7EA6A7978F64CB7186A1218C96A9D8C55 + FD7679D9BA5C77DEB7CC2C22630DE6B177DB3BC565A3846088AC03C359AD13D5 + 70B9364B256EA4E799DDFA9900860D91F55D11C400467C1F27A2887F5B3D12AE + 2C472946FC068A61C8E32F5FF905C6150A276AF236B30000000049454E44AE42 + 6082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000030249444154388D95D2CB6F1B + 5514C7F1EF39339EB83192671C296DC4C645C4A92005B164D9B1C482BA7F0162 + 8BC473C1A30B485250D3697889E702271B5877C1A22C515BA515551F290BE886 + 4D0C5233AD421ABB7192B61EFBB0189C9AD421709657BA1FFDEE3D3F0760C4F3 + 782A97A3E0BADC6AB5F83F7360700FA53D83B822D4930419F13C7E7CFA20C39E + 5734B3DAE4628D6A7CF33F6147860ACC964AB82AC5F576BB56F9E557747F36CB + B0E71581EB2272747A7F919746F6ED8A551E604781EB39C7298E0FE6700AAECB + 8BFBF6D6053A2212019B61E0FFD44812169ACD1D93CD8D957055DE119119E018 + F0C3A9E5659C5BAD168D24A1EC071780964004B251F6FBA3E933477155DF16F8 + D0600263A61AC77CB314E3002C349B349284D0F72F2092FC9D743DF4FD8BBD68 + 65A8C05C8ABD25221F194C829DACC6379958AC01A4602F5A0EFCF3407B3B3AE2 + 79CC8E8D92E9626653605175296662F1F7AD176C815DF44E921006C179A02310 + 21D22CFBFEC5CA50818CEA9B021F5BFA6727B6630F81FF4C1ACC03264884B0A6 + 22CF0AF289C1FBC0743FAC2FD80705910891E7C03E008EA758ADDF55B4EF2910 + DFBD47D2E960660D311003336B60C61F9B9B3B5DEB9FB05208BA3D7B43553E33 + 380ECCAB4A84510FFDE052BD9D70AD4F4F1F020F1702E60E8CE2AABEAEAA9F9B + 314DFA6FE700475423135B0DFDFCE5462BE15A737D67F0F9829F56439CD754F5 + 0B333B011CAB2EC57CBFBC4239F0CF01AE8A4618B70F05F9CBABAD163FF7A05B + E091429E6AA94446F555479D2FCD2C02A6BA0BE8A9D45920A3AA9199AD84BE7F + E54E728F85E6C603F07010305B7A9C8CA3AFA8B85F819D0426B76F33DD7E9B72 + E09F053C118D14FB33CC07575693F4F9CED8C000A79E7C828CE3BCACE27C0D36 + 034CEC548D34699B30F0CF0003221A99B07C289FBF7AB5DEC02965B3BCB077F8 + 51553D0D7C0ABCF76F3DDB96F40C9055912933FB6EBE5E5F73E32461C3ECC623 + F00CF0DB6E587766E31801A61F2BBE6BF06D47E446ED7E0B0118CF0D329ECBB1 + DE6E737AE5F6AE58EF84BECFB0976171F32E97D6D6F80B4AD77B1385EB877800 + 00000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000046C4944415448899D955B6F14 + 7518C67FCFFF3FED94ECA9DB351C8A466A8285DD1EB8F0965B2260E291522AA8 + 2125C807F1039808C410494D204ADA026D055A3F827A65DA2DF1862B303176B7 + 750BE9EECEF4F562B648B156F1B99DC9EF790FF33EE30104EC6A6B23ED3D004D + 33FE8F3A9C280409A76EC63A20019FF5EC63B47B37203DACD7EDBDF9051EACD5 + 5F089E0F02C64B071948A50566DF57AB9CBDFF0B6E675B1BA37B7623744E30F6 + 727BBBBFD557E2D530FCCFF05CE099281D643095F2126392CE1DC9E7792393C1 + B5DE117058D219A4B1EEB03D98EA2FB1AFE3DF4D3A8380C95291FE742A401A93 + 740638AC84895B8D631E361A66C65933FB56D288D0D5EE30E9A4671B937CABF2 + 8174CA0B5D95346266DF9871B616C7F6A851C737CD98AB54395EE85ACF06C134 + B01F3825D4930DFCCCB1AE82DDAB545889E3CD63F19EC95291C14C02074E0337 + 804F56E3281A2EDF67E1C9133CC0721471AF52494CBC9F42EA953402F464BC9F + 79AB50B0D96A85E5286E8D25810FA4535ED2D5D6586E60F6512D5E8F86CA8BFC + 585B05480C0056A298D94A85E385C27A36F05340AFA453C0BE4CE0678E76156C + AE5A01C478B155B9F495A43366360E76A616C7D1C9F2223FB5E01BCBDDA49E8E + 90DB7D25F684619BE01AF001F0B5999D7B54AFC74BCD88FE74DA4B5C013E0626 + 80D3AB51D43C595EE48767E05B1A00BC1A864CF597D81B866DC0354927CC6CCC + CCCE4900BA22E993A4724ED7A2A839F45CE5DB1A00EC6B75D29D74725DD2FB66 + 3606D0824F1A7CB81A45CDE1F27D7EA8D5B6E4FCA34162D2C1EDBE227BDBDBDB + 91AE03EFB51EDD04FBB016C58DEDE0C0D343DB52CBCD264BF52606B1192BADEA + 65662B18F11F51C46F8DC67688BFBEA2E7D519048C170F32904E3B495F3AA7B3 + C06DE0BE73EE14B037E3FD9D635D799BAB54597EEE4EB635C879CF445F2F83E9 + 8C9374594EA36636059C0226817E4923187B324170F7E84B799B5DAAFEED18B7 + 34E80C3CE3C5030CA633CE49979146812960B816C78DDF9BCD381B04B7803EC4 + 884477D607778F76E56DAE5A6125DA6CB269079DDEF34DB197C16CDA49BA24B9 + 51601A18AE45516378619177E6CB3CACD71BC030302DB951C4A59777846EA278 + E06F29FCB4839C774C96F63398CA49D2452F77DECC6680E1D567BE96E528DAC8 + AE381304B78101273762C6CE5C10DC3D5EC832BBB4FC745C7E63A113BDAF3398 + C938E77451B8F3C00C30548BE2C650B9FC345BA0955D4B158E17BAE26C10DC04 + 069214B65D191FDC3BD6D969B3CB89890F25260F1EE0502E2B87FB42CE7F0A7C + 079C4C2A5FDC04DFD04A1C3357A9722C31B9050CCAB9116067A62DB8F7662EC7 + D4D2122EE73D875229843E977717CCEC0E30B41AC7F5245BFEF9881EACADF16E + B2933A70D2CCEEC8B90B82CF5FE908792D0C93254B20A779339B064EACC671FD + C442795BF8B3266FCF2FF0A85E5F034E98D9B49C9B4FFEF6A04062ECC0EB1CC9 + E791E46A51B4FE6FE7BF957A3A3AB8D557646F183A335BFFF9F163DE9F2F2759 + D42EF1462603C0AF8D060FD6D65E08BEA1DDED6DBCD6B1038085C78F598963FE + 04B7A4F0A0DE66B91B0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000430494441545885ED955F4C5B + 551CC7BFE7B6A73790F5DE7B2E22F26222B8D1C23681263E59926D5AFF4D2D71 + 73B2F1B018FF6C6A328DFFF6E0BB1A1FE79C1BD00CC6A683B14C371E487C31F1 + 615136A0B45D1968FC37BD282DC350A107DAEB437BCB2DB4B4101E8CD9F7EDA6 + E79ECFE77CDBF32B7027FFA5346CDA8481EDB5E8ABAD4105A51BB2A764B1A0DB + B1195F6FAFC50E455EF139313F0C6CAD43A32C9D83AE5F99989B3BE70D8430B9 + B0B06EB8DD22A0B7D60997DDBE1F84ECBE3537B7BFFEFA70D61AC1FC309B4840 + D7F57E10E2AB2E2D69B9B8D589BB6DD675C37B6A9D6894EC2D20C4A7EBE89F4D + 2457ACB3981FBE9999814765A36594FE44407C8C5A271E5194407F248A5872E5 + CBF92259049C773AE092ECCF0B44380DE0458DC7CFEEBB11C6F4E2627E815832 + 892B91283C4CF1AB94FE4C407C65D43AE15194C0E5E8745112768B05BD0E075C + 7206FE92C6E3DDCD81107E9C9F5FBD816C09E65729FD8510D2A15AADE30FDBED + C10B9128E2BA9E172E12829E2D9BE152E47D8220740278F98F383FD31C08E187 + 1CF09C024B121178181B5129FD9510D25E26DAC69B1425F8E55424A7844808BA + 9C0E3CC494E7D2F0435A9C7735078279E17905B224546544A5F437424847A568 + BBE996E5D057CB240CF84EA6EC2584740138A4F178A77795931714C8484C45E1 + 51D9884AE92D001D95A26DAC499643461326F81E0067001CD638EFF48E168617 + 14589288E051C686554A7F3724DCB21C1A884EA3AD668B19FEAA16E7A7BD056A + 3787145E924A05A5B8B4AD0EF79794BC00E03880D67F1289BE528BE55900DD00 + 5ED338F779478B8703453460C468C2C3D8904AA906A09D0A820AE00300AF6B71 + EE5BCBC98D14DD80917B4511571BEB4105E10421E4155DD74F0238EC19F16368 + 36B6D6EDB24771A18884E0E3EA2A5041F00238A8EBFA59000701783FACAA8264 + 29BAD04C8A7EC3F46BF702F81CC01100EF03F80B407BA5680BBA6539BCFC8A6E + 88400A5E839D8C3D03E00B004734CE4F1D0885F1A064BFA6526A48049A64692C + DFB05A978009FE3480F300DED0383FE51D0DC21F8BE1F254041E955D53299D4A + 4988A36E591A2BB6895505966A674F01E801F0A6C6F949F355CBDC8E9444242D + E177CBF2CD6224F20A984EBE3B0D7F6B92F3CF72DDF3CCB052D9A04A6914405B + A5681B71CB5241899C0239E06F6B9C9F586DC8C49249E3EB1854299D4E498805 + 2556088884A0D359835D8C3D09A017C03B939C7F5ACC843335F1BD4AE9EDB4C4 + B05B96C6F34964091827DFC5D813002E007857E3FCF85AC6ABD1445A62262D31 + 944F224BE0A3EAFBD05C5EFE38803E3D997CEFCFF9F827DE6071FF6AB9241E53 + E4EF64ABF56F42485BA5285E7794964C5C9C8A64ADCD9A84F7D86C00D00A3D79 + F4F662E2D8811BE135C38D4C2E2CA025148616E7C7A0278F0268AD48ED9F3F3B + 1405C3AE7A0C366C437D69E9BAC0CB53258AF8F6813AF85D0DD8537ED786EC79 + 27FFAFFC0B062D0AE2AEA7264F0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000051C494441545885EDD74B6C54 + 551CC7F1EFFFDC9976DADEDBDE690B3283F601A51B0926CE2495AA8833894190 + 22C685096091084565E1605CB53144BB52DC90684A01DFCA9BD00760055A2CA0 + 6ED0AD8AB61589541EA65379299D392E66C6943E67A62531A6BFE5CD99399FFC + FFE79C7B2E4C652AFFB12C2DC8E7C27C3F972AFDD41717DDB1790C6047791997 + 2AFDF454F8A8B0AC51C7DD9613F3E6E2349CAF81AAF259D617B90E45475F78D2 + 715BCBE75055509823CA68CD50C6C507CC9C9FB7F7FE3E6CAC1AFAC08180C616 + A542A264738DD7C3EB9358490368282FA36A5A7E8E2839042CD45A5B0632EAF8 + DB62390CFCB9561B90272221AD317DB9E651530927C2FD13C6BD5B3E8B658585 + 394A542B48A586155AB3FFADF3E7F9F6EAB5F1811DE130B98681CFB2DA005B29 + 15D290E337ADA379067484FF4C1BD738A794A585D3B39592438254022BD0ECAB + EBE961DB08ED1D1108D0D11743FA2DB30D702B51214167FB4CEB98A50C3AC2A9 + AD490368282BA3AAB0305B19AA559087809568BDAFAEBB876D177AC7FCED8849 + 207D96F939902FB14A66F9CC9C63CE8108A7AE5E4D1AF84E7111CB674CCF56CA + 6841E46160A5D67A6F5D770F8D63E0C6048E802C504A85886AD77CB77DBC3F12 + E54C12C8FAD212567966640B348B9205C02AADF59E6470E30213C83CC3C09F6B + 1E010A95A142886406DCF6F1F040644C647D6909355E4F9688B488C802E059B4 + DE9D2C2E2920407B5F983C8781CF328F00D34424046404DD767BFF28C8040E68 + 061E01AA357A572AB8A4810964AEC3C06F9A4780E971A43330027210AE496021 + 508DD63B53C5A5048444BB1DF86395BC2B8E7404DC7647A2DD719C8B58E51E05 + 56A3D9599B062E6520407B5F5F6C4D5AD66160461C6904DD76C78379B92C9F56 + E8029A040900AB417F962E2E2D600C1926CFE148203D71A42A72B9BE010E0241 + E039349FD676FF92362E6D600CD99768F7A1387223F08C20F7036BD0FA9318EE + 42DA38609437740AE9B86F1E73CD9C2CE0AC8878B5D60781A70E5FF983EAEF7F + 98E8DFA75F4188EDD6C505F999C00181791A3A456411A0E764677D191E1848EA + 30BF23C0F86ECD040E203C063C8FE615E0EE78BBA341DBDDD93F41645AC0FAD2 + 626ABCDE4C60BF882C42B316F8F0747F982297AB15B8278E8C046CBB7322954C + 193814A7B55E0B7C50D7D5CDAB5DDD89DD3D18391074BB4FA65BC99480F525C5 + D4783D1988EC47E471B45E07BC5FDBD5FDEF51D2DED7479EC3A1E3C8A2F81134 + 10B0ED93E9543269607D69093533BD1988EC13580CD400EFD5750D3F8407215B + 8012811022B7826EF7A9F12E1869016395F36620EC055902AC0776D476F58C7A + CE0D43C62AF977D0B64FA552C97181F525C5AC9BE9C91091BD222C015E00B6D7 + 0D6AEB6819822C8D23FF0ADAF6E964D7E498C0F88670C670F284D6BC086CAB1D + A1AD49209B8159F176DF0CD8F6E9642A392AF08DD2626ABC1EA788EC1161691C + D75837465B9344CE8E57F246C06D7F351E7244607D4931EB677A9C82EC16A44A + C34B40E3586B2E05641350264808B81E1C07390CB8A9A488F5B1B6EE12E1C968 + 24B24144B6D64DC28B3F81F49966B3D6D132A55408B816B0EDAFAFDCBAC577C9 + 7C17BF3D7B16B6D3F9B1084F47A37A838EEA86CD3D3D6CE94DFFCA341459244A + DF6B994D4099526A23D09B6DA833BB2E5E1A36DE31F441446B808F7424DA89D6 + 5B1B7A7B7973948FEA74F3F2B973B8323322CB0AF2AB35BA17516D03B1798765 + D875ABC2B2D852568A0368B97C994DBFFE36A9B8440C60CBEC622A72F3B81ED5 + ACF9F12C3FDDB87947E69ACA54FED7F907937C3A45F8FEEDB90000000049454E + 44AE426082} + end> + end + item + Name = 'comment-text-script-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000021F49444154388D9D524B6813 + 51143D6FE67586988F4D53101583B6368B924517E29412849696121715145D74 + 61D0A5A220F841978288C4AD224685425C1515D4A25DD8BA905431AD2255B009 + B5161A6308536B32662693C9755132DA60B5F6C05B3CEE3DEF9E73DE658AA258 + 5827344D133900241209FA5F72575717030061BDD36BE0BF5F765E4DB27F11D2 + A7775501D87DBCAEB8162B2B86AC4581012005C09039C3EB631D24544D4892B4 + 51D3B4BF2B508BFAED07A3CFCE66DEBF5CDA60FD409343C4C2FD27E0650D47DA + 1BF061AEB2BA028F2CBEB8D2FCEA44F8DD8D9B54310E32C61C28015097EBBD4E + CAF6B6631F5314C5FAD3377ECE7F3F59BA76406D725B77A5961698F3F37087C3 + BF7CA552288E8F3FE7F5C41AB6791A4A39A6BB058F0F725B1B4AC924D458AC3E + A32DAB3E0051526853E0B23937695167A7E88D44008000C048A7511C1B1B25A2 + BD02B0BC55B503004484C72323879ECE96D5AA61DC2A4D4D61E24D063D9161D6 + 13196693DF64084E673F183A5830180400C8B20CCEB9158FC7291A8D2233FB71 + FFC066ED617FF3924FE0FC53E3E0A05370386C81FAF434B444E29EED291008C0 + EBF55AA2282E562A95F3035BF5D8E11D7A8A31D60A00CEEE6EBAF8288B89B75F + 58607B235DBFB0078B43439A9D01118188E2A6699E29140A39BF5F0720955D7D + 7D64CCCC0044B8742A64E76066B300F0D556E0F7FBE172B990CBE590CFE7712E + E4C3F1DDBE10803B0CAC156CE50A13910AE0E84FF215DBCA363CA69A00000000 + 49454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000031449444154388DAD945F68DB + 5514C73FF797E497344BD23F5BE95C5B1B97A64E68A7A9D208568B76305F86F8 + B24E7DD1873DE81E2A2A145F7C119F045F84A2202AC51674F8688A8376434B27 + 9359B7D4655B0761F44F4AD3254D9A7FFD25F91D1F06B1BFAEB46378E0C2E59C + 733FF79EFB3DF7AA70385CE5FFB14BD96C76D00E303C3C2CC160F09149914884 + 482402801D20180CD2DBDBFBC8C0B9B9B9DADCBE3D902D5588258B0F0D0AB77B + 0550DB7D16602C59E4AD1F6F5912F6B23B1F3D273B7D1660B8DDBB6BD21EF6C0 + E616E08DB5029F5D5C7C68DAF8D0937B97EC73DA08B77B1F58688A942EDFCD7E + 1F4D6C4E8B59BD0742A0C9C5F5C5947435DA95540CE571D7D9B2D9ECFE40DDA6 + 52BEEAE68967E393D7CD8D4B5D5E2375D8415539D20AF7379A4A6B8A170B45B3 + FBD8D6DF6B6DD5FD4539DEAC8F7C5018BF7534FE4B4461BE5A0B54EE0F01BC80 + A74ED6DA5DD2BF9F28E6C5ABF3E75BCE4FBDADB9F4939EC141C95DB880BBBF1F + 6767672D49AA553627279BCB2B2B9F5880BB58E185663397348B4FD80FB5E238 + 7204474707852B57D8BA79D37ACFB91CC0CBFB010F68071A0F29A7FB9F4A3289 + 542AD48542D87C3ECBE94AD7AE2911F90E216207585858B050B63D4365E8BE53 + 79EFE33FB99337BED88AC59A5C3D3D241F0B92CA940068AA7751BFB42495F5F5 + 8C203FABDD7E9BD9D95901585E5E667474F4AFAEAD85BE132AFA9EA6EB5FD60F + 0DF1F90F517E9DB9AB004EF677C8FBAF1C2437355510E4A81DB06D630D00D3E5 + 7299898909C6C6C6E2877DCED75B3DF7A085AF4DC338578A468F8D9CED63E46C + 5F4D3C314D6C0D0DEEEAC6C687B516D1759D502834004CFBFD7E89C7E3EB364D + BDF16E20FFE7408B31AEEE7747A7CDE76B6D3873864F47FFA8957DEECDA769CB + 27C8CFCC2C5944111100331E8F7F0B7C5CA72AA9F041E3B8A6D4296777B78861 + 60DCBEAD44449E0A34912F9401F0B87534710334EC543901BC242297D3E934C9 + F40AAEE75B63222C9AF97C9BE674A2745D2A8904AFF578FE5B656C509C9F07F8 + BD56B2C3E12010082022ACAEAE92C96400F8ED1D3FFE463D047C053CA39472EC + 14111111B80A9CFE17587050597BE0EB160000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000003FB494441544889D5945D6893 + 6714C77FE7CD6B9AF4CBB68B4B33ADB6521CAB624D264BDD06937A33585137EA + 98BBD8A074200C2B93EDD681B0DDF4A2CC1BBDC8C5BE2A0C1915DB224C7BA163 + AB4EECA614A9D55AD3CD119369DB7C35366F72766113635B21CA6E76AECEFBBE + CFF3FF9FE7F79EF388DFEFCF00A8AA8A88149B17B1EEF0F4F4F46113C0EBF5AA + CFE703501E4531F9B2DF028140FE85A9AAEAF3F9E8E8E858BCF19923100888EA + 433973E1580AF05F20CA09E796998BDD2FFE19E3C25454C8E9A82E9F173C0BB0 + 7F9B67D9D3989AB35CA8E2C254548EFCFAF7532111796850A0F56444075E5B4D + D7AB2F3C0B22FE3F8844640CD5A0822522543B6CBCB7D9A5AEB215CCCECC5059 + 59591A8BC5669E1691DE8DCDF7FF7079EAB3737F5C9F3013119C9AC286B2A1DC + C9C42F9394D69671FBC64DDEDCE8E6CAB5596E24B57844EB56DA7B9B8DBF3ADE + BE19B0ED8CFCB6CB369F6832C8DA4504A2A0134A5484E755693788BDB391DE4C + 93DC2D0A91CD90D9B7EAE460DDD411676DF8D24F866A4BC11E16E786802174D9 + 545F290AD1BDA475E6E73303F76BC2BF7F2A22DBCAB66FD7F95BB7B04221AAF6 + EE45ECF6C73ACA8A44889E3AB5964CE6932588968B9A5233D85A354B5CD35EA3 + 72A5963436629495110D06490C0F632B2F4779D45F0A88C3A19A48EC2ACAC010 + A9341DA58084756E0ECD6430DD6E6C5555CC8F8FCB82A80A14360628B796FC83 + 27E47ED3F322E2281BCCA6E25DF39393D81B1B75E59E3DB982F34B13E7CFCB83 + EBD7EF6B56D7299A3445444646461E1B5255A5B3B3336F24229BEEA64B9AFF91 + 9A2137F12B73972F37DB1B1A049B4D8F0F8C89656551608569F0EED60D3C181F + AF01FD10E5A8F8FD7E2B27BA6020AAAAC3C3C300643219EDEBEB93FEFEFEC08E + AA7BFB76D827DE1064C8B9F5657178BDDAB6EFA4CCA52C01D4E930193CB65BA3 + FDFD920E856EAB6A93A9AA66010A8043C02155D5B1B131E9EEEE96C9C9C96F1B + 5655744D5B11D4A3E7107E4C5DBDDAEED8B4898163BBB51093020E9F0FEBF4E9 + 7AE003737474340FD0E3F1E072B950557A7A7AA4AFAF4F2CCB0A3EE734F6EF2C + BFEDF056A70F8A480990D5745AE683418CFAF51C1F187BD839C09ADA0A5A5BEA + D4E65A255624FC91994C26F306E9743A9F9F387122031C053E5FEF4C25B654A7 + F799065F14DEA6562482ACA9E79B93D772B324DBB678B4B5A58E159E5AAC48F8 + A5C7DA545573982EA9EAC7C0886559AC366631C59C06A1A2AD4D4DB79B99DE5E + C866713A4C1DFABA3D87288F2A138D028497CC81AA7E077C0958E170983B77EE + D0EAAC44C435084CC5CF9E5D6B7A3C682A2599584C532323B9392077B46C3249 + 3A1814A0570AC55D2E17D5D5D5A82AA15088783C0EC0667709A7DE5F8B21B201 + F80A781D285D5C5C41CC01DF0307FE05822472A321B91F950000000049454E44 + AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000003F3494441545885ED566D4C5B + 55187ECEED6D0B6DC116E6708CB28FCC8B2C6C99711B04156D643FE616429CBA + 25FC3046123193190DD98C269ACC0C8C9F9144210B260B6431CBE087C98C0C89 + 31B812990BC5B85066E6463B6AA7D00F2877F7A6F7F6BCFE98185C6F210E32FE + F0FCBA39E73DE73CEFF39EE7DC974992849580AAAA080683105D2E576A2508C8 + B26C02001100060707E95E1E5E5959C9E6BE857B79B0115609AC3801D16870CB + 479798D1F8DDE26AD34E0EC0704F4302579B762EB72B3226B45A82D512AC96C0 + 90C0DD8288AE30C67E003009801BC5442211E4E7E767CBB29C99C0FF2D010364 + 29DFFA7273C9E4571B2687C067FE04E949C3D844228186E229846C1A3EBB6901 + 2B2F2F4F2DF1774CFE9B89677F39F5CEB9CA48DF3113F84B00DC8CB18CEA12D1 + 34804F6794D4F1E528C1C58D5317BFCE8DF69D30173EF0A66DF76EC8172EC05A + 5A4A59A5A5860BB82CE7267A7BDFCD9D8A5C5B0E1B7EAFFCDA07801A1C1E0FC4 + B56B61AFAA82EAF381C85858C16E87ADA2026038B21C0ACCF0D98885098293D9 + 6C000071CD1A080E07621D1D8BDD25D372102836E5AD4FD26FA9711E8F6F34B9 + 5C0080DC9A1A004893401E18803A3676247A4BFF3C94D097FE1272CE9FFA5DCF + 0380B3EAD8D8A2F1E6A22200D8F7D7AC8E7DA783B76D38BF499C0FAFD74B8CA5 + 4F8D8C8CA0B9B9191313130C404941BEF389139B592BF3FB0F679595D9FA7C53 + F8F0CB742B3FB3670B1D3EB40DCC62A92EB99FD655146587C5B9F6783EAC562B + 4451D470C70BA6280ADADBDBD1DDDD1DE69CBFA2EBFAB96432896BB20C9F2385 + 278BE8FD5B4343C7F75657636FD5A68CD6B64A9249BD7CB9F1B5F2BCB70C3397 + 24092E974BF37ABD6C4E019FCF3797751711BD1E8FC7E3E3E3E3D0340D00B0C9 + 6946FF0B1BAC66D174E5BEDA5AF777FE59B476F9D2F6AE7F6E1B6A2BD761FACC + 99444A4B6E5EF4122A8A82B6B636F4F4F4FCF14FD6DF04020144221100C081AD + B978F161A7C080AC648A6036D1497574F4BD3D8F3D0E4FB93B6D3F5114C86412 + 9855927294D1D1856D383C3C8C9696168442A14E227A23168BC50381C0BF5903 + C0D30F3AB0BD20EB1213C51D7315D36EDC20BBC0F049970FBD3F8EDFA9327BB5 + 6E07D53CB215AADF7F6841028D8D8D21CE7983AEEBDF06020144A3D14CA105CE + 830749B0DB0100B1CE4E90AAE268FD2E1CADDF65781748D3C080424302440422 + 3A45444DD168743A180CFE27EBF988AB3A000C24AF5F7F3EABACECF6A020009C + E3838E9F8D1440EBDB1E7AC8C94140FA2400B8DD6EE4E4E4201C0E23168B65CA + 1A00B05F72E08BFD8565CC62F9C9E1F1640B361B12E7CFC3595707230B030057 + 14CCF6F7430B879B96DCF9080C387D603D1E2DB65701F89801DBC19879A13544 + 94007032C5E9D8DFCDE7B2E59ABC60D10000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000005F3494441545885ED985B4C1C + E715C77FDFCCB0CBDAEB0D0B2CE1520C1873B5DBD8480D5294E018BB0FA1728C + 9348EEE5A1496C55ADA3AA529EA22669FDD08B915AA56C2B4B917A4D8594A8B5 + 54C90235BE2591C5ADB1B0890B848B616B77CD7AD76681BDEFCECED787184AA4 + BD109B9513A9FFB79973CE37BF3973E69C6F466CDBB68DCFA3FC7E3F7EBF1FCD + E1709C7FD03029F4E7582CF696DFEF47039EECE8E8906565650F1A0A80DEDE5E + 3C1ECF072BC71A404747072D2D2D0F8E6A8D464646F0783CABC7CA03645997FE + 0F78BFFADC036AE90CE3DE30815832A7176F7258B0E5A745003200FEECBD1B0C + DF08880DA75AA39EC30DB2B5724B469FB4803D871B00E406337D667D716BF0D4 + BF6EE35E8EE7F4E2CFEC28E24B0F9933FAA4059CF08699F045361C6AADF66F2F + C8EA9316F0B5F6AD1B0A73AFFAE2D6E04F2F5CCFF9237E756F25CD259B32FAA4 + 056C2AD994B589DEAF6C6635AB4F5A826777166F28CCBD2AB729026948D9AF08 + F13EE00662999C171717B1D96CAAA228935901BFFDCEE47D8D3A932A269E6EB4 + 3F7F6C7BF452A1E712FA821B190F83917EBE87C2219ED0A7A8AE0E33A129BCE9 + 11E9015FDD5B492096BCA751174D18D33D1FBADA4A867EB39078EFC2AE2519FF + 0E500F5884487FCF8A943C028947CA18F87A69FE2FF7945684D202667BBB3249 + 4F1ADFAFBB7A6E2119FEC73155886EADBC5CD16FDF463199303734648C95C924 + F16BD7F6270381F6AF5658F6E5A2062709FADEE7D2DBDB557863735B9B626E68 + 20E17613E8EB135A4585CC2B2DCDB840FE8E1D2C9D3AF5B8118D1ECD45A31E4E + 5C1F45468307D5C2426D2563791515E45557CBD8D858D60594CD9B313735013C + 9F8B0C0692C1058012C56AFD94C15C5747F0EC59B1303BBBDEB5ECB90074A8D6 + 22801BC9E5E54F19F2AAAAB075764A9948A40C8C8E8D119F9BFB27F0CADD5393 + B9007C542D6F0235EFBCB1B484BEB080565808801002CDE1481B6884C3C4E7E6 + EAA594FDCEA13B7AFF8DC8276D667A7A3A6D90D56AA5BEBE3E23919492F1F171 + 62B11840F5B59999DDA551CBE56D79CB17A357AF3E61DDB30780D18F7D4899BA + 7395975829AEAC44A86A81D4F5F6DA42D3995F0D2E205A5B5B337E19EDDAB54B + 9E3C7932ADDDE7F3D1D5D5C5C0C0C06A83B3582C7F7CB23078F4C5AAE57D4255 + CED80E1D422B2AE26B2FFE4D24D3B4D6EF1EFEB2FC46472381336788BB5CEFE8 + 49F9ADBD7F72A1019926F66BC0F1540629257D7D7D747777130804868123C0C7 + 4208229108233E8317B6CAF318C6DFC3FDFD9D5B0E1CE0EC1F9ECBDAF8F39B9B + 89BB5CCFAA8AD8FAD2A3F6EBDAF0F0704AC7E2E2626A6B6B53DABC5E2F5D5D5D + 0C0E0E460DC3F809F046341A35666767098542AB7EED9B1EE69966DBCB098FE7 + A984CB6536D5D4F0BBBF5E65EE3F4B29D77D6C77391D7B6AD01C0E2DE1F5BD72 + A8C97AEC33BD24524A7A7B7B713A9D04028121E0889472727E7E9E9B376F22A5 + 4415F09587F3316B82F373219E6EB4FD5B53F97DE4A38F8E996A6A70145A48E8 + 46CAF50B6C668410585A5AD0DF7DF7853C45F9C5BA01BD5E2F274E9C60686828 + 6A18C68F815FA7CADA0F5A8B78F9B1A22DC0E3FCAF7C5C49AF57241717E5C17D + DB9976F9094552B79A29979FBAAAAD68454526FDCE9D97D60578FAF4699C4E27 + C16070504A79C4308C298FC7B39AB5B5AA7C4803E812AAFA3D9435E59DD449B8 + DDA8050574FFE532E3337752EE1A1A6BECF2E4F1FD98EAEBD107073BB3028E8E + 8E72E5CA95886118AF03CE482462CCCECE120E8753FADFE5B599EAEAA4B5AD6D + F57CE0DC39927E3F00BF7DBD1DB2FC14506D3604A22C23A0941229E5C0DDAC4D + DFBA750BB7DB9DB69701C43EA9AFCBFAFCFC37A594AC6CAF1493899509D2FDD6 + 082EF772CAF8F6D64A0EB4D762844248A4375B067B809F87C361636E6E2E6DD6 + D66ACC17434AD9935C5A3A1E9B98D894DFDC0C4032185C9D287555760AB6A4FE + 602F2BB122A5243E33037021EDEED162B160B7DBD1751DAFD79B156C4536B342 + FF911A6CF9EA514551DECCDFB913D56E2774F122969616B42C5B2D0C83D8D414 + B1999920B03B277FAF0E365A713E558610A213F891809D0891BFAE602975091F + 4AC90F75C3B8F45FB5E584316BA1764A0000000049454E44AE426082} + end> + end + item + Name = 'control-tree-script-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000025049444154388D8D524B6813 + 51143D6F5E32698CD144634A53219A4E6D71A169112C521C2C34B5A2F8818288 + 922A880BDD08E2A260160141C15DC185F5831B412A2E14C46C5A063451A81D57 + 2DB45934E9C734C6DAE8B47532CD5C1736A1D5A83DABCBE1BC73EF3DF7B19DB7 + DF17B14EE853A37CA6B77B0D670180E4B57DF4BFC7D29D21568917D6DBFD6FB0 + FCCB7D5D06FAD428E754C4B6E4EB084C135FEA435143B055141BD9893F382608 + 02DC6E3724498A00402A958A1A7B8EC152D350167D4B3CC3D2D8BBCA13D8ED76 + 489224039001C0EFF7CBF9866645DFDE5CE4547C70401FBE2E33739EEDF60128 + 6D4A0001E9BCF12B0300725353930C00AAAA461CA33145AF0DBE39A90F5EB994 + 7F724FDC6274B1AD4EFBEACE449401E1B80595602E4334B4A727B4D829478DE7 + 9C1808C048A7C9D9D95996E8E3E3D5DAE0E0AD9281A2AAAAB25247171B430AB7 + 58CF6F3635A7B0A916B6FA7A2C0D0D61AEAFEFF76BF92C854201D96C56F17ABD + 0A00E4723965D9146065E2A3495EED774D4C14A9A585BBC3E195E5013D998436 + 301023A22382288AF07ABDA510658FC723DBAD1C45C6BF3EDFD03E67EAFAFDA5 + E16124D419B485FB595BB89F7D98B74170383AC010AC1CE2C82BA5CAE5094B34 + F99D886EE8232367F79F093A061E7795BFFC8FAABD5888C77B2A86C8B5CFDAD1 + 64EF8BD335B3E38220D4C134614C4F53F46506898F9FD8AE1D2EBADB73100BF1 + F8E1D521464BF56263871270AB60C81436B687481F1B038870F36A6B39072393 + 018059C63987D3E95C3381EDD04574FB72B86C7BDB0AE02103AB03C39A0B10D1 + 1C800B3F01DBBFEB96F93906940000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000038149444154388D95925B4C5C + 551486BF7DE69C19668061048A763A30A5A556EE1015A2990410138D8D923E28 + B12FF5D207518C1A135E9AA88DF1C1F88A441B13624D4C88A1498DA1B12F6D90 + D88BD60A42B998E112A010062AF430CCE5CCCCF2A199526C68F14FF6CB5E7FBE + FDAFB5B62AFEFC7292FFAF0B91E0D5E6C5936FDF53D0018E37154A59816B47A4 + DEE1654E8FAC6C5BD701CA0A5CD41766EF087879D6BC6F5D07B8BEB4B12318C0 + DC5AECC1C0CFCECFAA1D131F200DB001366371C496FF63C774CEAF275FD722AB + B6F4FD36A7793BE09D64A5A5A5B8DDEE207022180C9E5A950C32F6566F3127CD + 15221397EE9B504FC35CAECD2D7BBD5E72FDF55881630D4003105592FACE397D + 71616DF1F76D61A170F236D0ED76EF01FA011FF085D3E9ACD08877DCB2220D9A + DDF96E76D26C6E0DFFB4D09279FED1CC63FB1E51A050E9E6041104185A30AD55 + FDAEA47BDBDBDBA5BFBF3F6F6868A8C5BE12CC77CC5DAB4EF89FEC7833DC3B7E + 68E37C9FAEE4F94DD0E6D494021159DA9DA50774B69308484A1E8ECEFDF04CE4 + E26B86D3F15C5673B3AC9F3B872B10C05152B2694D2631CF9EDD65DDB8F1511A + 9800A63B3B3B7DC02A70C6CAF577C4BC551FE630BF9E2991623DDF87E1F562F8 + FD6C5CB9426C6C6CCBFBA9F57580261D20168BCD1B86B15FD3B42070C2B2AC53 + 317B0E92E1FE2D150FD90435920885904402676D2D36B77B4BBAE8E0A012916E + 843E0D20140A6159D61D93699A98A6093033A37B8BFE320E9C4E45A33763A3A3 + D83C1E42BB0F30EE2A64DC55C8B2EF316C797902AC09D26B03282B2BCBD375FD + 4BE009C0EB743A356397FF5ACC5BF95E42D98F1B24BA9E8EFF194E2E2DBDE038 + 7890AF7BAFD3F5FDA0FA796046456209024F15139F9AAA42F18D0DC0E7F31500 + DD8D8D8D86655945A669E66AD15BA9A4EBA1224F86F67E6DF26FB3263EF687A4 + 922F2B4DCB6F7AA98EA387CB397AB89CC0E37BB0793CC427270D89C664CB965B + 5B5BE9E9E9617E7EBE46591B1F678FF67DF29662ED59FBE41914D940767C7212 + 575D1D9F765DE2E65A1480778E54E3ABA8203C30F0EA16605B5B5BFA93F58AEE + 78234313EAD55495A6E4454745A5483C4E7C6242898894EECF25BC717BEE592E + 3B9AB8003C69E01CB0EF2EF67ACC5B4DB2F61019CB1F8C8AA46653E1B04F7338 + 5076BB24161668A9CCDA74C757890C0F03FCA200EC763BFF95A3A48ECCC011BA + 8D6F2977FC530B7C05D428A58C7BCC2222701578E55F6D3C67D1AD8D98C00000 + 000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000049949444154488995955D6C93 + 6514C77FA77DD7765DB715DC0705CA36DCC824239B6438109211B8D018A25E80 + 911821215189031617BCF0C60B122EB8C1CC84A877101D267EC5C008D1003A94 + 0051F6159963D591810BB0CAC6D676EDDEF67D8F176B4737278EFFC59BF3E47D + CEF33FCFFF9CF31CA93872D5025055151159A89DB53E34D9F7D3A17B270E321F + 0C808660BE36047D8068DA750136B45E1A9EF7D05904AAAA0D411FFB372CD5FF + DD3D07AD978645F5D16EC6F495A7A37A1C8932C76629363F01C0D5DB115455C8 + 6C5E88BD4018AAAA576E4D70E5D6C4633966B010890C0049C6F1F69D6DCCFBF3 + C70B93151BB74C563FD761E7FA51D51919B2EDF9D6F3120C7FB81B8002AF87A2 + A23C007287AE32DA7B91F0781487DB3BAFA36DC6211DBD9D88FE378139DC4F7E + 7E3E1E2904CB8582622571C5EF93974C50B8FFF8BC8EB70F6FC38AFCFDC8E821 + 9DE4B2B232BC5E6FAD88D402A2AAB52525250F8A0C774F1810110B50D0D38BAC + F1779F9DEAFE63518317358B61AE423AF3E1879BB1E9DF35353578BDDEF322B2 + 1966CAB143C5B975BC610FE6D235568E834FCBCDA13DBB23DF38EB93D75FC8D5 + A9D580EB5FF9514521826A9BADDC33B2C9ABAAAAB4B9B999D6D656060606EAC0 + 3A9FDFFD05F703350FF292132D6F46BFCC5D67F67E2FE8FA9980B3AA68564589 + 1C10F4995904D91091F46D6D249938579D0A8DD6997D071D0ED990D7B859CDC1 + 415277EFE2DFB91371B96635612A1C66E2D4A91558D63BB30842A190ECDBB72F + B3B91B716C8D553F8F8A1C09DA23B834F9B4A3A050DD959538F2F298181A2276 + F9324E9F0FE5610B2A201E8F6A2CF65236410BD0087C90B63BD499437CE52644 + A4D0306D80118DC751CBC2282DC5E9F7630E0C649E0E9574CAD30182326800DC + B973878282829EE2E2627F3A809EB1B1B19E4822897BDA61EF88633126C61997 + 691E306FDEC45559A9853B763C2C9974F0B18B1765EAC68D51B5B54CD14903C0 + EFF7E3F3F9325D29AA8AD7EB25C7EB24369D8FF77F71AF39D99BB3EA7C7DB2AF + 277EED5AADABA242703AF5647BBFA452360AE4180E5EA95FC5D4C0C062D0DD28 + 1F3901962D5B466E6EEE5111790B5802D41A86519DE3F67C17AFD80886EBC214 + 2ECF621D6F5F675EEF67CADC254EA7188100EF1DFD597EFDED9EF4F487E91F1C + E5F557EB35353C2C7634BA1AF8243B07B53E9FAFB6AAAA4A43A1506D241201CB + 6CF4F57C45AC6EC789458EC401432D54B503E1EB446FEF764F4D0DED1FBFACD9 + 3229E059BB96D4D9B3E5C0AEB97DC0B163C7686A6AA2ABABAB0EB8E0F9AB73BC + D0EB0EBE1DB8ED6948FDDE22226EC0D66452CCA1211CE52B39D9DE3F5D39C0F2 + 25F96C591F546751B1A4C2236FCC2D539A9A9A08854200DD0A2D8823527DFF4A + 6C5DD1F85E43ACC3D93339150E23CBCB39F16D9F64AA73435D40B7AC0F921358 + 422A3CF25436414F2412A1B3B373668D33A7235AF32241A31383AE3180FC6DDB + D4282DE5415B1BD836B91E43CF1FDF9E9168462A6B620260C400B02C0BDBB65B + 980375C0E4938D44633121D67D06F456F4DCB91546208026126245229AE8EC9C + 19A199ABD9939324878604687BE4B410C34DC96B8709EA089F3F711AB758AB80 + 56601330FFA098461CF80C68FE077A903B44BC641D970000000049454E44AE42 + 6082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000042E494441545885ED555B4C1C + 5518FECECCEC0ECC0E648720D815AC173216DC12925AA8AB1037522BB6215EDB + 26BC18C5C4D85A1F6C8AD107931A8D51AA86A889041F6CD3278D695A13696D68 + 421B22AD4AA2C892582E521AEC96DBEE32EC616EC707DC0DB08365DD79F44F26 + 99E47CE79CEFFFCFFF7D3FF13FFA02C4B22AB819C6CC2466BFFB644358412CAB + 8254556FB949606932C26F142BA47EAE1E7E80B9717945FB4F241B3CE7C6A5B9 + C4FF04D23D90EDDBB946C09899CCE85A599B82F2FB292BB6E5093E5EB839EB43 + 8DE8F886B18E59ABAA0A45512C4DD3F8C1C1C1AC096413AB08040201C8B20C59 + 96E1F1782CD334F94422014A2926262600006E18D74AA312562EC8B20C4551D2 + A6240882A5280A344D4B3F911BC6B5F2C90527405F5F5FDA9442A110114511AA + AA0200883E0D1DFFDDB8D636FB8664F84F252C45512CFFE805576DDBB1026BC3 + B22C9E52BAFC7FFFE300E01A094702A15068559928A548A9A174DBF390E09E6F + AC22402985A669BC288A1004C14A659E4C26D31827DFC83656FAC42A02A66942 + D77578BD5E0000630CBAAEC3308C34C64EC661C5A7330E2D18E9C15E72191545 + CB7B41D62B10031830BFAB149D3FCFB9224356E061CFBE57DA73A6DA2C6A03F0 + 22807242C8BAFDC5188B01F8F8B17BE4A339CB5037EDFEEFCF7C7B2A3839F2AE + 27107843AAAD8576E912C4CA4A965759E948C0D6B4C24477F7DB85D333A339CB + D02B703DF5F40A388297E570184249097C0D0DA0030360CCD92A389F0FD28E1D + 00C1A19C65185DD0E3F1E91B5E89E3FC449296091717839365CC7575DD4A297C + CE3254F285CDAFCF79F57ACB1AB7E7E7EFE215050050D8DC0C001925D07A7B41 + 87870FCD2E9A9F5D4F98AB9D302543D334F954E69AA6F14E324C7D7FFDF1DBC1 + ABB33A007C4D87876F9130E0292B0380DDD10513BB4F4EB823C3D3720D9AB891 + 8E4D91C881BC60503A37308D0FBFCC34AAA77756B003FBB78278BD8DF7DDC636 + ED28CB9F72651AC6385CFC552978E4F6A163EF2FF6F71F6D6A6C4453C3DDEB0E + 2B5155793A38F8EA6B75456FE62C43C6D8F8A261F746E7EF2D21A35FB4EB6363 + 2F99376F96FF105940C789818CB35B9FDB8A2743D5588A445E79B03CAF7D432A + 48550200307A01D19AA7524B37EC78B44E3FF7E99C1C1DCD5B320D9E30D64987 + 86DED9F9703DC275E50E67718CE73922AA6A417268283719C6A8797AA1E7AB19 + 5CFEE6172208351C082078605CBBC67C1CC1472706D07D717C6D2F90832D35AC + 795B156824B23F2719164B82D1161B432D50EADFB78F713E1F0060EEF871304A + 71A4753B8EB46E77EC0566182040C0711AAE05AF370DAF03F893C4502BA0571F + 1BDB9B170C2E83380EB06D7CD075C5A902E8782BCCB6F86D30207331DBD8A3CA + F87C4F2048BCDE1FE570389F932424CE9E85BFA505649D8968279358387F1EC6 + D4D4E19C09700438F9CC1D78E84E5F03806304A806219E7FDBC3184B00E8B46C + D6F637E9CE29983DB9813C0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000793494441545885ED985B6C13 + D919C77F676CCFE46207C7242C4908384ACC251B9A922E4D4517B24A5055A265 + A10BA5ED4BD9AAA81740458D7858556DBA651F7ADB7605AA565AA9690B6D1FAA + 8AAA5245246041440868DA6543A049808425261B722317C7761CDB3373FA10DB + 098EBD6C48E853FF2F9EEF9B73E6FC3C3AF3FFBE1961DFFC0A19EE4AFE17F25D + 3A4574C4BBA039D60C77258E175EFE35F0AC291B02D7CFB42F1830F65B595DEC + A8A92E762C3D1670E2EA4301389F666E1C90EA6207DFDB52B864507375E2EAC3 + A79EAB2C21C733D1FF0117ABC41E6CEDF32F6AAF3C2BC501DB5BFBFCB4F6F967 + CF48138B7FD82DF4B053CF29B881555DEC5A134F05181DF112BA77BD21F98466 + 8470795B1A95E9C91ABFFBC5BA89ACC53FE166C8FFE4414912E94EE4E5E5515A + 5ADA08D44C4E4ED67575752D86EDA9654D4EB85C2E1445C1E198356D9BCD465E + 5E1E003E9F8F68340A80E6AEC4B67CD5924385EE5CC3088CA5065CBD7A359AA6 + 35C6C21AC09D9999D9585A5A0A70B2B3B3D31B07746C7E05C70B2F7F1D702F21 + DFC98177BFEB4D0B18D38F3D1E8FB4DBEDF1B8B1ADAD4D002D407231DD5F94A3 + D6AC5AA62D9AACB5CF3F6F8D74801C397284AAAAAA44BC65CB1600CACACA9052 + 02A04787988A86D85351B82465B2ECADF7E7E5D202A6D145559DB51B6DA09DC8 + C436A0542E0E2DBD160AF87DA03D1E4497156164B99E69AB9616B0B9B999B6B6 + B6E474BBD7EB6D0906830038766C47CBCA9D789655281DE0A5E6E66698793A9D + C08D587E22180CE2F7CF18AE261534A1CCAF428BD36315671E602010201C0ED7 + D96C363233331B811A5DD7EBA6A6A600300C2331365D155AACE6569C79809148 + 04D3341162B6C898A649381C4E1CC7650427D0C707D22E64B9F40EAFBA4DCA72 + D539352B6DF18A49C2A7A063A5933FDDF4A5AE249AA65D88856EC0A9AAEA85FC + FC7C8086919191F6E9E96900D2BDCF0841779E3E7AF0F7457F331D4AF4D3C07E + 602D9039F78FCF679348880257F796CBB7EACBECC1747BF0A5FAFA7A59505010 + 8F6B9A9A9A04E0B4D96CC4ADC62200292BAB57E73CF63ED335147C73EDCDBF98 + 761139288472DC5A50A0E88F1EA1A82ADABA75E90101691844EEDDDB6EF8FDB5 + 9B8B32EBD23EC5F5F5F58F197553531340A5C7E349E4A2BEDBF8429F77561717 + 258C5A4A79C7DBD777C96CBD58A608F176F6B66D8AB66E1DD1FE7EFCCDCDC25A + 54246D2B577E2C64C6F3CFE33B7DFA45737AFAC0427DF0EDB9816DE20196E023 + 8084510B215A9FF3DD66CC98DA6571B9ACF13B662B2AC2E676CB7047074F0254 + B2B3D1366C20D4D6F6DA42016B99A99500849F2B475F56788199A6028060C4F0 + 0F0F0DA1C20A65B69603A0793C04CE9F17631F7EF849D7CB4D0B78FCF871EC49 + 0B00747676267C30EFCB5FC0A16673FA3F8F123E685158B1695C671FF4199393 + 8FCDB5AD5943CEEEDD52C6BAA1644D777410B97FFF5FC0EBB1D49D74803FE9EE + EE8658BB059C8CE57B538C3DD93F1969E99F8CC4E3C1809EC13E292F983E1FFA + D81856970B002104D619374829736A8AC8FDFB6BA594574EFC7354BFD2179A6F + 33838383582C9663595959B85CAE468070387C6C646484D87162EC54470BFAF8 + C0A9E46BDC2488DC4817525E9EBE756BABBD666607B4DF1E497442C92A5C6127 + AFB81861B138A5AED796BAD473BFBA3696DA075555455166DF486D361B311FC4 + E7F31189CCDCAD0C7725591B6BE72D16057EA956703478EACD4877F739BDA202 + EBF2E51CFD458B308CD480DFFACA46F9D5FAF5D88A8B89F4F6BEF6C532C7B935 + CB46E703AAAA8AA669C6DC9CA22886A66900B54288C443A2643BB1B90A2F002F + 253376E6ACDA38347EEB42C1A30FFE3E75E5CA6EC7CE9D9CFFDDDE27B66519E5 + E5447A7BF75814B1FAD067731F7C5CC32AE77ADEE1C3870580D3E924064B9688 + 8269F0EAC615724F455E62AC29E554D490DFCE7EB0EF28FFB8DE101D1CDC11ED + EDD5D492127EFBD75BDCFFC89772CD2D9B0AA9AF29C19A9F6F8D0E8FBCFEA50D + F68369013D1ECF63461DD3FEC2C2C284A518C33798087CCEBD6A5931F14A22A5 + FCD97428742C32D61F51F25D8C9978AD169A42376F1E544B4AC8776512D5CDE4 + EB02E0CCD11042905955857EF6EC376C8AF2D385FA6025B0261E88E814420FCF + FDAC76D918FBE887937F38E4D007BBEB008BD522007A8DE161614C4CC85D7565 + 74F78E130CA5B69ABBBDE378D6ACC6BA7CB9AA8F8E1E5A28604330186C89B75C + 72432D7A4E41C2A887FC91B3A1D633D806BB7F2E2C96EFA05866671A3AD1FE7E + 2C4E27C7FFD84667CF68CAAE617D49AE7CE78DEDA86BD7A25FBBB63B2D607CCF + 25CBEBF5CE1A75C55E1C568D13571F8A13571FE2CED5F403937D6C851CD5E391 + F66DDB12F3FCEFBD87313E0EC06F7E540B73CA632A5972721088827480F3BD63 + 463752E41A887D3DED1D0F3FE80E986C85367D60E06B52CA445FA9A82AF10A72 + FCD407F4F64FA6B814D45617B3B3B6143318442287E701F6F4F430D74A9215EF + AC61E6A378E0FA99F6B9E77B5685909F917F367CBE37C25D5D5919E5E5001881 + 40A2A278D6E4E274A47E8F2E5861474A49A4A707E0E293DADB052B4753B8F2CD + 1272322C0714457937A3A2024B6E2EC1CB97C9ACAAC2FA844E06D3247CF72EE1 + 9E9E00B069C9010176ADB7736247014288DDC00F04542044C6279A2CA52EE1DF + 52724437CDF7FF0BFE1D00247D8A22E50000000049454E44AE426082} + end> + end + item + Name = 'documents-script-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000025949444154388D75914F4893 + 7118C7BFCF3BB777B6191B0D4A17E11FF61EDAB05DEA276F92E1C1549220B043 + 54B3F0D22D2F42521E82283C05E20E1A42B74882A80E05E1286A7670D649D257 + 2A25E7BCCC49AE6DEFF6BE4F876CE8D8FBC0F7F23C0FDFDFF7F9FC0815A5280A + BC5EAF51D9070066CE01E8CB6432314DD3C0CCA8A9B60800F1789C2B7BAAAAD6 + 3A9DCE17007A0381C0274DD320298A82BD72BBDDF0F97CB668345A934C26AF31 + B309807685B1B131972CCBAF3D1ECFA9A6A6269010A26A5C00B95028D4373A3A + DAE8F7FB278948525575EF395BD96CD6072184611846A9524208A3A3A3637B70 + 70F0F4EAEAEACDDD7EB984104630188464C5E07FDCA5A5A5E71313136F745D1F + 62E60480443E9F4F381C0E8D88AC2102C09D91DBD327EBE5E163BFDE65B666CC + 71E741EF3848423ABD85EBC7ED58FC59FAC7A01A715DD73FC61EDDEA52366393 + 0E09FD4454BB77CECC29302E5826B04BFC2C8C1F17C95F7FD5D1DC8CE2DA1AD7 + F5F494E7054D3BBC138B3DB43460D3CC717EA7CED67008722080DCFC3CD25353 + 54B1D66069407659D88F061FE8DF3F1BDCD666F3462200C000505859C1CEECEC + 5B66EEB5FC0522E9526DF87CDA2C141EE7161630F72589CEC80C754666289191 + 21B95CE740085B2560F3CFF64031F9ED3733DF2D2C2E5E1197C3AED927FD65D8 + 79E70964E3F191AA06A552E9E7C6FBA72FA50FD39A24492D304D14D7D7F9DEAB + 14E6BE6E90D2E8E1E8C81964E3F1EE1A005055751F1C9BCDE61E6875A3FB00EB + EEAE2E2E2C2F03CCB83FD45EE6504CA500609342A150D51BCE1E3130DC6AB403 + 9826500B08FB1E61E634801B7F01AF4E1B63521704190000000049454E44AE42 + 6082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000037B49444154388D85945F4C5B + 7514C7BFA7EDBDD04B61DD4A33AC05329C721B0BAC35B63CE09FB9998E926DF1 + C54479C0077930E309837B521F4CCC1E4C9017A34D8CF1698999461F7A51168C + 088906023861E102B36119D90426694B4B6F6FEFBDC707E3DC28B627F9BDFC7E + 9FF33DDF9373F2231C126D6D6DF07ABD93005E3CEC1D009839CBCCB152A934AB + AA2A344D030038FE2F0100E2F138C7E3F1B2FBF5F5758C8D8D35005044517C59 + 96E5C57F451DA2289625D86C360882F0656363E3547B7B3B24497A93887C8714 + 742B8AF2BD288A2FC9B27C5355553842A1D00B87B9334DF3763299BCBDB1B171 + A7BFBFFFAB6030F823111D7F98E9EDED85AAAA9E542A352108C2E9969696358A + 46A366A5B6993923CB726C6464440B04029344E4595858C0D0D0D041EE7A369B + 3D8768346ACECDCD19A669969D4422617477771BD16874676060A06B6969296C + 18C65FE68148241266241299946519B64AEE00A0B3B313B158ECA8AAAA3F8C8E + 8E6A9B9B9B7166DE3BC8111188A8F29401606B6B0BE17058F37ABDD7D6D495C6 + 855FA67FF65DB8F00CD91D7E02A1582C820D9D5C92D39ECD662B0B363535C1E3 + F1EC4E5F4F9EEDF3667E0FF8324FF9663F7C7E7B798CC821022030339EDB2F58 + 41B9F8DBB6DFAC2CD8D7D78767C3A1776E7D3EBCDA9CDE52EC363A0700ACED81 + 1FE2EA01B89CBCDD5CCB3DD55AB68E89C6B5137AEA0D48CE98EBCC19CE4D4C40 + EAE941CDC9930F20364DEC8D8F7B4B77EFBE574D70DFCAA77396963F21FA1F87 + E0F341686DC5FEEC2C8AAAFA68E55C0E004E5713ACB3D51D6DA41AE9A6B1B303 + 360C384321D81B1A1E71A7DDB841CCFC05184AB5B521FB91E3E7C5D653DF589A + B65B5C5981DDEDC6CE634F62556AC6AAD48CFB7E19768F87016418FC75D53D84 + 5D78ABF6E9B37900EF17E6E761150AB89A54317C658A86AF4CD1D5A48ADAAE2E + 001804C15BB165664E597BF75FB1B2DB00E3334BD72F694B4BF2E5C1082E0F46 + 1E0C9A2D0B76B75B32D3E9B72B0A9674FDA3DCF8C799C2FCB7DF81500FA05E4F + A5204522F8E0935FB19BF9E70FBCF47A17FCC120F23333AF39004051142C2E2E + 96093A6CF467E48F99B623E0F3351D1DCCBA0E7D6D8D9899034F1C437EBF0400 + 7049226C2C0180DB01E02745510E7528399D426B7B7AA5A18EEF58F9BCDF5653 + 03124536EEDDC3C50ED77FA09E4661791900A629100854EA1AEF864CF4342104 + E05300A7884828839899817900AFFE0DB89797B89F54E0720000000049454E44 + AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004734944415448898D555D4C5B + 7514FF9DDBDB52285F16B6B66E14AE0246200CE752BE4C50C6C3625C58E6A6E1 + 454989090F66CB96F9CA03C6F7E18B8484872DA30F1895CC2232B0CA5C5C8859 + D990402915A8D908A30D96CFB670EF3D3E40C91DE9B027F927BFFFCDF9FC9D73 + EE9FF012B1DBEDB0D96C1DCCDC41440400CCCC09ACBD33739899CF02985A5858 + 40381C3EF023BE2C8056DADADA5873D56278BD5E9E9898C807F033802649927C + 000E821C198079CF97D3E9E4237468626282F3F3F3ADE1707898881A2549FA3B + 1144B0DBED4876B2B2B240449DE5E5E5A2CBE5D22F2D2D65C9B23C4A4442E200 + A07DCAA8ABAB0B66B3F9048011222A94240966B319A2CD66EB48649BA0578B7D + 3E1F0281003C1ECF0FADADAD1FD6D6D6BA45516C385C89C7E341656525C6C6C6 + 0A997918C0D9BCBCBC672233771CA6448B154581A22898999969EFE9E9691245 + F182C3E1F84910849A7D3D6666F4F6F66A7B544C444E005F527575B5D2D6D6C6 + 4EA793934D0B33737D7DBDB0FF6DB9A4A4E4BDF6F6F690C3E1181604E1EDC336 + CC8CBABA3A06D01989443A85A39AAC95A6A62698CD66EBDCDCDCBDEEEEEE57BC + 5EEFFBAAAAFEF57F76026B78E144BD49705151116EDEBC899C9C9C824020D035 + 3434B4198BC5CE31733F33BB010C32B33B1289B8B3B3B33D4414010071BF4406 + F6462219454444BDBDBDDCDFDFFFA3352FF70B33AF07E4E95144C68E3D87E544 + 8BA04F0340603016FD019C2BB7E0C9F41AE6B639F5457BF6F4E99DD5D93F9DEF + 9AE67465967873864E2DC3AF5F1BD60E4DDE71665C12B071B11C7D4A193D170F + 53940C3B9DCEC8C2F4E3EBEBDF8EA7E76F46EF11A146A387C3582040205CD131 + 3B52A568D4466BABC6F8D20DE8845A534303EFCCCF435E5E466E4B0BC86078C1 + 460E85B07EF7AE1D8A722D258A00049570102CC7DFD2E5E4705A7131049309EB + C120B61E3E842E33130C1CFC051900198DCC5B5BCDA906C826433A005AE16814 + AC28102D16E87273B1E3F7D3BE5326405B35C0984FA907CC5CAD7FF50D90D134 + A8C636AFEC2C2CC0505CCC39972F27123E50DDBA7F9FE2B3B3ABAC722183B753 + ED418578FCF553067BD52F71FF8327D1478F4E192489A0D3B1CBED235956C100 + F4A2808FCE9422EEF79B01FE148C6F52DD6481D24CED6925350CE09ABABEC1B1 + C9490080CBEDC3AD8169BA3D300D97DB07BDD5CA7A8B05006E00484B95A2DBEA + FACA559677C1CC63207C179B9CBC64ACA880BBFB026B696200C6D3A7210F0D15 + 01F824158AD6D4AD7F3F8F7CDF698CCFFE7E9D88D200A8BCBB4B3BC12084A2D7 + E072FBF62607C0496B161A6B0A58977F8CE4D0CA672F4C51B2A589C7E35373E3 + BF6D9BFD7FB443D9FD4AFB26CBA110E864116E0D4C2792A4DA2A1B37D614406F + B3420EADBC490E87433E8AFCF4F4F4A90FCE14575D541F7CAC2776659F3F0FD1 + 6241A4AF0F064942467D7DD2E774736484761617174522EA4C649CEC458B46A3 + F2F8E3296AAEE041BD0EFF6C8E8EDA459B0D1C8B91B2B1C131AF37B1074894A6 + 6E6F63371824007D545A5A7A540100804C3DD0D70898F42805D005E01D001947 + 984401DC0170F53FFDE6864C7D64841E0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000456494441545885BD975F4C5B + 7514C7BFBFDB526E6F2FCDED60182934ACAE450C6B165B065EA049233359C688 + D1E996F0408C9820CCF9A0D98C428CAB26A677CE48A271047DD8DCD39EDC2001 + 36350142B669C4844149CBBF6C69EA189595B66B694B7F3E38B68516A1A5DBF7 + F59E73EEE77772BEE7772F411A321A8DD06834AB5B8DA79406011CF2FBFD432E + 970B94D2A418793A006B1A1D1D4DAE9442A228F22CCB5E06D060301886DD6E77 + 12049309403A922449A5542A7B0541A833180C20843C5D00B3D94C254952B12C + DB2B0842ED7A88270EF000028F41D43C0EF1540000C062B14092249E65D93E41 + 106AF47A3D00405E5454049EE7B75484E779E8743AD9CCCCCC5B7ABDBE9B10B2 + E90144515C1F9307A08F6559010048BAD6021032994C0D1D1D1DBBB55AEDD9AD + 40A480423018944D4C4C3CB2611AD652B95CAECB76BBBDA1B3B3B355ABD57E9F + 09C4B66640922495DBEDEEB5DBED2E8FC7F32EA53491499D8C01D6ACF50062CA + E3F1B4650A91B10BCC66331C0EC71AC4A4C7E369079036C4B66C68B158E07038 + 7897CBD567B7DB27BC5EEFB1746B647417A4B2D6F8F878DFE0E0A0D0DCDCFCDD + 1305D8C82DA228E6F9FDFE74CB65D6818D148D4601E02C80056C300F3E9F0FF9 + F9F9CA5028943D804422117A4EBFAB553E7F0D4B173BDB6824001A8FA68C0D04 + 0268D52DC2C3C5F0CDDF8A479B70AB8B2885683CBA7278F6C70F7A95D3BF9C64 + 08DE06504208D9F07094523F80AF97C3ABA7B2D1811B31D7C8CFAAD9DFBEC8D1 + 167DC4EDDB87D0C80872CBCB295B5E9E3221110AA903FDFD9FAA177DB3D9B80D + 7F0D8F0F02A0ADBCCD0679612154562B226363293FC1008051A9C055570304C7 + B3D181E544D0A7200C23108E0300C80B0AC0F03C967A7AC826B9B26C00E8643B + B451EA5A9D4FDCBB572AD3680000EAC64600486A4168680891A9A9E3FFDC8F7F + EB09C4B3F241F2325B560700172353539B06E7141703C0C185601C072FDCCA8A + 0D8DB965B556794169D78AD3D9CE56547083638B907EF823A9FDAFEDDF4DDB8F + EE015128EACB76D267AB8B95DEACEC0122CFFDCC5FDE68E386BABEBC7FFDFAA9 + 03F5F53860DDB5A1AD738D4659E4E6CDF7DEAFDAF1713600E6C3E1F0F0C074B0 + F095384E93B9B977E277EF965C7106D1757E2C29B8E58D3D78553461C5E96C7B + A9843DBD5D803BABFE3B5581DE334B56DF0D56462003A5DD91C949FBFEDA3AD8 + AA4A9212E47286CA640CC9351AF3C29393DBB6E1A5E0C84FBEF85F97FEDC2997 + EF059B030088DDBE4D550CC199F363E81F9E5F3F0BE458D35EDA687E0111A7F3 + E8B600969797A30BB7A6C101CF08478E5046A502002C9D3B071A89E0444B254E + B454A69C051A8B8100450F014451DC6C692489E338D3E1D2380E6930149D9B7B + 93ADA8F8EF01C30089041C3DBFA7EA00BA3EB1D1E7850428304F743A1DD46A75 + BAEF7EA81735317C5E492B8842718DB7D9940CC721303000A1A929E93F704D89 + 7018C1AB5711F37A3F4CFBD4EBC510E0C2EB5AD4E85456005F11C0044272FE2F + 87521A00D0BD9AA027FF05F684AD954A7DAB520000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000663494441545885C5986D6C53 + D719C7FFE7DEEB6BC7DC183BAE51DC342FA8D8B19DB4249EA00A2B610ADD1A67 + 4264DDA4ADA86AA1A6A1C51F902A3455339398AA495BB50DDC956E959AAEEBCB + 4568AAD40F2352036DD7224AB35697D2340DE0400CA98B4989F362E7FAE5FADE + D30F90108A13486C8BBFE40FF79CF33CE7A7E7EAFE9FE343B04435353541AFD7 + AB4B89A594C6013CAC288A34383888743A3DEF5A5228E0AE5DBBA8C3E1B8EDB8 + 70388C502844AE41FE4C5194930B41724B059C91C3E180D7EB5D745C474787A5 + A7A7A757A7D3FDD4ED767F311F245328E052150C06A9CFE7B300E8D5E9744D2E + 970B0683E1A675770C906118048341F87CBE0A00BD3CCFAFCE0779C700018065 + 59048341B4B7B7CF0B79470181AB907BF6EC417B7BBB155721EF9F0BC9711C07 + 86591AA7C964FA03C3308D001E596C6C7777F70D0E62B7DB21088235994C1EE1 + 797EA3D56AFD2A1A8D82ABA9A981CD665B0DC0BCD84D1445F9B0AFAFEF8F4EA7 + F3EF46A371C7EDC4088280E6E66648927493C5399D4E84C3616B22917804C057 + C0759BF91B809F2C1630954AE1D0A143AFB32CDBB565CB1662341ABB6E15E374 + 3A71E0C08179E7038100912469F679D607FD7E3FF5FBFD8B025CB76E1DC96432 + 4F88A24801ECB806F9D4A292E41121D78B5BF047120804C071DC565114FF298A + 624096E5570BCD39570503BA5C2E844221701CB74D14C57F88A2B85396E5EE62 + C00145B219B7DB8DFDFBF783E3B82745517C5914C56764597EAD18B98BE6831E + 8F6706D22F8AE20151149F9665F95F85E62DAA517B3C1EECDBB70F2CCB6E1745 + F125511477A452A982200B3ECD844221088270C3982008B87CF972D7C1830727 + 1B1A1ABA5A5A5AB6DD1140BFDF4FF38D7BBD5E48924425495A333232A2B5B4B4 + 2C798F4201179C9724099AA615B245E1AF78211142904AA500E0790051009985 + D64F4C4CC06432B10CC39C2939A02008A7CDE6E5BF95C39F62EABDE45E2D9D04 + CDCA8036FFDF9869791AEB7367515727639063F04A8C940690521AFEF1DA1FB5 + 2E93DE8A7B321F37258E7EFC04002780B2B96DEC876228C56A40596DC7273FAF + 34FC654365D574A92AF84CF9E9FFC69BB4A19D0C4B429CDDCEE4AE5C01C3F3D0 + D7D72F18485515D973E71E521389B63555651B4B0178469D1AFDDFF4276FAF62 + 807DCB5A5B197D7D3D946814899E1EC25555515D65E582090C0D0D987CE79D07 + B5747A7B294ED47DCAC553A0E9E466B6A2829BA998AEAA0ABABA3A9A1918B865 + 0266D932E8DD6E00D85A8A0A26D4641C0056303F3070BDC381E49123247EFEFC + EDE6B29402D0C60A56001851A7A66E98D0D5D6C2D4D949A9A2E40D4C0F0C203B + 3CFC7F00CF5D1B3A530AC0B5BA7B1A00967F5F9B9C442E1E07575101E0AA2F72 + 36DBBC819A2C233B3CECA4941E7FF1D3B1DCF19154496CA68E5D5ED9CCD7359F + CC9EEB3B96EEEF5F2F6CD800003875FA3B509AB73BE2EE1502EEAAAE06615933 + CDE5DAEEADE07BFF7A225E1A1F240CB35358FFF853F1F39F3D9F0D877B738D8D + E0AC56EC7EE123A2AAF901BB7E7D1FFD4D870BBAEA6A642391ADEDABCA7B6B97 + 8F95AC933C86BA352FC8D6FAF78D5706DF958F1FEF2CDFB409475EFB557EBA39 + 32783CC84622BF64195213586BB958AA4E923AD53FB0E38262DFFD20FDFA5925 + 16F32991889E5FB912AFFEA71FC3DF4CE68D5BD77C373A36AC0467B371CAE877 + CFFDC22DEC2CBA0F524AFF9495139542767CF748EC0A721A2E00E84E7DF92500 + C05651867B2ACBF3FECC263D082128F37A4108B6E918A6BAD8153CA6C6BFD933 + F17AA0DC120B6F7CB40CECB52BC8883A3A4AD48909BA79E32A8423E3984EE5B7 + 9AB39171386A6BC059AD7C6E6C2C506CC0F752FDBDC8C5C27F262CFB3418F6FA + 8C9A83128D82359B117AF324BE1E1ACB7B6A70ADB4D097F73E04DEE944EEC489 + CEA2024E4D4DE5C62F5D0407987887830AADADB37389A347A18E8F03005EFA7D + 1B002CF8C1B0261308887D16F0F0E1C3987BE5B014E9F5FA556EED023A743899 + BB74E9514AE9EC2D01C3F398E920A1372444A2537973B43D508D4D6DF7429B9E + 06051D9D01FC772C16FB28168B15044808F9366956E173D3B7D5C9C9BD99C141 + A3C1E30100A8C9E46C4771D45A602ED7E7CD615F2180528AECD010007C402C16 + 0B8C4663416073656034BCBBC9089381DDCE30CC2B86C646B0160BA68F1D4399 + D70BEE16472D681A3267CF2233349404D0BCE45BFE85B4D925E0459F1D84904E + 00BF23402308B9F9023A9F28CD51E0334AB12BA7699F7F0FB2826E75AD25F346 + 0000000049454E44AE426082} + end> + end + item + Name = 'tag-script-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000029B49444154388D7D926D4853 + 5118C7FFE7DEB5B55EB8D37CD9461BA223CA09FBA09B2C24916DA21044814A50 + 587E94BE0411D117258884BE89040506A3E8435C222A70816081BD88B8C48590 + 83365CE47A7123DB6D77F79E7B4F1F9C6B13ED81C381E73CBFFFF33FCF3904BB + 84C3E180CD666B06304D08A9DF76AC33C61EE472B9A15D619FCFD7ECF7FBBF46 + 2211AA691AD5348D524AA9A669349FCFD3F6F676D5ED7683DBAD33CFF3D32323 + 2375A150080030313181CECE4E8C8F8FC3683402004708A91428C2EEED300088 + A20855553B44510463AC94E776824747472B600018181880C9649AEDEFEF0721 + A494273BC0B5C160B09C2D0088177700802CCBE8E9E911B2D9EC51C3FF60A6D1 + 4925F9E1AA9258F8A5CBBF016C5ACF64B2B8D8BC07CB490AE2F3F97686199B95 + DE3EEADE7871FB1EA3853E4288B9DC16632C0D86530600637EBFBF361008543E + 87A63C96DE3C3C63A8AD3E6F6C6C84BABACA0EF6F6FEBB573C5E9F9B9919E3ED + 76FB542A950AC8B26CF77ABDA50131AA3E915E4D9AF99AAA93668F077FE6E690 + 9F9F27F96894E4A351A226930480C26B9A265B2C1631168B056559B6954438FE + BBF2793EAC263E5E32B5B470FB5A5B612E2E4E10A024122F1963C77949924029 + 9505411063B158A8502814453817186EE517A70E41D7DB167EF218BC1621E1A7 + CBE498A701751B6B2EA62ACF7800902409BAAECB8220884B4B4B2145516C2E87 + F52CFBF43A564846DFEBEBEBC3AE2E9FF1429F0783A7DD70D805108E839AFA52 + 43CAE766B55AE1743AAB09217787DAEAFA7AF7AEC409D00400FBBBBAD88DE769 + BC5B5C23471A2CECCEF513C886C392A15C209D4E0340C6E9749E537E2481C34C + 39D0DDCD0A2B2B0063B879B9035B9F41DDACFD56E1602B0C0603AEF8AB30ECAD + EA00709F803481A0A29631960130F417325131FB90429E120000000049454E44 + AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000039849444154388D8DD45D485B + 671807F0FF7B724E92379EB449EDA43629D6683C89C34E8F521878D338D81895 + DD95B2DD6C32D8C510C684DD0803D98D101D6317D2C160BBE950A7F46AEBE668 + BA0F2F5CD9A64657530B7561B6D194A6F12427DFE73CBB18DA64C6B5EFEDFB7F + 7FEFD7C3C3F03F431004288A025996BD8CB10863ACAD5E8E889200DED8DBDB8B + B0A7614EA7D30B20D2DBDBEB1B1A1AAA9B9D9F9F472412F94ED3B48BC2B362E1 + 7018AAAA4255551011565757D1D8D8085555E1F3F9008033C6203E2BC6390700 + 2C2F2F637878988868637A7ABA7366660600C0D8BF97158EC0CED4C300607D7D + 1D44B449441733990CE2F178ED81AAB18E8E8E7DEC463D0C0042A1105C2E9722 + 08C2562010403018AC9917EB9CEC480C003C1E0F666767118FC7495114489254 + 0BD6C326262660B7DBAB730522FA0264DC84693E92ED563CAFF8019828643550 + A5C46407B7689A06160C060FDEACAFAFAF351C0EFF174B19D9C72FE9BFCE468B + B76F76185AF2148CCA41B91111B45C9E1EEBC568325B498B4FC14046F983CCC2 + A777F4A5AFBF65305F39F406009C00644EC93376EA17015CE19CB78E8D8D1DC2 + 0098463A31975FF9E64DC16E7D591E18A0ECC2021CFDFDB0B5B7576D6A2073FD + FA73E5070F3E1489E8ED7C3E1F191D1DF54F4E4EC2E170548339534F67CD82DE + 6AF57A209D3E0DA9A505B95BB7508CC56A77CE6601E082502814124434B0B2B2 + 7277646404B95CAE3AD72034B84F329BE3CFCAC387A04A05BCA707764581D4DC + 0CA9B9196253132A89043334ED4B10DEB3A45229B8DDEE8C288AD776777707D7 + D6D64E8442A1FD7260CCCAEF94FEFA63AEB27BEF1DC16EE7D69616242063DB6C + C023E938A8E914786A07662EF713813EB198A6897D5492A46B3B3B3B83D168F4 + 09CA042F95F253C58D1F7523997CD5A628F86CFE36A6BE5A65DF2FC659BE5841 + FF8BAD286D6D9D03C3E707DF2F491202810038E71E00115555DBC6C7C7EF89A5 + CC85F26FF3F7333F4C59C010E5DDDD01C7F9F3B595609AD89B9B83914E876BDA + 5715EA0570A3B333F8F1FBE7D855D7FDA5AB20D309A0DD72EC98C775F9323E9A + 5A426AAF000078F7F517E0D513D01717B76BBA4DB95C462C16432010D8E69C0F + DC8D6D9CCCF38CCFEDA0415B571751A984D2E62623220AB69D809E2B03006487 + 15023900C075A87DEDA37EBF7FFB3897B665D19088F0B7A9EB5EC16603B35AA9 + 9248E0B52EF9C9A2521AF9F57500F8E5C88EBD3F7E7EEB2CCEBAAD3D00AE00E8 + 668C4987424444C0EF002EFD03F8EBA15019CAC3DF0000000049454E44AE4260 + 82} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004EC4944415448898D966D4C53 + 5718C7FFCFED6DEFAD405B142928014D8850271BA2E1C52C1161268B31615B34 + 41F7926C5916B3041793996DDFCDAC665B363EED2519CB26667C59087329287E + 108C6E0B71E20CABA06CAD4128A5B450FADE7B9E7D586F03A5EA9E4FE7E69EF3 + BCFC9E977308FF43CC66336A6B6B21CB7231110D11D11E0060662622CA59A798 + D9C5CCAF0683C1283D4DB9AAAA70381C301A8D1B01B85455DD7BF4E851561425 + EFFE70388CBEBE3E007837180C7E2D3F4D796D6D6D56B9A2287BCE9E3DCB4D4D + 4DFCA4737D7D7D04A08C88203D6E93D96C86C3E180C964DA08604855D5BD4EA7 + 13CDCDCDA08C4C4C4C50676727EDDFBF5F3A7FFE3C092108000140865C7E0339 + 9E0FAAAADA90CFF33367CEC0EBF5FE9D4AA5BEEDEFEFC7952B57D6E95A672087 + F9A0A2286B94F32A999B9B03801BCCFC310064BEF57DEB0DE89ECBB2AC63D9B3 + 1A4B26F4AC74747480885E9324E97E616121DADBDB918B289B64B3D98C9A9A1A + 188DC64D44E4CAC192B7DABABABAB8AEAE0EB3B3B3686D6D45454545D6735DE4 + 3CCC5D8AA234389D4E6E6C6CCC62D10F64D66E001E4992D26D6D6D58F50FA150 + 08168B6543381C0E01809CC3FCB2AAAABB9D4E273735350100AD6A2066E69F39 + 193BAD85661F684B3E70320AB0C86807188C7F26EFE3C567EC189F58C2549441 + F5F5F530994C9B90A916DDF3DC0E65E60BA947EEB7C2C35F1A920F7E3B24E2E1 + 9D6061D25933338808CC0CC1080B46AFC6F0516363E34600438AA2EC3E77EE1C + 742C39B22422C11DC11F3F4C2426AF5F067373BE9CE4C843666E9401F4105143 + 5757573E2C7A04C349EF9DC5E483DFDF27A29682D6564E4E4F233D3707DBB163 + 209369CD5C4AFBFD581E18A884A69D92019C66E6FA9E9E9EAD0D0D0DD8BE7D7B + 3E6F3CDA82079C4EEC3658ADAC5457432A28C0B2C783C8CD9B3014168201D24B + 8D0190AA3247221D32334F12D1C14020307CF2E4C92DDDDDDDD8B66D5BAE010B + 99CC00689E6331B0A641B6DB61B0D9909C9C243DC79429E74C3400639A4A4B4B + 5155550522DA0160B8A4A44437B23A177FA61EDE6958F8E6ED1738BE325478E0 + 004CD5D579075E64648412F7EE2D8251C5E0A821128940D33458ADD60000572C + 167BE9DAB56B45FBF6EDA3E2E262BD2B4B49291C487AC67FD502DE0E6D71B14C + 75380892848B97DCF4C7C43CDD76FB69E27E809EABDB8AC4D49419C023006306 + 0088442248A7D3B0D96C0B44E48A46A32F8F8C8C14B5B4B4C066B3818824188C + 9208FB2F25A66EB89148BE410603C9E5E5F8E8B3EB3476D747E36E3FDCD38B78 + BD732FA7676648ACACEC04F0D59A11B00A570D80AB9B376F2EEBEEEE467979D9 + F78658E84474AC3FB93CF83988A84F32998ED88E1F67188DEB30A5666668C5E5 + 02339F30ACE19789C46AB5063291BC323A3AAA151971B0E4F60FA6F8D84FA7C0 + A21DC02608B1CB505C0CB6D8E8C2C05F74DBEDA73B6E3F054271AADE59C129EF + 4312D148B921D7FA2A230B4434188BC5AA229EBB175B70EF4D12A94F89A89588 + 76018054500061DF820F3E19A571B71FE36E3FA5D3026DCD95104B4B94F6F96C + 79AFCCF9F97910112A2B2B278410EF48F125404B054140D1E1C32CDBED08F5F6 + 0242C0ACCA7CF5BB237A45652B4B5B5E0680F9C7DEC93E9F0F4208582C96906A + 2110A45F00785786872BE5F272703C4E5A38CCF15BB7F43EC8CE74118D22E5F1 + 1080DEA7BE2A00E059BB8281E39590FEEB952F003C0F60C3138EC4005C00F0DE + BF1D046D5F8A4954E20000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000005FD494441545885AD977B4C53 + 7714C7BFE7DE527949E9DA42ABEDADD607A2B83817EE1064C64C7C368C38698C + 64C66426C660082294316266345B32966D89894B262E2C1892A98BC6B9282A38 + 5784E063D14562A946C5115F4885D256DAD2DBDFFE1818100A153DC9EF9FFB3B + E77CBEBFF3BBBF17E10D4DA55241A55245E4CB1883CFE7C3A3478F2049120040 + F6A67093C9944444E789282D02010F18635B799EBFD0D1D1F12668202929098B + 172F4E1645F1667575755092A4715B30180CB6B4B4044551BCBB60C182977926 + 5581E4E4640882A025A2866DDBB6CDDBB265CB8431440451144144C2F0EFDC24 + E13A22BAB07DFBF6B0709BCD06B3D90CB3D90C9BCDF68A169A9C00AD560B4110 + A611D185C2C2C2B99B376F0EEB5B555505A7D3B9D4E9742EADAAAA0AEB17F114 + 0CC2F544D4B863C78E599B366D8A248C31C6C67588A802837003115D282A2A8A + 086EB55AA152A99AD56A75B3D56A0DEB47617B46C205226A2C2E2E9E69B15822 + D13CA631C690959505AFD72B6B6B6B0330C1140CC26710516349498971C3860D + 938687B3B00206E13389A8B1B4B45458BF7EFD5B878715A0D3E9A0D7EB4D1CC7 + 3596959519F2F2F2DE2A74F88F394A805EAF8756AB9DCD715C637979F9F4DCDC + DCB706AEA9A90163AC6DF8B711020C0603B45AED1C9EE71B2B2A2AA699CDE6B7 + 06AFADAD457575B51DC04A97CB35DAC16030203D3D3D252323A3F3D4A95313EE + EDAFD36A6B6B83A228DE4A4F4FD71A0C86115CD9105CA7D3CDE379BEA1B2B252 + BB66CD9AC90ED401E022806700428C31DCBC79137575750070A8BBBBFB496767 + E788001A84CFE779BE61F7EEDD49AB56AD9A0CD8CB42D236FFDD2BBFFA6E5D44 + A8EF2958300080A1ABEB193AEEDF4760200057AF0B0C0C6040AF4FC2C1BF7B40 + A228A610D1C53D7BF66856AE5C39193863527043EFC9AFFF7871F9483942A1CF + 00188828EC12678CB900FCD0D72FED9531C61E0270DCB8714393939383E12755 + 8476C567FFEBE48BD6235F45E9B49FC78A22BC972E614A6A2A8B4E4D1D3320E4 + F526B8EBEBBF4CE876DEE3FD7E7F40A954FED6DEDE9EFDFCF973213333F37545 + 1C7637FEF467F089E3982237379A572A21D368F0A2B91953D2D2C6CC45723978 + 8502FE3B770499D3E904008FC9645A77E2C489D34494595A5AFA3A22FA421EA7 + 9C382E916263010032B51A5C7C3C7A0E1D9A28092F03806122D61E3F7EFC3411 + 65EEDAB52B521102FFCEF400BB2D75847A7B67F04A250020E1FF0D6CD459ECB5 + D9E06B6F2F7AFE2278E0A13B087EA8A3BFBF1F43D361B7DB97B95C2EC392254B + 2614C11853389F751DA0DB17A781E7B3E4AFACF351264908DCBBC73DE809D4AD + A9FB77E44E385809B7D1685C7BECD8B13300324A4A4AC615D1D4D434F7979F7F + 5F569C48FBD5767B61745A5AECB9EBDDF8F6E76BA382D6E7CC66851B1782E4F2 + 15291AA6CBD0C73C1E33B35AAD86D1689CCAF3FC99FCFCFC8C9D3B778E29A2B9 + B919151515BD8140E0A3A2399E7F9669A54AB9C9B477EA8A15E316C1DBD2025F + 5BDB37CD0FBC5F841D9A46A381D1684CE038EE8CC562F9A0B8B8788488D6D656 + 949797BBFC7EFFAABEBEBE6BC1671D38F7A9614A948C7728F2F20CE7ED1EEC3F + 7C7D54DEADF90B9197A983EBC811B73410308D3BC1494949301A8D0944546FB1 + 58C4211157AF5E45595999DBEFF7AF7E2F3170F9E3E45E8E8542D1266514E2E4 + 7CF19494947DD14BB3110C8646E594C93826E339F23635A1FFD6AD7DE3DE88BA + BABA40447D8220AC3E7AF4683D1189D9D9D9B05AAD1EBFDFBFCEE3F15CCED4BB + 91A689B94632D9A2A11BDE4067278BE308DF1FBE8EFAA68E5707493B0A16B1DC + F7E7C367B76F8C689D0DBE05144454CFF3FC024992CC1E8FC7E6703870D09C8C + 9C59F10F9505055A2E2E0E00D0535B0B457E3EB89898B039D9C0007A6A6ABC11 + 5DCB9F3E7D0A22720982B05A92A4548FC7D3EA70382049127A7D4100B005EEDF + B744A70D3E0F390E08855075E8EA5815C0FECAE56C5E62080C18DD399E29140A + 444545A1A7A7E7E5EBD63C371E3F9AA7A5915CDE1ABF7C790C171B0BF7D9B348 + 2C2808BB7C43FDFDF0343460E0F1E3D2D73E795E358E80BA4FA6234B88FB10C0 + 7704BC0BA2A8F16218636E0007A5102BFF0FF608C5DC441C1C19000000004945 + 4E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000085E494441545885BDD87D5014 + E71D07F0EFEFD9DDBB030EEE0E25416883A81C606DA72452AB681CA95A08A180 + 0CB18EB5EAA40E5571144134BEC6713263C7745AAD6442C619632AADB6634661 + 62A47969C69798F6B41A9577105FA091B7E30EF638EE6E6F9FFEA13047C1F330 + 9867E699B9D9E77EBFFDECB3CF3EBBCF4318E7A2D3E910151535A618CE3900C0 + E572A1BDBD1D5EAF77A88DC61B979090008D46F30A8022A2C0D2F387C29B9CF3 + B71C0E47574D4DCDF80383828260369BA1D56A5F05F0B78C8C0CCDA44993028A + F57ABD387FFE3C9A9B9BAF71CE67D5D4D4A80E8763FC80212121309BCD1004E1 + 1782209C5CB3668DB47AF5EA31E5E8ECEC4456561671CE5FAAADADBDDED7D707 + 0010BF2D4EAFD70FE2B219637FCDCFCF9756AE5C39E63C13274E1CFC19E67B9C + 7D5B5C7C7C3C044158C2183BB176EDDA27E2CACBCB91969686B4B4349497978F + 68FFFF71FBD4401F5C1E63EC2FEBD7AF1757AC58E137C662B1E0F0E1C38ADD6E + 5F6FB7DBD79796962A168BC56FCC53017D704B89E8F8860D1BC4E5CB973F31EE + D1D3798D735EF6A85EF37D62472B631E833EB86544F4FEC68D1B85A54B970614 + 3B7DFA74004822A2FC4787921E1D7B6C19530FFAE07E4544C70A0B0B03C60140 + 7272320A0A0A4483C1506A30184A0B0A0AC4E4E464BF31014F333EB85F13D191 + A2A222969B9B1B30EE4985738E94941402B0A0A6A6E6FC98A6191FDC2AC6D87B + C5C5C52C272767DC70FECA13813EB8D71963EF969494505656D6776103F004A0 + 0F6E0D63EC9D6DDBB6516666E6776503E00768341A111B1B0BC6583E63ECF0F6 + EDDB292323E3998306BF6CFC024D2613A64C9902225A278AE2A11D3B76203D3D + FD99C28E1E3D0A000300DAFD024D2613A64E9D0A222A1045F18F3B77EE445A5A + DA33C51D3B760C478E1C7173CE5FE39CD72B8A323A7010C718DB2808C2EF77EF + DE8DC58B173F535C797939CACACA3CAAAAFE9273FE517373339C4EE748A00FAE + 5014C5037BF6ECC1C2850B9F29EEC48913282D2D5538E7CB39E7152D2D2DE8E9 + E919F61F7110376DDA341051B1288AFBF7EEDD8BD4D4D4F130700097007C01A0 + 0D800B78F820B4B4B4A0AAAA0A44745B55D58BF7EEDD437777F78804E483DB2A + 49D25B7BF7EEC582050BC60357C7B9BA4AE968B9E26AB804C5DA06EEEE07542F + 008EF6F60E343535C26EB7C3EDF6C06EB7FB5C1350DDE1C2F11B765072723288 + E80D4992F6EDDBB70FF3E7CF1F0F5CA3EAEA4FE9AD3A64EDFFEAE48FB9676025 + 00338020BFEB14CEC1010F802F39E76F5B5A9D0E918822011425252561DEBC79 + E38103E77C6DDFE7EF59E50BC7D631A28352541453BABAC0341A68E3E3FDC77A + BD7037372FF4F6F5A5264707FD4C888888900541F8ACADAD2DAFB3B353979292 + 32E2AB768CA5DEDBDB51623BF9C63452DC1521F3E70B2173E6408C8880ABA686 + 8266CE84D66C861415357A8D8E8666CA14B81B1B5F80D7FB80D5D5D5C1ED765F + 059056595969DBBF7F3F5455FD36C07F79EE7D0D3E206709E1E1E2608F49D1D1 + 90264FE6AEEAEA2726602121D0262602C02A71606000757575484C4CBC224952 + 5A656565151119B66EDD0AC69EEA83BBCF2B5B01E039A6D70F6BD0C6C541FEE4 + 13B2DEBE1D682E930800030303A8ADAD1D425654549C2322434949C9D3202304 + FD0400B8EFEDED1DD620C5C4202C3B9B738F67D4C081EA6AB85B5AFE0D60DBA3 + 43F54313B50FD2224952FA993367CE01087B0AE44FA4EFFD0010349FA9763B14 + AB1562783880872B363122E2B1816A7F3FDC2D2D66CEF9A5435F752B97EE3B21 + F8FE415114D86C36848787B70982F0CFFAFAFA3CABD5AA9D3367CE581E1C636B + 87B5F2C1957337435539155E6F8C66F26400C0D7759D78D0E9C083AE91953142 + 688411AE5BB7745C55BFECEAF736975DB50D07FA220D06431B117DD1D0D090D7 + D3D31330D262B160D7AE5D1A9BBDB7E22583F3BEDAD3B3428A89010B0EC68A92 + 8FE9DC853B5475F1EE881A6ED4E187899150BABAA0DAEDD21493E6D4E9BABEC7 + AF49828282063F56670982702E27272774CB962D7E9157AF5E457171319C4EE7 + FE095ABEB36CA61DC4E8941419991D9A9919D0057A5A5BD17BF6ACC239E24EDE + B2DDF31B111C1C0CB3D90C49927E4A441F2F59B224B4B8B878D4135DBF7E1D9B + 376F86D3E9FC83AAAA5B3A3A3AB039D18525D3C36240541BBA689156131B8B23 + 7FBF899656FB286703E62445E195F9B1E83D7D1A9E8ECE32B7575937E2160FBB + 1A8F07B22CC36432B532C6CED7D5D5E5D96C36EDECD9B387216FDCB83188FB13 + 382F9A24CA10ECFF45BB43C1CFA785DA19A348D5E148D62524E0FE833E1011C2 + F4DA1135263A0C2F4485810507C3DDDCFC23067C10D0C8F7D9209A4D44677373 + 73438B8A8A4044A8AEAEC6A64D9B20CBF2BB9CF38245CFBB901F37104A84B9C0 + D0188F27A20386BC3C2E188D68BCD3038773F4A9263848425C8C11BD1F7E08A5 + BBFB4040CB4E5996D1D0D080F8F8F8CB8CB18C53A74E9D25227D7A7A3A0A0B0B + 21CBF211001BAC562B26843B4014F63B1284DF82F9DC20AF024F5B1B04A31107 + FF7C0D354DDDA3764E42AC89BFF3E64268CC6628972F678FE9A5ABD7EB111717 + 0751145388E8234992F48AA2BCCF395F63B55A79535313DE5EFC3C5E9B6138AE + 4D4858A67FF9E5A1D8BE4F3F05D3E91032776E40E772DFBD0BB9EA1FF298F666 + 645946636323CC66F32551145FF5783CCBF0B0E77853531300C0A5A800704DF9 + E69B659CF3A1B1CA341A0CBE410E7EF01FDC69EB1DF51CA9B3BE8FCCD4A9501D + 0E70F08E316F1E0DDE6EB3D97C913176D166B361100700D59D2E70CECBBD76FB + 9BAEDADA60DDA3CD21AF2C0FBD51E2624C30866A47CD3FE9393D38E7703FCCF9 + F9B86EA203409896E1D2EBB108D309BF618C95E966CC806032C171E102825E7C + 116264A4FF04AA0A5743035C4D4D3280A47107024056821E87D2278188B2016C + 2760068874010573AE70C0C239362AAA7AE57FEBB49598250FC1150000000049 + 454E44AE426082} + end> + end + item + Name = 'control-tab-filled-arrow-left-2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000018649444154388DA5933D485B + 5118869FEFDE1B7AB9B14984427FA0290407115AA4220D01538706A435733143 + C7161C1485521DBA963A082E82C445BA39381442495B08A543C052E92488414A + A00E2D690C35F88739C741B3E45E2E897DA703EF7B9E73DE8F7324909AC58C0E + 36F091AAEC9827EF5F7A7A5673F1F679527B0566B25FC50F6EF9994D49E80681 + D4ACB7E73C1C47F53CF2ADE00B8FDE8D73D3D18D62B1E859C14F8944420CFBB8 + 7AD9C30130FE6B770BA00ECC03AA638088D4BF7CFB91CE6DFD7D553B3A7DD109 + C40050C16BE9E90FE5DA54EEE7A7958DDFEF80D7ED02ACA3BE112AFDA3556587 + F2683D19B1AD2BC07D60A325DB0B045D00239EE953421E9842B3F6FDD73EBBFF + 8E9F1A72FE000D8107B7AF321C8BAC03032E009015E416B08AB09A2FD55CD7AC + 1E9E1AC3B1887705604C6B5D405840B318D82B631E54415FCC512BEA669883E4 + 751CC77101A4FBF104E164260A1480F9E0666EB96BFBF31270AF19324D13AD75 + AF52CA350301E87E324178287307E18DF5A7F4CCFE38D7F6DF3803BCA671892B + D4A7560000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000020F49444154388DBD92CB6B13 + 511487BF3B93899998DA9612626C256842D05542038DF8EA032B2E04FD0F44BB + 681551A81517E2D29D222EEC2242B722B853A18B26E04E09A1AD5583C54A5468 + 5A1369A4C43CCCCC75516A0B759CB6883FB87017DFF9CEE1DE23B4639751C37D + 49A007FBF4D59FDF7A612EBCB5041CAB9758D82763619F259878F65A6CA2E19A + B0B5C9C5FE3D2DF615EE1684C76B2F5C5AAEF271BE64A78B387BAFFD7D4267BD + 84346A646617456676D14E78CF0EC07F304EEC7077329148340CC3D8F649A7D3 + 8D783C6E287AAD80C3A8DA36DE6C947F66FA5FC20C700530B62BFCBD36C56271 + 72FAC39753A6BB75E98057FFAE6BEA18A06E5738959A7C7F7B5CCFED2A985F07 + 2EC6FD772E1DF24B21C4D8FAA69B898250A874745ECF054F7B3ED75CA94AC3EC + 9F59286B12DE01E52D4F583D39821988B4834821984372F6F8BEE6868023C0FD + 3FD404807396426720DA812005E4803340E5D17481E45CE981A6AEFD9922C0BB + 53E366CFDE6EA743B116028F05220804813202B2850AD9426503AC6B4AEFF0D1 + 769C0EEB6D73004352CA2482796018892190609A805C874A54C1D4CF5A358ACB + 632D3496BFCDA84D6DFDC0042B6F73DE9D1D37F54FAFBA301BFA2A2890A8D288 + DE2D764542A1D006513E9F5FE1346F00DFE0288EA6B6283081E4E98EFC9B81E6 + 970F4F08B861398A450480E60DB07B7014D5D3D689E082A857AEBA9E8C18D47F + 6CD5C72FFA60DF6473FBB0350000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000002C7494441544889AD954F4814 + 7114C73F6F7646A7B46D6D5BC9CA3C4452901D92228DEAD01F254813B40E1DBC + 742ABA7408EA20185287FE9EEA628297088C8A22CAD68A0EE1A10CA2437F2E99 + 5241DACA2694B3AEF33ACCEEB2D6EAACD91706BEF37BBFF7DEEF7D7F6FDE88B9 + B915B3AAB14D55DB44440054557D78FBD4D08BD393D1B3F8C1CC7ED9555DA11E + 534072F2BE8121DFA07F2550F5FC776E5CA57E0ED1979FE69E40445055E62011 + 122AC7DCDC9A5F025215440752A75315BC387F730F3B8CE0B23659DF402A5FFA + 80D3B8AA621638630426E324ACC5F4BD1CCCA76A0576A49E8CBC3371B3E8E767 + 960FF650E87CA7BFBF3F6DF495C86F5F57579774767662DACE28858969CDF45F + 610A9AB903CDAA311FEEB3CF4B00FFD64579EC03C0C8519502EE9C7498054676 + 39EAE11CD0AAAAC974C9A9F5697C36DB8C127DFC3878BE301439A5018BD2226B + AAC034BA55D59A8F4499F6B1ED0597CE5CEB39F9BDB2BE747442CB8E6C29EB69 + A98A1010BA8182F94924C68DF1C5AB4E3C97354BDF8C38BD5FC613F76EBC1E29 + 74926E0F70F95F830398930BC3FCA83EF42111A90CBB76F011CA6AA031526439 + 01610F706C5E6D6A367730511C0E03BD086B8026559EEE5DBB8480610CBBEA8D + 846C8840EA222E88C8B674F09C7710280E97203C405907EC07FA04E87832CC95 + FEAF6F6DCB40A605178A2C83A335656CAD08C67D25026EA1547B75F1306D884F + 24894F2467F26BAF8F959CDE5A11CCEB4BEE40B883B200E10A308A32EB18069E + 05526BF9B4E9639426843B400D5007C4AC6FEFB1C68690A49399551E5C64D2E1 + 9D5BCEC88A834422918C25D7B896250DC709D6B680C86E94DBC05BA0CE1E7A11 + 0BBEBABE0F77EA702E8D6CDBC675DD4D8944A274261D01CCD8DD8B00046B5BA2 + 20CD88DC44F5413254BE5D0305F7C5FDB55244227FCAE5380EAA3AE0FB470388 + DDBD04C0A2DA030F45B50561433258EAC4AD108C7CBD3ADB09FDF01B414EEA28 + CBDB2C2E0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000280494441545885EDD64B4854 + 511CC7F1EF7F9E3A3A33CE9451438CA913D24208C1903127D04250A928C41A17 + 418B88C259B493166D2ADA083DA84D41106104BA08318AB11406A4A0325A18BD + A07C34F4D0B02C9DB9CE9C16F6C0458DDE7174E30FEEEEFECFF970CEFF9E7B04 + C0B8B91143BE0F5D51A06293CC442EE82A370118F27D18BDE5097D02484E8EE5 + 00D3BA01BF73E650402D7480E357229284A49EC9010C7A0BE74458307CD1004A + 2994D2BF02A6D4AFA40000587393E61DADBAEA05C0B6ED0849DF76DD4D984E04 + C05B5AC13A9B4AF4F7F7EBDE4B3DF1FBFD6200C88A8D2FE5BC73B2385FC10A60 + 05B002C8106066390177813260683900E1D763537BDB222383A313B11AE0DD92 + 01344DBBFFE2D38F3D073B5F955C7A10BD13EA7AF331A95435F03E53803FBF63 + A3D1D877F65AE7EEAEC426DFE8572D0CDCF4382CDF056A81FC8C03A6F20A765E + 1E7115266CF130D051539CD772BAB67097885C07CC19058C97D411F7377911E9 + 41B8B5B5C071B4ADBEA8C16E35DE002C999A1CC0E4AA6B21B7B2A904A407E856 + 5AFCF0B18A3506BBD5E80642F318A3E1D7A30FE0A80A6E04B9070C28A54E286D + 7A6D6B78088B391A4E555CECCE8AB6D51779D20288C84511F1001E1119C6E6E4 + E5B80668F3A94FFB243529A50E00BDC0184A0555428BBB73AC58CCA9FBCE959D + F69D16D344A43DEA0C04AB05E943E41CD078B2D2A96D295CD5A494B22BF5EF6B + A288108BC5CAAC56AB6E8000B8EA5A70049AD70BF422F2ACD46DD8B7FAD1D5F2 + C1A78F6F0376DDA3CF17308B08E10C04BDCC6EC713CB87E7FBB3073A66129F33 + 7A12FF0500B8EA4338AB821B407A413D4C6AB1E6E1530D0935FD2D6380395DFC + A5FB3C1391F6B7A0AA81293159CC18D36FB4FFE527A050C6196F00994A000000 + 0049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000380494441545885EDD85F489D + 751CC7F1F7F7F9E39F73B633D4C91623756E38478617A38BD0D1121791B0D62C + 5A0ECB708B0869C506414517D94574D18268216CD5563AA4551A513434A22EFA + 3372FD99A0D8686AA33C4AB91D3DE7D1E3F37CBBD05CDB5A4D9F87730A7CDF9C + 9BC38717E7C77378F80980AC2AC52AA9268874EED3EDEF42A37DBEF72C002372 + 1D6649D5FDC0037E075515E049EF97D35F05069CAB286759E62D9B36ACF635F8 + 49CF90B89E97E38F75B1BF02C9599E45F5A6425F839F7E3B8CEBCD9FB4EF8CA0 + 86E69B3DE2FF2ED09BF5B941ED59FFFE9585A6A8A2B26A23A688EFB559A02AA8 + F27BCCA1EB9B415F839E8288D45B1BAA2BA5746B30403B799EE5B133641AB94C + C596F91ADC5C92A740BD5F586C6282818101B100B29D2805E73EE4A6BC525ED9 + FFA0DFED40EAE9E9A1A9E9D9D987C474A7B0DC44BA4D7F5BF07F3301B704F4DB + 12D06F4B40BF2D01FDF6BF07BE04B4A50272B5FEE97DF065D7D3FD0A8629B822 + E2FB0D65315DED173C3834EE3CBEABBD2FFBCEA3BD66EF48BC51558FA45436D7 + 1540C7715A86C69DBD4DEF9FC93A796EA2A36F34D1F6D489B39E2A7B80F65403 + 2F39E268347AB8ED83EEA68E7851466F34FE9E20558A36AC8964805000DC9C4E + 60E7CFB199EF0FF4AA1D0FC5DF41A45A551B2B0A23ADCD5B8B0A0C912EA0202D + 40C771B8B076F377532555195E28F7B808B72BBAA7A23072F4404DF1F57961BB + 1B284A356E1E686FD94DA2FC6E1BA15D44EE50D587D7E565BDFE624DF19ABCB0 + DD05AC4D070EC0CAA9D94BA4F25E0B382622DBD4D347100EED28325819B643C0 + 430BDCBC0D78223060A472A725482B2277799EF7A8202D3A9DE0ED1FE27C3EDA + 3F000C5CEBD8C6FC6C9EAE2AF0777772391091C322728FAA2645641FB0CFC80C + 319884C1E1D842B6BE04EA82C4CD02D14E55762258282781C9456EF50709FB33 + 4BDD9977C5B477A1B4A1AC4468507726B15E4629BFB16C4163C5B959C103C78E + 3D43FE7DCDC7C5B44C0CDE44E9C430B79597AC731E2BCFBCC1B6ED5AD7BDF6BB + A0C9C9C9F270381C1850004265B7925FD78C18569DC01115E98E649ADB77AF1E + 99FAF8AD570F8E8D8E2EF4490E167819B21E91D7404F9813633B567CFDC6B435 + 3E5C2160A6157811F91C62980D227248553F9264A2567FFC62FAB78E17502FB0 + 6BBFC5012F455A8D022D8A76AA6AEDF0F3DBF1CE8FA41C78C5B125A367498EFC + 44A86CCB29447E054E01A72F7CD68A4EC7530EFC0347303EC42545E2F7000000 + 0049454E44AE426082} + end> + end + item + Name = 'control-tab-filled-arrow-right-2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000016549444154388DA592BF4B42 + 511CC5CFF7BE276A818615B8E6E6D810965050E05C7F409B1098102D81AD4D0D + EE8134064943508B1891146120514EE150469021F988FC7145C5F76E83180F79 + EF8975C673B89FCBE17CC9113E5561214D79913A673BA6B90C00FB1B4BC2288C + 256EC80AFE0BB012B9BCB085760D33512B838655B092AD9493281008A8D96CD6 + B0829582C12029DD3189FDF5770070B62BF81700C0C80015401C00EF1B4357D0 + 3FAEB5BAE14CF1FBC8D351D244743E2A20769CFF4CC66F4B97E32D65CBE1F2AE + 8AC6B3298003280C7873134E59568538ACDBA7D27C21124221630A28DCBFD703 + 57C52A54ADB7B026800AEF804049004C73BA2FC4EC5AC8B4C2F56B15895C591B + F48974D72DC48121A0D96CE2EBE90EF6B70A03EB0F45509D6E74267D20D03680 + 8810589781DE55E9018C313F632CE7EE76F5F643636631DAF6F8A244D804B0CC + F3A90F99732E99D518546BDA2F33A279002B8DC7544939D9C30F152A7E2C1414 + 0C150000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000001FB49444154388DCD933F6813 + 6118C69FF7EE34FE09518C450C8442109C54B042A888C18B76AA145D1C141737 + 5D8A938B9BBBE266C082A5BA4815A1DC646A05FF4186B41A1B5C2A373425951C + 7249EFBEE4EEBBD7214883A697103BF8C0B7BCEFF3FDBEEFF9FED0AE1B2F24FA + 932A1E5FEE69D200607C34C58978B4ABA1526B60EEE30AF5B9681B988847914A + ECEF69A6E850689FA5D706566A8D2D4D1DBD4CE4CAA330DECF60ADB4A401E837 + D27C5853916261A758CF229D4ECB42A1E04B29071EB95CCE1F399DC90F9FD4DB + 91B7439A14D8E3DA50B60BF85BFF15D0077013C0526771D033F48427AF2FAF3B + CF35DF9DB52CEBF5BF003D66BEF66CF1C7EC830FAB77628A37B3F78B7901C05D + 60B0C87500DFBE5637228D5630B626D4F9EFC363113779EA3693DA73874F0098 + 5DEA67CEA6F6955E966B17019A93B1C3797BE4AA1E24472BA1C08079FAFEBBD5 + B72B9680E4CDBA1F306A8E07026D80791C440648C92B878EE8A14019305E95AD + 4CC56EBDE9D6272280367F2D333F0D050A21A0F96211BE7FAE73224080A28041 + 40FB621F0238C0E05B1A0018868162B1F817D034CD13F2FD271C9400770215D5 + 7113C70BF5639754226586087130746EBA650DC08261185B6D7202C0C49F4F81 + 817B5E2CA912689A001D8C6CD07296AB5393D06CDBCE86C5EEAA1DBBD11A3AAA + 11511DC0F9A0E994AA5393689A9FF10BE39605B1404713930000000049454E44 + AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000002BA494441544889B594CD4B54 + 6114C67F67E63AA9894692A990C66050605142126E5CB4E9BB4D85B54B376D22 + C8562D0C8416B52CE82F68D307258A624AD4944560B4084A5B28A63089F931F9 + 31E3BD33734F8B3BB766741AAF6867F59CF73D9C739EE73DEF91FC9667490055 + 5511110FD8303B6EA033A3783103205851A2C1CA1240D439D65578341C61241C + F19434A380AA6AB0B284A375D59A2B505565241C413567D8EA020E7DA7DB9C12 + 392E2282517B1A8DADCD4623138E44A34E677F9290058FFE95A7CD5FD3E8B222 + D5C76A0CA1E4C4C790A1AA3AB20E7D55B56D859F1507ACB976629321E3E097BB + D2D2D2A2CDCDCD5EA748D212AEBA53551A1A1A30B79432BD187324FA1FB6C59A + A5301A71A628BDA3F5E01C77822A82BA53C4DA5384778952B900F06D4C880CB3 + DD46D3CDB792A2EBAF8557F816D0A4AAF7DD226EDACD90C8B492F6A5C905AB53 + D00E966605B8EA866D748ACCA4AD177B8667BBEEBD0FD7E5F918AB9A7C7F3DBF + A0D03097639B52E08E95B4BB1E7FFEB9F57BC4EC46181F4BEC3E56B47DCFB5C0 + E4D7BDB0F13768F589349615E52DD9E86594DA446169EFFC8173C5F3879ABE26 + 8ACB3DBDC15BA055816C8BD42FB274725F295DDF667B55392FC813BBA0A42756 + 75F88496EF8F7891E8D7C8CCF2A75B2FC7593493D8E9BB07301336BF9693A082 + 408FAA7D41449E0A744B20FFB8A79F1C5EB0F8303E7F0BC85874D92C6DC88E00 + 8FBC48845F40445EA7CEFF3258B1A253B613B8022C00B73324D22CAB777A7A9A + C1DE4E8A3E0D8534AF2084A47D7E01F5078817576056D482522622FDC0227046 + 5507A4BEBE3E918B72201098320C63301A8DFE4313FF83F9DA332F966A1A77F8 + C5D78F104439A5E89BD8D0008688B467A3EB62CBB288C7E38848C6792AEE87FA + 8DBEF8B6EA421FD2070451CEBAC9A71EDEC4989B9B6BCFC5604DDB514362DBAE + 2822CF8177AAFA2A36EC242719E7370E64329DD318F2120000000049454E44AE + 426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000267494441545885EDD74D4814 + 7118C7F1EF7F6777675DB5CD83E5F662EC21EC1009912D2C18AD62AFD4B143A7 + CAEC50E029A8A84344073B29D425100C820E994A2418D65AB1B15A884219511A + 89B5D696FB62FB92B36FFF0ED9C14BE64EBB5EFCC11C069E87E7C3CC03F31F61 + 6AB8404E9120B51869EFF5DCFAE763542A6B32B9366763C162604E1700A0E5D4 + 2EB9D4C68BED5E9185AC9EE100065DDD8225C3FF1B404A8994FA9F8031670080 + 5A92CD7589E58FAFA45F74202C8DDD392FA19E98FC2F95E8C3168CD563D7F0F9 + 7CBADFE552E272B9C44CDA4A14BD4BA82345DA77584EC09FAC0056002B804201 + D2CB09F8005403CF9603301E4CA4EA5A9FFBDFBDFA123B2CA5F416123009D45F + EA9F8CDF189CEE6FEC1EDF38EC8F1DCA6432BE4201EC40B5BDD43C0B7C0A25D2 + 9E33F727D6DDECF11C541465A8100015E83C5BBBA1E140555913F02898487BDA + DE1AD6FE2C73EC2F0400C062352B5D2DFB1CEEDD0EDB09E069C6621B08BB4E97 + 0737EF05749C88E6D33B7FFD35C566A5A2D9592E07DE7F3B6630A9B751148FEA + 3CE22E4BA63EEA058C5C7D32D53EFC39665FAC30994A5590D6C0A49E033A10D2 + 63AB3DEAD60B602AAC311648F8FFA556B1DA16DC4B649B6E80CD62644DB169FD + 6275C9548A505C4318CD45C05D84302168D205D0346DFB79E7AA937267E962A5 + E1C1894057F3C09C45C02D4045CABA59EF9D19E1743AF37D2A0E576DDDB6275C + 73FCCDEB88A107D824B3D9BAE8606720F4A015633C1E57F239DDB0DACE50D10E + 733222BA018794D21D1DED0B847ADB0010F91C0E5079F9B1C96029B9076C91E0 + 8E8DF44D073BAF80FCFD2790F7AFA150AD2A1001EAE3A30B8703FC022B75E101 + DE7B4C620000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000386494441545885ED985D6C14 + 5518869F333BDBB2ED6E69B340B54DA09852E28589166235B5A04D14AE24042B + 8D060542A291821A63BC512E4C50FC89BFA835E1C23429CD2246D236A8A0A91B + 23093446496D52BA529AB6A4AD6BB76C673BEC969DF9BCA8628D44DA9D21CBC5 + 3E57E7E2FBDE3C3933E79C99A3BC754D3845FE1E24A74877B738CE9B8BEEA9AA + FFCE698888009C13E3F767705B10B87F4D55A9940416651C32381627323259E0 + 9ED63FE8006BAA4AB9ADAC38E390EF7F1926323269BB663507CD9594D9472CD7 + 2BCB045704ED59354B6E80A3EE4ECC5F33A8FBF0AC7AC095447BE202121B9C15 + FCA97F9C81D178C66103A39700966BBEA27D9E757B9CDB8984D33F87C2E9D820 + 7AE1F41056229F14FE8CF3CAFD3AE5AB972C07F639758B4422985313AF9AC968 + 3801E89517DAF8F085835457573BCD7685DDBBDBE8BED8C7C8F44512B8B58A5D + 46B72EA35B2670930ACE2527E8949CA05372824EC9093A2527781D3E050EFD5F + 814BDF8319F18965CB5E013C0A8F526AC7B58AB2358307872E25F73C1EEACBDF + D4D2EBED1D379F12916BFE0E6643F010F0DC81F088EA1E491CEB8B5E0E35B59F + F7F48E9BBBAEA4D3AD3783E07AE0D6B2409E283886520F0FC7536D4DEDBF695F + 749DD9198BC542D9165C057CFB6C6DD92D0F5616378BD87B95529B87E333ADAF + 774FABA1843C017C9D4D4180D5817CFDE46B1B2B963D5459F291883CAF947AC4 + F016B78C573FC974C57D6752A9545605016E2FF1794FEEDF50B1B432B8E80311 + 7951536AABF8977C96B8AB41B3EFDD06B8BFCDBC019C584843B0C0EBDFBC428B + BE3921EF207894520744B08A6A1B7782D86E0B9E6B3E3D1AFE61706A414D6363 + 7FC08C823CDF5B22E2514AED17C42AAA6DDCE5FA463D104B727AD8380CDC33FF + AE42B4FCABB76408D80AB54310F3469D246781E4421AE65C9B142B58219044D1 + E1BAE0DA723FCCBE8BF3E66CCFAF446429685A91427D232233C016B1AD13AE0A + 9AA6B9697DA95DB16E996F5EF59AA66118466B736AE5F948BF1950A8E3C09D40 + 83D8D657D1C32FA36A6A6A2C3725174230187CBBBE61FB4BADF195FEC9A4751C + B85B6C7914DB6A8F865EC1ECE94207EAB3E477656C26EFD4C7FD7AA1BDD8EA04 + 6A046914A43DD6F93E664F17002A100864C5AE64C3D378EED8582079051D2855 + 27F0182247273ADE2571EAC8D53ADD308CAC0806D76E51025FA2A843D886C8D1 + 58E7BFE5208B479DD869013E47D82E4828D6F91EC68F47FE53F7271ACF6594B6 + 603E3A0000000049454E44AE426082} + end> + end + item + Name = 'unused\control-tab-filled-cancel-2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000018B49444154388DA5923F4802 + 7114C7BFEFF44E6B6848A8A021688C089C0E1C8220CF5C5AA5100A82A0909688 + ECCF122D415B34151441063688FDDBAB41226C73A8C81A2C94CE22A2233CAFDF + 6B6B08BB8BFA8EEF0B9FF7DEF73DF28EA43E602351CEBBCCBDA91F7D37002C8D + 76732D33BE764A76F02F809DA8A1057270A6A6C7AF2590D30A76921FCE5DA4AA + EA472693A9B9829D02810095AD7A97F4D7EE005057D1F12F00805F039200F46F + 35FD5700B6AC75F3EC2C6ADDDD6ACCAC038010420FFBFDC1D13AAF2360B79ACD + 8E1BF3B31B6FF1E9362B97D398F9D2BACD6B632FCF6D038ABCE9F4073D527353 + 07F97C29512C268CC58541450B75554F8EC352E13E0120EA7846667EB472B9A0 + B1B8D02E4AA56D002B00260410BD36CD03C70C88A8C9DDD9B9A368A14300AB44 + 340760F589F968FABDE21CA21042AFE66FA2E6C9711F8018332F038835128566 + 3D32485555BB572E87FDFEDEB197E756A9504832305466DEF711F54BC0168088 + DB300C97DD048D1759488A3C0960E8CA34D3F1F70A663C4A5AF57A8601443E01 + 7E6EA09ADEEDCEB80000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000023349444154388DC592414854 + 511885CFFF9C7A6F6A6614A4CD5518B095509BA49106CCC8859B5653BD618C56 + 410B691BED34C7C8C8A04D0B156AD7B88920B1070365A20B111753100C040EB9 + 318871661875DE7BCEBBF77731082D727C86D081BB3A87EFDEF3FF978C7BEF25 + FCA9C5799D38321400801B57BA58B487FE1AD8DCDAC1FC4A817C5EDA008AF610 + BA44DB91610A9D6BEAB3AC37809B5B3B8786FEF0FAF5E474335E45FDFAFE2D00 + C06FA58566A6269DC5D3CEEF01F4F6F6CAB5B5354F4AF9CF676666C6EB89F77F + 8E5EBADEA87C120A480767EC2AB493021EE8BF0373009E1FE2FD04E07F86CC9C + 53C5E22097CBA59668D4265D1F3DF03A84C8F608312CBCBA6FE057552C0EEE3E + 1E0DCBC27A523793E3C1D41091618CB052D958D048743BB578C8D04FF90566B9 + 5C2EC9C27A12B5DA2B37F3360CE6B4619A052F9F7FA74D4FC523DBDB730C587E + 818F5AA2D15DDD4C3E756733AD70DD096736C3F5A5A549552E5DE34A650ECC0B + 00EEFA9E21E9FA583035C4609E703319A23DF7992CAC9F077007C0178F717BC5 + B1F78EB36522C3481BA6696A9D9D13CC784344F7016C28E0D62AB31CB1DDE37D + 1B562AEBE5F31F54B974154092997F105137010F2E10649F468D2D5B96855C2E + D714D621443616346E6AD35331AE54E6012C2B2041CC0F35A2C95680C75A232F + 0300162DCB3AEA711B3D420C773BB5CBE1EDEA4730963D20B1AAD8BB48781201 + 88402F40E040B55A1DF053577875840DFD2C804F00522BB6ED8ED82EFA3442BA + 2D32CE000188EC03E8A6270CD4C2D3920000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000324494441544889B5954D4C5C + 7514C57F77DECCC0500A0B57341A931942D268EC4C5168D8B830D11A44D3C4B0 + 68AA1490B898EA46D74DEC4E5D355D0989D1C41405FAB11A68BB9136A9D34488 + B1ADB2814D13C287B6234C9C99F766DE713183A5430B3335DED5F9BF7B73EF3D + E79DF77FD6387CB1042049666635E060E1F2A7E8CF256A892040B4AD55D103AD + 80A9FC583BF0D27286C5E54C4D4D1F192049D103ADBC76F879ED5628C9169733 + 48BB96ED1C50A65FDE765789CA47CC8CE08B7D28B7371B65EE95255A2A6FF66F + 131E83971ECA73DA697F758B15953D7662982DDDFB793628498B75E82BE974D5 + F9B138EC3E38436E653618BFFB850D0F0F6B6868A85617D9B6863B7292E8E9E9 + A1D0F00C7F64736589FE8F6870EFD3F477A6ECA2ED1BD58377C9191286B65CC4 + DE2EA276892ABD0008FC07156AFA2002D514B7CE7BE08CA47780DBD5B9CA601F + B80310D84ED92AB107FE0BCFEBF5D75653DAD8781DF8B5AA4E9DF178F2D986F0 + C563FB9AEA76D1865CB7377FF9D2ADC2E444B7136B9F8B8C8C1C75A2B119E025 + A094DBDCFC3899888F95167E3BD4D61459AC678080F7FD07F76F152627BAB5BA + FA63717D7D2AE7164E4692A78E3AD1D81579DE68209DFEAAEDDAD5232AF929C1 + F57A6DFA993546D24EAC7DCE5B5FBF80EF1FF7E6E7D1B973838DFDFD47FC9515 + 373F7EBEDB5F5D9B0609F8BC5E9B1EB29696E9C8C8C89BB8EEC9E2FC5C00E978 + F1977965EFDC1E44EAA6584C55DABD25E9A7BA6D6A66879D686C3A923CD5E2C4 + 13038209132770DD4BE6792924C787DEBC74732A9B7D3A9B0209271A4D35F6F7 + 8B50E83D493340AF603FF0B62BDDFCDE57F06CDE7D2A9B9A99F9148B5FFB2B2B + 45E427802EC0373307180C8073D0ACD80C8FDAF449576FD5F5E3E736373F0AA4 + D3A3F9F1F32FE395A60D428237247D686603615017FA60ACA5D9B7AEAEAE621D + AF409DF1783299888FB65DBBD2E9AFAE5D051C419F2BDD08988542F01DF02EF0 + ADA491A0999DD9DAF2897FA7872ADE5D5B58B8505AF8FD05DF2FCD5414E82B48 + 377EF0091D3479AF1827CC2C60660340C13A3A3AEA2000C79A9AF8645FA4D960 + 1CF812E9FA6436CBD9BC4B3330D6BA9FE7C2E130F00D30F50F232C4D95C24B33 + D90000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000327494441545885EDD64D681C + 7518C7F1EF7F7627D3499B8A87929B58BB5EB21BDFA004525070AD6637080177 + 89266969ADF110C5BE20581534D64B8BD05D53ADB6151B5FA8A6B56B8B4D54EC + A99180CD5A129BB526EA5188A8B1EEEE6C32339B793C6842C117C8EE845EF23B + 3F0FCF87FF3CCCFFAFF4CDCF525104C42E521E3E5459FFDF09066EDA385F69B3 + 57FC6D353057150060FFE377CB521B9F7F6B5879E055331C40ABAA5BB164B86F + 001141A4FA1308560C0030D678952EB1E4A7297F751CB56A47A6E225AC26FA4F + 170385CFF613BC7DE200232323557FCBA5A4B9B959FD5AAEA540B54B58454CFB + 17B89E8085AC0056002B00BF014BBE1BFC0414802870F27A000A62DBADB3EFBF + 3BEC0C5FD8229EF7BF08C330CE6D3657F1C56D0DBE003CA06DEEE4C0C8ECB163 + 278AFB5E6AB73F1DDA2A9E77EADF8ACBE5F2E0CE6834F9648DDE7647DD0D1F57 + 7C1D5F130DE80EDCBCFE4B6A6A06B1EDB74BE994005B8C585C294D4B2C148AC8 + 904C4C24EFC95E8C097C00ECF40300F0B0BE6993D4EEDABDAD944E296CFBB895 + 3E28205D46AC55294D7B484486CAE3E349ABF785169999F910D835ED3847FD02 + A034ED11231617607B299D52CAB6FB4BA914089D46BC355BFE66BCAFD8FBE2FD + 32333300EC9E769C236D977395BF88FE03D161C4E2000B27D16FA50E8A7DFEFC + 2BDE0FDF3F28F9FC00B0E767C779B3ED728E1FE7E6FC055C831060FB6C2AA570 + ECFEF9AFB31B51AA07787ADA71DE58180ECBF427549AD669C4E24F04C20DEF00 + 4795A6EDE1AFA53BBCF5CAE4E2F0650388C8276E367B647E6A2A0E748BC809A0 + 03481CB8653D6B0381E503B8AE7BCE1D1D6DB7F6F5DE2796F59178DE33E24917 + D003BC7767DD9AC4A970C32242353535F9F62A0E0683834F45EF4D444747A392 + FFE3B488ECBDEABA7D3D9353BC1CDA40C8341F055E07BA2E158AA793B96F5191 + 48C497E1354AD1B2BA966D9A6AB951A98C88B737EF3A7D89DC2463A512F5BACE + 99489850ADB903780DE8BC542866942FD381C3B78648AC5BF78052640479EE77 + D77DB53D778531ABB45853AFEB9C6D0CB3C1341F030E011DBE013E6F8C70D7DA + BA0CC885AB65379D9CF88E31CBFA475DBDAE73A6314CC834BB81C49F76795069 + EF53BA240000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000466494441545885EDD94D6C14 + 7518C7F1EF333BB0405F6CC3C6D2454A43A4F5C00942494C34F2922018CA4BBC + 10E305A445CA3B424A29A5819656F0C23B059584A8050195C49B202DC75D8C46 + 3C80D57681D66D71DB5ADA2D6D77661E0F5D622502B1BBDB98D8DF69B299FF2F + 9F3CFFFC67325919F3CA7A628D3EBAE87B80E53F1B73DFD098AE9C7957632D51 + 5580DBDA7D7F1DF10602AFCDCAC9D0F49471C32E09B476D1D0DC39217EACBF62 + 02CCCAC9609A376DD825753FDCA3A1B9D3899B6A488CB8B40C6EB13EEBB6E124 + 2E406790666B028C667C6AA21334C7E39A3E372E8D4E7B13DA1118047EF7731B + 8DC1AE61973506FF00C832C6A796B95EDD10BB4EB5DEFAFE7CBDD511C04C0ADF + C5EE71D34FF2B0FB26279B4CCEF5640165B1DA1A1A1AE87DD0BEB7B7EFF7FA1E + C07CB1A99623DB8E3273E6CC58BBE392A2A25AFC2DB7680EB7D043BC4E719C63 + DA0F31ED5EE03F0A1C9A5160AC1905C69A5160AC1905C69AFF3DD006B601BF0C + B72091405B5557697FFF21B5ACF9FC3BE440B67B2C2FA726250C68ABEAEAC80D + FFA75D6FBF35B1A77C4F8B1D0A2D007E7DD6C2F4F4F4BA17C68D3B7C785286FB + AB19339212052C6660E093DE8307263AADADBEC8F5FA0FC255FB9BED5068FED3 + 908EE3D4AD5CB8307FABE9B2B344BE1031BE4E14B00097CBEBCAC96D57B82C22 + 5BAD1BBE83E1EAFDCDD14936FEC39A3AEDE8C89F72F94B3BA7BFEF12B010389B + 28E07431CD2B13366FC91C9397B7559543826C8BF87C077AAA2BEF4527391459 + EF8442F9BDD55596E5F75F14D5D78135C099441E921C97C77335A9B824D3CC9B + BD45D1C386C87B96CF7F205C55792F3AC926E0BA130AE587ABABAC88DF770965 + 9142017066576353C21F33392E8FE74A727149A6393B6FB32A470691BEF7C355 + 9577EDB6B6B9F6FDB625E1EAAA48C4EFBB28AA8B400B818F4B1B039C0AB6C6EB + B3F3A9C9353C9E2B49C525F3C3D5FB37597E3F6218DB237EBF7615BC532C8631 + 563B3A2EA0BA58612DF0516963809A601088DB77F1B391AE41E48228520C911D + 4E7B876048AE206F28BC0B7C38140723FBAA7BC9E5F17C93B47DC7F39296B651 + 558F1B2E63BB882C51741D70FA71DC48030182384E373006981CFD4D80A94F5A + 30525B0CF0ADDDD6B6345C51616967E7798425AA5A04CC10919DAAAA15D3B24B + 153835648A23021C1818B826EDEDCB1E56ECB3AC9B3F9E1391A5B6651589C849 + C4105011911255D5CA69D9BB05A526D80A80CC9933C74E24CEED765F5BB56C59 + FEE2DBB722F2D3CD5A41963B8EB35ED11347037771BBDD147A3305E1B88814AA + 6A0550B6AB31C0A9601013989748604A7F9F7FD285CF0730E41CC87247ED0DA0 + 276A5A82EC7BB49582166466AE8B4EB2343AC93D02484A4A4AC2703BB3A6F0E6 + 73A9669A48AD21B2C2567BA33A1C3BFD5B33BBEFB4FCEDDE8AECA9147ABD8270 + 5244D6A8EA5E9472B3BBBB3B21B8D9C9C9AC4E4D350D91CF446485E3389B8063 + 27832D943F8603280DDC01410BBD996B5511112953541376485C22006E2043D5 + D98CE8D19A9620E581E627AE296DBA03A0855E6F61F49F83297F022707F67AA3 + 1588440000000049454E44AE426082} + end> + end + item + Name = 'control-tab-filled-redo-1' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000001BA49444154388D9D92BF6B13 + 7118879FEF5DCE466D158B421145FD03447039CC50C4208E22884E0EA5588A5B + 86829251907610746A11A49B5B25D90445A14268A31068E114258835B95ED378 + 927867137377AF9B3FE072B67DD6CFCBF3FEE055E9F1A7210944CDAAFEB338D5 + 374F014C4F8C4A5C78FBD1A24A92FF1624A10E8C605CBC139B49DB41FD6F8524 + 8C7A5957A66986A5522976852432998C6A06FB746D178D2D2000D8DBDD644702 + 11595C6F77CF7DB637C68110B671C4BF7855B1FDCB93858F6303ADDA82DA7F68 + 02DFDF96A0077C00DE57DDADCED71FC110C6C88B9479F3029562B22088E4F1CA + BA975FFEF2BDF96D2B64ADD50598068CE0E0B1E79CBF95ED2B0823999F5DB273 + 73CBCE834E105D574A0D0128F5E7B74478D8EF88C1AAE3E7E7CACEFD4E100D8A + C8A99E6B6B3DB7AE898826227911B1805C3FC1A7B775AFD1E9455705C93517EE + B9B5992B746BEF00A6801B9144D9F652A1112B1091B463D7003C853A6C0C1F45 + 1903A01B001D11C97A95671B6E7106659A66DC2BCBE0C9D367AB67C646D1F449 + E02EB0DA7AFDC4624F9AB0DDA4FD721E4448F9BEAFC74DE1596FE0C4A515868F + 37806BC091DEE69AE5950BFFD4FD0277B7C9677714A5BA0000000049454E44AE + 426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000027249444154388DA5944D4894 + 5114869FFB393A8E9815129954A2602B132A623008296B13412958583B5DD4A6 + 1FA2A416110411458B161164041285159550A94529E522915988BF44663A162A + E34FE3E8CC7CF3CDDCEFB41803C31CC50EDCC5BDE7E539E7E5708F4AAD7AA959 + 5E24990FCA961439000E16E5497666FA3F052393B3BC69FBAE9659340ECCCE4C + 272F7BCD926295BE2E615E74340E1C999C5D54342F57EC3C7A2F11CF6F8FF674 + 3A80E55A6A499434B4F931C5F495E076BBB5C7E38969AD577C6A6A6A623B7615 + 37E76CDF1BB7FC1F218002706893B47000E33F60367052446ECF7F5C6987DA8A + D9275A87A66B83013F038343C940C14A811AA8FA30E07F74F1EDD0651D8DF464 + 8CA933188E8A95020D6075FF4498A0A523E0A88BE4EE2B77BAB2EA629EE7CB03 + 8AC8B7982DD7A6C2B1770153FB42518DA114C04D20599CAE67E6E69D65765641 + D3924011F9F475227CF84EDB089FBD33A53396CEB1458CB9E1FE8951947A61A4 + B80E2D059C1CF6478E5C681ACCE9F3859B442419F802D8EAEFAF90A22055A028 + 2150446A9F768D4FF6F9422D22B48BC871B1C291E8B89724D72A1C991B01F600 + AFC5B66FA0B89A10A885F6B6E1997C505B414ACDC1CE88EFE179C49C25FBEC63 + 806214AF44E4AE885C0A7A1A120FC534CD58D88A3AE7AE21EB672F62C6978572 + A6019C46A841A89EED6961AAFE7A1CD8D8D8484747C7026030142A347FAD6F10 + 57EE0FA03A63F7B173C91BF2B1BC5DE8691F8EB559158015EC6E66EAC915101B + E576BB9B17EBD0300C6F24B7A872AAB07C3F4AD52374035D286E8DDD3FD56FEB + 182058DE6EB0E38BDF1108044A12D9B67B5BB1B71C786FA4A66F032A814D0849 + D81A6B70A1ABDF3DAA5ED759E2E4720000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000356494441544889B5965D681C + 5518869FB33B4936269AD560A869529BF887A2525B8810C1820A4910B5541454 + 109A08BDC8AD37058935088A285E097A117AA110049148A45A6C95458A5863D2 + 2ADDD4B4594C2B6B9AB83FA6B3D99DDD9979BD984DBA3631D950FCAEDEF3F7FD + 3CE7CC396322039F7B0092648C315568CB197B15A51254631640E76D4DEA6C6D + 028C826EADD1896496D964B62AA7FF0A20499DAD4D3CBEFB766D345192994D66 + 91369CB63640507E90ED86888226C618ACFB9F42F9CDAB51F65280281164B6EA + 847574E22A9EA1F09D7B57AAA29CC75A0D31EFD244CC92A4D92DF09534744D7B + 5D5D5BCC0C939F8F59BBCEBE63060606D4DFDF5FED2932150ED78C49A2BBBB1B + A7AE99BFEC7C80E8FFB0BA629A1B96B384545197CA568D5E676C56D27704E71A + 240C225459B2295B35BAB20D6646E231DFD7D38542E1DB723FC0F52312C433F9 + 52EF27530BC905DB09355C3CB5BFA6B676DC2D958200D722DA8A06E2483D5F4C + A7E63F3A357FB8E8F99D91BFAD030D37B53E635273DDC07523BA11A8BF902A50 + 707DDBC7BCB8DCD83E9279F0F9DCF21D7B8F295CBB65449EC438684C7041A2E4 + 4BEE5DCDF508BD6B440DE1F09B6EB4AD6447DB0E96B63DE46F2540D271F5C254 + F2CAC9E3B3596616F32C392EB9A24F3AEF623008DE32C8020E8329592D1D83D5 + EE41D62E7A3D477EBE3CFDF1D4425F66D93D24C31E44A43283E08B5B5D75D040 + B67CD9B1E16527F1C697E7D2D32313975FB18BDE87C00CE203C02EAFBB7A4D18 + 7680398094063EAB0691932DB84746CF2CB6D88EF71E704CD27EC071D349DCC5 + 396A6EDD81D5DC06B01D71029445EAC330590DA2B37F5E29DA8974611FD02838 + 24B7E82C8E0E918FC730561DEDAF1D0568058E032DBEFC1E7C2672935F55754C + ED5CD1A3E4E99632E73F0A8949F2F158B02814C6441A0046806D929E04F3933D + 1D2335F636A14A16925659AE6849EDBF9D99C0784EBC3CED89FABB1F26DA3B48 + A8E166900FBE073028D407FC908F7F4F7A7408BC12A6ABABCBDD6C133AEEB9EF + 81D3DB7BCF3BD19D3F026D925E06BEC1E0832133FE3E8D8FBE146CD8C55F498D + BE0E7EE0D632C60CAF64FC5FAFD3EFE7CFB58422F74E13DDF91C306E42A1A348 + 4B18E6805DB95F4EB074F2D37593B33299CCF0661500B8A7BF461D8F244CC8DA + 83F42CB01BB1BCD92FC03FC8644D409E4B22870000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000031A494441545885ED974F681C + 6518C67FDFCC6EB3D96C82B6318950171152890DF424C1486C6A2BD59263F520 + 7828C5548AA03560D1600F564B3DA80721224DABD8827F4AFF8097588DA90493 + 9A1C54921EDC86D424AB69747637999D4D662733DFEBC508B121909DD01EEC73 + FCBEE7E1FDF1BDEF30DFA7A24FBC46491290A283DFFF4169F97F1431930F07A5 + 86B593A900DC500000C7DB1F93B5063BBBFB95061DA63880112AAD5833F8BA01 + 880822E14F20523200405942973AC462DFC0FFF163546CFFF99287308CA2BF0F + 99F99EE344B68DBEC3C0C040E85EAE45CDCDCDCAF2E3E4093B8421545EFC0B6E + 27C092EE00DC01F85F01A481C1DB0530E905FA71C70BF668AD974194FC2F5883 + AEE78BFEAEF60B63F6D4AC5BF35CADD5669AE6D74B9BB7E204BA53D6C2C4D054 + FE99E9FC62DF7B23B2C9ADDAFCD4AD0438BAB5B6628B6F5B1F219CF1CBEFEACD + 6E7FA92A53BF1B58FF16A4814BC06F407169311631E6664E1DA2B6BDEBF548BC + 720386D95BD6F474EBDD452FBD5E00B616E9F865BAF0694F2A175CB31622AEAF + 3780424458D442F5DECE38C1220847802AA0B7AAE5D9D6F50098738AC1CE6397 + 2747CE8D665EF4B5B4A3D483EA3FED8DDDD7B052B63B34801679E5ADBEC9D1B3 + 23D6452009748AC860E0645D64F98D4D456318B104C031600F70302CC0C4CF7F + 144E5FB89A7919D80C3C6A0F9E73E6BE3B4590CF2C339A95D5D41DE8C288258E + 026DC00EE7A79E89B000DFF4A4B2DAD7F23CF0AAFDC3174EF6ABF76F3299959B + A83BD045F49EE411847D22D25AB8FAFDB8F5E59BA13FC3A9F1AC6B28A5EA0586 + 67FB3E59D154DED042B43AB91FE10560E742EACA98F5F91B203A1C402E97AB98 + 9FCB6A410A0A36466B1E58D117D816C07960C77C6AF0D73F4F1F067F1100D5D4 + D454F2AD381E8F7F3BDFF0E4EE99E4F6B3C0B83773FDF08D1307D14EEE266FD9 + FDDB30620916C686C1F7FE5D578D8D8DA5D607C0ABDB8AB7EBD043280610E908 + 9CD993F9A18B78D329B4EBE05E1B5E35AF425507500635FBDE25BEE59116E00C + 60035750B8BE6D75A4DF6EF3568B9BA101100A237D98898D93D17BEB3F54CA48 + 036580AF8B85CB76FF67AB3EDFFE0670694A552BA7D8AB0000000049454E44AE + 426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000045A494441545885ED974F6C14 + 6518879F6F675A2874715BDAD440D222A1C503F1002AC444A9A4D22007C2C520 + 8668436823E00130C1831094C4C4E841682D29315208B116158C31F11F506A22 + 18A115A815A1D06E4BBBBBDD65BBFDBBBBDD9D99D7432954D342ED4E85439FD3 + 24DFFBFEF264BE9979E75349CF6E255164F822DA8B71FE48C27923D1B5BC15A7 + 120D111180ABD2E7DF8CDD8240FE92BC2C49734E9F7088DBD743537B68867D5A + 77D10196E465317F8E6BC221672EDEA4A93D64D9663502872D29435B2CF72B9B + 08B6085A436AA64C82A36E4FCCED3BA8A7A0E53E6F4BA2156C41BADC438275D7 + 3A69F6F64C38ACD9DB0D90ED4899B55B7BEE8DC4ED446A8DDFAB6B8D2E37FACC + 8136CCFE690C923AE1BCB9A93A7317666403BB13756B6A6A22DC1B7C371C0DD4 + F603FA82962A4A7794B178F1E244B36D61CB962ACE77FC45FB4007FDD8F516DB + 8C6E46D0CD30F0900A8E644A3051A60413654A3051A604C7C931E0D2680B0F83 + E05160035008FCF1EF459B7EB7264C655B77B478CFC956C99899746B5D8EB132 + 1C0E9F1E59F020052B814DEF9C6A73D4B6F47E0972BAEE72A00C5FE005207FB8 + E8416EF1226056CCB44CA011E5D8E7569925DEC7D77A0D6756D570D183147C12 + D8B2480F82C82EB1E4031C8E8F07E73C51746BC54E426979C0FFB3C506500F5C + 05FA8091A7BFFA68C34942E7FCB856BCFA1642324A1D549A16CF5CBFF768E0B3 + 5D932A18013E8A9B56993B34D879C51F261431860F580860584243721E4A3C98 + 7D417467C676906494FA5439F478E6CB7BAB274BB0CDB464CD99E6EE86D2731E + ADB1335C60094F032E4081BA5BA9E7E22AC8E5AE3651847E853A229A169F0CC1 + EEB869ADDC7FD673FD93F3BEFC9829154AA95C904E208042D4188D72E7D42A1A + 4A25295105B60B8AC8CE138DC1EB077FF3AD362C390ED458222F01972416C61A + 18FDF4E84871E2989E8A88AC51CA512D228781AD760B76F444CDC3FBCF7AD20D + 4B2A811320EB076F5EB142DF973378E3C2A84D4999393C5A720060B552EA7390 + 63C0C681861ACB6EC16F7E69ED31BC7DB1D78069826C8E5CFDD5F21F7E132C73 + 6CB9E27234677A21A2BE10E46B2C290AFFF9B315A87ADBF6EF60437D473FC072 + A006D3EC0A7EF5DE98720059C5E568CED905C071906F11D91069BD68DEAADE03 + 9669BB605F286200A4019DB1CE66CCDEC03D1B34E76C07F021C20F22F24AD47D + C9081CDA8EC42380CD93C4E3F1A4F7053A007C404E72D67CB4F4B9F7EC89FBDD + 165028B06EB0F572DC7F681B128BDC59574B972E1DFBFEFF475C2ED791D8BC65 + 452D8FADDA04948AC8C2C88DFA567FE5363062A3F668A9E94C5FB80C807043CD + 3FE4860597DB2508F4C7D2B2EB42F93B528046A05D4456C5BCD70642DF9513BD + 71E19ECFE36828A7D369A31F8872306B53054999F39628F809F0027B44E4472C + A3C7EC0D60F406F01D28199FA0AD76B749CACC21EBF50AF4198FE482DAA7942A + 04942071A02EDEE57DA6E3FDB5E3CA9A94591C0FB4E22BDB48FADA9D4D290B9E + 7A51205B31348B05822366DA7DF91B455FECFE652D5BE60000000049454E44AE + 426082} + end> + end + item + Name = 'unused\find-arrow-left-2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000028549444154388D7D924B4854 + 511880BF73E7A535DAD8CC64964E0FB218A140A845A6110C91411A41149A8B20 + 37116842046D2A08228C20B2A8206B550BAD08A297851A499A220595A89196CF + 2147EFA8F3F6CE9C1626792DFCE1AC0EDFF73F050BC29062C771E422496BB76C + 138853C02E04362483C05389AC0E7E7A33EA7B7801B41842471BCD649CA8C592 + 917DD2B9D4545D91B74AD99D9D465AB2919FFE080F3F8F73AFD3ABCEC4E5FEE0 + E7A6F763F7CFE8B3A71694B2F652DBBE825B1FB5617F588BC7E3FFBCB7DF27B4 + ECCB1FC6D65C6ACD48DAB41DC37CC1F203A731A6D81F5D2FDEE0CC59B1646177 + 00B86C49846289E4CEE18009215E29F33FCD2BD76F589D6A71E7B952FE0BCFC5 + C1CD76802293C3854E208421CB65B32084F83F39AF0A045908A1174850D5B0B6 + 280CA0863590F891E805F1E9F12FBDBEF0F80F35B2900900578004C0EB6F2A40 + 73221CD00FD194BE2E615EB5D1D03711F514B997A3CCB612180BC68A9AFAFCB5 + CEA5E6A1C988B6AFEA599F0CCD24CAA75BEB478C7F07A0A0989341D0D1F2734A + 1E7BD42BCE795C41B341293EFDA2DFDF311468D8B3D1B6B77F22EA1C0BCE4434 + D5DB31DDFEE4CF210905C7A1B358730B0B10D42139026CCD5C6669B79A155F8F + 2FF2524A5929E13190130FF8BFFEBA5B496CA407A183A10E28890E75351BAC76 + 8CB6F41C040D401592FAB96263C3DDC4A77CB3B91D87CF63CD2DCC07EA119444 + 07BA9ABDB515AC2CAFC192E96E1142E42DB611A335B770075087A0343A380BCB + 4880706F1B964C778994B211C155243734758444684A2F00CA10944507BB9ABC + 776661007FC36D84D132B86C67A9074923908887A66E8ED61CD50994E870F7F1 + 50574BE37C782ED4E7D7987CF76000F020C837A43A746B07F80DC0361925C445 + 92940000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000036449444154388D8DD44D4C9C + 451CC7F1EFFFD95D16A1CB4204DDA6A4A4942246D283A9B10DA9B548C50B1A15 + 43D2A4876A91AA177AF060A3C684F4A4896D4D2C88B4C4975444AB358DA91762 + DB606C94588AD406CB4B41BABC3D20ECC22EBBCFF3FC3D50B4FB82E92F99C324 + 339F99F967668435E2DBB58FBCAA038827E351415E011E47588FB208F4025F28 + DA1E1B1F589E3EFD36D6CC4D00241D96BBE765FC4FEC770B72CC1069D85DECA7 + AA24970D7E2F8B319B9EF13067FA4D6697E20328B576D8BC163CD18035FB572A + E82DDA4AE0600B22F27941B6A7EE83A737F348A12F65D185A8C51B3F8C707E60 + CE44A9888EF6DD9838518F91B2BBAA7A4464DF3D1EA3AEFD85D2B418404EA69B + E3359BD9B5C97F2F42BBB7A89CCC2DDB1341C95C4766C93680C32F6D0B505690 + B5568901701942D39E223C2E63BB2095590F3D960866048A11910744A4B4B63C + FF7FB1D56CF07BD9B1D10750E329284A3AB2E106A1343BC3D0427FC65D81C0EA + 494A11526B8862182288A4BD006963AC0C354092400585C1D0B22D13A1D85D83 + 7F9A118041346987963906AAFDAA7AF3DB6BE65AF3DB80D6D5CEF4629CEE9105 + 80EFED909908DA0BD3C426871478B7F9F204A37F47132447F5E40D3372F08FA9 + A5572D475B5495A6AE51A296D3A7AAE723D72FE14A5E3E637D09DEC207AFC41C + 677FD7E07CCE8E8D3EF2B33DD88EB65F1C9E6F683C37F464E7EF3365019FE7D8 + D7FDE67D5F5E9D29039EB1E68213E6D9F712C19C8A3A722B5F34105A50B62E44 + EDAECE3E738BEDE8A7C150ACFEC88F635513E1F83711CB19BA3C1ABA7035B868 + C71D6D53DBEA99FAE475ECB95BFF3DBD9C8A3AF26A0E89C04720CF8256033DC0 + 4E9FD7D56DAB562EC59DB3C0FB286F2A084AB6130D85A73BDE217ABD1BB8FD39 + DC81B500CF01D54E2CD213FAF90C393BF7222295887C077A1C388CDE51D76818 + 2712FAB72F0998F03C50ED4423BF4E9E6A043108347C982FC8A088A47FD44971 + E7D5348A40F36DEC296779055B1EE9C573FF26B0ED195CEED780538A7600AD28 + 6B5E7CB72047116A57B0A55F264F1E6279A41780F8E430D3A7DFA2606FD36718 + 6E03918F412F00ADF33F75B2D4D79502BA72AB0E38409B138B2460AB894F8D10 + 9F1C26AB7C77AF1832063403B75CEBF27E9B3D77146B2E98D05CDEE28707ADB9 + E0B8F9D591142C0D7A450C631CC1E344C23D0BDD1D2963FF01F61C8005DF175E + 200000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000048049444154488995946D6895 + 6518C77FD7735E760EDBB1E6742FB136759BCBDC306A8A53021137C911613A0C + A22698165644485FFA9210F8C10C51D0D485CC0AB314FB3265EA6CA239445AA1 + 734DD7429DECCDCD9DB3EDEC6CE7EDB9FA705E3CEE9C255DF0705FF77D5FD7FF + 7FDDFFE7BA6FE13FCC9653C49C4D3BB1E71583B04C90CDC02A8442C04079005C + 01BE57F452D8EB66E4F46E7C7F5D8A63C84CE0F6E71793B3651F465A7AA6881C + 40A875D9AD5259E062FE6C0786C07DB79F6B0FC619990C816A932ADB50B3EFD1 + E95D787F6F9C99C070BAC8FBE407ACCF64E78848739AD558F4E1F23CEA5ECE21 + DD6E6862EC5448E5E7F621BEBED2CB4420DC03546938FCCFC0E1F7F1F7DC4A4D + 90B9EE6366BDFAB655849674BBA5F2E886122AF25DA8AA8A483C27717EFBA18F + BA535D0C4F046F2BBACCDFDFED1BD8FF2EC674707164E05AFE2622BC27222B76 + AD9D4745BE6B2625E3563AD7A97B6B1660316491209FA5E5969036EFA56482B4 + C272C4E600F874697E86D694666ACC6255A79A035416B8B4BA245381EDA00E67 + 69653281FDB98588C88B2252BC61F19CC8A9A296E84F9FC7FC8D655900592252 + 69CB9E9F42228B158432802579E94F9566BA2DC9CB88B96522604D0E11505C8A + EAAC340B311962BB897EAABD688E002E90E4131009F78888B8274311CAFF2191 + 7B3214EB320F683281AA89C20D40DBFABC4F53C49CBED0D61BCFB981924C10EC + EF02D56E55BD75B27D18D5273B25A1897A8115AADA9AB8F753FB10401FCAF5E0 + A3BE6482A97B37D1E014C0EE5B833E8EDF184A2549EF54C85CF360D4DFE6990A + D5005701CEFDED91CB77C704D8AB6870B2F33296A44387FCD872E663CF2DEE40 + 58DE7A7FBCA824CB49D16C672CA2CF1B08AFADBF3ED8F54573CFEAF6015F77E9 + 5CE7A98E41DFCA1D67EF160642E675607B70E8BEE96E3A984CE028AAE0D9EA6D + 88D5BA10654718CD68EA721BC313414AE63807A782667543DBE09DA37F3CDC36 + EA0F9DE8F1F88706C60357CFDC719FEDF70656021B351C1A1B3AFE396177FF93 + 6F91A37829D9755F61D81C0B112E463BEA75E01D43647D6581AB666EBAADF37C + B767AB2F103E0834029B1442C07AE002E8D848E37EC67FFB1148784D1D451564 + 6FDE1301870B2016D02A854E5004B1891004B6287208F42C508B1288FE61CCA0 + 1FF7997D4CFC792E5EB4C4C1EBF660D81D254033910BB806A173B4E518F68232 + 1C0B5E41603322F5A04D51F0A9E9128B08AA1A1F0D47F1D248E511F08B081660 + 0DD0E9F9B50177D33798FE0924B2568FAA81B20E6502084FFF54F589D11AD5BC + 04B81005AF4622E09E73872265A9A27045A05144DE50F426F00B8A228240BC6A + 127C55C56AD81CC551703B5005748CB67CF7181CF0341DC25150EEB764CC7E4B + 554F22F21AE87E85A3629AF8BAAE81194EEA78A25AEF04B1A35AA5D031D6D280 + 3B011C20F8F02E0347B693BBF580DF7065D50A7A0AE5B08009D210F68E307CF2 + CB940406F001E8AA48E5C792C01F93DC63A0FE234CEF881FA516E13C7004A136 + ADB03C650E80C59EFF422038DCF3C8DB7686D1E66F670C0430273C4CDE6E25BD + 7C75C8B03B4F23E4229C307DA3A3E3AD2753E6FC0B0ADF3AAD44EBE246000000 + 0049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000056F494441545885AD96696C54 + 5518869F33F7CE9D763A4C3BED94D6A1058996B2B4B22446058A0165B11A21CA + 6653D03FE04631315A13B5624C906022261A8D118D8A8982224D200A055A1659 + C4B881DAB1B408B52DB6D30ED34E97E9BDB31C7FD08254E89D42DFDFDFF73DCF + 77E7E4CC110C316A5A1629735793943FC72D147539301FC84790014222653370 + 0AD82D63D16DDDDE23EDED15EF13F19DBDEA3C3114F888E94B70DDB7C66EB1DA + 5E4E502D2585B9A989F7DE9A425E869D74871524B47487F9ADB99BBDB5ED549C + 0E7419D1D826190D6F0CEC794F0F7EF7C5F50BB80A4B701614E50821CA174D4C + 1BFFC2DD598C746883F69C0FEAAC3FD0C09ED38153C0A2E0D16D7F5FD8F5D615 + 354A7C9B2F2365DEEA7156C57278FDBC9BC73C5B90459266DE3AC2A65298EB22 + 3941CD38722EB858CB9EB443868D0EBDFE64FC02AA3B9B8CE28D0EA128951BE6 + 8F1DBDE4B6F4789C2F4508C1148F03A74D711E3EDB313BE196699FF4788F4663 + 9DFEF804D21697A1658E7D7D719EFBFE67668C1A12FCBF997C5312A7DB421967 + 2EE8513575D4A1EE5F76036019AC4949CEC09E3B3DD36E559E2CBD3BEBBAE170 + F14BBC343B1B4DB13C9B98737B8AEA1E6D2E9038612642518A174E4CB5A5D9AD + 372400E071DA983FCEE5108865F6FCD9E60209A3F30016CCCB71DD30BC3FF372 + 520016D83CE3CD0514572608A6E467260D9B40DFACC9AA2BD35CC0624DD0348B + C5E54A54874D2023C90A824C843017E0E2D991C34687BEABEFF2FD37A8808C46 + 743D12EBE8E88D0C1BBFB53B0C52FA90D25C20DADE0C70EAF7E69E6113E89B75 + 2ADA153017D01BAA01F6EEAB0B0C9B40DFAC0ABDF10F73819E9A6348E467E5D5 + FE707BE8C67F065F97C1B735811E095B437F1E331788B4D6D3FBD7CF8D5D7A74 + F39B479AAE877985F586838DE891D83B46A3D76F347ACD0500DA2BDE47C6A265 + 5F9CF49DDDE5F50F055E014C03FE06D87AB2959D5EBF574AB93EB0E7BD4B45A6 + 7F46D1601BF649B37465843B5475A6E38131293672D3ED666DFBEAFCA1873EFE + A9E51F8F53DBB9B736B0B06C7FBD2E25F33B4FECF0751EFBEA52E1E00F1261C1 + BDF4151C5317CC42B00D49998017964D4E1FFB5C4116D7B8A0AA6A5A7B16AE2A + AF1BD7D4A16F1CE5D41ED62332BDB527AC866A8ED7F93E7D0E62D138042EC30B + 802F81E591F696434AF248A710E2B5244D59BD68629AD6FF244BB55B89C4E4C1 + 33FED083ABCA6B6F690A862B91725B2CAC97B46D7D1519E92554F72344C35762 + 4CE03381AF8047F486EA83CD1FAD45F3E4905AB8166DD4048F1014D3F728B56B + 4AF5E2BCB4FB2BEBDA6F6E0A1A95C00E19319E6AD9524AEFE9EFAFBDE720F019 + C07604457A43F581E60FD7227BBB2E9569D993B04F98896D741E9604079A2717 + 61B14C00AA10EC9461E389962DA57230F8FF0584C0BD741D8E690B66F46D5EAC + 3754570D840F8CABB084E45945B920AA80DD3262ACF26D29952113F895029737 + 9F0E6C4752AC3799C39D731EC335F7F11C21C401E05729E5E3B2B73316B970DE + 140EA00E80DF056C97D1D80AA3B9DE140EA0654F4408F1AE10C2037884100DD8 + 9351ECC9710A08817B69593FFCEB18B1957A5B7D65EBC74F9BC2018C062F727C + C1A3C001C08F9445321A3662A1605C02C2BD6C1D8EA9F7DD09EC90929546DBD9 + FD2D1FACA1FFD91C4F522E9E018F401C04AA65C458E2DB521A8EE70C2823576C + BC0328071E355ACFED6FD95C322438406FED0F58347BA76DCC6DE5029E178A5A + 90943FA75C6FF4C622FEC6417B2D40A6443E66B49EDBE7DBFC34B1CEB621C1FB + 13F8F61D82873F6F04EE41CA29C2AA7D9EB1F20D3561DC9D83F62922D159639C + AF39D3B67DFD90371F98DEDA13089BBD23614CFE4E102F0A8B72873D6F7679F0 + F8D7928871D51E35B06BD30D410726F0CDDB00E7920B8AE600AF0855B3A2A8D1 + 6BD5FF0BA3E33FBE6961D0460000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000763494441545885B5D87D7014 + F51DC7F1F777F72E77975C729790471E12C8A020822D88C54A7D0003A2A8B553 + ACD352DA42456B402DD58AB6455BD1B6533BB59D4E6909DADA69B5C2B4652A55 + 1E843046B0142A8CA20962091C0F93CB5D2E905C9E6F77BFFD23866081B087C9 + E7CFBBFDFE7EAFFDDEDE6F7FBBC22789619235790EA1EB17E02D28F38BC85C60 + 3630051883900DF4A03402B5408DC2DFD4B60EB7BFFF062DDB9EC76AAC1F700A + B9589BB7A89C61F356E01B755950E02160695686993BBD2C87C9C38394857D64 + FB4C7A6C87C6B61407E29DEC8CB452DFDC85AA6E52F811B6B5A7A5E6454EBD5E + 058E3D78C0C0E53750F0A51518BEAC0AE0F99121DF88FBA69570FB843C32BDE6 + 79EB5495FDD10E56EF6E60F387A7545557018F74D5BFDDDDF8C2C3684FE72707 + 0626CEA0F02B2B11C3F36D117966D19545B2EC732308788DB4C6792BD2CA231B + 0FD390ECD983EA6DDDC7EB9AA26B969C853CFFE99E23DEE24B28FCFA33185EDF + B20CD3F8F92FE696CB37AF2AC66BA6FF438C0AFBF8FC8461EC3A961C116B4FDD + E40915ACCD281CD3D5FEEED68B041A26C58B7E85375434C730E40FCFDE5A2E73 + C7E7A50D3B33995E939BC7E5B2BDBEA528D1614DF21696BD6CB526E83971A07F + 5AB78305A7DD4146497908E1F9C59F29965BC67D325C5F427E0FABEE184B5686 + 7933C8DDE19B2B117F304DA01884AEFB1A208F8ECEF5173D78CDF041C1F5654C + AE9F077AC77CCAF4670783536F4B0FE82F9F8227541804EE5BFAD9E1F83CE9FD + 21DC64C1E4428A8219C3446451F0AA5BD30306C64F470CF94238E009CE1D9F3B + E838009FC760DEA47C80051945E598E112F7405FD944803933CAC3649883DFBD + BECC1E1B464426A352E81B39DE3DD0933B1C60EA941159438603B8AC3013BFC7 + 4084A99EFC52C025D00CE60922A34787FD430A340DA1349C01502EA60770BFCC + 640A78B27D69ADEB17956C9F07846CA477F1770BB4002C4787CAD53F91ADA0BD + F3814BA042B7AAB6C4DB534327FB281FCD11437B9BE10A68373700D47D103F7B + B7319869E9B26848F60850E774B5012E81A9583DC09B3B23AD43A703FE753489 + 83B629EC4BC522804B60D7E17740F5EF6F9F6893E32DDD4306FC476D02940DD8 + 56AA3BF28E7B6047ED1BA8B0DB51DDFBDC9EE890E00E253AD976E814C0EF3AFF + BBE7F4BED015D06A3A4A57FD5E407FF8F2BB713E88770C2A4E55796AFB316C47 + B7013B92FF5E7FFA3BD7F7AD53AF3F872AAFA66C5DBFECD57A3A7ACEFD0CE122 + 6F020F034EDF077FDC1BA3E6704B87A2F7771DAFA3B3B6E6F4C1AE575EFB5414 + 4F5E09BE924BB6263AAC2FD6C63AF2E65C9A8BC7486B37FD96A37AABE5688D21 + 4445E4964D079BE57B5B22A8B2586D7B7BECC5C7705AE3A70BDCDFF90D13C397 + 092202B4D51C69E51B7F3D481A6BE3AEB66E7BEEF7371F69BB61CDFE9CF5EF27 + D6AC7FBFE95B0F6EA8776C4797ABF2E793AFFD9AD4B1DA8F15B93B7DC3A4E0CB + 2BC99A343317610B8A012C04AAF2B3BC531FBB7E14B74FC8C390F30EB7BBADDB + 9EF3F8D648EB2B75CD2B55F5CE8047AE09FACCE6448735CE76F483D69D6B39F9 + CF5F9E557861E09938D8426FD767AB6525304DAF882C4764F9D83C7FE0AE2BF2 + 993536975161DFE97247F53F1D3DCE4D8F6F8DB4BC52D7FC04F084AAAE56D5CA + D61DEBB4A7E1204E6792CEBA9A734E3F30B01F17FE08E70166A5E2914474CDFD + 04A7DE4268E6420C8FAF0858027C5544CA86657AB42CEC6354C8B76FDEC4FCD9 + EBF6C74F6E38D0FC03902755F539E0DEF6FDD51AFFCB8AF33EB05F18F871DC66 + 840CA022158B24A2ABEFC36E6B06C00CE69173ED7CB23E350B335480888CA3F7 + D54759C06B54F94C696EE9B61F05795AD11750EE768B3B3FF0DCB859A958A4E9 + 4CDCFFC75B7209BED28998D979042EBD1A7FE92480EF8AC84F15FD13CAA2F6F7 + AA9DF84BEE7070AE65A60F77C5CC10C266047F2FEE48537475E57971004E5B33 + 3D270E60044284A6DF8518C67744E467AAFA12B0B07D7FB5E3B6737DF97807FB + 3B1742D88412002A52F1813B7766FC13AEA570FE4F304CCF0322F2ACA3BA16D5 + 052262771F79074D0307BD17FDD938D884A3996A5361359F688A56B9C301042E + BF0E31CD4522F22C2002D311F910C03FE6D369E1FA81FDB81C60A34296AADE68 + B5C4E2B1171E728D031005941D8A4645A404380C0CFC1270A0F1FA7133724036 + 014107A7A2A735118B572DC16E3A9AD6809EFC528AEEF90D9E9CFCF18254F76E + DF750622873A0FEEC24E26D20316CCFF31999366E408B211C851E5462B198F45 + D75462C78FA535D869644129C58B57E1C9C99F005403DDC08C543C52EFF65AEE + 8B91357166B620AFF5E2B422956C8A35562DBD681C80153F4A74CD12AC64A216 + A800FC20DBBC8565A38BEFFD2D66D0FD8B2703E14E20ACAA154E32D118ABAAC4 + 6A8A5C34AE1F19215A5589954CBC07CC020D02DBBC8565A5C5F7AE728D34147E + AF30CD4A261A1BAA2AB1D2BCE62E846CACAAC44E26DE0566A31242A9F6168C1E + 5974CF2A0C1748C918311EF16562351DC33E631F3698F11694D1DBB5FC2B812D + A00955BD3ABEEEC9E68E7D1B07AC35ED6413F6C906B47B70B7F167C6E968A1B3 + 6E275993663618BEC076401036B4EFAFC66A3C3460EDFF009EA021DD536B7A83 + 0000000049454E44AE426082} + end> + end + item + Name = 'unused\find-arrow-right-2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000027C49444154388D7D924B4894 + 6114869FF3CF8C77C5BB8DA55964A15020149425744170915D2882D4556EB240 + 5C44D426BA4088461404B950DA1494E9A602090C0D2A153385C242BA98E3E494 + 33CEA0A333A3F3FF5F0BADFCBDF4C2B73A3CEF79CFF98EB04496F81452CBAF13 + 95B36D8720E780BD0889281CC05385AA9B1E681F73B75C83F02C62A2AD11D8CF + 361169CFAD498BB5D55517666AC5B94924455BF9EE0BD2F2DEC3BD3E97774E57 + 87A7DF77BC197F70D1DC3DA1A88C9CDAEE83450DFD61A72F10D6757DD97BF965 + 229C5BDF33BEBEB6CB1EB5651796C506C947CF638D4F69BD7368535A7E7ACCD2 + E900C84E8C6266D688EE73FA6D883CD7161723D66CDCB4362132AF303B7E45F8 + 8F8E6F4D0128B5A566633210B16465274622222B938B52206421623650E0F506 + C2FF8501BC8130287C28CC06FA94E7C3903BE019F606576375DD50379E0F7967 + 804E23E0372FD196B1C188C8DC6CF93A113A509A978C661E459F0C862B5B3FB8 + 6F36F4B8BAFDB37AC754D7E31FFF12888616110D42EFABEF93AAB275886F8B92 + 7866E62EDC7EED7C78E5C548FBD8D4EC4F632EF876AAF7C9C2218946EA894BC4 + 1594142134A32807B66B22C7F23362243DD6C6882FF4D9E10B9E0AE8C6110DA9 + 078AFDEFDA3E89098666E0646874B0538B4EC096B20E1141E6178C520A854290 + 32A05641B1B600EF019A114E861C839DAEC66AC2BF8611110330141880212286 + 269A2122F745649DC05D6B5C41C9EE05B82CE418EC743555A3827EE63CA38446 + 3F9AEF2426016B921D416A802AA5A8B00215081521C76087AB711E069878766B + D91F669C6EC29268AF16E10CB06F7AA0ED8735E4FC54A54FBA197F74F92FBC9A + 2CF1A9564D6427B0DFDFDFE674375FE53779CD11E4FFD6EA470000000049454E + 44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000034649444154388D8DD34F6C54 + 5514C7F1EF79F3DA99523AC380356D401BFE588C12755103A6D1DA61F813928A + 424D3796442922BA293B35D18D4B378A0B5A4C6AA3544D30C485348889118D0B + 032554A048B1750A8C745A07DA3EA633EFCD7BEFB8181B9D4E2BFC929BDCC5CD + E79E7BEEBDC222A96A6A271AEF40CACA370A72007816A11625030C025F2ADAEB + 2487EDC92FDEC5FD6B0C0059085BB6E555229B5F3605F9D010D9DFBC26427CDD + 32564682641C8F81E41D8E5F4A736B363F8CD2EADD490FDD3CBC1FF7D68D5230 + 58F71835AF7523227DD595656D1F3DB796275755956C3A937379EBDB0427876F + A7511A73D72EFC3E7E781F464975F17D88487B4599D1D6FB62FD821840386472 + A8652D4DAB232B107A83751B083DB4A91894D05242EB1A00DEDEDB50C3C3D54B + 166B31000143786F4B1D6501639320B1258F3E530C96D7AC4144D68B487DEB86 + FBFE179BCBCA4890A71EAC026829ABAE9B7764C304A1BEB2DCD05591F27B0281 + B993D42394F610C530441059F0012C18A3B0D40099072A288C58B627E39673CF + E0D5741660049D57A19BBE0EAA975475ECEBA1F4DD1C57555F4F4EDB833F2766 + 00FA3D2B5D0C7A339338A95105DEEFFA659C6B53B9C5B07C2EEFB59FB9611D79 + E7BBB1AD794F3F57D593D9DF7E2AEDA13D3608F0B1E5B8C93DC786B932395B82 + E53DFFA5A3E7278EED3D7EF5CDD37F4C5778AA7BDCDBE37EE6E20F98FF5D196E + 6C23BC719781D08552797DCAEE7FFEB3CB3B763EB2BCF0F5C2412CDBB3BE1F99 + BAF2D585C960C6F1B70ABC0234AB6B2703A1A5FF7EBD70631BD19683227004E4 + 05D06DC000B043848660C020681A78AAE43D9DB05DAFCB57AD34C4F806A80562 + CE44E24F99877503BB806DBE931D98FEB18F68BC03A0E419A9EADCA412917EE0 + 7E20661461C26E84EDBE9D1D48F57492193881883489880F140D11290CC3B044 + E46911590FF499D1964E11E842D80D6CF7EDECD9D4279DD88941CC682DC079A0 + 79A1ABFEA74A1338042C57F40D53900F105A0BD8EC9954CF41ECC420009E95E6 + 66F78169E0F47CAC2ADE41C5EA270222C6511156A0C4D4CE5E368113287DBE93 + 2DC200D475C88D9E2BA92C10A921F4C0E301413E1588A16CF69DD9A1544F2766 + 76F4DC2980A953DD45D8DD22855840DCB7672FA67A3AB1C77EE56F75B35E3FA6 + 17879B0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000045A49444154488995945B6C54 + 551486BF75E6CCA597414BE90CC50AA5ED40B0351852484B6224868B82621489 + 12A325D188971063A22FBCE08BC40BC6A8D1EA8B01242608D60B125B0A0E5830 + 78C1480AB4361028A4052974A6B433D3B99DE5C35C9C765A903F39C95A67AFFD + FF7BFD679D2DDC00766F35D39E780347790D088B04590F2C419805182817810E + E00B450F2547020CB6BC43F8F4A12C874C46EEB8B316EFB31F60388B4A44E463 + 84B56E87298D33DDCC9EEAC210E80D4439767198C14802545B55791EB5FAAFB5 + 6C61E48F1F2617300ADC94BFB213F3368F57440E384D63DECB0DE5342DF052E4 + 3034B77634A1F255E700EF75F4118A252F00CB34993C7BF9B30D442F9C9C58A0 + 64E546A6DCFB942982BFC8616BFC7C8D8FFA0A37AAAA2292DD939B775F09D3B4 + A787ABA178B7A28BA297CE842F7FF80CC678727115E36E780C119E1391C55B56 + 54525FE19ECCC92CE69615E8FBABAAB019324F90D79DD37D382BEFC91770CEBA + 1BB1BB005E5D5851ACABE696680699534F940334CE74EB725F89022F81BA0AE6 + 36E60B3866CC4144EE12919A35B5D3525DA5911B8FCF33F1E375A500A522D268 + F7CC9EC0229B09421DC0FCF2A29B5A331EF3CB8B33619D0898F925028A5B519D + E2B491B121B39A1B4FB496DE23801B24BF0352E541119140249192BC058B0291 + 4466CA82A0F902AA160A27003DDE3F72534B7260017ABC2FBBE7044ABE40FC52 + 0FA89E51D593BB3BAFA23A76522699A218F0642896FC6857E700403FCA6FF16B + FDD8C60B244341A62C5E8BD8ECD7074289474B0BED32BFBCF8461645E396AEEB + BB1EFBEECBBF06F6B7F504A7461356ABA247836DCDF90224A2D8BDB3714CAF39 + 85D0F04BEF70B5AFB480EAA905640472AAA396B26E5FF7E0DE4D6DE7171C3C1B + 8C8E26AC6F81DFE303BD56A0F5937C8B5CD5F514D62E01C187521BB32CDDB8F7 + AC6C3ED0CBE591F898AB251849BCDD717E686FF3B1FEA2DE60745FD2E247556E + 573431FC6B0B58C9B17791AB66219EA67731ECAE390807D313F530F034F0A2CD + 10479DB730759B229C0F8E8606C389D5E7062387151E3044BE064E2ABA4263D1 + E0951DAFFD27E0AAAEC7B37E6B8A1CDA416CA0CB14BA4011E40E43F03A4D03A7 + 696000D1A4124B5AA158D2FA5B551131560AB21BF484C24A8D8D06254BDEB415 + C3E1F2010748FD804B11BA86FCDBB1975552587B5FE61B643B4E910AE971CABC + 5B25227B803F81070D57CDC2D4C953E407116CC052A02BF8D33602ADCD2406FB + 0036034955CD3E999C740C2445E47BC0013400BBCCB4E73EA03D4DBE1C499107 + DB3ECD9E56440EA5EFFFBC0E32711A5EE005601878D334ECAE9A34B90358069C + 1AF2EF18431EFBE71CE1D31D8781C3E3A70EC0E69985BDB402148F88B40323C0 + 6A553D22956F1DDB09727FFA839EBAEEDF462087FC66B0975551B6A1195B91BB + CC26463B4215CA438AFE1CE93A82996A4767003D43FEED634EFE7F607AAA305D + C58582EC07AA501EC9905FD9B90933DC7D6404E889F67632E4DF7E4BE4598884 + 11F90638AAAAFE48778A9C649C7F01E0E11DF39675EB840000000049454E44AE + 426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000564494441545885AD96596C94 + 551480BFFB2FF3CF46E9B4032DA505AB965A6915306E2CE280B249A20F082EB5 + FAA28951704B34714D306830714F8C82BB01979612152D9B2BA5468D56AA2D82 + D4525BA0D3E974DAE932FCB3FCD70706AA449929CC79BEF77CDFB9F7E6DC2318 + 6568B985645F7D07AE8A795EA16A37000B810A047920245276014D409DB4121F + 0EEDADEFEBDBF62AF1EEB6FFCC2746031F33F37A3C8BEF762ABAF1A85D53562E + 29CD715C756E36E5794EC6B97590E01F8AF16BD710DBFFE863DBFED06034613D + 2713B1B5A1ADAF98E15DEF9FBE8067C94AB2E6DC542284D87CDDF9B9E73D34B7 + 90F16EDB29F71C0E9BACF9AA83ADFB434DC075E1DD1FFED5FBE9F3FF5AA3A657 + F90AB217DC314557956FD72C386BF2FD730A71D9526F1D63682C29F530D6AEE5 + D51F0C2FB3154DAD95B168BFD9BE277D01CD5B445EE55AB750D52F9E5E583CE9 + FA0BC6A5E37C2284104C2B709365A859DFB6F5FBECE7CC787B78EFEE8435104C + 4F2077D963D8F28B9F5A56EEBDE69E59134705FF675C38C1C5FE9E485E6BAF99 + D072267E33D458078072AA4DEAD83C9CA533F39DBA7AE783730B4F1B0EC74EE2 + 115F113655B9DF517271B6E69D945AC051361BA1AA95D79E9F63E43AF5331200 + 28C8325838C5E3168815CE0A5F6A01FBA47280450B4A3C670C3F1E0B4AB20116 + 1905E7A516503DF920985691EFCA984032D7859A273FB580A2DB6D3645F1781C + 5AC604F25C3A08F21122B500C7DE8ECC181D92AD6FA4FF9D524026E2A619B7FA + FB8FC633C60F0CC540CA6EA44C2D90E8EB0268FAAD6B386302C95C4D89C1506A + 01B3A30560FB8E03A18C0924736D333B9B530B0CEF6B4022DFDBDC128CF545CE + FC1ABA07A37CBE2F342CE183C8EF0DA905E281768EFEF973E7A09958FF6CFDA1 + 3361C7019EFEBA13336EBD1CEDDC1B8C76EE05D2F80BE23D1DB82FBAA6A1B93B + B2BCD863F7948E738E16DE1AB7E4DC8DBF04CA5FFBE148444A59D553BD3A16EF + 3D9C9E4022DC8373EA15A63AC61BF9B2B57FE9E46C835148FC111C8ECD7F71F7 + A1B6777FF66F8AC4AC8F07BEAF0D0C34549F58706A01A1E05DFE38CE29975D81 + E09584251FD8B63F34D53F14F3CC2870E3D0FFFF0613963C18188CF91EDEDE3E + 5CDB1CFC2412B31AA2DDED07BADF7D10A495864012EE9EBE680EF0117043BCCF + BF5918AE779AFDC3AE0DBF04A61D1988AAAA221863A83874152925C1E138DF77 + 0CB0EE47BFE3D9FACE6F9ABA869A915C89E049D535768BEA99108CB4EC82647F + FBEF916C043E1BA8066E343B5ABEEE7A6315B682127296ACC236B1AC40082A49 + 0EA59A22720119B76410D803D4011B22AD8DDD7A5199A2D9EC6F02F3A594BE81 + 9FEA0EF4D6ACFE1F8111F82CA006C14D6647CB575DAFAF421E1D3CB1CC563415 + 67D96C8C49E5A8595E14BB5B03A47574309108F76076B610F9BD01F3E01EEC25 + 9732BEEA1945D18D7780B9524A5FB8FEFDD6D0672F9D242004DEE54FE09EB168 + 56B2F24AB3A3E5CB93E1A713490955D18DF78099207CFDBB36B48D088C543E13 + A84152691E4A0DCF597A2FF6E26913D291D0720A501C591AF01682B391F8B493 + E09703353261DD12ED6A4FAB723DB710A3B0ECB4BA9444BEA01D3BF6C78EC337 + 595855664FFB1781B7EE4AEBD8139130F17020AD6955716421349B03F8082174 + 04B70BEF8A27704F5F7C19502B2555D19EB69DFE7577737C6CCE5424DF805DD1 + 8D8F8102605EFFAE8D01CD3D7DF1A5402D706B347070A77FFDCA8CC38D924B18 + 5FB5D65074A316289496356FE0BBEA40E8B397D0807C89BC2D1668DFD1BDFEAE + CCC3275730FEE6B53645B76F028AA594BE81C63A7FEF9617005085236B5FF4F0 + BED69E9A351987034CBC6FA3AEDA5D3540A98479838D5B8FF4D63CC9F189480B + 7DFA5CC6A1FF0C61380DA00F983FD458773858BDFA041CE06FF212419169808F + BA0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000755494441545885BDD87B7054 + E519C7F1EF73F66C36D9DD64730FE1168C37D0500B6269A5170981A298D68E4A + B514AD54FF002F056D1D3B533AA5D8960E9DA2B6430B629571BCA45AA5100C20 + 9442A52A415AA4046D3110029364371B926CD86CB2E79CA77F845C908BBB81F0 + FB77DFF3BE9FF77DF6BCE79C57B890182E7C136612F8DA5CDC7945A922320B98 + 014C042E434807BA519A801A60A7C25FD4B60E9F3CB083B66DCF6135D59E7708 + 19ACCD5D504CCE1D8BF18C1AE717780C78C897E2CA9A5294C184E17E8A323DA4 + 7B5C74DB0E4D1D713E0A75B2ABAE9DDA9618AABA496109B655DDB6F3255ADF5E + 0D8E7DF18069D7DE44DEECC5181E5F19F0DCC88067C4FCC9857CE39A6CBC6ED7 + 39AF5355F6374659B5BB81CDFF6B55555D093C1EABFDA0ABE9851FA2DD9D170E + 4C2B994AFE77962286B9504496CFBBBE40167D7904696E23A97EFE59D7CEE355 + 8769887457A35ADE75EC6073E3B30F9E813CF774CF12F7B02BC9BF773986DBB3 + 28C565FCE6B7B38AE5FB370CC3ED4ABE10A3323D7CF39A1CDEAB8F8C089E8C7F + DD0CE455A4E45F163BF9E1D641020D17C3E63D8D3B5030D330E4F915B716CBAC + B1D949C306C6EB7671F3D5596CAF6D2B0847ADF1EEFCA257ADF630DDC73FEA1F + 36D1CEFC936F23A5B03880F0DC035F1826B75C7D61B8DE04524D56DE7605BE14 + D7CD20F767DEBC0049F527091483C057EF01E4893159A9053FB871F845C1F5E6 + B2AC541EE9E9F349576ABADF3FA93C39606AF144CC40BE1F98FFD09786E33193 + BB2112C9DC09F914F8537244649EFF865B9303A68D9D8218F2ADCC34D33F6B6C + D645C701784C833BC6E702CC4D2928C695599838D053540230736A712629AE8B + BF7ABD99714526223201957CCFC8B18903CDACE10093268EF00D190E605CBE97 + 54D340844966EE682041A0CB9F2D888C1993993AA44097218CCE4C0128169709 + 24BECD7805CC744F52FBFAA092EE314148477A36FF44811680E5E850B9FA07B2 + 15B4673C4810A8D0A5AA6DA193F1A1939DCAA9318268CF622404B45B1A000E7E + 1C3AF36DE362A62D66D110E916E0A013EB001204C683B500FFD855D73E743AE0 + DDA3111CB443E15FF1601D90203076781FA8BEF1C1F10E39D6D63564C0BFD684 + 41D9806DC5BBEAF6250E8CD6EC4085DD8EEADE35D58D4382FB24DCC9B64F5A01 + FED879A8BAEFBD3021A0D57C9458ED5E407FF6EA87213E0E452F2A4E5579727B + 3DB6A3DB807722EFBFD9F75BC2CFADD6B7D7A0CAC6B8AD6F2EDA584BB4FBECDF + 10496695E5E89AB57B83EC3CDC1655F4E1D8B18374D6ECEC6B90F0CE6BB73662 + 6617E229BC726B386ADD5E138C66CFBC2A0BD318F477D71F6C471FDE7AE8C4C6 + 653B8E8D8A59CE4AB5EDEDC1977E8CD31EEA6B6426DC9DE1C2F0784144808E9D + 47DAF9DEEBFFE599F2CBC9F3B993C5FDFE686B6CE1E3558753F71EEF706CE501 + 55E5C45BBF235E5F73FAB089E2F2EE5E8AAFA4340B613380AA4EDC5D1FD973EB + DA03AC3B10C6D1C49E32D16E7B4DDD89D8C2A57F3B2AD5C73AD6D94A85823B76 + 641F91775F3FA3FD6797B81737BE340BD8726A5233D4B28E20B2B633EE585B0E + B54EAEFAF8843B6E3BE47ADD0452CF2C4CB4DBE69D23ED3CF36E43FA9AEAC637 + FEDD703282E2C7904705AE35B30ADE70E78D71A20776C080C99EFF0FD48FCB3C + 853381E9F1505DB8F1D987F14FBA8540E97D18A6A7007810F8AE8814E5784DED + FF70579A3AE21C6DED22EE6817AA55C0322716DD839986B878D0308C6754F575 + 559D13D9BFCD6A79E5A7A0CE67004FC76D464801CAE2C1BA70E3AAF9D81D2D3D + 25F06793F19539F8AE9B8E2B9087885C4DEFD107A78E3EA009B406E47D453B63 + B57B69FFFB8B18B9A3C8297F1443E4111159E1A856A8AD734F56AFB7C3EB7E75 + 1EE0D971D3E3C1BAE681B84FC75D78259ED125B8D2B3716515F675EE74766047 + C258E17A6287F6D0FB9C0548BF7136D9E58B1091474564B9AABE0CDCDBBEABC2 + 69D9B0E22CC05EDCE74A03C06620B567E58E3437AE5A704EDC85247DCAB7C92E + 5F88203F129165AABC08CC6BDFF58A733AB07FE502089B50D280B278E8FC2B37 + 30819BEE21EDAA2F268DF48C1C87A4A4013C2122BF50F40594FBFB6FB78138D8 + 84A35EB529B35A8E3737AE4E0C07E0CE2B22EDF2EB5F069256EAA9BB57C111E4 + 3E45A3E6A770194095824F55A7596DC150F085C70653D67D402C291C7D5B4BA6 + 4091420C6183D98F9B9A016C02FC8A53D6DD110E859E7F04BBE56852B2D8917D + 00BF4EE61A315C78AF9B0E869121C86655ED066E57C7DE2279737E8977FCD40C + 41AA800C55A6599150B0F1D905D8A1FAA470838AE122F7EE9FE32B294D17912A + E07AE04E75ECCAD0CB3FC1F49594A6036FF5E0B42C1E090783AB1FC26EBE0438 + 31C8BD6B09BE9252BF886C0426A9A3B371ECCA50C562A2FFD98E89702790A9AA + D39C48B829B87A01567372651D6C72662FC13BBED4272295C06445EF52747D4B + E5D344F76F07C050F893C2642B126E6AB884B8ECF285F83F5FE63590F5C08D0A + 7350DE6CA97C8A8EF75EEB6B272923C6221E2F56733DF680F7B0A1CE9865EF09 + B009612ACA5C55AD68A95C4164D79F4F6B670E3CCDBC9451C75231CCD750D62A + 5AD152F9D4193880FF0383A82AD53E26E4120000000049454E44AE426082} + end> + end + item + Name = 'announcement' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000001A049444154388DAD933FAF12 + 511047CFECBDC0027BF78F0909794A089190174220D22CB0171B4AE403182BBF + 82BDA1F01B6D6245635E414D273DAD21A1B0025D0B1FFB7C091A34FEEA392733 + 9319E12FA394220C43C230C4F3BCB25C03B9AE9B43C6981B119903AF80D94581 + 88E0791E6118124511AEEB0EEF8185EFFB2FC6E3B12449C272B9945CF06B6B41 + 1094B5D6B37B68DE6C366FACB5244942BFDF472905C0643211DDE974504AE179 + 5EDE9AD67A36180CCA67A8D168FC763C1D45D17700DFF7B3D16884B596388E31 + C65CB5540DB05EAFB3ABAA2FC4F957F0BF0934FCDCA6EFFBD9783C663A9D12C7 + 31D56AF52A81F47A3D9452944AA5A7C027E06BA150E80C87C392B5166B2DF57A + FD223C994C1EEEA0D56A51ABD53E6759F60EB8039622F25644BEB5DBEDDA5976 + 7B7B8BE338B9409D05C6188C315511F92022CF44E435F03ECBB237FBFD7EB5D9 + 6CBEA469FA244DD3DA6EB7434458AD560F1DB8AE4BB7DB456B3D075E0277A7D3 + E9E376BBA55028E4575A2C169F8BC8025800F6D12F68AD098200C771C8B28CC3 + E1C0F1787C3477A552C97FA452A944576DFA4FF901AE7E542B38D2EF00000000 + 0049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000023249444154388DCDD4CF4E13 + 5114C7F1EF99DE994A3B7FEE008D906A0D93B2205D584B8AB47317A8241A4A9F + C0ADCBBE846B75C15257266C64E51BE81BF401587439909068E216D2EB423A50 + 1044DC78D6F77E72CE2FF71EE11F4B2985D61AAD35E57219B90D522A95D05A13 + 4511BEEF23220F816D60FB46A0881086215A6BE238C675DDA2883CC911915AA5 + 52B14747477225787E94288A28140A7781DE29B2E9795EB9D56A618C214D53B2 + 2C633018883A8FCCCCCCE4C8C55180F6ECECAC74BB5D8C31B4DB6D4AA5527E37 + CBB25F8D24498288E0FB3E9EE71545E4E929D013915ABD5EB7699A628C616565 + 05C771AE8D47552A952FD65A8002F0C8F3BCF2EAEA2A699A92A6A95D5858B849 + CC6720B0D1EBF5ECE2E222F57AFDD2287F5B0A606B6B8B56AB756BE47C5D1FC8 + FF002A809D9D1D7CDF67797919630CCD6613A5D49FEE5E09BEDEDFDF07280C87 + C3EEDEDEDE461004D2E97430C6B0BEBE4E10043706A55AAD2222044180EFFB81 + 887C073E001A78A1948A9ACD26C6188C3154ABD5DF42C3E190C16030FDF5D6D6 + D642E09BB5F615F0117045E42B701F381691646969C94EF046A3913FF4093815 + D4783CFEE138CE6711790BDC031E001DE0A5B5F693B5B6311A8DFAA3D1A8BFBB + BBFB388E6399FCA249E6531D2649C2FCFC7C00BC019E03C7C03BE07D96658CC7 + E3B3BD273259167D60D3719CB2B5761A741C875AADC6DCDC5C3ECAC9C9098787 + 871C1C1CE4E75CD7CD5759188688C81D117906F46FB5602F36118621711C532C + 16FF95BB5C3F017C0C7B70B4D703C90000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000002EE494441544889B595BF4F23 + 5710C73FB3FEB15EE3FDC5F1C356CEA0C8D2D11824840C2CBB499348492E47FE + 854850A64BBA14B9F6941A8A34547456DAE80A28A822A5581A74149748962251 + 044441D04A9C0593C26BC7E63007E432D24AEFBD9D9DEFFBCC9BB723BC67CBE7 + F3789E87E77998A689BC8FA0232323789E87EFFB5896055010918F80670F1230 + 0C03C771F07D1FD775C9E57200E322F205F00CF8147081BB13E4F3795CD7C5F7 + 7D1CC7413A5607BE4C832E8948667272528320E0F4F494BDBD3DB27741F73C8F + 62B138809E06FE3093C9C8CCCC8C86614814455AABD5300C43B7B6B6E42D0111 + C175DD5ED03EF4A769D04F00D7B22C1A8D0661181204818E8D8DE9F5CDA97696 + B253535300140A851E3A50179101F472B9AC41101086210B0B0B98A689AA6AEA + 2F7DE3EE7A47A052A93CEF531C073EBF0DBD1BE4AE9655D51FBA933BA2EBB0F9 + B571474044647D7D5DD7D6D6AE230E4397FE8037BDEB4F91711FDC8758F616C4 + 778EDFE1D71148B114E016DC07A7280B10C731AA2A9665B1B8B848AD56BB6FB1 + 0CB52CA0FBFBFBC4718C88C8E6E626954AA55B9ECCCFCF4B7AE11E26A0AA99EE + 44552780AF8F8E8E5E349B4D6D369B522A95585A5A228A22969797C575DDFB9D + C1C1C101D0B9031313137FD9B6FD2AF5F906F8F3FCFC7C756767E7E9EEEEEEE3 + 5C2EC7ECECAC846148188654AB55350CE3F633489204802449300C03DBB6FF4E + 9D1E013F01BF008F81DFDBEDF61F711CBF89E3786E636343A6A7A789A288288A + A8D7EB6432BD640C9C413F2EC0AFC06B11F93E5D6E01DFA6BEDFA9EA4BA00AAC + B65AADD556ABF5F1F6F676C1F33C595959218A221A8D462F4503A5629A267373 + 73A4FFF99F810F000B78033C077E3C3B3BE3F2F212C771300C031171E93498AF + 80CF4464DC344D6CDBE6F8F8F8ED86532E97A956AB00791159002681DF54F5E8 + E2E282C3C343DAEDF6B0AE9613916560357D9EDC58ECC56291D1D151B2D97F33 + 9824092727275C5D5DDDF409A552A9D747D2BECC5081FF6AA669E2BAEEC006FF + 37FB07052346EE403BFB360000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000352494441545885ED97CF4F24 + 4514C7BFAFBA9AEAE9E95F058CC03021911FBD41A067C5CC80CD74758C46E366 + DD193D98BD7BD88D57AE9E897AF3E06513AFFE07FA174C3878235EB870202686 + 90C881648636612C0F4B4F20BACCC232E866F79D3A95747F3FF5DEAB7EDF025E + F5A0DB14638CC1F33C4829E1799E383939F9930F5B94738E200820A584EFFB3E + 11DD23A216808F4E4F4F83A100082120A5441004705DB742440F00342DCB4A6B + B59AA994C2D6D61611D1CD95C0B6EDBEA86DDB4B44D404D0F47DFF9D8D8D0D52 + 4AA15EAFA350280000E238A64EA7C3AE9D012282EBBAB9281342C4009A009AE5 + 72792E491228A550AD566118C633BF732500C6187CDFCFEB6999A6F901802611 + 7DB2B0B050524A412985F9F979103D5F72070270CE21A5CC3B5732C6EE036872 + CE3FAC56AB45A5149224C1D4D4D455F6723940DE44524A388E3393D7B3502824 + 6B6B6B5C2985388EE1FBFEB5442F0094CB65388E7341DCB2ACE84CB425A5BCDB + 6834902409EAF53A84102F2C7A01C0711C4829FF3ABF383D3DADF3D4AEACAC5C + DA442F0C903F6C6F6FEBA1A95C12ECBF107D0DF01AE07F05D03F86711CF77FDE + 954A45A7690AA514969696C0D8F038696666069EE7F517464646C0397F1B400B + C067E3E3E36F254982344DB1BABA0AD3346F44381FC7FF18594404C771303131 + 0129E5E744F408C0CF005AAEEBAEC771CC9452585F5F876DDB370F9047100408 + C3F01B007F1C1F1F7F6B9A262CCB9A3C73372D21C47BB55A6D244D53341A0D04 + 41702D8041E3380350CCB20CBBBBBB10421C48299F944AA52700BE6CB7DB0FDB + EDF6EF86617C1C459193F7CD5546F33333E0380E161717D788E847AD75B4BFBF + DF393C3C84EFFB989B9B3339E7BF68ADBFCAB2EC272184608CBD0FA045440FC2 + 302C29A590A629666767FFD59C0C2C010044510421C4F7447417C066AFD7FB95 + 31768788BE0670D4EBF51EEEECEC406B7DDEF932C33062009F0268562A9537F3 + CC2C2F2FF74FD47301148B45846148A6693E06F005803B007E03F083D6FABBBD + BDBDD3A3A3A38B2925EADBB62008C039AF9ED9F0D6D8D858947BC5CDCDCDC100 + C053833239398962B1082282D61A5996E1E0E000DD6E77D0EB7DE32AA5841062 + 164F8F770BC0BB9D4EC7BCD59B516EDD4747476159D61BDD6EF7F05601CE07E7 + 43BF94BD24F1377414BF575C5184B50000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000004A9494441545885EDD74D6F1B + 451807F0FF33DE1767BDDE9D5D93908436565CC549891BD4C4516CE31D97F0D2 + AAA8A93970430829125F810FD103978A9B556EB9140984E4431501E6D0DC72F0 + A5486938414C852AABAB4422B2E3E1D0F5D24068EDBC343DE47FB134BB9EFD79 + 76663C0F7096A3854E1B70504CD344341A45ABD57A35804404DBB661DB365CD7 + 85A2287122CAF8BEBFA69C162A12898420DBB611894486A5944B447413C02280 + 35008B2F15A8AA2A5CD705E71C966501C06400BA0960616868888AC5229ACD26 + 6AB51A8808270E1C181800E71CAEEBC2300C22A28500749388A692C9A4144240 + 08818B172F8231864AA5825AAD06002703344D138EE3C0711CE8BAAE11D16280 + 5A628C8D4C4F4F4B21043CCF93C964F2B97D1D0BB03BC91DC701E71C8AA2D844 + 743D405DD3342D9ECD66218440B158948944A2E7BE0F0D5414059C7370CE61DB + 3618636F10D15280BA128FC7D542A100CFF390CBE5108BC50EF79C7E6ED6753D + 9C4FA6698288DE0C4065229A1B1A1A22CFF3E0791E2E5FBE0C55550F85EA0B68 + 1846F8EA0CC36000F2DD95474413A9544A7A9E072104A6A6A64074BC5BABA228 + 0A1863FB1AA3D168B847699A1625A277F174A46E442291D733994C77E5C973E7 + CE1D2BE83FC0B1B1310C0E0EBE0580771BA59490529E0F46EAAAAEEBB1F9F9F9 + 70923B8E73A2A87DC0E0F34B0057BA8DC1AA9485420142082C2C2C606060E0A5 + A10E02627979592E2F2F9F0AE279612FBEE57473063C6ACE8047CD19F0A809F7 + C146A381F5F5F5F0826DDB48A552C7FEDFDA6F4260B55AA56AB5BAEFE2C8C888 + 2C954A1042E0D2A54B884422A7065C7CB6514A0900C9ADADADF2CACA4A796565 + E56DD77523C56211A55209D96C169AA6BD14E081EF4FD7F5B0B8314D13003E21 + A2AF00FC04E0BD582CA6E7F379082190CFE7BBF71C5B2A950A2A954ACDF7FD83 + ABBADDDD5D341A0D341A0D8C8F8F6370703007E0473C3D72993B3B3BD7565757 + CBABABABD7354DB3E7E6E610D418E8E738DF4B7A3D518F01F8657B7B1B8F1E3D + DAE69CDFE59CDF658CA9BBBBBBEFDCBF7FBFBCB6B6F6F1AD5BB7DC4C2683EEBC + 3D8EB362AFC03F019C370C03BEEFE3F1E3C720225896D54A2412F71289C43D00 + B39D4EA75AAFD7FFA8D7EBE5DBB76F4FA452A97091A5D3E943ED082F04EEEDED + 014015C0D744347AE1C285AD870F1FA2DD6E63676707A3A3A300B000202BA5FC + 5C4A5927A22F004C6F6E6E96373737CB77EEDC991D1E1E861002A55209333333 + 3DEF082FFC4996656172729211D1CF0034001FB5DBEDDF9F3C7902DBB6A1284A + 06C0F7006A52CACF1E3C78804EA7F36C1D03221AC33FC595C7398F148B450821 + 303F3F0F5DD7F73DF3D945D2D398A7D3695896F51A63EC5B0033C188FE06200D + E02A80EF007CDA6C36FFDAD8D8D8F75D5DD7C3223EA80413006E00280378DF30 + 8C682E9743A95442A15080699AFD0319639898988065598C88CA003E00301220 + BF9152FEE0FB3E363636D0E974FEB71F5555C13987E33888C7E3608CC588E86A + 80FD5055553E3B3B8B76BB8DF5F5F5DE81DDB8AE0BC771C27A574A8956AB8566 + B38966B3D94F57608C8585BFE338608CA9447425C02E01D8E81B785209768470 + 2A288A424434EEFBFEAFAF04F0DF314D13BAAEA3D56A9D36E52C279FBF01CD00 + 427DE37761E70000000049454E44AE426082} + end> + end + item + Name = 'debug-start-filled-arrow-right-2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000001E649444154388D95D13D6853 + 5118C6F1FFB9F7B4E94D6ABCC1841A15E312900C85C614EA228D98A18BB8A583 + 75500705294271538311277172556729E8A081E24762A52D0E428BD28A834A13 + E8D0A4361D9A1B9B34F738A4A54989A97D96333D3FCEFBBEBAE3F28B0FB26F38 + A707A38B6A7303B59A0514FF1BBD233CFCCC671A2396DD19D58F47B27A70705F + 902EC3F1C4ED91D3F84C23B05CB42E5976E7E07E205D86E38958E404FE43DD0C + 848EE0358D407E07CAED05E9321C4F9C3B15004008D10272B41DAD09D84E23D4 + 305A4BA825D00ADA355A56EB39B968FF9844DB73CDDB58FDB1057C0204D20180 + 6C57B26DC5979F0532B3590A6BD6B4D0B53B4ED33525FEACF2FBDD837F038DC5 + FC5A791A54924A2973F0E8616978DCEFC11C1517C6BEAD8CDF6F066C5BF1F557 + 81F46CD62A14CB530A1EA94A29535B48519B7F8DBAFA78D3F6849E688837DD7D + 433114DFE5AE22F9627906D45D87ABEBA3E176427E197AFBA1B71F4D1308780E + 68C05B57782826BAAEBCACF94C436D1593AA62A56BF329BC9133388311BBDD8E + 945293522966F245EB9EAA94D2F5AFA6A06A513DE667C370355D4938DD488F1F + 81B8095C578A8BA2E3FC43ECDC676A0BF562BBF45C7B8A23101AD584B80144D7 + E7269664F5D5ADB6A5C6E807BC5213620038BB3E37B1B4329EE42F00DA05575B + 13753A0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000002C449444154388D9DD24D6814 + 771CC6F1EF6F66329B5D5FB28946D32498ACA2E6206AD2D24B8992180C881E7A + 902D1442B1C54B118278B014097AF7E2C19B0A62A109E8A92D2D6437458C427C + D9205A8A0DECECF685ECB26B335577DDE8CCAF874DE2063726F139CDE9F37FE6 + F9FFCDC0B1EBBF5A9D9FA5CCCEA8230DEDA8FB37146778DF48ED97373C00556E + 829E5365CC4F4FE02586D1A7CEAA41D3EA8A0E7DDABD5D83B6D59699290C003D + 46B82565ECEC7764C3EA1B9B56577468DFEE56BA77B7B2675B232F67BD0AB835 + 6576F43BD21059316C5A5DD1A10F776CA67E5D2D6B6A6BD815D9C89E6D8D1467 + BDB6EC4C6140951E23DC922E375E1E5E04CEA7127EF9CA6BCBFC5B1800E97D33 + C5D27055B02A3CFB7ACBA28D9798E29D6075786E63ADBCBC48F945949E612CBB + 72451AC321A2BD1D9C3CFA115B9BC3DD221213216EB67D1C31229F0060AD0604 + C8B905E28934CEB4EB819E009EA024F15EAD0ECCB945620F524C4E65515FC731 + E45B3B18B8658702B83F9EC77BFCF3CAC09C5B20FE204D622A8BEFEBB8C05920 + BE7E631DC1BAD06911B966F77FF1D7746A02FFF9D3A537CCB94546C67EE7FCC8 + 3DEE3FC98EFB3EFDC07E3F9F8C7B135708AC0D06103908C4ED4DED2D4DC72F62 + AE6D78BB61CE2DCE35CAA0CA1555BE07627E3E899718C64F4F8069534C1D2A85 + B6EE3D2262FC00C4EC4DEDBD9B8F5FFCC75A0425D24CFE91C1F3B90D9C458885 + 9BC2D4D4DAD028D0F1CDC2C152636388F102D5C388FC348F5A00BFDC75F833FB + DF1CA4E780513FEF20C931429F9FD90F8C1168AEBE8DC8C2A7AA7E670138D3EE + 1DCA638FFA7967E1D7ACFA0F0026819E6A96AA42F9622F000D8A7E2D816337FA + 4047CB1B8D94379A3FDCB2096CD955B5D8BABEAF0846F69A22C635117A507AFD + 52E137313BA3683EB9085A2E665D13CDA7AE9B86655C15913EE0803F5B7894B9 + 3488E52586570C5546CA7906F4F9A5C2A3CCE5414AA987FC0F9F8B521593A6EA + 540000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000003F1494441544889AD944D6C14 + 7518C67FEFCCEC6EDDDAB2A85DD84D4BCD9250A8D284FA8531466A808A1ABD20 + 120D45B9E8492F7AE1D0C612BD08674F5E8C07AD56A2091F52A42DFD8004B045 + 0D2D0874DB8DB025D2ADDDEDB21F9D793DCC6E2D604B419FD33B99C9FBFC9FDF + FFC9886F577B1748AB2AC7C84E61FFF603F6D021C8DFE0FF90E9A9DFFE39C20E + 8106B1BC6312AE1B356B3681083A310ACECC7F3330D76D6B7E78F91280EA4C6E + A649608358BE3109D545CD9A8D20167AFD3238F63D27687962F572DEDCB88672 + BF8FF144DA35121A5CA347A3E6EA4610039D88DE7522D3AA7FBD25120EB0321C + D0AA60B93CB5264479A98FF844BA3A93B39B44D820966FD408DD1B3AD35CB7AD + 7965780991500000C3102A2BCA585F1B12D768BA3A93B39B7013C524543762D6 + 6C02C35C143AD353BFBD25120E10092D410A729D0DA90A96F1F423E1B9E87688 + C8F36E19D68E98359BEF886E1651D1A0F8A2388B700BBAE915999C5D689DEF9F + D62168E27674B7219A4FF3A19B6D5D786DD45CB5098C9B5B372FA2F9E65BD1C5 + 27D2D5D9BCBD1368108F6FCC08AF8D9A359BB1A3272197C258F0D80BC8320DD6 + D786F4FDADF5AC5856AEC033881C013EC2578678FDEE77AAAAA000B8338B9A6D + 47E5D4705CBACFC64824337911794355A3A80E883A60E75D0337BA68114571C9 + 7CF38CAD72E6429CCE811893A90C82F48AC86ED363F67BEFF3928BFD4AFAC77D + 6872DC35582C92FC8CC3990B71E91A8C3199CA826A1FD08AE8B1D2A565EA0FF8 + EB4DCB8C3A0F3C39610F54912918DCF10E6C47E5E4B92BEC6B3BC5FE9EDF4924 + B37DAABCA0F01C8EFD9399BAA2FE4069A9695907400E199E92A5C1B73EA564E5 + E30BDF41E1C4740DC648243380F4017B408FAA63E35CEAC11E6CC3A8AC85BAC7 + A61DD5B70D9176E0B0784A1A833BF74E5EFBE283DBEF206F3BFC7C7E9CCEC131 + 12A92C025F817C020C89186A47FBB17FF90EFDEB2A00D991D3A4867B28AB7DF6 + B022AF09F28DC041BC252F069BF64E5A73519C391FA76B708C09F7C4FDC01E45 + 8FFAFC3E2D0F06B0BC16B26A2B6CDE5A4C8C88B8F9DDF007559D6D22F2ADC001 + F1966CB154552FFE91E0F4F938896416A0BF80A2436D1BE7720F56E821ACCAC6 + 16A0790EC55993B99AF3B7590F7C6D89888CC4A714D513402BC851756C752E76 + BB28A6AEC24BEF21225D85CADEB4BCF83CC76819F02E90043EB6543901DAAAAA + 1DA8A3CEA5E3D867DBDDC505E5C647489FEBE906BAFFAD6966B01ACF8395A004 + 45A4034801AFA86AAF7877B543A11533836D50E8EF62E5A98850F1CE6798A565 + 15A6181D08119497153D7E63A8172BFFFD8768660AA6FFBCABC54559C10856C9 + FD7E418E001194578BCBAF7DB91B4BAF5FBEA7C53749248DC87EA04F553B6F0C + BBCBB1F3FC0D709C18CFB2089DF50000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000004C1494441545885C5D65B6C53 + 751C07F0EFFFF472DAB2ED6C3D63857552A18C75E810848811162D8401C6185F + 7CD16411CC42C084F8A23C9AA089711A07084163BC2089910D2F89F1F2607931 + 6034D2B2E204C15DDA6E6BB7DE4EDBD39E5ECFCF07E802035C652B7E93939CE4 + FCCEF97E7E4FFF03FCCFD1946F38EB5AB0A51DA06C122864EE3D40BB7117B41D + 4FEFD7ACDEE985492C52CC774F2033008DBD135CBDF51C18B79B6BB49366F593 + 5E66120B6A6CACAA909B0182F5B5679F685B94560A5D894CE145AED10E6D1912 + 0F00F974F501CF6C5E894D1D56D896088BE2A9EC36299DEFE1443BA769DF3E08 + C19A27691CC8A5AA07E85CD302835E0BB1CE880D6D162C5F2A982439B7554AE7 + 7B38B34DA771740D32C19A2729B02090DB0278BD1600C01883B9CE880D6D4BB0 + A2B9DE24C9B92D7139BF8733DBF49C63BB9709D6DC7C21FF0AB831E65A03D6B7 + 2DC14A6B83519273CEB89CDBC3996D46CEB1DD8B7A5B9692414091AA0728A7A1 + D680F5AB2C686D6930A432F9C763A9EC5EAEFEBE5A8D63DB20C4150A92938012 + AF1EA09CFA1A03D6B55AD0B64CE4534A7E733499DDCB09CD82A6AD6B9035DA33 + 94A80C72D7807284453CD6AE6C826399592F2B854D91A4B29709CD0D1A479797 + 89F6F45C907903CAA9BB0E596D13F5E96CE1B17042D9C7846651E3E8F272A25D + BE1364C100E5D49AF478C8DE8407EE1775E96CF1D1B0A4EC6342F3626ED5362F + 2CED32C911201DAE1EE046C81AFB623CB8BC51ABE48A1BC309E525566BB1685A + 9D17D55C2685C815000037EFA639C2D8B50B0C0CD716E698969F793EFF55EF90 + 502C8D336E3F2E8E84732AD14744788BA4F189D2E000D491B3D50304A3325C6E + 3FFE188D6489E84352D5B7D5C4C464E9C269D0E8590074D3FC82012623325C6E + 1F86C6A20A117D00E01D35321CE2290993D88042FB3AC4C7CE01B4C080F1700A + 2EB71F977CD10C11BD7FBD78BAE4390535701ED637CFD58371FD706CDAAFA931 + 5F8E0C1CBC0971D780C0740A2EB70F97FD3199888E0378578D0C878B9E53A0C0 + F99939359B4970869A00185C350FEF701270253AF03A40EADD01FC5349B8DC3E + FCE58FA5083846843E35321C552F5CDB7876A64EBC428B77F7F568F5868F01E6 + AA59B7C3492AFD1D3B7DF0BF01C64209B8DC7E5C0DC493043A4A4487D4E92BB1 + D2E097A0F15B8BCBC98D79103979406DEAEEDDCDE9F8138CB133B5EB773A4991 + 86E3DF1D991B301A4CC0E5F6E1EAB89400E80880C36A70482A7A4E81424315E1 + B3577FC5F467AFAA4DDDBD2F703AFE2463CC25743EEF04307A47C0C8A4849FDC + 3E0C4F4871008789F01E858612B38BCD4FBD0CC3F2B54B2B921473808E3F00E0 + 133072099DCF396F010C4F4AF8ED520823412906E0104047D5E050B2E8E9BFED + C63AB1057C4BFB4445805921D0A15B005F9CB91C01511F01C74AC12159BD70FB + E2724A4A12C564D85A492167AC03D3EA8D00FAC1980E0C3D33002280880E8070 + BC1470A78B17BF01A6FE9CF3A391FE8300109C6BCED0BA114DDDBD06067C0A80 + 07D196C4CF9F47D88C6EC56630A119AAFF775074A492852A0EDFFA082CDDBD3C + A7337C0DC046AABA25F5CBC054ECDB3EB039DF9E6FB9AD034DBB8EE83506E357 + 00EC44E44CB9BF0FC54EBF011055EF342CC7B2AB4FC7198C03005A0970CA9E1F + 67CA817BF13FC09B78001280AD69CF0F93D15967C13F9675519F9F8106000000 + 000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000649494441545885EDD7FF4F55 + F71DC7F1E7FB5C2A7281CB7784620091A29D45ED37ED066E43FAC5A461BAB62A + 9659BB657F40D75FF6CB6C16B1AD4DB7D93469B6EC97A5CDAA2DDAE1FCB6EAC4 + A64B661A9BA12212ED40B81711CA85FBFD1B977BCE7B3F502C229D52C5BB1FF6 + FAE9E4E4FDC9799CF7E7E493F781FFE7F6629BBC908C02529BDE33521EDCA492 + 578EFA0720EA4BA60D980A9C978EED8186EF23F247237B619FB1E429D7FF02D4 + 987E43441E17914F4538612B5BFD83791B7E4B4AFD2F91DCF224F0A67530E581 + 867260DB86DA4A8DC412E58148FC45A0CEC82E71D9963CD527798BEE7A476704 + AEAFA964CDF285942E70E009C4CA0291F836A0DEC82EB962543D7999C2FBD190 + 1BC2EEE4006BAB4B484BBD87FCAC341E5952447951169E60ACD41F8E6F457852 + 320B078CFBEA7AA468198486213477D0FF024C99B82F429E238D479716515EE4 + C0171C5BE80FC77F22B0CEC82CBC6AABACEB368A964D74740EA037054E4DAE63 + A2A315C559F8C26325BED05813F0B464160E1995755F18C5771E3A2BE0647232 + E7F37055118BEFCDC61F1EBBD71B1CDB02344866A1DB565977498AABD1581002 + 5793039C0A7DA86A019525D90422F1624F30B619784632F2476D8B6B2F52BA4A + 89786F0B7A5BC0C96467CCE7A1FB16B0B4349750245E381A886D049E93B41CAF + ADA2A6CB287B5489FA278EA8640027E3484F65656521F797E5128A8E178C04A2 + CF029BC49EE3372A6ABB8CD2554AD4372BE81D055E83DA53595159C877CAF208 + C712F96E7FF41960B3D87382B68ADACED940E70438994CFB3C562C2E6059793E + 91B1F13CB72FBA41618BD87342B68ADA4E5BE92A4B6F029D53E054E8F28A02AA + 17E513892772DDDEC88F149AC49E13B12DAAED94B2D5962662E0EB07F4EE0327 + 9391368FEA8A02965714108B9B39C3BE4883C25649CB8AD9CA569F978A35A68E + 05C1EBBAB6E68669E66EA430C74EE3DAA5BCBCF1112A4B72CA0CC3F8BD885C32 + 1CC53FB63DF8FC75B54901028CF8A37C72B69FDE413FAA7A05F80D70146BFCBA + BA3BBF8F3789DB17E1E4191767BB87B12CED577803D53F110F8F99178E60761D + 4E0E70D81BE1E41927E77ADC58963A557517F0AEC6C371B3F30856D761188FDC + B06ECE81439E3027DB5D9CBFECC652ED0576A1BCA7D1C0B80C9D41BB8E628DF4 + 8165CEB87ECE8083A3A10958EF88A86A37F03ACA9F35EA4D981DAD64552DC3B1 + AE693EEB9AACF0F99371F7DEED3322EF38F0EA4888B6762717FA464555BF005E + 43D9A351AF6976B4625E3A0EE6388E17B60B700088A657AFDD048CCF84BC63C0 + 017790B676175DCE5151D58BC06BAA7C40D46B263A5AB1BE824D46AD848AA41C + C0907750DD6BAFAE6BCCD71D89910F5EB90E79DBC0FEE1206DED4E2EBA3CA2AA + 5D0AAFA2DA42D467253A5AB12E1E67FAD10130D2D24CDE73BFFE83A036C330DE + 46793FBD7A6D9385263C7B5F01B56E0FE8FA32405BBB934BFD5E51D54E55DD09 + 7C64457C9679BE159DD6B1E9099F3D067607790D2FBFA3AA3611D9AD60662CAB + DF2AEBC3E6E881D7BF1DD039E4E744BB8B7F5FF18A2A1DA03B81BF686050135D + 47D14B2766ECD88CC853FB3010721B7EF136906288BCA936CCCCC7D66F533366 + 790EEDBE7560EFA09FB67627DD033E51D533C04E85BF1218D2C4D9FD583D9F5E + DB96D92478AA0544C86D78E977283611D9A58AE9A869FC19A87553E0E5AB3EDA + DA9DF45CF58BAAFE0B6846F59006BF642658D60F5F20ADEAB1594389C7605EDA + 9B5F6DF7AB8A9A8E9AC69F7F23B07B6002D63BE817553D0DEC54D5231A1CC23C + BB1FABE71F3376EC9E8232D2163FBC0798B5527562D452B004F9A9A2911981EF + 1EBBC090272CAAFA992ACDC0C71A18C43CF7CDB0693907C46685FB7A0ECC1628 + 5388211C4AF9BA60E20D4484C1D1D029556D06FE6EF90731CF7D845EBE2518B1 + BE73006FCC0627860DFB8A27C0301C821C53D538F0AC5AE6F1E91D1C50D52780 + 93EAE923D17100ED3B35AB8F3FF4F941429F1FBC759D61237FCB0E10235390A3 + C04A60A35AE6DFDC7B7E855C2B4CCD2465D536002CE7692CD7E95B7FC8B78D18 + E46FD9417A757D86881C0556A9A59BB0CC83EE0FB71339FFC914601292B7B999 + F495F5E986184780EF2ADAA896B67A0EEE26F4D93E200903EB64721B5E2263E5 + E3768183C0F7149E4769F51C7EEB1A2EA940474DA300AD086B50B6A2BADF7378 + 37A1532DD7D525ED9F44AD8402FB505E54F443CFE1B708FEB3E586BAFF00CCE0 + 3A714DCEFD6F0000000049454E44AE426082} + end> + end + item + Name = 'zoom-in' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000022949444154388D9593B14B5B + 511487BFFB4C24570C3EDE4B2D6DED50D30C8A8308BD928236FD17028E6FEBA4 + 50F207B83896160A8205C12942DBC9B94B4050D49642A70C12089606CD101F12 + 9F3E8777DFEDA08946A86DBFF1707E1F9C73EE1500524AB2D92C03030305601E + 981142648C312D600BF8707171B159AFD70982809B082925636363894422B132 + 3232F2CAF33CF2F93C8EE3E0FB3EBBBBBBACAFAFD36834D6E2385ED8DFDF8F4E + 4F4FAF0D13131328A5564BA5920E82407778BFF54B6BAD23ADB50E8240974A25 + AD945A9D9C9CC4B2AC6B8152AA502C167BC25A6BFDE4CDD7B823E8488AC5A256 + 4A15868787BB790B98F73C0F29257721A5C4F33C8079DBB67B0433F97CFECE70 + 87ABBE996432D9AD2500D7711C96770E59DE391437034FDF7DEF0EFBFAF943B3 + 307D1FC0EDB12AA58E9ACDA6BECDED1D68AD75B3D9D44AA9A3F1F1F19E11B6F7 + F6F6FE6984ABBEED288A7A042BE57299300CEF0C876148B95C065869B7DBDD7A + 9FEBBA07E7E7E78F6AB5DAD4ECEC2C371734FD380D20C230647171916AB5BA61 + 8C795BAFD789E3F85270767686EBBA5F1A8DC6834AA532954AA5701C8717B97B + 1C1F1F8B4AA5C2D2D212D56A7583CB27FE4D4AF9D3F77D0004403A9D269BCDD2 + DFDF5FE00F7FC118B3298428009F81B9939393AD5AAD46F76C966591C964181A + 1A22994C2284C018431445B4DB6D5AAD16A3A3A3D8B65D003E5D49B67BEEFE37 + 8410E472396CDB7E097C04E6FAFE4700E0FB3E83838307A954EA07F0EC373BFC + 1FD8A7CCD6E70000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000031D49444154388D8D94414823 + 671480BF97FCD18C89C5C44CCDA1910413961270E99EA45E1AE81E3DD44BE969 + 4BD9ED427B286C6F7A8B39575CA85B4FDA422FB645B020083D2C284B14B6EECD + 1CB2A4C618593588469C2464FC7B30AE1975593F98C3FC6FDEF7CF7BF3E6175A + 98A6492412412995001E03F78138A08012B00ACC6AAD9F572A15B6B6B6B06D9B + AB08407F7F3F7D7D7D4A4432C0936432E94EA552C46231945294CB65B2D92CAB + ABABD8B6BDA4B5FEA656ABED6F6E6ED26C369D42D3348946A34A44FE0C040223 + E3E3E30C0F0F5FDB19A05028904EA7C9E572AFB5D69F55ABD5722E97733CE38A + 4422884826180C8ECCCCCC3864B32FDFF0C3DFAFDFDEC76231A6A7A7191C1C1C + 10913FBABBBB5DA150C8296CF5ECC9D8D8189148C411ACD66D0E4E9D25198641 + 2693C1E7F30D89C8837038EC14028F93C9A4FB5D65DE84699A8C8E8E027C6718 + 061E8FC721FC3C954ADD5A76412BE71ED0EBF57ADFAE2B201E8BC580F39E55EB + 97A3B0B65DA57454E7E98BB243F6F5BD0F8946A38888000340A55DA8945200BC + 2A9F387A563AAA735CB759DBAE3A845FDD35313A54BBC3F1863BBBBBBB5180A9 + 910147E2D31765D6B6ABFCFEE59D6B25178B4500B4D6A5F67517B09ACD66AF25 + BC8F6C368BD6BA0814DB87DB05CCAEACAC5028146E2D6B341ACCCFCF03CC359B + 4D2CCBBA146AAD9FDBB6BD944EA71D8177A1B5666A6A8A9D9D9D32F053A55271 + C4DD5EAF97AEAEAE7F0E0E0EBED8D8D8080E0D0DE1F3F900F8D834B89F08E0EB + 700350AFD7999C9C6461614180675AEBA5FDFD7D4E4F4F2F85C7C7C704028153 + A5D45F7B7B7B9F2E2E2E7E74727282DFEFA7B7E7037C1D6E4AA512CBCBCB4C4C + 4CB0BEBEBE0B3C13911F81524F4FCF2BCBB2A8D56A40EBB4514A914824F0FBFD + 2E1179007C2F229F5CC45BA516813960526B7D24220F8169E05BADF55C3E9FE7 + F0F0F0320120140A110E87310C03A057440600A5B5DE01B69ACD26954A05CBB2 + 2E06FB11F033F0486BFD6B3E9F770A2FF0783C74767672FE239C73F56B060201 + E2F178BBF4A1D6FA37F74DC2B3B3331A8D86E3BA7A90D66A352CCB22180CFE2B + 226F805F44E4BF1B85B7A54DFAB2252DFF0F5C86543C44EACB1D000000004945 + 4E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000406494441544889AD954F481C + 7714C73F6F6633D5D971376E769B3466038AA0382581F620297A6C284D0F861C + 0AF5DA3DB460A4B6B004BC7A68692B09DE8C20D2927A6941A4DBD04B52B31172 + 4A0A0D8A90881B8CE056177597FD675F0F3B2BEEAE2916F2BDCCCCFBCDFB7DDE + EFBDF7FBFD044F866170FEFC7922910822120206812BC0051109AB6A01580516 + 803BAABA502E9749A552A4D3695E2501B02C8BAEAE2E9A9A9A4C111906460DC3 + 38D9D1D1A1AEEB120A8528140AACADADF1E4C91376777701EEABEA67C0F2E6E6 + 26ABABAB47030CC3C0755D9A9B9B6DE02711B9D2D7D7472C16A3B3B353EB1DF2 + F9BC241209262727C96432BBC027AAFAEBC6C606A954AA11D0DEDE4E381C3645 + E4179FCFF7D1C8C8880E0C0CA8880880AAEAA3177BD216B0680B5807F6743A4D + 3C1EE7E9D3A705E00355FD637979999D9D9D1A80110E8711916111B9323232A2 + 57AF5E6D88627076597EFEEBEF1A5B381C667C7C9CF6F6F637801F8040341A6D + F035BC828EF6F5F5313030A0AAAAD5C80FBF43255B7A482D2D2D3A3A3A8A699A + 6D22F2A56DDB388E530B00060DC338198BC5104F40C3BBD70F07F6EA584F4F0F + FDFDFD0031C00A06830D800F3B3A3AF4A8821E57972F5F06382D22EF34373737 + 002EBAAE5BB3FCE3A6A8FA5DF5072E7A0B3B900F38150A850078F4624F066797 + 45556BBA4844E4D6C397DC4CAE238766E88D3AFAE3C7DD54FD8153F5ABF301C5 + 62B1E803680B585C7FEFAC17AD7829536E3D7C496FB4457BA3CE217BE57F2A13 + 544D45EAE4039EAFADADB99E830E5D7AABFE1F6E26D7E98D3A0C5D3ADB502755 + 25954A5557FBBC7EDC50D5078F1F3F269FCF4B7DE71CA78B444416171701F681 + C552A9540B10913B7B7B7B24128986C88FA342A1C0DCDC1CC07D603D97CBD502 + 800555BD3F3939F99FA7E2AB343D3DCDC6C606C018C0F6F6762DA0542AA1AA9F + 673299DD783C7E70961C6EC5DEA8A3D5821E6ED3442221333333A8EA6D55BD97 + 4EA7A94F91592E97696D6D4D8BC89F9B9B9BD792C9A4CF755D8944220779BEF6 + 76447ADEB4814ACE8BC5A24C4D4DC9C4C404AA2AC003E02EC0D6D6165E5C1540 + 2E97C3B22C6CDB5E1191854C26F3FEFCFC7C60656505D334711C479A9A9AC8E7 + F33C7BF64CE6E7E7191B1B23994CA2AAB781A47787F82DCBFA3D180CD6400E36 + 4D341AE5CC9933000111F90AF814387D44DAF7A914740CB8E7CDF11D30EC3DE3 + D96C56979696D8DFDFA7665F070201CE9D3B87DFEF07B0807745E40210060AC0 + AAAA3E04D6A17227D8B68DDFEF17E07B11B9AEAADFAA6A3C97CBB1B4B4540BA8 + CA711C028100B66D537FB694CB65B2D92CDBDBDB944A254CD3A4BBBBBB0A19F7 + 205F0337B2D9ECD180FFAB2AC4B66D1191716008F846556F98AF03A0AA6C6D6D + 110C06B12CEB2E704A44BE0072AF05500F3971E2C46FC03FC0ECBF1C9BF52779 + C60AAE0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000004D0494441545885BD975F485B + 571CC73F2737B9F1E62631FDE39FD9C612AA6D1CA31571BAFA1457080361D0E1 + CA5EF6D4973D0D84D196310B425F7CA9B0A7CED76EA3B0D18D8DD155980C5C54 + F6325787AB6815736D511BD24B63BC1A7373F66014AD31B17FDCF7E5C2B9E7F7 + FB7DCE3DBFDF39BF2B2821AFD78BDFEF47D3341C0EC7D6782E9763757595542A + 452A95424A59CA554189828342505555457575B570B95CE785101F00EF002121 + 84574AB90CCC02A352CA3BD96CF6B7C5C545B9B0B0402E977B35004DD3A8ABAB + 43D3B40EA0371C0E3744A3511A1B1B090683689A8665591886C1D8D818030303 + 3C78F0E05FE0CADADADA2F0F1F3E647979F985BF04007EBF9FA6A626574B4B4B + 7F6767A71D8BC5EC6C366B1753369BB563B198DDD9D969B7B4B4F4373737BB0E + 1F3EBCEF98CAF6959F3E7DDAE5743A7F8C4422176FDCB8412814428882BBB425 + 2104C78F1FA7A3A383783CDE343737D71C0804BE4BA552B94C26B33F002104E1 + 7018B7DB7D3312895CBC7EFD3A6EB77BD7E4A5E50C67BFFC4B7C74E628BAAAEC + 78E772B9686F6F676666A66E6E6EEE8DF2F2F29F9F3C795232391D0055555568 + 9AD6515B5B7BA9BBBB1B45518A1AEDB91A45A1BBBB9BDADADA4BAAAA76D4D4D4 + 94B471005457570BA0B7ABAB0B8FC7F352C137E5F178E8EAEA02E8ADACAC14DB + 4BB72080CFE74355D5F3E170B8A1B5B5F595826FAAB5B5957038DCA028CAF940 + 20501A00B8108D464B26DC7E2584201A8D025CF0FBFDC501344D0338D7D8D8F8 + 5A826F2AEFEF5C595959D179CEFC1E8582C1E0D6E0D272E1F249A4B33B9E8554 + E9552520F2FE42A512DA997FEAF92F0140DBCDFB45F7E2FD5B137BBE9FFEAC59 + C2C6B902E845A36F03485B96E5F77ABD000C7F72A660F126D259DEBF35217EFA + F84D795477169AB225CBB200D22501F207C5AC6118671B1A1A00A8F4AA458D8E + EACE62730480611800B3A52E27479E74646C6CAC14EC0B29EF6F647575B53840 + 2A9502B873EFDEBD97BED39F979492BCBF3BCF9E3D2B0DB0BEBE3E3839393931 + 3A3AFA5A00464747999C9C9C90520E9AA6591C404AC9E2E2A2042EF7F5F5B1B2 + B2F24AC1575656E8EBEB03B89C4824A46DDBC50100161616585B5BBB6B18467F + 4F4F0FA58CF6926DDBF4F4F4601846FFFAFAFADDF9F9F992360A6CEC593A9DE6 + C8912303F178BC697A7ABABEADAD0D55DD99E9BAAAF0695BCDAEAB18209D4E73 + EDDA35868686003EB72C6B666969697F0000994C06CBB272870E1DFA3E1E8F57 + 0C0E0E361F3B768C603058F48E9052323C3CCCD5AB57191F1FFF0AF802F85A55 + D53F755D9F4B269345017679F67ABD9C3C7912B7DBFD1ED05B5F5FFF56A99E70 + 6A6AEA1FE04A369BFDD5B22C7C3E5F04B80D7C689AE6D0D4D4D49E155670698A + A250535343454585703A9D11E002700E08B171BCA6D9E88A47801F6CDBFE3D91 + 48C8478F1E61DB36F5F5F504028176E0DB3CC41F7B41143DF31D0E078140009F + CF87A6693B3A25DBB6B7FE0B4CD3DC91B842887D43BC9E06A08084109C3A758A + F2F2F277816F804ED33463CF43BC5CF3B74F2593493C1ECFACCBE51A73381CB7 + CBCACA46745D37B627E681020098A689C7E39975BBDD7F0B2176411C38809412 + D334F17ABD33DB2086755D9F4F2693070FF03C84AAAAF7F3103197CB35FFBF00 + 6C423C7DFA149FCF37E376BBC781B73399CCF08155C15E52148513274EA0280A + 8F1F3FE63F2F6B24865A3F26480000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000659494441545885CD985D6C93 + D719C77FE77D53E3CFF8B5B1E32571881382664461120A9328532FC20D6A5034 + 759AD48B0E69DADA4AA04E150C983A4BD354AA71433434BA451A4C6B77419448 + DB2E26A1456312642BCB12A409508A82A949309915BB891D7FBCF1477C76111B + 25211F6F4A52F6BF7AEDF39EE7F9F99CE739CFE3233028455170381C58AD56CC + 66F333E3C562115DD7C96432E4F379A366D79558EF0587C381CFE7C3E9742284 + 685514A503D807340176600E88019F49296F4A296FEBBA2E1389045353534829 + B706D06432110804703A9D3542883780778510ED5EAF976030487D7D3D56AB95 + 42A1403C1E271C0E1389448494721CF8AD94F2A342A1909A9898606666667301 + 354D63E7CE9DA8AAFA0AD063B3D9F6747575D1D9D9496B6B2B42ACFCBB128904 + 030303F4F7F7138BC5BE007E22A5FC5D22912012896C0E605D5D1DCDCDCD0821 + 4E0B213EECECEC544F9C3881A669868D168B45FAFAFAB87CF932737373FDC0F7 + 676767F5B1B131CAE5F29707D4348DB6B6361445B960369BDF0B85421C3E7C78 + 4306172B1C0E73F6EC59262727FF21A57C6D7A7A3AFBF0E1C30DD950AB0F2693 + 89603088AAAAA7CD6673E8C2850B1C3A7468D589F16C91B7FF14C66B7B8966D7 + B3590DE076BBE9E8E860707070473A9DFE86C562E92D97CB643219C3804AF521 + 1008A0AAEA2B42880F43A110FBF7EF5F7362BE5466E8715AC4B3C535DFF37ABD + 74777763B7DB5F13429CF6FBFD984CA68D013A1C0E344DAB017A8E1E3DAA3ECF + B6AEA4A6A6264E9E3C09F03345515A1A1B1B3706E8F3F900DEB0D96C7B8E1F3F + BEA970551D397284BD7BF79A81F73D1E0F353535C6001545A966E8BB5D5D5D1B + CAD68D4808C1B163C700DE1442B85C2E97314087C38110A21568EFECECDC12B8 + AA0E1E3CC8F6EDDB4D52CA6FD7D6D61A03B45AAD08213AEAEAEA686D6DDD5240 + 55553970E00042880EABD56A0CB052F8F7EDDEBD7BD50AB1990A068300FB566A + 38565235529BEAEBEB970CC4B345F2A5D54FFD58BA00C08C5E229A5ABB7BF13B + B7492A45A1E2A7C910DD22409BC5625932F0DE5F3E67E8717ADD253D7F232ACE + DF88AEF94EF8C7ED4F5B9A8A1FBBD1DDAA02E60B85C2928177BEF9355EDFB37D + D55E69462F71FE46547C77AF47B637DA0D3983853ACD428BB621C0583C1E5F32 + F06A8B73CD89D1549EF337A2B437DAF9CECB9EF5FC3C5DAEA9A9298098D13E51 + 29954A00A3E170D8D084E755A559F8ACE2775D29BAAE23A51C8C44222291486C + 299C9492E1E161A49437755D3706383B3B0B705B4A19191818D852C0FBF7EF33 + 3E3E2E813F56FCAE2BA5502890CBE52470B9BFBFBF1AC45BA2AB57AF02FC0D88 + 18FD1BA0C042AB0EFC3A168B257A7B7BB704EEEEDDBB5CBF7E1DE0835C2E87E1 + 2D8685CC2A140A29E0CC952B5778F0E0C1A6C265B359CE9D3B47B95CFE444AF9 + CF274F9E189EABC042F08E8F8F23A5FC389FCFF79E3973A67A1C3CB78AC522A1 + 508889898931E047C9649264326978FE92E3BCA5A505AFD76B06AE353434BCDA + DDDD4D7373F39786CB66B38442218686868494F2A752CA5F3C7AF488E567EE5A + 52177F482693D8EDF6D2B66DDBFA3299CCCBD7AE5DFBBADBED66D7AE5D1B6E24 + EEDCB9C3A953A7181D1D1D037E2984F83910D534ED3FBAAE333767AC98A8CBBF + 989E9EC66C36972C164B5FB1584C0F0E0E7EEBD6AD5B2F399D4EFC7E3F8AA2AC + 6407580895D1D1512E5EBCC8A54B9748A552BF075E07AE03FF057A84108FDD6E + B761C85597C5E7F3E1F7FB51557507F03EF03D4DD3CCEDEDED0483411A1A1AB0 + 582C4B6E164646468846A312F82BF08194F25FD5980B04020821DE023E02DE92 + 527E1C0E87D7BD755873DF4C26130D0D0D783C1E144571025D40F56E66076063 + D1DD0C7013F8B394723C93C9303939492A9502C0E572D1D6D6B618F28752CA4F + D683341458353535689A466D6D2D369B0DB3D9BC2426A5944F6FB7D2E934C964 + 925C2EF78C9D45906F03978C406E7D0BBD4C8B20DF017E05FC404AF987D5209F + 4992ADD6DCDC1CBAAEE376BB6F4B29E342881E2144C4ED76DF592971BE72C0C5 + 90B5B5B52352CA84A2283D4288CFDD6EF7DDE5902F04B00A99CFE771B95C23C0 + 1795957CB81CF2850156218BC5224EA7735808315D810CBB5CAE7B55C8170A08 + 90CBE5989F9FC7E9740E033315C8072E97EB5E2E977BF180B050B34BA5129AA6 + FD1B480A217E2384F8B45C2E47FE2F006129A410E21EF0F74C2633FF959F83EB + C9E3F1E07038989F9F271A8DF23F5E24CE15D15A9A150000000049454E44AE42 + 6082} + end> + end + item + Name = 'zoom-out' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000020649444154388D9593316B5A + 5118869F73A3728F18BCDC2B96DA4C11878083047A834282FD0B42C6BB753220 + FE802C99BB052C043A29B49D3277110291285D3A398820294896E825989BE870 + F574883506A2B4EFF8F2BE0FE77CDF3902404A493299241C0EE78122B02F8488 + 29A506C025F07932995CF47A3D3CCF6359424AC9CECE4E20100854B6B6B63E3A + 8E43369BC5344D5CD7A5D96C52ABD5E8F7FB5F66B3D951A7D3F1EFEFEF9F09E9 + 741ADBB6CFCAE5F2D4F3BCE96BF23C6F5A2E97A7B66D9F653219344D7B06D8B6 + 9D2F140A2BCBCB9042A130B56D3B1F8FC7177D0D283A8E839492759252E2380E + 40D1308C1780FD6C36BBB6FC57F3DC7E30185C7801C0324D93D3AB1B4EAF6EC4 + AA72299750477B6F00AC653F000C5DD78D9772094AB9845A7782DBDB5B80A152 + CF310D68B45AAD7FBAC23CD7F07DFF05A052AD56198FC76BCBE3F1986AB50A50 + 198D460B7FC3B2ACEBC7C7C777DD6E77F7E0E080E5012D978F8F8F69B7DBE74A + A94FBD5E8FD96CF604787878C0B2AC1FFD7EFF6DBD5EDFD5751DD334D1759DE1 + 7048BD5EE7E4E48476BB7DCED313FF29A5FCEDBA2E0002607373936432492814 + CAB3E22F28A52E841079E03B7078777777D9ED7659AC4DD33462B118D1689460 + 30881002A514BEEF331A8D180C066C6F6F6318461EF836873456EEFD35092148 + A5521886F101F80A1C6EFC0F00C0755D2291C8B5AEEBBF80F77F00157EFFC3AB + F4E4C40000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000002E649444154388D8D943D4C5B + 571480BF635F034F78E039BCE2A146B630129291AA64AAC2524BAD98B2B0754A + 1B258DD42E28DD603328136AC590B64CD0AA136A85C410892D121E2CA4946C78 + 70E462D946317D4205E467AC674E87D8894D8CCA27DDE59C7BBFFB77EE15DA38 + 8E432C16C31833093C06BE00928001CA40165857D517AEEB72787848ABD5E22A + 02303E3ECED8D898119165E0492A950AA6D369128904C618AAD52AB95C8E6C36 + 4BABD57AAEAA0F1A8DC6F1C1C101BEEFF70A1DC7211E8F1B11F9C3B6ED7B8B8B + 8BCCCCCC7C303340B1582493C990CFE75FABEA67676767D57C3EDFD327383535 + 4530187C1A8944BE5E5B5B637A7ABAAF0CC0B66D666767D9DFDF8FD46AB5BB03 + 03031BCD6653EBF5FABB3E81F6993D59585820168B5D2BEB605916CBCBCB0C0F + 0F7F2A22F7A3D1684F3E003C4EA552C1EBB6D90FC771989B9B03F8D6B22C42A1 + 508FF0F3743A7D635987F6983BC0ADA1A1A17771032413890400EB2FDF7076F1 + 61295CE5AB3B1F118FC71111012600B75B688C3100BCAA9EF34FDDEF6FE9E2CB + 4F1CAC01D3EDE85961E5E8E8280EB07A6FE27F651D4AA51200AA5AEE8E07806C + 2E97BBB1A8432E9743554B40A9BBB803C0FAEEEE2EC562F1C6B266B3C9E6E626 + C086EFFB789EF75EA8AA2F5AADD6F34C26D393B80E55657575954AA552057E70 + 5DB7271F68071EE4F3F9D7F3F3F31C1F1F5F2BBBB8B860656585ADAD2D017E57 + D5D3EE5702103C3D3DC5B6EDBA31E6CF5AAD76777B7BFBE3F3F373C2E130E170 + 1811A15C2EB3B3B3C3D2D2127B7B7B47C0CF22F23D501E191979E5791E8D4603 + 68FF36C6182627270987C30111B90F7C2722B73BF9F6564BC006F0A3AAFE2B22 + 0F819F806F5475A35028707272F27E00C0E8E828D16814CBB2006E89C8046054 + B5021CFABE8FEBBA789ED729EC47C033E091AAFE5A28147A851D42A110838383 + BC7D086FB97A9BB66D934C26BBA50F55F5B7603FE1E5E525CD66B3A75DFD481B + 8D069EE7118944FE129137C02F22F2775FE14DE992BE6C4BABFF017F9B3E27E1 + C510030000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000003B7494441544889AD954D4863 + 5714C77FE7BDF86A5E6232C684B11D33A0088A0F66A05D94165D564AED22D245 + A16E9B450B33525B08036E5DB4B475E32E2388B44C675510693A7433D64985AE + B40B89088E983208060D6A42BEECE9C2444C348E03F3DFBCFF7DEF9EF7BBF79C + FB2154651806B76FDF26140A212201600C1801EE884850558BC036B00C3C52D5 + E54AA5423A9D2693C9D04C026059167D7D7DB4B6B69A22320E4C1A8671A3A7A7 + 471DC7211008502C16D9D9D9616D6D8DA3A323802555FD02D8D8DBDB637B7BFB + 72806118388E83DBEDB6815F44646470709068344A6F6FAF3606140A05492412 + C4E371B2D9EC11F099AAFEB6BBBB4B3A9DBE08E8EEEE26180C9A22F2ABCBE5FA + 786262422391888A8800A8EAA53E93C9108BC5585F5F2F021FAAEA9F1B1B1B1C + 1E1ED6018C603088888C8BC8C8C4C4848E8E8E36CDE779058341A6A7A7E9EEEE + 7E03F809F085C3E10BFD8C6A4127070707894422AAAA5A1BED555E55B5ADAD4D + 272727314DF396887C6DDB365EAFB71E008C198671231A8D2255012FF5B5F6C0 + C0004343430051C0F2FBFD17001FF5F4F4E86505BDAE868787016E8AC8DB6EB7 + FB02E0AEE3385C272D8D29AAB56BF1C0DDEAC4CEE4023A028100007FFF7B2C63 + 8F37A4D9CA39EF01DE0D7BF5E74FFBA9C5031D8DB37301A552A9E402B8E5B3B8 + FFFE5B0A0A483565CDFC697F4E7F507B7566CE039EEFECEC38D500BDF7DE9B8D + 7DAE94AA924EA76B337CDEF8DD50D567ABABAB140A0579D9CA39EFCFB7575656 + 004E809572B95C0F109147C7C7C7241289571A794DC562918585058025E0453E + 9FAF0700CBAABA148FC7AF3C159B696E6E8EDDDD5D8029808383837A40B95C46 + 55BFCC66B347B158ECEC2CB9CE324D2412323F3F8FAA3E54D5A7994C86C61499 + 954A85F6F6F68C88FCB3B7B7F749329974398E23A150A8690D4AA592CCCECECA + CCCC0CAA2AC033E009C0FEFE3ED5B19C02F2F93C966561DBF6A6882C67B3D90F + 1617177D9B9B9B98A689D7EB95D6D6560A85025B5B5BB2B8B8C8D4D414C96412 + 557D0824AB7788C7B2AC3FFC7E7F1DE46CD384C3613A3B3B017C22F20DF03970 + F392B49F705AD029E069F51F3F00E3D5672C97CB692A95E2E4E484BA7DEDF3F9 + E8EAEAC2E3F10058C03B227207080245605B55FF025EC0E99D60DB361E8F4780 + 1F45E4BEAA7EAFAAB17C3E4F2A95AA07D4E4F57AF1F97CD8B64DE3D952A954C8 + E5721C1C1C502E97314D93FEFEFE1A64BA0AF9167890CBE52E07BCAA6A10DBB6 + 4544A6817BC077AAFAC07C1D0055657F7F1FBFDF8F65594F800E11F90AC8BF16 + 4023A4A5A5E577E03FE0F1FF76ABF59240CB856E0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000496494441545885BD97DF4B5B + 6718C73F6F4E4E8E273989E90FADFD9116A9B611C626CEE9EA55B410065E75A4 + FD1B762B8CB68CE1556F64A0BBEC7ABD8DC2463718835598082E2A83816B4657 + 49AA4DD2966A253DF4241E1B73F2EEC228D2C6C46ADDF7E6C0CBF33ECFE7FDF1 + 3CCF7B04756418068140005DD771B95C5BE3E57299B5B5352CCBC2B22CA494F5 + 5C5595A83A2804C78E1DA3A5A545A8AA7A5108F129F031D02A8430A494796011 + 989552DE29954ABF2F2D2DC967CF9E512E97F707A0EB3A6D6D6DE8BA3E088C84 + C3E18E68344A676727A150085DD7B16D9B6C36CBDCDC1CE3E3E33C78F0E05FE0 + DAAB57AF7E7DF8F021F97CFEAD770280402040575797DAD3D3732B168B39F178 + DC29954A4E2D954A25271E8F3BB158CCE9E9E9B9D5DDDDAD1E3E7C78D73195ED + 2B3F7FFEBCEA76BB7F8E442257464747696D6D4588AAA7B4252104A74E9D6270 + 70904C26D3954EA7BB83C1E00F9665958BC5E2EE00841084C361344DBB198944 + AEDCB871034DD376BD0A005555E9EFEF676161A12D9D4E1F6F6C6CFCE5F9F3E7 + 752FA702D0D2D2C2D1A347074F9F3EFDD5E8E8E85B07DF94CBE5A2AFAF8FC9C9 + C9AE7C3EFF971022F9F2E5CBDA732A000218191A1AC2EBF5EE29F8A6BC5E2F43 + 43430023CDCDCD627BEA5605F0FBFD783C9E8BE170B8A3B7B7775FC137D5DBDB + 4B381CEE5014E5623018AC0F005C8A46A3752FDC6E2584201A8D025C0A0402B5 + 01745D07B8D0D9D9F94E826FAAE2EF424343434D3B77E58C5A43A1D0D6E072BE + 7EFAECA466C3230151F1D7AA284A4D7B77E5EBABEC04007D37EFEDF92C529F77 + 4BD8A82B80AF9EFD2640C1B6ED806118004C7FF6FEDE3ACB36D9B60D50A80B50 + 29148BD96CF6838E8E0E009A0DCF7E620B806C360BB058AF39B92AA433737373 + FB09FA862AFE66D6D6D66A0358960570E7EEDDBB7BEEE9AF4B4A49C5DF9DBA95 + D0B22CD6D7D727E6E7E7EFCFCECEBE1380D9D959E6E7E7EF4B29274CD3AC0D20 + A5646969490257C7C6C6585D5DDD57F0D5D555C6C6C600AEAEACAC48C7716ADA + 2B0085428123478EA40A85C2F1478F1E7D38303040BD1A5E4D8EE3303C3C4C22 + 91B8B5BEBEFE752A95AAFB425260E3CC2A10E3994CA62B954AB5F7F5F5E1F1EC + 3E1B0A8502C3C3C34C4D4D017C61DBF6C2F2F272DD795B65AA582C62DB76F9D0 + A1433F663299A6898989EE93274F120A856AF6082925D3D3D35CBF7E9D4422F1 + 0DF025F0ADC7E3F9D3E7F3A573B95C4D80373C1B86C1D9B367D134ED1360A4BD + BDFDBD7A6FC26432F90F70AD542AFD66DB367EBF3F02DC062E9BA639954C2677 + CCB0AA4B53148513274ED0D4D424DC6E7704B8045C005AD928AF05365EC533C0 + 4F8EE34CAEACACC8274F9EE0380EEDEDED0483C17EE0FB0AC41F3B41D4ACF92E + 978B603088DFEF47D775B63716C771B6FE0B4CD364FB6D1742EC1AE2DD3C00AA + 4808C1B973E7686C6C1C00BE0362A669C65F87A8DD2BF7A95C2E87D7EB5D5455 + 75CEE572DD6E686898F1F97CD9ED17F34001004CD3C4EBF52E6A9AF6B710E20D + 8803079052629A2686612C6C8398F6F97C8F73B9DCC103BC0EE1F178EE5520E2 + AAAA3EFE5F0036215EBC7881DFEF5FD0342D017C542C16A70F2C0B7692A2289C + 397306455178FAF429FF01AB5216D6D594FD6E0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000615494441545885CDD84F6C14 + E719C7F1EF33E32EFBC7EB991D6C6F6DD9E0DA465944201753C921EAC15C502D + AC8A530E0D284AD30850A4483450220E542147A4A29216A950B5E400B2A5AA52 + 2B59B54A25705387DA48297F1C6496AC4C8CBBB237F6D85EEF7877BCFBF6E05D + 64835D8F831DFA3BEDEEBBF3BE9F9D9977DE675FC163344D231C0E130C06F1FB + FDCFB4BBAE8BE338A4D369B2D9ACD76E578DACF68570384C341AC5300C44A451 + D3B4366017500F9403734012F8422975432975CB711C954AA5181B1B4329B531 + 409FCF4743430386619489C8EBC0BB22D2525555452C16A3A6A6866030482E97 + 637C7C9C783C4E229110A5D430F05BA5D4C7B95C6EEAD1A3474C4E4EAE2FD034 + 4D9A9A9AD075FD55E0422814DAD1D1D1417B7B3B8D8D8D882CFFBB52A9143D3D + 3D747575914C26BF067EAE94FA5D2A95229148AC0FB0BABA9AAD5BB72222EF8B + C847EDEDEDFAD1A347314DD373A7AEEBD2D9D9C9C58B17999B9BEB02DE9C9E9E + 7686868628140ADF1C689A26CDCDCD689A76D6EFF7BF77EAD429F6EEDDBBA60E + 17271E8F73E2C409464747FFA194FAE1C4C4C4ECC3870FD7D4875E7AE1F3F988 + C562E8BAFEBEDFEF3F75F6EC59F6ECD9F38D71009665D1D6D6466F6FEF969999 + 99570281C0D542A1403A9D5E3BB0A9A9896030F8AA887C72FAF469ED7971A584 + 42215A5B5BE9EEEEDEE6BAAE130E873F4DA552E4F379EFC070384C7D7D7D19F0 + E7FDFBF7470F1D3AB42EB8520CC3A0AAAA8AEBD7AFBF262257745DB76DDBF674 + AC06108D46015E0F85423B8E1C39B2AEB852F6EDDBC7CE9D3BFDC00795959594 + 959579036A9A569AA1EF767474AC69B6AE2522C2C18307017E2C22914824E20D + 180E87119146A0A5BDBD7D4370A5B4B6B6B279F3669F52EA47151515DE80C160 + 101169ABAEAEA6B1B1714381BAAEB37BF76E44A42D180C7A031617FE5DDBB76F + 5F718558CFC46231805DCB151CCBA574A7D6D7D4D42C69189F75C9CEAFEDA9BF + 52EA8C4D8AE2A2501CA7DEEBB125602810082C6978EF2F5F72F3AB997539A5F1 + 9FB53C29698AE3947BBD5A25603697CB2D6978E7FBDFE5C08ECDCF572B2D13D7 + 7561A144F3941230393E3EBEA4E107DF33D64FB568CD1F1B1B03487AAD13B5F9 + F97980C1783CBE9EA015532C16BE288EBB6A34C771504AF526120949A5521B8A + 534AD1DFDF8F52EA86E338DE80D3D3D300B79452899E9E9E0D05DEBF7F9FE1E1 + 6105FCB138EEAAD172B91C994C460117BBBABA4A37F186E4CA952B007F03125E + FF0668B050AA03BF4E2693A9AB57AF6E08EECE9D3B5CBB760DE0C34C2683E74B + 0C0B332B97CB4D01C72F5DBAC483070FD615373B3BCB99336728140A9795529F + 3E7EFCD8F3B14F0AD66C368B6559FFCEE7F32FF5F5F5BDDCD6D64628147A6E9C + EBBA9C3C79927BF7EE0D01076CDBCE8D8E8E7A3E5E2BBD989C9C2C5DEAB792C9 + E48DC3870F333C3CFC5CB8D9D9598E1F3FCECD9B3705B8AC949AF15AA896A22F + 7E63DB36E5E5E5F39B366DEA4CA7D32F777777BF645916DBB66D5B732171FBF6 + 6D8E1D3BC6E0E0E010F04B11F90530629AE6E78EE33037E76D31D19FFE606262 + 02BFDF3F1F08043A5DD79DE9EDED7DADAFAFEF3B866150575787A669CBF5032C + 3CE70607073977EE1CE7CF9F676A6AEAF7C001E01AF01FE082887C65599667E4 + 8AA7251A8D52575787AEEB5B800F80374CD3F4B7B4B4108BC5A8ADAD2510082C + D95918181860646444017F053E544A7D66DB36B66DD3D0D08088BC0D7C0CBCAD + 94FA433C1E5F75D7E17F5E379FCF476D6D2D959595689A66001D40696F660B10 + 62D1DE0C7003F893526A389D4E333A3ACAD4D41400914884E6E6E6C5C89F28A5 + 2EAF86F47463959595619A26151515844221FC7EFF927B5229F564776B666606 + DBB6C96432CFF4B308F953E0BC17E4C697D04F6511F21DE057C05B4AA94F5642 + 3E3349363A737373388E836559B79452E322724144129665DD5E6EE27CEBC0C5 + C88A8A8A01A5544AD3B40B22F2A56559779E46BE10600999CD6689442203C0D7 + C533F9F069E40B039690AEEB621846BF884C1491F1482472B7847CA140804C26 + 433E9FC7308C7E60B2887C108944EE663299170F8485357B7E7E1ED334FF05D8 + 22F21B11F967A15048FC5F0061295244EE027F4FA7D3F96FFD39B85A2A2B2B09 + 87C3E4F379464646F82F226FB55728F8EA9D0000000049454E44AE426082} + end> + end + item + Name = 'unused\debug-breakpoint-filled-eraser' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000002D049444154388D8D925F4853 + 6118C69FEF7C3BC7B5399DD2F42C8825A16245A498690A059A92751599048535 + 318D84108A6E82A29BB06EBD3042A3ACA641D445527915944DD48C8C21E5BFA5 + D99C691EB71DE7CEF69DAF0BB388D27AEE7FCFF3F2E325006016045C96535161 + B5DA0921F5000E10201D0038300CA09373DED4150CFA2E7CF1619E31AC849805 + 82FB0E0776984C9544149BA5FC028B98930D9A2A0300987F1AD181B7D07ADC41 + 1E8DD68D45221D15E35ECCFE2821D737D8712429A952B05AEF9A9DD584DAEDF8 + 5B98CF07B5B585EB8A72EC4530D85135310900100E5BAD3211C5E6B56000A076 + 3BCCCE6A4244B1794F7CBCBCCB645A2E1008A997F20B2C6BC12B11645993F2F2 + 3E11429CFB132C0000038083624EF63F61CEF9089B9E2E678A3206413048842C + 9702485F11B626ECF516ABAD2D3B631E8F025D3F5B62B1204D9220FCC7F2289B + 9A2A5974B90A492CD666AE3965A136DBB554513CD7BEC90101C030F3FB575D9E + 9C0914CFB91E1420AAB5996BEBA8989101736D1DA8CDD6288B62036D48B16D24 + 7152919899F907DC37A7173B7B59D11227B7F61E2D95A8BC2C9A188D106C2988 + 0EBCD92D70A04973BB43CCE7FBEDECF70A2F39D3A715CE90756DBCFAB4F15D5A + AE06800020CCEF47B8DDC538E7B574ABD118DA2C1AC6634343870CE9E984C4C7 + 6BA341BDF0644F346F5697EED51CDC4EE56433F18B09060E4452A646A87AA399 + B140A06A261269A7DDAA8A528BC5638DC53E46FBFBCB782838FAD047AF3E0A25 + BE3E5EB6C5E8484DFC79D960885277C7D348966FC839A7455C951313A061CED1 + B91040669CD1E3A0F4369B9C8CF3AADCDD959415F9FC35B46F5BDA7AC44906F8 + E755DC7C32C87AF4E413EA52C0D5E8E986578B8202C022E778BCB000B7AA8642 + BAFE725E99D6BBE55C7758372C7D98F856929264C29DE71E1650B52A2DACB4F7 + BE6A85125E5816BAEA0324D821955F0131259F27C0459DA34E57E75CB1679780 + C02FE1DF012F0A48D4C8AFF2DF0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000003EA49444154388D95D24B6C54 + 551CC7F1EFB977EEDC7BE776EA0C7D1028696D498351682C5211A43C94E1115A + D2182031A8A80B68D41DD188D1C056C3D2181058E882485A63852910A211AB21 + 2605C2A35DB4F4618722EDB40566A6F3BC8FE3020334298ABFEDFF9CCF39FFFF + 39827F52A5691CAC984743C0D284103B80EDC00B02CA819C8401E02729E53147 + CAFE2353531C8C4FE03233026059C0E4DBCA4A2C555D0D1C15A659A3D5D5E1AB + AE411417836DE38E8FE1F4F4E2C6463C0987917CD49DC964DF8A8D90F1E443B0 + 4AD338B3B0064B55DF408863FA4B2B5463F3668469325BECFE7EB2ED6D7877EF + 76039BCEA752895DB19B0FEAEAD1CA0554EBC66A8468375B5A5463C34684A6CD + 8A01A8252568CFD7E3F4F555C8E9E9A54FFBFDC7FFB26D7A737900948680A501 + 47F4152B547DE5CB8F851E8D120C1278FB1D84AE4710EC7AAFB4F4614D08B143 + 98E64263D3E627C21EBDA9BE7A0D203EAEF6FB596218F741609B5657F7D899CD + 1629E584CCE75FC3D02D5154D4045896A200E00396F9AA6BFE0F16F792C948F6 + 74E7B0D3D3D32A0B852E60A0CCA73E00CB4471F1937A71994A45721D1DC34ECF + F553C230D60269104D9FCF9FDF75DB8EA100796CFB49B0092F9DDE90ED8C0EDB + BD3D27D59292B5C1BD7BD11B1B2D04D180AA367E535589020CB8E3E3FFD9662A + 53581F3F7D6ED0B972E5A43267CE3AABB5152514C668DE8ABEAAD112D059A4AA + AB14E067A7B7E75FB1F19C8CECBB5C18FE2A1EFC4184C3EB8AF6DCC700841018 + 5BB7E27F71B9057CAF4838E68EC43CFB46FFAC6DDE29C8C867570BC3ED63EAA9 + B6DAF5916B1F7E9157C2E199872612B843830097D40FCA4AA71441B93B34D4A0 + D5D723FCFA432C2F23FBAF39433F8E7AA7C2C5E6BADDCD7564C2733509B9794E + 4A03849748903E7C087762A24B4AD9A29A42A12110382F73B988D3D757E15BB4 + 0825102067BB6F1EB8EE5C6C1BF14E8682E62BBB9BEB08151902605C2BD62464 + E74E8DFAD2870EE14E4E7649299B06B3D98CFA473ACD4A2BE054F8FDED727A7A + A9DDDDBD10C7257E67FADD4F6ECDD9E3F97CADEFB7D4130E1A33DAECCBEBBE0B + 27CEDA4B862F5F407A4D37F285F4EBB19BA8128826932C368C7C95DF7F1CD7BD + E90C0D3E97BE1D8F7E175C3C96C2B75308E1AF5D1046080140623ACF91E8557E + 29847E97526E796AAA2FB3F3CF11265D1715C096D0914872DBB6A9D5F52B2155 + FDD257C8E67F0DD5C66EE9E10BB1F1E4F6BCED6AB50BC2243305BE8E5E653291 + ED72A568BE682B99B64B1D249CFB7F59CCF6B44B0C034B51180D55137F751F42 + 33D708882E7F767E60E0D63D261399DF3C29B7787747D3EED9FD904B3CD83B2B + F86844F933F8377E0A9AB91638015C969EDCE62646D3EE990390BB3763FDDF1A + 16B2E83E0A42A50000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000054749444154488995545B6C14 + 6514FECE5C76666F2CD45D7A61C9B25C0A3CA0490535312249A544512EA11022 + 844881C813C28B6FC698680C9240D447B9C42806D14263620BB5554A8CA5CA4D + 28B596D24A1729144A779DDD9DD9D9F9E7F850BAB45001CFD377F29FEB77CEF9 + 09A36451C08FF78A8B11D33410D1D300D6025848C04C0041060C00DD004E0238 + C4CC6706F379ECBC750B8793298C273402B647C2782B1281442807680F11AAA0 + 7A488EC520179780740D6CE5206EDE80B87A15C8DBCC8C46807780D1F56D3285 + B7AF5F87182FC1F64818DB2393418415000E90CF17D42B2BA1CE5F00F27AF9FE + AAD834297FFA3758CDCDE06CD600B09199EBBE4BA5B0EDEFEB636CE545013F3E + 2C2B8344B482405F2BF1B81E78732BD4D9B341AA3A5CC55D29605585129B064F + 45054422A17132B50A84F6399AD6991402E74DEB5E072D33A6639AAE9503D4A6 + C4E341FFA6CD80C7C3230199795C3CA2C3B629B36F2F9CDE5E03E067538EE87A + F17237865C170020C5340D00ED269F2FE85BB71EF07878C49999FF138FE8F078 + D8B76E3DC8E70B02B47B822CE3F5A249850E2422AA2060895E59092914C2182A + 1E8247EB522804BDB212042C21A28A15A150218102602D3C1E52E72F1877CD1E + 434C16628F140E3752515190EFDC290AC9F298040BE5580CE4F516BA2EF0FB08 + 0C20E3DAF6F27C47478BDD760A6C9A18FB0C4804CC928B4BF038B4DC475106B6 + BDCC6EFDA5255B5B5B25BABB6FB269B681A8F40959C16B1326143A0890AEFD5F + 5AD29CCFAFC8B5B59DCC35352D912CAB562A2DF5BA43436158569342A8DC139D + 7283AF312406D26CE50AED3F6C73EEE20C3BCE4AFBECD913B91F9B17B365D54A + D1A8D7BF752BFC359B40BA3E07444D0A50F2F194282400DDE2E68DC7A5289317 + EEB2D4D9DF7FCA1E3FBE9833993A391AF5FA376F01797DACC4E32349E6125193 + 425422013829AE5E055B16E1E1629802CB0F5EC9B77C7A215D8974FA881C8DEA + FECD5B20F9FD0523251E877F630D48D7E7825027EF981CB943C2DD2C0502A4C4 + 6205C3D1174B4419D3E1955FF4382DBBFE1055273DD1BA40B4547D614D953C2A + F83D174D8373A91D9C4E6B12339F6170A3D5DC043795C238BC677282971FEE73 + 4EECE9CC570D3974744A24E8F56CA851CF85CB4D1EB61D9921DC6C16D9BD9F41 + F4F75BCCBC411A1402007670366B640F7E09D8F668DEADBC8B95DFF489968F3A + 44D5904D47A291A05EF3CA3CF874952E78CBBCE7BC534CDCAD9C4D13D97D7BE1 + 2412165CB71ACCC7E5A410A80A060741E8E254B2DAE9ED2575F66C225D070BB1 + ABB1DF3DF0EE45E7A5DB168E948503BE4D4B9F845F57873F3F0037D5A0CA20B3 + C41850B3FBF6C2E9EBCBB9CCD5001ACE1869C8972C0B5355157375AD13A07637 + 997CD93E7D5A23598230CD773EF94BEE3B9D565B8B8BFCA12DAF3E059FA63C30 + FD5ED7ABB6D636E5E775FC9C17C06A021A7ECD9A78E3DA35C800D06C18887B34 + CCD1B44E061D85939F29BA2ECF70FAFA8E34727177A727BC5A082E2B9F3A0993 + 823A8808233FB89973687FC345D4A783B6CBEEAA59E6C0B10E630835896BC830 + 0F2760000D8681A42350E1F30E6A445F8150CFA6E9E9528A7A4E4D985E2F5C77 + 697BEFEDF0F4B289981818BE7CD376687F433B1203468E5C77D5153D72BCFF4E + 023BFF3C838C3B3C787974ABE72D0B87868660B82E228AD22F987B025612B5A5 + CF19807454B8EED28B3DB7C3D34B43D05419FBEB2F22316058CCA8768163C640 + 0F2EB47E8EBC70EEADFB238E6BD828FE3CD485DB40B25206A0D9AB29E593023A + AE0FA62D665EC3C0F7E24627DCA60F80BC39C6571E3FE47D924C80FFE9871C7B + C60049758E70171AA6ED61E675CCA817039D707F781F70AC075CFF053218C2A1 + 17115FB40000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000615494441545885C5975B4C5B + 471EC6BF199F634FCEB1B1036CC2C5215B43C8C5102969A5845BDCC03E846A5B + A924AB4AC903C64D9A97EE43D5E7F4A57DD9D546ADB6DA7D59ADDA6D5548B490 + 761B57DA870656641B8A29592989456E5C1230B714704231877399D9071BB726 + 4021B0DA4F3AD2B1E77FE6F7CDED3F33C0FF5964AD81A50E3B2A15157B1943AE + 24657C19372DF4691ABE4D24704BD336CF0005D0E076E3746E0EF6381CFB0921 + 0D00AA01EC0690930A9B027007C0BF8510971EE8FA8DBF4E4DE3423C0E5D8867 + 37B0C7E1C0F9C2029431760484BC4B18AB92FD7E482525A0DBF340551500C0E7 + E6C027C661DEBF0F231A85D0B46F20C4B941DDE87C3B1643EFFCFCFA0DD4BB5C + F8C05BC818A5EF13C6CEB0BA5FC15E5101E270AC5A99585880DED505EDCAD710 + 9AF6174B88B7CE8D8E699FC5E36B3750EF72E14F3BBC5B6D8484259FEF9072F2 + 14A8DBBD2A78A9F8E3C748347F067360A05B08F1EB736363339FCE2C6FC2F6D3 + 1F7B1C0E7C5254B445A6F49FF2FEFD87D4C620A8A2AC0B0E008431C8070E803F + 9AF4F2C9C9404075B6F42412E6B061AC6C8002F87867110AECF60F259FEF15B5 + 31082249EB86A74D500AD9EF873538E0453CFE8BC3AAF255F3CC0CCC257174F1 + A5C1ED869FB11AC2D819E5E4A90DC1D3262409CAC953208C9D2994E59A5076F6 + 53316903A773B24108798FD5D5AD7BCC571375BBC1EAEA4008792F98938DA5CD + A24032C9EC65AC9C305665AFA8DC34F8A2EC1595208C556D97A4F2C36AE69CA2 + 0070585101421AE47DFE9F5D6ACF22E27040DEE7070869A848E58F0C037EC600 + A0462A29D974F8A25275D7EC4BB27EFC1F4032B703BB695EDEFF042E84E8255B + B75E248C257213999931392792E928872EE99E4D82375BC30F430BEDED76619A + 06810005C053E5E955B0E66D717DF0166B68A869EEA38F6AAC81FE5158D69D7D + 0E47F11FB66D4B83D3060430CDE7E636137EC11A1A0ACE7DF2B71A18C697EA1B + 675DCA89DFEC9424A9FD784E76F13BDBB703480D41DCB400E0369F18CFC38E1D + 9B01BF680D0D35A6E097D5D0EB8AE4F3013E1F00E14DB4B6B637E5E61C358001 + 1B0014C932022E673161EC885C56BE51784B0A5E0DC308ABA19022F98AD3E5B6 + 422F68963BCBECEB7BF57965CB971400BE4D240021DA8C6814626161437033D9 + ED55D0F5CB6A53267C51F64387C01A8EEF0010A600704BD330A4EB3784A65DD3 + BBBA9E15DE1C99E2C10FBE1EAC84AE87D5D0EBAA54FC34FC275F008048EF8642 + 08BCE874F65B23238DF683CF832C49183F036FE99EE24DA12EE3C8556567F885 + D75EB2EF2AF4D8568AD7BBBBA15D6A1B06702C1DD4B7B08097DD590F3C421458 + 232307E5030740285DA98EA5F060A8CBA899E5F472537DB962FBE5739200F47C + 7356427285A71F3DD28DF9B6D6112144EDE7F1F840DA8005203AAFE1B8C77D05 + F1781D7F34E995FDFE554D08212EA4E0D5B39C8683F5658A2FDF43006042CE92 + 002CA44C245B1E8988F9D6D6116159B5FF78FC78E0ADD868E68968D434F1BD69 + 9A752ED7E77C6222600D0E78A5D2D26587430871B17B8A3786BA8CEA279C869B + 8E95A9BE024F463E1B97B36C80D0F3CD59498F4444A2F5EF31CB346B3B9F3CE9 + FFEDE8184C2C399201C04D4DC394696A01A7B305F1F8363D12394828852D3F3F + 7D481142F45E9FE62F07BB8CAA279C8683C7CAD4E202CFB2BD342E67D91EDCBC + 6B147EFAE7716159B51D3FFCD07F36360A3D55BEEC44B9A169E8994B9895AA12 + 7671FE2FF3DEBD12FDDAB5223E3901A1691089C4FBEFDC95FF733321F7865E2A + 77AE04078048DF18CE47A647ED96F1E26CECD6C0D9D11FE12B1A008061C340F3 + CC0C129C3F2871383E5604FF828F8D3D32A2516E46A3375A6D3B7B87EC9ED3CF + E5793C85B9CE15E197AEDE1B1102B5DF3C1A1EFCE2D61598C8BCACAC690F9200 + 1C5655542A0AF66E495ECD3EF41E4547717D898DDADA4F044A0B5FD89DB995F7 + DC1E435BE7DD1121442DBF7FB5DFE8FC2380A76F4A1BD8040968D59BB095064A + 6C94769C0894162C9AE8B93D8EB6CE3B31CB1247F9F077FDD695DF2D0B075619 + 82B5480CF700AEBC696C2D0ADF7E38DDE0713A5CB1EF67D1D6792F66715E6B0D + 5FEFE71DE70161ADD28C0D8B8056BF096957601721E432002E8478C57C78FD3E + EFF83DC097DE0432F55FF6ADA40ADEC5FB550000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000822494441545885CDD8696C54 + D71507F0FF79EBD8B3781D23C63663C0D860AB38A62C06439A88601BE2340EB4 + 499B96462D8BE8A22E528124289F9AA8540D3195682BF54325205142134C3709 + 086E23882B6FA446582C2918D986313609E39931B3BF774F3F8C4DECDA639BC5 + A8479A0FA3B9EFBEDF9CB9F79D7B06F83F0FBADF0BD3250985BA8E024D1B374B + D014E88EC5D0158D22F6288179AA8A17D2D3B1D66E4389C542008A89A804401E + 003B8018002F80ABCC7C2E2484BF3D14C25FFD01FC3D1040947966806E55C5EE + 9C1C54A739A010AD06F012805A22CA0100E83A93C5021806381C260801663600 + 9C05F01E80B76FC5E383076F7BF107AF17B17B804E09DC9695899FE7E44027A9 + 9208BF22A29592D3C96A591994C242C8B35DA09494BBE3590808AF17667737E2 + 972FC1B878111C8F0F0138C0C0DEAE6834F8D31B1E7446220F064C25427DAE0B + D50E878588F61161BBEC2E20BDAA1A4A612188A6B73A443088585313A21F9F01 + 47A3D719D86C08D1B4ABAF0F0DFEC094D7CBC97087DC73F0B8CD368B881A49D7 + 6B539EDB4496BA3AC85959D3C60100691A94C242684B96C01C1848E3DBB7374B + A0CFAB1DF6B301D3444778F24C4E083C909737823B23656494D876EC805A5C7C + 4FB071504B0AD4F272C03024D1DBB38199EF3C6EB5365F8A44D0154BBED7C701 + B76566E27B599916226A9432324A6C3FF821E4ECECFB868D4112412D2A024010 + D7BA9E22A24FD7DA6D17FEE20F2020C4D440B7AAE2F773F2A148D26F48D76B6D + 3BBEFFD070636E3A6F1E84CF47665F5FB52649EF1769DA60B2F5288D7EB32BC7 + 099DA81284ED295F7D16F2AC590F1D0724329952F71C64A7D306E0B7AB6D363C + 69B54E0ECC5355D438D240447B157701A9CB96CD08EE2E52D360A9AB0311AD03 + B06E6B76D6E4C017D2D2A048544944ABF4AAAA07DA10D30DB5A81872410113D1 + CE4AAB156E554D0E5CEBB003C04B92D3C94AE18219C78D84B67215003C09207F + ADDD36EE7309001C9284128B05006AD5B2B24792BD91504B4B41AA4A44545B31 + C13A9400A048D741440B89689632BFF091E180C45A94E7B801604DB1AE4F0C2C + D0340058040092CBF5087900330FCA79B9CD20B2B9138E31A10018A9C8F9B058 + 581A55F867DEC6BFE450E80D485294741D1C0E270126C246DAF814CF206E97E9 + F1D487DE7BD72A06069E61E6769F61F4946B1A3A4695BED10FEA3884F9A870BB + 4D8FA73E74F85096181868224D3B4244E7D22469C5DBF9F9583A6A2D8E067A39 + 1C264E52131F22EE65D3E3792B74F85096F07A1BE5BCBCC5F63D7BA055AC7448 + B27CC2A6AA2BFE38670EE60FAF470948F41000AEC23421BCDE99C4BD627A3CFB + 8671A7E4BCBCC5D66DDB21A55A91B27123F48A0A0764E9449AA62E3F32B700F3 + 352D01EC8EC5C0CCE70036CC9EEE99C2BD6A7A3C6F860E1FCA145EEF293937AF + 2C814B0590A8CF968D9BA0ADA8700038E154946547E61624805DD1284242F899 + F18971E9F24CE076991ECFAFBFC0E59659B77F811B092242CAA64DD056AC4803 + 70D2A928CB640030012C4F4D4581AE5B85F776B556B11234C133E90170F5A370 + 8F59B76D8794E4F4424450169580077D16B3AFAFEAEE26F99B3F00300E733C7E + 27F6AFA68785DBD9E913F5071ABB32E283BE0F65D7E4B80942DC3DB076C562F8 + 66467A245596ADA6C7B3465BF26550A23EDF2F6E57A78FF76F6989671D27D73F + ECAE59A56BBE512D4F856366848F7E80D8D9763F80BABB40138006C22AABB50D + A6F96D73A03F4D2D2FBF9F830333F3EE4E1FD76F698965F504D198EBB42F5EFA + FC7A594DB144661B432A12B56BDC2B813B8A785B9B1FCCD54121DAC71CF9CF45 + 2278C6618F67C8F2BFC5A07733E28694E821EE09F772A78FDF4AE0F854AED35E + B675C397906A51694075A80C848791E32E8C341C45ACB52500A0262844FB777A + 7AC6F62426804FC2613C9F9EDE2B117D2E7A7A368008F2DC79D3C92433F32B9D + 3EDEB7A52596D913E4C6DC6CFB635B9F4EE046060DA80E15FF8364660E373420 + DED21280103511D36CDBDC7B1D6743E1F15DDD2DC380271E4795DD7E16C01DF3 + DAB5A784CF47CA82052079C22E75E41EAF76FAF8CD040EA772B36DE55B9F5E3C + 063712FDAA43013832DB1852999923C71A106B690E08D3AC314CD1FA134F1FCE + 84420092F4C597A251044C81AFD8ACCD00FE63F679AA8DCEF39AE47442CE1ADF + E531F3DE4E1FBF3E9CB90F5DD9B6F26D095CD274F7AB0E05CCD1F4F70F29D1E6 + E621665E1F636EFDD18DEB38398C4B0A04808E701817C311ACB5592F68441F70 + 28B4D0E8E8986F5CB902A82AA4CC2C902C839907439178DD8BCD86A5EB0EFFD3 + 359C39EB24B8E12F85DF350F28BDE73FBDBD68C8532B1BD1961F7BFA7032181A + 336ECA85E55655BCE19A8DD5562B88A80AC04E109E204525D9ED86EC723577A7 + E6AC7962B0EC6BAA221FD9FDE272D852267FC833331A3EBE82F6CBFD7E672C50 + BDF9C6E9F68EB63FE17830386E6CD20C8E845F0834F8FD381F0A235B51BAF255 + F5301807214497F07AEF98BDBDA6EF33DFBB07B397064DC1DF8DC585BE704E66 + D24DC5CC38368C032776EBE996777065F0E684E3EFF921E75655ACB5DB51999A + 8A428B0EB7A6232629282DFB1948B3551049272A4A5DF6BACAF1FF808DE05A2F + DD0C00A8463CD2163BF90BF0ADE4F5FFE1B56FCE2228EB5E83A4A7AC24928EAF + 2C9D6D7F7614929971ACE92A5A2FF60558700D73BCD538F93AB8FFC2A4D34EF9 + 134F3B42B721FA2F820A2A6F902C9FB9F1D99DAF072371BD383F1300F0E7619C + 60B19E0DA3D538BD1FF0744C39EDC36F8073164259B707929AB28A243ABE62D1 + 6C9B60A0FDF2CD21165C2338D6627CB41FE86D9BD67433D3A13B8BA154BD0649 + B3AC22A277000866FE169B664BFCA3B780EBADD39EEABF08AEA7365F03512A00 + 00000049454E44AE426082} + end> + end + item + Name = 'debug-breakpoints-filled-eraser' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000002D249444154388D95924B4854 + 7118C5CFFFFEEFDC7939384E398A42621A426910184D1A2DAC21CA885A943DC9 + E831861644454582511B172E84165912BD04A54545A9598851D10B4DD2B0878C + 4385CC34BE46C7B9DEC7DC7BFF2D7AA0E142CFF283DF39DF77F8080098BCE740 + 17ADD4314F192303949F3EA83EB296CD153E7BED0501006EBEA9FF8B0700418D + 429FE63A57094AE4B7816BBC1779DFFD97F76ED97727D81FEC6386C1F23CB9CB + 566DF0EC712C70FA0821963F8C0AA01FC0E2828202FB8866039F2908B8A80C61 + C9B0F999BBBEBA861A463E009057A62EA925A7D6545E71C3E2F13483E3947820 + B05179F33A10E068B289E71F58C561908EEC2C6499CDD5D4ED3E65D9540C3E3B + 1B00A0F9FD905B5BC0E25A8DB3AAEA36E7704C8C559E5F63844257A708B97457 + 10EA1F2A6A947C5FB6740B75A7DC4BA8A800B15A67DCC82409B1BA2B01431457 + 201E2F261CD760DDB59BCA0FEE431B1E3E13D4F51A7AC29D5C67DBBE2383A6A5 + CD5231EF0F3952D6B1EEF745828936D87D653C9F9101536E1EF4CF9FBD099234 + C901C8FFBBF68C74C6FC9DA3C6BA9DDF520A6F657B6FDA7D3E9EA6A60200B8C4 + 4458B66E03800BB3FE01636CE0E3385B5FDEA9160E11EB1D76F0A8A527335F05 + 4000103D1C86D4D4A833C67C1C802ECDEF9FCEAB0331B6F1C83B75F5A821341C + DEBC9CA6BAECA4C7966EEEB6A62B7A38CCC4AB75BA168DEE0FC6B5260E40ADDC + DA0A26497F0DFA3B7E1A81408CD59714E5D054971D001800F654710A352D5F94 + 49512E7D64129E1F1304D09224E7D70459B26B7D9F0A38A7135C62A25D190C5E + 7F3CC24F0C8CC8DEDCCC85300B3CC21111F5CDBDFA5BC3551A55638D6DB1C1C9 + 715906ED14A7E07524B45B65A927FEE1439AD2D1919EFCA5DB03831D6F372F12 + BFFE185BEF4EB2E1F6933E3D2AAAFB5569BCA9EBE57584060388442220009044 + 290EB85C28B4DB60E67EF73AC6997128FF2488CD759A0095064399218E366A6D + 554034F4AFB05FF19C3628A0DE38B20000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000040549444154388D9DD45F4864 + 551C07F0EF3977EECC9DB9FE1977CC35359472B076C56D2BD4505BCD7509FC03 + 8552500FC5A6EECB12844411EDD6434150D1D643AE2504BB0519D6AEDA9F6D09 + B7D14A6895FC57EAA2AE93A6CE1D9DB933DE993BF7CEB9A7074B92D6073B70E0 + C7EFE173F8FDCEF91D020082B706E243A7CF00388BFFBFAE59AB53B5B67F676E + F7C8BCF1C1BBF62D8DCEAD63746E1D00B00B74DA6DB833C7BD6F706155DD8977 + 81712389853FC3FB0643517D37282463B09911AC6E80740D4CEC1B0400CA1210 + F5E0362825822858EA0D1F2DCC7FBBA2A2BED7BF10980E85B5787E7E564E79C5 + E1AA7B4B0A4ECA4EFBB1BDB0EEEE6E9CFFF8130475611B2C655BA8DB5A79AFE4 + 3725DF3BFDCB53765D7F119625C36EBF29F872BE4E9EA8AB331F7DACD9969DDD + 450849E59C2BDC30DAAD70F85B9DB13B828AF2968DE9A9AE7804E471773ADECC + C90121E425006784EC6CD1565808E290C09400923333E08C8DDBEF7FE089F48E + 8E03F6A2A24F99A234A9E7DE5DD407075B0D59F65DA074E26A74AB3514897492 + D97BEE8644E91BC4E178C1D9DC02F1C811104276CAB1A251C43FEF81393313B0 + 979696A73EFD4C40EBE9A1FAB5C17EE27054735DD7C2200D3FDB6CBE8BBA0EB2 + 74E85019A164D875F259221615DDB2479C3168DD1F29CCEFAFE5967513A6D927 + 783C35F2A95348F87C480C0D691CA8D7181BA22078CE565CBC27B67D8534C01E + 69381E95DD8B30CD3EFA3746DD19901A9BE0A8AC9209F0558A20545200C7C4C3 + C57B5A9CF3C0BACEEB5EF6A72F76A51DFD927A3C3529EDDB18001042203535C1 + 5E5A2603E8B5112093A6A5EDE5299B06AF7B65DC58EC5F13FA33BCC7AB4FD4B6 + 242A859063D7A1AA0AB6300F00A39403412B1AB93596E0756727920B032BBC2F + 23CD59DDD658821B595E69CC99AB03200088A5AAD0CE7782298A8F5B563305E0 + 33A7A6FEA325186F7F7DCA9CFFC26FF5B9539D356D8D2570A7480400C65DB9CE + 31676EDC5255AE757622190CFA921C0D338619A31C38979C9AE2E6DCEC2E70D3 + E0572E2F5B6D82283CDCDA5002778A0400FC9FFD839529BD33F0BB99D8D8180A + 010DDD92443B4411C2E9DB329729E04C4E4F57D0031ED0830741088111D72F5C + 5A32D7820679921062F7E665ECBC4F752B810F07C63168B88739E7F59ABE12BB + 64B767C50D2322500E94CBAEEFC198694E4E54252727054B0940989B29F0ACCC + BF3F22E5FD381B8CB7244C267AF332108919E81A1847508DFB18278DD74D1A1B + FEB51F6B4A20120A85208CC46248581C65B23C4C818B5CD33699DFBF65ADACC8 + 059135F5862BEBCAAC2BFBA73FD6232D5B7153BC7A7D0941353E6471DE608597 + 35F3BBD710D7C2300C03A6696267C6F24511CD6E37EE734A1028DDE9E588E8C1 + 07E5CF03A2B31AC06700C6B8C59B99BAACB16F5E05F4DDFFE75F8D57E7A06119 + 95FE0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000534494441544889A5545B6C54 + 55145DFB3EE6DE3B0FCA480BEDCCC4D2A629148A488B424884C4C2400BB1541A + A31F1019E8877E68F44B6348B080AF0F48D0182394189160400A4468C3CB4211 + 1F3CD260C5166DA1B4404B294E3BAF7BE771EFF6A30F5B48C1C74A4EB293BDCF + 5AFBACB3CF210080A44259B30744640200333311D1C3E27F50576D765EA89670 + 1F72B3D238D79306807888669C78FCDC898B1D231563049899733D692829CA66 + FC0F9CB8D841CCFCA0C0E01107BBF8AF16F1DF5C630586775DBBDD0F66260CF3 + 8C173F3A375A80E188DE40C491CDEDB7FBD17EBBFF5FDB723FE4E40064BD7750 + 80D8847BA005F9376B7B172D5DB5DB9B57FCEDB5EB7D57BAEF86425326395D85 + D37D33E7CD995A3AEDF1492F4BA290F9508B98B160C102C49549E88BE883CE48 + A288A5C54F61A64D7614395D462150AC84C373399170439282627AFA45DBECD9 + 975CFE25AA7DCE931B044D7B83884466061119CCBC0DCCC700B822D168C0EFF7 + 5780A83A18ECAF961C82801A9F0F33A26168515E2607EF6D22207FCC794341F0 + F5F6DFC33F7CBFC1AAA878CB5E597941CAC8F80A40C2D2F572FD6CE369E3BB06 + 4051D06059F52EBBFDDD702C0602833EF17AB0222D8D88682B11BD2678BDAC3C + B310525E1EC8E904472248B5B5217EB611E6CD9B204DFBD85E51F1A66BDDFAD5 + 82DDDE113DF04DE3C0E73BFC080DEC06D071471457EE936DDDE745716A4F7F7F + 0775CC280011BD0DA24DCAC285504BCB004178D05BD384515F87446323E074BE + 632F2FFF1029137ADDD1A51C0A1D10B2B2342B18041B466B0854D22E0A3D5F44 + 63A08E1905794474D95654A4682FBEF4C807A67FFD752C79B57525C7620D605E + 02E0A0E8F3698EAA2A58777A11DD5503368C16665E6C327A04227A856C36455D + BE02340400E3C551E1D992E71299DE068BB104C021D1E7D31CEBAB409A9DA59C + 1C3802EB40AA5A40442725A24C01805FCACB03B95C8FEA3EAC9B28DF1B749DF9 + 4CCC2F2142ADE8F3A98EF555101C8E91222927078EB50190AA16807048222057 + 9832E551CE44F41457ECBE963AB3B595FDFDEE79B5CE7969D2EBCBF247938F3C + 6321331382DB0DB3BB3B4718CDC243B82F8EC64D2EDFD7993ABDAD35E90FA6E8 + A037C3A5D9D604E4A6F47C9D076B87F7C38AC510DBB9036677B7C1CC6B0406AE + 5977EE601CDF8DA4858AFD9DE6998F7E33FDC104D5FA325C6AA06C16ECAA4CBF + 681EAD49F3EAC37F10EB3A62353B91EAEA32605995603E260038916A6B0347C2 + 84FBC0CCDB4EF6980D1F5C492DEE3370C093EED40265B3E050E5C11106707948 + 840D6390BCB3336E32572640F53F197108CCFC29271271E3C891072D028E1FB9 + 65A1D7E03D931FB3DBD72D7F0276451A5B07E04761B2B6BDFE6A32D9D5652481 + CA3F44B17E9BA6C91B6519028036009B134D4D308E1E2558D688456038558141 + 40C740248EBBFD3110D1C802C07A3C855DF5CD78DF9A96DAEE59F4FC5DD95E77 + 5896E54B9234CB0220CEB73BE093E57304B8ADCE1BF393AD2D209B42E47000A6 + A9CACD4DFBCFC794BA3F4959DE7CBD2F3DD73311139D0A00404FA46857FDAFE8 + EA0DC7C9B256B5AB19C76E857AF073E896A51B4677241201654912F6666763AA + 6203885611B009A33E3B53D5361F76156CACCE2EF3C444E5A46A93A6054A0B31 + D96D474D5D33BA7AC306332A99B9DEEC6E81756A0B903246EE9100608220E03D + 4F16CA264C80008844540C602E0037806044B07DB9BA2010B9E2F47A009CD214 + 29DFED5471FB5EC460E61718386AF6B4C23AB90548EA630665CCE44C5714944E + 70A15055075334748B60EC71E5E1DCD3AF0282E8057010403633AF65469DD9DB + 0AEBF8E6319D0FE32FD1A3A6EDF5D0D6F70000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000005C2494441545885ED976B4C54 + 4714C7FF73EFDDBB2F16C862A9EC2E8637469136DA0A02021235D0B4169036D5 + 0F7505356D63A3629AB67EE927D3DA9AB4B169935A69DAC4200D0F79D8C6922A + 09446451508402CAC31416B5B0B00ABBC0DED7F403A06C81FA6869FAC17F32C9 + 4DEECCFCCE9973E6CC0CC1B4549B3E04BBEC4519FF9114470F2B54BC07EEAF3F + 3ED9934C171BFEC1F15A32F3CD2C36EC617A6AC0FD1C5009F7A0C03B3E8B29DE + E38430DB802523CD086A6B427D7DFDA2276142420271483AB8302B041ACFC862 + 73BDA4F50C01F81FE4C05303E654424AE92415C552F9D6AD72B1B7B7491E76DC + 221484311A4D5C68E81ACE6CCE246AF5564288FA5F37C05FA73BDD5A70627F50 + 53D30AB1A565BBE2761F21945A00801262275A6DBD6AE5CA93FA9CD70E695353 + 8F325A6DCE3F3580005371D81715898D5A5DF472452E502F0D8AE7E3E3C08547 + 80311A0100CAC808A49E6E080D362843830D9AD4D43CBFFC831B5993E9734208 + FB104E138022005A4A696E62626288DBED66DBDADAA656E0882908AFAB542984 + A05C93956DE0E3E24088773D620303C10606828F5F07C1668B9FACAA6C901DC3 + 99C6C3870F7016CBB185C894D242A1B575A7EB87EF79A85462474CCC572CCBFE + 7C7FDE4C5F5F1C0C0C8C6678FE577DDE2E031F1B3B07EEB5648480B358C08584 + A827AB7FC996FAFB0F6992939F253CBF621EF829E1CA15EBF0FE7DC95267E725 + B1AB6B977CE142492F21DF0E4892677068086CC1B265F0E3D80A6D5676381F1B + FB90957C20C66804D1EBD59EEAEA35ACC5B247B57CF93B8490FB39350DDF319C + 7F603D75BBABF4BB76FB7021A1FE7C477B5692E029965D2E67CDBD51B01F052D + DDCC9ACCEF6B7372FED6F3F9C49ACD105BDB2CD2CDDE6A5D46868AF0FCAA6978 + 91173C374FC7858581359BC1F8F9F9CA9D9D59CFF37CA59E619C0C806D7CFCDC + 983F8A0821E0E3E320DDE8DA26F6F494CFF2FCCDE1FC034953F05C1D1716767F + 0CBF360EBAAD391642C8F93D4B02C21800095C78C463C367C48547800A9E04B1 + BDFD32A5B470DAF344EA7255E977E6EAB8B0F03963F8B83868B2B7060338C300 + 089ED96A4F22C6680401823DADADFD67AFFD61FDF8E8E904EA729DD1E7E6E9B9 + F0B9F007A20040E754C227924A555ADCD0A71C1CB46DE0FDD7563E979FAADA14 + 202DD85DB0D9305956D60FE01506805D1979F2A3988AE2A996752F5B0F07A7A7 + F22AA67267C62A9D3D6A35DFAC350B982A745E4D68B461A2B4C44E294D3B7DF7 + 6E2F03A05EEAE9793238A5458D2EDEFA16D624B974BE55D68C185D68901F0180 + 169D597D456BF67879DED848274A4AEC8A2CA7558E8DF5E60FDC0203A050B035 + 80D2C7BB08514A7FB40D2B3B721BC4A4518539634D8FD18705F97B6DA5AB3A33 + 7F456BF2CCC0C74B8A07EECA72DA171AADE3B8C1170A00664892AAE5818106C1 + 667B1C7E53F388B223F7A29838AA3055D6F4185D98C99F622AB366375CD559F8 + F26EB7305E523CA0C872DA771AADE3A24A75964E6F7BE6D8E010009A37595931 + F6A8A1A094167D7D4352394552694D8FD1879BFC17ECDBD8711B6FB730778E2F + 4D4AA9738F779F13847BEEF1F1751313130000EEA4D3891483CFF58D0643A6BB + E044B966CBABF31E46B3E010DBDAB48C5D23298C65646474D2106E5A185E56D7 + 650745DA67027F53EEEB870CEF50B314C0D9D131C46834BF87725C85D4D1BE5A + FAADDD025010B51A44AD0614058AC301F15A0B264A4A215CAC1F74096271B5DF + F29F3AFB9CD9FE3E6A5FD3121FAF892F75DE4659DD0D3BA5344DE9AEEB156BBF + 04C5DC3CF37AA3ED0E08C0DE6796C097653703D80E208100531712C00EA01E40 + E1B8A2541F1B1AC637D16F808D4A896019A6262725CAF442F4D269F81D94D65E + 1F9065BA41E9BFDC239F3B02CC03F73260460686C14BBE06ACD7EB11CCABC14E + F7A000FA05018DEE71548C8EC229CB000898F5EF828D488E6419E67C4E4A9489 + 528AD2DAAE015991D3E4BEE66EA5E628A088F3C7683E031E5F044CD25E709129 + 9184902A000AA5748BD4D7DCADD47C0A280B574400F813F0FC8568DC50CBEA00 + 00000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000080E494441545885EDD87B5054 + D71D07F0EF39F7EEDD272C4F2BECAA10AD41ACA01182A2C6198D290F1D33DA47 + 669C696AC5573BB1CE586D1293769AA669263EE2249DC9A4D34E6732358D1D81 + AA05450C823AC322885AA62ED4B7B040101416F6755FBFFEB1A22044F011F927 + DF993BB33B7BCEB99F3DE7DC7BCEBD0C77C26CF130FEF8D385002A30F6F99D5A + BFEF1DF5EC3E88C3FDBA6E691A3D6D517F0E555F465B97EFEEF76181CF24463D + 35D0FD314B83497C8C1CA3CEB7C0C7CDA00167BA02E206FCF9D0F9B1F2A0B5AB + 0FD03580340003805C0B21BEB3160C3A5E59B666CC80A525A568EDFC0ADD8156 + 780702055DC6B8CE1A08BA8CEDCB768C19B0F5C8C7D06E3640F18781F7E620E9 + 107479CC6003C34905D795F0E731B68C986F818F9B6197BAFB42447403401B00 + 15801DC0338C31EB372ABB9341402202630C44A441D74BB5EEDB7BD52B57BF54 + AF5EBDAD757502AA0666314348486486C993D305A7F3656EB1AC668C399E0A10 + 0022ACD653F5070EFC7C72F38D4BC18AE32F6B9E968F2814CA60444E001201B7 + C179238F88A834A4A67E61CECF7FCFBCE0858D3C2AEAB78CB1C86F0CC8004CD2 + F5BA057EDF22E3FB7F5CE30B06CB2049E30DD35221242581474703A208F2F9E2 + F4F6F6F94A53E37CD9E57A4BAEAF3F10983D7B6B44C1DA7F1B67CD2A6482F0BD + 873474037003700098382C5000B0FB3BE3B024E03748C07E6E322D31E5E6429A + 9B0D66340EDBAA2927076AF30D044B4A9687AAAB17ABD7AFAFB5FF72F342F38B + 2F963151CC1C058C88E83D0A04FEA07574847844047A8095BAAEFF7508F09DF1 + E3B13432320A40859090906679F5A7106263473C83386122ACEB37205455690B + 95967EDEB36BE77A88E252F3A245B58CF321BD711F6EABE2767F786BFB9B56F5 + CA9565CC62A9BD9C9159D872ED5A1B80ACFE82EC05AB059F4D9AC41863A54242 + C212EB868DE016CB283A6070E49A1A040AF76B4272F292980F763069EAD42F11 + 9E39C3E1B6296EF7EEAE5F6D89D55A5A8E31494A2359F6CA9A965322196B0E1A + 8D62536BABEAF178207C326102C6190CEB98C9B4C9BA612304BBFDA171002038 + 9DA0BE3EAE3434BC408ABCDD989DFD2C13C5D46170BF1E88139CCE34DBE6CDA0 + 60C88856CF0F5354B5729E22371FBED9899BB20C9E6A321901FCC6B478F1A886 + F54131E5E681DB6CC9C1CACAB57263E307C3E05E57DCEE5D7770E582D399665D + BB0EDC628579C50A18E7CC8964023F12CFF9F39F252660B224813386E5CC641A + 2FCDCD7E2C1C00309309527636F4EEEEF5C18A8A33A4EB1706E0DE50DCEE9D5D + 5BB6C4682D2DE582C3991EC685A713630CA6152B2165CD890470245E1433F725 + 27810358669896FAB557EBC3C6903E130C9826D7D54DA140E018EECDB91D5D5B + B6C4689E9672C1E148B7AE5B3764AE33C6605EB9125256961D4059BC28667200 + B385A4A4278203001E170766B592D6D69AA1DDBAF51F22DA26BBDDBB07E0660E + ECB9FB1346FE005246A61DC03F45004E1E1DFDC4808C31F0E818681D5F39D56B + D7FE7426640956EC2A8A5ED5DA7A544ABC83B38E7A19D74506481047B3677888 + 880248969BF7FCAD32B8CBDC131BE2D38FE9997CDAA6BC941171448440E17EC8 + 67EA7A00BCC209E826BFEF81951E32C4E3E2B75DB04FDCF7A99614EB97B56309 + F1916986D505867371538308DF1B873DC2B84228A74FF780E8FB3E5DAF150134 + EA6DEDF391FE6470A469AF37A52FD8FD9AC6623B0C11E58E785BDA9ABC19B018 + 0DEC3C1C660081E7021EF3D08A44C1A242C8352E2F801C9FAED7FEE4FA757000 + 554A53E393C111BDD1E065BBD65D898E6936D8CB1D7111330BF266C06232DC5D + 51CE5B1CE6B36647E0FE8A81A222C82E9797743DC7AFEBA77FD6E2419D3F000E + E01FBAC7436A73F3E3E2DE6CE8A69D6B5C72CC751FCA1D71B69905F98371FD39 + 677198CE9A1303FD1583C545905DD55E45D372AA44B166ABD526364786776E5C + 256A24A283C19212103DDA4B2D227ABFA19B768471743431CE3AB3203F8D2C26 + 030118EEC0398BD374D694180C161723545DDDAB13E59E94A49ABF98CCF36E0A + C2A6FEB67971770F08D8AA5EBEE493AB2A1FC577DBAFE1DD5FD4CAD630CE36AB + 203F0D169361A43F85B7EBFCC69D1E4B97971B73159D5CFB8D4651E6FC790067 + FACB893B3B3AF05284ED8A5D140B82A5A59F33B3854959590F687AC889DC6D5E + 25F43F2F2D934461D69ABC19B08E025774F2226A9BDA7BAEC53D972F057B6B1B + EA8B70B6D7A602F81000BC5E2F0040E8D375348582586AB75FE0804775BBF3A8 + AF8F8BC9C960A3B83FAA972EE9C1FAFA8FFE2E27F882E0AB654537A64C8C0163 + C3EDB4C2B8E2931751DBD8DE030A5FAD55AEBD68EAF2A0B7B7F7EE21CBE19708 + 02005C95155C0C8590131979960327B4E6E6854A5D6D14290A58442498C532E8 + 8424CB509B1A113C7408A1A3657643BBE7E009DBA4268F1455E5E9ECFB515F50 + 31A64C188AECC7D5B8DBBC0072A0044FCB65BF07757CFD5D64500B196633F638 + 1D701A243363580B603D632C8559AD74EF99C40FBDAB13A46941000700EC20C2 + B9B7541BBEC8780DDC689ECB183F3C777A42C4F27953EE228908C5A72EA1E642 + AB9774CA21526AD4B27741EDFF7DE0080D1907236358151D8D5763A391649040 + C0771963B30138011801DC02D00422974AE43FE5F3E193CE2EB8FC7E20FE5988 + 2FBD0D2E99B21963A573A727462C9F370500F0AF5397E0BAD0EAD549CF254575 + A927F600376A1E881B163830A94609334C66244886414543BA8E6BB28C3ABF1F + 37356D70A5712910976C073798B3196787B3A625D874026A1BDB7A49A71C9D64 + 977A7C0F70E3F488B811818F9CC13DB917804E44AB48D35CCAF1DD40F3C83DD7 + 9FFF033122C8F1A1BE8FE40000000049454E44AE426082} + end> + end + item + Name = 'button-arrow-left' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000002B549444154388D75935B4893 + 6118C77FEFF77D6B473797A76821AB640466662EF066415D54244105C930EC00 + 5D4617215D4644A0E56537114174B0C62E828A282A092BC862B54C4A120AD319 + 5A5B9B6B6D1EBEEF7BBBF0D049FFB7EFF3FF3DFFF7E17904B3720577E2DD7144 + 551DEE30887D40108117491A8881EC34A726229987178CECB30848098000F036 + 1EC5136A0E0091864A776D4B5D19415F115EBB46BAA0131BF9C1D5F8377A86B2 + BD403817BF37908C9E9A81B836EEC47FA62750D5F162AC333E6AE8BA6E2C245D + D78DCEF8A851D5F162CCDFDE13F06C3904805A71F89CAA586C0F4E6FF5AF0AAF + 2B430801C09DFE14D386A4DCB56426AA10ACAD7052EEB438BA3E6642B6CA9A8B + B95777A5A23A3CE1864A776D534DE9DC38B8F53E457B77029B45E15F35D594D2 + 50E9AE15166BD859BF0305686EA9FBDDF9767F8AB34F125CDE1BA0AAC4FE1F40 + 08414B5D1940B36D651D1A100CFA8AE663B77727B8B288794E415F110882AAB3 + 180D21BC5EBBC697EC24C7EF0D326D4AB1FDD2BB058D1645D07FAC5E7AED1A20 + BC001A5266D205BD64B9DB4ADB363F1D4F13F24A5380D54B174F902EE8206506 + 295180586C2407C0AEEA125A433E0E4407F8F47D6251C06C7DCC9CCCA348C9F5 + 6BF1AFC8D9CDDA5D5DCAB1908FFDD10F0B42A4945C8B7F45C2F589C1372872BA + 10793E94ED8DF625E78BF65497D2BA6905F929E33F40B42FC9F3A16C2FA611F9 + F9FA3EAAD4A74C7BA0E171F7E078B8DC697154973B1042B0A6CC31BF44739DA3 + 7D494E3CFA9C34258DD9A737BEE5DF3E449D1C7E8756B222A55554DDEEFA9809 + BD4CE49639972814DB34AC9AC2F7BCCE93C1714E760D73F9F558AF2969CC0FF4 + 0CA46EB68169CE1C1342C1B3F9009ECD0755C5620D030B5C239DD23422D96711 + 23FDE03CE8D333D63FFFA77A2A706DD88ED5BF1ED5553CFB2C310B39263FBF25 + 17BF8F9E1CFE6B26BF00021233F6A69C84BF0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000003A349444154388D8DD45D4C5B + 7518C7F1EFFF9CD3D24329E5A5BC25C36E834331D3805B98514C164046F4C298 + A960621096917835133546135DD411E38D926546E3CD9245B9909832E322CCB8 + C42D1991395FA280324933904A606B69D9FA4ADBF3F7A2ACB2149CBFEBF37CCE + F33CE7E411DC8EA2E23CD08BB3FD30C2626D14887EA003810114220901D3C098 + 94F2B499880443E73E2272F94B36470008AB4E65FFFBE8BBF73A410C21445F73 + B55D74D49760B86CD82D2AA1789AA99528E35743F8D79251E038C8A1C8AFE7CD + C0C8DB6066364045A56AE0247ADD3E37926FEACA7563B0D3CD83B50EB64AC694 + 78A703BC77D1CFCD44FA2CD013F9653C1918790700D5D9D687A3E5092770F161 + 77B131DCED6157996D4B0C4011823D55760E1AA59CF7853D9164C6B0D618DE54 + 7091D4B20FC5D9761824437565BAF1C993F5D8AD6AAE38BA9EE1C5B33EE64389 + 3C7877998D53870C6C16A51BE82D7DEC28282A8AD0AC1E21C4F3839DEE3CEC88 + 778EDFAFC7D02DCA96DD7A2A0A79617F0DC071B5B85CD31B5B518410FD4DD576 + 65F3CE62EB190646E70844530C777BA82AB26EBB82BEBD951468CA3D02F1A85E + DF82027474D497E461D72329867B3C543BB6C7009C368D961D0E800E4BA51B0D + 211A0C57F623C45259ECB7E518EF1E74B3104EB2104E6E090960FFC65486CBC6 + A5859B068A860614DA2DD9DD8DCE04F9C11F1100AF8C5DFBCFCE0A54C1CC4BFB + 2440B65E160A4043CA50289E76013CD75421E757138C4C053875C8C87570B784 + E2699084A59428C0F4F44A343B8610E28DB65AD97DBF8B81D139AEF86FFD2F70 + A37E0A3383028C8D5F0D9131650E7DB3AD563E7D9F8B23DEBBA30BA10453CB31 + 018CAFAFF850A494A717D79251EF4C20F79010421C6BAF954F6DA0B727D82A27 + BF5FC29472524AF963FC8F09D4E2477AE28AA52075C51FE9EC324A29D5B51C7A + 6057B12CB2AAA27567311635FFE7FE7A769513134B19E0D954D0EF0F8D7D886A + 266E51786FEB64322D1FF8D617F6B4BA8B71D92D39B4A9A6685BECD5F16BA4A5 + 7C0DE417373E7F8B74701175FDEF59B48A9DD25A5D772692CC18DE99E09E8C09 + 8D153A362D1F9A0F2518FCEE2F4E4C2C65D2A67C1D180A5FF88CC8E533D92600 + 50545CCF1CC3DEDC8510A217182CD094DA961D8EBC7B38BD1C13A69493C0CB12 + 26D72E7C4AF8DCC7FFEE7FF3DBEDCD5D943C7E14CD51AE09213A8176A00191BB + D853642FF64FA9A09FD5AF3E20F1E7E41D13DC0102A059D01B1E42AF6FC152E1 + 065545209048646A9DD48D05E2B39748F87E0669E695FF0300247A332C3364A9 + 0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004ED4944415448898D954B6CD4 + 5518C57FDFFF3FCF76A6F445A130531E2DC5A2246206DB080B15051B2CB16058 + 1137088815171AC48D2C48D00416122389E20B134820620C14F1410235685091 + 87886550668A121ED3A19D0E9D4E673A8FCF453BEDB4A5C4B3FA6EEECDF9EE39 + F7DC7B853C88BD80E2A52FE16E588918A6534456004D800FC103D880088A1F68 + 53D503C0E54CAC9BEEA3BB88FF7E9CB1905C61AD9849C50B3BB096794D44D602 + 5B4564DA149755174C73E19964C3661A44FAD3F8C3712EDD8ECB40269B015A81 + CDAA1AE8BBF01D770E6D874C6A74036BC52CA6AE7F1FC3555622B01F58D65055 + 444B4325F55EB71AC238DC89A7E5E0C5301F9FB94D6F3213035E04BE885FFE91 + CE7D6F42260D8029F642A66ED88D5932B54484130E8BB178DBD33378EB492F55 + C50E049021905717DA4C167A5CDAFC60B9FC198ADB6EF40EAC046E5A267BCF1B + F642127FFD3CD8A074F9260AE63E668A70C8611A8B3F6CAED1C6DA12CD11E648 + D319554306EB7C256EBB459E7DA094F6CE7EB91649340A72CAEE9DF74FE2EAAF + 64A29D18EEFA95006B51966D5D52A58B661429800E01E044A087E67DED12EE4B + 89E621B7CE668AEE5A3E5BABCB9C16E013411CC54B37006060984E606B435511 + ABE79733D68A93C1A8B41C0960B718382C864A1E465B66B0EDA92A44643622EB + 1DB31EC152E6C11091261199D6D250C918F59C08F4B0E948807915057CB26A0E + 6EBB39FEB4F350EF75E39BEE52601D8688B36E3106D034C565D57AAF7B94F4B6 + E02079ED64279FAE9AA34576739475F916E56A4057D49502CC03A9B64DADC600 + 7C0BA6B9C81DA088C80F1D5179F97080B9930BD8FB7CAD4E7258C65932769CAB + 7D1EF75030F09985255810F17826D98665B605A3B41C0990CE2A0F5716B2F76C + 48C859A73A52E78DAD066CACAF0460844B3C0016C066330D7272F75FE894442A + 0BC0E7E742F7F53C07A7D560637DE550A20C0041D536D840B5A7A73F5D9E93F8 + 5ED36C367C75955FAEF7B2A371162BEA4A87EF84AA8EBA1FF96355454424121F + 7E267A403100BF3F1CCFDB8DC907CD35FAA8D7CD966F3B68F577DFE3A1981857 + 46B8FC281840DB1FA1B874C5D3C3444E8BC187CFD5E09BEE66F3B10E8EFABBFF + 778393C128405C55CFA4A3210C553D3890CE660E5E0C8F8A9CD36AE89EE61A5D + E871F3FAB120AD97BB866D9928A67793690EB777C1E00BDB9BE8388F01B403AD + 1F9D09118AA54645AEC066CA9EE61AF54D77F3C6B7D7E88824F2533A2EA6BB4F + DF2292C86415DD994D25E8BFF2334626D68DC2E6DE643AF6DAD74192E9EC28C9 + 4EABC19EE61A763C339359250E65029C0C46E5B3B32141750F703E76EE1B34D9 + 8799BE1BA6F0A127222212B8D13BB0B2BDB35F965417633547CED66A0AB5E5CE + FBF92EAFB60618C8EA19604DB62F9A0AEFDB82A69298A950106BB9175B65753B + C8AD6B9164E3F1AB3D666DB9533C93ECF7BCAD39F42633F2EE4F3765FBC9EB32 + 44DEA49A8D860F6C2575F36F20F7659A562AD6BC83B36E31028F031F8BC8EC85 + D35DDA54578ACFE3CE7D991AE94F8B3F1CA72D18E5707B179144263B64CB66D5 + 6CBCEBCBB789FD767458DD880FA68592C657285AB41A1007C20641D60175F7F4 + 4588A3B42AEC043D9FED8B72E7D076FA2F9F1AB36C0C6C55F3296E6CC139633E + 18A6886A0D223EC083604389007EE0574563D95482D8D96F887EFF01D9F8DD7B + EC630258CABC38EB16619B528DE92A1E379FEABA41F2DF4BF45F398D26FB26A2 + E13FC27E415CEEBDD9360000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000005F1494441545885CD976D4C5B + E715C77FF75E5F63F356635E62CC4AC084000911C125F952B650B1540B81A8A4 + DA46B769DDB47CC9166D95A6464C4AB53559B589549B1669D954459A3A69AD9A + B224059AAAEB4B925135AB829612CADC12F316860D0EB18D21B6F1DBB30F061A + 12B00DF9B2FFB77BEF39CFFF77AF9FE3E71C8914A564E5A2B358D11655A23116 + 21299AE567221625E2711276DE2430DC47D43B9DEAB248C902F4958F935DDF86 + CE622D9264A515D80354036624D211F80107F0197005C4F9E0D88D49DFD54EFC + 37DE07213606A06E2A25B7B51D5D494D2DF002122D1579E972FDE66CAA0AF414 + 6669D1AB3281700CE75C089B2BC047E33E866602312144377062C179F3FA9D73 + BF253431B83E800CEB7E725B8FEA6435AD4396A4C32D5546F9D02E13DB0AD293 + 7D30FEE3F273E6DA14DD36772C26C49F62B1E851EF3BA783BEDEBFA50690FDD5 + EF90D3F453B324D16331EA6A4E3695B2B33033A9F1FDFAD439CFF31747197107 + FB85A0D9D7FB9AC373F1D40371CABD1719D6FDE43E75D42C49F436580C95AF7E + 732BC506DDBACD014C595A9EAECEC3763B601AF7060FA615EFE814D1F0DCC258 + FFEA009A4DA5143C7B52272B9A0F1A2C86CA3F3FB5059D2A6FC87C495A45A6A9 + C2C867D37EC3B837D89866B1BE1A1CBD1E897AA69663961DF25ADB51D4B48E32 + A3BEE6548B0555495C20B3C1484A10AA2271AAC54299515F23CB4A476E6B3BC8 + 5F96B00CF152D395D4D4CA9274B8A3A9840CADB2E682003D9FBB693C33802790 + 1A448656A1A3A90459920E6BF337D766D6ED5F09905DDF0670ACA5CA2827DB70 + 17BF70F3FCC5517ED1F028397A4DC2D87BB5B33093962AA30C1CCB7EBCED4B00 + 3933079DC56A96900E1CDA654AB8C8BB431E7EFEF6282FEE2DE6E9EABC94CD97 + 7468970949920EA8052566D5541607D097D521C94A6B79BE4E4E54E7EFD93D3C + F7F608BF6C2CE65B3BF2D76D0EB0AD209DF23C9D2C4952ABBE7C771C405B5409 + D050BFF99135133F1CF6F2B3EE118E3DF1286D351B335FD2A24FC3A22FB2C668 + 06D8BEAD40BF6AC2E5112F47BA8669DFF315BEBBB3E0A1CC01167DB66B72CC00 + 6824450509736196F681E07F8ECEF2E3B786F9817513DFD89A836B3EB46EC31C + BDBAA2A4177DCC92468D03C46F4BE9FAFBFE74E616223CD73342282AA457AE4D + F1CAB52936A2EEEF6F1355F7EC2DBD2A83242DDF880308110846622BEA2F2B4D + C3EF9B2D1CBE60173F7C6C13CF5A37F6F973F4EA8AEB40380642049601442C0A + 30E9F0852AEE4FDE53FA087F3C50C64FBA8629CCD2F2BDDA87DF03CEB910C024 + 715FE488C70130687305564D78A2CCC0A996325EBA3CC16BFDAE870658F4190C + BB1D7180B0D30E70E5A371DF9A495FDF62E00FCD164E7C30C11B376E3F14C0A2 + CF95F0943D0E1018EE03C1F9A1197FCCE6F2AF99F864790EBF6B2EE557EFDFA2 + 73606643E636979FA1197F0C381FB0F7C501A2DE6982B7062685A0E74C929DBE + 6FAB91979B4A79E1BD71CE0DAE1FE2CCB52984A027EC764E2EB5693280EFE3B3 + 00C7BB6CEE58BF733EE122FB2B8D74EC2BE1A54B13299F8600FDCE79BA6CEE18 + 70DC77F5ECF27D0520EC1A43BFFD6B534AA631BFEFBF77771FACCE45ABACDD8C + 54E4A7F3ED1DF9299F867743517EF4773BEE40F874C43BFD973B6F1E67A90A16 + 0F7E41C83144465DF3256F30DAFCF9ED80695F8511455EBB2949B55B0A470547 + BA86F9B763BE5F20DA66CEBE18094F8F2C3F5FEE3CA2BEDB88D0424457BEBB7B + CCBB707070DA6F68DC6248F82592E96E28CA91AE612E8D78C70462EF6CEFEB9E + F98FDF5C11B3A2F559B83580ACCB984B2BAEEE1CF32E34FEC3EE35ED30A5635A + E59C48A64F9DF31C3A675F7AF3BD77AFBFEB705F3809AC1C541EE8BD82373F41 + 44C3733A8BF5AF9E60D4D03970E7B1314F502A36A4919FA1DE1FFE806C2E3FBF + B93CC1AF3F9C88B9FDE1D302F1CC6CEFEB1EF7858E55A7A4357FE4B4D25A720F + B6A3CDDFBCAEC9E88B197F0C41377022323B7DFDCE859709D87AD7044EDCFACA + 0A9975CD64D7B7A11694164990743614703EE29E9CF45DED64FE5FE710E18584 + 164987D325A985E5E8B7D42D4EC76624598D670B404409BB1D84A7EC04EC7D09 + 67C1FF3BFD0FCA59553B3B9EAA8B0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000857494441545885DD986B7094 + D519C77FCFBB9BDDCD663757432E246C6204834814BC102E0D582F412B291D1D + 471DA5ADAD628915EB1767A8A34E3BA5B53AD38E17666A33F536745474D072F1 + 968E16546E0D3A20159210088440B2B96D92BDE5DD7D9F7E480209249084F44B + FF1F76DED9F79CE7FCE679CF39CF4598880C1B8EA9C538F36662CFC8C348F402 + 2080D2FF6385BA30DB9B881EFB16F364DD849619B43966B96694E2B9E636DCC5 + 8B10A73B43A00C28012E0352115C2841C00FD402350A5F59E1EE48E8DBCFE8D9 + FD0FFA8E1F987C40D78C79A42DADC49133DD2922F7023F1691458061084C4D76 + 68AACB8ED36E10322DFC41137FD01400550D039B81BFA9EAC79186BD747EB46E + CCA0E70534DC29A4DFB186A42B161B22AC047E2D22B945E92E5D36339D05BE64 + 664D71E3B41BE7CCED8EC6D87B22C8B62301B61CEAA03D141355FD1A784255AB + BB776DA46BEB8B685F7862808EDC6232573C8B3D356BBAC07A11B9B634DFAB8F + CCCF615EBE1791B1EF0E33AE6CFAAE9D97779EA4B12B8AAAFE5D5557F5B534F4 + F8DF78825847D3F8009D052564FDF4CF180E7705C29B19EE04CF33374DE3D619 + 69E3023B5B7D318BBFEC3EC54B3B9B89C5B55E9565F1DEF6DA96575661FA1BC7 + 06E8C82D267BE53A0CA77B0542D59C1C8FEDA58A22B2BD8E09839DAD9A13BD54 + 7E508F3F68B601E5B1EEF66F4EBEFC33E28153E70734DC29E4AC7E8384E4AC0A + 44DEFD5E61B26DDD0F8B7027D8260D6E508D9D11566CA8A529106D516551F4E4 + A18653EB1E8458DFB071C356CEB8FB37B8F267CD10E1C339B91E57D51DD3FF27 + 7000A989761617A6B0E550A72712B396D8BC19AF1B0E772C52BB7364C0C419A5 + A495AF3404D99AE14E2878F3AECB494B4C18D362A1BE3861D31AF1349F4F6989 + 768A3313D9F45D4736E0764E2DFE2474E073AC60E7E931A72DA62E5D85200F89 + C8B5CFDC346DCC7B2E6CC67970633D0FBC5787A5AAE32204CA0A53B8F7EA4C05 + 7E2936FBECD45B560E7B6F00B8A697E2C899EE049E2CCDF7EAAD33D2C60867E9 + 431BEBF977530F3FB9260B638247FCF14553494DB4DB80A7DD579461CFF40D07 + 4C9A538E88DC2B22B98FCCCF19D3551289593CFC7EBDEC3ADEC373B715727B71 + FA44D8004871D95931670A222C07294ABABA7C08A0612369D66280FB8BD25D3A + 2FDF7B4183D198C52FDEAF67C7B16E9E5D5A40C5CC8C09C30DEAEEAB32314444 + 84FB924ABE7F06D031B5187126A68B48D9EDC5E917F45E5FCCA2F283C37C71B4 + 9BB5E505FC68D625170D0790E571707D9E17607942A60FC3D3FF450C67DE4C04 + 29038C85BEE4F3C3C52D7D64D361FE7524C0EF6EF171E795930337A885BE6410 + 992D48BA33AFB81FD09E9107506208CCCA728F3AD98C5BFAE8A606F9EC70407E + 73B38FBB4A3227150EA0242709E93F17B3ED19F9FD8003C9E665B9C90E1DED1E + 8BC5551FDBDC20D5F55DF2F48DD3F49EAB261F0EA020CD39F85864247A00B003 + 20A4A6B9EC23C359AABFDAD2201FD775C975791E4D4C3078EFDBB68B86595C98 + C22549C303C11086341988C2F68123E1728CE2BD2F8E06E4C3DA4E01D8D3D42B + 7B9A7A2F1A0EE0AD7B2ED7B3014F3308AEC1FFFA919550C4B44634B4E4D254D6 + 2CC9D3B59F37C9BC7CAFAE2DF761BB88946B509949E786D1F020437FD9D00F38 + 109BFCFEA039AAB107AECD266EA1CF6E6B9217BE6CD63FDE5AA836631228CF52 + DB198636ED2FBFB05BC12E80DAD6A0293DD1987A9D23EFC507AFCF26AEAACF6F + 3F213643F8C3D202269BF1704764F0B1D60A06FA01CDF6E30035007B9B832C2E + 4C19D5C0C3F372885BAA7FFAB2590C115D5BEE9B54C8BDCDBD281A05F60F7061 + 8F1E3B00B04355C3DB8E045CE70304A89C9F4B5CD117BE6A169B81FEF6669F4E + 3449385BDB8E0440D9A968B8AF9F0BC33C59473CD41D06366F39D8412C7EE18C + E9D105B95496E6E8DBFBDAE499EA63A21348B3CED6217F8883FEB0001BFA4ED4 + 6145FA6F0B1B4042461E8EDCCB7BC331BD6F5A9A939953468F28832ACDF7AA69 + 29AFD6B44A5724C6E2C214958BF0E473DB9BF84F6B28A4AA3FEFD9F16E387AF4 + 9B3380F16000EFF5CBEA818ABAB648F63D2599D88CF3AF2522327F9A5723318B + 576B5AA53B1AA7AC207942900D1D119EFAF41896A5EBD48ABFDFFEDE5A74A807 + E381565C97CE25212DB721108DDF6FB7096349BB444416FA9235685A84FB2C6E + 284A1D379FA5CAEACD0D3476463A81BB7BBFDE1A0AEEDD7AFAFDE99AC46C6DC4 + 735D450330BDE644EFEC05D392C949BE70DA2F22B2C897AC3714A54E28A3AEDA + D3C25BFBDA04586D99D12FFCEBD79CF61E0CA949FA8E1FA07BD74614AD34E35A + BFEA837A1ABB2223D91C117222709FD677F2FCF62654F51D45ABBAAAAB88770E + AF8D8705E0AEAD2F629E3ADCADAACBFC41B36DC53BB51CE9181BE478555DDFC9 + 639B1A8859BA53551F08D7EDA67BFBFA73C60D2F7AE33142B5BB48BAEAC676C3 + E9AEEE8EC6976F3ED4E929CE4CC497E63A67F24464A952B5A785273F69A42FAE + 3B81DB4D7F634FEB6B8FA37DE73AE39CAA5CC33D840E7E89FBCA1B4E89237163 + 24662DD9F45D47767BC8646EAE07D7386BDFA16AE808B37A73036FED6B134B75 + 83AADE69FA8FF6B4BC52C940C8BD302080150A10DCFF4F9C45733B6DDE8CD701 + F7BE96E0756FEF6B3322A64561BA0B8F63EC1D8783FE10CF6D6BE2A9EA6383A7 + 75B5A26BC2F5BBCDD6D71E1F150E2ED4C0B427905A5E49CA823B119B7D36F034 + 22CB6D82CCCBF7B2D097CCECEC240AD39C9CDDC06CE808537322C8B6A3010EF9 + C3A2AA41E0AFC0EF2D33EAEFACAEA267FB7AB0464EF3C60638A084AC4B49BD65 + 25EE2BCA1091CB80FB818AFE028751BFB9AA46811DC006E06D8DC73A7ABFF988 + 914EEB45010ECA9EE9C333F707B867959130C5872019C0959CE95127A2F4026D + F4F7A8F72B1AEE6BAE25B4FF337A6BB610EFF68F67C9F1010E95E1491FBDCB0F + 58C1335DFEA117EFFF9DFE0BE66A857FF45ED0B20000000049454E44AE426082} + end> + end + item + Name = 'button-arrow-right' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000002B749444154388D75935F4893 + 5118C67FE7FB3637B7B939742E9A8885ACC2CCCC05DE2CA88B8824A8A0188656 + D0657411D5654404594137DD447423658D5D04156154125690C66A999534504C + 0DB4A6AE3937FF7CDF77BA985AFEE9B93CE73CBF87F73CBC82793902FB70EF3D + A9AA366708C4112080C08D640288826C3566A7C3C9E7B7F4D49B304809800070 + D79FC2156CF003E1BA326775638D8780AF0077BE8989AC46F4C7247762BFE81C + 4C7503A174AC2D9E885CCC411CDBF7517EA5D35F71AD6BB43536A26B9AA6AF26 + 4DD3F4D6D8885E71AD6BB4BCB9D3EFDA751C00D57BE286AA98ADCF2EED2E5F1F + DAE24108B130159F47A6E81A9A6483C7861082CD5E3B2576B3ADBD2F19B49655 + DD4EBF7F2215D5E60AD59539AB0F5715B35C56B34273C7300FBF8E2D9E1DAE2A + A6AECC592DCC9690BD762F0AD0D058B33479411545F9B41CF273F5D5308F7A73 + 1021048D351E8006EBBA1A142010F015AC302F8734770CF3781E12F0158020A0 + DA0B312184DB9D6F0260D3F5F762CE90FF859D6B1B90B53E075E471E20DC0026 + A44C4E64B5A262BB99DED3B5ABBAFBC6B33445E29C0D96B2D669213135075226 + 91120588467FA4FF9BDA3F3ECDD1489C33411FFB2B8B00987F1F356632285272 + EF6EEC2752AE0CEF1F9FA629F28DD3411F072A732D4929B91BFB89847BD3031F + 51E45C36FC7630D51DE949AC00646675CEEC28E560E5DF8A233D09DE0EA6BA31 + F4F0D487A7A8529B35F2FD752F3B067E874AEC665B65896DB1D212471E1B3DB6 + C5E4484F82F32FBE270C497DEAF5FD5F994FCF516786BE602A2A1D33792B1EB5 + F72583EF86D36BEC790A8556131693C27846E3D5C06F2EB40FD1F261B4DB90D4 + 67E29DF1B10797C13072CB845070ED3C8A6BE73155315B42C02ADB48AB34F470 + EA4D589F787613B4B99CF5DF99559717C7B63D58CAB7A23A0AE7AF254636CDCC + F74FA4634FD112434BFEE90F5397325BF06E71FD0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000003A449444154388D8D945D4C9B + 5518C77FCFDBB7AC1F96F2D10233B02AF4057417E2B4A2926836C445A6662171 + 5E1884254BBCDACDA2993746850B36E350173526CBE6E2E788219B1AC7CC9608 + BA652CB24D0228E870227582500A5B8116DAF778C187D4C2F47FF99CFC7FE739 + CF39E72F2C49B3E07EB816F7969D8835AD54907AA012C1001C28C2402F705229 + 75D48C4642E153EF10B9708295120049B39353FF3AF6C24D6E906644EACAF29C + 52E9CFC0F0D8705A2D8467E3F48C4ED336102638159B061A403547BACF98E32D + AF809958046A1672771DC45E748F0FC5D745D976A3B1CA4779818BD5943015AD + BDE3347504B91E8D7F093C1DB9DC161B6F7915008B7B731DAEC0936EA0E3415F + BAF1D18E126ECFB2AD0A03D044D898EBE4512393338393259158C2485B6FB4CE + 8786991F1944736FDE098AE6A22CBBF1DE763FCE344B0AE4F42F61F6750CA394 + 524BB5C22C1B876B0C6C566D07509BF9D86ED02C68A2A79588C8B38D55BE5561 + 00E9369D8F2F8FD1D41E9495D012AF83E7EE5B0FD06049CFD6EDA5156822527F + 579E535B6B6600E5052E0ED5F8F9B47B8CA68E6468DDA61CD6E9DA06411EB1FB + 03684065A53F634DD892EEDF90CEA11A3F9FFC30C6BE1550B74D2790EF02A8B4 + E6F8D01129363C0B97108925E8FB6B664DA888B02B90CBDBE7FF1411D8FB50BE + 1211313C36CE0E5D37D07474C0E1B42ECCEE4A6896675A06E43FDB05DEBF38CA + F63BB3A5D4EB60C1AF1C02E828150ECFC63D0065B7DEC295E7EF5537031DFE7E + 84D7BE0BF2C6B6424ABD0E00C2B371504C2AA5D080DEDED1E9FFD31447BAFE81 + 5597642DD717FD3D980934E064DB40988479D3C638D235C2FE6F83345727C386 + C2517A466604689B1B1D44534A1D1D9E8A4DB7F68DAF093BD63DC6FE8E2007AA + 0BD9569A95B476F0FC354CA53A95525DB33F9D4333A337424043537B90AB13D1 + 5581E5052EDE7AA288C7FF05FBAA7F82CF7F9C48007BE64341A2BF5EC262466F + E0B8A3A2331657779F1E9C2CA9F0A5E3715A938C99761D7FB63D05F642DB55E2 + 4AED05F5D9D8B197898786B1CCFDD18FEEBD4DA5E5151D8FC412466B5F6863C2 + 8452AF1D9BAEA574FB5B384AE337BFF3E6B96B89B8A95E049A27DB3F2472E138 + B0988768163C4FBD84B36C2B22520B34AED3B58240BE2B250F7B4766C454AA13 + D8A3A073AAFD03264FBDBBBC61D22376966D25A37A37BA2B5B17912A600B508C + 2C27760F0B897D713E1464E28B03447FEE4C3A41EAAFD0ADD88B1FC0EE0F60F5 + FAC0624110140A353FC7FCD810B3FD67890E5E0265A6D8FF06E85F78A3E3CD33 + C90000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004E049444154488995954B4C54 + 6718869FEF9C99016450065011671001AD685D68B092CAA2AD57A25865D19569 + 52EBB5B65DB431EDA62E4CAC6D5DD4DEEFEDC6269A4A22D1C6B4266AE235B5D4 + D60B6205AA34A803E23817CECC3067E6EB0206010793BEABF7E4FDF3FEDFF7FE + DFFF1F6118246B1CF9CBB69057D38018668E88AC06EA816A042FE0020228ADC0 + 4955DD0F5C4B46EE73FFC85EACBF8E311A9226CE49654C7AF1039C853E139197 + 811D225232D9EDD479256EBC135CB84C8340D4A6B5C7E2CA5D4BFA93A9247018 + D8AEAAED7D7FFEC2BD83BB209918B98173D2748A377D8AE12EF408FC082CAF29 + 1DCFB69A292CF4E5A9213C827B962D072EF5F0ED85BB84E3C908B001F8C9BA76 + 9AEE7D6F43D206C094AC5C8A377F86E929F688703CDB61D4EE5C3A8D779EF351 + 9A9F8D00320886F15C97C902AF5BD7CE2992AB7ECBD515EE6F006E3B26FA2E1A + 59B9C4FE3E3FB041C1CAD718F7C4D3A60807B34DA3F6ABB5955A37D3A369C3B4 + 699A27158C61DF79590E5935AB8096EEA8DC0CC4EA043995E59B7D2BD6F61BC9 + 603746DEC20680975196EF585CAA8BA68D57001DC470FE7DB35F3634DE906822 + 39427399A27B57966B45618E03F84E90ECFC659B013030CC1C60474DE9785E98 + 5BC4E82886F3A2714ECE7586D872A85D62766A5464063B97942222E5886CCA9E + 3E1F47A1174344EA45A4645BCD1486759E11ABAB0AF4BD15659CEF0CB1F5503B + 315B47E80B7D79544F752BB0114324A7AA1603A89FEC76EA425F9E668A65345F + 33BB5077AF28E36C6788579ADA2496480D6980AEAE2A00980D52E12AAEC000AA + E795B83124732C9978C39C22DE5F51C6995B21B636B549CCD621ADDA9B373818 + 549BB91E1C8878BD135C436D367785397D3324A4E352CDCC815913C771EA6648 + B635B5E9E76B2AC976080FBDC40BE0005C2ED3201D457357443E3E7BFBB16731 + 0A7AAE33CC55BF25F34B7275D04B50750D6CA0FAE041D42E4AB7B8E9A9296C5C + 503C740F5435230FC76D5E3A7883966E8B4FEA2B985F92AB2222016BE8997800 + 8A01B4B6F658FFA76242719BF58D03E61FD597B3B8327F48BBFED0AB15050338 + 79D96F49AF653F7E4607118E27D9D07883CB772D3E5A55CED24ACF08FD444710 + C052D50B76D08FA1AA07FAED54F2C0A59E314733CD23FD29D637FECD65BFC5C7 + F5E52CA9CC1F31DAA1B84D534B2F0CBCB0E1D83F17318016E0F03717FCF82389 + C78EE9CEE39D72C56FB1775539CB660C543E7CDD67E7EE108825538AEE492562 + 44AF9FC74846EEA3B03D1CB7236FFCDC41DC4E8D19CF9BB553F9E2F90A96CFF0 + 3CA29DE808CA0FCD7E41F56BE062E48FA368BC0FD30EF590FBE4B3011169EF0A + F737B474476571453E4EF3D12371BB4CCA3CD919CD5F3FDC4E7F4A2F00EB527D + C144CFBEB7D0441C33E1EFC059E4C335A5A205E4CECD40BCEE58DB037366518E + 7827648D19978848389E940FCFDC965D27FE9541F37AD554B067FF0E12B76F0C + 440880E964D2BADDE454D522F00CF0AD88942F98EAD6FAAA02AABD79E95FA606 + A2B6B4F6589CEC08D2D4D24B20964C0DC6B25D3565F536BE4BE4F72343DD3DCC + C174E0A97B95F18B5E00241B61B3201B81AA8C072258288715F6805E4CF505B9 + 777017D16BA7462D1B0557E95CF2EBB691336D2E18A6886A2522D58017C18512 + 005A81DF148DA4123122CD4709FEFA25292B94A18E31E028F49153B508D7E40A + 4C77FE237AA2B78B78E715A2D7CFA1F1BEB16CF80F8BB956EF104DEA62000000 + 0049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000600494441545885CD975D4C5B + E71DC67FEF391C63F391810D8E633A02061292C06818C9CDB22615CBD4128842 + AA6DD976D18B45D332455BA5691193566D4D566D2295AA456AD68B4855AAADD5 + 529A6440BB7E271155D229AC9450EA96180261603E6DC7101FC3B1FDEEC24043 + 83B1C96EF6DCF9BCCF39BFC7EFE7FF15A42835DB86D9558DA9A09C346B01424D + 5B6A93B12811BF17C37B13BDBF9368603CD5CF2292192CE5DF62DDAE43985DD5 + 0542511B81DD4005E044908124048C029F0257405E080FDE18095E6B2174E33D + 90F2C10268EB8BB13536612EAADA0E3C8DA061735E86B26BE33AB6D82D6CC836 + 61D11474238677661EF784CE874341FAA6F49894B20D3831E7BDD9357DFE4FCC + 0FF7AE2D4066F53E6C8DC7CC8A96DEAC0871A4618B5539BCC3C1567B46B20EE3 + B3891067AE8FD1E6F6C56252FE25168B1E0BFCF37438D8F1B7D402ACFBF68FC8 + ADFB855308DA5D5673D5C9BA621EDE909514FC557DE29DE5D76FDE62C017EE96 + 92FA60C72BA3FE374FDDE753EFFD9159BD0FDB81634E21E8D8E3CA293FFBBD4D + 14E698D70C0770649B78A2220FF7A4EE180A840FA61756B6C8A8313337D8BD72 + 80B4F5C5D89F3C6956D4B4F7F7B872CA5F3C508A59531E08BE2893AA50B7D9CA + A7E3A19CA140B836DD557D367CAB2B12F58F2D799608798D4DA85A7A7389D552 + 75AAC185A6265D2000DC0947566DD754C1A9061725564B95A2A8CDB6C62650BE + 5CC20AC4979AB9A86ABB22C491E6BA22324D6AC20FDE2BBF1EA1F64C0FED9FFB + 56F5659A549AEB8A50843862CADFB83DAB66DF529B0A603B700CCD5AF0C2FEAD + B62D4F56AF4F090E60D1146C191ABF796B1097D54C599E25A1D7916D62D01F16 + 5F4CEAF634EB43E7663E7A1D0045C9CAC5ECAA760AC4FEC33B1C29C317F54445 + 1ECFEC2DE4576FDCE2ED3EFFAADEC33B1C0821F66BF622A7E6288907B094D420 + 14B5B12CDFACA4B2CE57D2F72BF3F95D6D214FBD31C0BB9EC421B6DA3328CB33 + 2B4288464BD9CE7800534139C09E5D1BBFF640F0451DAACAE7B78F7E9D5FB60D + F0417F20A16F81B367818B926675026CDB6A4F3C7EA9EAC70FDB69DAFD10475B + FBB93CB0728805CEB6B45C27006942D540E0DC906D5A6634A212BF6EAC39C463 + 9B72199B31F8F93FFA79F140298F142FEFD9058E53A469F100F1C722C3F2954D + C733ADD3F0F267A96D0609F454FB80BCF2D34AB2D3BF5CF7164D012196265BBC + 454A3D1C892DDBF04B6D16AEFEEC1BAB9FA50974F6E3095EFAF738CFD7BB96C1 + 0174230652EA4B01642C0A30321A9CDF7CAF515305F6ACE5C3928AFEDA1587BF + B0BF84DDC5F74F6CEFCC3CC008712E4AC43F0AD0EB9ED0EF33AF55AF744FF0EC + E5614E3594F06849CE8A9E054EAFE11B8D0730BC1E802B1F0E05FF27F8DF6F4C + 72E2FD61FE5CEFE23BA52BC3011638578C314F3C80DEDF09920B7D53A1987B22 + F440F0969E297EFFDE6D9EAF77F1DDB2DC843EF74488BEA9500CB8A07B3AE301 + A28171C2B77B46A4A4FDCCF5B1842F27D2F9DE299E7E7788E7EA8A796C536238 + C099EB634849BBE1F38E2C96690A40F0EA3980E3AD6E5FACDB3B9B323CA04778 + F6D230CD8F17B1AFDCBAAAB7DB3B4BABDB17038E07AF9D5B7AAE0218138358B6 + 3D32A66659F33BFF7377E7C10A1B2635793162D6147E50994F559292EDEE7C94 + 9FBCEEC1A71BA72381F197A65F3BCEE22A5838F825F3A37D64D6D45F0A84A3F5 + 9F4FEA8EC7375B5195E4FB50B2AAC9884A8EB6F6F3F1E86CB7441E9A3AF74CC4 + 181F586A5FAA3CA2C149E4FC5CC45CB6B36D303077B0773C94535B9A93524F24 + D2DDF928475BFBB934101894C8BD773A5EF5CF5E7D6D996759E93377BB07C59C + 39935E58D1321898AB7DC71370543A327064AF7D43FAC43BCBE1F39EC57FBEF7 + 6ED7DBA3BE8B2781E59BEB7DB557F8E6BF905163C6ECAA7ED91F8EE6B4F44C7F + 73D01F168539E9E4676A49C1EE89107FBC3CCC1F3E188EF942C66989FCE19D8E + 57FDBE8BCD2BDE92120E727AF1766C079B30E56F5CD3CDE88BA9500C491B7022 + 7267BC6BFAE273E8EE8E8481579F658A4A564D3DEB761D42B3171708487A3794 + 7021E21B19095E6B61F6A3F348636E5544CAC7ADB6A10C4B69CDC2EDD88950B4 + F8DB1290510CDF28C69807DDD3B9EA5DF0FF4EFF05ED495D6D1F8EC2EE000000 + 0049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000084D494441545885DD986D7054 + E515C77FE766B3BBD96C96BC1003211042121AE4C50145406CA0568B56898CDA + D6B10A55C7612A9DA1E3873A633BD569A75A5BA7B62AB46AC6D7A1A3A04311B0 + D4C66A412560834E021A420C06F242B2C96E92CDBEDEDD7BFA21E12524904D42 + BFF4FFE1CE9D3BCF79CE6F9EE79EE73CE708E39191827D5A198E8239D8720A30 + D232001040197858A11ECCEE16A2270E63B61F1B979BD373262DE7ECA5B8AFFC + 2EAEB26B11872B47A01C5800940099084E9420E0051A801A854FAC705F2474F8 + 030207DF2176F2C8A50774CE5E42D68D1BB04F2D7588C85DC03A11B916300C81 + 691EBB663A6D386C0621D3C21B34F1064D0150D530B00B784955FF11693A847F + CFE6A4412F0A68B826917DFB23A45FBEC210613DF07311C92FCE76EAEA39D95C + 53E861EE652E1C3663986D5F34CEA1D6207B8FF7B2FBA88FEE505C54F533E061 + 55ADEA3BB09D9E779F4563E1F101DAF3CBC85DFB24B6CCBC52812D2272D5D2E9 + 19FA93655359323D0391E4FF0E33A1ECFCB29B4DD5ED34F74451D5BFAAEA83B1 + 8EA680F7B58789FB5AC606E898B980BC7BFF8861775520BC9EE34A753F76FD0C + 6E9A9D3526B0F3158B5B3C7FF014CF55B7114F68A32AAB13FDDD0D1D2F3C88E9 + 6D4E0ED09E5FC694F59B311CAEB508950BA7BA539EAB28664A867DDC60E7ABA6 + B59F0D3B1AF106CD2E6055BCAFFBF3F64DF793E83D757140C33589A91B5F23D5 + 935781C85BDF2CF2A46CBEB518576ACA25833BAD667F84B5DB1A68E98D76A872 + 6DB4FD68D3A9CD0F403C3664DC10CF3977FE0AE7F4B9B345F8FBC27CB7B3F2F6 + D2FF091C40669A8D154593D87DD4EF8EC4AD95291939AF1A76573CD2503D3260 + DAECA564AD5A6F08F26E8E2B75E6EBDFFF065969A96376DC1188916E375492F8 + 59B3D26C94E5A6B1F34BDF14C0E59856F65EE8C8875841FF70C0DC1F3E8E2D63 + F27A1179E0C99B66B230DF3D66B8F6BE18AB5FFF027F382ECB0B3D4941166639 + E90E99D49E0A2E16C3F85B8A677267A8B66A28A0B3742993CAEF7288C8DBCB66 + 78DC3F2B2F1857B4BAED86B6074C79B9A6534C4B5936232329C845F96EDEACEB + 3222712B2F35B7706BB0B60A2BD47B1670D2F5F7E3C82F5D2B2277FFF6C6994C + CF748E190E404464459147BB43715EAEE9144B61D90CCFA8764E9B41C4B438D8 + 122853952D5638E08F36D5006060A4903E7705C03DC5D94E5D323D635C70E742 + 3E76FD0CFDC182C9BAA9BA5D9EF9A42D29BB3BAFC8C5101111EE4E5F70DD99EF + 867D5A19E248CB1691F25BCAB22774109F9954447E7D4321DF9B37599FF9A44D + 36ED1F1D32CF6DE7EA820C8035A9B98518EEEC81B91C057310A41C3096178EBE + 1D6380E437AB0AB96D6E8E3EFD719BFCE540FBA836CB0B3D20325F906C474119 + 00365B4E01C00243606E9EEB92019E867C62D54C4DA8F2D4BE564911D107AE9E + 72C1F10BA6A6236028CCB7E54CFF37806DF0B25992EFB1EB48B792892AC510F9 + DD8D456A59F0E4DE164931D0FBAE1A19726696E3F46BB191E61E000440C8CC72 + DA4634AAF78638D2119A28A72C9B91C18193017DFCC3164911D17557E60D1B74 + 0E43960C6661DB604838ED1758BDF7BFEAE1E98FDA261E39E7E80F1FB7727359 + 3693D38766AA330CC299736E005909454C6BC4C9EE597819B7CEC9D18942F942 + 717EBCA391403441E56DA5C3E000C2A71906CA8601C041CF5E6FD01C71628FC3 + 86C731F2F6270D173675FDF6AFA52F92A0F2F65216178C7CD6769D65E8D281F2 + 0BC30AF6003474064D0944E3130219493DE138EBB63648734F84176E2BE16289 + E02B5FE4F46B83151C487586D97D12A006E0505B7044C3F1AA371267DDB6069A + 7C119E5F533A6ADA3BD4D68FA251A06E900B237AE208C07E550DEF3DDE7BC9E0 + FA22717EB4AD8163DD61FEBCA684E533474F027B8FF78252AD683836C08561B6 + 1F2311EA0B03BB76D7FB8827261C0F04A209EE7DEB18F55D6136DF5A4279D1A4 + 516D8E7A43D47BC3026C8BB51EC38AF40F0002840E7F80AABEDC158ACB3BF5DD + 1382EB8F26B8EFAD06BEE80CB1A9A29895B346870378A9A6034583AAFA46E8F0 + BFCE7C370002FFD905C21E55FD6CD3FE7662F1918F9CD1148C25B8FFED63D475 + 8478A66216D715672665D7E48BB0E30B1F282FAA95F0F57FB6672860EC441D91 + A643000F37F74479FED3E1D555328A5B8A85F2A75B66714349565236962A8F56 + 3563262C3FF044F0F33D247ACEFA3F73E5373B9B712FAE68024A6B5AFBE75F33 + C3C354CFD84A4DA7CDE08E7993B574725AD299A7F2D30EDEA8ED1260A365463F + F26E79041DFCFF6070050162278FD077603B8A6E3013DAF8E08E469A7B2223CD + 79511963B850FEB3D1CF53FB5A50D5AD8A56F6545592F00FDDBD2109B8E7DD67 + 314F7DD5A7AAABBD41B36BEDD6068EFBC60E998CAA1AFDFC746713714BAB55F5 + BEF0B183F4EDDB326CDCD0A2371127D47080F42BBEDD6D385C557DD1C49A5D47 + FDEEB2DC340AB3C657A79C2F4B95CA4F3BF8C57BCDC4125A0DDC627A9B039DAF + 3C84C6862FC6B0AA5CC30142F51FE39AF7AD53624FDB1E895B2B777EE99BD21D + 325994EFC639813B63932FCCC65D4DBC51DB2596EA3655BDC3F47E1DE8786103 + 8329777440002BD44BB0EE7D1CC58BFC291939AF02AEDA8EE0E2376BBB8C8869 + 5194EDC46D4FBEE350EF0DF1FBBD2DFCB2EA04CDFE881FD8A8E823E1C68366E7 + 2B0F5D100E466B60DA52C95CB58149D7DC81A4D8E6038F22B226459025D33358 + 5EE861FE94748AB21C9CDFC06CF285A9690DB2F7EB5E8E7AC3A2AA41E045E009 + CB8C7AFD559504F66D01EBE2676E5211979A378BCCEFACC7757939225202DC03 + 540C14385C70CF55350AEC07B6016F6A22EEEBFF7C0F2345EB84004FCB965B88 + 7BD1CDB8E696937A592182E400F338DBA34E43E907BA18E851D7291A8EB53510 + AAFB80FE9ADD24FABC63713936C07365B8B32FDCE507ACE0D92EFFB907EFFF9D + FE0B551D9782FD0EB5BD0000000049454E44AE426082} + end> + end + item + Name = 'folder-open-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000013E49444154388DA593BF4BC3 + 7010C5DF856F8DA03643A0A42E8AA60E85E2EEE6AF399B4B0711FC0774101CDC + F51F707472702CCE4A511004374137919868B162DB484B6B9AE41C5AA512024D + FA961B8EF7B9F786A3D5B909140B0A000044BD09063360D65D1CDE7CC2F51951 + 12C58282B5F9C90B225A195C30B3C9CC1BBA3A76B77D5E8984D089318D757DCA + CF1E3D80FE12009DC7326AA73B5FDCFD369E6AEEF573A31B329B0D17A21F9B88 + E8DF89F1FC32D4ADE374FD6CBFACD307E9AA1C02DCBF772411590E809C5B8276 + 700500A1FC6F7B79020069510B9387D5AC9202BDEC2EBC1251360980992B0280 + 95360C4D6432B1CC5EB50AA754B2240076D06CC6BEDEF7D812002B68B5E2037A + 9E7E821101D64815386105FF3741CB0D6C3F6905864D979B3322A7CAEEE01F0C + 236686D3F153E2D66E7B6D8FA52400CBE9E207985B94C3A07145A70000000049 + 454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000001D149444154388DAD94BF6B13 + 6118C73F777D93F8A32686A20E5A0967113288546CE32628F57F7032200E2205 + 95BA3828B8B90ADDA445C5C15DA782288842161314C44291E60E3A18C379B9E4 + 7AE9E57D1C9228D11A4BCEEFFCBC1F3E5F9E87D7389256CC1726502680C16004 + 11A86C043CF9E0B19318F7E70E71F144E60C7017481946172A220091883C1791 + 074BEF5DEEBDAEFD13A8BA66DC4959331752538541BFF626CDB74FCFEB76605D + 3E95BDAE4C83476597B023DBC2C24850BD9ABB525305F6CD5DFB6328953F4B7D + F9EABCDEF4D3C5E9ECE3E27456FA2D7E8BFBCE6E5514C05F06BA40EB3413571E + E23EBB7D29FAFAA538A4ED2BE09C1A32F033C9A3273978EB05C0B65D1B2B8B34 + 5616013073FB13FD05C4CE81BD63A899C3BB17805CB8561A1914AE954024772C + 9B5C30AA378F7F1C4BA7F3E6F8782C3BEDFB743CEF9302ECA465E5F7CCCEC602 + B64A258272D9360147FB7E2C58DF10704CC0D6CD667C6097D133FC7FC05F8671 + 4E4744060DD1DA9020181D1804A0B521609B226223489CDABDB762088ED9117C + 41BEC7D9B4F67D44C405F1D54623623293B0C3D5D54CA75E1F0918D56A008E00 + CAF1B698CC245EB6D7D7BF6D55AB23017B0BAD385E847A536D01DC80E1DFD84E + A09F6B213F00F68AE26CD9B754740000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000025B494441544889AD96BB6B14 + 5118C57FDFCD8D1217A2B28A21014D0A13D84AA3B568611A4BFD03D218104923 + 88A4F01FC89F10088A8DCFDE2282D9C6526C2204D9F89859D4BC34C9CC24FBBA + 9FC5CE2E9BDDEC6E0C738AE1C077F8CEBDE73EE64A9F15262F9F22DDD7030022 + EC8382563FBC5F09F890DFE37F20F7AE9E66E6DA1901B90364A4DA13898D5415 + 60CD397DEE9CFBF3E8DD1AAF3F6F1FDAC0A64FF400721B78110FB8B1711DC6C8 + B48899989D38E78928AF96760E6700029001189C5D42C4A0AA2AF11454558BDF + 3ECAE6D3FBA32EDA5AEC11BD393B31B0726324457EA7D2B1F9978D2216014144 + 5144CC81C2E3235748DF9D67737E6AB8126C2E1AE1D9ADD1FE12EC8FB2892F2E + E482ACADC6A2B5423D9766DE3B94213DF544FEBE793C54F29766D4555AA26CE2 + 0A540D44A4E65A8FE5206E072EEAD9E997D2D8A455A7E41F66EAB331BD46A069 + 4193823560272F9D6CDC396D233A8877A889AA727D3885FC7830FA55442EB48B + A51D3F8C4E55BF5BC037A9D4F9636363487C0C14BAF26EBAE2F2B25682C0B780 + 87B5F48D8F27BA10C55C4E00CF02BE8B2250458C492622E7D44511806F54F128 + 97450B85A65BEEE8D04241289745C13322F8A8123B26827A22E01B504F55D505 + 011A03E8CA3BD56ABD403D0B921750178692D436756188803A95BC51745D61D7 + 8561721105010ABBA0EB06A504AC261A5175B0BF8152ED7EF65C18223180AEBC + 532D36F001CCCF9D32809F5C448A0B02000FC0AE866506FB7BFDCAD6161B7373 + 3555E39968C7BBD5FCED82AB1A006F81A8C3DFA98577D301D9D5A88C5DC88518 + 912C906D79B21C15F1ADFDE9D71EFF00E6861FF7AFF6F0000000000049454E44 + AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000023E494441545885ED973F6813 + 511CC7BFEF92680A11D26AA146A855F10F5DEAE0D4C5491C44EC6A1D5C1D5582 + C54570A843C1D12E858C19AD82088AA283632745290EFE8949EE12A1B97AEF2E + 77BDF7DECF21B92642E29F9ABC43F03BBD8307DFCFFBDDF7FD7E77C07FC52C16 + 2D0E8DA6909FDD8791240318EBBD9B0892088FDF73ACAE3B8305B8776E3FCE1F + DFB30820CF184BF5F6A710C013105D79B0FEAD7AF3591D6E48030141E1420EA5 + EBC7829037643F09DF93F6D365F9253F5D2B5D3B7AF6C5E58338B177D75FF96E + 57A0307700678E64546EE9DD2F8F147C5843A3982769D79642A5EEAC557DFE27 + 95F86C6FE1F6CBAF0080E44EA8771F3E85F1ABF7D9E6C3C505F6F6F9C2EC64A2 + 4F687AEB75CD37A2F58E0000209119C3D8A5BBD1E36F1FBF7A63FA0758A3DF46 + 5D4ADE3A3D8EA96C0A2727D2DA4CA7B22914E672B09B12ECD1FC64626662C407 + 43421B010010A4C5B7D249DB979240D6E8C5F99C91C968F1569CA3512C5AB6AF + A46172010015E5795ACC01A0ED55311D01A31E01B8AE3E809657A5E60A441528 + C70050361D01C3744220A60A984E884E066200B0B88817C0E40246A3A9104A15 + 4306A85C7745AB159B8EA828CF03D18066FB4F444A41712E03411F379AAA0DC0 + 4593846850100C1D40791E4829EB931D4AA03D8CEA1AAF22755DC16D009D41EC + 0E6007C0D108E0757A4007406B05DA73A0BB02B528031A0652D486AD5E19208D + 19681FBAF54D68710122AA84E532DB5859193A0475BD82240028025E95BC37D9 + 74C2E8FB573430774228099B811AAECF3FA3EF3CC28C71A059037E0000000049 + 454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000032F494441545885ED98CD6B14 + 671CC73FCFEC68741BA35153488997462C48298A8AE65082C55BCE39546FA254 + 3C285EEC3FD08BD5430B52851CF4248820480F3DF846423189288A0769C0E0CB + EEB8CB6EB266B3B3B3D979FBF530B3938DB1D6BC3983F8BD0C0FC3039FF9FEBE + CFEF99E781CFFAAC78A59A0787BE5BCF4FBBDA49690AA5E6BD6E9220123C1FE5 + 6AFC323441DEF45616B07D8DC6C363DDE89A3A071C574AAD79DF4411A9033711 + 3951AA792F4EFE9567F0A5B572805D6D3AF78E7CFDAD52EAC9861FCF4AAAADE3 + BD13C5B630872E537F363A057258841B7F8C9638373C8927CB07A8BF35DE0490 + DED9F741935BBEF99ECAED8B1BCC5B17AEE379BF1FDFBBF1E73D5D6B9DDF4626 + 7931E52C1AAA58F5A8875F39C7C1E1A3DDBDC0DDAF7E7DBA200FEACF467873E5 + 345EA5F80038034C2AF55FF9FD5F3DEEBFFAAA3C92AD01F31D5C945AB6EEA3E3 + D475A6FF3CB37BE6E9DD6B625B8BA603F603838DC1B20002A4D66DA6FDE0D9C6 + 7051297C7D7AFBBC0FD39602F531A477A453B4E88ACED65571B344FAF20B9DAE + 361DD707FD7C5F273D5BD2BB80566007407DFC7E9C7C3BCEF775029899B2F350 + 5DEDEFA2674BFA9652EA8738A9DE9688DCC994ED037AA9E60118ABB76D93D6DE + DEB8B900300707A98F8D19A59A8F96ABB80059BF5A8D9B2B52C892CD9B2E5AD1 + 72018C04021A85AA1B399848C05CC545CB9B4189711C25B61D2F1920B60D8EA3 + 689438537610110322F258D5601011235376A20C161071120328E20085A2E5A2 + D91E946A9E2F90F3ADE5FFE15C30A065219003FCBCE9067B712387897110B2D3 + 751FCB9100B0584DCE4AF6CD600587D10B0093D46ABCF214C058C8140226A9C4 + C13AC88E978296A70164A71D4880832232DBA4CD26078B550F0443666694782B + 73BEFD2040DB06D70D9A74E51D1984C8E258D454C1B90EE64C17410C44FC38CB + 1C36E9191199C804B10B002BB68FE5882D301137A0C06B086347D3A1A990805E + 2861937E53F3B0C3837B049884DD24CC7F943F6802CC948356237167108C4275 + B6934407F7D041C37EFE5C9506063E3A5C93B2F9260723C0703FBE24227F2FE1 + 5E654992E0D2F19F5C65F6E22922E948A7E8DEB83A06ACF91A2FD914ADF8368C + 4F4BFF025F65E86C8E99F95B0000000049454E44AE426082} + end> + end> + Left = 272 + Top = 48 + end + object ThemedToolbarVirtualImageList: TVirtualImageList + AutoFill = True + Images = < + item + CollectionIndex = 0 + CollectionName = 'document-new' + Name = 'document-new' + end + item + CollectionIndex = 1 + CollectionName = 'folder-open-filled-arrow-down-right' + Name = 'folder-open-filled-arrow-down-right' + end + item + CollectionIndex = 2 + CollectionName = 'save-filled' + Name = 'save-filled' + end + item + CollectionIndex = 3 + CollectionName = 'build' + Name = 'build' + end + item + CollectionIndex = 4 + CollectionName = 'build-cancel-2' + Name = 'build-cancel-2' + end + item + CollectionIndex = 5 + CollectionName = 'debug-start-filled' + Name = 'debug-start-filled' + end + item + CollectionIndex = 6 + CollectionName = 'debug-break-all-filled' + Name = 'debug-break-all-filled' + end + item + CollectionIndex = 7 + CollectionName = 'install' + Name = 'install' + end + item + CollectionIndex = 8 + CollectionName = 'uninstall' + Name = 'uninstall' + end + item + CollectionIndex = 9 + CollectionName = 'button-help' + Name = 'button-help' + end + item + CollectionIndex = 10 + CollectionName = 'debug-stop-filled' + Name = 'debug-stop-filled' + end + item + CollectionIndex = 11 + CollectionName = 'save-as-filled' + Name = 'save-as-filled' + end + item + CollectionIndex = 12 + CollectionName = 'save-all-filled' + Name = 'save-all-filled' + end + item + CollectionIndex = 13 + CollectionName = 'printer' + Name = 'printer' + end + item + CollectionIndex = 14 + CollectionName = 'command-undo-1' + Name = 'command-undo-1' + end + item + CollectionIndex = 15 + CollectionName = 'command-redo-1' + Name = 'command-redo-1' + end + item + CollectionIndex = 16 + CollectionName = 'clipboard-cut' + Name = 'clipboard-cut' + end + item + CollectionIndex = 17 + CollectionName = 'clipboard-copy' + Name = 'clipboard-copy' + end + item + CollectionIndex = 18 + CollectionName = 'clipboard-paste' + Name = 'clipboard-paste' + end + item + CollectionIndex = 19 + CollectionName = 'select-all' + Name = 'select-all' + end + item + CollectionIndex = 20 + CollectionName = 'find' + Name = 'find' + end + item + CollectionIndex = 21 + CollectionName = 'replace' + Name = 'replace' + end + item + CollectionIndex = 22 + CollectionName = 'control-edit' + Name = 'control-edit' + end + item + CollectionIndex = 23 + CollectionName = 'debug-step-into' + Name = 'debug-step-into' + end + item + CollectionIndex = 24 + CollectionName = 'debug-step-over' + Name = 'debug-step-over' + end + item + CollectionIndex = 25 + CollectionName = 'debug-step-out' + Name = 'debug-step-out' + end + item + CollectionIndex = 26 + CollectionName = 'debug-breakpoint-filled' + Name = 'debug-breakpoint-filled' + end + item + CollectionIndex = 27 + CollectionName = 'variables' + Name = 'variables' + end + item + CollectionIndex = 28 + CollectionName = 'heart-filled' + Name = 'heart-filled' + end + item + CollectionIndex = 29 + CollectionName = 'alert-filled' + Name = 'alert-filled' + end + item + CollectionIndex = 30 + CollectionName = 'home' + Name = 'home' + end + item + CollectionIndex = 31 + CollectionName = 'button-info' + Name = 'button-info' + end + item + CollectionIndex = 32 + CollectionName = 'application' + Name = 'application' + end + item + CollectionIndex = 33 + CollectionName = 'folder-open-filled-find' + Name = 'folder-open-filled-find' + end + item + CollectionIndex = 34 + CollectionName = 'gear-filled' + Name = 'gear-filled' + end + item + CollectionIndex = 35 + CollectionName = 'key-filled' + Name = 'key-filled' + end + item + CollectionIndex = 36 + CollectionName = 'letter-a-arrow-right-2' + Name = 'letter-a-arrow-right-2' + end + item + CollectionIndex = 37 + CollectionName = 'symbol-cancel' + Name = 'symbol-cancel' + end + item + CollectionIndex = 38 + CollectionName = 'comment-text-script-filled' + Name = 'comment-text-script-filled' + end + item + CollectionIndex = 39 + CollectionName = 'control-tree-script-filled' + Name = 'control-tree-script-filled' + end + item + CollectionIndex = 40 + CollectionName = 'documents-script-filled' + Name = 'documents-script-filled' + end + item + CollectionIndex = 41 + CollectionName = 'tag-script-filled' + Name = 'tag-script-filled' + end + item + CollectionIndex = 42 + CollectionName = 'control-tab-filled-arrow-left-2' + Name = 'control-tab-filled-arrow-left-2' + end + item + CollectionIndex = 43 + CollectionName = 'control-tab-filled-arrow-right-2' + Name = 'control-tab-filled-arrow-right-2' + end + item + CollectionIndex = 44 + CollectionName = 'unused\control-tab-filled-cancel-2' + Name = 'unused\control-tab-filled-cancel-2' + end + item + CollectionIndex = 45 + CollectionName = 'control-tab-filled-redo-1' + Name = 'control-tab-filled-redo-1' + end + item + CollectionIndex = 46 + CollectionName = 'unused\find-arrow-left-2' + Name = 'unused\find-arrow-left-2' + end + item + CollectionIndex = 47 + CollectionName = 'unused\find-arrow-right-2' + Name = 'unused\find-arrow-right-2' + end + item + CollectionIndex = 48 + CollectionName = 'announcement' + Name = 'announcement' + end + item + CollectionIndex = 49 + CollectionName = 'debug-start-filled-arrow-right-2' + Name = 'debug-start-filled-arrow-right-2' + end + item + CollectionIndex = 50 + CollectionName = 'zoom-in' + Name = 'zoom-in' + end + item + CollectionIndex = 51 + CollectionName = 'zoom-out' + Name = 'zoom-out' + end + item + CollectionIndex = 52 + CollectionName = 'unused\debug-breakpoint-filled-eraser' + Name = 'unused\debug-breakpoint-filled-eraser' + end + item + CollectionIndex = 53 + CollectionName = 'debug-breakpoints-filled-eraser' + Name = 'debug-breakpoints-filled-eraser' + end + item + CollectionIndex = 54 + CollectionName = 'button-arrow-left' + Name = 'button-arrow-left' + end + item + CollectionIndex = 55 + CollectionName = 'button-arrow-right' + Name = 'button-arrow-right' + end + item + CollectionIndex = 56 + CollectionName = 'folder-open-filled' + Name = 'folder-open-filled' + end> + ImageCollection = LightToolBarImageCollection + Left = 272 + Top = 100 + end + object LightToolbarVirtualImageList: TVirtualImageList + AutoFill = True + Images = < + item + CollectionIndex = 0 + CollectionName = 'document-new' + Name = 'document-new' + end + item + CollectionIndex = 1 + CollectionName = 'folder-open-filled-arrow-down-right' + Name = 'folder-open-filled-arrow-down-right' + end + item + CollectionIndex = 2 + CollectionName = 'save-filled' + Name = 'save-filled' + end + item + CollectionIndex = 3 + CollectionName = 'build' + Name = 'build' + end + item + CollectionIndex = 4 + CollectionName = 'build-cancel-2' + Name = 'build-cancel-2' + end + item + CollectionIndex = 5 + CollectionName = 'debug-start-filled' + Name = 'debug-start-filled' + end + item + CollectionIndex = 6 + CollectionName = 'debug-break-all-filled' + Name = 'debug-break-all-filled' + end + item + CollectionIndex = 7 + CollectionName = 'install' + Name = 'install' + end + item + CollectionIndex = 8 + CollectionName = 'uninstall' + Name = 'uninstall' + end + item + CollectionIndex = 9 + CollectionName = 'button-help' + Name = 'button-help' + end + item + CollectionIndex = 10 + CollectionName = 'debug-stop-filled' + Name = 'debug-stop-filled' + end + item + CollectionIndex = 11 + CollectionName = 'save-as-filled' + Name = 'save-as-filled' + end + item + CollectionIndex = 12 + CollectionName = 'save-all-filled' + Name = 'save-all-filled' + end + item + CollectionIndex = 13 + CollectionName = 'printer' + Name = 'printer' + end + item + CollectionIndex = 14 + CollectionName = 'command-undo-1' + Name = 'command-undo-1' + end + item + CollectionIndex = 15 + CollectionName = 'command-redo-1' + Name = 'command-redo-1' + end + item + CollectionIndex = 16 + CollectionName = 'clipboard-cut' + Name = 'clipboard-cut' + end + item + CollectionIndex = 17 + CollectionName = 'clipboard-copy' + Name = 'clipboard-copy' + end + item + CollectionIndex = 18 + CollectionName = 'clipboard-paste' + Name = 'clipboard-paste' + end + item + CollectionIndex = 19 + CollectionName = 'select-all' + Name = 'select-all' + end + item + CollectionIndex = 20 + CollectionName = 'find' + Name = 'find' + end + item + CollectionIndex = 21 + CollectionName = 'replace' + Name = 'replace' + end + item + CollectionIndex = 22 + CollectionName = 'control-edit' + Name = 'control-edit' + end + item + CollectionIndex = 23 + CollectionName = 'debug-step-into' + Name = 'debug-step-into' + end + item + CollectionIndex = 24 + CollectionName = 'debug-step-over' + Name = 'debug-step-over' + end + item + CollectionIndex = 25 + CollectionName = 'debug-step-out' + Name = 'debug-step-out' + end + item + CollectionIndex = 26 + CollectionName = 'debug-breakpoint-filled' + Name = 'debug-breakpoint-filled' + end + item + CollectionIndex = 27 + CollectionName = 'variables' + Name = 'variables' + end + item + CollectionIndex = 28 + CollectionName = 'heart-filled' + Name = 'heart-filled' + end + item + CollectionIndex = 29 + CollectionName = 'alert-filled' + Name = 'alert-filled' + end + item + CollectionIndex = 30 + CollectionName = 'home' + Name = 'home' + end + item + CollectionIndex = 31 + CollectionName = 'button-info' + Name = 'button-info' + end + item + CollectionIndex = 32 + CollectionName = 'application' + Name = 'application' + end + item + CollectionIndex = 33 + CollectionName = 'folder-open-filled-find' + Name = 'folder-open-filled-find' + end + item + CollectionIndex = 34 + CollectionName = 'gear-filled' + Name = 'gear-filled' + end + item + CollectionIndex = 35 + CollectionName = 'key-filled' + Name = 'key-filled' + end + item + CollectionIndex = 36 + CollectionName = 'letter-a-arrow-right-2' + Name = 'letter-a-arrow-right-2' + end + item + CollectionIndex = 37 + CollectionName = 'symbol-cancel' + Name = 'symbol-cancel' + end + item + CollectionIndex = 38 + CollectionName = 'comment-text-script-filled' + Name = 'comment-text-script-filled' + end + item + CollectionIndex = 39 + CollectionName = 'control-tree-script-filled' + Name = 'control-tree-script-filled' + end + item + CollectionIndex = 40 + CollectionName = 'documents-script-filled' + Name = 'documents-script-filled' + end + item + CollectionIndex = 41 + CollectionName = 'tag-script-filled' + Name = 'tag-script-filled' + end + item + CollectionIndex = 42 + CollectionName = 'control-tab-filled-arrow-left-2' + Name = 'control-tab-filled-arrow-left-2' + end + item + CollectionIndex = 43 + CollectionName = 'control-tab-filled-arrow-right-2' + Name = 'control-tab-filled-arrow-right-2' + end + item + CollectionIndex = 44 + CollectionName = 'unused\control-tab-filled-cancel-2' + Name = 'unused\control-tab-filled-cancel-2' + end + item + CollectionIndex = 45 + CollectionName = 'control-tab-filled-redo-1' + Name = 'control-tab-filled-redo-1' + end + item + CollectionIndex = 46 + CollectionName = 'unused\find-arrow-left-2' + Name = 'unused\find-arrow-left-2' + end + item + CollectionIndex = 47 + CollectionName = 'unused\find-arrow-right-2' + Name = 'unused\find-arrow-right-2' + end + item + CollectionIndex = 48 + CollectionName = 'announcement' + Name = 'announcement' + end + item + CollectionIndex = 49 + CollectionName = 'debug-start-filled-arrow-right-2' + Name = 'debug-start-filled-arrow-right-2' + end + item + CollectionIndex = 50 + CollectionName = 'zoom-in' + Name = 'zoom-in' + end + item + CollectionIndex = 51 + CollectionName = 'zoom-out' + Name = 'zoom-out' + end + item + CollectionIndex = 52 + CollectionName = 'unused\debug-breakpoint-filled-eraser' + Name = 'unused\debug-breakpoint-filled-eraser' + end + item + CollectionIndex = 53 + CollectionName = 'debug-breakpoints-filled-eraser' + Name = 'debug-breakpoints-filled-eraser' + end + item + CollectionIndex = 54 + CollectionName = 'button-arrow-left' + Name = 'button-arrow-left' + end + item + CollectionIndex = 55 + CollectionName = 'button-arrow-right' + Name = 'button-arrow-right' + end + item + CollectionIndex = 56 + CollectionName = 'folder-open-filled' + Name = 'folder-open-filled' + end> + ImageCollection = LightToolBarImageCollection + Left = 272 + Top = 140 + end + object DarkToolBarImageCollection: TImageCollection + Images = < + item + Name = 'document-new' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000021049444154388DCD904F4893 + 7118C73FCFBB9739FFCC326D36F5D0C228618742E850736997A8EC9610E8B93A + B463E0A5C3D0D3AE5E0BCC832842A7ECCFA881A16412164D59500A210E8D92F5 + 42EE6DBEFE9E0E994828E1ADEFE9791EF87C78F88ADF27DC3C5B0740BC39487B + 73D064F3456B64768D704303A18E1B2082E3382493495CD7656724D17698BB17 + C39780758409418CA216CA79B5EC8AB578F293A93936AEAAB7A6A6A632894482 + 52A9B42DB010D8824781F8D63D8E308AF1D6E76767D63CCFFBA8AAC3B1582C3E + 303080DFEFDF16F8EE5C38C2D143FECF086F8051412A512E235C07263CCF2B2E + E757869F4DCF75B5B4B4242291C8CB6834BA944EA7D9DCDCC46A6F0E1A113182 + 64040901884848908C25628E9B4553969F2197CB31383858E579DEA3582C76A6 + AFAF0F003B9B2F5AD1700020068C8948BDAAAE025D0A93D942392B650DF4F6DE + 96603028C001557D1C8944EA00EC91B7DFE80F379E431843E9069E03DD5BFBB5 + F1E5E087851FDF871EBEEF3FA1AA0A904AA56A447E976757F97D8056ABD22322 + 1900858C1AD3E36CD8D5CE86AFC61813052AD925F6BD575FE9BCDAF9A4E95447 + 6D60799AF2A549E60A019EE6ABDE154AF6C155D77E0134EE0603D8CE4F432ED0 + 4AA8FEF4D0C2C2E295E2970A6BBE1020E7543C00A240D35E3080BD636EBB9FCE + BE76DDDA3FFBC9BDDEDE55605956A5EBBAADFF02FE8EB55FE0FF13EC2C91542A + 25FB15FC02382BCAE4583E4BE50000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000002F649444154388DEDD2D16B9B + 551CC6F1EFEFBC27EFEBDBCECDA45431D41AC3745087A94E46B560DB113AA695 + 2148BD503AB659E81F205E78E18D77B620A2CCCEE92E94818ADA502FC4EA4DC1 + C86C8A562751EA52F76EEDB6BACE2CD5744D96F71C2F6A746315B75DFBDC1ECE + 87C3791E01D8DEDA40A2C9E5C4F92A6FF4DF496BD43540CFE07BC1A4ABA1297E + 172D0F3F493DD3D3D38C8D8DB15EF4F6D60632FB9368476DAD19FB4368EA4796 + 579E68A1D155F71827F24BA97B5BACB6F18E83D6DA4FFBFAFA0E96CB65262626 + AE0255A2C9433B6A2BC8375AC93E2F227F71D0E8A90780AFC4549E2D2DCC2E86 + 61F8A588BCAEB51E1C1E1EA6B7B7F72AD0697415FDF7477F55C2691146817941 + 7663F91EE110C227585E3C5A8CBA6A53FCA14AA5B2E0FBFE0B8EE39C4AA7D333 + 854281B9B9B97FC0F1C1CD344414DA916F8133C0A8200A248DF011B01F301BC2 + 52E8FF7132FB7EF678E94470724F5B5B5B9F526A2E9D4E1FBB1C55AD51D7DC14 + 51461023C89B826800111C410604A9291113778AA6B9F45D57E9FC2253535364 + 3219051CD65AF78F8C8CD0D9D9B9560AD063B16B9F06ED0223883800D6DAC3C0 + BB0006A18A3BD3D5B3A33D765B0B00D56AD5F13CEF1DADF585542A3591CD6671 + 7E3EB71AECB87B63E03A720BC221202322F759EC1184A711260D8CBFFA53F3D9 + 0F834D0F5689A4C230DC592C160982806834AA7CDF2FE472B9C95C2E87F6B4D0 + E8AACDC0E7583E03F602CF006F61C98AF0B640D955E6E3724D76E5F3F9E7F2F9 + FCDF2524934962B118226BEBD03503581B58E125E080880AEBBB31D68E62EDEF + 8BABEED18595C8ADC0AE75D77CF9B033C72EF0D8B6C4A5EEC79F7AAD7673DCDB + 303B1E468AC7310807669BBC883247E657BCE6B3AB912F807BFF130C0D8CFF96 + A063CBEE47ACB51D2BA7A65EF6960A3D176B32F3E3B2DF7131543B8147AF0583 + B596EBE95E5A5A4A7CF0F5A5AE73676E27B4D25E3192029EBF16683D90E5E5E5 + 8160FEF40038D7635C1175C337FF07EBB9A214DFF7492693D705F8BEFFEF603C + 1E97A1A1A11B7D1C007F02ADC1176D8B93AE910000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000003DB494441544889B5944F6C54 + 6514C57FE7CD9B768657A648A745515A9C96022321443191120D2A25266EDCE8 + 4217C485C688092186689A60097141489AC84213756A8C3161A126A61BD22228 + 095AFF60C0D00EF8072348695AB0740A9D7198CEBB2E660666CAD45813CEEABB + DF7D39E79E7BEFFB04501F7288DF1902E0DC951C2777AE46920FECEE3F93DAD3 + 7DF0224D752EF7B4C6597EFFA394E3C081035CB87081B9E046420E9F3E1F63ED + D2B083B05FC6B356FEC1AA25218E6C6B27E42AE087C2F9D4A627EBF20B1A5F01 + AE9AD93B1B376EB4AD5BB7924AA5AA0A38F7DD1566EDD2B023A957685F7B5348 + 005600CD8B6A08079D95924E38B9E9F55CFEED9A999D057A24ED6F6B6B532291 + 2012895417004018F097A45725F621244908102B1187118BF167AE9DFFF51463 + 63638B2439C0CB927AE2F1B87A7B7BA9AFAFBF4520E01B3CB662210D5EE010A2 + 5E68078627A9036314D84541AAD337CE1C9B5AAA7074D94C2E37F3C1C8C8C8EA + 6834FA34B0201A8D7EB161C306060606C866B33705CEEE5A43D4738B1C0C2016 + 013B8AF935401AB119B3D38EC4BD81711AAF26C7BE1DFE63F4E0B1934FB9AEDB + DEDCDCDC21C96D6C6CFCB2A3A383FEFEFE1B228E24BFB831794979A1ED40A147 + 92802542C392E30379CFB9EE47B2A36F68F23C994C86BEBE3E06070701BA24ED + 8AC7E32412093CCF2B6C11B0BB64C7CC005600CF96B571C4CC7A8B732AE1E8B2 + 96E56C5A11C7711CD2E934E9741ACFF3BACD2C178FC7F7B6B4B4904C2671FBCF + A4F6AC6A0AB1EC8E1A046DC06160DCCC9A10E3C0DD885A33BA0C3836E6319A71 + 996E0CD3F1C4036A68686056816F027B4B776EF7C18B1CD9D65E201747305C60 + B3A45386BD0B2C167A1D19F8740D4DD6EAF884D71DBCFCE7BAC1E19EF5F97CBE + 446E5BB66C51676767C516B94B1606090515003EC108029D60C31486EE03DBCD + 4C925EF3B11F838E7D067C94CBE5769A594D614C73C3BD9E37803C662FFA5846 + 728624072BFAF5C1307FBB19DF9D9BAEFDFCDC744D9D99BD0FD4942A2F279C15 + E21E3F9F66FF579778E999C77F9889C699A96F56E4C47B16C84E09E09BF105FC + 3C15B4007CFCFBB55A6F3413EC93F44889BCB8693784245588B8006F7D33C573 + FBBB90F402E67FEF87A33F05B253BB81A323E9205F5F8A74031F9A59A244FE5F + E1CE8ADF9EB832F9D0D18B0DFC3D36B1C737189A0C01AC038680DAF990DF2260 + 664E3299EC39747A2295CDD695671E2C9157E9F9BFCFA03C90A44C26F370369B + ADE86DB573B55C91A342C4999FE1F963768B6E382EB73ED7798EB842A0C2C1CD + F7ADE2B1AB7AAE962BC6730BDC0EDCF616DDB245ADADAD159B321FC462B1EA7F + 727935B1588C582CF67FF84B1C15F13F3DB6D7BB23CD95E90000000049454E44 + AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000412494441545885ED965D4C5B + 6518C7FFCF694FE968F96A81968F51BA75D99C0C66D22CC248E6A66C8848888E + 1B8386CC8971863B29267A4964B61B5E10314A1C24C60B2EB8590612343381C2 + 1233A3C31075A163E3C38C5281420B5D4F7B1E2F80CA571946B6ABFEAF4EDEE7 + CDFFF9BDCF73DEE71C208A9A2BB3E06ECCFFF29B6A53B42D7B2261EDC190A044 + AA461109A46995007000A0C89A2E5E0183560981B06752AE251F6E78663F188B + 8E9BD3F3577E7443AB520004A3B8CAF4FEC9547C7CCE982208A4FD21E58D8979 + 246E6BE876BBD1D4D4846030B87B80B0CC00F32291F0B5ED4563FDC1D4B87B3A + 8D520443979120E2F3F3FB515590FC2C889A3C52DC5B19878E973E976DEADE6C + C6CC7E00E5999999FD757575BB828814F383D3E9B09D311C04D175306A417C17 + A0DF993995882A015CF587E86CF31F06DF8325F52D599673369BD9ED760A0683 + 3E5114CB9D4EE7C06E20224D1FBAEFC7A134F5DC6183FA3722DC00280CC22902 + 89003E0370DEE9D6FCDAEFD69632230C600C801640F29A47494909B5B5B58905 + 05055566B379302F2F6FBCAFAF0FE170383A40736516AAAD7AD49CD0C1A453ED + D3C72B96894841441F114824A21700343373AF9242A1A3C9C1E1A349819E03DA + 60972F247CB52029CA0018D7003A3B3B797C7C5C959F9F5F65369B9D8F8310AA + ADFA6BE78E24DE2E346B670FA7EFF30B82304944B60D7D22B2098230694A80DF + AA5F9E3D95EEBFFD6AD6C2B55732BD0100BD9B4D5D2E17DADBDB359224DD282E + 2E3ED9D2D202954AB53DC0F77F2E5CB833B5641DF33CD2CDF8258D2CCBD9CC7C + 79FD2666BE2CCB72F66C8035A30B2ADD9D39B575C0ADB970733A410DA0743B63 + 97CB858E8E0EAD2449DD3B416CB8D18D6519A82D4C2D02510F805622FA7015E6 + 12C065DD139AA1AEA9D4D7019C01A0037002406452D9ED76AAAFAF978928E26B + B158505353E31345B1CCE9740E6D7E312383E84DAB0EEF14A59941D406E67266 + 6E5D3D7D2B98CB016A2B3604CC06B5E404F03280AAF5C9A3697474747D250A1B + 1B1B37C495C0CA84FBB422338900071815FDF77C2E538A4A93AB57635112E606 + A6E3278B0DCB15492AD9516BF1BCDD34627C2FC4B4650E0080C3E110B65B0790 + C8CC3DB9B9B9295B004405414194C8CC17BFFD7976DE767D0A3DEF5AFC2660C9 + 1314FD5D53BAD706FF0E0DD65A3C17F571A14405F14C88B7CE639BCDC63B55C3 + 6EB727AEEBCEBF0033BE104ABE189D08CB8C91870100C0F4A204303FF0870400 + 74FA6140747C3262BCA420763F92E9EA4E89FE8B9400203330FCD7F286C0B224 + 03C0982F24002BC3C61462EADEEEE4FF1B60B31A1A1A70EC781ADDBFDB5BFE93 + 472600797B9AF57100393939501F29FAEECA8D5F6E79BDDEE7011C7BAA000010 + 171757E2F57A5F7A5289D714EDCA3C35C5006200318018400C200610F56B08AC + FCE53E69807F00871795EAD359DBF60000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000551494441545885ED976B6C93 + 5518809FF7EBB776A373ED06DB60306403116274F3322FE88848208068604200 + 355E20D17AFF312046A33F8C311A4A887F3019A22021DE4298F76453BC60749D + 78198EC419441C88D9C67A61C5D2F5EBF7FA636319D8B590E1E28F3DC997B479 + 4FCF79F29EEF9CF7AD90818EE72F7709F26E7B287EFB351BDB320DBFE018E982 + 13F24C04F281629011523A13F3F48715577A9955E6C6B295173FEDA42B6A611A + 82225E11B207FBCD2872E1BB711C22F0653B341DD3B48BC4E371BABBBB872738 + ABCCCDCAAB0AD60834DC7249DE9155DB7F272FDB818017C5E571F5257BC18C8B + D8BC7C32B94E63BE0A89C56B1EF83C5E36F73260DCD993AB2A40D8B2AC9675EB + D6D1D0D070DE82035B6CD98A4023C87B133DCEAA8F1F9CC6C29979005EC095E7 + 72B0764E11DBEF9A42AECB518BC8FA1309C7D781F698D3B6EDF7813D673F22B2 + 4744F699A679BFDFEF67FEFCF9E72D38B07185B9260D0F4D63A2C7792DF011E0 + 53D55D22B212D8A4AA13047210A903AE3D95941BB61C1C1B6C8D7AEA1289C4EA + 5493979797E3F3F9445593C00396656D5BBB762D8D8D8DE72C3890C1AEA8C5DD + 3B0E138D279B814744784B449E04F2115C22528AC857C022E0F6EF8339C19F42 + 39F7261289559916D9B56B9701D499A679DFF966D280BED35AEACDC293E360E7 + F74154F51D557D4E445E009E16C8059A812B5475B9AAB6B505054F5672BBCBB0 + 2F1234179802AC03ACB3170904023A48F2DE0D1B36306FDEBC731234FBEFB902 + A080BE2BE5F4D3A3E87111290110A15855BF139199C0F8D5979E0CC1C990AD04 + 7B6D0975C71D7FBDFD8777536B644C19F0F0D90B3537372322464D4DCD16D334 + D5EFF7BF712EDB6D0A528F5086928FE015246BA8C1225205549DFEAEE8290382 + D9A686263A12F595F9B1675A23637E1EEAF7814000C0A8A9A979B55F72472649 + A33D145F6859F60CD062545DB6DA1EDBB6CB6CD56A55ED1C3C5855F7AAEA15B6 + 6D4F4AAABAE3491913E935261D3B695EBE3F94F3CC37C7DD008BD365241008B0 + 7BF76E03D86A9AE6DD99DE497370F92AF566714F557ECFE3B38BA3021B05BCAA + 1A1091EB5475AF8854ABEA5CE0E5CD07DCB4440B4A932A25F45D4585C01DC0AD + E904019A9A9A008CA54B97BED69FC99DB5B5B529337946A92BF53A79E4A662FA + 0FC7CD8A2E0076F6871F55D55A8497445874FD781B55A6035FD0772D6D036ECB + 243758B2BEBEDE005E77381C77FAFDFE940767A0924C1BE764EBAA8B311D721F + 50A3CA2CE057112601A81202DD24C841902D15F9B10537169EFC6C6F97FB0990 + CDE964A64E9D9AB290777474D0D2D262545656BEDE9FC9372B2A2A520B3E5A5D + 4881DB311BB813E586CE6822B8B5E9384FCD9B10065008D7FD92475591F54145 + 7EEC4896C1E615178796FD1E75D61D8D395703D70C25E8F3F932751A26B0CD34 + CD3753050090BE291C8A2EFEA5F354EFCA6D879932360B85B08095B089FE78C2 + 33695F44A6571745F72C9F1C5E91EDB08BBC4EABE368CCD9956AD543870EB17E + FDFAF49D040315C7ECAFDDA9053F3C708223A1C4E796ADD47DDBCDDFBD366E97 + 201056D570AF6D9050190FF2D1979DB98FFFD6E3DAE275268FB59D7055027332 + 499C0B22FF4EF48060635B0F8D6D3D6704E396021A0609C792028817C80279E5 + 68CCB9E6688CAE7EB9EC0B21980A335DB0B327814250604FA8D784BE0A739A21 + DFB90BC9901DF592254BF861FF01A37BDAB2BF5B6385BE4F8EE501548F84D460 + D2661078ECE0982BDD6F1FFEF5CF48247235E01B09A9C1A41514118F883C1B89 + 4446CAE75FA4FDD3F47F605470B88C0A0E9751C1E1322A385C460587CBA8E070 + 19151C2EFF7BC14C1D35393939949797FFA71225252543C6320A96949488CF37 + E29DFE00FF0026770FC5B2318B760000000049454E44AE426082} + end> + end + item + Name = 'folder-open-filled-arrow-down-right' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000025D49444154388D9D914F4893 + 7118C73FBF77AF7BE7E6BF9ACED4B983666DA8446A7A3184209A51A7A0400F81 + D52108A14390041EA2D043D7E8961D320FE141A4D243188142925614E6212DDC + EB9F0DA7733AFF6C7BDF5F8734448DAC2F3C97073E9FE77978446AD5599C571F + D89514AD0568408802A49C063AA569B42D3EBBBBB632F0943F45B81F8DD915AB + F63A4B1FA9768DF7638DCD13776413F2FA89B82B86A5699C0AB65F5A8B4F7CD8 + 53A02A56ED76963E52EDFADA47524B975A740E25B1CEA12F3D02A88EB82B5A2E + DF6A6EADDF78B30B9E0884518146D7783F492D9DA99A26E179F7D88CE5940800 + D7781F11774563C64167ABBFD81BB05844FE76C1E8986E5111A2C01A9BC7B61C + C433DCC1544D9392BAA4630F7FC71A9B07210A46BFAFD2D039144C1A326F0BEE + BE572B0014A49C8E3BB249D83289E594901A9D6125D72700E28E6C9072DA66AE + 9134A46BE709C5854E54A033E43D7327EF730F00F6F024F6F0A474CC7F23E4F5 + A392E8BC523A5376BEBEB660A72023CDA6ABD234DA23EECAD3C0AE2F2CB98F0F + 9F307BDBECC1B68E81D955B91D4E77B8A92CBD1EB0E4A8AB094FF9B1AE85348F + 0C15D579423EBF235C743290CC703EAC325F5EBB68DEBF6193D1E69DD333D30A + 7139CB87D5A3E141BA7C47EA86824BCF5FCCC45B17CD03A4B188CF1C2C2B66F4 + 490A890B7BFD5FD3320102AA6198688AE93B2C3EF59E335ECD0241C005E4EF05 + FE165833017435301701D06DBF1A799BF5D7D8AC590001450F2E0104368DFBCE + D6064A746583E5D886FE3F0229D105C0C7EE9B166F516E5C88FD0B24924874CD + AA02BC7D3F69ACAE272CFF26801FD30BFC040A78F121EC8D98DF000000004945 + 4E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000034E49444154388D9D945D4C9B + 6514C77FCFDBA77DF9E8606DC767A53036C7D07DB031BD50990B449726DC982C + 0C97E0E2856657266646BDF0C21B679418CD4CBCD1EC4AA3895C986936B38445 + 700C6370C9303303C660E98BAC1FAC94D11668DF1E2F3A8CCCE264E7F6FF3FBF + E7FC4F721EA5AB1BA978ED7374557DAD42BD0574A2941F8823328848AFE4EC91 + 3B5FBD4B72E06B1E54AAE6543FBAB2E119A5F8AE386179BC53C3B89231B2A69B + 057F0B0B35BB6D819322F269F4E39759BAF6F37F03035FDCA845A951DFCD4B9E + DAD13E94C81A43BCAE15EB400F2274DAB727CEEBCF8EAD0B5B5ACEA051EACDE2 + 79CB533BDA47E889E3B8C3D7C5333D2CB6B384585387B165BC5F7C93832AB6ED + D953F5F5B5E72FFCF0769DD390C602BCF981919B5735D0E99DBE8C12C11D1963 + 665FB74284D2E838D1A6E79577EA32DEA921E6B61FDA9BB68D8015CF3CBDD5A7 + BF2C00FC09E8D028E57725E700F04E0F0330B3BF5B558E5DF8DBB9AA2733CAFF + D1B737C2B3566CCD5EBADA031C6D0F006020326F9BA500D8CE62DC91312A26FA + 893407D56A83EDCAEBB96C763E329772AFB7C36A9F1B0D0C26FCFB8E6C0EFD46 + F4D176A23B0FABFB8D097F0B2232BBA36461ECC543D5475796B36BF4C7B79603 + 34EC68A8784323D2BB50B3FB85785DABA362E222DEE9E135716C5D44B8398843 + 32BD07F5F7B43DB6D8ED70E8FB9E9C23BD94AD2F32BDC7B5E4EC111CFAA475A0 + E713DFE420DEA9215CC918B6CB4DC2DF42B83948CE69F6EDC95D3CDD943CF3CA + EFE3F1ED85E236D61D26507330A43C1DC7A8EB7987BBB6336863BCAF94DAB36A + 1291590799DE5DB981D35DB9F79EDA82754E41492160F3B62EAA7C7BCFE84D7F + 9CA37FD77ECF2F89B2A1B391F2962BA9CA408A32BF834CBC4626C79FCC9DA555 + 7E7CB598BB1FAE070328729503581AC06DAC789EF3C67EF5853FF8A6331BBE94 + C11531C8569AA4BB0DEC6E050563FEB3CC3C30A41753CB00334A19E5887DC224 + 75C224F5A0FE02C032809071279126995E591691E8BDB1375C2EA71BC3D00AB0 + 0C80997002C032CDCD0F05BC175744541E6885170042E6434E68BACA11917990 + 450D3013C94FE8296BA4C1DFB161E0A6523F80058206B8F5671CE04A6971D580 + FB91EA0D0325FF875EBD351B470104DB76F2FA4B6D7955FDEB94FF0F11806B93 + B7F90B52CE4E46DCEC4BF20000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000045A494441544889A5954F4C1C + 7514C73F6F669859D8C052960A84C5541A20B5DAA2B49A482AB56D48B40713A5 + 31CAC5344D6C8C4D1A2FC5A4D158A3C61AE3C1683C78C2566DB456E39FC4830D + 283DB452120B86368162D9A12EB034E5CFEE02CBCEF3B07FD856A04D7CA76FE6 + FDE6BDF7FDFCDE64446C1F65FBDFA768FB93A03C202287107681848018AA03A8 + 9E54E824955CB8D17994D8B9D3DC6D48F0E047146D7B4A443882C89B66326115 + 8F5FC68E4549590EF1602DF3816A51F853D1365487A39FBC42A2EF97BB6B50F3 + D91022D201BCBD2EDC4BD5A56F3117E674F984305BB959DCA676966C7F18D547 + 5233D189EB475BD1F8CC5D35D82C86D1B76EF40F2BD4FB3989D21085375D1510 + 005555119144A09AE196C37866C157A8B63FED7E4AF5CCE09AC507AF4E6089C8 + 213399B0AA2E9D26511A6278E7AB04877EA3B2FF8C2780DBD42E00357D5F503E + D4C544436B9B081D7B773E18DE19283F22224E661044843CDDFD53F760B705EC + 2E1EBF8CB910D3C2C538C1E1DF255AF7848052D5FF9D26FDC19C93D2F0459968 + 68B5405AAE4492271EF37B6DB6653C949D587599ACAA1E03BA2D44AAED5834CD + 0BA4AAFF8C023255BFDB10D034294544C48E4555440C45AB7B47E29CFBFAC278 + 7C21952DA892B1F0CD5BCD39371610F72CDBC95D4ABA098868B46E97A029F54F + 8D00E0594E8601F191B1594A1752B9F7560ACB34B0501D88056B772082AAEA58 + D30BB2E82F0711504F55CCDC84B160ADA8AA5AE20D34567A5CBB469DE72D73C9 + B8001055A5B5B91E0B38391F083D3E5BB99992C85FCBED55F14F5D05C0373D06 + 862993F57B0046ABCCA99EE71B973635ED6D0E65B1E423CAE83754F5454B553B + 1179D96D6ADF725FCFC784FABEFCCF610C53AE6F6D235EB60153173BB67B3F24 + 8B16BB0EFE3D5698069637565654ADDFA68E1D702D52C905B50ADA966CFFAFC3 + 2D876BCA87BA290DF78A1D8BAA6739120BD6CA64FD1EE2C10D88A6DE6DD0F3A7 + 1E4D766E199F1C3BA0F96B735B5404B70AE08ABFF9592AF6BF430AF31E553E44 + A40DB06E7100A3A62E7634E8F953CF78C72B6AB8DC2550B70216C9AC8AEED8F6 + BA9886FD8100F49F3DCEC5A57B8D73D3E5DE85B9F535D35E518B27460888999A + 1C28D7D19EEDDE8FC9663DBDA58C7F4E09D4ADC25D000A2C3FCD0FBF268A1CB6 + 002AEC18CFAD1BE9DCE5F4FCDC9B1CFCFECA9C796296200629CAB84E950EDD5F + 42F42543BD0322ACB99A008E5D8C8801AA612BFB50A0A4D0A4B370E6EC7C230C + 02E380437ADAEABCE5BA857BFE3D64B563978AAAAAA2AE0510999CA5C4EF731D + 3B8088F854B5718DF593FC822BE532751465CC0008476E02B80556911846C19D + 08DC317C76005512AA440D80487416202C62A85D509C9B2E6B7925BD56CEB103 + 6410270D80ABEE0D005744C4974E2299584DAF95739C00A02E8001E046A65108 + E7F1CBD95D4DAF95CB387041B17288545D4574D3C67D6CDAB82FBFD26AFA4E39 + 777A6E3EDB60069079D063B74FB4C29F2A5761B55CE64ABA23D1D974579F6371 + F2BDF64C61FE77643F95DE01977F01FD8551C543F4F04E0000000049454E44AE + 426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000045E494441545885C5965F6C53 + 551CC73FA7B76BCBDAADED6EE54F0673AE2B0112324C98B0C0A6C40748F4C110 + C0B990181D2FFE892F06457C455FE041487C930089E05802A2D1684234718825 + 8C900E14235BA194DE41BB96B5DDEDC6D6DD1E1FD66E2C9404BBAD7E93FB7272 + CEF97E7EDF73CE2F579097BD7527AE1DFB14C5E16A073A806621844B4A9904AE + 002773E3A35DA9735F1823E78F81CC311F1200AE5D9F50BD758F0F38ED880F34 + A9C11E2A13B7304FE84C5AEC8CAA5E12DE36744F631FD09EF19FBB9938BA775E + 2014FBE69DB8777CE41332F7FBF24077C3B26B67B08D44518C0904A01813D846 + A2B8C297B13C4C2D1D59BAA6BD62C5EAEFA56124C66F5E9E3380C9B5739F029C + AE0D747B6A427F00C86213055013F2531BE8F6005DD5AFBEAB28AE257307501C + CE76477CA0C91DF223418636BD23744FE31317B8437E1CF181265385B5DDBE69 + FBDC014074A8C11E0420403CF3CF79C22FBC85AE36C847757DFB1121A5940250 + 833D001D565FF37C00B0BE32716B7AC0111FA0EEF231C21B3A45C6E32DBAA832 + 110458EF58BC94E757D752BBB8BA64003342B8CDE3FAACC12988E38437748ABA + 4B47A57DCA7066D178068470AF7A6E31DF9E7A7F65366B0CFAFBEEE8FAE8C453 + 1B07EF26D87BE807CC489934AC76F571887EEA7A8F13DED829EA2E7D35EB621A + 563B4899D49369AEDE1CDEBDB6C1B5FFC566AFF82F955FBD1151A61280DE8CEA + DDE61CEC7B6C9263A89FBADE138437EE99B57946F5025C19D5C21CFCF9EF3559 + 43C2135E4F319D39B0797A3F33702AE16DDB563DD84761F4FAF6234FAC460209 + 6F2B4879D2A15DB3650DB9E5698D8BC99C1B1FEDD23D8D1F0ED7B734D584FC00 + AC3DFB41F16A84100FEA5BD03DBE3EAFB8DFF5EC64A4330ECE528CBD2B54CE1E + 7E1351B5B513D7AEFD2B4D3277A136D0ED7187FC142B5F02C3F52D68EB76C56D + 22D37A78C9C9076DCBDCD714C5547237921243204CA89D07B1B7BCB612E872C4 + FB9BD4E005EC8920CA7806C36A27A37A49785BD13DBEBE4532DDFE766EEF9D75 + FCF6A394C64BA59A5B2DD5B4ACFB78D08CCCB13BFB1DAF34BA6F9F8836345FA4 + E10DDDE3EB00D60B21DC52CA61E08A2077AA51F67EF3BAF1995AC75F3F49682B + D51CC05AE104D0CC000E5B056DD5F7BF5C3E72FA464F72E868802D5F47C42AC6 + 84032B632C93FD34E57EADF272F53D05E353409D8B7921816980584207C4586E + 523F542F0307EA095C447203480355C01A6013B068AEC6450122B1248066B138 + 016CC0CBF96FC194F7D24C005A340D10C953954579AF481E2085446AE5069085 + 0412C951B25943B35A4AEA2925C9667182945300005A345DB60404266C56B7F1 + 7062F2F60C402C356612E661B3B972C1012C962A40DCBF7537614C030C0EA501 + CA9242E1096AD114330085975051368088164BCF0044A22980B25CC4421B8E3C + 9A80162B00FC4F47706FFA0E9421817C179C0590EF86654DE0DED008E6698058 + 0A2989D4387D62CB86CF1714404A0910D162A919805C4EF2CBA5FE3F6B9C950A + 82A27F45F30700D94983E1F4D802BA3CA5FE056F7FDB6D946B336F0000000049 + 454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000603494441545885CD987F685B + D715C73FE7E9C77BB2644996652F756C7921891597E2C6FD91A434654DDA8CB6 + A4830EDAA6EDCC52280B2374D014C6C60A5BB3C118A3E9463BE8C858B3B5A52B + A36909EBD2422104B2386B0886A41E78AE996DF4A458B6AC9F8E2CEBC7DD1F92 + 55CB75E6C593A77EE1FDF1DEBDF7BDCF3BE7DE73CEBDC2A2340BEE070FE1DE7F + 18CDA60711791AD80BF4884893522A0E7C0AFC552975A2742D154BBCFB4BE6CE + BECD7A4A00446FA2ED7BC731B6ED74831C13E4A0233E21EEC8158C5404AD90A3 + 6077926D0990DCB89D05A76F0EC55105C7AE7DF29752ECF8112815D70950B3D0 + FEFC1F31B6ED0A001F1999684FC7D03BB8663E5B718012211ED849A4EF118A56 + E31470606EF0FD5CEC77CFAF0BA0C5FDD07771EE7ED42D22675DD3A33D9BCEBD + 8A9199FE0F7F048E64084FF832E98EBE60D1666CB57506DF2D4427C88746EA0E + A8B9F71F46448E1999684FF785E3580A3914A8D506EA9928DDE75F432BE51F13 + 9101EFA33F00CD527F40B1EB41110E760CBD53859BDCF58CCC76EF5A75B02315 + A16DE46380A3164F9BD5D1B7671D0091838ED949599C7302D27C7518B3FF00B3 + DD3B51CB341BD841B8EF9BD517F8C7CEA2950A0111B9DFB8F9EEBA035A81FBDC + 912B350F7DE3830098FD0740295A26FE5E6DCB37F998F76CACDE5BF2599C3363 + A4DB837B6D376DFE703D00B71AA9C8171A7CE38328C0BCED0901D452C8E5D253 + 11D2EDC19EEEAE36BE73E83E0AC512AFBF7791A958A60E80224EAD905BB1B175 + 7C10905521B5420E84A6EE0E2F2F7CEDFE5EA0F8E3C3FBFE198EA62814575D6F + 2BEA95B7CEF1EA5B7FC38A52F182DDE9BF5EC7D6F1F320154B2AB5E2D78ABA13 + 1489743CCD9899D9B1A5B3F9F782D0F915EF9AE08017BDCD8EA35076F1956C4B + 608FD71CBA6EEFD67F9D0704F3F627C54886B114E66BDAB3DE00C0A72933C4CF + CFFC63ABD3B02AAFCB0622374CF6F4439BD87493AB7A6F054E27376EDFB361F8 + 14B2C440F1C00E169CAD3583F5F414F32D5DE29C1EAD76CC39FD645B0202EA03 + 5B788444267F4F2293C79CC9DE301CC0DC7C6DCAD4945227169A7C73F1C0CE9A + 86ACB79339FF969ACBBA3087737A541949B3DA2FDAFB000A2ED8AEC52F39A747 + 03C05D6B22BB8EACA56C2A6669F21C8DF43DF20B676C0CBD92E63A2E9F5C7570 + 62633F89AE3B8B823AB2DF7E8598433D97C8A0D503ECD9A7EE66E01BB723CE7B + 9FC037F0334DE0A43D9B78F8ABE75F63A5B0B3125CE88E6F51D2ACDFDF6E1B7E + E9E5CE73B774FA7C17017B3D002B2A0940EBA15FE3DCB15F074E68A5FC636D23 + 1FE31F3B8B25FFC5799473FA89F63E40A2EBCEA2821F06D4F04B8739E20E18B9 + 7316CD7E73BDC85A3C5BE8EEB8372A002E9783C75F798321AD9799823100FC54 + 2B15BA9C3363E8957AB0A897EBC1AC37200A2E08A523DB4A8317064A3FF2F831 + 4F0175CD735D1B76B339F0E09015C0E7D6F94DFF68CBECC298FE8770FB1B7F8A + 05DF8E6BEDFBD2EDC1BDE9F6600F42138A4A45AD3E68531397F6955EE72E75B2 + 5F67FE4D20584F3800DDEE0130AD8B0F9452369FAD34FCF5FCAF5EEE2D4EFE76 + 84DB4E7F26779C9E914E0A4AC7AEB2B431494FE9133673699BCEFC73C0B72987 + AABA4BB7BB01425600732A098A69D1C45128667F62A8E40BB77266F05675E622 + 30015C03DCC0166037700B95EDC27AA90258B660B1A8988AA5D506BF3BA2DB3D + DD94AD724FE56A88165D5C8D595767D20021DDE66E14D31209765BB3B014301C + 4D019815F286CA6E73A195B70F9F0386A6920066C5F70DD52283522AB4DCC55F + 1A40A54802992AE06424015F12173B0C3FA0C680CF13BB5971B1CDDA2422EB12 + DAFE6B1965234D8C87679700469328A5422242A3DD5CF16268329260D91C9408 + 506A3C6039484F849700A6323932D95C5E29156D3C6039489B53C9DAE2D2AC86 + 9A462E140DBBCD25AC0CB818AC1B6741DDEE42440330AFC6D22B5A30A4DB1A67 + C18AF7944299E1A9D432C068E3B3896E73A314B328C99AD1EBCEC146BAD80328 + 13602A96A92D36CD680A14A66E77CBF6DE67D67666F13FCAD05B00CC89C82CB0 + AC1ABE3A93066118E4456FF32600640DA7036BD5929395CB95055B5B157B5C06 + CF3E55D9FBFC1FC16A54811C199FE6CF1F5D6E0CC38DE8DFCBC7759309A8C222 + 0000000049454E44AE426082} + end> + end + item + Name = 'save-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000000B749444154388DED93310E82 + 401045DF27DE024B63AB07B0586B3B6A0A1B3B4A13136F400D47B0B0E206062E + 61A9F1248C8D1288024A2C7DEDEEFCBF7F6656B7E3B9E47B0C10C008A0480B03 + 70915374D85957651AC6CA93DC24E122276F807B83BFC0630A75D230D66081E7 + 38FB905499FC3E828B5C67843CC9CBFA0B5E0400DAB6F15D7F5A2304412033EB + ED896766577FE6F7DD6B17009693C5E4329E8F1B075996593D6B1BDA875B36AB + B50F9C244D3F30ADBE32C01D156D2FBAE364A45F0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000014749444154388DED94BF4B02 + 6118C73F6FBE06C2211A82D835A89C834BA3D070E30DFD01FD014D6EF9873415 + 2D8D81434B53638BE0E4D0D8A4740969C4499D702291D7DB101E88A7DC6134F5 + 6CCF8FEF8787E77D9F473C5D3F7CB1992940CC1D09D06BF79437F2D0721A8669 + 88B3BB4B1585D4B0EAA2DBEE32194DD45C2B01BC91873B7083C2EEEB63E4F63C + C7633C1C07FE56646544FB076E6E322C58C9977F17D8B0EA222C1E1BE80E5C5A + 17AD489F7A95FDCD0C8BB56224B1DDB1951062613CAB80E2F96DA8A69FD35050 + 2A99626F6757D81D7B693CA140809BFBDB953B5DC9976958F5D0DCDA1956AB55 + 4CD35C571206547E3A9F8E255A0B548AE3D241C9D7F7F5A5A4E338F4FBFD5840 + 39F3674D9990BE611A57725B26C62F3FB74DCF16E01DF858DE1C3D5B0020A367 + 8247D6721A00E2B066717E728A4CC823014D8448C66868E1FC037C0345245E38 + BD388F800000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000001F7494441544889ED94BD6E13 + 511085BF632D91508A8D9520479B14969D8D5CC494D0E1C6294C832C52F00E3C + 02AF414B47A434EE208D9BB4A4238886289123D98808A47528904291A1B0EFB2 + 3FDE380A12349C6A66EEDCB9336766AE067B1FAF00CCCC24E9A672C119809CDD + CCCC03188FC6160D2324D9D2DA127EE0B37FD4B7C94590C8C959BDD36C130D23 + 2E3E5F9899515E2F9B1FF8786666D1306270383080EAC3AAFCC0E7EDFB7E1C68 + 1E24D169B6351E8DE33808F9814F491338478984EC6A9E2127754089C7348D0F + 40E9A659DE169E4D004C1A6558DC34E754243B3D4E3A716ED356FDA7E8DF53E4 + 1595F6F87E3BBE93302BE396D57328A4A8D36C5F7BB108598ABC69B50693F2CE + 0ECF18BC1BDCF62F92FB83FEDA14CD7D2091704A9EA5CF42AE07EEA0F5BC15C7 + 49C6CCBEEF84839707E9712EEA817B48928ECF4FECD397535CA2D3EF3986196C + AED6082B7501E97ECC1B5380E3F353F68FFA739ABCADB0522F8C51CA8DA91BB3 + DF66BADD2E8D4623E5336BBB53F793142DDC5DC8ADFB745793D4A5684C0676E7 + B3282A99D99B602B50B015CC1F895BC0C3D841EC85ADF08924461F46398A7ABD + DE5536EB249214C53647D1D7EFDF7EDEF3579E01BB1B8F369E2E2E2F72F9E312 + 49DA5CAD99B47D6D6561A58624551F54E3BD308CF25A190085EB75765FBC62C5 + 5FBE23E935B0F3078CE4F00B6CC779C66400B6F80000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000016749444154588563601860C0 + C8C0C0C0901B94C1A0AFAC4B578B1FBE7CC4D0BCA8938185818181415F5997C1 + C5D8E11F8DEDFCCF00F530030303C3E57B5799181818200E808103530EFC87B1 + 1D721C18739694FF67A0029812D3C9B87FF2FEFF8C8C8C70B361724CD4B08012 + 30EA8051078C3A60D40103EE00167C9253623A19F1C9D3D401C8F502350023AC + 224003031E05A30E187007E0CD053080DC802005EC9FBCFF1FAEC44792031818 + 1818486D1D119B85073C0A487640505010E3FFFFFFA956460C9210F8FF9FE1FF + FFFF5FF9A5F907C6012F3FBC66606060F0D1F3D1FB2A2023407F07342E6C6738 + 78F1C8412616262F5D1FDD2F82B2823835AC5BB7EE3FA1AC45B2037EFDFEC590 + D69BC770F0E291234CCC4C1E3ADE3A9F84E484A865075E80E213361636865925 + 9318ECF56DCC191818B6333232521A1F28DD316470F9DE5526DFAA304C493616 + 3686AE8C6606254905062A863406B8F3F41E43E1D40A9A994F34000031285620 + 092A8DFB0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000272494441545885ED98BF4F13 + 511CC03F6D5A4BB833FD75B451624008DA2EA681200903A296184D1C982C9B2C + 264EFC03EA208993830E2E2E8C2C261A571D205D6A40A189694A0C3F1AB529B9 + 8652A84949D17368B9B46A4B8F6B6D87FB4C772FDFEFBD4FDEF7BD77F70EDA1C + 13408FF71CC3BEC156BB5410DB8A134BAC610118F60DF2F4FE932BC0780B5C14 + 4A0355C6C2B3572F1655C112E38707878F72E99CDAD071BA835F1D0ADF33C9A6 + 98753BCF62CAC3C1FE81DA264A22169B056011A8102497CEB1FA7A55BDEFBDDC + 4BA1E727CFDFBD6C8AE0CCC43D2C5B66124B09B52D3019C0D1ED50EFCD4DE9B9 + 8118827A3104F56208EAC510D48B21A897B617B41C17E0129CDCBA146C4AE72E + C1C91ED99A313505F37B791C5907A3EEE1868AA96421BF9FAF19525330154F91 + 8AA71AEAA495B69F8386A05E0C41BD1CBB0F96533AD0FC7944D444E65B4689BE + 89D61DAF491020B2BEAC7CD8F8A8350D8091BE212EDAFA35E56816DCF991E1CB + F686D6340006BC7D60D396A36B0E4A9284D56AD5F38863D12538363666B2DBED + 8D72F9276DBF8ACD008A028AA26039A5794A369DF2117C2B4842C617F4FDFDAF + A985980196D73E21EFA6578009AFCFBBE30FFAEB9294655929140ACD174C6C7F + 656A761A399B5E4121E8B9E049FB27FC984CB52DC3E130D96CED0FCE860802AC + 2737093D9E46DE4D4781EB9E018FECBFE1C7646E6DBD2B56C5467293D0EC34F3 + 0FE73E7B1CD2B5AEFEAEF7C21DC15BC817CB284A2223F6A1E2867B025C8213D1 + 2A12980C548D1125B1BAE091E4D4EC5DE61FCCC53C8EAEAB9DAECE5079A9DD36 + 176ED17522C1124A1DEFF385A38BAA817D67CE737BF46631A805558EC49688C4 + 96FE7FC75AF90D937EA1AB9C3603B70000000049454E44AE426082} + end> + end + item + Name = 'build' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000016A49444154388DA5923F2C03 + 511CC73FEF5A8D568E33906028B66B94C4A283A984C972233159D9A423916E1D + 2516038359C792480C42BA19847767510B1A9DE42222F49EC1DFEA5D11DFE9FB + DEEFBDCFFBFDBE7910A0487C80F8C6C5727CE362393A940E3A861658F9A5FE0D + 087F5DC446A6689D980B55EF6EABEEDEE6E72B519D8E85754246A7E6EE6F79F7 + 47DBFE8096912922BDC902B01EE94D6E2B00A5689F59418BE973C0989E9E9D0E + 043C954B44875804764346A702F5DA414C9F05969452E9C7D249CD08229BCD52 + 2C16A9542A20349A862771BB92836EF7E08EA7852F8190F0AA3D7AF96C5CBF39 + 3D7F3E2E40F519C33048A5520829A597C964D4F7701EDABA298DCE03D07FB04A + B35BAE0B3097CB8970DDEE9BA277D7F41DAE01F85EF6CDA01E72D5A85C0B304D + 13D3348594520124128986DE719C5A806DDBD8B6FD9185E3383F7AF0F9899665 + 09CBB284524A0579DF11DE95CFE71580104204F9861DFC55424AE9FD07F002EF + 469B357AD7D9020000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000025E49444154388DCD933D4C53 + 5118869FEFFEB489F5F6CF7B13A806120B0B24BABA902EC6902E26240C6E06D8 + 1C8C8B89030C3AE9C860620C9D347121C689110B89607020C634E1928261A8D2 + 56688369B5947B1C9486524A61F39DCE7BEFFB3DE73BE7E4830E0ADDBE4F6F6A + 23D59BDA485D1A7BD6298ED631714EFDFF40E3F887F0E82382C3130650DF7DF3 + A4A5C0BA7997C89D490D606FFEB5B7FB6AAAE9BF1C2F883D4D63D857DE019F81 + C9FDEF597CDD7D29807A293FA6851C117801ECA3D4BDAD89BED33B54DE01C073 + 84B78032BBE3530A050AF49003300D8C02B7BCDF959613E85D5D5D1886818860 + 9A262AE772E15A228B6E7E12D1A6117C2842FFF24302E3E2D593FAAF9F1FF766 + 1E20E56D4CD3241008100E8791A5A5A5C4DCDC1CABABAB789E0780273AD5480F + E5CBD78777AE0E3DF4346317D0B583FD60E4EB87C7C16F5FDE077E6CA079F546 + 678383832493498C5028345F2A95D4210C40530704763609EC6C7231EFB27563 + 3C02D0BBFC122BBF360534BF0450AD56711C475AEEF0B882DB197A966740C0CA + AF758AB73E4A3BE859D5048CC7E3F87C3E4AA512854241F5F7F70B402E975300 + B1584C00D6D7D795E338120E87A9D56A64B3D906A36952A2D128B66D635916BA + AE63DB36B66DE3F7FBF1FBFD0DAFEB3A966561DB36D168B47D872B2B2B47AD2C + 2E2E36D600F97CBEE15DD7C575DDD38F7CA891911101C86432AA5028A84422A1 + 01A4D369CF711C1918181080D9D9594F449AA6ED44E0C2C28202A8542AD46AB5 + 862F97CB54AB558AC5A23AA9AE2DB0582C1EB572C44BBD5EA752F93B72C7BB6B + 0063B158BB0DCFAC4386643219AF43F65CFA036899D6177A35E0F70000000049 + 454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000313494441544889B5934F6C1B + 5510C67F63AFBD0DA69170ECAA2E3248095215AB82880B08E24482DE108744BD + 2021C411550A47E054CEDC01092E1C532112517AE46F9C8038853F227AA6024A + 9C40807DA4A56DD61B3BEC7070766B3B1BD541F09D667766BE6FDE37EF0903E2 + E4854B64EF3FF389881006B79ED838FFE0407DA94105FE2D8E2CA0AAFFAF8088 + 1CA9DE4924C91C2373EA0100F6B6B7086FFE99D89C3A3E82932F01D0FEF507B4 + 1D0C20904A537CF16D8E551E4B01A9BD6BBFEDFDF1DA33713AB2C8299639F1D2 + 3C4EBE9455D5D6EEF75F62DF384FE8DFE8A54B9ADEAD3C0EC89B20EF39F794DC + 132FCF931E1EE9E44510271B910F039F8AC82BEEE947708AF71D9C37F1EC1D7C + 85C853C045275FCAA6F7AD5055486770F2A51C7019918781B5C3480E0868AB49 + F0CDC728BC85EA1CF034300F64BB6C1A02DE071ED5307C56552F07DF7E46EB97 + 2B0704646E6E8ECDCD4D1A8D06BEEF777E3A19EE7AF2799A853176874B2FB4EF + 2EBCAEE8259493404AE19A889CCDEC6C3FE7DEFCFDE2D0F655828FDE21DCEDF4 + 67B359CAE532E57219595D5D7D756565456BB51A4110DCB64184D071D9CD15B9 + 71EFC439EFF4D9338AA88840184AF1CA87ABC7B7BEFBC0BDE5916EFBA01A5FE1 + 4C2643B55A657272521CD7752F846148B3D9EC7D41AAA4DA0143D73718BABE81 + 13FCA55B0F9D030D39F5F5BB9ABFFAF90430D1DBD2A168B55AA4D369C9E57238 + D28102C8FE08AAAAFD71E1A7E59868E4E72F404492EAA238AA4D7C688761E4C7 + 9A1EF529275ED36E8E7E3E19B02E82A31D00502814A856AB0062AD656969299C + 9E9E4E150A05006AB51A804E4D4D0980B556BA6A0460797919CFF36E0B74EFC0 + F77DEAF53AAA8AEFFB8888ACAFAF63AD25CA03D4EB7500767676E21ACFF31091 + B82616E8FEF07D1F634CBC30119146A3A1FDCE1863A258F76B7A967CA845DDDB + 9F99998909171616C24AA522E3E3E302608C51638CCECECEC63B5C5C5CECE94F + B4A8FB9A453668E70189B5568C318808D6DA48A87FD1835FD3C886E8E8D65A3C + CF8B6D101131C624DA32904583C477CAC5168D8D8DDD7192A36274741400595B + 5BFBFBBF24EEC73FAA829AD70FCA68D30000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000282494441545885ED954F6892 + 611CC7BFCFF3BEFE1DE674A1C4A87450044D8240DCC190825A302A50A8E1ADED + E261A76097B173909D82EC1263D031508A3AE4824E42652D9A30E93204D78A86 + 2375F96AEFBFA743CE24A68E77961EF63DBD3CFC7EDFDFE7F9FD9EE7790934CA + 36390FDE711C6AA588AD8559AD36E0B5261A4E7A8F185C9E0DB9F86D18C057AD + 3E546B62B7740070007000D0FE1DE0F5189ABA03DE394285374FD4ED978B1D0D + CD63D760B93845D5D2A65A78780BACBADD36BE6D074CA7FD18F05DF51B5CA36F + 6D93F3872DE3D31D8B0F4DDFB51B5CA3AF4D672E9C1FF04E74046E0BA0940B60 + AAF201C0368025DBF539BBE5D2EE10F5E23642B92500350069A5B4B93F003197 + C1D6C2ACC0987205043F0024076FCC0DFE0D512F6E25944BD68B4F7C7F7CBB52 + 5D79D51180748CF853C04228F70200C7181B872C9AA9DEB8A1CAE23003A9508E + 4F02602A532F979FDE2B979FDDDF8B3548241281C3E1403A9D46A1506819A83B + E185303276A87CF4EC92A2332B54AADD647AD32722564FA93AC32227D538CB97 + 95F181CF2B2529D37AE756AB153E9F0FB22C231A8D82F7783C080402C2F2F2B2 + EC743A5BA396F3B07FCC43C93EE772FE1923A37CE6A7DE047DAD98211549E74E + C56A9C28AC0300DAF9000887C37C369B3503F56B482935124258DBACBA78A90A + 772A86DCB9191D001055D1B9530FC04B5523C89E260A4A2921F5584D0F112F09 + 70A762B0AEBF67EE540CBC2468B1F9EDA53951ACE0D8BB479A0BEFA8E74F71CF + 01761D4130186C9CA6783CAEEE7C874221BA9FF5C6C96B527F7620914834AE64 + 3375B7D69BD59F1D68D67ECF43AB9DEFA8FF3BF02FE6DEAC9E77A0E7008D1144 + A3D1BDFDCABA0D90CFE7B1BABAFADF3BB1B6B60600F805E3DEF7FBA1320DE900 + 00000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000432494441545885ED965F6C53 + 551CC73FE7F6DEB6DE15EF2DD2D19941670B99013230ABD107367DE9C6882889 + 4B4C7C312424F8A2E87C3762427C53F740CC0291680C8986487C3321ECA10BCE + 2C2EB20289C8026B718ED9C1DA8D35FD7F7C7034ED5CC705AE32927D939B9C93 + DFFD7DEFE7DEDFF99D7B043648F50731F6BE5D99CF7EF709E53BB37658A3D861 + E2307C7876F7767B76F70E7A76F76E142EDD0E5BC026C045F9819701B78D9EB6 + 02FE275A037C58AD013EACD6001F56AB1E50B57AA37B4727CEE02E642EC3FCD9 + 93502E597E8870E9AC8B1C00C541F65294FCB50BF602BAB6B6E37BF738C2A1BE + 01FCE00AEECACE0C1CB604295C3ABEF74FE2DE1ADE0C6C29771F1CBC79E4158A + 7F252C015A2AB1DAD88270A8DB816F80EFF5708F6BC3A17E501C56E19A8173C0 + D78A5B773BBC7E4B7096018BD313C852F132705008BA80D37AB8C7B9126415DC + D3C03904EB81D7CAD94CB6347BD35EC0DCF82833038791E5E257120E21440FF0 + ED13E13DDA5387FA114B2015978EEFBD2F716F696F0206113422D953CE2D8C26 + 3F3F60B9BC002BD7A84AC5A9710A7F8EA3B777FF2A84322D84E803B6694D5BCE + 389F692B3BD6ADDF2584D82FA5EC77B6BE9876B5ECD8288418049AA42CF7C842 + 7624F9D9017257472DC301384CD3C4300C344D435114545545D3B4652F9271B8 + F507EED61746A5A2DC168AA30F7856F1986784106D4288FD48D9AF78BC2E4551 + 0681664AC5BD8EDC9DE1F9531F52BAF2735D6F4DD3703A9D783C1E4CD3440841 + 3E9F471C3D7A94AEAEAED668346A9C3F7FBE98CBE5EEF95625D5C5C286ADA436 + 3FFFCE5CF3736F512A9C72CF4FFF9EF56EFAC87D7BE2F5ACB9E9882817B77927 + 863F7872EAD2907EEB1A4AA9704FDF868606229188160E8713274E9C983A76EC + D83FDB8CAEEB5FA8AAFA523E9F4708714F23B594C798BE8C317D9964EA86BCB9 + E3D5374BAE060950741BA745B948CB4F037866C63FAD2459F0CD6432F8FD7E9C + 4EE7C7C01158DC07AD40D593EFEA39A4A2C8E9EDFB0440C9D940CBF0009E99F1 + 07F6ACE6B1FC2759498D57CE228543265B2304868FE3495EB5C316B0091060E3 + 6F3F62DEF805D7C28C5D9680CD8705BBE1E03138CDAC7AC0BA6BB0ADAD0DC330 + 2AF368342AEF8E0DC360E7CE9D95568BC7E3C4E37159952B4CD3B49C9B48D4FF + F5D505340C039FCF57BDFF541EA2695A4D2C994CCAEA5CD3341F38D732603A9D + AE31AE56A150A831CE643235F1542AF5C0B9960163B158CD5C54ED9E7373730C + 0D0DD58D5FBC78F1BE7257D2E3DB244BD5D1D15119A7522962B158A54C814040 + 0402814A7C6C6C4C2E2E11003A3B3B2B5F309D4EFFAB3AB600D65BF400BAAED7 + C4354DAB89AF946B1B60F5C25E6C828A32994C4DBC50A83D5A55C7AABFACAD80 + 2B3545229158BA975587EFAB29966AD537C9AA07AC9438180C1289441E250B00 + 5EAFB7667E17F042281422140AFDFF44CB6BE2EE40BD7EFD3A2323237D8F1066 + 594D4E4E02F037CEF08396D4C25C2E0000000049454E44AE426082} + end> + end + item + Name = 'build-cancel-2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 61000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA864000001A049444154384F9D90CD + 4B026110C6E7752DB2A43622A193E9CDED188B069108097D4356441145C7A0B3 + 1D3AD6C9AE79F15244449740A8C432FA03B4AE2AD8C553204407B78FC3AE6F33 + DB6AC46A563F18E699619EE17D8729B27C000067778A72B1502840CCED866057 + D714F6E6927DD2FA46FF30A8A5223C9FEE62CB0C2D98C67C8CB1FCA269971D82 + 3089FA0463C59EC99C63FE11CBBDA2D0D00AC6099A7728535D787F6F6A262CF3 + F8EC574DA3E17DC6D836658DF3F345EC3782D9EC86C20531970BDA05611CF526 + E77C8FB2C0D838F51B61ED751A0A178C8AE218E6538CB50AE75B94A91EB4DBA9 + 5F974AF9C9509F473C2C0B423C69B3C5AF551546AC5698787B9BEDAE54663AD3 + E97563EE1BB22C83288AE0F3F9803DACAEC2E3D0D040249148E1171CC079C9A9 + AA41B7C6B3B76DAD470C60C9F099884422CC72E5F5428FDF7FA39B09C61CC596 + 96543373158B913FCD5F387E6326AA0B7442A110A3C0D7F0DF68F2B068340A81 + 40400B87C37AE32FD00DAC86AEE1F1782858369BD5174A9264D2F97C9E4A1DD3 + 825C2E47517B0D0ED7D555BEDDE03FD46E60D47F04E003C0B6AF9C90ACFEFB00 + 00000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA864000002D249444154384FA5945D + 48935118C79FF3EE4BB7E91A382782B224886157B5411042178936E863D7DD14 + 74951762107D1092C5CC8F6E8DAE8A88E883120BCA5518E1EA6622080B0AC5C8 + 799320D8E65EB6C9F69EFECFBBBDE2C291D50F1ECEF39CF39CFF7BCE73CE7B44 + 2618EC27A2BC9472F8E2F232DD5E59A1A19616EAF17A2D42880718BB3BDEE47F + DBE7D9079728F5FA0E157E7CD3FDED60C14B822822892EC34662E93475D4D5B1 + D8538C77C28E3B6766DEEBD93B40810D41E82A446FC22E74D4D7578815A4DCB1 + 18634A158B74A4BEFE23095180E020FAC2B000EC048B9D5E5CA4AFB91CE7EE08 + 650C358BADAFB33F8A957EC1EAB8580F61538F575769626D8DC7AA62DDB3BFEC + 9550F800503333FC47B0DD24E57D889E857FFE5443039D6B6CE4BCAAD4F80F95 + BD124A4F539319022C76147612AB3C8313BF86ED8FA2BF6FB8B5554FAC8A562C + 3B25144CBC8736A4A1766921DE8DAB2AA942DC403C80FE5BA82DAFB62A854F4F + A8B6B6965C2E1779BD5EFDDA74E56D367AE9747E7865321DCC09414E4DCB1E53 + D5785736DB9BB239277A5D765F797E55DADBDB29140A91F9FBDEBD6FB4CE4E6B + 7261E1596E6E2EC4831945A1E70E47FF67AB75F0674D9D5BCA8D11ECE4803EB3 + 0AD96C963C1E8F505EF8FD640E06C776793CBA98C186A20C246CB6EB49B911FD + 93D856F862336DE5762BD0A12B7F23C618823A76BB9DFC58311B0A2D1B706D8C + 18272F5B71E2EC73CBB131C679061582168B451F64639F3F60C40C9F24FBDC32 + C618E719F085DE24954A512C162B4724D2782892C9642900894442F7198EB7E4 + 525B5BA96A158206BCA54020C035A4C9C9490DDB123E9F4FA8AA2AA3D1A8ECEE + EE160E87432C2D2DC9D9D9597D8EC1B6822BF8BFA7A7A7F1D3E0A1CCE7697E7E + 9E572A8B784898783C4E269349E6B679342A6A68C022AB7818D8344D13994C46 + F7D7F050F056B9E598FB7F6773856EB77BB30EFF427373B3DE8A482442E17078 + 0AFE61BDE7BF20FA05EFF603679D4BB27A0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA8640000038749444154484BA5555D + 481451143E77767756C80A73234225DBA87525A23F2BC21F0291A80493282A2B + 0DECBD07C197A487DE7BA828A98888C4A895A82C021FD27E51247A51A31F52B2 + 073583DC76737667A6EFDCE6AEEBDFDAD207C77BEEB9E77CDFB9676647112E2A + DA4F4495B66D9F1A368CF89EF7EFE9F3E4241DF3F9E8527E3E6942ECC07923AC + E6F6F275E1C6CC5570898C6F1FE8D78BBBD24F0516B82184380E811658ED57C3 + 30AF8D8C50536E2EB9FE923FE6448BC4AE253DDDEFD84F071AD9763D885BE11F + 81D08D5C5D779D05393ADF8E58BBCC21DA1BD75C699333341E0BD613B03B10A8 + 6111D84E41F484CF617BD0C4EB071361B8E943F8BD5E6A0F0428D7EB7583F416 + C80FE24626CE7EC1F6C17F191A1FA7FA6F2314FB9DBE88C60FF4FAE828A14BBE + C90587DC057B6113BD89D9369D1B1EA638D685B0B4EAB4E34D413B969D4D6772 + 72089D6FC5FE216E11C1DA81FD5EF8D73C42B81EE186FE0CAF2C48858CF5258E + 3705EDE2EAD53C6826E799BBD067256EC3A3B90791E3B0AB39BAAEDD5FBB5616 + A4065A9A010DE45B40C2E4DC22933FC75862F08F422484F5048BE469F281A744 + A49769A6837F074C526E0851F9C9EDEEEA76BBE9E9C404D52C5E4C9B0CC3B3C2 + B25A5CB851D4E529F5BD79D5F3B76C6E048341B9EABA4E797979D25820D35CB4 + 28F02A2BABB7D5B2AABE9BE60674CEED9AF9F1F89543E1F0CF402CB6EDD9CAC0 + CB9BE68F26C9B0003C1E0F9594945071713189EEC38769D98103F4C5E33979BE + B9F932CE13A3C044DF6659D6EE6CD31CFF9AE92B8A1A3F1F23968506167CA52A + 2A2A447979396977F1AB3582C1AA956BD65CC1ACF17510F249C95588CDE39AF6 + F4A3AE57287275960A9CA3A0BADD009BEF216E84B5ABCE935B4FDECE384A604E + D2194D30D4ADA6BD88C97973D448B8F98F12E72E0A0B0B45414181CCEEEFEFB7 + FBFAFAECEAEA6A552D42A190C5397863382638870D398966DBDADA1CCFB98152 + C72A46F1D940010D0C0CD0D8D8188704FB6C1CE73DC7D59E7D2E55356CC99835 + 2214C8CE9D6229CEBE43603B022A663B392C286BD892316B44D2017CF88FC6EF + 3220093B3B3BADB2B2328DE38CAEAE2E995B5A5A2AF7C8112A968C592362B01F + 89441263191C1C9467BCAA31F0B9CA6153390C49E660CEB788C1C56A0C434343 + 4A20318668342A9272586056F70C29903C22C6BFF88CF9CED857100D0D0D5457 + 57D784785347478713FE7FF8FD7E6952A0B6B6963F62FFF4214B0F447F00550B + FC40B67A17750000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F4000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA86400000347494441545847ED966D + 4853611480CFBDD72DE7DCEE54120B3241A7E627E4C43FC112123F22F3A31F25 + D99744FBA3148533EA77E0824043A4D2EA4FA6D5EC032AFC1DFD114CAD36754E + 2182B4106DA1CE7DDCADF3BEBB4CCB65A217F5870F9CDDF7BC1FF79CF79CF3BE + 77309B9BDB31ABD355F5A7A7435C5818846207C3C08BE46432B70CE5F9687636 + 230EAD1BD60FF01A18E6BE56A138F12635759913C478A7560B8778FE28AA8F51 + DE3A04019701441DBF0E3BEBEE414CCD4DA2AE09A62F230392158A93B8A536BF + DF7FC6E67476968C8CC077AF3768BC80E74B716E17CAC549B7FB4ED2E0205D2C + 05DCAB991928E6F98F3132D917062311CD71F642B5FA738FC301ED8989C4F811 + 9CF704E512315E343C0CD38240174B01CD659C4C066F535200D3700AD5BB8220 + 9CF6084257B85C4E8C939D5F9E70BB5B8BD1B8DDE5224B2483233FB33E1FBC0C + 44621023F19565D9368E65A33022261CBE823B6F2DC6B4486D9CF04735EF95CB + 61203313642CDB84C66BB1261E60778DDE6A85BEB9B9C0248961C5272DB8A684 + 0462BC04D5F368BC039F5528C76EC5C7839AA3C1921CFA565AED494950A0D110 + E3CF7C8260C4A3D98051F886216ADF25978F1C54A9ACDD9826979F9E40C9E096 + 182F46DDECF3F91AA65DAEDBD5E3E3B05FA91C8896C926B0BF6DB75C3EAC57A9 + 86A476827B4ACEB94653843BEDC6B037FCF4789ACBC6C6E03DE65C2CCC7E2CCC + 499C4B9C18C2480C3D9C9A0AAC5E058C4205E0758BDA72583CE78568DC8CEDAB + 0EAFB7B9CC6E877EA7930E4E7A3C40AA7F7461A11DD55A9447399191E5747095 + 28730F8BADD0B098E70BE0F75FC39D3795DA6CF0617E5E1C0A409DC0F38F4EB4 + A15A8762A003AB4470FC105BFFC09695C57EC2EB38272242EC090DB9ACDEA5A5 + 414FF9B9E0C9D970647BF6417CFB98565425815E44068301626363A1B7B717A6 + 56283026420D9E03D5EA811B677F895DFF45A7D389AD45789E87BCBC3CF0E207 + 8F3AD0D2D2027ABD7ECE68347AE98C0DA0B1B131CC6AB52A83F9C4FB3F1C0B52 + B95122DA5BBC8A378B6D0736DD81D07F83918A8A0A7A420866B3D92736A1B2B2 + 32E8F45AFAB1F082EF256C7A0482F7407E7EBE505F5F2FEDC77E054C261363B1 + 58B8AD5B034B596F3DFC9DF7A56CD7C0A647606BA580F66C20168B85FB0D72CD + 3E07E24AEC5C0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA86400000458494441545847ED985F + 4C5B551CC77FF7DEDED2960A8C3F031E8048B23132973469C107DD144BC97459 + 42C2DB7CF1CD7F314117754B0C3ED168A23E986942986FFA6062FC836CD3C8DC + F4AD854792C1286E0B50A00418301885B5F5FB3B3DBDB40ADDDAD982CB3EC98F + 73CF9F5B3E39F777CE3DAD72A7A9A98B888A29163B7D6E7A9ACE4C4DA1BA3307 + 2D16BA74E81055EA7A1BAAA7715FC7AB376EDCF9667E3E3EE03F464594288AF2 + 36CA4FDEACAEA68F6A6A44C77624C97950FD015186D0B98F297CA6C308D3FE3A + D9FA7028CB2E17A98AF219243B63B1D8A7B168F4DD73B3B3747672520E899324 + D78AEA4F886B088F7D707091FB738556A4AAD46CB7FF8A6B3193314C445361E1 + 6F4F280A5D5E59118358EE22E4AAB6E446106DD7EFDE5DEC09857848CED02E2F + 2F53B1A611A458729FAAAAFCB86DA80FD863319ABC774FCC1CE4DC6867B9EB08 + 0FE4168E8F8CD06A348A6AEED0F8CFC096E42FA896B2241EB7D565B30DBC5251 + 41FB74FD05B4F72184DC28E45E1C1DA510E4738D106458B20492CD71C9323193 + 8A62316B5A0C659F423486769EB97921B7B929EECB358620939849485E42B59C + 2521760AD79C73AD2C773C8F720C6F33297C353747EBC83DF03D2282D933A1BC + 8298FF6E6121AF724CCA0C8AADA4A1814A4CA6E750FD19C139D78FD5FD064AFD + 5851D1EF4B91080DAEAEA29A1F0CC1845CA5D9CC72FD58247F21785BF9165129 + 377393A7B8F84A3E2585E001295765361F4395E56E462291D6A9B5B5B91F9796 + C861B35D447B95DC273596BC9D2749CD90D3F5A3C8B70B78B7DE84A07B3A1C9E + 3B1908D0D7C83BB170EC7696AC9633A942F26A3E6652F31D3ECC337714FFF802 + EAB7B0EDB6CE40EE04E4021B1B6290B14FDAED3C8625DF41A9B0A43718146332 + C55CEFA0C8E28CACED8C8A997B165B493FAE6FF1CCCD6E6C84845C381C1F2179 + 7F6282BE9C99E1E5FD3AC6F542924F411F8ACE2CB03EC5D9747F543CD6B32827 + 7841CC6E6E865EC23E37B6BE1EEFFD072CF9455CF2358C3F8FF22DD19105D1F0 + 03A6C68ACB655F713AF7078E1CA1030505B2353D1FE3488673A472BBF9E92765 + 53E6A8293BDCCE9C2A2DA597CBCAA8FE01E51274D437D2492FBF15F72805079B + A9E67CA05A567306D6070E766D6DD4D9D949C3C3C3E4F3F968015BCB7D315B69 + ADE179F27DFE9E6CC88C96961679958AAEEBE47038C8E974D204725E08B6B7B7 + 537777F799B1B1B10F7A7B7BF3FBB2DD06B7DB6DC2A4FD3934347422F9B08093 + 9566C1F681C3F4EE063CAC282D2C6508A2415EED0D123EFF3A6EED351E0B3E2C + FF6FC1F2F2726A6C6C34C26AB5E215BC45725F6D6D2D4E6A5B647AEF4EA415AC + C0574E7C8092089BCD267BE224F7D5D5A5FED42105B3BA37993DFF888D3789D7 + EBED1A1F1FEFEAE9E9111DBB89C7E3E1F8C3EFF7BB1FAD55CCC98C9C3142E6BB + 801741721FE7A0EC126C77AFFCD8B46424C8C98C0F37925B360B781124F7B160 + 32E9EE4DC7E345920D8FEE22D90D521E713018ECEAEBE3DF29771797CBC5211E + 718A202EB3FE229E03AEFAFD7EF7DFF2A0E60338368DDC0000000049454E44AE + 426082} + end> + end + item + Name = 'debug-start-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000019C49444154388D95D0CB4A42 + 411CC7F1DF6852D90D513BAE1ADBB439D10D2CE2A0A451549C5A1A2EAC4D2F10 + D1AAA07C01A1563D41940FD0A6B4631454ABA288A2C20B29490686D70A9A165E + BA68A9FFE5C0F7F39F19F9E8EC12CCB605D4D637227C7F01C63E50CDC8CDB605 + F08228F18218E81FB3FBDF5E5308DF550EC940080821A6683CB5A7D251C9BAB8 + 31B4BC758DC1A939C8E48A0A80DC38774EB07D7C658CC6536E958EEE17A0C9FF + 2179DF880DAD6D1D2B7B173E3CC69238BE0BE13991A65C4BE3AC46AD31F38218 + 348CD9FDEF7F3CED0BB8F4150EB3D003A28934D5B534CCA8D55A4BA720060C25 + FEA824F0130A219A48532E0B9979410C18C6EDFEF74C16AA29F7498C0167FE08 + CE0311F450CE64E1DBDD1A8E1E4C2F6E387A2D5649560EF88D010C00080388A2 + 4E59FE06044037E560E9D443DBA43C04E04827621EAF6B1D5ED7DADF40A93093 + 0B25D71A32C91700280608802ECA61F8FBC664CCE3DDCE6ECC87F9A9290A793D + B4CDCAA3DC46B7E42A1D1601F3130355855F0063608C1D699B95ABD58405E029 + 748BE0F5A9F1E674179E4D67C5617E3E01E986E2A2E66C8D660000000049454E + 44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000022049444154388DA5D2C16B92 + 711CC7F1CFCFE7593DE633F63CD694F090CFE33C39671D02A159117689A05AB5 + 4330061D82B9CABF6097CD75EB507FC0EA12AD3CED560441AD4B87116AD666EA + 26B4951A8FDA908D60FB76F079166A9AAE0F3CD717EFDF9787F92FDE84EA3D85 + 9FDA77BC893EC4A696C7FF8C3B7DED364E5E18BFA30E0D97864726354BDF61AC + A763F8B555DD17680200065C610CC99E83C2E333A361F7D4F30C2EDFBD8F5EAB + 7D3F200318C3A7AF3FB8B562650CD0E1EBE181A968F730E70D5C82C37D7C3C96 + 2B38A3EF3F63AD58315945B34FB6082113C7BB9C1EFFC7C0C8A42676788A3D30 + 5B283BB385324AD56D2CAD7EC36AB162B2F69A7DD22121C4F1BCEB98C79FECE4 + C64DA0B152751B4BD90DE48A15932C9A7D924598E0787EC0E9F127036DE09660 + 6D0C9A5EAC9F62481685098ED38BAF36C3FF00FFACEE144631C7BB9C83B51B1B + 30DFF6C27F59265F42265F82CB2E7341AF32A6F4F7DDE839203C393B1A9E75B8 + 7DE9AEC1BA51EDA3DAFFCC00745FA8DA249CF72A506CD20E119E12300B209558 + 5CC08BB9E9CE41D52621E855A0F64B3B04CC1321C280545C8736D2317454B807 + D9A45DBD286214BD9C9BC6BA0E196B093640F3449801432AF1B6BEA8714DA06A + 93101CD421FD690056128BEDA126F0A82CE2D6B91350ED7A111061C04ABCC5D3 + 5A82040211C1E338B24BC03322CC1845DD407585045A0058881196E3EF3A7B5A + 4B309F5BC6970FAF1F6C6D96F1EAD1BDAE8B1AF71BB7E82664061D363B000000 + 0049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000326494441544889AD925F4C5B + 6514C07FE7B2CDDABB509C5054ACB90D4B46C285EC45DACE041023C640F4D5C7 + 6936D98B92F8BC3D9098B8071D4CC5F926912DF1C91817E71898986526689871 + 5088868284B66A7ADBA5632C30EA383EDCB68C85F24F4EF225E7E67E39BF737E + E793FA173A397CB419805B3F7ECDDCE4287B1965C75E3BC18B6FBC77D4B223B9 + 50C7F125CB8E90F96B966C2AB127000340E175605AC4E8A96B6A7FA2FBC275BA + 3EFC0EAB3EBC170041DCDCA7CA191166417AEA42AF1CEAFEFC06A7CE7DFFBF40 + 0600E2223EBEFA8B8ECFA7CA55390D4C033D479E7FF9D0BB17AE73EAA32B04ED + C88E0165754DED5876B81568F966EC0F9D984F319570C4F41CF0F87D66B3C0DB + 22E2ADACA9FD2DD4F1E6B2551F26939C25EB6C6F4765754DED041B8EB5022D3F + 4CCE8988C8DDE5158DC61D89C61D4CCF7E8FDF67B61AD025228F573E7B783CDC + F9D652B021423A39B3E563C803222E203A57FC212272EF7E8EF1F9944E251DBC + 8F1DF054959B2D227401DECA9ADAF170C7F1A5E016AF6E9DA291893F75A34B8B + CB2B44E75344138EE4276A167722EF9335B5B7429DA5D56DA8A830C1C33922B2 + F888BAAA72B3D910BA40BC45758DEBD56DAAA8547EEF7E8E89B8C364C2C1EBD9 + EFF1BBEA4E22782B9F5953978A4FB30F40D535A385649BF9DFD9452EDD88F274 + C541DA6CABC20EF8CF08BC23627C72A4A9BDEFDFDC4A765FBE2B54B5D8A9AAEA + 56F9C3DF0AA0F901411404F7B813EC369EAA38286DF5160D01BF184256E15385 + F3A0192711E3E72B03BB03F8CB4D5EB22D1A027E0C61215FB80FC8A493335C1B + 789F9BC35FB1FA20B7B31D143B7ECE8FC0026EE15E546FA71331AE0D7EC0CDA1 + 4BACAE3E2836B3AD1D140ADB812A0C43EEA0F4037DA8AB62E4E259C6AE5E5C57 + 781DA0B40A2F6DB6258D816A29A840E945F22ABE5853512A365454ED33A5CD0E + D2B8A6A25FE11CAAB79D448CE10D546C0A2828AAF69945C786C802E45540DA49 + 4C3332585AC5A6804274BF1A923257453FD00BA433C9198606B656B10940DD05 + C35D438A2A324E32C6F097DB575112A080B27A5995CF44C449C7630C0F9E656C + 68672A4A02FE999B22FAD3B7BF02FC3E3AC4E8E5815DA92815FF01CF2FBACC02 + AD8AC60000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000003D7494441545885EDD45B6C53 + 7500C7F15FD7D1F57E59DB53286D6DD96827EB122D11A1931856302131633121 + E28B31918E2C4B7CC2F86262B2E025300151668C66531F8C893C10A3C050D039 + 1D2AD2B59D6BD7D1B2F5E2767A5BD7AEEDBA02FDFB30AB1B11DC588F2FFA7BFB + 27E79CEFE79C8703FCD7C75E7A68D8F604365B7621978EA390CBFCFB9A836F9C + C589C15B2F747F93E7ED3FDC03994AC77873D917B0EC390095CE748555C57E5E + DBB0B5F4D8531D6E09A5B9391D18412197660450B5FCC802009CF9C9AB0A2533 + DDEC6A4EC0DA6A3FFCF2A73EC1FE177BA0D0D4551C70C717780694CEF8CAD9AB + 3EFC301E41309116C885BC3D3221DFAE355AD8CD6DED2EA5CE588C4E7A914B27 + 99030C8E8550BC751B33D9027EB9318DC9789A2F13F26CB52261BBBAAEA9BAB9 + ED908BD2198BF4A417B97482394079A95C01D726684CC466F93201AFA556C43F + A4AE6BE22C424C0BD135405604580A714CD00844533CA980BB4BBE08E15BDBDA + DDEAFAA6F978C48FB924CD1CA0BCD9FC02862769F8E91457CCAB795C211674A8 + F40F0AADAD7697C6F8F07C3C3C8ECC0A21F705282F9D5F803318856F2A5923E6 + 71772AC5820E4A6792ECD867776B4C967C3C741D99E4347380F232F345B88251 + 8CFD96E488789CE63F2032EBBE832EAD696B2E161EBF2BA42280F2E60A45B842 + 317822098E90CBB152624127A533CAADAD76B7D664C9C6237E641253CC01CACB + 168A708762188DC4D7096B38DB2989A093D21995DB9F7C6E64D3433BE7527410 + 293AC41CE02FC84D8C8463F8351CAFE6D7AC7B542515752AD406D5237B9F75CF + 6767E7829E9FEFFC1533334208082100010B60B1592C561587CB070054331956 + 49046869D4A349472DB0403E20841CA527BD918B1FBD0AE7A5CF9803AC970A60 + 6B34C0AC551600F23E21B78F4E07BD535F7DF81A9C97CF8090D29FD75614B041 + 2A84CDAC47A346390FE03D00C7C23E07FDF5C7AF6364F0F365E18A0236CA4468 + 31EBB165A3220FE05D00DD61DFB5587F6F174687BEBCE7BD6B02686A45B0990D + 6850CBB38B61F26678CC11BFD0D705CF3F84D704D0CAC5B099F5306D90CF01E4 + 3421A5E3619F23D9DFD705CFD0B9553D6B5580071462D8CC066C5E5F9B01F036 + 21A593A1B1AB3317FB8EC073E5FCAAC2AB02E89512D8CC06D4AB646916708A00 + 27FDC303B3177ABB10700EDC577845000325C56EB3019B28690AC05B0039757D + 7820DDDFDB05BFF3BB3585EF09A853C9B0AD5E0D83523A03E00421E49D807320 + B3F8C69509DF054000004FEFD89200291D27A474DA3FFC6DB6BFEF48C5C37F0F + 2000087909203D9E1FCFE72E7D720C379CDF33122E8FB5F460D97D004AAD11A3 + 435F20E273301AFE7FE5FD0E65E9CED9ED4EA24B0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000004DD494441545885EDD6DF4F53 + 671CC7F1CF732852FA1B5A686D819E0A65682B744B8C06588CE08D3713B9F052 + 37B320B265FE07DBD2EA1697EC6A37CBB24836CD96658B89BA2D80E864320589 + 523210A5AD58E9E14729B4A595CE259CEF2EB0CC886EA0FD916CBE6F4ECE73CE + 79CE2B4F724E1EE065FFF1729E1C38F0E169D437B7C154510DC13B843F130FB2 + E15A6915F08DB64F60B23ABEE06DDB87EB9BDB2272B52EABD055C09DFB8F42A6 + 2C380BA02D47926BE16D3B46EA9BDF09CBD5DAAC40B92707D8A3E3A810924417 + 1FBE0986D1DC3C69FBCEFD47ADEF7FEFC3BEF73E85B2509F31E05357305FA9F9 + E0F22D3FCE0CDCC642E22167D0286BF273254772722456B36DFBADBAE6D639ED + 461ED3E32348C422D901DE0ACC4208C721CCC7D037164024F190336814D5B2BC + DC23399CA4CA54E918AD6B6A0D69375A30353E82442C9C79E054240E00200093 + E118AE7904841FFCC10C1AA55D2ECD6BE5386E8BA9D271BBBEE9C86CA1313DD0 + 3501932D43E3E8F308988F27985EA3B0C9F336B4328EB397586BEED435B5CE68 + 8D9B303D3E82C51441D7057C1C3A1589E39A2780B95882E9D5F22D7269DE61C6 + 713526AB63AC7E5FEBB4AEA41CA1800FF17030F3C0C79B8EC4D1E715105A5864 + 7AB5BC4A21DD7098316E9BB1DCEEABDDDB22182BB622E81F432C3C931DE00A34 + FA007D1E0133D1388A5472AB4A267D9B31B6436FDE7CB7B6A92560ACA846F0FE + 1DC4E6D7074D193059706111FD5E015391188A54F20A954C7A0860757A73D578 + EDDEC313266B0D66FC6B87A61C986C766111FDDE4908E118742AD926B54C7A08 + 40BDDE5CE5AF6B6AF19BAC8E3541D3064C168A2DE2BA6F1281F905E894328B5A + 267D0BC04EBDB9EA7E5D53CB3D93D581E03F40D30EFC1B9AC0806F1213735168 + 95325E23971E04D06030574DD4EE6D192FA974201A9A4478E67E7680C9E6E209 + 0CDC9D823F1445A122BF4C23CF3F00607751A955D8B6E7A0AFDCF13AE6A7FC2B + D0559B854CE5999EC7E7DD37F1E5A541BA371BADE5384907C7E55CB5BED6B0E7 + DDCF2EA2C050965D603291082251F254C21893B0C7AE4BB260024028D717A2D1 + CE6353710123A27E22D145849F43821717BEFE18D159213B40ABA1008D760BF8 + 220D2312AF89B4E404A133145886DDB8F00DC4A5A595FB3306ACDC588846BB05 + 669D9A11512F91E82451EC0E06C6D07DEA046E767D0B515C5AF55CDA81AF18B5 + D86DE751AA553322EA212217804B8267085D5F1DC3F095F34F85A51DB8D9A443 + A38D478956C588E817227282D02378DDE838E9C470EFB935CD9372E096121D1A + 6D16980A9520A28B44E404A857F00CAD0B9672A0BDB4080D361EC6022588A84B + 24D1C508579757CCB56E584A800C80BDB4188D761E068D0222891DA2B8E404D0 + 2F78DCE86C7761B8F7FC8BBCE2F9800C407559311AEC3CF46A0588E827227281 + 686062EC06BADA8F63E4B71F5F08F65C40C6809A323D1A6C3C8AD57280E8DCA3 + AFF2A677B0071D279DF0B97B52025B17906380C36CC02E1B8F22958C88E8EC32 + 8CDCDEC11E749E74C2EBFE35A5B0350139C6F02AAFC72E1B0F9D4246043A4324 + BA08F8DDB7B262E981FD2BB0CAA44383DD02AD3C5F24883F10C4634418F10D5E + 4647BB2BEDB0670293FB8AAD254522117D27D2D27100A3DEC1CBE86C77C1E7BE + 9211D83381000144A708F88840776E5FEF44F7E913B8EBEECD282CD92A602428 + 0084838277F9CF3FE91DCA86EB65FF9FFE0233327E3237657698000000004945 + 4E44AE426082} + end> + end + item + Name = 'debug-break-all-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000008049444154388D6360A01030 + C2186E09D50C729A6628926F9EDC61F8F6F91D56F10D938B1918181818586082 + 729A660C3AD63EFF90153EBE7196E9E3DBE758C5616C26063450B17CDFFF8AE5 + FBFE132B8E6100A960D480510318189092320C74443A316253884B1C6EC09B27 + 7750D238030303C3CB87D719BE7C7883559C6A00003CF33564079C1BA9000000 + 0049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000011549444154388DED94314BC3 + 4018405F45C4A307F540ADA0601371535404D74AE8E42A08BAC4C94DFC010EE2 + E60F7072D1FC094110694705E922B8884DA636CB05355A9D74B0414C4F28D431 + 6F3AEEDDBD9BEE837F26972C86449EC5D575E3A1671DF2F11633363563F4F7D7 + 17BCE81080C164531646D9DA3F9D06B653E7FD877AD5D3CD809535D7054A297F + 76BCEB045DC10E25E0E0318C3E01547E1825450DF03ADE8DE276397A7D07C02E + AA1C50058224900E0270725507A032675199B77EB9DB468BCBBB0600479B4ED7 + DD0153B01FB26016CC82BD60FCCB3BCE12F03D1CD22C5B13D8E3233D077DE0D0 + 2EAAF45E82A7A4A82929FEF23F0356C802E58D3DE3ABBAE9D38E9F989C5D30FA + 9B730FDD0A8CAE6FBE0050FE465723616F550000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000139494441544889ED953D4EC3 + 401085DF03930E2121451434716AFB0E488EBB48B49C809E8A2E28456EC135A8 + 70CD05020D124442A2224D240A2B213B14F69AF57A17374129C854B33BDFFCBD + B564E08F8DE661FFA08320E87861B5FE8212D5CAAC9679750ECCE0F07282B38B + 2B6FF2D3C31D3EDE9E5B99DBEBF3EABC6703246F00AC492A92CAF0472663C5B4 + 3FB2EB05F685B6FBE94C0A4F90C67D27933DCE00500820897A4EA6D140A4A89B + 4D5F45DF0DA2D0C548560E411249D4A3CEFDB50149880848B22C26DAAF31C507 + 528B591800C71B6CDABC1289B1AF58BB6B8974AC9C7C275183F92712EDDE60FB + 6FB03D89D2B85FEEFB2397C900601A87307F8A2E89BCFF83411C36A6B54C9228 + AC8ABAA6773610913180B19960276BC68EB99AD4763AEA9EE2F0F8C4390900E4 + 9F0BAC96792B337F7FF1C6376EDF28BEE958E39A4EAA0000000049454E44AE42 + 6082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000008A4944415458856360180503 + 0C18B109BA255433C8699AE1D4F4E6C91D860D938B29D6C3C0C0C0C0824DB19C + A619838EB5CF3F5C863DBE7196891A7A703A00062A96EFFB8F2ED611E98435D4 + C8D583D555F404A30E1875C0A803461D30EA8051078C3A60D401A30E187500DE + 5631A1163035F46075C09B277770B6E3191818185E3EBC4E153DA360500000C1 + BD2FA209C5F9A00000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000011249444154588563601805A3 + 606001232E097D876006FFEC2EA20C59581FC5F0F0DA4914317E516986FC6987 + 88D27F70D5448683AB27619563C1A5899D939B414852A19E8181A19E80F98EAC + EC1C07D10599995918842415EC191818F613D0DFC8C92BD0884B12A70361E0D9 + FBCFFFB79CBB8D552ECDD908670C2083597BCFFDC726EE63A4CA2025C88B572F + 4107FEF8F587E1DEAB0FC4B80327C0A5FFC7AF3F04F5325164331DC0A8032905 + A30EA4148C3A905230EA404AC1A8032905A30EA4148C3A905230EA404AC1A803 + 2905A30EA4148C3A905230EA404A01C191050E3616062531018A2CC1A59F838D + A0F5841D2825C8CB98E66C44BAAB9000B16338D8002107364231B9E020C31048 + 46A36014E00300651D2BF54B5EA53F0000000049454E44AE426082} + end> + end + item + Name = 'install' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000019549444154388DDD923F485B + 5114C67FC73C63CC13A3C1685034E82448E95029B814D4C145ABBC3A1784D2C5 + 2242E0B9752E298243DF5451A1207448827F26C1C5D15270280F2934ED622868 + 31469F29A8EF3A1893488C48BBF94DF79EF37DBF7BE01EA8A0D0D447220B2937 + FC76A5920580AA3BBBF7D0030068C5939706238AD4E86437E66FBE1208513FF2 + 06711599E42C2A775C0ED0FB46A91F7AF51CE8AA7D3C30A79CC3ABB01EA0D95C + A63ADC352D90BA383E58CDAE7D2807A8BF0EC057E0BDD6D8E2A1B16516406B6A + 078802AF8181BCAF08B02CAB70398F9CEC25F7FDFDA9D3AA4DC0932F9BC044AB + CFED1F0F9FA5FDC653D4586F2123B66DBB85299472767EA6C7DEFDF0D94775AD + 9B22D2AD94DAD5B3E9C1A9B6A39E673D9D4911D14B2710DBB65DD3345549CD39 + F307877FF5BEFC9E0B462C5F666FB2E3CBD2139F73F019A82D0DC76231D12897 + AE397FD63AB6178733E1472F02BFBF8DD7E40E3F21E205300C4300E2F1B80BDC + 0A4044EABCB9CC7A28B565894854A4E84B24122AEF1128DD835B20223253A97F + ADFFDEC41BBFF02FBA043D947F1A542F8A580000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000022C49444154388DED934D4894 + 5114869FE38C3A394EA339639F63218E988B68917ED14252A310FA116AEDAE4D + 8B5A4492D132425A04AD822221A33FA2C016FE502E74E12E86C8A0AF881A9130 + B53167469A69FAFC392D6A6CA62925A45DEFEADE735E9EFB9ECBBDC22A729455 + B2E5D268333002E44D1C0BAE6607206F4DC75FEA3F70FD72FE5A28DCB61B5016 + 26DFFC3E41C966F2CBABD0451B3BFC7C75A0F7E869361E3E5184AADB9E7A1789 + F69CCD361B41FC67EEE22CF157814CCCDD3C4762F441F68159E96A1B10B82022 + 2305153586EFE43554150055A5BCF31E4EAFBF5190318136576D43EE04999BA5 + 7804E03C10139161A7D75F9195D0EBDF23793208DC02ED5B8ACFE600A5ABABEB + 27DDE526B9E300431187672A2503809FEF89EFA8EA5EA00FB8515DB47C6A7F99 + 8DE3593FBAB4980DB42C6B38B3A0AAD1173389E397C70B5333140F00F522E256 + D504AAD7ABF55347479DECAA29735F14919C57E2045A42A19046A3D195623C1E + AF0D4CC65A6275470E7EF556F603CDA85E2D9E7ED9B9E9ED60E3ABB9E0C0B8CB + E5C904959696629AA6380142A110E17038B3BF5D6168EBFCEDD6F70DED87521E + A3DDF3F17577E5D8C37DF697D8A3D1D9493780CFE70320994C621806A669E6BE + C395BB809D1BE63F3CA97ADAD39A2C36BADD73E1B68285E47D1171A53D4D4D4D + 02605996DAB6BD32F21F2522F58589D9C7059F23DD22724544F233FBBDBDBD9A + 5E0783C1B5813FA0A688986BF9D2FA377F391008AC1B9466886559CBEBA665E8 + 1BCE09B969546E20410000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000002BF494441544889ED545D4853 + 61187EDEB373B6A99B3ACD8EA6B8DC0CA684A151048114D8A0D28B2ECA94FE90 + 8288A20407118150F78A0405411A05DD08769504BB96B22EDCCD59514BC432AC + 2986A3E26C3B7BBBD8CEF46CFE4CD965CFCD77F8BEF77DDEF779DEF37D400E70 + 9CB903E7F0747FED932F9A73781A66E7DE5CD2000042CE91DB44CE0598D9B0E6 + BD001119D6BC17D82EFE5BB429C4CC0DDB912E14B7DF000044BF7FC6E2C36B00 + B22D92DCCD28BF3208413483A37F111EBC8478F86B56018302C15E06C7B97B10 + 1DF2319343BE5AD0781815B746400545068BCCF5FBB1B37704D28E1A5974C803 + 92BCDB5A76FEFEE60A4830E9441708E8029164A96F796071371B1438CEDE0504 + 4126C00FC009E0194C5260D30209F50FB4E54508F6F21E22B282304820818121 + 6323422592E4B5003A9839100FCFAEADC0E7F31936249EC252E5D1D8DB2553F7 + 62949E031820A2B4950CEC4A755E2D104EB80A131307ED2A1255117006170050 + 3018ECD7A5EB3E6BCCF3534B78FC684614E754F129883AC11C02B007C02700B2 + C0898E43C5EAC4E53AF654150A9DC0CA2FAC7331334400FD2BCD81004000B826 + FAB3A97146B9BE606BB9A8DA6526A26E4E0E4286163FB9633EF0A67139DC5CE1 + 691D2722397546195C4C8AA2687EBF1F7EBF3FEB8A4A66F3D0AF1267DFB77DA7 + 05D52E0F13513BB4D871C7ECFB77951FC60F486AE4153397ADE5BDD7EBA5B6B6 + 36889404A724524A221311C563B19B45E150A23A30EA9B6B3AD513B396D695CE + 4D85E48FAF5B4535F29281123DA7A1A1214D1E0C06D3CD665DB4CC1901DC6B5B + 0869CEC991DB31D11AB2447E78A5446C94886CBCEA61F2783C2022626663014E + 421F4EFA800DAF1AF7597F87D9C23C49442F009899C1ABE3C6C6C674EF0DD8D0 + A28C6F1F800411995637B15E8E1EB395C78EB6189F54908B45EB5BB7F11990B2 + C8ED76A7E5E50B2E970B00408AA268F924CEC43F3C674ADE073B7C8500000000 + 49454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000002B3494441545885ED965D4853 + 6118C7FFCFBB8FE3D6F25B8B99D52E148CD6B2A8BCB042D331CC29CE1875538C + 088CA40B03EFBAF326C1BB28314243340BB6B422BAE9A290CC4CF24C8E51A6AB + 91564E0CA2DA97DBE922153536DD4EE4CDFE77EF799FE7F9FFDE17DEE73C8438 + 9562AE875267C0FCCC477CEB698AB70CE4F1262A7506A8F71EF3F93F8C26C5ED + 0E80494906A094982F1940B212000980044002202A40DAE926E4B43C5767D6B7 + 02F275363D6248B75D414ECBC09F3C29006A43A94A96BA855717969766377480 + 9234D1ABC995C83C7F159AE213A5B2D46C5E5D58AE9204E07739BD20D840E8E2 + F20F94655DBA05526D8E689E71E13A5485E56520748160F3BB78AF2480D9D68B + F08E3EEB87885A22D6C9E90CC6EC868EBF21E44A64D5B742BDE7A89118EB8488 + 5AFF24DF3FD372662D7F505D5D1DF47A7DE40005078FAE18DD53F2226F88EE01 + B0F95DFC63CC0790947F301C987AC7E6E73E43B5FB880940BB82C41A6B4EE8C5 + F6E99708FFFA1ED5DCED7643AED7EB515252128E161808F81E78DE08D6874A43 + 7558A1EAE37486B3001E0180429B078536AF02C04D0A05AB0FFF7CCD5BF715F4 + 71B9FBCD6B9D5E1004B634903436368A51622B89E88E366DC83A5D64AB0A739A + FB00CE2DEE0168A3A0AF6AEBAB2E7EF6CBE8DDCB4FC44A00D1EAA1B9B9998018 + FA80288AE614CF5BFBB6C17627F3FFA804D0B6B0D546419F593BDCED4C9F1AB1 + 03E29A275FAE984632994C5691EC1977E40EB65B3E1DB21D0F719A1E16F49DD4 + 0E778FA54E8F38988C9956E7582C165ABEB6DBED61225AFA16F34CC818999267 + C77B770CDCA8992930EDCA78FF5491FC75AC97888CB1D68A0B000088C8B869CE + D5B7B3FFDA2922BA4D446591621D0E87B82A77C58DC43D152F984E125184CEB4 + 3E49FA194935970CF02F9400D87080A557B0D81AFF3B80DBED8620081B721313 + 13131B61BB52BF016889CCEB77059F240000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000003CD494441545885ED966D6C53 + 5518C7FFCFB9B76F6B3B69E9CA4BEB88ED062921065788938C0C67262443C35E + 8226462218419D4636030B463F1058143E603042628C9489D9166421618C0D8A + 188824A6BC043E986B62D6F15664969775D3B1CDDE7BFC40DBF852E8DD7ACDF6 + A1BF4FF79E739EFFF9E5DCE43997A001CC62836DF596D4FB9D7D9BB5887D90AD + 450819F26029AB7BD25256D76329ABD32232852682096C009ED7300F80B682FF + 0B39C16CC909664B4E305B7282D99213CC96292F28665CC1044C5FB71386E245 + 504687717B6F3DE2B7C2E3DEC850BC08F6753B414CC0F0F96E0C7CFB89AABA8C + 2728D866C2FCCC2A8BE8701FD7BBE62E9ED1D40AFD9C05E392332E588A828600 + 74CE39EB45877B4FFE8A3754D7AAFDC47F807015C071C1EA78BAE0FDAFA12BF2 + AB932B590E47FD17607AD39B207C0E20A4DA4E8DA07C2782C1608003D800C241 + 10F5B0BCFC52E7C67DD0679034FA97C3B1613748A7AF07A3CFC0F13A082DF7DA + B76927080003EDDB317822C0C1F95B005A89A88799CC4B0A1A020F9534F9573C + 9013C57789D1A7E0780DC0817B6DDB3014DCAF5A50ACADAD45494989BAD5B306 + F9B101EB3BD7EF338540DD82D15CE56C08FC70F7C047E9E5047123801DE05833 + CFA2B43F67E887BCAC1858D6AC6ABBBEBE3E50737333AAABAB77015898A98073 + 7E4DBA157B7B47D838DCCF1EDB0DC25A70ACE472FC0C096239117DCF39675C8E + 8304B111A08F01FEAA97DF3DB8C5C73DAE69E63D446450771AB8140A851A936D + 66616F6F6F79389CB97D44A3D1C2D9376E57C5E6D7BD3732FD0919401709E20B + 0078720D09E22600DBC19557CCBFFE74C8FECB11EF8568D169292F6F961A338F + C703AFD70BE06F7D301C0E23180CAAA92F9765B9D335F0E58B374BD736DE2F28 + 9201EA04B02B31DF04602BE7FC656BE4D2E199E7BE291AE17F7E77F66CBF2A39 + 00A8ACAC4C094EE8261104E159D3D8D05177A8C56C8AF66EE29CEF25A20F13D3 + 5BB9A2BC648D5C3EECBAD03AD7A88C9D2222F744F601D4DC240F8131566E1889 + 753D1E6A597963F19AA66167B10CA0019CAFCEBF79B9D375B16D9E4E1E3D498C + CD4E575F535343FF1EEBE8E85088E81FE359DDC58CB1A586D15857E1B9FD564B + BFF401387F6ADAF5F39DEE8B6D3E5D7CE41411A5951B0F133EC1244454A61B1D + 3A56F8E357556366C7CF86DF7F9BCF94F849229AF1A83A4992F8A3E635134C48 + 2E11E4B16E632CB299880E119133538D2449E972FEF3D935114C849712D119AD + F2924CF9FFC19C60B6E404B365CA0BA6DA8CDFEF87C7E3994C9714369B2DF59C + 146CB1DBEDA7ED76FBE418A5E70A00504545057C3EDF24BBA42712894CB64266 + FE02FFD521FCAB87425A0000000049454E44AE426082} + end> + end + item + Name = 'uninstall' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000001A549444154388DA59231481B + 5118C77FEFDD817A4825CB45093982E22295B81CCE216B41384A87CEA163A183 + E952AAA0A4256321E0A2E2D8A1E9503A083DEA2E64BCC192A13A340A3D318DC3 + C5DCBD0E5A392F6721F89FDEFB7FEFFDDF8FEF7B90A297D92C3DDB2EF46CFB7B + CFB60BB57C3EED18005AD258CD66D9B0AC59C015422C012BCB93935F32529EBB + DD2E2A715EC6379BB91C6F72B939C0056A37760D705F98E6DC56A170F7429CC0 + C964786F59F352CA6FC006B02D84580356803F52CA9DC786F1F56230F00F2F2F + 6F03F47F8B294D438005ACFDEAF7F77E87218B86C1CF20A0AFD4CEFCF87828C0 + 7AA4EB3FE204B7019F7C9F858909774C4A3E743ABCB32C160D83F330E4E9D111 + AF6766F604B07B76466A40378A583D3949F61480CED515AF8E8F536BC99E8C2C + BDD168DC319452B4DB6DA2FD7D00069A46A552A1582C22E5F07B7AA9548A9266 + ABD55A3FC8E779E2FBEAF3F4F4DB20082897CBEB6904C2F3BCA85AAD26FF0700 + 1F4F4F79669A4A0821D2EAF57A5D8CDC03C771701C07A59482D814D2F4DC3487 + C89ACDE635FA0DD57F03C2FBD8637AF01885E779435318457F0176F080143E13 + D5DD0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000020A49444154388DAD94CF6B13 + 4118869F6FC9CF363D04C31A534821311B9B8B252E6215E241B4471B027AF00F + 5010AF1EF514D08367FF801C3C08B120D85A4D05C12A21E7ADE4B0BD7929B86A + DA4042DDF16022B1D92445F39E8679BFF79961BE99114648F7FBD9C86631C2E1 + 73C023E0E6C756EBEB6AB3C981EB8E8AA18D82ADFF8699C0A6885C01DE2ECFCD + 9D786118CC6A9E316FE0E96090F78681110A9D073601BB67FD046ACB9148AC96 + C9A0FB7C9381996090F56C9644287441445E03CF81FB3DFB2AD001B6729188FE + 2A9BF584FE057C924C722A10B8A869DA06F04CC11DA07F60DF806B2272A0695A + ED4C387CF2C1FCFC78A04F04E02C50514ADDFDD46AA9417FBBD5FA8E522BC017 + 60A1573F1AB8E638A0D45394BAB7E638EAF6EE2ED20B8908C56693EDFDFD1F28 + B572E8BAF5978E33041C5E6240C940809DA5A5CBC03B409BADD7C7950FEF701A + 9A3AD0572E97479A6F2A15500A444029F2F93CA552693CB0582C6E1D9D745D97 + 7ABDFE585F5CFCFC616F2F7EA9D351D59999854C3C4E2E975B350CE3BA787418 + 402CCB721B8D86728E74ACD168E0380EB96E97878EC30D5D572222A9548A743A + 3D048A46A398A629BE7ED8B6EDA1222FD9B6FDA736168B01D06EB7553C1E17D3 + 34F17E90C754A15000C0B22CBADD2EC064E08EDFAF6EE9BAA757AD56FB4349A5 + 52C7032A113964C20B18D0F4EF21402291F86F509F2196658DFECFFF41BF00A9 + 44A611921BD8140000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000002C3494441544889B5934F4893 + 7118C73FCFEBFB8A381D746813661A6A3A6F4278300F56885456447F0884FE88 + 048974E820D2C96B52C7E8DA2534CA4CB03CB88AA2439411046D2D4929E85433 + 50E7D2ADEDE9B0BD633ADD66D8F7F4F03EDFDFF3FD3EDFDFFB13F2E0B2CBC5CD + EA6A8023C025A0EB472CF6BB3318E4D3CA4ABEE318B99ABD2E1737AAAA008E02 + 0F80E3C0239765953EF17AF19694FCBBC035B79BA1AA2A44E418701FB052AD83 + C0F84ED32C9DA8AF675F69E9D60404B8EEF130E0F180EA89D4F0F7C0AD14E522 + D02622132ED3748CEED9435B79796102020C5556D25751812172D2308C11E01D + C9FC1752B461E002D06A18C644996595DDAFABA3ADAC2CBF80DBB2E875BB1191 + 5386610C036F814E603193A7AAF7807322D26A883C761415950F783CF9053270 + 10780D74FE515DFC18892022E92D3F442290BCF42EA016D8B5C99CB502E1789C + EFD128C015543B638944B8676E8EE78B190B8870F5DB3746E7E751D587A83602 + 816052340BE61A814482C39F3F73C0E94C00912FABABBC5A5A62AFC381AADAF1 + 1053A5676E8EA70B0B5822E1982A23F3F3F90500BE46A3DC0985B2882282AAA6 + A38A037737199A899C0F6D3B50B04066445B81D9DFDF9F93303B3B0BD3D308A0 + 24FFA2E2E262FAFBFA0A13E8EEEE1EB49DD9F9DA2E43A1D08BC9C9C997E19F3F + F9158DEA8E4482806551D9D444434303CDCDCD83A66966DD8F5DAB2A263068A7 + 903208A02222C160F0FCCCCCCC57713A79B3B4B4FB5024A2B79DCE67B1A222A6 + A6A6686969D92FF6D475E753B58ADFEF8FFB7C3E7C3E5FCE70CF2C2F733A1CE6 + ACDB5D50341D1D1DD2DEDE8E29492880ED465575A33AE56C435E6363637A8340 + 2090369BF50E7222AD930DAFD79BCE3D1008A4BF9B9A04B623BBB1BE1E733818 + 773836E58D8D8DA537CC44C1112580F8DAB8368D32D3C07F7FC90547B4519DAF + 07A9886A6B6BD7ACBE1DA8A9A90140FC7E7F7C3B07AFC75F6E43554735801807 + 0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000029B494441545885ED95DD4B53 + 7118C7BFCF39D38D31BC71EC8DE99CF972751022E84AC2D6CD240A84D0BA96F2 + 26A31BC50B752429EC3FC84244F0720B2276214EEAA25BA18BC159DB40176C41 + E454ACF332CF7E5D4CC784DACE59E52AFCDE9D1FCFF37C3FCF739EF33B3C1AD4 + 7D8703D31E0FBACD66BC3B3A6AB40CF84692269D4E847D3E5FAFC512B9D6D6F6 + D6C6F307F1C3C3F30198743AB1D8D9D905608B882E03B87DD5667B65E3F9FD46 + 203823C18FCBE6DD00B600844F8EC300B6265D2EFF92D76BAC200C4C60C1E3C1 + B4DB7D89E3B838802500CB44340FE016806F005E5CB15A5F77B5B41462070760 + 3AEB9AF4042D7ABD78E872F510D126802779555DF9A26910AC56EC2A0A54C69E + F75A2C1ACFF3F17B0EC70D8EE3D20F767650D251BBEEC49E96CDFB88280E2094 + 57D595A028E2A3A200000A9A86A0282225CB2B004244141FB3DBFB9EF9FDBA5E + 47CD9805AF178FDCEEFE93CE67F3AABA1A1445A44FCC4FF5A9582C4348D22A80 + 5922DABC6BB7F72FFBFDBF0630D6DE6E011003309353D5B51F999F814826F141 + 92D61863330062A3E5FCC60152B22C33C606F38AB23E5CC3BC1A623899444A92 + D6196383695996EB01D45CC23BA9147ACCE65CAE58C4E7E3E37AB52A10D74511 + BED6D6DCAEAAD68DAF09F0B554C27B49D2655CAD7D4DC3BECE3CA3F7C66FD705 + 40D3014C1313131004417702630C994C06A58D0D00C031CF637C7C1C030303E0 + 3863FD64B359980441C0D0D0909E6BBBA2EDEDEDD09B8E0EDCDCDBC34BB77B4E + 511404028190217700894482AB7C865353537A7F6000300F5339356D32CD51A1 + 4006F3110E8709F81B76E04F1B8C8C8C50F5732412291151E5ECFF9F40341A3D + B31BD5DD03FFFA04461D0E4600D58FFCB99A3E810B80A6035496F0F46A3C7780 + 6C368B4422D1944964329966D89ED5777993F4DB3658C1F10000000049454E44 + AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000378494441545885ED98CB6F1B + 451CC73FBFB51D94D82EF6C6C445AA09593746CE2972A44A692B0525A4AD8BD4 + DAF1012EBD55202171810337CE5495FA0720040E45A807420E70C2A116072E56 + 848A108DD7511C9A2A28AE5AA069831F9B6639F8A1B44D895FC291F0E7B6BB33 + DFF9EC3C34A311DA8005F8F0C811BC361B997C9E2B1B1BED8805C0DA6A800598 + F5FB89A8AA1B781BB8E4B5D9CC0F6EDF6E59AE9ADF0E3915F84E442E00BE630E + C7B7CF5B2CE6C2E666E70477C9F503096048447A819781578E391CDFB4435269 + A6529F08714D23A2AA1E600130818B95CFD3C039E0D377BC5EE5B2CFD7D23035 + 2C685714BED234CEB95C2F54E48C8AD41F95223F01AF01AF8BC8EC5B1E8FE593 + C1C1A6251B12B42B0AF3478F72D2E51A5014E57BA0089CCA19C69FBBCBE54AA5 + 1B15C9D38AC5F279CCE3B1C487869A92AC5BD0AE28CC0F0F73FCD021AFA228D7 + 45640B38A5E7F37FBDB9BC8C8800202284759D9C61FC0C4C89C89422F245B4BF + DF1AD7B48625EB12B42B0AF38100E34EE76144AE03F74DD33CADE7F3F7C3E934 + 39C378AC7CA650209C4E932B957E01A6107915912F23AA6A8DFBFD0D49EE2BF8 + 9C08F38100C79DCE1745244979AE9DC9140A9BE1749A3BDBDB7BD6CB140A9CD1 + 7572A5D2AFC014705244AE45DD6E5BDCEF6F9FA0D76663DCE1700249E08E699A + 613D9F7FF06F7255960B05C2BACE46A974D334CD49601C91D988DBDD3EC16DD3 + 047880697E84699ECDE4F30FEB91AB521B6EC3485396FCACBE9A65F6DDEA7E37 + 0CDEBF758BF32E57FCE1A347BCBBB656B75C95E56291B3E934977D3EDD0AFAC7 + F7EED55D571A6AE919BCD4D3C3D2E8E804E569A0D853A976C4024DEE24FF255D + C156E90AB6CA8117B4C6623142A1504B2189AB571F7B0E8542C462B196320156 + 5757B1864221A2D1E81560B4D1809D9D1D52A9D4A5816030FDE3DDBB874F148B + 7CDDD73738ECF532323212090402E7ABA79C26B8914AA5DEABEE24A32B2B2B13 + D96CB6E194C5C5C589BF0D8385DE5E4E148B5CB3DB57646B4B92C9246B6B6B4D + 99699A86BF72A0A86D75D96C964422D154E05E64B3599AF96180E9E9E99AE0C1 + 5F249D6A786666E6A9C9393737B7234F4CDA6E0F3E8BA5A525B39E729D147CEA + DD93C30BFFA721BED9D3C31B0303A6B4E9105CE5C0F76057B055BA82AD525BC5 + 636363689AD649971AEE5D370F55C15955557F28DFE41E187E0390C9C94982C1 + 60875DF6667D7DBDD30AFBF30FC7D220BD25A2B3F10000000049454E44AE4260 + 82} + end> + end + item + Name = 'button-help' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000002E249444154388D6D93CD6F1B + 5514C57F6F9EBFD271634F9CAAB69AD050C791425AA591924514198458B0C802 + 51B59125162CD865D315A8F017C0028976C7A2AD5824329B102A24242A844485 + 5CA5A9C02D1228246D684B908BC7763C197BC69E99C72256D440CEF29E7BCFD5 + B91F821EF4FC259217AF48194F1440BC034C0B210CA5541D5807B514B8EDE2EE + EA67BE75FB26A8000001905CF890FE37DF1B03518C57FF984C6DDD4137B790AE + 8D1FD5B15359CC6C9EBDC15C1954C12E7DBD615E7F1F5480D4F30B18173F1813 + 4ADD19FAE5CB3399072BC4AC0A9ADF41009ADF216655483E5923E2ECA6ADF444 + 213C3C7E4BF9BEE96EAC214E5DBD2F653C796FE8E7E2E4C07609A59432B3AF8A + 6AEE0DBA7D09A2568593BF7D4B62A70C406D649667538572D07567FEBEF2BA1F + 92F164215EDD9C34B64B00B4526744EDE5394E973E27663DC74E8DF074E65D42 + 4E13BDF61863BB4463787A726F70B4706CEEC2924CBC75F9E3CCC3D5D1985501 + 20D26E30F0E75DC24E138122D2AA83266919A739FEFCF77D5B9ECBEED0541FBE + B71C02A675738B1721020F40082100E8C6FA95ECB60FF85EFEB48C1B680861C8 + 8ECD11505E44574FA70AAA9939C7C0E39F0E08E9DA208481000DA51A7E443F4A + 8047738B689E4BEEFB4F083BCD83B81FD541A9068006ACDBA9ECFFDB2BA59CC4 + 299179B0A2A4E71CE27AF9EB41DB4643B16C66F3A8FF080821C4B9AF2E2BD13B + B60361C0CCE601969D8D7B6841A755DC1BCC95EB23B387049AE9091E5EB8269A + E98943F1FAC82C7B83B9B20AFCA27D7715A9BA9DA0EF6CFE072BFD4A21EC348F + C51ACFF657D575D0AB9BF4D59F20FD0EAA57FCD7F9852A42CC5BDFDDF8A7BDF6 + 0DB2F3A84CE8C44B667878FC56337336DF3A319AD63C9748BB466C7707150A63 + 9D1C67E7FC25AAD9D7CA0831DFFEF5C78DDA171F41E0F7FC098DFEF945FAE717 + A51689168023BE912515F845EBF64DBFB1F229789DFDD217FDC9810CFAECDB44 + C76690C78D1EAD085A16EEE67DECD22A5E65FBD04CFE059C363EDBB1259C4700 + 00000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000003DA49444154388D75945D6C54 + 451CC57FFFB9FB71F7DEB26D690BA5A54B119716084588A6F88988247E25A4D1 + 68623436BE186342421B238F06DF4479822801236A8C12839A60687C81104C6C + B5069136A6DA562AB40BDB6EB7BBEC767B77EFDDF1614BD3BAE53CCE9C73E63F + 673247B80365107EFA0DC2CFBD85F883AD22D209EC41880A6269AD93C000704E + 6B7DAA389B4EA4CE1C2673F12B164300246851B7FF04666B7B25C811445EB3A6 + AF49383680998EA15C07376093AB8E906ABC8FBCB5320B1C027D24FBCB0FC5C4 + 896E287AF386CA6055F7E798AD3BD7013F9A9978B4E1F2692AA686590E5A8464 + A49D585B079ECF3C0BBC94FDF97B2771B21B0023FCEC9B543CFA622570B162F2 + AFE8FA4B4731B3932531A2E7C20D92B76B519E8BF2F208104ADDA072E20AB71B + DA5A3CBF190D34B59E29C4C728DC1842D67E34880A989F98995B9D1BCE7F88E1 + 3900DCAEDBC8F88E9729D82BA5E4AE098FFFAED75EFE1AA39003602EBC86E1DD + DD1495BFD39D897F31F1F62318551D5D2DA2E478A4EF53B933593E54CDE8E35D + 545DEF675DEF49560F9E65457C8864733B99552D545FEF07C0E764D0A2C8D645 + 7748D03A96FF77B0A810E90C4D8FA9C599057249D65F3A4AC31FDFE29F4BA38A + 1E766284C8AF9F91A9DF2C8E55B3C0AD1DB9882ABA11117932B4F96114B0271C + 1B280BDF4A8C965E6D118299D20D5C73C502CF28E4B0A74600F6F8EB37A0808D + 663A56662822656BD3CD0F226E5E9BE99B4BD683257D14C3C08788A55CA74C7C + 075A6B5DB06B98D8DA41BA7E0B8D974F63B8734B38CA7340B0017C689D740376 + EDDD0C3DBFC9F0AE03043271EEBDF001A1D478392760032401143090AB6EBAEB + 8473E1065C332CEB7F3AA6973303C855454073557B1E0A38976ADC8E5E263300 + 7F2EC9AA3F7BB4CC7FADFFC3B16BC9554704E8298C0FA1B4D6A7F2D6CA6C32D2 + BEACA0A8FCD8937FE306572C7B627CD35368E8D55AF7E7AE5C401567D309E050 + ACAD03A7A2AE4C30D9B2977F1EDB2F99D59BCAF6661AB733D3F480077415E263 + 38437D187A364D68DBEE5EADFCDB6F37B4B554C487F0399905912F9FC59E1AC6 + 4A8CE22BCC2E31BB71FF2B6851EF68F437D3270EE0DEBA86911F1BC0577F8F0E + AC6DF9CEF39BD16473FB162D8A506A1C557409E4928452E30B668E5D4B6CDBF3 + C4373FE3695107D1FA48BAE738D9F95E2CE5A20C6A5E7F1F6BE73E44E455E03D + 55749BECA91182E918CA73F0E6FB305715110DBD4097D6F4A67B3E2675E6F0C2 + E44B82B676EEA3EA85831855753E11D90B3C016C44C4A2D4D8572935F66F85F8 + 18335FBECBDCE0A525B996BF9C2F4068EB2E829B1E22B0660318C63C4DA3F30E + 859BA3E4AE9CC719EA5B68E9C5F80FA83D99DB14F13D1A0000000049454E44AE + 426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000005124944415448897D945B6C1B + 7516C67F67663C7162277692C6696387A66D48B8048AA06CC5AA826EB9AF9415 + CB9617C445889B40082A7151E18127DE601F110B08A19596DD22760B28BB4294 + EB02ED92564D68B9D46D1242EF25B6E33871EDB13D338787C426D7FD9E8EF4FF + FEDFF9CEF73F33C23C483044E48F4F12DE7A27625AF522F207A01FD824220905 + 1B348B92043E577417CA116F3ACDD4AE1728ECFF0FA02CD0AC165647376D8FFD + 8540ACCB44E47EE079810ECBC96943661CBB3089F8153C3B8C1389538C768A6F + 981E3000FAB42A6385C1F7C9BCF92CB8E5850DAC8E6EDA9FFA1B66A4AD19780B + B8399C1E2196DC43283DA2F83E8BE1069B24DBF55B523DDBF0AC601E7840D177 + 9C439F927AF951F05C004C0986697FE62DACD67833F0A9E157B6C4BF79873587 + 775357C8802A3207A0569B5E9986F4A8369F38204EF3057639D472BB206702AB + D70D4B308CF3DD17B30DA277ECA4E1B2AD26F04FC3AF6C59FBBFD735726A58AB + 821806E7DB2E945CFC0ACEAFEA16B72E4CA03885E17BB3025E4922A70EE2443A + A5D4D8762BC897F6FA8DC79DEFF7E265CF229DAF26112BF010F04A627817CDE3 + FB6AAF540EAD92139BEFA318ED5C108F55CE131F7A9BA633876A5C3F10646CEB + 93E234B68FABD2E724F739A997EEC68CDCB6A35E44FE154E8F34AE39BC9BAA73 + 356DF9F1BA277083111243BB480CFD9DF6E4871A4E1D9562B4934CF7561A2792 + 623BB9D9CC3C97E0CC39995ABBB905D194D59A183C3F38802122FD021DB1E49E + 5F570A10DFA5EDD8C7AC1D7C83E8A98398AE83E157249C1E65DDDE57B04A7952 + 3D372C982C941EA52133A6200F6218527FC5360CA0DF72721A4A8F681500A8AF + CD3F7DADA1F4D8920D325D8770EA18C5689C857754A3270F025C22B0C18EF760 + 009B1A32E3E0FBCB6ECB723522E2D68531DDD292B3798636198D2D188824ECC2 + E41297552C700828C264D7359A8FF54AD399C34BF8F3B4120016608BEFD6C4E6 + 0B2F6EE444E29CDEB85D0BADEB094F24B5EDE8470B68AAAA735A8260CF35D029 + CF0EADAA8D5F25CEAB014A8DED8C5EB703B3E2101FFA07CDC70741FD25772A76 + A8DA6F6AB6819274221D5B56CC680ED3ABFBF04D9BDE3D2F68C0C9CD8A2EC373 + 221DD52C930006F079317A81B8C12659865F836F0610C07272FFD7C8CCEA4B01 + 0AA81EF026CF62A8EADBBE617AD9AE6B163CE8E23A76E403EDDBFDB8A2BA22CF + B3824C755E0D30A030533A3A8801FC000CA47AAEC7AD8FAEB89AA9DE9B64E292 + DF4BA1759D2C3EABD61317DD8C5B17F255F545BFE250FCF60B0C6F3A0DF0B467 + 05F327AFBE07DFB0961D3DD57B233F5F740B859675CB47B3A64FD2DDBF13545F + 03860BFBDE459D3CA6973D47FD55B7644564AC1C6AB9DD8924A4E9DCF7C8DCFF + BC0AC32B4B78E218A1F4285631A78BC54FFCE63ED4300F80DEE5E7B395F4CB8F + A01507B3727A84407B178178EF0F829C2D8563B7CE745C6E0667CE895DCCD662 + 68C81EA72133AE7669BA16911FA8979FFBFAE5ECE57F1235CC03A8F6AB6A2EF3 + FA0E2A278F006002140F7F465DE7C504DAD70F217CE5D685AF9D5ABBB9251FEB + 41CD80185E05C32B23805B179642EB7A321BAEE5F45577928FF5FAC0ABA8DEA5 + AAB9C9BF3E4761FFBF6BD3FDBA9AA64574FB4E1A6FB8174482020F23F22070F1 + B2A10B059401557D1118F6F35926DFDC49F1D0278B688B606FB892C8F6670876 + 5F8918A628740B6C424880D8A86681A4C27ED0BC968BE4F7BEC7F4BB7FC63F3F + B58C8F1560C5BA086EDC869DE8C1686C41E6A83AF7FDBA1327288D0DE37CF75F + B4985F49865F00BFAD74368268F0F10000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000627494441545885CD976D4C5B + E715C77FCFB5EFF5B5B1310E2F217678C91A1242925116365252AD5569A6AE5A + AA054D9A26A5DB585569D5A4A99F224DCAA22AA934A993F661D21AAD7BE98688 + A64D51D32A54D5D60C352AA22D252584049692740163DE0218DB60FC76EFB30F + 268C1783ED7DDAFFDBF539CFF9FFCFF1F31C9D23C8114A6131FA8166B4AA4358 + 4B2A10562B200089344D520FFC24C7EF101BEAC6084EE51A1691CD41AF7F8AC2 + A7DBB0D536F9846239093C011C4208AF00878428524E00B7806BC0E5F8485F20 + D2D541F4D377419AFF9B00ABB786E2EFBF8AADA6B101F83982137A685271CDFC + 0B3D14408D06518C04A64523E9F01073FB8894D51273EF32915C01CE27FCC3FD + F3ED67487C71233F0105CDAD789E3FAF2B9AFE9A40BE54E4BFAE948C74610F05 + B2158C65B78FD99AA758A838624AC405691AA7172EBD168BFCFDF7B909707DE3 + 053CDFFD991744A76D71A6BEA2AF034770342BF146443D55F81B4F1177960D20 + E5B7C2FFF8C3C4C2DF7EB1C9CFB2F6C3D1DC4AF1F3E7BC203E2C9C1EAADDD3FD + 3AB6E85C4602C362C3D4EC083325057253226A2C8467B4977891AF3CEE2C6BB5 + ED6DB864A61291C448DF3ABFD583566F0DE567DFD115D5D653383D545FF5D1EF + 101B2E50CAE6E4414D0BA1DD0D24ED1E8110601AD2BEE0C733FA093BEE7F2485 + 34D789914261F4B11709EFAC1B90A6D13CFDCB53B1C4E7BD9B2B50F2930BA8A5 + 95BFB22DCE9CD8D3FD1B1433B5A1A495DCFBFACB98AA4EE99DABEC1CEAA4F4F3 + AB1405FA11D260765F0B216FBD289CBC896224D76428714D0C12F63D5A6ED85C + 45B6BD5F796FF1DA5F565F8705D24FCDFDEC8F1B04F28DEA9E37842D3ABF3E73 + CDC9BD275EA6C8DF4765EF9FB0870358134B585231D4588882B92FF0DCFF9850 + C511C2DE2F5334F6A9146BAAAB480347708C60F5D146C5B9A333159C9A4A8EDE + 4ADB005C4FB7019C29F25F57325DB894E6C03D71935D836F23909BEC00D6E432 + 959FFC91E88E6A16CBF66FBA138EE0286EFF750538B3C29716A01416A3D73679 + 81E74A46BA3206D71767F0DDF82B8A406C072D1E118553B789941FCC18A774A4 + 0B84784EF5EEF5AABBF7A705E8B5CD08C572520F4F2AD9DEB9943273FA6BA02D + CD91D4DD196DF650003D34A10838A9D73D9E16A0551F0278D23973275BEC9C90 + D25D5892D12DEDAE34CF932BBC28D6920A8083F6D0784E04DB5521A5DA65B8FC + 30DB25A387C6418883D6D24A00ACC26A0581578D067312B025B9562047BFF623 + B4A559DC8101C9166D5E8D0641E215166B5A40DA4F38D6BEDD6C90524A218400 + 308545CEEF39C6F48167B085A7A8EEF92D993AE343284602048E87DF5690805C + 362DAA3367052B881714CBFB475FC4501D940FBE8D67B437635B5E0BD3A20172 + 99957FD22A4D132481A4DDB33F1F7229A51CFBEA0FB145A6D9DDD781C548400E + F345D2EE014940AE744225F5C00F703B56E4CB871F4373B0ECA914E5B7AE3C24 + CF092B3CB757785192E37700AE45CA6AF312602AE94BA418F1BCCEADF05C5BE1 + 45890DF7005C8EB97799CB85DEBC82E58B65B7373D31C1E5D850775A80313F41 + FCEE6701249DB3FB5A720EA6C6C21C7EEBA7528D85733E335BD30292CED4DC78 + 20F1EF9B69010091AE7680730B1547CCA8A72AE780F920EAA962A1E288099C8B + 5C6D5FFD5D0188F6BE4BC23FDC2F1117FC8DA7302C5AD680D307BEC960EBAFC5 + 74ED33597D0D8B86BFF114127121353FD9BFF8C1C5F5029026F3ED67304DE374 + DC5936E06F6A430A25DF2433420A057F531B7167D98094F2F4FCC5579089D8AA + 7D7522328253C8C4724AAF7BFC4AC259D61AF35416B9260651A49131B073F62E + 3B87DFC3397B774B72C3A23176F405C23BEBEE4BE4F1C8FB6F0617FFF9E7753E + EB86D2C4BDCF50F48288F648C3A584B3AC25E27BB4DC1E1C438D85F2CE3CEAA9 + 62F4D84B2CEDA81E90521E8F7EFCCE44B0E32C6C18682C1B0FC66E77238D6444 + DFDFD46ED85CEE60F5D1C684B354684B73A8F14856E265B78FA9C3DF66B2BED5 + 4C69CED7257C2FFCFE9BC160C7D98C5BD296AD53DBD744F10F5E452DFF527A33 + 429CD0C313D937A342AF09F20A703E353FD93F7FF1156237AE6E2978FBDE6DB1 + 5270EC3BB88EB7A1791FF181C861379497930FFC81C5AE0E163FB8B8EEC2E52F + 600DD48A3AF4038FA1556FDC8E419AC67FB7E3E19E6D77C1FF3BFC073EE5A590 + 0532F8440000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000088E494441545885DD986B709C + 5519C77FCFBB6F7637BB9BCDFDD2943697B6B1250D125AB085D20A12AB33B4D4 + A9E20C82A00CC308CC203A03233A835F10C4191910701C2A1D11115A40AA2017 + 51190A6DB8C446C0A60D49DAB40DDDECA6BB49F67E7B1F3F6C529A7637B7FAC9 + FFA733FB9E739EDF3EE739CF79CE11E623C386BDB10D7B431B666D0386CB0B80 + 003AD1C50A0749FB07490D74933EDA332F339373CE5ACED64B71AFDD42717B07 + 86D35D016C00CE03962294813841A32801A017E802F664C3C1447CDFDF88ECDE + 416AA0FB7F0FE85C7929655BEFA468F10A8720D700D723B24EC0402D8A624135 + 5331249BC632ED641C5E324EAF2082A2719497802754F5B5E4C177197DFE17B3 + 069D16D0F0945371FDCF286EEF3044E466E0C72252EF18F769E9B12E3CFE8314 + 8F1EC3B032678CCD9A4E62954D846BCF65F49C0BC83A4B4455F781DEA5CA1B91 + 379F6674E7FD6832363FC0A28656AA6FFB0D66C58265C01F4464B53BD0AB353D + AFE21EE99B536CA8188C2E5A8D7FF946529E6A54F56955BD253DD41B0E3C7233 + D9C0D1B9013A96AEA2FA8EED180ED766447E6FA6A29EFAEE1D940E75CF2D684F + 9365D808B474E05FBE1115A30FD54DD9F140EFF003DF22E31B981D6051432BB5 + 77FE11C3E9FEB6886C2B0E1EB63574FE96A2C4D859A04D55B4A289236B6E24ED + 2819013666C7FCDDBE7BB7923DF1E9F48086A79CDA7BFE425145DD6611E339CF + 708FADA1731B46369DD790221AAD5A2AB1CA26D2C5A5A8616226C338478728F1 + 1FC0968E17844CBAAB38B4EE3652AEF26154D7258FF60C0CDFBB1532A9C28095 + B7FE1AD7055F6E1178DF151AF434EFFE5541B8D185EDF8566E26EDAE14D4C296 + 8CAA6896ACC3831AA64836A51587F650BBFF656C99647E484F35FD1BEE206377 + 7FA8E8DAF0EBDB13A3CFDE9B1FD0D9BA9EEA3B9E3044A4D34C45572DFBFBCFF3 + 2EAB82FA566E919196CBA53834A8D507DFC0E33F701242C5205EB68860E35A42 + 0D5FC01E1DA1E9ED47B1C747F342866B9673F892EF89C2839ACDFCF0F84FAF24 + F3E92727BFDB261B55B73C82595673B388DC744ED753B8438379270C36AF93E1 + D62BA5B2EF4D5DFCDE769C611F86953DE51F2B458931BCBE8FF1043E21D87831 + 91BA73293FDCA9829E11F38EE808194709F18A860B458C176DE535FED87B2F9F + FC6E00385AD753B4788503F8893BD0ABA543F993A882061BD7E2F1EDD7051FBE + 80A8E6ED3729F78901167DF02489D285126CBEA46002A8DBFF12662A6A03EE29 + 6EEFC0AC6B9E0AE85E7B15825C2322F5353DAF164C2502B2E49FBF6451D753B3 + 4E375EDF7E5CC1431A6A5853B08F2D1DA7B2FF2D44D882CA12D79AAB4E01346C + B8DA3B00AE738CFBD43DD237AD4143B398C9083207950C1F20515A8F6598055D + 5E71E81D501511AE75AFFEEA67F6EC8D6D88D35D21C2FAD2635D6795880BC94C + 46400CC91615173EB912E3B8037D005BCC054B30BC5513800D2B11580F6278FC + 07676D547586003C4519A707D4525B3A3EED188FFF2022D22650616F6CCB019A + B58D00E7A116C5A3C7660D385B29E8785D2BCEB1210C2B33ED02B97299C300DA + 8A725C1813C5E6D2A25850F35525050D4F68A67EC1C68B8997374865FFEE19E7 + B44702B986C812A33857049BB91F283353D3973DA74B44A6F5866598EA6FB902 + FFF28D94F8FEA3E583EF2A339477B65474B2593ED9D39C30E7940247DA749AF4 + E0A9B00A3A56FF797CAD9B49B92BA5ECC87BBA70DFB3E44BD2A7CBB04E323827 + 1BE684A59865B3CF19F0742F66EC1E1DBCF07AA2352DE21C1BD2A6B71F554FA0 + 77D6F3593607133C5126A267C28304324EEF9C0173732980220687D6DE44C2BB + 8085FF7A46CB0FEFCD7BB44DA78CB364B2393219DC86150E02F4669C5EC99ACE + BC03A7D3A413A3954DC42B1A6561F74E2A0EEF99D5929EAE6449ED64B3D78A84 + 728069FF20401722C42A9BE60C08B9584CBB2A00709DE89FD71C902B645535A9 + F05126C7853171BBDAAB100FD7AE98D7C422223AB1ED662A20A653A4F65C804E + D078B27F5F0E307DB4072B361E47F5A5B1732E40C598B781B351C2BB804459BD + 003B53873F46E3E11C2040EC835700B6679C5E195DB46A5E063CC33D34BDF5B0 + 9A89F1798D1F597A19AA44157D26BEEFF593BF1B0091779E47D15755759F7FF9 + 462CC35670A2422A4A86F18CF4E5BD23CFA4A4A786D0E2D5008F93CD06A37B5F + 9C0A98EAEB2279F05D80BB529E1A022D57CCD948ACBC8148D552129E9A398D53 + 60E8FC6FA0620B01F7453B774DB9DD9D7455FAF800EEF5570F00CB62554BDA3C + FEDE82F7887CEADFF07D4E2CBB4C2CD341E9F18F663D6E64D9E5849AD70970BB + 954EBC3DF2D86D27E30F263C08901AE826FCE6D328DCAA62F41D5973234977D5 + AC0DCD47E30BDAF0B56E425577A8EAB6B15D0F933D3134A5CF94642A0E173577 + 3F877D614B8B88ECB6C782554DEF3C8663B2CA9846B1F2062C5B1166621C67C4 + 3F2BB82317DD8065989DAADA91E8D9130B3CF81D38E50276062080AD7A31753F + DA81ADB4FA7CE0AF662A5ABBE8FD2729F11F98D1E86CA4E496D5D7BA0915A313 + B8327DBC3F347CFFD558913343EA8CEDAAB131E2FFFE07C5ABBEE213A7EB4F6A + B37F716CF1EABA8CA30477F0D0BC76E9A4929E1A8E5C7403A1E675A2C84E55FD + 7ADA3710F63F700D1347EECC8000562444ACEB151C9F5B13B279AB7F87882B5E + BEF8C250D3C58665B3E388F80BBE16E453DC5BCF70EB2686DABF49CA5D15026E + 57E5EE44CF9EF4C843DF2D0807333D609A76CAB6DE49C997AE436C661B708F88 + 6C412D71073EC1E3EFC5151AC41E09604B4531AC3496CD41C6E925595243B4B2 + 9948ED0A12A50B4555A3C0E3A0F759A96460ECCF0F137E6DDB19313737C00915 + D52FA3F46B3FA0B8BD031196825C0B5C25226D9C92094E974212D5BDC04EE059 + CD6682D1CE5D8CED7AE88CDD7A56809332EB9A715FB215577B07E68225085402 + 2BF9EC8DBA1834823242EE8DFA238578FAC87E621FBC4274CF0B6443BEB9989C + FF35D8F056616F6CC3ACC9BDF2E7CAC2DC3BBF6A2E8E33FE4192FDFBA624DEFF + 3BFD1763CAA148740D013C0000000049454E44AE426082} + end> + end + item + Name = 'debug-stop-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000006D49444154388D6360A01030 + 32303030543A3A3218CBC890A4F1DEDBB70C65DBB631B03030303018CBC83078 + 6B68FC23C580734F9F32313030400C808183333AFE13A3D93EA38211C66622C5 + 566C60D48051031818D05222720A23C9807B6FDFC2D336B1E0E6EBD7A4DA851D + 0000AEB517E3B433AB3A0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000000B449444154388DEDD3310A82 + 6014C0F1BF21E8E0100A220D098D0EB9BBE4057272F2304DDDA2BD03B40B5A27 + C80B7CA322B8391434B4942014F859A3FFE9BDE1FDB6077F4E0158992681EBFE + 041565495155A80081EB7288E30D108EF4B27D9AE61DF82A7CDC6FBBB6A9A524 + C3B251351D20077A206D53733D1DA5403F4A982F96DD3E93BA1ED0044EE0040E + A9F7CB8665E34789146058F657305335BDF7E81265EF4101583B0E5BCF1B0375 + 9D85E022C44FC6C79ED33225363BFEAFED0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000000F5494441544889ED55310E82 + 40109C514365E2B560447FE003FC9BCFF0459626B6966A228536545A90381682 + E1E040A3100B9D6A7687EC1CB3C5022D8319E97B5EA383CF4982AB7437E87B1E + 8EF379A306B3C502EB28422FDF247905004922C93A5EA3495237FBC632008038 + DA2B3EEC0042F7297073876686639920B4E6590692141F76D8AE96C21B98901C + F823ABD7C9172499AD9D29AAB84B4BEB6A8336508A284B5892ACBE8357D496C1 + 3FA21F88E8BF83EFEFA0F5888AF7806638D6A4F89F2FC20421485A26C57B2013 + 8418F8A34796929CFC99E634C85FA2FC2BAAF8330D488F7E87C4D4F74BE227D8 + 9C4EB82449A3339DB8012F5BCA4966FC6CC60000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000009D4944415458856360180523 + 1D30A20B543A3A3218CBC8D0C4B27B6FDF32946DDB8622C682AEC8584686C15B + 43E31F2D1C70EEE9532674310C07C0C099D5F3FEFFFEFE8D2A16B37272319884 + 266184365E07FCFEFE8DE1D7B72F5471003E801124F406A30E1875C0A803461D + 30EA8051078C3A60D401385B44AC9C5C54B3049F59381D80AB0D476D80E1807B + 6FDF626DBD5203DC7CFD9A16C68E82210E00056A20C3510F519F000000004945 + 4E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000000D2494441545885EDD7A10A83 + 5014C6F16F63C574B1190C36AB685B19669F61B067F03DB6B7591EDC2770D162 + 12146E18A6D515C340BD0C8ED730BE5F3CE7C2F9D70B1091D56E6E78C9321CA3 + 68D390DA185CB59ECC0F738F8F5184739ADE0024AEC346956E9AF2E7C051F21E + 5EA7A16FDD65015041084FF98B7B5B2086BE45FDB8AF1EF52DCE0B6BE0DEE9F5 + 1530508A81520C9462A01403A51828C54029064A31508A81520C94B2FE8B5510 + 22CE0BA7012A08AD7B5B60E529DFFAA95E51B5B4980DAC8D816E9AD25DCFD4B3 + EBB63C47F43F3E8EA025D049DCF9FB0000000049454E44AE426082} + end> + end + item + Name = 'save-as-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000025F49444154388D9D915D4853 + 6118C7FFEF719F376508954D44D82187045A64E1CE99D361599C1DD202DBA422 + 68D0455E795150D7EB2262372E082218E6851F79264437C170D5826D47B2350F + 75A173590A91A9DB74E56C7BBB10F313097F972FCFFB3CFF0F92EC550AD803F1 + 84C28877DBA00280A037481B3A1AC8AD67B7775DF6E8EA03666D76ED8DD9CB75 + 00A094EE6D01D522F47D7EF658694D39DC6EF7AA85FF6529BBF4DAD856E9D0D7 + 16FB8AB4AAD32D152D37372920BBA0516B029F0A93CE12F3E1E7D1F7F2D9AEAE + AEFD001E6F52E0BE780F0008B690CE66DE4C3233D7D8939503CB2B3973201080 + CD66030099247B9542D01BA420DB3F0240414383EC6593B3A4AEB43F1C0DF399 + 4C063CCF43A7D38529A5E7D615505000D858D15236FBF6672ED57EA0F6607F44 + 8EF04343431045117ABD3E92CFE7CFFB7CBECC8E2176F4DCA15AB566B85D7438 + 4D5CD540448EF27EBF1FA22882337311922AB44C7D184F7B3C9E9D6B54ABD4C3 + 56DEDA6E3C71B43F3A225BFC7E3FEC763BCC75E6E8C2D86C6B51E24F4F7E7E05 + 00C0504A13866AC386AAB2A12BA2D369B1D5F78D8E8ED64B9204BBDD0ECECCC9 + 33A1A9D6CF4FE3DD5A95A68921AB4E19008D2CCF4E94D5948112BAF86361EE92 + E954555F2C16AB972409822080E778393B916EFD26257C45BF48D346B5AA272F + 7D5F5DC2F54623670C1C396E78F7BB0296E4D417EBE0E020044180C5621921A9 + C285E2457DB7ED46E399AD7655F77B1E6239979BB656732683A91CBA43FB5EA4 + 3EA6E072B9C0B2EC08A5B439191B5FC8CFE59A09596F7A7C3AB13D3CAFD70B45 + 51C28AA2BC5214C5118FC7B59D9D9D3BE5FC8FBF1B93FCC056357B3F00000000 + 49454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000037E49444154388DA5945D4C9B + 551CC69F73DEB785B62FB51F60C16E3343482F74A5D0A2639991C5AC40ADFBC2 + 8C7609895C1913C5F91163BCDB951770C10DE824BA2189517C8B711D55B822D9 + 4DE9DB2E44B325CDD8C63A6C6123D82E851678798F1783D249F0039FAB939C9C + DF799EFFFF7F0E99FDEE8682FFAF0B7D62FF853E71003C00CC5C9B6142B900D9 + A2408C5E61FF747A9FF119BCD178824EFF38CD6A8ED640A8100A7B3C006417B3 + E04B78AC1937706BE1CEBFB695FE3D0D794D061803DBB441FF5BB29D620A9315 + C6169E70B867989AC5920F173AD48784BBE7BA3BE13C7978EFC05C2E173BD05A + 7D5CEF349F41A52A2A40956830379CDD53E46C7E599AC925DC9663FB3A3416DD + E0D8D898211E8FDB0921DF3FE150AF2943534DE3DF5EB2944D4BA5666D8BF990 + C547B4DCC0C8C80889C56200009BCDF66C01987F9487216B20DE03C77785293C + BBBEA849B7E99F3777084F950DC8B24C2A2A2A505F5F0F8FC703C6D8C705E07C + 7C9ECCC7E777856DF04AACF2A8D5BDDFFB5C3BD5719F8BA24832990CBABABAC0 + 711C14457917C057DB91190A03DDFC4E332986AD2CAF4C27171EB4188E3C7D86 + EAB82F445124D168140E87039452288AD2CD181B181E1EDEBDCB816890CDFD91 + 22BA124DE498EB154FA57BFF29A2E12E16C37C3E1F0823EF913CFA43C1107A7A + 7A761FECFB4B4924D3A9E8868096D2DAB29344C37D298A22912409757575F0F9 + 7C60EBCA792591FFA6E4B6D23277E31E80AD97427602B5251AE960F541B7C7FB + DA6983C9381808040A30BFDF0F39279F4F4EDE1B5ABBBD32CE317A78EB1C658C + 49B52FD742A55115D7ECD7571B9B3DDE13AF9F32994D83814080442291823339 + B7FEFE6CE8D6E5C44F7742DC3A7D1100C8A6290AC0AD3569A71CA71D506BD560 + 60AB73B3A9368BDDEA359A8C83A3A3A3341289C06EB73FAED9063E580CA72E2D + 4EA67E56C97CD363D876445E8A5FCF34DA1A5AB5466DC879D6D9F4E0FEC3315A + 5B9A251AAE3F180CD2A9A929D8ED76F8FD7E50D00F596AF56B8BDA345EEE75BE + 040042F9F6D70500FC9B9FBD85CB9F5C7CE4B235B4AA75EAEECA17AAAEAE5693 + 8EE5E5656D381C86CBE5427B7B3B28A51F911CEB2BCDF06EAA578F438FF12267 + 935B0BB2D90074B57582E7789C7BBB134295FE5A2693394208815EAF5F05F029 + 80BE5F7E0821F1DB5D14D76C4BE19B12C237A59DFD9D989880D56ABD0AA00AC0 + 25C6D8B78CB1A5A1A121F4F6F6EE1C87BFE84FC06D604F22175C5E0000000049 + 454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004BB494441544889AD554B6F13 + 67143DDFCC30786C53DBA913DB634302B6134026A91A1E52694B218E2954912A + 153555A958B4E2B1E10FB45B36ADCA2F288EA2B40458B4021522B571FA58B009 + 2AA8282910E3F8199428013B8D8DC713F3DD2E1C3B4E48A00BEEEADCFB49E7CE + 3DF7312C71799C03001111638CFD5FFC82372222B1E7CB8F3116FF071200E4A6 + 7294CD64B175DF564C4CC7283A132380D568D6C615DFEFF0A2D5E96589D1046C + 1E1B59DD56D49B444494CD6491184D50CBDE1644676274E3EF610240F54CEB60 + 7CD0C1E0776C43623441606016D5B22281C02A0600A8808AC3EA1ED6C275522D + BF81A14EC14A02BC422B2F9635ADA85D2222288A019224552422AA545D0115A7 + 167C01AE0F914CF772DAC28736458FF16619FD5706907934F56A24D2B4D203CF + 81E62E47976751DE69FE0316310F81F5BBDD6E455AABD4FA515C0F57FD5C7EFE + 5EA6F028E478CF6390EC1B2345ADE81DBB3D86CECECE1382203C2F51A586559D + 5AC74441BCFB986743D236E3C62AF9850B17904EA70900F6ECD9F391B4542D55 + BFE8DDB6B7A8B3E50DA06EF8D7C20B858507B7A6EFBEDFB67787A1718B63040C + DEA1A121643219783C1E16080400E0F6B2440C2C319A00004620624B9C04C26A + 4C06DC336E3685BA0F0765439329A2699AB7582CE2C891232897CBE8E9E981A2 + 2871CEF9898A444BBB131F8DBF74B99E89FCBE756743B0797F83A03499235A49 + F385C361E4F3799C397306BDBDBD20A204E73C08205991088C405871570E9E3D + 282CF7A5127F5A2846D393996E53874D54B66C8A14B5A22F1C0E239D4E435555 + C8B20C0049223AC4394F0E0E0E62CD29AA5A742646D19949000C46D930E6737B + 8FBABA9B21DAE561ADA4F9ABE42E970B274F9E84D1684C10A7205B447270F022 + BEFEF69B972598C4D0DD081863E31DFE5DA1967D7E41B4CB235A496B0D87C348 + A552A4AA2A5B224FA1C8BBC51CE536E4801B3F5E070008ABC7B4EAD485C7776C + DB1E7A73FF6ED1BEB9A9469E4C266BE4269329557A523C549C582848D33422E8 + CB532E31C698ACC854BB5775BA1B6565BCDD1F08ED7E7BAFD0DAD63A5C2A95AA + 5F0E97CB55232F4CE783539178DEC2CCBFDADB2DEDF5D74420A2EB6A40656A40 + 5DB15C4F0BC5873E8FF7687728047FAB3FA2EB7A5B5F5F1F52A9149C4E2796C8 + D385E98560FCE789DCDCCDE95F048DB5AF965900700C0C57FD07FC70B7BB2B05 + 30E2C9FBA9A3AF791BCA4D9B1D23BAAEB785C361241209AA929BCDE6F4E2BC7E + E8D16FA9F97FEF3C19969E49ED04C2EA5B28CDCECFE98D16FB27007EF0BDE33B + 666A30213B9B1D911DCA43D12E5F2BE9A5ED7D7D7D482693703A9DAC4A8E220F + 52BA946F521A22D64ED32E02C1E6B68131B6228974FCDC17B8F85558B75B5F3F + CEC0480DA8C72C4FADDFE9CD82CA4476F8E69F37914C26E1703870EAD42998CD + E60C08DD628E1E6F2A2B119B6FD3AEA5BE3DF7B30100219A89E1D3739F6336F7 + 7891887A39E7E20697E127B9D1F019116D88C562E8EAEAC2E9D3A761369BA788 + A80B658A4A3964052674129148442200B10ED7AC96B2D16A87C3D6044531A0FF + F20020B23B003A38E7248AE23322FA9D88CE32C62606BFBF886B57AEAEB53A35 + 7B3835094DD796176D363787D9DC1C8C4623480018F017009320089738E7FD00 + E29C730C0C0CE0FCF9F3CF35733DFB0FA22B9561ADD017890000000049454E44 + AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000004D8494441545885ED966D4C53 + 5718C7FFE796A2D042A1B7526499C2408DDB0A3802D920EA40F69616B06ED94C + 0C3131D8BB64C14FCBB2F0C1E9D0216C864C265337900123BC358002328C22C6 + 51C3CBA02A6D29D0E1AC4B8A236B07A5026DEF3E106A412AF8C697EDFFE99EFB + 3CF7FCFEE79EE73CF792CC5D1F232A5C8295D26DD31FC82ECD758DBDA2C22548 + 8E79D3B952066E1AFA29F7B1D7DC455B419BCB4462662295F9F3E74F0D2BD873 + 8C6D2B6863DDE75D98F3D08D95D6FF06FE7B06D805E3153340283266B3DDCF17 + 040740269361F5EAD52B648080102F322C8A0F4E9AD9C4718AE25EA8CCCDCD4D + 2A2929019FCF7FD0079E1B9F4306D724AC7D7FDD071167BBD53D31232323904A + A5728944F251565656FD7335E0703846C2766EDC25DC2E2EFEB5B323A6B1B111 + 00603299BC3233334F444444D43FB72D58C5F11EFEDD7977A76847485147972A + 760E0E0056AB150078003C6F41C19E634F0C77D81D0683D32817BD1A7CDA0147 + 9C5EAF77C5F87C3EF6EDDB07005F5A2C1637030484104200E0CAC92B4F0C0721 + FAD094F0B4B56FAF2B5275AA5EEFEDEDC5DEBD7B5151510193C9048661101414 + 74707C7CFCDBFCFCFC675C84047A615C50AA3031F8C7EB5DD7DF686868000094 + 9797233D3D1D369B0D2291E88BF1F1F1A3191919D06834CFF01812E8E938716A + E8EE0D3F74A9BB13EAEBEB5DA1D1D1D159382D3A3469B61EC9C8C8C0AD5BB700 + B8D7000B9665D9858D6A796C8AE8E93871DAFADD1BCE74DFE849A8ABAB734DC5 + E7F3C1300CA1FDE8435EB79DAD7FDE1871C1E71B58448B7DBF17CA6EB70F8FD9 + 2C729F2D82533D377FDBAA542A5D311E8F07854201A14FE0E13B9583CD9BA223 + 2E112702DC9F5FB2063E29FBCCE3DF120106D2925353E293124E77F5766FAFAD + AD9D07671806B4AF30DB50AA6D32ABC75A36BFB6D17FB6CC1FE8696A4017151D + 2DDBB235E654775F4FA207F81143A9B6D1AC1E6B2184042E36C9631938999E37 + 97AF8B8E8E4E91CBE5DF6B349AA49A9A1ACCEDB9AFAF2F140A05685FE15143A9 + F6BCF98667F8631B7083CBE47279A156AB4DAEAEAE9E076718066BF8A2AF0C65 + BAF366F5580B8167F8AC019605CBB2B6C0171F99070098B24F0FA5ED4891CAE5 + F2933A9DEEADAAAAAA87E0625A9CC30E4EFD62518F5D78D4CA5D064CE67B0090 + 2A9149EE07AEF39C4F408C5ADBD0BBF13B12BE1B181878A7B2B2F2A1D7EEE7E7 + 77ACF95CE3797F8E6F3380A55704803AFC530EDAD5D72E511C4A26914A2685EB + 858B26F278BCA2C08D418A7E9DE63D0FF05CA55279EE6AE7B50B1445F92D070E + 00D4F4CC3414C70FA05D7DED0AC5A1A412A9C44A87D2F392589675BEB2F9E50A + 9AA6D39B9A9AE074CE9E4C1F1F1F28140A88E9A0BCAB17DB1BFAFBFB2F00102C + 170E00AE53E9EDE58D339F9EC0F6A8847880341342FCE76253F6A9F6BFC4D6E3 + E6E97FEA0B0B0B5D2BDFBF7F3F42D6867CCD313A9A56FD4D355314C55F0A78D3 + D04FA5647DE81ABB1AD1B47D1A8A6F0E208FC9EE7829243480B8758C30493802 + 8385CA8BCA4B242C2C0CB1B1B1888C8C9CF1F6F6CE9BB2DE3F78473D04E2843F + C1822EB38886EE1A167F039E24140A71F9F2651197CB355A2C16AE4020D00228 + 0650363C3C7C2F2727072A956A49B0272DD98AB76DDB062E979B06A05C201014 + 4D4C4CA85A5B5BA1542AD1D7D7F7C4E0651B989999C1E8E868B1D1682CAAABAB + 434B4B0B2627279F1A3CA77F017EC9E65036311E9F0000000049454E44AE4260 + 82} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000006BF494441545885EDD87B4C5B + D71D07F0EFB9F7FA7529AE81F01A4B13C03C9378318124CDD634DB923E16EC34 + 6469A3C90A2662CB364D59352D5BA5AD8BAAB60152DAA4A9B2061B232486B23F + 88906A594D4C026A2AD2D23C90CA984AAA6008DC05A76B404D0C7EDC7BCFFE20 + 781803312979FCD1EF3F96EF3DBF733FF75C9F7B8E4C5EFAF10E94E417E151C9 + 1FDFFF4BC477AE24BF083F7FFA857700AC7E38A488FC240A78E773F5E8F0E8D3 + 63C258F8445A411A8627AE932FBDFD8B2A488C4BA0EBB3D7104F97874E1D536B + D5482F4827B3B59F02624C18C3C06703E1225D868E7C79B31F1FF69C5954A03E + 250BEBB3D7CCBCD69C406651AF7E1FF21DF0DBE63BE0B7CD2305A494461D7B24 + 8054A6B74381D03F650E282E2E467C7C7CF8DCC3031210C2108651309FA996F1 + 79E3E9F2DF03396457636363BADBED86D1687CC840008425E793D6A7967EFFC5 + ECA34CBAE2A3DB415F3321E48A56ABDD6AB3D9B062C58AFFAF240F3AAC8AFB24 + B124D9BCB42CDB3621FBB7DB8FD8E1F57AB165CB167EF3E6CD2D3CCF6FAAACAC + EC7A2823180A8997F43BF24C4BCBB28FFB6960BBCD6683D7EB0500B4B5B5A1A7 + A74709E0659D4EF7E01F712814BC3844469E7F7C43F2FB7E1AD8515757871B37 + 6E44B4F1F97C00C01342E67FC4EBB2D62027356BD1703EBFEFE257DCD8CF74F9 + 4BDE234AE6C5D31F9CA6337185858558BB762D003489A238034810DE518C7C31 + 028D5603C5220DB2224EF149F2AA1473568EFAA83F1478E9D2A54BD46432C1EB + F5627070308CB3582C6018E6AF94D296B367CF4E0312801012067AFBBC8B0203 + 0030A433F54719266D66DA7B7E31B0CB66B361646404C160107BF6EC81DD6E47 + 7C7C3C2C160B58967D95525AD5D4D48413274E3C8059CCA033A128B9347DEB13 + 47FD08FC620A0700ADADADE0380E959595502A956059F66F94D2834D4D4DA8A9 + A9B9537E5F71A433A128A574D94EFD11512959EC763BAE5FBF1ED1A4B7B7171A + 8D86B02C7B0032DE9C8E03A6EDA841013ADB62788F210CE94C2C4A2E7D62A7FE + B0A89476DB6C362A0842449B828202582C16021107D831FA2E771311B848E024 + 320AA88E5723AD206DD6EDF85CF1DFF677C909A434E385AC5A492597DB6DF628 + 5C7E7E3E76EFDE0D04E86BC17EDF11ADA8394508F9E1CCBEEEFA1B546BD5C85C + 9749AE8C5C8D6974350AF5A7A9BAA4AD8A5CFE509011F7D86C360C0F0F47B4C9 + CBCB4379793968407E5D700EBC2D79FCCE555B573D39DB038C7992BCDB567757 + 2021E4E3E7373E6B7AEAC98D878254ACB4DBEDF3E1DE109C9E5A6FBBE0D47D4F + B7F14E7D549F8B3949CEAD5CB9D254F45471B508E957F5F5F5181A1A9A158720 + 7D53707ADEF276084E506C9CAFD37B026624A4E3F75BF64EBFDD730683C1BC6D + DBB6832A95EAD7F5F5F5B876ED5A444D6E6EEE14EEE0B0D373C8DB213821CF8F + BB6720AFD420372D7B0A78CE603098CD66F31B6AB5FAB70E8723BC324CC759AD + D6295CCD8D187100C0513AFB563B962858EE5C7E6181C96C36BFAE56AB7FE770 + 3830303010D12627270756AB15ACCC5409A7168603000E936F966F52F429107A + 0484264231158E07273EDDF9CC0E536691FE35B55ABDCFE170C0E3F144E12A2A + 2AC050522D5F0BD4D261D10D19EB62C5010033EE1F07805FF289FCBF8C6546A2 + E015772DBAE5BFDDD51F1A7ACEB061F5019EE75F6E68689813170A856ABA3ABB + AABFF9CFE8872A5EB97E213800606A4E1CC6C52F2E7F05E0A77C02FFB971BB91 + 2879E5BC45B292BEAAD527FD4662E43F343434A0BF3FF20F26BD5E0FABD58A50 + 2874E8CC9933D51F9C76BAC603130B1AB930703C3081F2EABDB8D077F9BF7790 + DDC6322351C6CD891CC8C9CDFD383129719FCBE5C2D5AB57A3701515151045F1 + AD8E8E8EAAF3E7CFBB24498A5A21620D0700E3810958ABF6A2F195BA9B25F945 + 9B353ACD696399B1F8CA4757685C421C008437AE0CC7FEC3F803E3339224A576 + 77774774969D9D8D8A8A0AB0606A7D43BE9A31CFD7AEAC25CB360093339FD512 + E832745188C7963C362730E2D5CDAB34687CE5388AF38A1E27849C2284CC782C + 948EC85FE76B0A75077BFFDDBBBDB9B9397C666AB6722CF736332A57A904B4B1 + 845D13FB584DDEFFF25D2BE60686917F3E8E9282C9BEA72F3F3243115C8A2592 + 960CD7D7D72B06070761301850525282E5CB971300B554A67F527928381F89AA + 8F257705CE9763C78E61D3A64DFB44513CDCDDDD0D83C100954A350AA0198083 + 52FAB9DBEDC6FEFDFB2149D2826073256660525212DADBDBC171DC6542888152 + DA4E296D00D01A0C06036EB71B274F9EC4850B17160536959877339999996059 + 3603805396E5320003BDBDBD686D6D85CBE5C2AD5BB71615B660602010802008 + 822449073A3B3BD1D2D282BEBEBEFB829A9EFF0185E7B74428D64A2000000000 + 49454E44AE426082} + end> + end + item + Name = 'save-all-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000010349444154388DC592B14EC3 + 301445CF8BFC1719533151656065482436D42543A70C2C480CE94685943FE8DC + 74EBC8C0943FA8927F40DDA28825DF50B1E4B160D4428292327017DB7AF63DEF + DA168EB45D6EB8B90A5A46C8002CA2077C6F8AEF5D023823CEB706C0F7A6A3C9 + 1664B6CBCD59643B91B797FD50B202F2096AED6800CAACD4200924797ED2AE93 + 59BC92625D68B808A533C75FF4FF06E67891C5AB1F19071B9459D979815622D2 + 697ED24190049D9B8A75D10E3200F8FE947DB10EEF07AAA6761C55AD5DDF3D29 + 465124AAFA6BA4AAA999A5730C104EAE273B11F16C31CF73ED6BD992ABA60640 + D2F891FBDB3B17D889C8450FD07E635EEBBD334BE75F850F217052486849E8F2 + 0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000001C249444154388DCD943F4B5B + 511C869F73EF91801C82918480B78DB14410841094080EA20E0E0E1DA4080E5D + BA140AC58EFD0685D242C53F1F209031BAB83988528782149DBA18A50E16A377 + B8D66BA49AEBEDD0A4C6C45363BAF8C281F3E7E539EF8FDFE1086AB431B7C2A3 + 887555BBDFA8244067F431E99E3E005A03AD00A34DB052C0270990EEE9E3E3AB + 77C3C04893C1D680EDBF09CB8A03C34D26AB40911B732B953233E5715FAD562F + 64130DF001519E1BB5871220FF39EFABB0A214BD62F1EBB296F4ACFF29664170 + 669FF989A184B8CD23015CDB45062497ED1E3B853D2DF0FCF21CF9D3C0B55DAD + A72EF2FFEAE103ABDF2156A88337632FB5662BD441E1FB616340E7C001A00553 + 6B3EDA2FE01C3808716B83EB81EEB18B8A28ADF9F4F814EFC2A3CD6ABB1B08A0 + 228AD4444A7BFDD6D2967FF2E3440BAB0356F43AFBD6AFDD9B7FFE5E5FE71FAD + 038601BE178C06EB4E93C924B158EC0EC6B566720BC4A77A317C9F175D835D9E + 95B46E181CC7A1582C36C2CA50FE690064C92B65A529BDC4502263EFDA264077 + F409FC8280192454955E4514420854F8BA7133B9850CC0976F9B0088F1813166 + A73F204D3929208B102DFF4853FDD30018F1A9DE1B86DFD56A7706D8E95D4C00 + 00000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000246494441544889BD943D4F14 + 5114869F032341287637EEB0C92E09ECB293509850299DD8501163213116FE03 + 2B1B63B471EDACD5D25828893FC0D858D06F69C81488CB1640309A2C6B4362C1 + 6B313BE39D81FDC0104F73DF39F7E3DCF3DC73C6C8D8F4E4145B6F9B98D90980 + 24999965F5A0B9584B92E71E0C30D51B8167D9E0E7B49BC08AE7DEDA3549CF1D + CD597AD09C244B02C4360CCB88882469DCCC9084373D3975E1585C87E7A21905 + CB1044160788FDDE79B00C409460890F4F10011CED1FA9B3D7A1BA5CE5EBF76F + DA3E6C6186A2C59CD241A946505AB076B34D61B6A07C25DF979927499DBD0EED + 665BF3D7E7D93E6CF1E9CB67F5DD01AC2DAD5A7DA6A676B32D0CCB95737D518E + 59640038B2A7A3AFAC4E8D18CEFE9406181B74D38B304F91C5692559CAC9F70C + 6DB14F08673FCE3AE03F204A75324050AAB1B6B46A8EEB940E4AB591F0F409B0 + 60F599DAF03E1858674E00F70D365F6E9E38731A410F7D03AF87571071CD57F2 + E42A390C4B0EC8EACE5E87EE4137CAA8F70671F7C687A73AD9B57C25CFDCB539 + 062192A4EE41F7FC8822250378F0EED199B85EDD7F91AC1D82A801343C33B389 + CB134AAA8FBF255B2C16F17D9F300C939BC73FB7E4BB0FA287AF1FB3B3DF624C + D2C7F2D5B295AF96DD7204C0F77D161717474291B59DFD165BBB211E621DE343 + B012DC76FEC44852188684619846921DD3881A40C30DE4FDF8F5F3B79F2BDE03 + 36EA37EA778E8F8E05649B2DB15EA5A9BA5C35210A95428228C612670060C1EC + 021B4FDF50CC5DB96466EF81F57F6202E3B79EDC656B374C39FF00EE51B3DA97 + 510DF10000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000001ED4944415458856364C00372 + 833218F49575F129A1083C7CF98881059F027D655D061763877FB472C0E57B57 + 99F03A00060E4C39F09F818181C121C781316749F97F722D9C12D3C9886C1603 + 03030313B986510B8C3A60C01DC0822FABE92BEB30FCFCF29349C55685E1DFDF + 7F0C2F5FBE620831F16378F7F53D5186FFFDF797E1D68BBB0C2F3EBDC2999358 + 88C96A32FA3270B6B8B8183176FF6760606064606060D879651FD3968BBB702A + 8467436A66B5FD93F7FF6764646470C8716014E0E4C7AB9EA8728012A024A0C0 + 3039BA63E01CF0EFED1F86032B0E2004182151030334CF05BFBEFEC22B3FE0D9 + 70D40103EE00ACB9604A4C27233671BA38005620510218191989F6C08047C1A8 + 03F016C5B0761B3160FFE4FDFFB0C53D2B072BF90E6060606020A666C4976B04 + 6405181CB21DC87700A5E03FEB7F86CBF7AE628DEA3B4FEF11EF80A0A020C6B5 + 6BD7620D667CE0CED37B0CBE556138E599208D1706064626BA953D680EF8CFC0 + F0FFFFFF0DDA1EDA03E208A645BB9633FCFCFD334C585178AD8E970E03233376 + 47AC5BB7EE3FA9C14F94030E5D3ACA90D69BF7E7E7EF9F9142F2422B74BD7519 + 9898E9573CC07D64A767CD30AB7812333B1BFB3C4646C65832CC82B78491C1E5 + 7B5799F02542140DB67A560C25E1790C8C0C8C0CD40AED3B4FEF31144EADC029 + 0F00070590859FA321DF0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000335494441545885ED984F4893 + 611CC7BFCFEBD6FEBC737BDF57C3D1DC9ACE04116AE290210526696154441182 + 87EA929740280FE2B12E42A76ED2C96387BA14186158B04B8860ECD0B4A92C68 + F94AD166BAF9AA9B4F17375D73DBBBEDD5EDB0CF6DDBEFF93D1F9EFD9EDFF3BC + 2F810C46078621187939A18AB2145C864A4E609FBB17F5272DD3472DF41F5F3E + 7F9D79244B708F2ED12752695D82B65A0B738B994C7AA7A8122602CBC3ED7091 + C04C80020067E1C059380090B78209C47911E160189C8583B9C58C49EF0725FC + 70A6AE116E870B81990000C0DE614F0A328ACC708454048BA5EC05656F92782C + FE8951311400084310894688FE848E46B7378B99DF0980CB2A383A308C3E776F + D62C66A10E3446BBAD4E2B84D30274461D36B7240CB86FE34F2494B7D54E3C86 + 0571110BE2E23421A40B20990505239F68C25D59B35601BC95076FDD3F516AF9 + 9A7CBC280E98F02CC77C5B5DCA3928F9178B3E918AF32200C079D3495ECDBEA1 + C1D04A3E021919EA19247E8F1F91DF116AA835A0E94213D1A9B5208480D2ECBD + 3E2928AD4B0807C3C91F82A115F85797151104808D5F1B58FBB996FC5C631070 + B9F522086120B099CFF9BC4E12253112033A4C6D50ABD50090B238072999E0F6 + DF6DF8DEFBB01BDBDDFF92A4EF9692F5C1D84E2C552E0365DFA82B82C552112C + 968C6DE656FB356CEE1475115084430513CF066A54293249E07B804AEB524163 + 330916E3A328655F8315C162C97959D87B48CF3B71E84728E57A5528B9058D5A + D83BECC4BFBA24FB2D82853F054A6956410DAB016FE541E3E969B5D55AF98209 + 9E4FBD901B8AA19E0750E5A81E3DA747EB9556A84E645728D97D50A551014077 + CEB87C13DB6C36701C07AFD75B88570AF6FED69C3179EF6296656132990A122A + 0406940294A6146639C10000059E995BEAB61ADC0DA5F6498379F9F135A252F4 + 1DA5B86173D9361B3B1BB30EF0F97CF0783CC7A40730B30B73B83B368888149D + 02C5756B9B35EA38EF3836815CA8006076610EF7C6063131323ECD6AD8ABF5E7 + EADF6A588D211A8A266BB3EFEC25D94905960763212024FD9D4BBEB59E92C1D5 + DC86899171E8B5FA4E42C85372D80CCAD12DA7CDA409B437B7E1F19D8720E4F0 + 155092FE27F773C6FC03AEBDE8EF996E9C160000000049454E44AE426082} + end> + end + item + Name = 'printer' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000000D249444154388DA593B10D83 + 301045DF115A5660030FC10A9658231D0CE13292C7806522537A0D3A9C023B89 + 42208EF89D65DFBFEFFFEF84086B2D4DD32C64C03957B46D0B40F979D9F77D38 + 2A36C6C8FBB9C8E97884D304A5B51600A55476515DD7A43A99A629CBB80F0440 + 209AF8CBB83D12638C3C3DB8EB9BDCF54D42087F913D6354E3752D1491DDD747 + 04B0CD780F5DD72D121B9D1EA40D0180D6FAAB92611816A2FB099B183315BC62 + 74CE15B00E4755554B8E82799E2FDEFBF50B69ABE23602308EE35715C938EF3D + BBDB989B44C203EEB95089513AFECF0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000001A649444154388DBD943D6FDA + 5014869F5B99C16470A840082F91EC295284182C75AC183C7441FC032F0C5EB2 + E43F2026D4953FD18585C1281562C443C4E058AA60A52A03F6C0402D850C0487 + 24578961C8BBDD7BCEFBE89CFB71044FD2759DE170F81DF8CD71AA3B8E339A4C + 260028B28C5EAFB7CD42725D57BCDE9302E7F3F91105BED497939D9F0554DAED + 3600F97CFE6448ABD5A2D96C02208220B83D889D03B5D96C96E9524CD314C01D + 10EDF74410040FBEEF6F57ABD5C91502140A052CCB120A80EFFB847F23FEE7BF + 0270B6FCB31542BC7912EFC9300C2CCB7A7E36AB8B6FFCBBFC2100AE7E5D676A + 59A61458BE1F50BE1FEC404756270502542A151A8DC651807EBFCF62B1900355 + 55C5344DE1795EA6966DDB16AAAABEC8957E3DCFF3D0348D5C2E27052549421C + C7D8B6FD2626050254AB554AA592F42C97CBE5763C1E4B7D0AC8A7C693E1C3D6 + 5DD70548FD0A503F88D7809FFB0A354D9342E238663A9DEE9737EC7ECB0EE838 + CE08A0582CD2ED765353144524492205AED7EBC3E55DA7D3198561B803EE27AD + AEEB69866118006C361B295051943407200C43DE9DD8B233CDAA4775E781ABE0 + D3AE910000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000001D3494441544889A5563B72E2 + 40107D6F8B2320672448019B6C468C8329D5EE2D2026D86808ED3219A771E640 + A24AF619544C06F916BAC26E6F80662C8D34D8C22FEAAEE9EF9B1EB58806B4D6 + 58AD568F22F24092002022D22707CE9E8AA2D8AED76B17738400F23C97DA1124 + 3BB2AF2BA57AE37412885CFCB32C938E750024A194A2F5BD9A80A4AD6C1045D6 + D7C7B7CF56792B821449A3DF906CF5BAF27E8AB4D64E99CFE75FA62849123463 + D218F3682BAF6D1722B2D8EFF79F6501C0658A48BE0178B3B144043C1C0E7F07 + 451A881149E6792E5996F55231F0A139394D532AA5DA97FCE7FB2F2BF2CEBCB4 + 82DDDC815C704930FBE90EEECC8B9B988FA6287406D414D9E7FEE3F9B733FC2A + 452E819F713A9D228EE3263521B973763C1E713A9DDA1DF809E238B62337B803 + 11E92668DE412D1000B4D6FF1A76129001404862B7DB75E801BC3BF05E25C7E3 + 31A228F29B6CE17C3EA3AA2AA79364EF1DF44D64144598CD66BD74595D445A09 + FC58C197BCD96C06ED034B918F11C9A7BA1A9BF95E4416B750547F8B5E9BDFA2 + 5151145B6B9C2409269309012C809B287AADAA6A5B96E57B07CD05ADB5C672B9 + 74CEC618186380EB53643BA788A02C4B5C5DFAB6B5344D077F87FA0625B8D142 + 7F09D7D0B7D1FE03767C81D703C53B4D0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000136494441545885ED57BB7184 + 30107D3A93D2822AB08AA00566E881C4CEA00720F38CCA80663C0AA5404D901D + 9718D97368F958DC1D012F432B468FB7BB4F0B03813CCF2184A0C29B60AD4555 + 55DE5844BD2484409224D73D0828A52E548C2430A22CCB21E4F0BAAED95C9C64 + F62C9C044E0227818872BCBD5C100038E790524ED6ADB56052CADD1C6F060380 + 892129A52ECE09431D6F250987D1215F5F03F70BDFE99793EABDFDB832C666BD + 3C145E05863BB99E4E80790AE65198A440749FBF5FFF60F9810314E1CB09CC4E + 444BD3CC5A14454176D339922D2A30224DD34DE968DB76958939024B52755DB7 + 29157F0F6F9A8681F096C85AEB9DDB39E788E3D8DD92210AF47DFF668C99ECD1 + 5A23A2FE587EAE69F71CA2803106599679F71DA7069610A2C01C8EDF867BB9E1 + 66025477FC075A6B327603E6036AB38C85496E0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000022A494441545885ED98B16E9B + 4018C7FF34A803CA402406CB8351D9989A478822DD90D16FC19A4A3C83273752 + 27061E829D25E98897783148A98CECADB52B5942BD4874A08B21957B87CFE670 + 6DC9BF0971DF1D3FE04EDF77A7A0065DD7E1BA6E5D48637CDF479AA6DC76B5AE + B3A669E8F7FB1F013CC8165B731F04C1786FC1353A809B300C0B695A000821CA + 7AEC5A4404010061183612DA84102214F74EEA535BE02CD894B36053CE824D39 + 7A4155D775689AC66CEC743AAD0B1886816EB7CB6CCBF31CAAEBBA65BEE5A59D + 6B00B02CAB0DBFEBE170C86B5B4551342E53DD03809BBA911CC751248A957C06 + C01BF711C06D958BC3302C64E75B41FE2942082155AE3EFE45C2BAF9DDBEABAE + DFFFFA89AB797430A14D98823FEC3BA5587FFACBC5CB7F153CCD5F0C00CADBEA + 925A49EF0A53F0C3D72F95D4C5EFD7C3D930600A5E2EBF1DDA83CBD1CFC1A317 + DCBAABB32CABAD3407CFF38AE9745A1B23BCEDF43C4FEA6A167D6961C16D6FDA + 16C282259AA671EBC76D504A4129DDA9CFCE82A669C2B6EDBDE6E46432299224 + D9A94F25480851448E23E238461CC752E6A3E33800BF1E04F026788FFA8ABA3A + DDEAF57A304D732FA1D96C86F97CFEF7AD4F009E39E12B00507DDF4710046356 + 846118D82CC929A5582E977B0932E6DFF3603078E2FDF62CCBA0A669CA3D4064 + 6D6628A5582C16B20491240946A311B7CFE92C1251642E12114E3F1797889E88 + CA46447005E0B125C1D5B6805AC13CCF1145D118C0AD34A50DB22CAB6DFF0394 + D6B359F1F32E9D0000000049454E44AE426082} + end> + end + item + Name = 'command-redo-1' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000022149444154388D8D904F48D3 + 7118879FF7F7C7FDF9B166969BC1B02CC23C88640416583AFA03515A60E4A143 + 9050E4C104B3439720A4C4539910A14104424160511DD2D34A2CB0281CAEA175 + 292551B74A6573BA7D3B8882196E9FFBF3F0BCAF90C13C4D8FB017ED6F04FAE6 + 067A86A6BBAE804A01A0652210BB05B013E8B5F69D2CCA39DF06B284EA990816 + BE8770EE3DF64A4C5B2170C3F415BED0737DD3F14F7D990992BF268887067096 + 55BF14DD2C1691EB59BE5DCF35BB151500C9B263959FC151E247B7DC0E44DC80 + FC2B3236FBD0AC6C1DE8020A810A31BC05E45E7E80E9C9AF019A114A65F9C034 + 534ABD912D2DAF31F376B4225C42D106AA07984AFD8928A592AB00CD6E21364B + 03EE01BB9552958699B7FD38504F4A55247E7C198C3EB9C97CF83D241757E77B + 0BF05EED16DD66DD07F60095F16060C40069003A1263E1C189D65A546C764DAA + E12DC0DBDC8DEEF6740027007F2C18084FDEBD8886500AF4FE7E76FBBF3040CE + B95BE8D99E3B0835C0E15830303CD97E01161368A8A56FA7E273E97EF60D3812 + 0B0686966100DD5DDD700870189EFCBEB9FEA7805A43CE8F7E00C37C371F1AF8 + 1979786D050690FCCED12A44BA411D8805DF7E8C3E6E61717C245DCDCA74ABFC + 745873B8721069373D5B3597FF6CD43A58AB5B65552C8C7F4D2423E3EB0AB4A9 + 8E7A923391261475C029443E9B1BF3C6B2B615376A4E57DA0201D05C9B701DAD + C359E24773BA2C44360033D39D4DB3F1E1FE75057F01D9E8B4CB2247034A0000 + 000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000002E249444154388D95D36D68D5 + 6518C7F1EFEF7FFEE7ECF89F3BCD313147B8B63A989406B99252B32809490AB2 + 076631448A286AC5F2811ED688264605E18B3023584C900AC9DE44B545889212 + 991284100D21E5549B7BD2531EB79D737EBD582D3577D8B9DEDC2FEE1F1FAEEB + E2BE4519357B5533352D9D09600BF0D6B9235F8C0DEE7A0E8A85A94C500E18BB + A21660155207B0376A5A93A87D720704B1FF32E5808A57102D5B7B420A32126D + C092B02EFD697CFE35C5DCD11EB0CB03F3032799F8AD8F68E93DC7503020A90D + 5814AFBB765F6C6E7DF1FCD1AFCA0301F2BFF7913F7D8AE44DAB8F0023818236 + 703A71D5C2CF8228654D8D33AB8ACAE5EB482E5C4610A5404225E078FD0D04C9 + 08D00B92DEB4BD1BB13104886E7D8039EBDB8945A934F038B01C9827A9E404B6 + FF3D0B925A6C8F87952B1EA266C37624B5835E011781C3C061DB79A9549F0084 + C02393AE7F0C6B1EED40D236492FDAEE366CC63E3D71EA3885D17E8AD991CB2A + C9C5B7134BCD0D806E49A1ED36E0DD50896493C456BBB8CBF653E77F3AC8F09E + D7280CFC3A6D4B55776FA072C5BA00D325A9D9F656DB3BB2BD5D84A0676D466D + 36E58EF530B8B3F5A2977F396C4E73BB30EF4B7ACCF6CB86B7B35F7FC8E8C7DB + 088195C097CE8FFD35BCFBD592D8AC9BEFA5BAB95DC04E491B6D77006F647BBB + 18FDA8138000A916C88CFDF203C5B34325B71F9FD78860B5A4278C3B81D7CF5E + 800184D843405DE2EAC51026203F3E2D38D17F02430FF69D8803976293201C04 + D604512AAA7E70CBB94B031756EEFBCF199288CF6F3C503833C89FFBF7FC2FA3 + 051FF4DDA2203864FB3DDBCF64BFE9E6CCBE77702E5B72FCE92A965AFB740605 + 91A4E7810589861BBFADBAAB2517AFBF9E8A862554A497327EF278C9555CD461 + EABE56AAEF6F15A803E9256002FB1090018A489B329B570E17863233EB70ECE7 + EF3050916EDA2F059F0045200D5C87D40074677BBBB2335DC1D4470DAF6C64F6 + 1DEB492EBA8D2059F9CFEDE475FFF687298CFC3123F06FF8F41FB39EA8739D00 + 00000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000003A2494441544889A5956D6895 + 6518C77FFFE7393BE7393B7393A5D3658A3BCDC2A21A5313C9B024C1911AC9A6 + 04951411580E3329CA0F4144F5C12FD2DB20AC6D95BD9851831506665922686A + E98631CC66E328B617E7E671E76CE79CE7EAC3D9700BD9DCE9FFE97EB9EEFFEF + BA2EEE9B5BE420B7B894D2D7F6E278053701CB805D89133FD0F5DE26480F8D89 + 7572021414E37811803D480DC053DE5DCB99B6F11D0804FF3FC032292C3BACC5 + EC32A24EE8F170C530C40D5C4D2617807FB907D243846EBBE7BCE067A006A95A + 702630A3AC256FF67C12C7BF07DFCF0D003078FA28645284E62F89611C12AC07 + D6026D819965A7DCE259247FDB973B6004A250986079650770588EB34E500DB4 + 04E7CC6F730BA6A2D1079CC269E42FAC2218ADC0094FC96E4AD7F2BE2A3978B7 + 2F05D7456805F035D9D6D700CDD9D36E1E450F6F61CAF2C77042F941E07E6029 + 7023E069186266681470646ED9C9C8F242A01C91C4582B7911A66FFE90D0BC05 + 487A04780398936BDB46CBCCF6068A37BC8E376F81907648AA35B324F0115813 + E82F2079BD15985950D207C3551C04D6072277AF027811D864666D408D99B5FA + 03FD245A7E22FDCF5932DD312C93BA66964EB880A9352FE1780579923E91B4C8 + CC0E19AC36F3E301602EE815A0DBCC5680C5E2073EE7D257DBB181FE715B202F + 42C9967A142E70311A816A33FBD5B007F1ADBFB7711B01D0D392C266FE5661B1 + BEE677E9FB66C784FD9517A1E4F906423757BA18F564DFC1318395F87EDFC5C6 + 6D5C39B8070758616683A02F063B4ED1D7F4D6C4E6A17CA63F574F305AE902EF + 4B7A14F81DA8C2F77B47CC011CA432E0BC99F5C6F73582F9130202256584CA2B + 91A893F48461ADC04A33BF67B479168009B217C14F5C9ED0FC3F3A6D580BC603 + 6699AE8B0D2F73E5E09763021C8C766096A4A9917BD75D976BBAB39DA133C701 + B6034BCCFCCE8B0D63331F915BF4D0E6A8A465407B6066D9B1F48533A4CE9D1E + 9F90493170F43BD23D311227F6A7E2FB3F26716CEF3543357BE79F5149AD403F + B0C01F4A9EBBB4FB4DE2073E033F735D158D27B7684D6DAF240356015572033F + 7A77DCD79D5FB9122752885378034E308C53340DBFAF6BD20095BCB00BEFD6C5 + 0ED2DB92369A5902F8146832AC5D288534E027E3B1D833774E1AE0F4ECDC4AAA + F36FDFCC9E35B30D4037F024D0247412F803B386493B0FCBB5649C8123CDE4CD + 984BA0347A52A80E380C740067815348472C3DF44BFFB77593068CF94D82D10A + 228BD710BA65110A7AD9EDE1081B4C70E1D5D59306FC0BF4A579797E0C1AE800 + 00000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000045F494441545885C596696C54 + 5518869F73EF9DB9B3C0B4749962BAD0861A2B0C652B56544ADB40084D001311 + 0D44D468EA16D4D408C644028A86841F908889064121D860C2524B886890A5C1 + 8CF043D28EC844AC2D08AD433B74BA31FB3DFE68202538543A537D7FDE9CEF3E + 4FBE7C39E753497154E724B4CC3C8CC15E30E2A9FEFDDDA3973C4CEE675E47DE + 8E8BAECCDA6D2094116B463E710FD19C935035ED5945514ED8CB974CCF7C61CB + 88126A2A0588C7B0972F3D2B4C7A0182CDE6BC926FB5EC82AEE0B963801C7B01 + A3CF4FC8EBC636A7E6A8D0F462609339BFE4889A9DDF9D4822B51D00E2011FA1 + 0B6E6C65354784499F0A6C34E59534AA6959D7432D27C65EE0A644B8DD83ADAC + E6B050B5194288F57AE1B46F84C51E089D3F3DF60200F1EE3F89B47BA4AD6C71 + A350B5878077F5E2598784C5DE3B5C62CC0400625D9789B4B5485BD9E206A169 + 8F016BF5E2590785C5DE7F53624C056E49B47B0CDBECC58784AA550375E6C933 + F7A39A06C25E372251A1B9B014EBCC85E89367A058C7EB08914E12F78696958F + 6273E808B10F180754F7ECDB74ED0E0173E13426ACDA805E34DD8510B5081681 + 982C527C6949290F86DA3DCBB5E11FEDF35792B16AFD78A19AB6217806C95124 + 1F813C27917E632060C878745440C5EA40E81633B0178913783DD2D6CC2D017B + C5D364ACFE2057C0774018C99CD8F58EE68193F5049B8F13BD7A11A4312AB8B9 + A814E75BBB3581E56B24F7019503EE868EC0571B8766C094FB0039EF1DB22B26 + DD0D5C96522EEFFF7E67A8B7612B32121A15F43678DD6E55B139EA813940E5A0 + BBE1B27FE7DB208DA10EA43FF50E8A49DF3C54229FECA97F3F34707C4F526018 + 1AE4EC21F81EA01CA81A0E07D0B49C22AC53E71502B54065FFF1BDC154C04D05 + 53C8AAFB52516D8E5DC03C2965D58DB387DB86C30134EBF46A403C079C890FF4 + B803FBB7240DD7728A70BEF1B950ED8E1DC00289ACBAE139D5EADFB5EE8E39D2 + CC935C000B810383A7F723C38349C373D6D50B35CDF929500354853C4DBFF93F + 790562913BCF0B8B1DA004644BD0733239787601CEB5F5A869CEEDC0E34075D0 + D3E4EDDAFEF23FC20114210408315E426FCCD7969480E5C147D0D29DAF022B10 + 2C0CFED274BE6BFB4B09E1008A448294FD0291A666E4262510BD760969C4BF00 + 2A829EA696AE8FEF0E07D0643804E0054AADAE8A6391D69F472D10F6BAF17DB8 + 3CA83A322F047FFD7144388012BDE20538062CB357AC00CD3C6A0180487B0BC1 + 9613FF0A0EA01AC13EC655AEBC2484D8AC58C6FD00F24AD8FB535212F712D5E8 + F36371CD0F6819132702AFE9F797ED8E76B6C6621D17FF1B018068C7EFD81F7D + E29410CA8B42288B6CB3171D94E11BB1C81FCD245AA7532A10EFE944C66351EB + 94B98D20D608A1ACB6BAE69DB1CE58E093B108F19EBF927E9412E5B685C4B1EC + 4DD297AE71005B6FED0370003817EFEBF61B7DDD868CC730FAAFFBAE6D7D7E74 + 6FF3DD04002CD3E63361D506B4AC7C9748B011C502BEDCAB75733BC744000045 + C35A5A997027347ABB7D9D1B97A4A403FF7BFE06A401B37D23E7691000000000 + 49454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000005A4494441545885CDD85B6C14 + 551CC7F1EF7F6676B79D96167AB11742022D25E225A214A262D03411B16A00AF + 0411435510B5560A788B3E34E8033E0062BC2012BC1034048D260AD6DA780584 + B6409050A58004AC205DA82D30DB6977E6EF435BA058A59A5DEA2F99645EFE39 + 9F9CC93973FE07FEE791780F60650D2363FE7B98299986D7DAE41F5D3819BF35 + DCE77A238E3600ECB1B71218947DB5699A3B8369D9F9594FBD8F9192D1E7FAB8 + 034140A415910C90EA404EDED0AC27D7F4191977A053F3297E4BD36E60024212 + 4A7520277F485F917107468FECE7F797A6E1B536ED4499803010A80EE4E4E7F6 + 0579013E711772D134BCD6A6ED2813814CE04B2B3B2F2B73FE6A8CA481FD0BEC + 81744ED4A86A31305844BE0CE60ECFCC2C5D8E84ECFE0576238FBEFC00BE7B6A + 33702B305444BE081514A65D347755AF48F3420201FCE38771F7D4608F293E28 + 56700B500ADC6CA5E7AE0D8D18DBE6D4AC07AFA3FF8000DEF1C3B4EDD98A3DB6 + F817B182B508A5C08D5D48F76C64BF00BB91EE9EADD8638AF78919DC81F03850 + 64A6E7AE0D1614B6476AD68317EDFBAFCECACEC34CCD8C39345450C8C0297351 + 659288AC0536ABEF1747767EE5845F9DF3CFC0844BAF23E99A29245E518461A7 + A4009703B922D2FB92FB8F51D5EED74922325955AB81DB4E7CBDA6AD576060C8 + 4806DDB79050DEA8A008F782CC44B85A102B96B0F3A067477EFA61C55F06B4AF + BD9DB4192F600442138157456498AAEE427951D12D0807514E89C4EE20A4AADD + E7AA85824C57D5571456741CDE470F6052D174D2A65520C2421179465577ABFA + 37A952E5351FC1A9DB80DB50877FB29968F8D798E0ECC29B1974F73300155DB8 + D715CA9CDA0DFCB1A6E20C3034F25AD2A63E8F088B45E409557D13783C1A6E6C + 6F5EB788485D25F85E4C50DD491C3D9181772C00784E90E7557505CA6391BA0D + 1C5B5E06BED70994904DFACC4588699574E196A8EABCC8F62A8EBD350F759D98 + C2BA7119B35F464CEB6911A950D555C0C34EDD060D77E1804E6072D174CCF49C + 5C6089AA5601F34F6DFE84E3AB9E8CF9AC9D839B27222FAAEA6AE021A7B627EE + 347040D10C0479160828CC6E3FB053E3854BB87202E9B39622A65526222FF9EA + 7F805212D9F6B97F2E0EC008E68DC24ACB4902EE0756E3450F1C5B191F5CA860 + 3419B31623A6F988882C56D5752833223F6FF5C26F96F73AA6152A2804982022 + 49EAFBEF3A3BAA89FED6107BDCF0D164CE5D85114C9C2522CB54F56355BDD76D + A8F58E2D7B10A2EDBDD65981EC3C806B1475147E70367D181F5CF9DB18097689 + C06BAAFA992A53DDBD75D1A6A525FFB8080D4C0B201F652F106DABDF1C535C30 + 6F54E7CC85EC1902CB55A904EE72F7D676342D9979DE1DA2F3C02A0C005ABCE6 + 2331DF52122F1B8F9190740BB052A11AB8C36DA86DEF0BEE0C105C20D1B05362 + 8A03503F0AF03DF00ACA14B7A1B6ED681F716780CA41609811B2090C191953E0 + 89AAB789FCF84D4B347CA83CB2EB9BC8BFC101585E4B13409D88CC51B8D81E73 + CB4F2D87EA630654D7A16969C97FAE37DAF7EF00A854F080BB93C7DFF3B71D56 + 7FC468DBBD11ED701B51FD1C648E31202D397552597FBB4EC7C4EBC0CA194E60 + F08806C3A00CB083F957567634EE217A786F7FFB3A9BA68E23FB19307EEA6F18 + 669A88942AD4275C76C3EEE8EFBFF43BD204F04F1C4782898446147E055C2F50 + 6A0482FBEDC2E25D46C8C6DDB7AD47AF7AC18100EECF5B08E65FE5052E1AF211 + C8381129070607F3AFDA943CFE9E88919C8A7FB2F95F5D3EC6223D1A0B09D964 + 3CFA0689978E0B0015C03CA00D7807F80874ABEF3A8E7FB2192FDC78BAAE65FD + 1BB4EDFA36FE40000C93D429E5A4DCF40098D648419E02B953045BC1070DA338 + 67354D0BC22B177C786A63EC0F19D0DBCD822A6EFD269C6D9518766A389035F4 + 6331CD65C046A01EF855441A81035DCF77CEF6AA431D31DCDCCFCE797B4709D9 + 245C328E60DEA8D3370BE7169DFC6E2D6E436D3C7CFFFFFC099F6B6FE33D1419 + 7B0000000049454E44AE426082} + end> + end + item + Name = 'command-undo-1' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000021049444154388D8D934B4854 + 011486BF73EF34633AE3288AE1A387988652A4124241BB72D3A2841665D922C2 + A220491083160546448BDA4404AD2308573DB448F29158112911421198624CD9 + 34893A77669C7BE79E16818C498EFFFA9CEFFCE7E71C214DC10B75045A6A7600 + FB921373B77E1E7E422619FF3457032F804A23DB93B179091068DB89BFA5BA0A + E8031E6B32756EB6EBED9A001EFFF16A02276A2A04E903FA5CDB391DE978A58B + AFBFAF092065A3C7B60003C0B8A2273566A79CA985FFD55BAEE5C417474244BB + BFA0511B291B6D1E1431F6AE691CEAAA32AAE80D271CEBFEDD3E8494BC3F5A69 + 88D10F8CA9EA19165D57A3C995560BB3042814E410D001DC717EC53B25BF6B37 + 3907CAB781F4034FDD85646BF8EC4BB5C723CB090678B71792DB568BAFB66897 + 880C801E311383DF304B03116F557E2F704D7C6645F6FE4D3D897733B8E1789A + 7B48CDC4883D9BC4575F14F294F883204D260A89C169CCD240D85B95FF1CB82E + 3E73A3AF6143AFF5E0F3CA18528A3D3987BF692BC0F9BF87E4C2ECE511AC9EAF + 1F8146600259254ACB598AC64CB798189806E5873D35FF66FEF687E52BA429EF + 5203EBCA83ADC06A7356CA28CE26AFAD8EF58D9BEB05194269CE78F09EF25C0A + AEEEF14BD017308B730A808382740277DD68F25146806479F0D614B4835C4155 + 15C68053AE653F8C5C1C26F3CB392EA970ECA622F740E7DDB86325864344EF7F + 2215B2F803FC07CFD8A90415200000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000002C649444154388D95D45F6854 + 4714C7F1EF997BF74FCC6677EB9A4A54AC563011DC608D588882BE49110AE2DB + 4AC1944A23018D98B60F0525DAA7350AA2548BFF405010220A5AFA50411125D0 + 1A9B6869D51851118B244B9B98DD64EFDE9DE34362D590C4ECEF7166CE8733C3 + 61847189B5D45191AA0901DF80A6074FFDE50D1EEA1A7F6CD29877B09D7554A4 + 6A82403B22BB41D6984478DAD83B6074E7274452D501E09C887C866AA3C2AF5E + 575F49A00B10694A1249D53822724684CFADB54D082706DA3AC95DEC2D0D8CA4 + AA897D9934C06911365AD566557B74F0C81D86CEDE2F09039079B73719E0A488 + 7CA1AADF2ABA5F7D4BA1BB7FEA4A059B2BE0DDED277BB1179B19F91FFC4944B6 + 285A407934BA3A8D56940C7013386E47FC9E81A3DD644FDFC3B56ABB8D383A76 + EC77C09729445585D1B79F076C039A25E4FC10DFBE7CAF290FE2023FA2362062 + 0E58B58E080D36E71787AF3C9DF88D2201CCEC32828B6782239522B2CF18D3AA + AAE1E8574BBF7707DA3A89B7AC3808EA1A63D2AAEA4B99DB507CE9D981B6CE49 + 3B35893015DB97F545D62FDC0C6618F84E840B4EE1CF0CFAD223B4AAAA03F044 + D801CC0F25675D9248907CC73F135F7DD8277FF519261622B834714D44B6827C + E000786368B8BEEA06888AC80E604EA836F1B3CD17996AB8F3B75E10D9B0A860 + 66046A81D5CEEB0DEF6E063B8A5E071C1169063AFC17B9DE916BCF2605292AEE + 8218C125333F05D6B86FEFBD1EE478CB8A5DAA7A05B8EE3F1E9C1C1B4B685925 + C01C2033E17C94ADFB88C08228C5FE61B2E71F4E8995A7AA89B7D4CD10E409F0 + CB744678E2040C159B9710DD92445CE7B088345A6BEBDDF757BE49F4EB241274 + 3055E504577E881B0F27C498B48834A86A1AF8AD2430D6589B50651FA3DFDE5C + A05E20A0AA7B145A73971F5112088410D60216A51F38A2E83194FBD9F61EFE4B + DF2A0DF49F0F3D073E560005F58AE4FFE823DBFE80C2DFFF02F00AF12110E43A + 1D18760000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000393494441544889A5956D48DD + 6518C67FF7DF733CE7E8994EE63696274323AD65D17B11D584260E06B9822DB7 + B508B6C22F85D0CB87514104417D8820C22F11C58A08D7A0B1152DF7D29624A2 + 496EC18AE6983AE76B0EF51CCF39FEFFFFAB0F4737E75EB4D3F5E5B96F9EFBB9 + AEFBBA3FDC8FB11006CB5F7F80687D25C076E0B83CBF6F78E74FCC748F5E55BE + 189C85E485AFDD4FB4BE026017669F03CD3846CE9AFCFF4C7E954086BC12B0E7 + 319A902681570098F1B31208CC755EF0EA7D44EB2B31631BF02930056C146A4F + 7CD743F2685FF602F9BBD6929F99F966B0CF80A47CFF29B05F13FB7B187FB70D + 94153F81687D05850DF700AA33B33D802BB449E244E2F8392EFE0F72008BFDB6 + 1D6023B017F040CF481CC220D53E8892DE92889474499F1E67FAD039BC81F815 + 02B518FB1061E034D076F9964CF736C7322FBE9C0B7101F845D2513CA5A70E9C + 61E2C32E34358395746E3D68E66CC876040BD02B6937E86BB777929186C3D84D + 1D5BA38EE31C041E033A24ED34B33406862109B34CDBF3E3B95C286C500E5607 + 3C6B6661F9FEC782C6D41F63B235AD9B7122C102C3BE37B3477DDF6FC6780E4F + 33139FFC8E3798B86EBB4E6994C0AA08E1C763E4144700AACCAC19A890D80D7A + DF721F5A4DF147EBB050A0D0CC7E041E04BE0176B87D93DEC84B2D7843D71701 + 20D7217FC7ED1436DC8D394ECCCC3A8128E8CE1CEF7C9C74F72891F5B7A4083A + DF1A3C09D400E55618DA1FA98E69FA481F8ACF5C5FC013335D23B88371224FC4 + 26CC61CACCD9044CE700780371D2A74689AC2F4D5AC0D907D498592D50EA1484 + 0E84D7C5347DA417C5DD1B1A71FFBA48F0B64202E54567804660D9A55D946A1F + 62ACF1679474C7805A4927CDEC05A029108B12BA77D58DC7348BC92FFF04691C + 1800CAAE5876A9F641461B8FE127DD51A046D229E0EF2531CF4293E94B2160CE + C2828C9363F8497718F488D0076EFF14A9AEE12509E43D7D2BC072A004381BB8 + 5651AA7D8891175BC8AD2C4A00245B07F087A717250F56AD20BAA51233DB6266 + 21F97E8B2DFA6A890857C7287AE7619C65A112C33A81024955D774B018026505 + 5838404E71849C927CC2B53713BA6B2566CE1D86ED0556026F013D593958FDD5 + 0672D7AE8849E4490A9A5999A43A33DB666611494D422F7BFD537E560E0024BE + 00AAE776D3ECD92FE94D497BFC8934636F9C206B01330E4B0C022E701E68156A + 41A4D2DD23FCF3761B5EDF647602EE853896177C0FE67D769E4FFAE418891FCE + 92EA18063F73F32F883985AB9650E6A60000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000445494441545885BD965B6C54 + 551486BF75CE30574A3B1D2E6DA1404AADD8048CE5525A9511C180F8C0556322 + 26BE1863A2466A7C42ABF0A0312A158D3E7879821023371F8846A7AD09093545 + 295223422AA4B60C20B49DCE746E9D39E76C1F86564BD1369D19FEB773B2CEF9 + BFBDB2F75E3F4C52B6AA226C5545932D9FB4F4C914153C538DEF9DFB1779B655 + DAAD583A96FEB53F6700DA4405D3772CA6F0A5FB168AA6B7689AFEF2B4053372 + 663E21C0F41D8B296A58560EB400EDCA54AF0DB75FBB33009E1D7753D8505376 + D3FCACB2D453A137DACC444B6FFE015C5B2A28DC595322480B704199D693A1C6 + 3623FE4D774ECD016CB7BE706F5C8877D7AA5922D20C742BA5B687DEFD39950F + 73B8A503AE8D0BF1EEAEF7892601E09A426D0D37750CC7BFEACA8B3980FCDBBC + 7877BD577409005160E3E0DED3F1E881F379331F0570AC9B87EFED076668BA1E + 00D20AB521DCD4118DEECFAF3980386A4BF07DE09FAE39F4EF408A95525B485B + 61E36278CA3F55280B45C44A9A09A32B44E24490E1F6AB60DD06A070D70A0AB6 + 557D28222F64B190DB4128143D404029F5B971357A2AFC7E07C91F2E8F05706F + AEC0DBB8AA509000E002B66258516B7078CAE6E27389085E6029B009D8021C57 + A8E7A35F5EB81E7EEFF46837046E5EB70D355E419A812165A9C7428D6DB16C8E + 9E5EE6C1595F8A67FB5DD8AB8A2B81CF800A855A1F3DDC753EFCD64F993A8054 + 671F2A964E3AEBCA8E00CF89C866A7BFFC90111C328CAEC12901A8A134E97303 + C48EFE81D9971870AC2C3D20366DA920AFDBAB8B0F1ADD91987131FCCF311CE9 + 4451C3B259402B704599D6A681C61F93896FA7DE8911D997CF61E6476B74CDA1 + 078001A33FBEFDDAA35F8F1DC7A9CE3EAC8411B7AF9C7D54447B5134D9E0F4CF + 3D9CEA1E34CD4B91AC00CC2B31CC1B71E57AA8FC24B04FDCB6EF8D4B91E0B83C + 903ADB072E3DE6B877D63111D989C85AD7EA794752E7064CF372342B88F48510 + 8EBAD201DB1CCF1241AA495BC76F1B4852ED7F211E5BD49E8178556C9ADFFDC8 + FCA3A9DFFAAD6C2154C2C0BD6EFE34E059ECDABEFF1CC791A63344F79F0B020F + 034BC5AE1F9CB9D76F73D4966405903C790594EA146181E6B6B9FE3790849BCE + 30B4FFF75E602DB05C1CFA9BAE75F3B30250D134467F220C220805E3C6F17888 + 0E80EE82A7EF5903448C3FB3DB8C3875F4626721999B726842801188445BB01B + 32FB232BFFDA5244D39628458F9534139302C885F188DC8F57026C0602E9AED0 + F844944F39FDF370D5975592990DAB93278213C7F25CC956E5C5BBA74E17E453 + E0B81949B5279A7BEE4C079CFEB978F7D4EB7A81FD0B6091526A45E4E35F5071 + 237F00E2D471D496E079A20A575D692599952F52A8F589D6DEEBB143999C9933 + 80A25796E1A8995D0A20339DA2FB5C5ED1646C1E506A45BCB5F77A68D7C9D1EF + 7206602B2FC05EED0B8E3C8F4944A807ADC8F0A9C8279DC46E49D83903B022C3 + 9837E2736F9A8F66C2745788E4892089E61E54DCC8955DEEF437B114C52A1B3E + D5BE0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000005C2494441545885CDD77B6C54 + 651AC7F1EFF34EE7CCA59D4E9D29D4B65010A314D722521129AD46058D9A788B + 316E973FDCE82226DEAA0D0663A2D964538C349ACDFEB5AB91888AD1788972B3 + 0101A982C401625117B32B541098D2DBD076EEE73CFED10261054BD799E22F99 + 644E72DE399F79DE73729E077EE791319DED12C27FBF0ECFD565466D757A977D + 416AF3A13CD1462E79EE670AE1967A7CD74D2A1563B68A315157C8BB2FBE667F + 1E795070AEB8504B3DBE055521A00DB84484FEBCCA46323AD025845AE6E35F50 + 15043600D381DB35EB6C1D7CE7FB7CFB4601BA84504B1DBE055302C07AE072E0 + 6ECD3A9B7A97B593DC74F0FC02837FBB06DF8D530A05D602B3817B34EB6CE85D + D64E621C70BF0A0C36D752B870AA5F443E06E6AAEA7D38CE9ADE67B78F1BEEAC + C060732D81C66A2FF021423DCA22E083BED65D24DA3AC70D774660F0A95A028D + D32DE03DE07A94FB157D27B62242FCEDFC3F14FF1B733A6E36457F9AEE067917 + 919B81BF80BE195B116170F5BE71C79D060C34CDA2A8B1BA4090D508B7A1FA30 + B0B27F4584C1B7CE0F0E46B6B8F0FE19041AAB5D08AB44E42EC7B11F03FE95DC + 7488CCBE7E3CB56539B894A223DF9C8134D903C721ED8CBA4A7C3755115EDE60 + 809522B24855DB81570144C6F6AA1E95A7248128B0575376776A4F17F1B5FB89 + B7759E152B458B2F27B864E642236603636D1EFE7FAEA3CA1EE075557D351B1D + 1A8AB546486EFA65E321DE9BAA08B7D423224F8AC88BAABA19580CD839ADA02A + 0A5E8149C055C01D88CC45F51868B3C21B836FEF23D6BA0B6C3DB94E000AFF78 + 2925CD731061A988B4A8EAEBA00FC4371E74622FEDCA09D084BDB82EF0E09E11 + C2DB3009EBB2100273106915917A557D4D551F8A6FECCCF63DFDF9C9752E80CC + DE1E9CC134BEBAF2CF19AE5C1350E99E56BC0684445B273A98F94D1FA72B41F6 + C701D2912EE21FFC87E41787715F143CEC2AF7AF0454842740FEE09E167C0FD0 + 74A4EB141020D3D1833390C65B57B10D60045966CD0CAF354516A9ED477252C9 + 1371BA12C43FFA01B20E9E39655B15E933421388CB336BC2E664FB4F38DDC9D3 + 1BD6F429E456C03D820C5B35E1F51270E71C0990DE7D0CBB3B81AFA17227C864 + 8147103E3617FA8F26D677FEB2A33E81F4CCBBF05355F51B639A80A0BB26FC09 + 852ED23BA2394766BEEBC504DC5835133E43781091EA82C981B7E2EBF69FB9E5 + 4F77F4A01E83E78A891B45A458449A50F5BB6BC21B356193F9BA3BE7C854244A + E1AD17A54CB165212C1658651F4BF49F752649EF8C220137D6CCD236206C8C69 + 1231966F5EC5A7CE409A74474F6E85B6A228BEBA8A0322E609E0474DD93B7E75 + 684A6D3F8A297263D594AE07CA46EE49F1D4556CD13C20ED8303142D9A711C23 + 8D8085C8BBA34E75A9ED473001379E9913D6019523C8ACB7AE7C9BDD9722F34D + EE909AB2F15D5B896BA27F2130558732FF34A3AE0262ADBB1878F3DF0ABA4455 + 578AF0579025BE055539C39D48E6C071148D010138D7B11388B5464070028DD5 + 0FAA1205D6608FDE8D8C352660218817488E0908105B1181ACE3786F9CBC4CE3 + 59FA5FF82AE7406BD6448069C0C1310301622FEF26F6F2EE1CB386635D538E09 + B803400DB0CEEE4E724EF7E078A5A8F15240EE161137B02EDDD1FDFB017A1A2A + F0CDAF34223CA9AA7B157624B7FD34F62DCE475C538A093D3F0F117954446A54 + F51EFBE810A948F4FC57B0606A31E17F5C8F29F1CE075A54F523557DFFF82B7B + C1D6F35B41FF9D1753D25C8BF8DD37C8F01CBE1FF8736A4F17F10FFF3BFC07C6 + 1BE52AF7E36D9844E1BD97604D0BFA419E1158AAF09DAADE62F724FA7A97B683 + A3F9059AB097F0F28653C7210FA6C483B9C0630972257007F08020A58ABEA6AA + 8F670F0F0DF53CBA19A72779725DDE8062B9F05E553617580DC34313E045A454 + A0405533C05A479DE5C0CEC4B643F43DB7038DA54FFB9D7C6F713FB06558CCF0 + 5CAC1A55E800B6A0DA9BFA2ACAC0AA6F49B59FB95BCFDB1C6C4A3C9434CD3E79 + AC00C355C419C890F9BE8FD49747B0BB12F9228C4F7E064DE981F23BAE774700 + 00000049454E44AE426082} + end> + end + item + Name = 'clipboard-cut' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000002D749444154388D6D914F689B + 751CC63FDFF74D53FF3435C606635AA62B4C5A70AD87420A562F1E2AB5871694 + D64244D1C328193A0B46F1500F1654A4B360B7D64BCBC6E2920C3C1461B2300B + 430F1EEC70A6AE54E76A14D23FB66BDFD024EBFBBE5F2F6D5C369FD38FE7F73C + 0F3F3E3FD8D7E4E424D96CF68D442281D7EBE5FF343E3E4E369B7D2D954A553C + E3AECCC9F6F6F68E783C7E4F391A8DD2DDDD7D14F8FC4EBF32502C160146810B + 8383830D7D7D7D95505B5B1B2323233E20057C542A952A777270686C6C24954A + E1F7FBBF021ACAE5F20B4343434E3E9F279D4E130E87CF03B5A552A93F1A8DB2 + B8B8088079306059164B4B4BF4F4F45C340CE32D8FC773A8ABAB2BD3D9D9496B + 6B6B0CE8077AC6C6C6CAF3F3F3951754060072B91CB66DEF4522918C884CD5D7 + D72F373535D5013340EFDCDCDCCD8989892A365503000B0B0BB4B4B46C363737 + FFBA5FBC0264969797BF8DC562D8B65D95BFFB17505592C924AA7A19B0800F55 + F5EB6432C99DF0EE8178A04020403A9D26140A9D071E030A40D1B2AC97060606 + 585959A9CA7B006AC247F075BF89E90B1079F210BE60E804F0ACAA76002511F9 + B1E601DFBBCF8DCE7E7AF1EA6F38855B14E6CF71FBC655C4133E42E8830B5EE3 + BEBA4F80574590171F751EECF43BBDB985EF2FFD95FB938EDE57223FED9857BE + 59350BAEE202675C7BEFBDB5CFA2B725F0FAC7D475BD7C12388CEA31155C4126 + BD06EB56F687E1BDAD55FCCFF49FB6954740630AA62053C0EFC59FBF7B4782C7 + BFE4FEA79FDF50E5A9ADC468DEFEE76F82B1E987C53457ECCDFC43CEF63AB587 + DBB6D5751FDF9C7D7FCBDDDDA661F85448447E29DFBCD660A8FC07D3B9B5866B + 6D81EBEE5BD58C9D9D0D9C9D0D50B752F2B8BB16C01911A682C3A78EA963BBE2 + A9F902D573F6464E9DED756A9F389A1091E9E0F1E918608A619E06CE3ABB1646 + E1F259D4DE8B037F2092154FCD756055D113D6A519ACCC2CEA3A6F036B6298D7 + C530AF0137508D5B9919FE05A6DA30EAEC4338270000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000003E849444154388D85947F4CD4 + 7518C75FCFF70BC2A90987097AE4A8D6CEAC3497C79A3B9A5B682AE934697343 + 732BDC58B746D91FAD68EA566DE994A5ABFE405CFCA16324F4833057C2D616D7 + 0F87B541F7056BD55CC271807827C771FCB8FB3EFDC1C554603DFF7D3ECFFBFD + DAF37C9E671F4885CBE5C2B2AC42CBB2D65EBC781187C3C17C619A26B5B5B558 + 96F5A865599EC2C2C2999C71977621D0545050905D5D5D3D2FB0A2A2820D1B36 + 2C061A8145B7E7EE06FE01640367376EDC28151515B3605EAF179FCF8788D400 + B929CF6C60381C666868A85F55F7025B81433E9F0FAFD73B23CECBCBE3D8B163 + 88C8CB22B24755F78F8D8DF5F7F5F5CDDD8AC7E3A1B3B313CBB2DEB22C2B1108 + 044AFC7E3F2E970BD334A9AFAFC7B2ACF5DDDDDD71CBB2DE0B0402ECDCB9F30E + 8679FB21180C323A3A4A5151D10F22B24E440E6666667EE6F178C26EB79BE2E2 + E26C116903BA80F2A6A626ADA9A9B9032873557AF4E851B66FDFBE44442E03E3 + AAEA05E222F205E0019EE8E9E9192C2B2B637272F2FF810E8783FAFA7ADC6EF7 + 23C04FC057AA7A5A44DA54B5381A8DFA4B4B4B090683B3BC774F1980783C4E65 + 6525232323DDC0011129139175C026C05F555535276C5E20C0C0C000A15008A0 + 575513C071402391085D5D5DF3D9E6071E397204B7DB9D079C073A8176E053A7 + D3B9E2C4891398A639A76FE6D658722F8EC79F66C1FD6B28DCBC03DF0B7BCC05 + A63403AE54AB0D4039B0256779FEB9C145F9F675C9263DDF8D1DBB858E8F02A9 + A12C2C7C969CF2E318E919AB812D190646E58353AB8A97D92F4D26B564321E6B + 8D4422E4AEC8F7A41BF2BDFFA6D170F2AFB4402C2936F0AD26133DE1A6E38C5E + 3A83A4AF5CCDF2435F2266DA61440EA17A15B04578CCEB4C7EE7CAD44D571A3E + A6F7EF3F2979F303421346CBE58851A24A0030447858957714DE1D3A7580B445 + DEDD88696E03DE46F53955BD30FD08B2D91F4E6B36D4DE1DCB5AF3F9D44A27CD + 21B354458A51DDAA4A6B4AB703A409B463B1B7F41BC3589805C85EA051552FDC + FCE40D06ABF7638FC75A513D6723FBD25D0FB120DF8D22FB50CE6932D93A5CFB + 3A43275FC49E9A68016D14D86BDCE39C99720ED097BC7583D8CFCD4CF4FCC8E4 + B5DF00FAA67333FB9F03F4266EF432D6F135E38176A67A7FFF4FB71485B494F0 + 0AF0BC99B5EC70EEC1BA89C4AD4132563D990EEC02DAEC8931EC8931800E6057 + 5A6EC1FBCB2A4F4FD9F128190FACCD007630FD37228B9F29C7B9A76AA9C02FC0 + 75E0146003AF00AB80F5D1F6C65062388873D7ABCB815F81ABC047A93D7E0DB8 + 4FD1F5D1B6B3C346ACFD3C89816BC3C053D340A905EA801BAA5A648FC742232D + 1F32DA5647E2667F48152F300CD421520BFCA3506447C3C3D14B67F817C3D7A3 + BCAA75F79F0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000005134944415448898D946D4C95 + E719C77FFFE7BC3587E3A18C97690624B6413D16DD6CD61799596CB67E684B29 + 46BAE0DEED4275539BD0484235D36866D62E23AC59B169B489093A579AACACF5 + F88576A91DCA185B9C471F08B6EB6AC72C874C40E0000738CFB50F5087156CAF + 6FF7735FD7EF9FEB7F5DF703F3A2AEAE0ED7759F745D377AE6CC19F2F3F3F9BC + 0804029C3C7912D77523AEEB56353535DD74EF2C50B31A389A9797A7C6C64602 + 81C06D05EAEAEA58B3660DC0E1B9DACF1518073603BBD7AD5B477D7DFDA2F0F2 + F272B66CD982A41AE07BC0C41711380C2424FD02F876757535151515B7242D5F + BE9C7DFBF6E138CEBD927E0374032FDF56201E8F934EA753C0936636061C078A + F7EFDF4F2C16BB91170E87696868201C0EE700BF37B31933FB8E998DB5B6B62E + 2ED0DDDDCDA1438730B30FCCECC7402ED0120A85420D0D0D44A35100F6EEDDCB + 8A152B907414B80BF829D0D3DCDC4C5B5BDB4D02BECFB6D4D3D3436E6E2EA5A5 + A59725F9802D9296666767BF158BC5884422D4D4D420E959E099395B7E75FEFC + 79F6ECD9432693B989A75BCC0542A110C78E1D63EDDAB53EE08F921EF13C6F1B + 70D4CC90F40DC771DE36B37F001B070707D35555552493C95B580B0A00141414 + D0D2D2425E5E5E8EA42E6019B0D1CC3E9A3B6799D9D7CDECCAF6EDDB397BF6EC + 829C85B60880818101EAEBEBF13C6F08A8023CE075200A8C023F02AE3435352D + 0A870566303FFAFAFA989C9CA4ACACAC1FB80AFC50D26A33AB002E9C3B778E83 + 070F62668B3216EDE0D30806839F024AE63E7D4BD26E80E1E1613CCFBB6DFD6D + 3BD8B06103070E1CC0719C2724FD1670815E49D54077494949F7E8E828894462 + 51863E7B54280CC0B2A55FA6E577C7C9B933BB04E8040C58CFACFF9D40D4CCD6 + 4FCF647AB6D63CCD85C425006C6A02CCBB55206B4315D1C776E02F280620E233 + B616CF643D529039EB73546A665566D60A20A94CD23B9ED93FDBAF396547AF04 + 46925342C0CCB5FF30FADE6B8CC60F83D9EC0CA215BBC8DDFA3C8182E2F582B8 + E07ACA73464E25FD0977D459F3DF34CF0F4ED1FA97CE4E8E1C39C2D014E7FA27 + EDD94B234EECB5AB810B03D31A110C03715FEE571EBCB3B2969C9FFC1AE4E00F + 14AE22FBF15D8036239DC02C091CC3CCFB685C15CFF504B93BEC7D90E5333A4E + B471FDCA65120FFC0C4FBED4C713226378C0ABCC2E4CA5A4770DBE1B79B0F20F + 135D71142DDF41F6A6DA1CA1F799FD23969BD9C8AC156481DE9078C0CC56A6BA + 4EF7CF7CF221D1C7772E751CF59AD189D92683D49C7551200EC480925447EB90 + E384A3083D0AE400B5369D1E197C7537C917AAC98C5D4F01BBCC88809E0816AE + 2450BC1A49956644CCD8653353A96BAF3CC340C30FC88C0D8F00B573AC47155E + 72E31D140198D9A5F1F36F93EA6865EAFDBF71FDD44B98592FD20C6645F376A2 + 08691AAC77ACFD75C6BB4E93EEE960F44FCD98D9C5B99C42F8FF43EB9B5BAA7B + EE28FD26C1BBBE862FAF88250F7D1FD04A4100A96FDE3EFF5B1044AC08DFF718 + C1E56BF1E7171129DB8444E90DA681A295B56497EFF892A4CBF36760E971140A + 67497A036667309178B77F26F92F963CFCD432895EA0C3CC3691991E07903F10 + 05C5819899958C779D1E7226DD768041601BE87EE0A2A4179D3BB21A2525808D + C04E89FEC94B7F66C26D07EC136027F090A48BF2071BE50FBE08BA88741FD836 + 6068C26DC79719BC8A3FBF8840E1AA1E897780554005D2BD4002B3A70DDE9CFA + D865A8F9E764921F122C5C897FD9DD1704EF21DD83A800BE0AFCDDE0298CB6F4 + E5BF32DCF24BFE0720A817D19EE7E1430000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000059C494441545885AD976D4C95 + E719C77FD7E1BCEE1C108403392BB0B6C68CA139ED14AD32196D60D9443F0026 + 66C69226AD51525AE54CB159082C8CAE8B6BB30D5D9A754E5B8CCBA6A9332267 + 6C84CC31B625A5C1E823B7C1D4C0D83A741E05E5FD705EEE7DB062E4CD83ECFF + E1F9F05CD7FF7FFD9FEBBEAFFB791E58007BF6ECA1A1A18184848485D2E684D9 + 6CE6D0A1431C3C7870C13CD34241AFD74B616161715555D5A20DECDAB58BAD5B + B76EC9C9C97972035FE048494949C2FAF5EB632E9E9191C1EEDDBBBF041C795C + 6E2C06D244E49DBABA3AAC566B4C066A6B6BB1D96CB540FA920C04834180C322 + 529E9999B9B1BCBCFCB1C58B8A8AC8CDCD5D0DF8805F7CA1F164C8CECEC6300C + A752AA572975E5D2A54B96952B57CE9BEF72B9686F6F17A5548752AABFBBBBDB + 959F9FBF608D053B70F5EA554E9C3831A6B57E5D44B22D16CB5BF5F5F5984C73 + D37C3E1F292929AF89C83780BD6D6D6DA3EDEDED8F7FD28560B7DB696D6D4529 + 75522935AE94FAEACE9D3B67E579BD5E0CC3702BA56E2BA57EDFD9D989DBED5E + 5AF107C8CBCB432995AA940A28A52E7476768AC7E3998E9B4C26CE9C398352AA + 5129754F2995BE63C78E98B46399023A3A3AF0FBFDB7802A11C9773A9DAF5557 + 574FC7CBCACAC8CACA7A49445E066A0CC3F8FCD4A95331199098B280A4A4249A + 9B9B494C4C6C03BE0EACAAACACBC6918067EBFDFE670382E0123914864E3F6ED + DB233D3D3D31E9C6C56A60727292C1C1410A0A0AFE21226F02CFAE59B3E663AF + D7CB8A152BAA8162A0B8B1B171A0A9A92956D9D80D00F4F4F4B076EDDAC1F4F4 + F4A888BCE9743ABB323333C781D3C0FB0303031FF97C3EC2E170CC9A312FC103 + 64646470EEDC398BCD66FB1448D45A3F27221F69ADCB2A2A2A163D768BEA00C0 + F0F030D16834BA61C3868B22520938B5D6AFB6B4B44C1D3D7A74B172B14DC14C + 8C8C8C0098B4D6001522B2AEAFAFEF49A416BF046EB71BBFDF6F713A9D5D401A + 300C8C8642A175A5A5A5E1DEDEDE45E92DBA03353535389DCE2A11590D1C00CA + 45C46BB158F6D7D5D5CD7B4CCF8745ED818282022A2A2A5602BF05DA2726260E + 040281BEF8F8F86780D73D1ECFE9DBB76F0F2AA562D68C79095C2E17E7CF9F27 + 3535F5CFC00BC0730D0D0DD72F5FBECCB163C79245440157C6C6C6BEB565CB16 + 0281404CBAE639EF5AED38379662FF5A2E62B122C00BCFA6B22C25F555117951 + 6B5D7DEDDAB5EBC78F1F271C0E73F6ECD93BA5A5A5DF1391935687F3956FD737 + 36FE517D8E003A122678BD8BD18ED3E88991C777C09CF60CEE7DBFC69CF674B1 + 4025900388D544976F45287BD3F2C840341259FB4AD9CB21C33000484848A0A9 + F90F2C4B4A6AF964282EE767BD163511B9CF03BA80C3917B818F03477633D567 + CCDF01B1DA71571EC392FA95F7803DC061E007809E8A5278E833CBF3675D6623 + 323112EAEEBF39CD1B999CE28DCE20C94FD9FED9372E9B80BF3FE00185C0F1B8 + 65EE6FBA2B3FDC7BA37633D17BB7A6B98F6C4257FE77716D2CDE06D46B7831F4 + EF9EDFDCF9F0ADFED1BF9EEA37273F75C19C92EEBF33253F1ED2B67F69CD95E0 + D5BF4DF34CEB4BB6DD0D49CD7C3CE0E726ABFD111ECC18437B562EDCFF96FB69 + A85F5DBCF976099357FE42F0DA27DC7AAF8C09E38201FC04F039566D5A326F96 + 81B8640F88E400AD77CFBC0BE1A987411D65E8773F02F81322CF9BE293CC4BE5 + CD32807E78D5E1D95FB33A1202ADE591ECA5F0661A88DCFD2F68FD29B07959C9 + 7E303FFA1F90B8ED00887C07AD2F46C7EE4596CA83199B302E310DC7EABC21E0 + 5D73F297DB6C591BFE13BAD18B385C2C2F7B1BE7BAA235C0AF80EF8F7736ABC9 + EEF625F160C639208E783C3F6CC1BCDCF30EB00F781F68E5E138BD017C109D18 + DD7FA3763391C18125F1661900B03CED2575DF51E212528A78701089085ADF3F + 50C6879BEEFC722F93AAE3FFC29BF35D208E78E25FDA897D551E26BB0B04A2C1 + 71829F75317AE12491A19B73D19E88F73F0EA297E25DABB7AD0000000049454E + 44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000008FE494441545885BD987B70D4 + D515C73FDFDD64972424248009288F26951668A104313C022254EA9002D19212 + C1DA8AA0E20BA1600942892C8F06452216143A30E00C82E064045119A823E02B + A8A09412A580D08457786503913C77F7F48F04246EC03C989EBF76E79EF33DDF + 7BEE39E79EDF75520F9932650A292929141414E0F57AEB63724D898E8E66E6CC + 990C1E3C980F3EF8A049585764DBB66DECDFBFBFDBDAB56B713A9D4DC29A376F + 1E7979799DF3F2F2EAA5EFA82FB0A4E5DDBB77778C1A35AAD1E47AF5EA456A6A + 2AC0ABF5B5A917414948EA23E9F1C99327131717D760722E978BCCCC4C24FD49 + D2C01B4AD0CC30B34A606E444444BB1933663498E0D8B163898F8F6F053C5F83 + 75E308D6C8424951C092C183073364C8907A1BB66FDF9E471F7D14490B24DD04 + 2C32B31B4770FDFAF598D95C333B286984A4B48C8C0C222323EBE564D6AC59B8 + DDEE01C0836676049893939373E308AE5EBD9A03070E940313000316C7C5C545 + 4F9A34E9476D870E1D4ADFBE7D438157250978A2A8A8A86CE1C285378EA0DFEF + C7E3F1E0F3F97698D92A496D2565A5A7A7939898784DBBC8C848323232903455 + 5257335B6F665B172C58404949C98D2308B06FDF3EDE78E30D8067CCECB4A4F1 + 9206783C1E5C2E579D3693264DA255AB56F1C00C33F3029373737379E79D77EA + EBB64145C2E2C58B292C2CF402936B6C97C5C7C7BBC78F1F1FA4DBBD7B77468D + 1A85A4A592C281E9E5E5E5A73D1E4F435CD2A06BA1AAAA8AFCFC7C525252F603 + B74BEA0704121313776CDDBA95E2E2E26A50A793254B96101B1BFB7B49D3CDEC + 53337BF295575E61FBF6ED0D22D8A00802ECDCB9936DDBB661664F98D977C0B4 + D0D0D02EB367CFBEA2F3C0030FD0B973E72820BBA6E74D387AF4A8AD5CB9B2A1 + EE1A16C1CBB27BF76ED2D2D22EB8DDEE3249BF057AB46DDB76F5D9B367397FFE + 3CD9D9D9B85CAE1724FD1A78C1CCD64D9C389193274FFE7F08969595E1F57A19 + 3468D017408AA43E4061CF9E3DF774EBD68D8484845E929699D97F81FB727272 + 7CEBD6AD6B8C2BD428AB1A59B56A154949493D80CF8052E0173515FE99A44433 + 4B292A2ADA9A929252EFB6F24369700E5E2D1E8F878A8A8ABD40B6A416C0CB92 + FCC085C6F4BCBAA449C35D7171310E8783A4A4A44F80FB2425037B81D7CC6C53 + 6E6EEEA5175F7CB1292E9A76C450DD52366FDE4CC78E1D4748DA6866C7CDEC97 + 5EAFF7E29831633876EC5893F09B74C40037DF7CF3E5F9702880A47692E64745 + 45111313D354F8A64770C58A15F4E9D3A7BFC3E1D86166A5C045496DCC6CC0C1 + 830773D3D2D2F0FBFD8DC66F5204535353E9DBB7AF4BD2F21AAC4CE0C99ADFCB + 3B75EA143A6EDCB8A6B8687C91444747B374E952C2C2C2664A4A33B32F818781 + 6F806E35637D656262E247575F830D95464770DAB469C4C4C4740132001FF048 + 7E7EBEFFBDF7DEC3CC269AD9056086CBE5FA5966666663DD348E60727232C387 + 0F17B05C92DBCCFE6E665F7A3C1EE6CD9B477171F14960BAA466929627252569 + E4C8918D221872BD45854512DE6B28AE841EC8F9BDEABDC36EC7D0C30EA9BF99 + E503B3366DDAC4AE5DBB00C8CACA222B2B6B3970BFA48101B387521F7B66E58E + 1649D8E5BA34A8CCFF37A5BBB710B878EEDA1CAEB510DE7B0431F73F87233CAA + A3A43F00BD80E640FEAF5A043E9EDBB96A51A8831601B311C55EEFBBC3860DAB + 9567CB962DA3FF80015D057BFC46E99C83A14F7FEE750E34E848F5B5F825B0C6 + AA2A8E146F5A4CC996E575F2A8B3489A0F1C4DCBB10B70B89ACD94F4A6C460AA + F3CC07F43D53E918F34991C31DEB0EBC5D58AE39AFBEFC12FBF77C5E0B63EF81 + C3B41F32FA6C41992366E1B7AE417925CEDF1974002E00714823253D81C3E90A + EB9ABC43CDC229CFFBF8C7231812DB91B69E2D28D4FDBCA4A966B606986ED809 + 2B2F45EE70491A012C718AB008A7F53BF39FBD07CFCC4FAB85D3F2C1F9B41C98 + 1EEF337203460078CAB0B7ACBC3420773892DA0273243D64664BCDECA933D963 + A9C8FBA8164E509144DEF5200A75F79734A53AF9F963E9FE0F4F9C9AF11B8E3F + 95C8B9A513CC57746A13D0DF6FF82EFAB4D29DD003D7ADB77D0F1AD59A887E23 + A90CF08F8011626677F8CB2FE514AD7E3670FCE95E9C9C9A4CC987EB4F99D978 + 337B41D2E3A0BBA2EE7E38288241049B754D0698646685984DBBB46B23E7B2C7 + E22B3C02013F655FBD4FE19C7BF0159DCA0766494A96945463578DD1B937723A + BBD50CAC1EAB283D7C262B9D4B1F6D005F25FEE2D3785F7B960B6F2DC2CC669A + 5981C4E4669D7B83A376D6051174B6BA05A43B81B7036525E5DED79F0BDA55E0 + E239BC1BFE86C106AABF930786B4BEA53606BAB3E6EF8692AD2BA83AF64D10CE + C52DCBA93A71A80AD88874074EA79C316DAE4F90905087200638517168375656 + F72C57BE6F3B98151B560AB4BE3A9D15E206AC35E0070ACBFE758D77C0809FF2 + FD3B014E082240613F5409261808040C2B02DAB9127A4048DDDFBCEE2EFD005A + 82C281B357AF59C007E82CD55DA2ADFBE7BDEB26F83D4E3B83EFC0CA7E94A0FF + EC3130B603A9CEC8966131A3670681CA1D4ECCA80C24A5AB3A74DBFDDEC2DA18 + B09DEAE3BF2F6AF89384B44908C2693E7034AE0E5D5DC0BD98ED20E037FF855A + 7B0D2658716837563DC2DF042C6A3E700C2DC72DC411D51A00577C0FE266E410 + 1AF7939F021E33DB09EC293FB0EB87187966B60DF8AB233CAA73EC33AF13D6F3 + EE2B1B6C71CF9F89B9FFB9CB2F5EED80EC8A6FF782AFF6CB5C501F0C6DDF8536 + 7FDD889C2173253D6B666F1A6498DF7734E02DC4D9EA16A7A491C0E29A0DF6AD + 2CF8FA48E1ECE1B5705A3DB684F0DB867690C80542319B6C68BDFFE2599FC31D + 8EDC111D24E64B1A6366D96636E5DCD209947DF5FEF50902440E9F4874EA4424 + 4D05CD96709BD961E02270ABA46833FBCA60B4955F3A783A2B3DA84A1D51AD69 + 93B99990E8D80460ADA4A49A09E730D01CA993A0CACCE618CCBF94BB91A21553 + 82B8D479D5551EFC0CAA2A7077EAF5A99CCED5C069C08154097C82D91CE02FFE + F327CE9D79693C5505C10FE256514AD9DEF771DDDAD31B121DB712F81C280385 + 201DC76C8D993D22F16EC93F57E35D9309753C6A5E77E47744B5A6F91DE9B813 + 7A2077C4156D7FD129CAF23EA6F48B778372A62E69D67D10E189430889ED08AA + 06B1CA722A0BBEE6D2AE4DF84E1EBAA6EDFF000F99BE9165A151790000000049 + 454E44AE426082} + end> + end + item + Name = 'clipboard-copy' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000011C49444154388DAD92318A83 + 4018859F412C3611B4B411ECD25AD8CD2E886DB6B0F018B61EC1420B0BB1133D + 4476FB0D7805ED3C8158A6D081CC1621B21A93DD817DE5FB876FFE6F18A1699A + 0B56C2183B0378AFAAEACBF77D8CE3B8760C42D334972008D872104591300CC3 + 5992A4439224A73CCF5701E244120401005455DD589685AEEBA0280A00C0755D + 98A60900E8BA0E61184E1B894BE27EBF87E338332DC3306018C6A4A569DAA475 + 0710C56BF5406B3B0CC391107248D3F4E4FB3E36AB624F5296E50BA5F4480879 + 4BD3941FD0B62D2B8A624B29FD2084BCDE29FC96388E6F97EE18639F5C80E5BB + 4451B4E35658E6FF01B22C730144E0FA6D6F45DFF77C80BAAE675BE8BACE07F0 + 3C6F56645906DBB6FF0E7834F8A9F52CDFCC226CF5D991FCA60000000049454E + 44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000001A149444154388DD5943F8B1A + 4118C69F77F7ADC422E2142258B86E9F665AF30762AF9FC0DC21CC7E00B54F5A + 07AEBD5C926FA0102C776D02560ACB555B6E236CA527692C449C3467D8E82946 + AB3CDD3CEFCB6FDE3FC35014455B9C9031E611402D0CC385520AABD5EA543A28 + 8AA2ED70383449921C04A5949052D233F4C3783C7E524A9D043200244982388E + D3FE276646B95CC672B944369B0533BF715DF747B158FC93B45EAF319FCF0F81 + 440422A29D2984F8DC68345E0B215E6532195896050028140A6F47A3D16E14BF + 369BCD63BBDD4610047F03F795CFE7E1BAEE1D8077C75A23A22D337B5AEB6F9D + 4E07BEEF1F07DAB60D000882C0A46FDFC9711C789E671963EE99D9F47ABDEF00 + E0FB3EAC63159CA3C1604000BE30F3ADD61AB55AED3AE0643231FD7E9F003CD8 + B67DA3B5BE0E58A95468B158200C4322A20766FEF8E20CCF95E779943ADA44F4 + F522601CC7E876BB26ED3D2FCABEAAE597F49F028510170319009452E96D6136 + 9B5D057CBF6F964AA5CB81CD66F3E7BED96AB550AD562F034EA7D303B35EAF03 + 0072B91C1CC7390BB4FB274F3E6C29254929FFA9C2DFFDDB8679EB261DC90000 + 000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000022A494441544889B555BB8EDA + 40143DD7581408197F00502088B0FF80C20A856D893FA0443C2A8A6C9665E922 + 256DAA6D23F317742E2828E98D84709F16BB02096E8A186708385E96CD693C8F + E3FB3877662E799E770400666622A2A43133BF30F3E36AB5E27EBF8FED768BD7 + 803CCF3BFABECFBEEF23B209663E1BDBB64D91AF170023CFF3B8DBED220CC354 + 073233B3EFFB705D9793489665210802288AF209C051D3B471BD5EE7E57299EE + 807E83A36F2C8B244919555551ABD5B05EAF512E97B1DFEF91CD66414468B7DB + 68369BB1A1C3E180E9747A219D9CE45955550C06838F8AA234254982244967FB + AD560BCC71D23F99F947A3D1B8A88FCC024B1CE77239E4F3F9A62CCB5FAE0520 + 50010044F441D7F527C771B8D7EB2108823F1201E088244A14177A3299C4019C + 38A7B96DDB64591631F30300E8BAFE349D4EE34CCEF3BE038BC502001E007CD7 + 759D1CC741A150489648441A879979369B3100320CE33380A3AEEBCF8EE3244B + 241AB87601455E741179369B01000CC31801204DD39E134FD1ADB02C8B8808BB + DD0E61184251944700FC6E125996F5F71A008CEE96C8755DB8AE7BF17ED9B64D + A669BEDF294AC27F7770770DD2FEBFBB06493DE4C4910423A241148BC5B3B5B7 + 426666364D13A669E29409006C361B6432993852316AD1C06B24FA1A6D9E75B1 + 4AA512CFEF91489ECFE7DFAEA556AD56512A952E9EE55B210F87C3AB1BE3F118 + 9D4E278E548C5AE4A54AF42FEF442436FD9B50A954D21D9C028A0EC09BF00BCC + 7D954A4B4B09710000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000197494441545885ED96B16E82 + 501885CF35370E2A4D8C9B83CAC6C2E0EC6D0D0F50A22FE0ECA0AB4F604CBC8E + C415DFA1DAB97D094731BA1A27D34188D2C1D8A01605141213CE04E43FE403BE + 1B2E69369B90651941B25AADD0EBF5609A66A03E00505996A128CA3E40F70780 + 9ACFE7BF5AAD5660087A3CE8743AB69F22E73CBDDD6E3F2A95CABBA669DFED76 + 3B1044C277C3115DD753A6698E1963554DD3904C26A30598CFE747880963ACDA + 68347CDF833A4F0821C46D309BCD26244902A514822060B158405555EC763B6C + 361BE47239D4EB7594CBE58BEE3559E9C515974892845AAD76226BB1583C9911 + 4511A2289E57AFCAEA1980D2C3E8A365BDCB01AFB9266B24008661D84E599D10 + 9100008715331A8D5296658D19636F4788C80000C0300CE8BA9EB62C6BC2187B + ED76BBDE25BC2783C1E0FC4133B66D7F964AA597D001DC560DE73C430889F613 + FC9718200688016280E7011004211480BF7F01E7DC753F0800EBF53A1C80E572 + 89E9747AF34D140A857000FAFDBEA7C1E1700845511E0EF03C128615DF1B925B + B28606E055563F99CD66F805CC31AB9EA2C072B50000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000002BF494441545885ED97BD4FDB + 4018877F674E801311294E2616AA58828D2617462450D5B09378ACADB64B3277 + 62ABD82043D7623B1D32F31F2425A26BA6B66260496807CCD22A2CD81252B80E + C1111F0D496C87209467F172EF4F8FDEFBF01DC9E572608C21084E4E4E502A95 + 02C972A18C316C6E6E7E0290F413C439FF09E0433C1EBFDAD9D909C60E00BDFE + 261B8DC65AB3D9F41492482420CBF23AE73CAAAAEA3B008149BA8268369BA856 + AB9E4232990CA2D1289F999979130A85B8AAAAEF39E757BBBBBBBE0505DF09D7 + B45A2D98A609C77154005F344D13B6B6B67CE7062608009665C1300C388EA301 + 28A9AA2A6C6C6CF8CAA4FD87DCA33C3D3D5D164511822080520A4A292E2E2EB0 + B0B08076BB8DA3A323A45229504A23ABABABE7A150A86758A552816DDB830912 + 42483F3B42C8EF6C36FB6B6969E9AD20742680520A4208161717C139EF4A1342 + D6154581A228F77238E757003EE772B93FF97CBEA7E4D01D248420168BBD0887 + C31F1B8D061FB6DE4596650220CB187BADEBFADF5E925EA6186EE7745DF7EA87 + 62B108DBB6974551FCFA9064A09B6458F6F7F7717A7ABA0CA0CA188BE9BA8EBB + EB75AC828EE3C0344D5896F51240853126E9BA0E5114BB63C62A0874240DC380 + 655949743A291986D1EDE4D805815B9D4CA2D3C9A83BDD4F4210006CDB86699A + 383B3B4BA1D3C9E8F6F6B6B75D1C148542A1D7B9CB38E7663C1E57C626B8B7B7 + D7F30C5D5959413A9D960821E3EBE043573B5996E1FED49ECC1AECC544D02F13 + 41BF4C04FD3211F4CB44D02FCF4F70767616535353A370F92FDDDB4C3A9D4622 + 91E85B60DB362291C848A56EE20A962549FA264952DF8276BB7DE83E3B1F037A + 707000CBB2CA8316CCCDCD41D3B4B5514ADD84D66A35D46AB5810BE6E7E7A169 + DA08956EF3FC76F163E3EB4D92C96482F2B8C5CDD3C4ABE03980C351095EF31D + F020787979897ABDFE03C0ABC095EE707C7C8C7F62B2E7F4F9D2EA2700000000 + 49454E44AE426082} + end> + end + item + Name = 'clipboard-paste' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000019949444154388D9D9331481B + 511C87BF771C113515D1542153A09468E9628748DBA345D07488BA045C0B9902 + 9AB117EAE2D6C0A183640ED93A852E090D9480E8A22E4D33B49B93724B225952 + E4EEE49E83355CE82546BFEDF1E37DFC7F7FDE13FC4351144AA512D1687413D8 + 061460B7D56AED2512093A9D0E7E886FFB1F71C428F6D83CAF5E2FBF6DB7DB47 + 854201D77549A5528442A10FBF7F1DD7DCCB3A01D9E1ECFC924FBB95AE404DBC + 9F7701CE022B00341A0DD96C3601A8D7EBC4E3F11F2F17DEF0CC6E4940FCFC73 + A1782750000E4EB72580AEEBB25AAD76C35AAD86AEEB12E0E0E4B3F4ABA07A0F + 866108DFA203E80AB2D96C4F904C2695582C06C0B5D564762E87E94CF124F29C + 9D9D6972B91CB66DF74EE0C5344D0017401D798A3AB3CE1520A4FCBBB131B71A + 0E870F33994C7F81AADE46773BF0D41CB72CABAC69DA5A3E9F3F547C6FDF43B1 + 581C771CA7AC69DABBBE130C229D4E0B2028A5AC3C58E0AD641846F05115BCF4 + 158C8D584309BA153657BFF704819917C30B9616BFFCF7024D678AAB2104E2F8 + EB966F301159424CDE7EB441DC00A9CB89078ED361AD0000000049454E44AE42 + 6082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000025F49444154388DA591CF4B93 + 6100C73FCFEBF6DAF25D69B9D0B543BA26A33AE8EB42A26817BDB6A891A7A00E + F5FA1FD44DBC48AC9B8760D0A1E898A730124798B563030F0B626CE2C4BD10A5 + 2BACB95FBE4F0771385D33F17B7A1EBE5F3E3CDFEF23D825A7D3C9CCCC0C9D9D + 9D5781A7C025E02BF0A8582CCE8F8E8E924EA7692671F7C6201241058D8B8341 + 6E87EF7881C54422713C994CE2F7FB191A1A2A0197E39F3E7E79FFEE35AADC40 + 6001F0EA4DA21E585A7C322E11E495F3FC6CF161D1722597CB8D4C4D4DD54263 + 6363F4F4F42C08AC85F6AD8CECB05242D9064EB4F63FAE03DA80F1DF7F72B2D8 + EAA2202A986696542A55174A26934829836EB73BE890EBFC29ADE26C730B6062 + 6F651B403AFB16D961F1A3EA221A8DEEDB251E8F138FC7310C83B22DC1B7FC2C + 03171E34DCD0B6FBE2F57A4524126918DCD1AF2CB2995F037E4E2448CFD6BFCE + E3F1BC0806832F354D03405A2514FB29EC9A9F8D72055BEB1942A110B1588C42 + A1B01B28C8E7F3626969A90EB8B2B292EDEBEB5BF6F97CF7B6632A5AD72D9021 + BE2B36242DD72727AF3D0B87C36B8661502814EA2BEF956559A8AA7A0E18CF64 + 32FBAA7ABD5E819437755D1F8946A3EB8661340702288A02D0F0B32291089B9B + 9BFD0E8723B603550E021EA4E9E9694CD3EC07E6745DEF383270787818210442 + 081D881D58B99962B1586D57D33465201018382AB076EEEDED251008882357DE + ABA640D5564551AC43016B95FD9E55CE9E5EAB33CB550DED58F9F0C02E974EFB + 89FC3E734B0A68530F0DFCD0EDD21B9A95ADEAB2693F4995EDD19BC9ED760320 + E69E3FFC67C8AE3AE81EBC1FB4843AFFBF2FFC0B1C84D8644406A83D00000000 + 49454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000349494441544889AD95BB6F5B + 7514C73FE75EC7AE711CBBB2108FA0925CB75431280A03951858AA9B3B7461C8 + D635C99604545090AA4A854AB48281892112CEC2963F80255622555104991A65 + 2048C171249C540E8F1447E451DBBFC3605FE327B815DFE9FC7EF73CBFE79CDF + 155A303434C4D2D2129148E46511F91CB80158C032705B557F999B9B637575B5 + D5B42302FD2F04015004B0989E9E261289C444E461A954BABCB5B5853186D1D1 + D19BA150E83D1179677676F6D78D1FBEAF5999BAB393B312C6685300397BF400 + 104EAD047F5AC3FC252F81589FA8EAFD85850572B99C020C0E0ECACCCC0CB66D + 3F40F54E587F276672444C016A41DEBDF9358FB6F79B02582262443061F35BE5 + C47ED588651BE07EA150606F6FAF9A85881C1C1C90CFE71191DB6259E6CC7ED1 + 44CCE38A881A11A974A508E0A8B8AB4F8ABBE0BC4F369BD56C36CBD1D1519BF2 + FAFA3A3B3B3BEA380EC96452F6F657880F387A71C0E9DE0355D527C55D72F915 + BD34AC64B35932994C1391AAAA009B9B9B00789E278EE3682EBFA2C3AF89C4A3 + C3DD03888800EA53E1791EE3E3E3D4EE5155ED24D74C7C3B6A3974A6080410C9 + 64321D95C6C6C63E4D2412F8BE5595F2D93E17A22328F0B474425F5F8470384C + 2010A05C2E3753E41F5AA8A9CB878787F7262626088542F54C2D3BCCC5CB7731 + 52A6104C801DE59B6F6FF0E3F64F4C4E4E522C16AB7AFF945CA5C83F37CA8542 + 01E02E50A94E9D183B98307DFD6F55A4FF6DF3B4EF9239977805B1BE4AA552B2 + B8B8482C166BA4E8DF110C06B12CABAD4A55454414C0755D44E40355D5919191 + 8FD3E9B44E4D4D3553D44D6EC4F2F272DBBD88E0BAAE148B45A2D1E887226252 + A9D47C3A9DD69E286A7126AD7A54A7848D8D0DD6D6D6006E015FA65229B17AA1 + A857388EC3F9F939C7C7C788C82DE08B9E7AD02B92C9A42493499F5E013E7AE6 + 1EB4DEFBE7F9F97968186DCFF3705DB77D937DA346B9D161635FBA6D79A3CDFF + DA834EE889A2505F09BFFA6E1475FA062D8FDDB5AB3B7EF97E93003496B0B1AA + FBF4CC14D5A74844B8F6C6CF1DCBBC107F13EB39C90CA8AA0E0D5E6768F0BA9F + 793D415F787CFC07A762A33C1F459FD53E363DC78DF2C0C0554E6B3BE9795EDB + 767782E354FF7281EF1E6EDFFB2FE557AEC489BD5E0DE0BA6E2FFEEBF81B2698 + A3B62FB70F630000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000285494441545885ED97C16BD3 + 501CC7BFAFD6CED5C462293BAC54262DAB8391D3A8976E122B7868EDF62FECE0 + 4977B4C5FD01B6A6DE66D8A1B4B0AB08A22EBBF450081ED48387C2F316029BEC + 3008C2104613E8F3501BBA5592ACAB55A15F08845F7EBFF7FBBCDFEFBDC70BE0 + A27C3E8F56AB15A194EE504ABFFF7A7628A591F5F575B7705711A78F814000AA + AA5EE679FEB3AAAA42B3D9040088A288959595966559A94C266319863134807F + F3E15D2C2DC66C8345A671ECBB099370E0791E3CCFAF6A9A26288A62FB288A82 + 68342AC4E3F15559965F1B86013F3B41A8A323C07ED87EDA8181272F769D0196 + 1663C8DE59E8F41BB5C083534EBAAEB3B381BAAE239148BC1204C1B6C5CD770C + 7D55FDF2F59BCFB502BD97E6A74D3BC98DE53C29140A0349FBD56834D068346C + 1F499248F3E35306D2CD2FDE7EE6D8DE9E5C09FFB4FC670DF26E963C5FEECEE8 + BC83BDDCCD92C739858110CFB1030000502C16CF9B1B0040BA891D5B7756FF5A + 0BBC952E1C0EFB92C924FCFED3E1C1A93658388648E8120EAD30F8B979C8F202 + 00E0E8E808A55209A6693A0178533299C4DADA5AC7C9E704DDF28AE22D30C68E + 01E46667673F6C6C6C9C82180AA03773B7ADDA932449D74CD3DC4BA7D3B9ADAD + 2DB51F626C6BA05EAF5F354D5349A7D3E2F6F636388E1B2F80A669AC5EAF07DB + EDF6FB542A75AF5AAD82E3B8F1EE025DD751ABD5A62DCB7A2B08C2FD72B93CDC + 1A1846954AA57FB2D38CB137333333C1B100FC6EB14A92748510F2F70FA209C0 + 046002F07F0204A7DA23031838091FE5F65C83D8F598AB8F570D558148687427 + B83D92D77B3C001C5A619C8C0A403B303CFDC1F48B9F9B1FD9EA3DF7DD1F0064 + 5986288A8E77422FA294FA866AE6FEFE3E28A5172E82A669F8097DD7DE1FF48B + 4F920000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000003E4494441545885ED985D4C5B + 6518809FEFB4F48782FD65711D21EE086823228D1D46B309811C345C2C78E1AD + 72A17061D2B85B2F4CB38B25C40BF5B24AA48B97D49848823F64C9C84202EDC0 + C22421D50801AD1A3A4BE380AD5B7BBC1894AEABA17F0B6A786E4EF27EDF79F3 + 9CEF7DBF73723E4191343737130804B05AAD1EC0079CDB1BBA06F8B6B7B7AF7B + BD5E6667678B4D5914A2D889C1601097CBF52AF0E5D2D2922E128900D0D1D141 + 7B7B7B0A786D7373F39BBEBE3E52A954D504B5764B2D75B5FA07822A820C5A32 + 6801686A6AC2E572E981D1E9E969DDE4E46476EEF2F232894442D7D5D535DAD0 + D0F0647F7FFF9D50280480441A89BB08D407F2DFBE73973F6EDE2A4A507C7AF1 + 75DE38FFFC7380653F780F1D3735CF704B3A054242555580F6743AFD91CFE77B + 6885743A1D3E9F0F8D46F32EB024840055A536F31B8EF43235ECE64EDF9ABEFE + F362DF5B9F1425A8DDBB7E08741F0453DC134610D2FDA710F73B21994CAA85CA + 974AA5482693D8EDF68F0F1E5D90113AB586DDFC36BA0AF414659723C8EA2F57 + D4B55FAF64074E3C3BC6B5F0F74C4D4D15956864640438A8A5A2289C3B63267A + E3BD6CEC8953BD9C6EEC2DD60D00A9A4D94780B65030146DA1ABD9882CDB5014 + A5ACC4B22CF3D7EE2EA1680B9D2D5135DB27D5100C475BC5E34F6D71F2A41159 + 96CB120458F929A186A3ADA2B325AA1E3EBB0441808989897273E652D6AAE5F2 + DFECC112B960341A237ABDBEE0A0D9B4C356EA691ACCBB64346676D2DAADFA06 + 99818181FDF72B0B0B0B6C6C6C1423587A231B8DC6C8D0D010168BA5BBD03E10 + 42452BA59124508586DFA51ACCCD9A814B97CEEF0B7E118FC77F181C1C647575 + F530C1D2D1EBF5FB72EFC762B192EE753A9D180C86771C0E475F2010881492AC + 46891142108BC5F0FBFD25DD373C3C8CD3E9B41B0C862987C3F14A201058C897 + 3CF24D323333C3FCFCBC0D9872381C9EB1B131DADADAB2E3472E98C964181F1F + 271C0E5B80EFEC76FB0BA3A3A3B8DD6EE05F2008A0AA2AC16090B9B939B32449 + DFD6D5D5BDE4F7FB71BBDD472F68B3D99065195996595C5C647D7DBD5E08F1B5 + C9643AEBF57AABB3492AC1E3F1088FC7931FAE5755F522D073A4827BBBFEA1EF + B4A228288A8210E2E84B7C18C78295722C5829C78295722C5829FF7F418D2653 + 0D8F7FA4E0B7F84CEB8F452730D49E40233D3AC982829D25086634B71FA960C5 + 257ECC642EF754A328B22B78BAB157947AF204F0E74E9284545355A95CF6052F + 907380590AB5A6A6484268BBAB669487F683CFAEF2F957F38BE52678F16C0F6F + BEFD3256ABB5EC93B07C720FACB4D1B54DA26B9B6527B335B683106B369B6DBA + 5A827B44A00A3FEEF1789C50287419B85CB1521E2B2B2BFC0DC906346CD5F3CD + 750000000049454E44AE426082} + end> + end + item + Name = 'select-all' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000006D49444154388D639C70E4EF + 3F061CE0F18DB34C1FDF3E67D0B1F6C1A98685818181A162F9BEFFE8121D914E + 8CC87C5C6A9870994C2C18060630521C0B8F6F9CC5E98A970FAF337CF9F08601 + 9F1A968F6F9FE374DE970F6F18BE7D7EC7804F0DE55E6060184D48941A40712C + 0000D8054F17A8004BC20000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000013A49444154388DE554314BC3 + 40187D273714EA902C2937E68682D0A170206E162908427F837FC0C91F520AFE + 14D75A32740DADE0A425A1835C2DB689A5812E350E314573C7A53829BEE978DF + E3DDC77DDF3BD21B6EDF6186371979674B39C5F1C5E50040CB24A60070EB3FA6 + 325E2B45E13208CEBE717E20533F948A965987E8883AA10020E3358279AC88B8 + 632B5C946CB4DA1C07A6F67F827F6848816C9ABA0170C7D272ED86ABF076B5B2 + 33F48AAB51C0F8EB99D76CF09A7A790E727573673203003C3FDD63B598E1E8E4 + BC544B97725A2A5A2D6648DE5EB18F96F486DB4189663C1979D79FD1EB02681A + 3B04D0F2039946C9462972C72ABE573378894E7549B1AB1508CEB2E8F9A1D4C6 + A9DD70950104F318FD87507BB9E0EC0F2CF6EF37A440F639EA90C7A9C8E92299 + 7B5000E8883AD9B703C1193145F5038E23644374A717690000000049454E44AE + 426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000174494441544889ED96B16AC2 + 501486BF5BF20071C97E7535AFD05A357B57F73E41A76E914E76F32D3A171CA5 + 28E8D2B58182600507A166B042577B3A24316A734D848E9EE9BFE4FEF7DCFF3F + E71EA2BAA3CD0F808888524A1DC1ED60DC7B08E713AE5B773EE0E77144442C80 + 8FCF954C972B400900C81EF6DC3259D10F66464EC52989766C2C1191E97245FF + 6D2699A700CDAADE5B8B08801CE32817A51D1B2B921565CEB128252B8580028C + 16459FE1C27483FF0A2BCA16299558FB311CAF212699F745F06C51318B3CB74C + B3AA4FB208509D56FD28277968ED826A873B78B0BD624EA8DBC7E782E7C3FCFD + 9575B8C0BDBC29CCB1C2F9A4F0E675B8E0FB2BE4148EEA8E363E44854BAC36E0 + 4130EE0DE3617705D4F238228205F871B2B4790F3071CF93D6A116F372399688 + 483F9825C36EB7705BDC69D5F764276D7AFFF462E478AEA651D5E7977C1E7619 + 385EC32916559C922817F5B78D236C1A769EAB3171CA4E2955A01D1BEDD84699 + 26058D839F81ACF8052CCE94E253BC63DD0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000009049444154588563601860C0 + C8C0C0C0E09650CD20A7694692C6374FEE306C985CCC40A97E1606060606394D + 33061D6B9F7FA418F0F8C65926189B12FD2CC88215CBF7FD27467347A4132336 + 7172F433E153480F30EA8051078C3A60D401282521AE128E58408E7E16060648 + C5805CB613035E3EBC0E6753AA7F6483D1F6C0687B60D401A30E1875C0A80346 + DB03030E00DD245F1367329F0F0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000000F7494441545885ED97B10A82 + 5014867F4305C1450842DCAC35A35928F105DA7B005F22087A8D867A8DA6D027 + 10E75CC3D145086A6988C2C20A3D177438DF780FF7E3DBEE3D40C79100A06F0D + 613B2E49743E2538A70944FB6400B01D17CBD57E0EC06BE80B0FBB4DF40C14E9 + 934B87DEE57A5B677951CB641A3A34550180E86324C4570E449617D81EE35AC2 + C09FC21E18953311BE5EADDB2DC0815438900A0752E1402A1C48E5ED2D360D1D + 813FAD25300DFDE78CEA2B07869AAA7C7DF8FF10569D89F04900608D2618CF16 + 4D442FD238421A3F7E5CA27D0C05DE49A83EDE497827691B0EA4C2815438900A + 0752E97C20EF24BC93B4CD1D07D794D1D4097CC80000000049454E44AE426082} + end> + end + item + Name = 'find' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000001DD49444154388D9592BD6B53 + 5118879F73B55E9A8049B9E97045021533686EE85689DA21760C687090361115 + 2C6847FF0097822848DAD176EC902244D00EE2D424E0A0B8351F76B812300817 + 9A40F3410837A61E8724C2C584D0DF78CEFB3CEFE1C7118C887BF11E332BCF55 + 4575AD017104410024256057F67EBF697CD8B49B9FB611A360EDD1CB8BC0478F + 55307C6696E97A05808ED74F2D10A1A1878A40B4FE7EE39743A09CD7B8F02AA7 + 2AAAEB9B5EDC3366CDCCA807520DDCC232EE14E59F9305C5B1FDFA5D14D5B5E6 + B1F2636180593383C72A184239F3D42150E7E601E23E3337161EC6676601120E + 81983A07109C3EAE4C140C7A092A236FFFAB767C1C02D9EB01943A5EFF447030 + 537208BA951240AA1A884C14D4FA332987A0FD750F29D96AEAA1C36A60692C5C + 0D2CD1D0430529D93AFBEF54287863CF10826B80CF326E1FB6B54B577C3FB20C + 4BEDCCF8A95D8ED0D48D02106DEDEFD862086B8F5FE30EC7168134B02CA5FC22 + 84780224105C4502F01D484929B75BFB3B76FDED0B0442415B1DC092348265BB + 7C903BDE5DC7B510459D9B474CA92025F2A447B752A2FD394DF767B1BF5B5B4D + E20EC76E227807ACD8E583EC51F221B2D39A582480E20EC76E20480371BB9C3F + 150CFD7F701F48D8E57CE628F9E05430C05FD393AFCAA0620D26000000004945 + 4E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000028A49444154388DA5D4CD4B54 + 6114C7F1EFB9739B6BDD21A668D26024216D91D4043341426EEA3F083271E815 + DCF462D4CA6D14F4F20714EA806D34155AD4B65D6DA46648235B6404EA04C94C + 38A9379A3BF7765A64AFD711077FEBC387739EE73C8F502546641BDBCFDF6173 + E2A829C849200DA44424AAAA25200B0CA932EA7E78E515FBAEE07FFE8854C3EA + 7B47D9B46BCF5E6024E49513D1B92C76611AD375F0C2364EAC8552630ADFB426 + 814EFF4BE1DDFCED8ED5C11D3DFD6C491CDB0B3CDFFA696A473C378CE92E07EA + BC70847CB28BC55DAD4594767776EA5D00B45A92ECEC1D33055E6CFD3495D83D + 3E80A8563B19548499C3DD2C36B44EAAEA21E3FF02FB48070227435E3911CF0D + AF8901882AF1DC3021AF9C1091CE00186EDA0F908ECEBD5C75CCD562BACB44E7 + B2005D01D0A8B3015276E1FDBAB05FB10BD300C1911140246ABA4E4DA0E93A88 + 4834082AA05AF2C2764DA017B651D55200D44A1920EBC45A6A0257EAB301D09D + 7D0B30546A4CE15991F57567452835A6008602A033FE1855467CD39AC827D3A8 + 044FE5EFA818E493697CD39A5018098EFC7511C0071E2D35B4CA4C5B77D54E2B + 568499B66E16EBF715804EAF90F7FF7929567392D8D5418C3AFB1C481FE875E0 + 78C82B1F8CE673D885F784DC65FC700427D64C299EC437AD09A0F3FB37677AFE + 6EFACF5BB69A93C4AE0D6258F659907ED00B8A66504222D2C1CA6F834814D505 + 20070CA13A5629E6FDE2FD4B5466DEFC04AD9695CE2CFB0CC800A217818185D1 + 5BF85F0A44DA4F106E3AF06BE97F6E56E51B95D9B738E34F587E360A9E0B80FC + EEACCE3E0D928115ECE10D969E3E58F342568BC4EFBDC6B0ECD34006E112D0BF + F0F0264B4F076BC6000CC3B24F219241B8BC510CC0009A801EA06FA318C00FD5 + 4704E278DE75380000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000003AF494441544889AD95414CDC + 451487BFB7FBDF6561D9426449084A4A8CC434555B1331503421A17A3069F5E2 + A1B4897AC04835166B1B3C78B2A6018931082A014E26C8410F4D4D8C4D5BD344 + 29178C7A204D83A60A4D2114648185EDEEFE979F8765E9CAAE2BC6FE4E6F326F + DE37F3DE9B19E35F1478AC998A97BBF096557A80678056E08099D508409A01AE + 0223C0A58DF8FAC6D2E819D6BEFF1210562878A8E525CA8FBC8B99670F300434 + FAE251820B53F8D7160148042B8886EB708B4A01C6813649D7A2973F6769F4CC + 3F03028F3653796208334F3370CE8947435593E7299F99C052AEB27DE5752C52 + F304737B0FE31695AE022F085D591A7D3F3FC07C01AABBAFE02DABDC038C17AF + DC0AD58E0DE0C42232B3AD3592B6C692E41697DBEF4DAF11DB55BD0A342A99B8 + E6C907083EFD6226E7434E7C35543B3680EFCE72A16C02E0BBB34CEDD8004E3C + 1A0286CCE7F3E407341C06380834564D7E8D138B4892323BCD287B9CB19D5844 + 5593E7011AC10EE6021C3FBEFB1F0638EA8B47D339DF14B0656F1F67DBE53313 + 38F128406B0EC0BC3EACA804A031B8309553D09DC852AE4A17A6000E38F93D0C + CC6AFC6B0B648E9E99CAB60BCDF9D716C1A8C90FB84BDAE4DDED94425D946D67 + 7CF2161904D24C225851985F4089600588995CC0860BC904C078345C87BC4E4E + A714EA224992D7211AAE0318CF0128192739FB1BC0881B0811A9A9CFDB3585BA + 2852536F6E200430923745EB13DF20B8887475EE91432403653B4E4D3250C6DC + DE43205D15BA981710FDE12B1012BCEAFA4B13379ADA77044906CAB8D1D48E5B + 54BA22D126216F8E97E327DCF6214ED58366D0093CE516851291DDF55E2719B3 + A29539D8486D7BEC7C16D9DD60D30DAF9028A958019E077E5CFD7668DB63E7F8 + A96CEF27B0BF05831E333B29A9176910B341A0C949AC115CF895CC1D4904C3AC + 851FC2F50701C690DA04D763BF7CC7C2676F6401BC3E2A5FFF84E27D2D00DD66 + 765AA817E9A48448D7B085CD0F07B307D2DBD74DD21FCE17C0656D6C68E5C230 + CBE73E0237B10970FC541EEFA7787F8B21BA805318BD126FA79666B5387C8AE2 + C79F25F8E47378768521FBE0121828B6CAFA4F9758BD304CF2E6F5AD69C3F113 + 3EDE4FC9BE1630BA0C3B2DD407BCE52EDED27CCF31DCF93FD2DE1E2FDEFBAAF1 + 04FF5E70C5D7716F4F43CACD29A985DF1C4C0787B366F68E501FA2C35D9AD5FC + 07ADB8F3D3398BFE8B9CCD9C9F053A85FA243A524BB39AEF3E827B7BE67F0507 + 700CDEC3AC13F429D091FA7356F33D47EF4970483F763F031F234EB899E0999C + DF03FD055BB4D89CD961E1630000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000484494441545885BDD66B6C53 + 5500C0F1FFB9BD6B77CBD6AE9B735D9983491004F67289C20083A00E124C86C6 + 89C29806A389E183686224513FF88A668C1825C1C4C4181F40826C620C82BA31 + F8A2C425B365061264630CF6E8186BBBD1E7BDF7F861C02486B5ECC1F9DA7BCE + EF7FCE4D738F600A4371E4A0153F82B5A8044BB61B8100402231027EE2E73B88 + 785B3083FE5BAE212603ABB98538376CC75EB1EE2EA1A66D04AA801221449E04 + 8994FD801738224D637FF8AFE640B069177AEFD9A90764ACD942D6D36FDA9534 + DBDB8AA96F735E6CB73BFA7C68C33DA8D11008D0D39D845D85843C25043D65A3 + 52B1EC927AE2A3C0A14F6223873F9F7C4056CD0E321FDF3A5F08F183ABA76DA1 + BBE31069D1D08473E25A167D254F12F4947A810D23ADDF750F7FF3CE8DDF2D29 + EFFCD1E771566FBF4F419E2868DF3FC77DFA30163D96749E458FE2BCD48E9A88 + B847F3163E659D5BD2240D3D183BFB67EA016A5E11B9DBF66408C5D252D0BEAF + 30BBFB64AADDC0D831DB87BBB124228E91BCFB57D9163CF455C4D76298C1C1D4 + 02B25FF818EBECF91FBA2E9C5CEF3E7DE4B6F0FF0E6DB89B98D3E38E39F20D35 + B7F078F8F7269464932CD91EB492556EC588BF927FEAC749E3307612F9BE4684 + 69BCA62DAACC52F38A920768A5AB1116B5D6D5D36653E3A3530A00B04602387B + BD19209ED12AD6260FB0CD2B0758EBE8F54D19BF3E1CBD5E8075B6B94B527805 + 391E80326DB87BDA02ECC317004A2D39B3930708AB66554CC3A5C6C3D316A046 + 8320845B2092070002A49C361DE0FA6A82E401D2D063A6A206F5346DDA7C3DDD + 0152FAA594C9038CA14B00BE4856E1B405445CF700F88CD0E5E401F12E1FC0D1 + 90A778DA0242F9250047135DBEE401115F2B12BE09143E98D0D3EC53C613E90E + 8205E56109FBC2BED6E4017AFF396267FEB868A8B62F0616AF9F72405F7135A6 + A27E1A3F7F6A28713E851300083436204DE3ADA1A2E55D818207268D5F995B49 + A0A0E2B494F283C0C17A20C5AFA11118402B7F2CA63A73C3239EE227ACA39749 + 0FF5DD26BE8C4B65350308AA465BF70E8C367F9D628050C8D95A8FB664E5C3C0 + 1E2994D783B34B172734A7CB7EA50BC5484C383D61CBA4B7BC06FF82AA3312AA + A21D27FE19FAF20D308DB1E593E22FD6336B69F54AE000B051BFD2D7AA66BB1D + 20DEB3E8B197B27ADAAC8E5E1F5AA007357E150918B68C6B57B25202051551D3 + 92B65B22DF1D3DB6F7EAF0FEF7418F8F13C9763EABB27AC535FCD958A7B7D5DF + 5087B5701159353BB0CE59E21142D43276292D16D2CC01A414CA106397D29F81 + 6F63DD7FFB838D0D443B8EFF9F99105F56BD02C101E0B958A7F798BFA10E1919 + B9F198F5DE32B4D2D5D8E695A338EF46B167AA08A40C8F187AC04FBCCB4BD4D7 + 4AEC6CDBADF73901BE1CF81E2136C53ABD2DFE862D37E1D3356E0E18C72B8183 + 2037C7BA4E35CF140EA0DE0A97A6B159EF3BD77CF9B397670C87EB7FC3717C19 + D0684A6AE3FD9DCD833B6B31438333868F058CE34B812629E516BDAFF3B73B81 + 03A8196BEAC671A88BF777FE3AB873136670E6710055499F05E046CA3ABDBFF3 + 97C1FACD770C071042CBC459FD2A425109FEB4FB8EE200FF020E9DE3A9D35360 + 330000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000622494441545885C5D86B7054 + 671DC7F1EF73CEEE399B3DBB49767361A18194648342915296410933904E115E + 38CE60D1A9540A327594C1DEA8AD53677CA38EC541A64C2D450A2909DADA0BED + 8C621DA78651264CC49689A52D62851882A5E4C6267BCFDECE797CB14B1AA65C + 7661437E6FCFB3FFF39967CF73159438F69973D13FF745ECB5F5088731E18944 + 665264FA7B49F59E20D3F72158E675EB8952A044991BF73D1B70AD5887EAF539 + 05A205580AF811C203522219054E037F97D0698EF42763C77E4FEC703B56E4E2 + E4018D15EBF07CFD8728CEF226E049E03EC5CABACA46CEE1880DA2A6E22020AB + B94895FB18AB9C85A5A861E06529D96125E3E722879E257AB8FD8A3D7AC340A1 + 3BF17E6707CE45AB35013F05B61AC1B3B6AAFF1EA1BCFF248A95BDE2EF2C5523 + 3C6301417F0B89CA9929609B84A793A7BACC8BBB362353899B070ADD49EDD636 + 347FC0278438644F4602B79D789DF2FE0F0BAE2181705D800B77AE25AB194781 + 7BD39F9C1E19FCF9DACB903704AC7E782FCE85F74C073A8D91B30DF5C75AB1A5 + 6337528A8CA392BEE6EF325671DBBF8096E47FDE1919DAF1C0F8DFAD165BD0BD + 7223EE951B1D4288C346B077DEECAEDDA8D9E40DE100D46C92CA8FBB89F9E6D5 + 661DE54BD5EABADF924DCBD499E3C50395F26A6AB6EC46D11CDBED63A1350D47 + 9FBB29DC785D2B4B79FF4942F54BEAA5AA995AE3A2CEF8BB6F21136194620AB9 + 573D8870BAEF10F050DD7BAF624BC76F1A7729F6649819EFBF09F023A1E9F5EE + D50FE6F0055750545CCBD622104F19C3A755F7E0BF4B86BB948AF3DD38431FEB + 02F103D7D2AF814D2B1CA8FB17A3BABD95C0DAEA9EBF951C07B9115BD5730460 + BDD00DDD317F79E140AD712108B14ACD8CE9EEC18F260508507EE10314CBAC10 + 82E57AD3E2C281765F0340B311EC45486BD280AA99A62CF43F8066BBAFA170A0 + ADBA0E608E1E1D982CDB78F4C800C01CC56114378A018F2D55BA917BB5E4277D + 2F42140D14B9456A922301915BE50A06E659215333AEDDB004317583DCF64C16 + 0EB4C2C3006792EE699327CB27FF8E33329D2A1C981D3A07702C51D5802CCD3E + F78AB1141B639E5900FFC80C9D2B1C98EAE9464AF976563732B1DA3993068C4C + FF0296628F493892EEE92E0278FA383295082239146C6C993460D0BF02E05569 + 6613C9535D450C92F418F177DF02D816F5CD93B1EAA692E3C2331610F7CECE00 + BF1C3BD181151B2D6E9A89FEF905A4997D4FC2BEF38175983647C97019DDCD85 + 85DF0078464AD913F9E3F34091FB412B1E4671B8D0FC812396E65C93F4CCAAA9 + 38FF4F84BCB9B9D15235FA966D26E59A765C4AB93176F47533DEF95AF1400029 + 2D8CE67B3302DC1957CDCA8477F6350F49D74B5673D1B76C3309EFED3D48B93A + 33D01B09EEDE0266A678A0EE0F50F3682B8A4DDB04E219903F4E1B55D3C3758B + 6A1C917EB444B0285CC477077DCDDF23E9F6754B295799918B83C33B37618587 + C6DB140CD4FD016A1E6F437118DF06B117E41689FC15920396E6F486662D5994 + F0DE2E6CE9385A6204719525510A95E8F4F97C72D77D0C7DFECB59CBE6D80972 + 7D76A03732BC7313D981DECBDA1734E3EA4D016AB6B6A1E8C64610FB407E1FD8 + 177A633BAAC787ABE57E506D770A780A58A366C63423D88B1E1D444D273E3DB8 + BBA791A86AC0B4E949E0A094F217C047F1AE3719FDDD4F3E73262E0838A1E736 + 8068BD841B7DE567443BDA81DC7D4CF9571FA16CE1DD28AADD03AC02BE043401 + 9E7C778E2073571F200F4BD38C8C7DF057C27FDA43E6ECFB577DFF3581E338DD + D88010AD201F02F64EC44D8CE2F250B6E06EB4C6BBB0FB1A502A6A50EC7A6E0F + 9449618686C90CF591EEE92679AA0B7374F07AFD7375A0D614A0F6B1361487F1 + 0042BC083C0CBC90C3B55DB770A97245A0EECF7F730E633DB01F780421F6DC6A + 1C80ED1AB86F01FBB1CC4711624FF8D0AE5B8EFB0C7002EE7E8468B32CF331A4 + FC75ECED56C27F78F696E32E036A9FE2D681689796DC2A11BB231DED44DFD83E + 2538C84FD45AD3626A73B86F22C46F90D6E348F97CA4A39DE8C1A7A70C07A0DA + 67CE65DA132FE5711C909227805D91BFEC2732C538009B7DE65C1487311FC101 + A47C12C973E18E362207B74DB50D005BFE02FB24965C2EE19D68C77E22AF4D7D + CF5D8A00702EF90A365F2366689878E72B536DBA2CFF0731BE752EB83AB67A00 + 00000049454E44AE426082} + end> + end + item + Name = 'replace' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000030349444154388D6D914B685C + 7518C57FDF3F93DEDCA477663A988CE96B36C5CA348F4AAAB8B20ED924188231 + 340FB1810A79595070A1815A1A7C1082881189A1183719A8AB12B2120D685682 + 8D8F260B654609ED68D24492299D64663477EEFD5CB43E063CDBEFF0E39CEF08 + 406767271313135DC0A56C367BA6B5B595D0C834D5A75B7D00552D025F000377 + C63B76DD5F7FE26F1980BEBE3E809780539148E4C9B6B6B67F0C7EC9355A72EB + 0017B87020D6C07F65E2F1384D4D4D278138700518EDEDEDFDD7E1B9A8E71AC0 + 065C44CA0081FEFE7E446414F844553F16919F9B9B9B1F7AF4DEDDED0C60ACEA + FB35C043F5B2A9099527686F6FAF010644E40D63CC8E884444E4C51347A30068 + C935DE7ED142750C78BBB22E560EB06DFB79E0AB5C2E6752A99451D533C070CC + F60D807A2E7EFE9E023EFF23033C037C34333343777737994CE67B60BDCED2D3 + 3CA85079285A007A415F2BDDDD2AFFC1E6E6E673BEEFFBF3F3F3F8BE4F329964 + 707030F1FBC61F9E7B6BDF3CD81105FE4C7D43EEB3AB6500999E9E2693C93039 + 395976181919A1B1B191DDDD5DC6C6C6A83186B1C387690F874DA8A2E288AF9A + FDB158CC07128984BFB1B161D6D6D6585959219D4E130E87191A1A0A5A96751B + 786C6161E1D6A59D1D9E0E85CE01538007048F58D60706A0BEBEFED0F8F8F82B + 737373343434D0D3D38365590380058CBE75FE3C6783C126604A553BB2AE7B5C + 558FABEAF5005052554744FA1DC789CDCECEBE5A2C1601468161E0DDD8B16357 + C49817509DF97A6FEF876753294EDA76EEE1406035A0AAEF8BC82F2212009E70 + 1CE73BC77136817D554D8AC839FFE0C13EDFB6EB4DA170F3EAD61645556E160A + F7675C5D5D7D1D08A9EAA2AA26814F818BC00911F90D78CA0B872F96EAEA6E03 + A786A3516C634804835CA8AD456A6B6B595A5A8A022FABEA65E0A8887CABAA8F + 6F6F6FEF87C3612A2B2B979CC5C53723D7AEBDA7AA8305CFFBBCC6984710395B + 512814C8E7F3F9F5F5F52FD3E9B4C6E3F136E0CEF2F2F2F5AEAEAEBDAAAAAABD + 969616E345224EF58D1B1F56148BEF1C30660A910E60F92F0B9B4349BBBA2035 + 0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000040749444154388D6DD05F4CD5 + 651CC7F1F7F7777EA71FE728726A264750C329D2B06561CE799372B0920D5022 + 3130BCA8B5145BE54DB6866BD32CEA74931B2BFF4C863A92AED0D9D6ACC31FDD + 6A82B5C950AAB9084B4037060B010F7FCEA70B8D54FADC7DF77CF67A9EE76B00 + 3E9F8FB367CF120E87BF00D22515E5E7E7D33B9A6041F4FC5AA0993B9992F43B + F009E268DFBE8D4CF474726F1C80482442381C4E01B69A59BE99656CD9B2E5BE + A2A45C492F007566760858E165ADE6C13800A5A5A500DB80BF255D06DE282929 + C1F3BC7BBBADF16B579A247D24A917F494E3056682191919AC59B30660077018 + A8015E4D4E4EF60A0A0AFE6B1A6BBD45D97966560D84053F6A223E132C2B2BC3 + CC22C012498725D5037E33DB5C5252728F67CD66F69D99BD0BF499D9B07FFED2 + 9960515111C00E33F33B8EF397E338C36616022A17A6CEC567FA77874E229170 + 12D212A01FD8EBCE5D30139C33674E3A502469FBDDC5E74ADA6C66AB937C3CFD + E8439A2E8F753481D40DFC00A4CDD00017781DB80A1C8A46A374777773E0C001 + 5CD76D728DCAF4249DE88F83997D105C9107B0082807B6FF1FE800A340B4BFBF + 9FE3C78FD3DADA4A2C1643D2E70643C9AE868016602DF02C301BD80AD48D5D8A + CD7C614F4FCFA7AEEB525F5FCFD4D414000D0D0D2C5FBEFC4C023BD37B7980DB + 438A00E8CE32D1449CD19FBE65E4FCD73340DBBF7F3F00478E1CA1BBBBFBBEC3 + 4020405555D5F45C5D5DCDF0F030B31C879DA9A96C088548F5FB0118999AE2E7 + 5BB7708B8B8B9B805D8D8D8D971E040B0B0BD9B469D302A05652716767E7ADD3 + 0D0D9CCBCE262B105808EC0172010F68CB0E04F639C03A49A1DADA5AB7B3B393 + DDBB774F8365656500DBCD2CCFCC5E292F2F674F5A1ACB92921E03DA802780CF + 802AC08759A93BFD77B35A60A0A2A2E21D80582C466666E643C06B92AE02958B + 172FFE32272707EBEBFB18F84D52DEAF636393D7C6C7792E25E51892B9C03890 + 0A1C34B36F00A7A2A2E2ADC2C242CC6C33902429E238CE2549EBBC949473F4F5 + 1500DBBAC6C62673BBBA18492448F3FB71CDE4483A686627CDEC1C906C666F9A + D9FBA15008602770CCCCBA249D36B3CAC979F392CD6C36F0C7C19B3719492400 + E89D98E0DAF8388EA4B725E548DA28E986A42EE028906366AB81C7EFCE616063 + 3C232324E936307FC39D4BEF8BAFA5A5854824D21F0C06AB81A0A43CE086997D + 08CC02AE9819C000902ACF7382EDEDA34E3CFECC52CF3BB92C29892703014E65 + 65519596E63780C6C646323333B3240D01378047CCEC4FA0FCFAF5EBA7DADBDB + 59B56A15E9E9E9959648543D7CE244417273730BD2F7401D90005E04E6FB002E + 5CB8C0E0E0E0405B5BDB484747072B57AECC015600EF45A351D5D4D4303838C8 + FAF5EB7FC1715E4E78DE57C18B17EB6C72F2796017F012302C69EF3F0C1EAA8B + 27570A430000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000005724944415448897595616CD5 + 6719C57FE7DFDBDB726F29154A6B6F564220571620318E1589619699305A9840 + 4D5A90149984A425B562FC4013CD06AB6699C43948266CB5624D30A138283A63 + 4D4CD3C91A3441BA31B77E201653128AD469D7DD96DB727BEFF1C3BDAD8B94F7 + EBFB7F9EF33CE79CF7FC45EEECDFBF9FB6B6B690A421A0DF76D3912347E8EBEB + E3330DDFA3B8E6D031DB2F481260DBE340BFE1A8CC3FEEB6EF2275FB03FEFF04 + 004110B06FDF3E246D93B41AF8BAA492C6C6C6870A6C1FB7DD0EFC1A785AD06B + 1C5EF4F9AF3CF4ED3CC0A64D9BA8ACAC04386CFB1320027C63C3860DAC5AB56A + AEF15C4D7B7AE2A3176D1F069A8138E80B794B4A1F0D909B7E95A46DC0ABC055 + A0290882A0BEBE1E802C3380209DF8686E9F224908CF2ED81D0862B1189B376F + 0668B23D6BFBE7C0EB921E97F4F4EEDDBB8944239FAE39167EECF1E3923A41AF + D9BE66782F73FF9385011A1A1A0885428B8003C06F813BB6DFB4FD2FE0F0E2C5 + 8BD9BA75EBFF28322F00CF03DF04160196142D5CF7D4C20075757500F5C07249 + F54110642425259501CF4AAA7CACB4649E224979409E71B1E120D213C077F34A + 962F0CB06CD932241D066ED93E0E1C075EB4FD5296710EC50A3204CC8BCCD45F + 7E433A313E85FD4BEC9BC0FA47691002360055C0B781D357AE5CA1A0A080AAAA + 2A24AD070E9515F887913C48CC66DD14DDB40BE388D02EE073C0C54702E4A64F + 00BFBA71E306CDCDCD8442217A7B7B89C562A781DE6888BAA29049CC0A491900 + 219C15E69AED937E84C821DB6724BD6D7BE2DCB97300CCCECE72E9D2255A5A5A + FA241DCD8381C2807B90E52927F834F0BE4D1F3835F1D66B0B02A8A7A787FCFC + 7C92C9248D8D8DCCCCCC00505656466767274110303231C3AB83FF6622A5F9C2 + 39576512FF61F29D0B3C181E5C7883AB57AF02303C3C3CDF1C606C6C8C9D3B77 + 02B071E346EAAAABA1207B77E1C20546464600880401074B4B79261E67654101 + 7323FCF3C103FE3C39898686868E016FF7F7F7FFA9A5A565C129BABABAA8AAAA + 8A93B5F3CBDDDDDD99F6F6765686C3F4AC5943BCB050402DF02C50018C61BF65 + F8BD86868632B68F8F8E8EB60F0C0C90C964E8E8E8E0DEBD7B00C4E3712E5FBE + 0CF033E020B0636262E20F3535355C8EC5A82A2A8A4A3A0F6C07C681DB40A5A4 + A5B65F09724EA0A2A282868686BA3D7BF6045D5D5D94979703D918B7BD0CD89B + 5BA8A5B8B898137BF752555484A453C033B65B6D97DB7EC2F059DB4DB65F0F72 + F98EA45A496F4A3A55595919747575118FC7A9ADAD45D273920A818BB9405CBD + EDC92701560AF6930DC8D3435353E903C3C3F47DFC713A914A754ECECEDE0A01 + 4960A5ED1F003F92D406042B56ACF8567777B7C3E1700034DB7EC7F611493B25 + 35391A3D4A5E5E357608FB177753296A6EDE643C9DE6D2F8F8BC7E81EDB3C001 + 49B3405B8EB166E027E170184935C02AE0A7C05DDB9780E7D2D168C4914885ED + 07C0E8D9B131C6D3E9876D6AFB3BC080A4354099A466DB49E07739F65A244DDB + 8E4ADA0B8C4A5A9659B2644F7AC992C9BCC9C990EDE8FA4824B19003F362B198 + 972E5DFA61341AFD50D2F78162DBBB25F50171E01549059276035F93F4250087 + C395E1E1E1CE823B770E017F8B1716BE3F964AF1EEFDFB6C2F29A1B5BC9C9A92 + 92ECBB3871E2043B76ECA8027A80FDB6FB73C2FF1868B1FD94A44F87CD2EE0E5 + 4583835F5EFEC61BA73433536EBB1AB835964A51969F0FD25AEC2004D9576CFB + 1AB006989A9E9EA6B0B0304AF6277411F8EBF9F3E7B97EFD3ADBB76F67CB962D + 6724B5CDC4E3CDC975EB0E460607FF28E95DA0A73C1CBE03AC06BE8AF45E08A0 + A3A383DBB76F138D46A732990C656565B4B6B656007F07CE2493494E9E3C4922 + 9160646484EAEAEA49499D99A2A2E5C9B56B3F5874E3C617954E3F0FD400A5C0 + 2870D6F64BFF05BFC554F467937FDA0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000007C3494441545885CD976B5094 + E715809FF7DB0B2CEC2222AC20E282608DF5BAB618EBAEE93A2A3A6A07271BE5 + 62AC9ACE9848AB9DD62833B14DBCC52655D3E82842751C2512D4EAA40E4CBC8E + 3AB13141131C95CF182FD86A55E4A2A8EBB20BECF7F607175DC1A07F3A3933FB + E77DCF79CF33E7ECB97C824E64EAD4A98C1F3F1E80DCDC5C3C1E4FD07DB75FFD + 0E63D2D0A7AC245AC3237C974FF3E85F7BA0B9B1B3A73B8878FA4051140E1F3E + 2C626363CF036FAF5AB5EA40515151904ECC82CD840D1B1B78C25E9352D603A7 + 81BFF8AF9DFDA2FAAFD9C8465F9700CAD30763C68C213636761C9004E4646565 + 3DD358F33728FE7F9F579AEE551924F4070A81E290A4A18EF0D1D3BB74DE2940 + 464606400E900BBC9C9898983862C4884E8D9B6E5FA16A793AB7168E9237FF38 + B2CEFBCDE7C5C09F80DF1B6D835F1CC066B3316AD4A804C021A5DC0A140A21DE + CCCECEEEF221ED7E0DF59F7D8C94A8401F11DEEDC501B2B2B21042CC0576DCBA + 75CB0BE403B35D2E5788D56AFDC18784C942F7CC2508C12BC005E97DF86200A1 + A1A1A4A7A71B813780FC356BD6A0AAEA55E08CC16098367D7AC79C1AAC366216 + 6CA6E73B7BE8FDB7B268D3E05FCE07DE063EF45FFDF6C500264D9A444444C4AB + 40457575F5A5A3478FB273E74E803C609EDBED46AFD7071B87456861C3C66AA1 + 29C335C5185A2D8458079448292BB586E0D2ED12A035CF39C0264DD358B76E1D + 53A64C01F81C888B8989B18F1D3B36C8B8AD0A1A6F572A01BFD724A51C09F412 + 427CDA3DEBCFA00B06EE4CF40043860C61C0800183018710C2191717475C5CDC + 937A129897999939F7E0C183ED876D5500804EEF0F1F997E2A6AE68AA9C218A2 + EA2D513F33C4257FDBF4DFEFBB8E406BADCF03DEADAEAE5654550DFA699A160B + BC9A9A9A1A999C9CDCF94B81661E7DB997475FFDB3094939D0179DA1EB084446 + 463271E2C40860BA9472606E6E2E656565414A050505354EA773BF1062566666 + E6BABF3FE30F1EF293119886A7E9003BF0215AA06B00B7DB8DD1689C091CAAAC + ACBCF3B47380DDBB77E3743AF380ADE9E9E9EB8B3EBB2C258FAB40319951BAC7 + 86E863FA0C12F00E7059F379CE34DDBEDA258062B7DB0166029B8A8B8B3B553A + 76EC185555555F01DEF0F0F0118989892DC66D55D0FF65CD60B5D50BC136A05C + 4AF95AFD9ED5CF3590F4D7AF5F474A39DEEBF53E2C2929E95449D33476EDDAC5 + 82050B5CF7EFDF7F78EFAA8A3FB4560720747A84B9BB904D8D527AEB69BC7919 + CF17BB69BC7CBA4BE73F0A11090909582C167C3E1F959595FF7F808D1B373266 + CC98F754555D366DDAB4E7328A898961E9D2A54829292929E1C9DEF0A424188D + 644445610F0FC7A0B4F63C29A9686860575D1DDFFB7CB4B5AAF78065CF4B9D91 + 9181CBE55A08FCA277EFDEAF750630D76A6555424278A8A2CC07A6032FD1B2C0 + 5C9ED4BDFBEE8571711F7F74FBB627681A1A8D46468F1ECDF0E1C39FE95CAFD7 + E376BB155A1AD7F89494943EA9A9A9413A73A2A3F9C8664B0A559472602090E3 + 0B04A21E05029148F90690A213E250568F1EC1E338272787BCBC3C67616161D4 + AC59B33A05484B4BC36AB54E02AA812D42883767CC98D17E1FA9D3F17E428211 + D807ACBFDBDC3C73FEB56B5FC79F39E38B2F2FF7CFB872E59BEB7EFF6CA49C52 + E1F5B6A7004551309BCD00E38410EB172F5E3C1EA8DBBE7D7B10406BDBCEA165 + 4A7E0D9C70B95CCB7BF6ECE9BF73E70EEEA8282C7AFD6CE03F0F03818DE3BEFB + 8E4BBEC7BBE1BEFA7A0E3D7840379DEEEEBDE6E6F608046C369B72E2C409EEDE + BDBB9496097864F1E2C53D9E8C44FFFEFDB1DBED29C0B04020F08F1B376E5C01 + CA0D06C3F4D6550E87D98C800C60D307B76E05396F93064DA3AAA909BF942D00 + 52CA7293C9F4D6CA952B95070F1E40CB5E57DA0A11DDB6986667672384C801B6 + 9E3C79D29F9F9F4F6B2472DAF605B34E0730544A59F6696D6DA7697C529453A7 + 4E01FC1A98151515D5989C9CAC09213421C41221C45060BDD3E9C46C363379F2 + E430E075A0A0A8A88803070E505F5FBF1F88898E8EFE795A5A1A0801D0ADBAA9 + E95E4D73739700BAF3E7CFA3695A9DC964DA525B5BBBBCB1B17199C5625906E8 + 804820ABA4A4C4DBAF5F3F5C2ED76CC0086C8E8888202D2D8DE8E86819161666 + 00265BADD67DBAE3C7E9171AFA0793A2146CA8AAF2354AF98300411F26F1F1F1 + 141414909494B412980C8CDBB66D5BDDDAB56B292D2DC566B39D698D4A079152 + 364829FB3CCACDAD1B585D7D1C78FFAD6BD70EEFE8220D41653867CE1C6C36DB + 5260529BF3D5AB57E37038B0D96C4EC0E8F3F93A2C2CB5B5B50A502C84F84D6C + 5A1AC01E60EEBBBD7A116BE8B894981585616161F47AFA6EE1C2859C3B77CE51 + 515111B568D1A2F6F3BCBC3C54552D5655F5B72B56ACE8F0A0C3E1405555BBAA + AA9517CACA94070E87C9939A7AC9939A3AF3ECA041382D9676DD57CC664E0D1C + 88273575F44DBB3D380566B399091326E0F178DAFB7B7C7C3CFBF7EF8FD3E974 + E780BE6EB7FBE1C58B1783C3A8286D29FA12F840FFC92725F1478EBC84100780 + FD40FE75BFFF821E0C7146E3D0D64A1AA149E90C4A81C7E361EFDEBD41C32525 + 25059D4E3712283C7BF66C07E7F0785F00360023778586B2B9A6E6A294D20ED4 + 02C57D42423CBD42426A84101B00554A39BCB0A6A6A6C3D7F1D3D2B76F5F962C + 5982C562213F3F9FA3478F76AA67369BD9B2650B003B76ECA0B4B494516633AF + F7E8C14FC3C2D0B594274D5252E1F5B2B3AE8E931E0FFF0332BD0FAC38B0654D + 0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000AC8494441545885ED987F5494 + E795C73F77DE6146108611868420033AD650A5626DBA615388A829463C9D8821 + 8A424D4212EB4AF6F4AC9BB0BBA77B92AC9E98D8D4D5762B499B6DD6F4444962 + 8F565B7AA2209A31EBAE1B0B6AFC51090AA1A2120521A030E03B73F78F19880A + 24D2F6CF7EFF99F779DFE7B9EF67EEFB3CF7B9F7114690D3E9A4ACAC6CB0BD7A + F56AFAFBFB87F4B34FFE26D1F72F1E725FC3BFC1EE2BF81B7E8FFFA3FD100C8C + F4BA11651DE941414101F9F9F95F055E0116D7D6D6FA77ECD831D4C01DA94467 + 3FF228F0F88D780A7D28E7015FCCBCE5BFBAFEC753FE4B1B4B0876B58D0AD032 + DC4DC330282C2C04F87B11F90EB028DC1E49A9C004C007F854F1A11C01A2801F + 0B1CB5A54C9DE02A2D1F151C8CE0C1ACAC2C929292A281EFAAEAC740697A7AFA + 5BD3A64DE3F8F1E323D96A36DB5A565F3DB81D8BC38511EBC23E250B8B3DCA21 + 223B805FDABF724F8E35D183D9DAF8E7011615152122DF057A814522725455BF + 51585858F70580986D2D7CB6EB27836D898C21FEC957BAA266CCFD07113906A4 + 5AEF486D1E0DE0904FEC76BBC9CECE065809BCA1AAC755B546444AE7CF9F8FD3 + E9BC6DE3DADB4DE78E0DA8EA1F0014DC3276DC6D8F1F1670F1E2C588C8FD2232 + 0578DD344D80D7802576BB7D5C7E7EFEA85E103D6719C0644044F5A25EEFFBD3 + 016D361B05050500A5AAFA3B55FDE3FAF5EB017E035C011E5BBA74E988C624C2 + 8E113F9E08F71422EF9947C2F7FF939859451122F243553DA4703678B9795480 + 37CDC1BCBC3C1C0E4722B01078A8AEAE8E2D5BB650585818F0783CAF037F979C + 9CFC939C9C1CF5F97CB7DA8AB54F9A9193FCA30F5055001B90067C0F88071E30 + 2F35D3DF7C625480377930BC389E029A55B5BAA2A2028077DF7D1755FD05A150 + F2EDC58B870666E0EBC07E60BF88EC17913D22F21F22F235E098AA76631B8331 + 2EF14F034C4F4F273D3DDD0096033F13119D3D7B366BD7AEE5DE7BEF0568057E + 0D94E6E4E490949474AB2D5FD89E45552DAA4143551354F521C0292287ACE312 + C73B16AE1A15E0E0270E7BCF0BB881A580D7EBF50E760C7FB6BB804922E22E2C + 2C3CB771E3C69B8CF94F1FE2D3578AC062608C4B54DB8469ED310F3E55699FF4 + F52A417C026BC6CEC87DB2837FBE6D400B84F6DDBCBC3C8052E000F03B11F185 + BDE2037CE1F63B4033B0A2A0A0009BCD36BCD5608040FB797A6B7773695D217D + F51FF6033F077225D271DB7010F6607E7E3E369BED6E1199A3AA99C78E1DAB3D + 78F0E090CEF3E6CDC3E3F15C029E773A9D6B727373FBDFEFFC92370403F47D7C + 983169997E2062547403804B962C414456AAEA6155AD2D2F2F6738C0C6C646D6 + AF5FBF057859441E2E2E2E7EE7FDF2ED235BB71844FDED02621E7C0A601E5037 + DA8CC69A95954572727214F028B0AAB1B1715838809A9A1AAE5CB9D21D1717B7 + 0528CDC8C878273DFD349F869F47DC3589F8275E41226C581C2E22C6A7618989 + 7308FC232245AA9ADBD778747480B9B9B988C85220006CDBB66DDB889DFBFBFB + D9BE7D3BCB972F7F4D443E02A66567671FDF6E0230DD884DD8179DFDC8C082B2 + 004E9034D02BA81602BEEEEACDA303340C03553D2722FFDAD7D7E7DFB56BD717 + 0ED8B66D1B4F3CF1C449C330D60201AB61803918626E5527A227543910ECE9BA + DEB9ED657A6B778F0E70F7EEDD24242454D9ED760E1D3A447777F7170EB870E1 + 02151515A4A5A53D7FEDDA35F6EDFE6F3A8D3B0F105AFD0018F1E301085EED40 + FBAED1DFF231FE1307D0BE9E51C1FD557F09C9DAB56B59B870E19D80BFBCBCFC + B3F2F2D1A7E51919194C9C381180D3A74F535F5FFFA563E20D83FBA2A389B5DE + 9C3337F7F773F8EA55FA420B6D70AB7B9BD08EB17AD474C0BA75EB484D4DCD07 + 2E1E3D7AF4FF8A8B8B47EC9B62B3F1C39414E6399D44403A22F7017702FD4003 + AAFB3B0381CFCA5B5BD9D0DA3A725577BB9A3973262929296381FF024E4C9F3E + 7DE6D4A9533975EAD490BEF74547F3EBBBEF26DA30B2800D22F24D556D065A00 + 3B908688D569B5BEF683E4E47FCB8A89B9362434444646E2F57AF17ABDC4C7C7 + 7F296061612122520C5844240B983E5C0538D96E1F807B92505A765255BFAAAA + 9EB6EBD767FA03814C42D94F09F030B026C56E1FEAC1175E7881F9F3E727582C + 167B5353534B4949096D6DC3D7B26EB79B59B3664128C97855553345A4D4EBF5 + AED8B871239D9D9F6FD4EBDC6EA22D961C42E5C34A54DF78AFB393972E5CE048 + 4F0F7611BEE3745E5F9D9CFCAB0963C654896AB0C1EF1F1A5C5D2E1722B24644 + F67B3C1EF7E6CD9B71B95C237A0FB85F44D209652BAF024576BBDD7963EDE2B1 + DB99EB740A223F255488BDF17C4B0B8BCE9CE1484F2836F6A9B2BDA383CC9327 + 59D1D8F8D98AA6A6EE954D4D9F03AA2A4EA793CB972F130C069F219456EDF778 + 3C29C341DE50BF3CADAA95AADAACAABB800EA0A4A8A808C3300098171B8B88CC + 144853D5353B3B3AD8D0DA3AEC9FBE160CB2B5BD9DADEDED5C32CD10A0AAFA81 + E8BCBC3C2A2A2A3870E0408FAA7A81A63064EAAD900B162C202626E62E60A1AA + 96D7D5D5D1D4D464863DB932292949B2B2B200981A19093057E17F818B6B5A5A + 86851B4E031EAC021E753A9D996FBFFDB6CC98310311E9051E02CE02FB0620A3 + A2A280C1C5F13DA011A8D9BA752B15151503B58B5B441E2C2A2A02C02A02A102 + EAD8A9DE5E1AFA6EBFF4B47CF8E187009B803D168BE57F2C164B202E2E2E2822 + 4111B92622DF169189C06E8FC763753A9D6464643065CA940842F5CBAB6D6D6D + BA77EF5E2A2B2BE9E9E9F914D80E3C9D9D9D8DDBED861060ACAA767ED433BAFD + D8525959C9CE9D3B4D557D34180C4E52D559C06C559DADAAB381EAF01458659A + A6D9D7D7C7B265CB20549A3A805F9E397306AFD7CB030F3C405353134039A104 + 75E2801701BF8844C686E7E5ED4A062E264C98404242020073E7CE256CF84560 + 15F0B0699A7BCACACAA8ADAD65DFBE7D58AD561F7007A13A0509796920170478 + 06F8595757D73FFDE1F1C759EC706C0292AE06020FA71E3932B8957DA907072E + 3EF9E4130E1F3E8CDBED66D1A245002F85E1F24DD3DCF3ECB3CF525555454141 + 0156AB3503C8065A4524474472801CE0C6EB8F811287C311F937F3E7031C0472 + C61A86BD7884B0359C8604EABCBC3C0CC3781EF83EB0C034CDBD656565545757 + 631806E1A38F52C0A7AA73EAEAEA08046EAE33A2A2A2484F4F8F04CE014BC6CC + 9CB9593FF8E03722522EF0D8EAF1E35FFFA0BB9B06BF7F58A8195151441B0667 + FDFEA18081400055DD031C344DB3A6ACAC8CAAAA2A00E6CC994342428253448A + 55B5A4A1A161603EDE24C330A8AAAAEA4D4C4CDC0C3CDD3F79F2E6EB4949D76C + 172FBE04BCEC8C88F0BD979656FF546323EFDF9020C75A2CFC60FC789E4E4C14 + 20B5B5BFFF932133F6DCB973B8DDEEF32D2D2D4D1B366CA0BABA7AF0D973CF3D + 477272F20AE01BC0CA4D9B36054F9E3C390450551933660C9999996745E44585 + BD6AB7B744D5D51D42E45E81E7C61A464391CB559F1B1B8BC76EE731978B1FA7 + A692E570A488C85BC0AA288BE55519627D04C5C7C7E3F3F944444E036F757575 + BD98939333ECC1FA40FF9A9A1A2222227E0B749AA6B9ECC8C2853C121F6FE5F3 + C57796509A77098801A603F703BF074A7A4CB37ED833EAE164B7DB119148A012 + F8C5CE9D3B478403686F6F1FF0FE7AA0CE300C9E6C6CE4DF2F5C30AF0783FF02 + 7C05D84CE8E4EB5BC0A43058AEAA7EABBEB7B7FEC1FAFADBCF073B3A3AD8BA75 + 6BCFE4C9939F011838F9FA22BDF9E69BB85C2E1FE03B71E20401E085F3E779E3 + F2658AE2E2CEDD131DFDA3E85BE2E2A9DE5EF67775F15E672701E0FF01A78240 + 03C9D1A07C0000000049454E44AE426082} + end> + end + item + Name = 'control-edit' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000000B649444154388DC592210E84 + 301045FF6C50A08AE106D0832038510F81EF5DB84809190D025314955B149B90 + B29B662BF8AEC9FF2F337F0A3C2DD25AA701C6717CA7003200504AF97FC27DDF + 53763E841081C15AEB9BA6212925D67545555598A609CC7C9D0000CAB2A43B00 + 33639E67745D47C33078E7DCC5F38A19F50CEDFB1EAC1A05F8A528409EE70080 + A22882353F1D586B6F2F51D735A4945896C5B76DFBBDC46DDB82301111335F02 + 8127F9231963928B7C56075E4A49AE08AC17480000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000011649444154388DD592B18AC2 + 401445CF84102B11C2541241ADACECAC65FFC64FCADF6C932FB0984A2236C240 + 120803092932B395293609EA6E8ADDD3CDCCE5F0DE65E0AF2396CBE5B442A5D4 + 714AA10F7C4E2D248E6397A6E9AF44DBED96D3E924FCC785E779789ED70B3AE7 + 68DB162925BBDD8E3CCFA9AA8A288AD05A73B95CFA13022C160BC23014DF8575 + 5DBBFBFD4ED3341445C166B3210802D234C51833BCF22B1863504A0120A5E47C + 3E0FE6FA3B3EC13987736EF4FD6DE133DE160A2110A25775C7CB1DCEE77356AB + 15EBF59A2008D8EFF768ADD15A0F0BCBB2C418D32BE7D1D76C36230C43AED76B + F76DAAAA1A175A6BB1D68E4E986519499274E7DBED3698134AA971CB0FF0818F + 2985E270384CE9FB077C011C296BFB6CE0EC0D0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000184494441544889ED94BD8AC2 + 501085BF5917821601C128D859E615AC2CC4D2B7B15EF6217C0E7BADC527F0A7 + F7072E4A0415E54264B658136274CDEE825BEDA94E8639393373E75EF84706A4 + D3E93CD7603299BC01A82A22C277F977F25415198FC7E76776F02A2232180CB4 + DFEFAB5C4A50D54C9E95D76AB5A4D96CF2FAD38A1CC7A156AB61AD653E9FE3BA + AE7A9E2787C34196CBE56D07FA0900AAD56A1497448E00ECF77B76BB1D854201 + DFF701F07D5F1CC701C018C362B1D0BB23121105C8E7F35F8EE5743A29C076BB + A5D7EB51A954A8D7EBACD76B46A31161185E692283979F8E2882314601369B0D + E7F3D77B7235A2A473164FADABA6F3E20E2E23E2228A3FD23C1224E257B1B426 + 367830852CDC547B0FBF362897CB02502A95C8E572A40A8F717506D1A6DCA950 + C33004A0582CD2683400B0D6E2791EED761B638C0C87C3C76BBA5AAD3EFFF6E0 + F61E8F47A6D36974D1D4755D2E178DA426368848B2C547DC5ACB6C368B634110 + 48100451C772A3F98BC7EE1D9EF85C77BBDD6736F08F6C7C00AAF00F3D205664 + 420000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000000DE494441545885ED95B10D84 + 201885DF6FAC700007B06608130B3BD7700287701AED5C844E1A120B079052AE + C2C23341AF0093E3EB4820EF83C0038844FE1D6ADB169CF320E14A29A49C7394 + 65B98710104224A91D745D677C86F77D4F0090F80CBD22754FB947D33430C660 + 5D57E4790E22C2300C8688C88BC0388E608CA1AE6B9AA6C968ADE10ABF14288A + C2B9E8CC3CCF3B1191D61A00B06D9B73E796E077200A448128F0D50352CAC77F + 827DF38C310040966547273C16F8155BC5CBB298AAAAC254F1993B6DF89E3B60 + FF67EF024A290821829C849432446C24F2323E723648EF2326A72E0000000049 + 454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000015A494441545885EDD7B18AC2 + 300080E13F6A96662952E8E2525C855B7C80E320A3838F7283CF710FD4E5E66E + 37383A35EA224151442AA5B7281C7705D19EC43BF22D2590A6FF12D280E779DE + 5D89300C0982C07547ADA228E84C2613C6E3F11310BA0EFA669D65D947E73478 + 039E1DC6D479075ECE81A4695AA569EA2EE70BAD355A6B005A8E5B2EEA5C9E72 + 9B6EB74B1CC71445419EE7551CC74229C56EB7C318E33E300802A2284229C560 + 30106559B2D96C68B7DB8F11688CC1188394B21A8D46AD2CCBAAE57279F53AB5 + 81FD7E5F34899BCFE7D5E17000E0783C8AD3F3A6B51E7E93F8C0A67C60533EB0 + 291FD854ED49329BCDAADFFA8094B2028494F2A6F7EF7616F77A3D9224412925 + CAB2AC86C321EBF51A6B2DD3E9D47DE07EBF67B55AB1582C7EFC6E5DE36E81D6 + 5AACB5E7A1C8F3FCA675FECE26D15A8BF33DE0919C035F79C06B278048928428 + 8A5CC7D4DA6EB7AE133CCFFBFF3E01745B740D950080A10000000049454E44AE + 426082} + end> + end + item + Name = 'debug-step-into' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000001D149444154388D8D934F6813 + 4118C57FB39962ACC6861035A2ECA13908E25E4410118478D18282E09F93520B + 2A3979100B2A580A52B55E3C94E8C5520AF65045F02E7810C48354410978A9D1 + 68AC514C166224B1D9F93C6896D56E9A7EF0C1CCF0DE9B376FF8D4A6B1C7F4A4 + FA87808B28955660D1A55A6E7973E9FCEE0500DD93EA3F050C03274CF3E79CF7 + F58311AFB5AC80A955FCB5B227E7DF02277F3C7BF8A27A6F04F9D5209BCDE238 + 4E37230068944A9B467DAE4D06701C874C26635624A020E27D2B9A3619A0582C + 92CFE7FD2C6CDB26168B75700088F9735974DB1E7A770E70FB5581DAF8311F94 + CBE53A3AD22026B2DEB6B0B4490CDD8CEA44EA0E702512DFF0C9BD7F3D880DFD + 1D4B84792BBA7647DF910B205E03A8014FD6ED3FBD257EFC52106BC25A033794 + 62BAEFC0994131DE4BE01C30F15724238BCDD2720E74CB2D4FE9F846801915D1 + 6905968000207277F5F6BD03506A3B58FA84F2D8516A4F67A79AEFDF6C6D5516 + B48858884C20F20E38DB2CBC0E66B0A42DAFF299EAF465CA570F238D3AC02DE0 + 20B0AFFEFCD1C7EACC68D70CFC52BDB15540A24DFE3E390CE23B0FCF20B87167 + AF35D7EC3A34B8F8A580FB603C48EE98810A3BFC7F161CC721994C8641FF7510 + 24AC74167E039089BC5FFE11B3080000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000026049444154388D9D944D48D3 + 6118C07FCFFE1BB335E766D9D20E16A207CF03F1D6414388E8DFB122DCBA74C8 + 28A8601E22351B04D1A50E5D4423478B903A042159DAA1208AA0F2108630BFFA + A0D4D91C7EFE793A4C6D5A9BB307DEC3C3FBBEBFF779F9F13CE20FC77056064A + 405A812322B20B10F28FD0CF8E8B77522F7B00B03B2B033B415E012920ACAA23 + 082AF9333F652676903620A5AAB5D6E4F85CF279374B13436C7318F87CBEBC88 + C553C3149595AD023181666B727CEE6B9B89A6120034982691487B39B037DF52 + D340113FAA23C96777D7601911042E6F056893B4005DFAF2F95FFBAD806D2BCB + 0E2022E8D242FA05B70FC79E2A9E0C8EF1A8BA7A1DDD344D22914823D098FDCB + 80AA6273FB10A70B7FF83E8ED28A7260F4D7D34E4DC4DA37DE89032FB2021516 + 800267550D8BF18F384A2B0A81D7408FA73ED8046C84C68181EC15AABE070EB8 + F71FEB5DFE368C5A56520CE33CD005A29EBA609300D37FA0417288B22B5C1391 + 98CD30DE151F6F89AA5A005140043A5544DDF5A1330A303F086951ADB92A7C08 + 3423D201B489CD3E8AA2000A33889C1655CB53173CC7E30B9016925DCA74B405 + EFD14B37C4B03F103888B2DACB02540B580A6F32EEC4C92565B6BF9BB90FFDB8 + 020D6336E7F6DBAE9A4338FCFB40E416223B54350444A76257C1BD061CC8FE65 + C09A9C20D9DB81E1DB8DE7F059809B20A7500D297427EE5D61B6AF0B4C133691 + 625B9F1920B8811AD093ABB0645F57E6A99CDD63CF3C69CDFC6071E8EDACB332 + 500B5889D85F30D84CCABA6C7991EFD74F60149558AE0227853A4FE1CA5802F0 + 7ABDB08994AC5374A56FFF637CE58E205B1C5FBF01E6C7DB7067A152EB000000 + 0049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000317494441544889A5954F685C + 5514C67F67EE7B21F3EA983609680445A81BEDA2680B55545A9BA0126905214A + 196CA3C4D09504AC2EAC2460EB422814A2AE8A1B43B42E6B8D8A8B942C546422 + 51544468855688DAA426C6B6F35EA6799F8BF993F997CCD49CD5B9E7BCFB7DE7 + 7CF7DD7BACF3F028C99DBD60B6D7E008C683883633330049AAE7AF913B9DFBF3 + B7F4ECEB3DC54FF0923B7B31B3D780B780DF11E318F342324A58CDDA4FD5010F + B3C70AE01F03034261FCCF1572B3E75174FD66095859F8AB626D77BD7F6102B8 + 17B86FE5EA62F8F70747C97EF70500BEEF33343474D324551DF010625C520578 + 91A0BFBF1F331B019044D91154ACEBF992F0C0DA40F3F1D27C0578B9491A2E07 + ADCAADEB7B062650EE8FF36BB669666E031D905F44D91AE0300CE9EBEBAB8927 + 9349C6C6C60046D6ACAA609E0ABD98F38BE5D2FEFC3192DBF702309BF98CC5D3 + C72B360541509460B8B144F956CC756DCD57F7C0136CDA7D008397811F533D2F + 9C334BB0F0D1316015A0B0CF3594486809E8F4DABB68B96707E67C0C3A303B8A + 9434E3E954CFA1730216AB489A9208F10DF014D8AB1D0327C36B53E308AE98F4 + 24F025C619C4BE54F7C1293358F8F0CD72091A4A94109C00EE3438E577DED1DA + F6CC2B10DF0098011E4784C05933DB7D4BF721361F1806B3A21CCECC5CE12FAB + F101E7214D62F606C671B087CDDC04C67C99125F61B61FF8C4A4FDB7761F9C5A + 9AF9BC7989962FCCD0B2F5FEB731CB145ED374E135AD68D520257809982251BA + 0BC37551CB2C71F9643FFF4E8EA1E8FAA4A45EC56A079C2417C7F2815348483A + 2378315E0E89AF2E16899D2427C9D5F301572AC55A37E1DD763789648A8E8113 + 785B6E4F80BD070C026781E7E2E56C34373A88BBF83DD3D3D3481A69EA260328 + BC46EEE2CF04BBF6E1B67419F0AE990D4A9AC88387D1DCE820D12F5F130441D3 + 127975A3C666C41EA14F05CF2ACA4673EFE4C14B05AD4A541DABF06B086E5CBE + 04B9E505BC963D8825E56AC1A174931B4A547726B66E7B94D66D8F0090FD6192 + E8D76F2BF2411014CF60E57F11146DAD89E6FB3EE9747ABDADAB9DAE970C8280 + 4C26B3D189D6D83632D1FE03EAA4DCA5777B15600000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000301494441545885ED964F6C8B + 611CC73FCFDB77ED746989AE76A0B39DA99BDB76A8888BD84E73902544252638 + 488889B0CC61B24CE2FFC161823818078A840812443858B2C87A20D9D008D6A8 + F65DB7BDAFE99EC761366AEDF49D9603DFD3FBBECFEFCF37BFCFFBCBFBC2BF2E + F1E38DC35F8D675533FAA21A8410F972F24A8EA64874EFB195A34F5DB857AEC5 + 17EE728B32D73EA059081100343BC532A9A1C5C07BDB061CFE6A7C5B8EB885EE + BC0F58C066A5E44B399C904AC9828B49E3E3909DE6D3063CAB9A11BA731F6029 + 39B1DA881CCFA4EF5D409969BBF56C4B07D017D50034039B8DC889CCF0CDD325 + 6F9C65400881102220A57C91BE773E6F702010A0B5B5B5288D63B1189D9D9DDF + 5F424053A32935DBD83D1E0FA150A80D68FB5D03D1685403B20CA026BECC9A64 + 5916D168B41D68FF5D03030303CC30F02B0D0E0ED2D4D494F5ACA5A585603068 + DB4032992CCC4045FD7A5CB52B30A38F317B6FCD380F06838442A1C277F59B72 + 21509AD72FD09D90190740F3FAF06D3ABC04385451BF7E7BA2DB698E3D8D6415 + 8AC562D3C5EC280B8142A194FA2084A871AF5CFB6EECC9D5C9282951522684A6 + 550BCD11F185BB1A812C138661108FC7EDF6CF463091FE047005D8BB70C3C146 + 99FE84D5FF00399224D1BDDBF485BB1A84E6B82E34C7355FF84823604D99280A + 82D10797F0D435B5034F34B7B7C7BFEB6C5B26FEFAC5C4D06BA5A4448E24C71C + DECA06E086D0B4882FDCD5A8BE7CB6CCDEDBC541303ED88771FD64727EC3CE3A + A053C0336755AD9BAADADCD99A637FF9B2BA0366EFEDE220003022C7F8FCA6FF + A3774D38AC572DDD2A109588C9CFB556B100A13BE7013D80A1A063FCD573A0B8 + 5B80D57717ABEF2E4006F80050BEBC1EFF8E33E5C03960584143AAA7C31C7D74 + 1928D216E493E69E4FE58E33E5A2CC15017405EB523D1D63E93BDDD331454390 + 53652E4499AB92C9696CFBB9391419C1CF92461CE3DAD1B7AEDA151BCDFE878C + DCBF3823A6A40800866F9C9AF5BCB4080A50491114A29223F895FE23F8A308F2 + FDFDFC3104731D772ECD09C15CC79D4B5308FEBABE0253148C42570F46C30000 + 000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000004A7494441545885ED986B685B + 6518C77FEF49D6745DDB245BB31633AA6ECCCE31374DAB9BD26DEE42272868D8 + 18DE463757D08F4E68655EC646AD0C654EA6F593D03675758283E0A775B4C50A + 55D64E50983350EC056C686C356DB295B6E6F4F1439ADE96DE7212DD07FF70E0 + E5CD7B9EF33BEFE579FE27F0BF8C49CDF783698D33394F98D0D183FD09DF3E1B + 50339175A08CACFD4731591D194AA9CD2856A9F9DF63318D46067FBFD657B12B + 6140F3742B8DB5276A48DFB4C30654014795522B138E1C550FB0DE48802940DB + A10AD237ED7000DF016B8053227215082995F00C468CC04D016AD93964ED3D02 + F0399089C8A3136323BDE1A61A466FB61119EC4BFC0913BA71404BC16328CDB4 + 4529F58C881CD247C2BD81B38789F83B0D054F8634006D453A28B55B444604F9 + 66E852E55D0107B13D18DD636B8001047DE4C72B8BDEB875EB56CE9D3B973230 + 8FC7437D7DFDF421514A2911612234888C8D2C1AC062B1E0743A4B819A14F09D + C9CECE3E0333D34C141222E3CB097405D89344B0987A620DF302831694CFE7A3 + B4B434000466F6DBED7632323212479B111F0C0086C3613A3A3AEEE8AFAAAAC2 + ED766F036C09D3414F757575AFCFE75B3A60E6DE2364143D05BACE5F174F13E9 + EF5A68F879E04903806726AF69400141046DF53DA099662558933D8FD52F9D56 + C087406D6E45C38DC0072F2E04B9D700DC2C99A7F12404D8016529D82E63BF7E + 3F3D4A3301AC028A81974D56C7FEB5150D37FE880379F9F2E5B84BBF5CCDDA83 + 2220F083A69415D8637FFE9D96C0FB87A6D28D3E3CC068E7F55BE91B8B0E008D + 4093D9EAD8975BD1F0CBDC993C78F0206EB7BB14B8CF00DFB7D5D5D5AD3E9F2F + 5A49C6BB7E02916B22D2065C485B5760CB7DEB6B2C0F3E119DBDC83803E78F31 + DA797D183800F4A254B366756CCEAD68C09C778761D906EC36704DBDDC944DC9 + 79BD868C87766D40D186300CBC2D4823BA1E9E188A6612B5C282969D036043D1 + 88900FEC8B0C0FDC0C543E871EECA7ACAC8CE2E26203931795D7EBC5EBF54E1F + 9260ED492CA7BCBF99AC39DB417DA694FA4AA114660D2D675DFC280A44E4AAC9 + EA2830AFBDF7B61EEC27180CD2D767C0FD4C2A140A01334EB13ED44F7FE5B3D8 + 4BCFF6AEDCB2F3691159AF9472CD75D4223289C649A266F44DE0F6C4E86D005C + 2E176EB7FB23E061037C757EBFBFAEA5A565761ED48301063F3E8639F77ED236 + 3CD2A5A08B19663573E7612C1B8B003E554AAD179163C0C5A14BEFF177EF8D99 + A17E06860D00F6C41A71137524D04D24D03DAB2F6BFF51D2A2709FA0D4AB22F2 + 0AF045F0CB4AC24DB553E39A9B9BF1FBFD7506E000686F6F9F1F70AE4CF63C6C + 2FBC8B820BA05E43E4B840FDD01C3880C2C2424A4A4A8CF2110A85E8E8E85862 + A98B26EA4C6007C871C0130F0EC066B3E1743A5B3058EAE2DAADF9A40F0F30DE + 79FD96E581A2C7017DEEB2C6D1090C9A855863E99F6BE6344C56C7A21FE22E97 + 8BFCFC7C036C51F97C3E96E566888CA3FFB9787E9B2C75FFBEDD5AA6926FB792 + ACA4D9AD84FF32984FFFDD1E5CA2926DB752B5C4DB30568B7B805648C11EECEE + EEA6BDBDFD0DA371628E2861C0F2F2726CB6F8992425766BB92A29298995B454 + 28BEDD4A40AD49C1B9533DB146C2801E8F8758414F856276EBAED73F5FECCC34 + 31B9D4940000000049454E44AE426082} + end> + end + item + Name = 'debug-step-over' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000001BB49444154388D8D913F6853 + 5118C57FDF7DAFF4D924140391BEE509A6589166695D8A20BC0E828374D055B4 + 5B70715171B16055245A703174B1B8E82228BA28FE412729D4D6162552844A8D + 0E5129D6D6C424F4DDEB605A52E97BE64CF7BBF79EDF3D9723EEE567B475ED1A + 06CE2192165034A9B6F84E954687089378130B2780B3C0715DFF3D137CFBA47B + 77BAF4A4E23816EC087E125B9C8A04CC03C77EBDBAF7FAC7ED114CBD4A3E9FC7 + F77D1DEA6A928D485A57CB33EB668062B148A150D8F88AE779241289AD010256 + F0BDA8D7CD00B95C6ED3A5A844368009D65A49ABB6DAB45B7136149EE05F65B3 + 593299CCC6DC58472490BF67CEDEFD74EC3B44CFC101FC3D6E8B2D60B495F214 + CAD6C9E1AB8E9DEC1A7F58D3E7B72FD555ACF4FEFF006358504EBCAFF3C8E969 + 4C5005563F56D48B910FCEE0CA93375F96EF5E8904589D43A7CA225C73BAFBA7 + C4899544D423603770B1BDBBEF3E96BD5A9B9F0C05A8B5E5AFB78031E08E5876 + 5D4434222711490337B7F51E884E50997E8C38B1398CB981D1A3CA895F009240 + 0A385A997DBE527DFB321420CD837BE9296D6EFA3A7018F0CB930F3E2F4D9C01 + 135EC8A66EA523D1DE787DB01533C01F9CEC9A6BFEDE0FC50000000049454E44 + AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000025749444154388DADD34F4893 + 711CC7F1F7F799DB742E419D5A0ED4C62C2883443D68900B7256971E3BD7413B + 760A12B428B183B7F21611482E3B74AC931D2A3CAC423128EB50A6E5C08AA6D2 + 1F9BB68DEDDBC194469B3E415FF8C1C3E7C7F3E2FBFB7D9F472A7AEEE0AC6D2C + 03E9073A44A41C10FE2E23D2E5CB1267569EB3B6D103F20488013DAA1A415003 + 70DB20DFA6D8058A1D4ABD696E094AD5D0EC35A045559B534BF3ABCB8F6E93FC + 304DA0B989F3674EB73A0D0236C06EACAD2D3B044CA037B534BFFAE9B289C6BE + 0290EF2FC1E3A00668DD9AF91314A94035B2FC70640303585C5C646262220484 + D6338FC783CFB7F93DE6098882263FBECDD80887C384C3E18CCC344D060606FA + 80BEDC1D02228226E3564F350C8C6D0AFE63D50081FF0DE61C544E30180CD2DD + DD9D91B95C2E581B5228DB3B5941876F3F05750771D7EFA6B2D2DB27927B0039 + 4155C556EAC57017537E6E04C3E93AFECEA163D33F92C3BBDC3A26D97EC45CA0 + A2CBAA9414341C25FE661CC3E9DA065CFF9290B90BAFEDEDDE4434F22DD48BC6 + 572C815235347B0F48A9EA89D8D3BB14361D43ECCE7DC0036016E5487C66F27B + 74B0D3126AA872096817911BEE968E6AB13B057809B4017E8451476D6351D9D9 + 9B963A34341E7B0104810322F25E445222921691E7889422D22C702BDFDF600D + 8C5E3945E2F3DC6345F7AAEA1E550DA8EA215535515D407501B898B67A87EB0F + 8EEA3AC45544C9C97EECDB771681DC07FCC0E1F4CFD85474B08BC4CCE496E0C6 + 779888BCC256EA256F87AF1018457F63F1D85474B093C4CC336B47CE92ADA08C + 036DE9786C6AE1AA750CE017CFEEDA3393477CD70000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000002F4494441544889A5944D6854 + 6714869FF7DE9BF9F92C991827496B9A161B111AC13F82D89A2E6C0BA52EAA0D + 08BA282A15DA1A41107F166E34206E5CB94817AD2D4A43ED4E284A2B4D48A19B + 92949A525A04ED4F8211ED98B441994C66EE1C1789659219CD1DF3AE0E87EF3B + CF77DE7BCE55FAC3B324DBB782F4BAE0306213464A9200CCCCE6C5FEED93EF30 + FDF7AF4451906CDF8AA4A3C0296014A3179131CC84904018001278325C3241E0 + 5C24805ACEDDDC22B80A7C05EC336CAA38798FFCD80DFC428EF7DEDACCB371C3 + F990F08D740C5E7486370B5D10F0C2B99B97819781B6F0FEBF53E3178E93FDE9 + 1B009C730C0E0E22A938DFAEC7D8372736330B10AF60F49AD99CE2F37422D273 + 2B2800A5C032C5C94C59F1300C19181800E89E732908E8E8E878D4C5FFF94A71 + 209081E56FDF28A3E77239BABABACAF2CE3986868630B370618B0049582E5B7D + FF7072A1038195F6558566AF752F6C51C954542349D12D7A925C85852AC92DCE + A2477B50498BB2A8A67915F1D60D2412310A266A3C16B168B334AFB66186F85C + 2B8DC7BEC45F52D7E061933F4E1472AFD6174F784FF5A52000F2402C58BE12C5 + 92C45ADAF097D4D503DF17D1EF9F8D04BB46B261F7F313D70933A3D503CCEC2F + 608D174B50DB7998FC9FC3184C087E00DE1F9BD2C5F323C1CEE264D3F4DD3387 + C88F952FE493E4A7B61D6C42DA83597FFCA575A3C1D226FCBA4624EF0AB01CD8 + 25B1DA4B242FB9F6B7C3EC2F0314EF8F470678667606B33F247D2DE98378EBFA + B43C1F2034F808F85C5227A8D7AB4DD7341EF9022FD5101D4031FC0FEC0DE067 + A007B8038440289806F61A6640A7E053BF368D5FD7181910DCFBE4104B779FBE + E525DD9B421B814D40AAE4CC5AD076C403CCCECF0C53F4911280BFAC99675EDB + 414D4B1B00F1156BF0676C580B5C45388CED067DD9E17E323D5D50988E0E2855 + 6CE5069A8E5D449E3F531C1CB0CDA07FEA5A1FFFF4EC87B010B983B27F51B0AC + 197CBF1EF42DE0307B17E8CF0EF791F9F84055C52B020030C6919DC6F8CDE0BB + ECB5D9E2116D29D543B10F6FF057C75E8B0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000002B5494441545885ED974B4854 + 5118C77FDF9DEBBCC447383315E534B5885E53160842B4D0A48D994B215C6981 + 8B8A362DA4A24D05622D0A8222ECE1C60C5B0CB510CD205AD4A6458B810C049B + 8274D49C71F081DEB9A745E5239D199D198BC0FFEA9E7BBFFFF97E9CFF3DF770 + E11F4B160E2C6E2F791575E81E1F2292C833277322C268EB858C00F4DF17CED2 + 2A8A1A5A9C92636B02EA44A418D092998DC8D016E05BC60016B797A253379CA2 + 5B5F01D340BD52E627737CD454CA4C6836A3234399349F03C8ABA843746B1330 + ADCC78653470CB88F5B6A1A66299CEBF3200DDE303A803EAA381DBC6F88B3BCB + 16373636E2F7FBB3D63C140AFD04101144A4D834CDBE58EFE38406BFDF4F7979 + 79E24C56A96030A8E90BC69A9A88A864CB1E0A85080683495FCCD5A8BFBF9F85 + 00A8F86C52437373F3B2F7D38D666C6C6C3140BA4A379A3F23485BE946B32482 + 74158D460987C3ABF6AD47B01EC1FF1741B20FCE5F8960ADCF82945AF3B32095 + 129D0599684500E2C8C375FA2696028F8CF73C5493EF02590358B89C4ACB770B + BA7549917D67298E0347ABAD3E7F5751438BC35956935D008542293528223E67 + 69D592A2787404659A2F018B68964036212C00B63D87B179F77A81E3F65D654F + 66BE7CC4087F9E07880C610C870CC7A1CA4E11EDA48856EB3858D9690C878CD9 + AF7D190108807547099B2E3EDB00BC053E28B8628407FAE243034A99F3BBCEBA + 7D3F967C9713E1390A4399F19A91BBE7A6A7DE776506005050739E8213675D40 + 33502B22CE5466A5D4B5D8EBF6CB636D97320700B09754927FAC017DE3365D10 + 17B2F8B9965B88E85607D0014415547F7FD43435F1E669760092C9BEEF08EE33 + F7EC92630B00BA82EA48C7F5C958776BDACD570C60716D65F3D56EBB96E5E690 + E2DF6FAE28B7102DC7B61B98218BCDE1D7364C25732282EEF10E129F691FEFBA + 3F1BEB799095E6003F003D0C2E3CFA59D5E30000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000003D5494441545885D5985F685B + 7514C73FE7DED8DA644DD6AEB5954275DD632B6C29EC41981D71B6BE08AD1DC2 + 2ADA4E05A74E044D270487136BC70485A9557CDA6456A788F8E043C54E36640F + 0B5D3130BA1465AEB0CBAC4B6D676D69D73FC787DB864C6E679A7BEFD02F0472 + F3CB39F9FCEEEF9C734F0EFCC7254E1F06AA3653B4659BBD288E5F7194CECD30 + 7B7EC023B41596DC0BB3AC8AB2CEC394343C60004D22D2881012E77DFC53538B + 992B477D0334CBAAA93EF80D66A4B2113826220DAA3A81329D1F1F5780A39ED2 + E50296771D5E853B0DA45475BBAA0EB1BCC4D2D4785ECE16FFB8EA359F0D18A8 + DACC9DF53B0CE0980D476CC11ABD3179B287F9D173B0BCE4F90FAF0B7025219A + 568E75FB82357A63BC77373A3FBBA661737333C160D057B84C266303AE646B54 + 5527547568F264CF2DE100BABBBBA9A9A979DD47BECBC964F2133B06454008A1 + 4C03F6B1E6A7269FE000229093248208024B13565E31974AA5B02C2BE62320E9 + 74FAE63AB81EC5E3F135D7A2D128EDEDED85BACE2A1B835EABB6B696B6B6B64E + A0D3859B9F92C9E4CBBE00AEE83270C6A5BD3F77309D4ED3D7D7770677805896 + E5DF11B7B6B6BAF6934AA5FC010C0683AB35D24D9D3C6D5956CCCF183C8EFD5C + 2F5453E0530C0E0F0F934824C68031377E7C2B33D16894DEDEDE7B807B5DB899 + 4A2693293F8FB80B973108C40C4F509CF50660B878C5C0450CFE5BBB9548240A + 759D95AB18BCBDED56E1BA7DEDD67AF5BF6EB7BCD4BA018D7005A53B3B009849 + 7ECBE26F973C87CAD54D80AA8A9494DED2A0F2C58F29AEDBBA0D58D8B0B3E3C2 + F8DB1DBE4266EBA0A28B40404A4A31C2156B1A98F65A0F3068462A1BAA0E7C46 + A0BACE5F405545955F45E46E4436953EB4774D8385AB97003AB01BCA41335259 + EF27A401B03CFB27A003AA3A2B100FB73C43E8FE471D0D321FBDC0FCCF43D781 + 16600CE19419A9ACBFCB27487BEA1228A2E6DD7398A1F02B0247145E42F5C3B9 + 5FCEEBDCC859FB9F5EEEAE8A8344761FC0280E6E04BE036A810717AF5F1BF9DD + E398CC8E85423B1EA3BCB317113922227155BD007C0F4C8BC3084E5557DF6E44 + D88F925188CD8D9CBD78ED9D273D03CC66F1CC8F5F12D85443F891FDAFAAEAD7 + 02CF032D0821C79D89AC428A20860A15A27A9F18E645CFE8701860DE51B795F0 + AE4E8AB644B3034CA7E99B59560D6280C807883C8B6A9742FF64FF21FEFAE184 + 7F80F968C3AE2ECAF71C04781FD807EC55F874EAF337991E3CEE191CE4D4C1BC + E1624F50BEE73580F710F6014FA1FEC0410180C1C68701794BE03994A7811393 + 5FF4F80207053C8BD51E2C7DA53002F44FFA74E756B5EE180C54D751FEF82130 + 4D6687063C4D0827FD0DDA1E61D6BA53E5590000000049454E44AE426082} + end> + end + item + Name = 'debug-step-out' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000001DA49444154388D8D913D6813 + 7118C67FFFCBA589C624F51693436E68C4A170A045E8265C05ADD28220745188 + 8A4A045769759062518A0E0E25938452B083A022741015742AA5F831580445A2 + 95B67E514DB5B624D7E45E876AB0E612FB4CEFC7F33E3CFFE70F7FC1BC3A1EB6 + 72F9612B97DFDADC738EF5405BD355568AC022F028B6EFC4BA44026A639CD881 + D344F71E478BC4096CDA7C0FD80E0C84B6B5DD21A02F965E4DD41550C94B0F09 + 265A8E017D289552A0090800220FDCE9A9FD9F060ED67F4230D17214380B1C41 + A4494434448610790B9C2ABD7BF1DF0CFA80F4CFF1DB4FCA5FE73CE01AD00574 + 2C4DDC9D298CF63714D0512AE515979E156E5C2039F838041866583A7A92EE4C + D88D203B871A0B280854E6673D718B2CDCBC5C8AB477A70FED69A53361782476 + 373C5E7580789A616A68BAB73C39C6F2E418F31B7A79E9EEAA7EB1655944A351 + 5F0165E5F2AF4538FCE3FEF5A7DF6F5D01F16A48D96C16C7716A17AB0E18548A + 9178E7C974A4BDEB7979EE8D2795729550FEF2FE4FA9F90A94173E0FEBCD5B00 + 4675C34C050D730DB1343DA5C12C80AF0315304C62DD6768B25A514AD510563E + E6B9B82384E3387EF7E8956F1F288C9CF75D5691CDD675A0FB0D33990CB66D57 + FBDFB57F067E43DBB6EBA6FE2F7E018B7E9C103B4EBF6E0000000049454E44AE + 426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000024249444154388D95934B4894 + 5118869F6FFE5F2D53678446270D4B83B00CBBD8A21B0442B86C562D5CA86D5A + 5810085A2D42C450B1A055414511D1856CD16513A590526644D0A6820A650612 + 9D460646F332FDE37C2D9A0195F9C7DF17CEE29CF39DE7BCE7BCE7084B6414FA + 28BD322CC065E0EE6234FC25D45B4F7C720CA7722DEF19001B8023C080E1F6EE + 2A6A7B88E9AB583BD095578864E5604D8CFD01EA80003060BABD55C56B808AE9 + 2DA3B0E112EB761E42904AA00810C003DC4224A1AAB58968F8DB78CB81558166 + F1853E0CB7F730705344762C9D54504004BA8D828DC71D1DD9707BAB115E01C3 + AA5AAEAA86AABA54B51AD530AA1F8106CB61302EA013A55F554FCD7F7D17542B + A64015300004813A6B62341AEAAD77043481A3C0C9D8CF4F44EE5FA4A4E74D3E + C86B5483A6685DFE5C381A79D08A2F2F1BF24A56078A4881AA46663F3C4717E6 + 60313E83CB3C5D90A583ADDB2C778DC7BDDB55FBC891BB944300167F07494C4F + 3175FD0CEBF71E7BB6AF7233FB6BF69C15A1DD318DFF77A88018C97736FFB99F + C89D3678DF87081DC91AC74DCA6E8F4E00E762BFBEDF0B75FA21FED77677BFDF + 4F57575723D098E9C84F8196ECD2ED4F8ACF3F9E9F7E79036BFC076AC5ECD604 + 80215BA0AAB68BC888888CE494575FF5365F0B22A8202B6B8778D192020EDA02 + E39363E12C5FC541443A801E11497DBD954AFDFB26B00FCA15EA3EC1CCDBBE70 + 6261B6197493AA1AA4BFF094320695CE89AD9C869256B9B9B9783C9E6563C97E + 800CA1D83A4CBAD9026CB5AB5993C3A49AC810403AFD032152CB1ACAA565B200 + 00000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000031D494441544889A5954F685C + 5514C67FDFBC37E3CC1B43C734B18E6250138A54D0D61A91A6505B458A962C84 + D856218A9011BA902C0A22DA0C5537822056838B22A24144709362A4421BA969 + B399A8B4B67661835AB591FC214C1AE29B97C93B2EDAA6C3389D3F7856DFBDF7 + BCF37DDF39977745592436EFA465DF208297819FCCF876F1F827CC7FFE2660E5 + E9352352BE21278A602DD26BC0B0C4F6A6C79F27B5F700A0FF4F102EE53198C3 + 6C2750400C03DB9A1EEBE596670F344CE0002896C0EB7C8AE496A7715BDB709B + D344124D7F03C780BD40AFA4F1D83D1B7F8F2453F867BFAB9B40B18E07599B79 + 0FB7392D490F038F00A9929C8D48DDC02266DD989D987AA39BE58B3FD745E0DE + DAFF319144F20ED0A7C0A395D30C8C9B813E8313A8FE5944144FAE011D033601 + FB80755C699D6310050EEB4AC523062F5AE0132EE6EB267025ED476A270C7718 + 9C2C4EFF86DBDA86229188D020D0676647803D16FC13CCBC9F6165EECFFA1D00 + 3D981D3538B9347194FCC887107104FA00C80023C0EE30F00B33873214CE8FD7 + 5D1CC045BA1BB32F095798FF2C4B7CC31610298CED88AF52AE3DF3502A2CA4A7 + CE10ECEA825D5D8D1108A206C1F2A55F082FCF519CBE08CBC13C6E6C9BB085DE + 3B8B85275AC3ACDBF100B6F57E543260335B5D57C266866B660610E66701087E + 3DCDCCA10CF1FBB64EC7635176BCB20747366076BD686994AE2B61F72A939C74 + FBEAA17F6E0CFFDC189EE771D3ABBB91E494ABACDF01B600B4B8CD69621D9B09 + 2E7C7F9DC8F7E9E9E9F94F5F13890443434300D95A3350DB47935F03F79AB1A1 + 38FB973F3BF812CB7F9CAFFA91E7794C4C4C60662B7538E01DC13782C3D196DB + FB6E1B18F60B933F50BC7401F3972A12AC8C7F71ADC74ECD1960368AF43AE22D + 5097E48CC4D777CEB2BE13A14ACA0EE6CF1EBFA6305BD34130F923B1F64D6F23 + E504FB11CF61ACD18DFF37074BF040D55E0291E9775FE0F2E81056581A35B327 + 2DB4E6ABD61D33732AE0D21654CB73006755A6E249DC757701AAF96E4517A6C8 + 9D1AABAB458DBF8134788BAA2A8D46E9EFEFAFB85FEF2DAAEAC0F33C72B91C92 + B2E52A6FA4BA21072585064A70F95955FC2F1444B8AA3F71B1C5000000004945 + 4E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000002E2494441545885ED964F4814 + 6118C69F6F766674D7DDCD34FFA459886410AE1DF212882814A8D1A1C80A0BCA + 43E12510BC049AE4A956C2F0E0C1CC435922690941581E2C8C4EDDC2AD883674 + 09AD4DDA991DD73FBBB3F37610977535DDDD19F1D2739A199E79DF1FF37CF3BD + 1FB0C332C56B4C2BAF83B5B21E08AB50BDD3DBC9B45E9C3D13050FBEE5EEEF73 + 7715F47C16534B2A8CAB1DAF910101101D6582389475BDC73088B822A0E54568 + 01399872B87C081C778D994C272D6535CF82531F35D5EBD105C0A26F84FC43B0 + 1EBF0C31BF188C17ACB1807CDE413021C5CE80176098A2D0F2B9DF5D57434B9F + DE270DC0AF5E588E9D46668373173399DA015C628C656CF1EE11F0296D96B2DA + 9BBA01F8BD45C8BC72DBCE4CA609003F00D484434B5F282087A3CDCC6C079792 + 2A026C109A6623D23A423FBF27DD3C0260ADAC07E3855600B314564F49C31D9A + 32DE0FA8C188512C2C4576F34301481D20221B11D528A3F71565AC4F3F80B0A7 + 00002E00B8288D746AB14599D986ECE6470267B13D05211B44D5F2589F5F797E + 57577360F5376400632C8F40EEF9F1FE7526269AC1CCB63C108888AAFDAF7AFD + CAD01DDDCD81C8226400C0D1BC44B4BCB0CEA4F9E7A0BC79322D16969E599C9C + 8032D26948F32880155138B4B18B34488FDB0C6BFA4F80ADD4D8D80887C36158 + 738FC7931880C3E140555595661480CBE5E21202F0783C70B95C71CF8FADE476 + BB13FB024EA773C3E7C946E3F3F9D600689C3D8B8117D76C40F128D968A22220 + 10D10C63AC28ADFCEC4CE0ED404285928D2612812A7901601040CBEEF32DB514 + 90B5850F2FE32E24CB32BC5E6FA2FDE1F3F9567620E14009725B47EC8CE3DE61 + 6518DD5265EF574DDABCA8A6FCF17BEF35507777B7BE0842D39390863BFCE975 + 372A18433B8051213D2703E9399B1650A55FF9006675470000CAEB5E043D9F64 + DB898626715F711378C1CC620E2CB10AFBE716010322D02BDD11E8952111E891 + 9E080C01306023D2273D1124B408FF8FE3ED18C73BAEBFA06354C67B80230700 + 00000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000460494441545885CD987F6854 + 051CC03FDFDBED4EDFF036B639B5E56D4E850A5779EB8F8872B9681AF5C7440B + 12C40403835428A725484479619262B42258CC29F4C31043FA47AEA622045E05 + AE451ECCBC659E597BCDDBA6936D77EFDB1F37E7DADDE6EEDE1BF88183E3DD7D + BFEF73F7BEF7BDEFF7C15D4E5E2E41F9154BC89FBB001D1E4407079C76B247C1 + E3CF33BFF902F33FBB307BDEEE102E5FE9B49ECF956D8077F12308F2BA203FE7 + CFAB5A3867C717D32A99B5205612D43A846A1CA42D7F5E55D5744A662D183FB6 + 8FA1CB916EB5ACA750ED054EA6243F9F1649C974D0B3A8064F65352EC38748FA + 5B5CB34A28A87D1144CA5C22DF23CC02960FFFF57BF4EF3D6BB1FACCE91174CF + ADA278C31EBC0B977A44E459A0069159409AA602A8029489C80B8A5E42597EF3 + 97B668F781971D13748F3E29AB60CE8EAFC8F315D7022D2252A1AA51D06B2029 + A1B48F2723B29A00990FD632F116441DB31B2B58BC3E489EAFF809E004705255 + 5728DA69F5C733F6BABCC25224DF0BC86E41025632F12AD03AD8F9A3937E2941 + F73D8BF1DEF7A81B6806CEA8EA73435D1DC99EC3BB18FEE3D7B420A36625259B + 0E00BC2BF046D2B236A37CD27FA299DE63FB9D17F4565623B05C44165BAA6B86 + BA3A92FFEC5D8B0EDE4C0B98B9F4694A361D40F2DCEF80BC6959D616858FFBBE + 3B48FFD1F71D951B151CE16155ED06ED881FDD9B51EE96A0B8DC9B05D96959D6 + 56549BAE875AE83F12745CEEB6A0080806CA0D80C1F33F4C18A0C9040A5FAB6A + AFC2A1FE500BBDD324775B1010040492666CD280DE63FB7015CEBE2A5EE3D060 + E74FF47FE36CCD4D283855AC3E937F3F74AECFDD89AC056F515F5F8F61184EBA + A4619A66EE828D8D8D949797BFE5A4D038BAC2E1706BCE8223D43AA2929942B0 + 7189DBDBDB89C56275CEF9A41389447217DCB66DDB84AF05020156AF5E9D6BEA + 51D26A505571F94A6C27F6FBFDAC5AB56A3DB0DE469A73E170F835F78819AA3A + 0014E0F6925FB124E37F70967401A76DC6FFEF1B6C1791D90AD5456BB67774EF + DF901AEF73201289D0D4D474DAA620B1582C25387CF522409BAA760AEC9B71FF + 632B4B5FF928D97378574ED3B1DFEFA7A1A1C18E1B90FA21BA01862E9E63E8D2 + 6F098FFF818D404844BE3502F55B663E54D739FCE7F929EFBEC9DE6ECC4FB762 + 18C6AD1E69A74F9E8AC56275A397B8A77527653BBE3CE3F2CC58416AA28E90E7 + 8E7A163C7823E3E2320E852B09F3F233630E1D044ED9108CC3B89DC4B3A88692 + 8D1FE02EBD77CC4E827782DD6A3CD712E6E5E095EDCBF0FBFD0402011B6E294C + D3CC7066B707A366259E05D5B88CC2AC125AD7AF113FF21E0D0D0D0483C10AA0 + D2865F3C1C0EB7A737EAC41003678F3370F6B88DDC00BC84CD1A04EAB2BFB330 + 75DE26756320D7471D4CB1B8B2C5C91AB43BCD64241008100C066B81276DA471 + 64DC9A8C4AEC8D63F6C6ADC9304D937038DC0AB4DAC913894472AFC1C6C6468A + 8A8AEC9CFF8E44A3D1DC0543A110E5E5E56D4E0A8D63CCB8953BB6A6953BD005 + 36DACCBA75EBF0F97C8ED96422169B7C47BF2BF80F1B1E93066AAEBEEA000000 + 0049454E44AE426082} + end> + end + item + Name = 'debug-breakpoint-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000023349444154388D8D93BF4F13 + 7118C63FDF3BDA22858452E80162D28103A134278D89134E68C20F4394A44C24 + 860563F03F711217C24848B08B68804107771640EC816D881A489B964A0DA5D7 + 00B9FB3AF09B01FA4CEFF03C9FE17DDF47704DAD7E3F51C320AC69B82A2A404A + 6C293133193EC6E37C4FA7AFF8C5D950ED76F3766080D148A4490831010C2284 + 0E80944960414AF97E616323FD7A7E9EBF967501A876BB591A1BE3614BCB88B4 + EDA994B9529349C429E67701F0FA1AD0DA423477761784AA8E2773B90F4FA6A7 + C9168BA800EF8686E86B6F1F392C1666573FCF7AB2893847D60148095272641D + 90DFFE45EE77C2E30FEA2F02B5BE9FA1C6C6F8DCDA1A4AABDFCF68777793B4ED + A9F5A598B0F672D7D7722E6B2FC7FA524C48DB9EEAD5F5C69E6010256A180821 + 2652E64ACD4DE1CB9094B95223E04DD43050C29A06309849C46F0D9FE9D43BD8 + A569282E5505D0ADD38595232BBF0B42E82E554501400864D971AE7815DB7140 + CAA4D7D75036C0EB6B0029938E942866360BB018D03BCB066827DE45339341F9 + 649A38524EDE0D450EAAEAEA6F0D57D5D5D31C8A14A49493F3A689B29A4AB1B8 + B99916AA3A1EEE8FCA9B205575F584FBA352A8EAABE5EDEDF49744E2E413BF6D + 6DF1ACA3E347A0D69768BA6F3C7555DEF11C974A1C1F96108A42B55FE3DE8347 + B43FEE2B54782AC7D2FBFB73CF6766F8572A5D9429E0F5323D3C4CAFAEDF58A6 + E59D9DF4CB588C3FF93C70A98D67EA0906891A065D9A864B5541081CC739AFF3 + D76412475E1CF23FB16AF0850E8027A80000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000002D549444154388D9D954D6B13 + 5B18809F7362E2A435D3A48BBA084D9D807111A52E0B6942A572EF42912AE207 + B871E30F904237E2E2EE84BA15112FDDA80B458C827017722D81D08020824C37 + 219DB65831D1686A9A49CC383377D12636A6686E9FE539BC0FE7E5FD38821DF0 + 48494AD3486A1A61550521362F5C97B26992310C5E160A7CFBFEBD2B56FC7C70 + 617494EB93931C181C1C00A680044244B684AB4016487FA856D76F6632DCCEE5 + B05DB75BE891923B67CE707174D48B1033C0B4D5A8072A6B2B34BE560050D420 + C1F0085EC55F056671DD1BFF160AD6F9070FA8359B9DC2BFCF9EE5E2D1A341E0 + 99D530134BB9794A791DD7713A539292A18371A263137895BE2C702A63189513 + 7373D88E83A795E6B5C9492FF04FEDF3C7C49BF47DBE7E7807DB5269E3BAD4CA + 254AF94542C35AC4E7EF1F1F0985EE59B6ED649797911E21B87EFC38C08CD530 + 136F9F3FA4696EEC54AB0E9AE6066F9F3FC46A980960E66A32C980A22053D128 + 07422115985ECACDF724DB2E5DCACD034C077C3E752A1E4726350D60CA6AD403 + A5BCDEB3AC4529AF6335EA0184984A691A32ACAA00E395B595AE02F482EB3854 + D65600C6C3AA8ADC3A1F6EB5C66ED88A1D4688B6B0ABC1778100DAC255450DEE + DAB415BB8AEB22CBA609900D86471042FE3A72A7670949303C02902D9B263263 + 18B890F62AFEEA502CFEBF8543B1385EC55F75219D310CE4CB42818FB5DA3A30 + 1B1D9BC0D7B7AF6799AF6F1FD1B1098059CBB6D79FE83A1EDB71B06C9B3F62B1 + 05CF1EEFB1D0B016292FE7B1ADE66F65474E9C430904B3C0955B0B0BCED3C5C5 + CD597EFDFE3D639188A30D0E3EF1F9FBC7F71F3A1CB11A75CC2F9FBAE65948C9 + FED861E27F9E6EC94EE9C5A279F9D1232CDBFED12EFD3E1F8F2F5D22A569BDAF + 2FB8A1178BD6C9B9398A1B9B23DBD17F1E29994E26B99A4A11D8BBF7C7828508 + 42742CD8BA65ADDF7DF58ABF5EBC68EFC22E618B0145E1743CDEFD0500E55A8D + 8C6190D6F5F6ABB6F31FFF13336BA952D3540000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000003E1494441544889A5965F4C53 + 7714C73FE796DE0295824477DB744085D82CD640F405F627028B083CF8A4D99F + CCC4F83079D91E97F8B6B998986DC95E78F38D273783C66421B22562AA3C98F8 + C0C2DACC48A4D20E4B3158062DB3D7DEFEF6D05B2CB30575DF977B7EF7FC72BE + E79CDF37BFF313B681C7E5A2AFBD9D4E9F0FB7AE8348D1A114A665319B4C32FD + E811A94CA66A0CA9F4B3ADA989737D7D7CDCD585CBE974081C040E21E2B30992 + C08C8248DEB2AC89FBF7F9211C66E6F1E39D0946BABBB9303848BDAEBB05BE04 + CE026D55125C002E01A356A190FDF1F66DBEBD79134BA9CA04E70706F8EAC811 + 10E905C680D67422A6527351D6528BE432EB0A10D7AE063C861F637F88DD2DFB + 048803A7512A3C1E8970E6CA954D124779E6E78F1D43443E01C63756579AA393 + D748FC7E57659F3E917CEE19AA500094E473CFC83E7DC2F25C54A5FF7A84C7EB + 6F74D6D67F8AC8C303861169AAABE3B7B9B917046D4D4DFC7CEA14BAC3D10B8C + AF3E8EEBB3BFFCC43F7FA7153B20975963F941543C86DF51DBD0781C983EECF7 + 2FDC89C588AFAEA2019CEBEFA7CEE97403631BE9153D3A7915EBB98948513662 + A3DC2E5F5BCF4DA29357D948AFE8C098A669EEAF070600D03C2E171F7576621F + 68EB83F00DF2666EC7CCFF8BBC99530FC237005A05BE78AFB5959061A0F57674 + 50EB743A80CFD389985A4B2D2A0065A39A5DC9B7965A54E9444C016711710C06 + 83685D5E2FB6CE03A9B928D8CAAAD4966A2D2AD980D8310202A12E9F0FCDADEB + 0087EC0C5EB7332FA12CC661B7AE53632FBC00B9CC7AA95A368D6DEC4ABE5C66 + BDD4052FB04950DA222282524A95CAAE6657F76DD587667F97005CBB3CAFD888 + EA288BB104A09996053003E031FCFF9BA02CC68C695968B34B4B2888000BC6FE + 10D835BE894C0165C7585010994D26D1A66331F2966529B8B4BB25201EC3FFC6 + 32F5187ED9DD121055BC61AD5BF3F368A94C865F8B17D328483CD83B4C8DEEAA + 3827B6438DEE9260EF30207150A37F2E2F732F91281EF2C5A9290A854216385D + DFBCC70C0D9DC0E1D479D516399C3AA1A113D437EF3181D328B217A7A6282855 + BC4D97D6D7A9ADA9E1FD4060017858DBD0787C4F20E8C8AE2C8B995DAFDA2211 + A1D1FBB61C1C3A49C35B3E1338034C5C8F46B930350594CD833BB118C1BD7B39 + 60181160DA5957FFA1F79DCEA6922AACFC730AF93C229AD43634D2DCDA417B4F + BFECEBEE15675D7D0238094CDC8DC7F9ECF2656C756E9D680E11BE1B1E66A4A7 + 0787A6B9798D91A9207B3D1261E4DA3532A6B9B9A1E2617E1008F0CDD1A3BCDB + D606222F863EF810D932F405AC3F9249BE0F87B91A89BC146B5BB5840C83C160 + 90AED2B305B009369F2DB7E6E7B9974850509547C8BF440105177121B1010000 + 000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000450494441545885ED975D4C5A + 6718C7FFEF81735A101594C1F123B59010B5A8139BA5CA1497D82E5D96B826D4 + 34714BEF5CB6344D9A5D7BD726BD74BBE88D1FE9C592F54A36ED4D9754CD2C6A + 5AA29D5DA9757E0071625181BA025AE0F0EE42B40544E60757DBFFEA9CBCCFFB + FC7F6F4EDEE73C0FF05F17394870A54A854FB45A54F13CD4321940E2DB29852F + 14C2738F078F1C0E3C75BB8F0F8021045F190CB8D6D0802A9EAF218498013402 + 2807218571002F805900564A69FFA2CFF7ECCEC404EEDA6C782B088707D0ABD5 + E86D6B430DCF9B08704B88843FF63AE7E05F7621E45B43786B1300C09D94405A + F001142565283CAD8388E5C628D0B9E0F58E7E63B160DCE53A38C025BD1E7D6D + 6D128958DC2544C21DAEC971B8ED53884523FB9E8811B328D6D7A1ECAC112296 + EB89C66237BEBB7F7FABD766DB335E94CEFCC72B57149C48F4606365E98BE9C1 + 7BF0FFE5008DC5F63507001A8BE16FCF323CB3CF91AB2A3A2BCD93B75CACA8F8 + 793D10D89A5C5ECE0CA057AB3170F5AA84138B1FAC2FCED6DB7FED87107E9BD1 + 385942248CD5393B7214CAD21C85D27441A7BB37EE74465DAF5F27C431092F84 + A0EFF2659C64D9AE8D95A5FA99A1C17F75EA74A2B118668606B1B1B2542F6298 + AE6EB31912964D0FD05E5B8B6A9E37099170C7CCC3A39927403C1C8410097794 + E6E79BAE3534A407B86E34821072D335398E70287064F31D854301B826C74108 + B9F96D7D3DC4CC3BDBDDA74A950A553C5F2D44C28D6EFBD4B199EFC86D9F8210 + 0937F2B9B9D54D1A4D2A8049A30121C4EC75CE65BC6A87512C1A81D739074288 + D9B417404D51110034F997D3178DA32A9EBBE9C36DAF4400B54C0600E541DF5A + D600E2B9CB55DB5E8900200420A430122FAFD950646B1320A470F72786A45B00 + 00A0346B007BE566121629F5B11269D6FC598914A0D4F73EC82E802F14028097 + 390A65D600E2B95FFA37DF7DE65D00FBEA2A0058E525A7B30610CF6DB57B3CA9 + 00A38B8B0060516A7460C46CF2DE238B11B3506A740060F96DDB2B11E0A9DB8D + 05AF775AC47263C57AC3B10314EB0D10B1DC982F149A1E9E9F4F0500803B1313 + A0947696D519C1496529490E2B4E2A43599D1194D2CEBEA4362D01E0AECD8605 + AF7754C49DE8A93CDF0AC2A4DED2838A300C2ACFB742C49DE8590F0647BFB75A + 13D6131A1281524CAFACE04B83614892276FC951284BD79D7F1EBA3610864165 + 4B2B0A4E691F534ADB3B2C96E8EF491D734A47B4B4B181B54020FA59458545AA + 5036CB8B4F95FA971C1022E10399735219AA2E9A51704AFB18C0E7B74746DE74 + 3F799212B7674F38E576632D18DCBAA0D3FD24C993AB8ACED4D6D11845C0BB9A + B14961C42C4AAA3FC2994F2F41925FD04B296DBF3D32F2E6D6F0F09EF1FBB6E5 + CD1A0DBACD6694CAE5876ACBD782C1D11B0303F8E5C58BB41E19071309CBE2BA + D188AFCF9D43515E5E0D01F61F4C807E7F28F4ACD766C30F562BDEAF7A8702D8 + 91986160D268D0ACD5A29AE7A14A1ACDFC9B9BF8E3D52B3C7238303C3F9F7122 + FA5F3BFA07EE5BCBEE56050BB30000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000005B9494441545885EDD85D4C9B + F715C7F1EF796C30C1C621B8C604488331B8CA4C5E1AA5536912345221D69B36 + 4CA8AA842A95E4A65A276DD226E5B2D2EE72D39B74BD59D36A17EB54B5A9D8B2 + 8D4A194D3325A98048E5A5354B82312A1E06139BF21ABCD8CFD90D20C0404900 + 5FF577E7E7F93F3E1F5BF2DFE77FE0C76C2FB2136F52EC709067B5AEBA96324D + 46A7A7B7FDDE4F043C545C4C534D0DF53E1F474A4A70E4E6E68B8817112700AA + D3AA1A5E48A5E683B118D74321AE0683744722BB0B6CF4FBF96D5D1D272B2A0C + 81178166E06722E2038C35CB4D550D015F029F2A74F446A3E6BBB76EF1514FCF + CE024B9D4EDE3D7B96C6EA6A0B22E7052E8888772E31A19323616626C678383D + 492A9904C06AB3B1C7B98F027709FB0E78B117B94555C30A1751BDDC3932927E + ABAD8D81586CFBC0535E2F7F7EED359EB2DB8F097C88EA91F1C12091DE2EE6E2 + 3F5C00C0EE2AA6FCE84FF154FD0444FA145A6793C99E5FB6B571A5BF7FD3672D + 9BDD3C1B08F0494B0B0E9BAD55443E9B9988967DD3FE29D1E0D73C7A38B7251C + C0A38773C4C3F778307C9F027789C7E670BE916BB18C3605023D53C924DD2323 + 8F0F3CEDF5F2494B0B3916CBEF0C914BA3FD77AC03FFFA2BFF9B9FDD326C3DE8 + F8DD7E72726DD6BD9EB29781F986AAAADBA1789C6FC7C7B70E2C753A696F6DC5 + 9197D76A885C0A77FD9B70D70D507D62DC7254498C0CA1A6C9BEF28A06551D69 + 7CE6999EF6BB7789CD667EF875817F7AF5550EEFDF7F4C0CE3B3D1FE3BD670D7 + 8DEDC3D6642A3A428E2D0F674959A355E41FCF1F3C38F6E19D3BE89A2F61EDD6 + 40A3DF4FA3DF6F11910F6662A3B6D0575FEC386E29A1AFBE6026366A13910F6A + 3C1ECBF9132732D664007F73EA14889C43F5E8BD1B9FA3A6B96B40354DEEDDF8 + 1C548F2272EE57274F6231569356BD3AE47653575969085C880D06B7BC8D6C27 + 73F118B1C12002177C2E97D15055B531B0E9F061503D23229591DEEE5DC72D25 + D2DB8D8854A27AA6A9A66663609DD78B8834CF251EE86C7CFD9FFD6E64363ECE + 5CE2818A48739DD7BB31F078692940FD64249C35DC52166BD63F5D5848D19E3D + CBD797811E8703BBCD962F22BE995834EBC0995894C5A623DFE77265026D562B + 021580F1707A32EBC0C59A868854E4E5E464020196FAB9A5AE249B59AEB9D453 + 2E66ED3EB8D8DDECC05FDA6367B9E6AA0E6B3550751AC09A9B9715D2CA2CD754 + 9D5A797D1998324D14C28099B7B730AB3880C59AA6C2702A9DCE048E4E4FB3F0 + E8D1BCAA0E15B8F7671D58E0DE8FAA0EA13A1F4A24328100FF999800B85E74C0 + 4BB6B358F3FAE4C2C2AAB66B15B0637010E08ABDC82D765771D670765731F622 + B700573AEEDF5F756F15F06A30884287AA86CB8F3C973560F991E750D530D071 + 75606063607724425F349A56B8E8A90E6077B9771D6777B9F1540750B8383633 + 93DE140870E9D62D50BD8C489FBFEE25C4C858B26311C3C05FF71288F4A17AF9 + 8F9D9D2453A9CD811FF5F4D0F9DD7769553D57E0294D56D69ED9356065ED190A + 3CA5498573C39393E9776EDECC58B3EE99A42B12A1E5D967C7722D96D1BD9EB2 + 97D534998A6E7C347C923C7DFC050E1EAF05D53753E974FBEB1F7F4C281EDF1A + F0C1DC1CE1C949CE06023DC07C61794583D596C7F7FF1DDEF6C94E0C03DF0B2F + 72F0782DAA7A4155DF7BFBDA35FED2DBBBEEFA0DCFC5C1588CA985051AAAAB6F + 0B8C388B4B1B8B0E545A6726A28F75685F19BBAB9840E32F78CAEB4F026FAAEA + 7B7FB87D9BDF77746CF8CCA69385EE48845022C1CFFDFE1E8B61FCD3E62878BE + F4D0314FDEDE7D2C4C7FBF65A8DD554C656D3DD5A71AB0390AFA54F5959469B6 + BF7DEDDAA638D8E2F0E8704909EF37375353526201B6373C82CBC38944FAADB6 + 36BE1C1AFAC1DA5B1EBF590C83F3274EF0EBD3A7A9282C3444E4F1C66FAA1D63 + B3B3E6FB9D9DBC73F366C676B26DE04A684375354D8100F53E1F654E27C0BA03 + 4C603E3E3FCFF55088BF0D0CF0F781812DC39E18B83645F9F9F88A8A58D9A603 + A4D2694289C4BAF3961F93CDFC1F0A996D2C5D35499E0000000049454E44AE42 + 6082} + end> + end + item + Name = 'variables' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000018449444154388DA592CD4A1B + 6114869FF3CD47165D160A8532C4125BA3604D2D454818415A219BAE12288294 + 2C5CF61A8257D06B180ABD031766AB24109080AB0C94FED04068D1402B5804E7 + 9BE3420919C98FE0BB3B9CF7075E5E61042FDFBCE7C3EE972C108A4809B08C47 + ACAA4DA0962214362A00E1FEF1B7F5C3A847A2AAE3D446C40BF2FE7A7925179A + D18767338848E9463C211C12550EA31E22524A19200260A789474D006B661167 + C1BE7ABBC58B8D0A9E67C92EBEE6DFFF0BF36EF5197FCF2F0050E0D239EFE4EC + 7CB13738ABC789565306DBF5CF730821628A72D37A69C14FA528C4CEB956E7C7 + EFDA5EE72B97493234B10861E3F87B7030BBF56073F96918F54F3F76FB83AA11 + 51146704533CB863EB9E31C5F9C70FBB464483BC8FA24D8B602725DF3601ECD2 + 9347AEF8DC77638774173CF01CBFA2A34C9238A27663E25427E2CFCF884F3B6B + C3FBDE3B308033D70B9C4EBCE6C44ABA2EA3AACD20EF33CDC48810E47D8016B7 + FAB6A0B5F24A2E2C17E687431A8358555BA0B56EBB917A5C013A0DA5B5D3A28F + 640000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000022D49444154388DA5944D4B54 + 6114809F73BD8DDDE14EDACCE8988252B3B08162C010A4689160E8B2685181D0 + 2AA34DD0AA8525597FC05D6E041302C3D683B409A20F6B655444690489E0D8C4 + C4D88CF3F59E164AE55C19477CB6E7BCCF7BDE8F73840ABAFA2E317867CA0286 + 816B221201A432EF3F5455578007C07DBB32DA7BF126C070AE501A49CC2F92CA + 6401B48A9050C01F198847471C9F8D47E8040E020C25E61779BBB85CCDF397AF + C93400E7BB3B87ACCAA0088848CB66653593CA641191168F70F3BAAADD593564 + 1BE1DEB0ED7DF5C44E0EB0DF0980083EC7656DBD70E650A34B3A9BC7987FEFA1 + 6A2819135C2F96CF968DB902E2F394786BEA1DCDED47C362C905908888605429 + 950D6563B6241BA3E48AC5956FC9F4CCF34FDFDB9399EC2C100238DCDCC8D5DE + 2EEC48472C8EC8D35FD97CE8E75A6EC723055D8713475A4743AED3F7F8F5C7EB + E95C617ACB9111C63E2CAD861EBD788FA9FADB36B0042E9F3A168AB585C7626D + 4DBD2FBF2CAD8A48936D598A52B404ABE7CDC2724D3200A330B7B04C9D583D1D + 4D0DA6CEB23E8BA0DDD156147D6523F84AA656DD06256340F0B5050F3078FA78 + B1A5C1A5C15F9F026E783A6537045D87A0EB4C0A4CABEA4C21F73BB527A12542 + 62E2EE24AAE4736BCC3F7BE2EDE5DD323B31BA7593BD0A2BB1D86134554155BD + 4B2D554D8603FE5D99C2013FAA9A641BA10D3ADE1F8FDE06F851C3C80A07FCF4 + C7A3808E17F3DE7C5B61D4F1D571AEBB736873DC576563DCEBB8C2BDB9C4434F + FC0F164CCD98E0C9E9590000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000031D494441544889AD95CF6B5C + 5514C73FE7CEFB953793B4A371029129AE2A2DCECE90699562C190E24A505050 + D085DBEC858ED0DA14DCD75D375D74A3FE038654A88BE240A90B23868208E988 + 38D336439ACE64DE9B99775CBC99E625332F4D83DFD5F7DC77DEFDDEF3BDF7DC + 2B8CC19B8B9FF249E506C019E0AA8894014F5555446498978C13BCA3AA55E022 + F08BEC9F5CC4F0D50F7F929F397106915BCDA73BDE5AAD41D88B000592BF24E3 + 983B96A1542C90CF4D74507D7744C09DC8F1CD4A13447EDA6C75DEF9F6C7BBB4 + C3AE8EAB340DBE63CBD28539F259EFB6199B212022E5DF6B0DDA61576580B8C2 + 5D24E3246F875D5DAB3510A13C5E202E7B22B6E568E8F62254F1ACB40455D5D8 + D72167841FFC2DA6A90271D9A2BB7CEFA9D91FEFE7C3CDB7004CC6C2763C005C + 3F0740D0ED5DCA08F8AE4D27EC0D4577D7A6EA8AF03AE802484E64F77825B935 + FFDEE75CF8E212C7A6670179368931F2F51BC502B3F949C25E7F4F75912A41B7 + C7C3ED367FD59B33F5ADD6B5BEF2C1D096586560D1C75F5E07780B6119316501 + 5755D5CE64A4702CCB2B53FE781B2088A27EF5E156BBF2F3FAC647BF3D687C17 + C187098B04500B388B98D5666BC71D34D46073074B48E18E659C52B1706EE678 + 6EF5FCE9D716369FEE2C3D78BCBD883099ACD642B8DA6CEDB8D756EED20E5EAC + A16EFFB1214B8B73EEF494BF7CEAD5E9F3B5CDED5B91EAFB0076C6281018C1CC + AFD51AB483F10D95C64544DA41DC5046CCFCEC4B933876E6BE88C88463532A16 + 00AA168217DB723484BD3E08EECB399FB74F1603DBCA68A958209FF53AC0C5D4 + 3E78514CF92E674F16F15D3B48DEA6D6613AF6A04E1E8C611983E598CB914697 + 51508DB8B77213EB791D9BC693622282AA72F3CA67D437D60178F2E81F9E3CFE + 37FDAA380AEA1BEBFC7DFFD73D63FF9B456930038B80E71FCD244F5A95A0A302 + 40E05829CFC221E05819803061C45E01D5A85A2A16F05D5B740088AD3888ABAA + FA8E2DA56201D5A81A4F37AA60A952C9E7BCD5A5C53977ADD690EEC8E33E9EDB + C3C73DEB05AA5A51EDD3DA7A342A00DCD14817F25977F9DCA9136514E750DE08 + 21AA5555AD8870E7DEEAF734EBB591B4FF000BF2C6D49521A341000000004945 + 4E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000270494441545885ED964D4814 + 6118C77FEF3AB33BEE47081298109B90597B88DA482113B1A3E5A175A92E2248 + A7DA844E11748F0E5DD28B7D5C3DAD910A1E2A8308152125E8E0928165F46160 + 983A39BB633E1D3291CA7795DDA50EFE6FC3FCE7FDFFE661E6791E45168523D5 + D4C513F8FC3B500A40657B442F11DCCC12237D7779F57C507F5A3852CDC58E27 + 01D36B750071A55430B77410641121B9B2F2BDFDDED5D8A2A133D7C62E607AAD + 5BA90FB3AD032F5EE36496255700CB6B041A0FED6DDD5F5E4AFD99F6362D803F + 588282787274023BEDE69A0DC0829321393AC1B5D8F1E6E260499B47EB568052 + A17C85FF929D7651A89042A107C8F583DB84B200145EDB00DB0006403852435D + 3C81E50FB1DA6F01081F38CAD76F8EA7295AC99CED6CEA40011CD7F5BDFFB250 + 3B336FDF10E18816201CA921D1311834BC5627D0AC940AFC6EAAADDABD959742 + 446CC75DEE793AF1B6F1596A7A60450361D4C513185EAB737CEA534BFFF8248E + 9B87766B1AFEA668654B43640F539FE7AE4CCFCE3FDEC8EBB1FC2180D86A78AE + D90038EE32FDE393788DA258C5CE92219DD7835228A582F90A5F0FA1940A14FB + CCB41EA0C0F2287D3BD74EC342C9328B44446C410A5F8180CFFC23FCD4E17D00 + 4937BD54F80A549597EEBA7EEEC4DAB588D8400FD03EDC7BBBF000A6B81FDFA5 + 5EAE555A4470330EC30FBA187BD45D78809937296E9EAFDEF0FE3F9F05DB00DB + 00FF01800822625B667EFF48CB3440C4FEB9A26800DC8C03D0D314AD245F1096 + 69D014AD44E0BE9BD66F52C648DF1D0ED69FBE14AD28235A51F6D78D68AB5AD7 + 6E1343BD5D5AAF02881C3B49C3D9CBF8FC215496F1B929000437ED30DCDBC5D8 + C36EADF707A0E9DB55A107EB7C0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000371494441545885ED975D6C53 + 6518C77FCF39A71FEBC63E5A5DB745DA84D5517540A6402296819810C5181213 + B933DEA08982B88B796942BC74263384488CD11BC32D775C70313F364D0C71C1 + 3899CCA0A31DE8BED83AEDB652DA3E5E74B544819EAE1DDDC57E17E7E29CF7C9 + FBCB73CEFBBEFF23D8C45DD7C09EC3AFD31C0823220862B7D4169ABFAA327165 + 98EFCF7F4E3A75CBDE2C9BBC7E8E9D1AC01FDC1A00E9013A45C4AAACA082B20C + 3AA8CAE9F191EF163FE97DD19EE09177CFF0F44B471F436428BE946CBA36B340 + 36AB95F403C0619974B47A7159E625D07DE73F7D6FD15617424F3E0B227DD766 + 169A3EFBEA47D2D96CC5E5F234D6BA79FBE0CE2E8FCB71ECD1AEFD1F18768A4C + D34284FD4363B1359503882F26B9149D02E8364C07B6044504104F32955E53B9 + 3CC9541A113C22D813AC0EB9E5B18E05736C0896CB8660B9AC7B41DBE7E9ED74 + E66B8769ACEA7C5355C835232822C1526A2DC885814347DFA763E701405636E6 + 020D0F3F422AAB07F6860374B4FAD0123515E57626C35C6299F19978642E91FC + 18E8BC67C11DD35BEEBA068E9F1AA03918EE043E14A11BC4FDDF9A1A20D4E225 + D4E22DCDAE403A9BCD5E9EFD7BE9E4859F7E8FFC7263F65BBD9F645E70CFE137 + 680E868302DF8CDE986DBCF8DB1FA4D2998A471543C4EC68F56E8F8403E75ED8 + D1FEF2CDC4F25B530B8B834505FD8130404FECE65F8D5F0C8D50F91055E0EAD4 + 3C009170E064B8CDD735194F448B7D93C6CAFB7EE2EAD4FC9ACAE5F9F5CF390C + 91C79BEB6B01A2C5C61B925B14D65A04D0BB91CDAD30CB69990045B35BD5F641 + 91FFEF1677635D6ED486A0AA9A56D52A76F0DE8F34E4F702FAB3A2F64F924AD3 + E071B1B5D5E74E6532FFDE739AA6EE6A6F63B3AF7E5ED18FE2D3D7AB27F8D026 + 0FAFEEDDD6621A8597A8AA496010B437B5B418FBF26C5FF5045D0E0B604BC10E + 50458189B11F38D7FF0E93E3A3D51304E8899845C7ACCB557C271B82E5B22158 + 2E1B82E592137C30496B5558AA8AA249A7F5609A99CB819AB4FBE765ACB46F70 + 5BC04F8D736D0F160176B7B7A1CA90DD3F436B626C985D875E3BDDE8711D39F1 + FCEE1D23B16952E94CF1CA12310C21E46F62B3AF3E0EF4C6AE0CDBAA13CBE9E2 + CDFE0B6CD9FE4C1DC871A05B04F77D13DB2A50D534300AF4DF5A4E44CFF41C24 + 3A7AB1B82080B3A6967DAF9CA0E3A9E740B015C54B170450E2D3D71938DBC7E4 + F8655B75FF001FEA1FB20BDFFFD70000000049454E44AE426082} + end> + end + item + Name = 'heart-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000026149444154388D95905F4853 + 6118C69FEF9CB5A66ED333CF36DB263677CAB53085ACAE0229BB48A38250A737 + 932EFA73117451377A1181DD157413455746B0F08889D0922C82BAD0C44471A1 + 459A6E6EF96F9A2E6D733BE77C5D68E59F09F95CBDBCDFF37BBFF779499920E0 + 596DAD3A5DADBE41000F08B180D2510A3CFC198F3F5E912418B5DA4B00AE8210 + 0728FD0EE0494292EE5E696B4B90507DBDCA909EFE722E307272BCF73D628B0B + D0F226E41F2B853EC7260240742A54F5ADE71D9622D348CBE4B0F7C87164E709 + 6FE2C96405F9D5D878ED4768ECBEDF2762BD08C3E2D0996A00C0E08B665045DE + F05E585105CE66BFAE025017E8EBC2665145C6D0EBF6BFF56605FABAC0D9EC75 + 2A10E25C9A9DDA620080646C39651F009666A700429C0C289509C36C6BDC4E84 + 61004A650640BF3EC7BAE3016B4C3F03A0798FB368C703D698662629CB4D7C7E + C1A4CE6CF96F5867B680CF2F9804A54DAC49AB4D1EB65AC7B32CB955D35F3EA5 + BCF87AB1BBD4282CAF846AB7E662FBD0D020DB130CA2BAA868383B8B3367188C + 25B3A39FB7A70981EBD479E8CDD6470BB1D83DB7D70B362E49E89D9880BBB8B8 + 536FE08F6A7499C25C6024255C505A0EA3C3F94A56148F4714958FE130580008 + 47A318894494732ED7731D6F2EC9E0784764FC2B40E92ACBB070959D85497075 + 52E0C24D9F2FE11D18588DF4E783E199198CCDCF4BA79DCE165DB6713F67CB3B + 3817185DCD5C51092ED72E4A8A52DDD0D1B1F2A0BBFBDF629B372D13043C75BB + 49A646D390882DDF0200755AC6EDB824DDB9DCDA4A5BFCFE8DC952DDEA80C904 + 6F4D0DF6F1FC0900082F2EBEF588223E04835BBCBF016F4EE069A2631FBA0000 + 000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000033149444154388DA5D44F4CDB + 7518C7F1F7F7D7D2D252A0F4C79F8AB485821D10600B619B87455DFC130EAD8B + 2126332E7171261C7691839EBCED605CA25EBC9898856C8765716C318CE8C1B4 + 4DCCA889CE3858B063195D080C584B18B6B4B43FDAC7031B8A1B64CAE7FA7C9F + D7F37CBF87AF6A7038B876F2249D6EB7AEE063E0184A3D8FC8223026703695C9 + DC5F2B14F0D5D4342AA53E028228D580C87DE03B11393BBFBABA1C1C1E464506 + 0739ECF174033F641F2EBB17A67E27B7BA42796535EEF61E1CB50D0F81B7D9CC + B799D49273313EC17A66155B550DCF751EC0EED41781FE7B2B2B932A7BE68C03 + A5269377E3DE7878142995D88A52F85F3C4A53CFC12CC0DCC42FF6999F2320F2 + F7114DA3FDD51075FEF65944BACD28753A9FF9D37B3B32B61D0310612616C6EA + A8B403CCC4C2FC3B522A713B3C46557DA3D7EAA83A6D060616E313948A1B4F1C + 7E9CE9E8F73BD6004AC50D16E313F8FA8E0C98516A5F3AB5B46B43D128EC5A07 + 48A79640A97D1A60955DB67BD63C32AC1A22099B53DF336873EA2092D080A8EE + 6DDD33A8FB5A01A21A70BEC6D3AC6C4ED71EB67351D3D4AC80F39A400C54D87F + F8E8FF06377B55188869A3535388C890DEDC66D4B575FC67ACAEAD03BDB9CD10 + 91A19B0B0B987E9B9FE7FDBEBE07664D2BB83CFED796137730D673CF84D99D3A + 5DFD03284DFB44E0EA898B1731ADE472A4F379DE0804C63593B9DBE56BED48DE + FD83A261EC8A59EC15F484DEC162ABB80A7CF8D5F5EB0CDFB88109E0D7B9395A + 759D2EB7FB5A99B5FC1597D7EF4925A677442DF60A7A82C7B155BBC605067E4A + 248C53232388C8260830168FF3724B8BE1753AAF94D9EC2FD5B6043CA97B7728 + 16F2DB30ABA38A036FBE8BCDE98A01C1E96432131C1E26F768F81628225CB975 + 8B233E5FBEA9BAFA5259B9ED60C30B9DFED585390A6B69002AEB1BD91F3A8ED5 + 51F5A38884A693C974FFB9732C67B35B034DFF9C6E148B8C4C4ED25E5F6F046A + 6B2F99CA2CEE864057AF91CB5259E7A6E3F563982DD66F44E4C4F8ECECFA5B17 + 2EF02093D97603F5B43732691A5F04837C70E810C0A0822F01048680AF47A7A6 + 3875F9326B85273F8DA7828FF35E6F2F9F8742949BCDFB01364AA59B9F45227C + 1A8DEED8F31722A93B42438363210000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000430494441544889AD947D4CD5 + 6514C73FE7F95D51B90817AF206F0A28BB801788365F66C5D4B218C1665AE6CA + A6366DB5B5D6E6969BFF6A7FE41F35B79AD99A5B7363E0B49AA9F8B21A4D5B8E + A16E24C30905285C5E1C977B2F172FF7E2BD9CFE109A182FCEFAFEF57D9EF37D + CE73BEE77976C48870B8AA8ADDAB5783C872543F12915710C9443500FCAEF00D + AAF55D8100FE5088E2F474800D22F23E226B0107AA1E854BA87E89EA5F97DADA + 78BBB616F9B4BC9CBD6565007B80C363D1E87C5F772723433EE6CC8B27392B87 + B9F60454B55AE1030180A322B23D727F189FA793072321E62725939C9583B16C + 23C0C7C0B1332D2DC8D08103D88C7907F86EB0AB5D5A7F3D4FE47E50198765B3 + 91F5CC1AC959F90288FC0C80EAC6CE6BBFD1DDD4A0B1687442CA5CFB0271ADAF + 60E192650AEC54A896D0C1838B11B9E5EFB99B74F3EC0954C7505515117998EB + 215FEC2A227F432580DCAE3FA7FDADCD53EA440CC555DB70642C0D0085464576 + A3EA68BB7211D531A6437F6B339EE6EB789AAF6B7F6BF3B43AD531DAAE5C0255 + 87C26E9B40E5507F8F867C5E9D2C547D9CB75FAD0790A9628FF2906F80A1FE1E + 12D3322B0D2205C1813E00641CD3F1B158141D8BCDAA03080EF4814881114888 + 8D46A6B5FCB418CF996053D5C1B8787BEA747667E233C5E2E2EDA03A6880C6C4 + B42C44E489ACCB23982146625A1640A3012EC63B9C6277A6CAFFD51EBB3355E2 + 1D4E012E1A55AD01EE6716AF44C7316177263E532CB37825C0B0AAD618440681 + 2369AE22129CA9FFB94509CE54497315017C0D0C9A86BB77010E21D2E75A5781 + 18F3D4AD116370ADAB00913EE0504F3088F5A7D7CBF6D2D21181CE790B12DF14 + 63E1EBEE64A2AA89CAA6E28FAF73D7AC97D4BC4254F55DE0C6BEBA3AAC2EBF9F + 254949946664DC5248494ACB5A150EF864D87B6FD2779C0D8B5D6E59BEF64514 + 8E005F5C6E6F67FF850B5800973B3AA82A286091DDFE8B883CEFCCCECB1DBAD7 + 2B9160E089DE20392B57566CDC8418538FEA4E6F2814DB7CFC38FE701803108C + 4478ABA6067F383CAAB0552CABC95DBE054766F6AC953B32B371976F412CAB49 + 61EB83586C74C78913740502000F1D00784321AE7577B3B5A4246C19F383B1AC + 97539617A4857C03F2F8209CC0A25C97B8CBB760D96C4D0AE5AAEAFDF0F4697E + 6A69F947633D7AE08EDFCFCDDE5E5E73BB4396C84963ACB29465F94B1E844332 + 3CD03FA94519EE67257F7D25C6B2AEAA6A8582F79373E738D6D838A988491700 + B479BDFCD1D3C3AB858523736DB6932252E4CCCECB9F336F3E7ECF1D1111F29E + 7B899C5565222267517D7D34160BECABABE36843C3BF5C4E3B1E4AD3D339B36B + 170BED7623F019B03778AF570016A4A62BF0B9AAEE8F44A363DB6B6B397FFBF6 + 9479669C3F4B1D0EBEDFB183152929009B45E45B00557D0FF8B12718645B7535 + 373C9E6973CC3AE012E2E2F86AD326DE282901C81DDFEEB8D2D1C19E53A7F00C + 0DCD78FE6FAE780D74F756021D0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000057E494441545885CD975D4C93 + 5718C7FFE77DA9054A29F403E82BC55A28DF4370411D2A8AE046F02B1B4145B2 + 0B97A9C9BC709733D98D8959DC2EF6713313D9B898824CFC9A5121030CC28628 + 3207012C146C550A58CA37A59F6FCF2EE89C8A25E080ED7FF99EE779FEBF9373 + 729EE705FE6391573FF8310CF62426624F521252944A3FB15018098075F17CBF + 7E68C856DDD383D2070F303C3DFD525EB05088BD2929C88B8F479C4211E02F10 + 7000F869A7B3AFD36C76FFD2D1812B1D1DB0B95CBE01D22323519C9F0FAD5C9E + 430839064AB739A626FC29A510068979C2B04D143833E970949DA8AEF69C6E6A + 0200EC5BB3065FE5E5317291E800010E530FBFC13135C9128640280AB683905B + 94D2EF4CE3E3359F5CBD8A9A9E9ED900395A2D2E141505FAFBF915DBC647F63F + F9A31116831EBCCB3913C8B0088D544395BA1E12A5AA99525A78BEB5D5609E9A + C2B18D1B571342CE8F0F3C4D7FFAE75D8CF619413D3C008015AC807CB516516B + 3310209196F3941E3A74F1E274796BEB3F001AA914778E1E5D21160AAB9E75B7 + 6FE9AEAF02E5799FE7C625BF8DE88C6C3321241B0028A5B5BD8DB561FDED2DBE + CF9A65119B998BF0D8E4DB2E9ECFDD76E68CB3C564020B00C5F9F9488E88F8C2 + 62E83EA0ABBD0650EAB310004C9A07601F1F15C935713B011475DDBACE0DEADA + E6CC01A51836EA219285A9C552857F2AC7D594DCBF0F364626C3D7BB76ADE29D + 8E736D377E663D6EF7DC85BCB28E0C8115AC904C3C3349FADA9AE7950300A3A6 + C7E01253D35786869EAD3718C699BCF878003838A06B13B8EDB679170200C3BD + DB30DCBBBDA01CB7DD86015D9B00C0C1BCB83830691C0700DB878DFA05150200 + EAF1807A3C0BCEF37A6D4FE3383062A11000E2AD23430B2EF4A6F27AC5070985 + 6040084048B0DBE9583600B7D30110120C42C0805280522BEB27583600AF9715 + 0018FBCCADEF090C912D1B4060880CA0B4C7E17281D15B2C00D028E1A2960DC0 + EBD5A8B758C034180C0070252C2601733F3F8B230A202C260100AED41B8D60EA + 0D060C59AD7541F270BD242272C901241191089287EBED6E775DA54E07C6EDF1 + A0A4B9990238B57A5DE69203783D4E5D686DA5A3361B1800387DE70E261D8EB3 + 12A5AA4D119DB064E68AE8044894AA3627CF9FFDA6A101006600CC562BBEACAB + E329702466530E2F08085C74734140206236E5F094D223C577EFF25D33977FA6 + 1B0240735F1FF2E2E24C2B43A58C5811B1E599BE63F1DC0941726E3E44A18A93 + 4FC6C6CA8ACACBE1F4B6FBE7001E4AD16834E2405A5A832454B6811508A247FB + 8C8BE2AF79270B613149BFBA78FEC8DED252DA3B32F27C8D7D31D0323D0DC3C8 + 08FD2039F96670F8CADD2EBB4D3E3934F0AFCCB9A4B550A767EA00EC385E5969 + BBD4DEFED23AFB6AC243B3199452FB668DE6864CA529B04D8C89DFB451856993 + 109B99DB4F09C92E696E1E3C5153332B6616000034188D504924E36B38EEA642 + AD2DB04D8C89160A11A64D427CD60E3308D956D5D5D5FB5145C56B1FBAD70200 + 406557173452E9F05B4AE50DB95AFBBED3362D9E1A1A9C97B932310D715B72FB + 414876757777D7FEB232B87DCC0D3E012880EB0F1F4215126249E1B8ABB255D1 + B984656563A6C7739AABD76542B37E6B372524BB52A7EB292C2B83638E01D727 + C08B1042961DCB50ABCB4394AA0C91541135FCA477D624C4F8099090BD1BCAC4 + D4DF29F0DE4F2D2D03072B2A7CEE7C5E007FABEED1230C4E4CD8DE8D8D2D0D92 + 2A38993A266DCCF4186EC7CC0C1920912265E73E847051251E4AF79FACAD9D3A + 5E5535AFE636EBD76C2E6D56AB71AEB0100A91E8638FDBF5ADFEB7EA0000D06E + DA6E63FC049F4ED8ED3F1CBE7C19D73A3BE75D73410000A09248F063410136AA + D58904380F0014286C1F1CECFCB0BC1CDDDE2776C900008021049F6DDD8AE359 + 59FE0C21F8BEA9C9FE7955D59C97ED7FABBF00FC7649981F485BDD0000000049 + 454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000076F494441545885DDD86B5054 + E71DC7F1EF3967775976B9B3C0C206502E4B44C0A268741A635430460CD09818 + EB4C9B4E92769A49A79DCEB433693369DADA71A6ED643AD3E9C5A6B918A72663 + 14C144AD8A2146EC784B836358C40D0B0272935DD96561D9FBD31720D5217231 + 513AFDBDDBF39CF37F3EE739FB9CCB03FFE391A66ACC4A48A02C371773521251 + 1ACDC476D7E82896FE7EEA5A5BE9191A9AB283449D8ED29C1C16A5A692A8D74F + 6CF7068358070668686FE7625FDFEC800F6765F14A6929CBD2D365499256010F + 0339801EB80E34014704341FBD7C996D1F7E48634FCFA493FB65591995F9F9A8 + 15251F580F140009C008D00A9C10F0B1A5AF2FFCDB1327A86E6A9A1AA8C832AF + 9697F3DD65CB244992BE03BC2CC2E14CF7B55E4606ED84837ED45A1D510623BA + F84409F897809F0743A1863F9C3AC5B6E3C70909C1F32B56F09B75EBD0AAD52B + 25D80E7CDD33E810C3F63E025E0F8A4A832EDE4074722A922C7700DB84103BDF + 6F6E16CF555733E2F74F062AB2CCAECD9BA92A288893E09D7030F048D785B374 + 5B3E25E81D9D7466BAB844D28B9793622E40C01F11E2A7B5164BB07B68881756 + AC502149BF97E087FDD626BA1ACFE0713A26D5506923312D5C4CFAD71E4056A9 + 8F0AD87ABAA3C359F9F6DB13C809E0AFCBCAF8C9AA55D1C0479E417B71D3916A + BC43CE2FFA07DC92B8B40C169455A2D6EA0E014F200448D2BE80D7537EA9EE00 + CE9ECE696B6863E22858BF095DBCA11158BDF7E245F7D3EFBD37367000454623 + AF6DDA842CCBBB479DD7D75C38B01BBF6778DAC2005EB70B7BFBE72465E79915 + B5260B49AAF47B86375DA8DDCDB0BD7F4635823E2FD75A5B30CCCB4D556B23CD + F9C9C97B1B7B7A68753890015E5AB30695A2548870F8714B5D0D41DFE44B3A25 + 726890CF0EEF251C0A6E0D87825B3F3BBC17EFD0E0AC6A047DA358EA6A10E1F0 + E3922455FCA2B414002551A7E34F9595C8B2FC8F5ECBA7A9FDD6C9336926098C + 8E10F07A19EC6AE77AA7ED0E6B78D044EA884E4E331BA3A3FFFE417333F2EAEC + 6C548A52002CE96EFAF71D15BE91DEE6467A9B1BBF548D71C312A0A0CC6C465E + 6C3201947A9C0E31EA9ADD65B91B19750DE2713A04505A9C96869CA8D301140D + 0FDCFE6E7EAF336E2932E874C848124892D137E29E6BD744C62D4624696C1603 + 2A110ECF21E9D688701824490520230408E1524568E7DA3511558416847002C8 + C1B1916BD5C525CEADEAA68C5B6CC15008D9E670009C1B7F70CFAD0C906499E8 + E4548073368703F97C571702EA154D44202E2D73AE7DC4A565A268220202EACF + 5FBD8A7CEEEA55467C3E17421C36DE5F38D73E8CF7178210870057BDCD86EC0B + 06A9B15800FE62C8CA23222A66CE7011513118B2F200FEDAD0D646CFD0D0D86D + 66C7993308382E49F2F9CC9207E70C9859F22092249F17707CC7D9B30063C0C6 + 9E1E1ADADA1042BC68CC2B202AC978CF715149468C790508215E6CB3DBF9E0D2 + A5FF02017E76E408C00990F698573D7A4F67B424CB98573D0A487B80132F1F3B + 4668FCC1A1DCD8A9CFED262D26866293E9A446A77F5A9615BDB3BBE39E00E72F + 7D88A4ACBC01A0A2DE66F3BC525737D176CB30BD74F4285D2ED7808067D28B97 + 8B848CECBB8E4BC8C826BD78B910423CE3F6F9065EA8ADBDA55DB9F9872F18A4 + A9AF8F2D45459FCBB2AC4AC8CC7AC8DE6E25E8F3DE155C646C3C85E54F222BAA + ED48D26B3FA8ADE5D4952BB707025C191CC41F0AB13A27E76345512D4ECCC836 + 5F6BBD443818F84A716AAD8E45155BD1E8A20E0A219E7FFDDC39F1BB932727ED + 37090870BAB3933C8341E42727BFAFD646AE8B3365A40DB45E4284435F094E51 + 6B28DCB8197D42D2274288C74E7776FABFB5670F4288990101FE79F9322BE7CF + 0FA4C7C61E88D0476F8C4D4D370CD85AF8B2AF65B24A4D61F96662524C2D4288 + 7556BBDDF5D8CE9D786EFA589F1130140E73A8A585F2050B3C897A7DAD362AA6 + 3236F5BE047BDBE53B1E4945ADA170C393C4A6A6DB10626DFFF0707FF95B6FD1 + 3BC5FACE6D8100A3810035160B1BF2F2DC06BDBE5A1B1DBB21FEBE79067BBB95 + 7030382B9C4A1B49D1C6A7884931B5006BFB86877BD6BFF106E36F5377060418 + F1FBA9B558586F36BB1374BABD5A7DF45AC3FCDCD4EB1D36827EDF8C70DAE858 + 16557C137D4272A310A2ACDFEDEE5FFFE69B58EDF6698F9D167803B9DF62E181 + 8C0C4F7A6CEC3B6AAD6E49724E7EF6505F37D37DCBC4A49828DAB88588A89863 + 428872ABDDEE2CDFB973DA919B1510C0E3F7B3BFA989852929FEDCA4A43D8A5A + 9D9C625E58E21B7133E2B8F685C7A4E415B2705D158A26E26F02BE7DB6ABCB5B + B56B17DD2ED74CBB9D391020100AB1DF62213E32325C62321D926479C0302FB7 + 4CA38F529C573B10626C86CB8A8A9C9565CC5BBA322049F28F8410BFAAB158C2 + 5BDF7D17E7E8EC9655660504104270CC6AA57B688847CCE64F6449AA8F4E4A2D + 4B9C678E75F576A18ED45158FE140919595D42880A0135DBEBEBF9F1C1830442 + B39FFD532E014F97A52613BBB66C21233E3E5E82D7C3A1601580ACA86A053CE7 + 181919FC5E753547ACD63BEEE34B010162B55AFE5C55C5370A0A90E0FB000276 + 9C6C6BE3D97DFBA65DC3BEEBC01B79B6A484278A8A00F8C866E3D586868977BA + FFEBFC0735750DE14B1817CD0000000049454E44AE426082} + end> + end + item + Name = 'alert-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000026E49444154388D8D934D4894 + 5114869F7BBF9FF966FCD471C61274B4D4691C1505CB1C15114C120AB21F5A45 + 8B7646615010B40FDAB48EC07451EB20C4FEDCE4D6221206179A0B13B3214D1C + FC19673E9DEFB608354BAD777539E77D1FCE3970057BE86E6B90DE58B00BC100 + 600237DF4CAD3CEF194AFCE5D5FE2C5CADCFE7C6C90261197238EFECD932ABAE + CEE74C4C7495E6E90F97D6B32AFE3DB33FE041E7616EB716D65B861CD683C12A + 6F63239A6D93999EB66426DD79AA3C67A4D0A725DF4DA7B63362EBD171D4C7D3 + 4BA1B0D0B4F739EDED7E331C46885F6DA51499F171D64647BF2AD76DBCF6626E + 61E44B6AF704F7DA0A3916F4F4F962B106ABA6663B0C2084402F2A42391B79D9 + F979CB94E2EDABA95500E49629946F6842CA335634BAD75D01B06AAA01BA4BF3 + 8DEDDA36A024570F088FC712A6B92F40E6DA08218A2B0A0CA1CBDF0035873C04 + BD7A58DAF6BE61002135A4DFAFDBA676BCB3DCDE01F436054070D908850E0400 + 782A2B41D073A725802E403B5F6573AB3958210D63C0EEE8300E5A01400B0470 + 2627EB83A61ADC74D5BC3674A5D43234F932A7B9F9C8FF4C20741D6959726366 + A63516F23D9396A13DF684C38D9EDADA7F86B76446227822917A4D8A7E1D6871 + D7D6488F8DA1F9FD48DB4678BD08D344E83A002A9B45390E2A9DC65D5D259B4C + E2A6520027F4ACAB1A48244E6F241231A04A41D9F286ACCDB10C4B57594091C9 + 8252EEA225D52C300B7C564A7D005E8B8057D254E2251C3029CD37F0D9B90CCE + 173CAA6E68BE7EF142374BC9247D7DFD14AB85589BFDE3E3CABAC3DCF226938B + 193E7D4BEFFC852DD9B64D341ACD9352F601E78045E0BEE3384FE2F138AEEBEE + F2FF04BBF8B998BCE474B90000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000033D49444154388D8DD44B689C + 5514C0F1FFB9F77ECF99CC4C273349E791B474E2678C89CD6342D362B4633585 + B8B08F8DB8A9D485DDA95BDD28082EB40815C18D6EC48554ED42A475E163D945 + 050543506AA4262D2438659266924E32339F8BD0D43AA99D037771EFB9F7C7E1 + C03DC27D221733FC706A2FAEA5CE006F0216F07E48F8F6E90B37F8EECFEA8EEF + F44E87BE25BCFE788AFDBBDDA22875C13F783062EFDBE7D617164A84E1CF9D9E + FEEDD2D555369B6D80435D0E5F3DDFC344DEEF41E45D934C3E142D9530A9149B + 8B8B345756927BE2F6C51303B1F5CB0B6B2C551BF7BC57FFDEE46386CF4EE6C8 + 7458CF213263D2E9697764643BEF04013A91984298C944CDC4A727F2E463E6FE + 159E9DEA66B0DB9B00BEF18B4537522A6192C9EDBC492671FAFB09D7D7238D72 + F9A467D4F97C87A97CFDFB6A6B85315BF14C210270CE0902CB1B1D45445A7A24 + 5AE34F4E6265320911DE79BA102566AB5670A0CB41441E1691A2373CDC02DD83 + 8AE06EDD39A6159181B4DD0A462C41441E11DB0E7522F1BF208049A711115B44 + 0A31F76EE7B6C1A0D301D8258EF3400C401C07940A81CC44DE6F058FF6450186 + 743CDE1E288249A7014AC7FB63385AEE8213798F918CAB80E326976B0B04B00B + 0580539DBEF64E8F6EB549F996F0DE541722F2A25856AF13046D834E10A07CBF + 0B78E5D50349F6C40DFAC367338C65BD1E44BEF4C7C73D3B9F6F1B14AD518EC3 + C6B56B878C92F36359EFA63ADA177511F9C2CA6677B943436D6377C20E02ECDE + 5E4F443E7FACDB8D2811F948777414A3478E204A3D58F86F9522440E1F46C7E3 + FB45E463034CA135B5D959742A858EC751D128A2771C44DB11369B34AB559ACB + CBD4CBE53BF7270D70A851A9BCBC76E5CA53C0A322E203886D87E2BA88318865 + 6D21F5FAD6AAD5086FD70442C230AC01B3C08FC007F2C613299EDC1BA12F69A3 + 058548AEDEA4F7FB45E7851B75FFCCB1E929546303803FFEBACE4FBFFC5A9DCE + DE7E29EB359604990FC3701ED89CAF6C7279618DEDDF6F6BA12766D8DD61C8A5 + 12FCED64B3AB0D3D3332321C1B2F16A9542A5CBCF42DD5D55BE77ABCCDD7C2A5 + AB2CD71A5C5FA933BF5CE7D6C6D6B46D1D2780D69AC1C1416CDB1E1391B3C001 + E026F04918866F95CBE5FADCDCDC8EBDFD0737FED379FD9563A8000000004945 + 4E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000043D4944415448899D964B6C54 + 5518C77FFF73EFDC7BA77766FA9C3E297DD002A950892D012196F0AAC122EACE + C480C485B030B8209A800B4CDCB121D1283E48247161A26C5C91B0C485914449 + 0951A984F228AF52028CA5D3F6CECC71515A5BE8F0F0BFFA7FF7DEF33DFEE73B + DFB9E20938DC57C72B8B13AEA48F8177059E85EFADB57BAF6472631B8F5E6422 + 6F8BAE378F735E9770E85D1422699FA4FDFEA24595DED2A54919B34BD2A78D29 + 9775CD258F4DD029F6625777395F6EADC3778D9174D46B6A2A4D6CDA64BDA626 + ECC404B9E1E1E780839B5B1385285FE0B7EBE34F5781111CEEABE5A397D29478 + 4E9FA4BF243599540A0049326188245FD2CF259EE9DEDF93E6B32D35E8692AD8 + B3AA821D2BCA003E30D2376E656565B8762D4147074848925B55854926C9DFBE + DD602727B703E79654F97FE62DFC7A353BC7DF9CA035A1C3C9775A88C7CC1BC0 + 8F7E5B9BC29E1E8B33BF92766242A3274E10DDB8316E2D6BC6A3427FCFB783DC + BC9F9F5FA2D79624095CF9C021B7BA5AE1BA75E038E801A6259A81EFDB446F2F + 260C03894341CCD0D79E2CBE072BEA02805EA031DED5858A643EC74110107476 + 02F408BB786543503C40E01A24AD96E310ABAFC75A6B01EC03CCE6B36DAFB111 + 40A055BE3BB76FDCD9C6825217A0C6C4E3D3D9CB5A6BA7E599CD67DB260CA71E + 889A8EB43F7F05614C2CAEF001AAE4CFFDE889705DCCD49AD6BAA4CBD24AEFD1 + 005BDA931821E005A7A2625E598A490458B7B616603360DEEA2C9B1BC0087677 + 9783F4A2A4865843C3BC9D339B3F6C7B6D6D48B4825E7E73798AC654ECBF00EF + AD2CA77DAAAC0FE5FB78CDCDCF2611E03537639229240E788EF4C9FA34029CEE + FA8083BDB53846AF1A9903F1AE2EDCFAFA399B598CCFB1256B8240D1A54B0BAC + B5D75ACABDDF47C672A87F770BE5F1D842C429379D4EA7B66D03638ACFDF27E0 + 9FE3C7150D0D65B076E564C19E37657137441C33BE9F4E6CD83073B89E750FA6 + 79D8D383098214D2B19851CA48FA42C67487EBD7E39496FEDFC467E024122436 + 6E448ED329E9880B6C95E7D9DCCD9B20E1545460E2712CCCC834DD920FF387ED + 42364BFECE1D72C3C3C8F3ACCD6637B8C0EB85F1F103D9D3A7D7489A1A24B118 + 260C31F138261E47B118C462C87D70F073396C2E878D220AE3E3D86C96C2E828 + 368A84B5586B23E014B04FE7DF6FC77384B5B64C5227B00C68019AEEE7D4742F + 32DDE5A14FE080F21300B28E6733639358EC9D945B3867C43070191804CE5A6B + FB815B004A7A86B50BE32CAB0EE8A8F66948BAA44397A4EFF2D3553FF1C3E5F8 + D0F39DCB936FEFD86EA73BF2DCC080BEFAFA08ED8968CFCE96ECE7EDC91CD9A8 + C0C8589EA14C8E3F6E8D333032C1C94B63F3DE7208284F96D0B6A4032BED35C6 + 1C5CD8D8487B7B1B77EFDEA3FFCC1945517456D8D563A399B10B7F0F10152C93 + F9477D151DF8D9C9889230C4F7FD5F808BF73299D60B838315D7AE5F1F29140A + DF596B775AC85CBC7C85CCFD2CC5FE5CFE057F3A8F93FC1A10AD000000004945 + 4E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000054D494441545885B5575B6C14 + 5518FECE99999DCBCE6C77DABDB6DB6E5B6BD8B45B608B2D18AC051B5A082008 + 6D30F860104D242131C60442139FD060D0E88351131FF48118D1840886101303 + 112989C4A8B43E006DCA36B4B0BDD165BBDDEE6D76C6875EB46C177769F9DE66 + E6FCFFF7FD73BE73CE7F081E033E9B0907022AEC120300486806CEDC98C2C5DB + B1827391420336948938B5B74CE459FA0180FD004C00CE1B06DE3ED93D3EF6D9 + EFE1272BE0C22B15F03B85337C4DCD6E69FD7A806591E8E941FCFAF5DE54466F + DCF065509B8867F2CE470B212F1129EA1CBC8FCAF26E734B0BA8D90CCAF3101B + 1BC19596AE3631747BBD932FA8A0BC04983982AE661BAE1EAC960821AFB22525 + 200CB3F09D1002D6660380D64FB7BBE9E1A662B07996C6FCDF802A2B876F3B3D + 68AF51F699587AC15459D92EF8FD602C96C5030941666AAA894BCCECD95821FD + F5BC57BC7B2918432C6D3C32FF233DE0303338BFBF022E853BC958ADEFC89B37 + 83B5DB738E370C03E96010B1EEEEB41E8F1FECBB9FFCE6A5D3C388A6F49C318F + FC035FEC2885DF211C611DF6772D3B776657FD70358480515598BC5E263538F8 + A2CA1ABFD9CCCCED9F07722FCF9C33D55C21A2A552AAA5027F5C696B03E5F337 + 1763B5426E6D6508255F75D659CC35C55CE1023AEB8A4008E9120201969ACD79 + 93CF8373BBC157579752425EDFE72F2A5CC0B31E912794EEE257AD2A987C1EBC + CF0700FB9E29150B17E054D83A4655A5427EFDC3609D4E104A1B3C162EA7D796 + 14A00A14007150497A6C7200202C0BC2F39C55A06A4102AC02030390C1E5364F + DE224C26F02C2929B7B0F90BA873F02080F771CCF73098E2620024B0B972E95C + 4B0A68AD3603C0FAB9ED7559E03C1E00D8B5A776E93D244B40114FB1AD469108 + A5ED73C1CB82A9BA1A84657735B845C7064FF66AC81270B8A91812470F705EAF + 4CC5DCCB275F509E07EFF3F1203872F4B9922CC245CFB576135E6B501550D225 + 0602CB269F87B8762D08C71D5AE716AB5EF62F9E8A0501024BF0C9561738867C + 24F87CAE9598FF05124982D8D0208090CFBB9AED2855FE5D110B1BC4C7ED2E34 + 7BCD1D8CC57242D9B265D179BF12601D0EA487869EE252F1D17A27FFC70F37A6 + A01B73020E35AA78639DEA272C774ED9B6CDC428CA8A9203B32725E77623D9D7 + F7429999B9A00A74E4D2E00C9816AF840FDB5C2594D28BF2A64D4ED30A383F17 + A82080161571A96070EB6A177FFAFE4C26C6BCD9A8628D4BFC5E0C049AC4FAFA + 27463E0F56554108B16AA1D05A5DC7A979136ADAC80892FDFDD06385F7F6F942 + 4F24901C1840FADE3D00982604602F0FCEA0B3D6D28950A8231D0A750068A692 + 646354158CA280CA32A82C830822A82880F03C08C781701C40E7F4EB3A0C4D83 + 914EC348A66024E2D01309E8B118F4E969E8D12832E13032D3D353308C6E18F8 + 2E6318A72F0563B33DA14B66B0FD69051B2B24AC71F2B099590F21F001A40A80 + 178027AD13FB509C692BB75B299349826849105D9BED292963E80C8FC84C0A26 + A4FBCCAC31046002C05D0077000401DC9C4E65067A4692C6B5E1199CBB1945F0 + 417AE9A654315154A91C3C160E650A8762892263B6E34AD872BBEBD851AF7D89 + C6D4300C1C7FFF04DCDAA86F0D37D2FF20AE61624643685AC3DD290D772269DC + 8B6A59714B9E91D1948EDED1247A47930BEFBC5E194EA7E5EC2F977F7DABB363 + 6F56CCF59E5E4C4E4EFE3DA691FEAFFF0CE5704136F2DE6D32990C6C36DBB5A1 + E1E11D93E1B0C3566283280A884422B8D27D1567CFFD18D1757DEFD8D8582812 + 89E42DA0A0BBA1D3E9447979B94C293D06A013B3FE9800F01380F7A2D168F0D6 + AD5BD0F5DCF78065090000599661B7DB21FDA75D4BA7D30887C3181F1F2F341D + FE011CE188F3BF71FA720000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000070A494441545885C5987D6CD5 + 5719C73FCFEFFCDEEEDBEFF6B6BDB7EFEFD0162854283048C7D0C290910CB738 + 7C05829BC368086631D3FD61B63F966DC6680C3159625C74892C24C6A9318B2F + A001711AB5DB100C0C6A97A5B4584A4B4BDB6B7B7BDF8E7F5CBA314B6FE98BE3 + 9BDC7F7EBF737ECFE73CF739CFF39C232C813AEA026CAF0FE098927BA0E1FCE0 + 14AF9C1B652AA317F56D59CC642570E481527637852C44BE00EC046CE02FC08B + EF8E246FECFB791F9747D37707F0D0C6084FB6178744E4B8E1BA1BEDFA7A508A + 544F0F99B1B13EADF5B6B35713DDBB8FF5DE1DC0BF3E5E4779C87A5185C35FF2 + 1E7C10C3EF0740A7D3C44F9C20D9DBFB77ADF5E6878E5DE6CCD5A905D930160A + 571D36290B9A0EB0CFBF61E37B7000629AF8DBDB11917B0459D350E82CD4CCFC + 014B8326DFFD7809270FD402DC272201152D9E314E791E62DB1AA1E5F9ED319E + DE1AC573E6EF8F79CD7860598093076AD8B32ABCCE52C61F0CC3F8AD5952A2C5 + 346F3B5E725EFDB16B1A2F7D715DA4E4C4FE1A3655BAF302BCE3187C746D01CF + 7C348A08DF108C67ADFA3AE56B6BC38C44669DA3B526D5D7C7646727E9A1A1EB + 5AEBBDE98C3E7EE8D7FDFCA6FB3F4B07D8511BE0479F28C350C611B1AC4381AD + 5B71EAEBEF6C6580CE66997CE30D26CF9E4DEB6CF6F38954F6678FFCB48F7F5E + 9B7BE3A8B906788EC1B13D95046C75582CF3E9D0AE5DD85555770C0720225815 + 1588691AE92B57769B86F1BB8D95BE7FBF726E94B9D2F89C31F8950D0514FAD4 + 32846F05DADBB14A4BE70577AB7CADAD38CB973B22BCBCACD0B61E59E5CD3927 + 2FA012F8744B0122F28C555EEED88D8D0B869B967FF3660CC7592122FB0E7CA4 + 6071801BCA7D14F9CC88C01EB7B5159145E5F59C41D7C5696E0638B832EA501A + C81F65790157C66C806DE238965551B168B869D9757508AC078A57C6F2A79DBC + 80614781D0AA8A8A1063C145678654713118862122AB0B7D8BF06071CEFDD15B + CBD852480C03715D0DC40A7DF9179EF76DC03200FCB3558AC5482C0BC0ABF4AC + BCE3F2023614DA003171E7579EEE44462804B06C53A52FFFB8D95EF82DA1B9D8 + 016836BCB9F3D57C65C66200F735153BD48467F7E2AC801D75011CD3A811A4EA + E6C79654767535C00641AA3FB33A3C7FC0CFB684011E364241549E8660A152D1 + 282A121184C7F7AE09CFDA8ADDF6695B99CBBD357E010EDACB972F4982FE5F89 + 086E4B0BC097C3AE0A1F6CBBBD1366002A816F6E8D02F22931CD2677E5CA2587 + 9B96D3D888F2BC08F0E4C1B6026AC233B3C50CC0C7D615D056EE064478C16D69 + 61A973E0AD12A5F0AD5F0FF084631A0DCF77CC8CF50FA4F1D5318723BBCA300D + E388F2BC6DC18E0E44CDD9912D4A2A12213D306066C7C757541758478727329C + 1D78BF4F7CCF7AD4AF38FAC94A8AFCE6C322F2EDE08E1DA8F0ECBB6BA9242298 + 25254C7575D593C90EDD53E5EF3CF14E9CEB9399F70195C04B0F55D012739A41 + 5EF3AF5FEF384BD05ADDA90CD7455C97F4E5CB1FB30C5EDB52ED1F78F5C238C9 + 8CCEC5E073DB626CAEF41780FCD2AEAD0DB96BD77E6870D3729A9BB11B1A7C88 + BC5A1BB10B7FB8BB1425A0762D0FF2D496622522BF300B0B378476EEFCBFC7DD + ED2422585555A47A7B237A727273A5671D4393319A8A6C44E46B86EBDE1FDCB1 + 63BA88DF15896511DAB9132310D822C8D7CB3D0BE3E6C14EEB6C96A9AE2E3223 + 2368BDB81BA9852A3336C6D4A54BE8540A840901CCFE780AADF98E9E9ABA31F9 + D65B871367CEAC129F4F9BD128AAB010150E63844218C1204620B0E8C6556B8D + 4E24C8C6E364C7C7C98C8E92191E263D3848767C5CB4D6FF02BE07FA07FDF174 + CE7DFBD784796C5D01B5111B11A903B6006DC02AA051A00C118508E238DAF0F9 + 109F0FB1EDDCCFB272713B1DBBD92C3A93C9792295243B9544271239B0440232 + 999B7F9B1E06BA80F3C09BC069ADF58591890C2F9FBDC1F7FF36FCC1837B43C4 + 6253959F353187C6229B6545369EA3002C11A902AA35C42E8E99ADE747CDA7B6 + B76FC4268DA427914C1AD1B97B402D0AAD2CB4E9F0E7CE7F48859B3ED6E4A5DF + 5430883008BA57430F9A78260BEF8C24E91E4E72A63F41E79549CE0D2498BEF7 + 9CB30BF05B42A56751E559447C8AB2B043AF5D5DDC9F30079EF8EA61AAAB673F + C40F0F0FF3EC732F48999B5ED56A0FBE3D3A1E676432C3702243FF789ABEB114 + 57E399BCF6E7ECE527529AAEEB49BAAE27732B12A1ADAD66C830F4EB7F3CFDA7 + 7BF7EDFDDCAC734F9E3A8DD6FAC29509E3EDE39D434C4C4CCC656E861694F082 + C1208EE35CE8BF7A757F3299540D0DF518B76C9E743ACDF113BFE7E4A9531960 + 6F2A957AB7B77761B7AC0B6AF47C3E1FCDCDCD28A5EE370CE3279EE745573437 + E1791E63E3E35CBC7889D1D1D111E051ADF5AFBABBBB191919F9F00021E7C586 + 86066CDB0E027B45640B500C5C075ED75A1FCD66B3633D3D3D0C0D0D2DD4CC22 + 6FF995A2A8A88870388CBAA53C66B359E2F138D7AE5D239D5EF80D3FC07F01B7 + D8182086C9EE420000000049454E44AE426082} + end> + end + item + Name = 'home' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000001CF49444154388DA5904D6B13 + 5118859F7B6724D38C494A682706AB85D6E2A2092E941215BB5444211BA10B71 + 25852A76559885E21F88482514D48D684134E00F0808A222166A88B6521117B1 + 62FDC0544B9A3493C6998C0B69D19A4E033EBB7BDF73CE7BEF1134615B778CCE + 0B3750C3D131A0E15496C617AF8FB2FA76EA1FADB2F1C29F48D2397A5353B6B7 + DF527E5A63D2758EA205FAF483C9AC5BABD8F5C2AB4D02842474CA243C74B14B + 286A56AB7C3BD6F36C82F0FC73568CBD71470B1CD7628359D5E82E59B38FA1E1 + FCB60188B6001D2369DA6283878007C1AF73915D2F2651EC1A008EEAE3E38133 + 2C47E3456068F5C3DC93C589119C1F9F51D41DBD44CCBBF87AF69D159031DE3D + 0CEDCCDF4736ECF5C7C9864368218F1042AF76EC39ADB41B253D919CAECFCF20 + BAD22F55A907C73585F3C6D46D37B4906FD6EB3ACBD138C523C3A26A33E93AF6 + 3929F5E03D9FE4E4D5FE3A5B9901825F5E73ADBF8E5F21211435235DDC2B87C3 + CE40AFEE6E695E63B7DFE544C44EB870597EBF73697AFFCA9B22205A051003F6 + FB52313D3C2BAB4F33C8A54F2D6F5F43D6CAD4661EA16E2648A552E2CFB3699A + 4DFF28BDB6589625CBE5B2A7C673582814C8E5725E12EF8056F8EF80BF4ADC58 + 5C2BB35F63B49BBE54864B360000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000029149444154388DAD925F4893 + 5118C69FF77CDBB77D73737D33E75A596D9F64C31B1B4B05EB465A5E24D64545 + 110585D0A83088F0AA5BA9E82A0C2382C02022B0A23F372A82C44C42226B854B + 9D41FE6F6BE834B3FD3B5D54D6989B5A3D77E73DCFFB3B0FEF7B0859945B730A + C6DAB32041751A401C9CDF8874DEC6F4BD46209958B24758AA481A1D4CC72FC1 + E03E211263D789E80211D500B08AB6D2766D9133F1D5D7051E5D48EF4D7B41B6 + 20BFFE26D4858E02226A25A0D2EC6FE39C8060713571A007C0FE5868742274CD + 83D8487FE6849AE272E49F6B81BA60B38B883A8544B4A4B0B705791FBCD00707 + A18D8C63CE52B28133D5614197FB3CA762EF683C3C8ED8E8FB7460CECE8358EB + 698220198E80F0409CFF6CB2799BA10F0D2D9AB5B353C89DF061AEC0614888BA + A3A412272567F52B1275F8E6EF0138870026C074AC11C6DA7A464CB80CA22BFA + 4F832A5B773334F3E1B419A9A273903FF662C1B85E8819CCB500CC9A22678746 + 7126177C5D20F3F93BD03A2AD600B84B40755EE019B7F81E72CAB0C5DFD36798 + 2CD943A12D6EE28017E007E2C19129A6DD5AEE00F042CDB07B9F30C4D7BD6E5D + 1E06003C09CBDB27FC906A804B022A01EA55E56FDCCE40749111F42737C59FEE + CA8BF2E549A9DA618AF333B658ABC81005D0C038789D594C96398D899758E21B + AD40B4CD987CA7E892651CA863D38FAE86AC03ED6316ED0F18AD520020AB4145 + 81B670F856C30C9B7DDC04BCE900FB9B6CBF221280B17E7CE9BE0F5536A3DD6E + 87A22829B5402080E1E1E18C3D59818AA2C0ED76CF00E8FB592A0560CC0664D9 + 803FD5178944AA82C160D51FE07F02C2EFF7C3EBF5AEC4BA32E06AF4DF81294B + 91240976BB7DF12CCB725A832CCB291E49923203AD562B793C9EAC095C2E17B9 + 5CAE8CF7DF018D03D27ED75B65CD0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000035E4944415448899D935D685B + 6518C77FCF39F95AD2A61F69B2A28DCE53D99C1FB3085B28535AB0EB85D875E0 + FC400487A04E10D422052F44512FEC95A8880A52C7C4156FA43713C1E2BA8D0D + 751F30628B1F65D576D6766B71EDBAA44DCEC9E3C5922EC9D2A6D91F0E3C1FEF + FBFE9FE7FF3C472803231822B4FF637C5B62083C07D8A81E4C4D8D31FBC94BD8 + 33E36BDE37D74ABAA35B89F41CC07BFB3D6E810F80F710E906EACC60E8477FAC + 2B939E18C1BE345939817FC7A334BCFC39664D382430083CE9BD3A8B2B9514C7 + E38F013BC5E3FB2E10EB4AA86393FAF3F47A098460F72BD43DFD1686DB73BFC0 + 0F22F240F5C5DFD874E253EAFF3AC9526D13E9AAB085F038621EF7DDBDF35F77 + A3C552FC2838F6EA0446A086D08B1F52D5F61422B2171814D8D8307684A63387 + 30EC653533B6D45E384BC67491ACB76A81670426DCB76E8E6FD8D6CED2E80932 + 89F91B09CC7094C86B07F06EDE6E88C8DBC04746C6F6369D1DA0E18F2145F57A + 25AA545DFC1DEFE225B9D2B8D5AD86B94744AA8D60F888BF754F26F5F708CEEC + E47502DF7DED447A0EE20ADD12149101E07977F2B2DC71F233AAA74754B20090 + 3C78E7A73438332A8B1BEF12C7ED6F159156717BBF0FC476277439416AFC1C52 + D5B18FBA27DE404CD79DC0B72272AF7FEEBCDEF6733FEEA5055455738FE7DBF9 + BEED0930B1631F57235B4455CFABEA63A0E712A70E23D12FC6106417C22111EA + A3B3BF527DBC5F8D4CE1B0CA41C564F9A167652CDC822A8BA02FA8F28D2122AF + 221C0682FB37D9ECF58CAB38E915C155B5A47D839FB1B5CB3BA9AF37A7310453 + C4F85A44DE35800D02FFB5D4641EE96E742AAABA141E0E67B4ADDE6913744261 + CAA5AAEF8BF0657BC899CE16942F73815390289D13556557C439F3CB65A365D1 + 66C1B57074407D1ED7F483DBBB731B52C0B29E21E7D98808DB828AEF58FFC285 + 7F6670CD7FF52669BF9F40CF6EA0A0C09B8629CAF24F835C191DC5A8E4629142 + EB822BDFD16B58B173F1BEBEBE158EFCF3BDBDBDA5366B758232331856D5E16C + B83DFB15CC20D7653E490141190CCFCDCDBD934C268946A39225288B8219144B + 947372663C1E6768680855A52897FF331610542251FE39B8368FB21255B44537 + 83756DD12A9BA26BE44A1388883437379792A4A4449D9D9D058F5996B5F616A9 + AA5A9685655914C74B75D0D1D141318A3BF81F0696B64904E0E26D0000000049 + 454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000044F494441545885ED966B4CDB + 6518C5CFBF170AB45D0BA5C86530C80A81205260B88D81026306490889A3B82D + 3037C52D9B89D14521591430BA986032BC44330D68B2CD2019996036E684719D + 0C106CC96869072D50ACA52BA145A0A5375E3F4D2103810EC317CEF7F39C5FDE + E7E4C94B879B12864440F2CE97483C741493634398333D746B0EE58E297A5F16 + 0ACBAED2BD38BC4F00CA615F983F5FF371914BD6726DC3B3E81B351C2C28C1CB + 255F0B3C58DE0D2AFDF411D3FC42B23F9FB74F9C7EB8D1C3D3DB3ADCDF0A806C + 3E0093E585C2B22B48CD7B238E46D19BDB14E3F1D77B95908D1BC0A4D377EF12 + F225E1B1C96D614FEF3728BA1AE1B02F6C1E806F6018CE56DE46446246BED345 + 1A6AEF29845DC37F20396227827C38681BD2C2F897C5272AC8EFB8FF4E915A9C + 9E271F96B6ADAB176B028812D270A6F2679A2028FC8269DE5659D52A658E4FCD + E0A5A42824090976FB78C04FE08F4ED504143A2333325090271008D9495985AD + 533A35991C55B80FF09CE44D14945EE6B3BC38756A83F94475AB0C4E17C1C9E7 + C510CCAA20ABFB88E8069A10218AA2E262E2D0AFD1A37B4487201FEEBA7BB122 + 0083C9C291F355C838F66E348D466BBEAB9AD87BAD5B017F1E1B45E962CC0DD4 + 1355D337208B2E9045270CCA5FB1C39381F4D44C4A6D30A35DA95D772F1E03E0 + 098371E6E22D44EFCDCA752D921B75BDCAC00EA516E2B0A770F45911D48D9544 + 37F0CB6383CC130AD8A646F142660E356F276857AEAF17CB00C29F3980B39FDE + A6842191A53356FB57DFB60FB08627A7912D16216D171BB21F4A895937B4EACA + 2C263DA61E74E3404A26E5E3EB87BBCAB57BF10F4072EE291C2FFF9EEBC5E1D7 + 8C19674E57B74A298BDD81C2D45884123DA4B565C4363BB56AF823391666A11F + 6C4554640C151B1D8BFE513D7AFEA31774069385C3E7BE40D6C9F745343AA3A9 + 6744975AD32507CF9B85D733E2E11A6981FCE6E764D1695F33FC9188CB09C350 + 27F86C169596721023932674ACD20B7A7EF125ECCF792DCB4570ABBEEF41488B + 7C0C51C17E7825251A13772E91F1DE7A6CE4B22D95493B08C7B416873273A859 + 9B0B1DCA8965BD088DDA23A7B1797E00A853D2B149FE6FEA3F911113867C7110 + EED7BE47F4F236B78297CA38DC8BDFAF1693EC881DC84988C0E084110ADD9437 + 80173DBC39A0625373F1EA853A21A128D9E843734042B0277EBA787AD13E6F7E + E2F0A562B0BC2129A9A2C98D803F8F3D4C40F65CF9A0608E76BFB301F76E541B + 2990133101ECEA24AE966C763800386D16C4737444E44BFF1020C77A6E7E3727 + 6DAE0503007EFCEC6DF806843665268637D128145114E5DED2D71045810A7069 + CADBEF0CE07AE55B00001A00386C565C3A970DC360CBFF91BB4C9649152E9717 + C261B3FC0BB095DA0660B863AAA8A858F12F595C5CBCE1F2BA05000056AB95A6 + D1680000A1A1A1E072B98BEECC717B051A8D061289041289047D7D7DEE8ED9FA + 0E6C036C036C39C08A7760B543B396DCF12D03D06AB590CBE5EB7A15B55AFDC4 + 3E00F81B8380F845BE7D89F90000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000061D494441545885ED986B5054 + E71D879FF71C585C5845AE7295007211C1EB924A1AF0B2626BC60B1926A19691 + 66681227CD4C67E224CE449B4026B5994CDB4C9396D4CE4833D2A66A1B4CAA63 + 4D4C4721E2A510054470895C45EEBB2C0B2CCB2EBB7BFAC168D318E5B2E8F8C1 + 67E67C39EF39BFF3CC797FE7FFE1C8CC101109CB78E2F9374949DF8275641053 + 4FFB8CE48A99085991B995A75E7E1F95B766B300BBD3E1F8F493DFEFA0E2F01F + DDCE96DDB959926536BEF0169B5FFCB5F05079BD2E10EF83D82A49F27852DA86 + 0AFF9028F4959FE1723AA7FD8C69BF416F5F7FB615FC9504EDBAD94248FB6D0E + E79643E71A9085E0A9950B5179C8A5A0E477E82F8C14EFCAC6DCDF79FF0443A2 + 93C8FF55298111B10B04D2C786616B52C9E94BF40F8D0230CFD7876DE9290468 + D4F5A03C3964EC692E29CCA5B9E68B293F6BCA5BBC78F5933CF7F611E60484FC + 40207DDAD86D8CFCA0AC9621AB0D6D4C28C1737C68EE3571B1B587503F4D70E0 + 6CEF6D5EDE9A4B2BD6E7368D0E0F70EDCA97F7465048323FCC7F9DEC97DEC343 + E5B51344715943BBFA70A51E97A2B071791CEB93A3581419C42C9527FA2E03B5 + 6DBD4892342B3A68EEB47B39A92D56A97DC82BFC90A4B427BC8590F68D3B5D39 + FF38DF405D473FDE2A4F7EFCF822E66B246A3F7E5B1192C4E2AC9DE2DA9093BF + 9DB9CCA8DD417244D0B47B39E11B0C9E1FCFCFDEFD9CE894C7A284904E982C63 + BA7DA7AA69E91B24C4D787E774CB986DEFE7C281D79491FE36C6CC7DF4EACF10 + 9B942AB40B1368E91BA4A56F902B9D06E242FD93BC559E9B7D03434F2C5FF723 + 5387FEC284F3F2AE8249691BD8FECE717C03C3D708214E34F79AA28B4FD560B2 + D8488E08E227AB166369ADA4E6A33DCAB875E8D67D0E9B85EEBA93F80747888C + 4757621CB1D2D23738AD5EDE513033EF557276EEC55335EBE74288928AC60ECD + DFCF3730EE74919912CDE61571B4557CA87CF5EF7D28AEDBFBA4B89CF4359E03 + A78D8CF47542E5E14163B771CABDBCAD832AB50F5B5F2D66E99A6C2F107B1D4E + 57DEE12A3DD56DBD7879C83C9D96447CA037978FFC5631344FEE8BF47F64298B + B35E11AD83760E9CADC73A855EFE9F6040780CF97B4A098B490E478852F3A82D + F52FA7EBE8340D13A05193979182C661A6A6F497CAA8716A83573D771E4BB277 + 0BBB3A9892D375F49A2D939A97B7B6386EC55A5E78E738FEA151DF4788CFDBFA + CDF1C5A7AA318E585910E2C74F572FC5D9D340F5A142C5366C9C921C8063CC42 + F7E593048444898CD447310C8FD23A895ECA00AB735E2277D79F51A935CF8338 + 78BEA973CE81B3F5D81C4E1E4F88E4E9950BE9BAF04FEAFFF59EE272D8A72C77 + 13C5E5A44F7F06E172B02A5D273C6499AFBA8DD4B6DFB997F2FA677EC1C6ED7B + 3C852C17395D4AC1275F36CA27EBDB912589ECEF25921E1742C3B177956B5547 + A62DF66D06AF5F61A8FB2AA969EBC4FC7901E8BB8C34761BE91DB488C4B0009D + 2C49C9E1714B8E07452CB0CBA91BF288885FBA1BC4CB1F94D572B9A39F396A15 + F96B96F08846E1E2A10265A0B566C6E46E623575D3DB7896F8E4956279621C4D + 3D03B4F69BB96630A38D095B040C5BCC860A39326139314B326A8410394E976B + AEC536CEB36B97E1696EE7E281D75C5653F78CCBDDC431364277DD2925283C5A + A46B53E91F1AE5B1F8080234EA6A05E559FD7F3E730AD52C1F76EC3B4F705462 + 9A4094BB14459EAF1EA2BCE40D576B4BF33D93FB26313131AC7F66B768B606A2 + 28581414ADE17AD3D5DFE46B91EC63164A0A73713AC6CF815230D7D3F6E2229F + 5E048AE0C618BA2F47AC7A40047A8C6C0165BBCBE1B85A52988BDD6A4102E86A + BAC4B13FED42515C6F457A99F602E27E7343D2706CA0ABE5E091A257B8DE7811 + E0862040D9C1DFB123C30B61D4DFBBBD9C005F4F3B6FE624F0C5477FB8754EBA + CBF50F040F05DDE58117F4703760D3A64D8485857DE75A575717478F1E752BDF + 6DC1B0B030626363CB81F26F2DADFAFA700BB705BFA6BCB2B2F28DAAAA2A0012 + 1313D1E974053C408254555551545404405656163A9D6E46721FF88FE4A1A0BB + 3C1474978782EE72C739A8D56A898D8D9D30C0CFCFEFAE6B9999996E65DC49B0 + 4CABD54E18FC0DDABEEB9CBFBF7FF96404EFC66D82B5B5B5747676AE9D6A5067 + E7FF7E85180C062A2B2BF703FBDDB203FE0BE373A895251012DB000000004945 + 4E44AE426082} + end> + end + item + Name = 'button-info' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000025449444154388D9593DF4B53 + 6118C73FEF39CEB33CCB76DCCC8919D272600A7A6181C4E8B28B7593A80CBBEC + CEFB7EFE0F41745FD285B2BC109340C88B402F1666E02A10968B1115A83B3977 + 769C9B9EF376E1307F44E8E7F279BFDFEFFB3CEF0F41153D3A887FE0A1AAFACE + C541DC017A851086947203580439E6964B89CDA9A78E353B0AD2054000F8871E + 517FF36E0444C297FBDA1DC8CCA39B19D4B28DA3E9D8813066384A31D89E0219 + B793AFD3E6F37B205D543D3A8431703F22A49CBFB0F4EA52F3A749BCD62A8A53 + 41008A53C16BADE2FFBE40EDF666C80A75C63DAD1DD3D271CC727A01C53FF040 + 05122D4B13C1866C72AF25A010EAE473FF33510875EEB7DA904DD2B234110412 + F5B74654D5DF84A2FAFC715F6EA5DBC8263988565CE3FCF28CD48A6B87EA4636 + 892FB7D2AD78B478DDF57E1460389099DBDFF96FC03A4DCB3368C5F543750104 + 327300C3DEC83514A05737331CE5E80807A9EA7B559F818210865AB18F89FE87 + 5AB6410803010A52E69D5AFD54018EA6839479000558B403E1530554F58B6EC9 + 4641326E86A3C8139A256086A300E3DBE90F286E652B510CB6A736DAFA4E14B0 + D1D64731D89E92AE93B0DF4FA1CA9D8A7BA62BFACE0A5D897BB60B75DEFC0F04 + C7AF5156CD3F7B86720811B3DEBE582F2DBC41AD7C4B51D378D1F4B4764C179A + BBA25B8D9743CA6E999A8A8D707670341F565307BF7A06C9856FA4102256FA32 + 97FEFDF231B84EF5FD0885FAD808F5B11155A9D5E2C03F7E2363D27512D6ECA8 + 939F7C02BB953DEBC1F9D48666F4BEDB6891ABA8678DEAB2C4DDB228AF7CC44E + 4EB1BB9A3D74267F00893CFA04AD2F828B0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000033C49444154388DA5945D689B + 6514C77FE779F3F1E68324ADEDB6A6369B8E2CCD64AD05A545519975609D3086 + 3A6F9C0E6F440603D70B7B29F5CE41AFBC9874174318A252149415419432B0AD + 3846694522B636D01A9B364D93254DDF246F1E2F52CB4ADA8B6DFFCBE79CF37B + CE73CEC35FF85FCA2030F01E81572F224E77A7885C00FA11A28278B5D659600E + B8A9B5BE5EDBCC67726357284C7CC1BD1200717B69BD348AD9D91B041941E41D + EFFAA204527398F914AA6A5175F9283545C8B53F49D9DB5C0486418F147FFDBE + 96191D849ABD0D540607063FC7ECEC3B0CFC6016D2D1F09D2FF1AFFDC55ED222 + 6423BDA4BACE623BCCEF80378B93DF5A996B83001881D3EFE37FEE5C1098F0AF + FE197DECD6A798C5D51DC096FF005B8136C4AE60D86504F0E49608FE33C3DD70 + 57CC769A515747E758259DA4B29440054E5F0418310B2BD1C393D7306C6B5747 + ABB153FCFDFC25291C8CEF3A77175639F2CB5554AD720E381F7A63089481524E + 774C84B7C377BE6A8001F8320B8492D3DA555C6B8899F914AD891F01868D60AB + C3EC3E8942E482673DA9F69B59F3E2241DB76FE0CB2CEC196F999F40D5AA1111 + 79C973FC5914D01F48CDED990C906B3BC14A7C8052B07DCFB85129E15B9B07E8 + 771E3A8A028E99F9D4BEC07CB88B747C40B6F60102B8EBF5510C03858857551B + 67773F52B605820F40A175B6EAF23D14D0AED767EB40982B35753C14B0148A80 + 6656DB360AB8996BEF418B3C10CCF2B5506A8A08305E594EA0B4D6D7CBDEE662 + 36D2FB40C074FC65344C69AD7F2BCDFC8CAA6DE633C070AAEB2C96BFF5BE601B + ED3D6C743C6D03972BE92456621A436FE6F1749F9CD2CAD97337DC15F3A71338 + ACC24E513035CBC13FC6F1E4961B604B4FBD8516F5A1467FBD3EFA01D595458C + 72720EC7A1C7B5EBD1D837B6D38C668FF43EA145E1C92DA36AD586AE2C5F0BA9 + EED7481F7FC5D6A286D07A243FFE19C56D5FAC6F42193CF2EE2778FBCE2022E7 + 818F55ADDAE15B9BC79D4FA16C0B7BDB0F4BA1886898022E6BCD547EFC2AB9B1 + 2B3B17EE5AADB7EF0CA1D7873042AD0E113905BC081C43C44BDDB167A93BF6ED + 4A3AC9C68D8FD8FAFDD6AE1734FE15870BCF891770C79FC1D576140C633B4DA3 + CB16957F1728CDFC849598DE71E97BF51F0D26438E26459ACA0000000049454E + 44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000043E494441544889A5965B6C54 + 7510C67F73CED9D36D77CBF6926E61DB42699B1614C160C14B08C16A8324D604 + 8517623406C1C4F8A051086AC2934F121313638212832462505430D517120151 + 20D060B953D356948BB574B7BB6DB7BBDBEE9E333EB45B4B6937A8DFD397CCE4 + 9B996F26FFFC854910AF8FC0DAD7F1AFDA809856BE883C05B4008D2252A96083 + 46513A80A38AEE43B9E20C8689ED7B87C4E9EF01E536CD2CB1427594BDB2134F + B0DA446423B05D2064A506B42072153BD18FB8691CDB4F2A5041B2A84A5CC374 + 8056D02DAA74274E7D4B64F79B9019BDBD8015AAA3FC8DCF300365C5C05E60B5 + 3FDC49B0E310BE70A7E2BA4C45C63B4BA2D58FD057DF846379E3C08B8AEE4F9D + 3B4CDF872F839301C014AF9FF2AD7BB14A2B8A81C3869B5E5171763F73CE7F43 + 5E2202AAC83880096E3AA31484BBB4F85A9BA48AE7DAA3BE92A705F9D3337B7E + BB78FDA42E1E1B2B50B47E1B05F7AD3281AF0C37BD62DEC95D1AB8D1AE59C1AC + E8ADFA6686CB1B44DC0C7632363189E98C48E0C61952812A19292C5B03F2935D + B3E48FD4A5E338D11E8CC2551B003602AB43E7BE567F6F8702E838B2BCAFA199 + DE054F9028997F474C9CB456B57DAADEC15E0BF8040C6F60ED6B001898563EB0 + DD1FEEA4F8F7934CB522CB0B22BFE10F77E149C6A6B5CC48A7089DFD12811A11 + DDEC6D780833588D25222D02A160C7219DF0641ACC3FB173ACDB49D64D852FDC + 4541A45B874B6B3761C807F9F737A901B458A901F5853B75EAE8B9F8743154B5 + E8FA19807B046AED8A7A2CA0B12072155C77C29EC99D66F9A5967771AC3CE65C + 384859D71166CAF385BBB303351A85255D06229576A23F8739FF0E93B42A012C + C0163733D151363A0D971CB17F261AD312041BC0008D39B60FB8F37226F3C95D + E6CACBD8BE6C6E6CAC80D2910A84FEA3217762426BEC41C4008E268BE64AC63B + 2BD795DE358666DF0B9040B5CDE9EFC150D52F5CC374A2D50FE73CCDC92233E5 + 39969758D532805685A1915F4F61009781D6BEFAC7C8E417FDAF1DDC5AB09A4C + 9ECF55D51D6E3A45F2C2310C67300CB0C5B1BCF1EBCB9EC335AC19C7CFE5E1D0 + 9C4512AE7B5450FD18684F9C3880A6E248C1F22729DDFC3E22B21EE1F3593D97 + 8CAAB63D6AA45377E57956FCDAF217704D4F1B689333144DF4BCDD8C3B1CC34C + DFECC4535E8DA7A2E1B2203D23FEE09AA1D062D33BF497D8C9E8B47665E17AF2 + A577518BF42C7E46D430DB506D51D581C8AE57495FBF028009903C7F84BCAA85 + 78CA6B7E41F83993E75F199BF760493C588F9A1E319C3486338A00993CBF244A + 6B88D4AEE4E6031B88071B5CE023549F55D581FE3D6F9138FDDD34B69A1645EB + B651F8F8F320E2157809914DC0C2191692406955D51D40BB1B8FD2BF7B1BC973 + 3FE4DE9B5DBB94C0BAAD78EB962286290A75028D08952036AA51A043E134685C + 4793C48F1F64F0C07BB8C3B1A972331F8615ACC6BBA409BBB21EA3B004194FD5 + F16F49E6D63546BADB495DFC114DC66792E16FE31334F4F92501190000000049 + 454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000004ED494441545885CD975D4C14 + 5718869F33FB37C0C2B20556DCED02FEA00BDA20950445D31AA94D4DAAA9C4A4 + 69826D8C6952D2C4CB2626AD69D0A48917BD68AA5CD8C648304D8C0969D49856 + A5D2126D2D8AD60A25582D2E0BF2BB2C8BCBB0ECCCE9C502FE5465A195F4BD3B + 73CECCFB7C73724EBE5790A094B40CD48232ACB92B31677A116633200089340C + 62FD7E26BADAD15A9BD083F712FD2C62A6056AD146D25EDB89CD57EA118A691B + F02AB01221DC0292254490B21BF81D6804EAC73B9A03E1863A22BF9E0669CC0D + C0ECCE27E3DDFDD8F24B8A814F106C51433D4A6ADF1FA8A100964810458F6298 + AC4C243BD11C1EC22E1F9A63A181E424B02FEA6F6B19AAFD98E8ED6BB3034829 + ABC0B9639FAA58D503025995EEBFA264763490140ACCF4C318737818C8DFC8B0 + 77B5211135D2D03F1A3E71400B7FF7556200A9AFEFC2F9F61E378853B6D1BE22 + 6F731DC9C1CE198D1F57C4998BBFA49271BBEB3A52BE39F2FDD7DDC3C73FFBC7 + 3AD3C383E4B20A327654BB41FC94D6DBEA5BD474085B6470D6E600162D84B3F3 + 32E3E99EEC71BBABC2B6B4F884118B86A31DCD4F0630BBF3C9DA7D581526F3F9 + B4DE565FEEA5C328466C4EE65352A48EA3AB05CD99933E6E7795ABBE3547B5F6 + 5F62FAE083AD9C06C8FCB0064B56CEE7B6D1BE2D8B9A0ECE68DE5BB0993BAFEC + 1648897DE0D653D70924A9DD3718F1ACCAD66DA9E9B6A52F9F196DFC66FA7428 + 103F6A6A7E49B14056799BEB30E9D17F55F9E332E951BCCD75086495257B7171 + CAFAED0FE6009C95D558B2BC079DFE2B0599B77F4CE8A3F6815B2C683BF3CCEA + 1F96450B316ECF129AC3ED3267E51E1FFDA10E004549CB40F595BA81AD991D0D + B3AC6D76CAEA680021B65ADC4BDD961797C701545F1942316D53477A9444CEF9 + 947A0B3673A3E20BD1EB7B23E177924201D450B722609B5AB83E0E60CD5B09B0 + C1DED73E9B62E6ACD4B8CF86495F1473A617604552A86B5E00D4501708B1C29C + 95130710663308DC9648705E002C912048DCC2648E03C46F6391ACE813F302A0 + E85110244F8F410272CC3059E605C03059013986947100691820094C2439E705 + 6022C90992809CBA0963FD7E809B5ABA675E00267D6E4EFAA24C74B50334865D + BE790198F4699CF445D1DA2E02D46B8E85C6589AFBB99A8F39DCF18E09EAB5D6 + A638803ED4CDF8ADAB0124A70696953F578081FC72909C8A0D7605A2777E8B03 + 00841B6A01AA87BDAB8D8833F7B998479CB90C7B571B4075F85CEDF473052072 + F934517F5B8B44D4F84B2AD14DD6FFD45C3759F19754221135B1A19E96D10BC7 + A6E7A67B42EBE255B8F61C5715C57431ADB7B528F7D261C40C2D75229242A173 + EDFB8C2C28BC2EA52CEBFFF2034DBB766E7A7EBA23D283F790D1B1985AB8FE64 + D4EEAAD09C39E9A9DD3750A43E6773DD64E5EE9A5D8C2C28FC4B223785CF1E09 + 8E9E3FFAC89A479AD2E89F5751D494B07549F189A8DD551EF6ACCA4E0ADEC5A2 + 85666D1E71E6D2B9AE8AFB2FE45D97526E8AFCFC6D77B06E2FF19BF7290000DA + CD26A43E11569797D6EAB65447306F4D49D49E25ACF707B18C8767341E7378B8 + F7D25BF414551831ABFD90847746CE1E0906EBF63E31253D351959979592F1DE + 7E2CD98BE3C908B1451DE99E3919A5B90D9027817DB1A19E96A1639FF2F09E27 + 0C0080C94CCABAEDA46EDA89D5BDC40322816C28EB27FAFD81D1863A462F1C43 + 46B5675ACC184EA764F116A216ACC59AF7783A0669E80FD271DBC56766C1FF9D + FE06ECC805DE6154382E0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000006F6494441545885DD987B6C95 + 7719C73FCF7BDE73E9B9F5026D691DF442B9AD1CB28E0E9932C6D4068C323A99 + 7161C311BC2CF12E89CCE81F2626BA65FCA1A87F6CD9E6B2A8A8204E16223089 + 5191D2294D5186B55D2914E82CE71C7A7A7AEED7C73F4E5B28D7B6024DFCFEF5 + 7BDFF777F9E4F73ECFEFF93D8F301D19166CB53E6C353ECCCA1A0CA717000174 + B44B3E3244C6DF4FBAEF0499F35DD35A666CCE49CBD1F810AE075B296A6AC170 + B8CA80878165400342098803348612007A800EA02D17194A263AFF40F4C86ED2 + 7D276E3FA063E943946CDC8E75DE12BB209B80A711592560A079ACF12135D371 + 2497216FDAC8DABD641D5E4104451328FB819FAAEAA154F7DB0CEFDD3169D09B + 021AEE52CA9EFE3E454D2D86883C037C5B44AAED23835A7CA103B7BF9BA2E10B + 18F9EC356373A683F8AC3A2295F7327CCFFDE41C1E51D54ED06755391CFDD32E + 86F73C8FA6E2D303B4D63452FEA59730CBAA1600BF10916657A0472BBA0EE20A + F64EC936540C86E736E35FBC96B4BB1C55DDA5AA5FC80CF444023F79865CE0FC + D400ED0DCB29FFFA6B1876E7A388FCCC4CC7DCD52776533C70626A467B95F286 + 85C0C216FC8BD7A262F4A2BA3E3712E8B9F8C2936407FB260768AD69A472FB2F + 311CAE4F8BC82B4543672D35EDAF624D86FF07B4898A95D5716EE567C8D83D41 + 606D2EEC3F31F8BD8DE42EBD774D5FCB950F86BB948AEDBB303DA58F8A183F77 + 5FECB2D4B5BD8899B9B99D4C55B6C430DEF7FE49A46A9933672D6A35ECCE37EC + 8B57866247F7423E7763C0B2CFFD007BFD7D0B0539E00CF53BEADA5EC4C86526 + B568BCB48694BB9CBC6162A663B7EC6F66E2782E9E223C77B93B6FDAD6588A67 + BF6ED89DD9E4A923D7077434AEA6E4B16D8688FCDE4CC76AEB8FFC784A3B77FA + E1AF7169C1239237ED14FFE7E4A4C698E9388EF000E1790FCC0171DA6A7D6FC5 + 3B0E918F0C8DF731C61A258F7F0311F9BC8834579FD87D5B6DEE66F2F8FF4D59 + DF5F15912F8BC5F4957C62DB84EF16007BE36ABCEB3E6B1764AF3BF8AE7BCE3B + 6F4ED95B9D436729397F1CCFC5AE49FDE22BE51A3A43A8EE0346DE62AD34ABEA + 77C7FFB69F7C34048CEEA0EBC10D08B24944AA2BBA0E4EEB287186FA71077B71 + 44FD531E6BC9249875FA2F88D08ACA7CE7CA0DE3DF0C0C0BCEA61680CDF69141 + 75057BA781577092E8EC0692EE8A698D2F3B7314544584A75CCD1FBD0C68ABF5 + 210E579908AB8B2F744CFB203EB7620B67567F45028B5AA635DE9A1CC115E805 + 6835ABE66378678F02D62C45603588E1F6774F13EFF6C8EDEF46447C0265B65A + 5F01D0ACAC055886E6291ABE30937C3843FD50F00B9FB5C085317AD96CB0C687 + F47AB792BB295B34506888CC378A0A97E0C239289498E9DB1BCEA623CBE5E3A9 + 74CC19460F6A71C82443DA9D94911F67708CBF0340359EB7D8660069A2F2167B + A1A11A430BD9CD58A80B641DDE99A1BA42598767AC191C4BBE8CD1C0DC937578 + 25673AAE3BF06E29E5A91C6BF68C87BA8CBF1FA00311E2B3EA6608ADA058591D + AA9A5238992D70618C6657C7141291CA25330A18ADBC17A01D34913ADD098091 + 39DF453E3E9240757FF89EFB51316E3AC99D52D25B45B2A45A803DE9B3EFA089 + 480110207EFC00C06B59875786E72E9F11C060C323A81253F45789CEB7C6DF1B + 00D1A37B51F4A0AA76FA17AF256F586E38D19D50CA5D41685E33C0CBE47243B1 + 63BF9B0898EEED20D5FD36C0B369770581851FB96B700A0CDCF749542C21E0B9 + 58FBBE09D9DDB8C10DFF66078A1E56D55DFEC5EB8895DD1D8F0E2EF810B18A45 + 027C339F4906C2FB764EF83EE1FA57B2F9BB78D63CE915F8BB351569A8FFF30F + B1C782770C6EA4CA47FFFBB7A262EC51D52786F7EE2072E0A5097D26B86C78F7 + F3A42F748FA8EAFA8CDD133CB3EA8BA4DCE5770CEEDC8A2DA818EDAABA35D9D5 + 46E4D02BD7F49BE80DB90CC9534770ADF8D825C3E13A9CB316B586E72E773BC2 + 03B76D2795C26F1D687A02352CEDC0C7B3837D91C0CEAD682A710B4040E36112 + FFF82345CBD70D8AC3F9865A6C6BC2F39AE764ED1E5C4367AE5BC99AAC52EE0A + CEADD842A87E9528B247551FCF0CF645FC2F6C9A900BDF1410201F0D11EF3880 + 7DD1CA90C55BFE3A22CE44E9BC070AA9A10D7BD48F259B9A3458C25BCDC5C6F5 + 0C347D8AB46B7608F8AA2ADF4A76B565823BB7DE100E6E55C0346D946CDC8EE7 + C39B118BE903BE2322AD685E5C817771FB7B7086FAB1450358D2318C7C86BCC5 + 4ED6E125E5A92036AB9E68E51292C5EF13558D012F833E974FA702E1377F54B0 + B9AB6A3153031C95B57A01C58F6DA3A8A905111A409E023688888FAB1CED4A29 + A4503D06EC017EADB9EC50AC7D1FE17D3BC95D1A98CCD253CB32CD39F5B83EB8 + 1167530B66D57C0466014BB95CA32E028DA20429D4A84F2A2432E7FE45FCF801 + 626DBF25171A9CCA92D3AF471ADED9D86A7D9815852ABFC8D8748A6AC18EB3FE + 7E52A73BC703FFFFA5FE0B421BCF7FB59D72060000000049454E44AE426082} + end> + end + item + Name = 'application' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000009B49444154388D634CE9DCC8 + 4009609C70E4EF3F4A0C6061606060A858BEEF3F3E45E9A6BC0C334E7FFE9F61 + CACB884C77463A313151623B030335BCE0267493A1ACAC0CEE85AEAE2EC6D2D2 + D27F8C8C8C8C84347775753152EC05165C129A9A9A0C9A9A9A585D71EDDAB5FF + 376EDCC06FC0F5EBD719AE5FBF8E3776465D000194A7C46BD7AE614B89FF1918 + 180826240606060696AB57AF52E40A0003D84FB8503834360000000049454E44 + AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000014549444154388DC594B14AC3 + 4018C7FFD75E4A20385CB738B68FD034B3387411FB00BE40DEC117A8A3AB8B8B + 6FD04E599C1C24A18B4A7190163A9856E94590A4E1203D074B40697A0906FC6F + F7FF7FF7E3BBEF832367E7D7A852E4F22EBDAD1248011C8DA7810CA3E44F2066 + E8E8B44C4201603C0B307DFB505E1AF4181E16028F4B212F7A4D7272B394831E + 234F0B81FB99864ECB042DD3C5F039C62ADE6015A7B8F23F0100A3AD879A06E0 + 7B869BD2EFDB236A1DCC311C8E6410BC66A6E338E4B7A792691EA2DF3F25B4A9 + AD91BCBF209C4FB37097A712A3319ADA5A3D43C618EAF57A6E9EA629C230CCCE + 4AA06DDB300C83E4E5511449D7758B03B7C552555718D8ED76A1EB7A6E9E2409 + 7CDF2F0EE49CA3D168E4E64288721D72CE954B2905FCF7A5D48A1616150500CB + B2D06EB77F04BBBC7D628C0100C86432A9F683F53CEFB84AE017D0EB871FD1BD + A4250000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000018D494441544889D5553D4F02 + 41107D235BE811E82CA4C1DC5940D4C2DF60A053E3EFF03F68AC6D6C68FC0F84 + 444B2C69345811129A3D4301CD5E0B09053E8B3B2EC7C9C712A5F0556FE7DE66 + 66DECC65E5EAE601DB843CB6A67700401222025B6EA3230945F2367961136EA3 + 532222CDCE275F3B3E252A81E44A7E90CBA090CBA03D98B09057B288574E5D39 + 3F39C4CE468646B82C3978BADE1702BC58C0935A459200676DC53DAEE2CFBDB1 + B407130A202FBD313F06132479A404100EF9CBC69634B7D191A4F2F60268EDD3 + D71A22615A12A8562BD05AD3D7FE5C7CC6D3E734F73C8F9EEB42B9BB01F5F00D + 7EAB39B71EEEE519F4F0FD47DC16474E55BCE37CB84522420058D0EEB2F85A8B + 661A65538DE33828168B0020A94F92E6FD7E1FA3D1280E2A86882B4A56974C50 + 2A956C6A8131663E818D454110A0D168585B94C4F62DB24D502E97C5A603630C + 379E813186F57A7D764EAF2D97F03081CD0CB2D9AC4416AD4564D1E66BFABF2D + FACD9F1CBF07C915B6E1D677BADDEE34DDD65F4289C83DB0BD475F6AB5DA361B + C037319EBE3BF99AA5DD0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000012C494441545885ED573D4FC3 + 30107DE758820AB1B05674AFD405862E4CE9D0892999D8D83B2742EA1F40DEFD + 1B989C9FC0CC029D2C8144964037107B10095340A4442DC1AAF9F0DBEE64FB9E + EF3D5967E0BF83C6C753F4FA432BC51FEE6FC17BFD21060787850D0277D7978C + 57C1C9D979B9CEE2A747230200BE6CE1AAB89A740900F6E4BC0080D9A4CB9A62 + 02A8DAC74C11680B631DD897F31200AADB2D8BDF0874D83380774DD6898E9783 + EF6E3C61BC7383388E1B4D2884A0288A0A223246520841179B8F605B5E6EEACC + 2F639BE7BFD4844110B4924229B520632B024992B47AB43EF39093C049E02470 + 123809AC13303211D53DA1947A0180300CBD5A7EC1037FA303755312116BC8FF + 3C13929412BEEFAFF2332A519B68BF0BAD35E35996416B6DA513699ADA28FB11 + AF01296BB678243A8C0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000265494441545885ED97BD6ED3 + 5014C7FFA7F8B64A537463530F042952928106B54E2517161409459990028FC0 + C4C4A330F00CBC01523B7628EA48AD2AA64306A4A248C91224E2B40E149398C5 + 414DEB8FB4B78E43C56F717C3FCEFD45E75CFB1AF88F1894E6F7B0945A49DAC3 + 17E7D74F482FDFBCC593E7AFCA0032490B5DA0F7E570AF217937EF003C4B50C6 + 8F3D00D5B120763F1FBBBB47C7C9E99CA3B69E476D230F009022C65E9BFADA32 + EA6BCB0080D71FBEB95E1BBD88682380CEC7894D307BF70EB61E2C8D1773AFD2 + 3613C1CEC91007ED33F73A6D3311DC6E0EB0DD1C0000C669DB690EB03345DB84 + A044431046A86DE4695C98F30061044643482A3BC5E64A0787C627D7300E4227 + D5EB75743A1D188611AB9CAE6F61537F8CB3C53E2499FDC02AB341A76D7C6F1D + 854E4CFD7E0A9C448F13851EDEC72A7B0475D1C602C1055DCA7CF2100104170B + 498B4421BC8B2B950A545515CA41B7DB75F7F7F77DFB84054DD304632CF03936 + 0D8EE304F6090B5A96251A22146141CE39186342311CC709FCA3C2829AA6CD77 + 0D7A81856A308CDBFF98C9E57248A7D342316CDB46ABD5F2ED1316CC6432E09C + 0BC5608CC527689AA66888506E7F0D6A9A269C62CBB20233212CD8EBF5425F55 + D360DB76609FB0605071DF14735F83732F18CB579DDFC669341AAE6559E09CA3 + 5C2E4FBCBB63DD247E70CE2F1D20186323EF0A55552F666EB6DFC5DED1696251 + C771C8BBA2DBEDBA3EE37D894530205D4444E8F7FB083A5AF9F1EF6C125DD751 + 2814420767B359C8B28C62B118AB942CCB7F7F8F05DF2B8AF2515194C8C9A954 + 0AD38CBB01BE020055AB55944AA5592C7865DAED76D20AD1FC01004FDA3FB74B + 07E00000000049454E44AE426082} + end> + end + item + Name = 'folder-open-filled-find' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000023E49444154388D8D934F48D3 + 6118C73FCFF66353274C5B62E23C342D1D52626960A414191D3C04455A878C2E + D1A10429BB2474B18C2832A2A0880EE92111A34311615044D1C5D4A224FF97FB + 89B539B5E69CBF39F77651496DA3EFF179DEEFE779BEF03ED27EB39A8A32F74B + 11D9C3A29452F30A1E18C6FC99C3B5CD0B1DEF0788250D4044761FAA7FAB968A + 568B493B7FD47DB2202725A5ED46F58977DDDF0C231C59611CF2F8A9BBF6144D + 100001960146384A634B2FA70F6EAEDCB9657D6579C926593DB9AB57372F6FF0 + 2F4516144D6D7D34B5F5F1371CA0BD61D732D05494EF8C992F9E5C4E0757CF56 + 2073DD8DBA8864FC8F49293521223A90A1948A76F5EA4E0DF0747EBEB32110D4 + E3790755527E8DD771AAC327592A4D0B519CECCB9FF8358706E809167B712C80 + 528C0CCAB6D28746638977DCD5A544F20435A411BD648D6CFDA2011EABD51E73 + 7450ECE75ACC0D459386E3F1C6CEDB92E41F26949AE5D6B71F6B99B1652A13A0 + 5B2D3101C101D9F1EC87E45CC8EC6E95645F3FA668049B7F04E78766807AD362 + 8458009F8FAC8842B213A746573412A73C20649B004F9C0DD25319B7007DB30E + D78AC6ACC3058AAF5A2068C48920333602EB403D192BAC2A458424FF30A1942C + C60AAB1470517ADA6BCD79AEF4B0ACFAAC4A295F8FCF5B5EA7EF737C57B9ADC0 + 15E000900B0C019723D33F9F6B6F3A871766E7E6CDAB01BE1437B7A6F7978D62 + 6F058E84C7FA5F4703934DA6041BD17088F0C8277EBFB8CF9A2359525ACD3D12 + 0BF63E42B86B0C7F7CE5BD7E1C150AAC79F707E414E4C0EC401D890000000049 + 454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000034149444154388D8D945D689B + 551CC67FE7E44DDE246FBA1A9236B3ED36B3A9ED3AB51DCE3A5785EAB6B209ED + 5006A22873F8018220085E79636B2FC41B6F2C0A1DC8264C4187302674A05D3B + AA9BEB56DA4259E7E8BAB6A96D12DAA44DD2E6EB7D8F179DA3DAD8F4B9391CFE + CFFF77CEC3F9105D6DC779A3F5C99320BE1402276BA4941A57A813A954F64AEB + FBDFF0FBD024C5A4DD1B5FEB1D0AEB9706236A6DF1B927CA761EDA17E8F6187A + EBF9CE937D9F755D22BC902C081ABEF51723B766D110028490915886D189C57F + 9946271659C998464B63E5058F5BFFAAE38323492144215EDFA75FFFD2B70A04 + 0A5AEEE974F704730B2BAE865ADF879A4DAEAB07B71A182EAD1DE85B1B79435D + BC36C7C56B73056B6D6F3DCE63C1D2FB73ED40FD0E945205CD9B95528A96A65A + D2991CDAAE6DBE1F80FAE7F796B367CD4A9B5570AB0170A2AEFA412B9E58E9D0 + 80606C69BC34959AC4B06F8A611AAEF2F3DE076A2E28E19896825250CF8252F9 + BC89064CA796C3F577677E2D1E0DA6B236FF2B63AED707AE479EF1452CFF236E + 999FDA6BCCFFD4E089707B76040D08E98E4D458D2FE13F7C567D121D491F3C63 + 0AED5581B0018C2E7B87BE8D3EFC8E15A8BBA101D3BA5E1C682AD9D12DDF9D18 + 96877B1D8968E38EE11F71CFDF5139B797F0EEA375F1AA7D3D36A7F1B4A620E4 + 2CBE43332E02A7FF90C78E8B7CAE31D8DF893DBDFA08F464946D0367301D8627 + 11A8699702420EBB4708B1FED2AED1D49CD8154B09EF414FF8E67DD83F1280F7 + EE5550BC20816921240EFB968D80F92C3A0AA14B2B57D020AD1C081C52296600 + AB48ECED656ADA65277D2551BE1B53D3D719162BEA417155A6563259A5881439 + 69CB60A94A5399B379DD939ADCFF3639E7AADF921A91EA66E2DB9F3281762D14 + 5EA226A88782558702158186F528A5D293F37FBE7C2ED6349EC1730AC825CB1E + 1D1A3BDA566F5F5EC0D44B306D8E05E03DA5E8D766C2716A82659D2EA7EF21B7 + CBBF8E97C8CBDE9FE32FF6F7883D5D16B663289A410D2AC481ACDB570344811E + 2B9B4EC6BEEF40B434D552575DB1DAFD9F7F4CB8B630B6FF233198F29FCA215F + 029AAD74EA7AECBB0EA4AB04E93400C8CDDE217DF337AC646CC3AF109BAF92CA + CF2F9700E7107C6CA59707A25FBC49E6F68DFFEDF91BD1F644F6127518EA0000 + 000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004384944415448898D945B6C54 + 551486BF75E6CCB597E91D84AA6DA1406F21801714BC60090F34122506B9A841 + 25682218C2A326243CE98B89116A1F9407131FBCF3803521608914222A082640 + 31806DE9B465A6F432A7ED5C7B66F9D0E9A440A774BD9C7F67ADBDFE7FFF67AF + 2D1FEFDFC8BED79F79046815915A0055551191348E28FA35CABE612B1ADFF8EE + 112E5DEB63AE61A6BF5B819AEFDA6EA94E7605110528CA73791B1F9BB75B8405 + 85F9BEADAD2D6F47777EF82DBF5FEA9AB57124962495D20C8107E09B5FBB75A6 + E21BBDA3BCB369719308478BFCBE6DC79ADF1C7E90F2A7B61FE66247EF248188 + A0AA4CB365BA457AF27C904432C57B9BABD79B0EE3CE54937BEBD25855754A78 + E6040F8CD3FF0CD01D8CB0A2BA505D4E638A216325AAD45515687DA5FFAE7D66 + 9A3DA368BABA7B7157FF185DFD635945BC2A227515F977133CBBAA2AB3C866D1 + 4C78A65CBA07AACADE1D6BF8EDAFFF3057D62EDC0F3C07B0E58547325CD34464 + C3F7E5EA26ED11E0C0F6A615ADFE5CCF05137803A807D8B2EEE1ACC79F2514E8 + 006E015E55AD050E0097810B2610181DEFAD3F7FB9F981B6DC6351DCE32EFEAC + A86CDD213BEFC9BE30059828F35C512933A3CFBB0CBB7360781C13E871BBFC4C + B3762E3190C0F3F2A589D5E74EDFDEECEB0CD66F8AA9679940C46FC6DB6BBC23 + A71A7C43DC1CB98609049CA617C37061DBF1596F511A2793B85F69335E3B775C + 76378D6B610BCAC2A9FC60D2C399E4FCD6F6F0FCB7A8FBE08E09F48838C4E5CC + 21964A641A66B308E4CBABB2E6EC0963D786710A8F7A477A1CF3AF1C2367B013 + DBE961A47C15C1DAA6A694C379421DE65A43D18088E076DD3D20D92229EEE676 + 63AB734C8A9BBD569FA3EAF421F242FF22137175C62C4A6F9CE2D13F8E20E872 + 81F70D4102C05C0942A3145FEB32963F81C8A2B28EE338ECF87D45B9C10ECD19 + B8AEC03603B8ADAA098FCB8FA663CA8E1970DF284544C95BA4AAEA1DE999B94E + 15EF700FC02243552D042B7D9364CAEF2C38C7C104823D2A2232E1CECDBAC776 + E70258868880D23B478B2AFD84F20A347456D1D870C5EA198B6C77AE580F3500 + B419916802A0C7E39E93458687688D8F7008E5ABA18AA71958BC0E15235397F4 + E4D3BD7A17132E5F4CD18FCC4030CC928AD280D75D4C65F9FA59A64DED41AB7B + CF99C8923F87585003BCA810BFDDF0927BA86AADF886BAB19D1EC64BABB11DAE + 08B013E5B2D9191862494569C8E1705359DE485A4966B2D338154B46F75ED4B5 + 5FFC185BBF6C4C4B4E0006F0B8A2B5F19C929DF19C92A5C038D08EEAA70A37E2 + 37FFC6ECBF338A2A074538386D60998EE32983E3D6529AC3754B83E49ED4C917 + B351A14393F12B62BABF07D26FAB608F04193BF303566B0BB2B02C9FB2E2BC59 + FFACB37117C32B77542770B4E9A4F20DC095F0CF9F631D3B8CA3A41C71790048 + 5983D8E10148D90098BD218BDE90352B414143827C758C01D711F6A872D5FAA5 + 85F04F9F0030D17F33EBDEFF01E61E4F4A51EB11F70000000049454E44AE4260 + 82} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000411494441545885E5976D4C95 + 6518C77FD7C379832307F4A82C50CA901AA9A45B29142F9BEB65D98B7E888633 + E9CD5AAB5CB589C46AB59A821985AED5FCE037571A4C668B72B3A5C92A643984 + 6CB056142FE780BCE6399CC379E339771F0E3A4C1081237DE8FFEDDEAE7BFFDF + F3BFAFEBDEFDC0FF5D02909EBA90B75FBA9F388B111199B050A1D0F53035DF9E + E7C8F1E6E8021CDAB39982073377013B44C43821802204EA4458A917BF38DED4 + FDCAEE63784782B3063000C4594C80EC28DA5D6F18F1EB6AA242638C181ECD49 + D950B83EB5B170C3EAA2CCDB924F6C7DE3302D6DBDB3071001118C9399038474 + 45CD6907ADEDEE85AF3F71FBD72B9627ED6D38BCBDBCBEB9C3E39946126D5D83 + 1457D45E09301DB576B8D9F1C93979EE91B492B519F692FCBBD3266E9A49D4D8 + E28819BF9E3600807B6494CAAADF2E2D274DEDDF3ABA2BE72A586D2600D19456 + B3FF29EE5AB964CE0CD396DA39BABF8883EF150020FEA63D41819829F645554A + A1F7F4BB62973D50AE1B50EAC24FE7DE4F0E84DC73626E36D9C85E5D7261C835 + A243A4079C6653C29C9803988D09004E676FE483C7006C730710F172F60CFCC7 + 00CE5E1710B9079CA61B7704A3C08F4013E00149B298E7E7024EC73800C70D48 + 4029F8DCC3FCB79AE4BEAE76C9C48F159BB8593F6A2637688CBBD40306858AF6 + 11A830B2FD8C6C3C50A3ED5CE796451F01F90889283ABFEBE34BD5A7F67A33D4 + 080DA51842213DAA53A0A0E27BD972A03AE6CD622DE02B4B69ADD26C3DE78909 + 7A095A172D1BBA25FBB5C1B4BCADF3B2373D2606F31969FDAA38F6E614DB70DD + CFEF44C3BFC7497AFA1E43F5C378FD55B7D6EDC3E8BFFA7E7127DD4147F6F383 + 61D15669CE3E974F13C3DF06435C34000E9DD29E0C04B096A7347E36A13980AD + B7057B5B9D5D60A7D6DDEF86288DA2821F5AE5DE1566EF40DABC81B66BD62E68 + AF07D8A87547BAD161364603407A5DB238D5E4E99FB2D6E4ED0791546D6C1EA3 + D288828A37E173E926EB94B5BAC90A4A5DD49C7D9700669F80C09AA5E196465F + E2124F3036F19AB5EE9B56019CD67A2EF7405446B170ADAAF529D13EEEBEF371 + 1413BFD6429604FA321E0A83AAD0C66EA42825A0FD6EC22740DD7072261D59DB + 189F84023C0B97D396FF2A21737CE9E8D08506D134C17BB66CA508CD93FD945C + 8F743D78A4B6BDB3E8DD8B2FE40C8BBD0A451190234A6D8F7539E2C72E220256 + FB1FA04A758FABA6BFF2994846B59F3ECB8284381026096DAA4F8FA16BF13ACA + 1CABF38674733550186CFFF594EE1EC492718F450CC63540A2824E15F0B58C9C + FD46B98EED431FEA9E99DF95E61AF66D1F60CDDA940754236C0EFCF9CBC9BE0F + 8B50BE61C46441626D089123080F0F4178F4F2F6193DCBC72BB1A0046BD6A65C + 842AD495E6002AE84705FD93EE9F3580316919C0CB4AD7B78CF6FE75B2BFF2E9 + CBE6D7A37F002F51ADA5E69FA1AD0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000005C5494441545885ED986B6C54 + 651A809FF79C33336DA79DB64CAF80DC5A75B1916D2D2E8A245D25590DA64613 + 8D206141BC4413DD88C1C54D366E96640D6B4C4C7615374425EB2DF102465044 + 2478418B826D81A8D0C8D6B5ED94763ABD30D3B9742EE7DD1F1D1AD4B6B0A543 + FDE1F3EBE47CDF7BE699F7CB7BBEF77CF00BE7879CBE304D8399259EF45D196B + 3EA8A2403265D3E90F66582F2D989F9BC5BEADF75155599A0F2C1011636C3F45 + D101553D7AF068BBAEFDF3EBB476F4655670C5B26AB6FEEDF6B9C00111293E97 + 40553DA2AA2B4391D8B1FB376E67DB9EAF3222680158A609C86DEDFE70D1FA67 + 0E6BCAD67183A6E539B9BBBE62C16FE64FFB22CF9DF5C0CB9BEE78F1AA050D3C + FAD42E52297BF205D364052349CE2607D0178AF3C4ABC7B8F1EAE939ABAE9FF3 + 82654ADD832BAF79F0BA451591977636D13B1099B0D04B3B1A471194F1EB622C + DE3DD0494B5B908797FF6A7549816B495565D9B64DEB96C564220F1B66E3E882 + E7C109DF20EB9F6EA6FE9A191597CECAFBA3698E595F63E2CE32995B9E2BC0C6 + 1F8F9DB720406428C56BFBDA261C5F35379F8D775D3EEAD8FFFF772F30D6AA9B + 6A595C3D7BAA3D4658555F0BC07FDA03341CFE1E193ABCE9B1F4589DBF3F56F7 + 61B3FF824B9514B8B8F68A5201FEAAAA000D2FEE68DC7BEF5FDEC452F49148C4 + 9F1D4F867198F0BB8517DC0F48D21F6C55E0318F7B2686E1F813E85E000BC5D7 + DED55079B2E7D05498FD84C5358FE2341C3E5FF7F03E6F003E97D333B5566904 + 03A72357009FAFFB143022983FA562A7713AF348F7291D5DBD21E06796C1B487 + AAD2D9F9C325FE7964D0E5CC4755FB80A8CF3FBCC4165393C138F011F039E003 + 4C90D9D9AE694B805C45E9EE1D1C11ECB0CC2C310C87DA7622D36249607312EB + EF6D5CD67D42163220A50078A58FA5660EA5895461CF199DBAA58ACF30049733 + 9F682C9049B93E1BB9B585459FBC6DAC33BE337E5DAF98370015400A6879A3CB + DEE1E9497C34ADFF38666119A9FE2E24DAF4B8298611397CEC397320D89A29B9 + B08D71ED3EF97DD3DBE6BADA2172B61A76B22AD7DF822BD40D2244F367122EAA + 44453E5558933AD5F39DFF893BB00642D154A127A7CBE5CC9F91293B850D5FCA + B2A6EDE6FABA24AE770B3A9AB2CB8F6EC73114FAC1BC217711BE9AE54B068B2F + 3E607A8A7F5B74FFD3C78D4E7F08325B282DA728DEB2CD78C49BC4F59AB7757F + F64587FEFD1339005738C0DCCF36E3E9FABA5884371D332E751A1DDD03001D2E + 47C6049F3F28F576BF4C5FEF1AF4174F3FFA16E3F5DBA236331B5FC64C44E78B + B0DAE80A9CCE60C6DE857B8FC8528015DED6FD88A6CE1A60C52314B61D045861 + B49D1C480B6626830ADF9E940AAF88CC7207CEBD08DDBDAD00D5467A53CE5406 + 55915842B2DC00463276CE8146228608B923824E877BBC03858922827A7334D8 + A34A32915378CE81899C42543969F8FC4154F18918381D79932D8840CD45FA4D + 14F450B07CF40FA3D148CFFD78A44800CDD032DFBC507701FA6CDF9CC50CB9BD + 670D087BE7112AAB02F459A3EF5484583C1153D5DE0C15CA2DF3B5C13449BE62 + 9B8EFDDF5F7D2F89ACB11311F394D3B6682D0ACFA972C002F07507A99CE5F515 + E4CDF12612E1493353343C18E95EFE955D97B2316B81CB637965816F976E282A + 39BE9B82F646ACF8F0EF25B20BE89B7D153D972CC5369DDB517D20DAFCC1F03B + F3FD2DF75077E5BC9DC0B2F338B6F831E1703450FF4ABBF9F13F432B6B63E2DE + 83B253E13E81878087044AACA190AA18A49C6E51F82FE8E328CFC75ABED09E7F + DC337CB2906E0EEB61B89D9D0CC9A40AEF0C5EC9E648F51531B1DE07DE41581B + 3FD16C5B25B33799B9854FAAC8C24456DE3C74B89B51D523F660BF86F6BC4070 + F716B053E3EE3A13C6F01451BAE1551C651535C00708BB8035912F77DB817FFD + 010C1357450D5651BA3F491FA825033E865A9B21191F79D6A40B8EC895A7E5E0 + 3D60F5889C7DF6ADEE4C26E5F0E84C0A6E791847594535B007D5DD206B228D13 + 93CB8820A605301FDB7E4F6DFBCEF889C65460CBBA09C901FC0F1DA968D97B23 + 405C0000000049454E44AE426082} + end> + end + item + Name = 'gear-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000002F549444154388D7592CD4B23 + 7718C7BF3371984C5EC68CA0562D15E241080C949692A9812555B7E4627C2905 + 5915D6458AB4FF80B7F6E0B1153C081E8A1614B65241D4F41485625147968A38 + 3E8207E7B46A24186534F92963E6D74374B72FF8393FDFE7E5FB7C810762B118 + E6E7E741449F10D10F070707E1783C8EE6E666ECEEEE0688E87B22FA3C93C920 + 91483CCA2000402814C2C6C6464096E549C6D8CBCBCB4BB1B1B1F167008B0F75 + E9B3B3B36F5555E5C160F035E7FCBB743AEDD8B68D2A00501405B22CB73B8EF3 + 6A7171113E9F0FDDDDDD23C56271040082C120B2D92C5CD715FAFAFA5E689AF6 + BBDFEFFF1540A501630C9CF3ACAAAA6F6B6B6B3F3C3D3DC5C2C202FE4B434303 + 344D3BE39CAFDCDFDF0300440048A55200F02963ACE1FAFAFA7FC2476E6E6EC0 + 18AB03F071474747C583A9A929C46231D4D5D56DACADAD258E8F8F218A220CC3 + 406B6B2B00E0E8E808A669C2F33CB4B4B4A0B3B373F3EAEAEAD9DEDE1EC46432 + B9535F5FEF31C612B66D03000CC380AEEBAB9224354992D4A4EBFAAA61180000 + DBB6C1184B689AE62593C91DE1F0F0D09B9E9EE6FF5C757878189224358D8F8F + E7F2F93C2627273F705DF7647676F65F278D8E8E563C78029ECFE771717101CF + F3F853450211ED0882F059A954E2737373E09CA3ADAD0DBAAEAF72CE473DCF83 + CFE79BB62CAB6B6B6B0B822060686808814040E09CBF118928EE388EA828CA66 + 341A050098A609CBB2BA5CD73D2997CB2796657599A609008846A3501465B354 + 2A8944141700607070106363636DB7B7B77F2C2D2DF99E7A65381C466F6F6FD9 + EFF77F313333B339313151F16065650500DE288A72A2AAEA93A6844221288A92 + 03F057269301F0904459962108C2978EE37C94CBE520CB327A7A7A502C160154 + A2BCBCBC8CF3F373140A85A69A9A9A9EAAAAAAF751BEBBBB43B95CFE5355D5DF + FAFBFBBF2E140A884422BF442291D70FC3BF6A6F6FFF465555545757AF02C83E + 46F91DA9540AEBEBEB20A26744F4131169E9741AF1781CFBFBFB6122FA91889E + 6F6F6F636060E09DEE6FBE8F49BF3F1797BF0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000042C49444154388D85945F6853 + 571CC73F27B949943637C19B6030705B42696223295D55D4B54F324169884ED9 + 2CF8B2B7E18383E18308DBD8860F1D657BDAD3648E09334C0A5AC522B2C1886B + 864CA1B629CD900A375C983489F983B7DCF626670FB5A16EE2BE4F3FCEF99DCF + F9FD7E5FCE116C512A95E2C2850B0C0E0E6E074E037F361A8DF923478E605916 + D96C9681818104302AA5CC9AA6D99C9C9CE4DEBD7B1D86D80C32990C972E5D42 + 08F11E30E1388EAE284A454A197FFAF4E973CBB24826937E21C4A2E338BB1445 + F91BB828A5FCF1EAD5AB72626202006513B87FFF7E84109FB55AAD4F1F3F7ECC + DCDC1C274E9CD00281C0EFB158CCF532ADD56C36774D4D4D914C2623434343DF + 2B8A329848243EDEE47480524A8060AD56E3C1830700E47239745D8FD76A3500 + 82C120A55209DBB679F4E811BAAEB373E7CEC0D6B175808D4603E02B4DD3CEC6 + E371A5582C629A26A669F23AF5F7F71389445AED76FB73DBB63BEB2E00AFD7CB + D1A34701DE771C47A9542AAF856C55B55A657D7DDD0DBCBB77EF5E344D03C09D + C96448A7D31C3C78302484B891CBE5BC86616CDCE672B17BF76E868787E9EBEB + C3EBF552A9549052625916ABABABF4F6F68E288AF25D381CB6BABABA108542E1 + 6DE03030D86C368F5FBB760D29252E978B63C78E118D46AB40F66561A74DD3DC + 71E7CE1DDAED364208C6C7C7F1FBFD378039E0175128149E572A15756D6D8DE5 + E56516161600181818607474B42AA51CB66DDBB06D9B4020A0030F73B9DC8EC5 + C54500F6ECD9432C16C3EBF5A2695AC3258408CCCECE323D3DDD8101E8BA0E90 + B56DDB3875EA14E9749A95951503C8BEDC0360616181E9E9696667671142A82E + DE2CB9B6B646A3D1C0B22C2CCB02906F3AA04829EB870E1DFA4FCB8661D0D3D3 + 33AEAAEAE4D4D4946159163D3D3D3A30BE69DABF5B96523614604CD3B4C3C060 + 7777F7F142A1809492A5A52562B1D88E6834FA301C0EBF62CAD2D21200420852 + A9D42BA6B88152B95CFEADAFAFEF579FCF77F6C58B17DE72B98C9492274F9E60 + 59D676605FBD5EDF373F3FBF3D9FCFD36EB701482412F4F7F75B52CA77EEDFBF + 3F73FBF6ED9200F0FBFDDCBD7B1755553F6AB55A5FDFBC799372B9FCC6E18642 + 2132990C6EB7FBBCE338DFA4D3694AA5D2C64B69369BDCBA750BE0278FC7B31E + 0A85FEC72BD0340D45511CE0E77C3E4FA954DA306533A1ABAB0B21C4F96AB5EA + 29168B0044A351745DA75EAF03100804300C03D33429168B249349251C0E7FB2 + 6DDBB60F3B2E6F06420800D9DDDD4D2A95A25028303232423018FC6B4B61B2B7 + B7377EFDFA75E2F138AAAAC2963FF515A0611848292F7A3C9EE503070E7C3934 + 3414F2F97C0D29E568AD562BB75A2D42A1504055D5E2993367C23E9FAF0E7C21 + A5FCF6D9B3671D6087EE76BB3979F224E7CE9D23180C0685101F0079DBB6FF18 + 1B1BA35C2E333333432412798B8DB7FF836DDB2B57AE5CE1F2E5CBACAEAE02F0 + 0F7FDCD51A0A26AD0E0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000057C4944415448896D966F6853 + FB19C73FCF39E99FA46945776F4C137B5E55B0ED8B8562449069A1E2E885CD17 + 1A2CC22DE8A0E8ED65722F633898636C772B175DA594C9BC822FDC602ACA6073 + D421197557506B47C2104A535F48A0929C24B38D8D366DCF79F6C2E42CDDEE03 + 077EBFF3FB9DEFF739DFE7FBFCCE11FE27FAFBFB397FFE3C7D7D7D00DF06B6AB + EACCECEC2CA74F9F06E0DCB9738C8E8E021C00365475B6502870E9D225A6A7A7 + 715DD7C39346F00B172E904824304D7317302E22C3AA6A006755F5AB9B376FB2 + B2B2C2A953A7686E6E1E16913F8808AAFA6755FD31F022954A71F6EC59565757 + B712ECDAB58BFBF7EF232267802F1DC709A6D369C2E130D168B4A8AA3F14910F + 0154D51691897C3EDFF9F2E54BFAFBFB696A6A5A037EA1AA5F8E8D8DF1F0E143 + 007C7502D334015A808BB66D071E3C78C0EAEA2A3B76ECE0F8F1E31F1A86F147 + 5555791FB8AECBA3478FB4582CB2B0B0C0E1C3875BA3D1E82F81AF80D7755C8F + A01655602E180C1EAC56AB00944A259D9E9EE6DDBB77BC79F30640DBDBDBF1FB + FD140A051511D9D8D8A0BDBD1D55FD97AAAE34027A04A552095545447E1E0804 + FE1E8BC5989D9D55806C36AB8D0FADADAD796355D5582C2635829F00EEDBB76F + BD75A33E181E1E4644A815945C2E87D46E485D978671E33C9FCFD793FB01C0D1 + A3473D02331008D0DADACAF8F8386D6D6D1F1986F1C5D3A74FC96432DE261191 + 5028447777B7ECDCB91355A552A9786BE57219C771E8EAEAEA53D5B9EEEEEEC5 + 7BF7EEB1B9B9893C7FFEBC1168A65C2E7FE7D6AD5BEA380E002D2D2D32383888 + 65595B8A95CD6649269354AB5585F7263971E2847474747CADAA039E442272D9 + 308C75117144E4E0FCFC3C8EE37852D4C0ABAAFA39F041EDFADCB2ACEAE0E0A0 + B7CF711CE6E7E711918335AC7511B9EC1391B157AF5E994B4B4B88882E2E2E7A + 598642212CCBAA176F3293C9B0BCBC4C3C1E9F14112CCB9A088542D8B60DC0E2 + E2223E9F4F559568346A4622914F7CAA6A2E2D2D313737B7C529AAAAE170B85E + C81B0B0B0B9C3C7992F5F575A6A6A6181818F83D30110E87C9E7F30AB0BABAAA + CF9E3DF36A1389447C468321FECF2D0D64ACACACB0BEBE8EEBBA148B4554D54B + E89BDC560F1FB0198944CC783C2E00F3F3F3DE3992CBE5EA0023F1787C726A6A + 8A62B1C8B163C7109191C63D006D6D6DF4F4F40048241201D8F4A9EA6F2391C8 + 586767A72922B2B9B9A9A9540A00DBB6C966B35896350ED46501F81818CF66B3 + 9EFE00BB77EF66EFDEBD527B3B4755AF18AAFA99EBBACDAA6AAAEA3F7A7A7A30 + 4D13AD453299249BCDB688C80450A85D13D96CB625994C7AFB4CD364CF9E3DA8 + EAD735AC6655FD4C7A7B7B314D936BD7AE110C063F320CE32F4F9E3C219D4E7B + C5AE375A381CF6A4B36DDB5B0388C562ECDFBF1F55FDBEEBBA7F3D73E60CAF5F + BFC62C140AD8B6CDB66DDB88C5628B404F341AEDB36D9B72B9EC15B152A990CB + E5D4B66DA977717DADABAB8B43870E01DC017E3D3333C3D5AB5729140AFF3D8B + AE5FBF4ECD185322426767A7E794BA0C8DE3C679381CC6300C80DF01DCB871C3 + 4BC023E8E8E8C0300C44E4A76B6B6BA4D369CF7E966549281412BFDF2F7EBF5F + 42A1905896E55933954A51A95410912F000904025B6CDAF8BAADC0C1E5E5E57A + 466CDFBE5D868686C4308C2D9ABBAECBDDBB7729954A8808A552896030B80FF8 + 1650FC4602555D13915F85C3E19F0D0F0F37CFCDCDD1D5D58588FC5B553F053E + A829638BC8E481030742994C867DFBF6E1F7FB1D559D54D56223A6D77522C2ED + DBB7E9EDED05E8017E2322DFAD01FE48552F3F7EFC9872B9CC912347300CE334 + 70ADF6D17F543B0CFF592A954824125E7F6C69EBA6A626464646181D1DA5ADAD + 0D11190076A8EA9F5EBC78A18944828D8D0D2E5EBCC8D0D01022F23DDEFFB6FC + CD711CBD73E70E57AE5CA1542A7998FF018CB6C920978317C00000000049454E + 44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000704494441545885CD566F4C53 + EB19FFB53DC7524A2FE5D016CB2A042E258A7C60C6A1824C34A25244A506E366 + 16857D214B8C3AB8667759BC7833B22DBA113EE8D807432E09B917A35248C448 + 1A18575083488BF42DC12216A991927204676DC939EDD907A5E1D8B2E1DD92ED + F9F8FC797FBFE7799FE7795FE07F2C927FE7A0D7EB71E6CC196466662A044108 + 3637370B7D7D7D317DB3B3B3515F5F0F8AA294F3F3F3FE2B57AEC0E170FC3066 + 717171387DFA34868787E309215F1142DE1242AEF7F7F7232E2E2E3A1389046D + 6D6D20845C75381C4142C85F9E3C79A26E68688046A3591547164B99959585F6 + F676ECDAB5EB67344D5B262727CBEFDEBD4BA7A7A7E7242525DD0B87C3EEA1A1 + 2151CCA1438770E2C4899F040281BFDEB871432693C9B6EB74BA5F6EDAB4E9ED + F1E3C76D2E974B70BBDDD1C46311A8ACAC447D7DFD1F7C3EDFF981810178BD5E + 0040464606F6EDDB67E738AE502A957E2E93C9522412090441985B5A5A9A94CB + E57D7D7D7DF94F9F3E0500300C839D3B7742AFD77F73FDFAF5EA8B172F466151 + ABD60678C7B26C041C009E3F7F8ED9D9D9BC949494C5858505EADDBB770080F8 + F878A8D56ADEEBF552CBE000C0B22C7C3E1FF47AFD3F56038949E0F1E3C7E079 + BE313B3BBB666C6C6CBDCFE78BD87A7A7AC0F33CC5719C2886A6698AA2C4C725 + 2525213737F73580AF1F3C781093803496726A6A0A168BE52D80AF76ECD821B2 + 0502017C0C0E001CC7211008887485858590482417868686E67B7A7AD64E4026 + 9321232303003E8B8F8FC7C799AD45288A8252A9040079727272CCC901569982 + EAEA6A98CDE6E24020D0DAD9D929595A5AFA6402E170186EB71B46A371AF4EA7 + FB5EA1504C0F0E0E46F9454D41424202AC562BAD52A91CDDDDDD5933333362C6 + 321972727260341AC1300C80F7CDE672B9E0743A110A8544FE1B366C80C9649A + E4382EB7B4B4947BF5EA95C81E750565656550A954273C1E4F14B852A984D96C + 46414141A756AB2D0E87C3093CCF2768B5DAE28282824EB3D9BC5CF688CCCCCC + C0E3F164D134FDF3A3478F465760EFDEBDA8A8A88828B2B3B3919A9AFAF73B77 + EE14BD78F14294B9D96C06C330BFF1FBFD979A9A9AD0D1D1019EE7613299505B + 5B0B8661BE6059F68F376FDE44381C8EC4A6A7A7E3C08103DFCFCFCFEF1E1B1B + 8BE87B7B7B41555454A0B8B878402291142C1B388E133C1E8F88694E4E0E1886 + E9F4FBFD97AAABAB453BDE62B1C066B3A1B5B5F59246A3D9B179F3E6C32B813C + 1E0F789EFFA946A309EFDEBD1B002008C2A056AB2DA200402291143437370B51 + F5592146A311001A9B9A9A623E30D3D3D368686840636363A3D1681411088542 + B876ED1A0044306A6A6A0A241249EC318C250CC380E3B8E18E8E8E557DAC562B + 58961D5E6ECEB5C89A0900EF478BE7F91F6CFF8F08B02C0BB95CBED56432ADEA + 535858089D4EB79565D93513A080F70D51535353B8ACE4384E6869691175B2CB + E58256AB3D575B5B7BCF66B3617A7A5A749046A3C1850B1700E09CCBE512D9A4 + 5229AAAAAA40D37464EF088230280802A4BDBDBD208414391C0E292144CAB2AC + 94A2A87B0683417488D3E904CBB2871986A96B6D6D45494909A4526924F3B6B6 + 36180C863A96650F3B9D4E51ACC160004551F7DEBC79232584483F6015F5F4F4 + 446FC293274FE2FCF9F3A73C1ECFB5DBB76F8B6C4AA5122693090CC37402687C + FDFAF530CFF3D06AB55B019C6359F670777737FC7EBF28AEACAC0C0683A1BAA5 + A5E59BCB972F8B6C5104D46A35AC562BAD5028FEABAB38140AE5969797731F5F + 5DD463140C06A15028C25BB66C71180C865F3C7BF64CB2F2F915040173737318 + 1F1FC7C8C808464646303E3E8EB9B9390882789528954A94969686298A3A66B1 + 58A6628D70CCD7707474147BF6EC71AF5FBFFE6D5A5ADABE8989095143AE4528 + 8AC2912347A052A9BEF07ABDDF9D3D7B16C16030CA2FE61806834158AD5600F0 + 0583C14F9E6D00E0797EF983F2C66EB763616121A65F4C02C9C9C93875EA941C + C0D70F1F3E14D9E2E2E240D374540C4DD3519F8EFBF7EF431084DFEFDFBF5F95 + 9797179340CCAF4E717131140AC5AFDC6E77DACA4F290094949440AFD7F38B8B + 8BD472B72B954A242626F2B3B3B354575757C4D7E7F361626242B771E3C62FCB + CBCB7F6BB7DBD746E0C37C7FBE6EDD3A242626627171110090969686D4D454A7 + 2008F9898989996AB53AE54388571084677ABD7E203333F3C7535353116272B9 + 1C008CCB3B634D04DC6E37388E3B979A9AFAFCD8B163BF1B1B1BFBCC66B361DB + B66D00F0657B7B7BE0EAD5AB442A9592E59883070FA2AEAEEED7DBB76FEF7BF9 + F22572737391979717A028EACF8220FC6972723226815525232303CDCDCD7038 + 1C3A42C8DF464747394288F5D1A347484E4E8ECE84A2D0DDDD0D42C8B7A3A3A3 + 2142C8B78490B45BB76E213F3FFFD3C0574A515111BABABA4008F991C3E19057 + 5555FD4B5FBBDD4E1142D2FBFBFB51595989D54AFF7F23FF0452C8225D2C4B6D + 1E0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000009D8494441545885D5586D4C53 + 69167EDEDBDEDE7E08B4CC907E38052A4EA138DAA0B63AE884AC51540417773A + C4D131E1879935FBC3689CC1CCEE4C36EE641D7477454DD689069D8924261877 + 2741CD8C467451D1B2F8D938A88080BA2D540AB4D096B6B6F7DD1F5006EC07C3 + CE64B37B92FEE939CFFB3EF79CF77DCEB917F81F37329360AD568B9292120804 + 02504A71EEDC393C7FFE3C2946229160D3A64DE0380E00D0DADA8AD6D6D69F97 + 604A4A0AB66EDD8A2D5BB680E3B8E500DE0570B4BDBDFD91C5624124124988DD + B3670F2C16CB1B007601B80CE0EC850B1750535333EDC3018020A95320C0860D + 1B70E8D0212C5FBE3C4B28141E05F0278FC7B3442C1617A5A7A71FEBEDEDA50F + 1F3E8C8B9F3F7F3E3EFBEC331042FE3E3C3CBC9165D98D8490E539393977DF7B + EFBD1752A914DF7FFF3D42A150420E4933585B5B8BA54B97CA0821BB01EC723A + 9DE2E6E66678BD5EBCFFFEFB6059F6C3FEFEFEE36BD7AEC5E8E8680CFED4A953 + 301A8DEFF23C7FBABEBE1E84101416162233333302E018A5F4F74EA773A0A2A2 + 020303033327F8E0C103961062F3F97C7AABD58ACECECE095F414101CC66731F + A554EFF7FB7D32998C052027848052EAF6F97C2F6532990440DBBD7BF7325B5A + 5A26B05AAD1685858590CBE52F28A5F32A2B2B076FDDBA159703938C20000E40 + D6ABE400C066B3C1E7F3A90821576432D91342C82821C409C049081995C9644F + 00FCC3EFF767DEBE7D7B0AF6F9F3E7B876ED1A0821198490B4640484C99C2323 + 23DED4D4D4C32693E9E3AEAE2EF03C3FE18B4422B871E306B2B2B216F5F5F5C1 + ED762310085000108BC5442E9767AB54AAECA74F9F221C0E4F59375A6A4AE949 + 4A69F7C8C848420E492F89482482D96C6EE5386E6B2814923A9DCE29FEA1A121 + F4F4F4C0E572C1EBF5221008201008C0EBF5C2E572A1A7A70743434331EBE6E7 + E7232F2F6F9852BAA1A9A9C977F2E4C9841C9296F8F8F1E3E8EFEFF700F8C3C2 + 850B27B4ECA718C771309BCD00F079281472565757278D4F4A50A7D3412A9502 + 00C7B22CE472F94F26A85028C0B22C803119CBCCCC4C1A9FB0C4028100B5B5B5 + 502A956B0921271A1B1BC98F11D6E9CCEBF5C2E3F160CE9C39AB1886F9A7C964 + EAFCE69B6F126A6142821F7CF001CACACA1484908B77EFDE9DF5E0C183849B8A + C562646565213B3B1B6AB51A32990CA3A3A33197236A434343100A8544A552AD + 94C96427388E0B343737C78D8DAB830281008D8D8DC8C8C8F88BC7E3D971FAF4 + E929377832B1A54B97E2CD37DF04C3306E008FC75DB93CCFCB3B3A3A60B55A11 + 080462B00CC3A0A2A20269696935C160F0A3152B56C0ED76C7C6C52358545484 + D75F7F5D01E0C3D6D6D6B8E4D2D3D361B158909B9B6B6318661D808C603058E8 + F7FB0B0164300CB32E3737D766B158909E9E1E83E7793E3A34FC9AE338456969 + 693C2A10EA743A5456564228FC4112F3F2F24008A9F0FBFDD2AEAEAE1890582C + C6BA75EB20954ACF504AB7381C8ED081030770F9F2654422112C5BB68CDFBE7D + FB770683E1B24C26AB2B2929B19C39732626935D5D5DF0FBFD52A9545AB179F3 + E6A30683618ABFBEBE1E647CDA2802F05B00EC78AB02007D5B5B9BFADAB56B71 + 339C979767A3942EB97DFB7668DBB66D31BD58201060FFFEFD58BD7AB58810D2 + F2E8D1A3054D4D4D316BBDF3CE3BC8CFCFEF05D03E69EF9700FE78F3E6CDABC2 + F1CC7DD2DBDBBBD2E1704C01777777C7CD9E5EAF07804F1C0E475C72C058A7A9 + AAAA825AAD0E198DC64FF47AFDF9969696982CB6B5B5617474540D401DFD4FA3 + D140AD5653A15078355A5791C3E140A2863DD9341A0D188671534A2FD6D4D4C4 + 253799647575354E9D3A75916118B746A391BF7A64060606622699C58B1743A3 + D1B0C0F82521E4C70FD6A9A9A900F038180CF28D8D8DD3C6DB6C36D8ED761EC0 + E371EC8C6CBA6926C6A20F138944924ED2932D2AC2334944D4664C7078781800 + F452A99459B66CD9B4F173E7CE854EA76300E83D1ECF8C090A0180521AD26834 + 58BC78F11467777777CCF9B0DBEDE0795EC1304CF1F6EDDBBF6B6E6E4E9AC99D + 3B77821052CCF3BCE2D54B0800AFBDF61A743ADD94FF341A0D30769327E6C12F + D46A3551ABD5936526572C16ABAE5FBF3E051C0804D0D1D181DCDCDCBD797979 + 97F7EFDF1FAAAAAA8A4BB2AAAA0A45454522007B3B3A3AE2761483C18079F3E6 + 4DC8CC78C25E524ABF0000617D7D3D944A65934020688A0668341ACC9E3D7B9B + 4EA7FB6B73737394F08459AD5668B55AA3542AAD5BBD7AF516B55A1DAAAEAE86 + CD66033056D69D3B77A2A8A8484408A9F3FBFD46ABD51A438E1012CDDEE72E97 + EB6854D6A2FB7DFDF5D7F17B71696929F6EDDBA700F0ECD2A54BD2274F9EC4C4 + A4A7A747BBC97D8C89FC45BBDDCE078341CC99338701500C60AFDFEF379E3F7F + 1E838383316BE4E4E460E5CA957E4A69E6E1C387878E1D3B16FB10F1088A4422 + 343535213535F5BF322C84C3E18F8A8B8BF1EAC40E2418B7229108388E83C964 + 6A158BC5950CC3C8EC767B4C5C381C464F4F0FDADADAE072B9C42E97EB0DBBDD + FEC6C3870FC5D7AF5F47676767C291CB6432213B3BFB05A57463434343E0ECD9 + B371E3120A93442241434303D46A750921A4E1D2A54B245EA9FF131B2F2DA594 + 968D8C8C7C5B5E5E1E377B409281351C0EA3BDBD1DA5A5A51D0CC378B3B3B38B + 1D0E07BC5EEF4F22A752A9B066CD1A1042AA00D4EDD9B30777EEDC49189F54A8 + 5B5A5A30DE3B3D914824EE40395373BBDDD1B2077C3E1FAE5CB992343EE96B67 + 696929366EDC2801F0B73B77EEA4FC1CEF24E170183CCF43ABD52E6159B65622 + 91045ED5DA1F4DF0D0A143484B4BFBD8EFF7FFB2B1B131E626EB743A14141440 + 2291806559B02C0B894402854201AD568BF9F3E783101293F9FEFE7ECC9D3B57 + 2A168B3983C170A1A1A101895EDE937E59C8CCCC9402A8BA75EB56CC6D641806 + 6FBFFD36525252EEE9F57A3921240B3F1C199E52FA14C0A046A359F8ECD9B329 + 9D86E779DCBC79136BD6ACF90DCBB20766CF9EFDAF786D1098E60CD231490F1A + 0C062895CA29BEFCFC7CA4A4A40C00584129CDE1795E4229558EFF2494D21C4A + E92F66CD9AD56B341AA760150A05DE7AEB2D0008038815D8499634834EA77354 + A5522DCAC8C8F8A2BCBC7C53676727B15AAD08854258B4681100EC0D04029EF2 + F2724422919700FAA3D8603088BABA3A6F5656D6EF0A0A0A4E3C7EFC18E17018 + 269309F9F9F920847C0B6057381C76B85CAE841C920E684AA5123B76EC405959 + 1908214B001C0C87C36697CB05954AF594526A3872E448F0C8912371F1AB56AD + C2C18307098096172F5E2C4A4B4B03C7718F00ECA2947E77FFFE7DECDBB76FA2 + 87CF9860D4162C5880DDBB77C368341242C86600BF02F0E7C1C1C11B25252509 + 0F38007CF5D557309BCDF3007C0EE00A802FFBFAFAC23535353877EEDCB47BCF + 68C45DBF7E3DD6AF5F0F814030B1F9D5AB579362B45A2D3EFDF4538844220063 + 1FD16B6B6B937EF6FDBFB27F03E1645135FA40BE770000000049454E44AE4260 + 82} + end> + end + item + Name = 'key-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000027D49444154388D85D04D4813 + 7018C7F1EF7F9B9B9B33D0E99C39F1A514D37CA9A042769040A52CE85007CB5D + 123A18255881E1D183DA2DE8D4A18BD0254412159929612F62A1F9D68BF9922F + 9B9B9B2FF852DB34F7EF920B9DE5737AF8C1F3E1E127D867140AC1C3BB25DC2A + CD8F17425403974098412E029D12EA7A3E4C7DBD5AD588D80FA8BD5DCCFD1B05 + 67A40CB4CEB9DE443B3DFDF87CCBA8D57A8CD13924279CF32B951AEBBBC199A6 + 1020F970149F5AEE452994E2F3C858A37179750C00755824A69813FCF07AF0F9 + 57389979D3AF50684E29F602170B32512A15152E4F7FF01820EF5839A989C54F + B2D3CB26B4E1D14C3BBA3542F02004C8488905285C581AFADB8950A10B8FD994 + 5256036D7A9D8985A56180C210E04F2B86CDAD8D601490BF989DEF510B211C3E + FF4AA5CB33C0E6D63A086150EDBD8F8CD000D8B51A43E64FAF3B984FD96DCCCC + BFD26E07B60089363C06A4B4EF02EE5CB770A528D704248785E9429EDB0E6C06 + F704E36980E620505966A1BEEA42BC10A26BCA6E4B7779FA43809D311A72319B + F29D52CA7A1540A5D5427D55498280AEC9B98EB439E76B84507228C28CD190CD + DA861DAF7F1975582471865C62A3B3BE0397DB7BBE7844A5D54243554922D035 + 31DB7EC4EE7A0B4056DA358C51C791C8264002666011B049C9D3676D03DE8ADA + 6684EF635D12D0353ED39AE258E845A95013A937939D6E055449F3EE35FBCBDE + 71B6031200F7D2062FBA47191A7302A0023AC7A75B521CEE3E00B4E106F232CA + 3780F74ECFDA4ADAF9867F7601A012421C75B8FB2440AAB988089D096072767E + A5F0B96DF8BFC73B1F04C71095815E17572325C323DF9CD43CEA381010FEC1FA + C0EE48E69C2D7D3CBABAEE65CABE7C20F01B3BFEEF2F892D94B3000000004945 + 4E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000034E49444154388D95D45F4C5B + 551CC0F1EFE9BDAC2D6DA1B483CA026CCC923640D1580D46E34C844D0D7BD896 + A9CC071F4C7830319926C6B8C4F86414E56DD117A59ACDBDF92791E1742466CB + 1EA612235D96D0EAB66E8C05292D85D2726FE1DEF6F840D70C6128E7EDFCCE39 + 9FF33BBF9373045BB406AF932FDF7F9167BAFD5621C4AB403FF09010C22EA59C + 06C6249C5C5931E36F0D9D65F8DB71C4FD30877D07974EBF46BBDF171488EF0C + 7339309BFA836CFE36C5E22A769B97066F176E57AB09F25D60E88DC191FB8327 + 4F1C62E085EE6621F82DBD10F3C513DF60160B1B4FE109117CF02816A19E30CD + E2C79B82DEDA6A6E9C7F079BB56A249B9BEA8BC68791B2541E15EC6DDA4FBD37 + 84A6A7F8EBD6F7D4385BE8F41F334B523E6CD90CDCF7682B366B5510E8BB3675 + F61E0C1ED8F9082DBB9E5EB2593DC7BDEEC02FC1D6C3A432575958BAA10AC1F1 + 4DC176BF0FA0472FA4C96B7FAFAF6DB50F601CC927C017E53E7399AB00FB3705 + 592BED6EAD30BF6124BD3009C81E2118050653994900F4C23C209AD4CD410034 + 45B16E086673B788C622A2DED3F9BC564831931C074051760052DF002A8A8570 + 4713C01597631716A15292E6BA398BB99B2CE66EAE8BD5BAF60044D71D59512C + 9CFAE0259E7B32E09092D70D63B9BCF3D6AD4AADA6B13E0C70A692A1A258F8EA + C37E0EF7763A8510A3FA4AE6A9686C18C3D4B6C42C962A3ADA5E4655EC5129E5 + 29B5820DF673A4A7D38510E7F442FA898958845563A9B2B0C6D982A6A7308B7A + 255657EBC7DFD287C3DE90000E4DCD2C18A282F5866A801FB542EAF1682CC2AA + 9103606FF3B3D4389B71BBF62091687A8A52C9C066F550A53A8A204F4B29DF4E + CEE73307063E472D636EE0274D9F7B6C221EC130F200D47B42B434EE5B0162C0 + A7029170D87D5D800D98067901C9ECC88549DEFC688499B925D423BDA13AE0FC + B29E0C4763110C7319809D75ED786AFD00D74DB318BE93CC3276F91AC9F9DCC5 + BBEF35BDA83176F94F12D3994A1954E05C5E9B0D5F8947D65D4047DB312150B2 + 2017EFCC2D113C38F49FB70DA00A21BAAFDFFE41AE6102AF3B008040802C1D95 + F0F3FF92EEC910A45C438485AEC02B02A406144B529A03EF7DCD99D189ED814E + 47631954EEC67BA5E4D7B5CDB6935F196CDB7DF05FFFA2E0C0C0675CFA3DB13D + 0DF8077F0E4A90617700570000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004804944415448899D935D6CD3 + 6514C67FA7FF7F4BB7755BD7420B6363AE5BDC8704243110F44634840F23891A + 42D0A046C0A88960E28D17DE98603431211113E54B12094689A0E21C32901802 + 4826B80C0C0E103BB66E741436F6D196AEFFB6C78B6E730D768AE7EA7DF39E3C + CF799EF3BCC27FA8058DE5EC7BFF5902151E44E431E005E011904A11B554B90A + 1C53D55D885C69BBD8C3BAB7BE20D83380FC1BF8E207AB68FEE4250A9CF69982 + EC169115492BCAE0709078A21F9BCDA4A8C087BB248021764BD10F81B7437D43 + D6B297774D4DE0292DA4EDC01BCC9CEEAA04F9299D49560743470947CE92CE58 + 3AB9D7E12896EAD98F53EE5B08D004ACBED419B18CA908B66C5ECE9285B5A688 + 1C4DA5138DED1DBBE91FEC40C920220260370BA4C45529E9F42891FEF324AD28 + 5E777D1D50E075171D33F3813BA7993CF7C40244580F3C7429F8B58EC47A751C + 18C0EBAE93076AD7609A0592C9A435186A21D4770A57E12CCA7D8B3681EEB1E5 + 23985B3B93D262A700AF0E47437AEBF64505D0B102D1FAC0D31886B33D93D115 + 22B6838139CB704E2BA3B3E7473299A45D848D7909E6D5CD42C00FCC8D0CFC06 + 64F72563659A4E71D88B01F6012DAA6CB3892185CEE924ADA80E8E74022CCD6B + D1185A2D20B1F88DBBDE53A93BC413B728744E7F5D8451606D3A9D241A0F0310 + 8BDFC0535A17C8AB602C2246D69634595BFEB64855F5F7ABFBB933DA5F057C94 + 4ADD79B82378404793230A90D10C809957419644438250E0F43238D229AA9AB3 + E49158AFB69EDF2A0E7B31562A866A365DAAAA054E0FA0A17F5430A3AC8857D6 + 2C46955EE0B6D75D3FD51C24AD113299F4C4BF300C87784A6A50387997029FC7 + C5E1EDEB69ACF11B203B80B2E15828C7A21C9593EEE3E70AFF6231CD4255654F + 0E81DFEBE287ED1B68A8F19922F219B036183AAADDE11313D2275B34F93E7E2E + 2BA9A5BA6229C041D05313CD3E8F8B233B37D018F0DB11F6026BFE0C1DD150F8 + A432162A55559BCD10CD2E308740C4C66CDF220273968B4DCC76555D124F5843 + E664F0861ABF1DF81C78E66AF761EDE93B8DAA2222CCF0CCC5B26272FF7DABB0 + 5271FA07AF90181D101183A2423F333C7329747A51D566D0E75519DAF4EEB788 + CFEBA265E706EAABFD0E11F683AEFAA3AB999EBE9F27BCF57BE74B43ED6A041B + C010D00D343216639004E869609BAA7E1F4F586C7EEF10FB9ADA305B766CA421 + E073025F82AEBA72AD49AF475A73BCADAD5A89606B075A55D92D429B2A6E1166 + 81A4407B5589A7D2699A4F74F0CEC7C7E8084600301B6A7C4EE02B60E5E5CE43 + 1ABE7976C216AFBB1E87DD2586CD0ED09AB4D2AF5DEB1DE0CCF96E5A2F740D0A + 3238AEF2E6ED18AD17BAB8D11FCD49A53936F9CA4B9DDF108E9CCB895C55F9A3 + 52E2AA9C68BED63BC0BCA7B6722F658AC893A1BE338423E72627229B9CECF504 + B00E88DD13F22405924AC527262F715532BFEE4501308C69829250D5DE373F68 + 223210CD0B9497E0EE9F6813C37042762F5DC06550F67EF72BD178F2DE094444 + DC2501ADAEC8FAE174940220C2AEEB91E1E3E19BC36806D2699D12684A05EEE2 + 6ADCC5D5390FAAF0E9C15FD8B2E3F8FF021EAFBF00075922B491D1F85B000000 + 0049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000548494441545885BD96596C54 + 551C87BF33FBBEB4434BE902ADA5BB2250424020511222F88082184431910202 + 821AA2880F3CF02051A2C82ED0CA831262684444401341413084B0B408D34118 + C06EB485B6D3996E73EF74E6FA505A219D9681A2E7F5FCFEE7FBEED9EE110CB2 + 594C3A9E9F94CD8451C319911C775F5F555D0B67DDD51C3AEE21D0168C5A2F06 + 03FE68D1732C796582C16CD2CD016602631124090545815BC039E0FB8E4E79FF + AED233F2BAE25FFB883C92407E6622A51BE793911C3F0F58DFDC7235A9A1A91C + 7F5B15921C00C0A0B363B70E27D1F5344E5B6635B0B2BABE65FFDCF7F770DE5D + FBE80205994339BA7BB1DA61356E6FEF6C5878E5C677B4B6D70E5863B3A4919B + 311BA3C1B5D9DF1A5CF9C2D2AF9473EE9A8717B098749CDDF72EE9C971C53EBF + 77C1A56B7B88444231D5AAD57A9ECA7A03BB75C496BAC6C07B857336D1D4D281 + FA6104D62E9FC6F4C939F3DB3BEBD7965FD93D20DC687061360C21D4D581A244 + 509430777C6E12E2F2C73B6CCECB56B3DEF3D3C9BF629F01A7CD88F7E7D526B3 + 517BFDDCE56D096D1D75517342A8C9CF9C8BCB995703D486BA3A0A2BBCDFAA7D + 81EB40F7728CC97BAB3A148A648D9CF189AC8A5560C6941CCC46DDAB8D3E4FBF + 7080B4A4C9B89C7907C3E14866757DCB44ADC634352F736E58A5D2021068ABC2 + 17F0A66AB5AA59B3A73D49CC02CF8C490778A9A1B17CC09CD39E09B0E5C30D87 + 4305333FC7EDAD3FA9D598CE594DC37A3377C77871C2A8E16862157822250EA0 + D0DF5639602E14EA001831757C16572B1B494D72688064B9ABBD37E36FAD0418 + 979E1217BB80C5ACD7284A64881C6A1B30575D7F0A973377FDF429D94C9F927D + 1358D1E8AB48E90C36F66682B21F21C43081885D80188F6CA0AD8A324FB13335 + 6952B14E63A6D9EFA5AAEEF73E39E5EE88310B04A5AE9010EA26ADC61C1FBA67 + 3AFB93705FDBDB6FBF5E670345A94721F64D5879CB0728E7EDD6B4584BFA6D76 + 4B1AC0F9DA067F6C02368B819CF404802B2E47EEA00512E24701FC70E652D583 + 056C160347BE2C624C5EF202490EACA8BC75625070AB39997847769DA228A507 + 8EB90716B0590C1CFE72018505290B25D9BFABDC532C3AA5A64786AB545A7232 + 6603ACFAF1B827E8AD6AEC5FA0073EAE20759124FB7794794A44A7D43C2878C1 + C8D7311B134B02EDD2DED51B0E03FD9C829E692F2C48592CC9FEED659E621194 + 7C8F0CB79892C8CD7819B369E8EE7038B26CE19A7DDCA8698E2EF02F3C758924 + FBB696794AA2C2356A035DE120298913B159D3B8DD74117F6B153D4754A7B560 + B7743F485CCEDC3B2056B5B64B5F17AD29E5E06F15BDE3DC77B9D82C060EEF28 + 625C7EEAD2A0ECDB52DE0FDC614DA720EB356E375D6658C2B8EBC056603A3056 + 51222E0021547780B3C00105F61E39E1E9F8E0B343BD5FDE47C0663170644711 + 85F9A9CB82B26F737945B108CA2D7DE046838BC282B73BD42ADD6A204B5194F5 + C7CE786B236185B4240776AB410B28ADED5257CD6D3F7F5CF89BFDBF5CC273E3 + 76D4E5D10024C65B38B0F54D46E70C5B1E949A3795794A90A2C0010C7A076A95 + EE94DB5BBF6DFFD1CBD434B4F0CDC10B44224A4F24B627528F40A2CBCA919D45 + 64A70F5911947C1BFB831BF44ED42A3D467DF7D3FBF4C54A3EDE79EC6158D105 + 3E5D3983BCF4C47724B9F98B6EB83F6A30277D160E7BC60DA01D45B93968728F + 80D5A44708D60F04BFA72D3A76FADAF1A01CE2CF6BB71E8F80100221844E92FD + 4A9F4EB50121BAEF2AA1522380A235A5D437B63E16383CE0773C3A6F31165362 + 0BD005A03CE4061BB400DDD429173C35EE9EE9097585FF67010413E66D7BACD0 + A802CF8E5F17FDC9D567673C6681EBD54D5CA8A889FE57FC8FE100FF00DB2427 + D64392E8D30000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000730494441545885BD987B6CD3 + D715C73FF7673B8EED38B613DBE4010986844793F00A8F6E83D202DB2A8D8DC1 + BA8E562BB4A3DDE8FE5C45D76A53356DAA84D64E1B7452BB758552C6061DEB2A + 95958DC0D0508141699A9400210FA0103BB1E3E0C44F887FF6DD1F4E320279D8 + C1EC2B593FFBDE738E3FBAE7FCEEEF77AEE01EA8D06A64C5E20AE6CC2CA6C86E + 1E36175793B45CF171E67C07271BAE924824C78C25B209B6ACD6C5734F2E67E5 + FD15E8B49A6A60255003140339400068937002C9116F4F28F687FDA7786DCF71 + FAC237EE1DA0252F97ED3F59C3A35F9D2784603DB0059817BDE197A1889B9BFD + 41A454D1698D18731DE4E74D415174216017B0D51F88743EF7CA07EC3BD8987D + C01953EDECDFB691CAB2429740EC4E26E35F70FB4EE1F19E2676B367441F4568 + B117545156FC0079C6E290446E9132F9E66FFF7482E75FFDFB305BCDDDC09538 + F339FAF666CA8B6D4B05E26820D856D9D8BC93EEEB4DA889D8A87E9224919817 + 8FEF63E26A446FB34C5FAD084DE9923965072D6683AC3BD172F7801A8DC2C137 + 365159EE58280487DCDEFFE49F6F7F974462E45A1A4DA14807D7FBDA7016542F + 50145DF1A29AC9073AFD413EBDE0B93BC0E7372DE7F1AFCD2F10421CE9F2D7DB + 5BAEBC3FD150F4C7830482972872CC5F2084D2B9749EAB7EF7079F1089F54F0C + D09297CB9E5F3E4EAE5EF79B68ACFBA1B32DBB918CBD5D2842CB9492654C9FF2 + 3025CEC5E4EA6D84221EA4548720D5C40D0AAD3397E7EA75BBB41A4DB8EE440B + CA4400BFFB8D0558CD86E9029E6AFDFC00C9813F194D4268983BFB7B4C9BFC15 + 8F39AFEC1766D3E497CA4B1E6CAFBDEF076834FA213BB7F714E1689719F8F153 + 6B176132E44C0C70CD435500CF04231E4D20D836AE7D89632196BCF26E29E5E2 + DE50F46757DCD75F06161A0DCEF6B2E2076EB1945CEB3C06B0D164D0191E5E36 + 2373408D466171CD14806F7A7B1AD2F2B1592A00F68763FD9DCB37BC4EEDB7B7 + 71AEAD2B08EC1A981B5277E01CC9643C1F58F1C5795333072C2FB6A2CFD13984 + 1095BDC14B69F948290174093589AA4A00925222915AE4F0DA4D265582E16B08 + 21BE545166CF1CB07492050415524A118D75A7E5D3D3DB0CF0A8C56CA83CF6CE + B31CDFF343AA2B8B8A04E2697F6A6E982237BA012A72F53AB499020208B02493 + F1716F8E4175F93FC551705F7EA175F669BBCDF4AEDD668A038FF485AF3A3A3A + 8FDF61AFAA31405804626280524A55884C7628C9D9963D14D9E7E717DA663D2D + 500804DBF0F83E46CAC41DD64228205081CC01E36A02214497100A3AAD89B81A + 491BB2CB5F4F97BF7E5C4B7D8E05A4EC0499790D5EEEB80E92562989994DA599 + BAA725B3A904E0AC3F10C91CD0DF1B25D61FBF09F223BB6D56D6E10CFA028CB9 + 0E011C39D7EECD0C50A351D8BD753D06BDCE02149A0C4559072C712E016894C8 + A6A3A7DAD2AF418D46E18F5B1F63EDAA6A2BF08F48CC37BFA9754F56E1F43916 + 4A272D0178A5C3DBC78986CFD3034CADDC209CF86724D6B5B0E1C25B19DC20E9 + 4830CBB50E45D19D94923F6F7BE72380F1533C98D675ABAA6DC0A17B030795E5 + ABB1592A7A256CB878D9275FDF771218679B195CB95BE016A4E0A25903538496 + 19AE3514D91744A4946BC2D19B9736BCB877A8DB1B15F07F355753001C0A473B + E73734BF859A069C4019F7FD10C0963F9DCAF2D5180DCE0E29F9969A489E79E6 + A5FD7CD6D239643322E0AD7002EA4251CFBC86E61D63C009745A23713542E9A4 + FB714D5E85AFE733FC816642510FF178386525B4980C0EACF9D398543817735E + 6902C94E242FF6F446AE3FF1C25E8E9E6EBB2DF20870A9B4D6140275E1A8676E + 6AE5466B8204B3A73F82D9588AB7A711D7E45509E055A016582684C84DCA0432 + 9940517408219052B602EF03BF07D9FEDEA126B6FCEA006E5F7084E8A3C31D0E + 47DD731A2EEC18B3439BE95A4BB1636100B808D448E4F741EC55D5043A8D2607 + C10CA008D0017D12D90A747BFD613E3CD6CC1BFB4E0E4BE9ED1A4AB13E47CBCE + 97BFC3BA55D5F601B89AF1E07274799438170929E56352CA3A405113C9E40BBF + FE90B7FF7686992E477FA9D3D26435E7360DFA7478FBE8F0F5D17AC53F6ADC3B + 008D061D7FD9F6040FD6563880BA50A4A3A6B179E79870B74A22AF3EFBF3F7F8 + D7A9B6644F6F9448AC1F80FAF36EEACFBBD38A312AA0C990C35FB76F64696DB9 + 4381C3A188BBBAB17907EA28FDADA2E8C8331603A0D31A86C6DBAFF570B5B3F7 + AE604604FCE9E6953C50EB720A210E87231D55A9951BBDF936E80BA8ADDA2C00 + 49960F9F4604B45B4D28426C0F45DC550DCD3BD33E1990244B80408A937E99BA + 661F70E0EAECE9BD98E9B145FF8A277FD7DFE1EB03C0EB0F659B0D002D4220C4 + 589912380B6B867EE5E6580746056E5F1F573DD9AFBBE180E348111AAA2AD60B + 90DD403C352A91B7F78BF748E9F72492AF23E4E9D4D781CFBD29BB61CAA06912 + 7C79D39B1CFB24BD663D5B1A02B4E6BB98CACA3BB1C4848E6FB2A641C0065BFE + 346CF9D346B64AA5F2CE27F9FF41DA8B977DFCFBCCA51F8D6935506BBDA1F41E + 7DD9D47F0108E4FEE9A598F07D0000000049454E44AE426082} + end> + end + item + Name = 'letter-a-arrow-right-2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000026249444154388D9592DD4B93 + 6118C67FCFBBADA1CD59E03ECAAD6D6DC44ED240163518B841A590D01452A183 + 40820291483AEEA484FE8621464893CC980C34124618E1813B98C3478C4E16BD + 3B9829CA5486897B3BA8FCE8A5C0FBF0E6BE7EF7F55CCF2D38469D79FED1686A + 38FB0E18D89E4B2DAD0D3FC6701C40CDE59B55E369C70F21C4CB13EEE0B4C176 + 6ED5F8AFE1FA8E7E4EF89A8FF4144501180314E0BDE5EAAD6BE26FA1D56A6568 + 6888E99A161685A3FA3F479AA67DD03988C7E344A3D190614D99B7ACEE298A00 + 757D932F856F2827EB3134B8108887C0030DEEE81C4C4D4DE1F1783E01F70001 + 3C2D97CBF168348AF5D128E6F397068410FD40747B2E55540E8BC3E1301E8F27 + 0CD4552A95A59595150904AC566BA4ADAD0DC329BB51087105886DCFA58ABA5F + 181C1CC4EFF73F0352939393F3D96C965028A4009D4EA773623CF9AAAA55AB13 + 95854C797DF40968872272381CE472B9062965494A59170C0671381CE4F379AB + 94F2BB94D2D9D4D4A40B72FF095D5D5D984CA6BBC09B5C2EB7B9BCBC4CA95422 + 93C9948171A0AFA7A74707100046A39199991961B7DB3F039D854261B1502800 + E072B90804021781F4CECE8E3F168BED6D6C6CEC038C00ADADADD86CB6EB4208 + 3FB0E0F3F9F0F97CBA6D66B3B9231E8FA74646468E3A48241284C3E1B7C098AA + AAAFCBE5F211616D6D2D5EAFF736D0A7AAEA8DF6F676AAD5DF01BADD6EA4942E + 29E5D77C3E6F6A6C6CD46DB6582C64B35993945295525E8844220721767777C3 + AFA379313B3BBB5B2C167580ADAD2DD2E9F42E300CDCEFEDED3D0078BD5E8016 + 4DD312C9645227FE53C964124DD31240733018DCEFFF04878DDA4677AA0CDB00 + 00000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000032249444154388D9D935F48DB + 5714C73FE7F74B5349893366B82DA9305884B2696AED1882CE0E0591CC3144FA + 0B8E41EDC34A7D1C0C36640F63142C2BB8873D6C1564E0BA1F33E0D8608E2192 + 328AE84BF390FD2EECC1CAFAE06CB7CAFCD35463979C3D545DD3441F7AE0C285 + 7BEFE77CCF39DF2B3C45D8B5112297AF1F15DBF70370A5B89D4BFFF5F9797616 + 6F623D0D101455F2AA9A057EB4AA8EBD51F7FED7F81B4E631FFACEB2B16B2358 + 81EA92850856E8798E441B6611A9159151F11D990BBC9AB82D8796168E72FCCA + 8D6780E68A3A55F7B69F229C4279F340E0C4C404C7EAA27CB4F2E2991D95EB87 + 56F27F825F7C950E5A5B5B696969A92A20B157EE177FBD9317CB27B05910D61E + 02C8BE3A85E704D2C03F8A262B0EC5711C44E4AC4F18BC7422CF7873FEE4D593 + F9E16F4F6D592F5D7B8FDB174EF0E0F7058AAA7502B3C03A90F8776569B30C18 + 0E87E9EAEA02B8F84800007F021F8B488FE338D8D5CF52D570FAA825320BDC07 + 7A1EAEDCDAB8FBD93BE5B6711C07DBB69B45E435E0EACCCC0CB95CEE6F600A18 + 6A6F6FA7FE7804C4CA838E3C0E2B6EDC2BB58D6DDB8C8C8C100C063F015655F5 + 8BE1E1614484A6A6A6BB227209B8B6B3B9B67663FA7B8A0FD6BD9D3F7ECBAF8E + 7F4071E35E79EF3A3B3BF13CAFDA18B36E8C796B72721280582C86E779186332 + C698CBF3F3F3F8FDFE4AED2F2D39994C2222EFEEAAFBD9755D00161717C96432 + 005F02E783C160556F6FEFE1C0FAFA7ADADADAF68631B6B5B555C866B3442211 + 229108E9741A5575019F889C4D26931581FB3EDCB5CAEB22F2B2AADE0A040267 + A6A7A7F72F3EF62B1680A1C6C6C66FE2F138D96CB61CE8F7FBE9EBEBDB532722 + F2DD9399454A3E95168BC516C771324F022D80EEEE6E42A1501DD0A7AAEDAA6A + 031597AADAAA3A2B22438944829A9A9AF2BA5DD7C518F3A131E6A6E779747474 + 54EC0FC0E8E828C698B78D319BC698D0E0E060A9C2582C463C1EB7800BC057CB + CBCBCCCDCD1D084CA552003F01ABC0B981818152607F7F3F22D203D4006E2A95 + A250281C085C5858606969A9008C0117A3D1A8ECBAE31130180C02C480B1EDED + EDDCD4D4D481B0BD705D17551D0772C00BE17078FFEC3FDC4C359A57D9B00E00 + 00000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000043D494441544889A5946F4C55 + 7518C73FCF39E7023705B44BE66EDA9F2DE62001596943672A7A37FE2C504617 + 84743A27C4D6AA17D1F285AEDE98AD5E386A4BD199D67206298C74CBABB8F922 + 4B9356318795C3B5356303D30509DC2B7E7B21A808D7DC7CB6DFCEF93DE739DF + CF799EF37B1EE301CDFF5C1169B5DB3D73DC4F817660EFB59FDAE9FBE455B81E + C5795000808423E961CC1A81B5FE9C7CD2EA3E062F01F7C1D5C19F573A62BEC4 + 168305C01B66D6EDCD7CAA33E1F10CEC7E34FC39CB499AF37CDCE7DE1373499A + B300C06F662D18F988F592BEF0EE25ECF3F9F0F97C4C9DBB08FFF2754B242D35 + BBFD4D9218DB4B1A73FF0C2C01F61876E39E80AD5BB7525858486B8F47E31F5A + 0A6CB943E86EE13B9CA357A338EE4F0E0402844221CC6CC1D353C4548F77A778 + B8C91EAEDFC5750C1770CDCCC5CC055C812BE9B5D1C27F25B43E6E06E17018CF + F31280D79F49BE51DF983D740923E81A336337E83CF6ED0FB1F73FF8105C97D4 + AA77487C320B833A739CED4887046B141D8AC5CD60D5AA55002F02158E9139CD + 27A6FBC84AF1381348A0AC7C712EC9037FE14E7B94C4C73301D59A5903D2D792 + AA141D8CF636D44CDE07CB962D23180C626675C06F40FBC0C0004004B800D4B9 + AE4B696929382E18531C73DE060E0B2A151D8AF5366C64B8EBD4E4808A8A0A80 + 0C337B01D829499B376F26168B09D869668BCC2CBBB2B2121BEAC7B07F252D06 + 2A151D8CF67E54C370D777001301B366CD62E1C28598D9464983923E3F77EE1C + C78F1F27128920E9334983406D3018647EC0E5F2EE37E98FECFEF39FA3BB867B + B76F60B8EBD42DBD0980F2F2721CC77908580B7C09FCDDDCDC8C249A9A9A002E + 034D40B599A554555571ED741B579BB671B5691BC3BF9E1EA7370E9098984859 + 591966566166D324EDE8EFEFA7ADAD0D80B367CFD2DDDD0DB0C3CCA6022FE7E5 + E5317BF6ECC92A3D11909F9F4F201030A046D2F766F6636B6B2BD168F456CCFE + FDFB013A249D016A5DD77556AF5E1D1730AE0FAAABAB019E05E603EB0066CC98 + 417D7DFDAD98949414B8D9AB3B803DC0E2952B579E6C6868606868283E203D3D + 9D79F3E601D48EBA32812D050505E3E68D998D8D07FF685C5D6A6AEAC9E2E262 + 0E1E3C181F307A34A7036100337B6B4CF46EBB6BC095480A9695955D9A0CE000 + 2427275354548499AD01128174499E240FF026BB1F5DE98063661B727272C8CA + CA9A3C83828282B1DAD60047255DDCB76F1F478E1C99F0C298E5E6E6B269D3A6 + 8BC0516023F05E381CBEDED9D9393E5B80E6E666323333979A59BBA4E26834FA + 4D2814A2AFAF2F2EC0755D4E9C38415A5A5AA1991D96F4D2E0E0E0A15028C495 + 2B576E97283B3B9B8C8C0C805724FD2EE9582412B9A738C0C8C808070E1C4052 + 44D205A02E2929899292927171CE8A152B30B3203727E72E6064B463FFD75A5A + 5A88C562234023B0C4CC3226001CC741D2634097A4BDE7CF9FA7A3A3E3BE003D + 3D3DB4B7B703EC057E91F488CFE71B17F31FEF16B50C85883F52000000004945 + 4E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000053E494441545885B5966D6CD3 + 5514879FDB17DA6EA559092F123646030E6432E36AA83019519632529674C16E + 24220A8C618C2E244617F880267E3021F18B31C66D20F80E2D5236086385999A + 81B80410906B0C1147AC6E988D1569593B3A7AFDB24C602B6B47F87D3DE777EF + F33F3DE79E0A1EB1F2765DCE1142EB05EAA2A70FFDD6BFFB6D50C991B8E65103 + A8F8AD7F41858076F31277C1948D3B41FC7FAD7622873A1C0EB66FDF8ECBE522 + 168B71F5EAD594B983BF9FC3B478F5118D56BF08784F9FBBE0B076EAACFEF8CF + C7270EB063C70E4A4B4BBD73E6CC7159ADD6432D2D2D2973EF5CEFE6F6D55F54 + 96BDBC4568754F0B21DE35E43DD1228CD9E1B83C99F94F909797474949C92CC0 + 0518274F9E3CAE675076D0F7F16BC96462F055E02442B45BCA6B6C3955DBD065 + 0AE0F17810426C025A818FDA750B786C47F3CCB4CCB7E3A037D4037B8076CBCA + 9AE7452697EB743A82C1A0D66AB5FE016C0E87C3819DA11C2EC4B292E39AC790 + 4235675401A7D389D56A750183838383C7DD6E37536B3E644AE173B362B11891 + 68E4817E4D760E4237C9047811E8516CCE08A0BABA1A600BD0140804D4F4E9D3 + F1BDFCCC7C882F90F2D7E6AADAAA945E63E132A6BED96014B01730A078E166DB + AEBEB49BD066B361B7DB6DC072A5D45EAFD74B2412018801DF2C5CB870465151 + D1985E43E132A6BEF1A941A3371C047295526591139FF7DEF07E90FE14545555 + 2184A8019AAF5CB9D27BEEDC3942A110E7CF9FFF136817426CF4783CA37C93E6 + D999F6FA279334938CDF0136A5D48AE88FFE7FC2FBDE07D27C098D46236EB75B + 0F6C001AF7EDDB3712F3F97C000D40CDAA55AB3466B3F91EEFF4ADBBF51A6396 + 0F785CC18A5BA70F5D0BEFA907A5D207282F2FC762B1B881702C16FBE1F0E1C3 + 23B163C78E1189445A018DC9645A595151718F5718B30CC00D60C5C0E943DDFD + 9FBD93F92E182EED16A0B1B5B59568343A128BC7E3F8FDFE24B00BA81D6ED411 + 5D6F7A2B1ABBF0FD2B37DB76FD75FDBE4594960A0A0A905216482923524AEB58 + 8D66B3D99052CE9452DEBA74E9526E717171DAE78F5B81E12FAA050E4829C317 + 2F5E1C95D3D5D5C59933677A80A342884D5555A9C7312380ACAC2C56AF5E6D04 + D6030D5EAF3765EEFEFDFB011A814D4EA75367B1581E1EC0E57261369B5F04FE + 8E46A33F1D3D7A34656E2010A0BFBFFF041037180CAE356BD63C3CC070F3D502 + 0D478E1C6160602065EED0D0107EBF5F014DC096B1DE848C008A8A8A282C2C7C + 12784A29F5F570891F289FCF87526A2F503A7BF66C9BC3E118D7937217DCF5F5 + C78410D6C6C646EBB8A7014A2984104121C4E6EAEAEAED9D9D9D0FCC1F731D9B + CD6682C160B6C9640A09214CE95C7CFFB94AA9FE442231A7ACACEC765F5F5FCA + C4312B50515181C9645A0B5C1E181878B6ABAB2BA3DBF3F3F3C9CECEBEA4D7EB + DD959595DEA6A6A68CFC34373723A5EC94526EA8AFAFCFCC0CD4D5D521A5AC93 + 52B6B7B5B5A1D1A4EEF55191E2E262E6CE9D6B07E629A5F63F68F653C9E7F371 + E7CE9D2F81C5B9B9B9F34B4A4AD207185EBBB5C05767CF9E1DC8B4FC003D3D3D + 74747484011F63EC879400393939389D4E0BB016684C67F452C9EBF5A2946A00 + D69796961A67CC98313E406565250683E125E07C381C96814060C2001D1D1D5C + BB76AD130869B55A4FAA97F11E80BBD7EEC18307191A1A9A3040329964B87F1A + 805A8FC7834E377AE846001C0E07F9F9F94B80994AA903C3FF741E4A7EBF9F44 + 22F10DB068DAB4698B962F5F9E1AC06EB703AC03BE3875EAD46028147A6880DE + DE5E82C16004F85608B16EE9D2A5A372466AD2D3D3432291D8AAD7EB4D1319BD + 54F2F97C9495956D4B2693D1EEEEEE51F1FF0081B103AA1E9EE4000000000049 + 454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000072B494441545885C5977B4C54 + F915C73F67E6665864C7F29815C547437C6D7D844D0D9B26A0B54C9BA8913029 + 092374AD6214496AAB6BB26D93DAD6ECBAF661BBD6CDDA9551D1646D04043AA8 + 5DA90A6AEB44AB68826536AD210EA66A4B3AE00A8ED68199D33F188C2CAF6160 + DBF3D7BDB9E79CDF67CEBDDF33E708FF279B79F0EF88C9781BE856D8F3F0F83B + 3C3E7F74909FF13F278B98980C01D2112912D550D29A1DEF018320CD137198CD + 6623313111ABD54A2814A2A7A767D418933509CB17179D44986712D39BC0A397 + 162DFB4B28F0881E5FF3C40126262672FEFC798A8B8BBFBC76EDDA1E9BCDF6E4 + C2850BA3C6FDC77B19F3B4D96A499BE706BE24226FAA6AC74B8B965E0F75FE93 + 9E7F7CD2F743C60BE87038888B8B7B5544AE89C8AE55AB564517180EF1F0E076 + 024D6742A0DF52D55A93C9F4BE494CA5C9EBDF257EC98A89015CB3660D4069E4 + 76525C5C5CF4C1E1109DAE6D049AEA7B158A54B50E93E90331199B6CA5FB885F + B2627C22C9CACA62C68C19F1C01BAAEA02FE7CF5A1992FE46D1D539EDE7FDD41 + 9F057AC492E004AD16E143CC46C856BAAF7C5C80F9F9F988885344ACE1707837 + 10B8F2D04C62DED61F00F3C7924B55FB2F1F2BA24099988D50CC80292929D8ED + 76801255FD18B877F2E449EE5A3321617606F095B1E413917E4891BE4F4F1466 + C60C989F9F8F6118AF89C8EBAA9A7BF3E64D76EEDCC9DCEFBCC79425E945007E + BF9F603018553E73D254D46446E0B740A9A2EFA0EC8A09D06C36E3743AA1AF7A + 77813F1E3F7E9C8C8C0C8E6EFC5A323C5B0C34EDD9732070F4E8D151F3BDFCF5 + F524ADD981C0FB2252AAAABB117EDA75EE486C2ACECACA223535F565A00838D4 + D9D9196E686878D1E50FC0C6828282D1E1ECEBFAE044F68AC8160D877F09ECE8 + 3E7B844F2B76C506E8743A119122204E55CBDD6E37C16090E6E666BABABA3A81 + 6AA064D6AC596465650D9B2721E7DBFD70BF1291ADAAFA6B851F3EBE52C7C38A + 5D400C7D30353595ECEC6C80CD401DD05E535303403018E4D4A953006522F22A + F0D5FCFCFC21F3C42F594172D14F40E4E722B25D557FA3AA6F059ACED059FED6 + 73BF31031616166218C6EB22F21AE0F2783CB4B5B53D7F5E555585AA5E51D5BF + 8AC866BBDD4E4A4ACAA03CB6D27D88C8BB2693E9FBAAFA81AA6E7F72A39E4ED7 + 3608876203349BCD381C0E80CDAA7A5B552F5457570FF0696D6DA5B9B919A00C + 701886F14A24668089D91060BAAA7E08FABD2737EAE928DB3A006ECC80393939 + D86CB644A00038E8F7FBB5B1B17190DFB163C7007E07F400C54EA713B379E05C + D27DF688021B14B63C691A1A6ECC76E0C001BC5EEF77BD5E6FA0A5A52565DBB6 + 6D43FA592C162E5FBE8CD7EB2DF37ABDB75B5A5A64D9B26583FCCC29D331A74C + 07D3F04355D4154C4B4BEB17470950130A853AAAAAAA86F40D0683B8DD6E54D5 + 2522B345E41B91BE39C0421DF70975DC1FB172510316151521224B45640150E6 + F17878F0E0C1B0FE916FF386AA360125D9D9D9A4A6A6467BDCD8002D160B7979 + 79D0278E1655F55454548C18D3D6D6C6D5AB57015CC06AB3D99C365CCB1937A0 + DD6E273939D9067C1370B5B7B7E3F178468DABACAC44552B802722B2A1A0A060 + 9058260430F297B51EE8058E555757130A8DAEB8C6C646FC7E7F803E456FB4D9 + 6CE69C9C9C89054C4F4F27333353804D40656F6FEFA313274E44953C140AF58B + A54C446688C8CAB1BEE651010B0B0B1111BB88CC015C0D0D0DF8FDFEA80F8828 + BD4555AF009BB3B3B3494B4B8B3A5E467A68B158B874E91293274FAE02D281CC + EEEE6EBABBBBA33E0060CA94291886F1868894ABEADC43870EDDDDBB77EFF801 + F3F2F2D8BD7BF734C0070445E4D198C85E30553544E41555FD596767E78FED76 + 7B54C3EC88036BA4B916034F815FC40AF702E452A0382929E9ED9C9C9C9EFAFA + FA516386ADE0FCF9F3A9ADAD3501ADC0C7CF9E3DDB72F8F0E198E1162C58C0F2 + E5CBE7019F00CE6BD7AED51417178F1A376C0523AD65A588CC0A87C3AE868606 + F6EFDF1F3360648EBC6D18C645A0243333B3263D3D1D9FCF3762DC902A8E8F8F + 27373717FA768EABC0ADCACACA98E100DADBDBB978F122F40DB3392232279A95 + 6048C0DCDC5C121212668AC84AC0E5F3F9686A6A1A17203C6F396E55FD3750E2 + 7038B0582C63078C34D38DAAFA48554F7C76288DD53C1E0FF7EEDDEB018E00EB + AC566BDCCA952BC706B878F162162E5C68001B808F82C1E0D3DADADA090184E7 + 2BC12111491691FCA1C6B01101231B5BAE884C035C67CE9C1973631EC9DC6E37 + BDBDBD3E553D0B946464643067CE9CE800AD562B91926F56D53FA9EADFC62B8E + CF5A474707E7CE9D0370894836B0A0B0B0303AC0D5AB57131717375B44EC4059 + 6B6B2BB76EDD9A504078FE9A4FABEA7DA024373797F8F8F8D1011D0E0722B249 + 55FDC0EF27BA7AFD76FDFA757C3E5F082807D64E9A3469D27062190098949404 + 300D280F040241B7DBFDB90042DF4AA0AA87814F81B953A74E1D1D30B2CFAE03 + 7E74FAF4699E3E7DFAB901D6D5D5110C06EFA9EAECAEAEAEE63B77EE0CE9F75F + EF4CF3000C50E7140000000049454E44AE426082} + end> + end + item + Name = 'symbol-cancel' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000024A49444154388D7D924D4F13 + 5114869F3BB70C21CCB4530229346101FDD81857B270618018DAA410D1901835 + 4189280B36AEFC2B6E3512B010BE14A226FE0453371AB0656A49700329A1088D + 9D6668C705D30A05BDCB73EFF3E43DF71C0930E6F7735DD3C895CB941D87FF9D + 6621186F6FE74A4B0B1BA5129EB1B6366642A1AB40F74447C787D1AD2D8E2A95 + 7FC2F39108319F6F18F8E9F778BE293E2901BA81649FA68DAC45A3784F6B17E1 + 709898CF370224816E9F94C85CB9CCA0AE9B4155DD00E682AAFA7550D7CD9542 + A1DE4EB3102C4422C40C63D885C7CD52E9FDF39D1D64D97158291418D0F5ADA0 + AA6ED62403AE04381B3B093C342D6B3D91C9B06BDB885A44AF94AC45A3F469DA + 6D6006B89F2A163F164E4E8819460298071E9996F52E914EB36BDB007F0535C9 + 7A34CA3557E2C03DF7D1C265F0054143923BC06BB73C615AD6DB461840691494 + AB550AB60D8E53AA171DA7F4CBB6F95DAD5E98CEB904CD42301F0A11338C3842 + 2C028FDDAB5738CEDDD4F1F1A7D16CF6DC9EC8B370321C266E1831845802264D + CB5AD9B6ACEF41553511622EA8AA5FFA753DB77A70501FB1ACC16F7A7B891BC6 + 9038859F9896B59C48A799D9DF6750D76B92D9A0AAA6FA352DB7EAEE895481B9 + 9E1EE27EFF90A2284BC0D3AC0BEFDA36B53D71255921C46C575353EA466B6B6E + F5F010F9C0EFE75967E74D29E53230655AD652E36FD7255EEF6650557F082166 + BB3C9ECFC54A655B39011429F36ECF8B978D0AE0A852E1562643AA585C042615 + 29F3154028C07420804F4A5EE6F397C2678F574AA60301EC6A95177B7BFC017C + 800C62BCA5498F0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000002FB49444154388D95D4CF6F14 + 7518C7F1F7F3CC4CBB5B60BE6D0834A949D3740F8410891E3DBBCBC914FE020F + DEC41F07D19228140C3094AAF117DBABEDD1C48351CF96504263178F24C483A9 + 25E86EB4DDDD74B775999D7D3C6CB76ECB56E4394E32AF7CF23C9F190F602408 + 78E1C0010EFB3EC538E659E6783ACDF1741A5F847292202341C0E289130C07C1 + 18B032B9BACA6CA9F4BFB0D34343CC6732F82263B52459C93D78806652A90E76 + 1F98BC313ACAD9E1E167C12681FB073D6FECE4C000DE61DFE7B5A3472B404B44 + 22602B1B8677AB4942A15EDF179B1B1F27507D4F44A6814BC00F5FAFADE115E3 + 986A92900BC33B402C1021B2990BC3BBD566F309F4CC76B240F55D811B061730 + 9BCE974ADC2C95F0000AF53A952421EBDC1DA0B99DB49E736EA9D295F4CC7632 + 5FF59C88CC185C34B83E5B2A71FEE1438036D841AB4942CEB94520D94E5ACF86 + E152B5D964A4AFAFBD33D5730233065340345B2CEE60BBC0EEA4B9305C44A4B3 + D35AD6B9A589A12102D57744E4236BEFEC5A7E0FF604B827E96DC0442432D850 + 919754E46333BB0C5CED85F50477256DA3084402A7800F31BB92EFDAD9DED19E + 4F81DF1B0D9AAD16065511414430A802FCD668ECF75AEF84A79DEB1CE06D55FD + D4CCAE00B7B5BDD34ACEB99F2A714C6173F3E9605769DF12D5CFCCEC2A7019B8 + 057822126156CE0E0E2EF7EAE92E70627090F9F17102CF7B53543F37B36BC0A5 + 7CB1C837EBEBE49CBB05F8A21A61B69E0DC3E54AB3C9BDAEA43BE0441832D7FE + 02DE50D52FCC2C02A63AD7EC3AD40210886A64B09675AE508EE31DD40378250C + F9AA8D9D55D52F81EB0217F756A353A953CE2D18F4894864667FBDEC5C61BDD1 + E0E7AD2DBC63FDFD7C97C9D0E779AFFBBE7F1398062EECD7B3AE9EFE08F4AB6A + 64ADD69FD94387EE2DD76A78C752295E3D72E439DFF7BF073E013EF8AF9E75D0 + CABF684A55A7309B5FD8D8D8F0FF8863FE167974105E047EC9974A9C5F5DDD17 + EB4CE7273C333AFA3E30D7527DB4F2F83102F07C3ACDC98101EAAD16DF96CB4F + C5BA271B860C0701BF361A2CD56AFC03DC0F72280301753C0000000049454E44 + AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004354944415448899D96CD6F13 + 5714C57FF7BDB11D398E634B15290D4581609C455B1221B163CF47480A2D5F09 + 29082502FE95EE900A55851AA512B4451448E2C46EFF83D255A5B2C09660D394 + 458B94716D223CF6F3EDC2E3904048A07735D2E89D73EE79F79E190B20C0FB91 + 08096B010854F93FD521C27B21CE0B559A8008F0E5CE9D5CDEB60D01F93308F4 + 68B1C8935AED9DC0D3D6329FCD32D4D929AAAA05DFE7DCE3C7989E4884CB3D3D + 88C81422333BA2519BCF66E98B46DF1A3C652DB96C96C178DC0233223275389D + E64022810190964B0745644244667AA351EFE7810176C5626FA53C97CDB22F1E + F7446446442680832126A6EA1C4BB59AA27A51557F1491311199EE0D3BD9BD09 + 49DB96C178DC8AC8B4888CA9EA0FA85EFCD7397D1A04986AB3C9916291BF82A0 + 019C57D5DBC0B8884C7F188DDA4236CBAE0DEC4A59CB42CB732B22D3C07878F6 + 42A5D96C9C28957852AB6101969D63D1F71949A59A49CF9B03B2223206EC4A5A + 9B1B49A735EFFB2C3BB7AA7CA1ED794BF904701BF8A2E25CE3D3629107CF9F03 + B408007CE7C8FB3EC3EB49CE027D49CFCB0DA7525AF07D80F6B45844BE159109 + 55BDA3305171AE71BC545A050FEF777DED8EC5C80F0CB0231A8D003781CF81EF + 54756A2908DCB37A9DC1962D3780F3C04FC0B98A73F5E3A512BF56ABEBF05E23 + 00E88BC5F8656080DE482482C84D1139A9AA33AA3A8508023744E482AADE41F5 + 5CA5D9AC8F168BFCB646F9A604AB9D64B3F4C66211815B22F299AACE0084E077 + 15C6AB6F50BE25C13ABB22912822B78013E1AB7BA88E579ACD603370A0B5686F + AAE5468367B51A0A4EA11CAA97F0D995EB75FEAED73783783945AF56DA5AE633 + 1906130923F08D31E622300B3C32226751EDEDF2BCC563E174B547F8AD0852D6 + 92CB6418EAEC3422F2B51833A9AA73C059E02EF0B1183386EAF66E6BF3C7D269 + 5DF07DFC0D485E236867CB60088EC82430A770A6EA5CF04FA3E1BAACBD0F7C44 + 6B193FE8F2BCFC482AA5F90D48CCABE0B3990C83F1B81191EB62CC24300F9CA9 + 38171C2F9538F2E8114B41100067807931665244AEEF88C5CCE2DEBDAF05E46A + 07DDC630B7670F43898488C83563CC25547384CADBD3B2EC1C05DF67249D7649 + 6B67053E09436E5BD2F3F2C3C9248BE532E5B0130B903286D94C86A144C21891 + 6B62CC2520079CAA3A178CAEC91678995DA3E9B4EBB2F61E2109AA3D49CF2B1C + EDEED6C2F2327EB389ED1061B6AF8FFD5D5D62ACFDCA5A7B1958004EB76D79B0 + C186B6B3EB582AE5929E771FD8678C6975624CE1506727F7CB654CB7B5EC4F26 + 1191ABD6982BAABA089CAA3857DB6A899ED46A1C2916590A821A705A5517ADB5 + 5744E46A5F22417F2C167ED144B0D63E54D579E064C5B9DAE816E06B490EB52E + FE05705255E7ADB50F455A21219E08DFF7F773389542444CC5B9E656CA37AA35 + 296C54B5F9FBCA0AC3C5622B8BA2221C482400781A04EFFC47D1AEED9108FD1D + 1D00FCB1B242D939FE036475F9CB147FA2920000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000041F494441545885ED964B4C5C + 5518C7FFDF7D4DC6CE7D646E4C288BD2E00C036966616CED723081C88C55D162 + 5F61D1185BAD9A54E3AB0BF7AE8C26B5D6B630A1F42150DB02DABAAB71DB160B + 050A97C144AD75263EB84880CE9C967B5DCC4CBD03F3242C8CE97F7732E79EDF + EF7C73CE772FF030FFA53CB16E1DBE0B04F0B5CF872A515C9335159E475F6D2D + BE0F04D0A4282B7E27E7E04A7D3D9E94E5B3B0ED6F6277EF9E0D1B0612F7EFAF + 1ECE7118F4FBB15996F78068DBED64724FC3E868CE1CCE3998B72CD8C0251045 + FD6EF7EECBF5F5A8128455C307EAEAB059967783286A0397E62D6BC53CDE39B8 + 32378716551DD545F127228A7A0561BA4555C7064C130B791E2E06EFAFABC316 + 8F67171175D9C02BF154EACC0BB118CCA5A5C2020B968541D34458556FEAA2F8 + 331145BD3C3FFDB4A28C0D9A26166CBB245C26C245BF1F5B3C9E5D1CC77501D8 + 1767EC74C430F0632A55BC0240FA6F18F857E21722EAF4F27CACD9E319EF9B9D + 45AA88848B08176B6BB1559677F23C7F12C0FE3863A722939398CE03CF2BB04C + 624417C5DB1CC7753CEA72C59E52D5F10B333379255C44E8F1FB11D2B41D5C1A + FE5A9CB1EEB06114841714C823F12B1175564BD25448516E2D97C8C29B55F525 + 22EACEC04F868BECBCA4401E893B003AAB25C96894E55B174C1329DB868B08BD + 69781B8053000E940B2F29B04C625817C5DF08E85C9F91B83C3B8B6E9F0F4DAA + DA4669F8EB71C6BACA8503CB1A51B1548922BE0D04E077BB5F06700440FBA265 + 9D7F84E3B603380DE08D0463D116C3C0743259EEB2A52B908DA3123774514C00 + E81089BC003E02F0669CB168253BCFA6EC0A64532349180E062172DC51227AD5 + B6ED63B0ED03A189090C2D2C54BA5C6E2B2E1517113EDDB81122C7B502D86BDB + F619007B41D4FAF1860D50F8B20BFA20653FE138EDAD00BE0470D0063E24E00F + 001DD59234DE28CB93D9DBB1A6028E7BFE3C801E0007E38C1DDF118B61ABC733 + A40B4256622C24CB46251225051CF0E700F402782BC1D8F1F0E4248617173160 + 9A8868DA905710FECC488C56225154C051F66701F401783BCED831E7699FB72C + F49B26C29A36A40BC25F19899B8DB23C558E444101C7CEB765E0EFC419FB225F + 6F7F704535EDBA2E0833004E544BD248A80C89BC022E22F4F87C68D6B42CFCDD + 0463478BDDF3AC4444D3AE7B05C12C5762858003FE0C807300DE4B30F6794B89 + B75A56A23F2D71CD2B08B31989E1902CC70A49E408B888D09B8647007C05E0FD + 386347C215B457C799B8A60BC2DF19891B8D052472043EA9A9C1765D0F0338BF + B4B4F4C1EF8C7D56EA7D5E4862C034115194AB2AC7CD711C77A25A927E6870BB + A7CFCDCCE4CCCDE98455920400ED96651D32193BDC168B550CCF2671EF1E5E9C + 9AC29D64F2B065598700B4AF2FF5A9DFA42898080631B269131E77BB57055E9E + C75C2E5C6D6880110C62A7AEAFC99A0FF3FFCA3F26D30DB717C4E2B200000000 + 49454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000503494441545885EDD76B6C53 + 651CC7F1EFFF9C6E5D2FEBD92CB84ED6B221D1643584193B030144A506450820 + 261A50948817361387C9F6CE1726862D31F10511B988A0885C06845D00271BC4 + 019344494C7829BEA05B7080082BE0B5EDE38B9EC2C6DAF5B22D3186DFCBE69C + 9E4F7EFFF33CE71CB89BBBF98F65717131BF555511AEAAA2A9AC6CDCAEA3033B + 2A2A085755F1CBF4E9CC703A531E37243D9595E45B2CEF89A62DAA763ABF7189 + D079FDFA98E3B65754B0C4ED7688AEB75B75FDD20C87E3E74D972F0F3B561B76 + B208409188D4011FD69496D2E8F58E2D6ECA1416BBDD0E440E0173955285E675 + 931E3F2486C542C0E1E8103044D3EA0067C06E3FEAD275BAC2E151E3B6259A13 + 6907662AA5962BD8BFEEC2057EB879333DB02B1CC6A569543B9D1D984D2A7004 + 1C8EA3852274E5386E1DD85A5ECE920913EC5ABCB9990A9603FB1A42213EB974 + 29E579C3D2150E63E83A0187A30328D6E24DDA030E47A753298EDDB891356E8B + CFC752B7DBAE89B48BC82C60054AEDAB1F01971208D0791BF935708FA669752A + 16B33D62B777E62945779271A4CAC6499378DEEDB6EB164B9B88CC065628A59A + 476A2E2D30812CD275AAE348B7A6EB758814CC2A2AEA0A47A37C9F01B2C9EB65 + 5549895D34AD55D7B439C04B28B5B7A1B7970D6970698109A411471E012698E3 + B6060DA3EB5A1A6493CF478DC763139136119903BC8C527BEA43A18C70190107 + 230371E444730BCA0F1AC6B18114C8269F8F9A92121BD00A3C06AC544AEDCEB4 + B9AC8043904EE711E05E1399F754126493D74BADC763035A80B9266E574316CD + 650D4C208B749DEA38B2C4445A8286713C8134710540ABC0E3C02B28B52BDBE6 + 72022690E63D7918F098FBA41E348CE3B30B0B59E67617002D024FA838EEABFA + DE5E365CBC98352E27E010A4D3791828359BD4265BADA78183C093C0AB28B5B3 + 6114B89C81839101A7F390895C0BBC003C0CAC52F0E5687100C99FD059A4C7EF + 679ADD6E037E1291FB94520781A56D57AFF2E2B973A3FDFBDC1B84F86A5D585C + 6C050E084C53D02D22F301F5A0CDF66DBA7D725C814D5E2F351E8F1538003C05 + BC06BC0B9499E38E050DA33BD53E39AEC041B8FDC41B5B0D7CDE1D0E33D96A6D + 07BC26321A348CEED134993570304E44E6A3D46A607B7D28C43BE7CF2756F760 + 6424681827724566056CF27A59E3F1E40BEC079E065E17D8D6100ADD5AADE6EA + 5626D2676E4191798671229771670C349BCB17D887C833C01BC0670DA1101FDF + B1950C42B601E50275C03F41C338992D32236093D74B4D49493E22CD020B8037 + 81ADF5839ABB339DE13086C5721B196FF2EFA0CB75329B71A705269A43A45944 + 1628780BF8B46104DC2DE4C00086AEAB47E3C80A13F957D0304E658A1C11D818 + C7E509348BC8B34AA935025B928D3525F2F6B85B154C31917FCE338C53998C3B + 25B0313ED63C11D98BC842945A036CCE06970C09DC6F22FF98E772F5A4432605 + 9AAF4C7922B2474416A1540DB079A47B2E0B640B30D544FE1E74B97AAE452229 + 91C3801F9495F1B6C79387C86E81C5D168B416914D63F1E04F2C9C80C3D11A8B + C5A69A9F0F378386F1DDAF91086732F92E5E5F5E4E91C5B2436059241AAD55B1 + D8C6C6BE3E3ECAE16533297260009FA6A9876CB61660AAA6696B817EBBA69DD9 + 79E5CAB0E32D77FE10510AE08B682CD60D6C5ADFDFCFBA31C22552DBD7875524 + FADCC4892B63B158BF887498D74D9F194E273FFAFD9CF5FB79BFB4744C6183A3 + 031B7D3ECEFAFD9CAEACE481828271BBD6DDDCCDFF3AFF02925E33B687F8E77D + 0000000049454E44AE426082} + end> + end + item + Name = 'comment-text-script-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000021049444154388D9D92516852 + 7114C6BFA3D7CD9557175A773551860CB1369A4D9160C42422882230D653510C + 6A0F653DED42837A1954F331F0A528080AF2A1F0A1829E1B3D1945728D72418E + 369C0D47D3742A7F4F2F4D7420D6BEB73F9CEFFC7FE73B8752A994C036A5699A + 5E02005555F97FCD9148840040B7DDDF3725353F92A17BD4C930F43C5C27A246 + 5D4B83E117D73A8FD264FE3702E60A8034882A24AAF0BC9CE16EAAA356AB593A + 12B0D1F450397C441D74DB7F990D02864A01A6531EF44A02C6E247D84D95F604 + FA6A69FE12BF0E5FF1ADDDEF92D62788D0030070C87FC196B3CE1D38DD96A06E + B6C5CE4C7942A5F2E2F94C3E096BAF9B3F7D79DCA855AC238AC73571B7A541B3 + 8CA57C59A60D79A39247F6E7070CD88F2118B8DD921133EF6BDBA026EA81EF2B + E53BC3031E91CEBCD2CFBF9F050006803DD683D8EF3AFB86994FD0D653DEBC4A + BFDFBF7ED46F77FAF6E6E67E64DF4D2D158BD87D204A00B09ABACE230E1FBA0C + E65149D3343D00381C0EC8B22C1445412814427F9FEDA215DF0ACCB8D9AF04CE + 6596E7762EBE1D6A6494914A18749E9C69CC148D46110C068510624DA7D3DDB0 + 88850736F1394D041700680BCF9895CBE8B18E53B5A0F16AF202C6466FFD6EC9 + 80999F10D1742291C8B9BA35D8DCBBAAC9AF4FB9CF7608041D72A9AB8D1C2C26 + 27005E6910A8AA0AAFD78B582C86783C8ED9F0714C4F8E8F017844442E005B37 + 900730F9071FA9CEEE863744350000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000032349444154388DAD945D689B + 5518C77FE77DDFA4316993903669F6661F6DFAB131B6CE8F382FA619AB034761 + 6EF34A41C10943F06337426530BC16645EE88DDEA817155199682FB69B50AD52 + 1971EA2AD8B16CA6937669B326696C629B346FDEC78B426D6AB565F85C1D9EF3 + F03BFFE7F99F73D4C4C4449DFF27BE4926938F1B00C3C3C392C964EE99148BC5 + 88C562001800994C86743A7DCFC0AEAEAED5B5B176A3EEB88F255F64CB20CFDC + 4D514AA9B5B906E0922FC264FCAC628BB1EFE2ABB23ED7006CCEDD62FF1767FF + 51F4AFB14EDD860A67FA9EDA32AFF3DB77FEBB65BDB68427776B23299572B0E7 + A36A60E788A66B79053495B258C15DE22DCF2A5D43552B4BFAC6C0B99B0D28AD + 6E15FC46F5E891DEE22F077B52BD419715766AA2946DA13DB45D6912C670546D + 5D7D7FCDD751D9DC94E6E2EFAF9F31AFDE78B2A776C9D04BC71A4E6BD2002760 + 2352BE6BFA787433536CF7EE039F1F7DCCFFBC6D2F3EF1F38D4F647FEF73A46E + 7F45363FFEF74094C681DDA7837E6FF48D06E006B168967F2B7BF4BECEE24286 + 6269925CF13AD11DC7D8167AB8A1D0E5F4011CD90CE85958ACB55596ED5FBD9E + 084A19DCBEF335EDAD796065329A66B06B5B5C097C2870C900304DB381B2E619 + AA7285E3D379FBB35ED3FD76A4FD91C0F4EC18D3854974671B00F5E51C015FB7 + 34BBCD3F10B9A836FA6D06070705201008303030F05334F0E7C1BEE0DD97EAF5 + EABB57C62FD0123D4773FB490550CE7E2946EE53F6763FBD28225103D0D7B00E + 0323BAAE138FC7E9EFEF9FB4AA0BA7DA1DB388CCBDAFEBAE9777840FED49A7CE + 53489D5F639EA2A332E776BB82AFAD5E11D3344924128781916C362BA1502827 + 623F13B2AEFDE0953B1F032D4077A59A8F5C19BF40EB9EB7D01D2B6DCFA7DF24 + E8F1D1DB7162BAC114114129658742A10F807362550A1E99E9538AE353336362 + 182EC26D0F2A409617C6D10C2F00B65562B9A601F8B575E39B119138F0622291 + 28BC70FA5934B1AE8BC85493D38B6D5B58F58AF85B3AD14B63A8F9CBA8F9CBB4 + 34B9D81E3E04F0DDAAC26AB54A32994C5996C5D0D010A3A3A32B8E4F156A5D3B + 5B4F0603FBDE0375BF52381ED87B66BD8F22223F02AFFC0532544072566C2005 + 0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000040B494441544889CD944B6C5B + 551086FFB9BEF5F5336E1E4EE2C6CECBB87593D08804B7586937C40B16289105 + 412A484120454A41A46A55166C8A5409162C5058755189454A76900D4A90B0DA + A8501E1252D32C702BD06DE3C4519DB876E238378E9FC3C20F1C272DAE60C1AC + E6DC997BFE73BE9939E4F7FBB300C0CC4C4454AD5F45DE95F9F9F92B2200C8B2 + CCB22C8388B890F08FFED3621E8FA798029199599665F87CBED28FFFC688081E + 8F8798F3DB8994372E04FF1344452100102B4FB0DDF01C14B383CA3E3DC9DFB3 + 6EF4CF1D782391F3563A916276D09AF395A762A8342A08146E01004F46D474EF + 3B34FAE79E1D11FE465CD82B2F50799AFF052202EE331000902100AA9482BA07 + B7594CC661D0EB914824745AAD76F35911715A53F3ED8E63E043E968AF6CD60B + D0A93210C0D06C3D82C1E5806E6305472CCD50C2F7616A6983A4CA548F48DA0E + 4F7789A177DF3811549DE8D81A3648D42500EA2275662D888E213F75C1386783 + D3675D58AB0A118163B6C8E2C5B3DD7AED294BE67B81F052BEAC00978D27972D + 089810884F568528A331FA9CEE17A37DCD7C492076DF93BFE6C6FAE76132B6E3 + 9785CF90CD25F77494417704FDDDE3AD44AA0BFB101D646252091C4BFD094968 + 7F21918CF25AE42E92A918EA0F3BE1687F15BBC9CD12CAA2A5330AAB0FD50C57 + 2540E09A643203665E578B06082422B6BD8CC4EE6358CC7D859B828940009506 + 2EC7FC605F0DCA7896FBA70221053BC9ECAC5E234D98EBBA117A7C977F5DFC1C + 2816A390EAEC7C8D2CE6FE2873AE0D8C1D9188C86EB7EF995000F0F97C252122 + EAD9655D6F3421DDD06BB28B1D564F6F78C34FD96C8A4DAD6344A4CEABE45208 + 857DB098FBEB007A1BE0AB2200B6DBEDE8ECEC2C8E3731331705044180DBED16 + 5C2ED7B90405C781D005ADA6FE86ADF9342DADDE448D750C82A8236630677710 + 5CB9C6B178804CC6B64B00BE1499B954870295CB002E3333DB6C36F27ABDD4D4 + D434B5BB1D9938AC338239740BC037AD9633AF07433F61E5E7935C81094BAB37 + D1EB7CA79D8846C5919191526074741443434360660C0F0F93DBED2641100294 + DDF9C06A58D6E879FD228124003951D450436D17D6A2BFC3641BCB3F7600D289 + 256C84E738AEAC9251DF3226FAFDFE9240241229F903030359005799F9631DC5 + 143D87C709B94FF29D92EF2DA3C18AF5CD3F606A3B47C52E4A446EB1B23E8BCD + F843180DD6E3FBDAB480E937667E1FC09D48248247AB3FA2F9B8660300EEF8AF + 712C1EC040DF471048855C46E1C00F3D454425545AA91E605E3F48E03A117D9A + CBE532333333989C9CC4F9B75C38E37C791684E51EC79BAD9B5B0FA13E64208D + 54CB1D564FE5130E496D4443AD93004CEF097ABD5E0C0E0E229D4E636A6A0A0B + 0B0B0080BEAE16DCBEFE1E0441380AE00B00A701E82A372EB30480AF98F9FC5F + 684E516F2395484B0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000003E6494441545885ED966B4CDB + 5518C67FA7372EB613CA6585412730469CDB7473328145EDA6C6666ADCB22E2A + 9A982CC32D66C45B3A252ECA1AA2259933C69A881F306A34F13233C28221048C + 89994ED10C03B1C22697408516F8D3AE5C5ADBE387858549CBE220E30BCFA77F + CEFF3DEF79CEF3BECF3947B85C2E9603FDFDFD389D4E34168B25B21C043A3B3B + D5001A00BBDD2E6FE4E2B5B5B562F65B7523178E851502CB4E40136BF0F7BDEF + 8A58E3D78B8D5F1F890A2162E68C4960D3A9CAA575459CC561A5042B25582941 + 1C02D70B096E01DF015E201A2B46AFD7E3F7FB931624F0BF4B206530C93FF4EC + 43A30D9FEFC89AC6B84A874EAB42303F4D42621226D1813E758A8DEB4C88AEAE + AEC822AF63194A59B3AF7C7F71E3BE1CEF51B59007042217115F5D2999007972 + DC3F757C294A70AECC3475DA96335CE3BFD4FBCA85FE268AF21E6368E4673934 + 722EE6049DD6B06A73D133AFA7184C1797C286ADDB37A4A112E25057CF170482 + 83FC71F1146BB3EF8B3B21140ED0D37F0621A85C0A05FC37EBB53A292329A1B0 + 1F804B931EA6430A96E21A417C0320A5542F0501B3777C262484BA373931E396 + C9692F00BF75D501CCEBADA2BC3D64656CABF48E075D031E65F127A11062D7E8 + 8C1EE0CBACCCBBAE193F36F127C0EEE1D100A5E5EF5D7641BCE078EEC8CBCBC3 + 66B3919E9E2E00820165E7ADBAB3DDAA68D0FD53C7C9644DEA4ED2D63BE6691F + 18FC544EF49EA06CCBAB11954AB7F6C1831F7A34B3CFE3B9309BCD180C86305C + 6D64AD568BD56AA5B4B4D4031CF6FBFD8D0303030024E867586FD2BEB5CEBCFB + 7867CF670487BF896B6D8FEF5775CEEA92235515BBAA627688CBE5C262B184ED + 76FB95FFB3BB4E4B4BFB0478A1ADAD4DA9AEAEC6EBBD5CF342733AED5F3D9FA0 + D3AADDED9DEFE746F5C5A41654CDCBADF4BE43D8D7C8DDB7BF14884A55FE359B + 50A7D361B55A29292919020E2B8A72C6E974D2D0D00040F9C35B78EE89321590 + 180AFD834EABAECBCEDCEE70FF759A496FD3BC7C52862532223CDE76435666F1 + C236CCCFCFC766B361341A3F065E6C6D6D55AAABABF1F97C5762F6DEBF89AD1B + D6FC128D86EF008846C3A4A714493711520BDE406FDAF35F95C5D88537E5D048 + 2BD999C58F2F48A0A2A2621038A4284AD3DC5DC7C0EA1FCFBF2D67CF811D5B5F + 43AB4966ACFB1863DDC762F6824AA50344F602E7B5FC4808F1724B4BCB84C3E1 + B86AD77331363109F07D86F1B6FD83C3670188CA0842A831163A6229C0DFE79F + 9209111F207B6312E8EBEBA3A3A3E3607D7D3DCDCDCDF13802F0ED0F6E9E7EF4 + CE9AFCDC071E999E519266550885037115D06A6EA2A0F04980FA45BF7C542A41 + D30707B8775BC13DC00921C46640BBD01C296500A88B44A247FF059A068C602E + 4AC5000000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000606494441545885ED985F6C53 + 551CC7BFE7DEDBF6B69476EDB6B2756C76735BD980B159FE441422D307FFC0DC + 9C7F32D4888C07C518121F0C714C890AC4C4BF031535FEC1C50731A04F9A1857 + 51023AAC4CA77614A443B676DD286BC7BAAE6B7BFBF301185BECED06AC4113BF + 6FF7FCFE9CCF3DF79CDF39F7B06DDBB6E1DFA8B6B636D8ED76087575756DD71A + 2689F678BDDE8FED763B0400B7381C0E0A0402D71A0A0060B3D960341ABFBBF8 + 2C0080C3E180DBEDBE76541354545404A3D138FECC5D439669E97FC0ABD5BF1E + 5090338CEAF32029D469ED5C3DE4011F1B4DE9230BD857710F46B24BD88C534D + 50E1F72DA4F5FF99D24716B0E8E04E00A01966BA6CFD77E760A06029A2B332D3 + DAB9E1AF7628C383297DE41749C65C44F479330E35513A6FE7943EB280E6CEFD + 330A73A5FAEFCE416FC53D69FFC4B99DFBA11EF2A4F4910554077BA72CA257AB + E9E49705349C3E32A330572A59C0191211708801070078008CA572D668340887 + C3BC2449AE2901DD2B9EBCAAAD8E49B12E438F635D95FF8063B119301944A855 + 3C784E3EA552A58279CE59E825276E28E4A1520AF280B99DFB2129D457B4D511 + AF3831625DB972FD7271B021BBA452CD498F002805989AA5786502003A17030D + 1D5E5B9DF3F2756FAF1F915F2453ACAE94808C7BBCB12A3E78AFC9B491637823 + 38DCCDCD9E9587787C147D677E4E19CB713CE6642EBA4DA5CCA85E5E65B9351D + 73D065D40A0756DB8CC51CC36BC7DCFB389FFF28327445A89CB79E0D0E9DA073 + A1D32913F4FA7EC0D28A4D370BBC7A433A0A757BE95C2D34A270F7C8E880E0F3 + 1F050004CFB9E10F74D1DC9CE5532688C686E1E93F0200EBD23182C33AAD0200 + 4C63D1E02483EFCC512C2C7D88CD595631AD444464480760F6502806003D6A95 + 7192C11FECC24FBFBF4902AF4A1A98977323B20DF38F00D87CA1C9950EC0A5DD + 7D61C4E28936B598058DDA84F0E8C0B83114F6CA062A95B3916D985F4AA0433B + DEB3C70F1C719F2F3366B35936281289C0EB954F7A51F9F9F95028140060C9CD + C9A90A25741D060C1F2CC859B1E258F73E00804A670358F2691F8FF46030781C + 44890C80555B2DA6AF9F7FEB1B30A7D329A5EAD8ED76D3EEDDBB65ED3A9D0EF5 + F5F5282B2B1BAF709148E44323D7BB2187FEB815A0AF1DBFEF4228EC43FE4D1D + 8C718AA47902DDAFD070EF875850F220B20CE59FC6E2D2DA4575AF4200C0A7E0 + DB0260AB9CD166B3A1A6A606A228B627128946C6D831C61844514428620081DA + 18635F94586A6A3B9CEFA2E750D59485DFD3DF8E2CC3FC7A81E70A9E6E5C755A + 282F2F4FEA585B5B8BEDDBB727B55D1CB579F3E645003C07E035B7DB9DD8B265 + 0B3A3B2F9D923F78E13EACBDEB86A7F45ACB1D598672953FE084DEB2094A4D49 + D2BCE1C16F11F0EDC3F08847D06ACC9B1BEEACDC78D98B64F1E2C558B3660D44 + 51FC91881A254972B5B6B6A2A5A505D168143CCFC1569E075129E0AB832EDC7F + 7BE55F82C0BD5F90BB72A33FE08434E6438C25FFCC89E8F9FF93539E362C2C7D + F8518582DF316D40BD5E8FFAFA7A58ADD608113D4B44AF9F3C7932D1DCDC3C69 + D4366F5885E6C76E9B0DE0665C9A3EA774DA7CA6163329D4F72914B3CAC009DA + A4FD28B465381BEC4228DCA7D46A729F9816E092254BB07AF56A88A2F8038046 + 49928EEFD9B307BB76ED42341A9DE47B9DD900002F11251E4B507CBC9DE71430 + EA4AE0899C85B1B8092A5D65D263C3D8F06FD4FF4B037CFE0E1417E4D64E0968 + B158505858384A44CD44D4D2DDDD9D686A6A9A346A49A4F3F98F92ABFBF3F186 + F9C50D98A5310100FA7F7D0898E25260347216602C3725201181317698881AE3 + F1F889D6D656ECDCB9F31FA3365191B138007464E80A1B26B6C7A508F80B3B88 + E1FA262834C549E3C367BE44C8F719544A1D4034200B484400F00980ED2E972B + D1DCDC0CA7D399EA7D0000BFBABC20E013B52A6BABD9B44CE31D680700A8947A + 8C5CD851A2A12E2462C9AF9CE3915E00C09CCC4A00B0CB1E1FAD562BAAABAB11 + 0C06B177EF5E4852CA7A3E2EBD5684EBCBA7A19FADDEC040EFF4F80E6324DC0F + 6B612D4E79EC181A3E95329E713C72B36C3065568488A82A2DB7570FDCB9081F + BDF8001863B5009E618C2D00204E333C4E443F11D1A6B89470FC0DD62141D049 + 343CCC0000000049454E44AE426082} + end> + end + item + Name = 'control-tree-script-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000025149444154388D8D925F4853 + 6118C69FEF9C13EE7436E6BFB168BAA98731DC8C24264224279391603210B488 + 86D44557A34B83A011BBB00CBAE9324AB03F54205D045E14689C14BA4C3A2B50 + 996CE5994EEBB8DAB4CD6D7D5DD4A4D5A9F65C7DBC3CEFEFFBBEE77D89637CB9 + 880A958B29EC5AD85F56E300E0C0930BF47FCDCAC04DA257672ABDFD6FE2FE45 + AF08908B296CB560C0D56E7B880570652E114EA432BAE6FC6AF44F40EAFA4974 + F87C70F58F0100DAE627B05EB02157DFB26B4ACFDC4336F252174ADC6E372627 + 272500A19FB5F0E8E21E7956638B2C8A778E991323BD5BCF53CCE64A59230510 + 53B51F190090A2D1A80400A228864E3714E4398D993B55BB141C698CDC3230A6 + 41425AF93200A56B00FC1C74C411C0CC151F07ACCB03D9AD68E083A6A0AEDA45 + DF2C4CEC7AAC75EDD65671F05A09208BA22897BEF04865E5FC377AB686CB99B2 + 190D6B1BAFD1DCE04377E768D9B428A5FB5900100421EEF1789A00C4A7A6A6EE + BE48F14857D5CEF754AB9F9A4C55C195E42B26AECE20A64E23A64E633BFB1196 + 1ACF334AE961C662B16068684802200190FAFAFA24574B138A6036EF6F38358E + E56F37DB7AC0D74AB0774588BD2B4232A8C74EFECB714248BB6E8881C682BCFA + 353FECE23FA729C5659BB5F34C3C3126BC9F6DDB5DF938B70DA7E3C425DD106D + 069AB9E15C7EEA62179618424480438D59A4D47A1E7CDD51B2937E4B93CA309C + 8EFEDE5F430C97CE0F5556F6ED4D81087447597C40F7D51F020183F577C1D20A + C06C7400A04962341AE1F57ACB5EB0E2F123D061C0C583A92300C609212280DF + 27A00138F71DF3F7DC8C19A3A6440000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000037E49444154388D95935D4C9B + 5518C77FE77DDFD2A69496B4A5B405062D8E35618CCD30C9826E995CB8189669 + 96CCCC64D12D5C61741733C4C405B31B4DD45B8D2646605E78A11850C28D8933 + 13B6256E459A8D013A3E1CA52085B6B4635DBF8E17A6A48CB0E1939C9BF3FCF3 + 3BFFE7E388EAAFA7B3FCFFF8353971A375E9E3D7B7243400D7589F34C4823B22 + 45AA9B8956376F9BD7000CB120A6F05F3B023E28DBFDC4BC0690B454EC080690 + 325A9F0E0C359E143B263E25144005D4264B56FDBE2939DB55973A6BD3E5D4FC + FD36A7755B8773E7BC005CEAE9A1587B8E43D61C3F7DFA2E816BA3E877376D12 + 6763CB246F5F7DA2430DA0A7A7079FCFB771D9DEDE4EF509957EB9E708700448 + 0AE437C573374289950088C73B2401C162388E00181F1FAF00AE02954014E8BD + 19553A3FFA53D7B59ECEBD5DAAA55ADB9D9381D3F6E93A939A760AB19928A594 + 40607E2916D50A9CD60C0E0ECAFAFA7A9BC7E339B1B724677FC19A6DBCB22C3A + CFBB6E4F9E2A9B19D2291C83ADF3134220A5FCA7B2DCF2BCB625BB210255209F + 31AE7FD7669B7F5366132F8D4E7C2B1BEACE30353BC0D2CA588156A171CFD9B2 + 52B3B72B0FCC00B36D6D6DF992072613A2F37A44BD50AB7F9430A9294F34B640 + 343E43387A176FD5315C8E839B0C188A2C00473580603018B4DBEDB57ABDFE1E + 702912895C9E585689A41DBF3FD209554A71C75C5C81101AB3C12B94DB56C897 + AE281AD5AEC34242B7842105A0BFBF9F7038BCF19ADFEFC7EFF703CCDD4B9A77 + DD4AD87ED034E36A4579330F9361E657670825D60825D6F83B3C457C7D410231 + A4EC53017A7B7B6D66B3F933A009707BBD5EA5C8E51DBD1E51CEA7A4F27E91C8 + 7D7ED4127A6031ED7A39B47C1373CD3B586BDF13A6F25784508DC4978628B3EE + DD077C95EFA1097823100848B7DBDD62B7DB3960C9650E5BB3E6E944FA55872E + 8994E24B5535BC55E56CF14D4F5D6475EAA22C182135C965A3D1507641296CEC + F0F0300B0B0B00FB4D2A1F9CA94A8F7D58F347ACC3353E20043F03250E5B0300 + 36DF27381ABA713474A32BAE637EF11AC0E94D6BD3D1D1915FB2BE8739CE2932 + 4BA371719F2A387E3F342235CD80D3FEAC00646A6D0C45330390CBC449A51580 + D23C701EF016B01323AB2A97E724BFD467EE4A45DED717992BD3997532D9A42C + 2DF1407C64435CA23750E96C01F84D00B8DD6E1E0F597B90DCA1D7F8F1C5391A + CB39007C0162BF10E8B688FFFB7DB78053FF02B4414AEC5D1E4F7D0000000049 + 454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004A04944415448899595596CD4 + 5514C67F6776DA59A81D9ACED0292D05E954B485460214521162104D4D082F6A + C468D2B45583A1C1185F5C883EC803442351424242144D44222068144BA88A04 + 13A57581084A5BEC3653683B9DCED265FEC7872E99D65ACA793A37B9DFFDCEFD + CE77EE954587AEA70054554544E69AA7AD77C79B1A76F7BC5BCD4C6101C8ECB9 + A6993DD74044C791B7CF8150F1E6190F9D42A0AA9AD9738D9C2B5FE96D77A787 + 08A1E2CDA23A3BCC22223251D59D4A348E999D0020E65D42B8644BFACEB9E473 + 0A8BAAEAA0770983DE25778A05602E12590032CCCA930B472BB7FA53674F759B + 1EFCA4C3DAD83B22A8EAA40CE9F94CEB1909BADEA80260CDFDE53CF2FACB003C + 9463F0EB89837C7AFC14E2C89CB9F2A1F898AB002311FD7F82E1B6DF292F2FE7 + 3E9F1B9B28AAA85560993793D54BF3687D7CFF8CC08EFA35A422E159AB87F1A6 + 1D3D7A949292925211A904F6A9EA4E11698CA768DEFA931D1149018AEA17D9D6 + E44B1B3C5D7FE55CF8001D8ECF7AF8D73FFC3985A041441E80493B368E1A6C7C + F3AA958BFDE69418A31F2ECB883CFB82EFB2B9C21DDE92611A2D016CD3FBA328 + 2851E0886168C892CED8D9D9A9274F9EA4AAAA0A9FCF5766166978BE70848B97 + 4CFD59D691FA7ADF6FF3D67BC2DF9844574F60D25D34CD513B44583585608A76 + 22A8825920C3CCB72B9C7DBDABDD377799C45873E5EFCF3427FB5E3CAE022E5C + DA43CA189A3284CE0C3FE5F7D4E68B98774E21F0FBFD525B5B8B8E95D264C0C6 + 23ED1654793BDF1EC56E4AAD480CF56AE8561343C311B2E717B3B4E0519243FD + 93FD9C8891D198DAACEEC7D209EA814A60DF78DE3864C0E9901911F198315034 + 6CB338318985C8E00D12C99BF816AC1C7F4650110464E23618AAD7CD00C96492 + 8181815030187400DB813DE7CE9DBB78ECF313B405D6019CF2DB636C7077A5AC + 66F353F1640FD158A7B6872ED0D2DEA02DED0DDADAD1404B7B83DA6DF37165FA + 7B4173500E5B002A2A2A282B2B9B984A515582C1209E05B9344641445E3D3F90 + FBF1CF83DE86B5EE707361DEA6D29EBECB924A0DAB27BF5A446C2880314C77CF + 197C0BCAEF02791AF47D13405151118140602FB0775CAEBDB9B9B97B4B8241DC + 56005EEB4FD9777D1FF529B0739E235B03B9EB0070E755E35954279EFC3ADC81 + 6A22D1568D44DB007601F6F41E94261289D2CECE4EF5FBFDA50E87039B492A9F + 2B18617F8BE5B0D394DC611303551A8163F9BEF5DBDABBCFF3CF8FAB1498E2CF + D68EB394163F532022DBA7CF01070E1CA0A6A686A2A2A23281B395D946243112 + 0B2CB73439D6BABAEB45C40E18168B43BC5925847AFFC013A846C76D349268A5 + AFE74B8DC63AC495B9B07ABA4DA9A9A9C1EFF70334A9529F528D3E9CDD17CB37 + 42B51631DE1A73CA982B5DCE3CC2FD57F12CAA930917256E356A2C7C9AFE680B + 2E675E309DA0D9E170B078F162C66CA7CD232A8D876E58D9E41CA0C095EA03F8 + E5F2418D44DBA858F90A2631638CC6B4EDBBE513124D4A35CF9E0DAA610B4022 + 91201E8FD7332D128670BC2B8BAC1C8B6C74CA69446F2C5FFA447EFF400B36AB + 531CF62C2DCCDBF49F0FC16E73E1CD2A16E0C8ACBF8558ED78EBDEA33023CE99 + 6D09EC66BD1B7807580764CC024D001FA9EA8BFF02581022B7D8491E66000000 + 0049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000449494441545885ED566D6C53 + 55187E6E6FBB8F6E17BADA0FF641479930B4DE6D4A2DD138581921248B09A853 + 83464D886651D82F33CC22916C125C034A883571FC30316AD419FC66FF3042D4 + 298305F1364EB6AE14B76E775B3F76D947D79E7BFC43E7BAB566E3DE9FBEC94D + 6E72DFF39EE7BCE77D9EE7326B1F3D881C7B35D48CA47803914FDF5C51AE36C7 + 5E0D7D4D3D5113403C708D5D69AE36F5C29F6DA66A6C7EEDB1D3CC6AF2356A6C + AA24FE07B03003ABBD3BD50024C51BCBA676CFBD6568A9CA27EFF527D82FFA02 + AB2E9A080D2A43E5F57AE1F3F948575797B2422B88B4B637353581E779F03C0F + 93C9442449627B7B7B110C06D1D1D101005043B8160B9576F1079EE7E176BB17 + 4489E338E276BB2108C2C215A9215C8BAF5C9B29A1A5A56541943C1E0F63B3D9 + E0F57A01007F181D38377BE7C2B574D83302581AA94E00801BC0B99E3BD93A73 + AC08C0ECEC2CEBF7FB0100BD3A3B803CD5BC2323008FC793D626BFDF8FC6C646 + 0080B9F90CF435F5AAE9461A806030084110589BCD068EE348EAE48383FFF23A + 936EAC3616EB441A80582C06511461B55AC1711C92C924445144241259C891A7 + A320517159D1A2C08F78DE3E812D760B00064C96FE5000300291B6469CFAF0A2 + 2A34A4BAE4EC131F34D26FB7164E1E06708001B31E4CF6F9A2143180BED3B0E3 + 9E36C5349435ECAF5BEA6ABFBABF20792C2A0DBD3618EC46A57D2F46C44B7444 + FC2D23801C1DB7A6AAF285370CDC3AFF8ADCF0762788DBED2687AA0D690CD0C8 + E4FC6EC330340C6DF20D7C0E697A187FFACFA2BCA42E6BBDF9848481E0F76018 + 342BA6612277CD54A1D190432931CC27A60000B76642989B8FC2ED3A967D1800 + 504A59C53464E3B7CA47F22ECF3B99D1803ECFBC61666E1C00D0E7EB046ECFDC + E2A8B4EF43B1D9D93C1E99F6DE0C45D37F4852349424894D9D5C100436130D53 + CF4C68E860301C0780AE62CB83594F9B8A70EC2F0068189B94F0F033EFAA43C3 + CF0206ECDD183F5D6A71BDF2F7E84F7A6DD14EDCB5B97D59EFA5E18FE864E024 + 0889EF7254588B6BB7DA43AAB8A128938B677EFFA1EEA873E6ADBB6D0D6DC2C0 + 27981EFB32AB598526AEB065D6870EB5BE54DFAA98861408C86CEE05815B6B99 + 76D84F988D8E17B982D2F572A10B4515ADCB6A4703A77033F41D4A2DAE97B73B + 379E50EA8663464EB7EDA99D659152933E4FA3010BA0B3C4B2ADBD7FE86BCC8C + 772FAB456982821226347E992BB6B894D130A9CBFF664FAD6D7297D374459613 + 3500852C27603254D27E1014551C45E1BA7D4B6781090F1EA723E27994585C4F + 2BA2A1762E96D0955F023069EDB9FA364DE9C0230FBC0E9D568FF0F523085F3F + 927116349A1C004C4946375C9A9CCD0DE300C266020017CC46C793C363BF0000 + 644AC0302C8C9BDA337500A3579FA5B96402000D28F6F4C777F3F8B863FF7D44 + 8EF7F806BAF2E71353E0373F879FFB8E675DA3D316C0B1693F0CDC86571503D0 + 681874BF7F003B9C15DB019C6418A60A80EEBFD6504A25009D84C887FF0151C3 + 30342425C7900000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000793494441545885ED986D6C53 + E715C77FD776ECC4761C27711227A6C19018081402D4A35A1596366990A8A62C + DABA5551DBB9EB40A3EC035A98BA6EEDB2956E822258B5699BD6AED580691FA6 + 0E0DA18D69B03010A41B21033CAAC401161282839D382FC42F8913DBCF3EF885 + C42FB421619FF6FF60DF73EEF3F2D3BDCF73CE79AEA4DDFC1554162BFF0BDD3D + F12B42AEDE79F551A82C56B435CFFE04A87E385809B5F8DA8FDAE70D18FBAFD6 + 0C5FAFD5786E2C3E163054B55502F40FD2370E88C6738392EEBF2C1AD46C0D55 + 6D7DE0BEB245E47828FA3FE0429558837E4325EE05AC9587A538A0DD5F64C15F + 6449DC902130650B738E1C7D5F40BA322DA485CE35FE408033AE5EA61CFF6C49 + BE61292DE48D75E5ADF94A51FBDB6B81FA0F3BAE2D1490486062C16324D4D4D4 + 445757576B575757DBA14387166FE0794A91ECD8B2650B6AB59A8D1B37267C06 + 8381A6A62600CE9F3F8FC7E3014065B1A2285EBAE8509357CF129988CE91B2B0 + 4E9D3A85C9646A8D99B58019381CB30FDB6CB6FE8B172F0250F8F27EB435CF7E + 35D666B174D8F576737FB0E70290E609C6F483C1C14131393919B75B2B2A2A24 + E02CD09FD4D696E51FA9550646174CE62FB2A4CC910990E3C78FD3DB7B2FB1EF + DFBF1F8003070E303D3D0D803D5CC8076E81F656C7A2A4C9AB5FFC598A2F2360 + 069D2E2A2A4A1826E08C4FE006B130B4CC9A2FE0B7007BDCF88F5FC23DC5432D + D532025AAD562A2A2A92DDF6BD7BF79E75381C00CC3CFD0AE396DA71F543CC42 + 9900CF58AD5688EE4E3D7025E61F77381C2476F1DA2FA3B548295968819A9371 + 5200ED763B4EA7B3DE6030B07CF9F256A0766262A23EFED4BC5E6FA26DA62CB4 + 50CDCE3829806EB79B6030885C2E4FF882C1204EA733719D18C83B4AC8733BE3 + 44CAB69FF37CDD32569AE31B4B4A13799324806D6BB8D253C0FB7FB8903150B7 + C54C33735F718BCD66B32705EAD44D2222D74BB22677FE69E59F233AA5580FD8 + 801520E548F70114D19F19101F09210EB45FEEF3675A834F7676768AB1B1B1B8 + 5DDBD0D020017A83C140595919002A8D9A08A25A337C63CE79662AAFECAD1737 + 8623B94AB113F8E9B8F7A62C576322149AE4CEF0BF32130232999C92C2EAA755 + 4A7DDD131BCCF51977716767E79C40DDD0D000507DF0E0C184AFC727F1E36B42 + 2FCD3ACF08E8D19618CF346FA9AC94E01D47EF5199CB7309BD6E39EB57BD2C8D + DEBD2E267CB7EE0B79DBF50F36ADDB55A390E76C9B6F1C7C67B6B1522B306633 + 27504B70E1D18269B459E20BFEC92185CB730980F1895E3C63DD6289F109BA6E + DC1F707AC68BD3DDC1D2B2DA97E60B5847345702D03126E3A65F6A53478B0A00 + C272A5575D5808501C9C9E5BA3BA862FB176C50B52C9E3EB3ED5644288FC8C80 + 8D8D8DCC2A1612B2D96C246D1282E59BF01B2AA30D22E1E25B45A3C0C0408EAA + 604E5FCF7837173FFE8550C85569E734193F4B51FE9A0EE0B598AB2713E09BB1 + 8D905C6EF5A5697B7846537876465318B58470F5AB878181B69C6C03EA9C6202 + 934389C6BEC060862941A9CCA5287FCD0A8168DFFBEBD3A1331DBDA971F0C891 + 23E874BA3DAB56ADA2BEBEBE15C0E974EE3976EC18B1EB44DBC0E55384469C47 + 92C7F8B77206F1DD47BA258973E5C6CD9B1D378F02A0D23D0652FA8364686A80 + D1F16B0811D18354B7D25C7C72CF2FFF96BEA2361A8DA8D5EA846F76457DEEDC + 390607A34F4165B1A2B1A6E6E020F0FD3E3F6F9AED6F198B369CBCED6EC71770 + 51BCF67D499265A5051CBB7950786FFF8691710786FCD52F353EB5FAE4F22505 + A98046A31193C9149EED53A9546193C90450A752A9129B44AECD476158D2063C + 9934CCCC89C1A1B58D39F2B64D4671CC626E6CBADCF51E03ED1B3EB12C73BA2F + 60C85FF325855C56FEEAD79FBA75BF8255C49F14C08E1D3B24809A9A1A62B0DC + AD28A70F81AEBF43E4F75F98D55B0A0899FC1BA746C5B7377DDED092A7356F35 + E4AF5679C6BAC833EF42A94E5F580446FFCE98EB285EBF53A15597BDD6FCCCFA + 9D1901070707E704EA986CDBB76F4F841477105A1DC23C1518457B2F93EC53A8 + 947B0CFA9CE9F0988250B8A05FA1907D505EFAB99D9EB12EC241173352FAD71C + 998E1E1BFA9C6DAC5DF1E2D7B2B2E47BE71B07AB81C4312E5701D932F453F7EE + 9F2BD6ABDEF8CEF355B9E5259A7A49225E71F4E9B48F4839D985C277E7F76469 + AA9029B46927C8D2563132DE8D2F7047A955977E73BE802DDDDDDD67E3259743 + 5349FF64695B5E2C50CF64EBFE6ADD58CA52A3E66D21223BC29150A2A35C9645 + 81CE82736A8482CAD751E9D6A72D1B82DEABC27DA51997E73295E5A54D1901E3 + 6B2E59FBF6ED4B09D443555BA5A1AAAD28BDEE90CCF431E0D1B93C9744CFCD3F + 26FAADA96C46A32E06C06D7F013EE11C3339350292549A09B02E83FF4A1A5F0B + B1AFA7D3B925B726D4C380E7B25EB7AC7976A350780A792C83E457BC4E96BA32 + ED0481E113F85C1FA252EA4088A114C0DDBB77333B94242B5E5943F4A3B8AFFD + A87DF6FD6BB526C42B9FF95D8ECAF0C3B2E2C7D58343D1DDAD52E6E18F659469 + 5F37919931D22934152D804B0AD7039C5EF027AB64E569B3E939F12A79B939DB + 24C4BB03AE8FF007DCAC5CD6449FF33477BD7DF7ED2FC9E4941A1EA3B8709D4F + 08B161D101019E7BA69A433F7A0E49929A80EF4992F42890FD29BB8784101785 + 10BB42E148E77F019C50ECCDC04979A30000000049454E44AE426082} + end> + end + item + Name = 'documents-script-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000025949444154388D75925F4853 + 7114C7BFE7DE3B72EC869696D6C6525686A2357C19D1568CFE988248813E4456 + F6DC825EF610F41454D7D7B59711B2A097AE041106F510412E18D1C55077A124 + 9892C3B5BA2EB7B4BB394F0F91ACE1FD3D9EEF970FDFF3FD1D42CD8B46A30806 + 8395DA390030F33A80814422F126140AA1542A41DACE0800E170986B67636363 + 76D3349FF9FDFEFE4824F22E140A81A2D1E87FA6EEEE6ED86C36689A86643279 + 319FCFC7894804004551108BC5787474B4204952EFE4E4E47BD275DD326E3A9D + 1E5055B5D5308C18004151946A7D25954A3591AEEB158BB8649A663193C9F4AB + AA7AC4308C0800FAA72B8A82542A250A561D00403C1E77B85CAEA77D7D7D2F89 + E826336B00344992B472B93C0FC0BA4400B87279641C6B5FC3C7DB29DF70BE3D + 525C3323CC8043965157FC08976CC27205511413372E9D387BECE0464C000F11 + C15ED3D1328041CB04844DB5ADE1E785D542762467CCA2B1E130CF7C7AB4A537 + 377A9B3B3C43F72D0102D1BA7D87B8F3B7696039378D36D719047D77A9DAC3CC + FB2D01E58D4DDF97A5E23DEFA18ECAFCC20B31A1DD01000680BD8D47D1E9197E + C5CCFD96BFC0C07062266748A2FD619BF314ECBB4FC21D982377608E8A6842A9 + BCDA4B445E2B003BEAC4ABADFB1C0566DC7636FB7E6DAC7EC0E254172F4E75F1 + DA8FD758C8BC05805BDB020441489FF6B53E1F0CB8E60581728220C9BBEA3DD8 + D3F900EEC01CB5789F20FB7D1A009D9380BF57570DA8542A32AD4C83B0549AFD + FC985B9A7A4010F04DBFBED543BD7C00006769626262DB1D9C72013D2D593F80 + 7122F2A0EA8C0180990D00D7FE00C164FFDB3156AFFE0000000049454E44AE42 + 6082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000037649444154388D85925D4C9B + 5518C77FE7ED5B6025F4636D292BEDC6476433DA6D8E4E2FB64C2625109335E1 + 42E32E4C207324663726265E9045AFB8D22BAFF0AAF5CAC44C6137441D9B38B3 + C5400B9B09A0685A58294C858EB745F6D28FF778E15870547AAE4ECEF93DBFFC + 9FE71C4199353434446F6FEF4DA0A3DC3D8094322BA5EC5E5F5F9FECEBEB2399 + 4C02A0FE5F01402C1693B1586CCFB9D7EB251C0E5B813197CBD5158D466776A4 + AAD7EBDD5360B15828140A9F6B9AF6C3F2F232F97CFE1D600F188FC7EDEDEDED + DFB85CAED72291C86C7F7F3FEAF8F8F8ABE5D21986B1140C0697DC6E776A6262 + E2CB743A7D0BF000082100989E9EC6E7F3393D1ECF776EB7FBFCE0E0E0820ADC + 2A275414059BCD462010D01C0E47F7C8C848773A9DBE09387798818101F164DB + 20A5FC5455D51E313737571A1E1E968944628FB4ABAB8BCECE4E84108F52A954 + 687474D4944EA76F00F6DD5C281422140A4D4C4D4D752AE5D2ED5E8B8B8BCCCC + CC38FC7EFFB7E1705877381CAF4B2973CF723B63D8F79501EC763B894442D734 + EDDA617FA3EB85E79FBB3D3935D52E0D7C08505533AA49886DFDB1A9A23093C9 + 90CBE532A74FBD18728AE4CFF525ADED4A77F5B9CB1D2F8B42D1403E49A656E9 + 8649DCBD676BD2F717C6E3711289DF3F78EFAD93BFFABDA531057A50C07CE0D9 + 32032937FFF4DA385BA965C38C7EADE9A0DE572C6E77CFFEF6850CB4BDCDC2E2 + 75FE58BFFF141242E1C4D17EB7DDDAF26125E196D562DE3C506D6ADEC8AEB091 + 4BB2B6314F8BBF8743F5A7FF03D654D900CE5712D666B70A2E3D6FCC5A6B1B11 + 426531FD3D1EE73AF0EFAB2A8ACA9143E784848884B14ADF4664B2F90BBF2C69 + 5FABAA25D3E87985C7FA1ACB9924AB9B595637B33C585B20B7B522010D29BFAA + F80F8B25F9EEE47CE66FE0A3E6C64ECC6A2D56FF253CC723C2733C22ACFE4B3C + 58B90D701970576A3961AB35F71EB45621A5F8CC64AAB9E26F38732CB17095CC + C255B9AB119AF4BF2C961AF7FBFB265455D32717BB8E686F741CBE2E043780BA + 7A670000E7B18FA90F44A80F4430D7B6B1FCF02EC0451520180CD2DADABA4728 + 8DD2C31347F32D8AC285D4EA1DA9AA3534B84E0940E6B3F751542B00463147BE + A000D8556022180C964DB8BDAD9B2DF2A77929B5547595D557286E512CE9D25E + D70CB93B4FB9BAEA1A7C0D67007E14D16874DF219E6D7A84CFA6BF040C833829 + 04E632989452C68137FF01B93F5728A7731F2A0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004964944415448898D555D4C53 + 67187EDEF6F44769A9055D68F929B43A19B21824A8CB5888B3C0B298B864BB71 + 175B30C3605C341A7BB11B0C5D9698992CF1C22BBC5AF466D9ECC5C060BB1134 + D9CFCD36988E19C09F3240282265475A7EDAF3ECA22D3B2228EFD5F3E5FBDEEF + 7D9FE77DCEF904EB442010404B4B4B3BC97611110020C91CD6AF493E267990E4 + 9D73E7CEE1DAB56B2BF728EB15D047241261F64288087505E0F3F9E8F3F9B602 + E811117F4747C75D920885422F2F4066EE0A87C35CEF8C8888D7EBA5AAAA4576 + BBFD86C16078BBA3A3E31E0084422128814060CDC4BABA3A00088E8E8E061B1A + 1A3030306055553544B249D700B335D0D9D9C963C78E15DB6CB688D1683C100C + 06A3A9540A323838D8AEA30F3D26099248A55298989808F5F6F6DE1B1A1AEA22 + D9902BD0D8D8288D8D8D88442274B95CA8AEAE1692C3240FF6F5F58D2B24DB57 + 4BA2C7220293C9048FC7D3D6DCDCECD734EDBD919191EB9AA6EDD713F1FBFD7A + 56DB45E4A8887C2E838383E94824C27038CCB5DC4292172E5C3064E1E4C4C4C4 + 819E9E9EE9E1E1E11B9AA6D5AE9573FEFC790208F6F5F5050D2F1AB23EFAFBFB + A1AA6A91DBED0E3737373BBD5EEFBB22727BBDF339B90DCCC40ABDDC62358EC5 + 62B87CF932128944A9DBEDBE585353F354519477487E43B20B403780AEBCBCBC + AE6432D94B320E008A6482C8D9610D8944449A9A9A585F5FFFFDFCD378C0665E + 1CD95FE5446ABA746A66563DB294D2325D4350E47223317D178E620F2CC6D4C6 + 3FB48282822B9515854777E63F32DAB5D9C3462555E539E8328BB873EC33CE03 + 008EA94C8F5D3D52872965B544B94BF5381C0EC7B797179FD9E7F26D72E46961 + 01F6EBCE612D2CC0498370EF4625FAC161493E2972A4CE0AE48DBFEF7DCB570A + 5F87C35E8E5FFEF812696DF1991CDB66376A77B59589184F6F4822005157A115 + 66C550935C9CE1D44C3F1697E650B8A5123BCA0F6161319E6DFAFF584ECDD36C + CA3FBCD102F90B4B1A48C6CC8A0D065130F77414C985C7706DDB93650A8A4000 + C9B18146DEDFD00C48EE8B4ECE23B198EECEB35A4E6E2BD885C9C7FDFC75E02B + 00D0FF0859E97D5F5CDB6A9F909A0744C2909D017233C82D56E1EAB1E9C4EEA1 + 51F547000315257E188D6601004759AB6CF19C1087E784384A5B6572FA370028 + 00E46300D8E8976C5858D2DAFEBC1F2780D39BAC852C2DAACF6857D20A87E7B8 + 38CA8E23BFB41573EA43CEA95100380BC0B22189007CEDB49B4E998C0690B809 + E0BB32D75B1F8C4DFE847F7EDECB5532E1E1782F7657B6948BC8472FB5298039 + FB66E5D34F0EF9ACB53B0BCE88880580A62856D9EAACC2D493BFE0286D0591B1 + D172F22166A7AF539D1F177B5E71EB8A8B744FED33D86432DDD95D5591A8D9E1 + 6C538CF28508B39B02BBAD04B1F8101C9EE392735172E626E763DD88AB0F60B7 + 95BCA690A4DFEF87DFEFD7FB78052F2F2F3B62D1DB5094F15980F87DB093736A + 146FEEF90C0631424BCD337AAB3A27D18A549B2C8500195344249895E5B9172D + CB205556B15D907ED40DA447AB777C5816FFF701CC269B582D4E56943CD31800 + C062B663ABB352005C954B972EADDE7F2ECC460D47EA92500CE957015C04500F + 60F30B529200AE903CF51F96228949E900867B0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000439494441545885BD965F4C5B + 7514C7BFBFF6B652DAB27281165A99853250B10415CB74773836F5C131E31E68 + 8C5B8C6671A94CF68886B8A803A2944D8D152324521E8C0F35D1CC4178309964 + C36866DCDC921236FE5899502ED002ED0AE55EDB9F2F5417681D2D1DE7F99C73 + 3FBFEF3DDFF3FB1124119D9D9DA8ADAD8D6C369F527A1BC0A1A1A1A18B8D8D8D + 100461430E930C402C9A9A9AE866F2EC76BB4A1084F31CC7D5391C8E4BF12024 + A90024133D3D3D4A5114FB388EDBEB70382097CBB717607C7C9C3A9DCE1804B7 + 1EE29E03AC41E00E883D77426C0B400CA2B7B757258A623FC7717B5A5B5B0100 + 8CCD6683D96CDE5413B3D90C9EE7A53A9DEE359EE7BB0921773D404747C7FA1C + 35A5B4DF68346A0080A460AD90C7E3A973B95C253E9FAF6B3310EBA3BDBD1D6E + B75B5A5F5FFF9F0D93B09652AFD79FB75AAD752E97CBE6F7FBBFC0167E654A85 + 4EA753693018FAAC56EB4D9665DF0010DD568098B5D6204658966D48152265E9 + 62D65A83186659F6442A105BB261CC5A0683A1DF6AB5BA351ACD9BC9F648E92E + 88672DA3D1D85F5959A9191C1CFCFC9E0224728BDD6E572B95CA64DBA5A640C2 + 660C03005D006691601E542A1502818022DD00A19919AFADA22813F92F981A94 + 190CE4B2F8E395A1504047AE4395BD82474AF2D302401946FA0AF8C13EF383CA + 66C2EA8E11904290C4BD29F52FE5E6D08F7FF8F2F8E974005C7EB464C7B9DD65 + 8AB6A5E0C4DBE39303282B7A11D3B3BFD2E9D9CB710BE432755645D9ABEF6AD4 + F913E9B80D2F543F9C030921B6E1311782A1298C4C7C8B07F4FB121608621063 + 93FD200427D3A14060874A26A734A211C40000E0F6B217616111B59636024212 + 16524AA5E900D839B7B02A1022F56466E41997C3730080ABC3DD00B0C1B26545 + 8751905775726E21D479CBBB989607C981ABA30B00F04D81F689BB26FB976E02 + C041DE17C453473E4B8B0B4A7F1F5BA8999A5FF9D4A0B59CF86BE6A74C267B3F + 724A5B36681F9CFA8AFA3C671189AC3E536ED215EC7DBCC89B963D20FE4DDFFF + F17AA8F6E8FEDC0F4B761E3CED1EFB1A21FEBB84EF0BEFFC15E9FDBA271B9B8F + 1F684E0780472E975F2259A5DA080D9EC963CB5F572B0D85519505D9A6E60DC9 + 8B9E4F70CBDB0783D6D25053557C66AB007CB65A567DE4B9A285874C810C4AA3 + 521074EBB5D52D37FE3887E5B9810D05948A143442BC73BFA90BB4962DDBF0FB + E777EB7DFB2A73AF44A32B9500108D02B99A327A0311649BDE832AFFF0FA5920 + FEF10FE8F4EC05E8B59697B604A05028047D3E0B00BA5FAE7D44637B807BEC1D + C8984CF8474FC13F7A2AEE2C4824720044FF2F80DD6E4FBC311244381CAE50AD + 8E00F8F3621E5B6E9DE27F06004469048448C1EE6A89A70066AE1DA5F745E601 + 500F33393909B7DB2D4DF6E3B1C89204B0B3186DC585CF1E0AAF2E2A622A0862 + 30A102324609D3AE9701C099F4A9D787444230D0750C4F57996A009C25845400 + 90FD5F0DA53408A03B1289BEF50F95E0B91045B45A940000000049454E44AE42 + 6082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000645494441545885C5986B6C53 + 6518C7FF6F4FCFE969D7F5B6B3AEDB606CED868E0DD85CF016394786D340CC04 + FC601012C76DDC3E90185122266AD4A8C44B8C8A0A43E6073F08311A2226D280 + 88010342A7111958E9E6D676DDE8BA5B6FACED79FDE03646ECAE6DC33F395FDE + E7FD3FEF2FEF39E739CF7B086629BBDD8EC2C2C2C46CBC94D20080C7FC7EBFA3 + A1A1016D6D6D13CE25A9021E3B768C7ABDDE69FB0A0A0A505F5F4F46201FF5FB + FD2D93412A670B382AAFD70B97CB3563DFA54B978C353535270441A86B6E6EFE + 6D224845AA80B3D5D1A347A9C3E1300238210842557373334A4A4AFE37EF8E01 + CAB28C23478EC0E17098F01FE4E26490770C100028A55342DE5140E016644B4B + 4B0EFE835C341E52693018A0D168669C9861188442A15729A59500D6CCD45F57 + 574708B95544028100A2D1680ECFF376411096AF58B1E2F2FEFDFBA1DCBD7B37 + 56AF5EBD188061A68B44A3D11FCBCACADEF0783C1FC662B1ADD3F4E0FAF5EBB0 + D96CFF2B715EAF17050505393CCFAF017019B85566DE03F0F04C01799EC7D2A5 + 4B9B65596E3C73E60C89C5628D5379BABABA70E0C08109E38D8D8DC466B36174 + 77C7EAA0DD6EA776BB7D4680FBF6ED231CC73D23491205B0750472CB8C924CA1 + 945F92E3C78F4396E50649923E15457127CBB24DE9001B55CA806EB71B070F1E + 842CCB1B2449FA4414C51D2CCB1E4A071C90A632330E72A32449FB4551DCCEB2 + ECE7E9C89DB63AE876BBD1D4D4045996374992F4B1288ADB58963D9C6ADEB416 + EACECECE51C8CD92247D248AE2D6542153EE66EAEBEB1189446E1B8B46A3301A + 8D8DA2280E747474343A9DCE0D7704D06EB7D364E32E970B56AB955AADD625B9 + B9B9B2D3E99CF51AA9024E18ABABAB83CD66834291DA5394F22D9E4A1CC701C0 + 6B003C006E4E3657A3D1201C0E338944E2DAE858C6002391C8D56030F87CA5D5 + 0081CE7D45C333E039068C62E253864AC5233FAF17FAC415DC53C240C5293306 + E8FCDBD92A3EBE243B505914AA5214CD7D06C07C80A8C924A7200A007430063A + 70EEE95ACB3BF33ED918CA14E0F6872BB30256E3C00E05C807FD436D8AECAC42 + C4E31174DDB834A951A1609097B3F8111567A87DB0BA78792600AF19B3B9D32B + EFCF2F5510F2FE55D7D70A9FDF0183CE8AAABB3792C080930E063B264DE0F6FD + 827B17ED7A48C9A83767A2A33E3F7F8E161A5EF94428D2A3F4F91D0080FE4117 + FC7DAD748EE5C129130CC786E0E9BE00000D99D8C1219D960500F3CDE1FEDB02 + BE1B0E2C9CBF9EE4DDB7685A8928A5C64C00E60E046300D0A956996E0BF8FB5B + F1EBE58FA992512535165A1E40AEB1E202803D2343D7320178AFCB1B442C2E9F + 54F302346A33C2919EB160303CF15F088ECB46AEB1623E053DFBE6C153F1D317 + 5C1939D515F70E0E575FED186C05F0739165E95840A5AB814ABF24E9C5A82C08 + F4FF054A6503286AEF2A36E3CC455766EA20A5D8F1DD39EF968A62FD6B96DCEA + 13EEEEB308867D302F6C2244C126F5F4B5BD4B87DC87D1DB7F1582714143FDB2 + 0527AC734C192BD4EBFF6C0FED73F5C44F965AD86FCB8AEB57B55C3980CEB3D5 + 499B8BF1F2749F8760AC7852C9288A9EDFB4AC23538091A279C55BBDA19CE74A + E9E0B37A6DF10AC1B840E5EFBB027DF12E709AB2A4A670E047F4F9BEC650C8A3 + D46A0AF6AC5D59B52313CFE05B1A9EB5E8D5F2735ABD09F184FC0F400F15E58B + 0080C44D1F6291F6A4973C1C0000B47B4E82106C6059666EBA77F067B341F5D2 + 0BEBCAB38BF2B29613D2CE8C34EDED3AED5CA2E67368B0EB2BB059E55028B549 + 13B0DA72F4F6B72218EEE2B49AFC9DE906FCE1FE0A01F32C596F532A6F4BC8F1 + B100A36061D295C113ED85A9742F54BAAAA46DC3CDA13F68F76F6BE1F3B7A0B4 + 287F555A01799E8F9B051D00E87C7E07BDD6F6CD58ACA2742DB234660040F7EF + EB8191E6652245A2BD0021F96380353535B05AAD2901C662B1D242DD2080AE16 + 83AE64EDF8583C110533F20531DAF682D59426CD11BEF13D82BEA350713A80D2 + 9E51C02F4C26D34F269329A969BAA2947AB9780FA8DCF5A55A25BC5260BE4FE3 + ED390F0050717A8446BE28C3C156C8B1BEA439E2513700202FA70A004E91DADA + 5A949797A704365E723C8A97D715429FADDE4C403FEBF49D4328DC8DBB4A56A1 + DD730A0343ED93FA898241BE500373CEA220A5B47AD67FF927D3532B17A3F9F5 + A740085905E045424825007E9AF638A5F4574AE9AE7842BEF82FBDCE85CEC895 + FCC50000000049454E44AE426082} + end> + end + item + Name = 'tag-script-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000027749444154388D7593414893 + 6118C7FFCFF77E5B4EE7667D2EDD32F799AB3525881A85FB940AB2C81D82C043 + A0B47914A18BF3D62D9A74EB5210148C8249D9251C43D00E39A95B6DD360EDE0 + 2619EA6229A5730DBFB783A8DBD8DEE3FBE7F77FFEEFFB3C0FA1CAF1F97CF07A + BD1D00660034156B9C7315C0AB783C3E44D5608FC7D3C1399F090683C7A3D168 + 89CE1883DFEFE70B0B0B1AB11AACAAEACCC4C4C401DCD7D7879E9E1ECCCFCF63 + 6A6A0A000422825001EE2C87014051141051B7A22825050F0C464747ABC20010 + 8944B0BBBB1B999B9B2BB9172B543695C17900C970389C0F87C37B9028A25028 + 1801402C8683C1A029168B1DC613F0C27ED230E6900D9B75352204DAFBF33A7D + 1D6AFE7E458B3E0F5A5C5CAC080388DCBCD47CE3DEADB6E75A91F51341572C72 + CE5701DC16018C271289721822A337EE2ECB9DEDDCF2603A1B87D460E7B144E0 + 406F92CE3739DAFBC74500830E8763DAED765F0C854287F18972BA23AC7E279F + C56AE60BDA5A7A71EDF2A392B9E19C5BD8D6D6D68EA2289356ABF5BA56AB3527 + 93490080AAF2F50ED9183875C23CF263ED93905EF980D4CA2C522BB3D8DEF905 + D3D1CE69CEB98B45A351EC9BC8B2DC5B646203E0779D6B9698A071E698051667 + 888CD661DAC87C84A95EB289ACE63D03807D1397CB3529CB72AF46A3316F64D7 + EE3AEDC6B8BDD5F0D9A0B70CA7D36FB5BF534FB0B9FC1485DC1254AE426A38D3 + C8F6DF5394E49D2CCB36E7E9DA87DD764A0A02F98904ED9FED9FA86D7B80C6B3 + 8F4977EC0A32A96768B55CB596EC4220100011657D3EDF8059D28154FC8B7F7F + CD9B1B2F802060FDDB0800700030EAAD00F85AC56D942409631E05F707BABA01 + BC24A27600E51DC80218FA0F5DC71E4F1BDD80C00000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000003B449444154388D85944D4C5C + 6514869F73EF9DBF0B0C9DDFA2C03873D18289B43AB45D341A68A8A1696C74A3 + 1B43429BA66E1A35C6852BD79246E3CA14221D48D376D3A4E9C6C5349DEAC2A0 + 51633A849AD6E1D278A18895713AD0617E18AE0B0B61E850CFF23B6F9EEF3BEF + 79F3094F295DD7191919A1A7A7A70D48011DF574B66DFF05BC3B393999D27682 + 793C1E46464688C7E36D406A6666C6B87EFDBA5D4F7BE8D0A1507777F747AAAA + A6949D60A3A3A39BB04C26639C3F7F1ED334314D1311211A8D92CFE7314D93C5 + C545008F88F00450D7F51AD8CCCC8C914824A8542A001886C1E9D3A7ED818181 + DB67CE9C41D775004404A016B865CCF67A308048240270D7B6ED37745D271C0E + D73C48D90176A31E0C209D4E5328143A154599B52C0BCBB26AFADA36CF9E0A03 + C866B30C0F0F130E87EDF9F979AAD56A2D70231AFF032B020945B8A928B2545D + 2BB170DF421170B99DA80A522AAEAA0072E1C285AD9EC5EAC0B28D1EEDC891FD + BBD3075F0CECF17B9D2D9AAAC8465344D01C2E5B757AD2D987C59C4C4F4FB78B + 482A93C9D483A12A72EAC4B1D8E5D70FB45CD554E5E8131E3CAEC7E17E5503CE + 95CBE5D8A54B97EA79B61E68765E796D5F68687DBD30F0EB9DCB76F79E41EEDE + BBC6E2D2AD4D9188C2BECE13A15D5EE3530D38E57038528383832F8C8D8D512E + 97B7020B5EDDB1E271A9B15CFE3EB9E559FECEFD86D17E9467C2076A6E763B9B + 010E2BA6692ED8B6DD1F8D467F3F79F2244EA773ABAE215FA8048BE5F5696F43 + 2B221AF7E66FB2F0E02772F95972F959F22B16BEA698B85DFE711B3E5493C924 + 7D7D7DCB3E9FEFAACFE73B1E8BC5FCE9747A230E52AAACDFE98C345D690D79DF + 5BABAE7AB2B93BACACC1A3AACA4AB9446ED9C2DFD482D3D1F41DB6FDA5BABABA + 4A3299A4B7B777131A8D46FD53535354AB55D66DDA5C4EF5ABFD5DFE47CD8D91 + 630B0F7EC61B7D1F7FC727D2B8FB2D11556779F11B42FE97F6025F6FAE3F180C + 924824300CA3154899A6D93131316136B838DCDF139A7FBBEF395584F41FF7BF + ED32E792DB76271CDCFB01BA3B7456B61E070201C6C7C7310CA30DB83137677D + D1B8F2E3C578CC7951449A80E78BA5A5D61F6E7D4EA0EB2CAA2308C03FE66784 + 1A9AD9137D73AEE63F5C5A5A62686888898989B9582CD6DFD6DA1A6CABF80C45 + 0AC7AD85EF6D4D73D3128C0B6097F3B75034EF7FD95A5BA65C510076A9DB83B7 + E1693C1ECF2BACFDD9EE59C80AD5A152F9A1B75A2DE17107C8AF5828650B2966 + 90620697E620F26C2F6E97EF866C076EAFE96B1FD31109BC029C03795904471D + 996DDBF62FC03BFF022C2DA36BB709F1AA0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004F749444154488995555D4C5B + 65187EDE73DA9EFED29F532A058165DDE68476E36703B796B9447663D43931CB + 12A7892692C568CC1277C1BDF142E38537CBC61258EBF0CA8B4599EC8F1BB2B9 + 9110756B364B276281CDF0572850E8CFA1AF373D584A5DE673F59DE4FD9EE77D + 9FF77DBF437806783C1EF4F6F6C2E974DA015C03D00C00CCCC444445E72C330F + 0078E7C68D1BAB9AFF41EE003090C9649A6FDFBECD8AA2809941449C170011B1 + 5EAFD7040281D7019CD46AB5DD4F15F0783CE8E9E981C3E17030F380A228CDA1 + 5088474747B9308E88C0CC1BE7402040002A00E03F0554F27CE6D7B2D96C5328 + 14E268340AD596EAEA6A9C38710276BB9D464646F8F2E5CBC8E5721B4200203C + 03F95595BC38F3E3C78FC3E9748E8BA2D8D3DADA8ABD7BF76EE1DA22504CAE28 + CA2672CE0300DBED7600F89999BF0080FCF7464FB60894B0A539180CA2D016CA + 03000D0F0F03C0494110FE48A552B877EF1E00A871D8D483027219C040A12D2A + 7931FAFBFB39168BC1E170E0FEFDFB88C7E35B623425321F28658B7A217F8E00 + 8831B392CF1A6AD62693096B6B6B4683C1B008001A75CE65597600B89ECD661B + 83C1203F7AF4084444050BC4007E94B4C219A7551A93AD3AE8752284C2E20870 + BB2B919C8DC05A550B49544043434390655946D1B494D8D04BB515C60F3A5E7E + 5EDCE3B1BF6AD46BEA04824E752FBF68F90E639981BE5C0ED3F4E0C10307806B + 8AA2345EBC7811D16874D328E69128336A777DF2F6AE74C34EFB7581F052A99E + 146192995B34007A89A8A9BFBFBF942D6A053777565BE2DEEDD6CF04E203BF8F + 7DCF2ED907AB651BEEFCFA25D673E94DEF92D95889E6FA533544E2690D8033CC + DCD0DEDE5E3536368699999952D9C4DCB21E3A8DD0B8969EE7E9F9DF90CE2420 + DB7663E7B6D7904A2FE63BF02FB24A9275DAB2A31A00510047CC66F3CDCECECE + CAEEEE6E4C4F4F170B94A5323930F38C4E6386401A245626B0969A83BBBC295F + 29980804905A0D72CC7F8A8944027EBF7F9E88AE489274CCE7F3594647476965 + 65A5B0175A51A0F3077DCE7549A77B7735358BE5E4139E9ABE83F1A9411E9F1A + E4BF1E0F627C6A90259D0D1653651C60171841311C0E6369694915199024E94D + 9FCF67894422B4BABAAA6EA56B35ADFCF04275D95DB76C386A31B92BFE9E1D21 + E675586B3E2483ED0049B616D2973550327E0BEEF26603404F008C8800100E87 + 91482470E8D0A139000392241DF37ABD9648248264320922129475166C166D7F + C30E7B44AB35BE97CB29B4B83C0E57FD3932380E9264DD0FC9B207B3635FB1DD + BA83F492AD0EC07951F54015F1FBFD73007ED2EBF51D5EAFD71C89442893C984 + AC26CDC79E4AF3BA77BB2D06507D99A9AAEEF1F45D2C4E9C43227696131367B1 + 3479010090CE2C5185B3D14644936281CF50ED0A0402AA5D6FD5D7D7AF0B9C3E + F2468B49D7BEEFB9D3A220BC024016458D37B93683642A4EB69A5324D95AC860 + 6B215172D1F2C230CBB6DD24E9CADC9B040A45DADADAE6005C9524A9D65365FD + EE45E7C2FB1A91BE26C261227801422A93C0C2F2045CBEF32459F7436FDB4F44 + 3A2467AEC0682827ABA5D656F28FD6D7D70700E8EAEA7A48449D26830051C102 + 00FCF2F002279663F037754120113925C9B121AF3A711B936790648079A6E433 + ACA2A3A303ADADAD68D826A06D47D64C84705649D62C2E8DC325FB687E31CA4B + 2B935BEE493A0BDCE5FB08A0CF9F2AA0A2A9AE0AB7BEFD088220EC02F00D8000 + 00E353AEAC01B8C4CC9FFE03A34065CC40669E690000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000061A494441545885B5976D4C5B + 5518C7FFE7B67408B72D4361B0D13A5ED632706AF6820C2615C61C82992F1863 + CCB67681CC44937D9116635C5C9C40FCE04B6630719A18D46564D0C128033629 + 12A40E267BA352477D435EC664730CB8EBA078FBF8413AC768B7C2E693DC2FF7 + 3CCFF9FDF3BFE739E75C86BB8CDCDC5CE4E5E5059CDFDFDF8FF2F27208820000 + 90DE0D7CCB962D28292989E438EE1BC6D84377CA27A23F0014F23CDFB27BF7EE + BB13B07DFB76188DC6251CC7351F3F7E7CA5D56AA53BD568341A754141C1675A + AD36DEFB6E4102F47A3D8C46631463ACF9D8B163892D2D2D01D5399D4E30C6D4 + 37BF9BB700BD5E0F93C9140DC0DAD8D8A8696D6DF59997949484FCFC7C0080D9 + 6C86C3E1F00E31C6D88D3C6E01F0A5005A1A1A1AFCC201203F3F1F3CCF6FE079 + 7E835788AF08D88119780C00EBD1A347E3DBDADA0229BBE3BA08C88119B80A40 + 8BC56209086E369B2108824D10049BD96CF69B77470766E06A00D6BABABA589B + CD168866381C8E9BBFFBC204180C06188DC6E500ACB5B5B50F9E38712220F87C + C2AF8099568B0560ADA9A951777474DC73B85F01BB76EDC2CE9D3BE300580F1F + 3EACEAECECFC5FE03E05141515C160302400B09ACDE665274F9EBC67B0ECEC6C + 10D18F44FF35C72C0133F01500ACD5D5D54BBBBABAEE193C3333139B366DFA09 + C093EDEDED730514151561C78E1D5A226AAEAAAA8A3E75EAD43D836764642027 + 27C749449B2A2B2B47F6EDDB375B80D16884C1604824A2E643870E459D3E7D7A + A1AC5E00AD002E01F000805AAD864EA70380CF2D16CBC5D2D2D259056C069E44 + 44CD9595959167CF9E5D08F81A637825395659B9561B8E70850CB2200E0C0C4A + A512914B22C13186F6761B448F07206074DC858FBEFC0EACA7A7470BA0F5E0C1 + 83110B8413C7F0C28EBCB8FACDEBA28A398E1530301598FF1627C218401F8E8E + 5F7F472A8AE2904422E98D8B8B5BA880936BB4E14736A744958C0B7D6FFCDADF + 086DECB3B830F2035D18F1DD41B220B9E261ADE1ED3079D46F92818101F7C68D + 1BAB552AD5E372B95C7DFEFCF9F90AF8EAF98C986F63A3F9AAD38EFDC1D7272F + 635C188466F93318BCE87BDB163D6EB8262F233A62B55A5A5F5F0F0042595959 + 5E6A6A6A0380B49A9A9AF9081857F241322231CC3D3D0E00105CC398745F4566 + 4A09C34D67FFAD41441229007845949696E6A6A6A63610515A6D6D6DA002D497 + 46A7DC8C49FA42822396BB262F0100CE38F6033E8E636DEC73888E58BBEBD2E8 + B5F281E1AB9078079C4E27060707DD595959D56AB55AC7F3BC2AC0CFA1542A15 + E5EBB48AA51E12D347C77EBE6D32C7491019BE8AFB7DE8CA81C75EFA78F64AB5 + 582C20A289B2B2B2DCF5EBD7371251EA9123476E3B61525292E6D10DD9BABFD1 + B36F5964CA6B83176D21D2C559B85FB3778EF713435FD35F7DEF4314A7B293E3 + 97443FBE267658726B92D3E9842008EEB4B4B42A954AF5446868684C6F6FAF4F + 78626222B66DDB7695972BF6636AE49750E914172C0BCB1C1AA8C258FF27739E + C9D17610792093C93925AF9A56458559FDAE90AD5BB7A2B8B858C1715CA3CD66 + 7BACAEAE6ED6B846A3815EAF1F9348249BCF9D3BD755BAC78813075E5D240B92 + F49EEAF944E5E153B038FECD39F35EEDFB08D397EB91FAC8EB131EE2E2E638E0 + 8DEEEE6EB85CAEA9B4B4B46AB55A9D191212B2CCEB444242020C06C384542A7D + 2A94FEFC4121D8B8A7D213EE0B93077332993488312E6B78B00E1343159818FC + 62D6E39EE82651BCCE16C9148B147CCCD46D6F4415151520A27193C994939E9E + DE4444290E8703068341904AA57976BBBD33FCDA77C8581DD3E5F1F08F0280C7 + 338D07C2B4D40B118BE3F7808F7AEE5697D9955FCBE8C2480B9646A6BCE4BF49 + 6F8A99DB919231D64444C98CB1A7ED767B5B6161212ADE7D1E79BA9543DF9F79 + 2FCABB0F6C58FD163ABB3FC0F4DF2EBF73729C0C196BF75C0BE85A5E51510100 + 632693298731B6D26EB7771416164210045C197301405B4478F28B437FFE7B67 + F49008C624085FB1D79703B8786E2B2D122F03A0BE801CF0864EA7434444049A + 9A9A6EFCDDE63FB90A07DE7BF921D133D5E1F8A5EA3EF7F4385669B6E3FB3365 + 7EE70992862279C5CB08932F2F9A97005FC1710C8D9F1640B7363E03C0FB8CB1 + 870104DDAE86882600EC17454FF13F608492315D0163D10000000049454E44AE + 426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000083C494441545885BD986D5053 + D91DC69F7373939BDCBC0035404458C48D2F1D7685A06257ADE22A2382635D1D + 4B59B796419965D5D6E9A87DB75FEC8E3BA36DDDEE2C0A759CB423BE35516414 + 59189558018140F08DC84A912EAB464825484024C93DFD806183600C1AFDCF9C + 7C38E73EFFF3CBB9E79C7BCE4310E4888B8BC3C68D1B5F4A6BB3D9A0D7EBD1DB + DB3B5C478205060CC1E9F57AA8D5EA7442C8B6407594520AE03A804FAD56AB3D + 3333131E8F27B880898989D8B76F1FC2C3C357003861369B250E8723202D2104 + F1F1F1D06834160073B3B2B2846BD7AE0100D860C0E9743AECDFBF1F72B97C25 + 80E3E5E5E5E2F3E7CF8F2B474D4D0D76EEDC9944299DC9715C93B7FE9501753A + 1D0A0A0AC0F3FC2A42C8D1B2B232F1C58B17C79DC767DEA97CEB5F09D00B2797 + CB57033872EEDC39B6B2B2D2AF66D1A2454849490100545656C264328D682764 + E4AC638200B716C091B367CFBE104EABD5223D3DDDCDF3FC669EE737676464B8 + B55AAD5FCD4B01FAC06502387CE6CC19F6D2A54B2FD4C5C4C400800540018002 + 4AA9E569DD7363DCAF58A7D3A1B0B0103CCF6701D097949488AAAAAA02D27674 + 7400800EC0C7DE744FEB8203989494E45D101F013874FAF469A6BABA3A607D6B + 6B2B4A4B4BD99494942F81A139D8DADA1A1C409FD5BA1EC0C1E2E262A6A6A626 + 60386F984CA6510BE395017D462E1B40E1C9932799DADADA71C3BD4CBC10D067 + E436003860341A495D5DDD1B401B0ABF803E0B2297529A6F341A497D7DFD9B62 + 03E0679B59B264090E1D3A049EE73FA694E61B0C86370237746EF82EC61CC1D4 + D454ECD9B30722916813A5F46F274E9C406363E36B055BBA742928A503001EF8 + 05F4C289C5E22D94D27DC78F1F87C56279AD708B172F466A6AEA20801FBBDDEE + 96EEEEEEB101535353B177EF5EB02CBB9552FAE763C78EA1A9A9E9D97C418D85 + 0B17222D2DCD4529FD89C7E339BB63C78E117BE330A00FDC2F0541D873F4E851 + 78CF64AF2B162C58808C8C0C37A5741D80925DBB76A1BCBC7CC433EC3370DB05 + 41F8ECC89123B87EFD7A301828802A009500EE0278E26D888888804EA7832008 + 6D0CC35CDEBD7B370C06C3A804C407EED782207C5A5454841B376E0403EE1680 + EC49E13273C2DBA188089342C6892062868E5321A1A1889A38113CCFC36EB7E3 + B2F77B4E877E9A5AEEE3A0A116E4EAD5AB6059F6B71E8F67575151116EDEBC19 + 0CB8DB9C98999FB9E4AD87CB9227267262E66700A6014446FC5C329EB2B9005A + 4D29DD5B6569EF635996D500D8D6D6D686E6E6E660C001C0271F2C8C7EB8625E + D4268690CF1DBD7718A57C12DCEEC7B8DFD5E057C83022444E4858CA4942DF9F + A79BBC84984C26A8D5EA5900BE329BCDA1068361D46639CE6809534AE23FFF85 + 4ECB4BD99BB7DA8CACCDDE8850D51424CEC8218DCD85F491F31BBF0924622592 + 676E052B926D66B2B3B361B7DB1B00A4CD9E3DDBB166CD9A57810380DA69D10A + F052F6477D8F3B599B7D6883773C6A83BDDB4AA335F35E9860D0D58BBB0FEA00 + 209BBD73E70EB2B3B3A1D7EBCD6AB53A6DCE9C395F0108196B450518BD2A8518 + 00229E0C8EBC76DABA1AF1EEB48F48E4DC990125A29486B10030066419A534C4 + 6834BE0C60788FD305001D32EE7B231AEC0E2BEA6F7C49591137A67092E63D84 + 87C5D701F8CDD3AA96E18DDA07B25EAD562F4F4E4E2E03A07A09C8E4B67B4EB8 + DCC27999540D5E1681FEC79DC38DCEFE7BCF154A244A8487C54FA3A055BBFF7E + C15D59D736F234E385B4DBED7500D29293931FAD5EBD7ABC80938958A57B3820 + B302F8F75B9A1F0E3770AA59E042E68C59449C060F1D5F8352211414EF4F9F1C + 814BE636889ECDEE7038603299B06CD9B2BB52A9B432262666AD4AA5E2AC566B + 40745AAD16EBD6AD93C878794908E9EC50C8353FB5773763D0E544D4EC52A2D0 + AC268AC855A38A67B00B033D6628E55190CB22C45363D5C6E3E79A9EEFCD2424 + 2478AF9673198629BB72E58AF2D4A9537EE1A64C99829C9C1CB02CFB198B813F + C40E96831062EC71FE7795A5B930A03F18A6D22261468E9B5261EA3F4E377CE3 + D73C4A4C4C447E7E3E944AE50F188639E70F322E2E0E3939399048247F150461 + 87C160402CDB8C0F3392624188F5C6EDC39CBDBB192193B742C24F1D3347FFC3 + 8BE8B319312B7E33147C54C1A0CBBD69D42BF60D9BCD868686062C5FBEFC5B89 + 4472293A3A7AAD42A1E06EDDBA35E2B9D8D8586CD8B0011289E40B4AE9B67B6D + 4D283AF405EE753EC2CAC5F13D0C4334522E6CCEFD2E33C4B2C9002804B76354 + 71F7B7C1FDB81D83AE5E44AA1366320CF96740F65B5252120E1C38009EE7DF23 + 8494D6D4D4288B8B8B010CB905B9B9B9E038EE00A5748BDCF51F68D0AC24C002 + 60788E4F07B0A7F6DA5FE8E381FF412CFF3E185631665F82C70997D38AD9EF6C + 81829FB827607FD0C7EE9807A0B4BABA5AD1D0D080DCDC5C48A5D283003E292F + 2FA7217D57F06146623EA5429E40DDC37A1123C6EDF633F46EE71544261C06A7 + 4A1CB3EF27BDD7E983A62C446BE643FB56FAED7119984949495E1F703E21E4AC + 20080A8661F494D2DC8A8A0ABA7DFB76ECFFE30758BF72D6E1FB5DE6AC963BDF + CDD7786D165CEE3E7CDD5E12505F134267E0DDE9EB9DE3B23E1A1B1B91979787 + 8282822AB95CBE8261982C4AE9CFBD701E8F07034FDC00600955C565F96ADD9E + 01889E7E41C2DEFE3DC4FCD8AE567F57299CB67F8193A8004A3BC7ED6E592C16 + E4E5E5C1E9745E16046173454585E0850380AB2DF740812219A7EE8F8A983BAC + E324211874F50100069D563CE9A91FB3B807BE0500444E4804800B4135D10120 + 4421454BE9AF10A2946D24A0051DB66AF4F53FC0F4B85568BF7B013DBDED7EF5 + 841161A27A162226CC74524A7541070480CCF404E8FF940942C82A00BF2384BC + 03401AA0DC4D29ADA7946E757B04F3FF01146B88650D67D94F0000000049454E + 44AE426082} + end> + end + item + Name = 'control-tab-filled-arrow-left-2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000017449444154388DA5934D2844 + 5118869FEFCE65986112929FC1625213527E52D8C8820D0B1B9A0536232BC966 + B0B095194DD928B1B39162A12C268BD95BCC8E86AC44498949A4EECC9D63332C + DCDBCDCFBB3AF57DE739EF7BCEF9241C3DA67D60D4C441B79729573CDC6B5BD3 + 3F17CBFB4965D7B01E1A1227B8EE54FC54B53F40387A6C5B93F98D43027DE38E + 111C1D34BA9F19AEBC221289D84670522C1613CDEB32FE7A3800DABF767F03BC + 027120FF6B8052EAB5AEA56D2CD3D0B9942B2A9DFB0D4403B87F5763373D5399 + DBDE99D3C7C0E01EB0FA53807E92F1B19B2E797ACE4A42090B7AF6CD0D7401A9 + 6FBD41C06B015CD4F6B7922501B208EAE8AD2A80E1A99A140AAF9ACFE37DBCC6 + F7903E03BA2D006047907AE000E4E0C5DF69B169BACB34DF43DA3E0210524A25 + 113681AD6099A2A658A11526C0258AF29C87BBF3620CC3FA67A4626205DF48B8 + 092109C467FCB9DD90DFDC063ABE1C98262212D434CD720702508034036B418F + 313DAB9FFF78363E00E6AB6CCBAD48B46A0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000020D49444154388DBD944D4854 + 5118869F73EE9DA941AFCE18F39793C2751184E5A02041456549D126B7B5194A + 88D9545094D02268D12E88A0A04DB3345AB58816392AB90D444130041D5BF917 + 6523C9CC3873CF6921A6A4B7AB43F4AECEE2FD9EF7FBBE7338E2EA830C9D9752 + 43C019BCD5F5FC66D7C8F4D888ABC1DC388CE6E6F5E8ECBCABF1C6B976B18BC0 + 4DE0F26A91DCD20FCF02AB214A43ACD91B18AAD98F1D097AF1DA528F5EFFBDC3 + 805CC3C0A1C38E8B0E3BEE057CEA653023FE9F9C0AE61819FAA0B3D9AC97DF55 + B66D934EA785AC354AF8A5AA1AF4A7E43F23FD2FE028700B70AA05FE7E369665 + 8DD5C49A2E2E95C472203F9797AA9C018CAA805AEB71CB6E7D3CBBD65AB724EB + 7AC353034F2253035A40666BE86E2495868FDF8C7B2F1742B58BFE03C3CAF475 + 1782877CC024B0BAE70E5F958FA0A77D8D5A338C6006E8B1163F578013C0B31D + 6A9A81942B50351D4B00C308BE80B80CBAF0DD3EC9CAC1A32F84DABC1BA11566 + 7185F8C4DBD35239EE40E08D40B4002DEB230A8AC10490D8661695D2D9E8E47B + A42AB88F0CA4B5D643083107FA0EE048C010B0F5BF12805FAAF17D3E33E9945D + 79984EFEEB84511FEE063DC8FA6EAE5D69ACA80B11A7D31404368C52800F9D9C + B17ADA161716B68142A1D07AB019B389F6F563D48593C0208277C783AAF7E1E1 + F27929E873EF65670900336613BDDF8F511F6E07AED798DCBE2B3F39A653DA2B + 8F5F388A9C915F9D97500000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000002BF494441544889A5954B4854 + 6114C77FE7DE196974B426753422F2D143C9928A161165E1A8B508B336D6C236 + 410B69618BA44041691326ED5AB5711718E52248CB88162E0A7A61621615620F + 92929A289DC79DD3621ECED8E8F571E0C2FFDEEF3BE77FCEFF3BE7BB52DFDCC5 + A193E7DB55B55D44044055D50677BC1EBADB79A3B51E3B7324BF3C18FEA851A4 + 80A4C535DB4B6C83FE47A01AF51F1CFEA0760EBE8AE2A5138808AACA1224A2B0 + A89CFAE6AEC511446548CE4E05641E0C4055DEFAD2F6838D2DC4F8E209A66055 + C5E13283AC32424C5B4EAA2B8A6C33D2A89E55B12721EF7CD8E1714CB3CBFD99 + 2C33406B6B6B22889D4476FB6A6B6BC5E7F361B8CD005966D036F3E55ACA1968 + 528D8BC1766B0982E57491DDBEF81E234D550A446C6B5FA41931C64446AADA05 + 9C56D5703C93D8F714BCD05A32418A4405058557BFFD095E0A45C031E3B70CB5 + 7A54D5B912891277513014BA565673E2E2D3AF2EEFB4337B9D776CA077EDF813 + 50AB07C858AE440E8070849B237F33DEF5B329EFF76A734085DCA9E27D9BD74C + 3CEB3522D64EE0C2B209C67F87E97EEF78FBF29791FB332CF7552805EA1D33FE + 8068A41638B7A2361DDADA88F9DDCC451800D90CDA80F268CDA717884626308C + AAD96829A141B55B44F6C783A73D033327CF83700F28078E810C82F2A5F23893 + 6575A3863567CA5531C201BC6FFA714F8EFDB29508B88DB23BE6DD1F5FB09C99 + 58CECCF9FC3A02D9859DEEC9B1454DF26544FA507521721DF84E9AAB770E7E2C + 1A8963DB367D886A03421FE85EA00E98AACCB1D8E2565C8632DBF9D1C9749960 + EA069EFFC8C1EFF70390341EA9D873B29D6C5F132035C01D845194BAEA7C6BAA + A5247CD4143D934EA350288461187B4CD3F4CEA763AC3CC173AA8DECEA26400E + 03B7104636BAF440F7B66028CBD4B322923F57AE05E44BF9A3499CC773AA0D77 + 7513821C017618C295D3BCC23BFD75A1046DED1F2B62D35CB6E3367500000000 + 49454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000026A494441545885EDD64B4854 + 7114C7F1EF997B1D331D1BED61894E898528AD2C257393060EC4D013B5171825 + 21842D5A4852D0267AD8AA45BBDC546484042E8A6C4CDD0AA211D18316F9C0A6 + 0C1F8DA8F3FEB7482B5B387AC7AB1B7F70E12EEEF99F0FFFFBBF872B006567AE + E0C82DC4509462CA3BCAE31B670D95EB008EDC427616BBC2C60430FE632811F0 + 1906CCE67253BB5AEC02D72BF6091031D21CC062B4F0BF2C1ABE6400114029C3 + 3BA0477F241A4048484E8954DF6E31560F507BA799ECA223860F612CD10132E3 + C7284BFD445D5D9DE17769240D0D0D620148D402CBD9774E96EA2B5805AC0256 + 01A600422B096805F281819500B87D4969C7BEE51D781F4848D90FF42F1B40D3 + B4F6E9E42D47BF14D7E40CE7385FF617540D2B2805BE9A0E0887C39D7925AEC3 + 7D45E7B707D7A6BA81CFD6E9B1496017B0D12CC09FFF810F93FA41F78692AC60 + 40DC289A6D9E77B519BD4F0E093C02E24C05DCEAF989658DD5A1A00DA12569F8 + E30547F7039716F2370156B39A03E8F6F27AD85B99A3A00D78AE82FE9AB437CF + 2C5AC89F0A5C5CC01AAE99CB18C0E63CB743E035D08B52D794DFB779A8E03416 + 1177B4E2F889EF9ECCEE87E9310144E49E88A403E9880C6A4976FCD8175A1FF3 + 24D5955255400730029C54A140400F4E6191E86B6B81C958FBA34FBC6AF4D89C + D5A5029DC05D50E5595D8DC14DC1D14A11B1CD57AC94C2A7EBF9A190F1A92D00 + F68A7A929DD5194007C2DBF5DE81E357B37D05B9D95B5F00F322628DCCDECC20 + 1C33889EDDEB22272AEC23216D74D0CCFE7F01FF20B62174A0E88A04FDA7862E + ED09AB29AF698039276DFCE94DBCADF7FBF83DFFA745B7C6A199360401F805EA + DBBF9953B502F40000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000384494441545885EDD8ED6B5B + 6518C7F1EF75CE499A87C66C2E8274E9334E64750A194AED704EAA8ECAEAB4F8 + C04A5D47AD2B223E3051D437FE09166110E826DA2D329CD36299A81D384198CE + B159FBA2BABA42D7CD5A65B536599A3439972F566AB54C979D4386D0DFEBC38F + 0FE73ED7E1BE6F01A8BEB581FA2D1DB8114541E158FF5E46BFFFCA719F057043 + B4963B9AB63F096C770C5405786DE4D4D1AF5D03CEA76A2A99DE786274C251E1 + A6B5956288AC74C6FA2B8B814CA56619181A7554B8F1960A0C53D451C9A2186E + 152D44045045DD31BA0E340480BC5B7DD67F3F52580441D5D6EA750D8888E3BE + 45406565D047635DB5A3421150A4AD7ECB531BEE6AEE74C89B07FA8C39229E14 + BE920CB170D251E1EF67871468730AF3F9FC9495958905103233D40527383BF9 + 23FD89B8D36E57525353C3435D5D9786C463D8780DD7BE6B57E3FE6FC6E52C03 + 9D6619E834CB40A759063ACDFF1EF826902806E472F9B7FDE05B8ABC848881DA + 797161877235B91C707726B0EAC5F158AB3FEFF1E5A227121DFEE9715B5C38F5 + 159A254BECF178E299C0AAE7C7EEDCE14B456A3F9A0DAF4E8CDFFE980D740207 + 8A0DFCDB1B0C87C37B6AD76F78F6635FCC9B5E51FE21702FD0EE4D4F015400F5 + D70CA8AA7D69FFF583DF543679D219EF078834A2DA513A39BC3F7AEAFD0A8181 + 7964F181636363ECFB29FBDDE77F84BC93193928C26655ED2C9D1C7EB7E2786F + B9954D1E01AA8A8D5B009E59D3C4BE5FAFF3081C10912645BB4A6626DE2EFFB6 + 77B5954D0E00CE4E524E802B1E7F9D5063BB25F09E8834ABEA33404F78B01F4F + 2619009E2EB0F37EE015D780A1FB765822B25F441EB66DFB3981B866D34C55D5 + 73F1E67B4E03A7AFB4CC377D8EB2C143956EE1002C843D22F2A8AACE89C82E60 + 97E10B928BD6912BACEB18B0CD4DDC25A0D2A7A24F8888A5AAC7819402577127 + F083DB38000B3B7708F1B4AA68028800ED9ACFA5ADE12F0995060B2A2B99F9C5 + 7DE06FF11788ECEC3E28A66522D28B6A9F986673A9A5B3EBCE1C5E9BCFE75B0C + E3CA363DAA4ADAEBBD2D9BCDBA0614007F6C33919DDD88696D4378073862662F + 6E7DF0C21799D64DEB7787C3E14227D95DE03F906D88EC05FDECC6127DE4D59B + E6B26B82DA2082794D810BC8AE6EC4B0DA45E851E59380A92DD1E991EC74E20D + B08B7F3DB264581790A6D5211057A54F555BCEBD7C37F685F345072E59B6DCCF + 23CC9D1F21107BE0248631019C0486663EED4167534507FE0942FA2B22A8E8BB + 500000000049454E44AE426082} + end> + end + item + Name = 'control-tab-filled-arrow-right-2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000015F49444154388DA592BD4B42 + 5118C69FF7DEE3CD2587127228A20FFA401AFBDC126C750EDA7209235A12A17F + A0A4A0AD86DA82DCB236239AA2DB524B28576A28CC20F02ED61952EF394D89D9 + BD57AA677C1ECEEF7D1FCE4B3B97960517158C1B753B3AE1983300481C5D48BB + 70633E446EF03AC04DFEEE0144374F6CB3D2F303A855053799F7BACAE63AF288 + C7E3B615DC944C26E9DA6B42F9EB7400686795FF0100FC1A6001D802C0BF8C96 + BFD0F8D862DEC5722078D8C778464A79FA5B40C2EC9D4EBD8E45CEA17DAC3C71 + 1971037000469337AE563913C07EA1EACDACE7657888FB1C0106EFEC9F2C0782 + 80A2020024805A9B0F04A400286685CE74CF60D8B1C25BD7284AC361D1EC37DE + B69472D716A0691A667A7C78F7D7949AA4FA066605B82B1308B40A6049020B94 + CBE57E9CB210820B210CC6BEF16F8F5F28B6F7E88911D1328059AEA78B2C9BCD + AA4E359A75551D6144DA148010D7D345F3600D9FC9BF79B7BD7E04F100000000 + 49454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000001F149444154388DCD91B16B53 + 5114C67FF7BDEB6B302F34C4802D6A15520475E8D0A783044A1353412DFE0322 + D451177172B193B3954E71112C75D24E8A93D5549C22550B45ADC4A00E96468A + D1D7B42F4DDEBB0E6931D5F42544073F38CBF9BEFB3BE770C5CDE7AE4B6BD22F + C7F5A62109F060F6BD5A2CAE340C74874D86FB0F8A1687D6808BC515F28562D3 + 70A46BBFAF5F59776AC0EEB0B96DA8CE1B18BD9FF7E31573AF32731268F5A427 + 7EA6146EC6D4CB49391459209D4EAB7CDE77BAAF52A914F1E449668C1F686D53 + 7E93A179744AE7DF0137F55F01ABC04560AEBE29DB84553C4D9E5F0BEFBD17D2 + DCA9A0693EFE1B6045C1B9E503C7A7968E9CBE1AF29C49BDA79AF294BAD62ED0 + 0616D63AF774B83230F49DC085DB5FD5A06D54AFEC54CD8177804F0DFA71B3F0 + 6EFE5BCFB16134EDE167474CDFF8201341BBF78B2F502126960E9F9A298776A3 + 44DDFF098D6A4708214449297506C4238598B6835D09FF0D854671DFD1814A30 + F2B4A1BD51BF16E0AE2FD0307610D4DDD7AB420DAAAD0F711578B5A604C68108 + 7049025896452C16FB03188D46FB7A0F0570F5F2E663A8C1569F2D6B2F6E7D94 + BA26C424B00B48784EE9AD043296656DB7E4D98DDA224FA9EB395BE942300124 + 80A4E794DE14C64690D96C36E9777623B9BAC14BB75F0A840D9CF09CD27C616C + 84F5DC2C3F01615CA96EA9F490C10000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000002BC494441544889AD94CB4B54 + 7114C73FE7CE1D753475A29A16E16294A220494CA34D8F5D19512BA5A24DB469 + 5108B937105A0C040581D19F10054956D48C69630A411045281899163D54CC47 + 3AEABCEE6931736D4687F1969ED5F7FC7EE7771EDFDF39476EF5259300AAAA22 + 220EB079E3623DDF86DEE2444C80CFE3D33A3C310D88A68E7515AEF279F1FBBC + 8E9C660550551D9E98A6EBC388E633946ABFF87D5E54F39AAD0E902A3F956D7E + 8A84B40D479B9A999B9A58D3F9D8E8608AA22A9F17A9F62F3B015D852BFFD2D3 + 5A77EC3CE9E0A4F3C881090FF43F0E9BAAAAFE7FE057555B57E839B1C788B795 + BAA261F3D8968F120A8534180C3AED22C97098F32E100810491632E98E60384A + FB3FA4C415A3DC5C4A75915D9A66D4E804E7BA4B1721A0089AEA2211275DE49C + A2B42F800DA5C82235955962ACA4C856D6C22BF4187046556FDB416C9F1B4151 + D412D7B9B8A7FC914087AF4804B8629B99EBA425AAC8D9D91D359DE37B1A6A0D + 4D8ED679A7AF2EC5E2A6A7B060430204D470754E551C28896DDAF604F8DA65FA + 8EFBE713CDF56EDD0DEBFF8316548F98D1DF114BAD0BC0DEF1A8F1AC7DD45D76 + 73D81CFCB2288EFEE015222DA984335614F68946CABFBF63A662FF33451B11E3 + FEAF184FBB275D27B4E4F08C138A66A3A5DBDFFEA869246916816477B6E57293 + 7417238601C853D46AC29007A23CC15DD4E06892E39ECDCC6FDD790DC85A7439 + 45C49E868322726F4D8A00442D44E465C62AB093C85AD169D98E7009650EB8BE + 4C51E6C34C5C5656C6A1DA5DB8FCF170244138B922E1A5248C2C18BC9E12009F + 888450E68153AADA27030303897C1527128909CBB2DE141414E4BCB794F6BBA3 + AEE71D63E636432404540227157A17DFBDC01491B65CE52E4FA269E63C4FEB3F + A316C1A1398A0D210852097A5A557B17DF773379E732664F4F4F5BBE0AD69229 + 8F8F4FBA6F017808DAAF4A8FED9C448C3FC7B30B2BF98064590000000049454E + 44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000261494441545885EDD74F4814 + 6118C7F1EFBB3BB3B3DAAEA868ADA599D441A9903A497568154DE90F74B16B99 + 129D83ADE89616E449A8A35414A454A656978A95A2504F16C86EA845867F6ACD + 75D5DC5DD976F6EDB21DF29039A3EBC51FCC61E079783FBCEF03F38EA8BFD18D + A14849647E8607D7EB8CF527A3EC39784C37DA3CFB636213B0680A0070A9AD47 + AEB4B1A9F6B00012661607B098EC5F317CD5004200529ADE01C5384090969195 + 303AC4D3E39FE8BA7901D1F24E373C8466121CE9B3369E398452953D84C7E331 + 7D962B497373B3E8B70701F34368384E25B6BE803FD9006C003600A902C4D713 + F0192805DEAC0760246E73947F2FA9198A64169C90F036958051A0627CDFA9F0 + 5471F5CBD103E70AC2D945C78510BDA902E401A56A343487946371CDE9FD5A76 + 766B7E59E5515DD7FB5301D0804779BE679519E3030D205FE99AD3DB975FBD65 + F0A7B526150000BB45FFD551F0BEDDEDFCE6AF035ECFC4AD3D573EDA729BFAA7 + 001337A2649E279F7FC6AAC75C9B07BBE45CCEAED31655BBAF23BCA1DDD5EECC + DACB5FCC020626F79E6C8DE4ECCC5BAE3021A58BD822A8DA45E00EE0CD3852EF + 360B20E6C8259AB57DE27F6AAD4BDEA5902DA601D65818253AB76DB9BA844C10 + 57D3118A2D0D78884045D2600AA028CAFE92A1EE7A31FC74B9D25050CBE9F097 + 9DB70BB80B6848CAE75FB44E0BBFDFBFD6B7E2D0F0E858D5B511D51770147602 + 8552CAF205EFBD40A8ED2A8ACFE75B7A34AB1A99E9A223BAC31670284F802229 + A57BA1B733106A6F0440ACE5E200F9B73EA89634E763A058823BDCDB393973DB + 03C99FAA35FF1A0A7BBA06CC021591BEAEBF1607F80DED6ED5E779E0B2170000 + 000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000038C494441545885ED986F68D4 + 751CC75F9FDF5DB7ED76BB6DECCF399DB3D5662D3202392791D81F0B7AD292C8 + 62A1743218F4402508A1C0072EA1282AA23F3364D9834D57093245977FC08114 + 4487CE071351AF703B666B6D73BBDBEDB6FBFD3E3DD8B44552DEFD7E713EB8D7 + E3CFF7CD8BEFF7F3FDC3579ADFEAC02E0AA04AFCC6283D9FEFB49DB718F9F8AC + 79DA6E88AA025C1A1BFEF5F5B64D75F6AD16E1069E084786753C3E9371C88A8A + 62EA02A55EE7B4FEC20D10FE6598C8C844C621EB1B6AA80B945A8E592DC27026 + 460074A11B1DC511414300309DD75B5862BB8808A0EA292864CD735B9C88247A + B99FE895FE79C1D5B555DC57599A71586D65092035452595BB9ADFFECA013DED + EBEDD8DD17BDD28FBBD43DCD43BE3833EE44E679C91813834335C02EBB6A5555 + 4B29F27A76FB5CC93E0077D03F487B573B9148C46EB623B4B6B6B2BC62256716 + 26CCA15DEC2C1EC3C46398C05D2AB8989CA05D728276C909DA252768979CE07F + B017D8F76F058EBC0733E40B45B621026AB90442B72BCA96E0A7496FD98EA1D5 + AFE69BF7E45BD5E1AED6821B432E817FBC76B3B1C4FB801DC3AB9A245E7EFFE1 + 99E265DDD71A43AE4471758B61189D7783E07AA0CA333DA6A81E1691E7670BCB + 0F5C6B0C1995ABD66EF5F97CDDD916AC074E052E1E5FE28F9E6FB72C739B886C + 9C2D2CEFBC50DF2493F9655B54B5F76671B67AF001572A79B2FAFC374FAB617C + 3655F5884B0CE3A3EB669ED976D9DAFCC292B99FA2D12890DD63A6C13D377D72 + F9B9EE8ABCA9EB9FA8EA9B22C6CB2373AEFD5F0EE61B67F21F069C9FC1F78013 + E90C70CFC67DC5178EFEFEDBE32D1FA2B844E45D454DFFB3A1AD80E5B4E0A591 + 951BFA628186B406259349482620CFFBBEAABA44648FA2A6FF99508BE33D982C + 0A10AFA8EF02D6A633CEE0D62F190A962021159DFEBF36493F90D677D94D39A0 + 446085AACE201C715CB0F08F08CCF7E21D33158B33F7E03AC470FB81EF159D45 + 7851CDD40947053D1E4F53EDF8C0BD3271F18EEA2DCBA2A0A0A0F3E7B2C6AB63 + 86AB083886F028CA4B6AA58E8FB66F470606064C2725D3617272F2834367CFED + 3CE47DCC97CAF31D13913596656DC2327B46F76E2711EEC50D3C9525BFB951C3 + FFC38F4B3714A612C651A0D1B2AC57809EB1837B4884E72F1309068359B1F36F + 7C83E165416F2CC511907540B3AA7E377EA08DD8E9AF6FD54956EC809A8EAB82 + D20B3C096C56D5EEF183EF103BB5FF6F7559BBEAD44C29F02DF09A727B39803F + 0165274A61E18BBCB00000000049454E44AE426082} + end> + end + item + Name = 'unused\control-tab-filled-cancel-2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000019149444154388DA5924F2804 + 7114C7BF6F66D4D6666B85835D4B8452CB8D33B19C5C6437B5E2E024B9D0A69C + DC5829C54D991CACD8DAD6BF9352A48C830BED2272401CC664766BCBECFAF939 + 901CD68CF81EDFB7F779EFFB7A3477C8184C74777122CE0E36FDE84B0030BEBA + C7F39953BDAD6406FF0298A9D85D8DC1E98DBCDED3FD35C82A8299B4AB2351F2 + 155D22140AE58D60A670384C8A4D83F0D7E900502865FF0700F06BC01A00F57B + 8173AEFE0A2070BED8681841772EE7C3671311A9B78AD2EE3D3EB604AC7BB3D9 + A1B1546A29944A55D47C402ECA73395FB52C57B8F7F7652B408B2608F5CF8210 + 2B656C65249DF6F464320D23BAEE29338C1500312B40C9BD24EDCE3B1C37AA28 + 064B188B746732936EC622200A3EDAED5BD647242ABD2A28881CD86CDB001688 + 6802C0C2ABD3B973DAD7677D4422523D8C059B5F5E3A010C73CE67000C8BBADE + 511B8D8292C9E48FAFCC397FBA5594B62A5976B90C630D44FDCCE9DC1475BD0B + 6F6FCB1C084889444234DBC07B7E0E97618C02E87FB0DBE3677E3FEAA2D178A5 + A60D10107807AEB3A1DFCAFA19810000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000023449444154388DC592C14B14 + 7114C7BF6F6652F9B5BBB37ACA432DB4127492A5D90E2215C8EA29032B24B26B + 0709EA12DD8C343232A84387FD23BCA46BB01065180B2E882D48B32DB5D44184 + 58659DDD467767E6F73A6C42848D53047DAFDF2F9FC77BEF4B4FDF7A1E8249BD + D5AF1E18D200607EA5C41BD5FABE81EE6808E74F9DA080435BC08D6A1DE5AFD5 + 03C35D4762BEBED3DC6D01BBA3A1DF867EF2CE4ECC96FD78D58FAB8B050D40D0 + 955EF9991A798B21B531A00D767D403A9DE672D977BAAF52A914FA0786F0A6CD + 82F2D7945FD4A648E8DAEEBF03EEE9BF0357013CDACF60E6CFC08F1E0612F36A + A79443BA945BEB9AB6E310DDDDB3362B95AC659AE3BDA61918F8AE53CAA19BDB + DBE198EB8E6684989A17829A8A324140562914468EE5727DBA651D0A0ACCEA52 + 6EC55C7754303F1BB6ED3001930B42947B1C6776AC56EBD33D6F0EC08BA0C03B + EB9AF62D23C4830BB6AD7700D3C3B6CDC94663262AE5395DCA39B48A7F2DF00D + 1DA27BF34230B560D4CEFC30E6BA71005701BC6655BD5C8A449AC19F02505351 + 261784F8946C34A663AE7B9C88AE33F37B26BA642712DE9A61FC596D08C8F638 + CEF3A89467008C82B944442709B8D1512C7AA19595D6970DC3403C1EF7856D56 + 2A59A550B83856AB9DD6A5CC806889811100B7897946ADD779309F7FA2015834 + 0CC317C6CC5F2CD31C3F9ACB25A39EB7006089156564279170DB8BC5FB6ABD4E + 44F49801D6F2F9FC4090757B4D1351CB3A0CE025802BA548A4B16618082B0A06 + 9797A718200222DF017544E973B5C8386B0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000334494441544889A596CF4F5C + 5514C73F67E6BE3265A66152297147C636BA28158BD569A20B639B52C18E1BE3 + A26229A9C645A3FE074D644774E1564C8CA62E1A625D59A86082B45ADB261562 + 1D13CC8C42C6C50C69C4D761A8CCCCBBC7C57B500432CCE0597DEF3B27E7C7F7 + 7ECF7B4F3EFADEF30054554544EAC0E6C373CFF0E7EC4FD46306E0F7C2A26617 + 160151FFB16EC2FBDBE224DAE27525FD4F0155D5ECC222DFDEFD436B05CAA184 + 24DAE2A8D60CDB5CC01FDFEFB636454210C30BAFBD47F1AF856D93E7E77EF529 + DADF16470E25D692806EC28F3DA4E7C291EE3E82E2047D6C81994AFFF0F59451 + 554D34C0AFAA5ED870DE12EF0E5506F78457A64CF723BFC9C4C4848E8F8FD7AB + 225997704BDFD0D01025AF897B4E89505D6DEFC0A2E1322DE61F5F45ABA3E9BA + 19EBC15BF982210414417D1589D4A3A2FA290A7201FC2F8AEA5A88D0468A560F + DBE0BF55F515E0EE465F50D8AAEA2F00A180A2D5B1D60E35B0EB406FABB5A37B + 544F08FCBC3E0ED0B94CE6BCE6F35F3D95CBF98BD680DD37AABD2796976FF52C + 2F27E78DB97329163B9933E62AF024E0458C79373F32F249D2753BDB0B856C23 + 051438D362EDAD9E070F92ADD67EB7B75CFED2595A3A7BD12FF24D5875B8AB58 + FCF8583E7F34E279A3C0B54665FAFE8AC8CD7963EEECF5BCCB2138DD512E73A6 + 581CB8D2DC7C749FB5E554A9946CB5762C6868A85199762E898C5D8A465F7254 + CF7694CBA1B0C8E98E4A459F70DD0181A403A341332FA3FA63A37700225D3963 + C62EC66227FB8BC5FE83958A8444FA76A9C681E780B08AF4A8E3DCB81D8FEF78 + 930FE78C19BDD2DCFCFCE3AEFBC62ED516A017F080E3EA3837DC54CACC46A3D5 + 9DC85444C486E1D3566BAB02878167012B22616040AC0D376532D550A9F450A6 + EBB67C3B6C23C6BCD3552C0EA74AA5230E8C09380ADDAAFAB688F453ADEAEE99 + 99378F4D4F5B49A7D3D5066E40E73299F3F99191E117B3D9A7F779DE381046E4 + 943ACE75AC75A45AFD027815F85C55DF32223218705BE3EBB486D3EDB1D8E5A4 + EB1E8C78DE55FC9F8653D671AEDF4FA59CA64CA6129999E913FF0DD10FAC98C9 + C9C9C10626A03397A3BD5098076E021FA8EAB5DBF138B3D1682574E000C7A7A7 + 2B8FC2EBC067C0C4BF877824E5EC65F3A80000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000322494441545885EDD74F685C + 5514C7F1EF7DF3C2E4C599900A055709823313B0EAA27621ED42A8C48C7F4AC5 + 495BD35833A17151178D6D89C1AD223482D414FFB4421A51123B98A0246917A5 + A5534AA68BB682909049872E8AC140D292F997CCBC99DCE3C224425074665E70 + 93DFFA9C773FDC7B78F73D75F4F4CF94151196528F18FCA4A3BCFED5983B76BF + B6526EF3E2FCEC6340AE220040CFD03529B5F1E3032F2A4057B2388051617FC9 + 70C7004A012215EF80593E4061D56ED3E50EF1C26F097E3A7B1275E6E64AD943 + 58491EDE8BB93E0AEFC16C7A3C4E777777C567594A7A7B7BD5ADEA8740E54358 + 76BCA6FDFF02D6B205D8026C019C06947C37380948037B8148294D655F461B17 + AF12793598CD4ECC9AE6C41DB71B943AF04FC5B66D8F3D3D3F4F34107004A081 + FDC16C76A2359B1DCCC3D805AFF7C875CB5228D5B2B1D8308CF17824D2128CC5 + F6D7D7D6BEE304C0003A674DF3661EC6DDD01F4EA705787B15115AAF14B9E4CF + E55A765FBD1A34B41E028E3B750487EEB8DDD2EFF5B677A4D3CA0D17C2E9B408 + B445FF44BC89C8A5C642A1A52B996CAED3FA07A06BCEB6CF3B0500A5DE8A5A96 + 00E155C44038950291C3376A6A6E070A85BEAE64B2A94EEB8BC0FB73B67DAE79 + 7ADAB1215C43B4462D0B05EDE14C4655C3407B2A252F2C2F7FFA94D6AF7B442E + 02277EB7EDAF83D3D324F2798701AB88EB6B3B91C928CB30069E2B167729A58E + 01A7E66CFBAB603C4E229F0736EB4DA8D4E1A865BD77CF34BF05CE1B86710218 + 02BE3C984890C8FDF52BB1390091D11DB67DEEC962F115A0534406815620F459 + 7D3DB52ED7E6015C8631F68C6D1F3C9E4CBE5423F2A35E59F94044DA80630ABE + DBE9F18446FDFE75849A9A9A72ECABB8582C8EC72391D09E2B57F67AB51ED65A + F73CCAE5FADE7DF080D30D0DF82CAB03F80268BB9DC90CEF9B99C19C9C9C74FD + DB83FF4BDC4AF1ECC2024DB158B34BEB6111E9592C14FADEB87F9F5F9697F935 + 1EE77220D0EFB32C057CFFBCC723A37EFF88726271806F1A1A38B47DFBCB4AA9 + 11E0C3C542E1F37D3333DC5D5A5AAF79A2AA8ACB8D8DF8AAAB8F02678156C700 + D77C3E76D5D58D28911B8BC5E2998D8BFF0DA21308FD01739143E9102D121A00 + 00000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000466494441545885ED984F4C1C + 551CC7BFBF99D9A54061815AB65BC33655A468348B31F462D2AA345134D03F07 + 0F3D7850CBAE80A5B6145A6C51D10B18A3AD4037A98231B5ADB1D5E8A121B150 + 309E243DEC8584C81FBB5B76BB5474770029B3F3E6E78145B74AD3949D2526F2 + 394EDEFBE693DF6FDEBCF786F636752159180098311BFD15DF7536269D97087D + F4A3E84D3684990160F8B7D02FD5EFBE5898BC55020A80A7AE8E85F8F7D95BCB + 0ED9B4DE86427B6E86795A7FA300C0D5F110C62623CB0ED9FEB01385F65CC334 + AB04247362080038FE369A8A298212010084F97AF116270B110160B6A667626B + F94B664462E2671F26467C0B824F6C76E081FCDC65876DCECF0140CEAC9CFCE6 + BD6F769BA0C7033D5D2D0313233E28B9CA1F7864ED2C6E2973CBCF9B9F412470 + DD09A0395935876323B232AC2D6BE5F90100504AB303F09EF5626C6C2CD96C53 + 70BBDD28585F84FE78C14C5AC5E6629504AC9200F01F154C6455305956059365 + 553059560593E57F2F28001C0230B2DC80540A0A30BF6C318C13127319EE4D52 + 2B90653C999999324101E6571ED3B42F3E989A5A5717894CE408B103C0E8DD26 + CECCCCF48B50E864D5B56B693DC5C599A69CA897E0880538F3AAAAAECB378C9F + F235ED9BB468B4DE6BB3954564B917C0834B4D22A27E5F5F5FE5B6E969610D06 + BF862465A4AA825502D8386EB14C31F02D111D7469DAFB1E55BD1EAFE45287CF + 7E9BAE57560C0D09DBE8E845029E05F079AA041F32882E7F9695E5F0592C070D + E61392241D72695A9B271A0DE40851F60FC9811C212A3DAAAABB34ED0201CF31 + B00F40772A17495144967BBD369BC367B5BE61309F9488EA5DB1589B3B1A0DD8 + 162A390EE08745B9124DBB08A27206AA007437FAFD29FFCC144564F9B2373BDB + E1B35A0F18CC1F4B44F52E4D6B754722FE5C5D7F3A4F880A8FAAC64A34ED0211 + 9583D90DA0ABD1EF4747386CCEB5F32E6C894B967954B5AE44D3204BD261D7FC + 3CB7DCBC794496656B1EF35744F43C337B007CDAE0F7A3331C0660D2BDF81E24 + 77C42549519486FB0C8388790B012F80F935023E4994035676AB2B8EC8F2F7A7 + B3B3F32392B49F993B25493A4C44150C543370BA21DED644567A2F0E11F33431 + 5B00DC1F7F460036DD69C24AB51800FAF284D859ABAABA8DF94B022A98B906C0 + A344749499B9CDE93C06E0B62AAE88A02CCB577263B15DB5D1A85E1C8B9D27A2 + 9DBAAED710915722220688889AC0CCAD4EE7F144491A1A1A12A994D334EDCA60 + 4F4FE5E3972EC58AE7E6CE11D16E5DD76BD9304E7D180C22232D0D35763B81A8 + 9388DCCCFC1E80E6C5C5A20078269582E9AA3AB86B78584B9F9B3B0FA2DD4288 + D7019C6A0F87F1CEE4E4E230AEB6DBABB150C963F176BF4500A8B4B4346572C7 + 1D0E6C9B9D5514553D47447B0CC3D8CFCC1DEDA1109A82C1DBC6B61614A0DA6E + 2722F212D13E666E21E06D6570703025725BD7ACC176C35064493A4B447B98B9 + 0E4047C78D1BFF920380C6400000B866C3060F331311353333A76C91C8440090 + 06C0CE86718081F68E7018472726EE38E72F49BBDD1DFF5B5BF027CA00EE61A5 + 67A6D50000000049454E44AE426082} + end> + end + item + Name = 'control-tab-filled-redo-1' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000001B849444154388D9D923F6813 + 7114C73FBFBBCB7996449B98E0624589D8C1453A085D3A34D6D5451407073188 + 6B06A312EAE2D2060A2DB8160507BB888893284A45A88B08951C354AACB488BD + A435D4266D93BB7B6E52E1EEAC7ED6EFE3F3FEF0D4E41BCF2382A58577FA44FE + 54686E00DC7CF85282C2B18BC32A4AFE5B1045FA5096FCF893C0ACB1FC19F5B7 + 15A258FD34A71B67521F29168B812B44512E97D55B6B15ED3F1ADB800B90303A + FF261078DDB1F60FF624D357000F7671C41DBC6A278F9CFD3A98BF9CDDEB3E6A + 6C7A57772BE8025560617BDFC12D774F2251F57971BBEA0F9F686AD10251DA74 + BBF770A99539D670CD389D781A604C2056DBD49ED7CC93B95081A0EE39C7470A + F5FE91495F372F28450260E7678992A9B023BAED645FA9DE7F7AC2D7637111FF + 68B7BEAC75EB4B9A8868225212111BA11026F8D23E90757CDD3C275058BB7F6B + EDDB8D21B617E701AE03977C91DCCFD919274C606552BD001B0AD246A60F655A + 283D06B02548AE35F778E5C78351946DDB41AF2CEFBFB70646175343AE700DB8 + 037C587F366D2BAB07AFE9B0FEF42E888F51A954F4A011940FF18E9A6FC6920E + 701EC8B82B357B6376E68FBA5FE7B3ACD4F8C927EE0000000049454E44AE4260 + 82} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000026949444154388DA5944D4894 + 5114869FFBFD39EAA8439636940C21C52C2CA86623081232B68A7EA020A48D11 + B5EA6F11441414B4E867212E426A2311089104495944A1508B86A9E807A9B4B1 + 48D08C5272D299CFF9EE69311542F98DD8BBBAF79E97E73D870357B53DF23C16 + 26F3708359D06401F43C7D27A393E97F1AC2A1205B36AE510B0CCD034727D3A4 + C6270B9A972C8FF8D667DD4C1E180E05E735CDA9359EBA91F2E34D0E3DEF7B61 + 010B1DE9A15FD1525E5FD0CC3659CD4BDED2D1D121A9946FBAAFE2F1380D4D9B + E977BE632C9A9297FC3E3886A6C2CAFC1750030780B6B98FD622619E56E6FEA9 + EA6867597180CAAA6A1BA85B2CD003F67E0FD75D1BD9D872D232D4EB54C83D54 + A765F76281065091290FA3ADA2AC0B5D5D9FED9DC3B3BA2B92D60B030A0C8932 + CE7A4EF09EE7948C6BCB4189009C07EC1F5A5D7FF0C5DCA18D586F41A0407FA6 + 2CBC6D3CDA4CBA2ABA5DDBC51151CA504A81FC59F228D06D044AB716027E754B + 2A778DC45A2233A19A5EC006DE90DFF0DC5447291510A4DE1728D0F96D55FDD7 + 9950CD43E009222D3A3B9DCD8DA5304ACAB1AA22009B801E1139079CF1EF5019 + 4FD2CBD6AC564AAD1591ED99C164F64BFB3E64668AE5A7EF003402B744E41222 + C77F3CEEF65F8A65DB39C3768A7E5DA7DDE117C8CC140046A014E02070193896 + 4EF63271F5441E188BC5A8ADADFD0B683BCE3A3358743B392B9F806365CD7B8F + DA2BA3B8EF9FE14D8C612E5DB11BC19D4EF63271E508680F353030F060BE0EB5 + D61FEF7E56ADED1F02711437115E012F515C1CBFB06750EB1C00EEE053D0F98F + DF4A24124D7E633B3950B31BEE8B53BA1E68056A104CD11EEEDBC45FFE9F3C55 + EAAB31FC6E970000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000035C494441544889A5955F689B + 6514C67FE7CBF73549D77F6C2CAB6D9D4BCB282805D9A617CA649349562F5436 + 149421CC3FEC62A0BB12E6C59865208589C210A420F3D20B2F0655616D672938 + 9C532B226DB7BA54877376256B4A97744D932F8F1749BBDA664DAAE7EA39E7BC + EF39E77DCE79DFD73EFAD6F70124C9CCAC02EC9E7EFD316E5C1DA6127101266E + 25159F4A02A68259AB705BA48168A4A1A2A0FF4A2049F1A92403BFFEAEB5165A + 47D4A29106A43597AD4E50387EA1DAB529328A6BD8F3D2DBDC999E2A1B7CF28F + D102456D9106AC23BA1404B40AB7DEA3E7C4AED8218AC929D65102333472F1CB + 215792A2EBE057D289157A491C76B25DB581CC901BDB346EFDFDFDEAEBEBAB74 + 8A6C59C092BEEEEE6ED27E908497C6A9A8ECFF201B020BD4BBF3382AC852458B + 4A395CC21797344861AE016108C70A0214A66851298797EB988D63CED338CE73 + 9E57F54DD10E142FDAFF11C1A8EF55EF4FB4EEBEE987EA9CD8E6DC819CEFF77A + 6E21B4BB92A2A58D156060148825B7EE9A4CB43F7332EF045A7F0A670F3F9EF6 + 9F6FAFD31350BC6866955CB49253540B8433B58DE4035E0AB357C6E72D7FE6BA + 5EDBB7397F3E94B77553E40B7A817360D730CB62960BCE4E22E9B4818739A7E2 + 6965E373CE11A5B6E7D793E0A602DECBE98DDB2ECE3ED041A6BE09DF0B937743 + E482358B4D7D5F920B9C04B2445A8F56DA8399BC178A25DAF68C25DA9EEAF483 + 35C731DB8914BA6F39E288193315F50073DE9B69D93196D8BEF70DBFAAFA13A4 + 71A48F815471DFF267622B701898467C51094519BFAAFAEC74F4C988EF853F40 + 3A2FE90090C925FE24F7771CAFB11537F2104033700198013A05C3955034B210 + 6E48656AB7BC00D4088E2BB790B9DD738CBBC37D9817A4F9C3CB089A0C068088 + A418D28F7397CE951F53202537881C772380C18DF9AB97B83BDC57F03A019CD0 + 06804F814649CF22FD90FA7980E467EFDE7BEC968DF74AFCE0C3D116428E468B + A67DA14776537FF01D9CDA4D20A1BC0F7014E8C4F86EEE970B247BDE023F8B8D + 8C8CE4CA3561E2AF5B1D67A69B7FBB9276BF075A10AF0AF59B591E20F9F9296A + F6BF098285F830B77B8E815F08EB9A59579196FBFE4EDB9AB644DAB38C5D49F3 + 22D06B8E7D8D9805AE633C3A77F92BEEF49F2D599C3B3838D855EE0400A1F900 + AADB3B618EBB53D24160073087D6DEF70F4A49144994C80B150000000049454E + 44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000312494441545885ED975D6853 + 6718C77FEF3969D23426B52DCDFC18460A5528DD0A0345714AD4E95C290C6F7A + B3ABB66E9631586958DC147AD32158060A9D82504136ABD382EB905D68AD626D + D7B2815ED806A4E2FAB941DAD8244DD334F53DEF2E5C065691F59CCE5EACFFCB + F33C7F9E1FCFFBF0BECF11874EFC8429294532FE848BC7ABCDF9FF96AD744785 + 346B8E4E8CBB80942500802F2FDD528B357E5DE9178061A5388066D1BF68F025 + 03100250CA72076CE601044E4F9E61768827C71ED1DE1C409CEA96A687D08A22 + 83BD7A63D5BBD8F6E73F24180C5A3ECBC5A8A9A949F4654700EB43685A6E5B7A + 7901325A015801F85F018C01BDCB053062087D8FD41DE50B214CBF058BD0EFD2 + 96FDDED0B643F1B4ABC0BB2FDA5321A5BC9E09BE8E0EB4A43C6B87670A8B2BE7 + 73F26FFFEA2B2F184CEA1F6482AFA3038DCEE8E88F321A3EABE716FA26E7F5CE + C080EEF70C84A7FE0B8031E0063004CC653E6AC6D358F86435DE60EB51DD956B + 978ACEA99203FED5955F8D2D15405C412099E7FB2EB6AE4CCE79D6DA0C9BDD9E + 092ACD46C13B891CE43C0A1A84C083A2D3BDBFC6BF140031A93BF6FEF9D6870F + A67CDB3E539AFE891062330BE6CB51B0C0250068B10CA0A0FE8FB70FF64F6DDC + DE0E6C008E29A57A653C9262C1C6A6D9B3114E37C07104E5C0A756018693791B + BF8FFAB6D6016F023BA66F5F48C4AE9DC688859F4BD473BD788FB492E5743702 + 152876CFF4B50F5B05E888AD2F3394D03F0682F19BE713D14B8D2F2469B95EBC + C156B2DE286A00AA9452FEE4FD8EC791962F2CDF03A373ABBC1A4214A3D46FF1 + 9FCFBC3429A76C0F596B8A6A805A60EF6C7FD7A3C8D9CF4119D6005C2E976BB5 + CB61A0D40C42E467AD2B7E699E7C761C5781DDB3FD5D0F27BFAD85A7CF563211 + 0A854C6FC5A954EAE6C551EDFD2B93EE36E0717A7CF048F89B8F30E29117721D + C55BD072DCCC0E74FF531C40B4B5B599AD0FC0BD693BADAAB404F80554404E3F + 3997B8F303E991106A769A54A8E7957E61A93A80D028AC3B87B374D74EE00210 + 07FA80948C8503E3F5DBD3AFB25B7F8C94C144F361125D97EF1A526E021A8011 + 20A6FEC5BFE35FDD9422012AD305770000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000459494441545885ED975D6C14 + 6514869F6F66766B97B6DB2D6C7F242C5281026A308172A18910452AC1848B26 + 6830108160239A60B800C5480C2486042FDA0806308142080A22186222F853C4 + 28C1A4253694CA4FAD48294BBBDB6D71B7DDEECFCCF1822D54539ADA9D0A177D + AE26F9BEF3CE93F3CD4CE6A8A51BF7902E022042F7AD20C73FDE90765E7F54E5 + 4FE6F7E9868808C0A590FFEA9A2D4B26A76FD50F039857D7EC97CEEEDE61874C + F4BA995CE071D9A7751703A0EE0F3FCDED5DC30E993BDDC7E4028F659B553F34 + 7B621480A49E465BB14550530098F6EBA58E385D9452808833730C73162EB723 + 92D62BF5B436D5DF169C35A988E27CCFB0C326E5E702CA979D9BBF69E9BB7B6D + D093D327F66C3EDDDA548FE1317A9891D54DAF111D7E5E2C4257CB751FB0295D + B5A2A287C976393767E9B1D30046694E0B3B0FEEA4B9B939DD6C5BA8A8A86082 + 772A3FA41A66D35B6C2F4ECDC4A999C0032AD89F51C17419154C9751C1741915 + 1C228781FA81161E04C103C032A00C68F8F7A22DBF5B69501D738D7DEDC6CC72 + 317AC3C127036717646464D4F4DF703F05AB81D53766966BE1C2C78E885835FE + 89C5DB3373339E1791797D9BEEE7113F0EE4886698C0054DD3AB2EA9FC8A1DAD + 59FE6B51EDD3BE4DF7B383B381371C8D351F487EC97B58964369DA8E33213DFE + 7340F606CFFEFEBF09268173C025200CF49FFECE457F39CEADB0E07EF1F5B711 + 71A2D46EA51B897115550782BBD68EA86014A8B494B63D9EE56D8BBAC7636664 + 21B72740500A511A49EF6C54A813F3AF20BADBBB4E8938813D29C9432325784D + 508BC38533CEB74D2BD3A3EE09F3D1B439287201459F640AF79D2B01E8458800 + FBD1F5C448087689D216B44D7BA12930E5D979A23B7629A5A608D2062AA00619 + 9EEF765774857220CCB75D506043C857DA1498FADC22D18CA3C0294B6489827A + 2BD68D443A07AC53AE1CB4CC6C4464B152EA9028D907BC69B760ABE970ED6B9F + B6304F34A31A3806B2347EF5BCD575641BB1DFCE0C5864141653B0E12064662F + 529AFA0CE130C2AA9EBAAF2DBB058F47F24B920997E7552043604D6FC38F56A0 + 6A3558E6BDE5D61F44CFF196A1F85C842F116B45F4D7EFACE0CEB5B67FA8CF77 + E73D0230173885990C85AA37DE530EB82DE7F6CE477114E12B4496452FD79A1D + BBD78165DA2E18369D63003C405BA2F53266E7CD410BF49C711AF021C2498157 + 62576A931D55AB90F808CCC51E8F27AFC8ED02B8094C748C9F8AEEF50D5A93B8 + D96C0165022FC7AED42602952B9158CF9D75D5D8D878EFFEFF472291C8FE936D + ACF8A47DEC6AE0231129E9BD78F6CF40E54A48C607ACD172C691F9C43300F4D4 + 9EF8875C9FE05CBB0481C8C5B0AA7BABC199095C00AE23B230DED2D8DDF9C536 + 628D67067D1E0742959696DAE807F1A4497BF9561C458FCE02BE05FCC0FB827C + 8399BC6576B5930CF969DFFAD2D0046DB54B61141653F0CE21F42CCF1450554A + A9B2D4BD120275C960CB5337D60FEDE046441040F7FAC85BBE8587A63F8D52CA + 07CC0172818E64C7F5634315FC1BB32AABB60E5425FD0000000049454E44AE42 + 6082} + end> + end + item + Name = 'unused\find-arrow-left-2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000027849444154388D85934B4894 + 5118869F3397FFCF261DCB71D444CA325217525810938120144296ABA2AB5182 + 458B8A8A205A4510585342549B6AD12AB43228485DD8441165046A4AD04234CB + 626674C6B95FFFD3428DF9C7A86FFBF13CDFCB7B3882AC3158EDD84EDC425D57 + BB5920CE21A817902F2593C07309ED9181173FA7EF9F875402A1A34D0AC597BA + 51CA2A4F9BE3C176FB979786BCA9614C8930098B8D99D55BF056D4FBA430EE8E + 7CEA79E7BD73522FC8DD7E8CE57B2FEE542233CFD6BEEEC01C9BCD0E48D0BE9E + 71479B4F13C61A4FC7D19FC6CCE58A4357305A6D4F567D78509813985A0403A8 + E16934A39A1329586306D16BC85C9A4BD75528515F95C5F3F5AFF09F4313EF01 + 9A4CC5E5E804C2602C5342DEAC62168F12F682106502A11748892FAD5AFE8343 + 4AB180947E907A413AE01989E5954CC72DB66C260438010D20B0B206C0A54502 + 7A41ECB32B251137A636EC418A3FAB5052CD6DF2976EBC90322F6D4B2EB16AEE + AA460DB81EFDECC294510042C901F8182CAA94E38EE362E5D0E3B04827774DD6 + 1EF0470A2BFAF27E0C36C697151526D5DC586AFAC7C7D0EB47F37D090305ADD7 + B06C69DE06740207804D4A6466C0908C7AE3D6D21E293885E429509D0ECE8CBA + 6F1E2139318AD0C1824E605F7C6CC865B4DA31AD28A946D007E20CC82EE45CD8 + C4C40869BF7BEE7641AB138BA3B90EE85A80DDCE16EC671FA296D7BC154238FE + F522268BA379EB7CECFDF1B16197DBD9828C06898DBE412DAFD927A5EC47D001 + DC4E79BEA385FD7A01701038181F1B7EE5761E46468300CC76DF4098D5C9BC1D + AD0D403FA06961FFDD5F9777EB0486C4F8C889E8607F7F26BC30FECEAB047AEF + 7D43D280A4CE986FD7FD1D80DFB54BFC5C0457CF530000000049454E44AE4260 + 82} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000036349444154388D8DD44B4C9C + 5514C0F1FFF9E69B078F193201A9D008545B20555B6DA3A59A1A434A6151B516 + 62D3262653A3D25A13A28B6A9A1A77BA7081684CA42D8F687DB032BA50136349 + 134DAC42C4566B428158D2E135030303CC0C9DF9BEE3828765060C677793737F + F79E731FC23AE1AD7B99BC434D88D3BD479093084F0A52A4AAF3C01FC0970A9D + B787AF2F4CB636911A1B0240D6C2F20EBD86EFE02953445A041ABD637FE21BB9 + 862B3685657A88E56F2152BA87942BA71FD5062B1ABE3EFEEE73A442C399A07B + EB6E0ADFEC42443E732ECC1E29B9D24ECEE450C6A296D3C3AD5DC79829DE3989 + EAE389A1BE8189771A30D2137D4F372122CF1B56F2C8969F3E5A130370241394 + 5CE9C03BFE773E229DEE7B1FC273FFBED5A06479F16C7F0CE0CC5D372EE1898E + AED7E2A57E299B7FEF42D4AE1291EAAC876B5683AECDE58848858894FB6FFEF2 + BFD8CA9C7884DC503FC053CEA2FBD24A769800E54632A1AED8D4864000CF4C10 + A01CC8EC2160A0BA610C4016F30D240D540555066D9747929EBC0D8309DFDD00 + 83681A684DFC03E85FAADC8C943CB2DEFC36E0FCF220E9F632575809F0AD3533 + 91064E8F930CF62BF05EA8A286859CFC5592427B22B7F044DC57FC8A8AD1AAC0 + E8CE7A6CC3BC06FA7DFC6A378EF4E59DF754E22E7BB04F0DF3F86CD103BEDC50 + 3FE6C21C8A74CE6EDADE38FC68E040A4ACAAD2199F6E899456154E95EDAD047D + 26150E8E4D5D7C7B35E8AD099077F055036845D86139B32F45B6ECDDA6C8A7B7 + B3FC2F8DEE38BC3F99EDFFCA76BA86E60BB65D8EFB4B2D351C6D6AA57A431F36 + 62856FFDF7F4BC3501FC47DF12947308CF02B528BDC03E2319FF1931AA6DD3FD + 35423370164554C9B163D1B9C90BAF93B8DA0D2C7D0E2B18B40287815A3B31DF + 3BD7FD39DEDA1711916AE01B443E003DB3D8D0C5BDD8B1281A8FAE5429DEFD01 + FCC756B0FA25AC27D4FC0288B0E9F4170518C6A08077BD63BF334CFFD1B3027C + 0C520F5A6727623DA1E6E32CDCE8C559BC15B5ADB0889C52E840E85ABE32B2F6 + CF8789C8FB40C312F6DB3206901C1920DCDA444163CB45719806C805D0CBC0F9 + E88F9F10EBF92E039492F6C103C0B49D88FD1A6A0EAC607746D6EE3A0A4EB420 + 8619003987E8C95438D83672FA898C5C87BBA26A30150E06A73ADE581303488D + 0E901C19207B576D9F18461070DAF1D9DED91F3A3272FF05DEC55BFC158B82D6 + 0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004914944415448898D945B6C54 + 551486BF75667ACE5C5AEAD80B480BA5D8D6562B72D3404904B5C50B2184C4C6 + BB2151882111148389890FFAA08988929008DA2648C48712B924A43608349120 + 44504014528516536A0BA5F7E965DA993967F930D366DA4ED1FFE5ECB3D7DEFF + BFD6BFD7DEC21DE0CE292263FDE798B9C5203C22C83A841582E40186AAB600A7 + 807D0A3FDAC12E7AF6BD4FE8C2B1310E998ADC9CBB80EC2D5F239ED480887C81 + 48A52B1292D48EAB58FDB70125ECCF6220AB10DB4A45558FA2BA41D1B6EEBDEF + 31F8D381A9050CDF34667C5887EBEE7BA60B9C309C6849F69F3F90D174122332 + AC896BD5654A77FE52DA1F588DED326F00156A479ADA3F798170D3455CC904D2 + D76EC15BFAA85B44EA5CD19105F9A7771368F915B1A32A09003070C4D7D34CDA + CD2B0473E6A73B6EB302C3B5D79C332F3278B2066322B978D3485DFE2288BC2E + 509673B1067FD7F53B1D15009EBE569DFDCB5E042D11D86AE6DE8755B478B280 + 55B008B1BC006FFBBA9A34FD9F0B3A0A004D40E23F80BFE39A4E6BBDA4C046C0 + E3295D3E59C09C558288DC2F220581E6B3A04AA225132D1A370609349F05C810 + 91A529330B9358E44E012805F07537FFA73513E1EB19DB530AE09EB820DE2269 + AAAAAE4888511BC6E209E364315778285E0C6908932B88A35744246AFA01FEBF + 452212B552475BBF174D22A08E83C225408732E64EED450CCEC489A18CFC51A6 + 4BA09305222D0DA0DAA8AA977BE62C013148D635AADA0A94A9EA99B11868F79C + 328036E05CB4E3C6648191C6F3683804B02D14984577FEB26496B4AACB2C0FFB + 33CFDBA67F1522A70182331F9281E92502EC502512FAAD3EC94D8E0C9332B310 + 33B7F80AB06430BBF85EABFF26567F7B2C2ED2E6B83D4F76143D71B56D7EE5E3 + A1405EA3A7AFEDC07060F6B296875FCD730CF739D08DD1F6EB4EEFC14F270B58 + 2565A4AF790B71A71401EFA818A9C1DC0546D49386A7FF56BB1A292B3B0B96FF + D559F0D806DBF4D78453333B22BEC0E9BEDC857511EF5DCB507D561D3BD8B9FB + 4DECCE96F18F9DA7A48CCCCD551829DE22A01E0194D5C02B82AEF5DFBEBACA3D + 1C6C08E6CC5BEFB8AC5D08B5A83E071205D62A1C4735D8BBFF63FA8FEF89153C + 9EBC1AC3F41401C7011750A14A0380A8A6001184D710E34BA00ED54A84F0E8E5 + 714642F4ECFF88A19F8F8C252DA3B6646DAAC2B0BC85C00914374239D010FC7E + 37E6DCF9788A9702AC13916A85A34025AAC3080882C69E14E29D86486CCEB04A + CAC8DE5C8D617A0B51EAE39997A3DAD057BB8BDE83DB71420300E508D5AA6AA0 + FA0CAA83808D62ABAA0DB16FE218B0DD599BAA90144F213266CB4A8D67DE77E8 + B3589DEAA0704A945A1159A3F03B70389E6AECA8A6A8C06D58DE82B8E7265001 + 5CE9AF4B20077A0FEFC02A5834E29A96F9BCAA7E87C8D3A03B15F6886313BA7C + 0A75EC491D0FE046F900309118795FEDAE71E400D1B66BB46F7B89E95BBF1D71 + A56755821E00BE1270548CBDD16027DD7BDE4D2A6020BC81B0423539F998C8CD + 46DAB7BF8C1DEC1C41A944390654895069152C4CBA07C065E63D188EDEFABB6B + F0CC418247764EB910C0E9EF66F88F93F8163F15352CDF21600650E30CF6F60D + D47F9374CFBF3E97389AD12A4DB30000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000056D494441545885AD97596C54 + 5518C77FE7DE3B339D693B336D6DA61DEB48651111BA80518AE2860A04237501 + 512B4B4450C407498C62F445A386D4F282C61837A289CAD6464C5494968A4621 + 21010610175ABA408B5DECCCB474E62E33C7075BA42A3353E8FFED26DF777EBF + EFDCE4DC7305A38C961FC073EF33B866CCBF4C68B625C05C609A10C2274122E5 + 1920087C2513F12D8387EA43E1BA8D581DBFFFEF7A6234F0AC394BF12E7ADEA5 + D81C2F2A09EB69CFA9834E776710675F3B5A2C0202AC0C0F83390122FE12C2FE + B201A9A81BA5656E08EDA8D6FBBF79FFE205BC8BD7937DD7631385107539ED07 + 26171CFD1C5B2C92B4C7707AE92CB98FB0BF340854F6EFDEDCD6F7E92B236AD4 + B426BF63399ECA672629C8BD45073FBBB2E0F897A8969EB24FB562784E1F4433 + A3BE01DFE407EC5795D74AD308EB270EA42FA0F98AC95FFB769650D4FAA2839F + 06725BF7A7E37C2E0270F5B5A29A5177BFEF9ADB1C93676E8E061BE28970777A + 02B92B3660BF7CE26B396DFB17141CFF7A54F0F3E3EC6B45F7F87DBABB30AEE5 + 07BE1BFCA90E002559939AEBC759726B8112379E2C3CB2F3A2E1F0F74E14066B + 1189F83AE794595ECD579C5AC0597A3B42D5AA72DA0F383463E0920400ECD110 + 9E8EC359201E74CE98975AC031BE1C609EBB2378C9F0E1B83B0E03CC738C9B9A + 5A40CDF3039439FB5AC74CC0D5D70650AAE65D9E5A40D89D762511CFD18CC131 + 13D0626110A2400C1D4149050001528E191D6078B5A12330A9808C5B7A42D1C2 + 96CD39667C2BC30D5276C9A1B9920AC47B4F0304A3DEC098094473AE0008C623 + 3DA9058C9341806F22FE69632610292C01D865FEBD76728168B011091F8702D7 + 9B96CD75C97033C34DB8A87C50C26783C1C6D402D69926F45FF69D8A6B8E77FF + B8F6EE8B615AE73F744EAB24A1689B8C9623BD664B1A3B0010AAAD4126E22FF5 + 16DF783254347D34F05DC074A00DE0CF71B30815CD382EA57C35B4A3FA5C51CA + 8F513CF407CEF23B75CD931FEDF74FBBDB3ED04346A43355DBB7B12CDF7D3D13 + 6EE9B40DF6ED8CF84B169E2E5FAC23983BD0F849D740FD47E70A935F488442DE + 63D5645654DE0C6C015E029ECB6DF9B1B8E0D8175CE0806A88BA0B17B654AC9A + 64BA7237D8CEF6DE2F357BBE69CFD26247F79EE8DEB40AE2FFBC990B0B0885BC + 95D564CEAC9C0D6C0596587F767EA7E516B841BCAC5AFA2A6FFB01BBBB238833 + D48E669C450AA53196EDBBA7A562D578D3955B0F6C4918FAD3BDEFAE439A3162 + C77F04CB1889493AF9ACCA9B806DC0437AF3E1C6AE9A65D80353F02E5E8FFDCA + A97E214415439752256EFC9CD3B26F41A470EA383333B71E49AD34F535DD6FAE + 2676F4FB0BCF9964DB6F44B01D78586F3EBCA7AB661932DA7FAECC7E5519CED2 + DB718C2F477166630B4C4128EA354003829DD2D49FE8DEB45A2683FF57E07C38 + 6C4350A537071BBA6A968E80FF3BDE45EBC99EB7F26A010DC057D2D21F4F073E + 52E01FF82C603BC82AFDE49194F0EC056BF0DEBB6EA210620F70082957270623 + 09ABA73D251C40FB17BC02D82E13F147CDD3BFA58403D88B4B1142BC2584F003 + 7E846857B3BCA859DE340546C27724244B8D3327EB7B36AE480907305A82B8CA + E62C03F600BDC0C3D2328CC4D9505A02226F650D99159533815A29E552B3B379 + 77D71B5524C25D692D00433F2D7357FA0534023F4B4B5FD4BDE9093376746FCA + 5E35FFA9B76F00EA242C33CE34EFEE7EE31186EFECE92676EC07948CCC7EC784 + E975C0B342D566BBAE9B5F67B4041356575BD25E052840CAE55667D3B7DDD555 + A3860F27B4F57522BBDE3B05CC4152266C8E4FF2D7BEA3654C9D9DB44F15999E + 5F8DD6634DBD9B9FBF68F87062C77E406464861D13A6EF44F08250B41B9CD7CD + AFEB6FF85862A6FE951BB37817AF27F0415371E0FDA60FAF78EF4486C8CEBB60 + ED5FD99D3FEADB55C2BC0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000072C494441545885B5D8696C54 + D715C0F1FF796F168F979931DE01B3D8C2500A61B1116949178A01131A551109 + 1214DA42A948489AB6698154AA942EA9DA001272D446848686A62D4D2A35544D + 52F6A485346131810201B980CD66EC198F1DEFF678DE9BD30F5E5802E40DD8E7 + DB68EE39F7A77BE7DD77EE08F7128649CAFD5FC3FFE063B8720B9244643E3007 + 988AC8688134856E5443C069603FF037B5ADEAF6A3BB6979F305ACAB67EF3885 + DCADCD35AC888C65EBF08E9E980AFC1078D2B4A2E9A9E14A921B2FE0698F60C6 + 3A891B2E2C5F80AEC050DAB2C7114DCB415577023F533B76A465D7CB346FDF08 + 717BE080BEE2B9642C5F8791945A0A6CF174340ECBAEDC43F0720586DD7DDB3C + 053AD347505F544ACBD049AAF022B0A6ABF250B4BE7C051AEDB877A0AFB88CCC + 95E588697E5F90F599E7DE959CD36F63D8B184EAB4658DE172F11262BEE011E0 + A1EE0B2722A1755FFF04D24CA4A87BF838B29EDA8CE149FA81A1F10DF915AF4A + D6B97F211A4F0807E0E96824FD7205ED5945C3624981B96630E775F7D0315D1D + 87DFBA4BA06192FDF4565CE9796522F24AFE913F48B0E678C2B01B4ADADD046A + 8ED19AFBD91CCB9B36D19557F89ADD5C4FECE2A96B639C164BFDF2223CC3C706 + 10D992F5BFBDF78CEB0B33D6C9C8835B30ADE83C8115C1475623BEB404818649 + 5AD94A409EF1B64772B2CFEC18105C5F78DBEBE9ADF99CE1F3A7A67E61616240 + EFD8E9B886E4A5028F679FD98911B70614089051750077574B86882C4F79E091 + C480BEFB6622220FBB621DA9812B1F0E380EC0885BA45F3C08B0D43D740C66C6 + 30E7406FE11480B2B4DA8F30F4D607EA4044E0EA7F11912940B667D444E74057 + E6308092E4C6EA41C3012435D52056372252E2CE2D001C020D7F962032CADB56 + 3FA84041F1B447000A305D3D733B4C4D167019B1CE41C3F585D933475ADF2BCE + 21507B1E5BC3F1B179D7A1860982D5F712763A6354559B63DEC0A0C1FAC24AF2 + 831256EDF9EC086847AE009CE90A0C1D3C1960BB7DC47CE9029C8977B4000E81 + B19EA6F2405B76D1E0E980B6AC225468533866D556010E815D672B4079A323A3 + 40BA93870C1AB069C43450DEC4B662D17315CE819DC7F6A07058910FEBC77C65 + 50705DA9D9B4E44D00D8D479FA3FFD7DA123A0555745B4F220C04F1B47CFA0CB + 9F37A038056A272D40917DC07BEDFFFE4BFF778ECF8DE67F94A3AA6FAB18DB2F + 4DFB2671D373B79E03C08F80FE2EB7A1F04BB4668FEB50D5EF46AB4FD0796C4F + FF60C70DABDD50832B7338EE11E3F7DADEB4059DC1FC21819AE38976D3EF2B7C + 1531F683D6093CD83C7492D44C5D04C277346EBF1B79F149E24D75FD092EC7A5 + 0D13C39B8C8020B4B5E68EA7FA81558C38F40AEE68AB930A076DD33BFFEA7D0F + B7B5E58CF3E77CF4D6EF04B1AF142FDEA4223F56D53F35FDF557C4AA6F6C849D + 5D9A0C93CC95E52497CC4B0776231828CB80CDEE686B49EEC9BF13BC7C14416F + 57E1B06D7ACB6AA62C6C69CA2FFE05C8A362453F6F5AD146CB9B3A5691CAD6BD + 5B697AEDB94F247E3AD030C97CAC9CE4E25E5CCFEF768E5AB106315D6E44D602 + 6B935A43BE2117DEC77FF5249E8E86FE74858AB8E99D5B33656173537EF1B322 + C6B3AAFA92AAAE6ADDFBAAC62E9DC2EE68A1EBF8DE5B4E7F67601FAE645EB017 + E70266C76ACF3784377C8394190BF0CF7F02717B73447802582222235D5D2DEA + 698FE0696F38967EE183398DA33EF771537EF14F448C9FABEACB0A2B3B2B7668 + E4A5EFDDF6C2FEE9C06BDB1A44D8057880D258EDF986D0F38B89B7447A86F933 + 499BF36D52A63F842B3D1744C60253819186DDBD59EC58A3ED497E46C4F8A5AA + 6E05567438C4DD1E783D0E7621E2019D1DAB3D1FB91E7773B8F33F83B7603246 + 200BDF842FE2299C82C06A11F9B5A27F4459DE7174473CB2C9190E6E75CC5CDB + D6402F2EA9075775471C40BC2542F7C553182941D24ABF8518C6D322B24E55B7 + 01CB12C5C1CD2B786DE502C04EC00794C6EAAA22A1E717DD11D71749936791F9 + F86F315CEEA74464A3AABEAEAA4B45C48E9EAD480807D79F8337E35493356E97 + 5AF5971CE3007C936723A66BB9886CA467016688C85980A4A26909E1AE017B71 + BE92797E60079012579D657F1CAEAF2F5FE118775DBCA7AA75229207540355C8 + DDFDD3271826192BCB49E9C1ED0452E34A69AC391C8EAC5B8C1D4AEC26E7CA2D + 207BF59F7105B3C701EF00163013E17CD7C9FDD8CD895DBC2473D56F482E2EF3 + 83EC00FCAA3ACB6E0A85431B9662D7552554EC06E49A6DB80259E37B91518499 + B1DAF3559FF6A0DD1C86AF785E1AC83F7B71A55673381C5EBFE4AE71D0D39E85 + D72DC66EAE3F0D940249C03E776EE1A89CB5DB30FC99CE81028F0241544BADE6 + 4828BC7E095682DB7A3B64A807790A980DA422EC73E7158EC859E31C6980FE5E + 55A75BCDE150FDFA45F7B472B745B6D49F409983124079C79D5738DC2952DC23 + 276024A560852E603785060C777DB8720BC859B30D3398550CEC466950D5FB23 + 5B5637767EB0FD8EB946ECE229A29587060D07376CF751A00C7803A1D1C9A1FD + 7F7A1315DBB2CA65F90000000049454E44AE426082} + end> + end + item + Name = 'unused\find-arrow-right-2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000026C49444154388D85914B4854 + 7114C67FE7DE993B0E3775CC69B27CF53034820A2A322BB042DB140911D153C8 + A0A408898488962D2233822017519B5A8416090515841941DA6B910545A418A5 + D6383E9A7146EFE8DC7F9BA8B99A75E0AC0EBFEF7C7C9F3069B4F400FEEA4B78 + 16AD5825C8098452019F527C01EE2A38177B71AF6FE06A2D4CC41107ED32C83A + 7D0723B7A8C66D45CE05DEDFD7D27A3B70C5A3C44D3F83F38A0915940E29D1B7 + C55E3F7816BA7CC429905A5E45C6CE535B8CD860F3C22717718FFD986C9048A0 + 90EE924343B6E84BFB2F1EE8D3938F33F79D414FF7DFCE7F7E6D9637DC3B0506 + F04407B0758F3796B9C00DF2504B3EBAB3171518A3438BCDFE8F7F857F3FFADC + 0EB0D595351F8780687AAE31129A14CCD431A22110C915C429A01443098FF91F + 1C260C13941A06E5144884FBDF8DA5CD19B04CFF746C4221E7C3D9CB6240AB1D + 0BE308D13DB7C036F296E8F1D4AC4DBEAFAF1194034EB852AA06F3575FE82F2C + 6FB7DD298F232DD77BFF38100D31BC002F23B38B5477C9612C735692ED1927BF + 156DBED9B76CC7A371AFEFBB6D8DBE1A79DAF42B2FD1C83C5887595CB11E6804 + F6002B05B53D65F8ABB8C7C2C44DFF27CB9B71C0D6DD15225207948DB4357F10 + 072C3402BBACAE37ADBAE9C315C87734A200A51422B21B380B9469995575986B + 2AD625C3C1FA4AC6FB3A11119BA415115BD3345B446E88480ED0E0324B2AD6FE + B2BDDBEAEA680DD657A246234C043F6375BF75B4A499E9E8FE1C04A901AA15EC + 95BC6B9D0D4093D5D5D112ACDF8F1A8D4CDB7FE0D42D3C0B961F1391A3C08668 + 5B738F2BDEFDAE3A311C2474E5F83F6100DD1770894831B031DAD6DC3370B596 + 9F780EE7C896F6DA2A0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000033449444154388D8DD35F6C53 + 7514C0F1EFB9BD6D6FA9B7B3342ED491297F520C3CF04711031AA13258880A0A + 81B000D978F0DF1E1A1F4C88D1577D2066C1C464A04162C4487CF04597C50731 + D10717D6088253F60F5828632DEBDC6ACB6D7BEFFDF9B0056CBBE2CEF3399FF3 + FB9DDFEF0875C26C7D8D863D09C4EBDF24C89B085B05892AA5F2C025E06B0567 + 4A6303C5C99309ECDBA300C87C58C39EB709BDD8A98BC80981D7CDDB5708DDBA + 8CAF90C5D10D0A91654C3DB609DB171C44A97DCECC9D81890FF76367C66A41FF + CA27693C760E1139EB2DE60E34F79D2638395AD3D4F11ADCDCD0C6F4A36B2751 + 6A8B357A7138FDC13EB4EAC4D0CB0944E4B0E6940F2CFBE5937931004FD9A2B9 + EF73CC893F23889CF12F5F87B1E6B94A500226C6EACD00EF3E32F423C6CC78BD + 11CFCD4BD1F4DB3944B9CF88483CB0BEA512F435C510915522120BDFF8F581D8 + BD9ABB533C94190478C91B5D5175658F0E10D3CA96F215B20B02018CE914400C + A89D21A0A1D482310099CDD7902A5029508A11D76748D9685830688596008CA0 + AA40277D1D507F28C58DA9E68DFFE7D80ADE2A05C297FE697C02A0C7994E5781 + 7F4F504E0D2AE07866550BC560A41E567635FD703EB2FC546ADDFE1D4AB4AF40 + F5DEFDFD7CED0C8BC349804F1DDD485D7BB6132B14ADC5443B34F9F8966FAE6F + 7EE3586EC9EA8012ED887D27E516FA7BD1FF9B69B6B4636E6DD3806E84606951 + A46738FECEAE87C72E101ABF8CB790C5D503B999E89AABD9A51BFD8EEEDF2170 + 14D8A6CAC594B628747FF5CC9676C207DF1714A7105E0176A24802BB403DA5B9 + 36E2D82082D2F4B4235AB742829AC87740148897C6476E490506278157819DAE + 954FE67A3FA36177020091CAB557735F424150447A8046948A8BB9BD9D70DB3D + 6CEF1CD69FE93A8A9D1D67E9F19F9F07CED77B9DAA263FE9E183EF09D00DB217 + 54AB6B15FA335D1D14879278224D0017816D7500001DF818580C744AF3E99113 + C021A0D5B50A1766B1FED90ADD877FC5FA794F63EE4E60C49EF668225FCE358C + BB567E4007BE07CECE62ED148792F7ABEC12C5AB7D359867711463E5068F085F + 0071E005D7CA0FA4BB3AD0ADBFFA7E0098FEF6A34AEC8121202282E480EDAE95 + BF92EEEAA0349CE45FE323475B484ECCF40000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000045E49444154488995945B6C54 + 551486BF75CE99733A97524A9D226D81B6740A956A28DEA02662084545C1F840 + 222426C62841632092186362627CF0016F0F1A69023112D1042228015A152852 + 8407444B9B40AA40316DA1A4ADF4DE4E3BB7E5C3CCD4696700F99393AC75F6DE + FFBFF6BFD7DEC26D60159693F7EAA7D8458B4078449097109E10643E60A86A27 + F02BB047E16474E826FD7BDE25D8747492436E456E975691BFED2B24CB972B22 + 5F20B2DE0C07C5D77B0967B80750425E3F23FE0051C787AAFE84EA2645BBFA76 + BFC3E8E9FDB716303C33B8F7FD7ACC5973660B1C3762918AFC3F7F26AFAD1123 + 3CAEA973D5B4A5AF6439DD8BD71235ED0EA046A3E1B6EEED1B08B59DC7CC2490 + F3FC36DC958F5B22526F4626AA4ACED492DBF93B128DA8A400C020269EFE76B2 + 6F5C64A870494ECCB26B30CCDD76F103E1D1C6BD18D3C9C59D8D6FC546107945 + A0BAF0FC5EBC37AFDEEEA800C81ABCAEF3CEED46D00A81B7ECA28538E50FA50B + 38650F228E1BE04DCFCD36CDB9D6A44900680A5273006FEF659D71BD4581D781 + ACACCA15E902F6DC0A44E43E1129CB6D3F0BAAA45A32DDA22931486EFB59803C + 1159EE2A0864B0C87201540278FADAEF68CD7478FA27D7540258D327245A245B + 55D50C0749DA30399E12671A33436389CD908D90BE830406444422B617E0FF5B + 242211C7976CFD01348380C66228B4003A96577A6B2FD2118BAF294932B580A6 + 0B843B5B41F58AAA5EE82F5E066290A96BA6E5219017A2A6FD795F71354017F0 + 5BA4B723FD0C26AEFC81868288E3F930983BF7EBBE92C724EFEFD324C99276A4 + E41331313786DD330FF5CF7BF8E0D8AC62036857251C6C6EC87093C3E3B80A02 + D8458B2E02CB46F3172D70866FE00C7703719F53EB418C0D83455587AF2DDDB0 + 74A8E0FE09355C0711CE45BAAFC6060E7C94E1A25554E3AE5A0D100016C70C53 + 3B1E7D59BA96AC27E29E39E5ED8A3ADEEDC3F90B0FF704567A433E7F1D62FC88 + C84C45222327BE856864EA63975551CD3D5B7762B8DCE5400302286B811781D7 + 04B5DDFD1D38233DA04AC8E71F8DD8BE75E39EBC461579CA1039005C007D3216 + 1A1FE8FD6CD37F0271F25D18765639700C30811A555A01040A41671BD1084634 + 0C2831C3424D6B3486F1972A88B046C4F80EB445618D86820392B4C5BF652786 + E30E00C7512C845540EB505D2DD69C0578E2B6917A041A7F4648B453F2E73318 + B21FA549559F369C8A6AF2B7EEC2B0DD01948644E5AB506D1D3CB28381031F13 + EDE904780F88AAEAE497CC49C4401491432836B04C44F659FE2D3B1157560099 + B465B5262A1FFCFE93C96A45E464A22DD376908C13988DB0196518F8C0321C77 + 59C2731BA8012E0ED74F250F755D66ACB9A111689CDE7500D69C522CFF7C807C + 1139863202AC53D5D332EFCBB66F8095489C7CF0C88E29E47782555086FFED7D + 98DE1CBF21720C28059E5538156C6EC042D80C14A87269A8EEEEC8015C05014C + B7CF630847414A419F53D553C19613FC53FB0656B0F9C4087069A2AD89A1BADA + BB228F43109131E007D033AAFC92242712E25F5CB414EA8B99D6510000000049 + 454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000573494441545885AD976D6C54 + 551AC77FE7DE3BF7CE9D96CE0CA5B69DD6D62210B494D290558B562DB0BBECAE + 26D55544AD45A326EE063FB89B359AB89F4C340621264B5C37ABAC2FD9954568 + 17635641EA563F801812E8A0F1056879EDCBF46D663ACE74E6BE9CFDD016A591 + CE14E6FFF93CE7F77B4E6E9E7B8E608ED14AAAF0DFF514BE95BF5A2034CF06E0 + 97409D10A2548244CA01200C7C285DE7DFC9A39DD158C756ECBEE33FB99F980B + BC704D1B817B9FF1291EE339C5B59FF49F3B6216F58731C7CEA24DC44180EDF5 + 930C56110F2D27165A91908ABA55DAD64BD1DD9BD3E3FBDEB87C81C0FA6799F7 + 8B47170B213A82670F2F2DFB720F9E89F8AC35193340FFF2BB8985EAC340CBF8 + FE37CF8CBDFBFC456BD49C3A5FFB30FE96A79628C8CF2A8FECA82EFBFABFA876 + 3A6B9D6A4FE03F7F04CD4A95264A97DEA32F6C68975626963E71387701ADB486 + 924D7F2D148ADA5979E4DDAAF9A70FE5E27C2102F08D9D46B55245E3A5D7351B + 4B6F7A3315FEC4716343B909CC7FE425F48AC52F04CF1CFA4DD9D71FCD09FEE3 + 9863A749FB43A5E9A272472BA9FA3479B0030065B622757E0873F9ED658A93F9 + 5DF9B1F72F1B0E9327511E6E47B8CE1FCCEB5705B4D29AEC0266FD6A84AAB506 + CF1E36B44CE28A0400F454147F5F772188FBCC95EBB20B18D73600AC2BEA0B5F + 317C3A457DDD00EB8C6B966517508B43002BCCB1D37913F08D9D01A8578B2BB2 + 0B08DDD415D7096A9964DE04B48918085126A646D0AC02800029F3460798DE6D + 6A04CE2A201D3BED2A5ACCF69879E3DBDE22903222A7FA9A55C019390F104E05 + AAF226900A5E0D1076E2C3D90532BD61807DF1505DDE04E2E5CB01F65A937BCF + 2E900A7721E19D68D50D96EDF15D31DCF21611AB6C484AD8910C776517B0074E + 92FEE6F3738E66FC7DB0F68E2B61DB00FD752DB88AF697CCA96323D6A9C913C8 + FA2FB0064F5170F36F0FA4E657AF371291A037DE3F57F84989B86DB4E6966543 + 4BD6A6A4946D23DBFF64394367731370A283980D3F4F6BFE92D478A8EE0E3D31 + CC1C248EDB7AE19AC1EB7EDD3BB2E8D6DDAEAAEF4974FD6B28D1F9F68505B30B + 0885E24737632E6BBA1578550AE58FB18AFA5ACBF4077DA3BD288E75C95229C4 + 29DB5BD47CAE6143325A7DE3FBAE661CC80CF49E18DEF604B84E0E0242A1F8B1 + CD1434B634013B810DF6687F876216BE950A54158C2E6C5A61F982AA701D542B + 85E25848C0310A49942C6278C95A73A0F6CE4F53C1EAAF40DE0EE279755EF003 + B5B8622475743FD313E9A7AF64539D17AC6AB905780FB83FDDD3DD15D9B211BD + EA7A02EB9F45AF5E161242B4327D29956E3120A55046806EE043E09F13DF7E11 + F1D4D429AA6E6E07D648299B1307DA4F8C6D7FFA1202D3F0C6969B11EC021E48 + F774FF2FB2652332357E6199BE700566FD6A8C6B1B50FC57A1F8E66908A44C8E + 3B763442A6B79B897017E9E387316A9B28D9F49AA2E8DEB780DB90B239BEEF8D + 93D19D2FCE10F8311CDE43D09AEE097F12D9D27611FC72E2AD6D62C1937F5315 + 8FF10EB00A4173FCA3D77B7F10F801BE0AD805B235DD7B2C2B3CB8E1398C253F + 2BCF45425B70354A815F03FE81602192666D06BC11D8255DE721EBFC773975AE + 5D558D714DDDF95C0466460AF98A3603BEDB95B465067A3B87B73E92D3B1BBDF + 47B1A38315B90095820042D34D6027020F92C745F1635B28686CB909689752B6 + 59FD3DFB232FB7E2C62297D3D42533F50D78158FB1070801ABE37B5F1FD20A1A + 5B6E04DA256CCC0CF4EC1F7AF941A6EFECF98A51DBC4824DAF198AC768072AA5 + 94AB139D6F0F4577BE88069421E5C3F640CFC7439B5BF30ED717ADA4E4F7AFEA + 8AEEDD0DD44CCE818EC1B11D934F3411B8FFCF084523F6C1B6BCC3012AB71DF5 + 28E6BC5DC05209CDDF1FE8E81BDDFE344817002D3AE3B198EF08AFCF00A2C09A + E4C1FF5C0407F83F09523816944B191D0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000740494441545885BDD87B7054 + E519C7F1EF73CED96BF6927B20E11A868B0AA51A14A7DA8B123181715A8B3A50 + C00BC542C57BC78E7F30BD4C712A972983E350B520974E156C0B330A726D6D4B + DB0109A04E0BA5C8450543B24B483697DDCD9E739EFE1112C0AAB31B127EFFED + EC7B9EF773DE77CF7BDE77852B89619277F3B7894C998F35A0D22F225381C9C0 + 0D880C17082B74A2DA001C06FE06FC511DFB64FB819D24DE7A01FBD3635FDA85 + F4D666558CA2E8A125F8868F0B013F021E35ED7441A8F128C1A65378DBE39899 + 24AE616107A2A4A2E5B4958E211D2E4355B7033F5727B33FB163152D9B9783EB + F41D3050752745739660F843D5C06A6F475345E9D15DE47F5287E1747EE1750A + 240B86101B554DA27CBC2AAC047E9C3ABA2F1D5B31174D775C3930505543F1BC + 1588693E29C8D2E20FDF91B2C35B319C4C4E75DA4A46F249D52C3281FCFDC05D + 9DA73E88372C99F97F483397A29E41632879FC150CAFFF2943DD6583EBD64BC9 + 877F41D4CD0907E0ED68A2E0933ADA4B465564FCD13BCDFCB28D9EF291A98E77 + B7F4126898943EBD16AB60608D88AC19BC7F9DE49F792F67D865259D4EA2670E + D13AE0BA32DB171E670D1CB1C1698991F9E85F17DB645B2CF4AD1978078D8E22 + B2BAE4BFBBAF18D71D339364E8DED59876BA56606EFE3DCF2081708E40C3245C + 330F90677DEDF1B2D223DBFA04D71D5F7B8C0B351719814828F4F5FB7203FA46 + 4FC42A1C18027E587A643B866BF72910A0E8C41E3CA9449188CCC9BBF59EDC80 + 81AFDC8688DC6D653A42D1D307FB1C0760B836051FED0598ED291F895954913D + D037E27A809A70FDBF31F4F317D4BE48F4D3F71191EB8152EFB071D903ADE20A + 8009C1A693FD8603F0379F41EC4E4464826740259025D088940822C37C6DB17E + 050A8AB73D0E50896975F59DE5A54101CBC824FB0DD71DB3AB8F70F72B2E4BA0 + 763DB646D6CB66AFA3860982DDFD12CEB6C7B4AAB6647CD17E8375C7F6474069 + 54EDFA9C15D0899F0638928A96F79F0C703C01328102018EB81D09204B60A66B + 53B9A7AD7454FFE980B69251A8D0A670C8AE3F0164094C1DAB0365534751A574 + 060BFB0DD83CE44650DEC2B133E90FEBB207260FED42E15D450EC646DEDE2FB8 + 54A894C4C0B1002F250FFFA3675F9815D03E7B82F4D1BD003F6B1A7E0BA9C8C0 + 3EC529503F7E1A8AFC09F87BFB5F5FEFF92EEB75A3E5CD15A8EA561563F3C737 + 3E806B7AFBC2F6B28AAC3A37E29BB4968EE950D5C7D2273F207968574F83AC37 + ACCEB93358C583F00CB976B7E30B4F4BE60F2E8C9E79AF57BBE90BF9B5228F25 + CAC76D3D3BEEEEC1AE69AD54D77927BEF251DCE6B33D8DACACCB1926862F8880 + 20B4B50EB89693B73EC2907D6BF0A45B73C5BD980E163D79BA6AA6BFBD70988B + 180FAB42F31BBF2473F2F28D707623689814CF5B4170426D01B0134150A66482 + 85552D436E2CB75209FC89FAAC4E608EE95D9509163CFAE9F8EF4A5BE9982D88 + F11D1536A58FD5B9E77FF753E85EA1B3061A26C5F32FC175FD6E27AB9D392562 + AC732D9F9D281F3F3131E87A8F1A2656AAB5FB7D7A595CD34B6BD9681AAFA90D + C746DEBE295938AC150889184F03D79985159B3C0347B8C9833B2F437EF94D5F + C4E55FC059C01D99FAE3E71A97DD4FDE2DD3884C5D80787C65222C006689C850 + 2B95506F7B1C2393420D0BDB1F211D2A01C34CABEA36E07937DD5E271E3F88B1 + C0308C1754F50FAA3AB36DFFDBF6F9DF3CD57390FF62E0C569CD47D8017881EA + 4CFDF1730D8BBF879B8877358B14139EFC7DF226DE855530004446033700C381 + 3042274A03E861907DA0C9D47FF692D8F60A66D9300A66FC0443E4711159EEAA + BB11D79DDDBEE70DA769FDC22F015E8A831D887841EFC8D41F8F5F8AFB6C3C83 + AFC157F9558C6809565105485779B72381D312C36E3C45EAF03FD1E4C5872A54 + FD2005D31722224F8BC852557D0D7820B16B8DDBBC61D1E700BBA7B5AA367A01 + E707ADCED49F88372C9EF185B82B49A8FA410A662C44906744E479457F0BCC49 + EC5CE35E0EBC387251603B1000AA3367B3C745A6CC2730F61B3923BDC3C621BE + 20C0B322F29CA26B51E65E5C073F8B530DAAEB54DBB18F731A39CF804AFC636E + 7E0DB83957A45E787A155C411E52D10EEB525C60426D04D806E4B9AA939CF38D + B1D88AB9BD99D6F781546F7040BEC050554D21BC65619814758D5C84AE690DB9 + 4A7526118FC57F753F4EE34739C9D2C7EA0016E774916911BC692A6258116087 + A29D08D3D4B1774AF1232F12ACAA89806C0322AA3AC9696E686C58361BE7EC89 + 9CFAE9557A06A8262CC836842A947BD5B5B7C45F7A022B50551B06DEBE80ABB6 + 5B1A1B634B67E134F4EF19B81B57F883E504AB6A42826C159109AEEBDE87EB6C + 89BFFC04C903DBB104EE05F2519D64B7C41B1AAF160E287C78397913A6E489C8 + 1660A2EBBAD381379B363C47F2C0F6AE7B007D555527DA2D8D0DB1A533AECEB4 + 02F9D31712BA696A50843781AF013381CDE75FFF05ED7F5EDFD34E3C43C762F8 + F3B01B4EE134375C151CC090578F0BCA76E03660B6AA6E3CBF61116DBBD75ED6 + CEBAF4DFCCAB19756C15C3FA3DB04EF97C1CC0FF006CC6086CC1B84C90000000 + 0049454E44AE426082} + end> + end + item + Name = 'announcement' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000001B049444154388DAD9331ABDA + 5018869F730D884B42090EDE0A120A051D14331552E418472B4E9D32D59FD0C1 + A5433707778742A1937B97EEE5823FC193282808828388827855C4A4CBD52278 + 8B2D7DE7F33CBCDFC777047F195DD729954A482929140A09710B645916524AA4 + 94148BC5FB582C5605DE0195AB024DD3B06DFB0C653219FB09A86DB7DB621004 + C2F77D3CCF13DAB56A8EE324745DAF3C41D5F97C7EEFFB3E4A29269309611802 + E0791E5AA7D3C1300CF2F9FCB95A188695D1689438418BC5E2D9F1B472B91C02 + 3C3E3E464110E0FB3E83C180DD6E77D352358066B319DDF4FA4AEEFE15FC6F02 + 0DA0DD6E8BCD6613054180528AE170C87EBFBF4DD0EFF7EF745D279D4EBFB46D + FBA76DDB9BE3F1F87A3C1EC7955228A558AD56CF0ACE87D46AB5A8D7EB3EF031 + 8AA20721C467E003709CCD66C9936C3A9D9EE176BBFDFB9096CB25C037E08B10 + E23BF01EF81445D1D7542AF526954AD52A954A6DBD5E674FB28B069665D1ED76 + 310CA30A948087F57AFDA3D168609A26524A5CD725994CBE1242D4801AF0F6E2 + 2F98A689E338C4E3710E8703BD5E8FF97C7E31732E97C3755DA49464B3D91737 + 6DFA4FF9058AE9AB113EC06D000000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000025149444154388DB5D4B14B5B + 5114C7F1EF89AF89E1D18A717846AA8537E8502514124B4AC87D4D84229A8073 + D70EFE09593B8843DB3FA071294EDDFC0F2AEEEAE67D8A4407C5E01242822426 + E2ED6252356DB1697BE67B3F9CDFE19E2BFC658D8C8CA094C2F33C262727917E + 90A9A9293CCF239D4E138BC5109118B0082C3E080C0683241209B2D92C4A291C + C70989C8EB0E024CD46A3533343424BF043B5194522493496CDB768005605144 + E6DAEDB65D2A95F07D1FDFF78944222C2F2F8B753F4A07E9892292A8D7EBB2BF + BF8FD69AC3C3435AAD56F76E241201C05A5959C1B22CE2F178274AE606590026 + CAE5B2F17D1FAD35A7A7A718637E3B1E6B6969E9DBCDA101E0C5D5D5D5ED28A6 + 5AAD3E64CC3F40C0DBD9D931954A8572B9DC13E54FCB02D8DEDEE6E8E8A86FE4 + 7605FE89F23F410B209FCFD36834383B3B436BCDF1F131D7D7D77D83EFA3D128 + C080EBBAAF52A994D76C36BBEFEDE0E08066B3F9607000D8DADDDDDD0A04029B + D1687443440A9665154747474B333333E34AA941D7750987C35C5C5CD068347E + 0A0D0F0F138FC7EFAEDEDEDEDE13A0628C79077C119147C026300EB401F7FCFC + DC68ADD15A737272D27DE8AEEBF6AEDEE5E5652D140A6D88C847E029F04C4492 + C698B7C698AF22F2DC719C9CE338B94C26F3B25EAF4B678B3A33BFD3E1EAEA2A + F97CFE31F0017873D3D527E0F3DADA1AAD560BA514D3D3D318631C11590072C0 + 9C31C60E040277C170384CA150607E7E1EDBB631C650AD56595F5FA7582C76CF + 398E433A9D269BCD323B3B4B30181C14912C90EBEB83BDDF442A95C2F33CC6C6 + C6FE96EBADEFE4D5EC1D2CCFC87E0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000335494441544889B5954F4B63 + 6714C67F277FCC44304AC6A4042D6222824402C6452421579394B49D6A77E252 + 5DCFCEE2A68B996DE937E887E8429052F40314BA717763B82A0DF53F226AB948 + A2C9E9C29B30D18499D1F6810BEF39EF7B9F739E735ECE2BFCC7884422188641 + 3E9F271289202F2574BBDD4C4C4C303737473E9F676C6C0C97CBF54A44B2C0FC + B302F4F6F6924AA5C8E5721886C1E0E020221202BE05E681AF807EE0D3150C0D + 0D91C964C8E572A452297A7A7A44442681EF1CD214E0BEBABAD2DDDD5DFAFAFA + 88C7E378BA11BA5C2E262727C966B3E47239C6C7C7DBA43BC4A38D46438E8F8F + D5344D4AA5929E9C9CD06834B4582CCA93003E9F8F6C364B369BC5300C42A110 + 404844DE38A405A0FFEEEE0ECBB2304D9372B9ACD7D7D7DA2D51CFFAFA3A00A3 + A3A3A4D369BC5EAF005DA59BA6C9FEFE3EF7F7F7A8AA8A83E61A40555B013DAB + ABABEF1D274008F8A629FDE8E8484BA5529BF426C9A7C2A3AAEF9A46AD56636F + 6FAF25FDE6E6E6C364789CDD63FBC961C02322B2BDBDAD5B5B5B6D129DB5009D + FC3CB6BB95C8F539729F038F3EA095D187D97D6CFDB13D704A24220AD04DEE4B + 4AE4018846A3148B45A956AB5896C5E9E9A97448E659F0001A8BC58846A338F7 + 99CBCBCBD69D3F3838907ABDFEFC00AAEA6E1AAA1A069683C1E04FE9745AD3E9 + B454AB55CAE572F3EA8A6DDB9FD783C5C545E0A14C4B4B4BE7C964D274F6DE02 + 7FFB7CBE854422F12691480CD7EB752A958A3873878B8B0BC519985D7B609A0F + 7CA669E2F7FB492693FF38875E03BF00BF01C322B2E776BBF7A3D1682D168B25 + E6E7E7E5FCFC9C52A984699A542A153AF5AD6DD8D5EB7554F50F11B144E447C7 + FD17B0E69CFD41557F57D52F4564211C0E2F84C361637676F6956DDBD2EC9B65 + 592DCEB6B9323C3CCCE6E6265EAF7712F8151802FC400D78AFAA3FEFECEC60DB + 36D3D3D3F8FD7E44A49F8707E67BE06B1109D56A356E6F6F0904024F1F9C9595 + 15D6D6D670BBDD3DC034F005F0A7AA1E1F1E1EB2BCBCCCD9D9197EBF9F999919 + 0A85028661100C0601BC2232032C38DF78C7C9188FC729168B04028196CFB22C + 363636B06DBBD32F4C4D4D611806854281582C86AA22229D03BC142323236432 + 19060606FE0FFA76FC0B0B52B91BF8094E680000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000003A5494441545885ED97C14F22 + 571CC7BF8F19A50E4DC68ADB542C05AAC9862D500821A92802C3046253057B18 + F7A407D3D4F4DAC478E81FD090ECA1875E36F664D2C43FA024FD134CBC75DE80 + 1208D2044DD51243062D0C4C0F0A59B2915DADBA9B747FA739CC9BCFE7BDF9BD + F7FB3DE0FF1EE421611CC7616A6A0AB1580C8140C0582C16FF61EF1B3A323282 + D9D95988A2886030C81B8DC62F01A40024AAD5EAF0BD0858AD560882004110E0 + F3F93E6618660140B2D96C86154519A0944292244208C19D09B85CAE2E747272 + F23342481240B25EAFFBB3D92CA194627F7F1FCD66130020491200DC5E806559 + 04020108828068346A181B1B0B0248024856ABD5094A2928A528954A68B7DBD7 + 7FE726508EE3100A85108BC5303333F31ECFF3E21574BE52A93CEA400F0F0F5F + 7F22AF7AC16C3643100488A2884020F081D168FC0A40B2DD6EC70B858289520A + 455150AD566F3297FE02369BAD0B75BBDD9F300C93C465128564596629A5C866 + B3383F3FBF15B447606D6D0D6EB7BB076EB7DB3D5749945255D5AB280A28A5C8 + E7F3D034ED3F437B04DC6E37A2D1684F969C9C9CE89DFF797070005DD7EF14DA + 23D079585F5FBF3F4A9F30BC09E83B8177026F9540771BA6D3E96E73727C7CAC + 534A21CB32CAE5F2FD0A94CB65504ABB2B313E3E8ED1D1515F381C4E85C3E1AF + 6BB5DA93CEA1542814D06AB5EE54E0A5968C6559F8FD7E2C2D2D2191484800BE + 05900190BAB8B8F82297CB196459C6DEDE1E1A8DC6ADC1E9749A504A0D2F1523 + 4DD3B0B3B383A1A1212412093F80DF7777779F99CDE66776BBFD23AFD7BBE0F5 + 7A539AA645F3F9FCA02CCBC866B35055F55622D796E3ABF3FF0280A9542A6165 + 6505369BED281E8F3F9724E9B9C562F9CEE9743E753A9D155DD7E74AA5D2FBB2 + 2C83527AA3D27CADC0D9D91970B9F4BF2E2E2EA673B99CBABDBD0D4551C0F3FC + 00806F745DFFA15C2EFF66B1588C0E8723E6703852F3F3F30B954AE55147E6E8 + E8A8AFC0B56DB9C16040269381D56AFD198017C0F7AAAAFE6132991E03F811C0 + DFF57AFDE9DCDC1C1A8D46B7F39D9E9E36701C1704B00820797A7AEA78714775 + 2A6B2707FADE0B3C1E0F36373789C9645A03B04A0879ACEBFA9F007E69B55A3F + 6D6C6C68994CA667CCE0E02042A110229108044100CFF39F1342520052B55ACD + D3E92D5657575F2D005CB6D8CBCBCB70B95C601806BAAEA3582C626B6B0B8AA2 + F41DCBB22C7C3E1FE2F1382291082C16CBA7B8BC13A4082153B22C0F3CE8CDA8 + D3BA8BA2888989890F29A57F3DA8C08B313C3CFCA6D06F59FC0B1FE17DC8612B + EA0E0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000004ED494441545885EDD8CF4F14 + 671CC7F1F797C15DF9513B2866B1BA2B05E942E3824B8942967587196625A5C8 + 72E8AD693CF56262BC987AEA5F60D3F4D2683C355E6D6C53E3C14D1AED05B326 + A5070656094D56C14084467785C0CAFAF4E0B285D62ABF14D3F0B94CF2CCEC33 + AF997DE699EF3CB095F545361BF0A20483417C3E1F5353536F07D0E572110A85 + 300C03CBB2A8A8A8780738984824FA8B370BA5EB3AA1508868344A5B5B1B6565 + 6555C071A01730817EC07CA3408FC7836DDB4422110E1F3E8CA6697E11E9057A + 45E4483A9D16C771282F2F2710082022BC76607D7D3D1D1D1D5896457D7DBD88 + C8119EDFA55E11A99F9C9C548EE3E0380EF7EFDF07C0B66D028100C0C603354D + 23180C625916A669B26FDF3E17CFFFB25EE0B8526ACFBD7BF716516A6A6AEAA5 + FD6D08D0E572D1DEDE8E699A188681AEEBEF8AC8C77954572E977B67646404C7 + 71181E1E56994C66C57DAF19A8EB3AA6691289440887C3B8DDEEBDFC3DC88DB9 + B9B96DC96412C77148269364B3D9359D675540AFD78B6118D8B64D535313C5C5 + C51FE6413111F9E8D1A34732343484E3388C8E8EF2ECD9B335A15605F4FBFD44 + A3510CC3C0EFF71789485B1ED50BD42D1DE4636363EB06FD0BA8EB3AA5A5A5CB + 1A7D3E1F1D1D1D747676E2F178B68B889507F528A53CA954AA30C8A7A7A7371C + B50C78E6CC19FAFAFA9A007DB1512905E0CDA38E2D2C2C942D0EF2A1A1213533 + 33F35A51CB80F9ED3780B1D82822CCCECEAAE1E1611CC7E1EEDDBB6B1EE41B05 + 241E8FAB783CBE298897A568B301AFCA1670BDD902AE375BC0F5A6300F565454 + 50535353D8313333C3E4E4E4A6A096A6006C696991969696653BA7A7A795E338 + 0C0E0E924AA5165F819B02349736E621FB77EEDC190B87C3B170381C7AF2E489 + B6584A8D8C8C90CBE5DE08F0859F9D5EAFB75062353737A394FA4C44BE036E00 + 9DF3F3F3EE3B77EE303838483299647E7E7E4351B66D63DBF6CD4422616A2F3A + 209D4E333030C0952B57D8BB772F0D0D0D5F007F2AA57A45E4DBE2E2E2DF3D1E + CF422010F01D3D7A74FBFEFDFB71B95C3C7EFC78438A8ADADA5A6A6B6B53E3E3 + E3DFAFB4A2F60149C771B874E9D213D3342FB7B7B75F2E2D2DDDA6695A87DFEF + 8FF9FDFE4FFBFAFA76A65229160BD88DA815570A7C0878EBEAEAB87DFB3657AF + 5E5D5C0D781A8BC5AE5B96755D449A45E45A7575F544757575ACBBBBBB6E6262 + A2F0903D78F0604DC057CE83E9741AE01AF089DBED7EEFDCB973E8BA4E369B65 + 606080DDBB7723224744A44529F5F5D3A74FBF544AF981405555D5579665FD76 + FAF469CE9E3D4B4F4F0F35353588AC7CC5E595478642212E5CB8502422BF022E + A5545F269319EFEFEFA7ADAD8D1D3B761C047E066E2AA54E9C3871824C264334 + 1A251289D0D0D08052CA975F41888948F89F33C2C2C2C2B2732E7D4856742917 + 2F5EA4B5B5B5B2A8A8E847A0317F47C7800F8063C04FC0E7376EDC983B79F2E4 + B2DF7ABD5E4CD3A4B3B393603008B04B447A80186067B3D9ED4B6784B9B9B9D5 + 03CBCBCB397FFE3C870E1D2A1291181005F6E4913F28A57EB975EB16A74E9D62 + 7676F63FFBD9B56B178661D0D5D5457373336EB7BB4C448EE5B1DDB95C4E1F1D + 1D45D3340E1C38B072203C5FD28846A398A649656565A1FDE1C387C4E37156FB + B95052528265594422110CC3A0A4A4649B881879EC71606455C0D71997CB456B + 6B2B9665615916BAAE8B88BC9F4824FE782B804BA3691A8D8D8D8515D6ADFCEF + F317C707EB0BA3DBDB3F0000000049454E44AE426082} + end> + end + item + Name = 'debug-start-filled-arrow-right-2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000001FF49444154388D8D934F4893 + 611CC73FCFBB99EE5DEF32D8E6A5D03C74C8484F99C716460481B73A04417509 + C284185498B075F092A41E3A69901DB2D1410283D2E6BB7F0C0F81108945548B + 26B3689BB67F95EF9E0EAEDA245FFC1E1FF87C9EDFF7F7F058EE44D6E74E9C1F + F8D479F2DCC79F3F0A2CBF7B859465B61B311C358CAF6B79E9D4D408E0CBA412 + FACC8341E6A7EF53367E6D4F707D3228DB9B9B38D6D6825353C3803F934AE833 + 1383CC3F351789E1A8615C7B18940042404773139EB67DB8345B58C2AD742A31 + 376B32518DE0EFA180AA8922027CE92DAAFD57B09508F0A55712FAECC43F91A9 + A05AF4A79A53B38505F8DFBE0CEA77FB8EA39881D591124096813820EA1A5400 + ACA637B351C173B00597A6468B86717321BB16F99CFC40CC7B6A6BC16610F097 + 72D9E09354C6BA5C5666A96BECB59FEE5F2C8D7B6B050238B4B1B482CBA14680 + A1623E1B0C3D1A25141841BB726FBDA1B57D4C08F1CCDED5D32D61C9BA09C4E5 + 5063C0C0FB5C21B4F4BDC09B8530456D2FDA85DB288A02300928C0F39D5D3DDD + 62386A185F56F3B202FA4BB9EC0B3D30CA62D30194FD874D3F859452B72265CC + ED507DC50A180A8C50CAAFB2FB4C3FF53B6C35AFA4D8776171EE4120FA804B12 + CE8AAB63F3BC8E4DA35740B3B86F3CA6BEB5A357087119389A8F4F25AD43173B + 4DA1EA581ADD5621C411C0938F4F25BF8D7BF90D3761FA7DD636C56F00000000 + 49454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000027849444154388DA5D24F48D3 + 611CC7F1F7779B9AA4266EFE43C399504812DA41BC8838C58208BD5467AF4574 + 08440A82ED141D72740A418D30890E514BD4C0A9B8691214138754930C699A43 + 4213FF4CF7DBD3C169B3569BF6393DA7D7F379BEDF47DA5CA111C00A6A78CAE5 + 60A0D3C6FCCC24878DD8DD9A06A0941A056CFF0B8BDDAD69CFDF7E50E6EC4CCA + 8B7211C115693C721858EC6E4D6B77BE579F03CB98D253B19C2EDE0F2B35E275 + 39E8EF4A0CDE07EE261AD6092E0536A5D4B0D71DBF714C703F6CA6BC280F11DC + 24B0BC7F82B11AC79B7142603CD8EB72F0EAE12D02731FD1C555A2B2B4BAC1B3 + 8969EEF74D301B58AE1611A7204365D58DC515759701301C04043046E66ACECE + D49452D7053E01B3A1ADE0C140635A2A963233153B0B1ADB0E876F2F6C04DD73 + EB9BCC74B432D9DB9118F83B045895524383DF96F0AD6DB46A8AEEEDAA2B5F75 + A32F09FF58FAFB0C8D69A95CAA2AE5E6852ACE9AF3C6443807D4F87D9EA147F7 + AE32BDBC9A125234004349F92505B92D3DE8324C7F3634A645FE9E390F11BA04 + 9E024EFF8C87814E1B5E97030CC9184B6B83A9A72A2F8A482FE04CCA2FB1E4B4 + F4CCEF7D9B95F56004CA452F32AEC0AA29E51C5CFCCEE26690C0C297FD3727A5 + A04F37A2E0A888F4013928653100349C39C17163063A9171C0A66070DEE7E1F5 + 8B76569A5A6B806183A930E66824EAACE08901C06C3AF646811518F4FB224F73 + 3BD01B0B286C6AF500B5B130A514EC2CF60190055C13BB2B54BF0BF547A0BD18 + 924929A988D92CBDF106474E56EA7522DD910B2DE1CDB56939DF7C07BFCFC354 + 341427FAAC7CF2EF0EEB456F782C483D5017DE5CF306DA9A310C74D912867E45 + 4044045905EA77B1AD9977FC04E64F55B28E67F4810000000049454E44AE4260 + 82} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000003D6494441544889AD944D6C54 + 6514869F73EF2DCC0FA12DA6F4C7C8C8000BBA22B406A30B8B1BD4185DC9C29D + 892226CAD68485461A954D29889144364631166A61056267E84C67FA638A6011 + 22112B051D59D099325366A685B9F71E17B783053A6144CFEADC7CC9FB7EEF73 + CE77A53B69C7815DA00385DC34F19E3D248F7EC6ADE24DFE8F92BD438E03A8AA + 263D23E2855C46633D5D0C1D3DF09F8DA43B69DB57D339EA023E6A034B011240 + 27AAB17C2ECD60EF3E1247F6737BAEF0F00922E72735FECB159E58D3C233EB43 + D47946F3893456CC4D137B4874770CA2E72FAB8888651AB4AF6EA6A335445DD0 + 87AA26C4433758C86574E09B2E868E558F4EBA93B61DBD3049F4FCA42E3CA8B1 + 4C690FCF1BF9BD440A9DAA3A50C8A5193CB28F44EF83D1DD9700BC89977BD390 + 7BD10D01BB04060AB90CB1C37B48F65546F74083726F19067712057DA09AD485 + 5B57015D454495AAC634A57D4D331DEB43776D9DA2B162364DFC1E745527A884 + AE637D88BAA04F162C432C9FCBB0F7CDA748FFF53B4635B75EAC1C5719BD94D2 + 7DDF8D71752AABC0D388F4031F0497AFC017AC05C05255058F8ED753556F9986 + B4871F958ED655D4057C25855745F58AA23FB9AE835D9AF30CBCC8A200D520AA + 314D690B37B1B9F5F1F20C861CD59D33257B24353BC7CCAFA789756D2773EDB2 + 67502D12CB30680B3749476B88FAA01F551D067639AE3B30369DD30B33858D79 + DBB9E2065AA6F3B58D50AD8187627E3D033E806155ED04A2AE6333F6F3183FF8 + 9A8298E671E00F6389FFB986770EDE98DAFF06B72E8E569E8165081BC3CD6C6E + 0D511FF0A1300C7482461DBBC4D9480FDF7FD149B1711D8FBCF56901D5D70C91 + 3EE0A4B1D4B7A561C7C1ECD427DBEE9F8169086DF3FFA215CBFCB8AA3DAEEA47 + 0A171D54C7637D44BFDACDD49F13DE4DB2190AE76204373C7B52E11511A31738 + 214BFC2F34ECF83C6B2D445116AE0FFA101851D54E41A35767E774F0FA0DB225 + 1BF7B14DF8771E6395971811F1F27BE14FA0EE560CF95694E3D4F89EB75455D7 + 36D6D31E6E2A331EC17B9911D72E7126DAC3E8CC1CCE862DEF03EFDD3BA30554 + BD1229137F52440E5B2222AB57D6A9AA8EE2BDC4A8EBD87AFAE421A28776934E + 4D50BF7527CB45E2F32B7B9778F97B815123C276949BC087166561D588EB3AFA + 63FFD744BEFC98746AE28ED0ED6BBF511C3F35080C2EBA69CD61AC8610C04A11 + 89A0E48197547548BA13255CA7C499F9ADC85C9B5C4CA362592D6B6978F73066 + B0B6C110890061E04585C4ECF829ACAED73791CF5E277B3DF5AF84CB55D3B20E + D3BF2C6008FD2061D0975535317B6E80F481B7B15297CE3E94F03F2588481138 + 063AAC4AAC2C8E7D9BBF01F73464A28BA74D960000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000050C494441545885C5D65B4CD3 + 571C07F0EFBFD0FB8596DEB4D24A415B2265D930BA51345BA9EE922CCA4CB6B9 + 97653174885313B3A92F264BC8E6B648E66538355350F730E3CCF4613A99A91B + 3AEB362794320A4510DA82B4B4A5175A28157BF6E08A3875C0B0EEFB7492FFEF + 9CDFE79CE47F7280FF3919A941C1D217B1B0D88058D887782CF2E425159F9EC1 + EECBE39B6B7E1A61BFFEC19710C9554FA4EFC40914AF5C0BB94A6BA16819EB94 + 058BC9B23555B62C59CEED81EE56C463E1B40168F7861400E0D46FED725720B2 + 2B2393D1A55F657A7FC70907F78DAD072056E4A50530E904DE824CA5F9F0CC35 + 07AE74F6C1E90F73C53CF64A118F63526A8A69A5AFAD6F91AA1626BCBDED8885 + 03E9035CEE7021317E0743D138FEB839805E5F9823E2B18DD97CAE49915F442F + 2DAF6C91A934094F6F3B62617FFA00A90463715CEFF1A06730C41171D965D97C + 4EA522BF88515A5E6993A9B463DE5942A6044C8634F578D0ED0DB2855C96417C + 17C2D69757DA147985715F7F3786039EF40152098D8CA1B9D7832E4F90256033 + 9F9708B85572F522BE7E95A92547F3CCA8CFDD89C80C203306A4121E1983D5E9 + 85E356802960B3964905DC2A994A9B55B2DAD492A32D1EF1B96E201218481F20 + 95C868022D4E2F3AFA030C3E9B51FA3744A45F5D61536A17C706DD9DFF0A9935 + 2095E178022DAE41D8FBFC0C1E8BA19709B81B642A8D58BFCA64536A8BA38F82 + 3C36402AD1780236D720DAFA7C741E93F19C2C8BBB41A6D2484B5E5D67CB7B7A + 7934E87122E871A50F700F721BADEE41FCE9F6657298F467E542FE7B12855ABE + E495B75B47A3A161A7FD7700F75DC5E90921048410808002A80C8AA2680C1667 + E27B66BA1ACBB3B8282BCC45914A3646811C21847CE6E96DEFFFF1D8C7B09ABF + 4D1F608E900B63A11A3AA5340EE02B42EEEC1A70B6DFBA707427AC174F8190E4 + 7DF58F0D3057C88351978BC21CE92880431450E3725CF75C696F45CF38858438 + 1FE421F3660D9827E2A34C978B45F32423000E02A8713BAE0F36D455A3CD7216 + CAC39D4216957192F5D40B9B690249C7D091ADC0A453F8CF809C6C3E8C3A350A + 14E228800300F9DCDDD1E43B5F5F0DBBE5EC441D89C7C2149BEF062833AFA4DC + 00423A87EAB64D20660C508A0530EA72A19D2B1E06C87E4292BBDD8EA640437D + 35EC96730FD4FBF6BD4B245BEA4D190C761D0033B7A4DC4048B22B58B76D6680 + F912018C3A3516CEC98E00A82584EC71DA7F1DBA706C27EC577F78E4BCB1CE6B + F0D75625A51B0FAEA33158C7288ABAC8D7AF319068B03B74F293A901B9D22C18 + 756A2C908BC214B08F007BBB9A1B43E7EBAAD16D6D9C167EACED32FCB5EB9392 + 4D87DEA1D1995F83A2CC82972B0C007A1E0950CB8458A153234F260C02D80B90 + 2F6E3437861BEAAAD165BD3451275ABB034CCD92B9D39224E2009DB91D403D00 + B3E0A50AC303807CB9084B1728A0960A8700EC2184D4765B1B2377777CE98135 + 3365F3C1CC2DEA9F16E01F2114D9330970F72F7DB364911F24B99B90E4FEAEE6 + 9FA30DF51F3DB4712AC95808E321EFBCE934A47185A032196C002741810E02D3 + 3D000140C876801CB05BCEC5CC276A70D3FACB948B068E6C0580295F1EACC2E5 + 906C3AC4A280A3009820288B341CF653A982E2156B21556AD066F91E7D8EA6E9 + 6C68DA61162E8774E341268DC13A0D603E21A42C6A3EEE0D7E530D6ACAD9B30C + 63C162C8B61C65D0589CEF00E413420C51CB694FB07E1B4048FA0139B5563A8D + CD3F05A080008698E5F4ADC93761DADF03148BC3041002601CB97AE6BEE600F0 + 172755502310267A330000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000697494441545885EDD75B5094 + E719C0F1FFB368640F2EEC2EACE00197685327B2F11075D23468744D06753C34 + 69406AD56A9DA477B617C995E34C2B21267692898ED3988C3132F5100F359A7A + 88A899C8343A29C4512941050F20BA08CB2A2CB01CF67B7A51970683158DB837 + FD5FED7EF3BEB3BF79F7FBDE793FF87F3FAEB8E80767CA70F20FD69BB296ACD4 + 2123C7505B554E53436D2C6D0098BA7F954C44BEF04E9EF7DCEB9B4A589ABF8B + C123C7C446763BD39D174464BA887C0572C49B396FCAEB1F17B3347F77CCA0DD + 802202C09E7F966B75A0F179113986C897DECCB953DFD854121368D73D68B625 + 32257BB90758BCAFE43C45E5D554056EE1B25986275AE31723F8DC69A3AE3E3B + 67D9C5F431CFD1E0BF4CB0B62A36C07F9CAB26DCD14920D44AF1C5EB5CAEBF89 + D3664E7358CD0B115E74A5A6D74C9AB9B872C4D84C1AFC5708FAAFC40618AD21 + 14A6F8E2752ED5DDC461330F75DA2CBF06C972A57AAE4D9CB1B862C4B829345C + BFDC27D05E01A3059BC3945CF253792388C36A1EE2B4591600B35CA91EFFC419 + 8BCE8FEC03E87D01A3DD6C0EF3ED253F15B50D245AE3073B6DE65C1199ED4CF5 + D44D9AB9E8DC4FC64FA5B9B19EBAEA0BB10176415BDA3875D94F85BF81044B7C + AACB66CE0179C931685860DCF49C72EFCF676B63432D7555E763038C76ABA58D + 53976B29BF1660A079803BD96E7D45C4F44B7B526A70DCF49CB28CCC39DA14A8 + E546D5B9D800A335B5B673FA4A2DDFD5D433D03C2039D96E7D59906CBB2BF5D6 + F8E9D965DECCB9DA18F0DF17F4A102BBA0E176CE54DDA0EC6A3DB6F8C792DC76 + EB4B203976574AD3785F76A93773AE3636F40EDA27C068A1DBD07F55D7618DEF + EF722758E78948AEDD95121AEFCB29F566CE319AEE01ED536017B4AD83B3D575 + 9CADAAC33AA0BFD39D609D23B020C195D2326E5A76E95393E719EDE166FC97CA + 50D5470F8CD6DCD64169751D67AA6E607EACBF6350826DB6882CB439DC61EFE4 + 7967C74DCF89B43406B97EB1B46BCE0F4E338FA2BAC6163E3D51C6BB074E5259 + 1B1C6E32C5FD45C474CE3DF4895FCC5AF6C76E6363020470D9CC3CFFA4877477 + 22AA7A15F833C2818EF670B771FD1E352C69A09969A33D8C1D9E8208D5A06FAB + EAA6D6D0CDB6E33BD7727CE7DAD80093ED16A68DF630266D10225C513556ABB2 + B9B529D8FED5CE751CDFB58E70E8D60FE6F5397050829569A33D78D3DC98E092 + C26A540B42C11B1D278EEFA568D77A42D5E7C088F438BFCF80290956A66578F0 + 0E730B5001BCA5F0D7A680BFF3C89677F8CEECC63C2537DEB132CB18507CB03D + B061798FC8870E4C4DB4E1CBF0307A68B200E7817CD0AD8D81DAC8D12DEFF0F5 + DE0D74B6B791B6B15280CF045A2D13B2B2E1FD8E9E900F0D38D861C39791CE93 + 43920428BF0DDB7E272C9A1A9D2AA6B8CF444CEB51B6599E9E319F57B533F0E1 + EFBB217F3470A87320BE8C74460D76095006FAA6C28EA680DFF80FECC36EB068 + 818D6FE0FAED9A0F548833994C6B41B75826CC5860A876063FFA4317F28181C3 + 5C767C191E7E9AEA12A054D5C803763706AE1B47B7ACE1C4BE8F7A84456B39B9 + 17B126E0C85DB95E55E344E43D4523B609590BA5B531D250B0E2C1806949767C + 19E93C91E214E00C9007FAB7FA9A4A3DBE6B1D27F76DA4B3E3EEB0EFD77CB400 + 11138EF92BD602FD4C625AA32689D8A6E42E36DAC3C6CDED79BD077A9212F079 + D31939C821C029813C45F7D65FADD4C305F9941CDE8211E979ABF85F858E7C02 + 802377C5BB287122B25AD188FDC5254B01E39EC0F4E4447C191E46A63845554B + 8055A87E5E57534961413EC577C0EC337F873963F27D43696B85019635B7FFEE + 37158DD85F58B2ECAEC011EE447CDE741E773B4455BF51D53C55DD5F5F5349E1 + E67C4A0A7B5EB1FE298F133FEA99ADC033F76B8C1EB5140C4196A8684B8FC045 + 994F91EAB089AA9E54C358A5C2A1FAEA0A0A0BF22939BC15E32EBBFEF73A0D84 + EF35A8271C9028305C55C3089FF7BB739088909268FDDA3022AB400BEBAE5650 + 58F016DF166EEBD53DD676A118E0EDFBC111D70FCBA45988A99F1DF842D17684 + 9735D279F8CE15AC41F505D063D72E9CE6D8D6359CFA72377AEF15EB2A54B483 + 50D18EDEE34C71B85E7B1F4C710381030863515E51A3F360FD07CBFFFB14B7B5 + 86F8E6E0E60AA0A2B4682F678BF6F5FE471E34531CCE57DFC3F274964D90FD22 + 32C1308C6C8CC8DFEB372CA7B5E410D2F78ABBE77C6D2DD68933AD22B21FF899 + AACE07F6346CFD13CDC70A80181C58A325CE5F816DD22C0BE83EE059E057C09E + E0B6555D3820762B98F671A5A01C02A6020B55F5D3E0F6BCAE8D3B5ACCDE4934 + D2A9C04EE0374ACF38807F03DF193BBC92C86E620000000049454E44AE426082} + end> + end + item + Name = 'zoom-in' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000023749444154388D9593B14B1B + 6118C67FDF453E5C2E8317AE76D0ED720841A490494F726EC1292D2EC6510858 + F20FF80738646CB5507092D076512483360E47C090A1821D5A22B7B52805433D + 0871D0A3D7AF8B8939686DFB4C2FDFF73C3FDEF77BF904403A9DA652A9605956 + 0E58031C21444A29F51D38065E9D9F9F37D6D7D7393D3D6558229D4EB3B3B333 + A2EBFA561004AB9EE7E1FB3EBD5E0F5DD7B16D9B858505C6C6C6B66F6F6F9F97 + 4AA51F272727F780FDFD7D2CCB7AEDFBFE6AB55A250C43002EA7F298ED032584 + 10524A565656B06D7BBBD3E994F2F93C37373700689665E582208885013A5379 + D1AFC330A45AAD1204C1AA699AB942A130F069C09AE779B1F0EF1486219EE701 + AC398E130338BEEF3F18EEEBCEE7A452A9C1D98810C2E8F57A5C4EE5636D037C + 7EF652EBD766FB4009BF8E10C218F68C28A5AE745D37D5D9218FCE0E55FFE2D3 + D31722B35BFE29841840F56412A5D4D53040039AB66DFFD30877BE66B7DB8D01 + B65CD7454AF960584A89EBBA005BAD56EB1E707171D1300C63BB582CC620E6D0 + 38524A8AC5228661EC4551D4A8D56A035FA2DD6EB3B8B8F87E7C7CFCF1CCCCCC + 93300CB9BEBE467E6B934C26C5F4F434CBCBCB4C4C4CEC018EA6691F2CCBFA7A + 747444144508806C364BA552C134CD1C7FF80B5114351289440E78072C359BCD + E372B9CCE08547474729140ACCCFCF6318F79BEA76BBB45A2D6AB51A1B1B1BCC + CDCDE580B77790666CEF7F939492CDCD4D6667675DE00DB094F81F401445D4EB + 753299CC97C9C9C98F40F6178CFFE14AFF1622F10000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000032E49444154388DA594414863 + 571486BF931787D4456A5E4244D2EAA0896174A51BEBA074902A0CE8C245201B + 19337566A0DD59C5651696AEA42EDADA954CA6D4555A101759B8122A282D0D6D + 5C88F81268CC5892EAA2096F30E30BB78B99C4BC3A6584FEABCB39F77CF7DCFB + DF7B85D78A4422CCCFCFE376BB43C013601C08024EA000EC024F95523BA9548A + E5E5652A950AFF96002C2D2D313333E31491CF81F99393132D93C9502A95A8D5 + 6AE8BA4E381CA6AFAF0F1149010F73B9DC5FB3B3B39C9F9FDB81914884783CEE + 14911F4CD39C4A26931C1E1E5E5B19C0EFF7138D4609040259A5D4BD743A7D1A + 8BC5A8D56A8D39DAFAFA3A2E97EB0BD334636B6B6BE4F3F946F2ACE743CE82F7 + 78F7F477004CD3249D4ED3DDDDAD7B3C9EBB1D1D1D8942A1A08E8E8E1A350EB7 + DB1D1291F96432C9D9D999ADA3DAAD562C97DB16BBBCBC646363836AB5FA8188 + 3C88C562B6BC037892CFE7B5FFDAE69B542E97D9DBDB03F824180CE2F7FB6DC0 + 8F3299CC8D61751D1C1C20228380B7ABABAB117702C152A904BC3AB3DAADD646 + D2F40579D9AA53BC73DF06F3193B148B450011911EA061B553449C75975EE8B7 + 6D67F6B255A7D6F20EA62F6803EAB95D6A97D5E6A6AE3A544A3DD775FD3640E7 + 2FCF6C85C53BF7317D41BA7FFAEADA96759FAF3E2C34C71DC06E6F6FEFB582B7 + 291C0EA394CA2BA5F2E572D9067CDADFDF6F73EA6D723A9D8C8C8C0024CAE532 + 8661D8803B22928A46A3B4B4B4DC0838353585AEEBA74AA92FB7B6B66C2FC591 + 4AA5001E060281ECDCDC1C6EF795293E6387F77F4ED83A9B9E9E6678785880EF + 81F2F1F1B16D316D7F7F9FB1B1B1176D6D6D3F7A3C9EBB434343EFB95C2E2E2E + 2EA89A151C5615AFD7CBC0C000D168945028F427F0AD887C06144647477FCB66 + B3E47239E0F56FE3F57A595D5D657070D021220F804F4564A09E07504AE58184 + 526A15F85B44E644644D29F5D8B2ACC4E2E222DBDBDB57059AA6313939492C16 + 23140A0178811E5EDDB3E74AA93F2A950A9B9B9B1886413C1E47D3B447C037C0 + 23CBB29E2D2C2C5C019BD5DEDE4E6767A72D5677B36EC0C4C4042B2B2BCDD039 + CBB2BE7B23F0A66A823E1691AF95521F6BFF0798CD66310C83F1F1F15F45A408 + 9CFE0311463D7BB3A5D2F90000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000432494441544889AD944D485C + 5718869F6FFE647AC998BF9B2A85260A456706A274F0675C042428240A2E0259 + B40B37D3450B35960A4508B8CAA24D5317DD6A705148951A4C20A933DD444CDB + A48B08855C292E4C26D368C626C3708D656C72BF2E666E92EB50624BDFD5B9E7 + F0DDE77CEF79CF112A320C83D1D151060606F0F97CFB81F7813EE0A8881C044A + AA7A0F58042E018B854281F1F171666767F92709405D5D1D9393931C3E7CD82F + 226780B3C0DEF5F575CD66B3D8B64D3018C4344D1A1A1A0887C3A8EA82AA7E08 + FC76F9F265C6C6C650D56A806118CCCCCC70E4C89137806F813ECBB2C86432AC + ADADE9CEA29A9A1A492412F4F4F46018860DBC075C9F9A9AE2FCF9F35500FFD8 + D8189D9D9D7E11F9CE719CFEB9B939AE5DBBA69B9B9BE276F8D47C474444FC7F + FD89E33892CBE5B873E70E8D8D8D359148E414B0D8D2D2727F6969895C2EE701 + F8060606A8D8D2373737A7B76EDDAA6A75F5D89014DE6EF7CCD9B6CDC4C404F9 + 7CBE06F806880C0F0F23225E40E540CF5A96C5EDDBB7D5F5442B72C76E81BEA2 + ADAD2D9D9E9E4655DF12914FE3F138ADADAD5E00E5B4ECCD64320022952D4845 + EEF8C5A1BD22805C2EC7DDBB77013E0042C964B20A70727D7D5DD7D6D6AA23B0 + 4B2D2D2D01BC09BCDBDCDC5C0568C966B3A86A952DAFB3C8FDCE66B36E772D7E + BFDF030888C881CDCD4DA09C96D56343A2AAEA5AE08EF3B1933C8A9EF0D8656C + AC68E3E2D7B8F5C0819DDD0580ED40201000086D3DE1D0F2F78A2A886865CBE4 + 6327313656D4D85879390F849E3E2EFFA45C0EB05D0550D555D334E300C1A78F + F59075BDCAE347D113181B2B65F80E29609AA6DBD5EACE751F70B3A1A1815028 + 243B93B39B148988343535013C57D59F6DDBAE025C0A87C3241289AA9DEF4681 + 40808E8E0E8005E06125B21EC0A2AA2EF4F6F6B267CF9E7F0D387EFC38FBF6ED + 4355CF398E433A9DF6020A8502AAFA916118F6E0E020E17018F0C6D4D858D1D0 + D613CFBCAA6A229190EEEE6E547502B871E5CA15F2F9BC07E02F168B747777FF + 2122BFD6D6D69E8AC56281070F1E886DDB2F7CDE9FFD45C2C5DF81B2E7C16050 + 7A7B7BA5BFBF1F9FCF27C04D1149AB2A994C8652A9F412B0BCBC4C5D5D1DD168 + 744544160DC3E8696F6F8FD4D7D7E3380EA55249B6B7B7098542D4D7D74B5B5B + 1BA74F9F26168B014C003F561E4BC334CD1F92C924E974FA05C44D022323230C + 0E0E02444464044851BEFE3BF51C5850D573C08D4A53178033C005E033CBB234 + 954A512C16F1BCADC96492E1E161E2F13822120212C051E0205002EE013F010F + 9F3D7BC6D5AB57696A6A221E8F0BF095880CA9EA971508A954CA0B70BB696D6D + A5ABAB8BE6E6667C3E9F67DDB66D2CCB627E7E9E7C3E4F6D6D2D93939344A351 + 1191716048553F07462DCBAA06FC174522112E5EBC48341A15601CF818F84255 + 47FDAFA9DD954AA512E9749A643289699A69E080887C026CFD2F001792C9645C + C83CE000D37F036384FB0CB712754F0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C0864880000052C494441545885BD96514C53 + 5718C7FFA7E0AD2DAD0F6B696FAF49A5E20A263798D6B60EAB66AC2FCB48D6B1 + 8441D207597C50B3F02AC9D2C7BD90E9C3028BAB093C98BA58331C7511E78D12 + 1ED032A5B28D569098D675141EBC245431F4D2DBDE3DD02A86D2A2C0FE2F4DEF + F9CEFFFCBE7BBFF39D43504232990C369B0D0E8703353535502814AFC7044140 + 2291C0F8F838C6C6C6208A6229AB0D458A3DACACAC84C7E341474707D1E9742E + 005F02F808808910A292246909401CC01880EBA954EAAEDFEF97FAFBFB914EA7 + B70660369B71FEFC79D4D6D63603E84E269307272626108FC7C1F33C0441805C + 2E8756AB85C96482C562C1DEBD7BA70074CDCDCDDDECEAEAC2A3478FDE0FC0E9 + 74E2C2850BBBD46AF58F3CCF9F0A0683989999296B62369BE176BBA1D56AFB04 + 41F8C6EBF566868686DE0DC06C36E3F2E5CBBBD46AF5602412F9341008606565 + 65D399501485B6B636B02CFBBB20085F9C3E7D3AF3F0E1C3B2F32A80D56FDED7 + D7079AA67F8A44225FF9FD7E64B3D975C199DD7BF0F8F3EFC907F17BA81085B7 + C6B2D92C26272741D3F40186610C478F1EFD6D6060A06C123200F0783CA8ADAD + 6DE679FE5420108024499BCE7CAD244942201000CFF3A7743A5DF3D9B367CBCE + 91C964327474741000DDC160F09D5E7B31ADACAC20180C0240775B5B1B512A95 + A5011C0E07AAABAB5DC964F2E0660A6E339A99994132993CA850285C2E97AB34 + C0E1C387410869999898D896C50BCAFBB5D86CB6D200269309001A63B1D8B602 + E4FD1A6B6A6A4AC655E6DBAB696161E1F5C3CCEE3D458345B9FAADDFA286CB29 + 891042F27EA6B5EDBB683C001042AA04E1CDB69AFEECBBA22DBAA0A7AEAE0DC7 + D9814E09583D2B08215525572F004892F44A2E97EF29F4F1FA216FD17D28CAD5 + 78EAEA2207EE764B95C2CB92C672B91C9224BD2A0B90CF3CAED56A0FCDCECE02 + 0076A55F9499F472E31842080068B55A0088AF7DB3C5244B24120010CA17E3B6 + 29EF17CAFB6F0C100E8701E0BAD56ADD5600ABD50A4992AEE7FD370608854258 + 5C5C1C6618E6715D5DDDB62C5E57570786611E673299E13B77EE940610451157 + AE5C91009C73BBDDA0286A4B8B531405B7DB0D00E7060707A5172F4AD7930C00 + FAFBFB313737774BA3D15C6A6F6F2FD4D13B8B1082F6F67668349A4B8B8B8BB7 + 7A7B7BCBCEA900005114118D46D1DCDCCC190C062BC3301F4E4F4FAF3B922B44 + 01FAA95BEB8E626075DB793C1EB02C0B00DF3E79F22476EDDAB5A2C7FA3A0000 + 989F9F472C16CB353535FD623018AA1B1A1A6C0B0B0BE079BE6C16F5F5F53879 + F224F6EDDBE703E005E0A769FA01CBB2FF701C5712A262ED9F582C8670389C6B + 6C6CBCA9D3E91E582C96432CCBEAE4723972B91C4451442E978342A1004DD3B0 + 582C686969C1F1E3C7234AA5F2EB542AF5C3D4D454CC60308C0308188DC63F58 + 964D948228FAB1552A15CE9C3983D6D656A252A93E06D002A011800940158057 + 58BD158700FC9A4EA7476EDCB821F5F4F460696909BDBDBD703A9D4D007E06D0 + 3A3A3A3ADAD9D959F4AE51B2DA944A254E9C3801BBDD8EFDFBF7A3AAEA4D6B5F + 5E5EC6B367CF100E8731323282B5D54E51147A7A7A70ECD8B14D41EC88288A82 + CFE743341AFD241A8DCE47A351A7CFE75BB7CD2B3698BF6565B359701C878686 + 8638C3307FCA64B2AB46A331C4B2ECBF6B6B62C7000A10C3C3C370381C71BD5E + FF1721641DC48E020040269301C771B0DBED319AA60B10F759969DE5386EE701 + 80D59B32C7713872E4484CAFD7FF0DE0AAD168BCA7D16866FF178002C4EDDBB7 + E1703862344D4F02B03F7FFEFCFEFB35FD2D48A552C1EBF542AD56E3E2C58BF8 + 0FA6E0256455B561670000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C086488000006B2494441545885CD985F4CD3 + 5916C73FF7D75F2D54C03A4191064A509B8580127458754A89C1D6E88618B23E + 388910DDB8B39360F4C1C866339948D6C92492B8711F1C976497CD0E2F0E4ED6 + 3F2F18E220C266270BC58A957F1628B2B06E8D5640A040A9B9FB403B232AB438 + A2FB7DE9AFB9F79CF3C9AFE79E737A05514AAFD7B36DDB36CC6633696969AFAC + 8F8C8CE0F17870381C0C0D0D45EB36A244A40D79797994969652505080AAAAEB + 851085C06620158803A6012FD02DA56C066EF7F6F6CACB972F535B5B4B201058 + 1E40A3D1C8A953A7B05AAD2AF031704C08F1E1E8E828C3C3C38C8C8C30333383 + 56AB25212181E4E464929292043008FC19F8CAEBF58E9D3973861B376EBC5DC0 + C2C2422A2B2BD1EBF51F0155814020ABA5A585B6B636BC5EEF82CEE2E3E3C9CD + CDC562B16030187CC0EF80BF5EB972858A8A0A9E3F7FFED3014B4A4A282F2F47 + 55D572E04B87C3A1A9ABABC3EFF747ED545114AC562B76BB1DAD56FB2DF0ABD6 + D6D6A9B2B232A6A6A69604A879F14B616121A74F9F4655D53F0483C1CF2F5EBC + A8343636323B3BBB24A7524A060707E9EAEA222323232B3636B6C068347E9B9E + 9E3E5B5F5FFF668046A391EAEA6A743A5D793018FCBCBABA9A9E9E9E050D6775 + F10C7EF429EAF43374934F5EBB6762620297CB4556569649AFD7E7AC5FBFFE1B + BFDF4F7B7B7BD4804AF8A1A2A2229C735FD6D6D6E2F1781635941A2D936BCC22 + 1893B0E8BE67CF9E515D5DCDF4F4F42F8410E5C78F1FC768342E0D302F2F8FFC + FC7C15A872381C1A97CB15B58368E4F3F9B876ED1A40854EA74B3F7AF4E8D200 + 4B4B4B013E9E9999C9AAABAB7BAB7061399D4E0607076380CF8A8A8A30180CD1 + 01C6C5C55150500070ACA5A56549A775A96A6C6C0428515575F59E3D7BA203CC + CBCB0B77880FDBDADA960D0EA0A7A7878989891540F18E1D3BA203349BCD0821 + 0A47474779F4E8D1B2024A29E9EDED0528349BCDD1019A4C2680CDC3C3C3CB88 + F6A342713687E246942A8400481D191999B730AB8B476AB40B1ACEC6CE257950 + 174740FFC1A241B4933E2942819E3E7D0A7383467480A1CF95333333F316867E + 7E98C935E688D38E7753B1F06E2A5E744FF6DF8FC9F0732010400811B754C019 + AD76FEDB5AE3FE8ED5832DF25593390575717837158BD503DFCB95BEC58BFABC + 80AA0A7323DA9200BD0909F33B42FCA3EE450D03FA0FF06E2A66A5CFC3EA7FB7 + 2E1E25F4F302AC5AB50A29E5C223D14B5242B9D7959C9C1CADCD4FD2BA75EB00 + BA43B918518AC7E3414AF98FA4A424111F1FBFAC7000A1F2D21CA9D787A5389D + 4E80DBC0406E6EEEF29101292929AC5DBB560297EFDCB913958DF2E0C1037A7A + 7A24F0178BC58246A38968F4A62A2828404AF99D9472E0FAF5EBD101025CBD7A + 15E082C1607862B55A9705CE643291939303F045777737F7EFDF8F1EF0D2A54B + 78BDDE31E0B776BB9DB77D60743A1D070E1C00A801FE79FEFCF9A86D15982B9E + 9595954829BF5655F59BC3870FF372D97953298AC2C18307494C4C744B298FDF + BA758BA6A6A6A8ED7F48B8FEFE7E8C462399999975313131D6ECECEC34B7DBBD + E0F8A5999D22A9FB3AB163FF59D0B94EA7E3D0A14364646408E01CD050535343 + 6767E7D201019A9A9AC8C9C909A6A4A45CD2EBF5D95BB76EFDD9F8F8380F1F3E + 8CDA61586969691C397284D4D45437F04721C4EF81E1FCFCFCF6FEFEFE887F29 + 5E0B28A5A4BEBE9EF4F4F4E0860D1B2EA9AA3A9E9595959F9999A99D9C9CC4E7 + F321E582DD0F80D4D454F6EDDB475151117ABDFE6F52CA5F0A211A80FF0A21AA + 144519B2D96CED1E8F87FEFEFE88800B0E032525259C387182152B569884109F + 01A57EBF3FA6B7B777C19B858D1B3792989828A594F552CA2F807F35353571F3 + E64D2A2A2AD068349F005F019F0483C1AF4F9E3C19F1D661D169C56834525656 + C6DEBD7BD1E974AB8410FB80F0DD8C0958C90B773340B394F22A30D8D1D1C185 + 0B17686E6E0660F7EEDD9C3D7BF645C85F0783C19A489011C7290083C1C0AE5D + BBD8BE7D3B191919984CA6F054F2831E3F7E4C5F5F1F4EA793868686D7D6B917 + 207F2384382FA58C0AF29DCA6EB7E372B9E8ECECFCB4ABAB2BD0D9D9597AF7EE + 5DEC76FB6BF72F5F5F5B40E1C361B7DB6F4B291F2B8A52A528CA80DD6E77F5F5 + F5BD72BADF3920CCD5DCE1E16176EEDCD9063C5114A54A08E1B1D96CF75E2E41 + EF0510C0ED7633363686D56A6D9352FA426FB2FF65C8F70608D0D1D1C1D8D818 + 168BC52184781AAA937D369BAD230CF95E0101EEDDBBC7F8F83856ABD5218418 + 0941F6DA6CB60EB7DBFDFE01E147488BC5D22AA51C1542FC495194EF0381C0C0 + FF052080CBE50AE764AB10A203B8E9743A9F4755A8DFA5F6EFDFCF962D5BF0FB + FD9C3B778EFF017526BE678F4E1CC20000000049454E44AE426082} + end> + end + item + Name = 'zoom-out' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000020E49444154388D9593B16B1A + 6118C67F9F86C3E51C72724D07DDCE231082149C920B77D9C4C9218B3A0A424A + FE81FC01199C4DA1E024D2760AE2D0C40C871071A8906E86DB5A74A934076206 + 3D7A5C97D498C285F6199FF77D7E7CDFF7F00980743A4DAD5643D3341338060C + 21442208829FC00DF06E3C1EF74E4F4FB9BDBD655D229D4ED36C363764593E77 + 5DB762DB368EE3309FCF9165195DD7393C3C647373B3B15C2EDF56ABD55FC3E1 + F009D06EB7D134EDBDE3389556AB85E779FC2D49922897CBE8BADE984EA7D55C + 2EC762B10020A2699AE9BA6E6818C0F33C5AAD16AEEB565455350B85C26A1601 + 8E6DDB0E0DAF436CDB0638360CE319C0701CE7C5F01F3DEE19894462E56D0821 + 94F97CCE8FED1CD3ED9C080BABA3CF8170BA082194757F2308827B5996D5E0EE + 92577797C14B2790E3718220B85FF722405FD7F57FBAC2E35E7F369B3D039C5B + 968524492F862549C2B22C80F3C160F004984C263D45511AA5522914224912A5 + 520945512E7CDFEF753A9DD52C3A1A8DC8E7F3575B5B5BAF3399CC1BCFF37878 + 78C0F33CE2F138BBBBBB148B4592C9E405604422912F9AA67DBFBEBEC6F77D04 + 40369BA556ABA1AAAA49C85FF07DBF178D464DE01370D4EFF76F4E4E4E58D516 + 8BC528140A1C1C1CA0284F4DCD66330683019D4E87B3B333F6F7F74DE0E323A4 + 1FDA7BD85BD4EB75F6F6F62CE0037014FD1F80EFFB74BB5D767676BEA552A9AF + 40F637271BD4B902B973230000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000002F449444154388DA594414823 + 5718C77F5F662CA187C14C242229BA6862404F7A715D9416A99EF4E021908BAC + B3CDEE427BCB2A1E73B0EC49EAA5B52759B7D4535A100F3978F220289486120F + 224E028D598BA91E3A21ABE284D7433731691585FE4EC3F77DEFF7DEF09F79C2 + 07A2D128894402C330C2C04B601C08013A50047680374AA9ED743ACDE2E222E5 + 72997F23000B0B0BCCCCCCE822F23590383E3ED6B2D92CA552896AB58A699A44 + 2211FAFAFA109134F02C9FCFFF393B3BCBF9F979B3301A8D924C267511F9A952 + A94CA552290E0E0EFEB33340201020168B110C06734AA9CF3299CC89655954AB + D5FA8CB6BABA8AD7EB7D5DA954AC9595150A85C2AD32804AA5422693A1BBBBDB + F4F97C4F3A3A3AD68AC5A23A3C3CACCF780CC3088B4822954A71767676A7ACC6 + F5F535EBEBEB5C5D5D3D1691A7966535F53DC0CB42A1A0DDF59AB7E1380EBBBB + BB005F86422102814093F0F36C36FB60598DFDFD7D446410F0777575D5EB3A10 + 2A954A009CF57C4AF5A38FEF95B5D9DB9C9E9E028888F400F5A87511D16B29BD + 371FE17A8D7B85667E87EAF555E3A16E4EA8947A679AE62380CE5FDEDE2BAB4B + DBDA6A8FC5C6BA07D8E9EDED7DB0A8462412412955504A151CC76912BEE9EFEF + 6F4AEA3E745D6764640460CD711C6CDB6E126E8B483A168BD1D2D2F220E1D4D4 + 14A6699E28A5BED9DCDC6CFA533CE9741AE0593018CCC5E3710CE3EE50745D67 + 7A7A9AE1E161017E049CA3A3A3A6196D6F6F8FB1B1B1F7ADADAD3FFB7CBE2743 + 43439F78BD5E2E2F2FB9B8B800C0EFF7333030402C16231C0EFF017C2F22AF80 + E2E8E8E86FB95C8E7C3E0F7CB86DFC7E3FCBCBCB0C0E0E7A44E429F095880CD4 + FA004AA902B0A6945A06FE1291B888AC28A55EB8AEBB363F3FCFD6D6D6CD024D + D3989C9CC4B22CC2E130801FE8E19FEFEC9D52EAF772B9CCC6C606B66D934C26 + D134ED39F01DF0DC75DDB773737337C246DADBDBE9ECEC6CAAD5D2AC05303131 + C1D2D252A334EEBAEE0FB70A1F4A83F485887CAB94FA42FB3FC25C2E876DDB8C + 8F8FFF2A22A7C0C9DF78CD26E20719E0B20000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000003F2494441544889AD944F485C + 5714C67F67FEC9F4E198D4BCD4A10BFF4071C681281D348E8B82882EAAE02290 + 45BB70335D34D0C452A108015759B43675D1AD135C1452A5099380A933DD444C + 5BB35128F8A46491741CA24C9B8A3C1546CC3B5D389364661C4C4ABFD5B95CCE + FBDDEFBBE75DA120C330181F1F6778781897CBF536F03130089C139133405E55 + 9F004BC04D60697B7B9BA9A9296EDDBA45350940434303894482C6C646B7885C + 01AE02A7B6B6B63493C960DB365EAF17D334696E6EC6EFF7A3AA8BAAFA29F0C7 + EDDBB799989840552B018661303737475353D35BC00FC0A06559A4D369363737 + B5BCA9A6A646A2D128FDFDFD188661031F01F7666666989C9CAC00B8272626E8 + EEEE768BC88F8EE30C259349E6E7E7757777578A0EA52000C771249BCDB2B2B2 + 424B4B4B4D2010B8002CB5B7B7FFB9BABA4A369B2D01B886878729C432984C26 + 757979F958ABE5B26D9BE9E96972B95C0DF03D10181D1DA5708E9780C2855EB5 + 2C8B870F1F6A31132DA85AADAABABFBFAFB3B3B3A8EABB22F2452412A1A3A3A3 + 14C0D1B49C4AA7D32FD2288FE5B8BAB8CE66B3ACADAD017C02F862B15805E0C3 + ADAD2DDDDCDC3C39972A5A5D5D057807783F140A5500DA33990CAA7A622CE511 + 15D7994C8682BB76B7DB5D02F08848FDEEEE2E007BE67BF2F883CBA2AA5A8CA0 + 5A0D60FCF5485B96BEA3D80FD497BBF300071E8FC703E0DBFF87B3EB3F29AA20 + 721459B51AF0ED3D3BFAC8513BC0410540551F9BA61901F0EE3DD3B3D6BDE362 + AE2A054CD32CBA7A5CBEEF021E343737E3F3F9E4A4C979B57E75DDDADA0AF05C + 557FB36DBB0270D3EFF7138D46DFE8E445793C1ECE9F3F0FB0083C2D8C6C0960 + 495517070606A8ADAD7D63405F5F1FA74F9F4655AF398E432A952A056C6F6FA3 + AA970CC3B0474646F0FBFDC0EB8D69341A95DEDE5E54751AB87FE7CE1D72B95C + 09C0BDB3B3436F6FEFDF22F27B5D5DDD85B6B636CFC6C686D8B65DF50EBC5EAF + 0C0C0CC8D0D0102E974B800722925255D2E934F97CFE25607D7D9D868606C2E1 + F0231159320CA3BFABAB2B100C06711C877C3E2F070707F87C3E82C1A0747676 + 72F1E245DADADA00A6815F0A8FA5619AE6CFB1588C542AF502523C156363638C + 8C8C000444640C8873F4FB97EB39B0A8AAD780FB0553D7812BC075E04BCBB234 + 1E8FB3B3B343C9DB1A8BC5181D1D25128920223E200A9C03CE0079E009F02BF0 + F4F0F090BB77EFD2DADA4A241211E05B11B9ACAADF1420C4E3F15240D14D4747 + 073D3D3D8442215C2E57C9BE6DDB5896C5C2C202B95C8EBABA3A128904E17058 + 44640AB8ACAA5F01E396655502FE8B028100376EDC201C0E0B30057C067CADAA + E3EE137A5F4BF97C9E542A452C16C334CD14502F229F03FBFF0BA00849A7D345 + C802E000B3FF02F0A2F5387AE477490000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000004F2494441545885BD965F4C53 + 571CC73FB740EF5ADABDB4C0A52695EA5230DED414A10E5133C6CB32633A9630 + 488CC8B2074D16F6282F3CEEC54C1F16581C26F06070916438EA22CEC6111E1C + 30A5B20D2A8425AD300A0F960414432FFD73F740EB48841610F67DBAF7DC73BE + BFCF39E7777FE708A49146A3A1ACAC0C97CB455151113A9DEEF5374551989999 + 61646484E1E16162B1583AAB4D256CD4989D9DCDD9B367696C6C14F2F3F3AB81 + 4F81F7019B2008065555978120300CDC5E5A5AFAB5ABAB4BEDECEC241289BC1D + 80DD6EE7CA952B1C3C78F0347039140A1D1A1D1D25180C120E87511405511431 + 9BCDD86C369C4E27FBF6ED9B009AE7E6E6EE363737F3E4C9939D0154565672F5 + EAD51CA3D1F85D381CFEC2E3F130353595D1C46EB7E376BB319BCD1D8AA27CD9 + D2D212EDEBEBDB1E80DD6EE7C68D1B3946A3B1777C7CFCA3EEEE6E565757B73C + 13AD564B5D5D1DB22CFFA228CA27172E5C883E7EFC38E3B82C58DBF38E8E0E24 + 49FA7E7C7CFCB3AEAE2EE2F1F8968303C4E371C6C6C69024E93D8BC55278FCF8 + F19F7B7A7A324E220BE0DCB9739C3973E674381CFEA6A3A363DBC1D76B727212 + 87C3519A9797E7CBC9C9F97B7070306D7F8D46A3A1B1B151002E7B3C9E6D2DFB + 465A5D5DC5E3F1005CAEABAB13F47A7D7A0097CB455E5E5E7528143AB49584DB + 8AA6A6A608854287743A5D757575757A80A3478F220842CDE8E8E8AE044F29E9 + 57535656961EC066B301540402815D0548FA55141515A5ED979D2CAFB6858585 + D78DD177DEDD71E0EC952555100421E9675B5FBE37EC0F200842AEA228AF1B27 + 3FFE7AC312BD15C93D4D2AAC9D158220E46604065055F595288AEFA6EA78495F + 8BBA53809444514455D557190192330F9ACDE623B3B3B300E4445EEC3CB22008 + 0066B31920B87E653792666666066028998CBBA6A4DF50D27F73009FCF0770BB + B4B47457014A4B4B5155F576D27F7380A1A121161717FB2D16CBD3E2E2E25D09 + 5E5C5C8CC562791A8D46FB1F3C78901E20168B71F3E64D15B8E476BBD16AB56F + 155CABD5E276BB012EF5F6F6AA2F5EA4CF270D40676727737373F74C26D3F5FA + FAFA541E6D5B8220505F5F8FC964BABEB8B878AFADAD2DE3180D402412A1B9B9 + 194551BE3A7CF8705F434303A2286E2BB8288A34343420CB3240CFF4F4342F5F + BECC382E2BF5303F3F4F201048545555FD58585898E77038CA1616160887C319 + 4D4A4A4A387FFE3CFBF7EF6F075A802E49921EC9B23CEDF57AD31EEF59EB5F02 + 81003E9F2F51515171373F3FFF91D3E93C22CB72BE288A24120962B118894402 + 9D4E872449389D4E6A6A6A3879F2E4B85EAFFF7C6969E9DB898989406161E108 + D06DB55A7F976579261DC4869B6D3018B878F122B5B5B582C160F800A8012A00 + 1B900BBC62ED563C04FC14894406EEDCB9A3B6B6B6B2BCBC4C5B5B1B95959555 + C00F40EDC3870F1F3635356D78D7489B6D7ABD9E53A74E515E5ECE810307C8CD + FDAFB4AFACACF0ECD9337C3E1F030303ACCF76AD564B6B6B2B274E9CD812C49E + 48ABD5D2DEDE8EDFEFFFD0EFF7CFFBFDFECAF6F6F6377EF3AC4DC6BFB5E2F138 + 5EAF1787C311B4582C7F68349A5B56AB754896E57FD6E7C49E01A420FAFBFB71 + B95CC18282823F05417803624F0100A2D1285EAF97F2F2F28024492988415996 + 67BD5EEFDE03C0DA4DD9EBF572ECD8B1404141C15FC02DABD5FA9BC9649AFD5F + 005210F7EFDFC7E5720524491A03CA9F3F7F3EB8E3ABD74E653018686969C168 + 3472EDDA35FE05296A02DA555BB2030000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000065E494441545885CD985D4C93 + 591AC77FE7ED5B3B76003B8988345082D84C0D4682C0AA534A0CB67E24C44CC6 + 0BE702CC18777623C61B239BCD642259279B68C2C6BD7058925D36BBB317AC4C + D68F9860D0515236B3192856AC7C543EAA84C6AD711048A16C4BC9D90BDB1DD1 + 415E14C6FDDF9CF7CD39CF737E39EF799EF3BC47A05146A3916DDBB661B55AC9 + C9C979A97F7C7C9C402080C7E361747454ABDB4525161B505252425555156565 + 65A8AABA4108510E6C01B28114E03F4008E89752B603B7070707E5C58B17B970 + E102B1586C6500CD6633A74E9DC2E170A8C0C7C0712144F1C4C404C16090F1F1 + 71A2D1287ABD9EB4B434323333C9C8C810C008F047E0CB50283479E6CC196EDC + B8B1BC80E5E5E59C3D7B16A3D1F801D0108BC5F23B3A3AE8EAEA22140A2DE82C + 353595C2C242EC763B2693690CF835F0E74B972E515B5BCBDCDCDC9B03565656 + 52535383AAAA35C06F3D1E8FAEA5A5854824A2D9A9A228381C0E5C2E177ABDFE + 6BE0706767E74C7575353333334B02D43DFF525E5ECEE9D3A75155F577F178FC + F3A6A626A5ADAD8DD9D9D925399552323232425F5F1F369B2D7FF5EAD56566B3 + F9EBDCDCDCD9D6D6D6D703349BCD3436366230186AE2F1F8E78D8D8DF8FDFE25 + 397B51535353F87C3EF2F3F32D46A3B160C3860D7F8F44227477772F1DB0AEAE + 8EBCBCBC0F80BF353535296F0A9754341AC5EFF753545464D5EBF533C5C5C5DF + 5EBD7A957038ACC95E8167A9A4B4B454051A3C1E8FCEE7F32D0B5C526363635C + B97205A0D66030E41E3B764CB3AD0250555505F071341ACD6F69695956B8A4BC + 5E2F232323EF009F555454603299B401A6A4A45056560670BCA3A36349D1BA54 + B5B5B50154AAAAFADEDEBD7BB501969494244F88E2AEAEAE158303F0FBFD4C4D + 4DAD023EDCB163873640ABD58A10A27C626282C78F1FAF28A09492C1C1418072 + ABD5AA0DD062B1006C0906832B88F68312F36C49CCBBA854210440F6F8F8F8BC + 8E59432A52A75F1628FDF4981489899E3E7D0ACF0A0D6D8089F6DD68343AAF63 + F4679F309D6E5DB4DAD1A2CDFF382E93CFB1580C2144CA5201A37AFDFCD54A1F + F886F7463AE4CB266F265555E15989A66D7CA20DA5A5A5CDEB487DDCBF7C5489 + CF0BB066CD1AA4940B97442F4849ECBDBECCCCCCE5037A85D6AF5F0FD09FD88B + 8B4A0904024829FF9991912152535357140E20915EDA038180A6F18AD7EB05B8 + 0D3C282C2C5C3932202B2B8B75EBD649E0E29D3B7734D9280F1F3EC4EFF74BE0 + 4F76BB1D9D4EB7A8D1EBAAACAC0C29E53752CA07D7AE5DD3060870F9F265807A + 93C9F4BDC3E15811388BC542414101C017FDFDFDDCBF7F5F3B60737333A15068 + 12F895CBE562B903C6603070F0E04180AF806FCF9F3FAFD95607303737472814 + 62CF9E3D77753ADDFB369B6DB3CFE7E3C5E4FD3A52148543870E61B15806A494 + 1FB9DDEE587D7DBD76FBE4C3F5EBD7939FFA88C9646A3F7AF428E9E9E96F0467 + 3018387CF830369B4DF06CF5C26EB77B493EE64584DBEDA6A0A0209E9595D56C + 341A37171515BD1F0E8779F4E8D192E17272723872E408D9D9D903C0EF8510BF + 0182A5A5A5DDC3C3C3684D33F300A594B4B6B6929B9B1BCFCBCB6B5655359C9F + 9F5FBA69D326FDF4F43463636348F9EAD32F3B3B9BFDFBF753515181D168FC8B + 94F22321C44DE0DF4288064551469D4E677720106078787851C0058B81CACA4A + 4E9C38C1AA55AB2C4288CF80AA4824F2CEE0E0E082370B1B376E64EDDAB5524A + D92AA5FC02F8CEED7673EBD62D6A6B6BD1E9749F025F029FC6E3F1BF9E3C7972 + D15B8757562B66B399EAEA6AF6EDDB87C160582384D80F24EF662CC0BB3C7737 + 03B44B292F03233D3D3DD4D7D7D3DEDE0EC0EEDDBBA9ABAB7B1EF2E7F178FCAB + C5203595532693895DBB76B17DFB766C361B168B255995FC4F4F9E3C61686808 + AFD7CBCD9B377F34CF3D07F90B21C47929A526C89F542E970B9FCF476F6FEF2F + FBFAFA62BDBDBD5577EFDEC5E572FDE8F8953BD7165032385C2ED76D29E51345 + 511A144579E072B97C4343432F45F74F0E08303C3C4C301864E7CE9D5DC0F78A + A2340821024EA7F3DE8B29E8AD00020C0C0C30393989C3E1E892528E255672F8 + 45C8B70608D0D3D3C3E4E42476BBDD2384789AC893434EA7B32709F9560101EE + DDBB47381CC6E170788410E309C841A7D3D9333030F0F601E10748BBDDDE29A5 + 9C1042FC4151947FC562B107FF1780003E9F2FB9273B85103DC02DAFD73BB72C + FFBDCBA903070EB075EB56229108E7CE9DE3BFEBA39EEA6114AED30000000049 + 454E44AE426082} + end> + end + item + Name = 'unused\debug-breakpoint-filled-eraser' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000002F949444154388D85D15B4893 + 611807F0FFBB6F6CBA53CE7D7ED36935639F1B0E2CA5032545E8A4831D4002E9 + 222C2D132D3A5077455D745304414418491456AE2E222A25820E60D0A57DD994 + B6E58C3CCEB94DDDBEB9ADD7B70B4BBC30FB5F3FBF8787FF430040A752E17A75 + 350E9595E511424E00A80621220080311F804EC6D8AD57FDFDA3CDCF9F635296 + F13744A752A1ABBE1EEB0B0A6A19A5AD237D3DFA71AF07F1C80400406BCC81B9 + C8094B71E90CE1B8265F28F4A4EAEE5D04E37100007773FF7EECB2DB6B93F199 + 879F5F3C5207BD1EA4E418C018C01852720C919F018406BD6A9355AC11B28C5E + 676EAEC72D490000C5A1D2D25C46696B6FD753228743F857E47008BD5D4F09A3 + B4D5258AB95BADD6F905849013237D3DFAE5F0A225A9D17EE90701EAF7399D00 + 0025803DE35ECF7F31007F669669B74AAB1B98A35499A154CE5F004094FF14B6 + 1CD60996CAE21D351BF8C2A2A882E34EED7238603399A0002160CBE3EF5ADEEC + B257EE2957A933DABF743ED127A622D72C7AFDB9D70D0D5080319FD698B3A464 + 801F054595E28E039B552A75BBF4B2838B0E0D427AF11889A9C8558BC1704601 + A053108B97C409DBFACA81D30FCB7B6C15F7A5976EA51C992F3A25C7E0FFF806 + 20E4B28201B7F29D65314D36BF187F9FB596B8865B5ACBC3A6D5ED4D03BA8C36 + C19502210484108D9187A3622F65941EE7D6E6E5C5EC82103059C59AC85080A4 + 13722A9D672B1F3EDBBE316A5CF5A8EDFD672E381D277DBC53C940929BE818B7 + 76EF41AACCD4D48D44A36E62D268F0AEB11122CFD7324AEF8CF64B83DF8AB6AF + F3563547EF7D90F4BEB1F0C265C20A0DEE14CE24B784A4A313D1F0E39D6D6DE0 + 12E9349EF5F6C269367BD6F0FC0383D9A24E9BAD9F06054772A5C950F5F5E704 + 52BF28048306C72A4A699C5F7538141EEF387CE30AFC9393E000209E4EC32D49 + E80E046233C96477E0876F6E5ADCF229DB983DEBC8E75DC1691975DB4AA856AD + AC0B87C7DC972E1EC1D0F8300080FCEBF9392B45B4DC7C8B15BCE53C800B60AC + 293239DC71FBA40BA121FFC2DC6FCBB44439881E189F0000000049454E44AE42 + 6082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000040D49444154388D95D26B4C9B + 551807F0FF792F7D4BFB964B5B8B6BB3160AA2842C0E7126348ECBB0CB264C09 + 8125532E314B7431339931F1F2C5C478FB6234265E32810FF80171919801D3A8 + CC39043290C19AB16E48A1AE0C2865EB786969797B798F1FB6544860C1FFD7E7 + 39BF9CE73C87E07EEC7A3D4ED7D5C161B3F18490A3001A009410424C145807A5 + 1E00FD94D2F684A2FCFDF9D010DEEBEF475251B03104004A6D369C6D6E862808 + 6500DA9231D9BE3C7B03D2E21CE4B530188E8736CB08636E0174D96605949E06 + A56F0EFB7CD1E73B3AB0168BFD07DAF57A5C3A7912A24AD508A07DC13DC17A47 + 2E221993B155322D3978B4E2300431FD2F00877E9D9E966A3B3A5275F64C6323 + F20D8632003F78067F636F8E0D8226935B6200B01E5A41C0E386C19A67E1D334 + 4FE4190C9DB72409AEC5450000E3B05A7900AD0BEE0976E1DAF8B6D0C6C4A311 + 4CFEDC0D251177026879A3AC2C5563082147933139CF3B727147D8C69BCEB946 + 01E0ED3CBD1EC566F33D1040FDF2EC8D6DDF6C9B2C331C579790D7B5F168A406 + 84684541000070009E5C5998FB3F58804FD33873F695794DF98527188E1F00A5 + 9E6C51BC0F12F2502C12DE31C6A935CEDCD22AAF29EFB15E9A4C541042D62850 + F3656DEDC02D4902034066386E47637282FAA0BDB4D26BCA2FEC8985572BC6CE + B461FEEA9896007DA220EC3FDBD20206947AB459C6074A1408506DC633BBF73F + 3B93FD48514F2C2C55BA7A3B21874398193E8FF9C9CB5A42C8399D203CCD0038 + 6FCC2D782096C83039FDCD1F7BE70FBCF4A31C5EAD74F57C07391C4AF5CC0CF5 + C37FDDA505D0CD50A05D976D51322D395B8E9914F54E7FD3FBDE15477DEF0563 + 89F39DA9842C87573735A9441D32CD5680D2CBEC5BE5E57758424C9966EBBE80 + C70D25114F61096D9633D0F4E16CC8D1D01B5C4F54B65E98C0689A9D5708B3BE + E7CE351E841095A8C3DE232F40ADCB185028AD65352A151C36DB1F9C4A701AAC + 7996A06F1689980CCAAB9B028D1F8CAD961DEBB91B8D1F68FD7D1C52442600E0 + 3616F114245A12BDC93DFEDC31A4A5670D50A0666A6929425886C12FC78FC361 + B36500E8521271E79C6B1412E5B4A3AF7E7B22CA6B3EFDECA711AC44367FFC0C + 8D806F7257E3552B572F1145A99EBABDBC76A8AD0D2CA514DD9393D8BB6B976C + D7EB3B19969DCB345B8BD4D9BBFB3C394FF929AF7E11806ADA1F4C61E969025E + AE2A46CC52304869B25A9AB91239DCD68640380C1600E2C924BA5C2ECC4B120A + 4DA62B7A8DE60B15CBC83EBDDD1756670E5B8D190D6A9EE3A7FDC1146610D503 + 14F4882B28454E7DF43A6E87EE6D9D6CB5DA62B319A22000E60254BFDB0541A3 + 2B07D037E299D7E43FAC874154FFA9505ABDF48F7BEDEB5307110A065267B704 + 3726778F03AF7C720E82465701E07B00E3A04AFDA2EFFADA57AF3911BE1BD8D4 + FF2F112FB13A0A77E9E40000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000057C49444154488995555D4C93 + 57187EDEEFA75F5B5A0A556841870A4A406D271867A6D1282A6C420414D0C468 + A25BB6C4EC66CBCC128DBBD8C576B1A937CB6EE664BA3F6111D10D74A819BACC + CD44502B1220884E8B50AC94D2DFAF5FBFEFEC028A22E8DC73F59C9CF7BCCFFB + 3EE73D3984A750BC60010E969521DB6A05112D05B00DC06A10CD27C0CC800018 + EB057019C009C658DBA350081FB7B4E0787B3BA60325C8BEB56BB1AFA8081C51 + 2E80C34454AC2A0A8D7AFA111A7E04558981177548B2A621D9360BBC2832C658 + 0B80F7C158CFF7D7AF634F6323E29A3655605F5111F6171581800A00B571396A + BEDF7E05835D2E2872943D5B9528E9C99EE74456E10A08923E006017031AEB5D + 2EECAAAF9F14CB17E7E6E2CBF2727044154454373AD8AFBFF9CB4FF0B9EF4153 + D5B12AC691E09AAA62D4F3109E9EDB48B6CD92F466CB16001D8B6DB6AEE17018 + D7DCEE0901EE605959C2965AFF809B7735D5410E05A6543D1DE45080B99AEAE0 + 1F70F3006A01E41E58BF1E338CC62702D9A9A90070282E47CD9DE71BA12A3106 + 006C1CCFE389B5AAC458E7F946C4E5A819C0218B2461F7B2654F0488A890884A + EEB75F412C1CC4D356BC883FBD8E8583B8DF7E0544544244855B9DCE090101C0 + 36555168B0CBF532AE4C8708880E8747865B22A32366BDD9624D31182609AC1E + F5F44F999684052FE20042C4F3E5D6AC9C4B990B0BC0EB7498BC0D70042C080D + 7BF132B63C63518817C44DF6BC572FE5ACDC509C3A7BAE47940C574194916632 + 618BC331D6012332A98AFC7F6D0912C757A4E7392FCF2E78BD449F643A191AF6 + 1AF4E6E499BCA8BB2070DCBA6FAAAA0601800363415ED44DB4FFA2C919E721E2 + B8CAF4DC45AD7396AEDC6048329D0C7A3D869B677EC0ADE69FA12AB13C022E88 + 3C6F3F5A5D0D0E406F9235ED652D0A41D46D9A915FF0FBDCD7D66C900CC6C6A0 + D76370FD7A024A34C24607DDB8D55C0F5589E513704124B273002E27DB322148 + 7AC28B116092A1DCBF66C7A591CD1FAE938CC686A0D7A37735D5212E47278246 + 07FB139DE483A8910370821775CC9EE77C7E6A20A889FA4ADF9A1D97862AF716 + 77E4BF71FA8C6991E86AAA433C1A41A2FD4470D8E74534E00780791C63AC8D31 + D632A77005744613A6F13DA409BA72FFAAADAD8F2A3F285653EDA7DCBE8061CF + 3F16F1D8BCCA0823426230190041D2C359BA1549D6B428D3B49DFC3BCB972349 + A7BBC609C2CE64DB2CE9D19D2E629A9AF03DCA045D857FD5B6566FCDFE62CD62 + 6B78E80B186A5B6F20128B53A7355FD0888B381EDF160140D41BE028AD81392D + 23CA34AD8A31768E1F0E8751969FFF18408FDE6CA94AC9C822DF83BBA42A3180 + B8CF838525B5433B3E5DAF5AD21B064682C6A3AD37108EC5295171E78C852223 + 8A14047A45C7C61A986D993203AA009CFDFBEE5DF0370706302725058E8C8C2E + 001D9229F94D7B9E53629A065E6F38E0D9F8DEFDE0BC82BF86464396AF2F5E47 + 38A64CB9A0BE8C25E2BA0DEB1587242B1AA89AC0CE5E79F00095DF7D071E00CE + 767723C76AC562BBBD0B8C9DE20471BE352B3B27D996D9E0C95ED6EBB3CCAA16 + 383EB3677018FEB08CB17F8AC01898511269F79A25E0729C3155D3B6A486BDE7 + AEDDBB83CDC78E21188B8D09688CE174672786C3612CCFCA7A2C09C28F009A05 + 49AF1B49CEE87B9892D52CF05CA9E395F4997D433EF823632FDFA013E9ADB54B + 30DB6A96A1C5B78C1867FCD6D17D036F7FF50582B118008C092470CDEDC6B76D + 6DF0CB326C66F3405C55FB58C08B3B73970738E24E093C57EACCB2CDEC1BF241 + 8EAB184F1ED59856C508E7BA3BAFE2B34FDE45448E4CE4FCAFC705002828AAC6 + F603C7C10B42264017A34A3CD7178A2223C51465D06A184353DFCD3F70E4A30A + C8E1C0A4B3FC73724EC2E0DD4E0C3DE88163557980E3B84681E7579BF53A1D18 + DB0EA0B9AFE34F1CD9BB09722438E5ECBF76109C971F4CDDFC0000000049454E + 44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000656494441545885C5975F4C5B + D71DC7BFE7FADA0D36763118B8C634C426061ADB8484A421318696AA25E9D476 + 72E952912A21555269DAAA69684F99BA3D2C0FDB4BFB306D9A94564D845AC312 + D60DACE6CF1A96D00625A32632E002A160BBD806E218F0E618B8B6EFD903C60B + 31109A32ED2B5DE9EADEF33B9FEFD1B9E7DCEF01FECF221B6DF8745E1E9ED5E9 + 60E438E467660224594A2966A2510C4E4FE30BB71BB70381CD33C01082C68A0A + BC6336C3989F5F4E08B102A806500A42729206420046007C4929FDCBF8CC4CFF + EF7B7A70EEABAFB098483CBE01437E3ECE343460A75A5D4380DF2462BC39E419 + C5ACDF8BE84C10FCC23C0040B22503D2EC5C283545C8D9A687482CB9418177C7 + 42A1EEB7DBDB71F3DB6FBFBB811F1A0CF8F0F5D7B764B0ECFB89187FD2EBE841 + C0D507211E5BB7338615A3C0B01B45950720124BCEC405E1E7CD9D9D0B1FF4F6 + AE59235A0DDE72F8B05222125D0E4F4EBCE2ECB061D6E706158475E100400501 + FF9AF6637A6410F23C75A55491F5FCC1B2B24FEF45220B0EBFFFD1060CF9F9F8 + DBD1A3191296BD746F7C649FEB723B12FCE223C10F2B11E37177D40599525528 + 53AA6A5FD0EB6D3D1E4FDC3B3797D69649DD108233AFBD862D62F17BE1C9897D + 43573B3634EAB544050143573B109E9CD8276298F7FE64B522432C5EDB406345 + 0576AAD596448C3F39F4F9F783AF30F179071231FEE4D6AC2CCB4FF6EF5FDBC0 + 3B070E801072DAEBE8011F8D7C6FF8B2F868045E470F0821A77F5C5505966156 + BC6780A54DC6C871A6448C37075C7D9B065F56C0D587448C377372B9C9A2D5A6 + 1BA8D16A4108B1863CA38F5C6A8F23211E43C8330A4288B5663503E56A350058 + 66FDDE4D872F2BD9B765E7122B2516C0D2DE0E94DE9F09FEAFF88E857F87DBE2 + FC62346F89B5D200080108C98925B7D74DD627F25CF55B4F55544908238A112C + 2D798152000FAC020040F2E126CAA6E034C78D871A2C4A4D5140C4B223E51C57 + FC87575F0593FC9B322930A533E20CE966C25B159CA6C9506FB588C4E28EFE4E + 9BFCCEF58B450CC3741DA9AC2CFEED4B2F01484EC14C340A00C332A58A8B04A7 + 3603DEA6E034C776D45B2D2256DC39F0D9796978CA87F0940F000A4B6A0F75FD + 74FFFEE7128230CE00C0E0F43400DCC8D26CDB0CB84DC1698E1A5EB456B3CBF0 + C989D4CBA9E17EDCE9BE5408A0EB6766B38E01802FDC6E00685769F560D8F4FD + 7AA3A2804DC1153619EAAD6691381D9E3231E4C468F7E5A700D81900B81D0860 + 2C14EA1789253D05865D8F0BFF64BEA4AA893FF1BB032256621FB87841B61AFC + E1B2D4EF98027851AF1F7B32BFE0D8F49D412462FC7781DBE64BAA8EFB9B5B6A + 3C9CD1FED9D56B12CDE095B4ACB12CEEE99D28A9393801E060AAD1C0E4241A4C + 26AF4AAE2890E7A977DF1D756D685926E14DFEE6164B54AAEC3CDBED94FE5DE0 + 584A086F0AB95810421EBC92701F80BA56A7733C652041299C939338B26BD7D5 + 0C45D6F332A5AAF09EE7CEBA2628D03A5F52D5E46B6EA99E9765DBCF75F74B3D + C130010097CAC05260D11472B1A9919796537D4DBD2F01D4FD796060FCC4850B + 2B13D144388C6024123F5456F6A954A9AACD2AD85A383BE15E753A28D0365F52 + 75CCDFDC52BD20CBB69FBBEE94B983732B32A62BC72802C01B432E962B35517D + CD41BF200875978687C7DE3A7F1E714148CF847D810082F7EF2FBCA0D7DB3214 + 5979EA1D15BBA9401109DD7D30A438168A77BFECFBC5C7E605598EFDEC75A76C + FC6E7ADC0280419551A4D717C77E60D44D514AEBAE8C8C8C1D696B039F8CECAB + 7E280EBF1F3D1E4FBC56A7B33F29935DCB2EDCB65D63AADC2A53AA20923C01F1 + 1319EFFB0FFFEA76A4A8DCF1D13567E65A7000D85B5C80F2FA9703221A7FB6BF + B76BBCB1B535055FD3000078E7E6F0616F2FA23CEF2DCBCD3D2B974AFF9A9993 + 17546DD30B395A7DBF576F71443255273CC170566076F504B557A786F599321F + 08A9EBFCE70DF7AFFF781AB187A2DE868E662CC3A046AB45AD4E0713C7212F33 + 130E6D3512550DDB4198AEF65B231A877B7245CD1E9D1AD6674A7D00ADEBBB62 + 1BFBF8F471509A9E33377C364C2B240CDE3875067BEADFDC4E08F38FF65BC305 + 0EF7D47FE17B4BFD48C49F1BBC691FFBE8D4E155E1C03A53F06851B8BEB423BB + 403BA3292EB7EFD0E45AE7A28B724DB61CD6BDA57E8A44DDD0AD8B63E7DE6D84 + 9088AF3D90C73790EC8030683CF501F6D4BFA907613A0108940AAF7C7DF3E237 + 677FF923C463EB1F6CFE03E651A3D78F71B0640000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000886494441545885CDD87B6C53 + D71D07F0EFB9F73A7662C74E7C8D4D08214E9CA79338A1105E296BE9C8034621 + 5DA9D4AEB480CA5AADD236B40DFA9036B6755BA9C663EB566D9ADA3F32A040D3 + 4940910A24EBAA002521B431098190C74A889D98D4C6CF24F6F5BDF7EC8F34E1 + 95178FA07D254BB674CEB91FDDAB73EEEF67E0FF3CE45E27EAE3E2906D30209D + E7EF58242408E8F278D0EE7623228A0F0F382721011BE6CDC38A9C1CD8929208 + 806C025801CC0621F10004507A1D402705EC039188FF8BEE6E543737E3E30B17 + EE093B2560BA5E8FDF9496624D5E1E38867914C07A00AB082146001085081585 + 0818960517A3220CCB820222283D07E00080BDAE60D0FBB7FA7ABC7BFAF45D41 + 2705FEA4A404DB4A4BA1E2B81202BC4308593CE8F5D0FEAE4BF039BB11F2F443 + 122237AD48A08A4F806E6632F4A916F0A99960583608E0AF94D2ED97DDEE8197 + AAABD1D4DB7B7F40B54281F79F7906AB73735584909D20E4E580CB41AE349E84 + CFD93DA5C5018053AA905C301F29850BC0708A1E0ABC204AD2A9570F1DC2BEA6 + A649E7B3E3E10E6FD880E51919264248AD2C4657759C3C4E3A4FD5201CF44F19 + 0700B224C2DF7B15D73A2E40CDCFD0C56A135E6019C6FDA4D57ACE3F34844687 + E3EE817B9E7D16DF1DC6D5454201EBF9231FC2EBB87257B0DB230902FADB2F82 + E138262129652580D0F28C8C33CD2E17DADDEEA9037F5A528257172F5611426A + 23A180D57E682FC201DF7DE16E8ECF7905A01409C9A9CB0921972BB2B25A3F6A + 6E863F1C9E1C98A6D763DF73CF41C1B27F96C5E8AAF3473E7CA0B891F8FB7AA0 + D46889C6602A57725C75AED1E8DD6FB78F3996B9F9C76FBFDDAD20E4E5CED3B5 + 18F47A1E386E249D274F60C87F5D03E0BD272C169467654D0C9C939080D5562B + 0821DB032E0771B5354F1B0E18DE3C9DA76A4108290521A53F5EB26462E0FA79 + F3A060D91242C8922B8DA7A6153712AFE36BF8FB1C94005B96592C484B4C1C1F + B832270700D60FFA3CD4E7BCF2508000E06CFD1220641980946F0D7702752A15 + 6C494900B0AABFF3D243C30180E74A07645124849055DF494B1B1B68351A4180 + 1C4288E96EDE120F22B2282270CD09004BAD46E3D8400BCF03402EA514214FFF + 430502F086DCAE33A054933EECB825DC4DDF532421426F79F14F6F2880B739A5 + EAF7B22445C4A800364679C7A01BE720211A291A7D98B8AD6ADEF4ABC2D53FE0 + E6CC5DB49655C4A47A0706B070F6EC7180409430B79CDBD3897B4DC39B76E795 + 55F26AFD8C53B2241D2484D8752AD5C27FAD5B87052929630029BDCE295504E4 + 9EBB80A9E25E57F3A65DB96595BC4A97581B72BB6CF57BDE43DF45BB9665D963 + DAB8B885D52FBE882C83E10630240800D0C9B02C54F1BAE9C4BDA1E64D3BADE5 + 957CAC2EB126F48DCBD67CF420C448181D278FA3EF925DCB31CC31436CEC82E3 + 9B3621CB60180676793CA0809D02A26EE6EC49AE73CFB837D5BC6987B5AC521F + AB4DAC097DE32A6C3E7A0062E44615D351771CAE4BE7B5043866D2688A8F6FDA + 340C6C77BB311089F841E997FA3996E9C06DD5F0A63FE69555EA63B50963E246 + D25E770CAEB6F33A00C74D1A4D310B00922CA3C46C8685E7D5B1BA84F2DED626 + C8D2FDB58B23380A6CD5184CBBF3CA2AF5B1BAC49A90A7BF683CDC483CDD9D50 + C5EB541A83A96C749354B7B400C01E86E542C905F31F146E4BC46CDB2D6EFC43 + A252A73F11725F2B6AFE64FF84B8D10C6F5679B4606D77BBF1527171581D13A3 + D61A93965E6BBF00292ADC0F6E6BD86CFB53EFE62ABE2F63D1BFFB3CBEBCC0DE + B7D9A9E0B21EABC0CC6C9B1F40E528509265C4B02C1E4B4F3FCBB0EC3AB57E86 + AEBFE3E2BDE25E0B9B6DBB7B3757F151635AADD31BB4BD65F7B14382182EF0B4 + 2A400819E7338CCB29F403281F1084C65B4AFE730E079ECECF8FEAD5EAAF6275 + 892F302CC7DC65E94529F07AD86CDBE5DC5CC58BC6B41AA73758F8C1E7760C45 + 4572D190A7A02043059E56C558733397962329B73040818A4141685C5D55756B + 4F22518A869E1EBCF8C823575942DC0949292B29A5F0F7F54C15F746D86CDBE9 + DC5CA58F9AD26A7BBDC1A20F3E6FC290208E9EFEAD863C05A5B81D4933979621 + 29B72820CA72C590289E5D53558533DDDD777675AE60103D7E3F9ECCCD3D0720 + 94909CBA5CA9D1126FCFD7A0549E08F766D86CDBE1DC5CA58F1AD36AFA7CC1B9 + B7E346917C3E07209C3F8CA4998F9621C95A149024A94210C5860DD5D5F8ACB3 + 13C0387D718BCB057F388CD2CCCC330468D7184CE5332C393143BEEB63767914 + D81E36DB7E378C339FE8F385E6BEFF9F260C46C63FAA2E18F239021A792A7736 + 97642D0ACAB2BC222A490D1BAAAB71B4AD6D74DC984000687438D0EC72614576 + 76AB82653F56A8E27266661758129353214922C27EDFC81DF592386DE5D55F1C + 504567657ED6E70BCD7DFFB3260C0A939FA3592BD7729959991E3EE85A458570 + FDFA8F3EC22737E18029FC799496988877D7ACC113160B40481901B610421E97 + 449104AE3911725F3BE353EA969EFEE1076BA3323DF8CE912F301099BC6CFB7E + 71368A2DB3FC7142A83CFBBF271B77EFDA8AC397EE6C37C6BD8323F185C3D86F + B7E34BA71346B5BACBACD7EFA19456310CD3A58AD785B4C65912674CD97F3175 + E100CB321B951CA76CEB9DB89F7EAA381B0B2CB3FC002A068468E32FDFFA11EA + 5BBF1A73EC5DD756E97A3D5664676399C5822C8301169E87C470F8CBDC8D88D5 + 242E22843DD6D0E98C3F74AE7D225C80422E8F0E0D9EFDFBCFBF87AF5B4E8F7B + BD0756FC99F317E1E51D9F4019A75BCC10E6D3FA4E67FCE1DB904FCDCFC6828C + 5901598A5688B2D0F08F9F3D892E7BDD84EB4EFA88A71A5FBF035DE74FA1E8F1 + A71D9C22A62E85D73DA356C6282FF70D3FEECAF9595898911CA0B2B842168486 + 3DBF5E87B6B33593AEFBC0CB6773C162BCB2E32854B1F14B40984FCF76F56A18 + 42303F3D292853A9429284FA3DDB9E474BDD9129AD372DF57D5AFE62BCB2F328 + 94B1DA2520641F009952F9794912EAFFB9ED79B4D41D9EF25AFF031177A46D29 + 7F26790000000049454E44AE426082} + end> + end + item + Name = 'debug-breakpoints-filled-eraser' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000002D649444154388D95935D4853 + 6118C7FFEF3987B32FD7B6B6966EA1B55CA645193370D985990A56D655F4091A + 14F641A150D445174141295E04411FF4494A338ACAEC2A420B126759384BADB1 + 4ECA34A2A69ECD6D7ACE767ABBB0C2F2C67E970FFCFECFF33E3C2F0180BDB5CD + 585EB049C17F12FCF086E5A6174E785AE96CE5733B8A080030FFDBF55F3800D0 + 3089BF52678B8695A7026CBC8802F6CD85F6671D0DA986B45E86800682FE653D + 42CFAEE864BC0A80FA972303F00370D4D5D5E9BCEA117099663336C5BE6181B7 + BD2D9B89D733117F1E00287ADAF539D371BE2918BCF92E12790240B2A9D5652B + 0C0641361AE729C9E4233D27837457576389C5726E421C3D2A78DB30363C0800 + 30D933E0C85F87844E5F7F59106E4793C9F00187636D9A467345E1B8D36276F6 + D5CE783C42E267CE6C9E10471EBC7DD8004596FE7A23CBAB90BB79A740E79856 + 1186D9C8CB52637F6B0BEB5C5B0AB571EEF1502251CF00A811BCCF67C8009094 + A5405F7F5F11CFAB37F009A9C1D7E261C5A101F81EDFC1A4385A3B8FE36A1810 + 92F77BECE95020309199B7BE77CF85828EF9AE5BBE96262E3E169ADA643C8AC0 + CBA70021A718D099B743814F930B57140F1FBA5C306ACE68D82FA4A8AF598B65 + 10424008D19A2C585A54AE5045A962007499EC19D37D594E5D5CF6E5C80D77D8 + 98DE78ADAD9BFD1689917B595B559EAC6D92D668A62BCB77289C465B114A249A + 1800E717E51782E555BF03FCB1DC62414E5D7CF56E471FFB558C8152504A41DB + 5657F2B1C39724A4182AC34EE78BD73939602B5CAE8F66A3496759E45C234523 + 9062E33A9DD57E5DCC2D0DDBAC734BDE07BF434E2AB0CED1625FD12A256649AF + 8C4C443C03BC3C1E181C0471D9EDB8BF7B37E6EBF55B005403C8FB4169A72FDD + 5DF6CA5158F37D3C7EB6B9CB8FEDEE1C45A7E22AC4D0B0E7E291128486020000 + 020066AD1607DD6E143A1C5071531F34463874941C83C1623B06E02428DD3F36 + 32ECB978B8F88F0C003F015EB22AF69005E3AC0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000041349444154388D9DD05B4CDB + 751407F0EFEFF7EFBFFD97F64F2FFCE94229B88203E7C20431803A322E362803 + 8D0E5008D34433E68B1A5F16170D248EE8839A7849F6C01E8C89D99C669903A7 + 5B322E960D9718409C0B1BB7D66DDCDAAE177AA3B7FFCF073262E378C0939CE4 + E4E4E473720E01808AE75E45C7FB5F7703E8C1FF8F91B9C9917AC5BF3B4BBE20 + FB696276DB52B93507E50539008034703D9EC482CBBF6DB0C064D8ACD34041A9 + 408149BF6DD0A011D2419EA4A02209980D22E9AA7F7CDB200070484143E31BA0 + 968BA34C7BD7BF7AC7F1D9D4E4EC59C960BEA1568B51AF77D93CE7BC5EBDBC38 + F7463219DBBF1566B3D9505DDF805F55810D708F9AC03CFBC79796D5D5879E24 + BE4EC177EF3DEA279A842C3B5D3AEEE7DF92926DD8ED6EB9178FF7114244C698 + 9BA7F48896E32E529ECFCB14C54F955416758A75285E2B2FC7F19212909B378F + 01E88EF83CFCEAE2DF48C5E3C8D01B919B5FF87A8BC532B53B33F3956F9CCE86 + 3BD1E8293DCF3FDF6EB1382AB3B2DE0C13625FD3EB0F22953A0C00C4DBD30381 + E73F4A25134767467E817B7E3AED1C5E9D81E29A4618F30B5D7F060255E79796 + 5CF5D9D9B4D2681C402A59C3F1CA704AA56A0AE5E6DA2FFBFD2091DEDE4A0057 + AE5FF89EF8EE3A1EF82342284A0EB4B9B52673BDCC714E05A5FDF1357FEDD4C0 + 2958F65620B7E48930030E8462B1510AE01D8F63664B0C0018935D3313D79E89 + CACCA1A4B43F1EDCC062A120E6C706B1F8D7B88610724154A9F65100FB3D8E99 + AD31C095D0996C8E178E3A6E14D59D5B0F066AA7FA4F23160A6ECECC5FBD8C95 + E9290D80B3148448F148682BCF9DD21A6D2B878E3BFC4FB50C0C4BE5B663B792 + B158682D6D48A915A137E7038C8D2BC0984799A1DDF1202CA931D85C9DBD0BA1 + AA8303DE68A2E6E4F024029646211A0E473B6E7DA70600A546CB4A9B3B20883A + BBCC580B056097AC45FFD16485F288BBBD7B7E6D5F5BBF2F9AA83D3934814024 + 4600E087E256F5E9E297A3CA0C2D7BACB91D82CE60970969BA1D8D462863EC0B + C95AC40C969D69604A345E0A56BDD8159351D73738017F3806C6C0EEE7C5D243 + 42F0EDBE844A2F8D2655AA266F6929FD7DD72ED0A42C5F03F0C9A30D2F21BB70 + F726C883E529C33EBB52C1859F2ECE4B5B96A956E1705D191C7B6C63E3968AC6 + 9039371CB25A758C52709410545BAD8394E312D905C5D5D9858F706A7D16A49C + BC9D9246F86A35FBE1AB6693D42AF00A7E76C58B4CB50A5DF565C8D20A7606D6 + 3CE50D443EFEFC039C3BFFE3DAD0D010B851A713B16412D556EB158ED26F7975 + 8637D3640E89D20E8D31110AF834D225AFD634962FE95A4541C9DBF616204B2B + 8CCA8C35AD3AA7C327DE7D168E85592C2D2DC1E3F180DC3FA3C068446759192A + F2F2A0A0142004600C33448348DB875065883500CE009800935B966F4F874FBC + 6543C8E74A7BC73FC904AF6E29759F900000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000056A494441544889A554796C14 + 7514FEDECCECEE6CB7DBDDD91E6CB76DDA72148196232087F1408E2A10289542 + C118A2F88751131331C63B28C528FF480C898909F14223881CE12872485B0901 + 2B46A040046D69A5D0DDEDC276B77BCCEECCCEF38FED362D8878BC64922F792F + EFFBE6FBBDF708002CD66CBC7FB80F44940200666622A2BFC3FFA06EFDF913FB + D74BB8253A7C416EF70701100FB4B903FEEB1C01985B593658318C8099B9DD1F + C4D1B62B8CFF184484B99565C4CCB713A47F31ADE8FF5894211A4690498D2A70 + 82AACA09C8D4F21DF05D7300384D400428520C37B52C2E2F70A2BCC0F96F9DB9 + 2D6441835D4C0C1080E1368731C5D6E53FF5F3C5AD9D57FBF629B9C517B2EDB9 + E1582468F7F5B44FB876F5E28270A0FB4966C37D378B366EDC8868CA821BA668 + 9A4024A044EB015DF38DB94F0DA9B311986ABF115865BA498ACE1CECE3E4E94B + 0E79DD49CDF1DEE570E8ADA461BC08401C68A802D824101D02609765790D805A + 9B9884435221659BCDD8B972254A5A9A40BAFEA8C0DC00E28A411F09C8B19850 + 62715D9E62B7BD75CCEF7FF588CFF75348D7BF0490340B42CD14A7B3F95E4581 + C68C4459D9C1A4AABE6396651018D247B5B578A0AC8C904C7E40442FF4F77AB9 + FB5C2B82DD5DD0D4184C721694E252144F9C5E91973762FB128F6773B624ADDD + 7DFDFA336A2AD539273FFF87A51E4FB562B16C05D0990496F6F9FDEBE2454565 + 0040D1860610D16B001ABACFB6E2CA8F2D308CD46DDE1209289FF1108A274D47 + 54D7DF68EAEDDD0800F7B95C8FB82C969DD19B01AB6CCF8168B6FC9A3299E626 + 14C5BBD7EB850460348037FDBF5D44C7A926CE2CC82018C0CC29749C6A8239CB + 16534A46B62E74BBC1C07C91686724E0B39EDBBF0D594A1EAA162EBF47643E6A + F5F9E62D63F60A44F4AC91D22DED278FA5277640390DC42D38DA79A67549381C + 6A2241982F12EDC934D7D43887BDDD686BFC06292D398E80A32622B700A0BAAF + BB0BC958E46EE7A1DF305B6BBC5317B75CAA5C3097805D91804F3E77603BF484 + 3A5814F65E435BE30EA4B4E43810ED9188686434D87BB7BD891826B93638FB89 + 961B356BABBD8A7B5720AE49799F7D085D8DA72B869C89583000B53F049B2BBF + 5C182A9B07E2161C3524734DE881FAE6DEDAB5D529C5BDBB3BD86F7DAECB61FA + BCBC36CE44C8F460009245C6C445F5B0B9F255368CD502983B6C4A7E46C4ADBE + AB2C996B43F7D7B70496BF5ECD0EF7AEEBC17EF9D3E633882775FA76CC32EBD7 + 6357C63387CC245B51B56805B2F3DD2A1B461D331F12001C711697C29C953DF4 + 5265146D8A4C9EDF14A87F735ECA51B0B3A72F62FDA4F90C62499D328A7754D4 + 59B78DAD8F9B2C32AA162C87BDC09360421D8BE2C10B91080466FE4810A5C4A8 + 5973069DC900800EF74F5F02DD51F0952F1CCDDA72EC174413DA702B01ECAD7C + DC7AE3F98F35FB088F6A80EA128AEB60EF8C19A6D3A5A51000FC0E6043C198F1 + 1839F3611204718845C816341500773AAC32F2736C489FE4F4C70CB69A4D5833 + 7B327AA62DD15B4B663D16376735862A2A4CF1C2C22A10417CB0BC1CA54EE709 + 10298EC2E299AED25130748D92F118045194DD25A53BFACBA6341AB26D515549 + 415E873F88503C0100B09A4DF4F4C39351ECB22760E8CBFAB2720F75F5FE818B + C1EBC695AEAE9EB6B63650514E0EBE5BB30623737301A265043400A8C8BC83A6 + A73674144D7AFBC4E8F91E4DB21C4D68A9B19F349F813F1CC34073D560A30EE0 + 831DE78E63CBCB4B91884706DF9100C021CBD85C5383DA091320A43D9A0A601A + 00054030299ABFD83769552460777B00FA5ED5F48A605445A1335B65182B9871 + A0E3EC716C79652912B1FE6183326C722ADD6ED48C1F8FC9858543F706CC8C93 + E611F0AC7E17A2241501B41B4029989F627063FBF913D8F2D2E261CA33F12722 + 98AAA13F53E0710000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000005A2494441545885ED97594C54 + 5718C7FFE7B20C3373876518D44128EBCC053710C452074447032ED5206D400D + 05AABED6B64AD4625FFAD054499B264D6DDAA829B616A60829822BA91868515A + C5B25410651084611D96916560983BA70F0232206AA9D817FFC9496EF27D39FF + DF3DEB7708C6B4E7E8592C51BDC9E325A9F94EB9CD177B56C2766AE05056119D + 6BF3233BD464FC9B996BB367E915C0C41A1032A300ACE7672E25B4315903780A + 7A112DADC3810307E67C11A6A7A79332876E0093A6403C46F4B224B1355903FC + 5F7A0530ED24A4940EDB12922B1308F23C84C272673BBB5600E4A1D9ECAE331A + 433B87876347297D8B102278E100238383BF6C0E0CFC200858C4B1EC4E91ADED + 5110E23146D662E4F96BDA8181D3851D1D69B77A7B3F3751FAF60B01600881B7 + C1008FF2F2C34952A9C6D8D51EAEBB5E843E5D1386FB0D0000078993AFF3422F + 5F9F45C1897B158AB21B3D3DBB4F3F78F05BD7C8C89784109BA799504ACB0168 + 00080921BB00785B017C131B8BB5164B94A5A33D4F5B7A45D2565B31AD13A3A1 + 0746430FDA6AFE823C3038FC75D5BA32177BFFD8AFEBEB3FEC3299BE7A8A7FA6 + 3FCBBEBB452EB7E7291DBD2D161FE379FEC278904958B60C49A1A19C8537E755 + 9FCF7EA2F954B5D556A0FA7CB6442912E6257B79FD2A60989C1952B338964D39 + C47191E12E2EAD1132595D8AA3A3AB835EBF7102E093E8680038A92DBD2231B4 + 353FD37C5C86B666684BAF48425C5C4E864BA5FB29A5234F304F4EE5B8489620 + BFAA204B72B7F8A297BDC95434BFB4543674F93200C0267DD3A6E8C1EECE8377 + 4B2E3DB7F9B806F4ED98E7A3F498EFE45258AAD7DBF1C0D2B1908663D9E4FD1C + 1729012DA8BE704664686FC180BE03A6C17E47376FC5B6C5CECEF9AC40D0CB00 + D8D15AF3EC619F49AD3515F01289767888447993FE3C2955A98C98309F34B2ED + 77AA70B7E4920780A2F7552A5F06C0AA3E5DD3AC01FA744DB0639855BE62F14D + 4A6926C74A9253394EC5124C339F80A8ADC4BD92CB9E00CE3120C4737CABCD46 + C3FD0680104F7F966D96F985A6AC5B9FB48A05CE555FCC113FC79AA2D34EC2D9 + C8621ECD755F1C65090AD8BAB68AE7F3AF5CFDDD6E7DEB8319F317040641B13A + A619C0160694B638489C666DCED8D86455770FA694F9AF5F63E2F9FC8C924AD1 + 31E728FBAC80ED261042A6B605814150AEDED00240ADA9AC6C60005C735EE835 + 2B730A68FA7D42526EC6EC8F30300E05A74AAA448D5D060200D95CBC208B8BB7 + DA9A0BB865541119D362A6545DA0D536ECC9C901032053BE287836E63F1B95E1 + C9BA7D3F4618C5D273A78A2BC5F7BBFAACCAB96C6582BD46F9086201B7942A56 + C7E8CCB6B66A7D58989ED9B811164AC1740C0C14B2AEF3CAE481FF0AA27CD82F + 24B965DF0F2AA3585A90515C296AE8ECA394C2BA01D07009F6E59B3F3229566F + D0514AD53DCB97EB873D3D2F813C62653E2B2A0280DD7EAA75FD4E72CFE705D0 + 746F7ECF6E5422CBCF28AE143774F6CD9818E6E70ED18ED4F68AD7C2A34A75BA + FA9B0F1F1A6ED7D4BCA1D56A0100B6276EDC40B45259B729202076E9E6F8192F + A3C972F55608FB656EE67E427AA4AC5032134098AF1C71615C0B00F5B7F774F7 + B38E1F87F9BBEFAC726C2880B335350896CB9B146EF3CEBA7AF987C87C941E00 + 016F32811F35811006424717B8F905808BDA08F725219D16217BA651A6381FE8 + E116D73738E2D8D63760D5F10A5F39E256722D0055DF2ACC6CF8E9D35DB050CB + 34C8C76F3442B057A5C2C1356BE0E4E0100D60278055930B1200D700640E994C + 85478A4BA08B78072B6212FD0961AEE6FE71C7BDFC7EFB63F3304E07DEBCF6EF + B273DAEFD312409F606E05302E478100DB162F86DADF1F3E522918E671D9D8D8 + D383D2C646645755A17B68088430D89E76026131890A8014E5FE59E74E081017 + C6E9287875EDF50BF5191F6F877974E692FF3FBF820861B033ED0456C4242A40 + 980200164A2D5B6BCA2ED6671C8E877974EA2D6DAD7F00ACA25A7490656F4300 + 00000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000821494441545885EDD67B5054 + D71D07F0EF39DC655FB00BBB08BBB0C0CA631154406541AD061B138546AB6946 + 6DC6749AB42A492793E9E86893B6A3D5B6994E8CDA693B8D4DD5563B8A5AE3D4 + 57020115D11A1ECAC3474491A72008F25896DDBD7B77EF3DFD034151C41791FE + 91EFCCFDE3CEFDFDCEFDCCB9E7DC7B09EE446788C4DA03B5E9004E60F4B33E67 + C7FA0D393B36801BEAEAA7C7CBD8F316F567DEE4588406FA0F9C0F09AC6DEB7E + 6EA0FBC30BDE41E774941C8F9D6F81CF9A416B904282048A152F4E1A2D0F8C81 + 7E206020E8DBA703408E48885474811286DAEABC5103864E49418022105A8E7F + 10685674424625FCEDCCDE5103BE3C5E0BB33206019C0BC0A035C820A3D228B1 + 06C78730F890BE47FC7FBF49BE053E6B86FCD4DD17C6186B04D002C00B400B20 + 8A10A2FE4665773208C8180321040044C2D8E77E32D9EE3085E2B849A5EA0A90 + C94009815B14D1EE76931B2E57D22D9E5F2848D25B2024ECB90001C0E5749E99 + 6AB1FC2CC2E9BC9EAAD32D3428147FF2A53405849808E0CB18EB92802A87C753 + 50EB70EC2D6C6FFFB0ACBBFB1D87D7BB0E8468BE51A0ACBBFB9CBAB1F1C52C83 + E1A72A41C8953C82A1A3B60A3DAD4DE0ED3D90442F640A65905A173C43171135 + 232928E4D7095AEDA1CB36DBEA834D4D47AF391C9F498C4D78424337802B00C2 + 00440C09F4A1141BD3D3115A5828A392744014DC2FD7979D45F3A532485ECF03 + 23B6D754A1BEB410FE638C889A3A6B417268C4EC50A572F9EEC6C6F492CECE5C + 09B03E068C01F8504EE9EF036532B7531421C9E5AF514AB73F00DC3C6F1E5E1D + 3F3E00A278C2D1D99E7839F720F89E47FF13DADB5B5079241BE1C9697E63D366 + EDF971646496C8D8BCD2AEAED2A166E33EDC6AB34AB5E5DDE868B549A59AEFF2 + 7A4BCB7D7D3F0BD0EB5B186369FD85F4A598182CB35A09806C47677B62E5E13D + 8F85BB37372A8A71ED540ED1F9FA7EB2243C3CC1A454BEC9187BD85F3903B0C6 + AC526D5969B1E8C355AA334CF4EE53715C459A28A619EBEBCF528FE7CFFDC53E + BB5F7F1D067FFF15A24778AFF248360467EF13E1FAD37BFB16644A350D0B0D7F + 8123E457176CB63809481802F70BB34AB579A5C5A20F5128F27B6FB7269E3FF0 + 0F70BE0AB936D8B848D6D15120AFAFBFF1D763C7507FEB166892C12007B0B6B1 + ECEC13CFDCFDA92B2E80D7E51C6B0D0C5C1EA9547E3404EE7DB34AB5E90E2EAF + B7BD35F1C2D17DF0BA79549FCE45CB950A0D47488ECAE349DD9199094B501028 + 0859207A0443F3A5B267C20180E811D07CB90C1A992CCBAAD39D07F0F53DB80F + CC2AD5C72B2D16DD1D5CD285A37BE175F303FDD585B968BD52A921404E889F9F + 3577D9325000F33B1AAE0FB95B9F26EDD7BF0621247EBC461323A7341F77D7DC + C655B1B1BA10B97C485C7FAE15E6A0B5AA520B2037C4CFCF4A014CE9696D1A11 + 1C00B86C5D105C0E16AC50A46839EE02636CCD9D35A70B512AF37A3BDA921F86 + 1B409ECAC1ADAB17B500F67320C4C4DB6D23060400DE6E835A1F62322A957FE1 + F566FEA5C9E981C11D97BEECBDDD9A7CE148F6B0B881F47D72250E80AF248A23 + 0A64A2088ED21BA93317F301B1B3F5F532DFFC636552BCEE9F7F7C2C9C253D03 + 21960936003FA460AC5BA6508EA8CFD9DDB9A64DA1DFD71AFD829E9329F29BBA + 7A13DFAED7CA769917F220840C73C0929E01C3B8241B80B90E4128A500AAD4BA + 3123860321EF57DBF8CDC727BEA677CAFDF39ABBEC89DB0B2AE0F278C9BFE316 + 29B3E396B81ED61B3B732E0CE3927A1890E11084D2EFEFDC090AE0942E227A44 + 700CF8C015397153F59B9B7576B53EAFB9CB9EBCBDA01C2EC14BFA8BF6C72D56 + 665B16DF8F64B133E7C0189FD4E395A40C1E2879E3E0417CD5D0000A20DB2F28 + 84F98D313C2BEE97BC39F1E3E69FEFD47982C7E6B50C81BB8B5CA2D87B17C962 + 67CC81313EB94794A40C47444471FBDCB95C4C7A3A00807A25A90AC0E1A8A9DF + 7D7A1DF007DE9CB8B10F67FEB2A5DB9EBCED643973BABD8C313C7800D81BB744 + B1CFB2888F9D3107C68464BB2449998E8888E2AEC993BF23A9D5EFF58F4DB32B + 2AC0185B1D101AE13025A70DC37868BA985CF5BB9BEF6C55F7E17A276D3B510E + A7DBFBC846F78F7E23BF91F96E074F7D3325428A6C09091C382E15C0F9FE1A6E + 7D7E3EE6C7C7D7062895CBA2D266EDF1F23C69ADAA7C12E01531C8E4164CE3E6 + 7B4469D2F69315700A8FC6FDC01A076B94D17655F07F05BCBD74DBDF7F0B6D6B + AB17C0160028292901001000C8888BC3FEA54BC151FA13009FDCBC5CEE53575C + 00D1233CF2460161910DEAB849D1A7DEDA1AE9E1E415C5D53735FF397775D89E + 57AD71488D0EB501C8105C8E92ADABBE87BA8BFF1DB2D60700AE7774E04A5B1B + 16242494534A0BFD838DE9C671490194E320387BE171F3B877A5538E832E3C0A + D1D367C36C9DA9D568B4879B82C65EB5CB35A74C7AED627F85AFBCEA66C770B8 + 1E0629C3E372946C5DF5CA43710006DD17D32222B07DD1224406062A09B01C40 + 1621649CE07230DEDE03267AC12994506A024128E5011C02B0913156B1B9AE0D + 3E8BD742AED24EA3847E5174BDD9FFD0B96B83712971488D09ED91444F865712 + 8A3F5D391F351585C3CEF603AF0039C76199D58AB7A74E45944E0700B1849029 + 20C404400EA0138C5D658C157925C979B2A6069B4E9FC6E9BA3A98274EC38A8F + 8E40A1D64C27847EFE5575B3FFE1F37DC8852916A4C584F530C99B29BADD45BB + 36BC818B678E0C8B1B12786F26868460B2C98430AD76A09001707B3CA8E9E8C0 + D98606B4391C837ACC13A721EBE3A35028FDA783D02F4A6A6EFA5142901265B4 + 4B4CCC1045A1E85FEB96E262E1E147E21E097CDA8C9D300D599B8E42AED44C07 + 21BB01488C494B455128DAB56E292E161E7AECB1FE07655387F5EA9007420000 + 000049454E44AE426082} + end> + end + item + Name = 'button-arrow-left' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C086488000002B749444154388D7593DF4F53 + 6718C73FEF79FB0B5AB1C7822B1918B44282D660802D217AE295D905899B0B92 + 46BDDB9DDB9566CBDCFE8625BBD0BB6D644B2435590CEAAEF4C2044C6A108D5D + E60D5246147FB0B56BEDE1D0F6C07BDE5DB4342AF2DC3EDFEFF7F93EDFF77905 + 8D0A5BA7888E7D2B6564670AC419605808616AAD8BC01CE82B5EAD927E3DF5A3 + B26F4F80F6001000D1F18BB47DF2451F887424FF6420969B215CC8216B0E2A18 + C6892528242C56DB7BB3A0534EE6FA7CE1E7AF417BC8B0358E39F64D9FD07AA6 + EBD1D57D9D7F5E2364AF6028170118CA2564AF107D3A4BA0FA3A6EC70FA6FCDD + FD37B45285DAFC2C72F785DFA41108DDEA7A7475DFAEA54CDD1250EA1AC43324 + FE6AB969B5A5B48CBF5A6E2D7726ADC0FEC19F9CBBBF6B4346A2A9487E61C05C + CA6CC641B17B8897873EC350EBBC5BE65286487E61C0F00753AD473EC7004EC7 + 72D36F4C1EE255F253F6DEBD4CC85ED9222080586E1AE074A8EF630C60385CC8 + 356DBF3CB43DB9F96275FCB0DC61E2430853BA0E6E4B94E5A1B368E9134F8E7F + FF5EA2501B24AF9FD7D275400813C087D6251508C70295121F3E9CE455F284DE + 3B7389D0EA3FDB3A508130685D023080392796A807F46C8EF8E39BFC6D7D452D + B27B5B81067ECEAB381868260B090BDD689A4FEF137F7C93C5A35F528B746C21 + 6BA090B00026ABF3F7313C772DBDDADE9B2DF68C34419B22CA17DA2250EC1961 + B5BD37AB3D9576EE4D21F5BAEBB524AD3B76FC40CA5F2DB7864ACBF5A329BF68 + 1ED1E6E462CF08CF0F8FE71162D4BEF5CBBF95D93F90EE62165FC79E82BFBBFF + 46B93369AD75EC8F1B1B357CAE8350EBA86004FB837E5E1C3E453E712C8B10A3 + 95BFA6E7FFFBF53BF054E37E8441DBE839DA46CF4923104C01EFF98D5CD19E4A + DBB72754E9DA0FB0E1D6A96FEE277775121E3949B0EF23E40EB3D1D6786B36B5 + 8507389929365696DECAE47F09E52171DCADA2C70000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000039249444154388D8D945D4C5B + 6518C77FCF7BFA71FA6129836EE3AB43960E361524710321C64C345167B22CEA + BC71937803668989E3C25D1ABC7309377A31C32E1613E357F0232E232646834C + 01A3216CF50223DA1A665D37565A28DDA13D7DBD286320DDF47FFDBEBFF3BCBF + E7E42FDC8A32083CD547E0991388D3DD2222BD400F424410AFD63A0544810B5A + EB73C595CC427AE434CB631FB03102206E2FA15787315B3A2A40861079C97B23 + 26814414339340152C0A2E1FB9CA30E9BA0759F56ECB0283A087B23F9E2F2E0C + 0F40D15E032A83ED03EF61B674EE02BE32979391DAE98FF05FFF8D72D122A4C2 + 1D245A8F603BCC2F8117B2139F5B0B6707003002875EC1FFC8D10A60CC7FEDD7 + C8BDE3EF6066AF9585DD7A92273D4FC55F332CD5B636DB4E33E26A6819C927E3 + E4E767518143270086CCE5AB915D1367316C6BFDB26DB8F8F3402F96AF7A0BD8 + BD7C8DC61FCEA08AF9A3C0B1E0F3A7401928E574378B70BC76FAE32DB058773F + B98A7A949D2F3BAD9949109AFD1A60D0A80839CCB68328447A3D37E26AA333DB + 7011EBEAA76006681A7F1BE7CDF41D1554CF8DA18A85B0883CEED9D78D027A02 + 89E85698A782A6EFEE0E0330F2397CD7E7007A9C3B77E300F69899040045C345 + BCAB8F5C6598BAE90FB1FC212C7FA82C48B4C6B73057F29949B0B4A3398261E0 + 40C4AB0A2577A9F001B2A18800CCEF3F7ED7C9C4CE73FF17031A4095DC7B011C + 689D2AB84A6BDCF6C7456DDDB39D54E3C3347E7F667D82FF8AEDF2012C022820 + 9AAB6C287D15A4E6D2A7BA323641ACBB9F6CD5EEFF05CC05C3A0B9AC6D1B055C + 48D7B5A345FE059D24D6DD47B6AAE9AE30CB574DAE322CC068FECA2C4A6B7D6E + D5BB2D9B0A77DCF6035273694457C6A74AFF62B0FE8EC0E4DE27D130A9B5FE29 + 37F32DAAB89259000613AD47366D54406A6646F48EE879DC4BC9B2B0C5BA7616 + 1BF6DBC0C97C328E353B85A1573278DA0E4E6AE56C5FAA6D6DF627677158CBEB + 506F2A8E68BB2C6CFEA117D1A25ED7E84F6E0CBF46E16A0C63351EC5B1B349BB + EA9B3FB39D6624D5D8719F1685277D05552C947596687B96E4BEA76D2DEA145A + 0F6546DF25BBD68BA54D2883AA97DFC2DB7918113906BCA98A8506DFF539DC99 + 04CAB6B0D7FA30170C8B8649E0A4D64C6646CF901E39BD51D5ED783B0F137CEE + 144630E410912780C7803D88782935F6654A8DFD733E1967F1FD37B8F9CBF8A6 + 176C0202E070E179E051DC7BBB70D5EC06C3583BA6D1AB16F9BF7F2737F30DD6 + ECD47A4B6FCC3F6594745664DC42F60000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004E24944415448898D964B6C54 + 6514C77FE7BBD3E96D67CAB4C5BE5B3A96A6C84334B4081A25054D90454D44DC + 90AAD12A46E342231A74E1CA9D71E9ABC4A009262A2A9AEA0213151FB5918A05 + E451532A582AE531D3E9639C99CECCBDC74567DA990A8DFFD5B9F77EF99FEFFC + EE39DFBD428EC4F611B8FF79FCED3B11CB532422F7011D409B88D42B78412328 + 83C061453F4439E34C8598F8F0556247BE02943CCF6CE0A96DA6E299B729A80C + 5A887401AF08D47A12935A1C3E8737368EB8291CAF9F44A08E786983B8C67280 + 1ED01754198EFDF205E17D2F413A999FC053DB4CD5EEFD58818A32E00360AB3F + 3444E5E0D7F842438AEBB250697B8944827770B5650B8EC78E028F2B7A2071FC + 5BAEBEF1343869002CB1FD54BDF8019EA57565C0B7C64DDD5977EC0035273EA3 + 301606552423602EB69C24C5A1B35A36D22F89B265DEA4AF7CBB20170BAA6F1C + 10DB4FE2E40FB3094A1FDC43F1CDED16F08971537736F6EDD5C0E880660DB3A6 + 2A46B3C9722BB19C19098C1E2511689099928A6D203F7A9B6EF92B71AA172732 + 862969DF09D0056CAD3DFEA9FA2F0F2A8066043055BD9AB39B774BBA28209AA3 + EC3A7152DAD0FF9EDA53973DC0BB60ECC0FDCF0160B03C45C02BFED01065E7FB + 588862BA668D8C6CE842DC34C649A9E428779D4925A83DF631024D22BACB5EB1 + 11AB328811910E81DACAC1AFC9AB3DB3F3910D8F614F8E12EC7D0B938CFDE765 + E7CA173A4B717858419EC01829BA750B06E8F02426D5171ACA2B7DAA6A55C6FC + 2237F6BEA5563296872E17513646554B2F1C055825B0DC5BD78201DA8AC3E7C0 + 75E7B154AF92918D5DD8931709F6BEA9562AFE1F240BAFB3B12F349C2DA8CD94 + 94E341A4DE1B1B9FC752B592918D5DA8B1281E3F4FB8B93D97DC428AB3C6AE43 + C5E02100E6BC847A000FE0157776281474BCE92E714D0100A1E59B16659E9571 + 52540C1E9AEDA8592F01BC99043AE1787D3764EECAB223FB387FFB2EFEB9A199 + FAA3FB291DF9756E2654356F3E72AF358328E5F5651F4F001894C144A0366F37 + C1BEBDEA0B0D33DADAC94443DB422C8B6ACE6BF640C40087E3A5CB246D2F999F + DCF40C8D7DDDF842C38CB6753251BFEE7F2798AE5E0D1043B5DF191FC3A8EA47 + AEB19C48F0F6BC9633E9196DECEB565F68980B6D0FCD2559AC4D1D8FCD44C37A + 801E85E9993F7EC100A7819EAB2D77932E2ACD6B39CB494A635FB7FAC27F32DA + DAC94C49952CD6A6576EDA4ABAD0E7AAEA6B6E2A41FCF71F30CE5408E005C763 + 472FAC7F18D778F24A36195CF547F75318BD92FF35C94553B34642CD9B05D56E + 6020F6F3413411C5722297286ABD372222C3495FF9F644A05E965C3A8564CE73 + 0071D3D85363D7E75EB346466E7B1435563F68A71B8DA4426F3C85A61258A9BF + 8728A80A5250B7E2B4206333FECA6DD3B56B2D7BFA9278E3916B4E6B566E4191 + 5C5ED321636B1F1035563FAA1DAA3A19DEFB2CA90B6700B000E227BEA3B06125 + 05554DBF21FC942EF46F9A68DC501EAD6C41AD02314E0AE32411205DE897D8D2 + 26C2CB37F177EB4EA2952B5CE01D543B557572FCFD97891DF972BEFAB9C8F250 + BA630F25F73C0222B6C093883C01ACBC26172186D2A3AAAF01036E34C2F8BE3D + C48F7FB360D9027997AF23B0E345ECE67588B144A159A06DF66C112FAA116050 + E10868549371A2BD9F3375F075DC7F26AEB18FEBC85319C4BE650BDEFA164C49 + 399259AA99DF92F49511668607489CFC1E8D47AF67C3BFA92D5BA58188768D00 + 00000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000005D6494441545885CD97DB535B + D71587BF7D74241D4057040A0804243141C517CC9818123CD38C6F4F49A6A6EE + 6D2671EDB82F3CF4ADED4C67DCB463BBD3A9FF00F72175282E79C978EA76EC3E + B4A969987A9C60E310E2D8AE2F498C40928D012184856EE7EC3E4838868010F8 + A5BF271DEDBDD6F79BADB575D6121429C5E9450BB463A9DF845AE147A82A2000 + 89340CB20FC7C88CDF2279F312FA74B8D8B488D536682D3B71EC3E8435D05E23 + 14D33EE0DBC02684F00928959040CA30F03930009C4DDD190AC5FBFB485CF93B + 48637D06545F23E5078EA335B6B502BF02F19A361B56EC13FF458B853027A228 + 7A1AC3642153EA26E9AC21EE0D9074561B48CE01C7D2633787A74F1F21FDE5A7 + 6B3350F67217EE378F698A453B2190DDAEB1AB4AC59D7E4A62A1D50E8C79670D + 938D3B99F16F3324E20FD2D07F3173E64432FE8F3F1667C0BEF730EEEFFFD287 + 10E7AD73132DFEA13E4AA3A3AB82972AE1AE67ACED0D5236EF0852BE3AFBCF53 + E199F77FF78D7DA6271F4A3BBBF0BC71D48710FF713CB81178F6E249AC89A935 + C301CCC918EED1CBA45C3555299BB7CBBAA1F58C914DC7D377869637A0FA1AA9 + FCE93B9A50D50B8E073702F51FBD836264D7055F9022759CE3C324DD75AE94CD + BB4B0B74F4266F0F66F5A9AF7F4A65E143F981E32816EB09EBDC448B7FB007B1 + 4AF566CD25459910D2C03FD883756EA24528A6139E03BF0593BAD880D6B213AD + B1AD5520BBFD437D98F474C1A433B5ADDCDEFB36594B6951264C7A1AFF501F02 + D96DAE7AAEB56CC7FEC506ECBB0F011C718D5D55562BB8999AAD8CB7BD49F5B5 + B3A8E9445106004AA3A3B8C6AE2AC0913C2F67407178D002ED3E04AF57DCE92F + 9824E6DBC278DB017CC3EFE30E5E2E1ABEA07CFED7CDBE0D3E736D53CE80F6AD + 97118A699F168B2885EE79AC7A33632F1EA47AE40CE5A31FAF190E50120BA1CD + 461401FBB4E61D390396FA4D00AFD8266EAD18385BB591B1ED07A9FEEC2F78EE + 5D5A177C41F61CE7154BC3A69C01B5C20FB0B12436BE3CFC996682ED6F5175ED + AF78BEBAF85470002D360E426C542BEB005085AA82C0674E44BFB139EE0D10EC + 388CE7EE00CEF00819CDB166A09A9A5B74A5731CE913F9ABA8E6FE8D45A9A267 + 1605EAAA4670FB41A4C92C269B7633D9B47BCD70800D177E2F9FACAD1C473CBE + BF2A4840CE1B26B3EDC940533649DD955E463B7E222BEE7E88E78B8175195053 + 738B9E0D931990F3C8FCBA340C90843225EEA6A5C1F60737A91B7C9760FB5B98 + E7A378BE7CFA1AC894B8411292520740C93E1C03B89E74D52C1BE0B87F9DBACB + 3D44367731F56CE7531BC873AEE7B92899F15B0003716F60C52047E473FC97FF + 4464CB77996E78E9A90CE43903792E4AF2E62580B34967B531EFF4AD18E88C7C + 86FF4A2FE1ADDF63BABE7D5DF079872FD731C1D93C17459F0E93FAE2931092F3 + 938DBB0A26708647A8BDF267C2AD3F205AF7E29A0D4CBEB00B24E7B393A1D042 + 9BA600C42F9C06383AE3DF6624DCF50593B842C3D40EF511D9D245D65CDCDB10 + 721DD28C7F9B011C8DF7F73EFEDE049009DFA5A475EF7D93B3B2F251C5F3DBDD + A38328F92A5D4EDA6C04F7571FA1668A7B1BEA260BF73ABBC95A6C27B3D3919E + E9533F073DFBB50190A4833728DBB1FFDFBAD5FE6ACA555BE51C1F462C5CD665 + A4189915D79E94140AC18EC324CA1B46A4E48753A77E96CD866E3F5E7FDC92E9 + D1FBC84C32AB35779E4BDBBC5D49779DCB1EBE56F02456936EB210EC38CCEC33 + CDF724724FFC8377A373177A17ED59D494A6EF7E82A295C52DCFB79E49DBBCBB + E2355BAB4AA241CCC9D89AE109773DA39DDD3C2A6F189152EE497CFCB770B4EF + D7B0E4544D4B0393D72F22F54C5C6B6A3FAD5BEDAE6843C7B6B4AD52581E4D61 + 4EC55705CF3B6BB8BFF93B445ABA8CACC576524A7E34FB414F34DAF7F6B253D2 + 8A9391E585763C3F3E8EB9EAB9DC6424C46B5AAC88C9C8E133409E038E65A723 + C3D3EFFD86E4A7FF5AD170E1D9D0A452D6B91FFB9E43587C1B6A10EC43AE3E1B + 661E064373FD7DCC7DF81E329D2C885875385D90B9AE192DF0129686A5D33148 + 435F341D179A05FFEFF43F02A463493FD635AE0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000083F494441545885DD987B6CD5 + E519C73FCFEFFCCEA5E7D6FB85B6505AC0016DD16AC5AA489C1BF1124194C519 + 27CAD06936B798998C25DB12FF7233EE0FE7B2641A99894E714AD4B190808638 + 9D523152E926A3504BA12DD5D3734A4FDB73EBB9FD9EFD715AA5B4945EF86BDF + BFDEFC7EEFE593E77D9EF779DF47988F0C1B8EA58D386A1A31CB6B30DC7E0004 + D0F12E56648874B08754773BE9BE8E792D3331E7ACE5AABF01CFF55BC8BBFC26 + 0C97A718580FAC0196231480B840632821A01368035AADF8E858FCF03EA21FBE + 41AABBFDD203BA1A6EA060CB0EEC4B563905B9177800917502066A618F0FA999 + 8A23D93496E920E3F49371F905111412A8EE055E54D57792273E61F8CDDFCF1A + 744640C35B48D103BF25AF698321228F00BF16914AE76840F3CFB4E10D9E206F + F80C86959932366BBA8817D712295FCD70F595645D3E51D523C02F55F540F4FD + 5D0CEF7E0A4DC6E70768AFA9A7F4A7CF63162D5A01BC2A22CD9E50A79675ECC7 + 33D83527DF5031185EDC4C70E5CDA4BCA5A8EA2E55FD49BABF3312FAD3236443 + 7D7303742E6FA6F4E72F6238DD9B10F9AB998A7A2BDB7793DFDF3E37A73D4F96 + 612374D97709AEBC0515A30BD58DD9D150E7C0D33F2013E89E1DA0BDA69EF21D + AF61B83CF78BC8CEBCA1D3B69A437FC13E36B200B4C98A15D5D2DBF22069976F + 10E5E6EC48B03DF0E416B267BF9CD2D73689D65348D98E5D98BEC24D22F28A77 + E0B8ADB6F539CCF4CC7E32573912C3F8BFFC0F91456BDC597BDE66C3E97EDBB9 + B2251C3BF82658D90B03163FFC0CCEDA2B2E13917DEEF069576DEB7318D9F425 + 859B90998EE31BF82F238BAFF25AA6E3465B7EC94B86CB9D193BFAE1A47EC644 + C3D9B01E77D306438457CC54D45B73E8C559C3656D0EB276D79C219DD1108B3F + 7D1981CB0579D277D3FD98952BA6072CDCF20B44E4611169AE6CDF3D6B9FB36C + 767AAE7B8453D7FD1845F4E22326CB173C4E51F7478AC8CFC4663616DCF5F854 + 4067FD7AEC4B563981DF78429D9ADF3FBB43D432EC7AFADA878915D75172F27D + 049D5790571CDB8B998AD98027F29A366056D44D06F45C7B0782DC2B2295651D + FB677594588649CFB53F9258E90AAA0FBF42C19923F36103C0964E507CF25F88 + B0199565EE963BCE01346CB89B36006C758E06D433D8353BB8968788965D46F5 + E157293CD3366FB809159D3A08AA22C27D9EE65BBF01742C6DC470798A44589F + 7FA6EDA2D6B30C1BBD2D0F122D5F4955DB6B14F67DBA603800FBD8289E5017C0 + 6673D1320C7FC938604D03C07A10C31B3C31339CD8B4F79AED44CA5753F5D9DF + 28EAFDE492C04DC81B3C81088D02458EA58D3940B37C29C01AD4226FF8CC0507 + AB18DA77CD0F2552D12095475EA7A8E7D025850370877B003180467B8E0B63FC + B2B9DC1E1FD2E96E251370BD6BB7C9E8A246A96CDFADC5A75B2F391C80231ACA + 3544961979B94BB099FB4081999A3E9DA918DA7BF5FD325A7585B8435D6A6453 + 8497AC5D308C6FE01866323AE99B2D159B58B5702218CC7164975C206B44CA56 + CA68559300C44B974BBC74F982E100EA3E7846CF0734AC0906F93A2DE50055E3 + 96CD31ED44FE8163547CFEB6061AEF14CFE0175AF5D96B88CE39614C9139363A + E59B657332CE13637C8D710B12CAB8FC179CACB4EB7D1043030D774870D5AD5A + 7DF8559D6FD6984919976FA239386102D38A0C0174665C7EC99A2EB565C6A687 + FCE23D540C1DA8DF28A852DDB60B61E1963C57495FF944B3D38A867380E9600F + 401B22C48B6BF10D5CF88958D67900C4D081FADB45D4CA6DF725048C15D5A2AA + 4985CF33392ECCF1D7D5C7402252BECA35132040D98977513134B8FA36412DAD + 3AF2BACA1C9FAF1752B47C3508875012C993B9DC6EA4FB3AB0E2A30955DD3B52 + 7D252AC645A681F2E3FB29EDD8AFE1DAEBE5CB2BEE1665E17B3DE65FC45841A5 + A0EC4EF775A08908307EA336CB6A70D43444D5EEBACF110B913732F56D70BE3C + A14E55C3E4EC8A6F4BC6E1C137706C41960CD46F22915F1D57D587A2EFBD9C48 + 76E672BC01103DF8260AFB153D125C793396619B7132001191F2637BB5A4F380 + 0E2D5B2F5FADB96BDE964C7ACB082F690678012B3B146BDDF3F53F1B4076E82B + 5C2BAFC12CAEEEB69CDEAD6265F10E9EBC3824883778422DD389653AF1078ECA + 5C4DA840EFDA6DA43CA561D07B621FFF3D1E6F7D6B322040FAAB6E3C37DCDD0D + AC88972C6BF4063B7124866709795CFD81A3CC678B0757DC44B86E9D008F59A9 + D447837F7EF46BFF8373DE24A9EE76221FEC42E15115A3ABB7E541929E92592D + 2220F3811B5DD448A07E23AAFA862A3B47FEF12CD9B3FD93FA4C0AD991379E22 + DDDF39AAAA1BD34EDFE0A9758F92F496CE75DD59C3F5AEDD868A714855B78F75 + 1C24F2CECE29FD264743364DE2E88778D6DE76D670790E64ED799B47165FE575 + 8DF4E38C0D5E123025B7ADFD4DF7A086ED10707B3AD01D19FCC3763495B80820 + A0F11112FFFE2779CDB704C4E57E5B6D8E1B47963457649C3E3C43A7A6AD64CD + 56496F19BD6BB711AE5B278AEC56D5EFA503DD91E0D3F7624587A61D33ED7962 + 45C3C40FEFC3F9AD96B0CD5FFA1222EE44E192ABC3B5D71996CD81331AC49649 + CE1A2CE1AF64A07E23FD4DDF27E52909038FA9F2ABB18ED6F4E0B3DB19BF0F4C + AB991DDB7450B06507BEEF6C456C6623F084886C462DF184BEC01BECC41DEEC1 + 110D614BC530AC3496CD49C6E527E92B23565C47B47C1563F955A2AA31E005E0 + 77566A2C34B2E78F44DEDD39A5163337C071D92B57907FE7E3E4356D4084E588 + 6C45D924228D9C1768E74A2109FA31CA6EE075CD66866287F630B2676AB42E08 + 704266451D9EEBB7E0BE720366C532048A8106BEA951E781465106C9D5A83F57 + 48A4FB8E113FBC8FD8C1B7C88603735972FEB9D3F097E058DA885996ABF2E752 + 48AECEAF9AF3E34CB087E4C923930EDEFF3BFD0F99616A25F96B0BA300000000 + 49454E44AE426082} + end> + end + item + Name = 'button-arrow-right' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000029D49444154388D75934D4F13 + 5114869F3BD3D24A47ECD0A22582412B4DD0128CA009D1C6A50B4C5003A45177 + EED095899FFF41E3C6A512179AEAC220BAD285099AD42026D4E0062936881FC4 + 8E2D0C433F60E6BAA036A2F02EEF3DCF79DF736EAEA0225FAC1F7FDF3555D5B6 + C5419C05BA8410BA9432078C837CE0940A8985E1DBB6F97208A4038000F00F5C + A7EEF8F908888496FDD41148BFC667A4514B16B6C78715086384632C055B5320 + E356F2E99471F7324807D5171B40EFBB121152BE6E9A78B4A7F1C313BCE63C8A + 5D46008A5DC66BCEE39F1DA3A6B8103243FBE3EEE6B61169DB46696A0CC5DF77 + 5505123B271E07EB33C9B548152DFB9BC8371DAC46ADCF24D939F1380824EA4E + 0CAAAA7F078AAAF9E35A76BA43CF24F9578ABDC2F7F693E49A3BAB677A268996 + 9DEE50DC9E78ED91D328C099407A749DF31F79CD7976BFB9C38F682FF9A6CE6A + 92407A14E08C37721805E8F219E90DF0F54DBEB7F756C7A9D477A95B755C08A1 + AB650B80C9DE5B42AAAE4D9BCD759E93B5C60CEEE20208A103B890326FD7F802 + AED212D1A797E4466051DBCEE7D845429323D414F2AC7A3490320FA000E35620 + BCA96BE90FFCF119FA9771002AF5E34EC14241F2D008C7D8C8BAA4353073F4C2 + 1A3CFB0E000918E118C0C3E2D43B14A7BC9C580AB6A6722DDDFF35B05DDE7530 + 40AEA59BA5606B4A3A76C27A3B8C2A57CACE9668EC9519DA177717176BBDF9B9 + EA93BA8B8B6C59FC5675CEB574F3F5C04016217ACC17F77E16C69EA3966752B8 + 1A7619EEE6B691C5C6686CB9616F48592DE12A5B087B05DBA361EE68E3DB817E + B2E1632984E8294C8E4EFDBA7F031CBB622614EA7A06A9EB1954951A4F1CD8E0 + 37F2403A76C27C3964E79FDC84D5F21AFAF7CC6A7D23BEEE5378228750B7EA95 + 6B89B36C529A7E8F951C66753EB36E4FBF01CB6C1932BD448AD2000000004945 + 4E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C0864880000039D49444154388D85945D4C9B + 5518C77FE7BCA57DFB2194499581ED18A383CD029268209B53104DA633E0A2CE + 1BA78B37C62C21715CC8A5C13B9770E5C526BB6024C6A8C18F68464CFC0859B2 + B1318364F502377418E085D2525A3EEA4BFBF6785120347CF8BF3C1FBFF3FC9F + E7E42FD890D4287CF15D0A5F3E8F2870D40821CE01AD088202E1524AC5813070 + 4D29D5975D4DC6120317591EFA9CAD1200C2E1C2D7D18B5ED35804A20721DE76 + 2D3C108546183D6920332619BB9B54718044F913ACB9F6AD00DDA07A566EFF90 + 8DF57642D65A074A8D473AFBD16B9A0E003FEACB9160D9E81778A2F7D9494A08 + E281468CBAD35836FD7BE08D959BDF9AB12B9D006885A7DEC373E24C1130E499 + FF3378F0FA27E82BF33BC2362C39135314CD8CB15456576D15E841BBBF66201D + 99243D358E2C3C751EA0475F9E0B1EB87905CD32B74112FB6B31426D28501B6B + 8EE5792A6E5C4266D36780B3DED7BB406A4859E0A81682B7CA46BFDC1106A0A5 + 53C42A4F60D4BE22B642F5A4816FFC27806EADC867D3EB5B900871CEB9302977 + EB1980277A9F8A1B975938789CD9503EB464620899CD048410CF3B8F1E4702AD + 85467857583EF45362954F331B6ADF846AE914EEE804406B41E9216CC0613D69 + 0060D91CA4BCFE3DB00ADFBD9F89D49C1400A5E1EF9400E1481A2C3D5A1D44D3 + B021844B6672BD331F2AE5EF673AC4FF960B44AB9AF1FE33229CC91964AEF72E + 001B4AC533767709802B3E49EDD71D6A2FD07C550BB3A13602235771266772CE + EC6E804500098453C57BD9DC0A6B6636D4867FE42A45D3BF6FAEA7BC0150DC55 + 968504AE25CA1B50626FA7D1AA666643EDF847FAF16E8199EE1252C501010CA6 + A7C7914AA9BE35D7BE9578A0715758ACE21846A81DFF9D7EBCD3A3797B912327 + 5130AC94BA931AFB15995D4DC6806EA3EE34A6C7B723D013BD47E0761FDEA97C + D86279038BFEA72CE0423A3289397E0B4DAD2671D6B70C2B59D0B0545657ED89 + 8C633397F32EDAD656D197E6B6C1A69E7C1325E4070AF5D542EFFB64E61EA0AD + 4D86B195562AFB63D5DF58057A305ED1F8B8121267621A99CD6CABD6749760D4 + BF4AE4E84B9612B20BA57A9283975959CFC5DC24A4C6C3EF7C8CABA91D21C459 + E02399CDF8DDD1091C4903699958EB7998F206848261E082520C27072F9118B8 + B8F960DE685D4DED785FEB42F3FA6C42881780E780C308E12297D877C925F66F + E9C8248B9F7DC8BF7F5CCF73B0FDAFD8EC386B9FC571E418F6FD8740D3D68F29 + D49A497AF62F5263BF608EDFDA4CE9ADFA0F2F48731A2E2716D4000000004945 + 4E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004D04944415448898D965B6C14 + 7514C67F6766763AED6EBBDB62B7D0EE96526A014530025A95104413F4A12602 + BE10A23180B7F8A0F112F4C127DF888F245E032662BCA3015F8857BC006DA480 + 20D55AA14528C86EB7B4C3EEB4BB33C707B6575BF17BFA92EFE43BFFF3FDCFFC + 33C204881326FAC0B344566F444CAB5444EE075A81E5229250B04133289DC0B7 + 8ABE8F72CA1F4C31F0FE2B64DBBE0094499EA3C4AA6DA2FAA9D708C51B4C4436 + 032F0BD45ADE652D4B9FC6CEF623411EDF8EE045EBC8C5921218A60FEC057D5E + 95EEECE1CF49EF7C110A23931B58B54DD43CF72E66B4BA12D80DAC8DA4BA8877 + EE279CEA528280A92838159269B8834BCD6BF02DC705B628FA9177EC6B2EED78 + 12FC0200A638116A5ED88D35ABAE12F8DA08F22BEB8E7EC49CE39F52924D832A + 520430C64D7F84B2D41F5AD9DB2E5E65BD3D12AE5A27C8F9D0EC791DE244F04E + 1CB8DA20F6E036CA6E5A6D021F1B417EE5DC836F6AF4AF0E1D351C352D121003 + 41C734D31F96E85F3FE34593325C5E7D1FC8F776E3D21EEFE48FF8993E8CF2D5 + 1B0136036B6B8F7DA2918B9D0AA0454CE4A9A6D572E68EC72430439334F1F39A + 6CDFA5CEE0450B781B0C27FAC0330018985629F07224D545E599834C8D6222B7 + 865DDCEA667A5AB68A5AF624CDC87BD41EFD108146117DD459D082196FC01091 + 5681DA78E7FEF1959A01B1DE764D1C790FB7FA7A7A5AB6A0A63D490FA7FEA02C + DDAD205B310C29BD790D06D06A7997359CEAD2E96299CA633D6DC5260BE869D9 + 2281311E17AA1A3BFB33C00D02F3EDBA660C607959FA3404C1B4B14CC72B7BDB + 491CD98D1BBFDA44CDF1B8C2A9EED181961BE555588824EC6CFFD89857AAE6E1 + D62C9C98D64C1C67F01CEEEC45D2D3B259E71E7A0B090A8C790909000BB02528 + 8C4EA8D9598D7271E1BDD7B88D0950D52BD5CDE46249294BFFA9452F01EC6203 + 1DF0EDF075A32356777DC575BF7F39F61DA8EAB4DCB71C4EAF7C022F9AA0BE6D + 2765E93F5544246F87475B0F0018289D5EB4F6FF9FB8687EE6CEC7F1A209926D + BBA8E83B31A68D795D7D1031806F73B17A293815D7DAD249E6D9CA7A926DBB88 + F6FD32491F9A7D234016D576BFBF0F43553F080CD3CF34DC3EE36A8EF22054CA + 993B1F2717ABA7FEF04E2ACE1F9FB4DABEE530905C01B0576168F8B7C318C0AF + C0DE4BCD7753288DFDE79A9E5FBA5E72B17A92EDE3279F58F7F7C2B5144AC281 + AA6E0FF21EB95F0E60F8832980E77DCB71CFAE7888C0B0668C67F6C97DD41F7A + 8BE8F9E3FFD286E62C9654D35D82EA1B4047F6A73DA8E762FA990B942EBB3723 + 22DD23E1AA755E342115174E22C5F77C228C8247897B695AF3DE5B1F410DB31D + 7453E066F2A91D4FA0790F337FAE8B504D03A1BA05BF0AD2371C89DF3754BBC4 + 74862E889DCBCC18978848102A958B8B5BA56FC97A51C36C47B555552FA7DF7C + 9AFCD953009800B9E3DF50925C44A8A6F108C20F8592C8AA81B9B755B9F166D4 + 0C89E1E731FC1104289444243BAB91F4FC559C5BB61137BE20005E477593AA5E + EE7FE725B26DFBC6A61B5F4DD322B6611BE5F73C0C228EC063886C05164D7B21 + 421665AFAA6E073A023743FFCE6DE48E7D35A56C0AECF9B710DDF0024ED32D88 + 618A4293C0F2AB6F8BD8A866804E853650574772B83F7EC6E09E5709AE0C4C73 + 8E1960C51B7096AEC14E3463945721C5522DFE9614FEEE65B8BB03EFC47768CE + 9DC9867F000F9E52E3CECDDE130000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C086488000005CE494441545885CD97CB7353 + D71DC73FE7EA7525EBE9576CC9B21CC041350FE3C1C14ECC4C181C582599E2D2 + D74C42A1ACBCE8AE8FE90C4D3340A733FC017441A96BEA6C324C6907D2699BE2 + 8609033198380E01C2A30D962D098C6D599691AFF5B8A70BC924025B969D4DBF + 2BDDFBFBEA7CBE3A3AF79EF3139428C5558D1A6CC31CD888B1D28F301A010148 + A4AE9379344A7AEC36DAAD4B64A722A50E8B58CEA036EFC4F9EA012CC1369F50 + 0C7B8057808D08E11560939044CA08F039700138337F77309CE8EF2379F57D90 + FAEA0218BD8D94EF3B8ADAD8DA02FC0AC4EBEA4C44718C7F811A0F634AC650B2 + 29748399B4CD83E6F291A80EA2B96A7524678123A9D15B4353A70E91FAEFA72B + 0B50F672179EB78EA88A593D2690DDEED16B4AE5DD7EACF1F07213C69CCBC744 + E34EA6FD5B7589F89DD4B33F9F3E7D4C4BFCE3F7A50570EC3E88E77BBFF422C4 + 39CBEC78B37FB00F5B6C6459F0D34A7A028CB6BEC9BCBD7A18295F9BF9E7C9C8 + F47BBF7DC667F8FA85ADA38B8A370F7B11E223E7C39BC1E72F1EC7929C5C311C + C0A4C5F18C5C61DEEDAB99B7577759D6B59CD633A944EAEEE0E2018CDE46AA7E + 72421546E379E7C39BC1C0E513287A6655F00529328B6B6C08CD53EF9EB75777 + AAC1F65EEDCE40263BF9D55FA92C7C28DF7714C56C3966991D6FF60FF4209659 + BD0BCA98AC45EB42EAF8077AB0CC8E370BC570AC62DF6FC0602C0CA036EF446D + 6C6D11C86EFF601F866CAA34B8D9C69DDD6F335DD752D467C8A6F00FF62190DD + A69A352D65DBF7160670BC7A00E0907BF49AB29205674C25A9BD7E86B1D6B798 + F66D29EAB5C546708F5E538043795E2E80E2AC400DB67911BC5179B7BF64F882 + 3CA12B7887DE63AC751F71EFE6A2DEFCF86F98BCEBBCA6BAF5B900EAB75E4628 + 863D6A3CAA94F29C2FA6F2918FA91D3ECDE88BFB89D76E5AD2678D875167A28A + 803D6AD3F65C00736023C00EFBF8ED55C1175471FF12B59FFD99D16DFB99A9D9 + B0A4CF91E3EC30376CCC053056FA013658E363DF280040C59717A9B9FE17426D + 3F66E6B9A6453D6A7C0C84D860ACAA07C0288C4610784DC95881510A858CC5BE + E210AEC83069AB8750FB4102974FE018FFA2A09EE348AFC83F8AC6DCDB58D894 + 6CBAC0A8396BB9D7F98B6577CB620A6DDB2F837F7F0743467B722FC711B6856B + 234840CEE90653C1CF5567A204FF7648AE063CB9F61526D6EDA0FE6A6F011C40 + 37980039477E64A3D4759084D356CFFAAF1B85D43169332B87AFD99E830F9CC4 + F1F0D633F5B4D50392B094590094CCA351801B9ADBB762D833F0E73B886EEAA2 + FE4A0FCE073717F5E43937F25C94F4D86D800B89EAE037824F35BC4474F377F0 + 5FF923CEE8E74BFAF29C0B792E8A76EB12C019CD55ABCFB9BCAB8307DA886CF9 + 2EFEABBDB8A29F2DE99B737A7327263893E7A264A722CCFFE793309273138D9D + 2B86C7EA5F24D2F27DEAAEFE095764B8A877E2854E909CCB4C84C30BC7340520 + 71FE14C0E169FF563DE909940CCF986C4437775137D8873B3C54D49BF40498F6 + 6FD581C389FEDE27F70D00E9C83DAC2DBB1F185C55558F2BD76EF38C0CA0E457 + 6931297A1ACF9797B14D878AFAB20633F73BBAC998EDC73353D19EA9933F836C + E6AB002049856E52B67DEFBFB316C76BF3EEBA1AD7D81082E55F038A9E2E5A97 + 4221D47E906479C3B094FC60F2E44F3399F09D27F52747B26CEC0132AD65D4A6 + 8EB3297B7597E6A9773B22D74B9A89A594359809B51F64E6B9A6FB12B92BF1C1 + 1F62B3E77B0B3C0587D2D4BD4F50D4B284796DCBE994BDBA33E1DB52638D8530 + 69F115C3939E00231DDD3C2E6F189652EE4A7EFCD748ACEFD7F0D4AC1A9EFEA2 + 76E322329B4EA8EBDB4E652D0E77ACA17D6BCA5E25CC8F2731CD279605CFB97C + 3CD8F46DA2CD5D7AC66C3F2E253F9CF9A02716EB7B7BD12E69C9CDC6FC421B15 + 3F3A8AA9664DAE3312E275355E4267E4F4EA20CF02473253D1A1A977DF41FBF4 + 5F4B062EBEDB198C9475ECC5B1EB0066EF3A1F823DC8E57BC3F4A35078B6BF8F + D90FDF45A6B4A28892B75B537D136AF025CC0D4F77C720F56C41775CAC17FCBF + D3FF000C42605CD2B9C9BB0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C08648800000835494441545885DD985B7095 + D515C77FEB3BDFB95F724F20E60A048110358A0E2A322D4AA5161487DEC67A1B + AD752C9D3AED03CEB49DF1C9EAD887D68E33D5825A5BA12A632D1D5BB4E3B45E + 0A449B485A2F911812028926E71C727239F7CBB7FA908BC4847042F2D4FFD39E + BDD75ADF6FF6B7F75A7B6FE17C64D870D435E1A86DC2ACA8C5F004001040274C + ACB12132C15ED2DDED644E759CD7672663E62D57E33578AFDE81FBE24D182E6F + 09B011B80858815008E2028DA184804EA00D386CC54793F1D68344DF7E917477 + FBE203BAD65E43E18E5DD86B563B05B905B803910D02066A618F0FA9998E23B9 + 0C96E920EB0C90750504111412A8BE023CADAAAFA58EBDC3F04BBFC81B744E40 + C35744F11D3FC7DDBCD910917B819F8A48A57374400BFADAF0058FE11EEEC3B0 + B2337C73A68B78493D63156B18AEBA949CCB2FAA7A147840555F8FBEB18FE1FD + 8FA0A9F8F901DA6B1B29FBC19398C54B1B80BD22B2CE1BEAD4F28E57F186BBE6 + B536540C86ABD7115C753D695F19AABA4F55BF9FE9EF1C0B3D7E2FB9D0A9F901 + 3A57ACA3EC474F63383D3722F207331DF555B6EFA7A0BF7D7E8BF60BB20C1BA1 + 95D7115CB50515A30BD56DB9D150E7E0A3DF213BD09D1FA0BDB6918A5D7FC470 + 796F17913DEEA113B6DA96A7B027471680365DB1E27A4EAEBF9B8CCB1F46B93E + 37126C1F786807B9D39FCEB0B54DA3F51651BE6B1FA6BFE8461179CE37F8B1AD + FEF0139899B9D7C97CE5480C13F8F4BF8C2DBDC893B3BBB71B4ECFCBCE55EB23 + B1432F81953B3B60C9F77E89B3FE92952272D01339E1AA3FFC04462EB3A87093 + 323371FC831F32527D99CF321D5FB215943E6BB83CD9E4076F4FB333261BCEB5 + 1BF1346F364478CE4C477DB52D4F9F175CC655807E9EAFE794331AA2FADFBF47 + E062411EF26FBA1DB3B2619ACDD40C96DDF7386661F9BD22724F55DB5EBC91DE + 79C3A5DD85745DFB0039A7577CC1632A79E459672C4CD6E927515C7BB988F167 + 5B517930FEEE5FA7C60D0067E346EC35AB9DC0CFBCA14E2DE89F5FB69F943D31 + AC057D6D84575E27836BB64ABE33B9E4A35730D3311BF0A0BB7933E692655363 + 3680829B7E88B37AF5ED22726B55DB5E9CF1A1F3021410FF6087669D3E4E376C + 1245F0853F39A79F6165B16C0EE2652B56A9CA5E2B3E1A497DDC323E8661C3D3 + BC19E036E7E8807AC35DE70577266465FB7E2DEA39A4A1D55B6470D596BCFC8A + 7B0E81AA8870AB77DD573F8777D43561B8BCC5226C2CE86B5B50223E13F282A3 + 2F5074E28806D7DC20C10BBF724E1F7B72146FA80B60BBB9743946A07402B076 + 2DC04610C3173CB6087853905CF0DEF314F6BEA3836BBE26C195D79DD3C7173C + 86084D02C58EBA26004CB3A20EE022D4C23DDCB76880E3904A55DB3E4584C1C6 + 6D226A69D927FF38ABBD27D20B8801DA64AFA87B3309981387CD15F6F890CE76 + 2A590448A96ADDAB2A06036B6F12D4D2B2AE3766B5754443134EB2DC7007DE04 + 3027A2149AE9D9CB59225049B2B06AC19CBE6027B1D2061D68BA59442D2D3DFE + D60C235B3A36D1D2A2C9CD604EF8BBE42C55636CE95A061BB72EC6DE99D2E09A + AD14F4BD873D159DD66F58930CE29AEC1B07548D5B36C7ACC14A8EBF45E1A9D6 + BC12EE5CCA3A7CF45EF95D2CBB9BBAC34FCC8003B06C4E267862A89E0108A1AC + 2B306B605B36892D9B5C209C57FBAEBC4772763775879FC47B7AF6B35FD6E59F + 6C862767C4B0C686003AB3AE80E44CD7AC8E0B82B37BE8D9B053D2DE32EA8EFC + 16DF1C8520E5AF986C765AD1C8386026D80BD08608F192FA458673D3B3612729 + 7F05B54776E30BCD5DF662C5F5A86A4AE1FDEC3817C6C4EDEA089018AB58BD68 + 7039BB9B131B76920A2CA1F6C86EFCA173178168C51A105A8044EAF8D171C0CC + A90EACF86842555F19A9BA141563EE28F9C0992E7AAEBE8F64A0929A96A7F007 + 3F3EA74F32B0946461A5A0ECCF9CEA401363E38000F1D68300CF645D0119AEBE + 6C8170CE71B8822A6ADE798AC0E04779F985577C195562AAFA7CBCF56F53FD06 + 40F4D04B28BCAAE8D1E0AAEBB10CDB5903CD09677372E2AAFB48145553FDEE33 + 04063ECCCB2FE52B2752B30E6037566E2876F8C074C074571BA9632DA03C90F6 + 9513CAA3B0CF2AC300819A777F47C167EFE7E5A240FF25DF40C516017D38D672 + 80DC50FFD4F8D454653EEBC67BCD37BB818678E9F2265FB0134762787E7C5696 + A2DE16758D0DE65D79C20D9B882CDB20C0FD563AFDAFF06F764EAD3F38E3D294 + EE6E67ECCD7D28EC5431BA4EAEBF9B94B7745E80307E16CCD776746913038DDB + 50D51755D933F297C7C89DEE9F66336DCB8EBCF80899FECE5155DD9671FAC33D + 1B7692F295CD1B325FB89357DC898AD1A2AA77253B0E31F6DA9E1976D377432E + 43E283B7F15E71C369C3E57D3D67776F1FA9BECCE71AE9C7190B2F0A9832FE5B + FB9BBF8D1AB616606B66A07B2CFCABBBD074E21C8080C64748FCE79FB8D76D19 + 1097E765B539BE3452B36E49D6E9C73BD433EB4B56BE4AF9CA3979C59D44966D + 1045F6ABEAD73303DD63C1476FC18ACE7E519B359F58D108F1D683382F5C1FB1 + 05CA9E45C49328AAB93C527F9561D91C38A3416CD954DE60894025838DDBE86F + FE16696F6904B85F959F243B0E67C28FDDC5C4796056CDBDA04D07853B76E1BF + F636C46636010F8AC876D4126FE8137CC14E3C915E1CD110B6740CC3CA60D99C + 645D0152FE726225CB8856AC26597081A86A0CD80D3C6CA593A19103BF66ECEF + 7B66BCC5CC0F7042F6CA060A6EFE31EEE6CD88B00291DB506E149126BEB0D1CE + 94420AF408CA7EE005CD6587622D0718393073B72E087052E6926578AFDE81E7 + D2CD984B96235002ACE5F3376A37681425CCF81BF5FB0A89CCA98F88B71E2476 + E84FE42203F3F9E4F95F838D40298EBA26CCF2F1577E91C9708AEAF83ACE067B + 491D3F3A2DF1FEDFE97F8A1461FF6AC44F150000000049454E44AE426082} + end> + end + item + Name = 'folder-open-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF + 610000000473424954080808087C0864880000014449444154388DA58F3D4B42 + 611886AFE770CA20FAA0C00AACB0280D47C3A5106A68A821488A76696828281A + 1D83A0ADA53F504B833FA0080269D33E88108294EA1C695224B1D484B721094B + 148E3DEBCD753DF72DF37E37C1251F08080280428182642A4DE8E09462A94CBD + D383011F0BFE89731199AD0E9452CF4AB1E21AB64797B78FEA4A740011990984 + 2E5575E075F50CEDACBACFE6A6C617A3279B91C797740D9C30D2E895DA02FC12 + 5C3D64D83B8E776E04C62E5C4EBBB89CF61AC175DCD4F4BAE380BB4496B5FD28 + 7FE500E1DD6901D0263D8E468E86373AD88B146EF6522232D08C4029F5AA0346 + ECFEB03F97372DC11DED0EBC9E754303CCB6D62ECBDF2B8CA90186CD665D5061 + BE1BD89A6850610C0D309A9BD00D3F13FED320972F363D41294CB90D6FE9EE91 + BE9288358142917DFB68D123B164F9BDF0A95917C0532AC3174D2E6CBF0107CE + D80000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000140000001408060000008D891D + 0D0000000473424954080808087C086488000001EA49444154388DB5D43F6893 + 4118C7F1EF5D2E6F528D791BD382AFD1F8B6A2183B8908AD884304C551855A10 + FC333814AC54A8830E155C9C1C14A4E022080E76D6C1A5EA20A254A59058446D + 8DEFEB5F306D6287A48D5C07DF48AAADB579EB6FBDE73EF7DC1D3C22693572EE + 641A1590002004D568AD0118CE3A5C1F7CC2BF440CF41FE4C4811DEDC0052024 + 3C50FF142B1A7D476BAE5EBBF588B397EF2E0A2AAFB3FE97EF8A7B33E385398B + 8692EC6FB7F68482B2F5D4915DBD4A0518B8FD98F274655EAC549E4121004138 + 335E6070E8FD1F45CF5EE5397F746B4F831188767775DCECEEEAD0A2E6596A32 + F970786C448140306F0100A3B922176F64E939B4E9D8DAA686E30B60000F80B4 + 5A50AAC96BF73BA7AF3C07EF697F4F673AC9E1741200B9715DFCD76FFACD9A78 + 04B573DB863EC06E6B31E9F44E596ADA5A4C007BB3DDDC274A2F2E654AE57CAA + 345D586CDF5F13364CC2A1D5A30A70BEE633A931E79E2FB075FD3E92D66E4702 + 6EC8307D61009EE14AC0092F03E819FFA9C390115D06300AD50EA554C20846EA + C68C60042995A8820EA0FD5CDBDBABB516AE9CA9FC98D29A825F506B3D097A4A + 7DF852C44EC41CAB79BB195961D505AE5A99007041A3721F27B013B1A178E396 + 6F4DB1545DA0370B46729F2650F79FBE4108CE0073C6FF124500B26F3F330B05 + CE991763B164980000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000275494441544889AD95CF4B54 + 5114C73FE7CE9DF7FCFDCC920AA984C8508A36D14217B5D1DA964241106D4BA2 + 459B849230A43FA1DA44B8A9451045519BC059B8092322C15AA4C87BD2A80399 + 5A1A43735AF866788CF30B9BEFE67EE17BEEF9DEF3E5BEFBA4B626CEE0856E76 + EDA80700612B1414E5EDC45712EF670A141487DCB87C92D1EB67041800BA4404 + 554564D34955019632AA4FFE66323F06479E33F6F243C506B6B5A51EA01F781A + 69985BB33022D7C4C4FAEE0F9FF311187B5199890DD72E8081DB13D9E62AE108 + AAAA9DED9EDCBCD8D9D1506BC76331D3FB60B87FE674CF61FCE472C9E6D3338B + 9B062222F9278EE2CBDC0A238FA7B875E9487B53BD1D3746C6FA7B8FA6C3BDB9 + 89F3F8F8EBC474C2E6C59273C9E7DFE6D7B8F3E8B35C397BA8ED605BC390919C + 46A48EBCFD89EC0459D75C2C85F8DCC22F1D7AF849A24D0AD53DBBDB939BC638 + F158C91CFF073666B057CF77571451215E480B4F2EAA4A5F4F07B2F1F1DEAC88 + 1C28366E315E499DAACE5920D8F8B3BCFFFBD22440F47495F0A2DADED6E3EA3A + 5E60013F9349331BBC2B7E4FB781DD3B8F09E05B20709C26440CA0558908441D + A7092030801F337189DBBA42CFDCB610B77512337151F00D1088185CA7B15AFD + 719D46440C028151D45755751D0F0D0194E5A534D769DEE4A86F45655E8CA8EB + 344BB5AEA9EB788888A2CC1B154DA9EABAEB78558BA8C6F150655D9594414903 + 8B35558DC8035800D22634F55DD7434200657929CD753D400300132CAC0004D1 + 88223117E5A5B4B0970F8A4DA656D8B7C70B6ADD164E9D18CDD547FB14E1E5B4 + E0E7DA0636B9B40AF006F85DE2EFB48597AB0312C9D42AF655621A634C024848 + 95BE650DDFBCC9A9807F1AEEDC47450422F50000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000020000000200806000000737A7A + F40000000473424954080808087C08648800000276494441545885ED97CD6B13 + 4118C69FD9EC6E42C0069B7A511B90504A5144C40F844251100FD5A3A208F1E0 + 45B417B19A9B2753B408EAC1BF402C2AA478504A110F5EDA9EACA568297EB574 + A7C96E92A63BD64DDA64331EB2F992E4D0D24C107C4EB3F0C2F3E39979DF9905 + FEABC522A54557A00377AF9F86D7A3801052B79883C3B60B187D378B176333DB + 0BF0ECFE259C3F733002609010A2D405E0C8017CBCC0F9B597639F960722AFF1 + DBDAD81E80E8E32BE8EFEB590F4526652B6BD72D565C04E77AF7E0E2A9409210 + 84E61792E397EF8CE0F3B7F89601E4320901088162656DDEA83867738C7ED030 + B7C03A6E5EE87EDBBD6FD7F0D4C8C0D0E4CCE2DADA2692F8BE94C2ED876F6A01 + 36A3B94586C1A7D3E4EAD960F8588F3FDC773458FFD034D0C72F9A545A6F0900 + 009895C7A357F3A5CF86A9FDADE8BDDE1A58A951A128C9C3B7FA110CF871E4C0 + 5E61A6C14E3FA24F42489B199089E7375C87F7776609E01246008073D8B184E9 + 9157CC8C0DCEE313D30F76AFE7981073B7DA861387C2F115D3B2256A980040DD + AA4F883900B8151F0050AA3348B1047300DAC40114BD682CC920519D0180D602 + 008DEA2624CD580500AA0ADC02C78B6ABA594EA0255B40750689EA2638B87000 + 0E506A989052AB1672395B13D9051ED50770AEC512AC388AA9CE84254020C1E3 + DE696737F23F53AB960360981989C86959F6361D4055770020F11F4B291B702E + A3E584B856AC6EC10A40A913146100941AAC02A0E9E2C671690C6BD50954EE03 + 81095403C4CA67404002458FDA3320721A962FA2C42F00CE9B901A2638076DF7 + 759193C7879A0AC039079C295806281438DE4F7D9D6DF7792590AA9F85A60000 + B9BC8D34CB34D1E55FD21FE14218CA03B9784E0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D49484452000000280000002808060000008CFEB8 + 6D0000000473424954080808087C0864880000036A494441545885ED984F689B + 651CC73FCF9B3779E38CCB6A36EB1C5ADBCB06763275B283855AD183074FB387 + 1D44E876F2200A6211771A0A1B0CE60E22ECA0A037CB042F43D8541C05113695 + E2A1DDA0369827CDFB2EAF6FD2A4DDDA2CF97978FF243AA9AED9F6E6D0EFED79 + 92277CF2FBFDBEBFE70F6C6A53F14A750E8EBC7A80B75F1BC13413C1A7EADFD6 + 00202220C24F3379DEFBE81B8ACED2DD05CC65B790BFF03EA6699C04DE504AA5 + D75B28C22AC8791179F39A575F98383AC5851FAFDE3DC0819D7DCC9D9B1C568A + 99535FCE8A576BACBB309D3478656417C383D98A884CB490AF4F7E7A91639F9C + A7D96CDD3140F31FE31CC0F44CF97F2DFEF9AAC7F8F38F6E1B1F7BEC2B43A9D3 + EF4E8C4E3EF7D440E3C333DF32FFC79F1B862A956BACAEDD043A23F8481F57CE + 4D8E02DF1F3C3A2DB7F383C34359DE1ADFCDB64CF212700270D53AF5FB1FFAF5 + A52367AA172FCD03B7467043FA6DBECA3B1FFFC2EB2F0FEE7F764F6EEA3E2BB1 + 613A600CF8211CDC1140804ABDC1E9A92BE1F0B63210EAEC0723B7FC31A31BA8 + 7B21B33F97219D4AB2EBA1AD71B344EACF6518D8D9C7CD6613F3F3E38718DD3F + F40C9001F6013C31988D936FDF17C70F01D4178ADEE5B0064F28A55E08BF71EC + F0DE6E8ABC5B9D524A2122DF81BC68BADE32805EBC765966E7CFC6C8D5D69EA1 + 833CBCFD69ED7A2B18DAA90214AC54EFD460C052D04E15A354AE01682B156BDD + FD4D018B2E956B18DA3F85682BD94311F459B4769630B4EDA7D834D32A6158F1 + 920109C3C234D30A2868BB8A912F7A08A221CA7DAC0A1944D0F9A28761BB3510 + 1C8146AF000A34401CDBAD61ACAE35712B2B2D44167BC128562A0B228BA05ADA + 5EF2F7E282DD3BAD266C3195DA7596AFAFF980B61B38B9572208BAE433F980DA + 0E7B61FC11DC92DE0E3057B43B017B6837092258985B708000D06F35BD92E2A0 + 497746B054AEA14027CDFB955289D8E0CC449A4422E53769A703B0E82C218256 + 4A61251F880DB023833AD8E14293540134D08A33CD4193BE2122E57CD16B0356 + EB37585E595D1391729C46B1525B41A40860BBF5362040C98DFFD8153AD8ADAC + 4417F70830704DACADA6EDE06A341701E6173D88B959B777917A34175DDC43A3 + EC7870AF1A3BF0E43D8783E0490F0ADAAE447311A0ED1FFD3F03A645842EDE56 + BA810398D51D6F8D11457F2EC3EEC77704B371DE3A61EE772772F1A6BAD55F62 + 4F67FF70A89C370000000049454E44AE426082} + end> + end> + Left = 232 + Top = 100 + end + object FindInFilesDialog: TFindDialog + Options = [frDown, frHideUpDown] + OnFind = FindInFilesDialogFind + Left = 136 + Top = 152 + end + object PrintDialog: TPrintDialog + Left = 224 + Top = 149 + end + object LightMarkersImageCollection: TImageCollection + Images = < + item + Name = 'debug-breakpoint-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000C0000000C080600000056755C + E70000000473424954080808087C0864880000017A4944415428917592CD4A23 + 411485CFEDEAB625A6A73B2A828A9962941682CFE04271212EDCE84262409937 + 70E333B89C3798998C8BD90FB8363E800A9245A150F8B78B9AA4A2DDB1AB6B36 + 69E3CFCCB73A5CB887C3B997D0C325C27AE063C1F3F20163250068EBB47EA894 + FAFD708F4E6A00000400538E831F9F8BFEB4EBEED99C5718E78300A0A58C1229 + ABD7DDEEEEF6E55553C431C825C2C1F4177F26086AB9F2E69C1D86060088888C + 312611821EF77F9DDDB65AF34BE7174DB65108B056287C1BDADA5E766667413D + B225363A0A363139E69E9E0C7752FDC75AF0BCBCCD792573363D5E6B270C6173 + 5E59F4BCBC153056CA32FF172230CE0703C64A767FD68FF17EF61AABADD3BA96 + 327A1FE38D36065ACAA8ADD3BA55534A25525613213EB8653C0B8144CA6AADA3 + 1413718C55FFD3514E8815363139C64646FA2D0194D5DA88A2F2CECD6D4C0010 + BA2E7E168BFEF880F3CFC3359264F7EBE555F3F8E9092F313CCBC2D670E1ED6B + A469FDB0ADD4F7BB3B34B40600FC052EBCBEA7B3A7FD2C0000000049454E44AE + 426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000F0000000F08060000003BD695 + 4A0000000473424954080808087C086488000002234944415428918D92BF6B13 + 611CC63FDFBBCBE572F688D5A5A50EC6A8A4FF8074E9206936155A5C142A38DA + 457071F46FD0A57F805B95646829423AA54B1187424104B91CA1A40E5649DBE3 + 2EB9BC77AF430D8DF5073ED367789FEFFB7CDFF711C6640255CFA3EA4D3065E5 + 4C0157437498AAB415866C1E1D331C3B2F23A8E4F3BCBC3243C5C92F813C11DB + 9E13D72DE8288A7592EC00AB9DC1A0FEAC7BC087383E3357F279D64A570B45D3 + 7C6D95CB8BCE420DB35402C3D064196910487FAB89F2FD469C65CB8F3A9DF87D + 142326B059BE46C571DEE6E7E7179D3B7741448B880068ADB58888CE32FA1BEB + 0CB6B71B5F86C9FDDB9F7DCC9AE7F1F8D2E5C5DCF5F20BF7C143C4304E23FD34 + 8F5844B06EDC240DDAB3178E8EF70E86C34F46D59B40841567A106225A6BAD47 + 37FEC622DA59A801AC543D0F6BCACA9962DB7366A9C4F9A8E719C02C9510DB9E + 9BB272A601B8E2BA050C43F33F320C2DAE5B005C0B887414C56459418F0D1845 + 3ECF64193A8A6220320E954A7592ECA44120238D3DD22F2C22920681E824D939 + 542A355A6108B0DADF6AA2B3EC9F897596D1DF6A02ACB6C210E3DDC9099D24A9 + 2BDF6FF437D6FF3A60F4CFCAF71BDF95AABFEDF53053602F8EB9572CAECBFEFE + 6C1AB467CDC949916211444E1BD66E4BFC668DE1EE6E4369BDFCB4DB551F0783 + B36EDF725D5ECDCC306DE796803F76FB9B52F5E7DD039AA7AB9E99010A222C5D + 2C52F53CA6AD9C09B840F4355569EB2464ADD7E3786CAD1FB9B01A255C49D396 + 0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000001200000012080600000056CE8E + 570000000473424954080808087C0864880000026E49444154388D8D54CF4F13 + 4114FEDE6CDB49B70B6E892550A909BB5E48D104F06A0272E00FF0502E78F260 + F4A2374C3404638C37F1860989062FF4A8C6A35C2444BD42134D68893D007689 + AD0D5BBB5DB68F032B3FDAF2E3BB4CE6CD7CDF9B37F3BD21B4C040388C614DC3 + 15193A16CFD75C2CD93B58B62BE0060E1D9DF4498967DD5D1852D54E229A0030 + 0AA0D75F5E07F09999DFFDAC560B4FB6B6F0BDF2AF59E8A6A66136D143528807 + 209A0E98662498EC8788C5000075CB829B59C56E366B8379CA639E79B4B1C9E9 + 52E950A84F4ABC377A490A312BA2D13B6A6A1C8A618088C0CC4C440400CC0C2F + 974325BD807AB1385767BE7BFB579EBFD8361400789DE8C165291F8A687452BB + 771F4A3C0E9FBB9FCD9F10114447078257AFC15D5D1944B55ABE1E0E7F9DFF53 + 8418088731A4AA9D209A5653E310BADEEAFE8F41E83AD4D43840349D08853AC7 + DADB2086B508886822609A11C530CE14F90FC5301030CD08114D8C681A842925 + 008C0693FDC7CA390B448460B21F00464D2911F0A9BD227611CCDC680F003831 + 2E6231826F8FC0911C0797DA28D22ADE24EA8FEB75CB3A6B6F137CCE3A00887C + CD0580453793C10915B40433C3CD640060315FAB412CD93B60E6792FBB667BB9 + DCB985BC5C0E5E76CD66E6F9A51D1B62D9AE60CD710ACC3C55492FA0EE5BFED4 + 924A2554D20B60E6A96DCF2B7C2A97F79DFDC371704BBFF08DAAD5B8BBBA32A8 + C42F81A2D1033B34B688FDF60DEAC5E21C333F9EDCD844C6710E9B36A5EB7811 + EF264174AEA665E6999796C5AFACEDFD64478F7C2312C1F3EE2E2442A153BF91 + EDDDDDC2D3ADDFF8502E1F709BFCA100186B6FC388D606F3848FEDE3DF329C86 + 17DE03701F1280A02D4A190000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C08648800000389494441544889A5964F481C + 7714C73FEF37AEFB67B675AD9A3528AED02E011B0A6B487BC841C8B9A13D28F4 + 52B587DA436A4E52E8A150E8B9345402C58B7A2BE83125879E84069A43DD43AD + 85D842C6348D663746D78C3B9BDD99D783BBCB5A7737D27E2FF3DEFC86F77DF3 + 9DC7FB8ED0067163B862DB8C4422C48C41AAF71528ABB2E979DC3B3A2257A9B4 + AC21CD6E0E8642DCE8EDE1BD448288180BE1229001CE571F790C6451362A1AF8 + 3F1E1E722B9FE757AFF47282C9EE6E3EEF3F474C8C8DC82C3003A45A34E8000B + A0F3BEAAFB5DFE295F3FC9E1B722F8EC5C1FD77B7B41640C581663863AD2690D + 6546B1865398AE8402121CECE33F702867D7A96C6D8906C1363085B276BB70C0 + 8DBF1ED549EA0493DDDD7C75BE1F443E0016AD64B2333A3E81954AA9880880AA + D6E35AEE3B8E145757F077775F001F817EBFF8748F2F777601B06A9A2F0C0D12 + 32660C58ED78FD8DCEF8CC27989E1E6D214D1D2691A0F3D225F1B7B7ADE0D9DE + 35909FDE8A469D9F5D9747E50A0660B6B787A8181B58B692C94E7B7A1A8944A8 + 752B5534C627F248047B7A1A2B99EC04962DB0E7FAFA8E1B881BC3FB890482CC + 8A3143D1F10908875FDAF92984C31A1D9F408C1902F9F4B26D73211CC65CB163 + 848D58081F77A4D36AA5525AD357555BC6CDCEAC544A3BD269459811C1BA1A8F + 63462251042E02C3A1CC685B595A4AD4108732A300C3206F8E44229898318064 + 00ACE156E37E7634D4188D19434735E907305D89DADB520FDAC4CDCE4C57028E + C7BF1FA14E508388C889796F15B73AFBF77498EA7507203838389B0E6DD05063 + 07C0943500C802F8CE83FF4DD050235B0E14B3E99540D9009CF27A9666E377D6 + 3155552DAF67011C948D4DCFC3DC735DCAAA3EB050D9BA2FBEE3FCE731F51D47 + 2A5BF7055850D4BFEBBA989CEFB3F6FC10605E8360BBB8BA02A552539F688B52 + 498AAB2B5437EBFC1FA512D962F1F823DFCCE5F1555D60CADFDD7DE12E2DA19E + D756AE13B9E7E12E2DD536EA942AEECD5C9E80EA367D52A91016E1ED58CC41E4 + CFE0D9DEB5CAE66F963530202691682B91EF3872B4B488FFF061755DF3C39D42 + 816F7239A0C10F2CE0DBC101DE7DB50B600C696338FBFBF84E33C3D1B55F8A45 + 3E74B67183E024418DE48B6492C99ED730882DC2992C53611E55F74EA1C0DCDF + 8FEBC54F11D4F04E2CC65C5F2F976D1B41EAA62F55D3D706D357D4FFDDF3B895 + CF73BB7078AA56DB69B9100E73F59578DBDF96BBCF5DB2C522418B1AFF00C284 + 05A7A231DC810000000049454E44AE426082} + end> + end + item + Name = 'unused\debug-breakpoint-filled-cancel-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000C0000000C080600000056755C + E70000000473424954080808087C086488000002034944415428915D903B6853 + 611886DFEFFFBF9C24C78624A7F634115B83A29044694B253AD50B8A970CC926 + 0E5287A248170B4A2787AE9D0A3A88A34311046907A156C5C1A10EB6B1156969 + 55CC05542206DB1C733997DFC116C4677A87071E780900463A0DDC36CD4C8079 + 5C9ADD2728E0EF70ABD50D6559D36BCDE6D468B9D2F8D86E030068C43070271E + BBE64BA5EE06737949D1A80200781ED985021AB333CBD57AFD5CF6D3E71FDF1C + 07723AB12FA3A7D38FF5E1AB52E83A76202148C4E38AF71F887161291911F468 + 7EAB0E11641E0FE6F29284F82B6EB3B3399180363898CD86C37D0C80A5D93D44 + D1A8524A81884829A5B62315B8AD87CADE5A977BCD98BE284D83194C017F08FF + A3DCA74EF1D998579ABFAEECCD61B854D232F43C2F34B05BAD6EC0F39224E58E + 5E714BF3635E65EEA576F86CAF307AA0AC1ADAAB2F2E4F849CF3F2662412919D + BB4F8B785C1111C16DDD73DEDF3FA6A5CF5C089E1CB5556353F9FB731E8464B7 + B47844AC359B538DD99965B758240050F6D6BAB2370784D103BBF89602C7AFB0 + 572B034424425DFDF28D65391777E94FB8B094F26AB583EAB7B580E68A9F6387 + FAFD7D39CFADAC78724F92DCAFABB0375E97090062CCB86576211B0EF7E92C4D + 2DF3F33BF7762FF88F5EF28188486AAAFD614E3AE57737E8DF731880C18C7CDA + 8789531D4392B5490A750DA8C6AFB26A5993AFBEB41EFC01E148C7B0FE7275AD + 0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000F0000000F08060000003BD695 + 4A0000000473424954080808087C086488000002B44944415428917592CB6F4C + 6118C69FF73BDF3933ED4CB599323A1DD720A7244417166D04A5A944C4424288 + 05C2AEAC444262E30F2012897B2C89B8D624ED060925A42916BAAAB699AAD1AA + 36863267CEF92EAF0595127EAB77F35CF2E42500C84889D3D97A342512CD44D4 + 4E42AC87E7A5A1D46736E639C09786C2B0F3486114AF8200D350464ADC5EBCC8 + C97ADE29A7AEAE3DB6A9955CDF07E2714045D08343081F3D84CEE76F95ADDDBF + 77F85DF0A254FA29BEBE70019A93C933EEAA55872A77ED06A464FC0D33957339 + 844FBBEF8F2BB5BD656010DFAC85732A5BDF2C339973890307895C1744440040 + BF00001282A4EFC30E0FFB15C562FFA4D67DAF83008288DA639B5AE99F893320 + 22C4DA3603C0E1B6595500004942AC737DFF573BFE6D30E39E60E60EB0ED17B3 + 5309914C3665A3A8024020E17969C4E3D3EE342D2422B0D517CCF8CB63B6F064 + 2597C61A61F051FAE1C5EA8F2A488D1024942A42A95AB8EE9F1B597D41BFBD79 + D28C3CE810B3D22D32B304ACCA00FA83746D78F46EBAE6BC64639EEBC1C1ADB2 + A1E18FAA66FCD531F3FEC13D7769F30677D95ACD2A144404F65BBCB0E7DAD906 + 7C2A080097C2470F01669AB170872D3C5E29AAD21BDD656B4DBC691F9C9A79DA + 5BD166BCE5ADC65DDE0A00C7C5501876EA7CFE563997C3EF60B6FD5C1A5BEDA4 + E6835528A2379D1C5BB3535222456AA0DB11D57520C75D2D8E143EA06CEDFEF0 + 6977AE74E532F4BB617010246030C5AA0C2282AC5F01FB65D452453589AAB916 + 4601D64C39A35AA3B754D2EB93891B15C5E2DBA8A727AB7A7BE7507CEA3468A2 + 5D2E68749CD98B6CF4A64BD862C18AAA34477D5D8E99CCDF7000E0BD52B8FEB9 + 8849ADFB6282AE7214DDB15EF4A5B2B65CB413435B38FCEE50AC92F8FBA488FA + BA1C35F06C84ADDD43FFFBA8549C7077470DFC5AB98D888E93E336C29AAFCCF6 + 3E339FB8FCBA34F6035C9354245E468C3E0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000001200000012080600000056CE8E + 570000000473424954080808087C0864880000037C49444154388D8D925D689B + 5518C7FFCF79CF9BBC49DB64C9D684D5A6A3D3950CB37E6CB576B3F8055391C1 + 744E5AFC0067F1626E2082820EBCD0EEA23773178A9651BC1911BCEA854CA7E8 + 2832109D6BD96C9D2B95A6A9A669D7B8D6364993F79CF378113FBA56D4DFE573 + CEF9F13CE7FF10FEE050308837A21184A4DC4744BD00EE2520C6800B6012C067 + CC3CF073B99C3A319BC557F93CD64200F04AA416C7B76C0910D1FBE438DD9EF6 + BB20E371887018301A3A3B07F7EA15A8B1B1321BD36798FB5FCBCCF2478B8B7F + 8B0E058378FBB6BA00117D613735EDF675F74004027F5D606626220200359346 + 219984C9E50635F3D19E548ABF2D14010056725B03FC96F581DDD4B4DF7FE479 + 089F0FEBF953248241D8895D70AF5ED94DA55236E138973FBC59E94A84A5DC4B + 8ED3EDEBEE0149B941B21EB169137C4F1C0680BE9D8E53D3E9F757EA44D4EB69 + 6FBF659CFF42C6E3B0EAEA3613D1635DD555951A80FB647CE7FF79BF026018C0 + 048CB1E4F6DB133A93E98CD99EB3002009A817E1F0BF090C1B7D9A97D3FDFAC6 + C812E767233046034B0B22AA1D5934958E185030C66666FE2709F4EAB36AEADC + 909EF9F255E8E251007500407EFC6437F3A983099CB934ECB00430A9E7B2BBAC + 6894D65BD8E8D32AF5C9909EFEF4635115DA6FEF78984528C66003BD30B5DD9D + BCF81E157FEB38F9404DAFF572A4B611A07D9E96960D7FC2CBD387D58F675F12 + FEC00BDEBB9F36B2BE59A15410242464439B6B05B60A9DBDDE264C79523030A0 + C6BE2FAB99F47AD1B09E1F5D822ABE68EFE8626B7383F2EE79525AD126576EDB + E37ADB1EB745A85EDB8D1D0CD031F14BB99C6263FA0AC924CC9A950730C1F94C + 04409D08C56016337679ECBCF2343F6ADB77DC63974686341717A508C700A055 + BC9E998561EE37B9DCE0CABBEFC0BD760DCC0CD6DAAAA403802BC990B79A610C + 4004F2FA79CD99B6A65D175957E1C19AEA73542A65DDD1D1BD6A7CDC676E2CAC + F052FA0CD9379F113591906C682D7BEE7CC82E8D0C29939BD69EC4235267AF2B + 35FD9D657E4D5FB400607C75155FE7F34838CEE55A290778656542A7D37E940A + 17ACE86A8197E70E88C056A117529A97E725E773969E9FD07A7ED2767FF89CA0 + D5F15B2227009D7E3FBAAAAB10B33D905EC6C1032E498B06C95BFD9CDDD8C122 + 1C038C81CE4D41A52E11BBA5B794E13737ECCE7A8EB43838797F0D2CC2534474 + 0C402B000DE01B663EA518E74F5C58C6EFE70E9203A1D63F3C0000000049454E + 44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000054D4944415448898D956D6C95 + 6719C77FD7733F2FE7AD1CCACE59BBC138EDE8A06CC14169A3C91284D5B02C59 + 6213336003677426FAC1287C31711F4C8CC9DC3499667ED0C411BFA89942A2F3 + C39690151D4413050C43B6415B69BBBE8C961D7A4E4F397DCE739EFBB9FC20ED + 0A02E3FFE97FE5BEEFEBE57F5F572E610576E6B2FCA0AD8D52102022DB817DC0 + 0E812EA045A1068C002780D755F54CB9D9E4E52B57F843A5CAAD204BE460B1C0 + 778A451C6123C84F45D88DE78B2995306DED482A40C30676E632767C1C9A91AA + 720CF410CAD0D14A95EF4E4F636F15E060B1C0C1E2BD883000FC5A329996547F + 3F5E6F1F924EEBCD59E9E2A2344F9F221C1C44EBF51AF05555FDD39FAB55BE3D + 357DC35DB33397E547F7DF8F233220C8EFDDCECE54EE1BDFC4DBB409F1BCFF65 + 711DCBDCF3704B1DF83D3DD88989402BD52F219CEF0E820B156B39BB187E52C1 + 3B1B1EA423156C04F987DBD9D9927DFEEBE0FBBAE450556FC9976CA248AE1D7E + 8D7874B406FAD96A6C873E3F3CC25C9200E09482009057249369C9EC3F00BEAF + 4B8F55F5B67CC9C6F735B3FF0092C9B480BCB2CA189E5DD3BA5C8123223D024F + A4FAFB71F2796E90E20E7CA5EDE4F3A4FAFB117842447A06F2F94F0200FBF07D + F17AFB6ED966770BAFB70F7C5F807D5D4140AB3100B8C00E532A21E9F472D5CB + FA7E0A07A6547518082508DA4DA9F4703C3CBC4380B59EC79CB5B8020F99B676 + 96CA5D7272071EA9EA6192E8971A56DE27AAA0494C32B780649DAC04DE176844 + CB19B8404E52C1DD2A31A271B8D796FF7D2E993AE925F39776112F3E0A9A45E5 + 436795F357F71179239977D85C77383F0AAEC282868DFC5DC832A2D1FC4E3BF6 + E68C9D3EB987B8FE12505A195D52363601479C7BF4D0AB1DD92BA9C1041718B1 + 3397B77F8A4491C6E15E3BF6D68C9D3CFE43D1E60B926FC7EDE853D3BA0E8C8F + D6E7B01F7DE0C613679FC1361F03ED7F7157CB25073861C7C7D130146E03553D + 6CCBE7CFD9E9137B449B2F98B55B08FAF6A9DBB651C5CBA838AE4AAEA0DEC61D + 49D0B757C54FAF1791A3BE8BEF00AF1335B579EAD4ED954FA25F24D3273DE2FA + 4BB2AA1DAFBB5FBDD2F686B7E9F106A0004EAED80CB63F1D3985CED87F78B78A + C856559E7354F58CA2C7C2C1B749AAD565ED574CEB9486950F92EA7F1E034A6E + 479F8A6354B26B70D76F4B7BDD8F47922B3453BD4F1B2757F0C44BAB53DCA092 + 2BA888EC77CAD6021CD27ABD56FFED6F208A6E9EDE61A22AC48B5B014CEB3A00 + 695E38EEC79367436FFDB674EA73075C80F0CC11ABD7CA1E80B37A2DC056E7E5 + 9959508680AFD9B1D1E4DAE1D7D0F9F995FFD1D02406340380F1979B269E7857 + 54AD15E3BAF6EA78AC0B1FBBCB87AE8F40C6BC17863CE0796C4E051740CE2795 + CA93D1E9D3811807A7782F62CCBCFD68EC573AF7AF0ED001B7BD1BFCB43AB942 + 9CEADD63482C7676A461EEDB9C163F1D261F8F1A8078F29C24D7CAE30660B056 + A3D30FE80E820B8AFC91B8D965878637447FFF9BC4972EAD4966677F26666A56 + DCE45BE205C6DC53D2E0334FC5E2679CF0F4116B27DFF5C4CF34DC07B6A592B9 + 8948AB336EF3E25F84C41E355C6F83B76A352AB1A527932E0722BF4378136B17 + 92AB57D33A373F25ABC3534EC6766B6D768B2974902C5CC1CE0CA92E943D4092 + F2A849E6261BC9D58954F4FE31D1F9D9A6AA3EFF7FBDDFEA383CBBA695817C9E + AE2040001170BBEA98CE7A5144FE295E7ABDFFC86E758A1B6E5CA7D1A244178F + 8BBD7C11E07BAAFAE3DB0E1740AB31ACBBBE36BBEF7378F58B59041E1491A322 + B25572057556AF455C9FA43E47521E87B8D94CD0EF83FE64AC62F58E016EC697 + B7A47871570ECF115F90AF20EC071E05B2C087C0DBAAFA73E0BDB1AAE5B937AA + FC177064A2335F8ED8770000000049454E44AE426082} + end> + end + item + Name = 'unused\debug-breakpoint-filled-ok-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000C0000000C080600000056755C + E70000000473424954080808087C0864880000020D4944415428915D90BD6B53 + 611C85CFEF7DDF2437C1361FC67C146C528BD0A683D684220EEDE050B543BB84 + E2D48AC50E9D3A4841F01FA82805690407870E5111A12928F8B9388ABD6491DA + 56694D40E90D69F371736F93DEFB3AD880F84C6778E01C0E01C0CCC9006E8742 + 438A100B3C141E21C575C2D2B42DA9EBD90DD35C9A2B148DED66130040338100 + EE4623B71C89C443F7F80427BF5F02006C9B5AAA0A23B79AD7EAF5D1B1EF3F4A + BF8F8EC0B3F1D8906760E085676A9A338F076D883162D1A814677A23425DEFF7 + 317AF6B65607730BB1E01E9FE0C4D85FF1987616F1389CC9E4D898D77B4E0010 + 3C141E26BF5F4A29414424A594C725C5866CAD942C63D319EB8A285F78282004 + 0429AE0EFC470BF6AB4C459D5FAEA9B39A6D4C2941F9339E0EBD3B785F83B034 + 6D0BB6DD4F9CB7FD62A6AACE3F68AC7F48F7A6BACF769EC29E59C3CB1DF57A73 + D27185495DCFB65415ED290DD95A59AEAAB3E978AABBCF1B969C98ECF79DB6EE + 5F9CE64EEEB8C7364C73C9C8ADE6ADDD5D028092656E6AB6317821D86307DD01 + DBE7EAB4AFC6475039DCA7A8C77B5ECC158AC6732146E5A3CC13673275CD198B + 8695A02C68660D3713974100DEEC7E22CD3860E5437D87972D0B6B954AC3C7E8 + 6977A994737FDBD25FF7281F3FDBFB373AB8E4C5FA2FD28C7DB656C8D37675EF + 0EFDFB8E001010020797BAD09CEC1B760AC762D4ED1D2C1FEA855ACB5CC457ED + F11F61BADD060997E9980000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000F0000000F08060000003BD695 + 4A0000000473424954080808087C086488000002BB4944415428917592CF6F0C + 6118C7BFCFCC3B33BB668BDA2ADB6DDAD230682A1C1C34F1A33FB20D41C28938 + 8870520E22121207FE002291A00EC2A96952A2CA9EB46928158A48D6A1B55B5D + 54BB8DEAD29AE9CCBCF3BE0EAC94F0393DC993EF8F3C790800628CE142BC0C1B + 4DB38E885A4851B640D74BE1FB533208FA01796DD875932746C7F0D271508062 + 8CE1D6B22A35AEEBE7D5A54B5B8CC626D22C0B088500DF03CF0CC3EDE9061F19 + E99815E2E081EC7BE7A96DFF14B75556A02E12B9A8AD5D7B74DEDE7D0063127F + 2325CD7675C1ED7B7477C2F7F7D4A733981102EAF978591D8BC52E9B870E1369 + 1A888800807E0100A428C42C0B229BB5C2F9FCD024E7A9578E0385885A8CC626 + FA67E21C880846A219008E25E61701001829CA66CDB27EB593BF0DE6CC9FA594 + 9D01E4902C899A14896C8C7B5E1880C3A0EBA508850AEE541012113C195CBDF7 + 3D73EAE6CC9BDA349F5A6F70915BB3B5A8B53C1B38F8A481C1F7F3F0FD2834ED + 8F9A9E0CAE9EFDF2F85CEBCCEBCE327361FD8AE2386CEEE101F31DA7929D44F5 + 862B4C06413FCF6476B055ABFEA87ADFCE9C6A9D797D2711AFD9DA10B344C174 + 5B794DA875F0E1A5B138461500D7DC9E6E404A9A73E1CE1BD3A9DA3273614343 + CCFABD5048C1EEEA46FFC8EA0407705A1976DD241F19E998EDEA422138801C4A + F3FCBAEAA2522C0A2D085452058144A2725360283ACD53A16A2A5BC74E8C7E42 + 5B55E541F43D32C4446EA7D1DC0C198D9A0617393BF050135D294BC2C5C2E12E + 344545F25DAFEA043E05424CAB639C63C0B6F99688D91ECEE7DF7ACF9EC5F9C0 + 8BC5CF8BE585FEB0D3B2C4D0F5E5F3CBA5A16A48BEEB550329D0974BD3E0D7F1 + 7615003EFA3EDAA6F298E43C6528741D9E7BFB7D185F9F5418F9C16FB9ED1E9F + A6093BA7D8DCA7BE8934253FA63E4888FDF4DF973235E0F8062016D905A2D39A + CAD607427C1352DC05E419F464C77F00F825451B529255C20000000049454E44 + AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000001200000012080600000056CE8E + 570000000473424954080808087C0864880000038849444154388D8D925D4C9B + 6514C7FFE7FD68DEB6B4859696AC2B20055931C52D8419B6108C46E2474C3493 + 0CE247A2122F7018633213353146B9E1662346A364126F4C4DA6173351124DC8 + 24C64C9D230B5F6209426D27ED6094969542DF8FE778811F038CFABBFC3FCFF3 + CB39E739843F38E1F1E0F5AA002A14E53811F502E820A09A0103C00280AF9879 + F89AAE275E4B67F0CDE6266E8500E074C08FFECA4A3711BD4F9AD66D6B3D0A25 + 1281E4F502C28295B90E636A12E6CC8CCE420C08E6C15796D37C3E97FB5B74C2 + E3C1D9834137118DA98D8D2DF6EE1E486EF75F179899898800C04C25518CC520 + D6D6462CE6BE9E44822F17B7000072ACB6060E59FE506D6CEC743CF32C24BB1D + 7BF95324793C50A3CD30A6265BA854CA44356DE2E3F59DAA24AFA21C234DEBB6 + 77F78014659F642F527939EC8F7501C04093A6B9DA1C8E9D9C887A6DADADBBDA + F92F9448047230E823A247DBCB9C3B1980BB9548D3FF795F00300E601E42C84A + B83E6A2D2FB755ABB68F004021202479BDFF2610268BA1697D7570B4B8988F1B + D9008465D5FB566FDC19766AD97861A722064C08A13233FF9364938DA7CEE6AE + 5CF8E0E6E4CB1BACF70108020042F805072BCE5067F9397CCAAC0058B0AE679A + E5AA2ADA6B31590C0DE5AF5C787B63E2F34A87ABB32B74941B5C01B658E0E77C + 263C7A6DFABD5CA978174E467AE59702FE3A808EDB0E1FDE3793297DA5EB7476 + FC458FDDF9DC0B4DF770D0510E4592A04A320E383C68F1D58A896CB24517E682 + C4C0B03933AD9BA9E45ED1F817C5C5FC86D09F7F2814654D56771DD67B6A8CBE + E66EEBFEE01D0244A7A4DF743DC1420C146331885B561EC07CDCC80600041B5C + 7E3815BB09800170D853633C50DBA1FC9899C46D653E0270447A75390DC13C28 + D6D6460AEFBE03636E0ECC0CB62C9984B000409614EB89C823D4EC3B6484DDD5 + C683B51DCA58EA9219CF2DA9020C0096FCAB61206398B8D755364AA552C6B87A + F598393B6B17AB370A3F6DAF9CFBDE6D3C596577F9649856676DBB7A7B459D3C + 96BA64C6D7175500B8BCBA84858D956F650098DDDEC6779B9B886ADA845F5186 + B95098B79249C796B175F1B306AD982AAE3F5C57562EE54B3933757359C4D797 + 54004817F3F8243141A665F5EFFA7202D0E670A0BDCC896AD5869C53C61BFD87 + 881569C465B33F7DDF8108D7BBFC10CC98CBA7F175264EDBA6F1162CF1E6BEDD + D947470838D904103D0EA253008E806081F10398CF40F097383F87DF01982088 + C7F769302A0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000055A4944415448898D954B6C5C + 7715C67FE73E67C61E4F1D327E8574E238D449DA10CB71E82234381811218A94 + AA521C4805822201E2956C58540809B1A0152250B128128958A4A0102CF5B100 + A9D4A83560A9B203214A4CB14D1C7BE4C48F4C3C2F8FEFBD33F71E16895D3775 + D27CABEF48FF7B1EDF3DDFFF2FAC436F7D1D3F6E6E26E3BA88C83EE018705060 + 079054280193C010704E552FE4AA555E585CE47CBEC04690557222BD99EFA7D3 + 18C22320BF10E1B3D88E98990C66730B127351CF279C9F239C9E866AA0AABC01 + 7A12657C205FE007D7AF136E54E0447A3327D24D887004F8AD2412C9585F1F76 + CF7E241ED7BBBBD29515A98E8EE00D0EA2954A09F8AAAABEFA7AA1C0F766AFBF + EFACD95B5FC74FDBDA30448E08F207ABBD3D56FF8D6F62777622B67DBB8B3B58 + E3B68D95D986D3DD4D98CDBA9A2F3C8D7079A7EBBE9B0F432EAE78EF4DF076C7 + 76B6C5DC4740DEB1DADB9375CF7E1D1C475713AAEA867C35260864F9CC696A53 + 5325D0C70BB570FC5313932C45110046C67501392589443271FC19701C5DFD58 + 55EFC957631C4713C79F41128924C8A906D3E44B9B1AD7263044A45BE070ACAF + 0F2395E27D52DC87AF8F8D548A585F1F028745A4FB482AF55E01E0188E2376CF + FE0DD7EC4161F7EC07C711E0D80ED7A5D13401B08083662683C4E36B53AFE9FB + 211C9855D509C013D76D313399DDB5898983026CB16D96C2104BE06366730BAB + E3AE26B90F0F54F5CC8AD67E7D235C1E9B0B970934A43E57E02329B72E19733E + 6379C15A0716502F31F74195982C4741FF6065FAD2CBCB63F6A83F77A8A0C15E + 45EB6C9599A6476B6FB5B7A65EDB7533E09636C09887A55056CF4F3D802C938B + E14AEF8BC5D1F9B3A5B1A305F59F0732AB677C946CBD51CBD6C5FE38B4D53DC9 + DEAE45CE5DC10226C3F9B97D1F2251B01C05FD2F1647E77F53BCF4135FA2E7B6 + D66DE2D3AD9DBA3D99C6352D16BD32FFCC4D5B7F5FF8DF17AB61ED0086F6D1BF + FBAA010C85D3D3A8E7AD19E86EA8EA99C195994B67CB63477D899E7B7CF336BE + BBEB90EE69DCA2F5B68B6D98B4C61BF4C9AD1FD76FEFECD584E53E8CC8009638 + 06708EA0AAD591917B0ABFA2B597CE96AFD885C87F7E6BA291A733DD6A1AC686 + BD1C68D9ED1D6DDFA78874A17CD950D50B8ABEE10DBE495428AC69BFCEADB337 + C2E5FF8CFA730780CCA1D64E35443EE06C11E189B6FDFE531D87E35F78F8135E + 4BBC4111396EE4C210E0A4562AA5CAEF5E8620B8DBBD13F3E132450DBA003A92 + 694404E3CE952422DC4EDE1374373D1ABF9C1B5FB9569A753B9269802EE385F9 + 0550C681AF85D7A6A2E533A7D16271FDFFF0030D89D004806B5AF434EDF13FDF + 7EC837C58800FD645B8FDFDDF458EC726EDCFB6B76D855555CC30221619CCFE7 + 19C8E751D55754E9AF4D4D954AA77E8E3FF43651A50251D454972B62479205B8 + E99551948E5426FEB96DBDB527DA7A827D4D8FC52FE7C6BDC1ECB013DDD9EE45 + BF0C4AD604182C9568775C76BAEEBB8ABC42ADBA231C9FE80886FF21B5AB5737 + E9C2C22F5F7FA8B25074E43BAE699B494BCC300ABDAEF4AE785B7DB37D2537E1 + 0D66879D5565CB355F5E9BF9B7841A0D98000AFCB954225F0BE94EC473AEC8EF + 11FE441896A35BB7E2D6ADFCEC509B3D329DB276CEAEE4F774A65A58AE16AD48 + 23AFE897C3C1ECB0A3AA8888A82AE7AF5D90D9CA5215D567CDF53B76D1F338B7 + B444298A485BD68D46D3FC0B70DA0CA3FF4E6CB2196973FE16A91EBDB434FB50 + 3A564FB55631AF16664CE5B62CE59A2FE7AF5D908BB92CC00F8157EF692E8046 + D3E4A3779ECD5C4703D7BFB51744B623328048576BBCE1B6930D8B45BFCC7861 + 1E3FAC56811FA1FA33162B7ADF021FC0812DD0BF0B4CC341F80AC871602F5007 + CC006FA2FA2BE00A372BF0D2BFF83F511CC8E0F0A40BE10000000049454E44AE + 426082} + end> + end + item + Name = 'debug-stop-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000C0000000C080600000056755C + E7000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC200000EC20115284A800000003549444154285363187C + 80114A83414343C37F28130500C5E1EA98A0341C383838A0607480A181101800 + 0D070E1C40C1831E30300000F259100CE4B479240000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000F0000000F08060000003BD695 + 4A000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC200000EC20115284A800000003349444154384F631881 + 80114AC3414343C37F28130300E550D433416914E0E0E08081B101AC9A890543 + 543345A13DF200030300F2850BCDBBFD122B0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000001200000012080600000056CE8E + 57000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC200000EC20115284A800000003849444154384F631805 + F4038C501A05343434FC8732B102A03C863E26288D011C1C1CB0625C00A741A4 + 8251830803AA45FF28A01B6060000088DC0C8F7062AD650000000049454E44AE + 426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC200000EC20115284A800000004449444154484B631805 + A360F00346288D15343434FC8732F102A03A9CE610B4C0C1C101CAC30E0E1C38 + 80D70226284D33306A0141306A014140F38C360A46C1A0070C0C00E0540F1273 + 7641650000000049454E44AE426082} + end> + end + item + Name = 'debug-stop-filled_2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000C0000000C080600000056755C + E7000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA8640000003B49444154285363187C + 80114A8301E374CFFF50260AF89FB91DAE8E054AC341AF5908940501C5A7D640 + 5910C004A58906B4D740B2A7071D6060000070000B0DD728CF10000000004945 + 4E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000F0000000F08060000003BD695 + 4A000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA8640000003849444154384F631881 + 80114AC301E374CFFF502606F89FB91D453D56CDBD6621501E02149F5A83A199 + 094A930586A8668A427BE4010606000F1F0F0C35A6D1860000000049454E44AE + 426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000001200000012080600000056CE8E + 57000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA8640000003D49444154384F631805 + F4038C501A05304EF7FC0F656205FF33B763E8C36950AF590894870A8A4FADC1 + 6A101394A6188C1A4418502DFA4701DD0003030074500F0E0D58202C00000000 + 49454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA8640000004649444154484B631805 + A360F00346288D15304EF7FC0F65E205FF33B7E33487A005BD6621501E76507C + 6A0D5E0B98A034CDC0A80504C1A8050401CD33DA281805831E30300000A0AC0F + 12DDC86D7D0000000049454E44AE426082} + end> + end + item + Name = 'debug-breakpoint-filled-cancel-2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000C0000000C080600000056755C + E70000000473424954080808087C086488000001DA4944415428916D90BF6B53 + 511886DFEF3B27E6E6E6D74DAA37B92034A408498A5428748CE0229AA1751014 + 8A3A14171104AB858274918E22887F80438A2048DDA4D4BD2A36C4A99256ACB7 + 4842026D3549DBDCE41C0713A8D0677A8677787809006686E27864DB13869473 + C24E5C24C31FEAD5EB15DD6A2D6D1C1E3EBFE7EE1C6C763A00009A89C7F1C449 + DEF5E5722F0293538262310D00508ABC520907EF96CBF566F37261EB7BA3DAED + 422CA58627CCD1D137E6ED3B824D13038899D871B44C8F2465693D6B31BD5EF9 + D30407A49C0B4C4E0962FE37EC3370994AE1D4F878A1108D8E49002CEC449E62 + 31ADB5D600A0FB1C775F260B93391F97124C863F8C93E9025803001806008400 + 807BF57A054AFD9741443DBDB7774B7DFA780D9EB7AC6A554DCCE5622E13110F + 2CCB1243A72FB1E36822A27ECE67F5B5BCD8FBB0BAAA6BB5879EEBAEF83A4741 + C73016C49548F88BB5FDA320D32349B6AC41CE59B213695DABCDEACDCA2BD16E + FF22E6E986E75D176BAD56F76AD07C2B4BEB39B5BB7B8EB422B5FF9BBADF36B2 + 9EEBBE17ED7695804500379F6EFFDC2200484A8959FB0C0AD1E898C99C071026 + E6923F68865888FB00E601BC3C52EA061DBF4502884B090028E632910BE170B1 + E179D3CFDC9DFD85D4F0793FF3E3BF1B75B735D5CBCFC80000000049454E44AE + 426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000F0000000F08060000003BD695 + 4A0000000473424954080808087C086488000002794944415428917590CD4F13 + 711086DFF975775BDAED9680564A09EA69230970C08372501002074D30A82809 + 91E0C745F0E49F21A889D103474342A2565422E1C247D4044F7AD08380252C60 + 0C5F5AC8966DD98FF160DB18539FD3CC61DE796608006292847BF14A9C0C851A + 89A89F84380D4589C2B67FB1EBCE013CBC94CD4EDCF9FE031F2D0B7928264948 + 1C3DE28B2BCA90AFA2A2DFDFD24AB2AE03810060EFC3492E213B3D056779F979 + C6F3FA7A8D15EBC3DEDE9FE1D1C3D56854D507725DDD40F04A3720498C7F61A6 + CCF838B2EFDFBDDEB0EDCEE66F49989E07DF50BCB2518AC51E87AEDF20926510 + 110100E500001282245D8767187A492AB5B0ED385F3E59160411F5FB5B5AA9E8 + C6BF2022F8DBDA01E0769B1606004824C42959D773765C082856FBAAAB2142A1 + 86F8FE7E10C09E80A2441108E4D3A9A836919BEF49D32402CA0040C0B653B0ED + FFD93298EFB2EB7630B30566703AED2942EC34A82A04BBEE9C934C16F4F28ACC + CCEC7983EEECCCA033F2C4E4CDCD8BEEFA7A864DF35955587527EB6B9B2500C3 + D9E9A97392AE130951082122973D6F8657578EF1DADA983B96B8E294049BE488 + B628318F0358F37544B4C58869D62093A991741DB93341443E10755265FC05AF + 1809DEDA1A15BBA92901DC07B061B96E9FEFB395C1F948E40DADAED67A86A18B + 8307202211E4BE257BA679C1368C476267F72D09F1124092992F5DFD3AEF1000 + 9C0806F1B02A8EA82C77031810A1D071D2341FA7D31E9BE65359D36E49E00400 + 0250C740D7C4D6F62CE5DFAA0A81CBA5A568D3C2A892E520803245889D785875 + 64BFFF15809FCCDC434467008C00E82A0C17A3415531595FDB04E0A6E5BABDD7 + E6179C9E43519C2D2F6F07D0F31B9CE311FBE144345A0000000049454E44AE42 + 6082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000001200000012080600000056CE8E + 570000000473424954080808087C0864880000030A49444154388D95944F685C + 5514C67FE7BEF78637D39979D37192D6B1B1ED22C3B44E2C84A8A99408A5C55D + 8D7534D9DA48A1E0AA745124054B05B3F01F6E12A8766594621575D5A8AB801B + 41213185964E4A322DCD1F284E163343F2E6BDE36226898D0CEAB7BCF73BBFFB + 9D7B2E5768E9B4E771694F27BB6DFB451119010604BA147CA0044CA9EAC4838D + 8D8577969699AE56F9BB04E04267076F673249111917D71D8AF43D879DCF63D2 + 69080382E515FCD9191A73731B1A865742D5B18B0F97F47AA5B20D3AED797CF4 + 543629223F3BB95C6F746818934C6E1954554544001AF7CBD42627091F3DFA2C + 503D37BCB0A0BFD6EA005893FB9F266659D79C5CEE64ECCD339868949DDA0419 + CFC329F4E0CFCEF4CAFAFA72C1757FFBF2CF662A93B6EDA3E2BA43D1A161C4B6 + FF01D929934A117DAD0870E590EB26FA63B1E6BA888C44FAFA1E6BE7DF64E7F3 + 58D9EC132232782CBEAB09025EB2F387FE33A4D52A4E3E0F30D0E5445A89609F + 49A7FF1708409A355D5B29151A84A1A3AADAAEA8B577138801030004A1008D4D + 8F014AC1CA32D2462DDF4D5D5D2DEAD2D22954A74544C2951580BBFD298FABB9 + 6E6C60CA9F99ED893C7BA45DA0295D5D2D06D7BF2A12048E3971F215D39DFBC1 + BF733B631C67EC40D47DF9A0313D4661A231F7C746E37EB91DC825082C0D8288 + D66A13C14F3F16D76F7C7DCA729C1311D73D22C67C03C4ACD7535E25694CD828 + 958E3B851EC4757782F64B3C7E541289512D9717A9D7C765AD326F35FCB818F3 + 2DF041A87AD92AADAF33E879BF50AF67FDD9995ED3D189C964D8BE1E10630E8A + 977CA1B1581E95B54A59605C9037800F43D577CF97EE614F57AB5C7CB8A4EF67 + 9F3CC7DADAEFD56B9FBF6765B369279F6F8E3808255C59C6BF7D678F157162A2 + BA8848084480F96A1070AB5665EBD8E763512EEFDDCB61D74D20F26A6BCCFB5A + 23BE6B1C7B2CE2BA056359DF011F030F804F81B7D67CFF8BEDFC34FF94FE588C + 63F15D6CBE5880FE94C78164E2B818F33DF049A87AA91686C42DEB6C0B36F218 + A89DAEE6BA19ECC85C0052A1EAE8F9F97BDCAA56B9F1CC613CDB3E0B14FE0234 + C214ED676415240000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004994944415448899D965D6C54 + 5510C77F73EFDE7B77B71F9B366C97B492A5505A09264DFA61790274133E8284 + 8AA858906884408CC1EA83898F3E1963024FFA40247C8418500C8407400811AB + A82D251185044A49534B2B846CBBDBD2EDB6BB77C78776DB2E6DA1719EFE27F7 + DCF39FF9CFCC99234CB335F9797C160A11761C44A416D806AC12A8000A148680 + 4EA00538A1AAD7A3A9145F3C7AC477B138B39964417370011F0683184225C801 + 11D662D96286C398A18588D74193A3B80F1FE07677436A4C55B908FA114AC7A9 + 589C4FFAFA706723680E2EA0395882088DC061F1FB0BBC9108565D3DE2F3E993 + 5EE9C888A4DAAF91BC7C194D2486807755F5CCD9789C7DBD7D397BCD35F9797C + 5E5A8A21D228C8494F79B9377FCF5EACAA2AC4B2C6BD98B0496C5978C28BB16B + 6A707B7A1C8DC55F43B8F9BCE3DC8EB92E7F8E24A722F879E912167B9D4A9056 + 4F797941DE7BBBC0B6357BA0AACE8AB36BC6C664F8D037A4BBBA86401BE269B7 + 63F5DD4E063219008CB0E300B25FFCFE02FFF61D60DB9AFD5955E7C4D935B6AD + FEED3B10BFBF00647FA169D2545C34198121223502EBBC91084620408E144FC1 + D3D7462080371241609D88D43406025304C0366C5BACBAFA59CB6CBE66D5D583 + 6D0BB0ADC2712832CD49825566388CF87CFA2C596693288BC5E753331C86F1BE + A16CA2400C8165666821F391652E89B278E29C65D323F300F9E275FE8F2A33FA + 43BC0E02F930D5C186C2634D8E321F59A6E198AA6E06FECEF9961C45E1B14E63 + F7009DEEC307B5D970B3873C05C7359DDEC8F0702B96D586CFF7A38854ABAABA + 0F1F00748A087BCB4A89BA2E1EA0C5EDEEAED56452C4E77B962C839A4E6FCC5C + 6F6FCDB4B535102AB96EAE7E693D2525173499AC76BBBB3322F2B569DBBC1928 + AC46E49E019C602CA5A96BD7E6A3F94E86875BDDB6B60606E357B4F3DE61F7F2 + A5FECC3FDDEBC7AE5EFD4B7CBE7DA66D1FB51C7BA588FC041C379B830BFE4558 + E9DEEFA9B06B6AC07166246F9A2D2793F941FBEE77692C5685669A88C7976A6F + EF09371A3D64A8B67A34D32086716162FFFBE6DBC5C5F80DA39D546AA7DBD3E3 + D8D5D58269CE55A6212C2B22C19253DA1F3DC9E060A5C05B24124B2491386DB8 + E917458C738C17D12BAAFABB19735DD6161444113A341EDB9AEEEA12ABAA4AC4 + EB9D747BFA052722A5E4E5450804BED7FBBD2749242A45A409A831904F0113D8 + 08FC76361AC5BC954CB2C8B258EE756E83DCCCC4621BC6DADB1D310D8C60C9E4 + 959D938C9191D2D48D1B2FBBD1E82149244E03F5C006C00236A8EAAFE7FB07D8 + 7DA763BC1F4CE04059199B0385285229C20141D6625B734DB48CF87C1F78BCDE + 836672A45E44CE0301113154F598AAEEEA1D1D73B7DCBC35353201DE292AE2E3 + 922085E33998319381211DAFF3AF4CDB3A66394E9D18C605014BE155608F88BC + AEAA4750DDD53B3A9AC9210028320C9A8A8B680C04A8701C0472BD10C1E33858 + 8E5D2B86717142804DA8FE8288051C07B602475575F70C821C32D3E4B92772B0 + A7AC943742A115225C016C6013D0722EDA4F757E1E65B66D21F2AD886C51D583 + 9EA7110CB82E036EEE3B21EABA88D00DFC017C896ACB996894BD77EEB2C8EB70 + E68515A932C7D9AEAA47804BFF013A193A5A1E2FCA1E0000000049454E44AE42 + 6082} + end> + end + item + Name = 'debug-breakpoint-filled-ok-2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000C0000000C080600000056755C + E70000000473424954080808087C086488000001D649444154289185903D6813 + 611CC69FF7BD377797A3497A49734D84D2188B9816EA50AC20582729724333B8 + AB10151137B5E0C7E62262A91F8B8BB10EB1B14B4544C8E0E0078862831841A8 + 95880595EB22C991787779FF0E4D8AE0E06F7A8667F83D0F038042228E739635 + A90B31AB58830798AEF5751C67955CB7F4A9DD9E3FFD6DBDF5D9F30000AC108F + E3723A7522343A7A2B3C935798691200404AE657AB683D5A7EEF349BD3F6DA97 + 8D1F4100A594199E34C6C6968C2347156E18E8C138673C9D2691DD9112D5955C + 3F678B9546133C2CC46C7826AF30CE378B5D7A5964325027266C3B16DB2D0070 + C51A9C62A649444400405DFECEA15D39189C4FC5850067BA16C1FFD075788209 + 313D0CD1719C554899638AB2A5B4B5A39B03852DDFB0B73DF5C7F5DB9C5CB7E4 + 57ABE86A7488E82A11FDEA29F9D4797C2DFDFDE2D2B8BE4844F79443D1C8BBFE + AF755B64B3C90D831FBFE03D7F19E3DA8321163D1C403E9BFBFDE6FC42502B4B + A293CDE287B76C445551DE9E1918D0B4F9B591C4F563F9BE4248D35B57D4FDF7 + 57E4CFD6825F7B28214F35EED65EB72B753000480981B3561207A3D1A1393BB9 + FE648F7987011E807D203AD328D65EB52BF5CD5DFF3CA272442EEDE5FACEC44D + 4954768B1F5FF4CA00F0071A9DC065E17CCA9E0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000F0000000F08060000003BD695 + 4A0000000473424954080808087C086488000002744944415428917D925F4853 + 7114C7BFE777EFDDD6B636F1CF70CED61FCD4B8223E8A1124A42D3A887A2E88F + BD88150699BD448F3D444F4A4611F6A07BE9A91E92C05110E922B4263D144C9F + D4899B4510990BAEBBF7EEB7DD5F0F3A1BB1FA3C9D97F33D1FCE3904007E59C6 + FD400D0EBA5CCD44D44B8CB5C066F381F35591CFC70031BC689AAF6E7EFD864F + BA8E02E497658CEEDC21056CB641A9BABAD7DEDA468AAA020E07C0B3C8251661 + 4627905B5A7A6E5856775732A54F6732EBCD4FB707D1EC763F5042A1EBCE0B9D + 802C0BFC8D1064442230A726C7BE737EFAC842029A65411A0CD434CB7EFF63D7 + E52B448A02222200A00D008018235955612593EA96747A6E25979BFDACEB6044 + D46B6F6DA392138B2022D8DB3B00A0AFDDB31500201363871555DDB0139B01A5 + 6A29180473B9F605B25927800C83CDE683C35148A792DAC5783C32312A27A70C + 199CA7C1790514E57FD60505589CBF8E1EAAFA51D9A6D63191CFC77289C4A65E + 41B1549DE7D937918EFA73232DE52300F53300C366740210A2209607708D8862 + C5DA02888E62F16C7FDDEA90AED03661595DD249AF67DEAB698D308C46B9A181 + A785D13D909D1EFF69E94F1A58790B816A05F06E8CCF9DB96BBE7F9811BC5E58 + E284169E5993667403A7BCDE97B4BCDC944F2CCC7F3093B7072A53CF26AD2FA1 + 32387AF6B00A7724B770F58E39754F13D94621C4712D1CD78C680A0400079C4E + 3CAA0DC0A7289D6B76B6D677D13F15AF758C3B20BD0D51D5AD59B1329401DF2B + 8438A68DC47F19D1D4FA750A8B743386F36565D8EF72E2E32E275EF4ECAE6412 + 1B076001E042880E2D1C4F1B13A93F8FF3AFAB284783F05C6AF211D1A025C48D + 4C7866B5B811007E0388FF1D82994CBE860000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000001200000012080600000056CE8E + 570000000473424954080808087C0864880000031249444154388D95944D685C + 5514C77FF7BD37993793CE87D36452631305659CEA6413A2A655530804145142 + 5512A41BDB555137229808B162AD54A505573620DDA5126811175603426CA406 + 226D9849BA2903E66330937ED024938F7933EFDDE362D23A6D52D4DFEE9E7BCE + 8FFFE1C2556C72201261A021CE4396B54F297518E850D0245006B2C088889CCE + 954A331F2DE4195B5BA31A05F041BC9E77EBEAC24AA96F946DF7D4B43D83954C + 62C462A03DBCFC22E54C1A777ABA245A1FD32227FAFE5A90E1A5A57F44072211 + 4E3DD218564AFDE24B245A033DBD18E1F0DD061111A5940270E7E7581F1A42DF + BAF5AD2772A477664626D6370030871E6D26689A677C894457F0ED43188100F7 + 7347644422F8522D9433E956E538F9946D5F3E7BBB92CA8859D65E65DB3D819E + 5E94656D91DC8F118D1278FD0D80637B6C3BD41E0C56EA4AA9C3356D6DF7ACF3 + 6F58C9246663E34EA554F70B3B6A2B2260BF95DCF39F259BABE24B26013A9A7C + 359B8960B7118BFD2F1180AACC34DD4D29E0A2B54F44E44143DBDE795AA1C8DF + 6C8F136EDE850564BDC57C8BD9D0A01E24B9F36AF7D44BCE6F579EAA7BE75C57 + 6DB73F643D660023E574663B87076C9B52445FBA928ABF76F4A568E7CD90F51D + 8869089C76A7A74AEEFC5C756F09780B38BA4DC2F13FBCFCABFDF664C742AD0C + 0B7C225A4E9A6F46234B61C3D06E36DBE94BB580DFEFAC4AE9E09952FAC2B477 + E3E293E64EF129733FA0446462D25B7CA5AF38BA2F272BE7108E8B961385C134 + 66D671E88E442EB1B1D158CEA45B95CF7AEF2766873EAF991AFEDDCDBD58C2EB + 6F357799164670D2CBBFFC6171F4B959BD7C5EE00BD172BC3098C6B998C39C2D + 97C9975D3A433B7E548E9377AF5D3BE8E4E67E1E7BC2BE5AF0AB2FA7BCEB0F17 + 74B16FC52B9EFDAC3CFEEC8C5EFE1E3829229F5624F3009800578B45C6D7D648 + D9F6E57AD33C5F57701F5F09981393CD81318D7C95D637EA47BC3FD797707E00 + BE162D1FAF564960F31BA93EB40783246C3FCB7E83D1F79FC6DC1D7ADE54C605 + C0064E8996FED5C134C52AC916D116EA6DA2037BB1E2B51D025D5A64607D3083 + F3EBFC96D6BF01A1D4537ADE7C27F00000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000049C494441544889A5955B6C54 + 551486BF754E67CECCB4656C4B2D17752897023E1052205E62A0A6818A186D40 + 136E311A24F2A45C1289C60421043526680431265E5ED4800205A2D1349428A2 + 95400B2897A65C0A726D4A99999E5E4ECFCC39CB0798D2620B44FEA77F9DBDF7 + BFD6FAF7DA39422F94E564B3BAA888986521229380B9C05481D140AE820D9C02 + F6029B55B5AE3595E2FD9616BE4B24E90F92214B0B07F37A6121865002F2A108 + 330804C58CC5308B8620210B75BAF19AAFE09D3B07295755A9065D86D2B83591 + E48D4B97F0FA4BB0B470304B0BEF47844AE02B89447243E5E504264F41C261BD + B52AEDEA92D4C1033835356867A70DBCACAA3B762593BC76F1529FBD66594E36 + EF0E1B86215229C896ACE2E250CEAB4B088C1D8B0402D7ABB8811E1E0890151B + 41B0B414EFFC794B13C9390847C7595643C2F338DCE5DCECE0D751231911B24A + 40F6671517E7662F7A058241CD08AA6ABF3C13E3BAD2F1C5E7A49B9A6CD04792 + 69AF71DAC953C47D1F0023665980AC97482437B2602104839A39ACAA03F24C4C + 30A891050B9148241764FD20D3647E7E5E4F078688940A5484CACB31A251FA58 + 711BDE3B36A25142E5E5085488486965347A3301309760500293A7F43B66778B + C0E429100C0A3077B46591679A3D09A69AB118120EEB9D6CE9CFA20C977058CD + 580CAEBF1B86DF181043608C593484BBB165208B32FC86CE98DE9D65013912B2 + EEC99E0C2464219003375F709642BB3ADDD14CBB99CD77C3FFB3E674A3C2914B + F70548AD7B9C82B081019CF29AAF5CAFE01E2DF2EDB6BFE343F3677D362D5FE2 + 43B3571979A10959C05EEFDCB949EA3822E1F0FFF7C7F78F25278E7B6A936BB7 + 5417F3811AB21CA5C40036E3A63475E0C04047BB81C3B7D356D51357B5AB6243 + 2CD1FCE328635DCA94E5AABA4755171BAA5AA768B553B31B3F99E496F1EB0466 + AB6A99AAEEEBF5BDF798365CD3AE191FA50E36EFA469AD6BE84AE017452BF1FD + 4EA3D5F300966967A7DDF9CDD7E0BA196F3B5DBC3935E9B3D55FBA47DA4FFBF1 + 6781DA5BEEE0645C9D8A4FDDFACB3BD38DAB5DFC37517E039EC3D38EB68D8730 + 139EC78CDCDC5684464D269E4F373549A0A4A4CB779CD9D5C685DDEF74EF2BAB + 499F5D71C64FEC1A6F166C2B90F09322325C554FC7D599BEC9ADBBB82575E26D + 47BD55C0EFC033EAF9EDF6C643B8B597318F390E0F06028C0F590D2047FD4462 + A65B5F77CC6B6E5EFB43FA74FA8F02778D2F2CBAA8F6B0337E62FBC3C6E0ADF9 + 6A8D8CABF3E226B7FEFC96F4F1B71CF5D600B5C02CF57CDBDE504FF79F970130 + 016A6C9BE2A0C538CB6A50A48A54AACC6F697921126FAFFAEB81D0CE6B39E604 + 44E65DF0DB8A4E7BF1EDAAFED6EF530DC92AEFE44A076F2D7000785A7DBFCDDE + 78A847BC2781023FD93689B4476924DC6A897C2BD058D0E18DE90E18A7F68F0C + EF509808CCBBA8ED057BBC7F7E3EEE5F5D9146DF03EA8099EAF9097BE321BA6B + FBFED1845B906718CCCFCFA3321A256A9A74050D5E5AF2106D059685B0CD4066 + 2ABA4F9027807A6086FA7EDCFEB8BE4FE50326E80FC6D06CB2D73E4630628544 + A4CA10A3C2573D0C3A1D4F5BFBABBC8F457782B6A7F04E5C23F8E8D0B4916556 + 293AC8575DECAB5EEDF8E4F080E200FF02578F8EB554DFD1E30000000049454E + 44AE426082} + end> + end + item + Name = 'unused\button-arrow-right' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000C0000000C080600000056755C + E70000000473424954080808087C086488000001FD4944415428914D8E3F6C12 + 711886DFEF383862731CAD182A39A00DEAA2256A2226EA6013063B501D8C3A19 + 63BA76B089244D5CFCD386C866DC9AD4EE76210E9D5A5A1BA3030B2903DA5834 + 6005831C58E915F9FDF81CAC09CFFCE67D1E0200F7890BF0DD7C1450BDFEE4B0 + EE9A340DCDB46C61ED34EC7529BAE9D6DA52AEB5BA0880FF8DC3739B57E20BF9 + FABB9225C521524AF9B9DE96F75F17FF8CA43E4C0F2566000030673381F842BE + DE6877A494520A2144A569CBFCEE2F2984105D21C474665B8CA4DE4F68A367A1 + A8863FF9381E1A34DC2A008088C8A9109EAE9551A8ED9342444FE221F268EABC + 1EBB01655877252E06756666060066E6A347547E3919C1B36C19856A1B1EB78A + F18837EA0A9C0AABA6A1050120B551A1ADDA3EC04C872AEC7504EE2D7FC2EAD4 + 184C4303395453B56C6111916FF66A10FD881EE3E14A0977CFEB30DC2A9AB600 + 989BCA4EC35EFF621DA03F49F498932B25C44C1DB7C77C2C7A8C8D52AB2A9AD5 + A222BBDDF45CB62CB9EF7DBB6E532CA8E34ED4C700F02A5743A5D549B7B7B2D2 + 015276AB83A79B5FADCEB54B219DDC4E071D1B70E28C7F0092418BB91A3DDFAC + 2C1F548AC94626CD041086120FE0B97C6BC2A339E6C723DEA86968B06C81B7A5 + 56B5D2EAA43BDF3EBEF8B134D3937B3F41FF33B4D173D063D7E13A7E324CAA33 + 088625ACEFC576212B7FE7DE003D0900F80BAE48FD54557DC673000000004945 + 4E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000F0000000F08060000003BD695 + 4A0000000473424954080808087C086488000002CA4944415428916D935D685B + 0514C77FE7DE9BDCE6B626596217B61AD6D2AD8B51703A1187208AB36F21430A + 22CC97220ADA896EF445C137612F4EFC1828DDC3044187BA29D4F445F46550B5 + CA86D6B9D6B08F5A96AE5B92AED9CDCDC7BD393EB47505FD3DFD391CCE1FCEFF + 1C01C0B488EF7F81E8E3075386698D01B948C8181244EAEDA0081454F503F7DC + D462F99B77D0A60B806086D8FAFC519CCC63233DB63931BA3715CD6793A46336 + 00D76A2D262F563831B3E4AE78FEABADD2FCC9A589313AF555CCF8F04BDCF548 + 6E6420D1F5D9A9E7325DC3BBB668BCCB420444206A9B3CDCD7433E9B0C4F2FD4 + F25523BA68DD9D3E57FFED3BD8F1F6D9D4FDEFCE542E97DD6003DFF7FDB6EF07 + 635FCF07C51B77EAA55B5EF0D0FBBFDEEE3FFAE380DDBF07434CEB95D1BDA958 + 3A662B9B3044C8DD9B64F4AB792E571B006CED09F3F2A3DB22C0EBDD7B863180 + 5C3E9B0440D7D9D04F0DC6F4CD27D38C7E39CF956A0355D55C268121920B6F1F + C28A84CCA174CCE65623903317CAFC1FFD5BBA38786A8E4F9FDD2D3BE2B6261C + EB1E2F643B96080640A04AAD19ACB72B20FFEA8E2ACD40F1DA9DB588044455AC + 7A2B28966AAD6C5F34AC87F66DFB8FEB4F7FD7E48BDFCB7C323244A637A22B8D + 402A75BFA49D8E6B0085C98B95F5896B6CE89F176B323E75858F0FEC249B7210 + 1129CC55083A5A682F5FC250D50F276696DCEBB7DBB2D9B1A3CA8999EB7C7460 + 906CCA01A0EAF91C9F2EB5143DE6CEFE80194AF6AD767A074BD30BB5FCFE9D71 + BAC3E6465492CB24E8ED0EA98848D5F379F1F45F14CBDE787361F6DB95A9E398 + 5EF1179CCCBEF35523BA78E6426538648A958ED91209190AB0D208E4F41F3779 + 6DF252AB58F6C6FDD51BEF2D9F3C42C7ABADADD470A2249F7903E7BE27064438 + 6C88E4128ED5270215D75F0A540B0AC79A5767E76E7EFE167EF5DAFA636CC21E + 7890EE079E26BC7D1712B21D01D1C077DBCB577167BFC7FBF32CE89D43FC0738 + FB47E69F59679F0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000001200000012080600000056CE8E + 570000000473424954080808087C0864880000036749444154388D7D945D689B + 6514C77FE7CDC7FB9AE46DBB645DBA98B569BB41D785956EA3E09593E1AC9456 + D944E6A05E541036640C0471378263D8EA144570821745E7C574B06662457751 + 3A14644CA65152A85D1952D7C6746DD335097993BEC9E345D32F57FCC373F11C + 9EF3E37F38CF394245CE4098C0F173188D07FC22F20AD00DEC4330512C027160 + 4829F5A575EF4E6EFEDA3BD80B33ABE90880DEB09F60DF8768BAB74F44DEEF08 + FBAA7BF60688D67930DD0E162D9BDF6672C4C6E649A47249E054D9CA7E9B1A3C + 4B612AB1027206C284CE7C816678FBB77B5C6F0C744638DC588D8800A0945252 + B99495223636CFDB2353E55CB174A664653F4D7EFC32F6C20C8EDADE01DCB50D + 7DDBBDAE77AF9C68E140C8B70601582E2BD2795B3C6E072242EB0E0F1DBB7C32 + 3C9EEE2C69AE5BAE60D3BDDCAFDFA3198DED7E11B938D019A1C96FF05F7DFDC7 + 9CBCF4D538A94C712D76F07193379F0C6BC02746F321973BDC8A26227D1D615F + CDE1C6EA47200027DB6A557BC847EFD50952D975D889B65A1A6A8C661179CEB3 + FF081AD0DDB337B0A99C8DD204FA9F89A8B6907713CCA9095D2DDB00BAF59DBB + D1108946EB3C00A4F336F71F16369DE9A5A224334579ED899DD4992E7AAF4E30 + 5B8145835E10A2A27B7082324DB703A594FAE0A7FB72E5F7075B3ADBA88B3F4E + F3DEB31165EA0E014C00278AC545CB0E348821178E46B87034B22969B5FD965D + E6D4F549B285126F1DA94744249DB741B1885268403C3E93FB5F07965DE6F4F5 + 49328512832FECC1D41D00C4933980B85A2EA029880D8DCD53566A4B48B1A438 + FDCD244B851283C7F760EACE35F877E30B2854AC38FD271A4A5D4EA472C9D8D8 + FC96A06B89397968AD40AA0CE75AFCB3DBFF90CA16E3286EE412A3388CA6F665 + 973F74F7E7A9CC8B1DBB7C12AAD23781F6053DAAA7C52F3E7D1DF2C3449AF323 + 535659712C3F797B66E9E6651C85BFE2780F764DD8E29A1B1E4F7756E90E690D + 7AD036FC2BB75393D5722EDD4A727E64CAB2953A59B232A30F3E7F9DB295AD4C + 7F7D941D7D1FE1307C4F03971A6A8CA6AE966D44835E4CDD413A6F134F66191E + 4F339B2DC681574BF9CC9DD9C1B314FE1E032A6B04C0E90F1138760EA3F9904B + 449E677D1F55A148B3B28F624AA91BF9C95FCA0B43FDD8E9E49AEB47E6C25D1F + C51B7D0A77DD6E447F6CE5850255C8534CDE259718A55871B151FF0252F36B0B + 710DF0450000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004E049444154488995954B4C54 + 6718869FEF9C99016450065011671001AD685D68B092CAA2AD57A25865D19569 + 52EBB5B65DB431EDA62E4CAC6D5DD4DEEFEDC6269A4A22D1C6B4266AE235B5D4 + D60B6205AA34A803E23817CECC3067E6EB0206010793BEABF7E4FDF3FEDFF7FE + DFFF1F6118246B1CF9CBB69057D38018668E88AC06EA816A042FE0020228ADC0 + 4955DD0F5C4B46EE73FFC85EACBF8E311A9226CE49654C7AF1039C853E139197 + 811D225232D9EDD479256EBC135CB84C8340D4A6B5C7E2CA5D4BFA93A9247018 + D8AEAAED7D7FFEC2BD83BB209918B98173D2748A377D8AE12EF408FC082CAF29 + 1DCFB69A292CF4E5A9213C827B962D072EF5F0ED85BB84E3C908B001F8C9BA76 + 9AEE7D6F43D206C094AC5C8A377F86E929F688703CDB61D4EE5C3A8D779EF351 + 9A9F8D00320886F15C97C902AF5BD7CE2992AB7ECBD515EE6F006E3B26FA2E1A + 59B9C4FE3E3FB041C1CAD718F7C4D3A60807B34DA3F6ABB5955A37D3A369C3B4 + 699A27158C61DF79590E5935AB8096EEA8DC0CC4EA043995E59B7D2BD6F61BC9 + 603746DEC20680975196EF585CAA8BA68D57001DC470FE7DB35F3634DE906822 + 39427399A27B57966B45618E03F84E90ECFC659B013030CC1C60474DE9785E98 + 5BC4E82886F3A2714ECE7586D872A85D62766A5464063B97942222E5886CCA9E + 3E1F47A1174344EA45A4645BCD1486759E11ABAB0AF4BD15659CEF0CB1F5503B + 315B47E80B7D79544F752BB0114324A7AA1603A89FEC76EA425F9E668A65345F + 33BB5077AF28E36C6788579ADA2496480D6980AEAE2A00980D52E12AAEC000AA + E795B83124732C9978C39C22DE5F51C6995B21B636B549CCD621ADDA9B373818 + 549BB91E1C8878BD135C436D367785397D3324A4E352CDCC815913C771EA6648 + B635B5E9E76B2AC976080FBDC40BE0005C2ED3201D457357443E3E7BFBB16731 + 0A7AAE33CC55BF25F34B7275D04B50750D6CA0FAE041D42E4AB7B8E9A9296C5C + 503C740F5435230FC76D5E3A7883966E8B4FEA2B985F92AB2222016BE8997800 + 8A01B4B6F658FFA76242719BF58D03E61FD597B3B8327F48BBFED0AB15050338 + 79D96F49AF653F7E4607118E27D9D07883CB772D3E5A55CED24ACF08FD444710 + C052D50B76D08FA1AA07FAED54F2C0A59E314733CD23FD29D637FECD65BFC5C7 + F5E52CA9CC1F31DAA1B84D534B2F0CBCB0E1D83F17318016E0F03717FCF82389 + C78EE9CEE39D72C56FB1775539CB660C543E7CDD67E7EE108825538AEE492562 + 44AF9FC74846EEA3B03D1CB7236FFCDC41DC4E8D19CF9BB553F9E2F90A96CFF0 + 3CA29DE808CA0FCD7E41F56BE062E48FA368BC0FD30EF590FBE4B3011169EF0A + F737B474476571453E4EF3D12371BB4CCA3CD919CD5F3FDC4E7F4A2F00EB527D + C144CFBEB7D0441C33E1EFC059E4C335A5A205E4CECD40BCEE58DB037366518E + 7827648D19978848389E940FCFDC965D27FE9541F37AD554B067FF0E12B76F0C + 440880E964D2BADDE454D522F00CF0AD88942F98EAD6FAAA02AABD79E95FA606 + A2B6B4F6589CEC08D2D4D24B20964C0DC6B25D3565F536BE4BE4F72343DD3DCC + C174E0A97B95F18B5E00241B61B3201B81AA8C072258288715F6805E4CF505B9 + 777017D16BA7462D1B0557E95CF2EBB691336D2E18A6886A2522D58017C18512 + 005A81DF148DA4123122CD4709FEFA25292B94A18E31E028F49153B508D7E40A + 4C77FE237AA2B78B78E715A2D7CFA1F1BEB16CF80F8BB956EF104DEA62000000 + 0049454E44AE426082} + end> + end + item + Name = 'symbol-arrow-right' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000C0000000C080600000056755C + E70000000473424954080808087C0864880000012A4944415428918D90BD4AC3 + 601486DF938626E50B942E523B0444448790AD38375670E94D2882DE8277E028 + 25834311091DACE0CF621615EA22158A585CA43A44045383B4919686188C8B0E + C297E23B1D38CFC3F949811331378DACB10A2242F4FEF2A797E2094AB182DCF2 + BAC9F4722F741F5F23CF992C7C0543307DA92DC8ACC6B4D26DE876DDC87B9E20 + 8C06183F5C8F9866D882CCF698566A87EE532FF21C50666E91E70000D2857964 + 57360B0251238E3E37DEEA5BF734B3DDBA8CE318004044E0D500A6002863A7B3 + 207EB48E8DA40982AC80E9E50C804300BB41F726A024982486FCDA8E2CA95A03 + 40CD6F5AA77DDBE41FFD034B92AA1D00B4EF37AD93BE6D0200449EA0142B9054 + AD8A38AEFB57D6D12F0C24BC950411E9FCECC5B0737E3738AB266DFDBF7C0339 + D868BB155331090000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000F0000000F08060000003BD695 + 4A0000000473424954080808087C0864880000017C4944415428919591BD4B23 + 4118879FD9896E765663F404C5AF4341FC38826099228288FE2107825A68251C + DA098A8D5859585B6A17158413A328D85F142C0D7E8021C59E590C3B3A57DCA1 + A0ECE6FCC10B03F33EF3BCC32B8988D39746F5A7D1BF8B98A7F2877B19060A5B + D136B7D5AEFAD2D36A70E4D4CF1F7D78C00AD59A178C0E4AC058CD97F695D6C9 + 0D64B2E5FFCC3C6B2A850BAD52A33B42CA79E9247AD560E6D0FF95C354CA5560 + 40976EA8142E023735BA2D64EC877412DDEA5BE6C8CFE7304F65A4AC6BC2AA75 + 42EBE5B14450BA0BE2FDE91D21C4A274121D6A2073ECE77388EED5F35900630C + 4208C2CEC618807A6001582AE773CB31A0216AF47749FEFBAAC6928878CF7055 + C2FE9AA271622A01EC0359ED3DACDC6FCE20AA825D295ABEAFD75B76DD1E9803 + ED3D2CDD6F4EA38B85883DBF81AE65BB59043FB5577C058170B3A889D3B1B0AB + 64DCCD0267DA2B2EFE05AF5F7B62A15A4B62D92A6930D9E7476FED3D18690670 + 87C6893577E25F9E10DC5E45B57E3E7F00D566901835E6561E0000000049454E + 44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000001200000012080600000056CE8E + 570000000473424954080808087C086488000001AF49444154388DA5D03D4C53 + 6114C6F1FF69EFBDC436985BE8CD0D0B171848C428030983280ED8C5C155342C + 86383210128D8303848551D8D9900906B4511107C0DDC168426C1CFC00A242D3 + 0225B6D2E3D2129026EF6D3CF3F3FEDEE79C288611CB21D6D58F9D0C28ED7C03 + D59AB9A8096ABA3546D3CD918BF1EE94637B6D7B850FAB35B188098AC61300F7 + 8095F8E51B2DDEE00444CEFE6F6C24B643ACEBFA8A88F420F2C8F1DB176DAF6D + FFDF6646A8B495E128FF53CF5DB8FA5CA01778E0F81D8BB6171C9CC48C104071 + 73A382F53D13E40AC298E3772CD85E50A862A1A02A563E3C283774F62E4544FA + 8151DB6F5FB09341A1F07115697DFC22088B0148CC45441C601688A96A2AB736 + B76B45E289CFF54067609111CBF5C7ADA3BD5FA1D703883636A38A27226F80F7 + 2893C5ED0C520FE2A6EEE30E0C2781D7C086C2507EFDE99F6C7A3AFCB12B4833 + C8324286130810AE51054900CB887C011DCCADCD97B2E927C719CB849CBF7617 + 7760D8055E02DF51BD935B3F8D84821A5A2F014C013F54F576FEED7CB1BA4E5D + 5069E72B8A3E54E570FFDDABDFD9F44CCD9CF94622382D9D0014B73E81968D4F + FE6BFE025BC29F639E5D00E30000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000027F494441544889D594CD4B54 + 6114C67FE7CECCBDE31D35F3A329334D4D2A722442172D2A1A548892562D4222 + 4C28C8A8A4BD41FB52176DAABF40C9C459A6819153042586A2AEA240C8A22167 + D2593833A7C5A8699A7ACD4DCFEA7DE19CE7771EDE0F170EE5CACAC7B06C1081 + E4FC86F5E2C43CA7EE1A39C1260049CE46F4CBA316E6BF7E5CB7C77002C8AC39 + 07C279843E5766AEBDFBEA433CBB4AB70FB010D846A41EE4992B2B2F632388CB + 89BD595881B9A76214F884C82DD06AC3CAE8F1058289F84498D4EC8F7F03CC8D + BFC253B01F8FBFEC83089F515A81638699D1E30B9C4EC6275EAF823802A0CADC + D820664109A6BF6C049842A415386A78EC1E5F20988C4FAE4CE20CB00CE22928 + C6E32F1F26A5D362C86D202096B7D757194CC627879620CE014B909758854770 + E717BD53F826227704392C96B7D7AE0CA6169348EED99B5B6200886963D73460 + 888188B420D289EA53556D4CC4BE27A69FDCC0BDE364E3DDF4508A88B0D9F5E2 + FE8F649322720148B8B3F22E67563724DCAADAB656C366D66B49D3052710FCC0 + 945B445CDB9140537A500C194000A516984ACE4C23E6DE43EB4EB49EBC2555E4 + 36B482C801E005E94B53ABE8786CA88B48A8DDD967B75C5671007F732786E52B + 071D002CA016188B0E7511093D001CFF450BE62555F89B3B302CBB14B41FC10B + D40163D1F06F7300F796CC9BDA312C5F09D08F880DD42B3A1A1B5A69EE186016 + 07F05F69C7B07CFB807E201BA847198985BB8984DA57F53802145CBC8758BE22 + 6000D89936D7E168B89B48DFFD357B1C01C4E541E03A90A7293D03BC8FBDE926 + D2B77AF245393AE4543C8A429BA2C755F4EDCFD14122A10EE0EF8FCFD13575E7 + 16927DEA1200C9789499E78F21997062F11FEA176DA105C01AE253F600000000 + 49454E44AE426082} + end> + end + item + Name = 'debug-breakpoint-filled-ok2-symbol-arrow-right' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000C0000000C080600000056755C + E7000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA864000001FB494441542853636400 + 8214612186523131330E1696726631714B460EF6B57F5FBF9EF7FFEB57911B3F + 7E1CC97EFCE4FB9D5FBF404A1918538484186A2525D258B5B42673FA0730330A + 0ABE028ABB1A5C16CE52FDF37ED5DCF5D5B6AFBF7C99E17DF7DE9B177FFE3030 + 95888B99811473C52730330135030127101B2AFD7FD77E9B55B0392AA47B8F08 + 1B5B64899828488E81899385250068F2664626A64340FE654646C6E7401CB55E + 9F8197F5EBBBF0278CDCDD2901CD67BCF9F9C5411A189F383BF3F21415FD0069 + 062A64FAFFFF3F581C08FE01D93FF52E0949022556B1FFF89275B3C1E512A362 + E7C97D504520550CD8D8402006C43CDF1F5ED2607C64662AC6575BF785919999 + 0928F80F88E1AA80E097FE25213620BD9AE1FFBF595F15DBFF3201832EF9F7F9 + F32F81A65D024A9C04D21940BC07C80E6BB9F2811B48AF04DA35E7BB623B1750 + FC19B3271FEF5981870FFC59949454DE70315554FD3A74869F897DE18E7B4C17 + 17FC525C048CA845DF14DB39811EBAF565FEE5738C2A6C6C0C2B15154444D8D9 + 27DC5511EE4D0CE0096765E798F4E77E4903E3FF7F7BBE29767CFBC7F0EFC5E7 + 7957CEFCD8F58081F9DDDFBF0C9B3E7EFC26C0C8B84EE7D36FD6E77CCCEB2F4B + B1BAFEF97B7BF52FA91DB240673CFA3C1FA21804C0490305B03131F0D6983371 + A809B7029DB1E5EBFCAB47618A191818180080CDDA8F11136B5D000000004945 + 4E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000F0000000F08060000003BD695 + 4A000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA864000002AF49444154384F95925F + 4853511CC7CF39F7DEFDF1DA94A5622D6C57724AA1038366660DCA0AB21022A8 + 1E2C320A6CA20F8A09216A49A4A251BE950545943D540F6AF5E210B5586651DB + 430F414CD324021B7AB7DDEBB673FA9D4D22A2977EF0E5F7BD7F3EE7F73DF71E + 8CA0368822EAB76D443B65B91C63ECC184B891C1908562B10996480C23C4025F + 747DBC696111BD8F4639922CCCC1278A5DB0190C7D426EAEC7B8AF124B858508 + 994C13A73ECBE7FC9AE9D8ABC9CBB7E2C160834669CFE9D9B9A82F1249C2844F + E4A05452529FDED08825A79301C8E099F7C30AFE06BD72D79EF61663C5EE9B26 + 429A0736D9503A21299847E513D34E9C44589210C44E6E05DA8EC0F67082C6F4 + 6A88ED2A53CE34490E477F8E24B98F6766A66078A906A2CE2351FC0AD7F3A01F + 200DE40435FB4BD5285BD58F80AF2877B5B6407F7B6769091A8709B9087B2C00 + EF608C71E583CF5DF3D7C18BB36DEE30A5942FB0D75D73B769AA604B323756BA + DF3472032FF2A8DCFED3F30EB50E74097425D85A7695AF90F11FB28204503C7B + E870369EDDB6D520D79E4D8845457C693E2E3962AD92D7995555D47ECD6701FF + 0234426D5D43510977F0C92EDD3B360EB92620DE14C80BF70E411F00758297F2 + 3AC7202E1E05FF922ADDFD00B6304A2F08D51996B90C553D8834ED80E870E484 + 98D6D6B3EAF32DD1E87307B14E3B67CC8C18E551D8B8172BBD5D1116EB6094B5 + AB8381302E359BD123FB66331C8087A2A2B0C962EBD1C692D0A89188C3EC53FD + 7DC1248FC0C4D700B6A96CD5031FEE9E7ADBBFA279E790B0188FA3994824EE4E + 971F9B97978935F83DFF9DDD7C63C1423A4541FA88F53C1DD97BBBC3285607E0 + 03009739C82BF53FA0F891E327C725A7A1E9FC34F4EC7C411611C85378E407AD + 07B04E1DF487B4B114C8EB37FC7749FBF390A5B638073E5A1F65AC213218F8F9 + 27881042BF0085F2133A909759650000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000001200000012080600000056CE8E + 57000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA864000003AA49444154384FA5547D + 4C5357143FF7DED7D7D752FA5A04462AC38D2D5066D564C1441683498DD9FED8 + 342E33924517F12399C36CD9B2C48F0DA6CC252CBA25DB9239A35942302E46D8 + 020211F7A12011241A2CCA6601030594928920B585F6BDBEEBB9B518C8F69FBF + E4977BDF39E7FEDE39F79E7B0924F1B6AA42F97399E094A4D708213BD0548CCE + E7398086F301640BE7FCA7D1586CE8C05810DAC261B1EC2912429F6666C09EF4 + 743B0A1C238AB2592E5C0992DB0D342D0DC088C3D560F4B7E070B07A6D7B9D9B + 1B866670FEFDBE7B63FCCCD454424480884CBE5DEC12227F98F2F25EB56C2E01 + 6AB727DD0098057FD3EFF86534C656E6B399374E9EAB586D4C4CAC8873BEB764 + 68887745661271F4732C47642244ACA5DB1788CCA13EFFA18F02EFF21BD6E66D + 1BBE6AA3AA3AC008293D9495F5A424044D93A422518EC8844852D2BC10128103 + 9D9EC956CA8DEE3B9ADCFCF1862F5AD0AC14288A6D95D59A88A16263E5C2C2FF + CD641E543385C3573C93ED8CF3DE6BDCD1F0C1FA83F5B836B3231249045064AE + E42EE8C37110791BF90F72081940F623E77C410B858D6D9EC91A02FC76AF9AD3 + F8DE5B954F5410E4DD1D47964DE7E66B2693442675D0B10C922583CC708CC421 + 2E82C43C8CF31092287618D7198D18E424BAAC7816EB02FB8B1E9017AA3A13C1 + CF80CA07E365874860E92B56EBD6AD5C5EBE82A151349F802939EAE2F8712FC4 + 291848F1D3F8729F330D6D7FE2FCA6C5F975D57D555F2BF6A854F3F574E0D88D + BC8EBC86BC8114B6266403B233F9BD7BD79DD42C14B980F3BF6D8B7EA89850F5 + BFB0DB18C52BD0A4DFBA99A78F0CBF884E37B200E9421E448ABF7A91B9C8DA3D + 83B6DAAEB0DC80CDD39F9A5DB377DC3EDD8EEB8F72837FC33639D4293BA5863E + 30E03579960198CDD1473CB6E5E798AFF956FCDFD67CB6286C22EC7CD9A0ED54 + 7B48889080C375E6C3A03CF83B7038812255A1E33E20C5292950BD248760431D + C38EDD69F67A7737666B273E73FAEB0887FE7B25F5FB5EFFEE72BA7FC624CA1C + 73BA6ACBEECAFE46CCE45714F95288445B478005340D829A0EDE545B13894683 + 7A5FDF96E8E8F0F9B69795DE9099BCEF78A7E0DCD4FD358751843A5C673FBA2B + F789726BF10C2AE74404C44941EFEC2C74E0B3E05194EB198CD5A587F497A62D + ACAB3BC7D26300DFC859A83AE6B8D4326D1EB988E1A731938A47F344049EBE47 + 02E243DC9D3CC50C0FF14E5CFC6429B0ECD42246680DBA32903FA2C87E21323B + 4F446081D07F90A180A3BC08A4CC9462DC9375F80E95478EF740F4D242110080 + C7C5077E75049C6E650000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA8640000056349444154484BAD5669 + 6C5455143EF7BDD9BBC0B4569658CB102C96068B856A1BA5565986C59211D1A0 + 98882C828A82901848342029584894282E800B828A80E200215491FEC0105B7E + 504B8552266C055A68EA74A69D763A9D99F7AEDF99764A658924FA2527F7BBE7 + DE7BCEB9E79E776604F541516202BD3B60006598CD2484180DD54C4821360DC3 + 9824890218CF427E83EC94521EF74622B4AEB99976FB5BA1BA19BD0E96A4DD45 + 8BD3D248119409F506216822194D42CDC82075C040121633C95057446BBAB62F + 527FA956897439A5241F915C4A923C3FC2C15B8D8DA4F5D88B23E6808D2F49BB + 1B51930BD3ADC2664BB28C1B47C6317924AC5604DE8BCD792753CA2352CC591A + AC99E72ADBB24B068339D0BF84DBECDDDFDA4A6F343476EFEC81CA69796FF060 + 442E5C82C42E83C361495CB0908CC38793301A639B90AE1840B77CDA6463C5B2 + 0AE3C007D3C73E342BB3E9AC5DFA5BD722D493F79BCD757E4DA3EACE50EC1C43 + DD969E4E76A381D372808D27CC9D47B881EC3118431F2E5F19185ABFA9C9EA81 + 72F1914EDBC8DAACFC0593BCA79275BF7F159CB873AD56EF4E9F8F42C81F43E1 + 0785890F382DB6592F10994CB1155C39861B7831864DD523BDBBA19D8FDC4FAC + EC30EFDC3E75D14A9CFF85ED24AB2A3D9F62E7633120332217E13939E74ABF7E + BDD1F2C8B8059F01597D6264CBB7982E8062D2E656FB37FB26CF7F191B2E632D + D7053B71289099885AF083DE2154C852C846DC649BD4F4D7909A29EFDB72B61E + CC2C5C017DF63064C58E9B30D841219722574B1CBCD0436FC7799C83E9672772 + 5AB6EABA7C1DDC55FAF0EC2DEECCC7DD8EDAD3E4C36333C4A5EC110B4D8F8E6D + B04C9B16C4F52CD025E370083C026E008F821BC0D970181C6544691005730BE6 + 55E047726A525E45BA3EC4AE3DD0CFAA5F5110859E8463DDB1954CA0E4FC32BD + 23CEE0F90D7816EB59D07F0F79919D8821A595377E7CFF071A90C482FAE5050D + D7C3F98FC8585B315C28A23CD61B243DD199B1E6BC2EE450519F3D225F984C99 + 496FBF6356AC567E7A7EED765C35FEA83A38BF01F34E702E0CEE6C1AE69CB2D3 + 63FEB40BB48F72E8F8FCF8707A89276A503EC7BA991D8C468BA8B414170B7361 + 21D663867ABF64507EF03AD0517DF5004F0F4CA9B3AF688C283F63CE5FECF848 + C65A4F58C81FC06D587771251C47BE0E85CA0F938E66C5A7E2A78120E8748C45 + 90A37DF48C5DAE33FD97C37819D2C2D53721E228F5841559069E089B4F91AE07 + 156F77BDBE89AE18087E878F331C8E4588408361D29E2E8F5E3CF455F844FB39 + DD370DEA0ABE01F0A5B3AEFFCA8B61F5203672F7736A8ED2DA30E9DB917F4EA7 + 0B09EC68FBF80F52B9FB4D4C4AF2220A8F6CF5CF885EB8208C99999D7A2834FD + 9072E5F0AAAEA34570B2ECBCEEDF9FA5A6EE491556EFE4BAFE5F5C8BA8E83DC4 + BDC5A90F29AD09496D13E60E4831BEEEF6008C872BAE927A2A14A274B4E52C8B + 19791627D1152787AB8E9FD29A9A4A0E44CF457F4F0DAFD605CD6D9081C170F2 + D39A33F997DB34F557184A8170E4D5305E023E06F2248C07021BABA8ABF22AA6 + DDAF4EE58100394C66E27E8EBA70532452A437373F63F3B5BB6BEEB1EC6B4954 + 1F40A4CF5DD1DB2EA9FEC79C383256EA728A3E747D5588B40D983F02992A75BD + 8D238F1B67C41CF0AB96C1893FAA51AECDEA350BB1030FE149EDD0EEEB322A67 + 8F0DB5EEC59E51D836339A50B3C810C8FB3A3864CD9928C91DD06543A622727F + CC78C53F7FD1E225D70BBBA2C4FA39B7DC7EE8889D2685662FBC97DA52F99F00 + ED5148E4A142B6A1B4F9E7D50F7122725FE0A3EB69E98B9B1CDC0ACAA0044A28 + 292093CDCCCDCDAD08C5A94B598DBB4F40B5786F15791CDD4DFB5F20DB23A49D + 6E2153FEA0A86250DDB841321CCC87FCD5F149F56D8D1311FD0D265BBAD1B49C + 46810000000049454E44AE426082} + end> + end> + Left = 24 + Top = 115 + end + object ThemedMarkersVirtualImageList: TVirtualImageList + Images = <> + Width = 12 + Height = 12 + Left = 32 + Top = 176 + end + object DarkMarkersImageCollection: TImageCollection + Images = < + item + Name = 'debug-breakpoint-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000C0000000C080600000056755C + E70000000473424954080808087C0864880000019949444154289175923D6BDB + 6014859FD71144022321436C83ED52A714252625E0A664EB94A1A643A0503A14 + 25742814F203F21B3A960C9D8BB2A61FD025C45DDAC514B2A5EA6083A1B2C14A + 308A5F24FAC68BBA28C684F459EEE172381CB85790B1A869B8CD262DC7C9DB86 + D100904AF927DD6EFCE1F494783A054000DCB56D3EEDEC58CED2D25B190E5D39 + 1AE80066B9AACC52C5FB1345FBCF3C6FE29F9F2316358DCEDE9E75CF32BFFF6E + 7F598B827E9AA629420801A476AD2E56B7B6CF467FD5E34707079385571B1BB8 + CDE6BB5FC71F5B51D007109919402879493C0E8BF71F3C2C24D3E9D75CCB71F2 + 321CBA51D04F01D28C791D057D6438749F384E3E671B46438E067AE6F92F7234 + D00B86D1D000D2AC0773F3A6BE8ECB49A57CAB5C55D7BBDB2A0158E5AA9A28E5 + E7DABD5E6C962A9E5DABCFD26E62D7EA98A58AF7ADD78B17FC30E4C5FAFA8F65 + 67ED693C0E8B4A5E8AF97A853BCB62756BFB6CACAE5EBE3E3ABA12008D6291CF + BBBB56D5B26E3DDC4592EC3F3F3C9CFC0C0266352C5DE7CDE626AD9595D96B4C + 94F2DBDD6EFCBED3E1224900F80700FDC6FB763BC7440000000049454E44AE42 + 6082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000F0000000F08060000003BD695 + 4A0000000473424954080808087C0864880000022B4944415428918D93CB6F12 + 6114C5CFF70D133A2C1834563A3C02098B81106B172CDACAC6B0AA1A138CB830 + E9C2A42E4AFF08FF85EEBA6DD55D09636ADC18DC556541DAC4A69504B4B44068 + 8862A61D5E9DC7D74D29581FE959FD16F7E49E7B732FC1883842702F1CC69C2C + C3238A1C0007804EF3E4C4CC95CB78B3BB8B53D3BCA8270388BADD584DA5109D + 98780460D1328C69BDDF1578BBD0A5365B1EC0CAF7562BFB3C93C1E7C3C3A139 + EA76E3FDC282704D105EA98D6AB252D8C471A306CB3219A51C44C94702B13844 + C9AF74757DFEE1DA5AF763A502C2518AFCD212A26E77A6BE53487EFBF4018C31 + 460821007EE3D06C02DE5B31A5AEAA8F6F2F2F837B100E233D3393541BD5175F + 731BC379CE0DA3FCABBA0F97371019BF7173A7A6AA453A27CB00903E286C829D + 6BD0F13233C6D841611300D273B20C9BC7E9E42C439F561B35FC2DEA280380DA + A8C132F4698F2872148438F47E4FB02C93E10AB22C93E9FD9E00C041C15887B7 + 8F7529E5AE149B520EBC7DAC0BA0439B9A66521B9F774A3E32D0604997991042 + 9C928F501B9F6F6A9A4973E53218B0128CC5AF921AC1581C0C58C9954AA01B7B + 7BD86FB5B2A2E45742B389FF1A43B30988925FF9D96E675F6F6F83332C0BDBF5 + 3A9E4C4EBEBD2EF9232E6F20D2D38EC9A97602C62C46290797C74FE4BBF7311E + 8A288669CE3F5B5F37BE1C1D0D6FFB4E3088D5540A5E51FCE76DFF68B7B38B8A + 8277C5228091C7000007CFE3E9D4D49F5FA56966AE54C2CBAD2DA8BDDE45FD19 + 1C422577ADDAC8230000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000001200000012080600000056CE8E + 570000000473424954080808087C086488000002A149444154388D9594496B53 + 5118869F73CDA4B1A6894D4987A4899ADC2A048A88032242039542232E5C48A1 + 3B17055DA80B11114AC11FA0AE54DCB42A2E14A910DD795570611645240E552F + 49AD9090A899BC2946D4E3A2A94D62A5F5DD9DE17DBE81EF1CC132DAE9F53210 + 0CA2BADD4821001052922A1478A4EB3C4E26914D1E51BF087B3C5C8C46D9E5F3 + B50B214680084204009032053C94525E7F95CDE64EC5623C9D9DFD1B34A8AADC + 3C7244D8CCE613C07831FDC1FE25F59EF9521E80750E171B03415A3B7B2AC0D8 + CF5FBF2E1CBF774F4E4C4F2F81C21E0F4F464785CD64BA5C35CA4767B418A5CC + C75A22520A21FE04747478E9ED1FC2BA7EC3B59F528E1E9A98900F759D3500B7 + 868709389D27AB46F9CCF3A91BCCE73F35D65F07AA1A653E25DFE2DEA46E375B + 6DE53D3EDFB3ABF138CACEEE6E767BBDEDC0F88C16E37BE5EB72FD6FD0F7CA57 + 66B418C0B8DFE56A8F6EDD8A32A0AA0821468AE939FB6239AB5129F391627ACE + 2E60E4402884A2B6B50144BEA4DEAD1AB2A89A271272BB31D5E621305FCA23A5 + 6C1E0F807FEECF97F202080098EA0FEA9B5A0F596EBF594AED466AADC3B5D2DD + BF54F3A4009454A100A0B5F983FF0DAA79B4D9420145D375244CB676F5541C1D + DE55431C1D5E5ABB7A2A1226355D4779924CF22697CB0163BDFD4358EC2D2B42 + 2CF6167AFB8700C6728691BBFBF2E5C264BFCE6619EEEB8B9BADB64EF72675BB + F1394BD528FF31363F91F0E061ACEB375C93529E3B3635C58B4C660134572C92 + 2E971954D5FB66ABADEC51C37B1D9D5E8BC962C564B389B50E271B7D9B09ECDA + 8F7FC7BE8AC9623D2BA53C775ED3E495787C21587DCA912D5BB874F0207EA773 + E91B810042347C2339C3C89D7EF080DB89C452D6CDF59B1485E8B66D1C080609 + B9DD8BB58194CC160A68BACE9D44826F3F7E34F87E0366D9035315C6647B0000 + 000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000003E1494441544889A5965F4C53 + 7714C73FE796DE0295824477DB744085D82CD640F405F627028B083CF8A4D99F + CCC4F83079D91E97F8B6B998986DC95E78F38D273783C66421B22562AA3C98F8 + C0C2DACC48A4D20E4B3158062DB3D7DEFEF6D05B2CB30575DF977B7EF7FC72BE + E79CDF37BFF313B681C7E5A2AFBD9D4E9F0FB7AE8348D1A114A665319B4C32FD + E811A94CA66A0CA9F4B3ADA989737D7D7CDCD585CBE974081C040E21E2B30992 + C08C8248DEB2AC89FBF7F9211C66E6F1E39D0946BABBB9303848BDAEBB05BE04 + CE026D55125C002E01A356A190FDF1F66DBEBD79134BA9CA04E70706F8EAC811 + 10E905C680D67422A6527351D6528BE432EB0A10D7AE063C861F637F88DD2DFB + 048803A7512A3C1E8970E6CA954D124779E6E78F1D43443E01C63756579AA393 + D748FC7E57659F3E917CEE19AA500094E473CFC83E7DC2F25C54A5FF7A84C7EB + 6F74D6D67F8AC8C303861169AAABE3B7B9B917046D4D4DFC7CEA14BAC3D10B8C + AF3E8EEBB3BFFCC43F7FA7153B20975963F941543C86DF51DBD0781C983EECF7 + 2FDC89C588AFAEA2019CEBEFA7CEE97403631BE9153D3A7915EBB98948513662 + A3DC2E5F5BCF4DA29357D948AFE8C098A669EEAF070600D03C2E171F7576621F + 68EB83F00DF2666EC7CCFF8BBC99530FC237005A05BE78AFB5959061A0F57674 + 50EB743A80CFD389985A4B2D2A0065A39A5DC9B7965A54E9444C016711710C06 + 83685D5E2FB6CE03A9B928D8CAAAD4966A2D2AD980D8310202A12E9F0FCDADEB + 0087EC0C5EB7332FA12CC661B7AE53632FBC00B9CC7AA95A368D6DEC4ABE5C66 + BDD4052FB04950DA222282524A95CAAE6657F76DD587667F97005CBB3CAFD888 + EA288BB104A09996053003E031FCFF9BA02CC68C695968B34B4B2888000BC6FE + 10D835BE894C0165C7585010994D26D1A66331F2966529B8B4BB25201EC3FFC6 + 32F5187ED9DD121055BC61AD5BF3F368A94C865F8B17D328483CD83B4C8DEEAA + 3827B6438DEE9260EF30207150A37F2E2F732F91281EF2C5A9290A854216385D + DFBCC70C0D9DC0E1D479D516399C3AA1A113D437EF3181D328B217A7A6282855 + BC4D97D6D7A9ADA9E1FD4060017858DBD0787C4F20E8C8AE2C8B995DAFDA2211 + A1D1FBB61C1C3A49C35B3E1338034C5C8F46B930350594CD833BB118C1BD7B39 + 60181160DA5957FFA1F79DCEA6922AACFC730AF93C229AD43634D2DCDA417B4F + BFECEBEE15675D7D0238094CDC8DC7F9ECF2656C756E9D680E11BE1B1E66A4A7 + 0787A6B9798D91A9207B3D1261E4DA3532A6B9B9A1E2617E1008F0CDD1A3BCDB + D606222F863EF810D932F405AC3F9249BE0F87B91A89BC146B5BB5840C83C160 + 90AED2B305B009369F2DB7E6E7B9974850509547C8BF440105177121B1010000 + 000049454E44AE426082} + end> + end + item + Name = 'unused\debug-breakpoint-filled-cancel-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000C0000000C080600000056755C + E70000000473424954080808087C086488000002084944415428915D904F4893 + 711C873FDFDFFB7BB7F7DDBBCD1AF375987A18BEC2F485A984C1840531319620 + D8A943041E920E1E3C7909F29A5D068144A7F0604A7F4E458445109A1E150CC9 + 196E6DD586AEB9D5DCBF577F1D6A243DA7E7F0393C7C0800264321CC0C0D0DA8 + 9C4F97F2B98BC7F5AAD3D1E48973455DD8CA6462D79796CA9FF6F7010034190A + E16E347AF347F2F3FDDDD565A95C3C1400C01823DDE841E760643357AB0F87E6 + E60EBE158B905E8D8F0FFC4C279E6CBD7E2659D50A4E41BF0EB2A2F03DEDF39B + FD018FC3B1F8627B1B4CE57C7A77755982107F567F697831FB15D9F8C72B63A6 + 19E48C8197F2B9702383884808D1F0349330CFEDB453CAA57C2D5D3DBA57D3C0 + 8FEB5517FE8318BDD40D694AEF922764856E00892F47878F97470D01AE3679E2 + C458E05F12D2BA214DB59D3FFBD6660E77304F3B44298FDAF69B6B3361F53293 + 1575A1C5E84123854934AF77C9133673B8E3C146AD9ECC55ACD8CA8165054664 + C66DF7D8562613EB1C8C6C36F9DA0800B89D766485FA98A71DD1E039BAFD7483 + 075ADDD09C4E62AEE65EE9FDDE9E7535187CEE37FBBB15F71943569435CD5BB4 + F316A3F7D17AE6E452B7EFE4437C9F2EF83DA0E47A8A00A0D5EDC69D480463A6 + 1974C85C3F2A2C66E1B2AD59811159733AA954A9095B6245B2521BB7E8F43B9C + 3178350DA386C04C580D4BDC364BAEE63E512EA444B534FB2E517DF81B7EBDC2 + 1337E56A350000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000F0000000F08060000003BD695 + 4A0000000473424954080808087C086488000002CA49444154289175925D4853 + 6118C7FFCFFBBE672ED36D7E6CD32D576AB924562A414C284BECA622A2922EBA + 2AD845AD2E03836EBAE9AE10823E8C0ABC33B252C1AB8AA00FC1942084701375 + 1EFADC51D76C9E6D67E7BC5D947D48FDAE9E9BFFFFF9F1F01000F81D0EDC3A7A + 146DB5B5AD441485946D66C1F030A12C12D108809EB8A60D47FAFB31AAAA5881 + FC4E279E44223CE0725D5E5ED4A289F157B4A04EC3CCE7C08402972F80404B18 + 0EAFFFBE6E18270EF5F6EACF67667E84874F9EC4EEBABA6E6D7AF2CCBBA743B0 + 0A0589551063541F6E873FB47DF0D3D2D2E1A6EE6EA47339F09E23475AF545ED + DADBE17B244D13444400403F01000268519D81A36A5DD0EDF6C69299CCC4A8AA + 8211104D8CBFA27F6D5CCDECEBE70070767F6323004040CA5D0BEA3400404AF9 + ABE08F5903E40088627A7A61ADA12F87D7BB5C6B00E8C22C181E339FC38AEA4A + 908800C20DA78F7555D68990BD94351389CF39FDF14D9B2CD3CBED04C1849262 + 42A9308DFCAA2BE1862F242E7A362A03BCAC7A0F2FAF8134B2303FC7F41263F6 + DCC34ED7754144232E5FE0C07C62EA2F55A78F7579362A8F6CC19DBBF3BE9642 + 918D3309C0A8D961E3138FAE6E46F23D03D01368098318A3DF60A0B24E847859 + 757BDED76276F5BDC1E4C774E1F6B329F3C15BCD541A3B00E03C8B6BDAB0C3EB + BF5F1F6EFF439962F652D6C4CB6B506CE3EC744783BC3438213EA4743AB66303 + 67CE2A10579A58A4BF1FBA619CF087B60F85F61F43A9C70751645F4B2496A491 + 0500BC98FC827A6FA9F5259DA5D9E4370BA60158E6127F9F4E63249128ECDDB4 + A9CFEDF6C6AB1BB7F9AB825BDDA0F92B529F8BE62B37F358326B9D6A6F60C12A + 8735B79091816C9C9BF3B37D1C00E65229DC1D1B433293992812E20E17CA0353 + 7EFB6AB3D414FFAAEE6BDAD2C04571095514130B64E3DC987AA94ACB3A4EFFFB + A6723BE161A70BC10A719088CE13579A61996929AD4129E5855B6F963F7D0706 + 593342059C539C0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000001200000012080600000056CE8E + 570000000473424954080808087C0864880000038649444154388D8D924B6C94 + 551886DFEF9CFFEFDC3A339D762EF4A7958CD32B5A1D88D66290CA6512AB2668 + 4252D3A801BA30D82EC1851BA325B19B86955AB1981877BA201340C0206D082E + 0AE9824048A6CCB4D3864BD57666E8747AF96F9F8BA29696A8CFF6FDCE93F39D + F3121ED1158FA3BFA303418FE76500DD007681A8168001E634808BCC3C385D28 + 647B9349FC924E632D04009FECDB878FDADB7D44F49565E89D33A99BC84D65B0 + 5C2C80848027104228D68460B44107519F6DDBFD3DC9247F3736F68FA82B1EC7 + 37070EF808B894BF9BDD9E1A3E0B7DB1F4F70033331111007843D5684EEC87D3 + EB1F32998F740C0DF1AF5353000079EEF0617854F5DBFCDD6CE2D6F91F61E93A + D6F397485F5CC0EC440AE158F376B5CC3113DFBC79ECD4B56B000051E576EFB0 + 0CBD33357C166CDB1B24EB592915317EE50200F4B56CDAE47D251A5D1511D03D + 93BAF9D83AFF456E3A83D2DCEF5504BCB5271603002800DA735399FF737E01C0 + 08807122210BF7A79FF55485DBB60402DFAF8A886A968B857F13D8209C70F9A9 + DFAFC9872E9F08931096ABE2FEACBE94714A2C3DBA11B34942A8CCCC4F924885 + DE8B3429A74331E5982CA32300B4D5289B592E6507F66A3879E839272B00D2EE + 40B065313F471B3484139126E574A4513D237DC1845ABF9345A096C136ACD9C9 + A78DF4D52F6969BEF5F86E6FB7007031146B7EE29BB8FCD41FAA538E4A5F30A1 + BCD069A7CD9041B28C4971F2B8ADE98E17DFB1C9517E5011E8120C0C86A20DBA + 3754BD5E34E2D7E443A9D2876AFD4ECECCE9E6E7676E29A39959E3FC8D7BC6C0 + 4FB7D53F56144B8DB632403D623A9FCF82A8AF39B11F0E8F77AD68DCE9136100 + 9A08D4A2B1DAA77EB0A7DEFCE2524AFDE1FA947AF48DAD56C4EF5244652D00C4 + 456F32099BB9DFE9F50F6D7BFB7D543EB5DA0B222189840500E0D5A2E64B3A2B + 92C00CCC2F1ABC26B3E4642E877BF3F378ADB1F19CEA70CC84EBB7EE08461B5C + AE8ACA0577403929D5C2BBC21B0EA48AAA7E6A24AD1E7BFD19B3A5A6C2FA7AF8 + 8ED25617349D732969E7A6AF4A00B8F1E001AE4C4C609BA68D45BCDEC132B767 + DC17D1DCD2A15CB68C3B8B5CFCEDCD485D8B686BD4AC68A85CA9A9F4C897EA82 + 56449654E3F6CF04CBEC7DECCB09C0AE6814BB63316C090420B18CBDDA282902 + 43E4283FA8465B5954D602B60D6B6E1266F63AB1B1F29969F3A71BBBB38E43CF + 3B71FC552F24A18B887A00C4015800469979C0645CF8F872117F0272735CCA58 + 2D1E5B0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000005714944415448898D955B4C5C + D71586BF756E7301869981F10C868C0D18426D0C965DD42A69AD82315155B7B1 + 5429B88A9A28EE5BD5173F962A7EA96A45AD925A6AAB56AA22AB51D5C6AEABE2 + 44492A6C355594FAA18D713DC204A8653964306007309719983973CEEA833398 + 18DBC9FFF46FE968FD6B7F67EDBD850DEA6B69E1E54387688AC711917DC01160 + 3F223B04AA149651BD06BC07BCAEAA976EE7721C1F1AE2B5E1611E24299B81EE + 6E067A7A30445A815F8A489FE7BAB2343B456EFE369E5BC4B41D2AE20922C97A + 4CDB56551D028EA13AF1C7CB97F9E1E02025DFDF1C30D0D3C34F7A7A10380C9C + 2A15D6AA26872F323396C12DACE9FD5DD981A0A4DA3A48EF7D022B105C065E50 + 183C93C9F0C299339FF9D6EC6B6DE5D74F3F8D217258444E2FCD4C05AFBCF967 + 16B237F03DEF6E179FAAEC7DCF6369F626B313578924EB03C1AAEAEF0223EDC9 + E4D87C3ECF07D9EC7A80F1F2A143652CA716A7B366E6ADD31472CB9BBA7E900A + B965CDBC759AC5E9AC099C025A5FECEDA5261CBE17D0148B01BC522AAC558D9E + 1FC4738B0AA09FEA61BEBCF6DCA28E9E1FA45458AB025EA90E0438DAD5752F40 + 44F68AC85393C31729E657D888E2517EE3BA985F6172F82222F29488ECEDEFE8 + B817001CF15C5766C6325F84CA43353396C1735D018EB46DD9B28EC900F62FCD + 4EE116D6F4F3B03C00D194AABEABAAEF94DCE2E5A5D9A902B05F8074340A8025 + D0929BFF84F276CB451EE18BC0AB62F03B3B24A37648100302E118A5E29D0ACF + 4DF59A96B3BE334B452A3DB7F0C53808D7C4A43F92343235DB2DBBA2C6E8361D + E914A8505627452EFDB390BF7ECE306B698D17B97C132C54574CDBA92E7758AE + B5C90BD72C47BE917CDC9AAD69349FB11CE32560DBBD6C05564A9EBBF297923B + 79ECE401B9ED10C402AE55C413FB3E0751514CFA938F5BB38966EBA7A62D0312 + 49616DEF5233D600A683E617F0A63FB44A1FFFF77B78EE93A0074E74575D3780 + F722C9AD5881E0FABDB459FA6A2469646A1BAD674C5B06CCFADD04BA8EA8B9A5 + 45C50EAB18964A65AD5A2D5FF7035DFD2A4E282D22671D0BC7005E376D47536D + 1D0F2D2F86FCB6A6D1B44D475E92480ABBED809EBF3A5B78EDFDEB8532CAEC7C + DE3DF1E6D5E2B2152B393BFB5444F6A8F29CA1AA97547568DBDE2770C295EBEC + 378EA21D920F2BE2E693C0366B7B972286DEBCB3CADF3337437F78FF7A71722E + E7FEEC8D11F3E3B99CBDBC565223D1AC5259AB22F2AC713B970338660582CB3B + 0F1EC6B49DFB4FEFFFEC2098B6EC0130630D88883CFFB526E7607BDDDAD0C874 + E8C5BF5EB10006BED3EE35C4C3368011AD07D8631C1F1A0298008E56D735F81D + DFEA275051B5F17F14C41044B87B34CDBB332E22D2DB5E2796299EEBF9567B43 + B4F4583C6CAD63B51C04C2E695E969B645A3ECAEAB1B03460295916FA6DA3A02 + EAFBE417E650F597AA12F1DF47EA4ADB45386CA5DAC0096976215F3AF1C68869 + 9B06FB1A6B0AFF9AB8155A2994D63AD23153805236237E6EEE2313E09DF1719A + E371DA53A93154FF6658F68E78BAA9B9BEFDCB12DD9A8E87A33527EDE027B7A0 + F823B103A6114FEB6F2E4C9416575D63E0DBED5EEFAE94BDB4E6162E8CCC0477 + 35448BB501DF72C7DF157CEFAC09E0AB726E7494F97C9EAFA4D37301CBFA13F0 + B618C64A30120D05AA6253BE97FD8FFA4B6DBA7C6BB759DB48C78E06BEDA5CAB + 8FD554D822229DE998F9A5FAEAC2CEADD5C1E2E890E8D22D57557FB069F66BC2 + 618E7675D1DFD9495B22B1FE6817F21729AE7E9010917F8B1D4A3BBBFAD44834 + 7FF6612AAE4A71FC1FE2CD8C03FC58557FFE88C37537AC7C2BB6C65C4E1E0481 + 2611392B227BA4B2568D683D6239F8F905FCB98FA0E4BA3E7A1CF41737EE78FA + C880FBF5FDDD414E7457621BE208F23CC2B3402750014C021754F557C0D51B8B + 1ECF9D5BE4FF6350876F0835A62C0000000049454E44AE426082} + end> + end + item + Name = 'unused\debug-breakpoint-filled-ok-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000C0000000C080600000056755C + E70000000473424954080808087C086488000002104944415428915D903F4C13 + 6100C5DFF7DD776DEFAEF6B060A145196A8B542E292085A424B8142538893068 + 624C18240E0C4C8CBA8A0B89098323038198DAC4600C212E2684C96093B6445A + 0342819652FA8FCA9DA59C83D6107FD31BDE4B7E79040026FC7EBC1818E81118 + 9B2AE7B2B7AB15CD2CCAD6383309F391546AE6F1E2E2E9B74C06004026FC7EBC + 1C1A7A7AFCE3FBEBC4EA0A775ACCEB0040292536773B5C7D8170F657E5AE7F76 + F668BF5804F7716CACA794DC7E1B590E72679A8A0B9093A3B45E38483639952E + 8F5514179636364005C6A612AB2B1C74FD4FEB2FB55C4CEF211D8FDE1B56142F + A314AC9CCBF6D734082144D7FF2D932A4FE70A22BF29E40F9A6EF1EDB6064902 + AB56B44BF88F338E7E08F9EC93A15EC7785E323C31E974C7555D5FC975D78309 + B2354E28F5D494404832E4B34F06EFB47D1A75FA5ADC962B38544B086EAF3FD4 + 465A07296F12E61BDDEDA8A9A83C9D0BF53AC6479DBE9636B951E708D52FABAC + 3A78D2CC1938FE158DA45233AEBE40586EBA4A00A020F29B79D1D0794D379F97 + 0F8BE76AEEE7792CF805CD4E3BB18B7207F7796BEBEC81D7FBCEA974DD3459EA + DC5410D616AE1B8D37CC8DDEE4521499D83E3CF7BB88C12A71CB7BD11D02000E + 8B05CF03010C2B8A57E099CD2F7F4D17EB84B547B60EDE0406A355A2EF77C364 + 359D78462EBEC32845832421D75D0F6DA4B5DFC0F869BB20771E6BE5DD52459D + 462CF3E637DB02C8BC402693100000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000F0000000F08060000003BD695 + 4A0000000473424954080808087C086488000002C94944415428917592DD4B93 + 7114C7BFE779D1E9724ED6D4F9C8AA990DADE58C19AC8BB44145AF447AD79582 + 5716D44550D04D7F402104650605DD1519AD607A93176A0A6A0421942FA86B13 + 5D4EA78FCEC7ED797ECFAF8B5252EA73753870BEE7C3E1100028361B9E3535A1 + FEC0811344D406CEEB99A1170B929C22A221009D93C964A4B5AB0BC3B118B620 + A5B0101F5B5B45B7DDFE6023956C8B7E1EA4E5D8345836034192612F73C37D2C + 085B89F246D3F5E62B2F5F6AFD3333BF87232D2D68F078DA93D3E3D7BFF57E80 + 69181CBB2041A08A60088A2FF07E616DEDAABFBD1D6A2603B1B3B1F184964A3E + FE1A794D9C3110110100FD010008A0546C06B6D272AFD35932B1984E8F0DC762 + 1008688B7E1EA47F6DDCCDEC483F00DCB85055050090C0F9C9E5D834008073BE + 1DF0579DE440981126D26ACAAA6B1BC17D767B1E004D62865ECCB2196CA96E0D + 121174813A060F15DDE9F197FAE28EBC5A0BC444409C7AEAD12C1AAC32244192 + 57044976303DBB435117A8E34583FB7E385016560A1DA78E141463C3C8A22715 + D734EBEA6DDCAC7B2211D190BDCC7D71293AB54375A8B2E84EB8AEECDD59F7D1 + 8690CB6B6E859E2B3F6C793ADEF7685EC19C00A0D37D2C081204DABE3051B8BB + B6D4A7D81CA190CBCBB7FB9C632EF24D3F9B536100B82B4C2693115B89F2A622 + 18DA5636091371479EBFA2A018DAD23A633A33B9699ADFDF7D614646A76ACF7E + 511625BFD4DAD585EE969666C517C8CD2FDA7B6976A41F693565B540486CB02C + E6BFFCE0EB09D5CCC9CF01D319AA9B0262068C9869AE8973AA8AA168D4385D59 + F9CAE92C997455D5282EAFCF399CBFF9F0135F6E3B733C90B3195FE546C64075 + 53402481309098A2F1D585572200FC5859C18BD1512CA6D363B992F45C94E4B7 + B36276B5CFA2AE4CA889F33EBF970ED678842C3769E0E71445E263310EF31AFD + F79DAC3270AB0E70EDB90CA2BBB228D532D3544D6EBE07F83DF446177E012CDE + 41B97D1CF99C0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000001200000012080600000056CE8E + 570000000473424954080808087C0864880000038249444154388D8D925B4C9B + 6518809FEFEF91363FA3D0C3280552BA1550301D4B0C900CDC0289332ED364D9 + 0C51B38CAB09DE396F8D72C3CDB20B1325881AE3952CD9D26DC42D5121736A40 + 1B63308392721C5B9B012DC70EDAFEFFE7059B0E58D4E7F67DDF27EF49F098B6 + 5088EEE3C771DAED8D403BD08410A540162963C02D2965CFDCF2F24C6738CCF7 + B1184F23003E6869E1FDE6E67C21C4A75A367326111D25393BC9E6DA324251B0 + 3B5CB8025538FDC10C4274E9BADEDD110ECBAF22917F446DA1109F9D3A952FE0 + BBD4FC4C5D74F00699F4C6DF09524A29841000AAAB98EAD69358D57D7D3929CF + 1FEFEB933FCDCE02601838770EBBC9F4456A7EA6F5CF6F2FA36532ECE6892893 + 5E67712A8A3B505D67325B12A19292C8E72323002845365B8396CD9C890EDE40 + EAFA1EC96EB636D698B87D13A0AB76FF7EF588DFBF2D12D09E888EEE18E7BF48 + CE4DB2B1F4B048C06BC70201008C40737276F2FFD4AF0343C084108A61F9C15C + 8DBDC85D5FEE707CBD2D12C2B7B9B6FC6F025D135C9A74DBBB7F0916AECCB96C + 6E45285AC826179B9505EB9231F7B823297342514C524AF92CC923B3E1ADFE86 + 92ABD70E175F485B8DE7012FC08F6C4E7E2CC72F2A8DB297F9526904623687B3 + 369D5A12BB2D9AE0527F43C9D5CBF5BEEB2EB5A0F50D5F8D3CA0BAA52675C657 + 121503F3A39F2C6FA55FE47455BB02DC7205AA9FB99329B7BDFBFAE1E2F75C6A + 41EBBBD547E5F3055E2C062336A399BAA2323A832F69AA39EF2C8A685324F4B8 + FCC18CEA2ADE2D1AFA3958B8B26135BEF38AAF465A0DA61DC185F17836F6E5B0 + 76CC1DD411A243994BA56610A2ABBAF52416BBFA74EEC43DA7CD0D780FA82EB6 + 561FE50009C8C5F17876EC4AC4587624C8C1028F00424A67388C2E65B755DDD7 + 77E8F5B7292CDBFE0B21148322840690DDCA6ABFF50E89FBBF4E6717C7E3D9BB + 5722C6CA13A19CA7D667D291009A613A99E4FEEA2A2F57560E982C9684FBE073 + 0D4E7F302FAFA0707DCEA3F60EE7E7DE2C510B8B8215E55AF4DAEFA685BB0F0C + 95274239CF0BA5268091856962AB0FEF1800FE88C7B93D35C521AF37E251D51E + B3CD3E91EFF1DAB216F30FFD96C5F4BD74EAD5FA40A5E22C75E51C156EFD8924 + 9E5EA17F2622729AD6B9E3E40268F2FB391A0850EE7090346A5C685C17BA41F4 + A9E6BCB32DC55532A0BAD0A5646C25CE60222A3673D98FD0F40FF7FCCE1E9A7C + 70BA1A846843880E20844043328C9417D1E54DBE19E32F338D686DCBC886DE00 + 00000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000005604944415448898D955B4C5C + D71586BF752E73E6C2C000C1C33035D81830496DA0102B512C59813A8EAA20C5 + 5224E32A52A2B86FBD3CF8B154751FFA12B54D5AA99552A98A2CB5551B5FA462 + 45A9659C5E14B5548A631CA340B18B898D191B8C011B66863973E6CCEA83194C + 8CEDE47FFAB7B4B4FEB5FEBDD6DEC23AEC6B6EE6ADDE5E1AABAA10912EE020B0 + 07912681A8C232AA13C047C07BAA7A7E2E93E1C8E020BF1F1EE6619012E9EFEE + A6BFA70743A405F8A588ECF33D4F9666536416E6F0BD3CA61D20525543793C89 + 69DBAAAA83C061542FFFF1C205BE3B3040A158DC28D0DFD3C38F7A7A10D80F1C + 2DB8B9E8D4F01033E323786E4E1FACCA768252DBDA467DE773584E7019784361 + E0F8C8086F1C3FFE8558735F4B0BBF79F9650C91FD22726C692615BCF8FE9F59 + 9CBE4AD1F7EF55B18A122FFA3E4BB33798BD3C4A793CE904A315AF009FED88C7 + C717B2593E999E5E1330DEEAED2DD972F4EECD6973E48363B899E50D553F0C6E + 6659473E38C6DD9BD326701468F9F1DEBD5487C3F7051A2B2B01DE2EB8B9E8D8 + D9017C2FAF00BA8A47F1D2D9F7F23A767680829B8B026F57380E8776EDBA2F20 + 229D22F2E2D4F010F96C9AF5563C8EAF3FE7B369A6868710911745A4B3AFADED + BE0070D0F73C99191FF92AAE3C1233E323F89E27C0C1D64D9BD66C32803D4BB3 + 293C37A75F66CB432C4AA9EA3F54F574C1CB5F589A4DB9C01E01EA6331002C81 + E6CCC26D4AED96923C86E715DE752DE3B7F36581B185329B8265501D2CA7BA98 + 893885FCDE9065AF7566A94899EFB95FCD076162C536FA3ED91A1B196CDF645F + AA8B76A78356BB0A115B652A515CFE6753F1D2A9363FC2EDA40337C042356DDA + 818A5285A55C1BB8307127643F7FE2D9E4EC99F6F8814CC87A136828C5E405AE + 19F9C235CD9FF89BBD7898D79AE708E4B1808948554DD79758945FB18DBE13CF + 2667DFEF4AFCD40B98FD9BC395F424B66B63B406C7B498CBA5199EBF66FDEBD6 + 956F7B7E6137867E93BEA7260DE0A3F2781D96135C7B971E84C2BBC35B2B4606 + DBE307BC80D9FFCC135BF8C193DDBAB332A965B6836D982442E5DABBB94DBFD7 + FABC862DA71E919358123080F74C3BA0B5AD6D8FCA8F6B19EF9C698BDBE990F5 + E6E67025AF3474AA69181B0B51D5C88C973BB0B54B11E94079CD50D5F3AA3AD8 + D0F91C8170D99AF7EB4771BECCFEEF7832BA1B68E84E6C5743E4A1237CE5ECA8 + 7BF10F43A1C49C99AB0D952B22AF1A73990CC061CB092E3FF5C27E4C3BF0E0F6 + FE6FB12C40266875006C8BD6ACF9B61A07C0E4D9D1FCF47FAE84EABAB6AC5437 + C79DD5B80EE3C8E020C065E05045E26BC5B697FA7022D1F5F7E17AA641510803 + 38A6C5F57F4FB8A327CEB95AD4A2AAEAE48763EED4D044B0F61B0DB99697DA1D + 00C7B040089B176FDEA42116636722310E7CE694957FABB6B5CDD16291ECE23C + AAC525AFB6E677675A2AB6F806FB3BAA36539CC914521F7F1ECADC5ACEA76FDC + F1A7862642759D0DB9EDBD1D81D21736343729B75696AE9900A72F5D625B5515 + 3B6A6BC751FD8B61D94D55F58DDB923B9E96585D7D552456FDABD34FF8B7EE9A + FEF71DD3369FFE7AAB695A662E75EEF3D0D2F4A29D584D2EC63D5BD305574E4D + 5D145F8B274D80A22AA7C6C658C86679A6BE7EDEB1AC3F017F15C34807CB63A1 + 68A422F5F7E0D2B94933D79A5AB9B3B3B5A296FAA6A425A6910BC6C27EA97211 + 1155E5F8D5F392CA2E7AA87E67C3EC5787C31CDAB58BBEF6765A6B6AEE752CF0 + 93D0557E11BA5E03F271D872EA0F6CEDD21DB1BA2F7C4CE9822B03539FCAA7F3 + D7017E88EACF1EB95C25B1D2AB783BE970FDF526106944E424221D8950F9BD4D + 362CE6DC3497EFCEE2FA9E071C41F5E7CC65F5B1021BB03B097D4F826904105E + 077915680722C014F021AABF0646B99D85772EF07F8FFF9CEA923F3BA4000000 + 0049454E44AE426082} + end> + end + item + Name = 'debug-stop-filled' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000C0000000C080600000056755C + E7000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC200000EC20115284A800000003549444154285363187C + 80114A83414343C37F28130500C5E1EA98A0341C383838A0607480A181101800 + 0D070E1C40C1831E30300000F259100CE4B479240000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000F0000000F08060000003BD695 + 4A000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC200000EC20115284A800000003349444154384F631881 + 80114AC3414343C37F28130300E550D433416914E0E0E08081B101AC9A890543 + 543345A13DF200030300F2850BCDBBFD122B0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000001200000012080600000056CE8E + 57000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC200000EC20115284A800000003849444154384F631805 + F4038C501A05343434FC8732B102A03C863E26288D011C1C1CB0625C00A741A4 + 8251830803AA45FF28A01B6060000088DC0C8F7062AD650000000049454E44AE + 426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC200000EC20115284A800000004449444154484B631805 + A360F00346288D15343434FC8732F102A03A9CE610B4C0C1C101CAC30E0E1C38 + 80D70226284D33306A0141306A014140F38C360A46C1A0070C0C00E0540F1273 + 7641650000000049454E44AE426082} + end> + end + item + Name = 'debug-stop-filled_2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000C0000000C080600000056755C + E7000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC200000EC20115284A800000003949444154285363187C + 80114A43C034F7FF50162AC8DA0957C702A5E1A0D72C14CA8280E253ABA12C08 + 6082D24403DA6B20D9D3830E303000003C32090DDA6D1E520000000049454E44 + AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000F0000000F08060000003BD695 + 4A000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC200000EC20115284A800000003649444154384F631881 + 80114A23C034F7FF501626C8DA89A21EABE65EB3502807018A4FADC6D0CC04A5 + C90243543345A13DF20003030062890C0C048BC2B10000000049454E44AE4260 + 82} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000001200000012080600000056CE8E + 57000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC200000EC20115284A800000003B49444154384F631805 + F4038C501A154C73FF0F656107593B31F4E134A8D72C14CA4105C5A756633588 + 094A530C460D220CA816FDA3806E808101003A700C0EF47C827A000000004945 + 4E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC200000EC20115284A800000004349444154484B631805 + A360F00346288D1D4C73FF0F65E107593B719A43D0825EB35028073B283EB51A + AF054C509A6660D4028260D4028280E6196D148C82410F181800E40B0C12ABCC + B8990000000049454E44AE426082} + end> + end + item + Name = 'debug-breakpoint-filled-ok-2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000C0000000C080600000056755C + E70000000473424954080808087C086488000001DE49444154289185904F6892 + 7118C7BFBFDFFB667B5F4BC1CD1AAB0E2D57BC4D1022767847EB906BE4A24350 + 44F407B636E8E0350F1DEA34DC21105A831D8AE8303489840219A36E42E0080C + 43E275D0C04A71FED93B9D73FAFA74980B3B449FD3079EEF03DFE76100E05555 + 3C1E1D1D9244D1572D15CE1B8DFA01D96AD3C42E693199CD066E8742B56FF93C + 0080795515B31ECF74716DF5693AB62CD4F4320100E79C1D1A188463D89D28EC + 34C6D4F9F9F59FBA0E213A3131B499F91E4E2EBD119AF56D74C02AEB39DAF895 + E9ED779E516CB21C7C9F4A814BA2E84BC7960510EDA6DAECB99EFB819CF675FC + AAD3E9123907AF960A2335BD4C44BB1BD4A6D38B6BAB309B4C233D6633B8D1A8 + 1FC47F6836EAA80B249AAE39204A569BC638573A2BFD39A2ED0D469199139968 + 6BECF41CDFD7252D1E1E1844BB864144B344B4B157A929B077CF2F591E861C95 + 2011BDE4C96C36E0187627ACBD475B9BDDF2D4C283B39194CB3E4E806E883CFA + F696E2FBE8391E3488A6CBFEF80A3B65B7636972B2C72ECB812F42E1C9DD8BC5 + 7B6C6BBB76E759E2555AB1D53E5CE97FDD02EE97FCF14FD5B00606007D160B1E + B9DDB8AC28C7665CF94CC4515960841D30A682C85BF2C763D5B0F68F97EC17D0 + FDE2023FF2F9E65CDFCA8D73E6EB27FF1AFF063FAFD9AF54A6CC380000000049 + 454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000F0000000F08060000003BD695 + 4A0000000473424954080808087C0864880000027E49444154289185925B4893 + 6118C7FFCFBBEF53E6614D714E375D731A61649EEA62865A42149D0835CD082C + 4B8BACCB2EBB34080A8CD00BBD080D3AA1098583D02CB43497164421358F0D23 + EAC32DDDC1B97DDFDB85874207FEAEFE17CFFB3C3F9EE72500306A34682D2F47 + 715A5A0111D583F36239144C6482E822A221002D0E49B2D57676C2EE74621532 + 6ED98297B5B52A93567BDBE792EA67460769CE39097929002688D01A4C30E559 + A1D11B3BFCC1E0B913EDEDFE81A9A9E5C7B69A1AECB3581AA5C9AF57C6FA9E43 + 098538D6418C51BAB504C6ACDDCF7E2E2C94E63436623E1080AAA5ACACC0EF92 + 9A3FD99E10976510110100AD00000490CB39054D52CA769D4EFFEDB7D7FBD9EE + 748211503F333A48E126AE67FAFD00005C3D9299090010C079D19C731200C039 + 5F6B102E2FFCFA81D0A23F7FAB561B05C0C7E45030515E0A60836AF84C019F47 + 00A3788A11C19820BA99206E66FC6F79A2F0A22757968CFD15E98C8886B406D3 + 9ADEAA62B84CA2D8D3163D5E71779BD40AE02603D062CAB382185BB593015C26 + A2A1FFB539A3BEFEE2E493CD07D44D7E9592CA15A59A3924C9A6D11B3BD2AD25 + 0010F4C4469C7D5897D5FD767FCA3185F00E0014C2EBE12263F9E30B3BEF0422 + 5516AEF0A3AE06BB57F561761695D9D9DDF1C9A959712966C758AEFEFABDE3BA + 475F7275BBA2E70375A6194F8CBDD070F1C1A5EC5B8B51C20ECEF9615783DDE3 + EB9A000140A1D98CB6CA4A24C5C6567904C57B7ECFF7371FE3FCBD118BA15769 + 0EF7B5E90C6D53402DE470851F72370CFFF1764D60E5F32CA3898C44757E3EF6 + 9ACD184CF0A2E38C3A8109AC17200540902BFCA0FB86DDED7D3ABEF949D46516 + 1846AA128DA3A7EF278F9C8A8B2ECDD850F317496416A24991A15D0000000049 + 454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000001200000012080600000056CE8E + 570000000473424954080808087C0864880000032A49444154388D95D15D4C9B + 7514C7F1EFFF797868A116286B4779D95C7D0888660ED04898A124041289D1ED + 62C90CD96E863766EAEE8C33D139C812D4CCC42B89A26631EA165D4CDD8B9B71 + 21B21049B517661AD785165866C6DBDA0AD28EA7F4395EB0375E16F5777BCEF9 + E4FF3F47712B5DF5F5F47576E275B9B603DD4010A5360159444681F322D27F35 + 951A7F2914E2C2E828F746011C6A6FE7D5D6D622A5D407B9ACB57B327A89C444 + 8C9BF32994A6E1F2F8F0990FE30DD45828D56BDB76DFFE50488E452277A1AEFA + 7A3EDAB5AB48C10FC96BE38DD1C1D358E9853B0D22224A2905E0F69553D7B103 + A7BB786049E4C5CE8101199E9800403FB36F1F2EC3F824796DBCE3B7EFBE2267 + 59ACCE6DC84AFFCD6C3CCA46B3AED1C8774CD65756463E0E8701D036141636E7 + B2D6EEE8E069C4B6D720ABB3B830CF95A17300BD5BFD7E774B20B00C29E89E8C + 5E5AF19D7F4BE26A8C851BD31B14EC6C33CD6508684D4CC4FE3372178B03041F + F4786E414A55DD9C4FFD6F28B33CB389E5F59187C892D2344344E47E43EBD534 + 4D53A2989C6D2EA1F48916F280D1428F776B3A7943DD0FB97DB51590917F71B8 + 6076FFF1A6C59D85CECD5B34E0BCCFAC5BCFC801EBBE5260F8A273FAB9D71F9F + 6D9B762E7D29A06B02FDBE408DE5F695DFDB6B015DC0A175909FAE3C52FA6C7F + B7199C72CB0981B7B0EDA3FADE868654494181EDA9DAD2361B8F92CB5A8B9982 + BC3DDFEF78E8EC4475F18F55E3739297935640098463B59E678E1D68D83EE377 + 7D0D1C115BFA928747D02FCFCCF0FCB66DC386C359B1D1AC6BCC2D2DBD1C6E2E + FBFCB3BDE689CB8F795BB28676B0FA8F84AEE7A43056EBE9FCF44043D354E503 + 2781B7C59623C9C323A44F8DA18F2512FC3937C7D3B5B5670C8763B27473608F + CB5F716ED0BFF0FBBC8377C6AB4BCA332EE3B58CDBF1C5F1171E7D72AAD2FD0D + 705472D293EC1D217D2A0E800EF0EBF5EB0CC5E334545444CADC45277D9661A6 + 8C5CF897D2CC90E8DABB63351E5FA4C99F5E28768680F7C5963793BD23A4BF8D + DFD9DD8AB32A2018085057564652CF72E1151FF966C9539AA69F059CC07B62CB + C164CF4A640DB43A9ABF00EF87ED1895EE2048872DF61B7FF5FCBC0601F8079A + 3C4F2767D809720000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004C0494441544889A5925D4C14 + 6714869F6F66FF5C77971FC505D4B56AA1DA586CB0D4C4B404888256528996AA + 374DB4F1A2BD532F4C916A6A4CD3A4D1264DEF7A41D2F4478D0AB6D5B6D8348D + 0A9A5A11A852446B144120C0222CBBB03B3B737A515740414D7DAFDEF3CDCC79 + CFF7CC518C53715616074A4B59909A8A526A19B009C847A9E71578054288DC00 + CE008744E4526F38CC9EDA5ABE6A686032A984A9282CA4A2A8084DA96CE033A5 + 54B169186AA8A79370B017D388A1DB1D4C4F4DC3E79F8D6EB78B88D402DB1169 + FBFAF265DEAFA9216E598F06541415B1BBA808056540553C3AEA6D6FA8A7BBB5 + 19233A2A0F4F6577BA54FAA21C02B92BB0395D21608B40CD91E666B61C3932E1 + 5DBD383B9B2FD6AD4353AA4C297578A8BBD3D5F4C3770C74DCC232CDFFA6B8AF + 84B74C93A19EBBF4B45DC5E79FED74799336005796F8FDADC148843F3B3A1E04 + 68074A4B1358AA06BB3AF4E693878986438F4C3D99A2E190349F3CCC6057870E + 5401D91FAE5CC90CB77B2C60414A0AC0C17874D4DB72BA06D3880980DCD7543E + 519B464C5A4ED7108F8E7A8183494E275BF3F2C6029452B94AA992F6867A6291 + 61C6A3789C1F5FC722C3B437D4A3942A514AE56ECCC9190B00369986A1BA5B9B + 9F86CA94EA6E6DC6340C056C5A346BD6034C1A903FD4D389111D952761990C51 + C21BD15119EAE904C857402039F93E22C80A07FB781A2C53214AF8F0401F0AB2 + C6DFCC264A794C23FA4C78123263514429CF8400448675BB232971DDC483A7F1 + 0FD7BADD01224D9D6E03F9F275326C3134E0C6F4D434E0D91139DC9EBFEEC6EF + ADFD3CAB5705D36D7BF534778E0D38E3F3672EB3395DCA8CFD7F549AAE5FBDDE + 7B63754D89ADF75446FC53D1D40E44B235E0906E7748FAA29CA9BE8D028D8F6B + 2EF0F76092A3A4AAC0D57372A1F1714C931D22F29B886CD344E49288D4CECB5D + 81C3EDE1A1F58B00EB45A44044CE8D3B1F5B53680DF91CC5D59BB37BEAF233F6 + 1B3ABB80DF45A40CD38A68BDE130C0769BD3157A715519BADD91601B893BF40D + 8DAFA6D79E5EB770B87B8EE74D943A3FE11F28757DD86B2F39559ED575A170EE + 4771BBFE017056907598120E56D6A30723114A172FEE07DA5CDEA4B79233026A + A0E3D6886E77ACBF9837F3D76FDECB29685C9EBEB37B8EF7FBB937078FF90663 + 850A660BFC33ECB5AF3A599EDD7966F573958653DF0BD409524A5C868395758C + D4B6A3377575312F39999732325A812B4E8F6F4DFA0B4BAEBA5366EEFF233F33 + 7E71BEBECFD2D4BB7DFE6999DD999EE3819B83477D2163C1B0D7F1CE8F6F67DF + 39BB7A5E45CC69DB079C07D6624A28B8BB8E91D3ED00E8003F5DBBC6C2D45496 + A4A7B72252ADD9EC05EE9419E5C9BAA7BA3165E444BFD3CC519AB6B93F6D9ABF + 7B8EE7389A76F4ECCAC0607DD1DC5D86CBB61FB808BC21716B285859FFA0F983 + 004B84132D2D042311960702FD4E9BED5BA5545B5ACC9635AA5937EA67866B04 + 5E46539BFBFCEE194DAFF87FBE3DDFB7D3B2EB9F0097803512B7EE052BEB19A9 + BD3D61C3140F6986DBCDD6BC3C362E5D4A8ACB45C466515E788750AAE6048E29 + A5AD413887E235A0012816D31A0856D44D987CCA80C9A4CFF3925A5584DD37CD + A534AD5A535A89255623C22A4CE99F6CF209889E24198C6134F4E25A15882B87 + AD1AC42796B5CD12B3EFDE9E0B8CFC327973807F017FD3736DDDEA4FCA000000 + 0049454E44AE426082} + end> + end + item + Name = 'debug-breakpoint-filled-cancel-2' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000C0000000C080600000056755C + E70000000473424954080808087C086488000001E74944415428916D90316813 + 610085DFFFDF99BBCBE5AE9A041BD46A880DA1C94920438713E29222B4835815 + 14AA4307B76C62C1C50E2AE82488DD452CB6A238082AC14528387848A152240D + B510D384F47ACDD5333DEF92DFA12D44F19BDEF01E7C3C0200455DC7F4C8C8B0 + C4F3538E659EE9786E28D8172EF3A234BB54AF3FBC3A37D7FED66C02004851D7 + 717F74F4FAE65AE5D1CA42896BDB5B0C0028A5E4703283C1D38545F3B777569F + 99D9A8D936B8B79393C3DBD5EF2F96DEBFE47C77073D909F1B0DD65AAFC6125A + 6E281C0C3E7FB3BC0C2AF1FCD4CA42890363BBAD3DF6B3DDF88146F9EBD8B8A6 + 65794A411DCBCCB7ED2DC6D8EE82EDD19B37D72A9003817C5496413B9EABE0FF + F8003E0180EFB9001002002AF585CB84D2BF3408211D81F2D78ECAE1F31CA1AF + E5435106C7599C8FC7557A409466FB9319FCA3F139222A1F126A7F2915397E37 + 1A895DEC1A869213C5A7DCB974DA48A53263ADF56ACC75B6F7758EFDF2DD842C + C8372281E013C1B46A68B7279A9E7789FBB8BAEA5FC8665F25B45C5A540F2629 + E588105248F8C4E090123FF94E30AD3A61EC1E802BD3D56A8500C01155C5ED42 + 01E39A969503813C008539CE17661821585611C02D008F77BADDCBA4F7169E52 + 44651900301F8FAB39517CD6F4BC8907B55AEBCEC0C02981D29B7F003FC9C9DA + 74E535940000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000F0000000F08060000003BD695 + 4A0000000473424954080808087C0864880000027C4944415428917591CB4F13 + 7110C73FB36D175AA46C89954AB1BC7CA424A8113D40A222170F266A04251A12 + 7C848BE85F22265CF480278D0783342A446E8AD144130D1E84C42808940D3E9B + 561EED52BADD9F07C128EAE732DFCBCC7C26230061BF9F1B6D6D1CACAE6E1291 + 6E943A98B7739B34B72725222F80BE894462B82B16E3A569B286844B4A78D4D5 + E58A18C6D54C2AD11D1F7D2E49738AFC4A16CDEDC1288F10D9D388BF2C3C60E5 + 72E78EDFBA653D9B9EFED93C7CFE3CCD3535BD89A97797DE3E1EC2B16DC53A44 + D3A4B6B18570FDDEC1CF8B8B2776F7F6B290CDE2EA6B6D6DB25289EB6F86FB45 + E5F3888800C82A00029232A7F1872A76048365EFBFA5D3E32F4D134DA03B3EFA + 5CFEB5713D33AF9E015C3E128D02E046A90349730A00A5D4AF01FFCA8B5F3F62 + 2F5B0D9586E103325ADECE6DCAAF64F94BF5CF9C5FCD92CD2CB9112905D034B7 + E7BBE6F6FCCF5489C81581638005E029F439BA52F3FB8A8AD044E485511EF9A5 + B7A6B85A7B2A37047BEA4B2B97BC2EBDCD17D8B8AC177AEF864C333F52577748 + 03FA227B1A114D93BF5461A444F745FDBAF75E345091ABDE56DF9C1B1FBBA8E2 + F121E0AC3691480CFBCBC203B58D2DEB95DD0A6213F39F7C197BE58CCFADDF09 + 989F43AE99780CC7F96239CE05D7EBB939DA77ED7A58BA794BBD3F54B1C39A4F + B192595A7D2F1EDD08B4166FDD7ECDBB907E2A701FA53E28A54EB64F4EDA02B0 + BFAA8A9BEDED848A8B4F0397ECACB5379B4EBB3C855E472FF4F6E7C6C72EBA66 + E23194126027706A30997C226B8EFE82023A1B1A38128D5269183E444A75982F + 9B9DB589C71FE03849A5548788B400B7159C92F587FECEBEA22246EAEA9A812E + CB713A3B2627EDCE6090A381C061A0E3077DED0C819313C4410000000049454E + 44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000001200000012080600000056CE8E + 570000000473424954080808087C0864880000032349444154388D95935D4C9B + 6514C77FE76D5FFA012D145A185BB196372B62401837CA8C10914549967DC4C6 + 2D4BBC196689914BE31546CD6EB8F063D90D24A291C4C40BA3B1CB1621D12C59 + B29B252498EDC23AA88520AB8E96CA47A16FDBF7F1A29D932D8DFABB3DCFFF97 + E73CCF39428573BDBD4C8C8CE0AFAD3D0A8C020388B40105945A04E69452532B + D96C722C16E3C7C545FE8900BC373CCC3B83835E11992C15CC33A9F86D32CB4B + EC6D65114DA3D61720603C853F1C3111B96859D6C45BB1989A999F7F283AD7DB + CBA7D1A857E0878DD5645FFCFA55CCDCCEDF0794524A4404C01368A5F3D8499C + 9EFAE9A2526F8E4C4FAB9BCBCB00D8AE9D3F4FADAE7FBEB19A3C76E7FBAF2999 + 268FF24064E6B6594FC469363AFBF41A47AAF7D0A1F9CF6EDD02406B72BBFB4B + 05F34CFCFA5594653D267994FCCE16BFDC9805B8D87DE080E78570B82C12184D + C56FEF6BE7DFC8AC2CB193FEA349E0D490619445C0606679E93F4B1ECA120003 + 219FAF221209EE6D65FFB768B79C69A3FC7CD851AA289AA62BA554B550A5360B + B88101004DD30428528969C0A2DBE747AA002022B3B5BA335AA73B4F88C80D11 + 11B7CF0F70B75FD398310CECC05CC0E8EC5E4FC4AB5D68CE6D7744BB7C6D5111 + D1139BBF9FCC1477AF343ED1EE57E9F444706DEDE5606363B7A6602A108E989E + 406B359153C0262235BA669B6AF7B6443B0EF79CB052A961B5B0D0C3DEDE3780 + DBF6FA9123D90697CBF2059F1C5A4FC429151E1BC8504195FACD5271BCA1C6BD + AC6BB64957BEB0645F4FD7619ADF021F5A4A7D60FBF9FE7DCEF6F4DCD41DCE83 + CD46675F2E9B61F7CF8D7D261109E7C57AD61B0C8DBBF28515949A045E033EB2 + 947A7F2C99C4F66B26C36F9B9BBCD2D1714D773852CD879FEEF787232E675D3D + 4E6F03F52D07A5A5E3198CA32FE5EC225FD9D7D32EE0AC400DF0C5B665FD74E9 + DEBDF2F6033C1F0AF1F1F1E374B7B67A80D3956F0E225244A9BB2A9D9E500B0B + 5D6C6F7F077C02AC02978137368AC52F655F0BC04038CC8B8641C8E7E3C1B03D + 07B4ADAD0D91CFC7804B9652EFE62C8B3A9BED027059C1E83E513566DADB79B5 + A9E96DA0C1526A7C2C99E4CEEE2E5722111AECF60B40D75F9EBC336E3F68289D + 0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004C94944415448899D955D6C14 + 5518869F6F666767D976B7ED36A57FA644629B8AD8926253E2050915F9911288 + 98D060A242F4060D09976230F1D218F0C67881518410A418B1863F2D179A6A50 + 8CD450012BA1D0422B2DA5DDD276B7BB3B3BF37941B72C140AF1BD39EF393339 + EF779E39738E90A5159595EC6A6A627E2482882C069A81A5883C2510521847F5 + 32D00E1C52D5B343B118EFB7B5B1BFA38307493266C7B265EC686CC410A9023E + 169115AEE3C8D8603FB191215C278569F9C98914112E2EC7B42C55D536603BAA + 970EFCF9275B5B5B497BDECC801D8D8DBCD7D888C07A606F3A99085DEB38CD40 + 57274E32A1F75765D90129A9AEA1A2EE797C76601CD8ACD07AB8B393CD870FDF + F3AEB9A2AA8A4FD6ADC310592F222D6303FD817347BF22DAD783E7BA77AA9852 + C67BAECBD8E0BF0C5EBA40B8B8DC0E84F23600E7171617778DC4E3FCD1D7371D + 60EC6A6ACA60D97BFB469FD979BC85646C7C46D50F523236AE9DC75BB87DA3CF + 04F602553B972FA73018BC1B30BFA00060773A99085D3CD58AEBA41440A7F430 + 9FE9BB4E4A2F9E6A259D4C8480DD79B6CD96FAFABB01225227222BAF759C2615 + 9F201BC56C3EBB9F8A4F70ADE33422B25244EA36D6D4DC0D009A5DC79181AECE + C7A1F2500D7475E23A8E00CDD573E74E633280A56383FD38C9843E0ACB831065 + BC934CE8D8603FC052012AF2F3A71041656CE4168F83E56188323E16BD854065 + F6CA7C2A92EB3AC9FF4365C64E7353495424377BCC4075C2B4FC3C0E962C3FAA + AAEB80BFB29F99961F5427D0BBD93EE0724EA4687166B9994966F1B705D65886 + EF8CA7DEEF69F57E006A55557322450097715DDE2E2CE4A6696200EDE1E2327C + 7660FA5C9A456382AC290D169CA92D9CD75099573A1A34FDAB80733E3B20E1E2 + 320FCFFB949E1E9A0381DA6D2525B90670C8B4FC5A525DF3A8C91578CD32CC33 + E5399106DBB47E8A04427B9F0C178F8483E155E50B17773A9393DBBCFEFE7DDA + DDBD04F81138E053D5B340DBBCBAE7570E5DFE7BFA98C870BDCF7FE0A9F7DB84 + 93386B9BD637029BF2ED1CFCC19CCD9E9DBBC4BB7A25C5C0CD0612899353057D + 680CC56200DB7D76607CC18BEB312DFF6CDBB436ADDEC9DEF1A1BCD164EC0DA0 + C510D994E3F2456E6F9FEBEFBDDEC0E4E489A9629A50FDD51C89C7697AFAE961 + E0522094F74A7E698544AF5F15D7494DB3C9044DF93247DD1712065F8782A116 + 4BA54A4436A15A27AAEF0226B006387D241AC53C77E306F3F2F379B6B4B40B38 + 6FE786579754D7D8EA79C4A3C3786E7AC6C7B0EC4059D182458D81C2A2CFADDB + E3DFA25A0FAC062C60B5AAFE726C7494D7BBBBEF5C383EC3E0B30D1BD8585B0B + AA5588DC77A3DDC27592D9379AE74CC6DFF1AE5ED963F75EAFC7F34E02792262 + A8EA7E557DB32F95725FFAE71F4C004F95EF2E5E64241EA7A1A262D8F6F90E02 + 27C4302602E17C7FB8A43C27BFACC21F2A2E1F0B84F22E08EC348686BEF0F5F4 + 3E87E37C2F772A6F028222B209A8089BE6D1B505053A63EF1706836CA9AF6763 + 6D2DD5454564C1BFD3A6D3684F0FDADDBD581289B629E66B51FD19B0103900BC + 02EC53D5B766FDB90A83C1E95331A3AD9108CD73E63C23F013E007D602EDC7A2 + 511605833C61DB167050445E56D53DBED90286E37186E3F17BC66E1A06CC99D3 + 0BFC067CA4AAED47A251B6747733CFB639515DED945BD6ABC097C0A9FF00EBF0 + 7A9530F14B7B0000000049454E44AE426082} + end> + end + item + Name = 'unused\button-arrow-right' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000C0000000C080600000056755C + E70000000473424954080808087C086488000002064944415428914D90BD6B13 + 0118877FEF7DA4492E29B923499B98A4205A488B51A8B844B0E8128716AD4B45 + 1104271707219B200A05C9207EE0A6200885DA411151C4A14154448B196A2D12 + 096A6C427BF968A2B9CB5D2EAF8B689F3FE0E1E12100708FA5A19DBD1695B448 + 56369AD3AE4E3DE6B89486E90F2F71CFCE6D3DBDF3A1F5E436C00C728FA511BA + 70F7A0C7A83F8A161654452F32984144D45542A8A48E3BADE1F18BED97F76F35 + E6AF400C67E7A34ADFCCEFCC5F57DDBF360066D85E952C258881568503E58F64 + F94319DE97796F7E7E5B14242D928D161654C93600004444D477B0BEF7040C35 + 4104A61D858724DAE69C6FF22404D9684E297A91999901809959325B9C78770F + 95D40C8C400CA26D60B0BA9A92E3C911C9D5A9C7C18CEA9E6364A8090020FCC5 + 913D28A5CF63F4C555C89D1A28A0C524C7A53488281859798CED3009F831711A + BEAF7948B601C7A5004053307DE1A5AE12C4F6242681CB13A7A0E845A8A537CC + 24A03D94ACF6F49F6B023B76AE929A7140C23FBBE91F26452F422BBD6600D077 + 4DC2F26AB9CEF233478420AED3FEA9A6E50F657C9B5F48E8F748EEB6E1699601 + 41247DF761AA8E4F2F5ADF3F651B0F2E338108EAEC25F88F9C392AF6CCB9C1EA + 6A4AEED4E0B814B4879255CBABE5AC6F2B37376E9CEBF7B736FF1F19183D00DF + A159C8F1E40849721C8C46AF565EEB2C3F777EBF5A04FA3D00C01FF0DCE6678F + 4268B50000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000F0000000F08060000003BD695 + 4A0000000473424954080808087C086488000002C04944415428916D92CD6B1C + 7518C73FCFCCEC6F3A3BC9EEA66477C1264DBA90A49552B06A52D12244AC1E8C + 41289E140BA250ACC516FA0778F120525AAA1EAC88277B11F1D2A57AB050853D + 986834502B4D5A4C76BB6DB331BB6167BB2FB3F3F4D02456F4737A0E0F7C5F9E + 4700B06324A78F9378E1ADAC38B163C094D5ED8C824A649B0520AF1A9D0B0ADF + 16D7BE7A1FBD570740B063A48F7D8AB76FF2B01DB6CEF72F5C4EA49666304105 + 804EBC8FEAC0E35446278330163FDE5EBAFAE5DD8F5E270AAAD8C9574ED273F0 + D5C36E7DE542EECA996D89D26F6AB7034001C5EEDCC35F5DA46F79C60499B169 + CDE68A4E76F8D7C6CF17B133EF7D9175A2F0BBDC95339E1BAC2222F2C093C8F2 + F811F1D66F89D369881DB64894E7A90E4D3C6F0DECBED0FCA350B5C489BDD3BF + 703969EA15E52104481567B9F9F4515A7E1A8058739DCCB5EF3D414EF8075EC6 + 02A6524B3300E8069B73EFAD797DE4F76FB8F9CC515A7E3FAAAAC9E22C824E99 + C13D3856B7336A820A5DE34B75E793FC1F6E7D851B07DF25F7E33931F515755A + F501316EDC01B53632D23571362CC04674540141ED189163FE95CC896CB3D089 + F73D1A0B56357335FF1FD5203D226BC307D8F5D3276CAB96B4EBFA12BA3D65A2 + 28B0807C7560FF66C1B2D9B68848901E91E213AF3154388F572B212252DBF118 + 8AE4DBA5EB58AAFA7165F4B920F452F2B0A202959149860A9FE3D54A0084C6E7 + EEEE17DB8A9E6ECC5EC276D283EBCEF0BE7290199B4E94E7B1C3D6968B647116 + A759531191D0F8FCF5D4DB347BB3A7DA8B73176B5F7F88DDBC56C0DBFBEC9C66 + 73C5EAD0C4218942C734FE162B6C2940D7ED91B59DE32C8F1F69377BB3A7C2B5 + 3B6757CEBE89366A0880E5A7D8FEC60778FB0FED129193824E39ADFA0E80D0ED + B9AD485E554FB76FCCFD59F9EC04DDCAF2D623FD73CFB109E2E32F6106F720C6 + 8D8388869DA0535EA4F1CB259A733F80465BFBF70130012CAEB180869F000000 + 0049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000001200000012080600000056CE8E + 570000000473424954080808087C0864880000034F49444154388D7D944D685C + 5514C77FE7BD37336FDECBC7746A624D2769D268D3DA626CC4C446EB4A258869 + 45AB0B174AA315142D5DB9D085204811053FC0D455C16A5D1434A8A0662508B1 + 821D328512828DF9E8C4B4C98C99376966E665DECCBB2E663269ACF50F7773B8 + E777CFFFDE7B8E5095D1DC46F4859384BAFAA222F2223008EC45A41EA51C2001 + 7CA394FA626DF27C6EF9F33729A592EBE90840E8CEFB683A711A2D5C37047C50 + 979E6A8C242F107692689E4B3968938FB69369EBA510895D055EF10BD7BF5FFA + F028C53FC72B20A37907DBDEFE0ECDAC3B69ACADBE118B9FA57E71A27202A094 + 522222000A70DA7A59B8F719BFAC078FFBF99553D7DE3944299544BFEDD56102 + DB760E196BABEF75FEF2317666B60601509A412954277AB98800E1EC5FD8A929 + C9B6F60C10B27E335AEE9ACE9F1F410B75F54505DE8FC5CF125A5DE2DFCA741C + 90E9878FE3998DB598BD3CC31D97BED5804FCD3DFD8140C73D68223264A7A722 + F58B13374100A2D363CA5A9E65FAE06B7866C3467CE65742B974A7881CB6EE7F + 1C0D188C24E39BEC6C92F289C5BF52D6F22C33075FAFC144F934CE8F030C0663 + BBD1807D61E70A00A5A045D18A6E5A9EBD553C6B8B344F8E621432CC3CB45159 + 356F9F66DA1808F59AE7A294528B773F217F773C78ABDA6ABAB67790D8852F95 + EEB982500F60A070CA416BAB88C8F6C439B627CE6D76567D7E5F33983B700CDF + 3069B9F8352222A5A00D0A07400312F968FBFF56E06B06730FBC44D930691F3B + 855E7201A8E62554D1450346326D7DA85BDDB51EA84082161D37407CCD201BEB + 011829CE5D42534A9D294462579DB6DEFF046576F44905325C8300A4763D8267 + 36249452A3F9F84FE8E6AE5ECF686ABD9CBB7DF7B3766A4A8205671328EC2455 + 241917BDB4568B655BBA59E83EE2223CE54E8C2D5CFFE133F4B5CBBF63F73FFD + 07212B9D6DED19D0BD82849D7964DDAC5268CA97753B4B5D8FB1D07DC455A23D + E7E7577E4E7D720C955FA9FCC360E77E9A4F9C46B31A1E058643B9F4CEC6F971 + C2CE1574CFA554EDFE6CAC07CF6C48002FFBB96C7CE9A3A314A72F026C7C68A3 + A9952DCFBF8BB9A73F20224FB2318F1A502A43651E8D28A546DD89317FF9CC5B + 94D3F335BB377546B0733F56CF0081D62E34D3AE6E51F86E8E62729242FCC75A + 1537EA1F26E35B172FA1BE610000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C086488000004D04944415448898D965B6C14 + 7514C67F6766763AED6EBBDB62B7D0EE96526A014530025A95104413F4A12602 + BE10A23180B7F8A0F112F4C127DF888F245E032662BCA3015F8857BC006DA480 + 20D55AA14528C86EB7B4C3EEB4BB33C707B6575BF17BFA92EFE43BFFF3FDCFFC + 33C204881326FAC0B344566F444CAB5444EE075A81E5229250B04133289DC0B7 + 8ABE8F72CA1F4C31F0FE2B64DBBE0094499EA3C4AA6DA2FAA9D708C51B4C4436 + 032F0BD45ADE652D4B9FC6CEF623411EDF8EE045EBC8C5921218A60FEC057D5E + 95EEECE1CF49EF7C110A23931B58B54DD43CF72E66B4BA12D80DAC8DA4BA8877 + EE279CEA528280A92838159269B8834BCD6BF02DC705B628FA9177EC6B2EED78 + 12FC0200A638116A5ED88D35ABAE12F8DA08F22BEB8E7EC49CE39F52924D832A + 520430C64D7F84B2D41F5AD9DB2E5E65BD3D12AE5A27C8F9D0EC791DE244F04E + 1CB8DA20F6E036CA6E5A6D021F1B417EE5DC836F6AF4AF0E1D351C352D121003 + 41C734D31F96E85F3FE34593325C5E7D1FC8F776E3D21EEFE48FF8993E8CF2D5 + 1B0136036B6B8F7DA2918B9D0AA0454CE4A9A6D572E68EC72430439334F1F39A + 6CDFA5CEE0450B781B0C27FAC0330018985629F07224D545E599834C8D6222B7 + 865DDCEA667A5AB68A5AF624CDC87BD41EFD108146117DD459D082196FC01091 + 5681DA78E7FEF1959A01B1DE764D1C790FB7FA7A7A5AB6A0A63D490FA7FEA02C + DDAD205B310C29BD790D06D06A7997359CEAD2E96299CA633D6DC5260BE869D9 + 2281311E17AA1A3BFB33C00D02F3EDBA660C607959FA3404C1B4B14CC72B7BDB + 491CD98D1BBFDA44CDF1B8C2A9EED181961BE555588824EC6CFFD89857AAE6E1 + D62C9C98D64C1C67F01CEEEC45D2D3B259E71E7A0B090A8C790909000BB02528 + 8C4EA8D9598D7271E1BDD7B88D0950D52BD5CDE46249294BFFA9452F01EC6203 + 1DF0EDF075A32356777DC575BF7F39F61DA8EAB4DCB71C4EAF7C022F9AA0BE6D + 2765E93F5544246F87475B0F0018289D5EB4F6FF9FB8687EE6CEC7F1A209926D + BBA8E83B31A68D795D7D1031806F73B17A293815D7DAD249E6D9CA7A926DBB88 + F6FD32491F9A7D234016D576BFBF0F43553F080CD3CF34DC3EE36A8EF22054CA + 993B1F2717ABA7FEF04E2ACE1F9FB4DABEE530905C01B0576168F8B7C318C0AF + C0DE4BCD7753288DFDE79A9E5FBA5E72B17A92EDE3279F58F7F7C2B5144AC281 + AA6E0FF21EB95F0E60F8832980E77DCB71CFAE7888C0B0668C67F6C97DD41F7A + 8BE8F9E3FFD286E62C9654D35D82EA1B4047F6A73DA8E762FA990B942EBB3723 + 22DD23E1AA755E342115174E22C5F77C228C8247897B695AF3DE5B1F410DB31D + 7453E066F2A91D4FA0790F337FAE8B504D03A1BA05BF0AD2371C89DF3754BBC4 + 74862E889DCBCC18978848102A958B8B5BA56FC97A51C36C47B555552FA7DF7C + 9AFCD953009800B9E3DF50925C44A8A6F108C20F8592C8AA81B9B755B9F166D4 + 0C89E1E731FC1104289444243BAB91F4FC559C5BB61137BE20005E477593AA5E + EE7FE725B26DFBC6A61B5F4DD322B6611BE5F73C0C228EC063886C05164D7B21 + 421665AFAA6E073A023743FFCE6DE48E7D35A56C0AECF9B710DDF0024ED32D88 + 618A4293C0F2AB6F8BD8A866804E853650574772B83F7EC6E09E5709AE0C4C73 + 8E1960C51B7096AEC14E3463945721C5522DFE9614FEEE65B8BB03EFC47768CE + 9DC9867F000F9E52E3CECDDE130000000049454E44AE426082} + end> + end + item + Name = 'symbol-arrow-right' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000C0000000C080600000056755C + E70000000473424954080808087C086488000001204944415428916366C00298 + 456418F87DB21918189918FEBC7A882A874D038F4D2883807FFE542E33EF97BF + 1FDF78FEE7C53DFC1AFE7DFBCCC065EA75968983672E9789C7F9DF8F6FBC8069 + C2AEE1CB3B861F970F7EE532F1DCCEC4C1339FCBD8E3ECEF27375EFE79718F81 + 9143DB169B1E060606060636796D06FEC062294626A655FFFFFCCA783D3DF70A + A3FCBC7BFBFEFFFFCFC0C0C0C0C0C8C8C8808DCDC0C020C6C0C0C0F3E3CE590D + 96CF07963BE1B28189938781CBCC8793818161350303C3CC1FD78EFEC0E91C46 + 4E1E06F1AA351C7273EF6E929B7BD79F3FA40CA75A06460E1E06F1AA35EC7273 + EF6E909B7B3748009F62060606065ED72406B9B97767C9CDBD1B8AAE186BB032 + B2B030B04AABEFFD7A7ACBC58FAB3BF09B4E0800004815621AC97678C5000000 + 0049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000F0000000F08060000003BD695 + 4A0000000473424954080808087C0864880000018049444154289195913B4B63 + 4118869F993924E7E4628248C4BBE28A951245B05548636163EB8F101514D14E + D065057FC1AED8D869171412BC60A19D92C64654509B44D4E08503C9C4B1B130 + BB9C13F68181AF781FDEEF63143ED8FDA3D87D23548A058CFBEA17AD46D811DA + 7E5FB6B4FFB99A6FFE7988AA6FFE27233D6D53C1E8D21390B212EDAB8D735BA8 + FAA6AA88F2942B9AD2754E8786C6768465CDC970ACC749A60EDCB30CC67DAB21 + 03FAE18ED24DAEEC0C8D6D0B692DA870ACCB19481DB967598CFB8A92750D8860 + C8F3555E1ED10FF765BB7F744708B1A4C2B15627993A76CF33888E8DEB290063 + 0C4208BC66630C4014580496DFCFB32B1610F35BFD2FE25FA76A211522D83B5C + D308FE18243E315B07620F48EBE7FC6A616D12514B0C740F9098D98C4A27B20B + 64F4737EB9F06B129DBFF1F96720D03D48627A332CED481AD8FF2E02DECD22E0 + D0B27E1A924E340D9CE8627EE9BB086079D62A85742271634CFAE3BDB85E58AB + 167D9B0142C3E358894EDCDC3EE5DB0BBFE8FFF3093DF98CE2BF018526000000 + 0049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000001200000012080600000056CE8E + 570000000473424954080808087C086488000001B149444154388DADD43F6813 + 7118C6F1EF7BB94B6C315C4DB47046118204A44851D141B014691D04AB9BADBA + 14C1C94044500417412A4EBA0AB67B8576688BB4D7EAAE882022C441C1FE190C + D2A63126E899BC0E355062CAFD0A3EF3C307DE17DE5708893831761CEE05AD53 + 7DF712EAB5963D3B0CEA18BC4BBCF7521750ACBC79BEF2ED49AE256685419178 + 02601861A1FDF8592F79ED1158917F7B61903831DA8EF42D08720CB8134D6526 + 6D2F5DAEBEF541D51C0A96F2D4D6BE6A5BF7E919B1E404C2ADE8DECCA4EDA57F + 6CC642218060F143039B16380972339ACA4CD85EBAD2C08CA006A695723DD675 + 6A4A447A801B4E2A33E1FCC564DFE3D7074C31006B670244A2C018D0AEAAFDA5 + B9A7ABB6154F7EDE0ED41C11C9DA09EF9E5D5B2F188F0710713B51D53D22F202 + 78AF703F58CE23DB41DC0B39DC73D9DDC03CF051E1CA777FF477717CC41C72CF + E77007AE2711F1814F28974BFE68501C1F0130833690EC2EC047584419DC8C80 + C189C4CF5CC51DC87600B3C00A30D48C80C1D1C60E1E05780814402F96E6C67E + 3523465050F882AADE46B55A7E35F5B3F8EC41CB5EF88EC4C2D97F68035DCE6F + F98FFE5BFE0067E3A1D8D9AE122C0000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F80000000473424954080808087C0864880000028A494441544889D595CB4B54 + 6118C67FEF993317CF4C4E928EE51573B20B1539BA096C37C8488B0832088336 + 51908BD4701361A0EE6A917F811995AB4C5CE64CB80ED2BC11419B02A334BCE4 + E440CDCCDB62341C33F3649B9ED57738CFF7FC9EF7E3E31C073665F80388C70B + 2290FCF647BFD809F79F6D23F7743380A4973FEBEC9D26BE7F78BB75213B006F + 5D23229C1161C8919B6F05DA1F621605FF1D60551622F5084F1DFE829CC2F647 + 388B0EFCD6ECB093EC2A3B82ABF4D014F00E91EB28B586DB1AB06A23C9C4E408 + E9E5F99D0112AF6298FBF6E32CAE9A10E13DD08A1012B735E0AD89A4121323A4 + E3D9105B0054498C3EC3B9B7025749D538308348ABC009F17807BC350DA98D93 + D803AC41C686310B2B7016578D89EA270C69113866B8AD41ABB6216B12FB8075 + 1077C571CC82B297C09C88DC40382C6E6BD00A45D289C90C44F2CEDFFC2B0680 + 78BC58758D88618048B321D2A3AA4F80A6E4D25C72F6EE45CCDCC8E5DB99528A + 88B0DDF5DA73F660FA46441A5535E9F0E75FF2D69D4B9AAADAB1D986EDAC3793 + 660CA7804260C61411C78E2610015554F5A088C4565F85416652F31F1157F9D1 + 2D1B6D2577B086DD176E21620481E7642E4D58555F2FC7FA58ECEFB6F7B15B2F + 57653581B6FB1839BE4A2006B851C2C0F497681F8BFD5D8062FE55783044A0A5 + 17C3E3AB4089021E84B0C2743CD6C7627FE74FAF6D802B1822D0DA8BE1F19503 + 51040BA55E95A978AC8F85C75D597E5B005765F55AF3D2D5F05CA01E613C1E5D + 0BCFBE65B600F957EF61E4F84A8018421E4ABDC258A679E7A67B6C01C4E104B8 + 06ECD1B436208CC6630F7E3996F5B2F5C349AD2C816A87AA9E54D5172BA3C32C + F477B3F158B24AD9019805A5EC8A5C0185F4D74596867A2095B413F11FEA0712 + F00EFEC86A8B360000000049454E44AE426082} + end> + end + item + Name = 'debug-breakpoint-filled-ok2-symbol-arrow-right' + SourceImages = < + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000C0000000C080600000056755C + E7000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA864000001F0494441542853636400 + 825C2B2B86065757334E1696F2AFEFDFEAFCFDFD730217BFD066160E4ED92B2F + 5E5C885DB9F2FBCDD7AF414A1918418A3BBDBCD2DE3DBC3BF9CED1DDCCDF3F7D + B80A140F4D6FBC98AFF0E6CEAAAD5F8F18BFFDF57BA1D5B4696F9F7DFAC4C004 + 3219A4F8CACEB5CC3F3E7F0419220DC4519A97B6773F105169B6E777392ACAC5 + E505520C024C406714024D7EC4F0FFFF1320FF23232323088716AEABD4E47B76 + 23F28D804C8F23BFCB8DD77575C2600D403737009D61FCFFFF7F6D205F1148EB + 03B10990BDBF7B66F88BFFFFFE85BFE011EF37930A97026960949F776F1F5001 + 88CD0034196811261B08C48098E7C79DB31A8C1F6BAAD98F2F9ACC0094854841 + 008CF327ADE1023B905E0DC433FF19D67D6562E5E00C1457D53E0134ED085070 + 0F904E06E23940B64997733127905EC9F0FFEF1C06C33A908DEF98FDB5B4EEAA + AB6B277E7CFE44F70DC7DF86F939FA17B9BFFCDEB04D3EE8D14597CCA50CFFFF + 2D62306CFCF397E1FFD30F1DA7CF33AA8B8A32EC4C4E160106DD844BCC6F7BE3 + DDDEA5307EFBD1FBFD4E470550F11E06C3FA2FFF18185EBEEF387DF6EBEADB0C + CC6FBF7D635875E9D237212EAE75A602D2ACCFD87FADB824F937F21FEBA5550C + CADB15809E7904547C1AA4183B606766109EE7CC247D2E6A8AD499085BEE3035 + A80408303000003D82ED1000094F790000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000000F0000000F08060000003BD695 + 4A000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA864000002C949444154384F95526B + 489351183EDF659BB3BECDD2E665F3365DA6815192B702A1B20B24959A640A82 + 61172CFCA1996E2AA3A6F423A190FC9114A56817347FA4583F1222DBF04BC5AE + 122C6D6EC3086BB2DCE59BDBF7F59E69F427821E78789FF79CF7765E0E81004A + 990C751517A3BCC4C45C8220AA9120E405FC2B0A92164D83DF0B216C68539329 + 333616B1562B4E098250CAE5E8795515151716D6EE762C565B268DC40FEB2C0A + F8B885D1ECB2F207072F66B3D3D7AECB2295C73D2B2B0347BBBB3D2FE7E682C9 + 64575111C2898BB39FCE4F0EDC25BE993F0A7ECE2B00A63FA8B64D41CCBECCED + 757AFBBB89475291E8CCBD92122493485693F3D4EA5CDC7166F4091202010463 + 069F0226F5427F3D2DF8BC47C0CDDA7BA0BDC561FBD219C530194E8EC3218884 + C87218D5CEFBFD76F017D668035240FDADD62C8EF7790B908076E7EC6CD4C1D9 + 5B6010242CA71EDEA801AD8151938149A03783C57E1D68C27676AB8BE7F902D0 + 7BB6449736CCD4D692A011117F67B6060B08C4A362F9578D2D8001E2EE57E64F + 25B5E10AF2FFE046207E8E5F35551649B80D06D1FB917EFEBBC50C6768B51D34 + 5CB318C221DB321F77DB2C83EB11F08724E9FAFB1E8ABF8C3B67C7EDC8794190 + E4188C67048EC1D961B01D402D684A75F30D03B30F43E9A7A2345D3B24EA059E + 3F4795A4A7CFC728A2F6D36249BEC33A17B1CC881B072AD24C4EB9784865719A + 4E5F7A4591D2F53871549CA2357021B456E08566472BEB22F0971BA9AC94C207 + E8737EB509CFC2160B9B8F498669CEDFE79B6A1C24A5CC1074374A52B42D9E50 + BA0116D7E130B03FDD836644D99D4E64B258FCF91ACDC3F0F04D647C88423D1E + EEBE6167781DE58B7A2D78230571AAEEAA3794AE878E9D4BADE34EF7E067A8F7 + 6741C12F579191817625242063840BF5974B23489AEC811016AE1320B166A98D + 5D723D0E2EF6DF9016A951CC44A9423979B2277AE2C4867585C96B37BF81D02F + 60D62E29C39261400000000049454E44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D494844520000001200000012080600000056CE8E + 57000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA864000003BA49444154384F9D537B + 4C935714BFDFFD5ADA022D6DA1B47622742D621719E03F0A064C142275F1B1C4 + 4463E01F19FE33B72866C66599687DE173306248364C44E32BC368E525B2C648 + A65191381F2028AFB23931685B5A0B7D7CDF773DF7A34699FB6BBFE4F7DD73CF + 3DF7D773CE3D6550141BB2B35195CD8692E2E2F2605B062C400C93026B0411D2 + 036B3321E4F4A8D7EBDAEC7020E7C000B8DE4314AA2C2C44DB972C51310C53C7 + 47C2EBC6FA1F21B76B1005FD5EC4601CEC9B5FD4309996D9B849319105E24810 + 849AAF1D0ED2D0DD2D8A503034935FD7AE5581E2EF9EBF4716F45F6F46E1C940 + F4184132E4E58E8AF6768FDA906B197B626B9CB8F1A55C9990C211B2CD565F4F + 6EBA5C621CAE5AB182A65547451EB7FD3643240AE5FE9A2FFEC41CD735A0B7B6 + AC972FBC140EBC094A18A6FCE8CA95D3250170626C6C2E2D8766420421EA9E01 + 052BF03FD41EC8733284BFDF979AD3542EC9AC077F24D36088CF3799C4200C8A + 65B427FF91C987489472E1EDD5070ACE622ED273276DD1A562CDF2AB7057DD39 + 3C2C06601A048DA55D7B08BC057C0C7C067C027C0AA4CF3308248A70A0A2A62A + BF8D11F8FE11B9B6352F794D18FC229892232DF39FFA43A19850007358422402 + 27964D6D1917C498E7E09DDE838955A1D1595621248BA3E5C5C26314FDF595C5 + CDCC3931C84F87FC6FD847CBCCBB99C9BD7B137B3B2E4FBD1AEA8FFAC587A0E2 + 84DAF08B2CCC17B5DFF9F8F2CAFB5AF039C17E94987ED83E1EEFB7D11E6DD199 + AD7472699FBA80F780B4576DD195EEEF00CF03D71DDC78520F22D7C0EED5A656 + EF7815EF6F077516C3E784CE3457AFD4CD4A87C30C205DE7018F031B81166032 + D0F953699D733035BB09727EA64A3EF2DD6BADBB03EED7C1A81F654B7372BC6A + 8542D0CC4E5B4ACB83990A4D292425D7567FDAEAB224DC983DE2F3497872F1E7 + 0DB5ADBDE98BAF80884BA339BCD593E2A7A59D2202A9F2ECBE8DD8BEF171B43E + 2BEBA6542637269BAD0B788EFBE66EAEFECCE952F385BECF93F223525CD9B0EC + CCF351E367CD70F11FB5E6D816779AAF05ECF320B28F8A4C360D2376D8ED46CF + 7D3E549C91D12295C9C6B4734C257106E3D5EB86408F5F860E8D58D41782BE55 + BBE0224E50D76EF698DC7F807D8EF0C4EED9434586600B4DA29F072F5EA0CEA1 + 2194633476EB95AA8BBAB0D4EC95F277EF69A73A098B2B48CCEB6A92D4E9081A + 5E7640F839C864A72872655A84E2C359133705F0DFB1EAF5C8C34690F35B1D8A + 31AB1763CCB6C2911C780C44BEF7D8678A50CC10FA37B04181927E2944D24F94 + 0530424502117E9CB0777D248210426F0153569C06E75E695B0000000049454E + 44AE426082} + end + item + Image.Data = { + 89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D + F8000000017352474200AECE1CE90000000467414D410000B18F0BFC61050000 + 00097048597300000EC300000EC301C76FA8640000057349444154484BAD550B + 4C9565187EFFCBB9783C20E728025EA044F00E4433975B04C4259D0AF392BAD6 + CC8C1A669B46B6C5D515ABA6A5B9B2865331EF520496E63C686D4D312511D118 + 123A45081C37B99C039CCBFFF7BC3F1799DA72AB677BCFF7BCEFF77DEFF77ECF + F7FDDF116818124242E8B3050B6892D54A82203C8DD00A58149CC918E8A51275 + 91AAD622F62BEC88AAAA979AED76CAB6D9685F7939420F636881F498184A8F8D + 25511042E16EC302091E974BE8BCDB40F6B666F2B89C24E9F49E9156DF0B66BF + F1D7753A5D3416A8C1D80D58B4E6C0E5CBB4B6B898DC8AA2E51B84B60027CE80 + C149869BEFEEEBF5AA2B2FA5A6EA4A72F5F5A2F0211C599779A1C8A533AEDE58 + B62B7595AF54281B8C5CD06A0C2A2EA8ACA4D50505FD230720258486D2974949 + 5C7932AA3EDAD9D460BCF2E3616AAFBF458AC7A30D425C03E8F6632FBCCD81B4 + D2F191E1FA33875F09D529738D5EA336A0EFDA4C3FBFEA3687837EAFAFD7E631 + 44D67C4096FC8EC67AA9F2C451EAB3770DAF7A38A2776E8A288024AF639598CF + 976CFEFAAB7AC732CCDB8FBE7C5868565C1C8D3699B4C10C7192C5C2ED5696A5 + AAA498B5D692435F0D0FF0956852F272C20F229A023F61EFA2EC3D9B3B47A661 + FE29F85B47190CF4DAECD93C4D038A17226189ACB9D3D1ADC9C11DDC321EE03C + 9E2FC0473B73220EC17F13BD2F7EF77CEABE2F3A8C6F20DE0C8B5C1E16C6D334 + 88B0157C5BF8401F133A581AEC53EC642F29CA5BB81DF3F3C257E67F629AB50E + F1E0A963C70EC9C40B44F155E4DB3208EE18A0FFC4B945F5B4396F53C42E5551 + 71F2949CEF3D23FF63AFA78E9BB3B228D0C7878793D0939BFB6AFDD54BFADA73 + 255ED89E15311993FF02BF0BCEC902C0F93AF5807B833BC05B615DF0794E3BF8 + CF299B2A52A1DF76C40AE1BF5CB726D88D9684A03D377398A083B566FA589CC1 + FE037809FDD3103F8C3DAEBAB366B25B08DC7DA3FFB2FFBF68C002CF628186FB + E5FC474CDC553B05D59F1970632922FBB622D013822337374A71BB469FDFBFA3 + C5E3ECB3732FB668C56033289FBC01BC1B5C013782F3F5E08FE71EFC76F8B56B + 332FEADDB29E934BB038393CA7C625D141F47B6404EC78C4CEF84F0D131A2ACB + E06A60710777D70BAB8645C086C799EF7DE7BD5FB6B8757A1BB80E9138292CFB + 8653A453E0C8AF2689F8B904B30545CE25BDC9AC45B5D9FDE01BB3182DBF9C67 + 87C53DB0FD19EB4F6CE936593899115DF1E2ACCC3F51F94FE002FA93C9A33844 + 7ECF810D7815BBA6C727F393AC5588AD3BDC7A6949C533FEB692A4E0EEA609E6 + 45089E479CB16DFDFB673F6CB14C3889FDB06489D2F48C2AB74EDA012EA3F824 + F2A8F6B6CC5292F8F55B306D1ADFEB1ABC8A4B7D020205BCA43D586871D9EC31 + A70FA6864557CCF14F6B9AE0F5C3C49B1D85DE1DCE3B1BDF3D7DC46EB29420F9 + 284E2E4FCFB8EA3248BBC183917C21B9D5EEB6CC73D463AB23E94A632305E1AB + 9B1510C03A5F3398BDE7F94F99F987C93226F762D43877D993D2078A28AC69F1 + 1B31AE699CF9FB6FA28F37F6E94DA791DC0A69903CFDAAD3207F8BB913610B51 + 79575B069297D4C1ED3F753A79FD3A05E36F72A6BF7F35442E12655DB4C9327A + 998F642EAAB0F41C6B3578C204515CD9EA3BE2967037761EA63C078DE7CB3332 + CA5D467927FC49B0F9AA5BE96459069333B40570FFE8585515B15C7302035B0D + B27C083AD7F83AE5905E51A92D1D632FC6C947E02D5DAAFA5C594BCD73F629E1 + 59358A4E3A80E921304E7E4F4B6EBBCD2987F0D087C6AF20BFE7CBC3C3C96234 + 9243566859CC1DEAB28A0674170A821801690E61E612F87C7689AA47696F4BBF + 2FCB703CD6972C057991353F9674DE238C90AA4814C44445552AB0503C346F7D + 54E583D024FA37A81D4E72953793313ED02DE8E52244BC55454951544FCBBDEC + DFA8E7D4A3931311FD0D09AFA824046F8DF70000000049454E44AE426082} + end> + end> + Left = 80 + Top = 91 + end +end diff --git a/Projects/Src/CompForm.pas b/Projects/Src/CompForm.pas new file mode 100644 index 00000000..b11c0bf7 --- /dev/null +++ b/Projects/Src/CompForm.pas @@ -0,0 +1,6607 @@ +unit CompForm; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + Compiler form +} + +{x$DEFINE STATICCOMPILER} +{ For debugging purposes, remove the 'x' to have it link the compiler code + into this program and not depend on ISCmplr.dll. You will also need to add + the Src folder to the Delphi Compiler Search path in the project options. + Also see Compile's STATICPREPROC. } + +{$IFDEF STATICCOMPILER} +{$R ..\Res\ISCmplr.images.res} +{$ENDIF} + +interface + +uses + Windows, Messages, SysUtils, Classes, Contnrs, Graphics, Controls, Forms, Dialogs, CommDlg, + Generics.Collections, UIStateForm, StdCtrls, ExtCtrls, Menus, Buttons, ComCtrls, CommCtrl, + ScintInt, ScintEdit, ScintStylerInnoSetup, NewTabSet, ModernColors, CompScintEdit, + DebugStruct, CompInt, NewUxTheme, ImageList, ImgList, ToolWin, CompFunc, + VirtualImageList, BaseImageCollection, ImageCollection; + +const + WM_StartCommandLineCompile = WM_USER + $1000; + WM_StartCommandLineWizard = WM_USER + $1001; + WM_StartNormally = WM_USER + $1002; + +type + PDebugEntryArray = ^TDebugEntryArray; + TDebugEntryArray = array[0..0] of TDebugEntry; + PVariableDebugEntryArray = ^TVariableDebugEntryArray; + TVariableDebugEntryArray = array[0..0] of TVariableDebugEntry; + TStepMode = (smRun, smStepInto, smStepOver, smStepOut, smRunToCursor); + TDebugTarget = (dtSetup, dtUninstall); + +const + DebugTargetStrings: array[TDebugTarget] of String = ('Setup', 'Uninstall'); + +type + TStatusMessageKind = (smkStartEnd, smkNormal, smkWarning, smkError); + + TIncludedFile = class + Filename: String; + CompilerFileIndex: Integer; + LastWriteTime: TFileTime; + HasLastWriteTime: Boolean; + Memo: TCompScintFileEdit; + end; + + TIncludedFiles = TObjectList; + + TFindResult = class + Filename: String; + Line, LineStartPos: Integer; + Range: TScintRange; + PrefixStringLength: Integer; + end; + + TFindResults = TObjectList; + + TMenuBitmaps = TDictionary; + + TCompileForm = class(TUIStateForm) + MainMenu1: TMainMenu; + FMenu: TMenuItem; + FNewMainFile: TMenuItem; + FOpenMainFile: TMenuItem; + FSave: TMenuItem; + FSaveMainFileAs: TMenuItem; + N1: TMenuItem; + BCompile: TMenuItem; + N2: TMenuItem; + FExit: TMenuItem; + EMenu: TMenuItem; + EUndo: TMenuItem; + N3: TMenuItem; + ECut: TMenuItem; + ECopy: TMenuItem; + EPaste: TMenuItem; + EDelete: TMenuItem; + N4: TMenuItem; + ESelectAll: TMenuItem; + VMenu: TMenuItem; + EFind: TMenuItem; + EFindNext: TMenuItem; + EReplace: TMenuItem; + HMenu: TMenuItem; + HDoc: TMenuItem; + HAbout: TMenuItem; + FMRUMainFilesSep: TMenuItem; + VCompilerOutput: TMenuItem; + FindDialog: TFindDialog; + ReplaceDialog: TReplaceDialog; + StatusPanel: TPanel; + CompilerOutputList: TListBox; + SplitPanel: TPanel; + HWebsite: TMenuItem; + VToolbar: TMenuItem; + N7: TMenuItem; + TOptions: TMenuItem; + HFaq: TMenuItem; + StatusBar: TStatusBar; + BodyPanel: TPanel; + VStatusBar: TMenuItem; + ERedo: TMenuItem; + RMenu: TMenuItem; + RStepInto: TMenuItem; + RStepOver: TMenuItem; + N5: TMenuItem; + RRun: TMenuItem; + RRunToCursor: TMenuItem; + N10: TMenuItem; + REvaluate: TMenuItem; + CheckIfRunningTimer: TTimer; + RPause: TMenuItem; + RParameters: TMenuItem; + OutputListPopupMenu: TMenuItem; + POutputListCopy: TMenuItem; + HISPPSep: TMenuItem; + N12: TMenuItem; + BStopCompile: TMenuItem; + HISPPDoc: TMenuItem; + N13: TMenuItem; + EGoto: TMenuItem; + RTerminate: TMenuItem; + BMenu: TMenuItem; + BLowPriority: TMenuItem; + HDonate: TMenuItem; + N14: TMenuItem; + N15: TMenuItem; + RTargetSetup: TMenuItem; + RTargetUninstall: TMenuItem; + OutputTabSet: TNewTabSet; + DebugOutputList: TListBox; + VDebugOutput: TMenuItem; + VHide: TMenuItem; + N11: TMenuItem; + TMenu: TMenuItem; + TAddRemovePrograms: TMenuItem; + RToggleBreakPoint: TMenuItem; + RDeleteBreakPoints: TMenuItem; + HWhatsNew: TMenuItem; + TGenerateGUID: TMenuItem; + TSignTools: TMenuItem; + N16: TMenuItem; + HExamples: TMenuItem; + N17: TMenuItem; + BOpenOutputFolder: TMenuItem; + N8: TMenuItem; + VZoom: TMenuItem; + VZoomIn: TMenuItem; + VZoomOut: TMenuItem; + N9: TMenuItem; + VZoomReset: TMenuItem; + N18: TMenuItem; + ECompleteWord: TMenuItem; + N19: TMenuItem; + FSaveEncoding: TMenuItem; + FSaveEncodingAuto: TMenuItem; + FSaveEncodingUTF8WithBOM: TMenuItem; + ToolBar: TToolBar; + BackNavButton: TToolButton; + ForwardNavButton: TToolButton; + ToolButton1: TToolButton; + NewMainFileButton: TToolButton; + OpenMainFileButton: TToolButton; + SaveButton: TToolButton; + ToolButton2: TToolButton; + CompileButton: TToolButton; + StopCompileButton: TToolButton; + ToolButton3: TToolButton; + RunButton: TToolButton; + PauseButton: TToolButton; + ToolButton4: TToolButton; + TargetSetupButton: TToolButton; + TargetUninstallButton: TToolButton; + ToolButton5: TToolButton; + HelpButton: TToolButton; + Bevel1: TBevel; + BuildImageList: TImageList; + TerminateButton: TToolButton; + LightToolBarImageCollection: TImageCollection; + DarkToolBarImageCollection: TImageCollection; + ThemedToolbarVirtualImageList: TVirtualImageList; + LightToolbarVirtualImageList: TVirtualImageList; + POutputListSelectAll: TMenuItem; + DebugCallStackList: TListBox; + VDebugCallStack: TMenuItem; + TMsgBoxDesigner: TMenuItem; + TRegistryDesigner: TMenuItem; + ToolBarPanel: TPanel; + HMailingList: TMenuItem; + MemosTabSet: TNewTabSet; { First tab is the main memo, last tab is the preprocessor output memo } + FSaveAll: TMenuItem; + RStepOut: TMenuItem; + VNextTab: TMenuItem; + VPreviousTab: TMenuItem; + N20: TMenuItem; + HShortcutsDoc: TMenuItem; + N21: TMenuItem; + EFindPrevious: TMenuItem; + FindResultsList: TListBox; + VFindResults: TMenuItem; + EFindInFiles: TMenuItem; + FindInFilesDialog: TFindDialog; + FPrint: TMenuItem; + N22: TMenuItem; + PrintDialog: TPrintDialog; + FSaveEncodingUTF8WithoutBOM: TMenuItem; + TFilesDesigner: TMenuItem; + VCloseCurrentTab: TMenuItem; + VReopenTab: TMenuItem; + VReopenTabs: TMenuItem; + MemosTabSetPopupMenu: TMenuItem; + VCloseCurrentTab2: TMenuItem; + VReopenTab2: TMenuItem; + VReopenTabs2: TMenuItem; + NavPopupMenu: TMenuItem; + N23: TMenuItem; + LightMarkersImageCollection: TImageCollection; + DarkMarkersImageCollection: TImageCollection; + ThemedMarkersVirtualImageList: TVirtualImageList; + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure FExitClick(Sender: TObject); + procedure FOpenMainFileClick(Sender: TObject); + procedure EUndoClick(Sender: TObject); + procedure EMenuClick(Sender: TObject); + procedure ECutClick(Sender: TObject); + procedure ECopyClick(Sender: TObject); + procedure EPasteClick(Sender: TObject); + procedure EDeleteClick(Sender: TObject); + procedure FSaveClick(Sender: TObject); + procedure ESelectAllClick(Sender: TObject); + procedure FNewMainFileClick(Sender: TObject); + procedure FNewMainFileUserWizardClick(Sender: TObject); + procedure HDocClick(Sender: TObject); + procedure BCompileClick(Sender: TObject); + procedure FMenuClick(Sender: TObject); + procedure FMRUClick(Sender: TObject); + procedure VCompilerOutputClick(Sender: TObject); + procedure HAboutClick(Sender: TObject); + procedure EFindClick(Sender: TObject); + procedure FindDialogFind(Sender: TObject); + procedure EReplaceClick(Sender: TObject); + procedure ReplaceDialogReplace(Sender: TObject); + procedure EFindNextOrPreviousClick(Sender: TObject); + procedure SplitPanelMouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Integer); + procedure VMenuClick(Sender: TObject); + procedure HWebsiteClick(Sender: TObject); + procedure VToolbarClick(Sender: TObject); + procedure TOptionsClick(Sender: TObject); + procedure HFaqClick(Sender: TObject); + procedure HISPPDocClick(Sender: TObject); + procedure VStatusBarClick(Sender: TObject); + procedure ERedoClick(Sender: TObject); + procedure StatusBarResize(Sender: TObject); + procedure RStepIntoClick(Sender: TObject); + procedure RStepOverClick(Sender: TObject); + procedure RRunToCursorClick(Sender: TObject); + procedure RRunClick(Sender: TObject); + procedure REvaluateClick(Sender: TObject); + procedure CheckIfRunningTimerTimer(Sender: TObject); + procedure RPauseClick(Sender: TObject); + procedure RParametersClick(Sender: TObject); + procedure POutputListCopyClick(Sender: TObject); + procedure BStopCompileClick(Sender: TObject); + procedure HMenuClick(Sender: TObject); + procedure EGotoClick(Sender: TObject); + procedure RTerminateClick(Sender: TObject); + procedure BMenuClick(Sender: TObject); + procedure BLowPriorityClick(Sender: TObject); + procedure StatusBarDrawPanel(StatusBar: TStatusBar; + Panel: TStatusPanel; const Rect: TRect); + procedure HDonateClick(Sender: TObject); + procedure RTargetClick(Sender: TObject); + procedure DebugOutputListDrawItem(Control: TWinControl; Index: Integer; + Rect: TRect; State: TOwnerDrawState); + procedure OutputTabSetClick(Sender: TObject); + procedure VHideClick(Sender: TObject); + procedure VDebugOutputClick(Sender: TObject); + procedure FormResize(Sender: TObject); + procedure TAddRemoveProgramsClick(Sender: TObject); + procedure RToggleBreakPointClick(Sender: TObject); + procedure RDeleteBreakPointsClick(Sender: TObject); + procedure HWhatsNewClick(Sender: TObject); + procedure TGenerateGUIDClick(Sender: TObject); + procedure TSignToolsClick(Sender: TObject); + procedure HExamplesClick(Sender: TObject); + procedure BOpenOutputFolderClick(Sender: TObject); + procedure FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure VZoomInClick(Sender: TObject); + procedure VZoomOutClick(Sender: TObject); + procedure VZoomResetClick(Sender: TObject); + procedure ECompleteWordClick(Sender: TObject); + procedure FSaveEncodingItemClick(Sender: TObject); + procedure CompilerOutputListDrawItem(Control: TWinControl; Index: Integer; + Rect: TRect; State: TOwnerDrawState); + procedure FormAfterMonitorDpiChanged(Sender: TObject; OldDPI, + NewDPI: Integer); + procedure POutputListSelectAllClick(Sender: TObject); + procedure DebugCallStackListDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; + State: TOwnerDrawState); + procedure VDebugCallStackClick(Sender: TObject); + procedure HMailingListClick(Sender: TObject); + procedure TMsgBoxDesignerClick(Sender: TObject); + procedure TRegistryDesignerClick(Sender: TObject); + procedure MemosTabSetClick(Sender: TObject); + procedure FSaveAllClick(Sender: TObject); + procedure RStepOutClick(Sender: TObject); + procedure TMenuClick(Sender: TObject); + procedure VNextTabClick(Sender: TObject); + procedure VPreviousTabClick(Sender: TObject); + procedure HShortcutsDocClick(Sender: TObject); + procedure VFindResultsClick(Sender: TObject); + procedure EFindInFilesClick(Sender: TObject); + procedure FindInFilesDialogFind(Sender: TObject); + procedure FindResultsListDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; + State: TOwnerDrawState); + procedure FindResultsListDblClick(Sender: TObject); + procedure FPrintClick(Sender: TObject); + procedure TFilesDesignerClick(Sender: TObject); + procedure VCloseCurrentTabClick(Sender: TObject); + procedure VReopenTabsClick(Sender: TObject); + procedure MemosTabSetPopupMenuClick(Sender: TObject); + procedure MemosTabSetOnCloseButtonClick(Sender: TObject; Index: Integer); + procedure StatusBarClick(Sender: TObject); + procedure SimpleMenuClick(Sender: TObject); + procedure OutputListKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure RMenuClick(Sender: TObject); + procedure BackNavButtonClick(Sender: TObject); + procedure ForwardNavButtonClick(Sender: TObject); + procedure NavPopupMenuClick(Sender: TObject); + private + { Private declarations } + FMemos: TList; { FMemos[0] is the main memo and FMemos[1] the preprocessor output memo - also see MemosTabSet comment above } + FMainMemo: TCompScintFileEdit; { Doesn't change } + FPreprocessorOutputMemo: TCompScintEdit; { Doesn't change and is the only memo which isnt a TCompScint*File*Edit} + FFileMemos: TList; { All memos except FPreprocessorOutputMemo, including those without a tab } + FHiddenFiles: TStringList; { List of files which *do* use a memo but are hidden by the user and have no tab } + FActiveMemo: TCompScintEdit; { Changes depending on user input } + FErrorMemo, FStepMemo: TCompScintFileEdit; { These change depending on user input } + FMemosStyler: TInnoSetupStyler; { Single styler for all memos } + FCompilerVersion: PCompilerVersionInfo; + FMRUMainFilesMenuItems: array[0..MRUListMaxCount-1] of TMenuItem; + FMRUMainFilesList: TStringList; + FMRUParametersList: TStringList; + FOptions: record + ShowStartupForm: Boolean; + UseWizard: Boolean; + Autosave: Boolean; + MakeBackups: Boolean; + FullPathInTitleBar: Boolean; + UndoAfterSave: Boolean; + PauseOnDebuggerExceptions: Boolean; + RunAsDifferentUser: Boolean; + AutoComplete: Boolean; + UseSyntaxHighlighting: Boolean; + ColorizeCompilerOutput: Boolean; + UnderlineErrors: Boolean; + HighlightWordAtCursorOccurrences: Boolean; + HighlightSelTextOccurrences: Boolean; + CursorPastEOL: Boolean; + TabWidth: Integer; + UseTabCharacter: Boolean; + WordWrap: Boolean; + AutoIndent: Boolean; + IndentationGuides: Boolean; + LowPriorityDuringCompile: Boolean; + GutterLineNumbers: Boolean; + KeyMappingType: TKeyMappingType; + ThemeType: TThemeType; + ShowPreprocessorOutput: Boolean; + OpenIncludedFiles: Boolean; + end; + FOptionsLoaded: Boolean; + FTheme: TTheme; + FSignTools: TStringList; + FFindResults: TFindResults; + FCompiling: Boolean; + FCompileWantAbort: Boolean; + FBecameIdle: Boolean; + FModifiedAnySinceLastCompile, FModifiedAnySinceLastCompileAndGo: Boolean; + FDebugEntries: PDebugEntryArray; + FDebugEntriesCount: Integer; + FVariableDebugEntries: PVariableDebugEntryArray; + FVariableDebugEntriesCount: Integer; + FCompiledCodeText: AnsiString; + FCompiledCodeDebugInfo: AnsiString; + FDebugClientWnd: HWND; + FProcessHandle, FDebugClientProcessHandle: THandle; + FDebugTarget: TDebugTarget; + FCompiledExe, FUninstExe, FTempDir: String; + FPreprocessorOutput: String; + FIncludedFiles: TIncludedFiles; + FDebugging: Boolean; + FStepMode: TStepMode; + FPaused, FPausedAtCodeLine: Boolean; + FRunToCursorPoint: TDebugEntry; + FReplyString: String; + FDebuggerException: String; + FRunParameters: String; + FLastFindOptions: TFindOptions; + FLastFindText: String; + FLastReplaceText: String; + FLastEvaluateConstantText: String; + FSavePriorityClass: DWORD; + FBuildAnimationFrame: Cardinal; + FLastAnimationTick: DWORD; + FProgress, FProgressMax: Cardinal; + FProgressThemeData: HTHEME; + FProgressChunkSize, FProgressSpaceSize: Integer; + FMenuThemeData: HTHEME; + FToolbarThemeData: HTHEME; + FMenuDarkBackgroundBrush: TBrush; + FMenuDarkHotOrSelectedBrush: TBrush; + FDebugLogListTimestampsWidth: Integer; + FOnPendingSquiggly: Boolean; + FPendingSquigglyCaretPos: Integer; + FCallStackCount: Cardinal; + FDevMode, FDevNames: HGLOBAL; + FMenuImageList: TVirtualImageList; + FMenuBitmaps: TMenuBitmaps; + FMenuBitmapsSize: TSize; + FMenuBitmapsSourceImageCollection: TCustomImageCollection; + FSynchingZoom: Boolean; + FNavStacks: TCompScintEditNavStacks; + FCurrentNavItem: TCompScintEditNavItem; + FBackNavButtonShortCut, FForwardNavButtonShortCut: TShortCut; + FIgnoreTabSetClick: Boolean; + class procedure AppOnException(Sender: TObject; E: Exception); + procedure AppOnActivate(Sender: TObject); + procedure AppOnIdle(Sender: TObject; var Done: Boolean); + function AskToDetachDebugger: Boolean; + procedure BringToForeground; + procedure BuildAndSaveBreakPointLines(const AMemo: TCompScintFileEdit); + procedure BuildAndSaveKnownIncludedAndHiddenFiles; + procedure CheckIfTerminated; + procedure CloseTab(const TabIndex: Integer); + procedure CompileFile(AFilename: String; const ReadFromFile: Boolean); + procedure CompileIfNecessary; + function ConfirmCloseFile(const PromptToSave: Boolean): Boolean; + procedure DebuggingStopped(const WaitForTermination: Boolean); + procedure DebugLogMessage(const S: String); + procedure DebugShowCallStack(const CallStack: String; const CallStackCount: Cardinal); + function DestroyLineState(const AMemo: TCompScintFileEdit): Boolean; + procedure DestroyDebugInfo; + procedure DetachDebugger; + function EvaluateConstant(const S: String; var Output: String): Integer; + function EvaluateVariableEntry(const DebugEntry: PVariableDebugEntry; + var Output: String): Integer; + procedure FindNext; + function FindSetupDirectiveValue(const DirectiveName, + DefaultValue: String): String; overload; + function FindSetupDirectiveValue(const DirectiveName: String; + DefaultValue: Boolean): Boolean; overload; + function FromCurrentPPI(const XY: Integer): Integer; + procedure Go(AStepMode: TStepMode); + procedure HideError; + procedure InitializeFindText(Dlg: TFindDialog); + function InitializeFileMemo(const Memo: TCompScintFileEdit; const PopupMenu: TPopupMenu): TCompScintFileEdit; + function InitializeMainMemo(const Memo: TCompScintFileEdit; const PopupMenu: TPopupMenu): TCompScintFileEdit; + function InitializeMemoBase(const Memo: TCompScintEdit; const PopupMenu: TPopupMenu): TCompScintEdit; + function InitializeNonFileMemo(const Memo: TCompScintEdit; const PopupMenu: TPopupMenu): TCompScintEdit; + procedure InitiateAutoComplete(const Key: AnsiChar); + procedure InvalidateStatusPanel(const Index: Integer); + procedure LoadBreakPointLinesAndUpdateLineMarkers(const AMemo: TCompScintFileEdit); + procedure LoadKnownIncludedAndHiddenFilesAndUpdateMemos(const AFilename: String); + procedure MemoChange(Sender: TObject; const Info: TScintEditChangeInfo); + procedure MemoCharAdded(Sender: TObject; Ch: AnsiChar); + procedure MainMemoDropFiles(Sender: TObject; X, Y: Integer; AFiles: TStrings); + procedure MemoHintShow(Sender: TObject; var Info: TScintHintInfo); + procedure MemoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); + procedure MemoKeyPress(Sender: TObject; var Key: Char); + procedure MemoLinesDeleted(Memo: TCompScintFileEdit; FirstLine, Count, FirstAffectedLine: Integer); + procedure MemoLinesInserted(Memo: TCompScintFileEdit; FirstLine, Count: integer); + procedure MemoMarginClick(Sender: TObject; MarginNumber: Integer; + Line: Integer); + procedure MemoModifiedChange(Sender: TObject); + function MemoToTabIndex(const AMemo: TCompScintEdit): Integer; + procedure MemoUpdateUI(Sender: TObject); + procedure MemoZoom(Sender: TObject); + procedure UpdateReopenTabMenu(const Menu: TMenuItem); + procedure ModifyMRUMainFilesList(const AFilename: String; const AddNewItem: Boolean); + procedure ModifyMRUParametersList(const AParameter: String; const AddNewItem: Boolean); + procedure MoveCaretAndActivateMemo(AMemo: TCompScintEdit; const LineNumberOrPosition: Integer; + const AlwaysResetColumnEvenIfOnRequestedLineAlready: Boolean; + const IsPosition: Boolean = False; const PositionVirtualSpace: Integer = 0); + procedure NavItemClick(Sender: TObject); + procedure NewMainFile; + procedure NewMainFileUsingWizard; + procedure OpenFile(AMemo: TCompScintFileEdit; AFilename: String; const MainMemoAddToRecentDocs: Boolean); + procedure OpenMRUMainFile(const AFilename: String); + procedure ParseDebugInfo(DebugInfo: Pointer); + procedure ReadMRUMainFilesList; + procedure ReadMRUParametersList; + procedure RemoveMemoFromNav(const AMemo: TCompScintEdit); + procedure RemoveMemoBadLinesFromNav(const AMemo: TCompScintEdit); + procedure ReopenTabClick(Sender: TObject); + procedure ReopenTabOrTabs(const HiddenFileIndex: Integer; const Activate: Boolean); + procedure ResetAllMemosLineState; + procedure StartProcess; + function SaveFile(const AMemo: TCompScintFileEdit; const SaveAs: Boolean): Boolean; + procedure SetErrorLine(const AMemo: TCompScintFileEdit; const ALine: Integer); + procedure SetStatusPanelVisible(const AVisible: Boolean); + procedure SetStepLine(const AMemo: TCompScintFileEdit; ALine: Integer); + procedure ShowOpenMainFileDialog(const Examples: Boolean); + procedure StatusMessage(const Kind: TStatusMessageKind; const S: String); + procedure StoreLastFindOptions(Sender: TObject); + procedure SyncEditorOptions; + function TabIndexToMemo(const ATabIndex, AMaxTabIndex: Integer): TCompScintEdit; + function ToCurrentPPI(const XY: Integer): Integer; + procedure ToggleBreakPoint(Line: Integer); + procedure UpdateAllMemoLineMarkers(const AMemo: TCompScintFileEdit); + procedure UpdateAllMemosLineMarkers; + procedure UpdateBevel1Visibility; + procedure UpdateCaption; + procedure UpdateCaretPosPanelAndBackNavStack; + procedure UpdateCompileStatusPanels(const AProgress, AProgressMax: Cardinal; + const ASecondsRemaining: Integer; const ABytesCompressedPerSecond: Cardinal); + procedure UpdateEditModePanel; + procedure UpdatePreprocMemos; + procedure UpdateLineMarkers(const AMemo: TCompScintFileEdit; const Line: Integer); + procedure UpdateMemosTabSetVisibility; + procedure UpdateMenuBitmapsIfNeeded; + procedure UpdateModifiedPanel; + procedure UpdateNavButtons; + procedure UpdateNewMainFileButtons; + procedure UpdateOccurrenceIndicators(const AMemo: TCompScintEdit); + procedure UpdateOutputTabSetListsItemHeightAndDebugTimeWidth; + procedure UpdateRunMenu; + procedure UpdateSaveMenuItemAndButton; + procedure UpdateMemoMarkerColumns; + procedure UpdateTargetMenu; + procedure UpdateKeyMapping; + procedure UpdateTheme; + procedure UpdateThemeData(const Open: Boolean); + procedure ApplyMenuBitmaps(const ParentMenuItem: TMenuItem); + procedure UpdateStatusPanelHeight(H: Integer); + procedure WMAppCommand(var Message: TMessage); message WM_APPCOMMAND; + procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA; + procedure WMDebuggerHello(var Message: TMessage); message WM_Debugger_Hello; + procedure WMDebuggerGoodbye(var Message: TMessage); message WM_Debugger_Goodbye; + procedure WMDebuggerQueryVersion(var Message: TMessage); message WM_Debugger_QueryVersion; + procedure GetMemoAndDebugEntryFromMessage(Kind, Index: Integer; var Memo: TCompScintFileEdit; + var DebugEntry: PDebugEntry); + procedure DebuggerStepped(var Message: TMessage; const Intermediate: Boolean); + procedure WMDebuggerStepped(var Message: TMessage); message WM_Debugger_Stepped; + procedure WMDebuggerSteppedIntermediate(var Message: TMessage); message WM_Debugger_SteppedIntermediate; + procedure WMDebuggerException(var Message: TMessage); message WM_Debugger_Exception; + procedure WMDebuggerSetForegroundWindow(var Message: TMessage); message WM_Debugger_SetForegroundWindow; + procedure WMDebuggerCallStackCount(var Message: TMessage); message WM_Debugger_CallStackCount; + procedure WMStartCommandLineCompile(var Message: TMessage); message WM_StartCommandLineCompile; + procedure WMStartCommandLineWizard(var Message: TMessage); message WM_StartCommandLineWizard; + procedure WMStartNormally(var Message: TMessage); message WM_StartNormally; + procedure WMSettingChange(var Message: TMessage); message WM_SETTINGCHANGE; + procedure WMThemeChanged(var Message: TMessage); message WM_THEMECHANGED; + procedure WMUAHDrawMenu(var Message: TMessage); message WM_UAHDRAWMENU; + procedure WMUAHDrawMenuItem(var Message: TMessage); message WM_UAHDRAWMENUITEM; + procedure UAHDrawMenuBottomLine; + procedure WMNCActivate(var Message: TMessage); message WM_NCACTIVATE; + procedure WMNCPaint(var Message: TMessage); message WM_NCPAINT; + protected + procedure WndProc(var Message: TMessage); override; + public + { Public declarations } + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + function IsShortCut(var Message: TWMKey): Boolean; override; + end; + +var + CompileForm: TCompileForm; + CommandLineFilename, CommandLineWizardName: String; + CommandLineCompile: Boolean; + CommandLineWizard: Boolean; + +implementation + +uses + ActiveX, Clipbrd, ShellApi, ShlObj, IniFiles, Registry, Consts, Types, UITypes, + Math, StrUtils, WideStrUtils, + PathFunc, CmnFunc, CmnFunc2, FileClass, CompMsgs, TmSchema, BrowseFunc, + HtmlHelpFunc, TaskbarProgressFunc, + {$IFDEF STATICCOMPILER} Compile, {$ENDIF} + CompOptions, CompStartup, CompWizard, CompSignTools, CompTypes, CompInputQueryCombo, CompMsgBoxDesigner, + CompFilesDesigner, CompRegistryDesigner, CompWizardRegistryHelper; + +{$R *.DFM} + +const + { Memos } + MaxMemos = 22; { Includes the main and preprocessor output memos } + FirstIncludedFilesMemoIndex = 1; { This is an index into FFileMemos } + + { Status bar panel indexes } + spCaretPos = 0; + spModified = 1; + spEditMode = 2; + spHiddenFilesCount = 3; + spCompileIcon = 4; + spCompileProgress = 5; + spExtraStatus = 6; + + { Output tab set indexes } + tiCompilerOutput = 0; + tiDebugOutput = 1; + tiDebugCallStack = 2; + tiFindResults = 3; + + LineStateGrowAmount = 4000; + +{ TCompileFormPopupMenu } + +type + TCompileFormPopupMenu = class(TPopupMenu) + private + FParentMenuItem: TMenuItem; + public + constructor Create(const AOwner: TComponent; const ParentMenuItem: TMenuItem); reintroduce; virtual; + procedure Popup(X, Y: Integer); override; + end; + +constructor TCompileFormPopupMenu.Create(const AOwner: TComponent; const ParentMenuItem: TMenuItem); +begin + inherited Create(AOwner); + FParentMenuItem := ParentMenuItem; +end; + +procedure TCompileFormPopupMenu.Popup(X, Y: Integer); +var + Form: TCompileForm; +begin + { Show the existing main menu's submenu } + Form := Owner as TCompileForm; + var OldVisible := FParentMenuItem.Visible; { See ApplyMenuBitmaps } + FParentMenuItem.Visible := True; + try + TrackPopupMenu(FParentMenuItem.Handle, TPM_RIGHTBUTTON, X, Y, 0, Form.Handle, nil); + finally + FParentMenuItem.Visible := OldVisible; + end; +end; + +{ TCompileForm } + +function TCompileForm.InitializeMemoBase(const Memo: TCompScintEdit; const PopupMenu: TPopupMenu): TCompScintEdit; +begin + Memo.Align := alClient; + Memo.AutoCompleteFontName := Font.Name; + Memo.AutoCompleteFontSize := Font.Size; + Memo.CodePage := CP_UTF8; + Memo.Font.Name := 'Courier New'; + Memo.Font.Size := 10; + Memo.ShowHint := True; + Memo.Styler := FMemosStyler; + Memo.PopupMenu := PopupMenu; + Memo.OnChange := MemoChange; + Memo.OnCharAdded := MemoCharAdded; + Memo.OnHintShow := MemoHintShow; + Memo.OnKeyDown := MemoKeyDown; + Memo.OnKeyPress := MemoKeyPress; + Memo.OnMarginClick := MemoMarginClick; + Memo.OnModifiedChange := MemoModifiedChange; + Memo.OnUpdateUI := MemoUpdateUI; + Memo.OnZoom := MemoZoom; + Memo.Parent := BodyPanel; + Memo.SetAutoCompleteSeparator(InnoSetupStylerWordListSeparator); + Memo.SetWordChars(Memo.GetDefaultWordChars+'#{}[]'); + Memo.Theme := FTheme; + Memo.Visible := False; + Result := Memo; +end; + +function TCompileForm.InitializeFileMemo(const Memo: TCompScintFileEdit; const PopupMenu: TPopupMenu): TCompScintFileEdit; +begin + InitializeMemoBase(Memo, PopupMenu); + Memo.CompilerFileIndex := UnknownCompilerFileIndex; + Memo.ErrorLine := -1; + Memo.StepLine := -1; + Result := Memo; +end; + +function TCompileForm.InitializeMainMemo(const Memo: TCompScintFileEdit; const PopupMenu: TPopupMenu): TCompScintFileEdit; +begin + InitializeFileMemo(Memo, PopupMenu); + Memo.AcceptDroppedFiles := True; + Memo.CompilerFileIndex := -1; + Memo.OnDropFiles := MainMemoDropFiles; + Memo.Used := True; + Result := Memo; +end; + +function TCompileForm.InitializeNonFileMemo(const Memo: TCompScintEdit; const PopupMenu: TPopupMenu): TCompScintEdit; +begin + InitializeMemoBase(Memo, PopupMenu); + Memo.ReadOnly := True; + Result := Memo; +end; + +constructor TCompileForm.Create(AOwner: TComponent); + + procedure ReadConfig; + var + Ini: TConfigIniFile; + WindowPlacement: TWindowPlacement; + I: Integer; + Memo: TCompScintEdit; + begin + Ini := TConfigIniFile.Create; + try + { Menu check boxes state } + ToolbarPanel.Visible := Ini.ReadBool('Options', 'ShowToolbar', True); + StatusBar.Visible := Ini.ReadBool('Options', 'ShowStatusBar', True); + FOptions.LowPriorityDuringCompile := Ini.ReadBool('Options', 'LowPriorityDuringCompile', False); + + { Configuration options } + FOptions.ShowStartupForm := Ini.ReadBool('Options', 'ShowStartupForm', True); + FOptions.UseWizard := Ini.ReadBool('Options', 'UseWizard', True); + FOptions.Autosave := Ini.ReadBool('Options', 'Autosave', False); + FOptions.MakeBackups := Ini.ReadBool('Options', 'MakeBackups', False); + FOptions.FullPathInTitleBar := Ini.ReadBool('Options', 'FullPathInTitleBar', False); + FOptions.UndoAfterSave := Ini.ReadBool('Options', 'UndoAfterSave', True); + FOptions.PauseOnDebuggerExceptions := Ini.ReadBool('Options', 'PauseOnDebuggerExceptions', True); + FOptions.RunAsDifferentUser := Ini.ReadBool('Options', 'RunAsDifferentUser', False); + FOptions.AutoComplete := Ini.ReadBool('Options', 'AutoComplete', True); + FOptions.UseSyntaxHighlighting := Ini.ReadBool('Options', 'UseSynHigh', True); + FOptions.ColorizeCompilerOutput := Ini.ReadBool('Options', 'ColorizeCompilerOutput', True); + FOptions.UnderlineErrors := Ini.ReadBool('Options', 'UnderlineErrors', True); + FOptions.HighlightWordAtCursorOccurrences := Ini.ReadBool('Options', 'HighlightWordAtCursorOccurrences', False); + FOptions.HighlightSelTextOccurrences := Ini.ReadBool('Options', 'HighlightSelTextOccurrences', True); + FOptions.CursorPastEOL := Ini.ReadBool('Options', 'EditorCursorPastEOL', False); + FOptions.TabWidth := Ini.ReadInteger('Options', 'TabWidth', 2); + FOptions.UseTabCharacter := Ini.ReadBool('Options', 'UseTabCharacter', False); + FOptions.WordWrap := Ini.ReadBool('Options', 'WordWrap', False); + FOptions.AutoIndent := Ini.ReadBool('Options', 'AutoIndent', True); + FOptions.IndentationGuides := Ini.ReadBool('Options', 'IndentationGuides', True); + FOptions.GutterLineNumbers := Ini.ReadBool('Options', 'GutterLineNumbers', False); + FOptions.ShowPreprocessorOutput := Ini.ReadBool('Options', 'ShowPreprocessorOutput', True); + FOptions.OpenIncludedFiles := Ini.ReadBool('Options', 'OpenIncludedFiles', True); + I := Ini.ReadInteger('Options', 'KeyMappingType', Ord(GetDefaultKeyMappingType)); + if (I >= 0) and (I <= Ord(High(TKeyMappingType))) then + FOptions.KeyMappingType := TKeyMappingType(I); + I := Ini.ReadInteger('Options', 'ThemeType', Ord(GetDefaultThemeType)); + if (I >= 0) and (I <= Ord(High(TThemeType))) then + FOptions.ThemeType := TThemeType(I); + FMainMemo.Font.Name := Ini.ReadString('Options', 'EditorFontName', FMainMemo.Font.Name); + FMainMemo.Font.Size := Ini.ReadInteger('Options', 'EditorFontSize', FMainMemo.Font.Size); + FMainMemo.Font.Charset := Ini.ReadInteger('Options', 'EditorFontCharset', FMainMemo.Font.Charset); + FMainMemo.Zoom := Ini.ReadInteger('Options', 'Zoom', 0); { MemoZoom will zoom the other memos } + for Memo in FMemos do + if Memo <> FMainMemo then + Memo.Font := FMainMemo.Font; + SyncEditorOptions; + UpdateNewMainFileButtons; + UpdateKeyMapping; + UpdateTheme; + + { Window state } + WindowPlacement.length := SizeOf(WindowPlacement); + GetWindowPlacement(Handle, @WindowPlacement); + WindowPlacement.showCmd := SW_HIDE; { the form isn't Visible yet } + WindowPlacement.rcNormalPosition.Left := Ini.ReadInteger('State', + 'WindowLeft', WindowPlacement.rcNormalPosition.Left); + WindowPlacement.rcNormalPosition.Top := Ini.ReadInteger('State', + 'WindowTop', WindowPlacement.rcNormalPosition.Top); + WindowPlacement.rcNormalPosition.Right := Ini.ReadInteger('State', + 'WindowRight', WindowPlacement.rcNormalPosition.Left + Width); + WindowPlacement.rcNormalPosition.Bottom := Ini.ReadInteger('State', + 'WindowBottom', WindowPlacement.rcNormalPosition.Top + Height); + SetWindowPlacement(Handle, @WindowPlacement); + { Note: Must set WindowState *after* calling SetWindowPlacement, since + TCustomForm.WMSize resets WindowState } + if Ini.ReadBool('State', 'WindowMaximized', False) then + WindowState := wsMaximized; + { Note: Don't call UpdateStatusPanelHeight here since it clips to the + current form height, which hasn't been finalized yet } + + StatusPanel.Height := ToCurrentPPI(Ini.ReadInteger('State', 'StatusPanelHeight', + (10 * FromCurrentPPI(DebugOutputList.ItemHeight) + 4) + FromCurrentPPI(OutputTabSet.Height))); + finally + Ini.Free; + end; + FOptionsLoaded := True; + end; + +var + I: Integer; + NewItem: TMenuItem; + PopupMenu: TPopupMenu; + Memo: TCompScintEdit; +begin + inherited; + + {$IFNDEF STATICCOMPILER} + FCompilerVersion := ISDllGetVersion; + {$ELSE} + FCompilerVersion := ISGetVersion; + {$ENDIF} + + FModifiedAnySinceLastCompile := True; + + InitFormFont(Self); + + { For some reason, if AutoScroll=False is set on the form Delphi ignores the + 'poDefault' Position setting } + AutoScroll := False; + + { Append the shortcut key text to the Edit items. Don't actually set the + ShortCut property because we don't want the key combinations having an + effect when Memo doesn't have the focus. } + SetFakeShortCut(EUndo, Ord('Z'), [ssCtrl]); + SetFakeShortCut(ERedo, Ord('Y'), [ssCtrl]); + SetFakeShortCut(ECut, Ord('X'), [ssCtrl]); + SetFakeShortCut(ECopy, Ord('C'), [ssCtrl]); + SetFakeShortCut(EPaste, Ord('V'), [ssCtrl]); + SetFakeShortCut(ESelectAll, Ord('A'), [ssCtrl]); + SetFakeShortCut(EDelete, VK_DELETE, []); + SetFakeShortCut(ECompleteWord, Ord(' '), [ssCtrl]); + SetFakeShortCutText(VZoomIn, SmkcCtrl + 'Num +'); { These zoom shortcuts are handled by Scintilla and only support the active memo, unlike the menu items which work on all memos } + SetFakeShortCutText(VZoomOut, SmkcCtrl + 'Num -'); + SetFakeShortCutText(VZoomReset, SmkcCtrl + 'Num /'); + { Use fake Esc shortcut for Stop Compile so it doesn't conflict with the + editor's autocompletion list } + SetFakeShortCut(BStopCompile, VK_ESCAPE, []); + { Use fake Ctrl+F4 shortcut for VCloseCurrentTab2 because VCloseCurrentTab + already has the real one } + SetFakeShortCut(VCloseCurrentTab2, VK_F4, [ssCtrl]); + { Use fake Ctrl+C and Ctrl+A shortcuts for OutputListPopupMenu's items so they + don't conflict with the editor which also uses fake shortcuts for these } + SetFakeShortCut(POutputListCopy, Ord('C'), [ssCtrl]); + SetFakeShortCut(POutputListSelectAll, Ord('A'), [ssCtrl]); + + PopupMenu := TCompileFormPopupMenu.Create(Self, EMenu); + + FMemosStyler := TInnoSetupStyler.Create(Self); + FMemosStyler.ISPPInstalled := ISPPInstalled; + + FTheme := TTheme.Create; + InitFormThemeInit(FTheme); + + FMemos := TList.Create; + FMainMemo := InitializeMainMemo(TCompScintFileEdit.Create(Self), PopupMenu); + FMemos.Add(FMainMemo); + FPreprocessorOutputMemo := InitializeNonFileMemo(TCompScintEdit.Create(Self), PopupMenu); + FMemos.Add(FPreprocessorOutputMemo); + for I := FMemos.Count to MaxMemos-1 do + FMemos.Add(InitializeFileMemo(TCompScintFileEdit.Create(Self), PopupMenu)); + FFileMemos := TList.Create; + for Memo in FMemos do + if Memo is TCompScintFileEdit then + FFileMemos.Add(TCompScintFileEdit(Memo)); + FHiddenFiles := TStringList.Create(dupError, True, True); + FActiveMemo := FMainMemo; + FActiveMemo.Visible := True; + FErrorMemo := FMainMemo; + FStepMemo := FMainMemo; + + FMemosStyler.Theme := FTheme; + + MemosTabSet.PopupMenu := TCompileFormPopupMenu.Create(Self, MemosTabSetPopupMenu); + + FNavStacks := TCompScintEditNavStacks.Create; + UpdateNavButtons; + FCurrentNavItem.Invalidate; + + BackNavButton.Style := tbsDropDown; + BackNavButton.DropdownMenu := TCompileFormPopupMenu.Create(Self, NavPopupMenu); + + PopupMenu := TCompileFormPopupMenu.Create(Self, OutputListPopupMenu); + + CompilerOutputList.PopupMenu := PopupMenu; + DebugOutputList.PopupMenu := PopupMenu; + DebugCallStackList.PopupMenu := PopupMenu; + FindResultsList.PopupMenu := PopupMenu; + + UpdateOutputTabSetListsItemHeightAndDebugTimeWidth; + + Application.HintShortPause := 0; + Application.OnException := AppOnException; + Application.OnActivate := AppOnActivate; + Application.OnIdle := AppOnIdle; + + FMRUMainFilesList := TStringList.Create; + for I := 0 to High(FMRUMainFilesMenuItems) do begin + NewItem := TMenuItem.Create(Self); + NewItem.OnClick := FMRUClick; + FMenu.Insert(FMenu.IndexOf(FMRUMainFilesSep), NewItem); + FMRUMainFilesMenuItems[I] := NewItem; + end; + FMRUParametersList := TStringList.Create; + + FSignTools := TStringList.Create; + FFindResults := TFindResults.Create; + + FIncludedFiles := TIncludedFiles.Create; + UpdatePreprocMemos; + + FDebugTarget := dtSetup; + UpdateTargetMenu; + + UpdateCaption; + + FMenuDarkBackgroundBrush := TBrush.Create; + FMenuDarkHotOrSelectedBrush := TBrush.Create; + + ThemedMarkersVirtualImageList.AutoFill := True; + + UpdateThemeData(True); + + FMenuBitmaps := TMenuBitmaps.Create; + FMenuBitmapsSize.cx := 0; + FMenuBitmapsSize.cy := 0; + + if CommandLineCompile then begin + ReadSignTools(FSignTools); + PostMessage(Handle, WM_StartCommandLineCompile, 0, 0) + end else if CommandLineWizard then begin + { Stop Delphi from showing the compiler form } + Application.ShowMainForm := False; + { Show wizard form later } + PostMessage(Handle, WM_StartCommandLineWizard, 0, 0); + end else begin + ReadConfig; { Calls UpdateTheme } + ReadSignTools(FSignTools); + PostMessage(Handle, WM_StartNormally, 0, 0); + end; +end; + +destructor TCompileForm.Destroy; + + procedure SaveConfig; + var + Ini: TConfigIniFile; + WindowPlacement: TWindowPlacement; + begin + Ini := TConfigIniFile.Create; + try + { Theme state - can change without opening the options } + Ini.WriteInteger('Options', 'ThemeType', Ord(FOptions.ThemeType)); { Also see TOptionsClick } + + { Menu check boxes state } + Ini.WriteBool('Options', 'ShowToolbar', ToolbarPanel.Visible); + Ini.WriteBool('Options', 'ShowStatusBar', StatusBar.Visible); + Ini.WriteBool('Options', 'LowPriorityDuringCompile', FOptions.LowPriorityDuringCompile); + + { Window state } + WindowPlacement.length := SizeOf(WindowPlacement); + GetWindowPlacement(Handle, @WindowPlacement); + Ini.WriteInteger('State', 'WindowLeft', WindowPlacement.rcNormalPosition.Left); + Ini.WriteInteger('State', 'WindowTop', WindowPlacement.rcNormalPosition.Top); + Ini.WriteInteger('State', 'WindowRight', WindowPlacement.rcNormalPosition.Right); + Ini.WriteInteger('State', 'WindowBottom', WindowPlacement.rcNormalPosition.Bottom); + Ini.WriteBool('State', 'WindowMaximized', WindowState = wsMaximized); + Ini.WriteInteger('State', 'StatusPanelHeight', FromCurrentPPI(StatusPanel.Height)); + + { Zoom state } + Ini.WriteInteger('Options', 'Zoom', FMainMemo.Zoom); { Only saves the main memo's zoom } + finally + Ini.Free; + end; + end; + +begin + UpdateThemeData(False); + + Application.OnActivate := nil; + Application.OnIdle := nil; + + if FOptionsLoaded and not (CommandLineCompile or CommandLineWizard) then + SaveConfig; + + if FDevMode <> 0 then + GlobalFree(FDevMode); + if FDevNames <> 0 then + GlobalFree(FDevNames); + + FNavStacks.Free; + FMenuBitmaps.Free; + FMenuDarkBackgroundBrush.Free; + FMenuDarkHotOrSelectedBrush.Free; + FTheme.Free; + DestroyDebugInfo; + FIncludedFiles.Free; + FFindResults.Free; + FSignTools.Free; + FMRUParametersList.Free; + FMRUMainFilesList.Free; + FFileMemos.Free; + FHiddenFiles.Free; + FMemos.Free; + + inherited; +end; + +class procedure TCompileForm.AppOnException(Sender: TObject; E: Exception); +begin + AppMessageBox(PChar(AddPeriod(E.Message)), SCompilerFormCaption, + MB_OK or MB_ICONSTOP); +end; + +procedure TCompileForm.FormAfterMonitorDpiChanged(Sender: TObject; OldDPI, + NewDPI: Integer); +begin + UpdateOutputTabSetListsItemHeightAndDebugTimeWidth; + UpdateStatusPanelHeight(StatusPanel.Height); + UpdateMemoMarkerColumns; +end; + +procedure TCompileForm.FormCloseQuery(Sender: TObject; + var CanClose: Boolean); +begin + if IsWindowEnabled(Application.Handle) then + CanClose := ConfirmCloseFile(True) + else + { CloseQuery is also called by the VCL when a WM_QUERYENDSESSION message + is received. Don't display message box if a modal dialog is already + displayed. } + CanClose := False; +end; + +procedure TCompileForm.FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + var AShortCut := ShortCut(Key, Shift); + if AShortCut = VK_ESCAPE then begin + if BStopCompile.Enabled then + BStopCompileClick(Self) + else begin + if FActiveMemo.SelectionCount > 1 then + FActiveMemo.RemoveAdditionalSelections + else if FActiveMemo.SelNotEmpty then + FActiveMemo.SetEmptySelections; + end; + end else if AShortCut = FBackNavButtonShortCut then begin + if BackNavButton.Enabled then + BackNavButtonClick(Self); + end else if AShortCut = FForwardNavButtonShortCut then begin + if ForwardNavButton.Enabled then + ForwardNavButtonClick(Self); + end else if (Key = VK_F6) and not(ssAlt in Shift) then begin + { Toggle focus between the active memo and the active bottom pane } + Key := 0; + if ActiveControl <> FActiveMemo then + ActiveControl := FActiveMemo + else if StatusPanel.Visible then begin + case OutputTabSet.TabIndex of + tiCompilerOutput: ActiveControl := CompilerOutputList; + tiDebugOutput: ActiveControl := DebugOutputList; + tiDebugCallStack: ActiveControl := DebugCallStackList; + tiFindResults: ActiveControl := FindResultsList; + end; + end; + end; +end; + +procedure TCompileForm.FormResize(Sender: TObject); +begin + { Make sure the status panel's height is decreased if necessary in response + to the form's height decreasing } + if StatusPanel.Visible then + UpdateStatusPanelHeight(StatusPanel.Height); +end; + +procedure TCompileForm.WndProc(var Message: TMessage); +begin + { Without this, the status bar's owner drawn panels sometimes get corrupted and show + menu items instead. See: + http://groups.google.com/group/borland.public.delphi.vcl.components.using/browse_thread/thread/e4cb6c3444c70714 } + with Message do + case Msg of + WM_DRAWITEM: + with PDrawItemStruct(Message.LParam)^ do + if (CtlType = ODT_MENU) and not IsMenu(hwndItem) then + CtlType := ODT_STATIC; + end; + inherited +end; + +function TCompileForm.IsShortCut(var Message: TWMKey): Boolean; +begin + { Key messages are forwarded by the VCL to the main form for ShortCut + processing. In Delphi 5+, however, this happens even when a TFindDialog + is active, causing Ctrl+V/Esc/etc. to be intercepted by the main form. + Work around this by always returning False when not Active. } + if Active then + Result := inherited IsShortCut(Message) + else + Result := False; +end; + +procedure TCompileForm.UpdateCaption; +var + NewCaption: String; +begin + if FMainMemo.Filename = '' then + NewCaption := GetFileTitle(FMainMemo.Filename) + else begin + if FOptions.FullPathInTitleBar then + NewCaption := FMainMemo.Filename + else + NewCaption := GetDisplayFilename(FMainMemo.Filename); + end; + NewCaption := NewCaption + ' - ' + SCompilerFormCaption + ' ' + + String(FCompilerVersion.Version); + if FCompiling then + NewCaption := NewCaption + ' [Compiling]' + else if FDebugging then begin + if not FPaused then + NewCaption := NewCaption + ' [Running]' + else + NewCaption := NewCaption + ' [Paused]'; + end; + Caption := NewCaption; + if not CommandLineWizard then + Application.Title := NewCaption; +end; + +procedure TCompileForm.UpdateNewMainFileButtons; +begin + if FOptions.UseWizard then begin + FNewMainFile.Caption := '&New...'; + FNewMainFile.OnClick := FNewMainFileUserWizardClick; + NewMainFileButton.OnClick := FNewMainFileUserWizardClick; + end else begin + FNewMainFile.Caption := '&New'; + FNewMainFile.OnClick := FNewMainFileClick; + NewMainFileButton.OnClick := FNewMainFileClick; + end; +end; + +procedure TCompileForm.NewMainFile; +var + Memo: TCompScintFileEdit; +begin + HideError; + FUninstExe := ''; + if FDebugTarget <> dtSetup then begin + FDebugTarget := dtSetup; + UpdateTargetMenu; + end; + FHiddenFiles.Clear; + InvalidateStatusPanel(spHiddenFilesCount); + for Memo in FFileMemos do + if Memo.Used then + Memo.BreakPoints.Clear; + DestroyDebugInfo; + + FMainMemo.Filename := ''; + UpdateCaption; + FMainMemo.SaveEncoding := seUTF8WithoutBOM; + FMainMemo.Lines.Clear; + FModifiedAnySinceLastCompile := True; + FPreprocessorOutput := ''; + FIncludedFiles.Clear; + UpdatePreprocMemos; + FMainMemo.ClearUndo; + + FNavStacks.Clear; + UpdateNavButtons; + FCurrentNavItem.Invalidate; +end; + +{ Breakpoints are preserved on a per-file basis } +procedure TCompileForm.LoadBreakPointLinesAndUpdateLineMarkers(const AMemo: TCompScintFileEdit); +begin + if AMemo.BreakPoints.Count <> 0 then + raise Exception.Create('AMemo.BreakPoints.Count <> 0'); { NewMainFile or OpenFile should have cleared these } + + try + var HadSkippedBreakPoint := False; + var Strings := TStringList.Create; + try + LoadBreakPointLines(AMemo.FileName, Strings); + for var LineAsString in Strings do begin + var Line := LineAsString.ToInteger; + if Line < AMemo.Lines.Count then + AMemo.BreakPoints.Add(Line) + else + HadSkippedBreakPoint := True; + end; + finally + Strings.Free; + end; + for var Line in AMemo.BreakPoints do + UpdateLineMarkers(AMemo, Line); + + { If there were breakpoints beyond the end of file get rid of them so they + don't magically reappear on a reload of an externally edited and grown + file } + if HadSkippedBreakPoint then + BuildAndSaveBreakPointLines(AMemo); + except + { Ignore any exceptions } + end; +end; + +procedure TCompileForm.BuildAndSaveBreakPointLines(const AMemo: TCompScintFileEdit); +begin + try + if AMemo.FileName <> '' then begin + var Strings := TStringList.Create; + try + for var Line in AMemo.BreakPoints do + Strings.Add(Line.ToString); + SaveBreakPointLines(AMemo.FileName, Strings); + finally + Strings.Free; + end; + end; + except + { Handle exceptions locally; failure to save the breakpoint lines list should not be + a fatal error } + Application.HandleException(Self); + end; +end; + +{ Known included and hidden files are preserved on a per-main-file basis } +procedure TCompileForm.LoadKnownIncludedAndHiddenFilesAndUpdateMemos; +begin + if FIncludedFiles.Count <> 0 then + raise Exception.Create('FIncludedFiles.Count <> 0'); { NewMainFile should have cleared these } + + try + if AFilename <> '' then begin + var Strings := TStringList.Create; + try + LoadKnownIncludedAndHiddenFiles(FMainMemo.FileName, Strings, FHiddenFiles); + if Strings.Count > 0 then begin + try + for var Filename in Strings do begin + var IncludedFile := TIncludedFile.Create; + IncludedFile.Filename := Filename; + IncludedFile.CompilerFileIndex := UnknownCompilerFileIndex; + IncludedFile.HasLastWriteTime := GetLastWriteTimeOfFile(IncludedFile.Filename, + @IncludedFile.LastWriteTime); + FIncludedFiles.Add(IncludedFile); + end; + finally + UpdatePreprocMemos; + end; + end; + finally + Strings.Free; + end; + end; + except + { Ignore any exceptions } + end; +end; + +procedure TCompileForm.BuildAndSaveKnownIncludedAndHiddenFiles; +begin + try + if FMainMemo.FileName <> '' then begin + var Strings := TStringList.Create; + try + for var IncludedFile in FIncludedFiles do + Strings.Add(IncludedFile.Filename); + SaveKnownIncludedAndHiddenFiles(FMainMemo.FileName, Strings, FHiddenFiles); + finally + Strings.Free; + end; + end; + except + { Handle exceptions locally; failure to save the includes list should not be + a fatal error } + Application.HandleException(Self); + end; +end; + +procedure TCompileForm.NewMainFileUsingWizard; +var + WizardForm: TWizardForm; + SaveEnabled: Boolean; +begin + WizardForm := TWizardForm.Create(Application); + try + SaveEnabled := Enabled; + if CommandLineWizard then begin + WizardForm.WizardName := CommandLineWizardName; + { Must disable CompileForm even though it isn't shown, otherwise + menu keyboard shortcuts (such as Ctrl+O) still work } + Enabled := False; + end; + try + if WizardForm.ShowModal <> mrOk then + Exit; + finally + Enabled := SaveEnabled; + end; + + if CommandLineWizard then begin + SaveTextToFile(CommandLineFileName, WizardForm.ResultScript, seUTF8WithoutBOM); + end else begin + NewMainFile; + FMainMemo.Lines.Text := WizardForm.ResultScript; + FMainMemo.ClearUndo; + if WizardForm.Result = wrComplete then begin + FMainMemo.ForceModifiedState; + if MsgBox('Would you like to compile the new script now?', SCompilerFormCaption, mbConfirmation, MB_YESNO) = IDYES then + BCompileClick(Self); + end; + end; + finally + WizardForm.Free; + end; +end; + +procedure TCompileForm.OpenFile(AMemo: TCompScintFileEdit; AFilename: String; + const MainMemoAddToRecentDocs: Boolean); + + function GetStreamSaveEncoding(const Stream: TStream): TSaveEncoding; + var + Buf: array[0..2] of Byte; + begin + Result := seAuto; + var StreamSize := Stream.Size; + var CappedSize: Integer; + if StreamSize > High(Integer) then + CappedSize := High(Integer) + else + CappedSize := Integer(StreamSize); + if (CappedSize >= SizeOf(Buf)) and (Stream.Read(Buf, SizeOf(Buf)) = SizeOf(Buf)) and + (Buf[0] = $EF) and (Buf[1] = $BB) and (Buf[2] = $BF) then + Result := seUTF8WithBOM + else begin + Stream.Seek(0, soFromBeginning); + var S: AnsiString; + SetLength(S, CappedSize); + SetLength(S, Stream.Read(S[1], CappedSize)); + if DetectUTF8Encoding(S) in [etUSASCII, etUTF8] then + Result := seUTF8WithoutBOM; + end; + end; + + function GetEncoding(const SaveEncoding: TSaveEncoding): TEncoding; + begin + if SaveEncoding in [seUTF8WithBOM, seUTF8WithoutBOM] then + Result := TEncoding.UTF8 + else + Result := nil; + end; + +var + Stream: TFileStream; +begin + AMemo.OpeningFile := True; + try + AFilename := PathExpand(AFilename); + var NameChange := PathCompare(AMemo.Filename, AFilename) <> 0; + + Stream := TFileStream.Create(AFilename, fmOpenRead or fmShareDenyNone); + try + if AMemo = FMainMemo then + NewMainFile + else begin + AMemo.BreakPoints.Clear; + if DestroyLineState(AMemo) then + UpdateAllMemoLineMarkers(AMemo); + if NameChange then { Also see below the other case which needs to be done after load } + RemoveMemoFromNav(AMemo); + end; + GetFileTime(Stream.Handle, nil, nil, @AMemo.FileLastWriteTime); + AMemo.SaveEncoding := GetStreamSaveEncoding(Stream); + Stream.Seek(0, soFromBeginning); + AMemo.Lines.LoadFromStream(Stream, GetEncoding(AMemo.SaveEncoding)); + if (AMemo <> FMainMemo) and not NameChange then + RemoveMemoBadLinesFromNav(AMemo); + finally + Stream.Free; + end; + AMemo.ClearUndo; + if AMemo = FMainMemo then begin + AMemo.Filename := AFilename; + UpdateCaption; + ModifyMRUMainFilesList(AFilename, True); + if MainMemoAddToRecentDocs then + AddFileToRecentDocs(AFilename); + LoadKnownIncludedAndHiddenFilesAndUpdateMemos(AFilename); + InvalidateStatusPanel(spHiddenFilesCount); + end; + LoadBreakPointLinesAndUpdateLineMarkers(AMemo); + finally + AMemo.OpeningFile := False; + end; +end; + +procedure TCompileForm.OpenMRUMainFile(const AFilename: String); +{ Same as OpenFile, but offers to remove the file from the MRU list if it + cannot be opened } +begin + try + OpenFile(FMainMemo, AFilename, True); + except + Application.HandleException(Self); + if MsgBoxFmt('There was an error opening the file. Remove it from the list?', + [AFilename], SCompilerFormCaption, mbError, MB_YESNO) = IDYES then begin + ModifyMRUMainFilesList(AFilename, False); + DeleteBreakPointLines(AFilename); + DeleteKnownIncludedAndHiddenFiles(AFilename); + end; + end; +end; + +function TCompileForm.SaveFile(const AMemo: TCompScintFileEdit; const SaveAs: Boolean): Boolean; + + procedure SaveMemoTo(const FN: String); + var + TempFN, BackupFN: String; + Buf: array[0..4095] of Char; + begin + { Save to a temporary file; don't overwrite existing files in place. This + way, if the system crashes or the disk runs out of space during the save, + the existing file will still be intact. } + if GetTempFileName(PChar(PathExtractDir(FN)), 'iss', 0, Buf) = 0 then + raise Exception.CreateFmt('Error creating file (code %d). Could not save file', + [GetLastError]); + TempFN := Buf; + try + SaveTextToFile(TempFN, AMemo.Lines.Text, AMemo.SaveEncoding); + + { Back up existing file if needed } + if FOptions.MakeBackups and NewFileExists(FN) then begin + BackupFN := PathChangeExt(FN, '.~is'); + DeleteFile(BackupFN); + if not RenameFile(FN, BackupFN) then + raise Exception.Create('Error creating backup file. Could not save file'); + end; + + { Delete existing file } + if not DeleteFile(FN) and (GetLastError <> ERROR_FILE_NOT_FOUND) then + raise Exception.CreateFmt('Error removing existing file (code %d). Could not save file', + [GetLastError]); + except + DeleteFile(TempFN); + raise; + end; + { Rename temporary file. + Note: This is outside the try..except because we already deleted the + existing file, and don't want the temp file also deleted in the unlikely + event that the rename fails. } + if not RenameFile(TempFN, FN) then + raise Exception.CreateFmt('Error renaming temporary file (code %d). Could not save file', + [GetLastError]); + GetLastWriteTimeOfFile(FN, @AMemo.FileLastWriteTime); + end; + +var + FN: String; +begin + Result := False; + var OldName := AMemo.Filename; + if SaveAs or (AMemo.Filename = '') then begin + if AMemo <> FMainMemo then + raise Exception.Create('Internal error: AMemo <> FMainMemo'); + FN := AMemo.Filename; + if not NewGetSaveFileName('', FN, '', SCompilerOpenFilter, 'iss', Handle) then Exit; + FN := PathExpand(FN); + SaveMemoTo(FN); + AMemo.Filename := FN; + UpdateCaption; + end else + SaveMemoTo(AMemo.Filename); + AMemo.SetSavePoint; + if not FOptions.UndoAfterSave then + AMemo.ClearUndo; + Result := True; + if AMemo = FMainMemo then begin + ModifyMRUMainFilesList(AMemo.Filename, True); + if PathCompare(AMemo.Filename, OldName) <> 0 then begin + if OldName <> '' then begin + DeleteBreakPointLines(OldName); + DeleteKnownIncludedAndHiddenFiles(OldName); + end; + BuildAndSaveBreakPointLines(AMemo); + BuildAndSaveKnownIncludedAndHiddenFiles; + end; + end; +end; + +function TCompileForm.ConfirmCloseFile(const PromptToSave: Boolean): Boolean; + + function PromptToSaveMemo(const AMemo: TCompScintFileEdit): Boolean; + var + FileTitle: String; + begin + Result := True; + if AMemo.Modified then begin + FileTitle := GetFileTitle(AMemo.Filename); + case MsgBox('The text in the ' + FileTitle + ' file has changed.'#13#10#13#10 + + 'Do you want to save the changes?', SCompilerFormCaption, mbError, + MB_YESNOCANCEL) of + IDYES: Result := SaveFile(AMemo, False); + IDNO: ; + else + Result := False; + end; + end; + end; + +var + Memo: TCompScintFileEdit; +begin + if FCompiling then begin + MsgBox('Please stop the compile process before performing this command.', + SCompilerFormCaption, mbError, MB_OK); + Result := False; + Exit; + end; + if FDebugging and not AskToDetachDebugger then begin + Result := False; + Exit; + end; + Result := True; + if PromptToSave then begin + for Memo in FFileMemos do begin + if Memo.Used then begin + Result := PromptToSaveMemo(Memo); + if not Result then + Exit; + end; + end; + end; +end; + +procedure TCompileForm.ReadMRUMainFilesList; +begin + try + ReadMRUList(FMRUMainFilesList, 'ScriptFileHistoryNew', 'History'); + except + { Ignore any exceptions. } + end; +end; + +procedure TCompileForm.ModifyMRUMainFilesList(const AFilename: String; + const AddNewItem: Boolean); +begin + { Load most recent items first, just in case they've changed } + try + ReadMRUMainFilesList; + except + { Ignore any exceptions. } + end; + try + ModifyMRUList(FMRUMainFilesList, 'ScriptFileHistoryNew', 'History', AFileName, AddNewItem, @PathCompare); + except + { Handle exceptions locally; failure to save the MRU list should not be + a fatal error. } + Application.HandleException(Self); + end; +end; + +procedure TCompileForm.ReadMRUParametersList; +begin + try + ReadMRUList(FMRUParametersList, 'ParametersHistory', 'History'); + except + { Ignore any exceptions. } + end; +end; + +procedure TCompileForm.ModifyMRUParametersList(const AParameter: String; + const AddNewItem: Boolean); +begin + { Load most recent items first, just in case they've changed } + try + ReadMRUParametersList; + except + { Ignore any exceptions. } + end; + try + ModifyMRUList(FMRUParametersList, 'ParametersHistory', 'History', AParameter, AddNewItem, @CompareText); + except + { Handle exceptions locally; failure to save the MRU list should not be + a fatal error. } + Application.HandleException(Self); + end; +end; + +procedure TCompileForm.StatusMessage(const Kind: TStatusMessageKind; const S: String); +begin + AddLines(CompilerOutputList, S, TObject(Kind), False, alpNone, 0); + CompilerOutputList.Update; +end; + +procedure TCompileForm.DebugLogMessage(const S: String); +begin + AddLines(DebugOutputList, S, nil, True, alpTimestamp, FDebugLogListTimestampsWidth); + DebugOutputList.Update; +end; + +procedure TCompileForm.DebugShowCallStack(const CallStack: String; const CallStackCount: Cardinal); +begin + DebugCallStackList.Clear; + AddLines(DebugCallStackList, CallStack, nil, True, alpCountdown, FCallStackCount-1); + DebugCallStackList.Items.Insert(0, '*** [Code] Call Stack'); + DebugCallStackList.Update; +end; + +type + PAppData = ^TAppData; + TAppData = record + Form: TCompileForm; + Filename: String; + Lines: TStringList; + CurLineNumber: Integer; + CurLine: String; + OutputExe: String; + DebugInfo: Pointer; + ErrorMsg: String; + ErrorFilename: String; + ErrorLine: Integer; + Aborted: Boolean; + end; + +function CompilerCallbackProc(Code: Integer; var Data: TCompilerCallbackData; + AppData: Longint): Integer; stdcall; + + procedure DecodeIncludedFilenames(P: PChar; const IncludedFiles: TIncludedFiles); + var + IncludedFile: TIncludedFile; + I: Integer; + begin + IncludedFiles.Clear; + if P = nil then + Exit; + I := 0; + while P^ <> #0 do begin + if not IsISPPBuiltins(P) then begin + IncludedFile := TIncludedFile.Create; + IncludedFile.Filename := GetCleanFileNameOfFile(P); + IncludedFile.CompilerFileIndex := I; + IncludedFile.HasLastWriteTime := GetLastWriteTimeOfFile(IncludedFile.Filename, + @IncludedFile.LastWriteTime); + IncludedFiles.Add(IncludedFile); + end; + Inc(P, StrLen(P) + 1); + Inc(I); + end; + end; + + procedure CleanHiddenFiles(const IncludedFiles: TIncludedFiles; const HiddenFiles: TStringList); + var + HiddenFileIncluded: array of Boolean; + begin + if HiddenFiles.Count > 0 then begin + { Clean previously hidden files which are no longer included } + if IncludedFiles.Count > 0 then begin + SetLength(HiddenFileIncluded, HiddenFiles.Count); + for var I := 0 to HiddenFiles.Count-1 do + HiddenFileIncluded[I] := False; + for var I := 0 to IncludedFiles.Count-1 do begin + var IncludedFile := IncludedFiles[I]; + var HiddenFileIndex := HiddenFiles.IndexOf(IncludedFile.Filename); + if HiddenFileIndex <> -1 then + HiddenFileIncluded[HiddenFileIndex] := True; + end; + for var I := HiddenFiles.Count-1 downto 0 do + if not HiddenFileIncluded[I] then + HiddenFiles.Delete(I); + end else + HiddenFiles.Clear; + end; + end; + +begin + Result := iscrSuccess; + with PAppData(AppData)^ do + case Code of + iscbReadScript: + begin + if Data.Reset then + CurLineNumber := 0; + if CurLineNumber < Lines.Count then begin + CurLine := Lines[CurLineNumber]; + Data.LineRead := PChar(CurLine); + Inc(CurLineNumber); + end; + end; + iscbNotifyStatus: + if Data.Warning then + Form.StatusMessage(smkWarning, Data.StatusMsg) + else + Form.StatusMessage(smkNormal, Data.StatusMsg); + iscbNotifyIdle: + begin + Form.UpdateCompileStatusPanels(Data.CompressProgress, + Data.CompressProgressMax, Data.SecondsRemaining, + Data.BytesCompressedPerSecond); + { We have to use HandleMessage instead of ProcessMessages so that + Application.Idle is called. Otherwise, Flat TSpeedButton's don't + react to the mouse being moved over them. + Unfortunately, HandleMessage by default calls WaitMessage. To avoid + this we have an Application.OnIdle handler which sets Done to False + while compiling is in progress - see AppOnIdle. + The GetQueueStatus check below is just an optimization; calling + HandleMessage when there are no messages to process wastes CPU. } + if GetQueueStatus(QS_ALLINPUT) <> 0 then begin + Form.FBecameIdle := False; + repeat + Application.HandleMessage; + { AppOnIdle sets FBecameIdle to True when it's called, which + indicates HandleMessage didn't find any message to process } + until Form.FBecameIdle; + end; + if Form.FCompileWantAbort then + Result := iscrRequestAbort; + end; + iscbNotifyPreproc: + begin + Form.FPreprocessorOutput := TrimRight(Data.PreprocessedScript); + DecodeIncludedFilenames(Data.IncludedFilenames, Form.FIncludedFiles); { Also stores last write time } + CleanHiddenFiles(Form.FIncludedFiles, Form.FHiddenFiles); + Form.InvalidateStatusPanel(spHiddenFilesCount); + Form.BuildAndSaveKnownIncludedAndHiddenFiles; + end; + iscbNotifySuccess: + begin + OutputExe := Data.OutputExeFilename; + if Form.FCompilerVersion.BinVersion >= $3000001 then begin + DebugInfo := AllocMem(Data.DebugInfoSize); + Move(Data.DebugInfo^, DebugInfo^, Data.DebugInfoSize); + end else + DebugInfo := nil; + end; + iscbNotifyError: + begin + if Assigned(Data.ErrorMsg) then + ErrorMsg := Data.ErrorMsg + else + Aborted := True; + ErrorFilename := Data.ErrorFilename; + ErrorLine := Data.ErrorLine; + end; + end; +end; + +procedure TCompileForm.CompileFile(AFilename: String; const ReadFromFile: Boolean); + + function GetMemoFromErrorFilename(const ErrorFilename: String): TCompScintFileEdit; + var + Memo: TCompScintFileEdit; + begin + if ErrorFilename = '' then + Result := FMainMemo + else begin + if FOptions.OpenIncludedFiles then begin + for Memo in FFileMemos do begin + if Memo.Used and (PathCompare(Memo.Filename, ErrorFilename) = 0) then begin + Result := Memo; + Exit; + end; + end; + end; + Result := nil; + end; + end; + +var + SourcePath, S, Options: String; + Params: TCompileScriptParamsEx; + AppData: TAppData; + StartTime, ElapsedTime, ElapsedSeconds: DWORD; + I: Integer; + Memo: TCompScintFileEdit; + OldActiveMemo: TCompScintEdit; +begin + if FCompiling then begin + { Shouldn't get here, but just in case... } + MsgBox('A compile is already in progress.', SCompilerFormCaption, mbError, MB_OK); + Abort; + end; + + if not ReadFromFile then begin + if FOptions.OpenIncludedFiles then begin + { Included files must always be saved since they're not read from the editor by the compiler } + for Memo in FFileMemos do begin + if (Memo <> FMainMemo) and Memo.Used and Memo.Modified then begin + if FOptions.Autosave then begin + if not SaveFile(Memo, False) then + Abort; + end else begin + case MsgBox('The text in the ' + Memo.Filename + ' file has changed and must be saved before compiling.'#13#10#13#10 + + 'Save the changes and continue?', SCompilerFormCaption, mbError, + MB_YESNO) of + IDYES: + if not SaveFile(Memo, False) then + Abort; + else + Abort; + end; + end; + end; + end; + end; + { Save main file if requested } + if FOptions.Autosave and FMainMemo.Modified then begin + if not SaveFile(FMainMemo, False) then + Abort; + end else if FMainMemo.Filename = '' then begin + case MsgBox('Would you like to save the script before compiling?' + + SNewLine2 + 'If you answer No, the compiled installation will be ' + + 'placed under your My Documents folder by default.', + SCompilerFormCaption, mbConfirmation, MB_YESNOCANCEL) of + IDYES: + if not SaveFile(FMainMemo, False) then + Abort; + IDNO: ; + else + Abort; + end; + end; + AFilename := FMainMemo.Filename; + end; {else: Command line compile, AFilename already set. } + + DestroyDebugInfo; + OldActiveMemo := FActiveMemo; + AppData.Lines := TStringList.Create; + try + FBuildAnimationFrame := 0; + FProgress := 0; + FProgressMax := 0; + + FActiveMemo.CancelAutoComplete; + FActiveMemo.Cursor := crAppStart; + FActiveMemo.SetCursorID(999); { hack to keep it from overriding Cursor } + CompilerOutputList.Cursor := crAppStart; + for Memo in FFileMemos do + Memo.ReadOnly := True; + UpdateEditModePanel; + HideError; + CompilerOutputList.Clear; + SendMessage(CompilerOutputList.Handle, LB_SETHORIZONTALEXTENT, 0, 0); + DebugOutputList.Clear; + SendMessage(DebugOutputList.Handle, LB_SETHORIZONTALEXTENT, 0, 0); + DebugCallStackList.Clear; + SendMessage(DebugCallStackList.Handle, LB_SETHORIZONTALEXTENT, 0, 0); + OutputTabSet.TabIndex := tiCompilerOutput; + SetStatusPanelVisible(True); + + SourcePath := GetSourcePath(AFilename); + + FillChar(Params, SizeOf(Params), 0); + Params.Size := SizeOf(Params); + Params.CompilerPath := nil; + Params.SourcePath := PChar(SourcePath); + Params.CallbackProc := CompilerCallbackProc; + Pointer(Params.AppData) := @AppData; + Options := ''; + for I := 0 to FSignTools.Count-1 do + Options := Options + AddSignToolParam(FSignTools[I]); + Params.Options := PChar(Options); + + AppData.Form := Self; + AppData.CurLineNumber := 0; + AppData.Aborted := False; + I := ReadScriptLines(AppData.Lines, ReadFromFile, AFilename, FMainMemo); + if I <> -1 then begin + if not ReadFromFile then begin + MoveCaretAndActivateMemo(FMainMemo, I, False); + SetErrorLine(FMainMemo, I); + end; + raise Exception.CreateFmt(SCompilerIllegalNullChar, [I + 1]); + end; + + StartTime := GetTickCount; + StatusMessage(smkStartEnd, Format(SCompilerStatusStarting, [TimeToStr(Time)])); + StatusMessage(smkStartEnd, ''); + FCompiling := True; + FCompileWantAbort := False; + UpdateRunMenu; + UpdateCaption; + SetLowPriority(FOptions.LowPriorityDuringCompile, FSavePriorityClass); + + AppData.Filename := AFilename; + + {$IFNDEF STATICCOMPILER} + if ISDllCompileScript(Params) <> isceNoError then begin + {$ELSE} + if ISCompileScript(Params, False) <> isceNoError then begin + {$ENDIF} + StatusMessage(smkError, SCompilerStatusErrorAborted); + if not ReadFromFile and (AppData.ErrorLine > 0) then begin + Memo := GetMemoFromErrorFilename(AppData.ErrorFilename); + if Memo <> nil then begin + { Move the caret to the line number the error occurred on } + MoveCaretAndActivateMemo(Memo, AppData.ErrorLine - 1, False); + SetErrorLine(Memo, AppData.ErrorLine - 1); + end; + end; + if not AppData.Aborted then begin + S := ''; + if AppData.ErrorFilename <> '' then + S := 'File: ' + AppData.ErrorFilename + SNewLine2; + if AppData.ErrorLine > 0 then + S := S + Format('Line %d:' + SNewLine, [AppData.ErrorLine]); + S := S + AppData.ErrorMsg; + SetAppTaskbarProgressState(tpsError); + MsgBox(S, 'Compiler Error', mbCriticalError, MB_OK) + end; + Abort; + end; + ElapsedTime := GetTickCount - StartTime; + ElapsedSeconds := ElapsedTime div 1000; + StatusMessage(smkStartEnd, Format(SCompilerStatusFinished, [TimeToStr(Time), + Format('%.2u%s%.2u%s%.3u', [ElapsedSeconds div 60, FormatSettings.TimeSeparator, + ElapsedSeconds mod 60, FormatSettings.DecimalSeparator, ElapsedTime mod 1000])])); + finally + AppData.Lines.Free; + FCompiling := False; + SetLowPriority(False, FSavePriorityClass); + OldActiveMemo.Cursor := crDefault; + OldActiveMemo.SetCursorID(SC_CURSORNORMAL); + CompilerOutputList.Cursor := crDefault; + for Memo in FFileMemos do + Memo.ReadOnly := False; + UpdateEditModePanel; + UpdateRunMenu; + UpdateCaption; + UpdatePreprocMemos; + if AppData.DebugInfo <> nil then begin + ParseDebugInfo(AppData.DebugInfo); { Must be called after UpdateIncludedFilesMemos } + FreeMem(AppData.DebugInfo); + end; + InvalidateStatusPanel(spCompileIcon); + InvalidateStatusPanel(spCompileProgress); + SetAppTaskbarProgressState(tpsNoProgress); + StatusBar.Panels[spExtraStatus].Text := ''; + end; + FCompiledExe := AppData.OutputExe; + FModifiedAnySinceLastCompile := False; + FModifiedAnySinceLastCompileAndGo := False; +end; + +procedure TCompileForm.SyncEditorOptions; +const + SquigglyStyles: array[Boolean] of Integer = (INDIC_HIDDEN, INDIC_SQUIGGLE); +var + Memo: TCompScintEdit; +begin + for Memo in FMemos do begin + Memo.UseStyleAttributes := FOptions.UseSyntaxHighlighting; + Memo.Call(SCI_INDICSETSTYLE, inSquiggly, SquigglyStyles[FOptions.UnderlineErrors]); + + if FOptions.CursorPastEOL then + Memo.VirtualSpaceOptions := [svsRectangularSelection, svsUserAccessible] + else + Memo.VirtualSpaceOptions := []; + Memo.FillSelectionToEdge := FOptions.CursorPastEOL; + + Memo.TabWidth := FOptions.TabWidth; + Memo.UseTabCharacter := FOptions.UseTabCharacter; + + Memo.WordWrap := FOptions.WordWrap; + + if FOptions.IndentationGuides then + Memo.IndentationGuides := sigLookBoth + else + Memo.IndentationGuides := sigNone; + + Memo.LineNumbers := FOptions.GutterLineNumbers; + end; +end; + +function DoubleAmp(const S: String): String; +var + I: Integer; +begin + Result := S; + I := 1; + while I <= Length(Result) do begin + if Result[I] = '&' then begin + Inc(I); + Insert('&', Result, I); + Inc(I); + end + else + Inc(I, PathCharLength(S, I)); + end; +end; + +procedure TCompileForm.FMenuClick(Sender: TObject); +var + I: Integer; +begin + FSaveMainFileAs.Enabled := FActiveMemo = FMainMemo; + FSaveEncoding.Enabled := FSave.Enabled; { FSave.Enabled is kept up-to-date by UpdateSaveMenuItemAndButton } + FSaveEncodingAuto.Checked := FSaveEncoding.Enabled and ((FActiveMemo as TCompScintFileEdit).SaveEncoding = seAuto); + FSaveEncodingUTF8WithBOM.Checked := FSaveEncoding.Enabled and ((FActiveMemo as TCompScintFileEdit).SaveEncoding = seUTF8WithBOM); + FSaveEncodingUTF8WithoutBOM.Checked := FSaveEncoding.Enabled and ((FActiveMemo as TCompScintFileEdit).SaveEncoding = seUTF8WithoutBOM); + FSaveAll.Visible := FOptions.OpenIncludedFiles; + ReadMRUMainFilesList; + FMRUMainFilesSep.Visible := FMRUMainFilesList.Count <> 0; + for I := 0 to High(FMRUMainFilesMenuItems) do + with FMRUMainFilesMenuItems[I] do begin + if I < FMRUMainFilesList.Count then begin + Visible := True; + Caption := '&' + IntToStr((I+1) mod 10) + ' ' + DoubleAmp(FMRUMainFilesList[I]); + end + else + Visible := False; + end; + + ApplyMenuBitmaps(Sender as TMenuItem); +end; + +procedure TCompileForm.FNewMainFileClick(Sender: TObject); +begin + if ConfirmCloseFile(True) then + NewMainFile; +end; + +procedure TCompileForm.FNewMainFileUserWizardClick(Sender: TObject); +begin + if ConfirmCloseFile(True) then + NewMainFileUsingWizard; +end; + +procedure TCompileForm.ShowOpenMainFileDialog(const Examples: Boolean); +var + InitialDir, FileName: String; +begin + if Examples then begin + InitialDir := PathExtractPath(NewParamStr(0)) + 'Examples'; + Filename := PathExtractPath(NewParamStr(0)) + 'Examples\Example1.iss'; + end + else begin + InitialDir := PathExtractDir(FMainMemo.Filename); + Filename := ''; + end; + if ConfirmCloseFile(True) then + if NewGetOpenFileName('', FileName, InitialDir, SCompilerOpenFilter, 'iss', Handle) then + OpenFile(FMainMemo, Filename, False); +end; + +procedure TCompileForm.FOpenMainFileClick(Sender: TObject); +begin + ShowOpenMainFileDialog(False); +end; + +procedure TCompileForm.FSaveClick(Sender: TObject); +begin + SaveFile((FActiveMemo as TCompScintFileEdit), Sender = FSaveMainFileAs); +end; + +procedure TCompileForm.FSaveEncodingItemClick(Sender: TObject); +begin + var Memo := (FActiveMemo as TCompScintFileEdit); + + var OldSaveEncoding := Memo.SaveEncoding; + + if Sender = FSaveEncodingUTF8WithBOM then + Memo.SaveEncoding := seUTF8WithBOM + else if Sender = FSaveEncodingUTF8WithoutBOM then + Memo.SaveEncoding := seUTF8WithoutBOM + else + Memo.SaveEncoding := seAuto; + + if Memo.SaveEncoding <> OldSaveEncoding then + Memo.ForceModifiedState; +end; + +procedure TCompileForm.FSaveAllClick(Sender: TObject); +var + Memo: TCompScintFileEdit; +begin + for Memo in FFileMemos do + if Memo.Used and Memo.Modified then + SaveFile(Memo, False); +end; + +procedure TCompileForm.FPrintClick(Sender: TObject); + + procedure SetupNonDarkPrintStyler(var PrintStyler: TInnoSetupStyler; var PrintTheme: TTheme; + var OldStyler: TScintCustomStyler; var OldTheme: TTheme); + begin + { Not the most pretty code, would ideally make a copy of FActiveMemo and print that instead or + somehow convince Scintilla to use different print styles but don't know of a good way to do + either. Using SC_PRINT_COLOURONWHITE doesn't help, this gives white on white in dark mode. } + PrintStyler := TInnoSetupStyler.Create(nil); + PrintTheme := TTheme.Create; + PrintStyler.ISPPInstalled := ISPPInstalled; + PrintStyler.Theme := PrintTheme; + if not FTheme.Dark then + PrintTheme.Typ := FTheme.Typ + else + PrintTheme.Typ := ttModernLight; + OldStyler := FActiveMemo.Styler; + OldTheme := FActiveMemo.Theme; + FActiveMemo.Styler := PrintStyler; + FActiveMemo.Theme := PrintTheme; + FActiveMemo.UpdateThemeColorsAndStyleAttributes; + end; + + procedure DeinitPrintStyler(const PrintStyler: TInnoSetupStyler; const PrintTheme: TTheme; + const OldStyler: TScintCustomStyler; const OldTheme: TTheme); + begin + if (OldStyler <> nil) or (OldTheme <> nil) then begin + if OldStyler <> nil then + FActiveMemo.Styler := OldStyler; + if OldTheme <> nil then + FActiveMemo.Theme := OldTheme; + FActiveMemo.UpdateThemeColorsAndStyleAttributes; + end; + PrintTheme.Free; + PrintStyler.Free; + end; + +var + PrintStyler: TInnoSetupStyler; + OldStyler: TScintCustomStyler; + PrintTheme, OldTheme: TTheme; + PrintMemo: TCompScintEdit; + HeaderMemo: TCompScintFileEdit; + FileTitle, S: String; + pdlg: TPrintDlg; + crange: TScintRange; + startPos, endPos: Integer; + hdc: Windows.HDC; + rectMargins, rectPhysMargins, rectSetup, rcw: TRect; + ptPage, ptDpi: TPoint; + headerLineHeight, footerLineHeight: Integer; + fontHeader, fontFooter: HFONT; + tm: TTextMetric; + di: TDocInfo; + lengthDoc, lengthDocMax, lengthPrinted: Integer; + frPrint: TScintRangeToFormat; + pageNum: Integer; + printPage: Boolean; + ta: UINT; + sHeader, sFooter: String; + pen, penOld: HPEN; +begin + if FActiveMemo is TCompScintFileEdit then + HeaderMemo := TCompScintFileEdit(FActiveMemo) + else + HeaderMemo := FMainMemo; + sHeader := HeaderMemo.Filename; + FileTitle := GetFileTitle(HeaderMemo.Filename); + if HeaderMemo <> FActiveMemo then begin + S := ' - ' + MemosTabSet.Tabs[MemoToTabIndex(FActiveMemo)]; + sHeader := Format('%s %s', [sHeader, S]); + FileTitle := Format('%s %s', [FileTitle, S]); + end; + sHeader := Format('%s - %s', [sHeader, DateTimeToStr(Now())]); + + { Based on Scintilla 2.22's SciTEWin::Print } + + ZeroMemory(@pdlg, SizeOf(pdlg)); + pdlg.lStructSize := SizeOf(pdlg); + pdlg.hwndOwner := Handle; + pdlg.hInstance := hInstance; + pdlg.Flags := PD_USEDEVMODECOPIES or PD_ALLPAGES or PD_RETURNDC; + pdlg.nFromPage := 1; + pdlg.nToPage := 1; + pdlg.nMinPage := 1; + pdlg.nMaxPage := $ffff; // We do not know how many pages in the document until the printer is selected and the paper size is known. + pdlg.nCopies := 1; + pdlg.hDC := 0; + pdlg.hDevMode := FDevMode; + pdlg.hDevNames := FDevNames; + + // See if a range has been selected + crange := FActiveMemo.Selection; + startPos := crange.StartPos; + endPos := crange.EndPos; + + if startPos = endPos then + pdlg.Flags := pdlg.Flags or PD_NOSELECTION + else + pdlg.Flags := pdlg.Flags or PD_SELECTION; + +(* + if (!showDialog) { + // Don't display dialog box, just use the default printer and options + pdlg.Flags |= PD_RETURNDEFAULT; + } +*) + + if not PrintDlg(pdlg) then + Exit; + + PrintStyler := nil; + PrintTheme := nil; + OldStyler := nil; + OldTheme := nil; + try + if FTheme.Dark then + SetupNonDarkPrintStyler(PrintStyler, PrintTheme, OldStyler, OldTheme); + + FDevMode := pdlg.hDevMode; + FDevNames := pdlg.hDevNames; + + hdc := pdlg.hDC; + + // Get printer resolution + ptDpi.x := GetDeviceCaps(hdc, LOGPIXELSX); // dpi in X direction + ptDpi.y := GetDeviceCaps(hdc, LOGPIXELSY); // dpi in Y direction + + // Start by getting the physical page size (in device units). + ptPage.x := GetDeviceCaps(hdc, PHYSICALWIDTH); // device units + ptPage.y := GetDeviceCaps(hdc, PHYSICALHEIGHT); // device units + + // Get the dimensions of the unprintable + // part of the page (in device units). + rectPhysMargins.left := GetDeviceCaps(hdc, PHYSICALOFFSETX); + rectPhysMargins.top := GetDeviceCaps(hdc, PHYSICALOFFSETY); + + // To get the right and lower unprintable area, + // we take the entire width and height of the paper and + // subtract everything else. + rectPhysMargins.right := ptPage.x // total paper width + - GetDeviceCaps(hdc, HORZRES) // printable width + - rectPhysMargins.left; // left unprintable margin + + rectPhysMargins.bottom := ptPage.y // total paper height + - GetDeviceCaps(hdc, VERTRES) // printable height + - rectPhysMargins.top; // right unprintable margin + + // At this point, rectPhysMargins contains the widths of the + // unprintable regions on all four sides of the page in device units. + + (* + // Take in account the page setup given by the user (if one value is not null) + if (pagesetupMargin.left != 0 || pagesetupMargin.right != 0 || + pagesetupMargin.top != 0 || pagesetupMargin.bottom != 0) { + GUI::Rectangle rectSetup; + + // Convert the hundredths of millimeters (HiMetric) or + // thousandths of inches (HiEnglish) margin values + // from the Page Setup dialog to device units. + // (There are 2540 hundredths of a mm in an inch.) + + TCHAR localeInfo[3]; + GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_IMEASURE, localeInfo, 3); + + if (localeInfo[0] == '0') { // Metric system. '1' is US System *) + rectSetup.left := MulDiv(500 {pagesetupMargin.left}, ptDpi.x, 2540); + rectSetup.top := MulDiv(500 {pagesetupMargin.top}, ptDpi.y, 2540); + rectSetup.right := MulDiv(500 {pagesetupMargin.right}, ptDpi.x, 2540); + rectSetup.bottom := MulDiv(500 {pagesetupMargin.bottom}, ptDpi.y, 2540); + (* } else { + rectSetup.left = MulDiv(pagesetupMargin.left, ptDpi.x, 1000); + rectSetup.top = MulDiv(pagesetupMargin.top, ptDpi.y, 1000); + rectSetup.right = MulDiv(pagesetupMargin.right, ptDpi.x, 1000); + rectSetup.bottom = MulDiv(pagesetupMargin.bottom, ptDpi.y, 1000); + } *) + + // Don't reduce margins below the minimum printable area + rectMargins.left := Max(rectPhysMargins.left, rectSetup.left); + rectMargins.top := Max(rectPhysMargins.top, rectSetup.top); + rectMargins.right := Max(rectPhysMargins.right, rectSetup.right); + rectMargins.bottom := Max(rectPhysMargins.bottom, rectSetup.bottom); + (* + } else { + rectMargins := rectPhysMargins; + } + *) + + // rectMargins now contains the values used to shrink the printable + // area of the page. + + // Convert device coordinates into logical coordinates + DPtoLP(hdc, rectMargins, 2); + DPtoLP(hdc, rectPhysMargins, 2); + + // Convert page size to logical units and we're done! + DPtoLP(hdc, ptPage, 1); + + headerLineHeight := MulDiv(9, ptDpi.y, 72); + fontHeader := CreateFont(headerLineHeight, 0, 0, 0, FW_REGULAR, 1, 0, 0, 0, 0, 0, 0, 0, PChar(FActiveMemo.Font.Name)); + SelectObject(hdc, fontHeader); + GetTextMetrics(hdc, &tm); + headerLineHeight := tm.tmHeight + tm.tmExternalLeading; + + footerLineHeight := MulDiv(9, ptDpi.y, 72); + fontFooter := CreateFont(footerLineHeight, 0, 0, 0, FW_REGULAR, 0, 0, 0, 0, 0, 0, 0, 0, PChar(FActiveMemo.Font.Name)); + SelectObject(hdc, fontFooter); + GetTextMetrics(hdc, &tm); + footerLineHeight := tm.tmHeight + tm.tmExternalLeading; + + ZeroMemory(@di, SizeOf(di)); + di.cbSize := SizeOf(di); + di.lpszDocName := PChar(FileTitle); + di.lpszOutput := nil; + di.lpszDatatype := nil; + di.fwType := 0; + + if StartDoc(hdc, &di) < 0 then begin + DeleteDC(hdc); + DeleteObject(fontHeader); + DeleteObject(fontFooter); + MsgBox('Can not start printer document.', SCompilerFormCaption, mbError, MB_OK); + Exit; + end; + + lengthDoc := FActiveMemo.GetRawTextLength; + lengthDocMax := lengthDoc; + lengthPrinted := 0; + + // Requested to print selection + if (pdlg.Flags and PD_SELECTION) <> 0 then begin + if startPos > endPos then begin + lengthPrinted := endPos; + lengthDoc := startPos; + end else begin + lengthPrinted := startPos; + lengthDoc := endPos; + end; + + if lengthPrinted < 0 then + lengthPrinted := 0; + if lengthDoc > lengthDocMax then + lengthDoc := lengthDocMax; + end; + + // We must subtract the physical margins from the printable area + frPrint.hdc := hdc; + frPrint.hdcTarget := hdc; + frPrint.rc.left := rectMargins.left - rectPhysMargins.left; + frPrint.rc.top := rectMargins.top - rectPhysMargins.top; + frPrint.rc.right := ptPage.x - rectMargins.right - rectPhysMargins.left; + frPrint.rc.bottom := ptPage.y - rectMargins.bottom - rectPhysMargins.top; + frPrint.rcPage.left := 0; + frPrint.rcPage.top := 0; + frPrint.rcPage.right := ptPage.x - rectPhysMargins.left - rectPhysMargins.right - 1; + frPrint.rcPage.bottom := ptPage.y - rectPhysMargins.top - rectPhysMargins.bottom - 1; + frPrint.rc.top := frPrint.rc.top + headerLineHeight + headerLineHeight div 2; + frPrint.rc.bottom := frPrint.rc.bottom - (footerLineHeight + footerLineHeight div 2); + + // Print each page + pageNum := 1; + + while lengthPrinted < lengthDoc do begin + printPage := ((pdlg.Flags and PD_PAGENUMS) = 0) or + ((pageNum >= pdlg.nFromPage) and (pageNum <= pdlg.nToPage)); + + sFooter := Format('- %d -', [pageNum]); + + if printPage then begin + StartPage(hdc); + + SetTextColor(hdc, clBlack); + SetBkColor(hdc, clWhite); + SelectObject(hdc, fontHeader); + ta := SetTextAlign(hdc, TA_BOTTOM); + rcw := Rect(frPrint.rc.left, frPrint.rc.top - headerLineHeight - headerLineHeight div 2, + frPrint.rc.right, frPrint.rc.top - headerLineHeight div 2); + rcw.bottom := rcw.top + headerLineHeight; + ExtTextOut(hdc, frPrint.rc.left + 5, frPrint.rc.top - headerLineHeight div 2, + ETO_OPAQUE, rcw, sHeader, Length(sHeader), nil); + SetTextAlign(hdc, ta); + pen := CreatePen(0, 1, clBlack); + penOld := SelectObject(hdc, pen); + MoveToEx(hdc, frPrint.rc.left, frPrint.rc.top - headerLineHeight div 4, nil); + LineTo(hdc, frPrint.rc.right, frPrint.rc.top - headerLineHeight div 4); + SelectObject(hdc, penOld); + DeleteObject(pen); + end; + + frPrint.chrg.StartPos := lengthPrinted; + frPrint.chrg.EndPos := lengthDoc; + + lengthPrinted := FActiveMemo.FormatRange(printPage, @frPrint); + + if printPage then begin + SetTextColor(hdc, clBlack); + SetBkColor(hdc, clWhite); + SelectObject(hdc, fontFooter); + ta := SetTextAlign(hdc, TA_TOP); + rcw := Rect(frPrint.rc.left, frPrint.rc.bottom + footerLineHeight div 2, + frPrint.rc.right, frPrint.rc.bottom + footerLineHeight + footerLineHeight div 2); + ExtTextOut(hdc, frPrint.rc.left + 5, frPrint.rc.bottom + footerLineHeight div 2, + ETO_OPAQUE, rcw, sFooter, Length(sFooter), nil); + SetTextAlign(hdc, ta); + pen := CreatePen(0, 1, clBlack); + penOld := SelectObject(hdc, pen); + MoveToEx(hdc, frPrint.rc.left, frPrint.rc.bottom + footerLineHeight div 4, nil); + LineTo(hdc, frPrint.rc.right, frPrint.rc.bottom + footerLineHeight div 4); + SelectObject(hdc, penOld); + DeleteObject(pen); + + EndPage(hdc); + end; + Inc(pageNum); + + if ((pdlg.Flags and PD_PAGENUMS) <> 0) and (pageNum > pdlg.nToPage) then + Break; + end; + + FActiveMemo.FormatRange(False, nil); + + EndDoc(hdc); + DeleteDC(hdc); + DeleteObject(fontHeader); + DeleteObject(fontFooter); + finally + DeinitPrintStyler(PrintStyler, PrintTheme, OldStyler, OldTheme); + end; +end; + +procedure TCompileForm.FMRUClick(Sender: TObject); +var + I: Integer; +begin + if ConfirmCloseFile(True) then + for I := 0 to High(FMRUMainFilesMenuItems) do + if FMRUMainFilesMenuItems[I] = Sender then begin + OpenMRUMainFile(FMRUMainFilesList[I]); + Break; + end; +end; + +procedure TCompileForm.FExitClick(Sender: TObject); +begin + Close; +end; + +procedure TCompileForm.EMenuClick(Sender: TObject); +var + MemoHasFocus, MemoIsReadOnly: Boolean; +begin + MemoHasFocus := FActiveMemo.Focused; + MemoIsReadOnly := FActiveMemo.ReadOnly; + EUndo.Enabled := MemoHasFocus and FActiveMemo.CanUndo; + ERedo.Enabled := MemoHasFocus and FActiveMemo.CanRedo; + ECut.Enabled := MemoHasFocus and not MemoIsReadOnly and FActiveMemo.SelNotEmpty; + ECopy.Enabled := MemoHasFocus and FActiveMemo.SelNotEmpty; + EPaste.Enabled := MemoHasFocus and not MemoIsReadOnly and Clipboard.HasFormat(CF_TEXT); + EDelete.Enabled := MemoHasFocus and FActiveMemo.SelNotEmpty; + ESelectAll.Enabled := MemoHasFocus; + EFind.Enabled := MemoHasFocus; + EFindNext.Enabled := MemoHasFocus; + EFindPrevious.Enabled := MemoHasFocus; + EReplace.Enabled := MemoHasFocus and not MemoIsReadOnly; + EGoto.Enabled := MemoHasFocus; + ECompleteWord.Enabled := MemoHasFocus and not MemoIsReadOnly; + + ApplyMenuBitmaps(Sender as TMenuItem); +end; + +procedure TCompileForm.EUndoClick(Sender: TObject); +begin + FActiveMemo.Undo; +end; + +procedure TCompileForm.ERedoClick(Sender: TObject); +begin + FActiveMemo.Redo; +end; + +procedure TCompileForm.ECutClick(Sender: TObject); +begin + FActiveMemo.CutToClipboard; +end; + +procedure TCompileForm.ECopyClick(Sender: TObject); +begin + FActiveMemo.CopyToClipboard; +end; + +procedure TCompileForm.EPasteClick(Sender: TObject); +begin + FActiveMemo.PasteFromClipboard; +end; + + +procedure TCompileForm.EDeleteClick(Sender: TObject); +begin + FActiveMemo.ClearSelection; +end; + +procedure TCompileForm.ESelectAllClick(Sender: TObject); +begin + FActiveMemo.SelectAll; +end; + +procedure TCompileForm.ECompleteWordClick(Sender: TObject); +begin + InitiateAutoComplete(#0); +end; + +procedure TCompileForm.VMenuClick(Sender: TObject); +begin + VZoomIn.Enabled := (FActiveMemo.Zoom < 20); + VZoomOut.Enabled := (FActiveMemo.Zoom > -10); + VZoomReset.Enabled := (FActiveMemo.Zoom <> 0); + VToolbar.Checked := ToolbarPanel.Visible; + VStatusBar.Checked := StatusBar.Visible; + VNextTab.Enabled := MemosTabSet.Visible and (MemosTabSet.Tabs.Count > 1); + VPreviousTab.Enabled := VNextTab.Enabled; + VCloseCurrentTab.Enabled := MemosTabSet.Visible and (FActiveMemo <> FMainMemo) and (FActiveMemo <> FPreprocessorOutputMemo); + VReopenTab.Visible := MemosTabSet.Visible and (FHiddenFiles.Count > 0); + if VReopenTab.Visible then + UpdateReopenTabMenu(VReopenTab); + VReopenTabs.Visible := VReopenTab.Visible; + VHide.Checked := not StatusPanel.Visible; + VCompilerOutput.Checked := StatusPanel.Visible and (OutputTabSet.TabIndex = tiCompilerOutput); + VDebugOutput.Checked := StatusPanel.Visible and (OutputTabSet.TabIndex = tiDebugOutput); + VDebugCallStack.Checked := StatusPanel.Visible and (OutputTabSet.TabIndex = tiDebugCallStack); + VFindResults.Checked := StatusPanel.Visible and (OutputTabSet.TabIndex = tiFindResults); + + ApplyMenuBitmaps(Sender as TMenuItem); +end; + +procedure TCompileForm.VNextTabClick(Sender: TObject); +var + NewTabIndex: Integer; +begin + NewTabIndex := MemosTabSet.TabIndex+1; + if NewTabIndex >= MemosTabSet.Tabs.Count then + NewTabIndex := 0; + MemosTabSet.TabIndex := NewTabIndex; +end; + +procedure TCompileForm.VPreviousTabClick(Sender: TObject); +var + NewTabIndex: Integer; +begin + NewTabIndex := MemosTabSet.TabIndex-1; + if NewTabIndex < 0 then + NewTabIndex := MemosTabSet.Tabs.Count-1; + MemosTabSet.TabIndex := NewTabIndex; +end; + +procedure TCompileForm.CloseTab(const TabIndex: Integer); +begin + var Memo := TabIndexToMemo(TabIndex, MemosTabSet.Tabs.Count-1); + var MemoWasActiveMemo:= Memo = FActiveMemo; + + MemosTabSet.Tabs.Delete(TabIndex); { This will not change MemosTabset.TabIndex } + MemosTabSet.Hints.Delete(TabIndex); + MemosTabSet.CloseButtons.Delete(TabIndex); + + FHiddenFiles.Add((Memo as TCompScintFileEdit).Filename); + InvalidateStatusPanel(spHiddenFilesCount); + BuildAndSaveKnownIncludedAndHiddenFiles; + + { Because MemosTabSet.Tabs and FHiddenFiles have both been updated now, + hereafter setting TabIndex will not select the memo we're closing + even if it's not hidden yet because TabIndexToMemo as called by + MemosTabSetClick will skip it } + + if MemoWasActiveMemo then begin + { Select next tab, except when we're already at the end. Avoiding flicker by + doing this before hiding old active memo. We do this in a dirty way by + clicking two tabs while making sure TabSetClick doesn't see the first + 'fake' one. } + FIgnoreTabSetClick := True; + try + VNextTabClick(Self); + finally + FIgnoreTabSetClick := False; + end; + VPreviousTabClick(Self); + Memo.CancelAutoComplete; + Memo.Visible := False; + end else if TabIndex < MemosTabset.TabIndex then + MemosTabSet.TabIndex := MemosTabset.TabIndex-1; { Reselect old selected tab } +end; + +procedure TCompileForm.VCloseCurrentTabClick(Sender: TObject); +begin + CloseTab(MemosTabSet.TabIndex); +end; + +procedure TCompileForm.ReopenTabOrTabs(const HiddenFileIndex: Integer; + const Activate: Boolean); +begin + var ReopenFilename: String; + if HiddenFileIndex >= 0 then begin + ReopenFilename := FHiddenFiles[HiddenFileIndex]; + FHiddenFiles.Delete(HiddenFileIndex); + end else begin + ReopenFilename := FHiddenFiles[0]; + FHiddenFiles.Clear; + end; + InvalidateStatusPanel(spHiddenFilesCount); + + UpdatePreprocMemos; + BuildAndSaveKnownIncludedAndHiddenFiles; + + { Activate the memo if requested } + if Activate then begin + for var Memo in FFileMemos do begin + if Memo.Used and (PathCompare(Memo.Filename, ReopenFilename) = 0) then begin + MemosTabSet.TabIndex := MemoToTabIndex(memo); + Break; + end; + end + end; +end; + +procedure TCompileForm.ReopenTabClick(Sender: TObject); +begin + ReopenTabOrTabs((Sender as TMenuItem).Tag, True); +end; + +procedure TCompileForm.VReopenTabsClick(Sender: TObject); +begin + ReopenTabOrTabs(-1, True); +end; + +procedure TCompileForm.VZoomInClick(Sender: TObject); +begin + FActiveMemo.ZoomIn; { MemoZoom will zoom the other memos } +end; + +procedure TCompileForm.VZoomOutClick(Sender: TObject); +begin + FActiveMemo.ZoomOut; +end; + +procedure TCompileForm.VZoomResetClick(Sender: TObject); +begin + FActiveMemo.Zoom := 0; +end; + +procedure TCompileForm.VToolbarClick(Sender: TObject); +begin + ToolbarPanel.Visible := not ToolbarPanel.Visible; +end; + +procedure TCompileForm.VStatusBarClick(Sender: TObject); +begin + StatusBar.Visible := not StatusBar.Visible; +end; + +procedure TCompileForm.SetStatusPanelVisible(const AVisible: Boolean); +var + CaretWasInView: Boolean; +begin + if StatusPanel.Visible <> AVisible then begin + CaretWasInView := FActiveMemo.IsPositionInViewVertically(FActiveMemo.CaretPosition); + if AVisible then begin + { Ensure the status panel height isn't out of range before showing } + UpdateStatusPanelHeight(StatusPanel.Height); + SplitPanel.Top := ClientHeight; + StatusPanel.Top := ClientHeight; + end + else begin + if StatusPanel.ContainsControl(ActiveControl) then + ActiveControl := FActiveMemo; + end; + SplitPanel.Visible := AVisible; + StatusPanel.Visible := AVisible; + if AVisible and CaretWasInView then begin + { If the caret was in view, make sure it still is } + FActiveMemo.ScrollCaretIntoView; + end; + end; +end; + +procedure TCompileForm.VHideClick(Sender: TObject); +begin + SetStatusPanelVisible(False); +end; + +procedure TCompileForm.VCompilerOutputClick(Sender: TObject); +begin + OutputTabSet.TabIndex := tiCompilerOutput; + SetStatusPanelVisible(True); +end; + +procedure TCompileForm.VDebugOutputClick(Sender: TObject); +begin + OutputTabSet.TabIndex := tiDebugOutput; + SetStatusPanelVisible(True); +end; + +procedure TCompileForm.VDebugCallStackClick(Sender: TObject); +begin + OutputTabSet.TabIndex := tiDebugCallStack; + SetStatusPanelVisible(True); +end; + +procedure TCompileForm.VFindResultsClick(Sender: TObject); +begin + OutputTabSet.TabIndex := tiFindResults; + SetStatusPanelVisible(True); +end; + +procedure TCompileForm.BMenuClick(Sender: TObject); +begin + BLowPriority.Checked := FOptions.LowPriorityDuringCompile; + BOpenOutputFolder.Enabled := (FCompiledExe <> ''); + + ApplyMenuBitmaps(Sender as TMenuItem); +end; + +procedure TCompileForm.BCompileClick(Sender: TObject); +begin + CompileFile('', False); +end; + +procedure TCompileForm.BStopCompileClick(Sender: TObject); +begin + SetAppTaskbarProgressState(tpsPaused); + try + if MsgBox('Are you sure you want to abort the compile?', SCompilerFormCaption, + mbConfirmation, MB_YESNO or MB_DEFBUTTON2) <> IDNO then + FCompileWantAbort := True; + finally + SetAppTaskbarProgressState(tpsNormal); + end; +end; + +procedure TCompileForm.BLowPriorityClick(Sender: TObject); +begin + FOptions.LowPriorityDuringCompile := not FOptions.LowPriorityDuringCompile; + { If a compile is already in progress, change the priority now } + if FCompiling then + SetLowPriority(FOptions.LowPriorityDuringCompile, FSavePriorityClass); +end; + +procedure TCompileForm.BOpenOutputFolderClick(Sender: TObject); +var + Dir: String; +begin + Dir := GetWinDir; + ShellExecute(Application.Handle, 'open', PChar(AddBackslash(Dir) + 'explorer.exe'), + PChar(Format('/select,"%s"', [FCompiledExe])), PChar(Dir), SW_SHOWNORMAL); +end; + +procedure TCompileForm.HMenuClick(Sender: TObject); +begin + HISPPDoc.Visible := NewFileExists(PathExtractPath(NewParamStr(0)) + 'ispp.chm'); + HISPPSep.Visible := HISPPDoc.Visible; + + ApplyMenuBitmaps(Sender as TMenuItem); +end; + +procedure TCompileForm.HShortcutsDocClick(Sender: TObject); +begin + if Assigned(HtmlHelp) then + HtmlHelp(GetDesktopWindow, PChar(GetHelpFile), HH_DISPLAY_TOPIC, Cardinal(PChar('topic_compformshortcuts.htm'))); +end; + +procedure TCompileForm.HDocClick(Sender: TObject); +begin + if Assigned(HtmlHelp) then + HtmlHelp(GetDesktopWindow, PChar(GetHelpFile), HH_DISPLAY_TOPIC, 0); +end; + +procedure TCompileForm.MemoKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key = VK_F1 then begin + var HelpFile := GetHelpFile; + if Assigned(HtmlHelp) then begin + HtmlHelp(GetDesktopWindow, PChar(HelpFile), HH_DISPLAY_TOPIC, 0); + var S := FActiveMemo.WordAtCursor; + if S <> '' then begin + var KLink: THH_AKLINK; + FillChar(KLink, SizeOf(KLink), 0); + KLink.cbStruct := SizeOf(KLink); + KLink.pszKeywords := PChar(S); + KLink.fIndexOnFail := True; + HtmlHelp(GetDesktopWindow, PChar(HelpFile), HH_KEYWORD_LOOKUP, DWORD(@KLink)); + end; + end; + end + else if (Key = VK_LEFT) and not (ssCtrl in Shift) and FOptions.CursorPastEOL then begin + if (FActiveMemo.CaretColumn = 0) and (FActiveMemo.CaretVirtualSpace = 0) then + Key := 0; + end + else if ((Key = VK_RIGHT) and (Shift * [ssShift, ssAlt, ssCtrl] = [ssAlt])) and + (ShortCut(Key, Shift) <> FForwardNavButtonShortCut) then begin + InitiateAutoComplete(#0); + Key := 0; + end; +end; + +procedure TCompileForm.MemoKeyPress(Sender: TObject; var Key: Char); +begin + if Key = #31 then begin + { We receive #31 ("Unit Separator") when Ctrl+Shift+- is pressed for some + unknown reason. But that's our VS-style forward shortcut so we filter it. + Doing this always: people might try it even if it's not the current + keymapping when they're used to Visual Studio or Visual Studio Code. } + Key := #0 + end else if ((Key = #9) or (Key = ' ')) and (GetKeyState(VK_CONTROL) < 0) then begin + { About #9, as Wikipedia explains: "The most known and common tab is a + horizontal tabulation and may be referred to as Ctrl+I." Ctrl+I is + (just like in Visual Studio Code) our alternative code completion character + because Ctrl+Space is used by the Chinese IME and Alt+Right is used by + the Delphi keymap for the forward button. So that's why we handle #9 here. + Doesn't mean Ctrl+Tab doesn't work: it doesnt trigger KeyPress, even if it + wasn't a menu shortcut for Next Tab (which it is). } + InitiateAutoComplete(#0); + Key := #0; + end; +end; + +procedure TCompileForm.HExamplesClick(Sender: TObject); +begin + ShellExecute(Application.Handle, 'open', + PChar(PathExtractPath(NewParamStr(0)) + 'Examples'), nil, nil, SW_SHOWNORMAL); +end; + +procedure TCompileForm.HFaqClick(Sender: TObject); +begin + ShellExecute(Application.Handle, 'open', + PChar(PathExtractPath(NewParamStr(0)) + 'isfaq.url'), nil, nil, SW_SHOWNORMAL); +end; + +procedure TCompileForm.HWhatsNewClick(Sender: TObject); +begin + ShellExecute(Application.Handle, 'open', + PChar(PathExtractPath(NewParamStr(0)) + 'whatsnew.htm'), nil, nil, SW_SHOWNORMAL); +end; + +procedure TCompileForm.HWebsiteClick(Sender: TObject); +begin + ShellExecute(Application.Handle, 'open', 'https://jrsoftware.org/isinfo.php', nil, + nil, SW_SHOWNORMAL); +end; + +procedure TCompileForm.HMailingListClick(Sender: TObject); +begin + OpenMailingListSite; +end; + +procedure TCompileForm.HISPPDocClick(Sender: TObject); +begin + if Assigned(HtmlHelp) then + HtmlHelp(GetDesktopWindow, PChar(GetHelpFile + '::/hh_isppredirect.xhtm'), HH_DISPLAY_TOPIC, 0); +end; + +procedure TCompileForm.HDonateClick(Sender: TObject); +begin + OpenDonateSite; +end; + +procedure TCompileForm.HAboutClick(Sender: TObject); +var + S: String; +begin + { Removing the About box or modifying any existing text inside it is a + violation of the Inno Setup license agreement; see LICENSE.TXT. + However, adding additional lines to the About box is permitted, as long as + they are placed below the original copyright notice. } + S := FCompilerVersion.Title + ' Compiler version ' + + String(FCompilerVersion.Version) + SNewLine; + if FCompilerVersion.Title <> 'Inno Setup' then + S := S + (SNewLine + 'Based on Inno Setup' + SNewLine); + S := S + ('Copyright (C) 1997-2024 Jordan Russell' + SNewLine + + 'Portions Copyright (C) 2000-2024 Martijn Laan' + SNewLine + + 'All rights reserved.' + SNewLine2 + + 'Inno Setup home page:' + SNewLine + + 'https://www.innosetup.com/' + SNewLine2 + + 'RemObjects Pascal Script home page:' + SNewLine + + 'https://www.remobjects.com/ps' + SNewLine2 + + 'Refer to LICENSE.TXT for conditions of distribution and use.'); + MsgBox(S, 'About ' + FCompilerVersion.Title, mbInformation, MB_OK); +end; + +procedure TCompileForm.WMStartCommandLineCompile(var Message: TMessage); +var + Code: Integer; +begin + UpdateStatusPanelHeight(ClientHeight); + Code := 0; + try + try + CompileFile(CommandLineFilename, True); + except + Code := 2; + Application.HandleException(Self); + end; + finally + Halt(Code); + end; +end; + +procedure TCompileForm.WMStartCommandLineWizard(var Message: TMessage); +var + Code: Integer; +begin + Code := 0; + try + try + NewMainFileUsingWizard; + except + Code := 2; + Application.HandleException(Self); + end; + finally + Halt(Code); + end; +end; + +procedure TCompileForm.WMStartNormally(var Message: TMessage); + + procedure ShowStartupForm; + var + StartupForm: TStartupForm; + Ini: TConfigIniFile; + begin + ReadMRUMainFilesList; + StartupForm := TStartupForm.Create(Application); + try + StartupForm.MRUFilesList := FMRUMainFilesList; + StartupForm.StartupCheck.Checked := not FOptions.ShowStartupForm; + if StartupForm.ShowModal = mrOK then begin + if FOptions.ShowStartupForm <> not StartupForm.StartupCheck.Checked then begin + FOptions.ShowStartupForm := not StartupForm.StartupCheck.Checked; + Ini := TConfigIniFile.Create; + try + Ini.WriteBool('Options', 'ShowStartupForm', FOptions.ShowStartupForm); + finally + Ini.Free; + end; + end; + case StartupForm.Result of + srEmpty: + FNewMainFileClick(Self); + srWizard: + FNewMainFileUserWizardClick(Self); + srOpenFile: + if ConfirmCloseFile(True) then + OpenMRUMainFile(StartupForm.ResultMainFileName); + srOpenDialog: + ShowOpenMainFileDialog(False); + srOpenDialogExamples: + ShowOpenMainFileDialog(True); + end; + end; + finally + StartupForm.Free; + end; + end; + +begin + if CommandLineFilename = '' then begin + if FOptions.ShowStartupForm then + ShowStartupForm; + end else + OpenFile(FMainMemo, CommandLineFilename, False); +end; + +procedure TCompileForm.UpdateReopenTabMenu(const Menu: TMenuItem); +begin + Menu.Clear; + for var I := 0 to FHiddenFiles.Count-1 do begin + var MenuItem := TMenuItem.Create(Menu); + MenuItem.Caption := '&' + IntToStr((I+1) mod 10) + ' ' + DoubleAmp(PathExtractName(FHiddenFiles[I])); + MenuItem.Tag := I; + MenuItem.OnClick := ReopenTabClick; + Menu.Add(MenuItem); + end; +end; + +procedure TCompileForm.MemosTabSetPopupMenuClick(Sender: TObject); +begin + { Main and preprocessor memos can't be hidden } + VCloseCurrentTab2.Enabled := (FActiveMemo <> FMainMemo) and (FActiveMemo <> FPreprocessorOutputMemo); + + VReopenTab2.Visible := FHiddenFiles.Count > 0; + if VReopenTab2.Visible then + UpdateReopenTabMenu(VReopenTab2); + VReopenTabs2.Visible := VReopenTab2.Visible; + + ApplyMenuBitmaps(Sender as TMenuItem) +end; + +procedure TCompileForm.MemosTabSetClick(Sender: TObject); +begin + if FIgnoreTabSetClick then + Exit; + + var NewActiveMemo := TabIndexToMemo(MemosTabSet.TabIndex, MemosTabSet.Tabs.Count-1); + if NewActiveMemo <> FActiveMemo then begin + { Avoiding flicker by showing new before hiding old } + NewActiveMemo.Visible := True; + var OldActiveMemo := FActiveMemo; + FActiveMemo := NewActiveMemo; + ActiveControl := NewActiveMemo; + OldActiveMemo.CancelAutoComplete; + OldActiveMemo.Visible := False; + + UpdateSaveMenuItemAndButton; + UpdateRunMenu; + UpdateCaretPosPanelAndBackNavStack; + UpdateEditModePanel; + UpdateModifiedPanel; + end; +end; + +procedure TCompileForm.MemosTabSetOnCloseButtonClick(Sender: TObject; Index: Integer); +begin + CloseTab(Index); +end; + +procedure TCompileForm.InitializeFindText(Dlg: TFindDialog); +var + S: String; +begin + S := FActiveMemo.SelText; + if (S <> '') and (Pos(#13, S) = 0) and (Pos(#10, S) = 0) then + Dlg.FindText := S + else + Dlg.FindText := FLastFindText; +end; + +procedure TCompileForm.EFindClick(Sender: TObject); +begin + ReplaceDialog.CloseDialog; + if FindDialog.Handle = 0 then + InitializeFindText(FindDialog); + if (Sender = EFind) or (Sender = EFindNext) then + FindDialog.Options := FindDialog.Options + [frDown] + else + FindDialog.Options := FindDialog.Options - [frDown]; + FindDialog.Execute; +end; + +procedure TCompileForm.EFindInFilesClick(Sender: TObject); +begin + InitializeFindText(FindInFilesDialog); + FindInFilesDialog.Execute; +end; + +procedure TCompileForm.EFindNextOrPreviousClick(Sender: TObject); +begin + if FLastFindText = '' then + EFindClick(Sender) + else begin + if Sender = EFindNext then + FLastFindOptions := FLastFindOptions + [frDown] + else + FLastFindOptions := FLastFindOptions - [frDown]; + FindNext; + end; +end; + +procedure TCompileForm.FindNext; +var + StartPos, EndPos: Integer; + Range: TScintRange; +begin + if frDown in FLastFindOptions then begin + StartPos := FActiveMemo.Selection.EndPos; + EndPos := FActiveMemo.RawTextLength; + end + else begin + StartPos := FActiveMemo.Selection.StartPos; + EndPos := 0; + end; + if FActiveMemo.FindText(StartPos, EndPos, FLastFindText, + FindOptionsToSearchOptions(FLastFindOptions), Range) then + FActiveMemo.Selection := Range + else + MsgBoxFmt('Cannot find "%s"', [FLastFindText], SCompilerFormCaption, + mbInformation, MB_OK); +end; + +procedure TCompileForm.StoreLastFindOptions(Sender: TObject); +begin + with Sender as TFindDialog do begin + FLastFindOptions := Options; + FLastFindText := FindText; + end; +end; + +procedure TCompileForm.FindDialogFind(Sender: TObject); +begin + { This event handler is shared between FindDialog & ReplaceDialog } + + { Save a copy of the current text so that InitializeFindText doesn't + mess up the operation of Edit | Find Next } + StoreLastFindOptions(Sender); + FindNext; +end; + +procedure TCompileForm.FindInFilesDialogFind(Sender: TObject); +begin + StoreLastFindOptions(Sender); + + FindResultsList.Clear; + SendMessage(FindResultsList.Handle, LB_SETHORIZONTALEXTENT, 0, 0); + FFindResults.Clear; + + var Hits := 0; + var Files := 0; + + for var Memo in FFileMemos do begin + if Memo.Used then begin + var StartPos := 0; + var EndPos := Memo.RawTextLength; + var FileHits := 0; + var Range: TScintRange; + while (StartPos < EndPos) and + Memo.FindText(StartPos, EndPos, FLastFindText, + FindOptionsToSearchOptions(FLastFindOptions), Range) do begin + var Line := Memo.GetLineFromPosition(Range.StartPos); + var Prefix := Format(' Line %d: ', [Line+1]); + var FindResult := TFindResult.Create; + FindResult.Filename := Memo.Filename; + FindResult.Line := Line; + FindResult.LineStartPos := Memo.GetPositionFromLine(Line); + FindResult.Range := Range; + FindResult.PrefixStringLength := Length(Prefix); + FFindResults.Add(FindResult); + FindResultsList.Items.AddObject(Prefix + Memo.Lines[Line], FindResult); + Inc(FileHits); + StartPos := Range.EndPos; + end; + Inc(Files); + if FileHits > 0 then begin + Inc(Hits, FileHits); + FindResultsList.Items.Insert(FindResultsList.Count-FileHits, Format('%s (%d hits):', [Memo.Filename, FileHits])); + end; + end; + end; + + FindResultsList.Items.Insert(0, Format('Find "%s" (%d hits in %d files)', [FindInFilesDialog.FindText, Hits, Files])); + + FindInFilesDialog.CloseDialog; + + OutputTabSet.TabIndex := tiFindResults; + SetStatusPanelVisible(True); +end; + +function TCompileForm.FindSetupDirectiveValue(const DirectiveName, + DefaultValue: String): String; +begin + Result := DefaultValue; + + var Memo := FMainMemo; { This function only searches the main file } + var StartPos := 0; + var EndPos := Memo.RawTextLength; + var Range: TScintRange; + + { We rely on the styler to identify [Setup] section lines, but we + may be searching into areas that haven't been styled yet } + Memo.StyleNeeded(EndPos); + + while (StartPos < EndPos) and + Memo.FindText(StartPos, EndPos, DirectiveName, [sfoWholeWord], Range) do begin + var Line := Memo.GetLineFromPosition(Range.StartPos); + if FMemosStyler.GetSectionFromLineState(Memo.Lines.State[Line]) = scSetup then begin + var LineValue := Memo.Lines[Line].Trim; { LineValue can't be empty } + if LineValue[1] <> ';' then begin + var LineParts := LineValue.Split(['=']); + if (Length(LineParts) = 2) and SameText(LineParts[0].Trim, DirectiveName) then begin + Result := LineParts[1].Trim; + { If Result is surrounded in quotes, remove them, just like TSetupCompiler.SeparateDirective } + if (Length(Result) >= 2) and + (Result[1] = '"') and (Result[Length(Result)] = '"') then + Result := Copy(Result, 2, Length(Result)-2); + Exit; { Compiler doesn't allow a directive to be specified twice so we can exit now } + end; + end; + end; + StartPos := Range.EndPos; + end; +end; + +function TCompileForm.FindSetupDirectiveValue(const DirectiveName: String; + DefaultValue: Boolean): Boolean; +begin + var Value := FindSetupDirectiveValue(DirectiveName, IfThen(DefaultValue, '1', '0')); + if not TryStrToBoolean(Value, Result) then + Result := DefaultValue; +end; + +procedure TCompileForm.EReplaceClick(Sender: TObject); +begin + FindDialog.CloseDialog; + if ReplaceDialog.Handle = 0 then begin + InitializeFindText(ReplaceDialog); + ReplaceDialog.ReplaceText := FLastReplaceText; + end; + ReplaceDialog.Execute; +end; + +procedure TCompileForm.ReplaceDialogReplace(Sender: TObject); +var + ReplaceCount, Pos: Integer; + Range, NewRange: TScintRange; +begin + FLastFindOptions := ReplaceDialog.Options; + FLastFindText := ReplaceDialog.FindText; + FLastReplaceText := ReplaceDialog.ReplaceText; + + if frReplaceAll in FLastFindOptions then begin + ReplaceCount := 0; + FActiveMemo.BeginUndoAction; + try + Pos := 0; + while FActiveMemo.FindText(Pos, FActiveMemo.RawTextLength, FLastFindText, + FindOptionsToSearchOptions(FLastFindOptions), Range) do begin + NewRange := FActiveMemo.ReplaceTextRange(Range.StartPos, Range.EndPos, FLastReplaceText); + Pos := NewRange.EndPos; + Inc(ReplaceCount); + end; + finally + FActiveMemo.EndUndoAction; + end; + if ReplaceCount = 0 then + MsgBoxFmt('Cannot find "%s"', [FLastFindText], SCompilerFormCaption, + mbInformation, MB_OK) + else + MsgBoxFmt('%d occurrence(s) replaced.', [ReplaceCount], SCompilerFormCaption, + mbInformation, MB_OK); + end + else begin + if FActiveMemo.SelTextEquals(FLastFindText, frMatchCase in FLastFindOptions) then + FActiveMemo.SelText := FLastReplaceText; + FindNext; + end; +end; + +procedure TCompileForm.UpdateStatusPanelHeight(H: Integer); +var + MinHeight, MaxHeight: Integer; +begin + MinHeight := (3 * DebugOutputList.ItemHeight + ToCurrentPPI(4)) + OutputTabSet.Height; + MaxHeight := BodyPanel.ClientHeight - ToCurrentPPI(48) - SplitPanel.Height; + if H > MaxHeight then H := MaxHeight; + if H < MinHeight then H := MinHeight; + StatusPanel.Height := H; +end; + +procedure TCompileForm.UpdateOccurrenceIndicators(const AMemo: TCompScintEdit); + + procedure FindTextAndAddRanges(const AMemo: TCompScintEdit; + const TextToFind: TScintRawString; const Options: TScintFindOptions; + const SelAvail: Boolean; const Selection: TScintRange; + const ARangeList: TScintRangeList); + begin + if ScintRawStringIsBlank(TextToFind) then + Exit; + + var StartPos := 0; + var EndPos := AMemo.RawTextLength; + var Range: TScintRange; + + while (StartPos < EndPos) and + AMemo.FindRawText(StartPos, EndPos, TextToFind, Options, Range) do begin + StartPos := Range.EndPos; + + { Don't add indicators on lines which have a line marker } + var Line := AMemo.GetLineFromPosition(Range.StartPos); + var Markers := AMemo.GetMarkers(Line); + if Markers * [mmLineError, mmLineBreakpointBad, mmLineStep] <> [] then + Continue; + + { Add indicator while making sure it does not overlap the regular selection styling } + if SelAvail and Range.Overlaps(Selection) then begin + if Range.StartPos < Selection.StartPos then + ARangeList.Add(TScintRange.Create(Range.StartPos, Selection.StartPos)); + if Range.EndPos > Selection.EndPos then + ARangeList.Add(TScintRange.Create(Selection.EndPos, Range.EndPos)); + end else + ARangeList.Add(TScintRange.Create(Range.StartPos, Range.EndPos)); + end; + end; + +begin + { Add occurrence indicators for the word at cursor if there's any and the + selection is within this word. On top of those add occurrence indicators for + the selected text if there's any. Don't do anything of the selection is not + single line. All of these things are just like VSCode. } + + var Selection: TScintRange; + var SelNotEmpty := AMemo.SelNotEmpty(Selection); + var SelSingleLine := AMemo.GetLineFromPosition(Selection.StartPos) = + AMemo.GetLineFromPosition(Selection.EndPos); + + var RangeList := TScintRangeList.Create; + try + if FOptions.HighlightWordAtCursorOccurrences and (AMemo.CaretVirtualSpace = 0) and SelSingleLine then begin + var Word := AMemo.WordAtCursorRange; + if (Word.StartPos <> Word.EndPos) and Selection.Within(Word) then begin + var TextToIndicate := AMemo.GetRawTextRange(Word.StartPos, Word.EndPos); + FindTextAndAddRanges(AMemo, TextToIndicate, [sfoMatchCase, sfoWholeWord], SelNotEmpty, Selection, RangeList); + end; + end; + AMemo.UpdateIndicators(RangeList, inWordAtCursorOccurrence); + + RangeList.Clear; + if FOptions.HighlightSelTextOccurrences and SelNotEmpty and SelSingleLine then begin + var TextToIndicate := AMemo.RawSelText; + FindTextAndAddRanges(AMemo, TextToIndicate, [], SelNotEmpty, Selection, RangeList); + end; + AMemo.UpdateIndicators(RangeList, inSelTextOccurrence); + finally + RangeList.Free; + end; +end; + +procedure TCompileForm.UpdateOutputTabSetListsItemHeightAndDebugTimeWidth; +begin + CompilerOutputList.Canvas.Font.Assign(CompilerOutputList.Font); + CompilerOutputList.ItemHeight := CompilerOutputList.Canvas.TextHeight('0') + 1; + + DebugOutputList.Canvas.Font.Assign(DebugOutputList.Font); + FDebugLogListTimestampsWidth := DebugOutputList.Canvas.TextWidth(Format('[00%s00%s00%s000] ', [FormatSettings.TimeSeparator, FormatSettings.TimeSeparator, FormatSettings.DecimalSeparator])); + DebugOutputList.ItemHeight := DebugOutputList.Canvas.TextHeight('0') + 1; + + DebugCallStackList.Canvas.Font.Assign(DebugCallStackList.Font); + DebugCallStackList.ItemHeight := DebugCallStackList.Canvas.TextHeight('0') + 1; + + FindResultsList.Canvas.Font.Assign(FindResultsList.Font); + FindResultsList.ItemHeight := FindResultsList.Canvas.TextHeight('0') + 1; +end; + +procedure TCompileForm.UpdateMemoMarkerColumns; + +type + TMarkerBitmaps = TObjectDictionary; + + procedure AddMarkerBitmap(const MarkerBitmaps: TMarkerBitmaps; const DC: HDC; const BitmapInfo: TBitmapInfo; + const Marker: Integer; const BkBrush: TBrush; const ImageList: TVirtualImageList; const ImageName: String); + begin + var pvBits: Pointer; + var Bitmap := CreateDIBSection(DC, bitmapInfo, DIB_RGB_COLORS, pvBits, 0, 0); + var OldBitmap := SelectObject(DC, Bitmap); + var Rect := TRect.Create(0, 0, BitmapInfo.bmiHeader.biWidth, BitmapInfo.bmiHeader.biHeight); + FillRect(DC, Rect, BkBrush.Handle); + if ImageList_Draw(ImageList.Handle, ImageList.GetIndexByName(ImageName), DC, 0, 0, ILD_TRANSPARENT) then begin + var Bitmap2 := TBitmap.Create; + Bitmap2.Handle := Bitmap; + MarkerBitmaps.Add(Marker, Bitmap2); + end else begin + SelectObject(DC, OldBitmap); + DeleteObject(Bitmap); + end; + end; + +type + TNamedMarker = TPair; + + function NM(const Marker: Integer; const Name: String): TNamedMarker; + begin + Result := TNamedMarker.Create(Marker, Name); { This is a record so no need to free } + end; + +begin + var Width := ToCurrentPPI(20); + for var Memo in FMemos do + Memo.UpdateMemoMarkerColumnWidth(Width); + + var ImageList := ThemedMarkersVirtualImageList; + + var DC := CreateCompatibleDC(0); + if DC <> 0 then begin + try + var MarkerBitmaps := TMarkerBitmaps.Create([doOwnsValues]); + var BkBrush := TBrush.Create; + try + BkBrush.Color := FTheme.Colors[tcMarginBack]; + + var BitmapInfo := CreateBitmapInfo(ImageList.Width, ImageList.Height, 24); + + var NamedMarkers := [ + NM(mmIconHasEntry, 'debug-stop-filled'), + NM(mmIconEntryProcessed, 'debug-stop-filled_2'), + NM(mmIconBreakpoint, 'debug-breakpoint-filled'), + NM(mmIconBreakpointBad, 'debug-breakpoint-filled-cancel-2'), + NM(mmIconBreakpointGood, 'debug-breakpoint-filled-ok-2'), + NM(mmIconStep, 'symbol-arrow-right'), + NM(mmIconBreakpointStep, 'debug-breakpoint-filled-ok2-symbol-arrow-right')]; + + for var NamedMarker in NamedMarkers do + AddMarkerBitmap(MarkerBitmaps, DC, BitmapInfo, NamedMarker.Key, BkBrush, ImageList, NamedMarker.Value); + + var Pixmap := TScintPixmap.Create; + try + for var MarkerBitmap in MarkerBitmaps do begin + Pixmap.InitializeFromBitmap(MarkerBitmap.Value, BkBrush.Color); + for var Memo in FMemos do + Memo.Call(SCI_MARKERDEFINEPIXMAP, MarkerBitmap.Key, LPARAM(Pixmap.Pixmap)); + end; + finally + Pixmap.Free; + end; + finally + BkBrush.Free; + MarkerBitmaps.Free; + end; + finally + DeleteDC(DC); + end; + end; +end; + +procedure TCompileForm.SplitPanelMouseMove(Sender: TObject; + Shift: TShiftState; X, Y: Integer); +begin + if (ssLeft in Shift) and StatusPanel.Visible then begin + UpdateStatusPanelHeight(BodyPanel.ClientToScreen(Point(0, 0)).Y - + SplitPanel.ClientToScreen(Point(0, Y)).Y + + BodyPanel.ClientHeight - (SplitPanel.Height div 2)); + end; +end; + +procedure TCompileForm.SimpleMenuClick(Sender: TObject); +begin + ApplyMenuBitmaps(Sender as TMenuItem); +end; + +procedure TCompileForm.TMenuClick(Sender: TObject); +var + MemoIsReadOnly: Boolean; +begin + MemoIsReadOnly := FActiveMemo.ReadOnly; + TGenerateGUID.Enabled := not MemoIsReadOnly; + TMsgBoxDesigner.Enabled := not MemoIsReadOnly; + TFilesDesigner.Enabled := not MemoIsReadOnly; + TRegistryDesigner.Enabled := not MemoIsReadOnly; + + ApplyMenuBitmaps(Sender as TMenuItem); +end; + +procedure TCompileForm.TAddRemoveProgramsClick(Sender: TObject); +begin + StartAddRemovePrograms; +end; + +procedure TCompileForm.TGenerateGUIDClick(Sender: TObject); +begin + if MsgBox('The generated GUID will be inserted into the editor at the cursor position. Continue?', + SCompilerFormCaption, mbConfirmation, MB_YESNO) = IDYES then + FActiveMemo.SelText := GenerateGuid; +end; + +procedure TCompileForm.TMsgBoxDesignerClick(Sender: TObject); +begin + if (FMemosStyler.GetSectionFromLineState(FActiveMemo.Lines.State[FActiveMemo.CaretLine]) <> scCode) and + (MsgBox('The generated Pascal script will be inserted into the editor at the cursor position, but the cursor is not in the [Code] section. Continue anyway?', + SCompilerFormCaption, mbConfirmation, MB_YESNO) = IDNO) then + Exit; + + var MsgBoxForm := TMsgBoxDesignerForm.Create(Application); + try + if MsgBoxForm.ShowModal = mrOk then + FActiveMemo.SelText := MsgBoxForm.GetText(FOptions.TabWidth, FOptions.UseTabCharacter); + finally + MsgBoxForm.Free; + end; +end; + +procedure TCompileForm.TRegistryDesignerClick(Sender: TObject); +begin + var RegistryDesignerForm := TRegistryDesignerForm.Create(Application); + try + var PrivilegesRequired := FindSetupDirectiveValue('PrivilegesRequired', 'admin'); + var PrivilegesRequiredOverridesAllowed := FindSetupDirectiveValue('PrivilegesRequiredOverridesAllowed', ''); + if PrivilegesRequiredOverridesAllowed = '' then begin + if SameText(PrivilegesRequired, 'admin') then + RegistryDesignerForm.PrivilegesRequired := prAdmin + else + RegistryDesignerForm.PrivilegesRequired := prLowest + end else + RegistryDesignerForm.PrivilegesRequired := prDynamic; + if RegistryDesignerForm.ShowModal = mrOk then + begin + FActiveMemo.CaretColumn := 0; + var Text := RegistryDesignerForm.Text; + if FMemosStyler.GetSectionFromLineState(FActiveMemo.Lines.State[FActiveMemo.CaretLine]) <> scRegistry then + Text := '[Registry]' + SNewLine + Text; + FActiveMemo.SelText := Text; + end; + finally + RegistryDesignerForm.Free; + end; +end; + +procedure TCompileForm.TFilesDesignerClick(Sender: TObject); +begin + var FilesDesignerForm := TFilesDesignerForm.Create(Application); + try + FilesDesignerForm.CreateAppDir := FindSetupDirectiveValue('CreateAppDir', True); + if FilesDesignerForm.ShowModal = mrOk then begin + FActiveMemo.CaretColumn := 0; + var Text := FilesDesignerForm.Text; + if FMemosStyler.GetSectionFromLineState(FActiveMemo.Lines.State[FActiveMemo.CaretLine]) <> scFiles then + Text := '[Files]' + SNewLine + Text; + FActiveMemo.SelText := Text; + end; + finally + FilesDesignerForm.Free; + end; +end; + +procedure TCompileForm.TSignToolsClick(Sender: TObject); +var + SignToolsForm: TSignToolsForm; + Ini: TConfigIniFile; + I: Integer; +begin + SignToolsForm := TSignToolsForm.Create(Application); + try + SignToolsForm.SignTools := FSignTools; + + if SignToolsForm.ShowModal <> mrOK then + Exit; + + FSignTools.Assign(SignToolsForm.SignTools); + + { Save new options } + Ini := TConfigIniFile.Create; + try + Ini.EraseSection('SignTools'); + for I := 0 to FSignTools.Count-1 do + Ini.WriteString('SignTools', 'SignTool' + IntToStr(I), FSignTools[I]); + finally + Ini.Free; + end; + finally + SignToolsForm.Free; + end; +end; + +procedure TCompileForm.TOptionsClick(Sender: TObject); +var + OptionsForm: TOptionsForm; + Ini: TConfigIniFile; + Memo: TCompScintEdit; +begin + OptionsForm := TOptionsForm.Create(Application); + try + OptionsForm.StartupCheck.Checked := FOptions.ShowStartupForm; + OptionsForm.WizardCheck.Checked := FOptions.UseWizard; + OptionsForm.AutosaveCheck.Checked := FOptions.Autosave; + OptionsForm.BackupCheck.Checked := FOptions.MakeBackups; + OptionsForm.FullPathCheck.Checked := FOptions.FullPathInTitleBar; + OptionsForm.UndoAfterSaveCheck.Checked := FOptions.UndoAfterSave; + OptionsForm.PauseOnDebuggerExceptionsCheck.Checked := FOptions.PauseOnDebuggerExceptions; + OptionsForm.RunAsDifferentUserCheck.Checked := FOptions.RunAsDifferentUser; + OptionsForm.AutoCompleteCheck.Checked := FOptions.AutoComplete; + OptionsForm.UseSynHighCheck.Checked := FOptions.UseSyntaxHighlighting; + OptionsForm.ColorizeCompilerOutputCheck.Checked := FOptions.ColorizeCompilerOutput; + OptionsForm.UnderlineErrorsCheck.Checked := FOptions.UnderlineErrors; + OptionsForm.CursorPastEOLCheck.Checked := FOptions.CursorPastEOL; + OptionsForm.TabWidthEdit.Text := IntToStr(FOptions.TabWidth); + OptionsForm.UseTabCharacterCheck.Checked := FOptions.UseTabCharacter; + OptionsForm.WordWrapCheck.Checked := FOptions.WordWrap; + OptionsForm.AutoIndentCheck.Checked := FOptions.AutoIndent; + OptionsForm.IndentationGuidesCheck.Checked := FOptions.IndentationGuides; + OptionsForm.GutterLineNumbersCheck.Checked := FOptions.GutterLineNumbers; + OptionsForm.ShowPreprocessorOutputCheck.Checked := FOptions.ShowPreprocessorOutput; + OptionsForm.OpenIncludedFilesCheck.Checked := FOptions.OpenIncludedFiles; + OptionsForm.KeyMappingComboBox.ItemIndex := Ord(FOptions.KeyMappingType); + OptionsForm.ThemeComboBox.ItemIndex := Ord(FOptions.ThemeType); + OptionsForm.FontPanel.Font.Assign(FMainMemo.Font); + OptionsForm.FontPanel.ParentBackground := False; + OptionsForm.FontPanel.Color := FMainMemo.Color; + OptionsForm.HighlightWordAtCursorOccurrencesCheck.Checked := FOptions.HighlightWordAtCursorOccurrences; + OptionsForm.HighlightSelTextOccurrencesCheck.Checked := FOptions.HighlightSelTextOccurrences; + + if OptionsForm.ShowModal <> mrOK then + Exit; + + FOptions.ShowStartupForm := OptionsForm.StartupCheck.Checked; + FOptions.UseWizard := OptionsForm.WizardCheck.Checked; + FOptions.Autosave := OptionsForm.AutosaveCheck.Checked; + FOptions.MakeBackups := OptionsForm.BackupCheck.Checked; + FOptions.FullPathInTitleBar := OptionsForm.FullPathCheck.Checked; + FOptions.UndoAfterSave := OptionsForm.UndoAfterSaveCheck.Checked; + FOptions.PauseOnDebuggerExceptions := OptionsForm.PauseOnDebuggerExceptionsCheck.Checked; + FOptions.RunAsDifferentUser := OptionsForm.RunAsDifferentUserCheck.Checked; + FOptions.AutoComplete := OptionsForm.AutoCompleteCheck.Checked; + FOptions.UseSyntaxHighlighting := OptionsForm.UseSynHighCheck.Checked; + FOptions.ColorizeCompilerOutput := OptionsForm.ColorizeCompilerOutputCheck.Checked; + FOptions.UnderlineErrors := OptionsForm.UnderlineErrorsCheck.Checked; + FOptions.CursorPastEOL := OptionsForm.CursorPastEOLCheck.Checked; + FOptions.TabWidth := StrToInt(OptionsForm.TabWidthEdit.Text); + FOptions.UseTabCharacter := OptionsForm.UseTabCharacterCheck.Checked; + FOptions.WordWrap := OptionsForm.WordWrapCheck.Checked; + FOptions.AutoIndent := OptionsForm.AutoIndentCheck.Checked; + FOptions.IndentationGuides := OptionsForm.IndentationGuidesCheck.Checked; + FOptions.GutterLineNumbers := OptionsForm.GutterLineNumbersCheck.Checked; + FOptions.ShowPreprocessorOutput := OptionsForm.ShowPreprocessorOutputCheck.Checked; + FOptions.OpenIncludedFiles := OptionsForm.OpenIncludedFilesCheck.Checked; + FOptions.KeyMappingType := TKeyMappingType(OptionsForm.KeyMappingComboBox.ItemIndex); + FOptions.ThemeType := TThemeType(OptionsForm.ThemeComboBox.ItemIndex); + FOptions.HighlightWordAtCursorOccurrences := OptionsForm.HighlightWordAtCursorOccurrencesCheck.Checked; + FOptions.HighlightSelTextOccurrences := OptionsForm.HighlightSelTextOccurrencesCheck.Checked; + + UpdateCaption; + UpdatePreprocMemos; + InvalidateStatusPanel(spHiddenFilesCount); + for Memo in FMemos do begin + { Move caret to start of line to ensure it doesn't end up in the middle + of a double-byte character if the code page changes from SBCS to DBCS } + Memo.CaretLine := Memo.CaretLine; + Memo.Font.Assign(OptionsForm.FontPanel.Font); + end; + SyncEditorOptions; + UpdateNewMainFileButtons; + UpdateOccurrenceIndicators(FActiveMemo); + UpdateKeyMapping; + UpdateTheme; + + { Save new options } + Ini := TConfigIniFile.Create; + try + Ini.WriteBool('Options', 'ShowStartupForm', FOptions.ShowStartupForm); + Ini.WriteBool('Options', 'UseWizard', FOptions.UseWizard); + Ini.WriteBool('Options', 'Autosave', FOptions.Autosave); + Ini.WriteBool('Options', 'MakeBackups', FOptions.MakeBackups); + Ini.WriteBool('Options', 'FullPathInTitleBar', FOptions.FullPathInTitleBar); + Ini.WriteBool('Options', 'UndoAfterSave', FOptions.UndoAfterSave); + Ini.WriteBool('Options', 'PauseOnDebuggerExceptions', FOptions.PauseOnDebuggerExceptions); + Ini.WriteBool('Options', 'RunAsDifferentUser', FOptions.RunAsDifferentUser); + Ini.WriteBool('Options', 'AutoComplete', FOptions.AutoComplete); + Ini.WriteBool('Options', 'UseSynHigh', FOptions.UseSyntaxHighlighting); + Ini.WriteBool('Options', 'ColorizeCompilerOutput', FOptions.ColorizeCompilerOutput); + Ini.WriteBool('Options', 'UnderlineErrors', FOptions.UnderlineErrors); + Ini.WriteBool('Options', 'HighlightWordAtCursorOccurrences', FOptions.HighlightWordAtCursorOccurrences); + Ini.WriteBool('Options', 'HighlightSelTextOccurrences', FOptions.HighlightSelTextOccurrences); + Ini.WriteBool('Options', 'EditorCursorPastEOL', FOptions.CursorPastEOL); + Ini.WriteInteger('Options', 'TabWidth', FOptions.TabWidth); + Ini.WriteBool('Options', 'UseTabCharacter', FOptions.UseTabCharacter); + Ini.WriteBool('Options', 'WordWrap', FOptions.WordWrap); + Ini.WriteBool('Options', 'AutoIndent', FOptions.AutoIndent); + Ini.WriteBool('Options', 'IndentationGuides', FOptions.IndentationGuides); + Ini.WriteBool('Options', 'GutterLineNumbers', FOptions.GutterLineNumbers); + Ini.WriteBool('Options', 'ShowPreprocessorOutput', FOptions.ShowPreprocessorOutput); + Ini.WriteBool('Options', 'OpenIncludedFiles', FOptions.OpenIncludedFiles); + Ini.WriteInteger('Options', 'KeyMappingType', Ord(FOptions.KeyMappingType)); + Ini.WriteInteger('Options', 'ThemeType', Ord(FOptions.ThemeType)); { Also see Destroy } + Ini.WriteString('Options', 'EditorFontName', FMainMemo.Font.Name); + Ini.WriteInteger('Options', 'EditorFontSize', FMainMemo.Font.Size); + Ini.WriteInteger('Options', 'EditorFontCharset', FMainMemo.Font.Charset); + finally + Ini.Free; + end; + finally + OptionsForm.Free; + end; +end; + +{ Also see TabIndexToMemoIndex } +function TCompileForm.MemoToTabIndex(const AMemo: TCompScintEdit): Integer; +begin + if AMemo = FMainMemo then + Result := 0 { First tab displays the main memo } + else if AMemo = FPreprocessorOutputMemo then begin + if not FPreprocessorOutputMemo.Used then + raise Exception.Create('not FPreprocessorOutputMemo.Used'); + Result := MemosTabSet.Tabs.Count-1 { Last tab displays the preprocessor output memo } + end else begin + Result := FFileMemos.IndexOf(AMemo as TCompScintFileEdit); { Other tabs display include files which start second tab } + + { Filter memos explicitly hidden by the user } + for var MemoIndex := Result-1 downto 0 do + if FHiddenFiles.IndexOf(FFileMemos[MemoIndex].Filename) <> -1 then + Dec(Result); + end; +end; + +{ Also see MemoToTabIndex } +function TCompileForm.TabIndexToMemo(const ATabIndex, AMaxTabIndex: Integer): TCompScintEdit; +begin + if ATabIndex = 0 then + Result := FMemos[0] { First tab displays the main memo which is FMemos[0] } + else if FPreprocessorOutputMemo.Used and (ATabIndex = AMaxTabIndex) then + Result := FMemos[1] { Last tab displays the preprocessor output memo which is FMemos[1] } + else begin + { Only count memos not explicitly hidden by the user } + var TabIndex := 0; + for var MemoIndex := FirstIncludedFilesMemoIndex to FFileMemos.Count-1 do begin + if FHiddenFiles.IndexOf(FFileMemos[MemoIndex].Filename) = -1 then begin + Inc(TabIndex); + if TabIndex = ATabIndex then begin + Result := FMemos[MemoIndex + 1]; { Other tabs display include files which start at second tab but at FMemos[2] } + Exit; + end; + end; + end; + + raise Exception.Create('TabIndexToMemo failed'); + end; +end; + +procedure TCompileForm.MoveCaretAndActivateMemo(AMemo: TCompScintEdit; const LineNumberOrPosition: Integer; + const AlwaysResetColumnEvenIfOnRequestedLineAlready: Boolean; const IsPosition: Boolean; + const PositionVirtualSpace: Integer); +var + Pos: Integer; +begin + { Reopen tab if needed } + if AMemo is TCompScintFileEdit then begin + var FileName := (AMemo as TCompScintFileEdit).Filename; + var HiddenFileIndex := FHiddenFiles.IndexOf(Filename); + if HiddenFileIndex <> -1 then begin + ReopenTabOrTabs(HiddenFileIndex, False); + { The above call to ReopenTabOrTabs will currently lead to a call to UpdateIncludedFilesMemos which + sets up all the memos. Currently it will keep same memo for the reopened file but in case it no + longer does at some point: look it up again } + AMemo := nil; + for var Memo in FFileMemos do begin + if Memo.Used and (PathCompare(Memo.Filename, Filename) = 0) then begin + AMemo := Memo; + Break; + end; + end; + if AMemo = nil then + raise Exception.Create('AMemo MIA'); + end; + end; + + { Move caret } + if IsPosition then + Pos := LineNumberOrPosition + else if AlwaysResetColumnEvenIfOnRequestedLineAlready or (AMemo.CaretLine <> LineNumberOrPosition) then + Pos := AMemo.GetPositionFromLine(LineNumberOrPosition) + else + Pos := AMemo.CaretPosition; { Not actually moving caret - it's already were we want it} + + { If the line isn't in view, scroll so that it's in the center } + if not AMemo.IsPositionInViewVertically(Pos) then + AMemo.TopLine := AMemo.GetVisibleLineFromDocLine(AMemo.GetLineFromPosition(Pos)) - + (AMemo.LinesInWindow div 2); + + AMemo.CaretPosition := Pos; + if IsPosition then + AMemo.CaretVirtualSpace := PositionVirtualSpace; + + { Activate memo } + MemosTabSet.TabIndex := MemoToTabIndex(AMemo); { This causes MemosTabSetClick to show the memo } +end; + +procedure TCompileForm.SetErrorLine(const AMemo: TCompScintFileEdit; const ALine: Integer); +var + OldLine: Integer; +begin + if AMemo <> FErrorMemo then begin + SetErrorLine(FErrorMemo, -1); + FErrorMemo := AMemo; + end; + + if FErrorMemo.ErrorLine <> ALine then begin + OldLine := FErrorMemo.ErrorLine; + FErrorMemo.ErrorLine := ALine; + if OldLine >= 0 then + UpdateLineMarkers(FErrorMemo, OldLine); + if FErrorMemo.ErrorLine >= 0 then begin + FErrorMemo.ErrorCaretPosition := FErrorMemo.CaretPosition; + UpdateLineMarkers(FErrorMemo, FErrorMemo.ErrorLine); + end; + end; +end; + +procedure TCompileForm.SetStepLine(const AMemo: TCompScintFileEdit; ALine: Integer); +var + OldLine: Integer; +begin + if AMemo <> FStepMemo then begin + SetStepLine(FStepMemo, -1); + FStepMemo := AMemo; + end; + + if FStepMemo.StepLine <> ALine then begin + OldLine := FStepMemo.StepLine; + FStepMemo.StepLine := ALine; + if OldLine >= 0 then + UpdateLineMarkers(FStepMemo, OldLine); + if FStepMemo.StepLine >= 0 then + UpdateLineMarkers(FStepMemo, FStepMemo.StepLine); + end; +end; + +procedure TCompileForm.HideError; +begin + SetErrorLine(FErrorMemo, -1); + if not FCompiling then + StatusBar.Panels[spExtraStatus].Text := ''; +end; + +procedure TCompileForm.RemoveMemoFromNav(const AMemo: TCompScintEdit); +begin + if FNavStacks.RemoveMemo(AMemo) then + UpdateNavButtons; + if FCurrentNavItem.Memo = AMemo then + FCurrentNavItem.Invalidate; +end; + +procedure TCompileForm.RemoveMemoBadLinesFromNav(const AMemo: TCompScintEdit); +begin + if FNavStacks.RemoveMemoBadLines(AMemo) then + UpdateNavButtons; + { We do NOT update FCurrentNav here so it might point to a line that's + deleted until next UpdateCaretPosPanelAndBackStack by UpdateMemoUI } +end; + +procedure TCompileForm.UpdateNavButtons; +begin + ForwardNavButton.Enabled := FNavStacks.Forward.Count > 0; + BackNavButton.Enabled := (FNavStacks.Back.Count > 0) or + ForwardNavButton.Enabled; { for the dropdown } +end; + +procedure TCompileForm.BackNavButtonClick(Sender: TObject); +begin + { Delphi does not support BTNS_WHOLEDROPDOWN so we can't be like VS which + can have a disabled back nav button with an enabled dropdown. To avoid + always showing two dropdowns we keep the back button enabled when we need + the dropdown. So we need to check for this. } + if FNavStacks.Back.Count = 0 then begin + Beep; + Exit; + end; + + FNavStacks.Forward.Add(FCurrentNavItem); + var NewNavItem := FNavStacks.Back.ExtractAt(FNavStacks.Back.Count-1); + UpdateNavButtons; + FCurrentNavItem := NewNavItem; { Must be done *before* moving } + MoveCaretAndActivateMemo(NewNavItem.Memo, + NewNavItem.Memo.GetPositionFromLineColumn(NewNavItem.Line, NewNavItem.Column), False, True, NewNavItem.VirtualSpace); +end; + +procedure TCompileForm.ForwardNavButtonClick(Sender: TObject); +begin + FNavStacks.Back.Add(FCurrentNavItem); + var NewNavItem := FNavStacks.Forward.ExtractAt(FNavStacks.Forward.Count-1); + UpdateNavButtons; + FCurrentNavItem := NewNavItem; { Must be done *before* moving } + MoveCaretAndActivateMemo(NewNavItem.Memo, + NewNavItem.Memo.GetPositionFromLineColumn(NewNavItem.Line, NewNavItem.Column), False, True, NewNavItem.VirtualSpace); +end; + +procedure TCompileForm.WMAppCommand(var Message: TMessage); +begin + var Command := GET_APPCOMMAND_LPARAM(Message.LParam); + + if Command = APPCOMMAND_BROWSER_BACKWARD then begin + if BackNavButton.Enabled then + BackNavButton.Click; + Message.Result := 1; + end else if Command = APPCOMMAND_BROWSER_FORWARD then begin + if ForwardNavButton.Enabled then + ForwardNavButton.Click; + Message.Result := 1; + end; +end; + +procedure TCompileForm.NavItemClick(Sender: TObject); +begin + var MenuItem := Sender as TMenuItem; + var Clicks := Abs(MenuItem.Tag); + if Clicks > 0 then begin + var ButtonToClick: TToolButton; + if MenuItem.Tag > 0 then + ButtonToClick := ForwardNavButton + else + ButtonToClick := BackNavButton; + while Clicks > 0 do begin + if not ButtonToClick.Enabled then + raise Exception.Create('not ButtonToClick.Enabled'); + ButtonToClick.Click; + Dec(Clicks); + end; + end; +end; + +procedure TCompileForm.NavPopupMenuClick(Sender: TObject); + + procedure AddNavItemToMenu(const NavItem: TCompScintEditNavItem; const Checked: Boolean; + const ClicksNeeded: Integer; const Menu: TMenuItem); + begin + if NavItem.Line >= NavItem.Memo.Lines.Count then + raise Exception.Create('NavItem.Line >= NavItem.Memo.Lines.Count'); + var LineInfo := NavItem.Memo.Lines[NavItem.Line]; + if LineInfo.Trim = '' then + LineInfo := Format('Line %d', [NavItem.Line+1]); + + var Caption: String; + if MemosTabSet.Visible then + Caption := Format('%s: %s', [MemosTabSet.Tabs[MemoToTabIndex(NavItem.Memo)], LineInfo]) + else + Caption := LineInfo; + + var MenuItem := TMenuItem.Create(Menu); + MenuItem.Caption := DoubleAmp(Caption); + MenuItem.Checked := Checked; + MenuItem.RadioItem := True; + MenuItem.Tag := ClicksNeeded; + MenuItem.OnClick := NavItemClick; + Menu.Add(MenuItem); + end; + +begin + var Menu := Sender as TMenuItem; + + Menu.Clear; + + { Setup dropdown. The result should end up being just like Visual Studio 2022 + which means from top to bottom: + - Furthest (=oldest) forward item + - ... + - Closest (=next) forward item + - Current position in the active memo, checked + - Closest (=next) back item + - ... + - Furthest (=oldest) back item + The Tag parameter should be set to the amount of clicks needed to get to + the item, positive for forward and negative for back } + + for var I := 0 to FNavStacks.Forward.Count-1 do + AddNavItemToMenu(FNavStacks.Forward[I], False, FNavStacks.Forward.Count-I, Menu); + AddNavItemToMenu(FCurrentNavItem, True, 0, Menu); + for var I := FNavStacks.Back.Count-1 downto 0 do + AddNavItemToMenu(FNavStacks.Back[I], False, -(FNavStacks.Back.Count-I), Menu); +end; + +procedure TCompileForm.UpdateCaretPosPanelAndBackNavStack; +begin + { Update panel } + StatusBar.Panels[spCaretPos].Text := Format('%4d:%4d', [FActiveMemo.CaretLine + 1, + FActiveMemo.CaretColumnExpandedForTabs + 1]); + + { Update NavStacks.Back if needed and remember new position } + var NewNavItem := TCompScintEditNavItem.Create(FActiveMemo); { This is a record so no need to free } + if FCurrentNavItem.Valid and FNavStacks.AddNewBackForJump(FCurrentNavItem, NewNavItem) then + UpdateNavButtons; + FCurrentNavItem := NewNavItem; +end; + +procedure TCompileForm.UpdateEditModePanel; +const + InsertText: array[Boolean] of String = ('Overwrite', 'Insert'); +begin + if FActiveMemo.ReadOnly then + StatusBar.Panels[spEditMode].Text := 'Read only' + else + StatusBar.Panels[spEditMode].Text := InsertText[FActiveMemo.InsertMode]; +end; + +procedure TCompileForm.UpdateMemosTabSetVisibility; +begin + MemosTabSet.Visible := FPreprocessorOutputMemo.Used or FFileMemos[FirstIncludedFilesMemoIndex].Used; + if not MemosTabSet.Visible then + MemosTabSet.TabIndex := 0; { For next time } +end; + +procedure TCompileForm.UpdateModifiedPanel; +begin + if FActiveMemo.Modified then + StatusBar.Panels[spModified].Text := 'Modified' + else + StatusBar.Panels[spModified].Text := ''; +end; + +procedure TCompileForm.UpdatePreprocMemos; + + procedure UpdatePreprocessorOutputMemo(const NewTabs, NewHints: TStringList; + const NewCloseButtons: TBoolList); + begin + if FOptions.ShowPreprocessorOutput and (FPreprocessorOutput <> '') and + not SameStr(TrimRight(FMainMemo.Lines.Text), FPreprocessorOutput) then begin + NewTabs.Add('Preprocessor Output'); + NewHints.Add(''); + NewCloseButtons.Add(False); + FPreprocessorOutputMemo.ReadOnly := False; + try + FPreprocessorOutputMemo.Lines.Text := FPreprocessorOutput; + FPreprocessorOutputMemo.ClearUndo; + finally + FPreprocessorOutputMemo.ReadOnly := True; + end; + FPreprocessorOutputMemo.Used := True; + end else begin + if FPreprocessorOutputMemo.Used then + RemoveMemoFromNav(FPreprocessorOutputMemo); + FPreprocessorOutputMemo.Used := False; + FPreprocessorOutputMemo.Visible := False; + end; + end; + + procedure UpdateIncludedFilesMemos(const NewTabs, NewHints: TStringList; + const NewCloseButtons: TBoolList); + var + IncludedFile: TIncludedFile; + I: Integer; + begin + if FOptions.OpenIncludedFiles and (FIncludedFiles.Count > 0) then begin + var NextMemoIndex := FirstIncludedFilesMemoIndex; + var NextTabIndex := 1; { First tab displays the main memo } + for IncludedFile in FIncludedFiles do begin + IncludedFile.Memo := FFileMemos[NextMemoIndex]; + try + if not IncludedFile.Memo.Used or + ((PathCompare(IncludedFile.Memo.Filename, IncludedFile.Filename) <> 0) or + not IncludedFile.HasLastWriteTime or + (CompareFileTime(IncludedFile.Memo.FileLastWriteTime, IncludedFile.LastWriteTime) <> 0)) then begin + IncludedFile.Memo.Filename := IncludedFile.Filename; + IncludedFile.Memo.CompilerFileIndex := IncludedFile.CompilerFileIndex; + OpenFile(IncludedFile.Memo, IncludedFile.Filename, False); { Also updates FileLastWriteTime } + IncludedFile.Memo.Used := True; + end else begin + { The memo assigned to the included file already has that file loaded + and is up-to-date so no call to OpenFile is needed. However, it could be + that CompilerFileIndex is not set yet. This happens if the initial + load was from the history loaded by LoadKnownIncludedAndHiddenFiles + and is followed by the user doing a compile. } + if IncludedFile.Memo.CompilerFileIndex = UnknownCompilerFileIndex then + IncludedFile.Memo.CompilerFileIndex := IncludedFile.CompilerFileIndex; + end; + + if FHiddenFiles.IndexOf(IncludedFile.Filename) = -1 then begin + NewTabs.Insert(NextTabIndex, GetDisplayFilename(IncludedFile.Filename)); + NewHints.Insert(NextTabIndex, GetFileTitle(IncludedFile.Filename)); + NewCloseButtons.Insert(NextTabIndex, True); + Inc(NextTabIndex); + end; + + Inc(NextMemoIndex); + if NextMemoIndex = FFileMemos.Count then + Break; { We're out of memos :( } + except on E: Exception do + begin + StatusMessage(smkWarning, 'Failed to open included file: ' + E.Message); + IncludedFile.Memo := nil; + end; + end; + end; + { Hide any remaining memos } + for I := NextMemoIndex to FFileMemos.Count-1 do begin + FFileMemos[I].BreakPoints.Clear; + if FFileMemos[I].Used then + RemoveMemoFromNav(FFileMemos[I]); + FFileMemos[I].Used := False; + FFileMemos[I].Visible := False; + end; + end else begin + for I := FirstIncludedFilesMemoIndex to FFileMemos.Count-1 do begin + FFileMemos[I].BreakPoints.Clear; + if FFileMemos[I].Used then + RemoveMemoFromNav(FFileMemos[I]); + FFileMemos[I].Used := False; + FFileMemos[I].Visible := False; + end; + for IncludedFile in FIncludedFiles do + IncludedFile.Memo := nil; + end; + end; + +var + NewTabs, NewHints: TStringList; + NewCloseButtons: TBoolList; + I, SaveTabIndex: Integer; + SaveTabName: String; +begin + NewTabs := nil; + NewHints := nil; + NewCloseButtons := nil; + try + NewTabs := TStringList.Create; + NewTabs.Add(MemosTabSet.Tabs[0]); { 'Main Script' } + NewHints := TStringList.Create; + NewHints.Add(GetFileTitle(FMainMemo.Filename)); + NewCloseButtons := TBoolList.Create; + NewCloseButtons.Add(False); + + UpdatePreprocessorOutputMemo(NewTabs, NewHints, NewCloseButtons); + UpdateIncludedFilesMemos(NewTabs, NewHints, NewCloseButtons); + + { Set new tabs, try keep same file open } + SaveTabIndex := MemosTabSet.TabIndex; + SaveTabName := MemosTabSet.Tabs[MemosTabSet.TabIndex]; + MemosTabSet.Tabs := NewTabs; + MemosTabSet.Hints := NewHints; + MemosTabSet.CloseButtons := NewCloseButtons; + I := MemosTabSet.Tabs.IndexOf(SaveTabName); + if I <> -1 then + MemosTabSet.TabIndex := I; + if MemosTabSet.TabIndex = SaveTabIndex then begin + { If TabIndex stayed the same then the tabset won't perform a Click but we need this to make + sure the right memo is visible - so trigger it ourselves } + MemosTabSetClick(MemosTabSet); + end; + finally + NewCloseButtons.Free; + NewHints.Free; + NewTabs.Free; + end; + + UpdateMemosTabSetVisibility; + UpdateBevel1Visibility; +end; + +procedure TCompileForm.MemoUpdateUI(Sender: TObject); + + procedure UpdatePendingSquiggly(const AMemo: TCompScintEdit); + var + Pos: Integer; + Value: Boolean; + begin + { Check for the inPendingSquiggly indicator on either side of the caret } + Pos := AMemo.CaretPosition; + Value := False; + if AMemo.CaretVirtualSpace = 0 then begin + Value := inPendingSquiggly in AMemo.GetStyleByteIndicatorsAtPosition(Pos); + if not Value and (Pos > 0) then + Value := inPendingSquiggly in AMemo.GetStyleByteIndicatorsAtPosition(Pos-1); + end; + if FOnPendingSquiggly <> Value then begin + FOnPendingSquiggly := Value; + { If caret has left a pending squiggly, force restyle of the line } + if not Value then begin + { Stop reporting the caret position to the styler (until the next + Change event) so the token doesn't re-enter pending-squiggly state + if the caret comes back and something restyles the line } + AMemo.ReportCaretPositionToStyler := False; + AMemo.RestyleLine(AMemo.GetLineFromPosition(FPendingSquigglyCaretPos)); + end; + end; + FPendingSquigglyCaretPos := Pos; + end; + + procedure UpdateBraceHighlighting(const AMemo: TCompScintEdit); + var + Section: TInnoSetupStylerSection; + Pos, MatchPos: Integer; + C: AnsiChar; + begin + Section := FMemosStyler.GetSectionFromLineState(AMemo.Lines.State[AMemo.CaretLine]); + if (Section <> scNone) and (AMemo.CaretVirtualSpace = 0) then begin + Pos := AMemo.CaretPosition; + C := AMemo.GetCharAtPosition(Pos); + if C in ['(', '[', '{'] then begin + MatchPos := AMemo.GetPositionOfMatchingBrace(Pos); + if MatchPos >= 0 then begin + AMemo.SetBraceHighlighting(Pos, MatchPos); + Exit; + end; + end; + if Pos > 0 then begin + Pos := AMemo.GetPositionBefore(Pos); + C := AMemo.GetCharAtPosition(Pos); + if C in [')', ']', '}'] then begin + MatchPos := AMemo.GetPositionOfMatchingBrace(Pos); + if MatchPos >= 0 then begin + AMemo.SetBraceHighlighting(Pos, MatchPos); + Exit; + end; + end; + end; + end; + AMemo.SetBraceHighlighting(-1, -1); + end; + +begin + var Memo := Sender as TCompScintEdit; + + if (Memo = FErrorMemo) and ((FErrorMemo.ErrorLine < 0) or (FErrorMemo.CaretPosition <> FErrorMemo.ErrorCaretPosition)) then + HideError; + + if Memo = FActiveMemo then begin + UpdateCaretPosPanelAndBackNavStack; + UpdateEditModePanel; + end; + + UpdatePendingSquiggly(Memo); + UpdateBraceHighlighting(Memo); + UpdateOccurrenceIndicators(Memo); +end; + +procedure TCompileForm.MemoModifiedChange(Sender: TObject); +begin + if Sender = FActiveMemo then + UpdateModifiedPanel; +end; + +procedure TCompileForm.MemoChange(Sender: TObject; const Info: TScintEditChangeInfo); + + procedure MemoLinesInsertedOrDeleted(Memo: TCompScintFileEdit); + var + FirstAffectedLine, Line, LinePos: Integer; + begin + Line := Memo.GetLineFromPosition(Info.StartPos); + LinePos := Memo.GetPositionFromLine(Line); + FirstAffectedLine := Line; + { If the deletion/insertion does not start on the first character of Line, + then we consider the first deleted/inserted line to be the following + line (Line+1). This way, if you press Del at the end of line 1, the dot + on line 2 is removed, while line 1's dot stays intact. } + if Info.StartPos > LinePos then + Inc(Line); + if Info.LinesDelta > 0 then + MemoLinesInserted(Memo, Line, Info.LinesDelta) + else + MemoLinesDeleted(Memo, Line, -Info.LinesDelta, FirstAffectedLine); + end; + +var + Memo: TCompScintFileEdit; +begin + if not (Sender is TCompScintFileEdit) then + Exit; + + Memo := TCompScintFileEdit(Sender); + + if Memo.OpeningFile then + Exit; + + FModifiedAnySinceLastCompile := True; + if FDebugging then + FModifiedAnySinceLastCompileAndGo := True + else begin + { Modified while not debugging or opening a file; free the debug info and clear the dots } + DestroyDebugInfo; + end; + + if Info.LinesDelta <> 0 then + MemoLinesInsertedOrDeleted(Memo); + + if Memo = FErrorMemo then begin + { When the Delete key is pressed, the caret doesn't move, so reset + FErrorCaretPosition to ensure that OnUpdateUI calls HideError } + FErrorMemo.ErrorCaretPosition := -1; + end; + + { The change should trigger restyling. Allow the styler to see the current + caret position in case it wants to set a pending squiggly indicator. } + Memo.ReportCaretPositionToStyler := True; +end; + +procedure TCompileForm.InitiateAutoComplete(const Key: AnsiChar); + + function CheckWhiteSpace(const Memo: TCompScintEdit; const LinePos, WordStartPos: Integer): Boolean; + var + I: Integer; + C: AnsiChar; + begin + { Only allow autocompletion if no non-whitespace characters exist before the current word on the line } + I := WordStartPos; + Result := False; + while I > LinePos do begin + I := FActiveMemo.GetPositionBefore(I); + if I < LinePos then + Exit; { shouldn't get here } + C := FActiveMemo.GetCharAtPosition(I); + if C > ' ' then + Exit; + end; + Result := True; + end; + +var + CaretPos, Line, LinePos, WordStartPos, WordEndPos, CharsBefore, + PrevWordStartPos, PrevWordEndPos, I, LangNamePos: Integer; + Section: TInnoSetupStylerSection; + IsParamSection: Boolean; + WordList: AnsiString; + FoundSemicolon, FoundFlagsOrType, FoundDot: Boolean; + C: AnsiChar; + S: String; +begin + if FActiveMemo.AutoCompleteActive or FActiveMemo.ReadOnly then + Exit; + + if Key = #0 then begin + { If a character is typed then Scintilla will handle selections but + otherwise we should empty them and also make sure the caret is visible + before we start autocompletion } + FActiveMemo.SetEmptySelections; + FActiveMemo.ScrollCaretIntoView; + end; + + CaretPos := FActiveMemo.CaretPosition; + Line := FActiveMemo.GetLineFromPosition(CaretPos); + LinePos := FActiveMemo.GetPositionFromLine(Line); + + WordStartPos := FActiveMemo.GetWordStartPosition(CaretPos, True); + WordEndPos := FActiveMemo.GetWordEndPosition(CaretPos, True); + CharsBefore := CaretPos - WordStartPos; + + { Don't start autocompletion after a character is typed if there are any + word characters adjacent to the character } + if Key <> #0 then begin + if CharsBefore > 1 then + Exit; + if WordEndPos > CaretPos then + Exit; + end; + + case FActiveMemo.GetCharAtPosition(WordStartPos) of + '#': + begin + if not CheckWhiteSpace(FActiveMemo, LinePos, WordStartPos) then + Exit; + WordList := FMemosStyler.ISPPDirectivesWordList; + FActiveMemo.SetAutoCompleteFillupChars(' '); + end; + '{': + begin + WordList := FMemosStyler.ConstantsWordList; + FActiveMemo.SetAutoCompleteFillupChars('\:'); + end; + '[': + begin + if not CheckWhiteSpace(FActiveMemo, LinePos, WordStartPos) then + Exit; + WordList := FMemosStyler.SectionsWordList; + FActiveMemo.SetAutoCompleteFillupChars(''); + end; + else + begin + Section := FMemosStyler.GetSectionFromLineState(FActiveMemo.Lines.State[Line]); + if Section = scCode then begin + { Only allow autocompletion if the previous word on the line is 'function' or 'procedure', + exactly 1 space exists between it and the current word and no non-whitespace characters + exist before it on the line } + I := FActiveMemo.GetPositionBefore(WordStartPos); + if I < LinePos then + Exit; + if FActiveMemo.GetCharAtPosition(I) > ' ' then + Exit; + PrevWordEndPos := I; + PrevWordStartPos := FActiveMemo.GetWordStartPosition(PrevWordEndPos, True); + S := FActiveMemo.GetTextRange(PrevWordStartPos, PrevWordEndPos); + if SameText(S, 'procedure') then + WordList := FMemosStyler.EventFunctionsWordList[True] + else if SameText(S, 'function') then + WordList := FMemosStyler.EventFunctionsWordList[False] + else + Exit; + if not CheckWhiteSpace(FActiveMemo, LinePos, PrevWordStartPos) then + Exit; + FActiveMemo.SetAutoCompleteFillupChars(''); + end else begin + IsParamSection := FMemosStyler.IsParamSection(Section); + + { Only allow autocompletion if no non-whitespace characters exist before + the current word on the line, or after the last ';' or 'Flags:' or 'Type:' in parameterized + sections } + FoundSemicolon := False; + FoundFlagsOrType := False; + FoundDot := False; + I := WordStartPos; + while I > LinePos do begin + I := FActiveMemo.GetPositionBefore(I); + if I < LinePos then + Exit; { shouldn't get here } + C := FActiveMemo.GetCharAtPosition(I); + + if IsParamSection and (C in [';', ':']) and + FMemosStyler.IsSymbolStyle(FActiveMemo.GetStyleAtPosition(I)) then begin { Make sure it's an stSymbol ';' or ':' and not one inside a quoted string } + FoundSemicolon := C = ';'; + if not FoundSemicolon then begin + PrevWordEndPos := I; + PrevWordStartPos := FActiveMemo.GetWordStartPosition(PrevWordEndPos, True); + S := FActiveMemo.GetTextRange(PrevWordStartPos, PrevWordEndPos); + FoundFlagsOrType := SameText(S, 'Flags') or + ((Section in [scInstallDelete, scUninstallDelete]) and SameText(S, 'Type')); + end else + FoundFlagsOrType := False; + Break; + end; + if (Section = scLangOptions) and (C = '.') and not FoundDot then begin + { Verify that a word (language name) precedes the '.', then check for + any non-whitespace characters before the word } + LangNamePos := FActiveMemo.GetWordStartPosition(I, True); + if LangNamePos >= I then + Exit; + I := LangNamePos; + FoundDot := True; + end + else begin + if C > ' ' then + Exit; + end; + end; + { Space can only initiate autocompletion after ';' or 'Flags:' or 'Type:' in parameterized sections } + if (Key = ' ') and not (FoundSemicolon or FoundFlagsOrType) then + Exit; + + if FoundFlagsOrType then begin + WordList := FMemosStyler.FlagsWordList[Section]; + if WordList = '' then + Exit; + if Key <> ' ' then { Space initiating autocompletion also initiates a direct fillup if its a fillup char :( } + FActiveMemo.SetAutoCompleteFillupChars(' ') + else + FActiveMemo.SetAutoCompleteFillupChars('') + end else begin + WordList := FMemosStyler.KeywordsWordList[Section]; + if WordList = '' then { Messages & CustomMessages } + Exit; + if IsParamSection then + FActiveMemo.SetAutoCompleteFillupChars(':') + else + FActiveMemo.SetAutoCompleteFillupChars('='); + end; + end; + end; + end; + FActiveMemo.ShowAutoComplete(CharsBefore, WordList); +end; + +procedure TCompileForm.MemoCharAdded(Sender: TObject; Ch: AnsiChar); + + function LineIsBlank(const Line: Integer): Boolean; + begin + var S := FActiveMemo.Lines.RawLines[Line]; + Result := ScintRawStringIsBlank(S); + end; + +var + NewLine, PreviousLine, NewIndent, PreviousIndent: Integer; + RestartAutoComplete: Boolean; +begin + if FOptions.AutoIndent and (Ch = FActiveMemo.LineEndingString[Length(FActiveMemo.LineEndingString)]) then begin + { Add to the new line any (remaining) indentation from the previous line } + NewLine := FActiveMemo.CaretLine; + PreviousLine := NewLine-1; + if PreviousLine >= 0 then begin + NewIndent := FActiveMemo.GetLineIndentation(NewLine); + { If no indentation was moved from the previous line to the new line + (i.e., there are no spaces/tabs directly to the right of the new + caret position), and the previous line is completely empty (0 length), + then use the indentation from the last line containing non-space + characters. } + if (NewIndent = 0) and (FActiveMemo.Lines.RawLineLengths[PreviousLine] = 0) then begin + Dec(PreviousLine); + while (PreviousLine >= 0) and LineIsBlank(PreviousLine) do + Dec(PreviousLine); + end; + if PreviousLine >= 0 then begin + PreviousIndent := FActiveMemo.GetLineIndentation(PreviousLine); + { If virtual space is enabled, and tabs are not being used for + indentation (typing in virtual space doesn't create tabs), then we + don't actually have to set any indentation if the new line is + empty; we can just move the caret out into virtual space. } + if (svsUserAccessible in FActiveMemo.VirtualSpaceOptions) and + not FActiveMemo.UseTabCharacter and + (FActiveMemo.Lines.RawLineLengths[NewLine] = 0) then begin + FActiveMemo.CaretVirtualSpace := PreviousIndent; + end + else begin + FActiveMemo.SetLineIndentation(NewLine, NewIndent + PreviousIndent); + FActiveMemo.CaretPosition := FActiveMemo.GetPositionFromLineExpandedColumn(NewLine, + PreviousIndent); + end; + end; + end; + end; + + case Ch of + 'A'..'Z', 'a'..'z', '_', '#', '{', '[': + if FOptions.AutoComplete then + InitiateAutoComplete(Ch); + else + RestartAutoComplete := (Ch in [' ', '.']) and + (FOptions.AutoComplete or FActiveMemo.AutoCompleteActive); + FActiveMemo.CancelAutoComplete; + if RestartAutoComplete then + InitiateAutoComplete(Ch); + end; +end; + +procedure TCompileForm.MemoHintShow(Sender: TObject; var Info: TScintHintInfo); + + function GetCodeVariableDebugEntryFromFileLineCol(FileIndex, Line, Col: Integer): PVariableDebugEntry; + var + I: Integer; + begin + { FVariableDebugEntries uses 1-based line and column numbers } + Inc(Line); + Inc(Col); + Result := nil; + for I := 0 to FVariableDebugEntriesCount-1 do begin + if (FVariableDebugEntries[I].FileIndex = FileIndex) and + (FVariableDebugEntries[I].LineNumber = Line) and + (FVariableDebugEntries[I].Col = Col) then begin + Result := @FVariableDebugEntries[I]; + Break; + end; + end; + end; + + function GetCodeColumnFromPosition(const Pos: Integer): Integer; + var + LinePos: Integer; + S: TScintRawString; + U: String; + begin + { [Code] lines get converted from the editor's UTF-8 to UTF-16 Strings when + passed to the compiler. This can lead to column number discrepancies + between Scintilla and ROPS. This code simulates the conversion to try to + find out where ROPS thinks a Pos resides. } + LinePos := FActiveMemo.GetPositionFromLine(FActiveMemo.GetLineFromPosition(Pos)); + S := FActiveMemo.GetRawTextRange(LinePos, Pos); + U := FActiveMemo.ConvertRawStringToString(S); + Result := Length(U); + end; + + function FindConstRange(const Pos: Integer): TScintRange; + var + BraceLevel, ConstStartPos, Line, LineEndPos, I: Integer; + C: AnsiChar; + begin + Result.StartPos := 0; + Result.EndPos := 0; + BraceLevel := 0; + ConstStartPos := -1; + Line := FActiveMemo.GetLineFromPosition(Pos); + LineEndPos := FActiveMemo.GetLineEndPosition(Line); + I := FActiveMemo.GetPositionFromLine(Line); + while I < LineEndPos do begin + if (I > Pos) and (BraceLevel = 0) then + Break; + C := FActiveMemo.GetCharAtPosition(I); + if C = '{' then begin + if FActiveMemo.GetCharAtPosition(I + 1) = '{' then + Inc(I) + else begin + if BraceLevel = 0 then + ConstStartPos := I; + Inc(BraceLevel); + end; + end + else if (C = '}') and (BraceLevel > 0) then begin + Dec(BraceLevel); + if (BraceLevel = 0) and (ConstStartPos <> -1) then begin + if (Pos >= ConstStartPos) and (Pos <= I) then begin + Result.StartPos := ConstStartPos; + Result.EndPos := I + 1; + Exit; + end; + ConstStartPos := -1; + end; + end; + I := FActiveMemo.GetPositionAfter(I); + end; + end; + +var + Pos, Line, I, J: Integer; + Output: String; + DebugEntry: PVariableDebugEntry; + ConstRange: TScintRange; +begin + if FDebugClientWnd = 0 then + Exit; + Pos := FActiveMemo.GetPositionFromPoint(Info.CursorPos, True, True); + if Pos < 0 then + Exit; + Line := FActiveMemo.GetLineFromPosition(Pos); + + { Check if cursor is over a [Code] variable } + if (FActiveMemo is TCompScintFileEdit) and + (FMemosStyler.GetSectionFromLineState(FActiveMemo.Lines.State[Line]) = scCode) then begin + { Note: The '+ 1' is needed so that when the mouse is over a '.' + between two words, it won't match the word to the left of the '.' } + FActiveMemo.SetDefaultWordChars; + I := FActiveMemo.GetWordStartPosition(Pos + 1, True); + J := FActiveMemo.GetWordEndPosition(Pos, True); + if J > I then begin + DebugEntry := GetCodeVariableDebugEntryFromFileLineCol((FActiveMemo as TCompScintFileEdit).CompilerFileIndex, + Line, GetCodeColumnFromPosition(I)); + if DebugEntry <> nil then begin + case EvaluateVariableEntry(DebugEntry, Output) of + 1: Info.HintStr := Output; + 2: Info.HintStr := Output; + else + Info.HintStr := 'Unknown error'; + end; + Info.CursorRect.TopLeft := FActiveMemo.GetPointFromPosition(I); + Info.CursorRect.BottomRight := FActiveMemo.GetPointFromPosition(J); + Info.CursorRect.Bottom := Info.CursorRect.Top + FActiveMemo.LineHeight; + Info.HideTimeout := High(Integer); { infinite } + Exit; + end; + end; + end; + + { Check if cursor is over a constant } + ConstRange := FindConstRange(Pos); + if ConstRange.EndPos > ConstRange.StartPos then begin + Info.HintStr := FActiveMemo.GetTextRange(ConstRange.StartPos, ConstRange.EndPos); + case EvaluateConstant(Info.HintStr, Output) of + 1: Info.HintStr := Info.HintStr + ' = "' + Output + '"'; + 2: Info.HintStr := Info.HintStr + ' = Exception: ' + Output; + else + Info.HintStr := Info.HintStr + ' = Unknown error'; + end; + Info.CursorRect.TopLeft := FActiveMemo.GetPointFromPosition(ConstRange.StartPos); + Info.CursorRect.BottomRight := FActiveMemo.GetPointFromPosition(ConstRange.EndPos); + Info.CursorRect.Bottom := Info.CursorRect.Top + FActiveMemo.LineHeight; + Info.HideTimeout := High(Integer); { infinite } + end; +end; + +procedure TCompileForm.MainMemoDropFiles(Sender: TObject; X, Y: Integer; + AFiles: TStrings); +begin + if (AFiles.Count > 0) and ConfirmCloseFile(True) then + OpenFile(FMainMemo, AFiles[0], True); +end; + +procedure TCompileForm.MemoZoom(Sender: TObject); +begin + if not FSynchingZoom then begin + FSynchingZoom := True; + try + for var Memo in FMemos do + if Memo <> Sender then + Memo.Zoom := (Sender as TScintEdit).Zoom; + finally + FSynchingZoom := False; + end; + end; +end; + +procedure TCompileForm.StatusBarResize(Sender: TObject); +begin + { Without this, on Windows XP with themes, the status bar's size grip gets + corrupted as the form is resized } + if StatusBar.HandleAllocated then + InvalidateRect(StatusBar.Handle, nil, True); +end; + +procedure TCompileForm.WMDebuggerQueryVersion(var Message: TMessage); +begin + Message.Result := FCompilerVersion.BinVersion; +end; + +procedure TCompileForm.WMDebuggerHello(var Message: TMessage); +var + PID: DWORD; + WantCodeText: Boolean; +begin + FDebugClientWnd := HWND(Message.WParam); + + { Save debug client process handle } + if FDebugClientProcessHandle <> 0 then begin + { Shouldn't get here, but just in case, don't leak a handle } + CloseHandle(FDebugClientProcessHandle); + FDebugClientProcessHandle := 0; + end; + PID := 0; + if GetWindowThreadProcessId(FDebugClientWnd, @PID) <> 0 then + FDebugClientProcessHandle := OpenProcess(SYNCHRONIZE or PROCESS_TERMINATE, + False, PID); + + WantCodeText := Bool(Message.LParam); + if WantCodeText then + SendCopyDataMessageStr(FDebugClientWnd, Handle, CD_DebugClient_CompiledCodeTextA, FCompiledCodeText); + SendCopyDataMessageStr(FDebugClientWnd, Handle, CD_DebugClient_CompiledCodeDebugInfoA, FCompiledCodeDebugInfo); + + UpdateRunMenu; +end; + +procedure TCompileForm.WMDebuggerGoodbye(var Message: TMessage); +begin + ReplyMessage(0); + DebuggingStopped(True); +end; + +procedure TCompileForm.GetMemoAndDebugEntryFromMessage(Kind, Index: Integer; var Memo: TCompScintFileEdit; var DebugEntry: PDebugEntry); + + function GetMemoFromDebugEntryFileIndex(const FileIndex: Integer): TCompScintFileEdit; + var + Memo: TCompScintFileEdit; + begin + Result := nil; + if FOptions.OpenIncludedFiles then begin + for Memo in FFileMemos do begin + if Memo.Used and (Memo.CompilerFileIndex = FileIndex) then begin + Result := Memo; + Exit; + end; + end; + end else if FMainMemo.CompilerFileIndex = FileIndex then + Result := FMainMemo; + end; + +var + I: Integer; +begin + for I := 0 to FDebugEntriesCount-1 do begin + if (FDebugEntries[I].Kind = Kind) and (FDebugEntries[I].Index = Index) then begin + Memo := GetMemoFromDebugEntryFileIndex(FDebugEntries[I].FileIndex); + DebugEntry := @FDebugEntries[I]; + Exit; + end; + end; + Memo := nil; + DebugEntry := nil; +end; + +procedure TCompileForm.BringToForeground; +{ Brings our top window to the foreground. Called when pausing while + debugging. } +var + TopWindow: HWND; +begin + TopWindow := GetThreadTopWindow; + if TopWindow <> 0 then begin + { First ask the debug client to call SetForegroundWindow() on our window. + If we don't do this then Windows (98/2000+) will prevent our window from + becoming activated if the debug client is currently in the foreground. } + SendMessage(FDebugClientWnd, WM_DebugClient_SetForegroundWindow, + WPARAM(TopWindow), 0); + { Now call SetForegroundWindow() ourself. Why? When a remote thread calls + SetForegroundWindow(), the request is queued; the window doesn't actually + become active until the next time the window's thread checks the message + queue. This call causes the window to become active immediately. } + SetForegroundWindow(TopWindow); + end; +end; + +procedure TCompileForm.DebuggerStepped(var Message: TMessage; const Intermediate: Boolean); +var + Memo: TCompScintFileEdit; + DebugEntry: PDebugEntry; + LineNumber: Integer; +begin + GetMemoAndDebugEntryFromMessage(Message.WParam, Message.LParam, Memo, DebugEntry); + if (Memo = nil) or (DebugEntry = nil) then + Exit; + + LineNumber := DebugEntry.LineNumber; + + if LineNumber < 0 then { UninstExe has a DebugEntry but not a line number } + Exit; + + if (LineNumber < Memo.LineStateCount) and + (Memo.LineState[LineNumber] <> lnEntryProcessed) then begin + Memo.LineState[LineNumber] := lnEntryProcessed; + UpdateLineMarkers(Memo, LineNumber); + end; + + if (FStepMode = smStepOut) and DebugEntry.StepOutMarker then + FStepMode := smStepInto { Pause on next line } + else if (FStepMode = smStepInto) or + ((FStepMode = smStepOver) and not Intermediate) or + ((FStepMode = smRunToCursor) and + (FRunToCursorPoint.Kind = Integer(Message.WParam)) and + (FRunToCursorPoint.Index = Message.LParam)) or + (Memo.BreakPoints.IndexOf(LineNumber) <> -1) then begin + MoveCaretAndActivateMemo(Memo, LineNumber, True); + HideError; + SetStepLine(Memo, LineNumber); + BringToForeground; + { Tell Setup to pause } + Message.Result := 1; + FPaused := True; + FPausedAtCodeLine := DebugEntry.Kind = Ord(deCodeLine); + UpdateRunMenu; + UpdateCaption; + end; +end; + +procedure TCompileForm.WMDebuggerStepped(var Message: TMessage); +begin + DebuggerStepped(Message, False); +end; + +procedure TCompileForm.WMDebuggerSteppedIntermediate(var Message: TMessage); +begin + DebuggerStepped(Message, True); +end; + +procedure TCompileForm.WMDebuggerException(var Message: TMessage); +var + Memo: TCompScintFileEdit; + DebugEntry: PDebugEntry; + LineNumber: Integer; + S: String; +begin + if FOptions.PauseOnDebuggerExceptions then begin + GetMemoAndDebugEntryFromMessage(Message.WParam, Message.LParam, Memo, DebugEntry); + + if DebugEntry <> nil then + LineNumber := DebugEntry.LineNumber + else + LineNumber := -1; + + if (Memo <> nil) and (LineNumber >= 0) then begin + MoveCaretAndActivateMemo(Memo, LineNumber, True); + SetStepLine(Memo, -1); + SetErrorLine(Memo, LineNumber); + end; + + BringToForeground; + { Tell Setup to pause } + Message.Result := 1; + FPaused := True; + FPausedAtCodeLine := (DebugEntry <> nil) and (DebugEntry.Kind = Ord(deCodeLine)); + UpdateRunMenu; + UpdateCaption; + + ReplyMessage(Message.Result); { so that Setup enters a paused state now } + if LineNumber >= 0 then begin + S := Format('Line %d:' + SNewLine + '%s.', [LineNumber + 1, FDebuggerException]); + if (Memo <> nil) and (Memo.Filename <> '') then + S := Memo.Filename + SNewLine2 + S; + MsgBox(S, 'Runtime Error', mbCriticalError, mb_Ok) + end else + MsgBox(FDebuggerException + '.', 'Runtime Error', mbCriticalError, mb_Ok); + end; +end; + +procedure TCompileForm.WMDebuggerSetForegroundWindow(var Message: TMessage); +begin + SetForegroundWindow(HWND(Message.WParam)); +end; + +procedure TCompileForm.WMDebuggerCallStackCount(var Message: TMessage); +begin + FCallStackCount := Message.WParam; +end; + +procedure TCompileForm.WMCopyData(var Message: TWMCopyData); +var + S: String; +begin + case Message.CopyDataStruct.dwData of + CD_Debugger_ReplyW: begin + FReplyString := ''; + SetString(FReplyString, PChar(Message.CopyDataStruct.lpData), + Message.CopyDataStruct.cbData div SizeOf(Char)); + Message.Result := 1; + end; + CD_Debugger_ExceptionW: begin + SetString(FDebuggerException, PChar(Message.CopyDataStruct.lpData), + Message.CopyDataStruct.cbData div SizeOf(Char)); + Message.Result := 1; + end; + CD_Debugger_UninstExeW: begin + SetString(FUninstExe, PChar(Message.CopyDataStruct.lpData), + Message.CopyDataStruct.cbData div sizeOf(Char)); + Message.Result := 1; + end; + CD_Debugger_LogMessageW: begin + SetString(S, PChar(Message.CopyDataStruct.lpData), + Message.CopyDataStruct.cbData div SizeOf(Char)); + DebugLogMessage(S); + Message.Result := 1; + end; + CD_Debugger_TempDirW: begin + { Paranoia: Store it in a local variable first. That way, if there's + a problem reading the string FTempDir will be left unmodified. + Gotta be extra careful when storing a path we'll be deleting. } + SetString(S, PChar(Message.CopyDataStruct.lpData), + Message.CopyDataStruct.cbData div SizeOf(Char)); + { Extreme paranoia: If there are any embedded nulls, discard it. } + if Pos(#0, S) <> 0 then + S := ''; + FTempDir := S; + Message.Result := 1; + end; + CD_Debugger_CallStackW: begin + SetString(S, PChar(Message.CopyDataStruct.lpData), + Message.CopyDataStruct.cbData div SizeOf(Char)); + DebugShowCallStack(S, FCallStackCount); + end; + end; +end; + +function TCompileForm.DestroyLineState(const AMemo: TCompScintFileEdit): Boolean; +begin + if Assigned(AMemo.LineState) then begin + AMemo.LineStateCapacity := 0; + AMemo.LineStateCount := 0; + FreeMem(AMemo.LineState); + AMemo.LineState := nil; + Result := True; + end else + Result := False; +end; + +procedure TCompileForm.DestroyDebugInfo; +var + HadDebugInfo: Boolean; + Memo: TCompScintFileEdit; +begin + HadDebugInfo := False; + for Memo in FFileMemos do + if DestroyLineState(Memo) then + HadDebugInfo := True; + + FDebugEntriesCount := 0; + FreeMem(FDebugEntries); + FDebugEntries := nil; + + FVariableDebugEntriesCount := 0; + FreeMem(FVariableDebugEntries); + FVariableDebugEntries := nil; + + FCompiledCodeText := ''; + FCompiledCodeDebugInfo := ''; + + { Clear all dots and reset breakpoint icons (unless exiting; no point) } + if HadDebugInfo and not(csDestroying in ComponentState) then + UpdateAllMemosLineMarkers; +end; + +var + PrevCompilerFileIndex: Integer; + PrevMemo: TCompScintFileEdit; + +procedure TCompileForm.ParseDebugInfo(DebugInfo: Pointer); + + function GetMemoFromCompilerFileIndex(const CompilerFileIndex: Integer): TCompScintFileEdit; + var + Memo: TCompScintFileEdit; + begin + if (PrevCompilerFileIndex <> CompilerFileIndex) then begin + PrevMemo := nil; + for Memo in FFileMemos do begin + if Memo.Used and (Memo.CompilerFileIndex = CompilerFileIndex) then begin + PrevMemo := Memo; + Break; + end; + end; + PrevCompilerFileIndex := CompilerFileIndex; + end; + Result := PrevMemo; + end; + +{ This creates and fills the DebugEntries and Memo LineState arrays } +var + Header: PDebugInfoHeader; + Memo: TCompScintFileEdit; + Size: Cardinal; + I: Integer; +begin + DestroyDebugInfo; + + Header := DebugInfo; + if (Header.ID <> DebugInfoHeaderID) or + (Header.Version <> DebugInfoHeaderVersion) then + raise Exception.Create('Unrecognized debug info format'); + + try + for Memo in FFileMemos do begin + if Memo.Used then begin + I := Memo.Lines.Count; + Memo.LineState := AllocMem(SizeOf(TLineState) * (I + LineStateGrowAmount)); + Memo.LineStateCapacity := I + LineStateGrowAmount; + Memo.LineStateCount := I; + end; + end; + + Inc(Cardinal(DebugInfo), SizeOf(Header^)); + + FDebugEntriesCount := Header.DebugEntryCount; + Size := FDebugEntriesCount * SizeOf(TDebugEntry); + GetMem(FDebugEntries, Size); + Move(DebugInfo^, FDebugEntries^, Size); + for I := 0 to FDebugEntriesCount-1 do + Dec(FDebugEntries[I].LineNumber); + Inc(Cardinal(DebugInfo), Size); + + FVariableDebugEntriesCount := Header.VariableDebugEntryCount; + Size := FVariableDebugEntriesCount * SizeOf(TVariableDebugEntry); + GetMem(FVariableDebugEntries, Size); + Move(DebugInfo^, FVariableDebugEntries^, Size); + Inc(Cardinal(DebugInfo), Size); + + SetString(FCompiledCodeText, PAnsiChar(DebugInfo), Header.CompiledCodeTextLength); + Inc(Cardinal(DebugInfo), Header.CompiledCodeTextLength); + + SetString(FCompiledCodeDebugInfo, PAnsiChar(DebugInfo), Header.CompiledCodeDebugInfoLength); + + PrevCompilerFileIndex := UnknownCompilerFileIndex; + + for I := 0 to FDebugEntriesCount-1 do begin + if FDebugEntries[I].LineNumber >= 0 then begin + Memo := GetMemoFromCompilerFileIndex(FDebugEntries[I].FileIndex); + if (Memo <> nil) and (FDebugEntries[I].LineNumber < Memo.LineStateCount) then begin + if Memo.LineState[FDebugEntries[I].LineNumber] = lnUnknown then + Memo.LineState[FDebugEntries[I].LineNumber] := lnHasEntry; + end; + end; + end; + UpdateAllMemosLineMarkers; + except + DestroyDebugInfo; + raise; + end; +end; + +procedure TCompileForm.ResetAllMemosLineState; +{ Changes green dots back to grey dots } +var + Memo: TCompScintFileEdit; + I: Integer; +begin + for Memo in FFileMemos do begin + if Memo.Used and Assigned(Memo.LineState) then begin + for I := 0 to Memo.LineStateCount-1 do begin + if Memo.LineState[I] = lnEntryProcessed then begin + Memo.LineState[I] := lnHasEntry; + UpdateLineMarkers(Memo, I); + end; + end; + end; + end; +end; + +procedure TCompileForm.CheckIfTerminated; +var + H: THandle; +begin + if FDebugging then begin + { Check if the process hosting the debug client (e.g. Setup or the + uninstaller second phase) has terminated. If the debug client hasn't + connected yet, check the initial process (e.g. SetupLdr or the + uninstaller first phase) instead. } + if FDebugClientWnd <> 0 then + H := FDebugClientProcessHandle + else + H := FProcessHandle; + if WaitForSingleObject(H, 0) <> WAIT_TIMEOUT then + DebuggingStopped(True); + end; +end; + +procedure TCompileForm.DebuggingStopped(const WaitForTermination: Boolean); + + function GetExitCodeText: String; + var + ExitCode: DWORD; + begin + { Note: When debugging an uninstall, this will get the exit code off of + the first phase process, since that's the exit code users will see when + running the uninstaller outside the debugger. } + case WaitForSingleObject(FProcessHandle, 0) of + WAIT_OBJECT_0: + begin + if GetExitCodeProcess(FProcessHandle, ExitCode) then begin + { If the high bit is set, the process was killed uncleanly (e.g. + by a debugger). Show the exit code as hex in that case. } + if ExitCode and $80000000 <> 0 then + Result := Format(DebugTargetStrings[FDebugTarget] + ' exit code: 0x%.8x', [ExitCode]) + else + Result := Format(DebugTargetStrings[FDebugTarget] + ' exit code: %u', [ExitCode]); + end + else + Result := 'Unable to get ' + DebugTargetStrings[FDebugTarget] + ' exit code (GetExitCodeProcess failed)'; + end; + WAIT_TIMEOUT: + Result := DebugTargetStrings[FDebugTarget] + ' is still running; can''t get exit code'; + else + Result := 'Unable to get ' + DebugTargetStrings[FDebugTarget] + ' exit code (WaitForSingleObject failed)'; + end; + end; + +var + ExitCodeText: String; +begin + if WaitForTermination then begin + { Give the initial process time to fully terminate so we can successfully + get its exit code } + WaitForSingleObject(FProcessHandle, 5000); + end; + FDebugging := False; + FDebugClientWnd := 0; + ExitCodeText := GetExitCodeText; + if FDebugClientProcessHandle <> 0 then begin + CloseHandle(FDebugClientProcessHandle); + FDebugClientProcessHandle := 0; + end; + CloseHandle(FProcessHandle); + FProcessHandle := 0; + FTempDir := ''; + CheckIfRunningTimer.Enabled := False; + HideError; + SetStepLine(FStepMemo, -1); + UpdateRunMenu; + UpdateCaption; + DebugLogMessage('*** ' + ExitCodeText); + StatusBar.Panels[spExtraStatus].Text := ' ' + ExitCodeText; +end; + +procedure TCompileForm.DetachDebugger; +begin + CheckIfTerminated; + if not FDebugging then Exit; + SendNotifyMessage(FDebugClientWnd, WM_DebugClient_Detach, 0, 0); + DebuggingStopped(False); +end; + +function TCompileForm.AskToDetachDebugger: Boolean; +begin + if FDebugClientWnd = 0 then begin + MsgBox('Please stop the running ' + DebugTargetStrings[FDebugTarget] + ' process before performing this command.', + SCompilerFormCaption, mbError, MB_OK); + Result := False; + end else if MsgBox('This command will detach the debugger from the running ' + DebugTargetStrings[FDebugTarget] + ' process. Continue?', + SCompilerFormCaption, mbError, MB_OKCANCEL) = IDOK then begin + DetachDebugger; + Result := True; + end else + Result := False; +end; + +procedure TCompileForm.RMenuClick(Sender: TObject); + + function AnyMemoHasBreakPoint: Boolean; + begin + { Also see RDeleteBreakPointsClick } + for var Memo in FFileMemos do + if Memo.Used and (Memo.BreakPoints.Count > 0) then + Exit(True); + Result := False; + end; + +begin + RDeleteBreakPoints.Enabled := AnyMemoHasBreakPoint; + { See UpdateRunMenu for other menu items } + + ApplyMenuBitmaps(RMenu); +end; + +procedure TCompileForm.UpdateRunMenu; +begin + CheckIfTerminated; + BCompile.Enabled := not FCompiling and not FDebugging; + CompileButton.Enabled := BCompile.Enabled; + BStopCompile.Enabled := FCompiling; + StopCompileButton.Enabled := BStopCompile.Enabled; + RRun.Enabled := not FCompiling and (not FDebugging or FPaused); + RunButton.Enabled := RRun.Enabled; + RPause.Enabled := FDebugging and not FPaused; + PauseButton.Enabled := RPause.Enabled; + RRunToCursor.Enabled := RRun.Enabled and (FActiveMemo is TCompScintFileEdit); + RStepInto.Enabled := RRun.Enabled; + RStepOver.Enabled := RRun.Enabled; + RStepOut.Enabled := FPaused; + RToggleBreakPoint.Enabled := FActiveMemo is TCompScintFileEdit; + RTerminate.Enabled := FDebugging and (FDebugClientWnd <> 0); + TerminateButton.Enabled := RTerminate.Enabled; + REvaluate.Enabled := FDebugging and (FDebugClientWnd <> 0); + { See RMenuClick for other menu items } +end; + +procedure TCompileForm.UpdateSaveMenuItemAndButton; +begin + FSave.Enabled := FActiveMemo is TCompScintFileEdit; + SaveButton.Enabled := FSave.Enabled; +end; + +procedure TCompileForm.UpdateTargetMenu; +begin + if FDebugTarget = dtSetup then begin + RTargetSetup.Checked := True; + TargetSetupButton.Down := True; + end else begin + RTargetUninstall.Checked := True; + TargetUninstallButton.Down := True; + end; +end; + +procedure TCompileForm.UpdateKeyMapping; + +type + TKeyMappedMenu = TPair>; + + function KMM(const MenuItem: TMenuItem; const DelphiKey: Word; const DelphiShift: TShiftState; + const VisualStudioKey: Word; const VisualStudioShift: TShiftState; + const ToolButton: TToolButton = nil): TKeyMappedMenu; + begin + var AShortCut: TShortCut; + case FOptions.KeyMappingType of + kmtDelphi: AShortCut := ShortCut(DelphiKey, DelphiShift); + kmtVisualStudio: AShortCut := ShortCut(VisualStudioKey, VisualStudioShift); + else + raise Exception.Create('Unknown FOptions.KeyMappingType'); + end; + + Result := TKeyMappedMenu.Create(MenuItem, TPair.Create(AShortcut, ToolButton)); { These are records so no need to free } + end; + +begin + var KeyMappedMenus := [ + KMM(BCompile, VK_F9, [ssCtrl], Ord('B'), [ssCtrl], CompileButton), + KMM(RRun, VK_F9, [], VK_F5, [], RunButton), + KMM(RRunToCursor, VK_F4, [], VK_F10, [ssCtrl]), + KMM(RStepInto, VK_F7, [], VK_F11, []), + KMM(RStepOver, VK_F8, [], VK_F10, []), + KMM(RStepOut, VK_F8, [ssShift], VK_F11, [ssShift]), + KMM(RToggleBreakPoint, VK_F5, [], VK_F9, []), + KMM(RDeleteBreakPoints, VK_F5, [ssShift, ssCtrl], VK_F9, [ssShift, ssCtrl]), + KMM(RTerminate, VK_F2, [ssCtrl], VK_F5, [ssShift], TerminateButton), + KMM(REvaluate, VK_F7, [ssCtrl], VK_F9, [ssShift])]; + + for var KeyMappedMenu in KeyMappedMenus do begin + var ShortCut := KeyMappedMenu.Value.Key; + var ToolButton := KeyMappedMenu.Value.Value; + KeyMappedMenu.Key.ShortCut := ShortCut; + if ToolButton <> nil then begin + var MenuItem := KeyMappedMenu.Key; + ToolButton.Hint := Format('%s (%s)', [RemoveAccelChar(MenuItem.Caption), ShortCutToText(ShortCut)]); + end; + end; + + { The Nav buttons have no corresponding menu item and also no ShortCut property + so they need special handling } + + case FOptions.KeyMappingType of + kmtDelphi: + begin + FBackNavButtonShortCut := ShortCut(VK_LEFT, [ssAlt]); + FForwardNavButtonShortCut := ShortCut(VK_RIGHT, [ssAlt]); + end; + kmtVisualStudio: + begin + FBackNavButtonShortCut := ShortCut(VK_OEM_MINUS, [ssCtrl]); + FForwardNavButtonShortCut := ShortCut(VK_OEM_MINUS, [ssCtrl, ssShift]); + end; + else + raise Exception.Create('Unknown FOptions.KeyMappingType'); + end; + + BackNavButton.Hint := Format('Back (%s)', [ShortCutToText(FBackNavButtonShortCut)]); + ForwardNavButton.Hint := Format('Forward (%s)', [ShortCutToText(FForwardNavButtonShortCut)]); +end; + +procedure TCompileForm.UpdateTheme; +begin + FTheme.Typ := FOptions.ThemeType; + + for var Memo in FMemos do begin + Memo.UpdateThemeColorsAndStyleAttributes; + SetControlWindowTheme(Memo, FTheme.Dark); + end; + + InitFormTheme(Self); + ToolbarPanel.Color := FTheme.Colors[tcToolBack]; + ToolBarPanel.ParentBackground := False; + + if FTheme.Dark then begin + ThemedToolbarVirtualImageList.ImageCollection := DarkToolBarImageCollection; + ThemedMarkersVirtualImageList.ImageCollection := DarkMarkersImageCollection; + end else begin + ThemedToolbarVirtualImageList.ImageCollection := LightToolBarImageCollection; + ThemedMarkersVirtualImageList.ImageCollection := LightMarkersImageCollection; + end; + + UpdateBevel1Visibility; + UpdateMemoMarkerColumns; + + SplitPanel.ParentBackground := False; + SplitPanel.Color := FTheme.Colors[tcSplitterBack]; + + if FTheme.Dark then begin + MemosTabSet.Theme := FTheme; + OutputTabSet.Theme := FTheme; + end else begin + MemosTabSet.Theme := nil; + OutputTabSet.Theme := nil; + end; + + FMenuDarkBackgroundBrush.Color := FTheme.Colors[tcToolBack]; + FMenuDarkHotOrSelectedBrush.Color := $2C2C2C; { Same as themed menu drawn by Windows 11, which is close to Colors[tcBack] } + + DrawMenuBar(Handle); + + { SetPreferredAppMode doesn't work without FlushMenuThemes here: it would have + to be called before the form is created to have an effect without + FlushMenuThemes. So don't call SetPreferredAppMode if FlushMenuThemes is + missing. } + if Assigned(SetPreferredAppMode) and Assigned(FlushMenuThemes) then begin + FMenuImageList := ThemedToolbarVirtualImageList; + if FTheme.Dark then + SetPreferredAppMode(PAM_FORCEDARK) + else + SetPreferredAppMode(PAM_FORCELIGHT); + FlushMenuThemes; + end else + FMenuImageList := LightToolbarVirtualImageList; +end; + +procedure TCompileForm.UpdateThemeData(const Open: Boolean); + + procedure CloseThemeDataIfNeeded(var ThemeData: HTHEME); + begin + if ThemeData <> 0 then begin + CloseThemeData(ThemeData); + ThemeData := 0; + end; + end; + +begin + CloseThemeDataIfNeeded(FProgressThemeData); + CloseThemeDataIfNeeded(FMenuThemeData); + CloseThemeDataIfNeeded(FToolbarThemeData); + + if Open and UseThemes then begin + FProgressThemeData := OpenThemeData(Handle, 'Progress'); + if (GetThemeInt(FProgressThemeData, 0, 0, TMT_PROGRESSCHUNKSIZE, FProgressChunkSize) <> S_OK) or + (FProgressChunkSize <= 0) then + FProgressChunkSize := 6; + if (GetThemeInt(FProgressThemeData, 0, 0, TMT_PROGRESSSPACESIZE, FProgressSpaceSize) <> S_OK) or + (FProgressSpaceSize < 0) then { ...since "OpusOS" theme returns a bogus -1 value } + FProgressSpaceSize := 2; + FMenuThemeData := OpenThemeData(Handle, 'Menu'); + FToolbarThemeData := OpenThemeData(Handle, 'Toolbar'); + end; +end; + +procedure TCompileForm.UpdateMenuBitmapsIfNeeded; + + procedure AddMenuBitmap(const MenuBitmaps: TMenuBitmaps; const DC: HDC; const BitmapInfo: TBitmapInfo; + const MenuItem: TMenuItem; const ImageList: TVirtualImageList; const ImageIndex: Integer); overload; + begin + var pvBits: Pointer; + var Bitmap := CreateDIBSection(DC, bitmapInfo, DIB_RGB_COLORS, pvBits, 0, 0); + var OldBitmap := SelectObject(DC, Bitmap); + if ImageList_Draw(ImageList.Handle, ImageIndex, DC, 0, 0, ILD_TRANSPARENT) then + MenuBitmaps.Add(MenuItem, Bitmap) + else begin + SelectObject(DC, OldBitmap); + DeleteObject(Bitmap); + end; + end; + + procedure AddMenuBitmap(const MenuBitmaps: TMenuBitmaps; const DC: HDC; const BitmapInfo: TBitmapInfo; + const MenuItem: TMenuItem; const ImageList: TVirtualImageList; const ImageName: String); overload; + begin + AddMenuBitmap(MenuBitmaps, DC, BitmapInfo, MenuItem, ImageList, ImageList.GetIndexByName(ImageName)); + end; + +type + TButtonedMenu = TPair; + TNamedMenu = TPair; + + function BM(const MenuItem: TMenuItem; const ToolButton: TToolButton): TButtonedMenu; + begin + Result := TButtonedMenu.Create(MenuItem, ToolButton); { This is a record so no need to free } + end; + + function NM(const MenuItem: TMenuItem; const Name: String): TNamedMenu; + begin + Result := TNamedMenu.Create(MenuItem, Name); { This is a record so no need to free } + end; + +begin + { This will create bitmaps for the current DPI using ImageList_Draw. + + These draw perfectly even on Windows 7. Other techniques don't work because + they loose transparency or only look good on Windows 8 and later. Or they do + work but cause lots more VCL code to be run than just our simple CreateDIB+Draw + combo. + + ApplyBitmaps will apply them to menu items using SetMenuItemInfo. The menu item + does not copy the bitmap so they should still be alive after ApplyBitmaps is done. + + Depends on FMenuImageList to pick the best size icons for the current DPI + from the collection. } + + var ImageList := FMenuImageList; + + var NewSize: TSize; + NewSize.cx := ImageList.Width; + NewSize.cy := ImageList.Height; + if (NewSize.cx <> FMenuBitmapsSize.cx) or (NewSize.cy <> FMenuBitmapsSize.cy) or + (ImageList.ImageCollection <> FMenuBitmapsSourceImageCollection) then begin + + { Cleanup previous } + + for var Bitmap in FMenuBitmaps.Values do + DeleteObject(Bitmap); + FMenuBitmaps.Clear; + + { Create } + + var DC := CreateCompatibleDC(0); + if DC <> 0 then begin + try + var BitmapInfo := CreateBitmapInfo(NewSize.cx, NewSize.cy, 32); + + var ButtonedMenus := [ + BM(FNewMainFile, NewMainFileButton), + BM(FOpenMainFile, OpenMainFileButton), + BM(FSave, SaveButton), + BM(BCompile, CompileButton), + BM(BStopCompile, StopCompileButton), + BM(RRun, RunButton), + BM(RPause, PauseButton), + BM(RTerminate, TerminateButton), + BM(HDoc, HelpButton)]; + + for var ButtonedMenu in ButtonedMenus do + AddMenuBitmap(FMenuBitmaps, DC, BitmapInfo, ButtonedMenu.Key, ImageList, ButtonedMenu.Value.ImageIndex); + + var NamedMenus := [ + NM(FSaveMainFileAs, 'save-as-filled'), + NM(FSaveAll, 'save-all-filled'), + NM(FPrint, 'printer'), + NM(EUndo, 'command-undo-1'), + NM(ERedo, 'command-redo-1'), + NM(ECut, 'clipboard-cut'), + NM(ECopy, 'clipboard-copy'), + NM(POutputListCopy, 'clipboard-copy'), + NM(EPaste, 'clipboard-paste'), + NM(EDelete, 'symbol-cancel'), + NM(ESelectAll, 'select-all'), + NM(POutputListSelectAll, 'select-all'), + NM(EFind, 'find'), + NM(EFindInFiles, 'folder-open-filled-find'), + //NM(EFindNext, 'unused\find-arrow-right-2'), + //NM(EFindPrevious, 'unused\find-arrow-left-2'), + NM(EReplace, 'replace'), + NM(ECompleteWord, 'letter-a-arrow-right-2'), + NM(VZoomIn, 'zoom-in'), + NM(VZoomOut, 'zoom-out'), + NM(VNextTab, 'control-tab-filled-arrow-right-2'), + NM(VPreviousTab, 'control-tab-filled-arrow-left-2'), + //NM(VCloseCurrentTab, 'unused\control-tab-filled-cancel-2'), + NM(VReopenTabs, 'control-tab-filled-redo-1'), + NM(VReopenTabs2, 'control-tab-filled-redo-1'), + NM(BOpenOutputFolder, 'folder-open-filled'), + NM(RParameters, 'control-edit'), + NM(RRunToCursor, 'debug-start-filled-arrow-right-2'), + NM(RStepInto, 'debug-step-into'), + NM(RStepOver, 'debug-step-over'), + NM(RStepOut, 'debug-step-out'), + NM(RToggleBreakPoint, 'debug-breakpoint-filled'), + NM(RDeleteBreakPoints, 'debug-breakpoints-filled-eraser'), + NM(REvaluate, 'variables'), + NM(TAddRemovePrograms, 'application'), + NM(TGenerateGUID, 'tag-script-filled'), + NM(TFilesDesigner, 'documents-script-filled'), + NM(TRegistryDesigner, 'control-tree-script-filled'), + NM(TMsgBoxDesigner, 'comment-text-script-filled'), + NM(TSignTools, 'key-filled'), + NM(TOptions, 'gear-filled'), + NM(HDonate, 'heart-filled'), + NM(HMailingList, 'alert-filled'), + NM(HWhatsNew, 'announcement'), + NM(HWebsite, 'home'), + NM(HAbout, 'button-info')]; + + for var NamedMenu in NamedMenus do + AddMenuBitmap(FMenuBitmaps, DC, BitmapInfo, NamedMenu.Key, ImageList, NamedMenu.Value); + finally + DeleteDC(DC); + end; + end; + + FMenuBitmapsSize := NewSize; + FMenuBitmapsSourceImageCollection := FMenuImageList.ImageCollection; + end; +end; + +procedure TCompileForm.ApplyMenuBitmaps(const ParentMenuItem: TMenuItem); +begin + UpdateMenuBitmapsIfNeeded; + + { Setting MainMenu1.ImageList or a menu item's .Bitmap to make a menu item + show a bitmap is not OK: it causes the entire menu to become owner drawn + which makes it looks different from native menus and additionally the trick + SetFakeShortCut uses doesn't work with owner drawn menus. + + Instead UpdateMenuBitmapsIfNeeded has prepared images which can be applied + to native menu items using SetMenuItemInfo and MIIM_BITMAP - which is what we + do below. + + A problem with this is that Delphi's TMenu likes to constantly recreate the + underlying native menu items, for example when updating the caption. Sometimes + it will even destroy and repopulate an entire menu because of a simple change + like setting the caption of a single item! + + This means the result of our SetMenuItemInfo call (which Delphi doesn't know + about) will quickly become lost when Delphi recreates the menu item. + + Fixing this in the OnChange event is not possible, this is event is more + than useless. + + The solution is shown by TMenu.DispatchPopup: in reaction to WM_INITMENUPOPUP + it calls our Click events right before the menu is shown, giving us the + opportunity to call SetMenuItemInfo for the menu's items. + + This works unless Delphi decides to destroy and repopulate the menu after + calling Click. Most amazingly it can do that indeed: it does this if the DPI + changed since the last popup or if a automatic hotkey change or line reduction + happens due to the menu's AutoHotkeys or AutoLineReduction properties. To make + things even worse: for the Run menu it does this each and every time it is + opened: this menu currently has a 'Step Out' item which has no shortcut but + also all its letters are taken by another item already. This confuses the + AutoHotkeys code, making it destroy and repopulate the entire menu over and + over because it erroneously thinks a hotkey changed. + + To avoid this MainMenu1.AutoHotkeys was set to maManual since we have always + managed the hotkeys ourselves anyway and .AutoLineReduction was also set to + maManual and we now manage that ourselves as well. + + This just leave an issue with the icons not appearing on the first popup after + a DPI change and this seems like a minor issue only. + + For TPopupMenu: calling ApplyMenuBitmaps(PopupMenu.Items) does work but makes + the popup only show icons without text. This seems to be a limitiation of menus + created by CreatePopupMenu instead of CreateMenu. This is why our popups with + icons are all menu items popped using TCompileFormPopupMenu. These menu items + are hidden in the main menu and temporarily shown on popup. Popping an always + hidden menu item (or a visible one as a child of a hidden parent) doesnt work. } + + var mmi: TMenuItemInfo; + mmi.cbSize := SizeOf(mmi); + mmi.fMask := MIIM_BITMAP; + + for var I := 0 to ParentMenuItem.Count-1 do begin + var MenuItem := ParentMenuItem.Items[I]; + if MenuItem.Visible then begin + if FMenuBitmaps.TryGetValue(MenuItem, mmi.hbmpItem) then + SetMenuItemInfo(ParentMenuItem.Handle, MenuItem.Command, False, mmi); + if MenuItem.Count > 0 then + ApplyMenuBitmaps(MenuItem); + end; + end; +end; + +procedure TCompileForm.StartProcess; +var + RunFilename, RunParameters, WorkingDir: String; + Info: TShellExecuteInfo; + SaveFocusWindow: HWND; + WindowList: Pointer; + ShellExecuteResult: BOOL; + ErrorCode: DWORD; +begin + if FDebugTarget = dtUninstall then begin + if FUninstExe = '' then + raise Exception.Create(SCompilerNeedUninstExe); + RunFilename := FUninstExe; + end else begin + if FCompiledExe = '' then + raise Exception.Create(SCompilerNeedCompiledExe); + RunFilename := FCompiledExe; + end; + RunParameters := Format('/DEBUGWND=$%x ', [Handle]) + FRunParameters; + + ResetAllMemosLineState; + DebugOutputList.Clear; + SendMessage(DebugOutputList.Handle, LB_SETHORIZONTALEXTENT, 0, 0); + DebugCallStackList.Clear; + SendMessage(DebugCallStackList.Handle, LB_SETHORIZONTALEXTENT, 0, 0); + if not (OutputTabSet.TabIndex in [tiDebugOutput, tiDebugCallStack]) then + OutputTabSet.TabIndex := tiDebugOutput; + SetStatusPanelVisible(True); + + FillChar(Info, SizeOf(Info), 0); + Info.cbSize := SizeOf(Info); + Info.fMask := SEE_MASK_FLAG_NO_UI or SEE_MASK_FLAG_DDEWAIT or + SEE_MASK_NOCLOSEPROCESS or SEE_MASK_NOZONECHECKS; + Info.Wnd := Application.Handle; + if FOptions.RunAsDifferentUser then + Info.lpVerb := 'runas' + else + Info.lpVerb := 'open'; + Info.lpFile := PChar(RunFilename); + Info.lpParameters := PChar(RunParameters); + WorkingDir := PathExtractDir(RunFilename); + Info.lpDirectory := PChar(WorkingDir); + Info.nShow := SW_SHOWNORMAL; + { Disable windows so that the user can't click other things while a "Run as" + dialog is up but is not system modal (which it is currently) } + SaveFocusWindow := GetFocus; + WindowList := DisableTaskWindows(0); + try + { Also temporarily remove the focus since a disabled window's children can + still receive keystrokes. This is needed if the UAC dialog doesn't come to + the foreground for some reason (e.g. if the following SetActiveWindow call + is removed). } + Windows.SetFocus(0); + { We have to make the application window the active window, otherwise the + UAC dialog doesn't come to the foreground automatically. } + SetActiveWindow(Application.Handle); + ShellExecuteResult := ShellExecuteEx(@Info); + ErrorCode := GetLastError; + finally + EnableTaskWindows(WindowList); + Windows.SetFocus(SaveFocusWindow); + end; + if not ShellExecuteResult then begin + { Don't display error message if user clicked Cancel at UAC dialog } + if ErrorCode = ERROR_CANCELLED then + Abort; + raise Exception.CreateFmt(SCompilerExecuteSetupError2, [RunFilename, + ErrorCode, Win32ErrorString(ErrorCode)]); + end; + FDebugging := True; + FPaused := False; + FProcessHandle := Info.hProcess; + CheckIfRunningTimer.Enabled := True; + UpdateRunMenu; + UpdateCaption; + DebugLogMessage('*** ' + DebugTargetStrings[FDebugTarget] + ' started'); +end; + +procedure TCompileForm.CompileIfNecessary; + + function UnopenedIncludedFileModifiedSinceLastCompile: Boolean; + var + IncludedFile: TIncludedFile; + NewTime: TFileTime; + begin + Result := False; + for IncludedFile in FIncludedFiles do begin + if (IncludedFile.Memo = nil) and IncludedFile.HasLastWriteTime and + GetLastWriteTimeOfFile(IncludedFile.Filename, @NewTime) and + (CompareFileTime(IncludedFile.LastWriteTime, NewTime) <> 0) then begin + Result := True; + Exit; + end; + end; + end; + +begin + CheckIfTerminated; + + { Display warning if the user modified the script while running - does not support unopened included files } + if FDebugging and FModifiedAnySinceLastCompileAndGo then begin + if MsgBox('The changes you made will not take effect until you ' + + 're-compile.' + SNewLine2 + 'Continue running anyway?', + SCompilerFormCaption, mbError, MB_YESNO) <> IDYES then + Abort; + FModifiedAnySinceLastCompileAndGo := False; + { The process may have terminated while the message box was up; check, + and if it has, we want to recompile below } + CheckIfTerminated; + end; + + if not FDebugging and (FModifiedAnySinceLastCompile or UnopenedIncludedFileModifiedSinceLastCompile) then + CompileFile('', False); +end; + +procedure TCompileForm.Go(AStepMode: TStepMode); +begin + CompileIfNecessary; + FStepMode := AStepMode; + HideError; + SetStepLine(FStepMemo, -1); + if FDebugging then begin + if FPaused then begin + FPaused := False; + UpdateRunMenu; + UpdateCaption; + if DebugCallStackList.Items.Count > 0 then begin + DebugCallStackList.Clear; + SendMessage(DebugCallStackList.Handle, LB_SETHORIZONTALEXTENT, 0, 0); + DebugCallStackList.Update; + end; + { Tell it to continue } + SendNotifyMessage(FDebugClientWnd, WM_DebugClient_Continue, + Ord(AStepMode = smStepOver), 0); + end; + end + else + StartProcess; +end; + +function TCompileForm.EvaluateConstant(const S: String; + var Output: String): Integer; +begin + { This is about evaluating constants like 'app' and not [Code] variables } + FReplyString := ''; + Result := SendCopyDataMessageStr(FDebugClientWnd, Handle, + CD_DebugClient_EvaluateConstantW, S); + if Result > 0 then + Output := FReplyString; +end; + +function TCompileForm.EvaluateVariableEntry(const DebugEntry: PVariableDebugEntry; + var Output: String): Integer; +begin + FReplyString := ''; + Result := SendCopyDataMessage(FDebugClientWnd, Handle, CD_DebugClient_EvaluateVariableEntry, + DebugEntry, SizeOf(DebugEntry^)); + if Result > 0 then + Output := FReplyString; +end; + +procedure TCompileForm.RRunClick(Sender: TObject); +begin + Go(smRun); +end; + +procedure TCompileForm.RParametersClick(Sender: TObject); +begin + ReadMRUParametersList; + InputQueryCombo('Run Parameters', 'Command line parameters for ' + DebugTargetStrings[dtSetup] + + ' and ' + DebugTargetStrings[dtUninstall] + ':', FRunParameters, FMRUParametersList); + if FRunParameters <> '' then + ModifyMRUParametersList(FRunParameters, True); +end; + +procedure TCompileForm.RPauseClick(Sender: TObject); +begin + if FDebugging and not FPaused then begin + if FStepMode <> smStepInto then begin + FStepMode := smStepInto; + UpdateCaption; + end + else + MsgBox('A pause is already pending.', SCompilerFormCaption, mbError, + MB_OK); + end; +end; + +procedure TCompileForm.RRunToCursorClick(Sender: TObject); + + function GetDebugEntryFromMemoAndLineNumber(Memo: TCompScintFileEdit; LineNumber: Integer; + var DebugEntry: TDebugEntry): Boolean; + var + I: Integer; + begin + Result := False; + for I := 0 to FDebugEntriesCount-1 do begin + if (FDebugEntries[I].FileIndex = Memo.CompilerFileIndex) and + (FDebugEntries[I].LineNumber = LineNumber) then begin + DebugEntry := FDebugEntries[I]; + Result := True; + Break; + end; + end; + end; + +begin + CompileIfNecessary; + if not GetDebugEntryFromMemoAndLineNumber((FActiveMemo as TCompScintFileEdit), FActiveMemo.CaretLine, FRunToCursorPoint) then begin + MsgBox('No code was generated for the current line.', SCompilerFormCaption, + mbError, MB_OK); + Exit; + end; + Go(smRunToCursor); +end; + +procedure TCompileForm.RStepIntoClick(Sender: TObject); +begin + Go(smStepInto); +end; + +procedure TCompileForm.RStepOutClick(Sender: TObject); +begin + if FPausedAtCodeLine then + Go(smStepOut) + else + Go(smStepInto); +end; + +procedure TCompileForm.RStepOverClick(Sender: TObject); +begin + Go(smStepOver); +end; + +procedure TCompileForm.RTerminateClick(Sender: TObject); +var + S, Dir: String; +begin + S := 'This will unconditionally terminate the running ' + + DebugTargetStrings[FDebugTarget] + ' process. Continue?'; + + if FDebugTarget = dtSetup then + S := S + #13#10#13#10'Note that if ' + DebugTargetStrings[FDebugTarget] + ' ' + + 'is currently in the installation phase, any changes made to the ' + + 'system thus far will not be undone, nor will uninstall data be written.'; + + if MsgBox(S, 'Terminate', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) <> IDYES then + Exit; + CheckIfTerminated; + if FDebugging then begin + DebugLogMessage('*** Terminating process'); + Win32Check(TerminateProcess(FDebugClientProcessHandle, 6)); + if (WaitForSingleObject(FDebugClientProcessHandle, 5000) <> WAIT_TIMEOUT) and + (FTempDir <> '') then begin + Dir := FTempDir; + FTempDir := ''; + DebugLogMessage('*** Removing left-over temporary directory: ' + Dir); + { Sleep for a bit to allow files to be unlocked by Windows, + otherwise it fails intermittently (with Hyper-Threading, at least) } + Sleep(50); + if not DeleteDirTree(Dir) and DirExists(Dir) then + DebugLogMessage('*** Failed to remove temporary directory'); + end; + DebuggingStopped(True); + end; +end; + +procedure TCompileForm.REvaluateClick(Sender: TObject); +var + Output: String; +begin + if InputQuery('Evaluate', 'Constant to evaluate (e.g., "{app}"):', + FLastEvaluateConstantText) then begin + case EvaluateConstant(FLastEvaluateConstantText, Output) of + 1: MsgBox(Output, 'Evaluate Result', mbInformation, MB_OK); + 2: MsgBox(Output, 'Evaluate Error', mbError, MB_OK); + else + MsgBox('An unknown error occurred.', 'Evaluate Error', mbError, MB_OK); + end; + end; +end; + +procedure TCompileForm.CheckIfRunningTimerTimer(Sender: TObject); +begin + { In cases of normal Setup termination, we receive a WM_Debugger_Goodbye + message. But in case we don't get that, use a timer to periodically check + if the process is no longer running. } + CheckIfTerminated; +end; + +procedure TCompileForm.POutputListCopyClick(Sender: TObject); +var + ListBox: TListBox; + Text: String; + I: Integer; +begin + if CompilerOutputList.Visible then + ListBox := CompilerOutputList + else if DebugOutputList.Visible then + ListBox := DebugOutputList + else if DebugCallStackList.Visible then + ListBox := DebugCallStackList + else + ListBox := FindResultsList; + Text := ''; + if ListBox.SelCount > 0 then begin + for I := 0 to ListBox.Items.Count-1 do begin + if ListBox.Selected[I] then begin + if Text <> '' then + Text := Text + SNewLine; + Text := Text + ListBox.Items[I]; + end; + end; + end; + Clipboard.AsText := Text; +end; + +procedure TCompileForm.POutputListSelectAllClick(Sender: TObject); +var + ListBox: TListBox; + I: Integer; +begin + if CompilerOutputList.Visible then + ListBox := CompilerOutputList + else if DebugOutputList.Visible then + ListBox := DebugOutputList + else if DebugCallStackList.Visible then + ListBox := DebugCallStackList + else + ListBox := FindResultsList; + ListBox.Items.BeginUpdate; + try + for I := 0 to ListBox.Items.Count-1 do + ListBox.Selected[I] := True; + finally + ListBox.Items.EndUpdate; + end; +end; + +procedure TCompileForm.OutputListKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Shift = [ssCtrl] then begin + if Key = Ord('C') then + POutputListCopyClick(Sender) + else if Key = Ord('A') then + POutputListSelectAllClick(Sender); + end; +end; + +procedure TCompileForm.AppOnIdle(Sender: TObject; var Done: Boolean); +begin + { For an explanation of this, see the comment where HandleMessage is called } + if FCompiling then + Done := False; + + FBecameIdle := True; +end; + +procedure TCompileForm.EGotoClick(Sender: TObject); +var + S: String; + L: Integer; +begin + S := IntToStr(FActiveMemo.CaretLine + 1); + if InputQuery('Go to Line', 'Line number:', S) then begin + L := StrToIntDef(S, Low(L)); + if L <> Low(L) then + FActiveMemo.CaretLine := L - 1; + end; +end; + +procedure TCompileForm.StatusBarClick(Sender: TObject); +begin + if MemosTabSet.Visible and (FHiddenFiles.Count > 0) then begin + var Point := SmallPointToPoint(TSmallPoint(GetMessagePos())); + var X := StatusBar.ScreenToClient(Point).X; + var W := 0; + for var I := 0 to StatusBar.Panels.Count-1 do begin + Inc(W, StatusBar.Panels[I].Width); + if X < W then begin + if I = spHiddenFilesCount then + (MemosTabSet.PopupMenu as TCompileFormPopupMenu).Popup(Point.X, Point.Y); + Break; + end else if I = spHiddenFilesCount then + Break; + end; + end; +end; + +procedure TCompileForm.StatusBarDrawPanel(StatusBar: TStatusBar; + Panel: TStatusPanel; const Rect: TRect); +const + TP_DROPDOWNBUTTONGLYPH = 7; + TS_NORMAL = 1; +begin + case Panel.Index of + spHiddenFilesCount: + if MemosTabSet.Visible and (FHiddenFiles.Count > 0) then begin + var RText := Rect; + if FToolbarThemeData <> 0 then begin + Dec(RText.Right, RText.Bottom - RText.Top); + var RGlyph := Rect; + RGlyph.Left := RText.Right; { RGlyph is now a square } + DrawThemeBackground(FToolbarThemeData, StatusBar.Canvas.Handle, TP_DROPDOWNBUTTONGLYPH, TS_NORMAL, RGlyph, nil); + end; + var S := Format('Tabs closed: %d', [FHiddenFiles.Count]); + StatusBar.Canvas.TextRect(RText, S, [tfCenter]); + end; + spCompileIcon: + if FCompiling then begin + ImageList_Draw(BuildImageList.Handle, FBuildAnimationFrame, StatusBar.Canvas.Handle, + Rect.Left + ((Rect.Right - Rect.Left) - BuildImageList.Width) div 2, + Rect.Top + ((Rect.Bottom - Rect.Top) - BuildImageList.Height) div 2, ILD_NORMAL); + end; + spCompileProgress: + if FCompiling and (FProgressMax > 0) then begin + var R := Rect; + InflateRect(R, -2, -2); + if FProgressThemeData = 0 then begin + R.Right := R.Left + MulDiv(FProgress, R.Right - R.Left, + FProgressMax); + StatusBar.Canvas.Brush.Color := clHighlight; + StatusBar.Canvas.FillRect(R); + end else begin + DrawThemeBackground(FProgressThemeData, StatusBar.Canvas.Handle, PP_BAR, 0, R, nil); + var BR := R; + GetThemeBackgroundContentRect(FProgressThemeData, StatusBar.Canvas.Handle, PP_BAR, 0, BR, @R); + IntersectClipRect(StatusBar.Canvas.Handle, R.Left, R.Top, R.Right, R.Bottom); + var W := MulDiv(FProgress, R.Right - R.Left, FProgressMax); + var ChunkCount := W div (FProgressChunkSize + FProgressSpaceSize); + if W mod (FProgressChunkSize + FProgressSpaceSize) > 0 then + Inc(ChunkCount); + R.Right := R.Left + FProgressChunkSize; + for W := 0 to ChunkCount - 1 do + begin + DrawThemeBackground(FProgressThemeData, StatusBar.Canvas.Handle, PP_CHUNK, 0, R, nil); + OffsetRect(R, FProgressChunkSize + FProgressSpaceSize, 0); + end; + end; + end; + end; +end; + +procedure TCompileForm.InvalidateStatusPanel(const Index: Integer); +var + R: TRect; +begin + { For some reason, the VCL doesn't offer a method for this... } + if SendMessage(StatusBar.Handle, SB_GETRECT, Index, LPARAM(@R)) <> 0 then begin + InflateRect(R, -1, -1); + InvalidateRect(StatusBar.Handle, @R, True); + end; +end; + +procedure TCompileForm.UpdateCompileStatusPanels(const AProgress, + AProgressMax: Cardinal; const ASecondsRemaining: Integer; + const ABytesCompressedPerSecond: Cardinal); +var + T: DWORD; +begin + { Icon panel } + T := GetTickCount; + if Cardinal(T - FLastAnimationTick) >= Cardinal(500) then begin + FLastAnimationTick := T; + InvalidateStatusPanel(spCompileIcon); + FBuildAnimationFrame := (FBuildAnimationFrame + 1) mod 4; + { Also update the status text twice a second } + if ASecondsRemaining >= 0 then + StatusBar.Panels[spExtraStatus].Text := Format( + ' Estimated time remaining: %.2d%s%.2d%s%.2d Average KB/sec: %.0n', + [(ASecondsRemaining div 60) div 60, FormatSettings.TimeSeparator, + (ASecondsRemaining div 60) mod 60, FormatSettings.TimeSeparator, + ASecondsRemaining mod 60, ABytesCompressedPerSecond / 1024]) + else + StatusBar.Panels[spExtraStatus].Text := ''; + end; + + { Progress panel and taskbar progress bar } + if (FProgress <> AProgress) or + (FProgressMax <> AProgressMax) then begin + FProgress := AProgress; + FProgressMax := AProgressMax; + InvalidateStatusPanel(spCompileProgress); + SetAppTaskbarProgressValue(AProgress, AProgressMax); + end; +end; + +procedure TCompileForm.WMSettingChange(var Message: TMessage); +begin + if (FTheme.Typ <> ttClassic) and IsWindows10 and (Message.LParam <> 0) and (StrIComp(PChar(Message.LParam), 'ImmersiveColorSet') = 0) then begin + FOptions.ThemeType := GetDefaultThemeType; + UpdateTheme; + end; +end; + +procedure TCompileForm.WMThemeChanged(var Message: TMessage); +begin + { Don't Run to Cursor into this function, it will interrupt up the theme change } + UpdateThemeData(True); + inherited; +end; + +procedure TCompileForm.WMUAHDrawMenu(var Message: TMessage); +begin + if FTheme.Dark then begin + var MenuBarInfo: TMenuBarInfo; + MenuBarInfo.cbSize := SizeOf(MenuBarInfo); + GetMenuBarInfo(Handle, Integer(OBJID_MENU), 0, MenuBarInfo); + + var WindowRect: TRect; + GetWindowRect(Handle, WindowRect); + + var Rect := MenuBarInfo.rcBar; + OffsetRect(Rect, -WindowRect.Left, -WindowRect.Top); + + var UAHMenu := PUAHMenu(Message.lParam); + FillRect(UAHMenu.hdc, Rect, FMenuDarkBackgroundBrush.Handle); + end else + inherited; +end; + +procedure TCompileForm.WMUAHDrawMenuItem(var Message: TMessage); +const + ODS_NOACCEL = $100; + DTT_TEXTCOLOR = 1; + MENU_BARITEM = 8; + MBI_NORMAL = 1; +var + Buffer: array of Char; +begin + if FTheme.Dark then begin + var UAHDrawMenuItem := PUAHDrawMenuItem(Message.lParam); + + var MenuItemInfo: TMenuItemInfo; + MenuItemInfo.cbSize := SizeOf(MenuItemInfo); + MenuItemInfo.fMask := MIIM_STRING; + MenuItemInfo.dwTypeData := nil; + GetMenuItemInfo(UAHDrawMenuItem.um.hmenu, UAHDrawMenuItem.umi.iPosition, True, MenuItemInfo); + Inc(MenuItemInfo.cch); + SetLength(Buffer, MenuItemInfo.cch); + MenuItemInfo.dwTypeData := @Buffer[0]; + GetMenuItemInfo(UAHDrawMenuItem.um.hmenu, UAHDrawMenuItem.umi.iPosition, True, MenuItemInfo); + + var dwFlags: DWORD := DT_CENTER or DT_SINGLELINE or DT_VCENTER; + if (UAHDrawMenuItem.dis.itemState and ODS_NOACCEL) <> 0 then + dwFlags := dwFlags or DT_HIDEPREFIX; + + var Inactive := (UAHDrawMenuItem.dis.itemState and ODS_INACTIVE) <> 0; + + var TextColor: TThemeColor; + if Inactive then + TextColor := tcMarginFore + else + TextColor := tcFore; + + var opts: TDTTOpts; + opts.dwSize := SizeOf(opts); + opts.dwFlags := DTT_TEXTCOLOR; + opts.crText := FTheme.Colors[TextColor]; + + var Brush: HBrush; + { ODS_HOTLIGHT can be set when the menu is inactive so we check Inactive as well. } + if not Inactive and ((UAHDrawMenuItem.dis.itemState and (ODS_HOTLIGHT or ODS_SELECTED)) <> 0) then + Brush := FMenuDarkHotOrSelectedBrush.Handle + else + Brush := FMenuDarkBackgroundBrush.Handle; + + FillRect(UAHDrawMenuItem.um.hdc, UAHDrawMenuItem.dis.rcItem, Brush); + DrawThemeTextEx(FMenuThemeData, UAHDrawMenuItem.um.hdc, MENU_BARITEM, MBI_NORMAL, MenuItemInfo.dwTypeData, MenuItemInfo.cch, dwFlags, @UAHDrawMenuItem.dis.rcItem, opts); + end else + inherited; +end; + +{ Should be removed if the main menu ever gets removed } +procedure TCompileForm.UAHDrawMenuBottomLine; +begin + if FTheme.Dark then begin + var ClientRect: TRect; + Windows.GetClientRect(Handle, ClientRect); + MapWindowPoints(Handle, 0, ClientRect, 2); + + var WindowRect: TRect; + GetWindowRect(Handle, WindowRect); + + var Rect := ClientRect; + OffsetRect(Rect, -WindowRect.Left, -WindowRect.Top); + + Rect.Bottom := Rect.Top; + Dec(Rect.Top); + + var DC := GetWindowDC(Handle); + FillRect(DC, Rect, FMenuDarkBackgroundBrush.Handle); + ReleaseDC(Handle, DC); + end; +end; + +procedure TCompileForm.WMNCActivate(var Message: TMessage); +begin + inherited; + UAHDrawMenuBottomLine; +end; + +procedure TCompileForm.WMNCPaint(var Message: TMessage); +begin + inherited; + UAHDrawMenuBottomLine; +end; + +procedure TCompileForm.RTargetClick(Sender: TObject); +var + NewTarget: TDebugTarget; +begin + if (Sender = RTargetSetup) or (Sender = TargetSetupButton) then + NewTarget := dtSetup + else + NewTarget := dtUninstall; + if (FDebugTarget <> NewTarget) and (not FDebugging or AskToDetachDebugger) then + FDebugTarget := NewTarget; + + { Update always even if the user decided not to switch so the states are restored } + UpdateTargetMenu; +end; + +procedure TCompileForm.AppOnActivate(Sender: TObject); +const + ReloadMessages: array[Boolean] of String = ( + 'The %s file has been modified outside of the source editor.' + SNewLine2 + + 'Do you want to reload the file?', + 'The %s file has been modified outside of the source editor. Changes have ' + + 'also been made in the source editor.' + SNewLine2 + 'Do you want to ' + + 'reload the file and lose the changes made in the source editor?'); +var + Memo: TCompScintFileEdit; + NewTime: TFileTime; + Changed: Boolean; +begin + for Memo in FFileMemos do begin + if (Memo.Filename = '') or not Memo.Used then + Continue; + + { See if the file has been modified outside the editor } + Changed := False; + if GetLastWriteTimeOfFile(Memo.Filename, @NewTime) then begin + if CompareFileTime(Memo.FileLastWriteTime, NewTime) <> 0 then begin + Memo.FileLastWriteTime := NewTime; + Changed := True; + end; + end; + + { If it has been, offer to reload it } + if Changed then begin + if IsWindowEnabled(Application.Handle) then begin + if MsgBox(Format(ReloadMessages[Memo.Modified], [Memo.Filename]), + SCompilerFormCaption, mbConfirmation, MB_YESNO) = IDYES then + if ConfirmCloseFile(False) then begin + OpenFile(Memo, Memo.Filename, False); + if Memo = FMainMemo then + Break; { Reloading the main script will also reload all include files } + end; + end + else begin + { When a modal dialog is up, don't offer to reload the file. Probably + not a good idea since the dialog might be manipulating the file. } + MsgBox('The ' + Memo.Filename + ' file has been modified outside ' + + 'of the source editor. You might want to reload it.', + SCompilerFormCaption, mbInformation, MB_OK); + end; + end; + end; +end; + +procedure TCompileForm.CompilerOutputListDrawItem(Control: TWinControl; + Index: Integer; Rect: TRect; State: TOwnerDrawState); +const + ThemeColors: array [TStatusMessageKind] of TThemeColor = (tcGreen, tcFore, tcOrange, tcRed); +var + Canvas: TCanvas; + S: String; + StatusMessageKind: TStatusMessageKind; +begin + Canvas := CompilerOutputList.Canvas; + S := CompilerOutputList.Items[Index]; + + Canvas.FillRect(Rect); + Inc(Rect.Left, 2); + if FOptions.ColorizeCompilerOutput and not (odSelected in State) then begin + StatusMessageKind := TStatusMessageKind(CompilerOutputList.Items.Objects[Index]); + Canvas.Font.Color := FTheme.Colors[ThemeColors[StatusMessageKind]]; + end; + Canvas.TextOut(Rect.Left, Rect.Top, S); +end; + +procedure TCompileForm.DebugOutputListDrawItem(Control: TWinControl; + Index: Integer; Rect: TRect; State: TOwnerDrawState); +var + Canvas: TCanvas; + S: String; +begin + Canvas := DebugOutputList.Canvas; + S := DebugOutputList.Items[Index]; + + Canvas.FillRect(Rect); + Inc(Rect.Left, 2); + if (S <> '') and (S[1] = #9) then + Canvas.TextOut(Rect.Left + FDebugLogListTimestampsWidth, Rect.Top, Copy(S, 2, Maxint)) + else begin + if (Length(S) > 20) and (S[18] = '-') and (S[19] = '-') and (S[20] = ' ') then begin + { Draw lines that begin with '-- ' (like '-- File entry --') in bold } + Canvas.TextOut(Rect.Left, Rect.Top, Copy(S, 1, 17)); + Canvas.Font.Style := [fsBold]; + Canvas.TextOut(Rect.Left + FDebugLogListTimestampsWidth, Rect.Top, Copy(S, 18, Maxint)); + end else + Canvas.TextOut(Rect.Left, Rect.Top, S); + end; +end; + +procedure TCompileForm.DebugCallStackListDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; + State: TOwnerDrawState); +var + Canvas: TCanvas; + S: String; +begin + Canvas := DebugCallStackList.Canvas; + S := DebugCallStackList.Items[Index]; + + Canvas.FillRect(Rect); + Inc(Rect.Left, 2); + Canvas.TextOut(Rect.Left, Rect.Top, S); +end; + +procedure TCompileForm.FindResultsListDblClick(Sender: TObject); +var + FindResult: TFindResult; + Memo: TCompScintFileEdit; + I: Integer; +begin + I := FindResultsList.ItemIndex; + if I <> -1 then begin + FindResult := FindResultsList.Items.Objects[I] as TFindResult; + if FindResult <> nil then begin + for Memo in FFileMemos do begin + if Memo.Used and (PathCompare(Memo.Filename, FindResult.Filename) = 0) then begin + MoveCaretAndActivateMemo(Memo, FindResult.Line, True); + Memo.Selection := FindResult.Range; + ActiveControl := Memo; + Exit; + end; + end; + MsgBox('File not opened.', SCompilerFormCaption, mbError, MB_OK); + end; + end; +end; + +procedure TCompileForm.FindResultsListDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; + State: TOwnerDrawState); +var + Canvas: TCanvas; + S, S2: String; + FindResult: TFindResult; + StartI, EndI: Integer; + SaveColor: TColor; +begin + Canvas := FindResultsList.Canvas; + S := FindResultsList.Items[Index]; + FindResult := FindResultsList.Items.Objects[Index] as TFindResult; + + Canvas.FillRect(Rect); + Inc(Rect.Left, 2); + if FindResult = nil then begin + Canvas.Font.Style := [fsBold]; + Canvas.TextOut(Rect.Left, Rect.Top, S); + end else if not (odSelected in State) then begin + StartI := FindResult.Range.StartPos - FindResult.LineStartPos + 1 + FindResult.PrefixStringLength; + EndI := FindResult.Range.EndPos - FindResult.LineStartPos + 1 + FindResult.PrefixStringLength; + if StartI > 1 then begin + Canvas.TextOut(Rect.Left, Rect.Top, Copy(S, 1, StartI-1)); + Rect.Left := Canvas.PenPos.X; + end; + SaveColor := Canvas.Brush.Color; + if FTheme.Dark then + Canvas.Brush.Color := FTheme.Colors[tcRed] + else + Canvas.Brush.Color := FTheme.Colors[tcSelBack]; + S2 := Copy(S, StartI, EndI-StartI); + Rect.Right := Rect.Left + Canvas.TextWidth(S2); + Canvas.TextRect(Rect, Rect.Left, Rect.Top, S2); { TextRect instead of TextOut to avoid a margin around the text } + if EndI <= Length(S) then begin + Canvas.Brush.Color := SaveColor; + S2 := Copy(S, EndI, MaxInt); + Rect.Left := Rect.Right; + Rect.Right := Rect.Left + Canvas.TextWidth(S2); + Canvas.TextRect(Rect, Rect.Left, Rect.Top, S2); + end; + end else + Canvas.TextOut(Rect.Left, Rect.Top, S) +end; + +procedure TCompileForm.OutputTabSetClick(Sender: TObject); +begin + case OutputTabSet.TabIndex of + tiCompilerOutput: + begin + CompilerOutputList.BringToFront; + CompilerOutputList.Visible := True; + DebugOutputList.Visible := False; + DebugCallStackList.Visible := False; + FindResultsList.Visible := False; + end; + tiDebugOutput: + begin + DebugOutputList.BringToFront; + DebugOutputList.Visible := True; + CompilerOutputList.Visible := False; + DebugCallStackList.Visible := False; + FindResultsList.Visible := False; + end; + tiDebugCallStack: + begin + DebugCallStackList.BringToFront; + DebugCallStackList.Visible := True; + CompilerOutputList.Visible := False; + DebugOutputList.Visible := False; + FindResultsList.Visible := False; + end; + tiFindResults: + begin + FindResultsList.BringToFront; + FindResultsList.Visible := True; + CompilerOutputList.Visible := False; + DebugOutputList.Visible := False; + DebugCallStackList.Visible := False; + end; + end; +end; + +procedure TCompileForm.ToggleBreakPoint(Line: Integer); +var + Memo: TCompScintFileEdit; + I: Integer; +begin + Memo := FActiveMemo as TCompScintFileEdit; + I := Memo.BreakPoints.IndexOf(Line); + if I = -1 then + Memo.BreakPoints.Add(Line) + else + Memo.BreakPoints.Delete(I); + UpdateLineMarkers(Memo, Line); + BuildAndSaveBreakPointLines(Memo); +end; + +procedure TCompileForm.MemoMarginClick(Sender: TObject; MarginNumber: Integer; + Line: Integer); +begin + if (MarginNumber = 1) and RToggleBreakPoint.Enabled then + ToggleBreakPoint(Line); +end; + +procedure TCompileForm.RToggleBreakPointClick(Sender: TObject); +begin + ToggleBreakPoint(FActiveMemo.CaretLine); +end; + +procedure TCompileForm.RDeleteBreakPointsClick(Sender: TObject); +begin + { Also see AnyMemoHasBreakPoint } + for var Memo in FFileMemos do begin + if Memo.Used and (Memo.BreakPoints.Count > 0) then begin + for var I := Memo.BreakPoints.Count-1 downto 0 do begin + var Line := Memo.BreakPoints[I]; + Memo.BreakPoints.Delete(I); + UpdateLineMarkers(Memo, Line); + end; + BuildAndSaveBreakPointLines(Memo); + end; + end; +end; + +procedure TCompileForm.MemoLinesInserted(Memo: TCompScintFileEdit; FirstLine, Count: integer); +var + I, Line: Integer; +begin + for I := 0 to FDebugEntriesCount-1 do + if (FDebugEntries[I].FileIndex = Memo.CompilerFileIndex) and + (FDebugEntries[I].LineNumber >= FirstLine) then + Inc(FDebugEntries[I].LineNumber, Count); + + if Assigned(Memo.LineState) and (FirstLine < Memo.LineStateCount) then begin + { Grow FStateLine if necessary } + I := (Memo.LineStateCount + Count) - Memo.LineStateCapacity; + if I > 0 then begin + if I < LineStateGrowAmount then + I := LineStateGrowAmount; + ReallocMem(Memo.LineState, SizeOf(TLineState) * (Memo.LineStateCapacity + I)); + Inc(Memo.LineStateCapacity, I); + end; + { Shift existing line states and clear the new ones } + for I := Memo.LineStateCount-1 downto FirstLine do + Memo.LineState[I + Count] := Memo.LineState[I]; + for I := FirstLine to FirstLine + Count - 1 do + Memo.LineState[I] := lnUnknown; + Inc(Memo.LineStateCount, Count); + end; + + if Memo.StepLine >= FirstLine then + Inc(Memo.StepLine, Count); + if Memo.ErrorLine >= FirstLine then + Inc(Memo.ErrorLine, Count); + + var BreakPointsChanged := False; + for I := 0 to Memo.BreakPoints.Count-1 do begin + Line := Memo.BreakPoints[I]; + if Line >= FirstLine then begin + Memo.BreakPoints[I] := Line + Count; + BreakPointsChanged := True; + end; + end; + if BreakPointsChanged then + BuildAndSaveBreakPointLines(Memo); + + FNavStacks.LinesInserted(Memo, FirstLine, Count); +end; + +procedure TCompileForm.MemoLinesDeleted(Memo: TCompScintFileEdit; FirstLine, Count, + FirstAffectedLine: Integer); +var + I, Line: Integer; + DebugEntry: PDebugEntry; +begin + for I := 0 to FDebugEntriesCount-1 do begin + DebugEntry := @FDebugEntries[I]; + if (DebugEntry.FileIndex = Memo.CompilerFileIndex) and + (DebugEntry.LineNumber >= FirstLine) then begin + if DebugEntry.LineNumber < FirstLine + Count then + DebugEntry.LineNumber := -1 + else + Dec(DebugEntry.LineNumber, Count); + end; + end; + + if Assigned(Memo.LineState) then begin + { Shift existing line states } + if FirstLine < Memo.LineStateCount - Count then begin + for I := FirstLine to Memo.LineStateCount - Count - 1 do + Memo.LineState[I] := Memo.LineState[I + Count]; + Dec(Memo.LineStateCount, Count); + end + else begin + { There's nothing to shift because the last line(s) were deleted, or + line(s) past FLineStateCount } + if Memo.LineStateCount > FirstLine then + Memo.LineStateCount := FirstLine; + end; + end; + + if Memo.StepLine >= FirstLine then begin + if Memo.StepLine < FirstLine + Count then + Memo.StepLine := -1 + else + Dec(Memo.StepLine, Count); + end; + if Memo.ErrorLine >= FirstLine then begin + if Memo.ErrorLine < FirstLine + Count then + Memo.ErrorLine := -1 + else + Dec(Memo.ErrorLine, Count); + end; + + var BreakPointsChanged := False; + for I := Memo.BreakPoints.Count-1 downto 0 do begin + Line := Memo.BreakPoints[I]; + if Line >= FirstLine then begin + if Line < FirstLine + Count then begin + Memo.BreakPoints.Delete(I); + BreakPointsChanged := True; + end else begin + Memo.BreakPoints[I] := Line - Count; + BreakPointsChanged := True; + end; + end; + end; + if BreakPointsChanged then + BuildAndSaveBreakPointLines(Memo); + + if FNavStacks.LinesDeleted(Memo, FirstLine, Count) then + UpdateNavButtons; + { We do NOT update FCurrentNavItem here so it might point to a line that's + deleted until next UpdateCaretPosPanelAndBackStack by UpdateMemoUI } + + { When lines are deleted, Scintilla insists on moving all of the deleted + lines' markers to the line on which the deletion started + (FirstAffectedLine). This is bad for us as e.g. it can result in the line + having two conflicting markers (or two of the same marker). There's no + way to stop it from doing that, or to easily tell which markers came from + which lines, so we simply delete and re-create all markers on the line. } + UpdateLineMarkers(Memo, FirstAffectedLine); +end; + +procedure TCompileForm.UpdateLineMarkers(const AMemo: TCompScintFileEdit; const Line: Integer); +var + NewMarker: Integer; +begin + if Line >= AMemo.Lines.Count then + Exit; + + var StepLine := AMemo.StepLine = Line; + + NewMarker := -1; + if AMemo.BreakPoints.IndexOf(Line) <> -1 then begin + if AMemo.LineState = nil then + NewMarker := mmIconBreakpoint + else if (Line < AMemo.LineStateCount) and (AMemo.LineState[Line] <> lnUnknown) then + NewMarker := IfThen(StepLine, mmIconBreakpointStep, mmIconBreakpointGood) + else + NewMarker := mmIconBreakpointBad; + end else if StepLine then + NewMarker := mmIconStep + else begin + if Line < AMemo.LineStateCount then begin + case AMemo.LineState[Line] of + lnHasEntry: NewMarker := mmIconHasEntry; + lnEntryProcessed: NewMarker := mmIconEntryProcessed; + end; + end; + end; + + { Delete all markers on the line. To flush out any possible duplicates, + even the markers we'll be adding next are deleted. } + if AMemo.GetMarkers(Line) <> [] then + AMemo.DeleteAllMarkersOnLine(Line); + + if NewMarker <> -1 then + AMemo.AddMarker(Line, NewMarker); + + if StepLine then + AMemo.AddMarker(Line, mmLineStep) + else if AMemo.ErrorLine = Line then + AMemo.AddMarker(Line, mmLineError) + else if NewMarker = mmIconBreakpointBad then + AMemo.AddMarker(Line, mmLineBreakpointBad); +end; + +procedure TCompileForm.UpdateAllMemoLineMarkers(const AMemo: TCompScintFileEdit); +begin + for var Line := 0 to AMemo.Lines.Count-1 do + UpdateLineMarkers(AMemo, Line); +end; + +procedure TCompileForm.UpdateAllMemosLineMarkers; +begin + for var Memo in FFileMemos do + if Memo.Used then + UpdateAllMemoLineMarkers(Memo); +end; + +procedure TCompileForm.UpdateBevel1Visibility; +begin + { Bevel1 is the line between the toolbar and the memo when there's no tabset } + Bevel1.Visible := (FTheme.Colors[tcMarginBack] = ToolBarPanel.Color) and not MemosTabSet.Visible; +end; + +function TCompileForm.ToCurrentPPI(const XY: Integer): Integer; +begin + Result := MulDiv(XY, CurrentPPI, 96); +end; + +function TCompileForm.FromCurrentPPI(const XY: Integer): Integer; +begin + Result := MulDiv(XY, 96, CurrentPPI); +end; + +initialization + InitThemeLibrary; + InitHtmlHelpLibrary; + { For ClearType support, try to make the default font Microsoft Sans Serif } + if DefFontData.Name = 'MS Sans Serif' then + DefFontData.Name := AnsiString(GetPreferredUIFont); + CoInitialize(nil); +finalization + CoUninitialize(); +end. diff --git a/Projects/Src/CompFunc.pas b/Projects/Src/CompFunc.pas new file mode 100644 index 00000000..e5d9fbf2 --- /dev/null +++ b/Projects/Src/CompFunc.pas @@ -0,0 +1,712 @@ +unit CompFunc; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + Additional Compiler IDE functions +} + +interface + +uses + Windows, + Classes, Forms, Dialogs, Menus, Controls, StdCtrls, + ScintEdit, CompScintEdit, ModernColors; + +const + MRUListMaxCount = 10; + +type + TMRUItemCompareProc = function(const S1, S2: String): Integer; + TAddLinesPrefix = (alpNone, alpTimestamp, alpCountdown); + TKeyMappingType = (kmtDelphi, kmtVisualStudio); + +procedure InitFormFont(Form: TForm); +procedure SetControlWindowTheme(const WinControl: TWinControl; const Dark: Boolean); +procedure InitFormThemeInit(const ATheme: TTheme); +procedure InitFormTheme(Form: TForm); +function GetDisplayFilename(const Filename: String): String; +function GetFileTitle(const Filename: String): String; +function GetCleanFileNameOfFile(const Filename: String): String; +function GetLastWriteTimeOfFile(const Filename: String; + LastWriteTime: PFileTime): Boolean; +procedure AddFileToRecentDocs(const Filename: String); +function GenerateGuid: String; +function ISPPInstalled: Boolean; +function IsISPPBuiltins(const Filename: String): Boolean; +function ISCryptInstalled: Boolean; +function WindowsVersionAtLeast(const AMajor, AMinor: Byte; const ABuild: Word = 0): Boolean; +function IsWindows10: Boolean; +function IsWindows11: Boolean; +function GetDefaultThemeType: TThemeType; +function GetDefaultKeyMappingType: TKeyMappingType; +procedure OpenDonateSite; +procedure OpenMailingListSite; +procedure ReadMRUList(const MRUList: TStringList; const Section, Ident: String); +procedure ModifyMRUList(const MRUList: TStringList; const Section, Ident: String; + const AItem: String; const AddNewItem: Boolean; CompareProc: TMRUItemCompareProc); +procedure LoadKnownIncludedAndHiddenFiles(const AFilename: String; const IncludedFiles, HiddenFiles: TStringList); +procedure SaveKnownIncludedAndHiddenFiles(const AFilename: String; const IncludedFiles, HiddenFiles: TStringList); +procedure DeleteKnownIncludedAndHiddenFiles(const AFilename: String); +procedure LoadBreakPointLines(const AFilename: String; const BreakPointLines: TStringList); +procedure SaveBreakPointLines(const AFilename: String; const BreakPointLines: TStringList); +procedure DeleteBreakPointLines(const AFilename: String); +procedure SetFakeShortCutText(const MenuItem: TMenuItem; const S: String); +procedure SetFakeShortCut(const MenuItem: TMenuItem; const Key: Word; + const Shift: TShiftState); +procedure SaveTextToFile(const Filename: String; + const S: String; const SaveEncoding: TSaveEncoding); +procedure AddLines(const ListBox: TListBox; const S: String; const AObject: TObject; const LineBreaks: Boolean; const Prefix: TAddLinesPrefix; const PrefixParam: Cardinal); +procedure SetLowPriority(ALowPriority: Boolean; var SavePriorityClass: DWORD); +function GetHelpFile: String; +function FindOptionsToSearchOptions(const FindOptions: TFindOptions): TScintFindOptions; +procedure StartAddRemovePrograms; +function GetSourcePath(const AFilename: String): String; +function ReadScriptLines(const ALines: TStringList; const ReadFromFile: Boolean; + const ReadFromFileFilename: String; const NotReadFromFileMemo: TScintEdit): Integer; +function CreateBitmapInfo(const Width, Height, BitCount: Integer): TBitmapInfo; + +implementation + +uses + ActiveX, ShlObj, ShellApi, CommDlg, SysUtils, IOUtils, + Messages, DwmApi, + CmnFunc2, PathFunc, FileClass, NewUxTheme, + CompForm, CompMsgs, CompTypes; + +procedure InitFormFont(Form: TForm); +var + FontName: String; + Metrics: TNonClientMetrics; +begin + begin + Metrics.cbSize := SizeOf(Metrics); + if SystemParametersInfo(SPI_GETNONCLIENTMETRICS, SizeOf(Metrics), + @Metrics, 0) then + FontName := Metrics.lfMessageFont.lfFaceName; + { Only allow fonts that we know will fit the text correctly } + if not SameText(FontName, 'Microsoft Sans Serif') and + not SameText(FontName, 'Segoe UI') then + FontName := 'Tahoma'; + end; + Form.Font.Name := FontName; + Form.Font.Size := 8; +end; + +procedure SetControlWindowTheme(const WinControl: TWinControl; const Dark: Boolean); +begin + if UseThemes then begin + if Dark then + SetWindowTheme(WinControl.Handle, 'DarkMode_Explorer', nil) + else + SetWindowTheme(WinControl.Handle, nil, nil); + end; +end; + +var + FormTheme: TTheme; + +procedure InitFormThemeInit(const ATheme: TTheme); +begin + FormTheme := ATheme; +end; + +procedure InitFormTheme(Form: TForm); + + procedure InitListBoxDarkTheme(const ListBox: TListBox); + begin + ListBox.Font.Color := FormTheme.Colors[tcFore]; + ListBox.Color := FormTheme.Colors[tcBack]; + ListBox.Invalidate; + SetControlWindowTheme(ListBox, FormTheme.Dark); + end; + + procedure InitWinControlTheme(const ParentControl: TWinControl); + begin + for var I := 0 to ParentControl.ControlCount-1 do begin + var Control := ParentControl.Controls[I]; + if Control is TListBox then + InitListBoxDarkTheme(Control as TListBox) + else if Control is TWinControl then + InitWinControlTheme(Control as TWinControl); + end; + end; + +begin + if (Form = CompileForm) or FormTheme.Dark then begin + Form.Color := FormTheme.Colors[tcBack]; + + { Based on https://learn.microsoft.com/en-us/windows/apps/desktop/modernize/apply-windows-themes + Unlike this article we check for Windows 10 Version 2004 because that's the first version + that introduced DWMWA_USE_IMMERSIVE_DARK_MODE as 20 (the now documented value) instead of 19 } + if WindowsVersionAtLeast(10, 0, 19041) then begin + const DWMWA_USE_IMMERSIVE_DARK_MODE = 20; + var value: BOOL := FormTheme.Dark; + DwmSetWindowAttribute(Form.Handle, DWMWA_USE_IMMERSIVE_DARK_MODE, @value, SizeOf(value)); + end; + + InitWinControlTheme(Form); + end; +end; + +function GetDisplayFilename(const Filename: String): String; +var + Buf: array[0..MAX_PATH-1] of Char; +begin + if CommDlg.GetFileTitle(PChar(Filename), Buf, SizeOf(Buf) div SizeOf(Buf[0])) = 0 then + Result := Buf + else + Result := Filename; +end; + +function GetFileTitle(const Filename: String): String; +begin + if Filename = '' then + Result := 'Untitled' + else + Result := Filename; +end; + +function GetCleanFileNameOfFile(const Filename: String): String; +begin + var Files := TDirectory.GetFiles(PathExtractDir(Filename), PathExtractName(Filename)); + if Length(Files) = 1 then + Result := Files[0] + else + Result := Filename; +end; + +function GetLastWriteTimeOfFile(const Filename: String; + LastWriteTime: PFileTime): Boolean; +var + H: THandle; +begin + H := CreateFile(PChar(Filename), 0, FILE_SHARE_READ or FILE_SHARE_WRITE, + nil, OPEN_EXISTING, 0, 0); + if H <> INVALID_HANDLE_VALUE then begin + Result := GetFileTime(H, nil, nil, LastWriteTime); + CloseHandle(H); + end + else + Result := False; +end; + +procedure AddFileToRecentDocs(const Filename: String); +{ Notifies the shell that a document has been opened. This will + add the file to the Recent section of the app's Jump List. + It is only necessary to call this function when the shell is unaware that + a file is being opened. Files opened through Explorer or common dialogs get + added to the Jump List automatically. } +begin + SHAddToRecentDocs(SHARD_PATHW, PChar(Filename)); +end; + +function GenerateGuid: String; +var + Guid: TGUID; + P: PWideChar; +begin + if CoCreateGuid(Guid) <> S_OK then + raise Exception.Create('CoCreateGuid failed'); + if StringFromCLSID(Guid, P) <> S_OK then + raise Exception.Create('StringFromCLSID failed'); + try + Result := P; + finally + CoTaskMemFree(P); + end; +end; + +function ISPPInstalled: Boolean; +begin + Result := NewFileExists(PathExtractPath(NewParamStr(0)) + 'ISPP.dll'); +end; + +function IsISPPBuiltins(const Filename: String): Boolean; +begin + Result := PathCompare(PathExtractName(Filename), 'ISPPBuiltins.iss') = 0; +end; + +function ISCryptInstalled: Boolean; +begin + Result := NewFileExists(PathExtractPath(NewParamStr(0)) + 'iscrypt.dll'); +end; + +var + WindowsVersion: Cardinal; + +function WindowsVersionAtLeast(const AMajor, AMinor: Byte; const ABuild: Word): Boolean; +begin + Result := WindowsVersion >= Cardinal((AMajor shl 24) or (AMinor shl 16) or ABuild); +end; + +function IsWindows10: Boolean; +begin + Result := WindowsVersionAtLeast(10, 0); +end; + +function IsWindows11: Boolean; +begin + Result := WindowsVersionAtLeast(10, 0, 22000); +end; + +function GetDefaultThemeType: TThemeType; +var + K: HKEY; + Size, AppsUseLightTheme: DWORD; +begin + Result := ttModernLight; + if IsWindows10 and (RegOpenKeyExView(rvDefault, HKEY_CURRENT_USER, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize', 0, KEY_QUERY_VALUE, K) = ERROR_SUCCESS) then begin + Size := SizeOf(AppsUseLightTheme); + if (RegQueryValueEx(K, 'AppsUseLightTheme', nil, nil, @AppsUseLightTheme, @Size) = ERROR_SUCCESS) and (AppsUseLightTheme = 0) then + Result := ttModernDark; + RegCloseKey(K); + end; +end; + +function GetDefaultKeyMappingType: TKeyMappingType; +begin + Result := kmtDelphi; +end; + +procedure OpenDonateSite; +begin + ShellExecute(Application.Handle, 'open', 'https://jrsoftware.org/isdonate.php', nil, + nil, SW_SHOWNORMAL); +end; + +procedure OpenMailingListSite; +begin + ShellExecute(Application.Handle, 'open', 'https://jrsoftware.org/ismail.php', nil, + nil, SW_SHOWNORMAL); +end; + +procedure ReadMRUList(const MRUList: TStringList; const Section, Ident: String); +{ Loads a list of MRU items from the registry } +var + Ini: TConfigIniFile; + I: Integer; + S: String; +begin + Ini := TConfigIniFile.Create; + try + MRUList.Clear; + for I := 0 to MRUListMaxCount-1 do begin + S := Ini.ReadString(Section, Ident + IntToStr(I), ''); + if S <> '' then MRUList.Add(S); + end; + finally + Ini.Free; + end; +end; + +procedure ModifyMRUList(const MRUList: TStringList; const Section, Ident: String; + const AItem: String; const AddNewItem: Boolean; CompareProc: TMRUItemCompareProc); +var + I: Integer; + Ini: TConfigIniFile; + S: String; +begin + I := 0; + while I < MRUList.Count do begin + if CompareProc(MRUList[I], AItem) = 0 then + MRUList.Delete(I) + else + Inc(I); + end; + if AddNewItem then + MRUList.Insert(0, AItem); + while MRUList.Count > MRUListMaxCount do + MRUList.Delete(MRUList.Count-1); + + { Save new MRU items } + Ini := TConfigIniFile.Create; + try + { MRU list } + for I := 0 to MRUListMaxCount-1 do begin + if I < MRUList.Count then + S := MRUList[I] + else + S := ''; + Ini.WriteString(Section, Ident + IntToStr(I), S); + end; + finally + Ini.Free; + end; +end; + +procedure LoadConfigIniList(const AIni: TConfigIniFile; const ASection, AIdent: String; + const AList: TStringList; const ADelimiter: Char); +begin + if ASection = '' then + raise Exception.Create('ASection must be set'); + + var OldDelimiter := AList.Delimiter; + AList.Delimiter := ADelimiter; + try + AList.DelimitedText := AIni.ReadString(ASection, AIdent, ''); + finally + AList.Delimiter := OldDelimiter; + end; +end; + +procedure DeleteConfigIniList(const AIni: TConfigIniFile; const ASection, AIdent: String); +begin + if ASection = '' then + raise Exception.Create('ASection must be set'); + + AIni.DeleteKey(ASection, AIdent); +end; + +procedure SaveConfigIniList(const AIni: TConfigIniFile; const ASection, AIdent: String; + const AList: TStringList; const ADelimiter: Char); +begin + if AList.Count = 0 then begin + DeleteConfigIniList(AIni, ASection, AIdent); + Exit; + end; + + if ASection = '' then + raise Exception.Create('ASection must be set'); + + var OldDelimiter := AList.Delimiter; + AList.Delimiter := ADelimiter; + try + AIni.WriteString(ASection, AIdent, AList.DelimitedText); + finally + AList.Delimiter := OldDelimiter; + end; +end; + +procedure LoadKnownIncludedAndHiddenFiles(const AFilename: String; const IncludedFiles, HiddenFiles: TStringList); +begin + var Ini := TConfigIniFile.Create; + try + LoadConfigIniList(Ini, 'IncludedFilesHistory', AFilename, IncludedFiles, '*'); + LoadConfigIniList(Ini, 'HiddenFilesHistory', AFilename, HiddenFiles, '*'); + finally + Ini.Free; + end; +end; + +procedure SaveKnownIncludedAndHiddenFiles(const AFilename: String; const IncludedFiles, HiddenFiles: TStringList); +begin + var Ini := TConfigIniFile.Create; + try + SaveConfigIniList(Ini, 'IncludedFilesHistory', AFilename, IncludedFiles, '*'); + SaveConfigIniList(Ini, 'HiddenFilesHistory', AFilename, HiddenFiles, '*'); + finally + Ini.Free; + end; +end; + +procedure DeleteKnownIncludedAndHiddenFiles(const AFilename: String); +begin + var Ini := TConfigIniFile.Create; + try + DeleteConfigIniList(Ini, 'IncludedFilesHistory', AFilename); + DeleteConfigIniList(Ini, 'HiddenFilesHistory', AFilename); + finally + Ini.Free; + end; +end; + +procedure LoadBreakPointLines(const AFilename: String; const BreakPointLines: TStringList); +begin + var Ini := TConfigIniFile.Create; + try + LoadConfigIniList(Ini, 'BreakPointLines', AFilename, BreakPointLines, ','); + finally + Ini.Free; + end; +end; + +procedure SaveBreakPointLines(const AFilename: String; const BreakPointLines: TStringList); +begin + var Ini := TConfigIniFile.Create; + try + SaveConfigIniList(Ini, 'BreakPointLines', AFilename, BreakPointLines, ','); + finally + Ini.Free; + end; +end; + +procedure DeleteBreakPointLines(const AFilename: String); +begin + var Ini := TConfigIniFile.Create; + try + DeleteConfigIniList(Ini, 'BreakPointLines', AFilename); + finally + Ini.Free; + end; +end; + +procedure SetFakeShortCutText(const MenuItem: TMenuItem; const S: String); +begin + MenuItem.Caption := MenuItem.Caption + #9 + S; +end; + +procedure SetFakeShortCut(const MenuItem: TMenuItem; const Key: Word; + const Shift: TShiftState); +begin + SetFakeShortCutText(MenuItem, ShortCutToText(ShortCut(Key, Shift))); +end; + +procedure SaveTextToFile(const Filename: String; + const S: String; const SaveEncoding: TSaveEncoding); +var + AnsiMode: Boolean; + AnsiStr: AnsiString; + F: TTextFileWriter; +begin + AnsiMode := False; + if SaveEncoding = seAuto then begin + AnsiStr := AnsiString(S); + if S = String(AnsiStr) then + AnsiMode := True; + end; + + F := TTextFileWriter.Create(Filename, fdCreateAlways, faWrite, fsNone); + try + if AnsiMode then + F.WriteAnsi(AnsiStr) + else begin + F.UTF8WithoutBOM := SaveEncoding <> seUTF8WithBOM; + F.Write(S); + end; + finally + F.Free; + end; +end; + +procedure AddLines(const ListBox: TListBox; const S: String; const AObject: TObject; const LineBreaks: Boolean; const Prefix: TAddLinesPrefix; const PrefixParam: Cardinal); +var + ST: TSystemTime; + LineNumber: Cardinal; + + procedure AddLine(S: String); + var + TimestampPrefixTab: Boolean; + DC: HDC; + Size: TSize; + begin + TimestampPrefixTab := False; + case Prefix of + alpTimestamp: + begin + if LineNumber = 0 then begin + { Don't forget about ListBox's DrawItem if you change the format of the following timestamp. } + Insert(Format('[%.2u%s%.2u%s%.2u%s%.3u] ', [ST.wHour, FormatSettings.TimeSeparator, + ST.wMinute, FormatSettings.TimeSeparator, ST.wSecond, FormatSettings.DecimalSeparator, + ST.wMilliseconds]), S, 1); + end else begin + Insert(#9, S, 1); { Not actually painted - just for Ctrl+C } + TimestampPrefixTab := True; + end; + end; + alpCountdown: + begin + Insert(Format('[%.2d] ', [PrefixParam-LineNumber]), S, 1); + end; + end; + try + ListBox.TopIndex := ListBox.Items.AddObject(S, AObject); + except + on EOutOfResources do begin + ListBox.Clear; + SendMessage(ListBox.Handle, LB_SETHORIZONTALEXTENT, 0, 0); + ListBox.Items.Add(SCompilerStatusReset); + ListBox.TopIndex := ListBox.Items.AddObject(S, AObject); + end; + end; + DC := GetDC(0); + try + SelectObject(DC, ListBox.Font.Handle); + if TimestampPrefixTab then + GetTextExtentPoint(DC, PChar(S)+1, Length(S)-1, Size) + else + GetTextExtentPoint(DC, PChar(S), Length(S), Size); + finally + ReleaseDC(0, DC); + end; + Inc(Size.cx, 5); + if TimestampPrefixTab then + Inc(Size.cx, PrefixParam); + if Size.cx > SendMessage(ListBox.Handle, LB_GETHORIZONTALEXTENT, 0, 0) then + SendMessage(ListBox.Handle, LB_SETHORIZONTALEXTENT, Size.cx, 0); + Inc(LineNumber); + end; + +var + LineStart, I: Integer; + LastWasCR: Boolean; +begin + GetLocalTime(ST); + if LineBreaks then begin + LineNumber := 0; + LineStart := 1; + LastWasCR := False; + { Call AddLine for each line. CR, LF, and CRLF line breaks are supported. } + for I := 1 to Length(S) do begin + if S[I] = #13 then begin + AddLine(Copy(S, LineStart, I - LineStart)); + LineStart := I + 1; + LastWasCR := True; + end + else begin + if S[I] = #10 then begin + if not LastWasCR then + AddLine(Copy(S, LineStart, I - LineStart)); + LineStart := I + 1; + end; + LastWasCR := False; + end; + end; + AddLine(Copy(S, LineStart, Maxint)); + end else + AddLine(S); +end; + +procedure SetLowPriority(ALowPriority: Boolean; var SavePriorityClass: DWORD); +begin + if ALowPriority then begin + { Save current priority and change to 'low' } + if SavePriorityClass = 0 then + SavePriorityClass := GetPriorityClass(GetCurrentProcess); + SetPriorityClass(GetCurrentProcess, IDLE_PRIORITY_CLASS); + end + else begin + { Restore original priority } + if SavePriorityClass <> 0 then begin + SetPriorityClass(GetCurrentProcess, SavePriorityClass); + SavePriorityClass := 0; + end; + end; +end; + +function GetHelpFile: String; +begin + Result := PathExtractPath(NewParamStr(0)) + 'isetup.chm'; +end; + +function FindOptionsToSearchOptions(const FindOptions: TFindOptions): TScintFindOptions; +begin + Result := []; + if frMatchCase in FindOptions then + Include(Result, sfoMatchCase); + if frWholeWord in FindOptions then + Include(Result, sfoWholeWord); +end; + +procedure StartAddRemovePrograms; +var + Dir: String; + Wow64DisableWow64FsRedirectionFunc: function(var OldValue: Pointer): BOOL; stdcall; + Wow64RevertWow64FsRedirectionFunc: function(OldValue: Pointer): BOOL; stdcall; + RedirDisabled: Boolean; + RedirOldValue: Pointer; + StartupInfo: TStartupInfo; + ProcessInfo: TProcessInformation; +begin + Dir := GetSystemDir; + + FillChar(StartupInfo, SizeOf(StartupInfo), 0); + StartupInfo.cb := SizeOf(StartupInfo); + { Have to disable file system redirection because the 32-bit version of + appwiz.cpl is buggy on XP x64 RC2 -- it doesn't show any Change/Remove + buttons on 64-bit MSI entries, and it doesn't list non-MSI 64-bit apps + at all. } + Wow64DisableWow64FsRedirectionFunc := GetProcAddress(GetModuleHandle(kernel32), + 'Wow64DisableWow64FsRedirection'); + Wow64RevertWow64FsRedirectionFunc := GetProcAddress(GetModuleHandle(kernel32), + 'Wow64RevertWow64FsRedirection'); + RedirDisabled := Assigned(Wow64DisableWow64FsRedirectionFunc) and + Assigned(Wow64RevertWow64FsRedirectionFunc) and + Wow64DisableWow64FsRedirectionFunc(RedirOldValue); + try + Win32Check(CreateProcess(nil, PChar('"' + AddBackslash(Dir) + 'control.exe" appwiz.cpl'), + nil, nil, False, 0, nil, PChar(Dir), StartupInfo, ProcessInfo)); + finally + if RedirDisabled then + Wow64RevertWow64FsRedirectionFunc(RedirOldValue); + end; + CloseHandle(ProcessInfo.hProcess); + CloseHandle(ProcessInfo.hThread); +end; + +function GetSourcePath(const AFilename: String): String; +begin + if AFilename <> '' then + Result := PathExtractPath(AFilename) + else begin + { If the script was not saved, default to My Documents } + Result := GetShellFolderPath(CSIDL_PERSONAL); + if Result = '' then + raise Exception.Create('GetShellFolderPath failed'); + end; +end; + +function ReadScriptLines(const ALines: TStringList; const ReadFromFile: Boolean; + const ReadFromFileFilename: String; const NotReadFromFileMemo: TScintEdit): Integer; + + function ContainsNullChar(const S: String): Boolean; + var + I: Integer; + begin + Result := False; + for I := 1 to Length(S) do + if S[I] = #0 then begin + Result := True; + Break; + end; + end; + +var + F: TTextFileReader; + I: Integer; +begin + if ReadFromFile then begin + F := TTextFileReader.Create(ReadFromFileFilename, fdOpenExisting, faRead, fsRead); + try + while not F.Eof do + ALines.Add(F.ReadLine); + finally + F.Free; + end; + end + else begin + ALines.Capacity := NotReadFromFileMemo.Lines.Count; + ALines.Assign(NotReadFromFileMemo.Lines); + end; + + { Check for null characters } + for I := 0 to ALines.Count-1 do begin + if ContainsNullChar(ALines[I]) then begin + Result := I; + Exit; + end; + end; + Result := -1; +end; + +function CreateBitmapInfo(const Width, Height, BitCount: Integer): TBitmapInfo; +begin + ZeroMemory(@Result, SizeOf(Result)); + Result.bmiHeader.biSize := SizeOf(Result.bmiHeader); + Result.bmiHeader.biWidth := Width; + Result.bmiHeader.biHeight := Height; + Result.bmiHeader.biPlanes := 1; + Result.bmiHeader.biBitCount := BitCount; + Result.bmiHeader.biCompression := BI_RGB; +end; + +initialization + var OSVersionInfo: TOSVersionInfo; + OSVersionInfo.dwOSVersionInfoSize := SizeOf(OSVersionInfo); + GetVersionEx(OSVersionInfo); + WindowsVersion := (Byte(OSVersionInfo.dwMajorVersion) shl 24) or (Byte(OSVersionInfo.dwMinorVersion) shl 16) or Word(OSVersionInfo.dwBuildNumber); + +end. diff --git a/Projects/Src/CompInputQueryCombo.dfm b/Projects/Src/CompInputQueryCombo.dfm new file mode 100644 index 00000000..854628c6 --- /dev/null +++ b/Projects/Src/CompInputQueryCombo.dfm @@ -0,0 +1,62 @@ +object InputQueryCombo: TInputQueryCombo + Left = 330 + Top = 188 + BorderIcons = [biSystemMenu] + BorderStyle = bsDialog + Caption = '...' + ClientHeight = 73 + ClientWidth = 582 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = True + Position = poScreenCenter + OnCreate = FormCreate + DesignSize = ( + 582 + 73) + PixelsPerInch = 96 + TextHeight = 13 + object PromptLabel: TLabel + Left = 8 + Top = 11 + Width = 265 + Height = 13 + AutoSize = False + Caption = '...' + FocusControl = ValueComboBox + end + object OKButton: TButton + Left = 421 + Top = 43 + Width = 73 + Height = 23 + Anchors = [akRight, akBottom] + Caption = 'OK' + Default = True + ModalResult = 1 + TabOrder = 1 + end + object CancelButton: TButton + Left = 501 + Top = 43 + Width = 73 + Height = 23 + Anchors = [akRight, akBottom] + Cancel = True + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 2 + end + object ValueComboBox: TComboBox + Left = 279 + Top = 8 + Width = 295 + Height = 21 + Anchors = [akLeft, akTop, akRight] + TabOrder = 0 + end +end diff --git a/Projects/Src/CompInputQueryCombo.pas b/Projects/Src/CompInputQueryCombo.pas new file mode 100644 index 00000000..2ab498d4 --- /dev/null +++ b/Projects/Src/CompInputQueryCombo.pas @@ -0,0 +1,86 @@ +unit CompInputQueryCombo; + +{ + Inno Setup + Copyright (C) 1997-2020 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + InputQuery with a TComboBox instead of a TEdit +} + +interface + +uses + Classes, Controls, StdCtrls, UIStateForm; + +type + TInputQueryCombo = class(TUIStateForm) + OKButton: TButton; + CancelButton: TButton; + PromptLabel: TLabel; + ValueComboBox: TComboBox; + procedure FormCreate(Sender: TObject); + private + function GetValue: String; + procedure SetPrompt(const APrompt: String); + procedure SetValue(const AValue: String); + procedure SetValues(const AValues: TStringList); + public + property Prompt: String write SetPrompt; + property Value: String read GetValue write SetValue; + property Values: TStringList write SetValues; + end; + +function InputQueryCombo(const ACaption, APrompt: String; var AValue: String; const AValues: TStringList): Boolean; + +implementation + +uses + Windows, Messages, CompFunc, Forms; + +{$R *.DFM} + +function InputQueryCombo(const ACaption, APrompt: String; var AValue: String; const AValues: TStringList): Boolean; +begin + with TInputQueryCombo.Create(Application) do try + Caption := ACaption; + Prompt := APrompt; + Value := AValue; + Values := AValues; + if ShowModal = mrOk then begin + AValue := Value; + Result := True; + end else + Result := False; + finally + Free; + end; +end; + +procedure TInputQueryCombo.FormCreate(Sender: TObject); +begin + InitFormFont(Self); +end; + +function TInputQueryCombo.GetValue: String; +begin + Result := ValueComboBox.Text; +end; + +procedure TInputQueryCombo.SetPrompt(const APrompt: String); +begin + PromptLabel.Caption := APrompt; +end; + +procedure TInputQueryCombo.SetValue(const AValue: String); +begin + ValueComboBox.Text := AValue; +end; + +procedure TInputQueryCombo.SetValues(const AValues: TStringList); +begin + ValueComboBox.Items := AValues; +end; + +end. diff --git a/Projects/Src/CompInt.pas b/Projects/Src/CompInt.pas new file mode 100644 index 00000000..46a2f0ff --- /dev/null +++ b/Projects/Src/CompInt.pas @@ -0,0 +1,178 @@ +unit CompInt; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + Compiler interface +} + +interface + +uses + Windows; + +const + { Constants passed in Code parameter of callback function } + iscbReadScript = 1; { Sent when compiler needs the next script line } + iscbNotifyStatus = 2; { Sent to notify the application of compiler status } + iscbNotifyIdle = 3; { Sent at various intervals during the compilation } + iscbNotifySuccess = 4; { Sent when compilation succeeds } + iscbNotifyError = 5; { Sent when compilation fails or is aborted by the + application } + iscbNotifyPreproc = 6; { Sent to notify the application of preprocessor results } + + { Return values for callback function } + iscrSuccess = 0; { Return this for compiler to continue } + iscrRequestAbort = 1; { Return this to abort compilation immediately. + (When this value is returned, it is not necessary + to set any of the "out" fields in the + TCompilerCallbackData; the compiler will ignore + them.) } + + { Return values for ISDllCompileScript } + isceNoError = 0; { Successful } + isceInvalidParam = 1; { Bad parameters passed to function } + isceCompileFailure = 2; { There was an error compiling or it was aborted + by the application } + +type + { TCompilerCallbackData is a record passed to the callback function. The + fields which you may access vary depending on what Code was passed to the + callback function. } + TCompilerCallbackData = record + case Integer of + iscbReadScript: ( + Reset: BOOL; { [in] This field can be ignored in compiler + versions 3.0.1 and later. (Previous versions + of the compiler made multiple passes over the + script, and set Reset to True when it needed + to return to the beginning.) } + LineRead: PChar); { [out] Application returns pointer to the next + line it reads, or a NULL pointer if the end of + file is reached. Application is responsible for + allocating a buffer to hold the line; LineRead + is initially NULL when the callback function + is called. The pointer only needs to remain + valid until the next time the callback function + is called (i.e. the application may return the + same pointer each time). } + + iscbNotifyStatus: ( + StatusMsg: PChar; { [in] Contents of status message. } + Warning: BOOL); { [in] Warning indicator (new in 6.0.0) } + + iscbNotifyIdle: ( + CompressProgress: Cardinal; { [in] Amount compressed so far + (new in 4.1.6) } + CompressProgressMax: Cardinal; { [in] Maximum value of CompressProgress + (new in 4.1.6) } + SecondsRemaining: Integer; { [in] Estimated time remaining, or -1 + if not known (new in 5.1.13) } + BytesCompressedPerSecond: Cardinal); { [in] Average bytes compressed + per second (new in 5.1.13) } + + iscbNotifyPreproc: ( + PreprocessedScript: PChar; { [in] Preprocessed script (new in 6.1.0) } + IncludedFilenames: PChar); { [in] Names of #included files. Each name is + a null-terminated string, and the final + name is followed by an additional null + character (new in 6.1.0) } + + iscbNotifySuccess: ( + OutputExeFilename: PChar; { [in] The name of the resulting setup.exe, + or empty if output was disabled + (latter new in 5.5.5) } + DebugInfo: Pointer; { [in] Debug info (new in 3.0.0.1) } + DebugInfoSize: Cardinal); { [in] Size of debug info (new in 3.0.0.1) } + + iscbNotifyError: ( + ErrorMsg: PChar; { [in] The error message, or NULL if compilation + was aborted by the application. } + ErrorFilename: PChar; { [in] Filename in which the error occurred. This + is NULL if the file is the main script. } + ErrorLine: Integer); { [in] The line number the error occurred on. + Zero if the error doesn't apply to any + particular line. } + end; + + TCompilerCallbackProc = function(Code: Integer; + var Data: TCompilerCallbackData; AppData: Longint): Integer; stdcall; + + PCompileScriptParamsEx = ^TCompileScriptParamsEx; + TCompileScriptParamsEx = record + Size: Cardinal; { [in] Set to SizeOf(TCompileScriptParamsEx). } + CompilerPath: PChar; { [in] The "compiler:" directory. This is the + directory which contains the *.e32 files. If this + is set to NULL, the compiler will use the directory + containing the compiler DLL/EXE. } + SourcePath: PChar; { [in] The default source directory, and directory to + look in for #include files. Normally, this is + the directory containing the script file. This + cannot be NULL. } + CallbackProc: TCompilerCallbackProc; + { [in] The callback procedure which the compiler calls + to read the script and for status notification. } + AppData: Longint; { [in] Application-defined. AppData is passed to the + callback function. } + Options: PChar; { [in] Additional options. Each option is a + null-terminated string, and the final option is + followed by an additional null character. + If you do not wish to specify any options, set this + field to NULL or to point to a single null + character. + + Currently supported options: + + Output=(0|no|false|1|yes|true) + Enables or disables output. + OutputBaseFilename=[filename] + Overrides any OutputBaseFilename setting in the + script; causes the compiler to use [filename] + instead. + OutputDir=[path] + Overrides any output directory in the script; + causes the compiler to use [path] instead. + SignTool-[name]=[command] + Configures a SignTool with name [name] and command + [command]. + ISPP:[isppoption] + Configures an ISPP option. } + end; + + { The old TCompileScriptParams record. Use this in place of + TCompileScriptParamsEx if you need call ISCmplr.dll versions below + 5.0.5. It's the same except it lacks an Options field. } + TCompileScriptParams = record + Size: Cardinal; { [in] Set to SizeOf(TCompileScriptParams). } + CompilerPath: PChar; + SourcePath: PChar; + CallbackProc: TCompilerCallbackProc; + AppData: Longint; + end; + + PCompilerVersionInfo = ^TCompilerVersionInfo; + TCompilerVersionInfo = record + Title: PAnsiChar; { Name of compiler engine - 'Inno Setup' } + Version: PAnsiChar; { Version number text } + BinVersion: Cardinal; { Version number as an integer } + end; + +const + ISCmplrDLL = 'ISCmplr.dll'; + +{ The ISDllCompileScript function begins compilation of a script. See the above + description of the TCompileScriptParams record. Return value is one of the + isce* constants. } +function ISDllCompileScript(const Params: TCompileScriptParamsEx): Integer; + stdcall; external ISCmplrDLL name 'ISDllCompileScriptW'; + +{ The ISDllGetVersion returns a pointer to a TCompilerVersionInfo record which + contains information about the compiler version. } +function ISDllGetVersion: PCompilerVersionInfo; stdcall; external ISCmplrDLL; + +implementation + +end. diff --git a/Projects/Src/CompMsgBoxDesigner.dfm b/Projects/Src/CompMsgBoxDesigner.dfm new file mode 100644 index 00000000..f1e5ef49 --- /dev/null +++ b/Projects/Src/CompMsgBoxDesigner.dfm @@ -0,0 +1,724 @@ +object MsgBoxDesignerForm: TMsgBoxDesignerForm + Left = 0 + Top = 0 + BorderStyle = bsDialog + Caption = 'MsgBox/TaskDialogMsgBox Call Designer' + ClientHeight = 380 + ClientWidth = 548 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + OnCreate = FormCreate + DesignSize = ( + 548 + 380) + PixelsPerInch = 96 + TextHeight = 13 + object TaskInstructionLabel: TNewStaticText + Left = 18 + Top = 14 + Width = 50 + Height = 14 + Caption = 'Instruction' + TabOrder = 11 + end + object TaskInstructionText: TEdit + Left = 89 + Top = 10 + Width = 449 + Height = 21 + Anchors = [akLeft, akTop, akRight] + TabOrder = 1 + end + object TaskMessageLabel: TNewStaticText + Left = 18 + Top = 40 + Width = 49 + Height = 14 + Caption = 'Message' + TabOrder = 12 + end + object TaskMessageText: TEdit + Left = 89 + Top = 36 + Width = 449 + Height = 21 + Anchors = [akLeft, akTop, akRight] + TabOrder = 2 + end + object Button1Label: TNewStaticText + Left = 18 + Top = 66 + Width = 62 + Height = 14 + Caption = 'Text Button1' + TabOrder = 13 + end + object Button1Text: TEdit + Left = 89 + Top = 62 + Width = 159 + Height = 21 + TabOrder = 3 + end + object Button2Label: TNewStaticText + Left = 258 + Top = 67 + Width = 62 + Height = 14 + Caption = 'Text Button2' + TabOrder = 14 + end + object Button2Text: TEdit + Left = 334 + Top = 62 + Width = 204 + Height = 21 + Anchors = [akLeft, akTop, akRight] + TabOrder = 4 + end + object GroupBox1: TGroupBox + Left = 8 + Top = 8 + Width = 532 + Height = 81 + Anchors = [akLeft, akTop, akRight] + Caption = ' Message ' + TabOrder = 0 + DesignSize = ( + 532 + 81) + object MSGText: TMemo + Left = 7 + Top = 20 + Width = 519 + Height = 53 + Anchors = [akLeft, akTop, akRight, akBottom] + ScrollBars = ssVertical + TabOrder = 0 + OnKeyPress = MSGTextKeyPress + end + end + object GroupBox6: TGroupBox + Left = 8 + Top = 93 + Width = 240 + Height = 60 + Caption = ' Type' + TabOrder = 5 + object cb_Suppressible: TCheckBox + Left = 14 + Top = 24 + Width = 86 + Height = 17 + Caption = 'Suppressible' + TabOrder = 0 + OnClick = cb_SuppressibleClick + end + object cb_MsgBox: TRadioButton + Left = 115 + Top = 13 + Width = 115 + Height = 17 + Caption = 'MsgBox' + Checked = True + TabOrder = 1 + TabStop = True + OnClick = cb_MsgBoxClick + end + object cb_TaskDialogMsgBox: TRadioButton + Left = 115 + Top = 36 + Width = 115 + Height = 17 + Caption = 'TaskDialogMsgBox' + TabOrder = 2 + TabStop = True + OnClick = cb_TaskDialogMsgBoxClick + end + end + object GroupBox5: TGroupBox + Left = 258 + Top = 93 + Width = 282 + Height = 60 + Anchors = [akLeft, akTop, akRight] + Caption = ' Flags ' + TabOrder = 6 + object NewStaticText1: TNewStaticText + Left = 14 + Top = 26 + Width = 68 + Height = 14 + Caption = 'Default button' + TabOrder = 3 + end + object NewEdit1: TEdit + Left = 97 + Top = 22 + Width = 21 + Height = 21 + Alignment = taRightJustify + NumbersOnly = True + ReadOnly = True + TabOrder = 0 + Text = '1' + end + object UpDown1: TUpDown + Left = 118 + Top = 22 + Width = 16 + Height = 21 + Associate = NewEdit1 + Min = 1 + Max = 3 + Position = 1 + TabOrder = 1 + OnChanging = UpDown1Changing + end + object cb_MB_SETFOREGROUND: TCheckBox + Left = 140 + Top = 24 + Width = 135 + Height = 17 + Caption = 'MB_SETFOREGROUND' + TabOrder = 2 + end + end + object GroupBox2: TGroupBox + Left = 8 + Top = 157 + Width = 160 + Height = 174 + Anchors = [akLeft, akTop, akBottom] + Caption = ' Icon ' + TabOrder = 7 + DesignSize = ( + 160 + 174) + object IMGmbInformation: TImage + Left = 10 + Top = 23 + Width = 32 + Height = 32 + AutoSize = True + Picture.Data = { + 0954506E67496D61676589504E470D0A1A0A0000000D49484452000000200000 + 00200806000000737A7AF4000003A54944415478DAC5974D4F134118C767BBED + F62DC105696340494B4810D0848331DCA0A8C1C4C4183D889E163F01C40F60FC + 00A67E02DA937A32440FC6042DE8CD48E2453829B5221A0A02625FB6A55D9F67 + B6BBDD6D77BB03419D64E86CBBECEFBFCFFF99676638F29F1BC77A63E0E25D11 + 3EAE411F851E813ED670CB02F434F445E873F9F9073B4722A0068E23BCEA6B17 + 2B6DDDA41A0C131813C5E5511F52291157719BB87259C2EFADC17807E173D067 + 9C84700EF069F8B8B7DF1E15CBE1B344F104D41F14E35D8AF91AC65CF937F164 + 3F12F76E1AE1F741C4C30309D0DE5A118252E9E408A904C275AA03DCF8050F11 + 11BEBF0341B9A45D34381B780A423C2CF78E43988543C1B521DAE3CD2C1097BC + F3012E638D22AC0424002E39C1F9DC06F51C5B35108228859AE09A48AE5AD644 + 2441C094AD00F41CC21E2FF65D767C73F4B8F448A2DF08B713A4DC396409D741 + 1009DF9779B463C698139C018EA15F957B2F882C9E5B0AB0811345BDE00B59E2 + FDBA881644352B8C021290ED52A97B84C9736A417EA366419854FCA19670AD09 + 3FDE13F7AFB46E05677CFB42FF559175AAF17983007FB89603ADE1EA14CD117F + FA851E054D8004899728F64D30C1F18F67132D50F349B885160C3AC2B5812FF3 + 0A13720A042435018972F88C049D79AA3509383EC804A7FFBBB5423C3F97A90D + 9A80941C1D1F5393CF194E1F8249F8D84280039CDA87C9F8EDCD020888690294 + C2C00DBDB6B314191A8146010C706C5817FC9F9F1110C0E902F24393CC70DD02 + A3808E0126B816A5C0A7A75602D8E06A122ED7054CCE36E4406B3865360A289C + BE6EB0A0359C5AB0652380014E2D587D6E12909223B17A123AC0A905560218E0 + D8F8C226F1AE9B9330510EC1340C0D31C1F51C7872A72EA06390094EA3B7BD82 + DD340DA1108989627482098E0FA4116812E00CC7E65B834254DA351522B514F7 + 5D81521C7484EB1698040C30C1B97D28C59997E652ACD9B07F2C2295BACE3BC2 + 6D0538C071206497887B2F635E8C8C51907B6222CBC262127073D65C076CE07C + 1193EFADF5725C13310D16C48B914B0D53B2B9C2412DB7166003C7A9E75B7B0D + 16E4AD3724462BAA5E51927BC6541136E5952FE072BC49C7557FA7BA1F680187 + 37C7C46BBD253358910211C3F2A9518BE2641830786E80B36D4A0D22E2608754 + 3A71AEF6760787A3E7C2C612863D4958B7E50D42D483495B44448F2D774B3653 + 0D8B0D64FBE10E2656D1207834F38A6225D8453D87315138B7FA1008B34BDE25 + 2E58E7F9DC3A86FB688E661642FEFDE1F46FB73FA626C73F4C6061F500000000 + 49454E44AE426082} + end + object IMGmbConfirmation: TImage + Left = 10 + Top = 60 + Width = 32 + Height = 32 + AutoSize = True + Picture.Data = { + 0954506E67496D61676589504E470D0A1A0A0000000D49484452000000200000 + 00200806000000737A7AF4000004DF4944415478DAC5576D6C5355187E6FEF6E + BF966C774A5BB28DD18D05990CB798612689FB0205E38246493031C68E9825FE + 6341C5F8430331F84170FB4316FDD3256A42FC4118981817B0ED16FDE120D990 + 0F11EBC61873B485756EEB6D6FD7D6F79CBB76F7B6F7B67704F524273DF7F4E4 + 3CCF799FE7BCE71C06FEE7C2E81D68DD7588C79F97B0B66275626DCB1AE2C53A + 89D587F54CE4FC89F04321B002DC4BC093E6323E515201C9623B601B52064E9A + 242182213A0786A520B00BD3D80E13F033587B0A11610A801FC49F0F97CBAAF9 + B87D1BA438ABF4474A3E2AA5FCC636135F042E78158AE62709F81124D1B72602 + E955A78CC52EB1B2191256FB2A6A017079078B1131FEF50B125A1AD08A06A301 + EEC11037C66A3A30CC464D708310062629D2FEA499CF48221F4BE4314D79C110 + 0B8FE1677B360935026E04776981E36A800B5C811A6B045AEAAB60E3FA32DA7F + F98F19181C0B80E86884A48957448849C6D324069040972601A23986BD375ABB + 47159C186D3B7B038E773F0FCF346CCA91EED6DD39D87FF41B188D6F4612A58A + 889148986F9D270BE8917B82918113DA13B19A9DBC96E6ECD25D38DAC2C1FBAF + 3F07F38B020C5FF6C3AFFE19E8DC510F4F6C2AA76348FF96037D306BEF90C921 + 4DC20A4130DDF61109AAD352C809B8D1ED2EB1A2595373762940096C43B0EEBE + EF2064AC84146E4776E10EB89A4AE18B77F6D391EFF60FC2E7A32C9AD796014F + 17E3EC4528FA7B322305235FBDF0D85E3EDF56632301D82C8C833F5A0262F953 + 8ABF8D8131183DD649233132EE879D9F0C43FC913AA54629C94396C9EF335148 + 1370A1F1DCD1DADD9AE092040160C31339E0A470A1AB70E1BD16EA0D4AE0631F + C41F7D3C671C6998A72E104376218181340177DC5EEFC29A779F1323A96D3569 + 522FFCF665376C7494C1B1AF86E0034F0C12165BCE384AF6DE75E0EE5FA332A4 + 097862D51D6D92F9D4C1B3938C7C52CC78D0F3B4193E7BEB45DA53F7C671B861 + 6D96C8668153298919EF0C7B91407B9A404AA87B45B6BA3580DFBF09071AB98C + 014F9E1E819E6F6F4AE15701A791C4BC60F9F32C2001264320B2F5D5358373A1 + 6BD0F5A43503FEF5D04578B37F1862E53B34C1A5760AACFED36A04F483933CBF + 6F43084E1D7129C045C776652455C02966360161CBCB2A065307A7DB6E76147E + 3FF91A35DDB99FAFC0BE135E10D737155C79468289730A029E98B37DD58405C0 + 4931DFF682307898B6F7BCDD0F438BF5BA564E0A2B84C034A334A13B6EC36D68 + DBAA0B3C9B80A5F3238856EDD2054EFAB9B9EBA42AB6212622DE1DADDEAD0B9C + 4CE8B8F713CC9E3A2411D8FB29442B5B758153F2D39888C4794522925271ED0B + 988A8B0B824B93F832FD494CDFA2A3491738B38CA978EA07652A4ECBB05CEA74 + D1345B009C1463709CDCFD240278F48AB68682E0A4610C5E82A28529E561248F + 42ACAA9DA7A7581E70C9033E10CE1E5E95A0A2A520381B25E61B513F8E57481C + 44097AA3CE67B3B6A4129C4C4A245025A0014EB69E79FA479420A27E21914B81 + 572A57ACAA6D2597E7824B128CE18936BF2AC1BA86BCE0B87262BCFC57329914 + 1E24D118DBD0AA79FA29BF410FB8BE4BA98C442FCAE122D98D1EAB0F004E3437 + 062E91B00F80DE6B791611E96152E2E4C9ED46F5B6A4B1D548B241B73FD8C344 + 2D1A409E66269E4F149743D2B28E5EBD534C9134098699F8C180E73CBB3443C2 + FD709E662A44FEFBC7E9BF5DFE01E32FFB3F42F099B90000000049454E44AE42 + 6082} + end + object IMGmbError: TImage + Left = 10 + Top = 97 + Width = 32 + Height = 32 + AutoSize = True + Picture.Data = { + 0954506E67496D61676589504E470D0A1A0A0000000D49484452000000200000 + 00200806000000737A7AF40000033A4944415478DAD597DD4E135110C7678556 + 935E5883B12636E982893591160D91822602811B4D84F5014CE0D23B7D02F109 + F4CE4B487C001645A2494D8BC634944F294DFC82564193E2572536428BA933BB + 3DBBDDEE6E778950E2C92673F69493FF6FE6CCF967E1609F07F7DF023CB80103 + 18864BAF83D7EFC348CD00509CC7900A0679E97D71314DA11121D2B5021876B9 + 0E0D08423B40B108E2D814E4729B230830B8E70028DE8521D2D9D90CDE130DD2 + DADADA57987C9EA469374244F71A20E2F1B8BB7A7B5A34EBE167AF2093C94611 + A07BCF0058F6BDBD2DE039E6D6FC86E212C44EABB0538094D77B94EFBC7446FF + 23F6C2E48B241EC7B7340234EE3A00BB76427F08B00175E234B011417C18A7A9 + ED6B690B00C5A9DEA9D37EAFBBB5F5A4BCB16E53235EFC2343CDCE2DC3EB379F + B2205FCBEC6E010C399DF5B7FBFB42805101E02E4CC9E22FDB14807C7E1BC61E + C529DE4180A17F0660D90703BC3B10F0A91B0FFC06EE625C074015492C7D84C5 + A50FB6AA600740329D2B975B95EC4944AA402540E938F2856D9878326FCB9C38 + 0B719EB2EF68F74353D371455C39827280ED839ABD2BA90CC4A6DE025858B415 + C028662F50E7978B5B0314A5471C9FA12A8808706DC7003AD32913AF0E208BD3 + C8ACFF84702441535373AA06A05A6E85B839802ACE06012088A9451B0230D3A1 + C63BE27619974E07E0D489D3F891FD05134F17686A684E6600296C3ABE2374CA + B83C740BEAB7B40005A7D11F4A4F2CFE0E56D2EB8616AD0340F19B18EE0A7D6D + 7ACB2D894B1B2D01D4E3C8E5B6407C3C43D35B0871CF1440351D9F3BD0EC3315 + B706D0F7422289E6945CD5995325806CB957DB54D33110AF0E5034EC857CA100 + 63E37364521A8BE6CAC4790CF386D9EB6E01F5405EBB2201188BB3C544729555 + E11C33A77200F93B0FCFDE4A9C1ECE5109E0A82ACE8238314B3DA1583457123F + 4BD94B96DBE8B114973622807A04E7A198775A8AD3C0DB00B1E9F750AAC20203 + 88A0DBA1E9046D89DB03D08BB397703409992F1B9239718AE5F690E51EB625CE + 00CA17B500E6E214501CC293F25734018C62F68292BD0D71CBF52AE26C100082 + 880410F17A1BBA3A427E703AEA6A224EDF0BB1E96558FBFC3D4A0002AE8D42ED + 075DC7C17DFFEFF82F44FFE05EBAD2EA730000000049454E44AE426082} + end + object IMGmbCriticalError: TImage + Left = 10 + Top = 135 + Width = 32 + Height = 32 + AutoSize = True + Picture.Data = { + 0954506E67496D61676589504E470D0A1A0A0000000D49484452000000200000 + 00200806000000737A7AF40000022B4944415478DACD97312C035118C7BFD75E + A5AAD14B6B301818DA49824D24A235582C62B5B4BB049B8930D990D8AF8B552C + 16835624624362626030185468AA15DA9EEF6BEE5D9E7375774D79BEE4E5AECD + DDFBFFEEFB7FEFBB770C2407737BE16E22A6E26106C7048E7E1C49CB25791C77 + 388E71ECCF5D179EDB0260086F9278B7C2D4DE0E06D100033C878071F7870E50 + ACEAF084270FEF3A9D93F83E8E252710E620BE8887D5BEA04F4D847CD0E97397 + AD4A1DE0BA5C87FBB73A89AF21C4962700FED49D7E961E0AFB201670EDD49728 + 60462E4B75A8D4F46CB36C7C9BD910CF618A8747237E6851DB0CB2E7ECA546B6 + 5CE0CF9415C20E4043F1743BC46D20B20890690A409E63DA37C7D5F6898B1027 + CF35B26349AC0953C648FD2D3EB92A7ACEC211086D68F0B6BD02B59B2B5762FE + F8200417D6A1BC9C01BDF462FE4F358199200B06B815228086D5DE283A31BA76 + F6401919C3898AF03A3FEB0841E2740F0B7743F5FCB4718F185494B83A4C2B98 + F8F4935145B52E357142270837D7D2123D7AAA9A59E000692C3C8DBC6F75622F + A0540B58901904C872000D1B4D3A1E6ADE697E12F0224E71834D0A1B55C3060E + 90C3E24B3A351C3B215E276EC5298C62CC23408A03E85331C5D5D2B342340AC9 + 8338052DC9C3421510809900D33D8AB3BA0D048517711E078FFF0D40B605D28B + 50FA3294DE88E4B6626E83B49791980569AF630342DE8644B442DA964CB042DE + A6548090B32DB780C8F930B1CB06C8F834B301F9FB8FD3DF8E4F1B53543FEFB0 + D5E80000000049454E44AE426082} + end + object rb_mbInformation: TRadioButton + Left = 53 + Top = 31 + Width = 99 + Height = 17 + Anchors = [akLeft, akTop, akRight] + Caption = 'mbInformation' + Checked = True + TabOrder = 0 + TabStop = True + end + object rb_mbConfirmation: TRadioButton + Left = 53 + Top = 68 + Width = 99 + Height = 17 + Anchors = [akLeft, akTop, akRight] + Caption = 'mbConfirmation' + TabOrder = 1 + TabStop = True + end + object rb_mbError: TRadioButton + Left = 53 + Top = 105 + Width = 99 + Height = 17 + Anchors = [akLeft, akTop, akRight] + Caption = 'mbError' + TabOrder = 2 + TabStop = True + end + object rb_mbCriticalError: TRadioButton + Left = 53 + Top = 142 + Width = 99 + Height = 17 + Anchors = [akLeft, akTop, akRight] + Caption = 'mbCriticalError' + TabOrder = 3 + TabStop = True + end + end + object GroupBox3: TGroupBox + Left = 179 + Top = 157 + Width = 169 + Height = 174 + Anchors = [akLeft, akTop, akBottom] + Caption = ' Buttons ' + TabOrder = 8 + DesignSize = ( + 169 + 174) + object rbMB_OK: TRadioButton + Left = 14 + Top = 23 + Width = 147 + Height = 17 + Anchors = [akLeft, akTop, akRight] + Caption = 'MB_OK' + Checked = True + TabOrder = 0 + TabStop = True + OnClick = rbMB_OKClick + end + object rbMB_OKCANCEL: TRadioButton + Left = 14 + Top = 46 + Width = 147 + Height = 17 + Anchors = [akLeft, akTop, akRight] + Caption = 'MB_OKCANCEL' + TabOrder = 1 + TabStop = True + OnClick = rbMB_OKCANCELClick + end + object rbMB_YESNO: TRadioButton + Left = 14 + Top = 70 + Width = 147 + Height = 17 + Anchors = [akLeft, akTop, akRight] + Caption = 'MB_YESNO' + TabOrder = 2 + TabStop = True + OnClick = rbMB_YESNOClick + end + object rbMB_YESNOCANCEL: TRadioButton + Left = 14 + Top = 94 + Width = 147 + Height = 17 + Anchors = [akLeft, akTop, akRight] + Caption = 'MB_YESNOCANCEL' + TabOrder = 3 + TabStop = True + OnClick = rbMB_YESNOCANCELClick + end + object rbMB_RETRYCANCEL: TRadioButton + Left = 14 + Top = 118 + Width = 147 + Height = 17 + Anchors = [akLeft, akTop, akRight] + Caption = 'MB_RETRYCANCEL' + TabOrder = 4 + TabStop = True + OnClick = rbMB_RETRYCANCELClick + end + object rbMB_ABORTRETRYIGNORE: TRadioButton + Left = 14 + Top = 142 + Width = 147 + Height = 17 + Anchors = [akLeft, akTop, akRight] + Caption = 'MB_ABORTRETRYIGNORE' + TabOrder = 5 + TabStop = True + OnClick = rbMB_ABORTRETRYIGNOREClick + end + end + object GroupBox4: TGroupBox + Left = 359 + Top = 157 + Width = 181 + Height = 174 + Anchors = [akLeft, akTop, akBottom] + Caption = ' Return values ' + TabOrder = 9 + object cb_IDOK: TCheckBox + Left = 16 + Top = 23 + Width = 80 + Height = 17 + Caption = 'IDOK' + TabOrder = 0 + end + object cb_IDCANCEL: TCheckBox + Left = 16 + Top = 42 + Width = 80 + Height = 17 + Caption = 'IDCANCEL' + TabOrder = 1 + end + object cb_IDYES: TCheckBox + Left = 16 + Top = 62 + Width = 80 + Height = 17 + Caption = 'IDYES' + TabOrder = 2 + end + object cb_IDNO: TCheckBox + Left = 16 + Top = 82 + Width = 80 + Height = 17 + Caption = 'IDNO' + TabOrder = 3 + end + object cb_IDABORT: TCheckBox + Left = 16 + Top = 102 + Width = 80 + Height = 17 + Caption = 'IDABORT' + TabOrder = 4 + end + object cb_IDRETRY: TCheckBox + Left = 16 + Top = 122 + Width = 80 + Height = 17 + Caption = 'IDRETRY' + TabOrder = 5 + end + object cb_IDIGNORE: TCheckBox + Left = 16 + Top = 142 + Width = 80 + Height = 17 + Caption = 'IDIGNORE' + TabOrder = 6 + end + object rb_IDOK: TCheckBox + Left = 100 + Top = 23 + Width = 16 + Height = 17 + TabOrder = 7 + Visible = False + OnClick = rb_IDOKClick + end + object rb_IDCANCEL: TCheckBox + Left = 100 + Top = 42 + Width = 16 + Height = 17 + TabOrder = 8 + Visible = False + OnClick = rb_IDCANCELClick + end + object rb_IDYES: TCheckBox + Left = 100 + Top = 62 + Width = 16 + Height = 17 + TabOrder = 9 + Visible = False + OnClick = rb_IDYESClick + end + object rb_IDNO: TCheckBox + Left = 100 + Top = 82 + Width = 16 + Height = 17 + TabOrder = 10 + Visible = False + OnClick = rb_IDNOClick + end + object rb_IDABORT: TCheckBox + Left = 100 + Top = 102 + Width = 16 + Height = 17 + TabOrder = 11 + Visible = False + OnClick = rb_IDABORTClick + end + object rb_IDRETRY: TCheckBox + Left = 100 + Top = 122 + Width = 16 + Height = 17 + TabOrder = 12 + Visible = False + OnClick = rb_IDRETRYClick + end + object rb_IDIGNORE: TCheckBox + Left = 100 + Top = 142 + Width = 16 + Height = 17 + TabOrder = 13 + Visible = False + OnClick = rb_IDIGNOREClick + end + object cb_DefIDOK: TRadioButton + Left = 147 + Top = 23 + Width = 17 + Height = 17 + TabOrder = 14 + TabStop = True + Visible = False + end + object cb_DefIDCANCEL: TRadioButton + Left = 147 + Top = 42 + Width = 17 + Height = 17 + TabOrder = 15 + TabStop = True + Visible = False + end + object cb_DefIDYES: TRadioButton + Left = 147 + Top = 62 + Width = 17 + Height = 17 + TabOrder = 16 + TabStop = True + Visible = False + end + object cb_DefIDNO: TRadioButton + Left = 147 + Top = 82 + Width = 17 + Height = 17 + TabOrder = 17 + TabStop = True + Visible = False + end + object cb_DefIDABORT: TRadioButton + Left = 147 + Top = 102 + Width = 17 + Height = 17 + TabOrder = 18 + TabStop = True + Visible = False + end + object cb_DefIDRETRY: TRadioButton + Left = 147 + Top = 122 + Width = 17 + Height = 17 + TabOrder = 19 + TabStop = True + Visible = False + end + object cb_DefIDIGNORE: TRadioButton + Left = 147 + Top = 142 + Width = 17 + Height = 17 + TabOrder = 20 + TabStop = True + Visible = False + end + end + object Panel1: TPanel + Left = 0 + Top = 338 + Width = 548 + Height = 42 + Align = alBottom + BevelOuter = bvNone + TabOrder = 10 + DesignSize = ( + 548 + 42) + object Bevel1: TBevel + Left = 0 + Top = 0 + Width = 548 + Height = 3 + Align = alTop + Shape = bsBottomLine + ExplicitLeft = 168 + ExplicitWidth = 50 + end + object MBDButtonPreview: TButton + Left = 10 + Top = 11 + Width = 80 + Height = 25 + Anchors = [akLeft, akBottom] + Caption = '&Preview' + TabOrder = 0 + OnClick = MBDButtonPreviewClick + end + object MBDButtonOK: TButton + Left = 379 + Top = 11 + Width = 75 + Height = 25 + Anchors = [akRight, akBottom] + Caption = 'Insert' + Default = True + ModalResult = 1 + TabOrder = 1 + end + object MBDButtonCancel: TButton + Left = 463 + Top = 11 + Width = 75 + Height = 25 + Anchors = [akRight, akBottom] + Cancel = True + Caption = 'Cancel' + ModalResult = 2 + TabOrder = 2 + end + end +end diff --git a/Projects/Src/CompMsgBoxDesigner.pas b/Projects/Src/CompMsgBoxDesigner.pas new file mode 100644 index 00000000..1a002497 --- /dev/null +++ b/Projects/Src/CompMsgBoxDesigner.pas @@ -0,0 +1,1241 @@ +unit CompMsgBoxDesigner; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + MessageBox Designer form + + Originally contributed by leserg73 +} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + UIStateForm, StdCtrls, ExtCtrls, NewStaticText, ComCtrls, pngimage; + +type + TMsgBoxDesignerForm = class(TUIStateForm) + IMGmbInformation: TImage; + IMGmbConfirmation: TImage; + IMGmbError: TImage; + IMGmbCriticalError: TImage; + Panel1: TPanel; + GroupBox1: TGroupBox; + GroupBox2: TGroupBox; + MSGText: TMemo; + rb_mbInformation: TRadioButton; + rb_mbConfirmation: TRadioButton; + rb_mbError: TRadioButton; + rb_mbCriticalError: TRadioButton; + GroupBox3: TGroupBox; + MBDButtonOK: TButton; + MBDButtonCancel: TButton; + MBDButtonPreview: TButton; + Bevel1: TBevel; + rbMB_OK: TRadioButton; + rbMB_OKCANCEL: TRadioButton; + rbMB_YESNO: TRadioButton; + rbMB_YESNOCANCEL: TRadioButton; + rbMB_RETRYCANCEL: TRadioButton; + rbMB_ABORTRETRYIGNORE: TRadioButton; + GroupBox4: TGroupBox; + cb_IDOK: TCheckBox; + cb_IDCANCEL: TCheckBox; + cb_IDYES: TCheckBox; + cb_IDNO: TCheckBox; + cb_IDABORT: TCheckBox; + cb_IDRETRY: TCheckBox; + cb_IDIGNORE: TCheckBox; + GroupBox5: TGroupBox; + cb_MB_SETFOREGROUND: TCheckBox; + NewStaticText1: TNewStaticText; + NewEdit1: TEdit; + UpDown1: TUpDown; + GroupBox6: TGroupBox; + cb_MsgBox: TRadioButton; + cb_TaskDialogMsgBox: TRadioButton; + rb_IDOK: TCheckBox; + rb_IDCANCEL: TCheckBox; + rb_IDYES: TCheckBox; + rb_IDNO: TCheckBox; + rb_IDABORT: TCheckBox; + rb_IDRETRY: TCheckBox; + rb_IDIGNORE: TCheckBox; + TaskInstructionLabel: TNewStaticText; + TaskMessageLabel: TNewStaticText; + TaskInstructionText: TEdit; + TaskMessageText: TEdit; + Button1Text: TEdit; + Button2Text: TEdit; + Button1Label: TNewStaticText; + Button2Label: TNewStaticText; + cb_Suppressible: TCheckBox; + cb_DefIDOK: TRadioButton; + cb_DefIDCANCEL: TRadioButton; + cb_DefIDYES: TRadioButton; + cb_DefIDNO: TRadioButton; + cb_DefIDABORT: TRadioButton; + cb_DefIDRETRY: TRadioButton; + cb_DefIDIGNORE: TRadioButton; + procedure FormCreate(Sender: TObject); + procedure UpDown1Changing(Sender: TObject; var AllowChange: Boolean); + procedure rbMB_OKClick(Sender: TObject); + procedure rbMB_OKCANCELClick(Sender: TObject); + procedure rbMB_YESNOClick(Sender: TObject); + procedure rbMB_RETRYCANCELClick(Sender: TObject); + procedure rbMB_YESNOCANCELClick(Sender: TObject); + procedure rbMB_ABORTRETRYIGNOREClick(Sender: TObject); + procedure MBDButtonPreviewClick(Sender: TObject); + procedure cb_TaskDialogMsgBoxClick(Sender: TObject); + procedure cb_MsgBoxClick(Sender: TObject); + procedure rb_IDOKClick(Sender: TObject); + procedure rb_IDCANCELClick(Sender: TObject); + procedure rb_IDNOClick(Sender: TObject); + procedure rb_IDYESClick(Sender: TObject); + procedure rb_IDRETRYClick(Sender: TObject); + procedure rb_IDIGNOREClick(Sender: TObject); + procedure rb_IDABORTClick(Sender: TObject); + procedure cb_SuppressibleClick(Sender: TObject); + procedure MSGTextKeyPress(Sender: TObject; var Key: Char); + public + function GetText(TabWidth: Integer; UseTabCharacter: Boolean): String; + end; + +implementation + +uses + CmnFunc, CmnFunc2, CompFunc, TaskDialog, CompMsgs; + +{$R *.DFM} + +procedure TMsgBoxDesignerForm.FormCreate(Sender: TObject); +begin + InitFormFont(Self); + + cb_Suppressible.Checked := True; + MSGText.Lines[MSGText.CaretPos.Y] := ''; + MSGText.SelStart := MSGText.Perform(EM_LINEINDEX, 0, 0); + MSGText.SelLength := Length(MSGText.Lines[0]); + cb_IDCANCEL.Enabled := False; + cb_IDABORT.Enabled := False; + cb_IDRETRY.Enabled := False; + cb_IDIGNORE.Enabled := False; + cb_IDYES.Enabled := False; + cb_IDNO.Enabled := False; + NewStaticText1.Enabled := False; + NewEdit1.Enabled := False; + UpDown1.Enabled := False; + TaskInstructionLabel.Visible := False; + TaskMessageLabel.Visible := False; + TaskInstructionText.Visible := False; + TaskMessageText.Visible := False; + Button1Text.Visible := False; + Button2Text.Visible := False; + Button1Label.Visible := False; + Button2Label.Visible := False; +end; + +procedure TMsgBoxDesignerForm.rbMB_OKClick(Sender: TObject); +begin + cb_IDOK.Checked := False; + cb_IDCANCEL.Checked := False; + cb_IDABORT.Checked := False; + cb_IDRETRY.Checked := False; + cb_IDIGNORE.Checked := False; + cb_IDYES.Checked := False; + cb_IDNO.Checked := False; + cb_IDOK.Enabled := False; + cb_IDCANCEL.Enabled := False; + cb_IDABORT.Enabled := False; + cb_IDRETRY.Enabled := False; + cb_IDIGNORE.Enabled := False; + cb_IDYES.Enabled := False; + cb_IDNO.Enabled := False; + NewStaticText1.Enabled := False; + NewEdit1.Enabled := False; + NewEdit1.Text := '1'; + UpDown1.Enabled := False; + if cb_TaskDialogMsgBox.Checked then begin + rb_IDOK.Enabled := True; + rb_IDCANCEL.Enabled := False; + rb_IDABORT.Enabled := False; + rb_IDRETRY.Enabled := False; + rb_IDIGNORE.Enabled := False; + rb_IDYES.Enabled := False; + rb_IDNO.Enabled := False; + rb_IDOK.Checked := False; + rb_IDCANCEL.Checked := False; + rb_IDABORT.Checked := False; + rb_IDRETRY.Checked := False; + rb_IDIGNORE.Checked := False; + rb_IDYES.Checked := False; + rb_IDNO.Checked := False; + Button2Text.Enabled := False; + Button2Label.Enabled := False; + Button1Text.Enabled := True; + Button1Label.Enabled := True; + Button1Text.Text := 'OK'; + Button2Text.Text := ''; + end; + if cb_Suppressible.Checked then begin + cb_DefIDOK.Checked := True; + cb_DefIDCANCEL.Checked := False; + cb_DefIDYES.Checked := False; + cb_DefIDNO.Checked := False; + cb_DefIDABORT.Checked := False; + cb_DefIDRETRY.Checked := False; + cb_DefIDIGNORE.Checked := False; + cb_DefIDOK.Enabled := True; + cb_DefIDCANCEL.Enabled := False; + cb_DefIDYES.Enabled := False; + cb_DefIDNO.Enabled := False; + cb_DefIDABORT.Enabled := False; + cb_DefIDRETRY.Enabled := False; + cb_DefIDIGNORE.Enabled := False; + end; +end; + +procedure TMsgBoxDesignerForm.rbMB_YESNOClick(Sender: TObject); +begin + cb_IDOK.Checked := False; + cb_IDCANCEL.Checked := False; + cb_IDABORT.Checked := False; + cb_IDRETRY.Checked := False; + cb_IDIGNORE.Checked := False; + cb_IDYES.Checked := False; + cb_IDNO.Checked := False; + cb_IDOK.Enabled := False; + cb_IDCANCEL.Enabled := False; + cb_IDABORT.Enabled := False; + cb_IDRETRY.Enabled := False; + cb_IDIGNORE.Enabled := False; + cb_IDYES.Enabled := True; + cb_IDNO.Enabled := True; + if not cb_TaskDialogMsgBox.Checked then begin + NewStaticText1.Enabled := True; + NewEdit1.Enabled := True; + NewEdit1.Text := '1'; + UpDown1.Max := 2; + UpDown1.Enabled := True; + end; + if cb_TaskDialogMsgBox.Checked then begin + rb_IDOK.Enabled := False; + rb_IDCANCEL.Enabled := False; + rb_IDABORT.Enabled := False; + rb_IDRETRY.Enabled := False; + rb_IDIGNORE.Enabled := False; + rb_IDYES.Enabled := True; + rb_IDNO.Enabled := True; + rb_IDOK.Checked := False; + rb_IDCANCEL.Checked := False; + rb_IDABORT.Checked := False; + rb_IDRETRY.Checked := False; + rb_IDIGNORE.Checked := False; + rb_IDYES.Checked := False; + rb_IDNO.Checked := False; + Button2Text.Enabled := True; + Button2Label.Enabled := True; + Button1Text.Enabled := True; + Button1Label.Enabled := True; + Button1Text.Text := 'Yes'; + Button2Text.Text := 'No'; + end; + if cb_Suppressible.Checked then begin + cb_DefIDOK.Checked := False; + cb_DefIDCANCEL.Checked := False; + cb_DefIDYES.Checked := True; + cb_DefIDNO.Checked := False; + cb_DefIDABORT.Checked := False; + cb_DefIDRETRY.Checked := False; + cb_DefIDIGNORE.Checked := False; + cb_DefIDOK.Enabled := False; + cb_DefIDCANCEL.Enabled := False; + cb_DefIDYES.Enabled := True; + cb_DefIDNO.Enabled := True; + cb_DefIDABORT.Enabled := False; + cb_DefIDRETRY.Enabled := False; + cb_DefIDIGNORE.Enabled := False; + end; +end; + +procedure TMsgBoxDesignerForm.rbMB_OKCANCELClick(Sender: TObject); +begin + cb_IDOK.Checked := False; + cb_IDCANCEL.Checked := False; + cb_IDABORT.Checked := False; + cb_IDRETRY.Checked := False; + cb_IDIGNORE.Checked := False; + cb_IDYES.Checked := False; + cb_IDNO.Checked := False; + cb_IDOK.Enabled := True; + cb_IDCANCEL.Enabled := True; + cb_IDABORT.Enabled := False; + cb_IDRETRY.Enabled := False; + cb_IDIGNORE.Enabled := False; + cb_IDYES.Enabled := False; + cb_IDNO.Enabled := False; + if not cb_TaskDialogMsgBox.Checked then begin + NewStaticText1.Enabled := True; + NewEdit1.Enabled := True; + NewEdit1.Text := '1'; + UpDown1.Max := 2; + UpDown1.Enabled := True; + end; + if cb_TaskDialogMsgBox.Checked then begin + rb_IDOK.Enabled := True; + rb_IDCANCEL.Enabled := True; + rb_IDABORT.Enabled := False; + rb_IDRETRY.Enabled := False; + rb_IDIGNORE.Enabled := False; + rb_IDYES.Enabled := False; + rb_IDNO.Enabled := False; + rb_IDOK.Checked := False; + rb_IDCANCEL.Checked := False; + rb_IDABORT.Checked := False; + rb_IDRETRY.Checked := False; + rb_IDIGNORE.Checked := False; + rb_IDYES.Checked := False; + rb_IDNO.Checked := False; + Button2Text.Enabled := False; + Button2Label.Enabled := False; + Button1Text.Enabled := True; + Button1Label.Enabled := True; + Button1Text.Text := 'OK'; + Button2Text.Text := ''; + end; + if cb_Suppressible.Checked then begin + cb_DefIDOK.Checked := True; + cb_DefIDCANCEL.Checked := False; + cb_DefIDYES.Checked := False; + cb_DefIDNO.Checked := False; + cb_DefIDABORT.Checked := False; + cb_DefIDRETRY.Checked := False; + cb_DefIDIGNORE.Checked := False; + cb_DefIDOK.Enabled := True; + cb_DefIDCANCEL.Enabled := True; + cb_DefIDYES.Enabled := False; + cb_DefIDNO.Enabled := False; + cb_DefIDABORT.Enabled := False; + cb_DefIDRETRY.Enabled := False; + cb_DefIDIGNORE.Enabled := False; + end; +end; + +procedure TMsgBoxDesignerForm.rbMB_RETRYCANCELClick(Sender: TObject); +begin + cb_IDOK.Checked := False; + cb_IDCANCEL.Checked := False; + cb_IDABORT.Checked := False; + cb_IDRETRY.Checked := False; + cb_IDIGNORE.Checked := False; + cb_IDYES.Checked := False; + cb_IDNO.Checked := False; + cb_IDOK.Enabled := False; + cb_IDCANCEL.Enabled := True; + cb_IDABORT.Enabled := False; + cb_IDRETRY.Enabled := True; + cb_IDIGNORE.Enabled := False; + cb_IDYES.Enabled := False; + cb_IDNO.Enabled := False; + if not cb_TaskDialogMsgBox.Checked then begin + NewStaticText1.Enabled := True; + NewEdit1.Enabled := True; + NewEdit1.Text := '1'; + UpDown1.Max := 2; + UpDown1.Enabled := True; + end; + if cb_TaskDialogMsgBox.Checked then begin + rb_IDOK.Enabled := False; + rb_IDCANCEL.Enabled := True; + rb_IDABORT.Enabled := False; + rb_IDRETRY.Enabled := True; + rb_IDIGNORE.Enabled := False; + rb_IDYES.Enabled := False; + rb_IDNO.Enabled := False; + rb_IDOK.Checked := False; + rb_IDCANCEL.Checked := False; + rb_IDABORT.Checked := False; + rb_IDRETRY.Checked := False; + rb_IDIGNORE.Checked := False; + rb_IDYES.Checked := False; + rb_IDNO.Checked := False; + Button2Text.Enabled := False; + Button2Label.Enabled := False; + Button1Text.Enabled := True; + Button1Label.Enabled := True; + Button1Text.Text := 'Retry'; + Button2Text.Text := ''; + end; + if cb_Suppressible.Checked then begin + cb_DefIDOK.Checked := False; + cb_DefIDCANCEL.Checked := True; + cb_DefIDYES.Checked := False; + cb_DefIDNO.Checked := False; + cb_DefIDABORT.Checked := False; + cb_DefIDRETRY.Checked := False; + cb_DefIDIGNORE.Checked := False; + cb_DefIDOK.Enabled := False; + cb_DefIDCANCEL.Enabled := True; + cb_DefIDYES.Enabled := False; + cb_DefIDNO.Enabled := False; + cb_DefIDABORT.Enabled := False; + cb_DefIDRETRY.Enabled := True; + cb_DefIDIGNORE.Enabled := False; + end; +end; + +procedure TMsgBoxDesignerForm.rbMB_YESNOCANCELClick(Sender: TObject); +begin + cb_IDOK.Checked := False; + cb_IDCANCEL.Checked := False; + cb_IDABORT.Checked := False; + cb_IDRETRY.Checked := False; + cb_IDIGNORE.Checked := False; + cb_IDYES.Checked := False; + cb_IDNO.Checked := False; + cb_IDOK.Enabled := False; + cb_IDCANCEL.Enabled := True; + cb_IDABORT.Enabled := False; + cb_IDRETRY.Enabled := False; + cb_IDIGNORE.Enabled := False; + cb_IDYES.Enabled := True; + cb_IDNO.Enabled := True; + if not cb_TaskDialogMsgBox.Checked then begin + NewStaticText1.Enabled := True; + NewEdit1.Enabled := True; + NewEdit1.Text := '1'; + UpDown1.Max := 3; + UpDown1.Enabled := True; + end; + if cb_TaskDialogMsgBox.Checked then begin + rb_IDOK.Enabled := False; + rb_IDCANCEL.Enabled := True; + rb_IDABORT.Enabled := False; + rb_IDRETRY.Enabled := False; + rb_IDIGNORE.Enabled := False; + rb_IDYES.Enabled := True; + rb_IDNO.Enabled := True; + rb_IDOK.Checked := False; + rb_IDCANCEL.Checked := False; + rb_IDABORT.Checked := False; + rb_IDRETRY.Checked := False; + rb_IDIGNORE.Checked := False; + rb_IDYES.Checked := False; + rb_IDNO.Checked := False; + Button2Text.Enabled := True; + Button2Label.Enabled := True; + Button1Text.Enabled := True; + Button1Label.Enabled := True; + Button1Text.Text := 'Yes'; + Button2Text.Text := 'No'; + end; + if cb_Suppressible.Checked then begin + cb_DefIDOK.Checked := False; + cb_DefIDCANCEL.Checked := False; + cb_DefIDYES.Checked := True; + cb_DefIDNO.Checked := False; + cb_DefIDABORT.Checked := False; + cb_DefIDRETRY.Checked := False; + cb_DefIDIGNORE.Checked := False; + cb_DefIDOK.Enabled := False; + cb_DefIDCANCEL.Enabled := True; + cb_DefIDYES.Enabled := True; + cb_DefIDNO.Enabled := True; + cb_DefIDABORT.Enabled := False; + cb_DefIDRETRY.Enabled := False; + cb_DefIDIGNORE.Enabled := False; + end; +end; + +procedure TMsgBoxDesignerForm.rbMB_ABORTRETRYIGNOREClick(Sender: TObject); +begin + cb_IDOK.Checked := False; + cb_IDCANCEL.Checked := False; + cb_IDABORT.Checked := False; + cb_IDRETRY.Checked := False; + cb_IDIGNORE.Checked := False; + cb_IDYES.Checked := False; + cb_IDNO.Checked := False; + cb_IDOK.Enabled := False; + cb_IDCANCEL.Enabled := False; + cb_IDABORT.Enabled := True; + cb_IDRETRY.Enabled := True; + cb_IDIGNORE.Enabled := True; + cb_IDYES.Enabled := False; + cb_IDNO.Enabled := False; + if not cb_TaskDialogMsgBox.Checked then begin + NewStaticText1.Enabled := True; + NewEdit1.Enabled := True; + NewEdit1.Text := '1'; + UpDown1.Max := 3; + UpDown1.Enabled := True; + end; + if cb_TaskDialogMsgBox.Checked then begin + rb_IDOK.Enabled := False; + rb_IDCANCEL.Enabled := False; + rb_IDABORT.Enabled := True; + rb_IDRETRY.Enabled := True; + rb_IDIGNORE.Enabled := True; + rb_IDYES.Enabled := False; + rb_IDNO.Enabled := False; + rb_IDOK.Checked := False; + rb_IDCANCEL.Checked := False; + rb_IDABORT.Checked := False; + rb_IDRETRY.Checked := False; + rb_IDIGNORE.Checked := False; + rb_IDYES.Checked := False; + rb_IDNO.Checked := False; + Button2Text.Enabled := False; + Button2Label.Enabled := False; + Button1Text.Enabled := False; + Button1Label.Enabled := False; + Button1Text.Text := ''; + Button2Text.Text := ''; + end; + if cb_Suppressible.Checked then begin + cb_DefIDOK.Checked := False; + cb_DefIDCANCEL.Checked := False; + cb_DefIDYES.Checked := False; + cb_DefIDNO.Checked := False; + cb_DefIDABORT.Checked := False; + cb_DefIDRETRY.Checked := False; + cb_DefIDIGNORE.Checked := True; + cb_DefIDOK.Enabled := False; + cb_DefIDCANCEL.Enabled := False; + cb_DefIDYES.Enabled := False; + cb_DefIDNO.Enabled := False; + cb_DefIDABORT.Enabled := True; + cb_DefIDRETRY.Enabled := True; + cb_DefIDIGNORE.Enabled := True; + end; +end; + +procedure TMsgBoxDesignerForm.UpDown1Changing(Sender: TObject; var AllowChange: Boolean); +begin + AllowChange := True; +end; + +procedure TMsgBoxDesignerForm.cb_MsgBoxClick(Sender: TObject); +begin + IMGmbConfirmation.Visible := True; + cb_MB_SETFOREGROUND.Enabled := True; + cb_MB_SETFOREGROUND.Checked := False; + GroupBox1.Visible := True; + if not cb_Suppressible.Checked then begin + GroupBox4.Caption := ' Return values '; + cb_DefIDOK.Visible := False; + cb_DefIDCANCEL.Visible := False; + cb_DefIDYES.Visible := False; + cb_DefIDNO.Visible := False; + cb_DefIDABORT.Visible := False; + cb_DefIDRETRY.Visible := False; + cb_DefIDIGNORE.Visible := False; + end + else begin + GroupBox4.Caption := ' Return values / -------- / Default '; + cb_DefIDOK.Visible := True; + cb_DefIDCANCEL.Visible := True; + cb_DefIDYES.Visible := True; + cb_DefIDNO.Visible := True; + cb_DefIDABORT.Visible := True; + cb_DefIDRETRY.Visible := True; + cb_DefIDIGNORE.Visible := True; + end; + cb_IDOK.Checked := False; + cb_IDCANCEL.Checked := False; + cb_IDABORT.Checked := False; + cb_IDRETRY.Checked := False; + cb_IDIGNORE.Checked := False; + cb_IDYES.Checked := False; + cb_IDNO.Checked := False; + rb_IDOK.Visible := False; + rb_IDCANCEL.Visible := False; + rb_IDABORT.Visible := False; + rb_IDRETRY.Visible := False; + rb_IDIGNORE.Visible := False; + rb_IDYES.Visible := False; + rb_IDNO.Visible := False; + rb_mbInformation.Checked := True; + TaskInstructionLabel.Visible := False; + TaskMessageLabel.Visible := False; + TaskInstructionText.Visible := False; + TaskMessageText.Visible := False; + Button1Text.Visible := False; + Button2Text.Visible := False; + Button1Label.Visible := False; + Button2Label.Visible := False; + rbMB_OK.Checked := True; + rbMB_OKClick(Self); +end; + +procedure TMsgBoxDesignerForm.cb_SuppressibleClick(Sender: TObject); +begin + if cb_Suppressible.Checked then begin + cb_DefIDOK.Visible := True; + cb_DefIDCANCEL.Visible := True; + cb_DefIDYES.Visible := True; + cb_DefIDNO.Visible := True; + cb_DefIDABORT.Visible := True; + cb_DefIDRETRY.Visible := True; + cb_DefIDIGNORE.Visible := True; + if cb_MsgBox.Checked then + GroupBox4.Caption := ' Return values / -------- / Default '; + if cb_TaskDialogMsgBox.Checked then + GroupBox4.Caption := ' Return values / Shield / Default '; + end + else begin + cb_DefIDOK.Checked := False; + cb_DefIDCANCEL.Checked := False; + cb_DefIDYES.Checked := False; + cb_DefIDNO.Checked := False; + cb_DefIDABORT.Checked := False; + cb_DefIDRETRY.Checked := False; + cb_DefIDIGNORE.Checked := False; + cb_DefIDOK.Visible := False; + cb_DefIDCANCEL.Visible := False; + cb_DefIDYES.Visible := False; + cb_DefIDNO.Visible := False; + cb_DefIDABORT.Visible := False; + cb_DefIDRETRY.Visible := False; + cb_DefIDIGNORE.Visible := False; + if cb_MsgBox.Checked then + GroupBox4.Caption := ' Return values '; + if cb_TaskDialogMsgBox.Checked then + GroupBox4.Caption := ' Return values / Shield '; + end; + if rbMB_OK.Checked then rbMB_OKClick(Self); + if rbMB_OKCANCEL.Checked then rbMB_OKCANCELClick(Self); + if rbMB_YESNO.Checked then rbMB_YESNOClick(Self); + if rbMB_YESNOCANCEL.Checked then rbMB_YESNOCANCELClick(Self); + if rbMB_RETRYCANCEL.Checked then rbMB_RETRYCANCELClick(Self); + if rbMB_ABORTRETRYIGNORE.Checked then rbMB_ABORTRETRYIGNOREClick(Self); +end; + +procedure TMsgBoxDesignerForm.cb_TaskDialogMsgBoxClick(Sender: TObject); +begin + IMGmbConfirmation.Visible := False; + cb_MB_SETFOREGROUND.Enabled := False; + cb_MB_SETFOREGROUND.Checked := False; + GroupBox1.Visible := False; + if not cb_Suppressible.Checked then begin + GroupBox4.Caption := ' Return values / Shield '; + cb_DefIDOK.Visible := False; + cb_DefIDCANCEL.Visible := False; + cb_DefIDYES.Visible := False; + cb_DefIDNO.Visible := False; + cb_DefIDABORT.Visible := False; + cb_DefIDRETRY.Visible := False; + cb_DefIDIGNORE.Visible := False; + end + else begin + GroupBox4.Caption := ' Return values / Shield / Default '; + cb_DefIDOK.Visible := True; + cb_DefIDCANCEL.Visible := True; + cb_DefIDYES.Visible := True; + cb_DefIDNO.Visible := True; + cb_DefIDABORT.Visible := True; + cb_DefIDRETRY.Visible := True; + cb_DefIDIGNORE.Visible := True; + end; + cb_IDOK.Checked := False; + cb_IDCANCEL.Checked := False; + cb_IDABORT.Checked := False; + cb_IDRETRY.Checked := False; + cb_IDIGNORE.Checked := False; + cb_IDYES.Checked := False; + cb_IDNO.Checked := False; + rb_IDOK.Checked := False; + rb_IDCANCEL.Checked := False; + rb_IDABORT.Checked := False; + rb_IDRETRY.Checked := False; + rb_IDIGNORE.Checked := False; + rb_IDYES.Checked := False; + rb_IDNO.Checked := False; + rb_IDOK.Visible := True; + rb_IDCANCEL.Visible := True; + rb_IDABORT.Visible := True; + rb_IDRETRY.Visible := True; + rb_IDIGNORE.Visible := True; + rb_IDYES.Visible := True; + rb_IDNO.Visible := True; + rb_mbInformation.Checked := True; + TaskInstructionLabel.Visible := True; + TaskMessageLabel.Visible := True; + TaskInstructionText.Visible := True; + TaskMessageText.Visible := True; + Button1Text.Visible := True; + Button2Text.Visible := True; + Button1Label.Visible := True; + Button2Label.Visible := True; + TaskInstructionText.Text := 'Instruction Text'; + TaskMessageText.Text := 'Message Text'; + rbMB_OK.Checked := True; + rbMB_OKClick(Self); +end; + +procedure TMsgBoxDesignerForm.rb_IDOKClick(Sender: TObject); +begin + if rb_IDOK.Checked then + rb_IDCANCEL.Checked := False; +end; + +procedure TMsgBoxDesignerForm.rb_IDCANCELClick(Sender: TObject); +begin + if rb_IDCANCEL.Checked then begin + rb_IDOK.Checked := False; + rb_IDNO.Checked := False; + rb_IDYES.Checked := False; + rb_IDRETRY.Checked := False; + end; +end; + +procedure TMsgBoxDesignerForm.rb_IDYESClick(Sender: TObject); +begin + if rb_IDYES.Checked then begin + rb_IDNO.Checked := False; + rb_IDCANCEL.Checked := False; + end; +end; + +procedure TMsgBoxDesignerForm.rb_IDNOClick(Sender: TObject); +begin + if rb_IDNO.Checked then begin + rb_IDYES.Checked := False; + rb_IDCANCEL.Checked := False; + end; +end; + +procedure TMsgBoxDesignerForm.rb_IDRETRYClick(Sender: TObject); +begin + if rb_IDRETRY.Checked then begin + rb_IDCANCEL.Checked := False; + rb_IDABORT.Checked := False; + rb_IDIGNORE.Checked := False; + end; +end; + +procedure TMsgBoxDesignerForm.rb_IDIGNOREClick(Sender: TObject); +begin + if rb_IDIGNORE.Checked then begin + rb_IDABORT.Checked := False; + rb_IDRETRY.Checked := False; + end; +end; + +procedure TMsgBoxDesignerForm.rb_IDABORTClick(Sender: TObject); +begin + if rb_IDABORT.Checked then begin + rb_IDIGNORE.Checked := False; + rb_IDRETRY.Checked := False; + end; +end; + +procedure TMsgBoxDesignerForm.MBDButtonPreviewClick(Sender: TObject); +begin + { default value } + var Buttons := MB_OK; + var Typ := mbInformation; + + { icon and caption set } + var Caption: String; + if rb_mbInformation.Checked then begin + Caption := 'Info'; + Typ := mbInformation; + end; + if rb_mbConfirmation.Checked then begin + Caption := 'Confirm'; + Typ := mbConfirmation; + end; + if rb_mbError.Checked then begin + Caption := 'Error'; + Typ := mbError; + end; + if rb_mbCriticalError.Checked then begin + Caption := 'Fatal Error'; + Typ := mbCriticalError; + end; + + { button type set } + if rbMB_OK.Checked then Buttons := MB_OK; + if rbMB_OKCANCEL.Checked then Buttons := MB_OKCANCEL; + if rbMB_YESNO.Checked then Buttons := MB_YESNO; + if rbMB_YESNOCANCEL.Checked then Buttons := MB_YESNOCANCEL; + if rbMB_RETRYCANCEL.Checked then Buttons := MB_RETRYCANCEL; + if rbMB_ABORTRETRYIGNORE.Checked then Buttons := MB_ABORTRETRYIGNORE; + + if cb_MsgBox.Checked then begin + if MSGText.GetTextLen = 0 then + MSGText.Lines.Add('Your message text.'); + { MessageBox with DefButton } + if NewEdit1.Text = '1' then + MsgBox(MSGText.Lines.GetText, Caption, Typ, Buttons); + if NewEdit1.Text = '2' then + MsgBox(MSGText.Lines.GetText, Caption, Typ, Buttons or MB_DEFBUTTON2); + if NewEdit1.Text = '3' then + MsgBox(MSGText.Lines.GetText, Caption, Typ, Buttons or MB_DEFBUTTON3); + { MessageBox with DefButton and Flag MB_SETFOREGROUND } + if (NewEdit1.Text = '1') and (cb_MB_SETFOREGROUND.Checked) then + MsgBox(MSGText.Lines.GetText, Caption, Typ, Buttons or MB_SETFOREGROUND); + if (NewEdit1.Text = '2') and (cb_MB_SETFOREGROUND.Checked) then + MsgBox(MSGText.Lines.GetText, Caption, Typ, Buttons or MB_DEFBUTTON2 or MB_SETFOREGROUND); + if (NewEdit1.Text = '3') and (cb_MB_SETFOREGROUND.Checked) then + MsgBox(MSGText.Lines.GetText, Caption, Typ, Buttons or MB_DEFBUTTON3 or MB_SETFOREGROUND); + end else if cb_TaskDialogMsgBox.Checked then begin + { create ButtonLabels array } + var ButtonLabels: TArray; + if rbMB_YESNO.Checked or rbMB_YESNOCANCEL.Checked then + ButtonLabels := TArray.Create(Button1Text.Text, Button2Text.Text) + else if rbMB_ABORTRETRYIGNORE.Checked then + ButtonLabels := TArray.Create('Retry', 'Ignore', 'Abort') + else + ButtonLabels := TArray.Create(Button1Text.Text); + + { get Shield Flag value } + var ShieldButton := 0; + if rbMB_OK.Checked and rb_IDOK.Checked then ShieldButton := IDOK; + if rbMB_OKCANCEL.Checked and rb_IDOK.Checked then ShieldButton := IDOK; + if rbMB_OKCANCEL.Checked and rb_IDCANCEL.Checked then ShieldButton := IDCANCEL; + if rbMB_YESNO.Checked and rb_IDYES.Checked then ShieldButton := IDYES; + if rbMB_YESNO.Checked and rb_IDNO.Checked then ShieldButton := IDNO; + if rbMB_YESNOCANCEL.Checked and rb_IDYES.Checked then ShieldButton := IDYES; + if rbMB_YESNOCANCEL.Checked and rb_IDNO.Checked then ShieldButton := IDNO; + if rbMB_YESNOCANCEL.Checked and rb_IDCANCEL.Checked then ShieldButton := IDCANCEL; + if rbMB_RETRYCANCEL.Checked and rb_IDRETRY.Checked then ShieldButton := IDRETRY; + if rbMB_RETRYCANCEL.Checked and rb_IDCANCEL.Checked then ShieldButton := IDCANCEL; + if rbMB_ABORTRETRYIGNORE.Checked and rb_IDRETRY.Checked then ShieldButton := IDRETRY; + if rbMB_ABORTRETRYIGNORE.Checked and rb_IDABORT.Checked then ShieldButton := IDABORT; + if rbMB_ABORTRETRYIGNORE.Checked and rb_IDIGNORE.Checked then ShieldButton := IDIGNORE; + + { TaskDialogMsgBox(Icon, Instruction, Text, Caption, Typ, Buttons, ButtonLabels, ShieldButton) } + TaskDialogMsgBox('', TaskInstructionText.Text, TaskMessageText.Text, Caption, + Typ, Buttons, ButtonLabels, ShieldButton); + end; +end; + +procedure TMsgBoxDesignerForm.MSGTextKeyPress(Sender: TObject; var Key: Char); +begin + if Key = #27 then begin + MBDButtonCancel.Click; + Key := #0; + end; +end; + +function TMsgBoxDesignerForm.GetText(TabWidth: Integer; UseTabCharacter: Boolean): String; + + function TextTab: String; + begin + if UseTabCharacter then + Result := #9 + else + Result := Format('%*s', [TabWidth, '']); + end; + + function TextUserClicked(IDButton: String): String; + begin + Result := 'user clicked ' + StringReplace(IDButton, 'ID', '', []) + end; + + function TextCase(IDButton: String): String; + begin + Result := TextTab + IDButton +': { ' + TextUserClicked(IDButton) + ' };'; + end; + + function TextCall(ButtonCount: Integer; SCall, IDButton, IDButton2, IDButton3: String): String; + begin + case ButtonCount of + 0: Result := SCall + ';'; + 1: Result := 'if ' + SCall + ' = ' + IDButton + ' then' + SNewLine + + 'begin' + SNewLine + + TextTab + '// ' + TextUserClicked(IDButton) + SNewLine + + 'end;'; + 2, 3: + begin + Result := 'case ' + SCall + ' of ' + SNewLine + + TextCase(IDButton) + SNewLine + + TextCase(IDButton2) + SNewLine; + if ButtonCount = 3 then + Result := Result + TextCase(IDButton3) + SNewLine; + Result := Result + 'end;'; + end; + end; + end; + + { MsgBox / SuppressibleMsgBox } + function TextMsgBox(ButtonCount: Integer; Caption, Typ, Buttons, + IDButton, IDButton2, IDButton3: String): String; + begin + var SMsgBox: String; + if not cb_Suppressible.Checked then + SMsgBox := 'MsgBox' + else + SMsgBox := 'SuppressibleMsgBox'; + //Buttons also contains Default if suppressible, pre-separated by a comma (but ButtonCount does *not* include this) + SMsgBox := SMsgBox + '(''' + Caption + ''', ' + Typ + ', ' + Buttons + ')'; + Result := TextCall(ButtonCount, SMsgBox, IDButton, IDButton2, IDButton3); + end; + + { TaskDialogMsgBox / SuppressibleTaskDialogMsgBox } + function TextTaskDialog(ButtonCount: Integer; InstructionAndText, Typ, Buttons, + ButtonLabels, ShieldButton, IDButton, IDButton2, IDButton3: String): String; + begin + var STaskDialog: String; + if not cb_Suppressible.Checked then + STaskDialog := 'TaskDialogMsgBox' + else + STaskDialog := 'SuppressibleTaskDialogMsgBox'; + //InstructionAndText contains both Instruction and Text, pre-separated by a quote, a comma and another quote + //ButtonLabels contains all labels, also pre-separated by the above + //ShieldButton also contains Default if suppressible, pre-separated by a comma (but ButtonCount does *not* include this) + STaskDialog := STaskDialog+ '(''' + InstructionAndText + ''', ' + Typ + ', ' + Buttons + ', [''' + ButtonLabels + '''], ' + ShieldButton + ')'; + Result := TextCall(ButtonCount, STaskDialog, IDButton, IDButton2, IDButton3); + end; + +begin + { default value } + var ButtonCount := 0; + var Buttons := 'MB_OK'; + var Typ := 'mbInformation'; + var ShieldButton: String := '0'; + var SuppressibleDefault := ''; + + { make a string with Default parameter for Suppressible* calls } + if cb_Suppressible.Checked then begin + if cb_DefIDOK.Checked then SuppressibleDefault := ', IDOK'; + if cb_DefIDCANCEL.Checked then SuppressibleDefault := ', IDCANCEL'; + if cb_DefIDYES.Checked then SuppressibleDefault := ', IDYES'; + if cb_DefIDNO.Checked then SuppressibleDefault := ', IDNO'; + if cb_DefIDABORT.Checked then SuppressibleDefault := ', IDABORT'; + if cb_DefIDRETRY.Checked then SuppressibleDefault := ', IDRETRY'; + if cb_DefIDIGNORE.Checked then SuppressibleDefault := ', IDIGNORE'; + end; + + { icon and caption set } + if rb_mbInformation.Checked then begin + Typ := 'mbInformation'; + end; + if rb_mbConfirmation.Checked then begin + Typ := 'mbConfirmation'; + end; + if rb_mbError.Checked then begin + Typ := 'mbError'; + end; + if rb_mbCriticalError.Checked then begin + Typ := 'mbCriticalError'; + end; + + { button type set } + if rbMB_OK.Checked then Buttons := 'MB_OK'; + if rbMB_OKCANCEL.Checked then Buttons := 'MB_OKCANCEL'; + if rbMB_YESNO.Checked then Buttons := 'MB_YESNO'; + if rbMB_YESNOCANCEL.Checked then Buttons := 'MB_YESNOCANCEL'; + if rbMB_RETRYCANCEL.Checked then Buttons := 'MB_RETRYCANCEL'; + if rbMB_ABORTRETRYIGNORE.Checked then Buttons := 'MB_ABORTRETRYIGNORE'; + + var ModeMsg: Integer; + var CaptionOrInstructionAndText: String; + var ButtonLabels: String; + + if cb_MsgBox.Checked then begin + { MsgBox(Text, Typ, Buttons); } + ModeMsg := 0; + + { MessageBox with DefButton and Flag MB_SETFOREGROUND } + if (rbMB_OK.Checked) and (cb_MB_SETFOREGROUND.Checked) then + Buttons := 'MB_OK or MB_SETFOREGROUND'; + + if (rbMB_OKCANCEL.Checked) and (NewEdit1.Text = '2') then + Buttons := 'MB_OKCANCEL or MB_DEFBUTTON2'; + { MessageBox with DefButton and Flag MB_SETFOREGROUND } + if (rbMB_OKCANCEL.Checked) and (cb_MB_SETFOREGROUND.Checked) then + Buttons := 'MB_OKCANCEL or MB_SETFOREGROUND'; + if (rbMB_OKCANCEL.Checked) and (NewEdit1.Text = '2') and (cb_MB_SETFOREGROUND.Checked) then + Buttons := 'MB_OKCANCEL or MB_DEFBUTTON2 or MB_SETFOREGROUND'; + + if (rbMB_YESNO.Checked) and (NewEdit1.Text = '2') then + Buttons := 'MB_YESNO or MB_DEFBUTTON2'; + { MessageBox with DefButton and Flag MB_SETFOREGROUND } + if (rbMB_YESNO.Checked) and (cb_MB_SETFOREGROUND.Checked) then + Buttons := 'MB_YESNO or MB_SETFOREGROUND'; + if (rbMB_YESNO.Checked) and (NewEdit1.Text = '2') and (cb_MB_SETFOREGROUND.Checked) then + Buttons := 'MB_YESNO or MB_DEFBUTTON2 or MB_SETFOREGROUND'; + + if (rbMB_RETRYCANCEL.Checked) and (NewEdit1.Text = '2') then + Buttons := 'MB_RETRYCANCEL or MB_DEFBUTTON2'; + { MessageBox with DefButton and Flag MB_SETFOREGROUND } + if (rbMB_RETRYCANCEL.Checked) and (cb_MB_SETFOREGROUND.Checked) then + Buttons := 'MB_RETRYCANCEL or MB_SETFOREGROUND'; + if (rbMB_RETRYCANCEL.Checked) and (NewEdit1.Text = '2') and (cb_MB_SETFOREGROUND.Checked) then + Buttons := 'MB_RETRYCANCEL or MB_DEFBUTTON2 or MB_SETFOREGROUND'; + + if (rbMB_YESNOCANCEL.Checked) and (NewEdit1.Text = '2') then + Buttons := 'MB_YESNOCANCEL or MB_DEFBUTTON2'; + if (rbMB_YESNOCANCEL.Checked) and (NewEdit1.Text = '3') then + Buttons := 'MB_YESNOCANCEL or MB_DEFBUTTON3'; + { MessageBox with DefButton and Flag MB_SETFOREGROUND } + if (rbMB_YESNOCANCEL.Checked) and (cb_MB_SETFOREGROUND.Checked) then + Buttons := 'MB_YESNOCANCEL or MB_SETFOREGROUND'; + if (rbMB_YESNOCANCEL.Checked) and (NewEdit1.Text = '2') and (cb_MB_SETFOREGROUND.Checked) then + Buttons := 'MB_YESNOCANCEL or MB_DEFBUTTON2 or MB_SETFOREGROUND'; + if (rbMB_YESNOCANCEL.Checked) and (NewEdit1.Text = '3') and (cb_MB_SETFOREGROUND.Checked) then + Buttons := 'MB_YESNOCANCEL or MB_DEFBUTTON3 or MB_SETFOREGROUND'; + + if (rbMB_ABORTRETRYIGNORE.Checked) and (NewEdit1.Text = '2') then + Buttons := 'MB_ABORTRETRYIGNORE or MB_DEFBUTTON2'; + if (rbMB_ABORTRETRYIGNORE.Checked) and (NewEdit1.Text = '3') then + Buttons := 'MB_ABORTRETRYIGNORE or MB_DEFBUTTON3'; + { MessageBox with DefButton and Flag MB_SETFOREGROUND } + if (rbMB_ABORTRETRYIGNORE.Checked) and (cb_MB_SETFOREGROUND.Checked) then + Buttons := 'MB_ABORTRETRYIGNORE or MB_SETFOREGROUND'; + if (rbMB_ABORTRETRYIGNORE.Checked) and (NewEdit1.Text = '2') and (cb_MB_SETFOREGROUND.Checked) then + Buttons := 'MB_ABORTRETRYIGNORE or MB_DEFBUTTON2 or MB_SETFOREGROUND'; + if (rbMB_ABORTRETRYIGNORE.Checked) and (NewEdit1.Text = '3') and (cb_MB_SETFOREGROUND.Checked) then + Buttons := 'MB_ABORTRETRYIGNORE or MB_DEFBUTTON3 or MB_SETFOREGROUND'; + + { Suppressible msg } + if cb_Suppressible.Checked then Buttons := Buttons + SuppressibleDefault; + + { replace in a message string escape /r/n } + CaptionOrInstructionAndText := StringReplace(MSGText.Lines.GetText, SNewLine, '''#13#10''', [rfReplaceAll]); + end else begin + { TaskDialogMsgBox(TaskInstructionText.Text, TaskMessageText.Text, Typ, Buttons, ButtonLabels, ShieldButton) } + ModeMsg := 1; + + { create ButtonLabels array } + if rbMB_YESNO.Checked or rbMB_YESNOCANCEL.Checked then + ButtonLabels := Button1Text.Text + ''', ''' + Button2Text.Text + else if rbMB_ABORTRETRYIGNORE.Checked then + ButtonLabels := 'Retry'', ''Ignore'', ''Abort' + else + ButtonLabels := Button1Text.Text; + + { get Shield Flag value } + if rbMB_OK.Checked and rb_IDOK.Checked then ShieldButton := 'IDOK'; + if rbMB_OKCANCEL.Checked and rb_IDOK.Checked then ShieldButton := 'IDOK'; + if rbMB_OKCANCEL.Checked and rb_IDCANCEL.Checked then ShieldButton := 'IDCANCEL'; + if rbMB_YESNO.Checked and rb_IDYES.Checked then ShieldButton := 'IDYES'; + if rbMB_YESNO.Checked and rb_IDNO.Checked then ShieldButton := 'IDNO'; + if rbMB_YESNOCANCEL.Checked and rb_IDYES.Checked then ShieldButton := 'IDYES'; + if rbMB_YESNOCANCEL.Checked and rb_IDNO.Checked then ShieldButton := 'IDNO'; + if rbMB_YESNOCANCEL.Checked and rb_IDCANCEL.Checked then ShieldButton := 'IDCANCEL'; + if rbMB_RETRYCANCEL.Checked and rb_IDRETRY.Checked then ShieldButton := 'IDRETRY'; + if rbMB_RETRYCANCEL.Checked and rb_IDCANCEL.Checked then ShieldButton := 'IDCANCEL'; + if rbMB_ABORTRETRYIGNORE.Checked and rb_IDRETRY.Checked then ShieldButton := 'IDRETRY'; + if rbMB_ABORTRETRYIGNORE.Checked and rb_IDABORT.Checked then ShieldButton := 'IDABORT'; + if rbMB_ABORTRETRYIGNORE.Checked and rb_IDIGNORE.Checked then ShieldButton := 'IDIGNORE'; + + { Suppressible msg } + if cb_Suppressible.Checked then ShieldButton := ShieldButton + SuppressibleDefault; + + CaptionOrInstructionAndText := TaskInstructionText.Text + ''', ''' + TaskMessageText.Text; + end; + + var IDButton, IDButton2, IDButton3: String; + var Text: String; + + { selected button OK } + if (cb_IDOK.Checked and not cb_IDCANCEL.Checked) then begin + IDButton := 'IDOK'; + ButtonCount := 1; + case ModeMsg of + 0: Text := TextMsgBox(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, IDButton, '', ''); + 1: Text := TextTaskDialog(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, ButtonLabels, ShieldButton, IDButton, '', ''); + end; + end + + { selected button CANCEL } + else if (cb_IDCANCEL.Checked and not cb_IDOK.Checked and not cb_IDRETRY.Checked and not cb_IDYES.Checked and not cb_IDNO.Checked and not cb_IDABORT.Checked and not cb_IDIGNORE.Checked) then begin + IDButton := 'IDCANCEL'; + ButtonCount := 1; + case ModeMsg of + 0: Text := TextMsgBox(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, IDButton, '', ''); + 1: Text := TextTaskDialog(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, ButtonLabels, ShieldButton, IDButton, '', ''); + end; + end + + { selected button OK and CANCEL } + else if (cb_IDCANCEL.Checked and cb_IDOK.Checked and not cb_IDRETRY.Checked and not cb_IDYES.Checked and not cb_IDNO.Checked) then begin + IDButton := 'IDOK'; + IDButton2 := 'IDCANCEL'; + ButtonCount := 2; + case ModeMsg of + 0: Text := TextMsgBox(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, IDButton, IDButton2, ''); + 1: Text := TextTaskDialog(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, ButtonLabels, ShieldButton, IDButton, IDButton2, ''); + end; + end + + { selected button YES } + else if (cb_IDYES.Checked and not cb_IDNO.Checked and not cb_IDCANCEL.Checked) then begin + IDButton := 'IDYES'; + ButtonCount := 1; + case ModeMsg of + 0: Text := TextMsgBox(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, IDButton, '', ''); + 1: Text := TextTaskDialog(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, ButtonLabels, ShieldButton, IDButton, '', ''); + end; + end + + { selected button NO } + else if (cb_IDNO.Checked and not cb_IDYES.Checked and not cb_IDCANCEL.Checked) then begin + IDButton := 'IDNO'; + ButtonCount := 1; + case ModeMsg of + 0: Text := TextMsgBox(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, IDButton, '', ''); + 1: Text := TextTaskDialog(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, ButtonLabels, ShieldButton, IDButton, '', ''); + end; + end + + { selected button YES and NO } + else if (cb_IDYES.Checked and cb_IDNO.Checked and not cb_IDCANCEL.Checked) then begin + IDButton := 'IDYES'; + IDButton2 := 'IDNO'; + ButtonCount := 2; + case ModeMsg of + 0: Text := TextMsgBox(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, IDButton, IDButton2, ''); + 1: Text := TextTaskDialog(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, ButtonLabels, ShieldButton, IDButton, IDButton2, ''); + end; + end + + { selected button YES and CANCEL } + else if (cb_IDYES.Checked and not cb_IDNO.Checked and cb_IDCANCEL.Checked) then begin + IDButton := 'IDYES'; + IDButton2 := 'IDCANCEL'; + ButtonCount := 2; + case ModeMsg of + 0: Text := TextMsgBox(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, IDButton, IDButton2, ''); + 1: Text := TextTaskDialog(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, ButtonLabels, ShieldButton, IDButton, IDButton2, ''); + end; + end + + { selected button NO and CANCEL } + else if (cb_IDNO.Checked and not cb_IDYES.Checked and cb_IDCANCEL.Checked) then begin + IDButton := 'IDNO'; + IDButton2 := 'IDCANCEL'; + ButtonCount := 2; + case ModeMsg of + 0: Text := TextMsgBox(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, IDButton, IDButton2, ''); + 1: Text := TextTaskDialog(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, ButtonLabels, ShieldButton, IDButton, IDButton2, ''); + end; + end + + { selected button YES, NO and CANCEL } + else if (cb_IDYES.Checked and cb_IDNO.Checked and cb_IDCANCEL.Checked) then begin + IDButton := 'IDYES'; + IDButton2 := 'IDNO'; + IDButton3 := 'IDCANCEL'; + ButtonCount := 3; + case ModeMsg of + 0: Text := TextMsgBox(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, IDButton, IDButton2, IDButton3); + 1: Text := TextTaskDialog(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, ButtonLabels, ShieldButton, IDButton, IDButton2, IDButton3); + end; + end + + { selected button RETRY } + else if (cb_IDRETRY.Checked and not cb_IDCANCEL.Checked and not cb_IDABORT.Checked and not cb_IDIGNORE.Checked) then begin + IDButton := 'IDRETRY'; + ButtonCount := 1; + case ModeMsg of + 0: Text := TextMsgBox(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, IDButton, '', ''); + 1: Text := TextTaskDialog(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, ButtonLabels, ShieldButton, IDButton, '', ''); + end; + end + + { selected button RETRY and CANCEL } + else if (cb_IDRETRY.Checked and cb_IDCANCEL.Checked and not cb_IDABORT.Checked and not cb_IDIGNORE.Checked) then begin + IDButton := 'IDRETRY'; + IDButton2 := 'IDCANCEL'; + ButtonCount := 2; + case ModeMsg of + 0: Text := TextMsgBox(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, IDButton, IDButton2, ''); + 1: Text := TextTaskDialog(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, ButtonLabels, ShieldButton, IDButton, IDButton2, ''); + end; + end + + { selected button IGNORE } + else if (cb_IDIGNORE.Checked and not cb_IDCANCEL.Checked and not cb_IDABORT.Checked and not cb_IDRETRY.Checked) then begin + IDButton := 'IDIGNORE'; + ButtonCount := 1; + case ModeMsg of + 0: Text := TextMsgBox(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, IDButton, '', ''); + 1: Text := TextTaskDialog(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, ButtonLabels, ShieldButton, IDButton, '', ''); + end; + end + + { selected button ABORT } + else if (cb_IDABORT.Checked and not cb_IDCANCEL.Checked and not cb_IDRETRY.Checked and not cb_IDIGNORE.Checked) then begin + IDButton := 'IDABORT'; + ButtonCount := 1; + case ModeMsg of + 0: Text := TextMsgBox(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, IDButton, '', ''); + 1: Text := TextTaskDialog(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, ButtonLabels, ShieldButton, IDButton, '', ''); + end; + end + + { selected button RETRY and IGNORE } + else if (cb_IDRETRY.Checked and not cb_IDCANCEL.Checked and not cb_IDABORT.Checked and cb_IDIGNORE.Checked) then begin + IDButton := 'IDRETRY'; + IDButton2 := 'IDIGNORE'; + ButtonCount := 2; + case ModeMsg of + 0: Text := TextMsgBox(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, IDButton, IDButton2, ''); + 1: Text := TextTaskDialog(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, ButtonLabels, ShieldButton, IDButton, IDButton2, ''); + end; + end + + { selected button RETRY and ABORT } + else if (cb_IDRETRY.Checked and not cb_IDCANCEL.Checked and cb_IDABORT.Checked and not cb_IDIGNORE.Checked) then begin + IDButton := 'IDRETRY'; + IDButton2 := 'IDABORT'; + ButtonCount := 2; + case ModeMsg of + 0: Text := TextMsgBox(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, IDButton, IDButton2, ''); + 1: Text := TextTaskDialog(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, ButtonLabels, ShieldButton, IDButton, IDButton2, ''); + end; + end + + { selected button IGNORE and ABORT } + else if (not cb_IDRETRY.Checked and not cb_IDCANCEL.Checked and cb_IDABORT.Checked and cb_IDIGNORE.Checked) then begin + IDButton := 'IDIGNORE'; + IDButton2 := 'IDABORT'; + ButtonCount := 2; + case ModeMsg of + 0: Text := TextMsgBox(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, IDButton, IDButton2, ''); + 1: Text := TextTaskDialog(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, ButtonLabels, ShieldButton, IDButton, IDButton2, ''); + end; + end + + { selected button RETRY, IGNORE and ABORT } + else if (cb_IDRETRY.Checked and not cb_IDCANCEL.Checked and cb_IDABORT.Checked and cb_IDIGNORE.Checked) then begin + IDButton := 'IDRETRY'; + IDButton2 := 'IDIGNORE'; + IDButton3 := 'IDABORT'; + ButtonCount := 3; + case ModeMsg of + 0: Text := TextMsgBox(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, IDButton, IDButton2, IDButton3); + 1: Text := TextTaskDialog(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, ButtonLabels, ShieldButton, IDButton, IDButton2, IDButton3); + end; + end + + { no selected buttons } + else begin + case ModeMsg of + 0: Text := TextMsgBox(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, '', '', ''); + 1: Text := TextTaskDialog(ButtonCount, CaptionOrInstructionAndText, Typ, Buttons, ButtonLabels, ShieldButton, '', '', ''); + end; + end; + + var SL := TStringList.Create; + try + SL.Text := Text; + SL.Insert(0, '// Display a message box'); + for var I := 0 to SL.Count-1 do + SL[I] := TextTab + SL[I]; + Result := SL.Text; + finally + SL.Free; + end; +end; + +end. diff --git a/Projects/Src/CompMsgs.pas b/Projects/Src/CompMsgs.pas new file mode 100644 index 00000000..48b53a90 --- /dev/null +++ b/Projects/Src/CompMsgs.pas @@ -0,0 +1,405 @@ +unit CompMsgs; + +{ + Inno Setup + Copyright (C) 1997-2024 Jordan Russell + Portions by Martijn Laan + For conditions of distribution and use, see LICENSE.TXT. + + Compiler Messages + + All language-specific text used by the compiler is in here. If you want to + translate it into another language, all you need to change is this unit. +} + +interface + +const + SNewLine = #13#10; { line break } + SNewLine2 = #13#10#13#10; { double line break } + + { Compiler form labels } + SCompilerFormCaption = 'Inno Setup Compiler'; + SCompilerScriptFileLabel = 'Script &File:'; + SCompilerStatusLabel = 'Status &Messages:'; + SCompilerScriptBrowseButton = '&Browse...'; + SCompilerStartButton = '&Start'; + SCompilerExitButton = 'E&xit'; + SCompilerOpenFilter = 'Inno Setup Script files (*.iss)|*.iss|All files|*.*'; + SCompilerExampleScripts = 'Example scripts...'; + SCompilerMoreFiles = 'More files...'; + + { Compiler Script Wizard } + SWizardDefaultName = 'Inno Setup Script Wizard'; + SWizardWelcome = 'Welcome'; + SWizardAppInfo = 'Application Information'; + SWizardAppInfo2 = 'Please specify some basic information about your application.'; + SWizardAppDir = 'Application Folder'; + SWizardAppDir2 = 'Please specify folder information about your application.'; + SWizardAppFiles = 'Application Files'; + SWizardAppFiles2 = 'Please specify the files that are part of your application.'; + SWizardAppFiles3 = 'Please specify the source folder.'; + SWizardAppFilesSubDirsMessage = 'Should files in subfolders of "%s" also be included?'; + SWizardAppExeFilter = 'Application files (*.exe)|*.exe|All files|*.*'; + SWizardAppExeDefaultExt = 'exe'; + SWizardAppAssoc = 'Application File Association'; + SWizardAppAssoc2 = 'Please specify which file association should be created for your application.'; + SWizardAppIcons = 'Application Shortcuts'; + SWizardAppIcons2 = 'Please specify which shortcuts should be created for your application.'; + SWizardAppDocs = 'Application Documentation'; + SWizardAppDocs2 = 'Please specify which documentation files should be shown by Setup during installation.'; + SWizardAppDocsFilter = 'Documentation files (*.rtf,*.txt)|*.rtf;*.txt|All files|*.*'; + SWizardAppDocsDefaultExt = 'rtf'; + SWizardAppRegFilter = 'Registry files (*.reg)|*.reg|All files|*.*'; + SWizardAppRegDefaultExt = 'reg'; + SWizardPrivilegesRequired = 'Setup Install Mode'; + SWizardPrivilegesRequired2 = 'Please specify in which install mode Setup should run.'; + SWizardAppRegistry = 'Application Registry Keys And Values'; + SWizardAppRegistry2 = 'Please specify the registry keys and values that are part of your application.'; + SWizardLanguages = 'Setup Languages'; + SWizardLanguages2 = 'Please specify which Setup languages should be included.'; + SWizardCompiler = 'Compiler Settings'; + SWizardCompiler2 = 'Please specify some basic compiler settings.'; + SWizardCompilerSetupIconFileFilter = 'Icon files (*.ico)|*.ico|All files|*.*'; + SWizardCompilerSetupIconFileDefaultExt = 'ico'; + SWizardCompilerOutputDir = 'Please specify the folder.'; + SWizardISPP = 'Inno Setup Preprocessor'; + SWizardISPP2 = 'Please specify whether Inno Setup Preprocessor should be used.'; + SWizardISPPLabel = 'The [name] can use #define compiler directives to simplify your script. Although this is not necessary, it will make it easier to manually change the script later.' + SNewLine2 + 'Do you want the [name] to use #define compiler directives?'; + SWizardISPPCheck = '&Yes, use #define compiler directives'; + SWizardFinished = 'Finished'; + + SWizardNextButton = '&Next'; + SWizardFinishButton = '&Finish'; + SWizardCancelMessage = 'The [name] is not complete. If you quit now, the new script file will not be generated.'#13#13'Exit the [name]?'; + + SWizardAllFilesFilter = 'All files|*.*'; + + SWizardAppNameError = 'Please specify the application name.'; + SWizardAppVersionError = 'Please specify the application version.'; + SWizardAppRootDirError = 'Please specify the application destination base folder.'; + SWizardAppDirNameError = 'Please specify the application folder name.'; + SWizardAppExeError = 'Please specify the application main executable file.'; + SWizardAppGroupNameError = 'Please specify the application Start Menu group name.'; + SWizardFileDestRootDirError = 'Please specify the destination base folder.'; + SWizardFileAppDestRootDirError = 'Please specify a destination base folder other than the application folder'; + SWizardLanguagesSelError = 'Please select at least one language.'; + + SWizardScriptHeader = '; Script generated by the [name].' + SNewLine + '; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!'; + + { Compiler-specific messages } + SCompilerVersion = 'version %s'; + + SCompilerNotOnWin32s = 'The 32-bit compiler will not run on Win32s.'; + SCompilerCommandLineHelp3 = 'Command line usage:' + SNewLine + + SNewLine + + 'compil32 /cc