Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/sn4k3/UVtools.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTiago Conceição <Tiago_caza@hotmail.com>2020-06-21 01:54:38 +0300
committerTiago Conceição <Tiago_caza@hotmail.com>2020-06-21 01:54:38 +0300
commitc10bf6cef3511241c31c1240c3717d3c2764092e (patch)
treedc01e18da14be0347c15f45bd945f0bf9ea730f8
parentfc73f2ff7546f3f66ec4ada7b975534487001fac (diff)
v0.5.2.1v0.5.2.1
* (Add) cws: Allow change layer PWM value * (Update) Dependency ImageSharp from 1.0.0-rc0002 to 1.0.0-rc0003 (It fix a error on resize function) * (Fix) cws: GCode 0 before G29 * (Fix) Phrozen Sonic Mini: Display Height from 66.04 to 68.04 * (Fix) Zortrax Inkspire: Display and Volume to 74.67x132.88 * (Fix) Layer repair tool allow operation when every repair checkbox is deselected
-rw-r--r--CHANGELOG.md9
-rw-r--r--CreateRelease.ps17
-rw-r--r--PrusaSlicer/printer/Phrozen Sonic Mini.ini6
-rw-r--r--PrusaSlicer/printer/Zortrax Inkspire.ini8
-rw-r--r--UVtools.GUI/Forms/FrmRepairLayers.cs2
-rw-r--r--UVtools.GUI/FrmMain.cs18
-rw-r--r--UVtools.GUI/Properties/AssemblyInfo.cs4
-rw-r--r--UVtools.GUI/UVtools.GUI.csproj8
-rw-r--r--UVtools.GUI/packages.config2
-rw-r--r--UVtools.Installer/Code/Features.wxs17
-rw-r--r--UVtools.Installer/Code/IISMeta.wxs32
-rw-r--r--UVtools.Installer/Code/Product.wxs27
-rw-r--r--UVtools.Installer/Code/UI-CustomDialog.wxs64
-rw-r--r--UVtools.Installer/Code/UI.wxs14
-rw-r--r--UVtools.Installer/Resources/Banner.jpgbin0 -> 1241 bytes
-rw-r--r--UVtools.Installer/Resources/Dialog.jpgbin0 -> 3284 bytes
-rw-r--r--UVtools.Installer/Resources/EULA.rtf868
-rw-r--r--UVtools.Installer/UVtools.Installer.wixproj91
-rw-r--r--UVtools.InstallerMM/UVtools.InstallerMM.wixproj35
-rw-r--r--UVtools.InstallerMM/UVtools.InstallerMM.wxs278
-rw-r--r--UVtools.InstallerMM/UVtools.InstallerMMcustom.wxs16
-rw-r--r--UVtools.Parser/CWSFile.cs45
-rw-r--r--UVtools.Parser/FileFormat.cs5
-rw-r--r--UVtools.Parser/IFileFormat.cs10
-rw-r--r--UVtools.Parser/UVtools.Parser.csproj8
-rw-r--r--UVtools.sln26
26 files changed, 1570 insertions, 30 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b2e9d83..8eb7ced 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,14 @@
# Changelog
+## 20/06/2020 - v0.5.2.1
+
+* (Add) cws: Allow change layer PWM value
+* (Update) Dependency ImageSharp from 1.0.0-rc0002 to 1.0.0-rc0003 (It fix a error on resize function)
+* (Fix) cws: GCode 0 before G29
+* (Fix) Phrozen Sonic Mini: Display Height from 66.04 to 68.04
+* (Fix) Zortrax Inkspire: Display and Volume to 74.67x132.88
+* (Fix) Layer repair tool allow operation when every repair checkbox is deselected
+
## 19/06/2020 - v0.5.2
* (Add) Resin Trap issue validator and repairer - Experimental Feature (#3)
diff --git a/CreateRelease.ps1 b/CreateRelease.ps1
new file mode 100644
index 0000000..7bffc42
--- /dev/null
+++ b/CreateRelease.ps1
@@ -0,0 +1,7 @@
+cd $PSScriptRoot
+$version = (Get-Command UVtools.GUI\bin\Release\UVtools.Parser.dll).FileVersionInfo.ProductVersion
+
+Add-Type -A System.IO.Compression.FileSystem
+[IO.Compression.ZipFile]::CreateFromDirectory("$PSScriptRoot\UVtools.GUI\bin\Release", "$PSScriptRoot\UVtools.GUI\bin\UVtools_v$version.zip")
+
+Copy-Item "$PSScriptRoot\UVtools.Installer\bin\Release\UVtools.msi" -Destination "$PSScriptRoot\UVtools.GUI\bin\UVtools_v$version.msi" \ No newline at end of file
diff --git a/PrusaSlicer/printer/Phrozen Sonic Mini.ini b/PrusaSlicer/printer/Phrozen Sonic Mini.ini
index c3f71a0..3cd5088 100644
--- a/PrusaSlicer/printer/Phrozen Sonic Mini.ini
+++ b/PrusaSlicer/printer/Phrozen Sonic Mini.ini
@@ -1,12 +1,12 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-12 at 00:36:09 UTC
+# generated by PrusaSlicer 2.2.0+win64 on 2020-06-20 at 15:15:00 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
bed_custom_texture =
-bed_shape = 0x0,120x0,120x66,0x66
+bed_shape = 0x0,120.96x0,120.96x68.04,0x68.04
default_sla_material_profile = Prusa Orange Tough 0.05
default_sla_print_profile = 0.05 Normal
-display_height = 66.04
+display_height = 68.04
display_mirror_x = 0
display_mirror_y = 0
display_orientation = portrait
diff --git a/PrusaSlicer/printer/Zortrax Inkspire.ini b/PrusaSlicer/printer/Zortrax Inkspire.ini
index 84e93ac..a999a68 100644
--- a/PrusaSlicer/printer/Zortrax Inkspire.ini
+++ b/PrusaSlicer/printer/Zortrax Inkspire.ini
@@ -1,18 +1,18 @@
-# generated by PrusaSlicer 2.2.0+win64 on 2020-06-12 at 00:42:42 UTC
+# generated by PrusaSlicer 2.2.0+win64 on 2020-06-20 at 15:23:41 UTC
absolute_correction = 0
area_fill = 50
bed_custom_model =
bed_custom_texture =
-bed_shape = 0x0,115x0,115x65,0x65
+bed_shape = 0x0,132.88x0,132.88x74.67,0x74.67
default_sla_material_profile = Prusa Orange Tough 0.05
default_sla_print_profile = 0.05 Normal
-display_height = 74
+display_height = 74.67
display_mirror_x = 1
display_mirror_y = 0
display_orientation = portrait
display_pixels_x = 2560
display_pixels_y = 1440
-display_width = 132
+display_width = 132.88
elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
fast_tilt_time = 5
diff --git a/UVtools.GUI/Forms/FrmRepairLayers.cs b/UVtools.GUI/Forms/FrmRepairLayers.cs
index 3e197e0..e4bcc24 100644
--- a/UVtools.GUI/Forms/FrmRepairLayers.cs
+++ b/UVtools.GUI/Forms/FrmRepairLayers.cs
@@ -161,7 +161,7 @@ namespace UVtools.GUI.Forms
return;
}
- if (!cbRepairIslands.Enabled && !cbRepairResinTraps.Enabled)
+ if (!RepairIslands && !RepairResinTraps)
{
MessageBox.Show("You must select at least one repair operation.", Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
diff --git a/UVtools.GUI/FrmMain.cs b/UVtools.GUI/FrmMain.cs
index 3cc5222..feb9a91 100644
--- a/UVtools.GUI/FrmMain.cs
+++ b/UVtools.GUI/FrmMain.cs
@@ -1720,19 +1720,25 @@ namespace UVtools.GUI
#if DEBUG
greyscale = greyscale.ThresholdBinary(new Gray(254), new Gray(255));
VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();
- Mat external = new Mat();
+ Mat hierarchy = new Mat();
- CvInvoke.FindContours(greyscale, contours, external, RetrType.Ccomp, ChainApproxMethod.ChainApproxSimple);
+ CvInvoke.FindContours(greyscale, contours, hierarchy, RetrType.Ccomp, ChainApproxMethod.ChainApproxSimple);
- var arr = external.GetData();
+ /*
+ * hierarchy[i][0]: the index of the next contour of the same level
+ * hierarchy[i][1]: the index of the previous contour of the same level
+ * hierarchy[i][2]: the index of the first child
+ * hierarchy[i][3]: the index of the parent
+ */
+ var arr = hierarchy.GetData();
for (int i = 0; i < contours.Size; i++)
{
- if ((int)arr.GetValue(0, i, 2) != -1 || (int)arr.GetValue(0, i, 3) == -1) continue;
+ if ((int)arr.GetValue(0, i, 3) >= 0) continue;
var r = CvInvoke.BoundingRectangle(contours[i]);
- CvInvoke.Rectangle(greyscale, r, new MCvScalar(80), 3);
+ CvInvoke.Rectangle(greyscale, r, new MCvScalar(80), 2);
greyscale.Draw(contours, i, new Gray(125), -1);
-
+
}
#else
diff --git a/UVtools.GUI/Properties/AssemblyInfo.cs b/UVtools.GUI/Properties/AssemblyInfo.cs
index 2e37d79..638ed25 100644
--- a/UVtools.GUI/Properties/AssemblyInfo.cs
+++ b/UVtools.GUI/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// 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("0.5.2.0")]
-[assembly: AssemblyFileVersion("0.5.2.0")]
+[assembly: AssemblyVersion("0.5.2.1")]
+[assembly: AssemblyFileVersion("0.5.2.1")]
diff --git a/UVtools.GUI/UVtools.GUI.csproj b/UVtools.GUI/UVtools.GUI.csproj
index 79782a2..85ed9ec 100644
--- a/UVtools.GUI/UVtools.GUI.csproj
+++ b/UVtools.GUI/UVtools.GUI.csproj
@@ -82,7 +82,7 @@
<HintPath>..\packages\SixLabors.Core.1.0.0-beta0008\lib\netstandard2.0\SixLabors.Core.dll</HintPath>
</Reference>
<Reference Include="SixLabors.ImageSharp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d998eea7b14cab13, processorArchitecture=MSIL">
- <HintPath>..\packages\SixLabors.ImageSharp.1.0.0-rc0002\lib\net472\SixLabors.ImageSharp.dll</HintPath>
+ <HintPath>..\packages\SixLabors.ImageSharp.1.0.0-rc0003\lib\net472\SixLabors.ImageSharp.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
@@ -239,12 +239,15 @@
</Compile>
<None Include="..\CHANGELOG.md">
<Link>CHANGELOG.md</Link>
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\CREDITS.md">
<Link>CREDITS.md</Link>
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\LICENSE">
<Link>LICENSE</Link>
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="..\README.md">
<Link>README.md</Link>
@@ -341,8 +344,7 @@
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
- <PostBuildEvent>xcopy /y /d $(ProjectDir)..\LICENSE $(ProjectDir)$(OutDir)
-xcopy /i /y /d /s $(ProjectDir)..\PrusaSlicer $(ProjectDir)$(OutDir)\PrusaSlicer</PostBuildEvent>
+ <PostBuildEvent>xcopy /i /y /d /s $(ProjectDir)..\PrusaSlicer $(ProjectDir)$(OutDir)\PrusaSlicer</PostBuildEvent>
</PropertyGroup>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
diff --git a/UVtools.GUI/packages.config b/UVtools.GUI/packages.config
index 23c9723..cb4f1af 100644
--- a/UVtools.GUI/packages.config
+++ b/UVtools.GUI/packages.config
@@ -7,7 +7,7 @@
<package id="Microsoft.Net.Compilers.Toolset" version="3.7.0-2.final" targetFramework="net48" developmentDependency="true" />
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net48" />
<package id="SixLabors.Core" version="1.0.0-beta0008" targetFramework="net48" />
- <package id="SixLabors.ImageSharp" version="1.0.0-rc0002" targetFramework="net48" />
+ <package id="SixLabors.ImageSharp" version="1.0.0-rc0003" targetFramework="net48" />
<package id="System.Buffers" version="4.5.1" targetFramework="net48" />
<package id="System.Collections" version="4.3.0" targetFramework="net48" />
<package id="System.IO" version="4.3.0" targetFramework="net48" />
diff --git a/UVtools.Installer/Code/Features.wxs b/UVtools.Installer/Code/Features.wxs
new file mode 100644
index 0000000..a0c923f
--- /dev/null
+++ b/UVtools.Installer/Code/Features.wxs
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+ <Fragment>
+ <Directory Id="TARGETDIR" Name="SourceDir">
+ <Directory Id="ProgramFilesFolder">
+ <Directory Id="INSTALLLOCATION" Name="UVtools">
+ <Merge Id="UVtools" SourceFile="$(var.UVtools.InstallerMM.TargetPath)" DiskId="1" Language="1033" />
+ </Directory>
+ </Directory>
+ </Directory>
+ <Feature Id="UVtools" Title="UVtools" Description="Installs all the files needed for UVtools" Level="1" AllowAdvertise="no" ConfigurableDirectory="INSTALLLOCATION">
+ <MergeRef Id="UVtools" />
+ <!-- Uncomment the below line to pull in IIS Metadata. Otherwise delete if not needed -->
+ <!--<ComponentGroupRef Id="webSite" />-->
+ </Feature>
+ </Fragment>
+</Wix> \ No newline at end of file
diff --git a/UVtools.Installer/Code/IISMeta.wxs b/UVtools.Installer/Code/IISMeta.wxs
new file mode 100644
index 0000000..6126b81
--- /dev/null
+++ b/UVtools.Installer/Code/IISMeta.wxs
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension">
+ <Fragment>
+
+ <ComponentGroup Id="webSite">
+ <ComponentRef Id="webSite" />
+ </ComponentGroup>
+
+ <PropertyRef Id="NETFRAMEWORK45" />
+ <PropertyRef Id="IISMAJORVERSION" />
+ <Property Id="ASPNETINSTALLED">
+ <RegistrySearch Id="findASPNETINSTALLED" Root="HKLM" Key="SOFTWARE\Microsoft\InetStp\Components" Name="ASPNET" Type="raw" />
+ </Property>
+ <Condition Message="[ProductName] requires Microsoft .NET Framework 4.5.">Installed OR NETFRAMEWORK45</Condition>
+ <Condition Message="[ProductName] requires Microsoft IIS">Installed OR IISMAJORVERSION</Condition>
+ <Condition Message="[ProductName] requires the ASP.NET role service for IIS">Installed OR ASPNETINSTALLED="#1"</Condition>
+
+ <DirectoryRef Id="INSTALLLOCATION">
+ <Directory Id="webSite" Name="WebSite">
+ <Component Id="webSite" Guid="b118a1b9-8c4e-44b3-bf42-1501163c8bee" KeyPath="yes">
+ <iis:WebAppPool Id="webSite" Name="UVtools.Installer" Identity="applicationPoolIdentity" ManagedRuntimeVersion="v4.0" ManagedPipelineMode="Integrated"/>
+ <iis:WebSite Id="webSite" SiteId="*" Description="UVtools.Installer Web Site" Directory="webSite" ConfigureIfExists="no">
+ <iis:WebAddress Id="webSite" Port="8080" />
+ <iis:WebDirProperties Id="webSite" AnonymousAccess="yes" WindowsAuthentication="no" />
+ <iis:WebApplication Id="webSite" WebAppPool="webSite" Name="webSite" />
+ </iis:WebSite>
+ </Component>
+ </Directory>
+ </DirectoryRef>
+
+ </Fragment>
+</Wix> \ No newline at end of file
diff --git a/UVtools.Installer/Code/Product.wxs b/UVtools.Installer/Code/Product.wxs
new file mode 100644
index 0000000..9425f4e
--- /dev/null
+++ b/UVtools.Installer/Code/Product.wxs
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+ <!--
+ MSIProductVersion is defined in UVtools.Installer.wixproj as 0.0.1 for local desktop builds.
+ You should pass in the MSBuild Property 'MSIProductVersion' to override it during an automated build.
+ See http://msdn.microsoft.com/en-us/library/windows/desktop/aa370859%28v=vs.85%29.aspx for information on allowable values.
+
+ The Product@Id attribute (ProductCode Property) will be a random GUID for each build. This is to support "Major Upgrades" where each install
+ is a seamless uninstall/reinstall.
+ -->
+ <Product Id="*" Name="UVtools" Language="1033" Version="$(var.MSIProductVersion)" Manufacturer="PTRTECH" UpgradeCode="1ea6d212-15c0-425e-b2ec-4b6c60817552">
+ <Package InstallerVersion="301" Compressed="yes" InstallScope="perMachine" />
+ <MediaTemplate EmbedCab="yes" />
+ <!-- Major Upgrade Rule to disallow downgrades -->
+ <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
+ <!--Common Launch Condition-->
+ <!-- Examples at http://wixtoolset.org/documentation/manual/v3/customactions/wixnetfxextension.html -->
+ <PropertyRef Id="NETFRAMEWORK45" />
+ <Condition Message="[ProductName] requires .NET Framework 4.8.">Installed OR NETFRAMEWORK45</Condition>
+ <!-- Include User Interface Experience -->
+ <Icon Id="Icon.ico" SourceFile="..\UVtools.GUI\UVtools.ico" />
+ <Property Id="ARPPRODUCTICON" Value="Icon.ico"></Property>
+ <UIRef Id="UI" />
+ <!-- Include Features and Directories Fragment -->
+ <DirectoryRef Id="INSTALLLOCATION" />
+ </Product>
+</Wix> \ No newline at end of file
diff --git a/UVtools.Installer/Code/UI-CustomDialog.wxs b/UVtools.Installer/Code/UI-CustomDialog.wxs
new file mode 100644
index 0000000..1a9cfc3
--- /dev/null
+++ b/UVtools.Installer/Code/UI-CustomDialog.wxs
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+ <Fragment>
+ <UI Id="CustomDlg">
+ <Dialog Id="CustomDlg" Height="270" Width="370" Title="[ProductName] Setup">
+
+ <!-- Header -->
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" Text="WixUI_Bmp_Banner"/>
+ <Control Id="Title" Type="Text" X="15" Y="6" Width="200" Height="15" Text="{\WixUI_Font_Title}Custom Dialog" Transparent="yes"/>
+ <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Text="Place your custom description here" Transparent="yes"/>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0"/>
+
+ <!-- Body -->
+ <Control Id="CustomLabel" Type="Text" X="20" Y="60" Width="290" Height="15" Text="Customer:" TabSkip="yes"/>
+ <Control Id="Custom" Type="Edit" X="20" Y="80" Width="320" Height="18" Property="CUSTOM"/>
+
+
+ <!-- Footer -->
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0"/>
+ <Control Id="Next" Type="PushButton" Text="&amp;Next" TabSkip="no" Default="yes" Height="17" Width="56" X="236" Y="243">
+ <Publish Event="NewDialog" Value="CustomizeDlg"/>
+ </Control>
+ <Control Id="Cancel" Type="PushButton" Text="Cancel" TabSkip="no" Height="17" Width="56" X="304" Y="243" Cancel="yes">
+ <Publish Event="SpawnDialog" Value="CancelDlg"/>
+ </Control>
+ <Control Id="Back" Type="PushButton" Text="&amp;Back" TabSkip="no" Height="17" Width="56" X="180" Y="243">
+ <Publish Event="NewDialog" Value="LicenseAgreementDlg"/>
+ </Control>
+
+ </Dialog>
+
+ <!-- Insert into dialog sequencing by inserting control events on previous and next dialogs-->
+ <Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="CustomDlg">1</Publish>
+ <Publish Dialog="CustomizeDlg" Control="Back" Event="NewDialog" Value="CustomDlg" Order="3">NOT Installed</Publish>
+
+ </UI>
+
+ <!-- Make Property a SecureCustom Property-->
+ <Property Id="CUSTOM" Secure="yes"/>
+
+ <!-- Note: You must author a registry component somewhere in your installer to persist the property for later retrieval
+ Example:
+ ...
+ <Component Id='RememberCustom' Guid='{????????-????-????-????-????????????}' KeyPath='yes' Permanent='yes'>
+ <RegistryValue Root='HKLM' Key='SOFTWARE\CompanyName\ProductName' Name='Custom' Type='string' Value='[CUSTOM]'/>
+ </Component>
+ ...
+ -->
+
+ <!-- Attempt to retrieve previously persisted property -->
+ <Property Id='FINDCUSTOM' Secure='yes'>
+ <RegistrySearch Id='CustomerNumber' Root='HKLM'
+ Key='SOFTWARE\CompanyName\ProductName'
+ Name='Custom' Type='raw' />
+ </Property>
+
+ <!-- Assign default value if retrieval failed -->
+ <SetProperty Id='FINDCUSTOM' Value='default value' After='AppSearch' Sequence='first'>Not FINDCUSTOM</SetProperty>
+
+ <!-- Assign retrieved / defaulted value to actual property if it doesn't already have a value -->
+ <SetProperty Id='CUSTOM' Value='[FINDCUSTOM]' After='SetFINDCUSTOM' Sequence='first'>Not CUSTOM</SetProperty>
+
+ </Fragment>
+</Wix> \ No newline at end of file
diff --git a/UVtools.Installer/Code/UI.wxs b/UVtools.Installer/Code/UI.wxs
new file mode 100644
index 0000000..6bafab2
--- /dev/null
+++ b/UVtools.Installer/Code/UI.wxs
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+ <Fragment>
+ <UI Id="UI">
+
+ <!-- See http://wix.sourceforge.net/manual-wix3/WixUI_index.htm for more information-->
+ <UIRef Id="WixUI_FeatureTree"/>
+
+ <!--Uncomment to inject a custom dialog into the install wizard loop -->
+ <!--<UIRef Id="CustomDlg"/>-->
+
+ </UI>
+ </Fragment>
+</Wix> \ No newline at end of file
diff --git a/UVtools.Installer/Resources/Banner.jpg b/UVtools.Installer/Resources/Banner.jpg
new file mode 100644
index 0000000..743dbff
--- /dev/null
+++ b/UVtools.Installer/Resources/Banner.jpg
Binary files differ
diff --git a/UVtools.Installer/Resources/Dialog.jpg b/UVtools.Installer/Resources/Dialog.jpg
new file mode 100644
index 0000000..0b8f2d0
--- /dev/null
+++ b/UVtools.Installer/Resources/Dialog.jpg
Binary files differ
diff --git a/UVtools.Installer/Resources/EULA.rtf b/UVtools.Installer/Resources/EULA.rtf
new file mode 100644
index 0000000..7f62333
--- /dev/null
+++ b/UVtools.Installer/Resources/EULA.rtf
@@ -0,0 +1,868 @@
+{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi31507\deflang2070\deflangfe2070\themelang2070\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
+{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
+{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0302020204030204}Calibri Light;}
+{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
+{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}
+{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f43\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f44\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
+{\f46\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f47\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f48\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f49\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
+{\f50\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f51\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f53\fbidi \fswiss\fcharset238\fprq2 Arial CE;}{\f54\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;}
+{\f56\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\f57\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\f58\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f59\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);}
+{\f60\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\f61\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f413\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f414\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}
+{\f416\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f417\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f418\fbidi \fswiss\fcharset177\fprq2 Calibri (Hebrew);}{\f419\fbidi \fswiss\fcharset178\fprq2 Calibri (Arabic);}
+{\f420\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f421\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
+{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
+{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
+{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
+{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
+{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
+{\fhimajor\f31528\fbidi \fswiss\fcharset238\fprq2 Calibri Light CE;}{\fhimajor\f31529\fbidi \fswiss\fcharset204\fprq2 Calibri Light Cyr;}{\fhimajor\f31531\fbidi \fswiss\fcharset161\fprq2 Calibri Light Greek;}
+{\fhimajor\f31532\fbidi \fswiss\fcharset162\fprq2 Calibri Light Tur;}{\fhimajor\f31533\fbidi \fswiss\fcharset177\fprq2 Calibri Light (Hebrew);}{\fhimajor\f31534\fbidi \fswiss\fcharset178\fprq2 Calibri Light (Arabic);}
+{\fhimajor\f31535\fbidi \fswiss\fcharset186\fprq2 Calibri Light Baltic;}{\fhimajor\f31536\fbidi \fswiss\fcharset163\fprq2 Calibri Light (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
+{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
+{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
+{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
+{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
+{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
+{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
+{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
+{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}
+{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}
+{\fhiminor\f31573\fbidi \fswiss\fcharset177\fprq2 Calibri (Hebrew);}{\fhiminor\f31574\fbidi \fswiss\fcharset178\fprq2 Calibri (Arabic);}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}
+{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
+{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
+{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}
+{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;
+\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red0\green0\blue0;\red0\green0\blue0;}{\*\defchp \fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap
+\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1
+\af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang2070\langfe2070\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp2070\langfenp2070 \snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*
+\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa160\sl259\slmult1
+\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang2070\langfe2070\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp2070\langfenp2070 \snext11 \ssemihidden \sunhideused
+Normal Table;}}{\*\rsidtbl \rsid11478430\rsid12386343}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\operator Tiago Concei\'e7\'e3o}
+{\creatim\yr2020\mo6\dy20\hr22\min43}{\revtim\yr2020\mo6\dy20\hr22\min44}{\version2}{\edmins1}{\nofpages21}{\nofwords5394}{\nofchars29129}{\nofcharsws34455}{\vern1}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}
+\paperw12240\paperh15840\margl1701\margr1701\margt1417\margb1417\gutter0\ltrsect
+\widowctrl\ftnbj\aenddoc\hyphhotz425\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120
+\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale300\rsidroot12386343 \nouicompat \fet0{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1
+\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5
+\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang
+{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12386343 \rtlch\fcs1
+\af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang2070\langfe2070\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp2070\langfenp2070 {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\lang1033\langfe2070\langnp1033\insrsid12386343\charrsid12386343
+\hich\af1\dbch\af31505\loch\f1 GNU AFFERO GENERAL PUBLIC LICENSE
+\par \hich\af1\dbch\af31505\loch\f1 Version 3, 19 November 2007
+\par
+\par \hich\af1\dbch\af31505\loch\f1 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+\par \hich\af1\dbch\af31505\loch\f1 Everyone is permitted to copy and distribute verbatim copies
+\par \hich\af1\dbch\af31505\loch\f1 of this license document, but changing it is not allowed.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 Preamble
+\par
+\par \hich\af1\dbch\af31505\loch\f1 The GNU Affero General Public License is a free, copyleft license for
+\par \hich\af1\dbch\af31505\loch\f1 software and other kinds\hich\af1\dbch\af31505\loch\f1 of works, specifically designed to ensure
+\par \hich\af1\dbch\af31505\loch\f1 cooperation with the community in the case of network server software.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 The licenses for most software and other practical works are designed
+\par \hich\af1\dbch\af31505\loch\f1 to take away your freedom to share and change the works. By contrast,
+\par \hich\af1\dbch\af31505\loch\f1 our General Public Licenses are intended to guarantee your freedom to
+\par \hich\af1\dbch\af31505\loch\f1 share and change all versions of a program--to make sure it remains free
+\par \hich\af1\dbch\af31505\loch\f1 software for all its users.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 When we speak of free software, we are referring to freedom, not
+\par \hich\af1\dbch\af31505\loch\f1 price. Our Gen\hich\af1\dbch\af31505\loch\f1 eral Public Licenses are designed to make sure that you
+\par \hich\af1\dbch\af31505\loch\f1 have the freedom to distribute copies of free software (and charge for
+\par \hich\af1\dbch\af31505\loch\f1 them if you wish), that you receive source code or can get it if you
+\par \hich\af1\dbch\af31505\loch\f1 want it, that you can change the software or use pieces of i\hich\af1\dbch\af31505\loch\f1 t in new
+\par \hich\af1\dbch\af31505\loch\f1 free programs, and that you know you can do these things.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 Developers that use our General Public Licenses protect your rights
+\par \hich\af1\dbch\af31505\loch\f1 with two steps: (1) assert copyright on the software, and (2) offer
+\par \hich\af1\dbch\af31505\loch\f1 you this License which gives you legal permission \hich\af1\dbch\af31505\loch\f1 to copy, distribute
+\par \hich\af1\dbch\af31505\loch\f1 and/or modify the software.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 A secondary benefit of defending all users' freedom is that
+\par \hich\af1\dbch\af31505\loch\f1 improvements made in alternate versions of the program, if they
+\par \hich\af1\dbch\af31505\loch\f1 receive widespread use, become available for other developers to
+\par \hich\af1\dbch\af31505\loch\f1 incorporate. Many developers of free software are heartened and
+\par \hich\af1\dbch\af31505\loch\f1 encouraged by the resulting cooperation. However, in the case of
+\par \hich\af1\dbch\af31505\loch\f1 software used on network servers, this result may fail to co\hich\af1\dbch\af31505\loch\f1 me about.
+\par \hich\af1\dbch\af31505\loch\f1 The GNU General Public License permits making a modified version and
+\par \hich\af1\dbch\af31505\loch\f1 letting the public access it on a server without ever releasing its
+\par \hich\af1\dbch\af31505\loch\f1 source code to the public.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 The GNU Affero General Public License is designed specifically to
+\par \hich\af1\dbch\af31505\loch\f1 ensure that, \hich\af1\dbch\af31505\loch\f1 in such cases, the modified source code becomes available
+\par \hich\af1\dbch\af31505\loch\f1 to the community. It requires the operator of a network server to
+\par \hich\af1\dbch\af31505\loch\f1 provide the source code of the modified version running there to the
+\par \hich\af1\dbch\af31505\loch\f1 users of that server. Therefore, public use of a modified ver\hich\af1\dbch\af31505\loch\f1 sion, on
+\par \hich\af1\dbch\af31505\loch\f1 a publicly accessible server, gives the public access to the source
+\par \hich\af1\dbch\af31505\loch\f1 code of the modified version.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 An older license, called the Affero General Public License and
+\par \hich\af1\dbch\af31505\loch\f1 published by Affero, was designed to accomplish similar goals. This is
+\par \hich\af1\dbch\af31505\loch\f1 a different\hich\af1\dbch\af31505\loch\f1 license, not a version of the Affero GPL, but Affero has
+\par \hich\af1\dbch\af31505\loch\f1 released a new version of the Affero GPL which permits relicensing under
+\par \hich\af1\dbch\af31505\loch\f1 this license.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 The precise terms and conditions for copying, distribution and
+\par \hich\af1\dbch\af31505\loch\f1 modification follow.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 \hich\af1\dbch\af31505\loch\f1 TERMS AND CONDITIONS
+\par
+\par \hich\af1\dbch\af31505\loch\f1 0. Definitions.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 "This License" refers to version 3 of the GNU Affero General Public License.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 "Copyright" also means copyright-like laws that apply to other kinds of
+\par \hich\af1\dbch\af31505\loch\f1 works, such as semiconductor masks.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 "The Program" refers to any copyrightable work licensed under this
+\par \hich\af1\dbch\af31505\loch\f1 License. Each licensee is addressed as "you". "Licensees" and
+\par \hich\af1\dbch\af31505\loch\f1 "recipients"\hich\af1\dbch\af31505\loch\f1 may be individuals or organizations.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 To "modify" a work means to copy from or adapt all or part of the work
+\par \hich\af1\dbch\af31505\loch\f1 in a fashion requiring copyright permission, other than the making of an
+\par \hich\af1\dbch\af31505\loch\f1 exact copy. The resulting work is called a "modified version" of the
+\par \hich\af1\dbch\af31505\loch\f1 e\hich\af1\dbch\af31505\loch\f1 arlier work or a work "based on" the earlier work.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 A "covered work" means either the unmodified Program or a work based
+\par \hich\af1\dbch\af31505\loch\f1 on the Program.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 To "propagate" a work means to do anything with it that, without
+\par \hich\af1\dbch\af31505\loch\f1 permission, would make you directly or secondaril\hich\af1\dbch\af31505\loch\f1 y liable for
+\par \hich\af1\dbch\af31505\loch\f1 infringement under applicable copyright law, except executing it on a
+\par \hich\af1\dbch\af31505\loch\f1 computer or modifying a private copy. Propagation includes copying,
+\par \hich\af1\dbch\af31505\loch\f1 distribution (with or without modification), making available to the
+\par \hich\af1\dbch\af31505\loch\f1 public, and in some countries other\hich\af1\dbch\af31505\loch\f1 activities as well.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 To "convey" a work means any kind of propagation that enables other
+\par \hich\af1\dbch\af31505\loch\f1 parties to make or receive copies. Mere interaction with a user through
+\par \hich\af1\dbch\af31505\loch\f1 a computer network, with no transfer of a copy, is not conveying.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 An interactive user interface displays "Appropriate Legal Notices"
+\par \hich\af1\dbch\af31505\loch\f1 to the extent that it includes a convenient and prominently visible
+\par \hich\af1\dbch\af31505\loch\f1 feature that (1) displays an appropriate copyright n\hich\af1\dbch\af31505\loch\f1 otice, and (2)
+\par \hich\af1\dbch\af31505\loch\f1 tells the user that there is no warranty for the work (except to the
+\par \hich\af1\dbch\af31505\loch\f1 extent that warranties are provided), that licensees may convey the
+\par \hich\af1\dbch\af31505\loch\f1 work under this License, and how to view a copy of this License. If
+\par \hich\af1\dbch\af31505\loch\f1 the interface presents a list of us\hich\af1\dbch\af31505\loch\f1 er commands or options, such as a
+\par \hich\af1\dbch\af31505\loch\f1 menu, a prominent item in the list meets this criterion.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 1. Source Code.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 The "source code" for a work means the preferred form of the work
+\par \hich\af1\dbch\af31505\loch\f1 for making modifications to it. "Object code" means any non-source
+\par \hich\af1\dbch\af31505\loch\f1 form of a\hich\af1\dbch\af31505\loch\f1 work.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 A "Standard Interface" means an interface that either is an official
+\par \hich\af1\dbch\af31505\loch\f1 standard defined by a recognized standards body, or, in the case of
+\par \hich\af1\dbch\af31505\loch\f1 interfaces specified for a particular programming language, one that
+\par \hich\af1\dbch\af31505\loch\f1 is widely used among developers working \hich\af1\dbch\af31505\loch\f1 in that language.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 The "System Libraries" of an executable work include anything, other
+\par \hich\af1\dbch\af31505\loch\f1 than the work as a whole, that (a) is included in the normal form of
+\par \hich\af1\dbch\af31505\loch\f1 packaging a Major Component, but which is not part of that Major
+\par \hich\af1\dbch\af31505\loch\f1 Component, and (b) serves only t\hich\af1\dbch\af31505\loch\f1 o enable use of the work with that
+\par \hich\af1\dbch\af31505\loch\f1 Major Component, or to implement a Standard Interface for which an
+\par \hich\af1\dbch\af31505\loch\f1 implementation is available to the public in source code form. A
+\par \hich\af1\dbch\af31505\loch\f1 "Major Component", in this context, means a major essential component
+\par \hich\af1\dbch\af31505\loch\f1 (kernel, window system, and so on) of the specific operating system
+\par \hich\af1\dbch\af31505\loch\f1 (if any) on which the executable work runs, or a compiler used to
+\par \hich\af1\dbch\af31505\loch\f1 produce the work, or an object code interpreter used to run it.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 The "Corresponding Source" for a work in object code fo\hich\af1\dbch\af31505\loch\f1 rm means all
+\par \hich\af1\dbch\af31505\loch\f1 the source code needed to generate, install, and (for an executable
+\par \hich\af1\dbch\af31505\loch\f1 work) run the object code and to modify the work, including scripts to
+\par \hich\af1\dbch\af31505\loch\f1 control those activities. However, it does not include the work's
+\par \hich\af1\dbch\af31505\loch\f1 System Libraries, or general-purpose \hich\af1\dbch\af31505\loch\f1 tools or generally available free
+\par \hich\af1\dbch\af31505\loch\f1 programs which are used unmodified in performing those activities but
+\par \hich\af1\dbch\af31505\loch\f1 which are not part of the work. For example, Corresponding Source
+\par \hich\af1\dbch\af31505\loch\f1 includes interface definition files associated with source files for
+\par \hich\af1\dbch\af31505\loch\f1 the work, and th\hich\af1\dbch\af31505\loch\f1 e source code for shared libraries and dynamically
+\par \hich\af1\dbch\af31505\loch\f1 linked subprograms that the work is specifically designed to require,
+\par \hich\af1\dbch\af31505\loch\f1 such as by intimate data communication or control flow between those
+\par \hich\af1\dbch\af31505\loch\f1 subprograms and other parts of the work.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 The Corresponding Sour\hich\af1\dbch\af31505\loch\f1 ce need not include anything that users
+\par \hich\af1\dbch\af31505\loch\f1 can regenerate automatically from other parts of the Corresponding
+\par \hich\af1\dbch\af31505\loch\f1 Source.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 The Corresponding Source for a work in source code form is that
+\par \hich\af1\dbch\af31505\loch\f1 same work.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 2. Basic Permissions.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 All rights granted under this Licen\hich\af1\dbch\af31505\loch\f1 se are granted for the term of
+\par \hich\af1\dbch\af31505\loch\f1 copyright on the Program, and are irrevocable provided the stated
+\par \hich\af1\dbch\af31505\loch\f1 conditions are met. This License explicitly affirms your unlimited
+\par \hich\af1\dbch\af31505\loch\f1 permission to run the unmodified Program. The output from running a
+\par \hich\af1\dbch\af31505\loch\f1 covered work is covered by this License only if the output, given its
+\par \hich\af1\dbch\af31505\loch\f1 content, constitutes a covered work. This License acknowledges your
+\par \hich\af1\dbch\af31505\loch\f1 rights of fair use or other equivalent, as provi\hich\af1\dbch\af31505\loch\f1 ded by copyright law.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 You may make, run and propagate covered works that you do not
+\par \hich\af1\dbch\af31505\loch\f1 convey, without conditions so long as your license otherwise remains
+\par \hich\af1\dbch\af31505\loch\f1 in force. You may convey covered works to others for the sole purpose
+\par \hich\af1\dbch\af31505\loch\f1 of having them make modificat\hich\af1\dbch\af31505\loch\f1 ions exclusively for you, or provide you
+\par \hich\af1\dbch\af31505\loch\f1 with facilities for running those works, provided that you comply with
+\par \hich\af1\dbch\af31505\loch\f1 the terms of this License in conveying all material for which you do
+\par \hich\af1\dbch\af31505\loch\f1 not control copyright. Those thus making or running the covered works
+\par \hich\af1\dbch\af31505\loch\f1 for \hich\af1\dbch\af31505\loch\f1 you must do so exclusively on your behalf, under your direction
+\par \hich\af1\dbch\af31505\loch\f1 and control, on terms that prohibit them from making any copies of
+\par \hich\af1\dbch\af31505\loch\f1 your copyrighted material outside their relationship with you.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 Conveying under any other circumstances is permitted solely\hich\af1\dbch\af31505\loch\f1 under
+\par \hich\af1\dbch\af31505\loch\f1 the conditions stated below. Sublicensing is not allowed; section 10
+\par \hich\af1\dbch\af31505\loch\f1 makes it unnecessary.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 No covered work shall be deemed part of an effective technological
+\par \hich\af1\dbch\af31505\loch\f1 measure under any app\hich\af1\dbch\af31505\loch\f1 licable law fulfilling obligations under article
+\par \hich\af1\dbch\af31505\loch\f1 11 of the WIPO copyright treaty adopted on 20 December 1996, or
+\par \hich\af1\dbch\af31505\loch\f1 similar laws prohibiting or restricting circumvention of such
+\par \hich\af1\dbch\af31505\loch\f1 measures.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 When you convey a covered work, you waive any legal power to forbid
+\par \hich\af1\dbch\af31505\loch\f1 circumvention of technological measures to the extent such circumvention
+\par \hich\af1\dbch\af31505\loch\f1 is effected by exercising rights under this License with respect to
+\par \hich\af1\dbch\af31505\loch\f1 the covered work, and you disclaim any intention to limit operation or
+\par \hich\af1\dbch\af31505\loch\f1 modification of the work as a means of enfor\hich\af1\dbch\af31505\loch\f1 cing, against the work's
+\par \hich\af1\dbch\af31505\loch\f1 users, your or third parties' legal rights to forbid circumvention of
+\par \hich\af1\dbch\af31505\loch\f1 technological measures.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 4. Conveying Verbatim Copies.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 You may convey verbatim copies of the Program's source code as you
+\par \hich\af1\dbch\af31505\loch\f1 receive it, in any medium, provide\hich\af1\dbch\af31505\loch\f1 d that you conspicuously and
+\par \hich\af1\dbch\af31505\loch\f1 appropriately publish on each copy an appropriate copyright notice;
+\par \hich\af1\dbch\af31505\loch\f1 keep intact all notices stating that this License and any
+\par \hich\af1\dbch\af31505\loch\f1 non-permissive terms added in accord with section 7 apply to the code;
+\par \hich\af1\dbch\af31505\loch\f1 keep intact all notices of the\hich\af1\dbch\af31505\loch\f1 absence of any warranty; and give all
+\par \hich\af1\dbch\af31505\loch\f1 recipients a copy of this License along with the Program.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 You may charge any price or no price for each copy that you convey,
+\par \hich\af1\dbch\af31505\loch\f1 and you may offer support or warranty protection for a fee.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 5. Conveying Modified Sou\hich\af1\dbch\af31505\loch\f1 rce Versions.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 You may convey a work based on the Program, or the modifications to
+\par \hich\af1\dbch\af31505\loch\f1 produce it from the Program, in the form of source code under the
+\par \hich\af1\dbch\af31505\loch\f1 terms of section 4, provided that you also meet all of these conditions:
+\par
+\par \hich\af1\dbch\af31505\loch\f1 a) The work must carry prom\hich\af1\dbch\af31505\loch\f1 inent notices stating that you modified
+\par \hich\af1\dbch\af31505\loch\f1 it, and giving a relevant date.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 b) The work must carry prominent notices stating that it is
+\par \hich\af1\dbch\af31505\loch\f1 released under this License and any conditions added under section
+\par \hich\af1\dbch\af31505\loch\f1 7. This requirement modifies the requirement in section 4 to
+\par \hich\af1\dbch\af31505\loch\f1 "keep intact all notices".
+\par
+\par \hich\af1\dbch\af31505\loch\f1 c) You must license the entire work, as a whole, under this
+\par \hich\af1\dbch\af31505\loch\f1 License to anyone w\hich\af1\dbch\af31505\loch\f1 ho comes into possession of a copy. This
+\par \hich\af1\dbch\af31505\loch\f1 License will therefore apply, along with any applicable section 7
+\par \hich\af1\dbch\af31505\loch\f1 additional terms, to the whole of the work, and all its parts,
+\par \hich\af1\dbch\af31505\loch\f1 regardless of how they are packaged. This License gives no
+\par \hich\af1\dbch\af31505\loch\f1 permissio\hich\af1\dbch\af31505\loch\f1 n to license the work in any other way, but it does not
+\par \hich\af1\dbch\af31505\loch\f1 invalidate such permission if you have separately received it.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 d) If the work has interactive user interfaces, each must display
+\par \hich\af1\dbch\af31505\loch\f1 Appropriate Legal Notices; however, if the Program has int\hich\af1\dbch\af31505\loch\f1 eractive
+\par \hich\af1\dbch\af31505\loch\f1 interfaces that do not display Appropriate Legal Notices, your
+\par \hich\af1\dbch\af31505\loch\f1 work need not make them do so.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 A compilation of a covered work with other separate and independent
+\par \hich\af1\dbch\af31505\loch\f1 works, which are not by their nature extensions of the covered work,
+\par \hich\af1\dbch\af31505\loch\f1 and w\hich\af1\dbch\af31505\loch\f1 hich are not combined with it such as to form a larger program,
+\par \hich\af1\dbch\af31505\loch\f1 in or on a volume of a storage or distribution medium, is called an
+\par \hich\af1\dbch\af31505\loch\f1 "aggregate" if the compilation and its resulting copyright are not
+\par \hich\af1\dbch\af31505\loch\f1 used to limit the access or legal rights of the compilati\hich\af1\dbch\af31505\loch\f1 on's users
+\par \hich\af1\dbch\af31505\loch\f1 beyond what the individual works permit. Inclusion of a covered work
+\par \hich\af1\dbch\af31505\loch\f1 in an aggregate does not cause this License to apply to the other
+\par \hich\af1\dbch\af31505\loch\f1 parts of the aggregate.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 6. Conveying Non-Source Forms.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 You may convey a covered work in object code form under the terms
+\par \hich\af1\dbch\af31505\loch\f1 of sections 4 and 5, provided that you also convey the
+\par \hich\af1\dbch\af31505\loch\f1 machine-readable Corresponding Source under the terms of this License,
+\par \hich\af1\dbch\af31505\loch\f1 in one of these ways:
+\par
+\par \hich\af1\dbch\af31505\loch\f1 a) Convey the object code in, or em\hich\af1\dbch\af31505\loch\f1 bodied in, a physical product
+\par \hich\af1\dbch\af31505\loch\f1 (including a physical distribution medium), accompanied by the
+\par \hich\af1\dbch\af31505\loch\f1 Corresponding Source fixed on a durable physical medium
+\par \hich\af1\dbch\af31505\loch\f1 customarily used for software interchange.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 b) Convey the object code in, or embodied in, a\hich\af1\dbch\af31505\loch\f1 physical product
+\par \hich\af1\dbch\af31505\loch\f1 (including a physical distribution medium), accompanied by a
+\par \hich\af1\dbch\af31505\loch\f1 written offer, valid for at least three years and valid for as
+\par \hich\af1\dbch\af31505\loch\f1 long as you offer spare parts or customer support for that product
+\par \hich\af1\dbch\af31505\loch\f1 model, to give anyone who posse\hich\af1\dbch\af31505\loch\f1 sses the object code either (1) a
+\par \hich\af1\dbch\af31505\loch\f1 copy of the Corresponding Source for all the software in the
+\par \hich\af1\dbch\af31505\loch\f1 product that is covered by this License, on a durable physical
+\par \hich\af1\dbch\af31505\loch\f1 medium customarily used for software interchange, for a price no
+\par \hich\af1\dbch\af31505\loch\f1 more than your re\hich\af1\dbch\af31505\loch\f1 asonable cost of physically performing this
+\par \hich\af1\dbch\af31505\loch\f1 conveying of source, or (2) access to copy the
+\par \hich\af1\dbch\af31505\loch\f1 Corresponding Source from a network server at no charge.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 c) Convey individual copies of the object code with a copy of the
+\par \hich\af1\dbch\af31505\loch\f1 written offer to provide \hich\af1\dbch\af31505\loch\f1 the Corresponding Source. This
+\par \hich\af1\dbch\af31505\loch\f1 alternative is allowed only occasionally and noncommercially, and
+\par \hich\af1\dbch\af31505\loch\f1 only if you received the object code with such an offer, in accord
+\par \hich\af1\dbch\af31505\loch\f1 with subsection 6b.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 d) Convey the object code by offering access from a designated
+\par \hich\af1\dbch\af31505\loch\f1 place (gratis or for a charge), and offer equivalent access to the
+\par \hich\af1\dbch\af31505\loch\f1 Corresponding Source in the same way through the same place at no
+\par \hich\af1\dbch\af31505\loch\f1 further charge. You need not require recipi\hich\af1\dbch\af31505\loch\f1 ents to copy the
+\par \hich\af1\dbch\af31505\loch\f1 Corresponding Source along with the object code. If the place to
+\par \hich\af1\dbch\af31505\loch\f1 copy the object code is a network server, the Corresponding Source
+\par \hich\af1\dbch\af31505\loch\f1 may be on a different server (operated by you or a third party)
+\par \hich\af1\dbch\af31505\loch\f1 that supports equivalent c\hich\af1\dbch\af31505\loch\f1 opying facilities, provided you maintain
+\par \hich\af1\dbch\af31505\loch\f1 clear directions next to the object code saying where to find the
+\par \hich\af1\dbch\af31505\loch\f1 Corresponding Source. Regardless of what server hosts the
+\par \hich\af1\dbch\af31505\loch\f1 Corresponding Source, you remain obligated to ensure that it is
+\par \hich\af1\dbch\af31505\loch\f1 available \hich\af1\dbch\af31505\loch\f1 for as long as needed to satisfy these requirements.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 e) Convey the object code using peer-to-peer transmission, provided
+\par \hich\af1\dbch\af31505\loch\f1 you inform other peers where the object code and Corresponding
+\par \hich\af1\dbch\af31505\loch\f1 Source of the work are being offered to the general public \hich\af1\dbch\af31505\loch\f1 at no
+\par \hich\af1\dbch\af31505\loch\f1 charge under subsection 6d.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 A separable portion of the object code, whose source code is excluded
+\par \hich\af1\dbch\af31505\loch\f1 from the Corresponding Source as a System Library, need not be
+\par \hich\af1\dbch\af31505\loch\f1 included in conveying the object code work.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 A "User Product" is either (1) a "c\hich\af1\dbch\af31505\loch\f1 onsumer product", which means any
+\par \hich\af1\dbch\af31505\loch\f1 tangible personal property which is normally used for personal, family,
+\par \hich\af1\dbch\af31505\loch\f1 or household purposes, or (2) anything designed or sold for incorporation
+\par \hich\af1\dbch\af31505\loch\f1 into a dwelling. In determining whether a product is a consumer product,
+\par \hich\af1\dbch\af31505\loch\f1 do\hich\af1\dbch\af31505\loch\f1 ubtful cases shall be resolved in favor of coverage. For a particular
+\par \hich\af1\dbch\af31505\loch\f1 product received by a particular user, "normally used" refers to a
+\par \hich\af1\dbch\af31505\loch\f1 typical or common use of that class of product, regardless of the status
+\par \hich\af1\dbch\af31505\loch\f1 of the particular user or of the way in which the particular user
+\par \hich\af1\dbch\af31505\loch\f1 actually uses, or expects or is expected to use, the product. A product
+\par \hich\af1\dbch\af31505\loch\f1 is a consumer product regardless of whether the product has substantial
+\par \hich\af1\dbch\af31505\loch\f1 commercial, industrial or non-consumer uses, \hich\af1\dbch\af31505\loch\f1 unless such uses represent
+\par \hich\af1\dbch\af31505\loch\f1 the only significant mode of use of the product.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 "Installation Information" for a User Product means any methods,
+\par \hich\af1\dbch\af31505\loch\f1 procedures, authorization keys, or other information required to install
+\par \hich\af1\dbch\af31505\loch\f1 and execute modified versions of a cove\hich\af1\dbch\af31505\loch\f1 red work in that User Product from
+\par \hich\af1\dbch\af31505\loch\f1 a modified version of its Corresponding Source. The information must
+\par \hich\af1\dbch\af31505\loch\f1 suffice to ensure that the continued functioning of the modified object
+\par \hich\af1\dbch\af31505\loch\f1 code is in no case prevented or interfered with solely because
+\par \hich\af1\dbch\af31505\loch\f1 modification has\hich\af1\dbch\af31505\loch\f1 been made.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 If you convey an object code work under this section in, or with, or
+\par \hich\af1\dbch\af31505\loch\f1 specifically for use in, a User Product, and the conveying occurs as
+\par \hich\af1\dbch\af31505\loch\f1 part of a transaction in which the right of possession and use of the
+\par \hich\af1\dbch\af31505\loch\f1 User Product is transferred to th\hich\af1\dbch\af31505\loch\f1 e recipient in perpetuity or for a
+\par \hich\af1\dbch\af31505\loch\f1 fixed term (regardless of how the transaction is characterized), the
+\par \hich\af1\dbch\af31505\loch\f1 Corresponding Source conveyed under this section must be accompanied
+\par \hich\af1\dbch\af31505\loch\f1 by the Installation Information. But this requirement does not apply
+\par \hich\af1\dbch\af31505\loch\f1 if neither yo\hich\af1\dbch\af31505\loch\f1 u nor any third party retains the ability to install
+\par \hich\af1\dbch\af31505\loch\f1 modified object code on the User Product (for example, the work has
+\par \hich\af1\dbch\af31505\loch\f1 been installed in ROM).
+\par
+\par \hich\af1\dbch\af31505\loch\f1 The requirement to provide Installation Information does not include a
+\par \hich\af1\dbch\af31505\loch\f1 requirement to continue to provide su\hich\af1\dbch\af31505\loch\f1 pport service, warranty, or updates
+\par \hich\af1\dbch\af31505\loch\f1 for a work that has been modified or installed by the recipient, or for
+\par \hich\af1\dbch\af31505\loch\f1 the User Product in which it has been modified or installed. Access to a
+\par \hich\af1\dbch\af31505\loch\f1 network may be denied when the modification itself materially and
+\par \hich\af1\dbch\af31505\loch\f1 adversely affects the operation of the network or violates the rules and
+\par \hich\af1\dbch\af31505\loch\f1 protocols for communication across the network.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 Corresponding Source conveyed, and Installation Information provid\hich\af1\dbch\af31505\loch\f1 ed,
+\par \hich\af1\dbch\af31505\loch\f1 in accord with this section must be in a format that is publicly
+\par \hich\af1\dbch\af31505\loch\f1 documented (and with an implementation available to the public in
+\par \hich\af1\dbch\af31505\loch\f1 source code form), and must require no special password or key for
+\par \hich\af1\dbch\af31505\loch\f1 unpacking, reading or copying.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 7. Additional Terms.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 "Additional permissions" are terms that supplement the terms of this
+\par \hich\af1\dbch\af31505\loch\f1 License by making exceptions from one or more of its conditions.
+\par \hich\af1\dbch\af31505\loch\f1 Additional permissions that are applicable to the entire Program shall
+\par \hich\af1\dbch\af31505\loch\f1 be treated as though they were included in this\hich\af1\dbch\af31505\loch\f1 License, to the extent
+\par \hich\af1\dbch\af31505\loch\f1 that they are valid under applicable law. If additional permissions
+\par \hich\af1\dbch\af31505\loch\f1 apply only to part of the Program, that part may be used separately
+\par \hich\af1\dbch\af31505\loch\f1 under those permissions, but the entire Program remains governed by
+\par \hich\af1\dbch\af31505\loch\f1 this License without regard\hich\af1\dbch\af31505\loch\f1 to the additional permissions.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 When you convey a copy of a covered work, you may at your option
+\par \hich\af1\dbch\af31505\loch\f1 remove any additional permissions from that copy, or from any part of
+\par \hich\af1\dbch\af31505\loch\f1 it. (Additional permissions may be written to require their own
+\par \hich\af1\dbch\af31505\loch\f1 removal in certain ca\hich\af1\dbch\af31505\loch\f1 ses when you modify the work.) You may place
+\par \hich\af1\dbch\af31505\loch\f1 additional permissions on material, added by you to a covered work,
+\par \hich\af1\dbch\af31505\loch\f1 for which you have or can give appropriate copyright permission.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 Notwithstanding any other provision of this License, for material you
+\par \hich\af1\dbch\af31505\loch\f1 add to a covered work, you may (if authorized by the copyright holders of
+\par \hich\af1\dbch\af31505\loch\f1 that material) supplement the terms of this License with terms:
+\par
+\par \hich\af1\dbch\af31505\loch\f1 a) Disclaiming warranty or limiting liability differently from the
+\par \hich\af1\dbch\af31505\loch\f1 terms of sections 15 and 16 of this Licens\hich\af1\dbch\af31505\loch\f1 e; or
+\par
+\par \hich\af1\dbch\af31505\loch\f1 b) Requiring preservation of specified reasonable legal notices or
+\par \hich\af1\dbch\af31505\loch\f1 author attributions in that material or in the Appropriate Legal
+\par \hich\af1\dbch\af31505\loch\f1 Notices displayed by works containing it; or
+\par
+\par \hich\af1\dbch\af31505\loch\f1 c) Prohibiting misrepresentation of the origin of that \hich\af1\dbch\af31505\loch\f1 material, or
+\par \hich\af1\dbch\af31505\loch\f1 requiring that modified versions of such material be marked in
+\par \hich\af1\dbch\af31505\loch\f1 reasonable ways as different from the original version; or
+\par
+\par \hich\af1\dbch\af31505\loch\f1 d) Limiting the use for publicity purposes of names of licensors or
+\par \hich\af1\dbch\af31505\loch\f1 authors of the material; or
+\par
+\par \hich\af1\dbch\af31505\loch\f1 e) \hich\af1\dbch\af31505\loch\f1 Declining to grant rights under trademark law for use of some
+\par \hich\af1\dbch\af31505\loch\f1 trade names, trademarks, or service marks; or
+\par
+\par \hich\af1\dbch\af31505\loch\f1 f) Requiring indemnification of licensors and authors of that
+\par \hich\af1\dbch\af31505\loch\f1 material by anyone who conveys the material (or modified versions of
+\par \hich\af1\dbch\af31505\loch\f1 \hich\af1\dbch\af31505\loch\f1 it) with contractual assumptions of liability to the recipient, for
+\par \hich\af1\dbch\af31505\loch\f1 any liability that these contractual assumptions directly impose on
+\par \hich\af1\dbch\af31505\loch\f1 those licensors and authors.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 All other non-permissive additional terms are considered "further
+\par \hich\af1\dbch\af31505\loch\f1 restrictions" \hich\af1\dbch\af31505\loch\f1 within the meaning of section 10. If the Program as you
+\par \hich\af1\dbch\af31505\loch\f1 received it, or any part of it, contains a notice stating that it is
+\par \hich\af1\dbch\af31505\loch\f1 governed by this License along with a term that is a further
+\par \hich\af1\dbch\af31505\loch\f1 restriction, you may remove that term. If a license document contains
+\par \hich\af1\dbch\af31505\loch\f1 a further restriction but permits relicensing or conveying under this
+\par \hich\af1\dbch\af31505\loch\f1 License, you may add to a covered work material governed by the terms
+\par \hich\af1\dbch\af31505\loch\f1 of that license document, provided that the f\hich\af1\dbch\af31505\loch\f1 urther restriction does
+\par \hich\af1\dbch\af31505\loch\f1 not survive such relicensing or conveying.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 If you add terms to a covered work in accord with this section, you
+\par \hich\af1\dbch\af31505\loch\f1 must place, in the relevant source files, a statement of the
+\par \hich\af1\dbch\af31505\loch\f1 additional terms that apply to those files, or a notice i\hich\af1\dbch\af31505\loch\f1 ndicating
+\par \hich\af1\dbch\af31505\loch\f1 where to find the applicable terms.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 Additional terms, permissive or non-permissive, may be stated in the
+\par \hich\af1\dbch\af31505\loch\f1 form of a separately written license, or stated as exceptions;
+\par \hich\af1\dbch\af31505\loch\f1 the above requirements apply either way.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 8. Termination.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 You may not \hich\af1\dbch\af31505\loch\f1 propagate or modify a covered work except as expressly
+\par \hich\af1\dbch\af31505\loch\f1 provided under this License. Any attempt otherwise to propagate or
+\par \hich\af1\dbch\af31505\loch\f1 modify it is void, and will automatically terminate your rights under
+\par \hich\af1\dbch\af31505\loch\f1 this License (including any patent licenses granted under the t\hich\af1\dbch\af31505\loch\f1 hird
+\par \hich\af1\dbch\af31505\loch\f1 paragraph of section 11).
+\par
+\par \hich\af1\dbch\af31505\loch\f1 However, if you cease all violation of this License, then your
+\par \hich\af1\dbch\af31505\loch\f1 license from a particular copyright holder is reinstated (a)
+\par \hich\af1\dbch\af31505\loch\f1 provisionally, unless and until the copyright holder explicitly and
+\par \hich\af1\dbch\af31505\loch\f1 finally terminates your licens\hich\af1\dbch\af31505\loch\f1 e, and (b) permanently, if the copyright
+\par \hich\af1\dbch\af31505\loch\f1 holder fails to notify you of the violation by some reasonable means
+\par \hich\af1\dbch\af31505\loch\f1 prior to 60 days after the cessation.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 Moreover, your license from a particular copyright holder is
+\par \hich\af1\dbch\af31505\loch\f1 reinstated permanently if the copyright holder notifies you of the
+\par \hich\af1\dbch\af31505\loch\f1 violation by some reasonable means, this is the first time you have
+\par \hich\af1\dbch\af31505\loch\f1 received notice of violation of this License (for any work\hich\af1\dbch\af31505\loch\f1 ) from that
+\par \hich\af1\dbch\af31505\loch\f1 copyright holder, and you cure the violation prior to 30 days after
+\par \hich\af1\dbch\af31505\loch\f1 your receipt of the notice.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 Termination of your rights under this section does not terminate the
+\par \hich\af1\dbch\af31505\loch\f1 licenses of parties who have received copies or rights from you under
+\par \hich\af1\dbch\af31505\loch\f1 this L\hich\af1\dbch\af31505\loch\f1 icense. If your rights have been terminated and not permanently
+\par \hich\af1\dbch\af31505\loch\f1 reinstated, you do not qualify to receive new licenses for the same
+\par \hich\af1\dbch\af31505\loch\f1 material under section 10.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 9. Acceptance Not Required for Having Copies.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 You are not required to accept this License \hich\af1\dbch\af31505\loch\f1 in order to receive or
+\par \hich\af1\dbch\af31505\loch\f1 run a copy of the Program. Ancillary propagation of a covered work
+\par \hich\af1\dbch\af31505\loch\f1 occurring solely as a consequence of using peer-to-peer transmission
+\par \hich\af1\dbch\af31505\loch\f1 to receive a copy likewise does not require acceptance. However,
+\par \hich\af1\dbch\af31505\loch\f1 nothing other than this Licens\hich\af1\dbch\af31505\loch\f1 e grants you permission to propagate or
+\par \hich\af1\dbch\af31505\loch\f1 modify any covered work. These actions infringe copyright if you do
+\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f1\fs20\insrsid12386343\charrsid12386343 \hich\af1\dbch\af31505\loch\f1 not accept this License. Therefore, by modifying or propagating a
+\par \hich\af1\dbch\af31505\loch\f1 covered work, you indicate your acceptance of this License to do so.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 10. Auto\hich\af1\dbch\af31505\loch\f1 matic Licensing of Downstream Recipients.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 Each time you convey a covered work, the recipient automatically
+\par \hich\af1\dbch\af31505\loch\f1 receives a license from the original licensors, to run, modify and
+\par \hich\af1\dbch\af31505\loch\f1 propagate that work, subject to this License. You are not responsible
+\par \hich\af1\dbch\af31505\loch\f1 for enforcing compliance by third parties with this License.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 An "entity transaction" is a transaction transferring control of an
+\par \hich\af1\dbch\af31505\loch\f1 organization, or substantially all assets of one, or \hich\af1\dbch\af31505\loch\f1 subdividing an
+\par \hich\af1\dbch\af31505\loch\f1 organization, or merging organizations. If propagation of a covered
+\par \hich\af1\dbch\af31505\loch\f1 work results from an entity transaction, each party to that
+\par \hich\af1\dbch\af31505\loch\f1 transaction who receives a copy of the work also receives whatever
+\par \hich\af1\dbch\af31505\loch\f1 licenses to the work the party's predecessor \hich\af1\dbch\af31505\loch\f1 in interest had or could
+\par \hich\af1\dbch\af31505\loch\f1 give under the previous paragraph, plus a right to possession of the
+\par \hich\af1\dbch\af31505\loch\f1 Corresponding Source of the work from the predecessor in interest, if
+\par \hich\af1\dbch\af31505\loch\f1 the predecessor has it or can get it with reasonable efforts.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 You may not impose any furt\hich\af1\dbch\af31505\loch\f1 her restrictions on the exercise of the
+\par \hich\af1\dbch\af31505\loch\f1 rights granted or affirmed under this License. For example, you may
+\par \hich\af1\dbch\af31505\loch\f1 not impose a license fee, royalty, or other charge for exercise of
+\par \hich\af1\dbch\af31505\loch\f1 rights granted under this License, and you may not initiate litigation
+\par \hich\af1\dbch\af31505\loch\f1 (includin\hich\af1\dbch\af31505\loch\f1 g a cross-claim or counterclaim in a lawsuit) alleging that
+\par \hich\af1\dbch\af31505\loch\f1 any patent claim is infringed by making, using, selling, offering for
+\par \hich\af1\dbch\af31505\loch\f1 sale, or importing the Program or any portion of it.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 11. Patents.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 A "contributor" is a copyright holder who authorizes u\hich\af1\dbch\af31505\loch\f1 se under this
+\par \hich\af1\dbch\af31505\loch\f1 License of the Program or a work on which the Program is based. The
+\par \hich\af1\dbch\af31505\loch\f1 work thus licensed is called the contributor's "contributor version".
+\par
+\par \hich\af1\dbch\af31505\loch\f1 A contributor's "essential patent claims" are all patent claims
+\par \hich\af1\dbch\af31505\loch\f1 owned or controlled by the contributor, whether already acquired or
+\par \hich\af1\dbch\af31505\loch\f1 hereafter acquired, that would be infringed by some manner, permitted
+\par \hich\af1\dbch\af31505\loch\f1 by this License, of making, using, or selling its contributor version,
+\par \hich\af1\dbch\af31505\loch\f1 but do not include claims that would be infring\hich\af1\dbch\af31505\loch\f1 ed only as a
+\par \hich\af1\dbch\af31505\loch\f1 consequence of further modification of the contributor version. For
+\par \hich\af1\dbch\af31505\loch\f1 purposes of this definition, "control" includes the right to grant
+\par \hich\af1\dbch\af31505\loch\f1 patent sublicenses in a manner consistent with the requirements of
+\par \hich\af1\dbch\af31505\loch\f1 this License.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 Each contributor grants\hich\af1\dbch\af31505\loch\f1 you a non-exclusive, worldwide, royalty-free
+\par \hich\af1\dbch\af31505\loch\f1 patent license under the contributor's essential patent claims, to
+\par \hich\af1\dbch\af31505\loch\f1 make, use, sell, offer for sale, import and otherwise run, modify and
+\par \hich\af1\dbch\af31505\loch\f1 propagate the contents of its contributor version.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 In the following th\hich\af1\dbch\af31505\loch\f1 ree paragraphs, a "patent license" is any express
+\par \hich\af1\dbch\af31505\loch\f1 agreement or commitment, however denominated, not to enforce a patent
+\par \hich\af1\dbch\af31505\loch\f1 (such as an express permission to practice a patent or covenant not to
+\par \hich\af1\dbch\af31505\loch\f1 sue for patent infringement). To "grant" such a patent license t\hich\af1\dbch\af31505\loch\f1 o a
+\par \hich\af1\dbch\af31505\loch\f1 party means to make such an agreement or commitment not to enforce a
+\par \hich\af1\dbch\af31505\loch\f1 patent against the party.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 If you convey a covered work, knowingly relying on a patent license,
+\par \hich\af1\dbch\af31505\loch\f1 and the Corresponding Source of the work is not available for anyone
+\par \hich\af1\dbch\af31505\loch\f1 to copy, free of\hich\af1\dbch\af31505\loch\f1 charge and under the terms of this License, through a
+\par \hich\af1\dbch\af31505\loch\f1 publicly available network server or other readily accessible means,
+\par \hich\af1\dbch\af31505\loch\f1 then you must either (1) cause the Corresponding Source to be so
+\par \hich\af1\dbch\af31505\loch\f1 available, or (2) arrange to deprive yourself of the benefit of the
+\par \hich\af1\dbch\af31505\loch\f1 patent license for this particular work, or (3) arrange, in a manner
+\par \hich\af1\dbch\af31505\loch\f1 consistent with the requirements of this License, to extend the patent
+\par \hich\af1\dbch\af31505\loch\f1 license to downstream recipients. "Knowingly relying" means you have
+\par \hich\af1\dbch\af31505\loch\f1 actual knowledge that, but for the patent license, your conveying the
+\par \hich\af1\dbch\af31505\loch\f1 covered work in a country, or your recipient's use of the covered work
+\par \hich\af1\dbch\af31505\loch\f1 in a country, would infringe one or more iden\hich\af1\dbch\af31505\loch\f1 tifiable patents in that
+\par \hich\af1\dbch\af31505\loch\f1 country that you have reason to believe are valid.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 If, pursuant to or in connection with a single transaction or
+\par \hich\af1\dbch\af31505\loch\f1 arrangement, you convey, or propagate by procuring conveyance of, a
+\par \hich\af1\dbch\af31505\loch\f1 covered work, and grant a patent license to som\hich\af1\dbch\af31505\loch\f1 e of the parties
+\par \hich\af1\dbch\af31505\loch\f1 receiving the covered work authorizing them to use, propagate, modify
+\par \hich\af1\dbch\af31505\loch\f1 or convey a specific copy of the covered work, then the patent license
+\par \hich\af1\dbch\af31505\loch\f1 you grant is automatically extended to all recipients of the covered
+\par \hich\af1\dbch\af31505\loch\f1 work and works based on it.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 A patent license is "discriminatory" if it does not include within
+\par \hich\af1\dbch\af31505\loch\f1 the scope of its coverage, prohibits the exercise of, or is
+\par \hich\af1\dbch\af31505\loch\f1 conditioned on the non-exercise of one or more of the rights that are
+\par \hich\af1\dbch\af31505\loch\f1 specifically granted under this License. You may not con\hich\af1\dbch\af31505\loch\f1 vey a covered
+\par \hich\af1\dbch\af31505\loch\f1 work if you are a party to an arrangement with a third party that is
+\par \hich\af1\dbch\af31505\loch\f1 in the business of distributing software, under which you make payment
+\par \hich\af1\dbch\af31505\loch\f1 to the third party based on the extent of your activity of conveying
+\par \hich\af1\dbch\af31505\loch\f1 the work, and under which the thi\hich\af1\dbch\af31505\loch\f1 rd party grants, to any of the
+\par \hich\af1\dbch\af31505\loch\f1 parties who would receive the covered work from you, a discriminatory
+\par \hich\af1\dbch\af31505\loch\f1 patent license (a) in connection with copies of the covered work
+\par \hich\af1\dbch\af31505\loch\f1 conveyed by you (or copies made from those copies), or (b) primarily
+\par \hich\af1\dbch\af31505\loch\f1 for and in connection\hich\af1\dbch\af31505\loch\f1 with specific products or compilations that
+\par \hich\af1\dbch\af31505\loch\f1 contain the covered work, unless you entered into that arrangement,
+\par \hich\af1\dbch\af31505\loch\f1 or that patent license was granted, prior to 28 March 2007.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 Nothing in this License shall be construed as excluding or limiting
+\par \hich\af1\dbch\af31505\loch\f1 any implied license or other defenses to infringement that may
+\par \hich\af1\dbch\af31505\loch\f1 otherwise be available to you under applicable patent law.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 12. No Surrender of Others' Freedom.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 If conditions are imp\hich\af1\dbch\af31505\loch\f1 osed on you (whether by court order, agreement or
+\par \hich\af1\dbch\af31505\loch\f1 otherwise) that contradict the conditions of this License, they do not
+\par \hich\af1\dbch\af31505\loch\f1 excuse you from the conditions of this License. If you cannot convey a
+\par \hich\af1\dbch\af31505\loch\f1 covered work so as to satisfy simultaneously your obligations u\hich\af1\dbch\af31505\loch\f1 nder this
+\par \hich\af1\dbch\af31505\loch\f1 License and any other pertinent obligations, then as a consequence you may
+\par \hich\af1\dbch\af31505\loch\f1 not convey it at all. For example, if you agree to terms that obligate you
+\par \hich\af1\dbch\af31505\loch\f1 to collect a royalty for further conveying from those to whom you convey
+\par \hich\af1\dbch\af31505\loch\f1 the Program, the only \hich\af1\dbch\af31505\loch\f1 way you could satisfy both those terms and this
+\par \hich\af1\dbch\af31505\loch\f1 License would be to refrain entirely from conveying the Program.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 13. Remote Network Interaction; Use with the GNU General Public License.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 Notwithstanding any other provision of this License, if you modi\hich\af1\dbch\af31505\loch\f1 fy the
+\par \hich\af1\dbch\af31505\loch\f1 Program, your modified version must prominently offer all users
+\par \hich\af1\dbch\af31505\loch\f1 interacting with it remotely through a computer network (if your version
+\par \hich\af1\dbch\af31505\loch\f1 supports such interaction) an opportunity to receive the Corresponding
+\par \hich\af1\dbch\af31505\loch\f1 Source of your version by providing acces\hich\af1\dbch\af31505\loch\f1 s to the Corresponding Source
+\par \hich\af1\dbch\af31505\loch\f1 from a network server at no charge, through some standard or customary
+\par \hich\af1\dbch\af31505\loch\f1 means of facilitating copying of software. This Corresponding Source
+\par \hich\af1\dbch\af31505\loch\f1 shall include the Corresponding Source for any work covered by version 3
+\par \hich\af1\dbch\af31505\loch\f1 of the GNU G\hich\af1\dbch\af31505\loch\f1 eneral Public License that is incorporated pursuant to the
+\par \hich\af1\dbch\af31505\loch\f1 following paragraph.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 Notwithstanding any other provision of this License, you have
+\par \hich\af1\dbch\af31505\loch\f1 permission to link or combine any covered work with a work licensed
+\par \hich\af1\dbch\af31505\loch\f1 under version 3 of the GNU General Public License into a single
+\par \hich\af1\dbch\af31505\loch\f1 combined work, and to convey the resulting work. The terms of this
+\par \hich\af1\dbch\af31505\loch\f1 License will continue to apply to the part which is the \hich\af1\dbch\af31505\loch\f1 covered work,
+\par \hich\af1\dbch\af31505\loch\f1 but the work with which it is combined will remain governed by version
+\par \hich\af1\dbch\af31505\loch\f1 3 of the GNU General Public License.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 14. Revised Versions of this License.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 The Free Software Foundation may publish revised and/or new versions of
+\par \hich\af1\dbch\af31505\loch\f1 the GNU Affero Gen\hich\af1\dbch\af31505\loch\f1 eral Public License from time to time. Such new versions
+\par \hich\af1\dbch\af31505\loch\f1 will be similar in spirit to the present version, but may differ in detail to
+\par \hich\af1\dbch\af31505\loch\f1 address new problems or concerns.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 Each version is given a distinguishing version number. If the
+\par \hich\af1\dbch\af31505\loch\f1 Program specifies th\hich\af1\dbch\af31505\loch\f1 at a certain numbered version of the GNU Affero General
+\par \hich\af1\dbch\af31505\loch\f1 Public License "or any later version" applies to it, you have the
+\par \hich\af1\dbch\af31505\loch\f1 option of following the terms and conditions either of that numbered
+\par \hich\af1\dbch\af31505\loch\f1 version or of any later version published by the Free Software
+\par \hich\af1\dbch\af31505\loch\f1 Fo\hich\af1\dbch\af31505\loch\f1 undation. If the Program does not specify a version number of the
+\par \hich\af1\dbch\af31505\loch\f1 GNU Affero General Public License, you may choose any version ever published
+\par \hich\af1\dbch\af31505\loch\f1 by the Free Software Foundation.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 If the Program specifies that a proxy can decide which future
+\par \hich\af1\dbch\af31505\loch\f1 versions of th\hich\af1\dbch\af31505\loch\f1 e GNU Affero General Public License can be used, that proxy's
+\par \hich\af1\dbch\af31505\loch\f1 public statement of acceptance of a version permanently authorizes you
+\par \hich\af1\dbch\af31505\loch\f1 to choose that version for the Program.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 Later license versions may give you additional or different
+\par \hich\af1\dbch\af31505\loch\f1 permissions. However, no additional obligations are imposed on any
+\par \hich\af1\dbch\af31505\loch\f1 author or copyright holder as a result of your choosing to follow a
+\par \hich\af1\dbch\af31505\loch\f1 later version.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 15. Disclaimer of Warranty.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 THERE IS \hich\af1\dbch\af31505\loch\f1 NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+\par \hich\af1\dbch\af31505\loch\f1 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+\par \hich\af1\dbch\af31505\loch\f1 HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+\par \hich\af1\dbch\af31505\loch\f1 OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BU\hich\af1\dbch\af31505\loch\f1 T NOT LIMITED TO,
+\par \hich\af1\dbch\af31505\loch\f1 THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+\par \hich\af1\dbch\af31505\loch\f1 PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+\par \hich\af1\dbch\af31505\loch\f1 IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+\par \hich\af1\dbch\af31505\loch\f1 ALL NECESSARY SERVI\hich\af1\dbch\af31505\loch\f1 CING, REPAIR OR CORRECTION.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 16. Limitation of Liability.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+\par \hich\af1\dbch\af31505\loch\f1 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+\par \hich\af1\dbch\af31505\loch\f1 THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU \hich\af1\dbch\af31505\loch\f1 FOR DAMAGES, INCLUDING ANY
+\par \hich\af1\dbch\af31505\loch\f1 GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+\par \hich\af1\dbch\af31505\loch\f1 USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+\par \hich\af1\dbch\af31505\loch\f1 DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+\par \hich\af1\dbch\af31505\loch\f1 PARTIES\hich\af1\dbch\af31505\loch\f1 OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+\par \hich\af1\dbch\af31505\loch\f1 EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+\par \hich\af1\dbch\af31505\loch\f1 SUCH DAMAGES.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 17. Interpretation of Sections 15 and 16.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 If the disclaimer of warranty and limitation of liability provided
+\par \hich\af1\dbch\af31505\loch\f1 above cannot be given local legal effect according to their terms,
+\par \hich\af1\dbch\af31505\loch\f1 reviewing courts shall apply local law that most closely approximates
+\par \hich\af1\dbch\af31505\loch\f1 an absolute waiver of all civil liability in conne\hich\af1\dbch\af31505\loch\f1 ction with the
+\par \hich\af1\dbch\af31505\loch\f1 Program, unless a warranty or assumption of liability accompanies a
+\par \hich\af1\dbch\af31505\loch\f1 copy of the Program in return for a fee.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 END OF TERMS AND CONDITIONS
+\par
+\par \hich\af1\dbch\af31505\loch\f1 How to Apply These Terms to Your New Programs
+\par
+\par \hich\af1\dbch\af31505\loch\f1 If you develop a new\hich\af1\dbch\af31505\loch\f1 program, and you want it to be of the greatest
+\par \hich\af1\dbch\af31505\loch\f1 possible use to the public, the best way to achieve this is to make it
+\par \hich\af1\dbch\af31505\loch\f1 free software which everyone can redistribute and change under these terms.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 To do so, attach the following notices to the program. It\hich\af1\dbch\af31505\loch\f1 is safest
+\par \hich\af1\dbch\af31505\loch\f1 to attach them to the start of each source file to most effectively
+\par \hich\af1\dbch\af31505\loch\f1 state the exclusion of warranty; and each file should have at least
+\par \hich\af1\dbch\af31505\loch\f1 the "copyright" line and a pointer to where the full notice is found.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 <one line to give the program's na\hich\af1\dbch\af31505\loch\f1 me and a brief idea of what it does.>
+\par \hich\af1\dbch\af31505\loch\f1 Copyright (C) <year> <name of author>
+\par
+\par \hich\af1\dbch\af31505\loch\f1 This program is free software: you can redistribute it and/or modify
+\par \hich\af1\dbch\af31505\loch\f1 it under the terms of the GNU Affero General Public License as published
+\par \hich\af1\dbch\af31505\loch\f1 by the Free Software\hich\af1\dbch\af31505\loch\f1 Foundation, either version 3 of the License, or
+\par \hich\af1\dbch\af31505\loch\f1 (at your option) any later version.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 This program is distributed in the hope that it will be useful,
+\par \hich\af1\dbch\af31505\loch\f1 but WITHOUT ANY WARRANTY; without even the implied warranty of
+\par \hich\af1\dbch\af31505\loch\f1 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+\par \hich\af1\dbch\af31505\loch\f1 GNU Affero General Public License for more details.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 You should have received a copy of the GNU Affero General Publ\hich\af1\dbch\af31505\loch\f1 ic License
+\par \hich\af1\dbch\af31505\loch\f1 along with this program. If not, see <https://www.gnu.org/licenses/>.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 Also add information on how to contact you by electronic and paper mail.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 If your software can interact with users remotely through a computer
+\par \hich\af1\dbch\af31505\loch\f1 network, you should also\hich\af1\dbch\af31505\loch\f1 make sure that it provides a way for users to
+\par \hich\af1\dbch\af31505\loch\f1 get its source. For example, if your program is a web application, its
+\par \hich\af1\dbch\af31505\loch\f1 interface could display a "Source" link that leads users to an archive
+\par \hich\af1\dbch\af31505\loch\f1 of the code. There are many ways you could offer source, and diff\hich\af1\dbch\af31505\loch\f1 erent
+\par \hich\af1\dbch\af31505\loch\f1 solutions will be better for different programs; see section 13 for the
+\par \hich\af1\dbch\af31505\loch\f1 specific requirements.
+\par
+\par \hich\af1\dbch\af31505\loch\f1 You should also get your employer (if you work as a programmer) or school,
+\par \hich\af1\dbch\af31505\loch\f1 if any, to sign a "copyright disclaimer" for the program, if necessary.
+\par \hich\af1\dbch\af31505\loch\f1 For m\hich\af1\dbch\af31505\loch\f1 ore information on this, and how to apply and follow the GNU AGPL, see
+\par \hich\af1\dbch\af31505\loch\f1 <https://www.gnu.org/licenses/>.}{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid11478430\charrsid12386343
+\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a
+9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad
+5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6
+b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0
+0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6
+a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f
+c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512
+0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462
+a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865
+6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b
+4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b
+4757e8d3f729e245eb2b260a0238fd010000ffff0300504b0304140006000800000021002d2e00bc9c070000cb200000160000007468656d652f7468656d652f
+7468656d65312e786d6cec59cd8b1bc915bf07f23f347d97f5d5ad8fc1f2a24fcfda33b6b164873dd648a5eef2547789aad28cc56208de532e81c026e49085bd
+ed21842cecc22eb9e48f31d8249b3f22afaa5bdd5552c99e191c3061463074977eefd5afde7bf5de53d5ddcf5e26d4bbc05c1096f6fcfa9d9aefe174ce16248d
+7afeb3d9a4d2f13d2151ba4094a5b8e76fb0f03fbbf7eb5fdd454732c609f6403e1547a8e7c752ae8eaa5531876124eeb0154ee1bb25e30992f0caa3ea82a34b
+d09bd06aa3566b55134452df4b51026a6720e32d98f778b92473ecdfdbaa1f53982395420dcc299f2ae5389731b08bf3ba42888d1852ee5d20daf361a605bb9c
+e197d2f7281212bee8f935fde757efddada2a35c88ca03b286dc44ffe572b9c0e2bca1e7e4d1593169108441ab5fe8d7002af771e3f6b8356e15fa3400cde7b0
+d28c8badb3dd180639d600658f0edda3f6a859b7f086fee61ee77ea83e165e8332fdc11e7e321982152dbc0665f8700f1f0eba8391ad5f83327c6b0fdfaef547
+41dbd2af413125e9f91eba16b69ac3ed6a0bc892d16327bc1b06937623575ea2201a8ae852532c592a0fc55a825e303e018002522449eac9cd0a2fd11ce27888
+2839e3c43b21510c81b7422913305c6bd426b526fc579f403f698fa2238c0c69c50b9888bd21c5c713734e56b2e73f00adbe0179fbf3cf6f5efff8e6f54f6fbe
+faeacdebbfe7736b5596dc314a2353ee97effef09f6f7eebfdfb876f7ff9fa8fd9d4bb7861e2dffded77effef1cff7a9871597a678fba7efdffdf8fddb3ffffe
+5f7ffddaa1bdcfd199099f91040bef11bef49eb20416e8e08fcff8f524663122a6443f8d044a919ac5a17f2c630bfd68832872e006d8b6e3730ea9c605bcbf7e
+61119ec67c2d8943e3c338b180a78cd101e34e2b3c547319669eadd3c83d395f9bb8a7085db8e61ea2d4f2f278bd821c4b5c2a8731b6683ea1289528c229969e
+fa8e9d63ec58dd178458763d2573ce045b4aef0be20d10719a6446ceac682a858e49027ed9b80882bf2ddb9c3ef7068cba563dc2173612f606a20ef2334c2d33
+de476b891297ca194aa869f013246317c9e986cf4ddc5848f0748429f3c60b2c844be63187f51a4e7f0869c6edf653ba496c2497e4dca5f30431662247ec7c18
+a364e5c24e491a9bd8cfc5398428f29e30e9829f327b87a877f0034a0fbafb39c196bb3f9c0d9e418635299501a2be5973872fef6366c5ef74439708bb524d9f
+27568aed73e28c8ec13ab242fb04638a2ed10263efd9e70e0603b6b26c5e927e10435639c6aec07a80ec5855ef2916d8d3cdcd7e9e3c21c20ad9298ed8013ea7
+9b9dc4b3416982f821cd8fc0eba6cdc750ea1257003ca6f37313f888401708f1e234ca63013a8ce03ea8f5498cac02a6de853b5e37dcf2df55f618eccb17168d
+2bec4b90c1d79681c46ecabcd7363344ad09ca809921e8325ce916442cf79722aab86ab1b5536e696fdad20dd01d594d4f42d20f76403bbd4ff8bfeb7da0c378
+fb976f1c9bede3f43b6ec556b2ba66a77328991ceff4378770bb5dcd90f105f9f49b9a115aa74f30d491fd8c75dbd3dcf634feff7d4f73683fdf763287fa8ddb
+4ec6870ee3b693c90f573e4e2753362fd0d7a8038feca0471ffb24074f7d9684d2a9dc507c22f4c18f80df338b090c2a397de6898b53c0550c8faaccc104162e
+e248cb789cc9df10194f63b482d3a1baaf944422571d096fc5041c1ae961a76e85a7ebe4942db2c3ce7a5d1d6c66955520598ed7c2621c0eaa64866eb5cb03bc
+42bd661be983d62d01257b1d12c6643689a683447b3ba88ca48f75c1680e127a651f8545d7c1a2a3d46f5db5c702a8155e811fdc1efc4ceff96100222004e771
+d09c2f949f32576fbdab9df9313d7dc89856044083bd8d80d2d35dc5f5e0f2d4eab250bb82a72d1246b8d924b46574832762f8199c47a71abd0a8debfaba5bba
+d4a2a74ca1e783d02a69b43bef6371535f83dc6e6ea0a9992968ea5df6fc5633849099a355cf5fc2a1313c262b881da17e73211ac1ddcb5cf26cc3df24b3acb8
+902324e2cce03ae964d9202112738f92a4e7abe5176ea0a9ce219a5bbd0109e19325d785b4f2a99103a7db4ec6cb259e4bd3edc688b274f60a193ecb15ce6fb5
+f8cdc14a92adc1ddd37871e99dd1357f8a20c4c2765d19704104dc1dd4336b2e085c861589ac8cbf9dc294a75df3364ac750368ee82a46794531937906d7a9bc
+a0a3df0a1b186ff99ac1a08649f2427816a9026b1ad5aaa645d5c8381cacba1f1652963392665933adaca2aaa63b8b59336ccbc08e2d6f56e40d565b13434e33
+2b7c96ba77536e779beb76fa84a24a80c10bfb39aaee150a8241ad9ccca2a618efa76195b3f351bb766c17f8016a57291246d66f6dd5eed8ada811cee960f046
+951fe476a3168696dbbe525b5adf9b9b17dbecec05248f1174b96b2a8576255c5b73040dd154f72459da802df252e65b039ebc35273dffcb5ad80f868d7058a9
+75c271256806b54a27ec372bfd306cd6c761bd361a345e41619171520fb33bfb095c60d04d7e73afc7f76eef93ed1dcd9d394baa4cdfca5735717d7b5f6f58b7
+f7d94dbc375397f3be4720e97cd96a4cbacdeea055e936fb934a301a742add616b5019b586edd164340c3bddc92bdfbbd0e0a0df1c06ad71a7d2aa0f8795a055
+53f43bdd4a3b6834fa41bbdf1907fd57791b032bcfd2476e0b30afe675efbf000000ffff0300504b0304140006000800000021000dd1909fb60000001b010000
+270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88
+d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567
+914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f
+1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000001c020000130000
+0000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00
+000000000000000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c0000000000000000
+0000000000190200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021002d2e00bc9c070000cb2000
+001600000000000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000
+001b0100002700000000000000000000000000a60a00007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000a10b00000000}
+{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d
+617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169
+6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363
+656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}
+{\*\latentstyles\lsdstimax376\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;
+\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4;
+\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;
+\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 1;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 5;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 9;
+\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3;
+\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6;
+\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Indent;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 header;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footer;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index heading;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of figures;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope return;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation reference;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 line number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 page number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote text;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of authorities;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 macro;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 toa heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 3;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 3;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 3;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Closing;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Signature;\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 4;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Message Header;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Note Heading;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 3;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Block Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 FollowedHyperlink;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;
+\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Document Map;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Plain Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 E-mail Signature;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Top of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal (Web);\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Acronym;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Cite;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Code;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Definition;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Keyboard;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Sample;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Typewriter;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Table;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 1;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 2;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 2;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 3;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 2;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 6;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 2;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 6;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 2;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Contemporary;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Elegant;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Professional;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Subtle 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Subtle 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 2;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority39 \lsdlocked0 Table Grid;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Theme;\lsdsemihidden1 \lsdlocked0 Placeholder Text;
+\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid;\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2;
+\lsdpriority65 \lsdlocked0 Medium List 1;\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List;
+\lsdpriority71 \lsdlocked0 Colorful Shading;\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdpriority61 \lsdlocked0 Light List Accent 1;
+\lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdsemihidden1 \lsdlocked0 Revision;
+\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;
+\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdpriority72 \lsdlocked0 Colorful List Accent 1;
+\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;
+\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;
+\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;
+\lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;
+\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;
+\lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4;
+\lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;
+\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4;
+\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5;
+\lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;
+\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;
+\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6;
+\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;
+\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;
+\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;
+\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography;
+\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0 Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0 Plain Table 4;
+\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0 Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0 Grid Table 4;
+\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 1;
+\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1;
+\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2;
+\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2;
+\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3;
+\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4;
+\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 4;
+\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5;
+\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5;
+\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6;
+\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6;
+\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark;
+\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List Table 3 Accent 1;
+\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1;
+\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent 2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2;
+\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3;
+\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 3;
+\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4;
+\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4;
+\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2 Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5;
+\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5;
+\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent 6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6;
+\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Mention;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Smart Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hashtag;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Unresolved Mention;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Smart Link;}}{\*\datastore 01050000
+02000000180000004d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000
+d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e50000000000000000000000004016
+b0f74b47d601feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file
diff --git a/UVtools.Installer/UVtools.Installer.wixproj b/UVtools.Installer/UVtools.Installer.wixproj
new file mode 100644
index 0000000..5fe9d8d
--- /dev/null
+++ b/UVtools.Installer/UVtools.Installer.wixproj
@@ -0,0 +1,91 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+ <ProductVersion>3.7</ProductVersion>
+ <ProjectGuid>{41224896-08e9-4f22-9e56-5f9d46dec7d2}</ProjectGuid>
+ <SchemaVersion>2.0</SchemaVersion>
+ <OutputName>UVtools</OutputName>
+ <OutputType>Package</OutputType>
+ <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
+ <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
+ <!-- If MSIProductVersion not passed in, try to get it from TFBuild Environments (XAML Builds)-->
+ <MSIProductVersion Condition=" '$(MSIProductVersion)' == '' ">$([System.Text.RegularExpressions.Regex]::Match($(TF_BUILD_BUILDNUMBER), "\d+.\d+.\d+.\d+"))</MSIProductVersion>
+ <!-- If MSIProductVersion still not known, try to get it from TFBuild Environments (V.Next Builds)-->
+ <MSIProductVersion Condition=" '$(MSIProductVersion)' == '' ">$([System.Text.RegularExpressions.Regex]::Match($(BUILD_BUILDNUMBER), "\d+.\d+.\d+.\d+"))</MSIProductVersion>
+ <!-- If MSIProductVersion still not known, default to lowerbound 0.0.1 for developer builds.-->
+ <MSIProductVersion Condition=" '$(MSIProductVersion)' == '' ">0.0.1</MSIProductVersion>
+ <!-- The following allows one cert to be referenced from the certificate store for self-signing in localbuilds and another cert to be passed in during official builds. -->
+ <AppxCertificateThumbprint Condition=" '$(AppxCertificateThumbprint)' == '' ">
+ </AppxCertificateThumbprint>
+ <AppxTimestampUrl Condition=" '$(AppxTimestampUrl)' == '' ">
+ </AppxTimestampUrl>
+ <MsixCertificateThumbprint Condition=" '$(MsixCertificateThumbprint)' == '' ">
+ </MsixCertificateThumbprint>
+ <MsixTimestampUrl Condition=" '$(MsixTimestampUrl)' == '' ">
+ </MsixTimestampUrl>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+ <OutputPath>bin\$(Configuration)\</OutputPath>
+ <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
+ <DefineConstants>Debug;MSIProductVersion=$(MSIProductVersion)</DefineConstants>
+ <WixVariables>WixUIBannerBmp=Resources\Banner.jpg;WixUIDialogBmp=Resources\Dialog.jpg;WixUILicenseRtf=Resources\EULA.rtf</WixVariables>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+ <OutputPath>bin\$(Configuration)\</OutputPath>
+ <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
+ <DefineConstants>MSIProductVersion=$(MSIProductVersion)</DefineConstants>
+ <WixVariables>WixUIBannerBmp=Resources\Banner.jpg;WixUIDialogBmp=Resources\Dialog.jpg;WixUILicenseRtf=Resources\EULA.rtf</WixVariables>
+ </PropertyGroup>
+ <ItemGroup>
+ <Folder Include="Code" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Code\Product.wxs" />
+ <Compile Include="Code\Features.wxs" />
+ <Compile Include="Code\IISMeta.wxs" />
+ <Compile Include="Code\UI.wxs" />
+ <Compile Include="Code\UI-CustomDialog.wxs" />
+ </ItemGroup>
+ <ItemGroup>
+ <WixExtension Include="WixIIsExtension">
+ <HintPath>$(WixExtDir)\WixIIsExtension.dll</HintPath>
+ <Name>WixIIsExtension</Name>
+ </WixExtension>
+ <WixExtension Include="WixUIExtension">
+ <HintPath>$(WixExtDir)\WixUIExtension.dll</HintPath>
+ <Name>WixUIExtension</Name>
+ </WixExtension>
+ <WixExtension Include="WixNetFxExtension">
+ <HintPath>$(WixExtDir)\WixNetFxExtension.dll</HintPath>
+ <Name>WixNetFxExtension</Name>
+ </WixExtension>
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Resources" />
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="Resources\Banner.jpg" />
+ <Content Include="Resources\Dialog.jpg" />
+ <Content Include="Resources\EULA.rtf" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\UVtools.InstallerMM\UVtools.InstallerMM.wixproj">
+ <Name>UVtools.InstallerMM</Name>
+ <Project>{e53baa5d-29a8-4287-b3aa-1aff5a4bdc6c}</Project>
+ <Private>True</Private>
+ <DoNotHarvest>True</DoNotHarvest>
+ <RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>
+ <RefTargetDir>INSTALLFOLDER</RefTargetDir>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(WixTargetsPath)" />
+ <!--
+ To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Wix.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project> \ No newline at end of file
diff --git a/UVtools.InstallerMM/UVtools.InstallerMM.wixproj b/UVtools.InstallerMM/UVtools.InstallerMM.wixproj
new file mode 100644
index 0000000..98f876f
--- /dev/null
+++ b/UVtools.InstallerMM/UVtools.InstallerMM.wixproj
@@ -0,0 +1,35 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+ <ProductVersion>3.7</ProductVersion>
+ <ProjectGuid>{e53baa5d-29a8-4287-b3aa-1aff5a4bdc6c}</ProjectGuid>
+ <SchemaVersion>2.0</SchemaVersion>
+ <OutputName>UVtools.InstallerMM</OutputName>
+ <OutputType>Module</OutputType>
+ <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
+ <WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+ <OutputPath>bin\$(Configuration)\</OutputPath>
+ <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
+ <DefineConstants>Debug</DefineConstants>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+ <OutputPath>bin\$(Configuration)\</OutputPath>
+ <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="UVtools.InstallerMM.wxs" />
+ <Compile Include="UVtools.InstallerMMcustom.wxs" />
+ </ItemGroup>
+ <Import Project="$(WixTargetsPath)" />
+ <!--
+ To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Wix.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project> \ No newline at end of file
diff --git a/UVtools.InstallerMM/UVtools.InstallerMM.wxs b/UVtools.InstallerMM/UVtools.InstallerMM.wxs
new file mode 100644
index 0000000..4701e41
--- /dev/null
+++ b/UVtools.InstallerMM/UVtools.InstallerMM.wxs
@@ -0,0 +1,278 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+ <?define ComponentRules="OneToOne"?>
+ <!-- SourceDir instructs IsWiX the location of the directory that contains files for this merge module -->
+ <?define SourceDir="..\UVtools.GUI\bin\Release"?>
+ <Module Id="UVtools" Language="1033" Version="0.5.2.1">
+ <Package Id="12aaa1cf-ff06-4a02-abd5-2ac01ac4f83b" Manufacturer="PTRTECH" InstallerVersion="200" Keywords="MSLA, DLP" Description="MSLA/DLP, file analysis, repair, conversion and manipulation" />
+ <Directory Id="TARGETDIR" Name="SourceDir">
+ <Directory Id="DesktopFolder" />
+ <Directory Id="MergeRedirectFolder">
+ <Component Id="owc55D108694B5DE9E772548F1CA0A8CAB2" Guid="b22da61c-21cf-d943-2651-127d1c8bb869">
+ <File Id="owf55D108694B5DE9E772548F1CA0A8CAB2" Source="$(var.SourceDir)\ApplicationManagement.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owc0F7CC7ACEA840EC81FADDEE08D4B54C3" Guid="8de4454d-fc84-51cf-d44c-612dcea01607">
+ <File Id="owf0F7CC7ACEA840EC81FADDEE08D4B54C3" Source="$(var.SourceDir)\BinarySerializer.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owcD105ECB58FF1CF51ADAD527C6D66FF5F" Guid="21d48ca2-4a61-bbdc-371e-b0aab538c74a">
+ <File Id="owfD105ECB58FF1CF51ADAD527C6D66FF5F" Source="$(var.SourceDir)\CHANGELOG.md" KeyPath="yes" />
+ </Component>
+ <Component Id="owc2730402761C4A57C259620B9B5A65161" Guid="869585d9-61dc-7a31-7b2f-4843155764e3">
+ <File Id="owf2730402761C4A57C259620B9B5A65161" Source="$(var.SourceDir)\CREDITS.md" KeyPath="yes" />
+ </Component>
+ <Component Id="owc8EF635BC57066045F57245051BEECCE4" Guid="1cf9ad54-dcb8-07dc-af17-486d614620f7">
+ <File Id="owf8EF635BC57066045F57245051BEECCE4" Source="$(var.SourceDir)\Cyotek.Windows.Forms.ImageBox.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owc25ABE3DF1B281670E77FD3B882B58B9F" Guid="de5c6697-501a-2e10-da10-134ad4f060ad">
+ <File Id="owf25ABE3DF1B281670E77FD3B882B58B9F" Source="$(var.SourceDir)\Cyotek.Windows.Forms.ImageBox.xml" KeyPath="yes" />
+ </Component>
+ <Component Id="owc5A25DAF599EFAF9BDE0A414028049BB5" Guid="08486262-cc80-60a3-c6b2-f5c1bba4699d">
+ <File Id="owf5A25DAF599EFAF9BDE0A414028049BB5" Source="$(var.SourceDir)\Emgu.CV.Platform.NetFramework.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owcE199C6CB41C5AFF465CD5E3CF52EBD12" Guid="fc04ad72-cf5d-d674-3d12-1ac6d3989b26">
+ <File Id="owfE199C6CB41C5AFF465CD5E3CF52EBD12" Source="$(var.SourceDir)\Emgu.CV.Platform.NetFramework.xml" KeyPath="yes" />
+ </Component>
+ <Component Id="owc63D81B12D4DED477220E84E2AEBD7DBE" Guid="b08152e4-c420-0b27-69c4-3f58ac0a5fc7">
+ <File Id="owf63D81B12D4DED477220E84E2AEBD7DBE" Source="$(var.SourceDir)\Emgu.CV.Platform.NetStandard.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owcAA2708C3C163D011C2BDB733607572F0" Guid="8bab3501-a8d1-62ca-59e2-c8f528af796e">
+ <File Id="owfAA2708C3C163D011C2BDB733607572F0" Source="$(var.SourceDir)\Emgu.CV.Platform.NetStandard.xml" KeyPath="yes" />
+ </Component>
+ <Component Id="owc08C959AF4C2883BEBDD9830863C05E9E" Guid="0a3d45eb-02e4-a772-acdb-d6fefb9f9907">
+ <File Id="owf08C959AF4C2883BEBDD9830863C05E9E" Source="$(var.SourceDir)\LICENSE" KeyPath="yes" />
+ </Component>
+ <Component Id="owc3FC8434C1A84605AEEBC6A100CA2F3E1" Guid="47d7e276-db6d-424e-d797-1a69e1e24b3b">
+ <File Id="owf3FC8434C1A84605AEEBC6A100CA2F3E1" Source="$(var.SourceDir)\Newtonsoft.Json.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owcDE8FDCCF922CA433A075036DF5C1BE38" Guid="3a65cb72-6e09-91ed-08ba-4f7eadd88867">
+ <File Id="owfDE8FDCCF922CA433A075036DF5C1BE38" Source="$(var.SourceDir)\Newtonsoft.Json.xml" KeyPath="yes" />
+ </Component>
+ <Component Id="owcCE9BC93A259754292A772FFBD0707880" Guid="0fd9f7f4-8ed5-a50f-352f-a7fcc169d9ee">
+ <File Id="owfCE9BC93A259754292A772FFBD0707880" Source="$(var.SourceDir)\SixLabors.Core.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owc2D7EC5C1FE4514E7C7CCB37E8D125A40" Guid="08ff79c4-bff0-c6d4-ffba-1f1fcbb32f8b">
+ <File Id="owf2D7EC5C1FE4514E7C7CCB37E8D125A40" Source="$(var.SourceDir)\SixLabors.Core.xml" KeyPath="yes" />
+ </Component>
+ <Component Id="owc36F067EBBAC4A5B55BCC215DAB0D892B" Guid="31c6f4c4-ace8-5e28-4ae1-0d8f4f7122b9">
+ <File Id="owf36F067EBBAC4A5B55BCC215DAB0D892B" Source="$(var.SourceDir)\SixLabors.ImageSharp.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owc71BB2593A187E41D45ACB014E6A21293" Guid="672fc09e-6ff6-3166-9614-516281a7e144">
+ <File Id="owf71BB2593A187E41D45ACB014E6A21293" Source="$(var.SourceDir)\SixLabors.ImageSharp.xml" KeyPath="yes" />
+ </Component>
+ <Component Id="owc266C4DEC591C8A54CCC1D3C61FC512AA" Guid="2224179c-4d85-88a2-23e2-bc0c27cadd0e">
+ <File Id="owf266C4DEC591C8A54CCC1D3C61FC512AA" Source="$(var.SourceDir)\System.Buffers.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owcB3975236E57AF3476C692D6E3C40D3A7" Guid="5d90e46b-650b-92f7-6d00-2dd61f8a4944">
+ <File Id="owfB3975236E57AF3476C692D6E3C40D3A7" Source="$(var.SourceDir)\System.Buffers.xml" KeyPath="yes" />
+ </Component>
+ <Component Id="owcF2B199C7800AE0BBCC0001E0A61F6988" Guid="405dfe99-fffe-4059-26e0-c7d1bd0a0bed">
+ <File Id="owfF2B199C7800AE0BBCC0001E0A61F6988" Source="$(var.SourceDir)\System.Memory.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owc39A04829552DF7980DAF116FC429509C" Guid="9062fe86-c227-5b70-9578-26e6cab46440">
+ <File Id="owf39A04829552DF7980DAF116FC429509C" Source="$(var.SourceDir)\System.Memory.xml" KeyPath="yes" />
+ </Component>
+ <Component Id="owcACF44A9199404726B3D0BCAC3DDC9884" Guid="6f6141de-d259-6b2b-c804-923361cfa667">
+ <File Id="owfACF44A9199404726B3D0BCAC3DDC9884" Source="$(var.SourceDir)\System.Numerics.Vectors.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owcAA55BD7B81B013F159882A754BED353D" Guid="381d46d2-a95c-fb17-e35f-8a168dd2b2f9">
+ <File Id="owfAA55BD7B81B013F159882A754BED353D" Source="$(var.SourceDir)\System.Numerics.Vectors.xml" KeyPath="yes" />
+ </Component>
+ <Component Id="owc342C8E4E3FD4C3812596B5DEA9DFA6DF" Guid="0dbd5985-58a6-164d-ee5c-e36378843e69">
+ <File Id="owf342C8E4E3FD4C3812596B5DEA9DFA6DF" Source="$(var.SourceDir)\System.Reflection.TypeExtensions.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owcDAF8FAAFEF02D81A63FBF6FDEC9B5412" Guid="a735c89f-9a82-5036-d846-2a4443d5215a">
+ <File Id="owfDAF8FAAFEF02D81A63FBF6FDEC9B5412" Source="$(var.SourceDir)\System.Reflection.TypeExtensions.xml" KeyPath="yes" />
+ </Component>
+ <Component Id="owc496161876FAED4A7A0471BC80B909F19" Guid="7fe0a99f-4733-5247-2280-d9c79313b3a1">
+ <File Id="owf496161876FAED4A7A0471BC80B909F19" Source="$(var.SourceDir)\System.Runtime.CompilerServices.Unsafe.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owc912B341D759C6D4043ED430D16F8011A" Guid="fab0f014-28b2-d48f-5aa8-5a8e3bcf3ffb">
+ <File Id="owf912B341D759C6D4043ED430D16F8011A" Source="$(var.SourceDir)\System.Runtime.CompilerServices.Unsafe.xml" KeyPath="yes" />
+ </Component>
+ <Component Id="owc21B8C8C0F69E3CD1398B9A0674DF07BD" Guid="1e472543-e636-904d-da5b-cddaac2d36b1">
+ <File Id="owf21B8C8C0F69E3CD1398B9A0674DF07BD" Source="$(var.SourceDir)\UVtools.exe" KeyPath="yes">
+ <Shortcut Id="sc6327849DA5C02D2396E91B8B1892E03C" Name="UVtools" Directory="DesktopFolder" />
+ <Shortcut Id="sc218BF75801887335D1B30BAFB94BA631" Name="UVtools" Directory="scd220707349D4C8FA275285514283F3E2A" />
+ </File>
+ </Component>
+ <Component Id="owcFD68A2B6BB01205FB923D13D9A1EB333" Guid="a2bfa40e-e0f8-47b6-2570-e609ea5e428d">
+ <File Id="owfFD68A2B6BB01205FB923D13D9A1EB333" Source="$(var.SourceDir)\UVtools.exe.config" KeyPath="yes" />
+ </Component>
+ <Component Id="owcB6603ABDC143C6488F777606A4A341B1" Guid="040f11b5-152d-c7f3-9cd1-5ad8b731e02a">
+ <File Id="owfB6603ABDC143C6488F777606A4A341B1" Source="$(var.SourceDir)\UVtools.Parser.dll" KeyPath="yes" />
+ </Component>
+ <Directory Id="owdF7EC390A16A84F49221C0816B06C7316" Name="PrusaSlicer">
+ <Directory Id="owd6830BAD7B93348EE48856553BF6B1294" Name="printer">
+ <Component Id="owc0C5D1EB90B2065C71E0743A0ABEC1D12" Guid="ede4de2a-8340-d293-f703-d556ddc2f6f4">
+ <File Id="owf0C5D1EB90B2065C71E0743A0ABEC1D12" Source="$(var.SourceDir)\PrusaSlicer\printer\AnyCubic Photon S.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc518BC218498F95CE45BB60850FF7F20A" Guid="fcd15fa3-d1a5-ddf6-5f98-63beb7517c20">
+ <File Id="owf518BC218498F95CE45BB60850FF7F20A" Source="$(var.SourceDir)\PrusaSlicer\printer\AnyCubic Photon Zero.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc9F0ED1D4E7D104FE0DC61D9F7CFE999A" Guid="9d8198ed-268b-949f-3b40-9967c446da71">
+ <File Id="owf9F0ED1D4E7D104FE0DC61D9F7CFE999A" Source="$(var.SourceDir)\PrusaSlicer\printer\AnyCubic Photon.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc7EDB8251A3EA203AF2B7D4CA7ACE2CD2" Guid="ee32d320-1828-deba-29ca-a05a60720cfc">
+ <File Id="owf7EDB8251A3EA203AF2B7D4CA7ACE2CD2" Source="$(var.SourceDir)\PrusaSlicer\printer\Creality LD-002R.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc260A3135FA730F1E8324D011F6A1C4B0" Guid="7a4e2e49-81f9-7ad2-786a-4b4434c0707f">
+ <File Id="owf260A3135FA730F1E8324D011F6A1C4B0" Source="$(var.SourceDir)\PrusaSlicer\printer\Elegoo Mars Saturn.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc4D5073ED375E0DF9EFA87FDD048B32C6" Guid="d8c3b91c-2830-d4b2-0813-0cbcfbdc272d">
+ <File Id="owf4D5073ED375E0DF9EFA87FDD048B32C6" Source="$(var.SourceDir)\PrusaSlicer\printer\Elegoo Mars.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc76AABDF1DF0C1F5E05FF1F07A1630357" Guid="e472beae-9800-814f-adcb-846954b58041">
+ <File Id="owf76AABDF1DF0C1F5E05FF1F07A1630357" Source="$(var.SourceDir)\PrusaSlicer\printer\EPAX X1.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc96C59034EB76D71E85BCE617CECE04D8" Guid="c082b835-0284-a751-669b-6171ff55fd10">
+ <File Id="owf96C59034EB76D71E85BCE617CECE04D8" Source="$(var.SourceDir)\PrusaSlicer\printer\EPAX X10.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc6B72C7720CEFE972272B28F4BFCF4845" Guid="898755b8-1325-b207-f85d-dda138939535">
+ <File Id="owf6B72C7720CEFE972272B28F4BFCF4845" Source="$(var.SourceDir)\PrusaSlicer\printer\EPAX X133 4K Mono.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owcBDCC55E8DE3569F9053A05EA9D764EF5" Guid="a25864cd-e8db-0b68-21f8-3624b9ed3c66">
+ <File Id="owfBDCC55E8DE3569F9053A05EA9D764EF5" Source="$(var.SourceDir)\PrusaSlicer\printer\EPAX X156 4K Color.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc5C3D57BA78B3FB633FE137C11ABFF046" Guid="a58b5655-abbc-1a7e-e875-ddb174b93fae">
+ <File Id="owf5C3D57BA78B3FB633FE137C11ABFF046" Source="$(var.SourceDir)\PrusaSlicer\printer\Kelant S400.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc2C278182AFE0ABA208CC627D83CBF3C3" Guid="d7c4029a-678e-65f9-a321-7fbfbc638575">
+ <File Id="owf2C278182AFE0ABA208CC627D83CBF3C3" Source="$(var.SourceDir)\PrusaSlicer\printer\Nova3D Elfin.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc546AD041611346E8506BB31D2F47E34F" Guid="ba21e583-c82a-9c6e-20c1-0e416cd9b0d8">
+ <File Id="owf546AD041611346E8506BB31D2F47E34F" Source="$(var.SourceDir)\PrusaSlicer\printer\Peopoly Phenom L.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owcB3E343D0AF1C11367418C5C702943E47" Guid="0b9d51c3-427e-10fa-e4db-13f1953c42a2">
+ <File Id="owfB3E343D0AF1C11367418C5C702943E47" Source="$(var.SourceDir)\PrusaSlicer\printer\Peopoly Phenom Noir.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc4DA3CE0E7C9E7FD0420BC98008CE61A5" Guid="842b1dda-c430-b658-0171-98317cda4b73">
+ <File Id="owf4DA3CE0E7C9E7FD0420BC98008CE61A5" Source="$(var.SourceDir)\PrusaSlicer\printer\Peopoly Phenom.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owcECDE9AFF31975330B052BE067CBF7747" Guid="59279739-67c2-e878-98e4-8a6fd7228af7">
+ <File Id="owfECDE9AFF31975330B052BE067CBF7747" Source="$(var.SourceDir)\PrusaSlicer\printer\Phrozen Shuffle 4K.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc068BB7319947EA7DE29B950E2A6D568E" Guid="07cdd63b-4ff0-45bb-6bc8-a06e7d4d2d65">
+ <File Id="owf068BB7319947EA7DE29B950E2A6D568E" Source="$(var.SourceDir)\PrusaSlicer\printer\Phrozen Shuffle Lite.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc4F7DA68FBE5404E7947C6E57D830BD18" Guid="b8861542-b10b-6c76-61d1-cfe9c2ef6c1e">
+ <File Id="owf4F7DA68FBE5404E7947C6E57D830BD18" Source="$(var.SourceDir)\PrusaSlicer\printer\Phrozen Shuffle XL.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owcE3C5EB6B6F0C3F57765457D6609A1347" Guid="c6a7b466-f370-61cb-6ea8-4f58e1a1ae4f">
+ <File Id="owfE3C5EB6B6F0C3F57765457D6609A1347" Source="$(var.SourceDir)\PrusaSlicer\printer\Phrozen Shuffle.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owcA72B3137C7468BB42D62EE5D01D0FCA5" Guid="d03183f0-ec43-e8ce-13ef-65e19d5c4968">
+ <File Id="owfA72B3137C7468BB42D62EE5D01D0FCA5" Source="$(var.SourceDir)\PrusaSlicer\printer\Phrozen Sonic Mini.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc054C138D5EFB06BD1FBC0745B3022AC2" Guid="50a52fd5-27b6-ec62-7f7d-3fbbe3b87576">
+ <File Id="owf054C138D5EFB06BD1FBC0745B3022AC2" Source="$(var.SourceDir)\PrusaSlicer\printer\Phrozen Sonic.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owcF1C81BD9CF13A9B24A54441843BC646E" Guid="fcb5bbfe-5ddb-c7da-a07b-b72f1dcfcae5">
+ <File Id="owfF1C81BD9CF13A9B24A54441843BC646E" Source="$(var.SourceDir)\PrusaSlicer\printer\Phrozen Transform.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owcB4A5F5F4294ED25C4B87C67D8C33B83E" Guid="d3660efe-4e98-ff85-c0a0-8338b8af02f0">
+ <File Id="owfB4A5F5F4294ED25C4B87C67D8C33B83E" Source="$(var.SourceDir)\PrusaSlicer\printer\QIDI Shadow5.5.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owcA3F28F12E3289ECC5D85DE40DF866B26" Guid="509cc36e-f75c-132e-2c61-66f31434a7cb">
+ <File Id="owfA3F28F12E3289ECC5D85DE40DF866B26" Source="$(var.SourceDir)\PrusaSlicer\printer\QIDI Shadow6.0 Pro.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owcB527CA38F45FBB0A2DD46961788AE79C" Guid="743425a9-38e2-6c9a-c52e-f64281bf0ec5">
+ <File Id="owfB527CA38F45FBB0A2DD46961788AE79C" Source="$(var.SourceDir)\PrusaSlicer\printer\Wanhao D7.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc0052488B3D5653FA4AC17575E3AA0158" Guid="5952c8ed-8253-42aa-ac71-674ba4e89db9">
+ <File Id="owf0052488B3D5653FA4AC17575E3AA0158" Source="$(var.SourceDir)\PrusaSlicer\printer\Wanhao D8.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc0FA446796B886C670DBAE19746E53173" Guid="e57a604a-c22f-8ef9-78b6-8a8aca78ae84">
+ <File Id="owf0FA446796B886C670DBAE19746E53173" Source="$(var.SourceDir)\PrusaSlicer\printer\Zortrax Inkspire.ini" KeyPath="yes" />
+ </Component>
+ </Directory>
+ <Directory Id="owd73003341B520ABE88202958ACA4D0CED" Name="sla_print">
+ <Component Id="owc4ACEFD4B0896C4BAD024C72FFF0A6BC2" Guid="507e2a66-2730-7436-b5c6-fa2e55d92633">
+ <File Id="owf4ACEFD4B0896C4BAD024C72FFF0A6BC2" Source="$(var.SourceDir)\PrusaSlicer\sla_print\Universal 0.025 UltraDetail - Heavy Supports.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc2E4A743F333D821D9E8A9ACE10E395E1" Guid="7c83a0fc-d4b2-1466-f858-9b3dedf76db8">
+ <File Id="owf2E4A743F333D821D9E8A9ACE10E395E1" Source="$(var.SourceDir)\PrusaSlicer\sla_print\Universal 0.025 UltraDetail - Medium Supports.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc4CF09676D1047D5A9AE525720CD23889" Guid="f9eda29c-878e-4a0d-4771-b0dcf5845ad3">
+ <File Id="owf4CF09676D1047D5A9AE525720CD23889" Source="$(var.SourceDir)\PrusaSlicer\sla_print\Universal 0.035 Detail - Heavy Supports.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc6E914D5581C8ED28A35CB38BC082C898" Guid="152fcbb9-57d4-ab6e-93cd-a97ed733b4d3">
+ <File Id="owf6E914D5581C8ED28A35CB38BC082C898" Source="$(var.SourceDir)\PrusaSlicer\sla_print\Universal 0.035 Detail - Medium Supports.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owcA8BB3AB3E1F0631497BA1B5B7D1984C9" Guid="3792b202-b280-6cb5-2e23-f035b7327afa">
+ <File Id="owfA8BB3AB3E1F0631497BA1B5B7D1984C9" Source="$(var.SourceDir)\PrusaSlicer\sla_print\Universal 0.05 Normal - Heavy Supports.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc6D432DE0183CB703A1A78CEC841D8812" Guid="e97f8dc8-510a-5ca2-b01c-9d2ab5e08710">
+ <File Id="owf6D432DE0183CB703A1A78CEC841D8812" Source="$(var.SourceDir)\PrusaSlicer\sla_print\Universal 0.05 Normal - Medium Supports.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owcB7DEA765E56C3696E3273C599128A7D8" Guid="764640eb-d1bb-187c-c87b-5624a5875d73">
+ <File Id="owfB7DEA765E56C3696E3273C599128A7D8" Source="$(var.SourceDir)\PrusaSlicer\sla_print\Universal 0.1 Fast - Heavy Supports.ini" KeyPath="yes" />
+ </Component>
+ <Component Id="owc939DBAAB0E7C39AB8FFF73D72594EAC0" Guid="4f43e49a-fdbe-d19c-6e4e-b951491c2fc9">
+ <File Id="owf939DBAAB0E7C39AB8FFF73D72594EAC0" Source="$(var.SourceDir)\PrusaSlicer\sla_print\Universal 0.1 Fast - Medium Supports.ini" KeyPath="yes" />
+ </Component>
+ </Directory>
+ </Directory>
+ <Directory Id="owd37EA32A018DF9B31395A1FCE42233062" Name="x64">
+ <Component Id="owcCD1854F2CC6C7F17F61397E23B6C598A" Guid="0a98d274-6f18-ee97-f14c-410e8fd2060d">
+ <File Id="owfCD1854F2CC6C7F17F61397E23B6C598A" Source="$(var.SourceDir)\x64\concrt140.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owcE1790624963D540C427806C2B2809EBA" Guid="00de945a-e306-4840-1dd3-b8e968184b74">
+ <File Id="owfE1790624963D540C427806C2B2809EBA" Source="$(var.SourceDir)\x64\cvextern.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owc5F1F538D5D53D69031C503A5A647FA86" Guid="4e9e9fdc-8d0c-3ba0-a240-9e6ef5842194">
+ <File Id="owf5F1F538D5D53D69031C503A5A647FA86" Source="$(var.SourceDir)\x64\msvcp140.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owc8F40E3E29777D025A9F18E5B6042F30D" Guid="e05981f2-643b-ca90-e066-2434e056751a">
+ <File Id="owf8F40E3E29777D025A9F18E5B6042F30D" Source="$(var.SourceDir)\x64\msvcp140_1.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owc0881D1B926887713CEA1FB8CE1244020" Guid="3baf74a4-81ca-d0a7-70ea-912a08d3dc3c">
+ <File Id="owf0881D1B926887713CEA1FB8CE1244020" Source="$(var.SourceDir)\x64\msvcp140_2.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owc2FF8EDA65751914E3C80D405856A37CE" Guid="283d40b2-5948-d5e0-9173-53dbd88d6e13">
+ <File Id="owf2FF8EDA65751914E3C80D405856A37CE" Source="$(var.SourceDir)\x64\msvcp140_codecvt_ids.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owcAD40560F77CAD70FF1F32E32FD4242DE" Guid="a2675e61-d758-8d56-d152-6e962f599a7a">
+ <File Id="owfAD40560F77CAD70FF1F32E32FD4242DE" Source="$(var.SourceDir)\x64\opencv_videoio_ffmpeg430_64.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owc8C50C7464818ADC2267594B33B7B1EE6" Guid="049c0f0d-c410-daa8-b6ec-1c515fdfce03">
+ <File Id="owf8C50C7464818ADC2267594B33B7B1EE6" Source="$(var.SourceDir)\x64\vcruntime140.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owcBF69387AE1C9C06910622B5629DAAA62" Guid="051ca95f-4aa8-18b1-56da-7788687d06e0">
+ <File Id="owfBF69387AE1C9C06910622B5629DAAA62" Source="$(var.SourceDir)\x64\vcruntime140_1.dll" KeyPath="yes" />
+ </Component>
+ </Directory>
+ <Directory Id="owd3BCA71FC1DDF940F5FD535BAC750E17B" Name="x86">
+ <Component Id="owcFBC3B4CD533BC131080BCB572CEE8474" Guid="8b12ad7e-4019-3cca-c71d-82e5f3e6a080">
+ <File Id="owfFBC3B4CD533BC131080BCB572CEE8474" Source="$(var.SourceDir)\x86\concrt140.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owc326B123F4EAB21E3B400B7357CCFCB69" Guid="7acba6ad-3e71-b056-9a79-7e53f7d4585b">
+ <File Id="owf326B123F4EAB21E3B400B7357CCFCB69" Source="$(var.SourceDir)\x86\cvextern.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owcEBF7D14133500BEDB79449CCE2A5B412" Guid="3cfe7baa-8f60-50d4-0c7c-41e7f7409b69">
+ <File Id="owfEBF7D14133500BEDB79449CCE2A5B412" Source="$(var.SourceDir)\x86\msvcp140.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owcA62A9E2DCF3C1092572B9BA8A90AF2CC" Guid="a5901167-af03-d482-e4a2-55e2fd2dab37">
+ <File Id="owfA62A9E2DCF3C1092572B9BA8A90AF2CC" Source="$(var.SourceDir)\x86\msvcp140_1.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owc4E55EDBDDABF300437BC351C60EA1BBB" Guid="253ff45b-49b3-cf8c-4b98-7ac426bdb997">
+ <File Id="owf4E55EDBDDABF300437BC351C60EA1BBB" Source="$(var.SourceDir)\x86\msvcp140_2.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owcDE8398D0FE76287635F64D20414A83A9" Guid="b3a19e5c-5f5b-984b-06fc-91ec029138fe">
+ <File Id="owfDE8398D0FE76287635F64D20414A83A9" Source="$(var.SourceDir)\x86\msvcp140_codecvt_ids.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owc1B4BF3CACFB109D18ED2AA6E69D6FB20" Guid="312f9267-46c7-f517-1afe-9a266fff6b73">
+ <File Id="owf1B4BF3CACFB109D18ED2AA6E69D6FB20" Source="$(var.SourceDir)\x86\opencv_videoio_ffmpeg430.dll" KeyPath="yes" />
+ </Component>
+ <Component Id="owcFE2AD2B6C739ABAFD86DE40F4D5B83C9" Guid="30610dbe-339b-b1be-a4a6-626e8fc07490">
+ <File Id="owfFE2AD2B6C739ABAFD86DE40F4D5B83C9" Source="$(var.SourceDir)\x86\vcruntime140.dll" KeyPath="yes" />
+ </Component>
+ </Directory>
+ </Directory>
+ <Directory Id="ProgramMenuFolder">
+ <Directory Id="scd220707349D4C8FA275285514283F3E2A" Name="UVtools" />
+ </Directory>
+ <Directory Id="StartMenuFolder" />
+ </Directory>
+ <ComponentGroupRef Id="Custom" />
+ </Module>
+</Wix> \ No newline at end of file
diff --git a/UVtools.InstallerMM/UVtools.InstallerMMcustom.wxs b/UVtools.InstallerMM/UVtools.InstallerMMcustom.wxs
new file mode 100644
index 0000000..90dcac4
--- /dev/null
+++ b/UVtools.InstallerMM/UVtools.InstallerMMcustom.wxs
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+ <Fragment>
+
+ <!-- Reference Custom Components Below -->
+ <ComponentGroup Id="Custom">
+
+ </ComponentGroup>
+
+ <!-- Author Custom Components Below -->
+ <DirectoryRef Id="MergeRedirectFolder">
+
+ </DirectoryRef>
+
+ </Fragment>
+</Wix> \ No newline at end of file
diff --git a/UVtools.Parser/CWSFile.cs b/UVtools.Parser/CWSFile.cs
index 52939a4..9b8bca3 100644
--- a/UVtools.Parser/CWSFile.cs
+++ b/UVtools.Parser/CWSFile.cs
@@ -21,7 +21,7 @@ namespace UVtools.Parser
{
#region Constants
- public const string GCodeStart = "G28{0} ; Auto Home" +
+ public const string GCodeStart = "G28 ; Auto Home{0}" +
"G21 ;Set units to be mm{0}" +
"G91 ;Relative Positioning{0}" +
"M17 ;Enable motors{0}" +
@@ -76,6 +76,10 @@ namespace UVtools.Parser
[DisplayName("Max Y Feedrate")] public ushort MaxYFeedrate { get; set; } = 200;
[DisplayName("Max Z Feedrate")] public ushort MaxZFeedrate { get; set; } = 200;
[DisplayName("Machine Type")] public string MachineType { get; set; } = "UV_LCD";
+
+ // ;(****UVtools Configuration ******)
+ [DisplayName("Bottom Layer Light PWM")] public byte BottomLayerLightPWM { get; set; } = 255;
+ [DisplayName("Layer Light PWM")] public byte LayerLightPWM { get; set; } = 255;
}
public class Slice
@@ -120,6 +124,9 @@ namespace UVtools.Parser
PrintParameterModifier.LiftHeight,
PrintParameterModifier.RetractSpeed,
PrintParameterModifier.LiftSpeed,
+
+ PrintParameterModifier.BottomLightPWM,
+ PrintParameterModifier.LightPWM,
};
public override byte ThumbnailsCount { get; } = 0;
@@ -294,6 +301,17 @@ namespace UVtools.Parser
}
}
+ public override object GetValueFromPrintParameterModifier(PrintParameterModifier modifier)
+ {
+ var baseValue = base.GetValueFromPrintParameterModifier(modifier);
+ if (!ReferenceEquals(baseValue, null)) return baseValue;
+
+ if (ReferenceEquals(modifier, PrintParameterModifier.BottomLightPWM)) return OutputSettings.BottomLayerLightPWM;
+ if (ReferenceEquals(modifier, PrintParameterModifier.LightPWM)) return OutputSettings.LayerLightPWM;
+
+ return null;
+ }
+
public override bool SetValueFromPrintParameterModifier(PrintParameterModifier modifier, string value)
{
if (ReferenceEquals(modifier, PrintParameterModifier.InitialLayerCount))
@@ -341,6 +359,20 @@ namespace UVtools.Parser
return true;
}
+ if (ReferenceEquals(modifier, PrintParameterModifier.BottomLightPWM))
+ {
+ OutputSettings.BottomLayerLightPWM = value.Convert<byte>();
+ UpdateGCode();
+ return true;
+ }
+
+ if (ReferenceEquals(modifier, PrintParameterModifier.LightPWM))
+ {
+ OutputSettings.BottomLayerLightPWM = value.Convert<byte>();
+ UpdateGCode();
+ return true;
+ }
+
return false;
}
@@ -414,19 +446,20 @@ namespace UVtools.Parser
if (ReferenceEquals(displayNameAttribute, null)) continue;
GCode.AppendLine($";({displayNameAttribute.DisplayName.PadRight(24)} = {propertyInfo.GetValue(OutputSettings)})");
}
- GCode.AppendFormat($"{0}{GCodeStart}", Environment.NewLine);
+ GCode.AppendLine();
+ GCode.AppendFormat(GCodeStart, Environment.NewLine);
for (uint layerIndex = 0; layerIndex < LayerCount; layerIndex++)
{
- Layer layer = this[layerIndex];
+ //Layer layer = this[layerIndex];
GCode.AppendLine($"{GCodeKeywordSlice} {layerIndex}");
- GCode.AppendLine("M106 S255");
- GCode.AppendLine($"{GCodeKeywordDelay} " + (layerIndex < InitialLayerCount ? SliceSettings.HeadLayersExpoMs : SliceSettings.LayersExpoMs));
+ GCode.AppendLine($"M106 S{GetInitialLayerValueOrNormal(layerIndex, OutputSettings.BottomLayerLightPWM, OutputSettings.LayerLightPWM)}");
+ GCode.AppendLine($"{GCodeKeywordDelay} {GetInitialLayerValueOrNormal(layerIndex, SliceSettings.HeadLayersExpoMs, SliceSettings.LayersExpoMs)}");
GCode.AppendLine("M106 S0");
GCode.AppendLine(GCodeKeywordSliceBlank);
GCode.AppendLine($"G1 Z{LiftHeight} F{LiftSpeed}");
GCode.AppendLine($"G1 Z-{LiftHeight - LayerHeight} F{RetractSpeed}");
- GCode.AppendLine($"{GCodeKeywordDelay} " + (layerIndex < InitialLayerCount ? SliceSettings.HeadLayersExpoMs : SliceSettings.LayersExpoMs));
+ GCode.AppendLine($"{GCodeKeywordDelay} {GetInitialLayerValueOrNormal(layerIndex, SliceSettings.HeadLayersExpoMs, SliceSettings.LayersExpoMs)}");
}
GCode.AppendFormat(GCodeEnd, Environment.NewLine, SliceSettings.LiftWhenFinished);
diff --git a/UVtools.Parser/FileFormat.cs b/UVtools.Parser/FileFormat.cs
index cacaa86..03374fe 100644
--- a/UVtools.Parser/FileFormat.cs
+++ b/UVtools.Parser/FileFormat.cs
@@ -595,6 +595,11 @@ namespace UVtools.Parser
return (float)Math.Round((layerIndex+(realHeight ? 1 : 0)) * LayerHeight, 2);
}
+ public T GetInitialLayerValueOrNormal<T>(uint layerIndex, T initialLayerValue, T normalLayerValue)
+ {
+ return layerIndex < InitialLayerCount ? initialLayerValue : normalLayerValue;
+ }
+
public virtual object GetValueFromPrintParameterModifier(PrintParameterModifier modifier)
{
if (ReferenceEquals(modifier, PrintParameterModifier.InitialLayerCount))
diff --git a/UVtools.Parser/IFileFormat.cs b/UVtools.Parser/IFileFormat.cs
index d9d9cba..a2412d8 100644
--- a/UVtools.Parser/IFileFormat.cs
+++ b/UVtools.Parser/IFileFormat.cs
@@ -278,6 +278,16 @@ namespace UVtools.Parser
float GetHeightFromLayer(uint layerIndex, bool realHeight = true);
/// <summary>
+ /// Gets the value for initial layer or normal layers based on layer index
+ /// </summary>
+ /// <typeparam name="T">Type of value</typeparam>
+ /// <param name="layerIndex">Layer index</param>
+ /// <param name="initialLayerValue">Initial value</param>
+ /// <param name="normalLayerValue">Normal value</param>
+ /// <returns></returns>
+ T GetInitialLayerValueOrNormal<T>(uint layerIndex, T initialLayerValue, T normalLayerValue);
+
+ /// <summary>
/// Gets the value attributed to <see cref="FileFormat.PrintParameterModifier"/>
/// </summary>
/// <param name="modifier">Modifier to use</param>
diff --git a/UVtools.Parser/UVtools.Parser.csproj b/UVtools.Parser/UVtools.Parser.csproj
index b23027e..9dd52d9 100644
--- a/UVtools.Parser/UVtools.Parser.csproj
+++ b/UVtools.Parser/UVtools.Parser.csproj
@@ -7,9 +7,9 @@
<PackageProjectUrl>https://github.com/sn4k3/UVtools</PackageProjectUrl>
<PackageIcon></PackageIcon>
<RepositoryUrl>https://github.com/sn4k3/UVtools</RepositoryUrl>
- <AssemblyVersion>0.5.2.0</AssemblyVersion>
- <FileVersion>0.5.2.0</FileVersion>
- <Version>0.5.2</Version>
+ <AssemblyVersion>0.5.2.1</AssemblyVersion>
+ <FileVersion>0.5.2.1</FileVersion>
+ <Version>0.5.2.1</Version>
<Description>MSLA/DLP, file analysis, repair, conversion and manipulation</Description>
<PackageId>UVtoolsParser</PackageId>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
@@ -27,7 +27,7 @@
<ItemGroup>
<PackageReference Include="BinarySerializer" Version="8.5.1" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
- <PackageReference Include="SixLabors.ImageSharp" Version="1.0.0-rc0002" />
+ <PackageReference Include="SixLabors.ImageSharp" Version="1.0.0-rc0003" />
</ItemGroup>
</Project>
diff --git a/UVtools.sln b/UVtools.sln
index 3556488..1ac1866 100644
--- a/UVtools.sln
+++ b/UVtools.sln
@@ -10,20 +10,46 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UVtools.GUI", "UVtools.GUI\
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UVtools.Parser", "UVtools.Parser\UVtools.Parser.csproj", "{53B884CA-E640-4171-8AA2-03935AC076D2}"
EndProject
+Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "UVtools.InstallerMM", "UVtools.InstallerMM\UVtools.InstallerMM.wixproj", "{E53BAA5D-29A8-4287-B3AA-1AFF5A4BDC6C}"
+EndProject
+Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "UVtools.Installer", "UVtools.Installer\UVtools.Installer.wixproj", "{41224896-08E9-4F22-9E56-5F9D46DEC7D2}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
+ Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
+ Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{E7389EE3-CF56-464B-9BA1-816B31D1E6FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E7389EE3-CF56-464B-9BA1-816B31D1E6FF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E7389EE3-CF56-464B-9BA1-816B31D1E6FF}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {E7389EE3-CF56-464B-9BA1-816B31D1E6FF}.Debug|x86.Build.0 = Debug|Any CPU
{E7389EE3-CF56-464B-9BA1-816B31D1E6FF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E7389EE3-CF56-464B-9BA1-816B31D1E6FF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E7389EE3-CF56-464B-9BA1-816B31D1E6FF}.Release|x86.ActiveCfg = Release|Any CPU
+ {E7389EE3-CF56-464B-9BA1-816B31D1E6FF}.Release|x86.Build.0 = Release|Any CPU
{53B884CA-E640-4171-8AA2-03935AC076D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{53B884CA-E640-4171-8AA2-03935AC076D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {53B884CA-E640-4171-8AA2-03935AC076D2}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {53B884CA-E640-4171-8AA2-03935AC076D2}.Debug|x86.Build.0 = Debug|Any CPU
{53B884CA-E640-4171-8AA2-03935AC076D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{53B884CA-E640-4171-8AA2-03935AC076D2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {53B884CA-E640-4171-8AA2-03935AC076D2}.Release|x86.ActiveCfg = Release|Any CPU
+ {53B884CA-E640-4171-8AA2-03935AC076D2}.Release|x86.Build.0 = Release|Any CPU
+ {E53BAA5D-29A8-4287-B3AA-1AFF5A4BDC6C}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {E53BAA5D-29A8-4287-B3AA-1AFF5A4BDC6C}.Debug|x86.ActiveCfg = Debug|x86
+ {E53BAA5D-29A8-4287-B3AA-1AFF5A4BDC6C}.Debug|x86.Build.0 = Debug|x86
+ {E53BAA5D-29A8-4287-B3AA-1AFF5A4BDC6C}.Release|Any CPU.ActiveCfg = Release|x86
+ {E53BAA5D-29A8-4287-B3AA-1AFF5A4BDC6C}.Release|x86.ActiveCfg = Release|x86
+ {E53BAA5D-29A8-4287-B3AA-1AFF5A4BDC6C}.Release|x86.Build.0 = Release|x86
+ {41224896-08E9-4F22-9E56-5F9D46DEC7D2}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {41224896-08E9-4F22-9E56-5F9D46DEC7D2}.Debug|x86.ActiveCfg = Debug|x86
+ {41224896-08E9-4F22-9E56-5F9D46DEC7D2}.Debug|x86.Build.0 = Debug|x86
+ {41224896-08E9-4F22-9E56-5F9D46DEC7D2}.Release|Any CPU.ActiveCfg = Release|x86
+ {41224896-08E9-4F22-9E56-5F9D46DEC7D2}.Release|x86.ActiveCfg = Release|x86
+ {41224896-08E9-4F22-9E56-5F9D46DEC7D2}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE