Browse Source

Fixed some glsl demos

GLScene 2 years ago
parent
commit
d200501893
33 changed files with 179 additions and 742 deletions
  1. 0 0
      Asset/Button/GLScene.ico
  2. 0 0
      Asset/Cubemap/EarthSpec.dds
  3. 0 0
      Asset/Cubemap/Masks.dds
  4. 4 1
      Demos/glslshaders/BumpShader/fBumpShaderC.cpp
  5. 2 4
      Demos/glslshaders/BumpShader/fBumpShaderC.dfm
  6. 1 5
      Demos/glslshaders/BumpShader/fBumpShaderD.dfm
  7. 3 3
      Demos/glslshaders/BumpShader/fBumpShaderD.pas
  8. 0 1
      Demos/glslshaders/DiffuseSpecularShader/fDiffuseShaderC.cpp
  9. 0 2
      Demos/glslshaders/DiffuseSpecularShader/fDiffuseShaderC.dfm
  10. 0 1
      Demos/glslshaders/DiffuseSpecularShader/fDiffuseShaderC.h
  11. 0 4
      Demos/glslshaders/DiffuseSpecularShader/fDiffuseShaderD.dfm
  12. 1 2
      Demos/glslshaders/DiffuseSpecularShader/fDiffuseShaderD.pas
  13. 0 14
      Demos/glslshaders/GLSLShaderComponent/ShaderCompD.dproj
  14. 11 12
      Demos/glslshaders/GLSLShaderComponent/fShaderCompC.dfm
  15. 14 12
      Demos/glslshaders/GLSLShaderComponent/fShaderCompD.pas
  16. 0 2
      Demos/glslshaders/Ocean/fOceanD.dfm
  17. 3 2
      Demos/glslshaders/Ocean/fOceanD.pas
  18. 1 1
      Demos/glslshaders/SkyboxShader/SkyboxShaderD.dpr
  19. 2 1
      Demos/glslshaders/SkyboxShader/SkyboxShaderD.dproj
  20. 24 549
      Demos/glslshaders/SkyboxShader/fSkyboxShaderD.dfm
  21. 8 19
      Demos/glslshaders/SkyboxShader/fSkyboxShaderD.pas
  22. 20 21
      Demos/specialsFX/ShadowmappingFBO/fShadowFBOC.cpp
  23. 0 2
      Demos/specialsFX/ShadowmappingFBO/fShadowFBOC.dfm
  24. 10 10
      Demos/specialsFX/ShadowmappingFBO/fShadowFBOC.h
  25. 7 12
      Demos/specialsFX/ShadowmappingFBO/fShadowFBOD.dfm
  26. 26 39
      Demos/specialsFX/ShadowmappingFBO/fShadowFBOD.pas
  27. 3 3
      Readme.txt
  28. 19 4
      Source/FmInfo.dfm
  29. 11 4
      Source/FmInfo.pas
  30. 6 7
      Source/Formats.DDSImage.pas
  31. 0 1
      Source/Formats.DXTC.pas
  32. 2 2
      Source/GLS.Scene.pas
  33. 1 2
      Source/GLSL.Shader.pas

+ 0 - 0
Asset/Button/gls.ico → Asset/Button/GLScene.ico


+ 0 - 0
Asset/Texture/EarthSpec.dds → Asset/Cubemap/EarthSpec.dds


+ 0 - 0
Asset/Texture/Masks.dds → Asset/Cubemap/Masks.dds


+ 4 - 1
Demos/glslshaders/BumpShader/fBumpShaderC.cpp

@@ -81,9 +81,12 @@ void __fastcall TForm1::FormCreate(TObject *Sender)
   // Then load textures
   SetCurrentDir(Path + "\\texture");
   MaterialLibrary->LibMaterialByName("Earth")->Material->Texture->Image->LoadFromFile("Earth.jpg");
-  MaterialLibrary->LibMaterialByName("EarthGross")->Material->Texture->Image->LoadFromFile("EarthSpec.dds");
   MaterialLibrary->LibMaterialByName("EarthNormals")->Material->Texture->Image->LoadFromFile("EarthNormals.jpg");
 
+  // And cubemaps
+  SetCurrentDir(Path + "\\cubemap");
+  MaterialLibrary->LibMaterialByName("EarthGross")->Material->Texture->Image->LoadFromFile("EarthSpec.dds");
+
   // Create Shader
   MultiLightShader = new TGLSLMLBumpShader(this);
   MultiLightShader->LightSources = MultiLightShader->LightSources << 1, 2 ;

+ 2 - 4
Demos/glslshaders/BumpShader/fBumpShaderC.dfm

@@ -10,6 +10,7 @@ object Form1: TForm1
   Font.Height = -11
   Font.Name = 'Tahoma'
   Font.Style = []
+  Position = poScreenCenter
   OnClose = FormClose
   OnCreate = FormCreate
   OnMouseWheel = FormMouseWheel
@@ -31,8 +32,6 @@ object Form1: TForm1
     OnMouseDown = ViewerMouseDown
     OnMouseMove = ViewerMouseMove
     TabOrder = 0
-    ExplicitWidth = 630
-    ExplicitHeight = 434
   end
   object Panel1: TPanel
     Left = 0
@@ -41,8 +40,6 @@ object Form1: TForm1
     Height = 47
     Align = alBottom
     TabOrder = 1
-    ExplicitTop = 387
-    ExplicitWidth = 566
     object LightMovingCheckBox: TCheckBox
       Left = 8
       Top = 8
@@ -279,6 +276,7 @@ object Form1: TForm1
         Material.Texture.TextureMode = tmModulate
         Material.Texture.Disabled = False
         Material.MaterialLibrary = MaterialLibrary
+        Shader = MyBumpShader
       end
       item
         Name = 'EarthNormals'

+ 1 - 5
Demos/glslshaders/BumpShader/fBumpShaderD.dfm

@@ -32,8 +32,6 @@ object FormBumpShader: TFormBumpShader
     OnMouseDown = ViewerMouseDown
     OnMouseMove = ViewerMouseMove
     TabOrder = 0
-    ExplicitWidth = 445
-    ExplicitHeight = 414
   end
   object Panel1: TPanel
     Left = 475
@@ -42,8 +40,6 @@ object FormBumpShader: TFormBumpShader
     Height = 437
     Align = alRight
     TabOrder = 1
-    ExplicitLeft = 400
-    ExplicitHeight = 386
     object LightMovingCheckBox: TCheckBox
       Left = 8
       Top = 8
@@ -215,7 +211,7 @@ object FormBumpShader: TFormBumpShader
         AutoCentering = [macCenterX, macCenterY, macCenterZ]
       end
       object Fighter: TGLActor
-        Position.Coordinates = {0000164300000000000000000000803F}
+        Position.Coordinates = {00001643000000000000AA420000803F}
         Visible = False
         Interval = 100
         AutoCentering = [macCenterX, macCenterY, macCenterZ]

+ 3 - 3
Demos/glslshaders/BumpShader/fBumpShaderD.pas

@@ -29,13 +29,13 @@ uses
   GLS.Utils,
   GLS.FileMS3D,
   GLS.File3DS,
-  Formats.DDSImage,
   GLS.FileMD2,
   GLS.FileSMD,
- 
   GLSL.Shader,
   GLSL.CustomShader,
-  GLSL.BumpShaders;
+  GLSL.BumpShaders,
+
+  Formats.DDSImage;
 
 type
   TFormBumpShader = class(TForm)

+ 0 - 1
Demos/glslshaders/DiffuseSpecularShader/fDiffuseShaderC.cpp

@@ -25,7 +25,6 @@
 #pragma link "GLS.FileSMD"
 #pragma link "GLS.FileMD2"
 #pragma link "GLS.File3DS"
-#pragma link "Formats.DDSImage"
 #pragma link "GLS.FileMS3D"
 
 #pragma resource "*.dfm"

+ 0 - 2
Demos/glslshaders/DiffuseSpecularShader/fDiffuseShaderC.dfm

@@ -32,8 +32,6 @@ object Form1: TForm1
     PenAsTouch = False
     Align = alClient
     TabOrder = 0
-    ExplicitWidth = 628
-    ExplicitHeight = 408
   end
   object Panel1: TPanel
     Left = 0

+ 0 - 1
Demos/glslshaders/DiffuseSpecularShader/fDiffuseShaderC.h

@@ -27,7 +27,6 @@
 #include "GLS.FileSMD.hpp"
 #include "GLS.FileMD2.hpp"
 #include "GLS.File3DS.hpp"
-#include "Formats.DDSImage.hpp"
 #include "GLS.FileMS3D.hpp"
 #include "GLS.Utils.hpp"
 #include "GLSL.DiffuseSpecularShader.hpp"

+ 0 - 4
Demos/glslshaders/DiffuseSpecularShader/fDiffuseShaderD.dfm

@@ -32,8 +32,6 @@ object FormDiffuseShader: TFormDiffuseShader
     PenAsTouch = False
     Align = alClient
     TabOrder = 0
-    ExplicitWidth = 501
-    ExplicitHeight = 437
   end
   object Panel1: TPanel
     Left = 629
@@ -42,8 +40,6 @@ object FormDiffuseShader: TFormDiffuseShader
     Height = 527
     Align = alRight
     TabOrder = 1
-    ExplicitLeft = 356
-    ExplicitHeight = 355
     object LightMovingCheckBox: TCheckBox
       Left = 8
       Top = 8

+ 1 - 2
Demos/glslshaders/DiffuseSpecularShader/fDiffuseShaderD.pas

@@ -35,8 +35,7 @@ uses
   GLS.Utils,
   GLS.FileMD2,
   GLS.FileMS3D,
-  GLS.File3DS,
-  Formats.DDSImage;
+  GLS.File3DS;
 
 type
   TFormDiffuseShader = class(TForm)

+ 0 - 14
Demos/glslshaders/GLSLShaderComponent/ShaderCompD.dproj

@@ -126,8 +126,6 @@
         <DCCReference Include="fShaderCompD.pas">
             <Form>GLSLTestForm</Form>
         </DCCReference>
-        <None Include="..\..\..\media\Shaders\Shader.Frag"/>
-        <None Include="..\..\..\media\Shaders\Shader.Vert"/>
         <BuildConfiguration Include="Base">
             <Key>Base</Key>
         </BuildConfiguration>
@@ -160,18 +158,6 @@
                 <Platform value="Win64">True</Platform>
             </Platforms>
             <Deployment Version="3">
-                <DeployFile LocalName="..\..\..\media\Shaders\Shader.Frag" Configuration="Debug" Class="ProjectFile">
-                    <Platform Name="Win64">
-                        <RemoteDir>.\</RemoteDir>
-                        <Overwrite>true</Overwrite>
-                    </Platform>
-                </DeployFile>
-                <DeployFile LocalName="..\..\..\media\Shaders\Shader.Vert" Configuration="Debug" Class="ProjectFile">
-                    <Platform Name="Win64">
-                        <RemoteDir>.\</RemoteDir>
-                        <Overwrite>true</Overwrite>
-                    </Platform>
-                </DeployFile>
                 <DeployFile LocalName="Win64\Debug\ShaderCompD.exe" Configuration="Debug" Class="ProjectOutput">
                     <Platform Name="Win64">
                         <RemoteName>ShaderCompD.exe</RemoteName>

+ 11 - 12
Demos/glslshaders/GLSLShaderComponent/fShaderCompC.dfm

@@ -2,8 +2,8 @@ object Form1: TForm1
   Left = 0
   Top = 0
   Caption = 'GLSL Shader Component'
-  ClientHeight = 407
-  ClientWidth = 561
+  ClientHeight = 585
+  ClientWidth = 856
   Color = clBtnFace
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
@@ -11,37 +11,36 @@ object Form1: TForm1
   Font.Name = 'Tahoma'
   Font.Style = []
   Position = poScreenCenter
-  WindowState = wsMaximized
   OnClose = FormClose
   OnCreate = FormCreate
   TextHeight = 13
   object Viewer: TGLSceneViewer
     Left = 0
     Top = 0
-    Width = 561
-    Height = 378
+    Width = 856
+    Height = 556
     Camera = Camera
     Buffer.BackgroundColor = clBackground
     Buffer.ContextOptions = [roDoubleBuffer, roStencilBuffer, roRenderToWindow]
     Buffer.AntiAliasing = aaNone
     Buffer.DepthPrecision = dp24bits
     Buffer.ColorDepth = cd24bits
-    FieldOfView = 142.042236328125000000
+    FieldOfView = 153.679840087890600000
     PenAsTouch = False
     Align = alClient
     TabOrder = 0
-    ExplicitWidth = 706
-    ExplicitHeight = 492
+    ExplicitWidth = 678
+    ExplicitHeight = 439
   end
   object Panel1: TPanel
     Left = 0
-    Top = 378
-    Width = 561
+    Top = 556
+    Width = 856
     Height = 29
     Align = alBottom
     TabOrder = 1
-    ExplicitTop = 492
-    ExplicitWidth = 706
+    ExplicitTop = 378
+    ExplicitWidth = 561
     object LightMovingCheckBox: TCheckBox
       Left = 8
       Top = 8

+ 14 - 12
Demos/glslshaders/GLSLShaderComponent/fShaderCompD.pas

@@ -32,8 +32,7 @@ uses
 
   GLS.FileMD2,
   GLS.FileMS3D,
-  GLS.File3DS,
-  Formats.DDSImage;
+  GLS.File3DS;
 
 type
   TGLSLTestForm = class(TForm)
@@ -84,17 +83,10 @@ implementation
 
 procedure TGLSLTestForm.FormCreate(Sender: TObject);
 begin
-  //First load scripts from shader directory
   var Path: TFileName := GetCurrentAssetPath();
 
-  //Second load models from asset directory
+  // Loading static models
   SetCurrentDir(Path  + '\model');
-
-  Fighter.LoadFromFile('waste.md2'); //Fighter
-  Fighter.SwitchToAnimation(0, True);
-  Fighter.AnimationMode := aamLoop;
-  Fighter.Scale.Scale(3);
-
   Teapot.LoadFromFile('Teapot.3ds'); //Teapot (no texture coordinates)
   Teapot.Scale.Scale(0.8);
   Sphere_big.LoadFromFile('Sphere_big.3DS'); //Sphere_big
@@ -102,13 +94,23 @@ begin
   Sphere_little.LoadFromFile('Sphere_little.3ds'); //Sphere_little
   Sphere_little.Scale.Scale(4);
 
+
+  // Loading models with animations and skins
+  SetCurrentDir(Path  + '\modelext');
+  Fighter.LoadFromFile('waste.md2');
+  Fighter.SwitchToAnimation(0, True);
+  Fighter.AnimationMode := aamLoop;
+  Fighter.Scale.Scale(3);
+  // Skin texture
+  MaterialLibrary.LibMaterialByName('WasteSkin').Material.Texture.Image.LoadFromFile('waste.jpg');
+
   // Then load textures.
   SetCurrentDir(Path  + '\texture');
   MaterialLibrary.LibMaterialByName('Earth').Material.Texture.Image.LoadFromFile('Earth.jpg');
-  MaterialLibrary.LibMaterialByName('WasteSkin').Material.Texture.Image.LoadFromFile('waste.jpg');
 
+  // Loading scripts from shader directory
   SetCurrentDir(Path  + '\shader');
-  GLSLShader.LoadShaderPrograms('Shader.Vert','Shaders\Shader.Frag');
+  GLSLShader.LoadShaderPrograms('Shader.Vert','Shader.Frag');
   GLSLShader.Enabled := True;
 
 end;

+ 0 - 2
Demos/glslshaders/Ocean/fOceanD.dfm

@@ -26,8 +26,6 @@ object Form1: TForm1
     PenAsTouch = False
     Align = alClient
     TabOrder = 0
-    ExplicitWidth = 689
-    ExplicitHeight = 435
   end
   object GLScene1: TGLScene
     ObjectsSorting = osNone

+ 3 - 2
Demos/glslshaders/Ocean/fOceanD.pas

@@ -29,6 +29,7 @@ uses
   GLS.VectorTypes,
   GLS.SkyDome,
   GLS.VectorLists,
+  GLS.FileDDS,
  
   GLS.Material,
   GLS.Coordinates,
@@ -99,8 +100,8 @@ begin
   // Load the cube map which is used both for environment and as reflection texture
   SetCurrentDir(Path  + '\cubemap');
   CubeMap := TGLTexture.Create(Self);
-//  Cubemap.ImageClassName := 'TGLCompositeImage';
-//  Cubemap.Image.LoadFromFile('Skybox.dds'); // if loading all 6 images
+  Cubemap.ImageClassName := 'TGLCompositeImage';
+  Cubemap.Image.LoadFromFile('Skybox.dds'); // if loading all 6 images
   Cubemap.TextureWrap := twNone;
   Cubemap.FilteringQuality := tfAnisotropic;
   Cubemap.Disabled := False;

+ 1 - 1
Demos/glslshaders/SkyboxShader/SkyboxShaderD.dpr

@@ -2,7 +2,7 @@ program SkyboxShaderD;
 
 uses
   Forms,
-  fSkyboxShaderD in 'fSkyboxShaderD.pas' {FormSkyboxShader};
+  fSkyboxShaderD in 'fSkyboxShaderD.pas';
 
 {$R *.res}
 

+ 2 - 1
Demos/glslshaders/SkyboxShader/SkyboxShaderD.dproj

@@ -94,6 +94,7 @@
         <VerInfo_Keys>CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)</VerInfo_Keys>
         <Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
         <AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
+        <AppDPIAwarenessMode>none</AppDPIAwarenessMode>
     </PropertyGroup>
     <ItemGroup>
         <DelphiCompile Include="$(MainSource)">
@@ -123,7 +124,7 @@
                     <Source Name="MainSource">SkyboxShaderD.dpr</Source>
                 </Source>
                 <Excluded_Packages>
-                    <Excluded_Packages Name="C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl\GLScene_SDL_DT.bpl">File C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl\GLScene_SDL_DT.bpl not found</Excluded_Packages>
+                    <Excluded_Packages Name="C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl\GBE3D.bpl">File C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl\GBE3D.bpl not found</Excluded_Packages>
                     <Excluded_Packages Name="$(BDSBIN)\bcboffice2k280.bpl">Embarcadero C++Builder Office 2000 Servers Package</Excluded_Packages>
                     <Excluded_Packages Name="$(BDSBIN)\bcbofficexp280.bpl">Embarcadero C++Builder Office XP Servers Package</Excluded_Packages>
                     <Excluded_Packages Name="$(BDSBIN)\dcloffice2k280.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>

+ 24 - 549
Demos/glslshaders/SkyboxShader/fSkyboxShaderD.dfm

@@ -11,555 +11,30 @@ object FormSkyboxShader: TFormSkyboxShader
   Font.Name = 'MS Sans Serif'
   Font.Style = []
   Icon.Data = {
-    0000010004003030000001002000A8250000460000002020000001002000A810
-    0000EE2500001818000001002000880900009636000010100000010020006804
-    00001E4000002800000030000000600000000100200000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000003000000130000
-    002E0000003D000000390000001C000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    000000000000000000000000000000000000000000170E0E0E5364636277A8A6
-    A6B3B3B1B1D582807FCC5A58578A0000002F0000000B00000000000000000000
-    000000000000000000000000000D000000180000000600000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    00000000000000000000000000000000000205050550B4B2B1C8CDCBCAFFCDCB
-    CAFFCFCDCCFFA19E9DFF8E8B8AFF737170B00A0A0A5300000019000000000000
-    000000000000000000294F4E4E6B5D5C5C831A1A1A5B00000023000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    00000000000000000000000000000000000B41404065CCCAC9FDCDCBCAFFCDCB
-    CAFFD1CFCEFFAEACABFF8D8A89FF918E8DFF827F7ECF28272762000000240000
-    00090000002F7C7B7A88C8C6C5F1CDCBCAFFA4A1A0E5595756890000002F0000
-    000A000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    00000000000000000000000000000000001C817F7F8CCDCBCAFFCDCBCAFFCDCB
-    CAFFCFCDCCFFC2C0BFFF8E8B8AFF8D8A89FF8E8B8AFF888584E8424140750000
-    0038A2A09FAACDCBCAFFCDCBCAFFCECCCBFFD1CFCEFFB5B3B2FF767473AB0000
-    0032000000120000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    000000000000000000000000000000000037B5B3B2C9CDCBCAFFCDCBCAFFCDCB
-    CAFFCECCCBFFCDCBCAFFAEACABFFA5A2A1FFA29F9EFF999695FF928F8EE7B0AE
-    ADCACFCDCCFFCDCBCAFFCDCBCAFFCDCBCAFFCFCDCCFFC2C0BFFFB1AFADFF8988
-    86BD10100F550000001900000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    000000000000000000000000000F07070751C6C4C3ECCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFD0CECDFFD0CECDFFCFCDCCFFCCCAC9FFCAC7C6FFCECC
-    CBFFCDCBCAFFCDCBCAFFCDCBCAFFCECCCBFFCBC9C8FFB6B4B2FFB2B0AEFFA9A7
-    A5FF908E8CCE1F1F1E5C0000001F000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000C00000004000000000000
-    000000000000000000242424245AA9A7A6B7CDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCECCCBFFCECCCBFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCFCDCCFFC2C0BFFFB2B0AEFFADABA9FFA6A4
-    A2FFA8A6A4FF999795DC32313066000000250000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    00000000000000000000000000000000002C3D3D3C69111110570000002F0000
-    001B0000002F75747382C3C1C0E7CDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFB7B5B3FFB2B0AEFFA8A6A4FFA7A5
-    A3FFA7A5A3FFA8A6A4FF9D9B99E94342416F0000001700000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    000000000000000000000000002A7D7C7C89C9C7C6F9B1AFAEE78A8988B75E5C
-    5C89989796A7CECCCBFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCECCCBFFC4C2C0FFB3B1AFFFAEACAAFFA6A4A2FFA7A5
-    A3FFA7A5A3FFA7A5A3FFA8A6A4FF8F8D8CC80000003700000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000001C47464668C9C7C6F3CECCCBFFD0CECDFFD1CFCEFFCCCA
-    C9FFCCCAC9FFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCCCAC9FFCCCAC9FFCDCA
-    C9FFCDCBCAFFCDCBCAFFCCCAC9FFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCFCDCCFFBDBBB9FFAAA8A6FFA9A7A5FFA7A5A3FFA7A5
-    A3FFA7A5A3FFA7A5A3FFA5A3A1FF7D7C7AAB0000002A00000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000051C1C1C57BAB8B7D4CDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCECC
-    CBFFCDCBCAFFCDCBCAFFCDCBCAFFCCCAC9FFCCCAC9FFD0CECDFFD2D1D0FFD4D3
-    D2FFD6D5D4FFD5D4D3FFD3D2D1FFD1CFCEFFCCCAC9FFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCECCCBFFCBC9C8FFA9A7A5FF9F9D9BFFA5A3A1FFA8A6
-    A4FFA7A5A3FFA7A5A3FFA09E9CF5353534660000000B00000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    00000000000938383762CAC8C7F5CDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCBC9C8FFCFCDCCFFD9D8D7FFDFDEDDFFDCDBDAFFD3D2
-    D1FFCDCBCAFFCBC9C8FFCCCBCAFFD3D2D1FFD7D5D4FFCECCCBFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCFCDCDFFBEBCBBFFA4A2A0FF9B9997FFA4A2
-    A0FFA8A6A4FFA6A4A2FF888684BE000000320000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    00000000000000000033AEACABC0CDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCBC9C8FFD6D4D3FFE6E5E5FFE7E6E5FFDAD8D7FFCBC9C8FFC1BF
-    BDFFBDBBB9FFB9B7B6FFB7B5B4FFB9B7B6FFC6C5C3FFD5D3D2FFCFCDCCFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCECCCBFFC9C7C6FFAFADACFFA19F9DFF9997
-    95FFA09E9CFFA2A09EF947464573000000120000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    00000000000000000016706F6E7FCCCAC9FECDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCBC9C8FFD9D8D7FFF1F0EFFFEDECECFFDAD9D8FFCFCDCCFFCBC9C8FFC7C5
-    C4FFC4C2C1FFC0BEBDFFBDBBB9FFBAB8B7FFB8B6B5FFBFBDBCFFCFCDCCFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCECCCBFFBDBBBAFFB0AEACFFA5A3
-    A1FF9E9C9AFF918F8DD60000003E0000002D0000001800000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000102020250C0BEBDE0CDCBCAFFCDCBCAFFCDCBCAFFCBC9
-    C8FFD7D6D5FFF6F6F5FFF3F3F2FFDFDEDDFFD7D5D4FFD6D4D3FFD3D1D0FFCFCD
-    CCFFCAC8C8FFC7C5C4FFC4C2C1FFBCBAB9FFB3B1B0FDA09F9EDA9D9B9AC8C9C7
-    C6F5CDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBC9FFCBC9
-    C8FFC9C7C6FFC3C1BFF4B8B6B6CFA19F9EB16A6967820000002F000000090000
-    0000000000000000000000000000000000000000000000000000000000000000
-    000000000000000000020A0A0A52C1BFBEE2CDCBCAFFCDCBCAFFCCCAC9FFD1CE
-    CDFFF5F3F3FFF9F8F8FFE4E3E2FFDCDBDAFFDCDBDAFFDAD9D8FFD8D6D5FFD5D3
-    D2FFD3D1D0FFCBC9C8FFBAB8B6F8898886AC4A4948720000003F00000037B1AF
-    AEC1CDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCECC
-    CBFFCECCCBFFCECCCBFFCDCBCAFFCAC8C7FFBDBBBAFF8C8A89AA020202500000
-    0018000000000000000000000000000000000000000000000000000000000000
-    0000000000000000001A7D7C7C88CDCBCAFFCDCBCAFFCDCBCAFFCBC9C8FFE5E4
-    E3FFFBFBFAFFEAEAE9FFDDDCDBFFDFDEDDFFDEDDDCFFDDDCDBFFDCDBDAFFDBDA
-    D9FFCFCDCCFFADABAAD64948476D0000002C0000001000000000000000249492
-    929CCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCCCAC9FFC1BFBDFFB7B5B3FFA1A09ECC2F2E
-    2E60000000240000000000000000000000000000000000000000000000000000
-    00000000000000000036B3B2B1C6CDCBCAFFCDCBCAFFCCCAC9FFD3D1D0FFF4F3
-    F2FFF0F0EFFFDEDDDCFFDFDEDDFFDFDEDDFFDFDEDDFFDFDEDDFFDFDFDEFFD3D2
-    D0FFA7A5A4C6121111550000001D000000000000000000000000000000156C6B
-    6A7CCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCECCCBFFD0CECDFFC3C1C0FFB9B7B5FFB8B6B5FFAEAC
-    ABE63F3E3E6A0000000D00000000000000000000000000000000000000000000
-    00000000000937363661C9C7C6F5CDCBCAFFCDCBCAFFCBC9C8FFDFDEDEFFF2F1
-    F1FFE2E1E0FFDAD9D8FFDDDCDBFFDEDDDCFFDFDEDDFFE1E0DFFFD8D7D6FFB0AE
-    ADD4101010540000001500000000000000000000000000000000000000105857
-    5670CDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCFCDCCFFCECCCBFFD3D1D0FFC7C5C4FFBBB9B7FFBAB8B7FFBAB8
-    B6FF8A8987B20000002D00000000000000000000000000000000000000000000
-    0012000000339694939ECDCBCAFFCDCBCAFFCDCBCAFFCDCCCBFFE4E3E2FFE7E6
-    E5FFD7D6D5FFD8D7D6FFDADAD9FFDCDBDAFFDEDDDCFFDDDDDCFFC1C0BFF23D3D
-    3C650000001C0000000000000000000000000000000000000000000000126160
-    6076CDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCFCD
-    CCFFCDCBCAFFC2C0BEFFB0AEACFFBBBAB8FFC6C4C3FFBFBDBCFFBDBBB9FFBCBA
-    B9FF979594C4000000350000000000000000000000000000000A0000002A504F
-    4E6CAEACABBFCCCAC9FECDCBCAFFCDCBCAFFCCCAC9FFD0CECDFFE0DFDEFFDAD9
-    D8FFD0CECDFFD3D3D2FFD6D5D4FFD9D7D6FFDCDBDAFFCFCECDFF8886859A0000
-    00290000000000000000000000000000000000000000000000000000001D8583
-    838ECDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCECCCBFFCECCCBFFC3C1
-    BFFFB2B0AEFFAAA8A6FFA9A7A5FFA5A3A1FFA8A6A4FFBAB8B6FFC1BFBEFFBFBD
-    BCFFA19F9ED10000003B00000000000000000000000520202059A19F9EACCAC8
-    C7F5CDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFD0CFCEFFD8D7D6FFCFCE
-    CDFFCAC8C7FFCECCCBFFD1CFCEFFD5D3D2FFD5D3D2FFB8B6B5E61C1C1C580000
-    00050000000000000000000000000000000000000000000000000000002CA4A2
-    A2B0CDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCECCCBFFC7C5C3FFB1AFADFFA9A7
-    A5FFA9A7A5FFA7A5A3FFA5A3A1FFA4A2A0FFA3A19FFFA4A2A0FFB2B0AEFFC2C0
-    BEFFAAA8A7DF00000041000000000000000000000026989696A3CDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCECDCCFFC4C2
-    C1FFC3C1C0FFC7C5C4FFCBC9C8FFCFCDCCFFCBC9C8FF959493B20000002E0000
-    00000000000000000000000000000000000000000000000000000000003CBAB8
-    B7D2CDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFDCDAD9FFC2C0BFFFA5A3
-    A1FFA3A19FFFA4A2A0FFA4A2A0FFA4A2A0FFA4A2A0FFA4A2A0FFA2A09EFFACAA
-    A8FFAAA8A6E800000045000000000000000000000035B1AFAEC3CDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCECCCBFFC8C6C5FFC5C3C1FFBBB9
-    B7FFBBB9B7FFBFBDBCFFC3C1C0FFC9C7C6FFBEBCBBFF6463627F000000170000
-    000000000000000000000000000000000000000000000000000F5554546FCBC9
-    C8FBCDCBCAFFCDCBCAFFCDCBCAFFCCCAC9FFD1D0CFFFE9E8E7FFE4E3E3FFC3C2
-    C1FFAAA8A7FFA19F9DFFA3A19FFFA4A2A0FFA4A2A0FFA4A2A0FFA3A19FFF9391
-    8FD75A59588100000024000000000000000000000040BEBCBBDCCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCECCCBFFC4C2C1FFB9B7B6FFB2B0
-    AEFFB2B0AEFFB6B4B3FFBBB9B7FFC0BEBCFFAFADABF22424235C000000070000
-    000000000000000000000000000000000000000000000000002EA6A5A4B3CDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCBC9C8FFD9D8D7FFECEBECFFDCDBDAFFD4D3
-    D2FFD1D0CFFFBAB9B7FFA5A3A1FFA2A09EFFA3A19FFF93918FD1605F5E870000
-    003E0000001D00000000000000000000000000000045C3C1C0E7CECCCBFFCECC
-    CBFFCECCCBFFCDCBCAFFCDCBCAFFCDCBCAFFCECCCBFFC6C4C3FFB0AEACFFABA9
-    A7FFA9A7A5FFADABA9FFB1AFADFFB6B4B2FFA4A2A0E710101055000000030000
-    0000000000000000000000000000000000000000001B4C4C4B6BCBC9C8F9CDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFE7E6E5FFEDEDEDFFD8D7D6FFD3D2
-    D0FFD4D2D1FFD6D5D4FFCBCAC8FFA09E9DE05C5B59840000003B0000001A0000
-    000000000000000000000000000000000000000000246E6D6C81BBB9B8EDC7C5
-    C4FFCCCAC9FFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCCCAC9FFABA9A7FFA2A0
-    9EFF9F9D9BFFA4A2A0FFA8A6A4FFACAAA8FF9D9B99E50D0D0D54000000030000
-    00000000000000000000000000000000000B02020250BAB8B7D3CDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCBC9C8FFD9D7D6FFF6F5F4FFE9E8E7FFD6D5D4FFD6D5
-    D4FFD5D3D2FFD5D3D2FFD0CFCEFF807E7E950000002100000000000000000000
-    00000000000000000000000000000000000000000000000000272625255C7C7B
-    7998A4A2A0CEC8C6C5FECECCCBFFCDCBCAFFCDCBCAFFD0CECDFFB5B3B1FF9A98
-    96FF999795FF9A9896FF9F9D9BFFA3A19FFF999795EC14131357000000040000
-    00000000000000000000000000080000002FA3A2A1B0CDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCCCAFFE2E1E0FFE5E4E3FFDCDADAFFD8D7
-    D6FFD7D6D5FFD8D6D5FFC9C7C6FC4F4E4D700000001000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000070000
-    00220000003AACAAA9C0CECCCBFFCDCBCAFFCDCBCAFFCECCCBFFCBC9C8FF9F9D
-    9AFF92908EFF949290FF969492FF9A9896FF9A9896FC3D3C3B6D0000000F0000
-    00000000000000000012000000339D9B9AA7CDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFD0CECDFFBAB8B7FF8E8B89FFA6A5A3FFCDCBCAFFDFDE
-    DDFFDDDCDBFFD8D7D7FFB1B0AED50000003D0000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000218D8C8B95CDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFD0CECDFFC4C2
-    C1FF989594FF8D8A89FF918E8DFF93918FFF959391FF6F6E6CA7000000280000
-    0007000000253030305EAEACABBFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCFCDCCFFA19F9DFF878583FF8F8D8BFFA9A8
-    A6FFD1D0CEFFD8D7D6FF8785849A000000220000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    00000000000F5352526DCBC9C8F8CDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFD0CE
-    CDFFC7C5C4FFA6A4A3FF918E8DFF8D8A89FF8D8A89FF848180E5171717572D2D
-    2C5D918F8F9AC4C2C1E9CDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFD0CECDFFC0BEBCFF8E8C8AFF8E8C8AFF8B89
-    87FF8F8D8BFFA6A4A2E912121155000000030000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000062424245AC6C4C3EECDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCFCDCCFFD0CECDFFC3C1C0FFB8B6B5FFB4B1B0FFB4B2B1FFBAB8B7DEC7C6
-    C5EDCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFD1CFCEFFA3A19FFF888684FF8E8C
-    8AFF8E8C8AFF898785F12C2B2B64000000120000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    00000000002088878692CDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCFCDCCFFD0CECDFFD1CFCEFFD1CFCEFFCECCCBFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCFCDCCFFC4C2C1FFA09E9CFF8F8D
-    8BFF8A8886FF8E8C8AFF787775BD000000320000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    000311111154BFBDBDDDCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCBC9C8FFCCCAC9FFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCAC8C7FFE9E8E7FFFCFBFBFFDAD9
-    D8FFAEADABFF918F8DFF888684FB3F3F3E720000001500000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    00186A69697ACDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCCCAC9FFCCCAC9FFDBD9D9FFD4D3D2FFCCCA
-    C9FFCDCBCAFFCDCBCAFFCDCBCAFFCAC8C7FFDDDBDBFFFCFBFBFFF5F4F4FFE4E3
-    E2FFE5E4E3FFD3D2D0FFAFADACFF7F7D7BC50303035000000002000000000000
-    0000000000000000000000000000000000000000000000000000000000020505
-    0550B6B4B3CDCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCECCCBFFCECCCBFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCCCAC9FFCBC9C8FFD1CFCEFFE2E0E0FFF0EFEFFFE5E4E4FFCFCE
-    CDFFCDCBCAFFCCCAC9FFCBC9C8FFD7D5D4FFF8F7F7FFF8F7F7FFE3E2E1FFDEDD
-    DCFFDFDEDDFFE2E1E0FFE6E5E4FFD1CFCEFF4C4B4A7300000011000000000000
-    0000000000000000000000000000000000000000000000000000000000052322
-    2259C8C6C5F3CDCBCAFFCDCBCAFFCECCCBFFCFCDCCFFC3C1BFFFBEBCBAFFCFCE
-    CDFFCFCDCCFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFD2D0D0FFDDDCDBFFE7E6E5FFE8E6E6FFDDDCDCFFD5D3D2FFD5D4
-    D3FFD5D3D2FFCFCDCCFFCFCDCCFFF3F2F1FFFAF9F8FFE7E6E5FFDEDDDCFFDFDE
-    DDFFDFDEDDFFDFDEDDFFE0DFDEFFBEBCBBDB2928285C00000007000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0029918F8F9ACDCBCAFFCECCCBFFCDCBCAFFBDBBB9FFAFADABFFACAAA8FFB4B3
-    B1FFC8C7C5FFD2D1D0FFCFCDCCFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCECC
-    CBFFC9C7C6FFBEBCBAFFD7D6D5FFDCDBDAFFD3D1D0FFCFCDCCFFD0CFCDFFD2D0
-    CFFFD4D2D1FFD7D5D4FFD2D0D0FFCFCECDE8E1E1E0F3DEDDDCFFDFDEDDFFDFDE
-    DDFFDFDEDDFFE1E0DFFFC9C7C6EC444343690000001F00000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    000200000031ACAAAABBC9C7C6FFB7B5B3FFAEACAAFFADABA9FFA9A7A5FFA6A4
-    A2FFA8A6A3FFB3B1AFFFC4C3C1FFCECCCBFFCDCBCAFFCDCBCAFFCDCBCAFFCFCD
-    CCFFC2C0BFFFA6A4A2FFA6A4A2FFAAA8A6FFB7B5B3FFC7C5C3FFCDCBCAFFD1CF
-    CEFFD1CFCEFFC3C3C1F08C8B8AA420201F594444436499999897CECDCCDDDEDD
-    DCFFE1E0DFFFD0CFCEF65F5E5D78000000270000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000100E0E0E53989694BDAEACAAFFABA9A7FFA8A6A4FFA8A6A4FFA8A6
-    A4FFA8A6A4FFA4A2A0FFB6B4B2FFCFCDCCFFCDCBCAFFCDCBCAFFCDCBCAFFCFCD
-    CCFFBAB8B6FFA8A6A4FFA4A2A0FFA09E9CFF9F9D9BFFA3A19FFFABA9A7FFB8B6
-    B5FF908E8DAF2B2A295E00000028000000060000000A00000021080808516867
-    6774A6A5A5AC5C5B5A760000002B000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    00000000000000000011000000326D6B6A8D898786B49D9B99DFA8A6A4FFA8A6
-    A4FFA8A6A4FFA6A4A2FFADABA9F4CECCCBFDCDCBCAFFCDCBCAFFCECCCBFFCCCA
-    C9FFAEACABFFA8A6A4FFA3A19FFFA2A09EFFA2A09EFFA2A09EFFA09E9CFF9A98
-    96F820201F5C0000000B00000000000000000000000000000000000000020000
-    00120000002A0000001200000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    00000000000000000000000000000000001D0000002E06060651494847716D6C
-    6B8F8B8A88BB72706F9B4A49486ECAC8C7EECDCBCAFFCDCBCAFFCECCCBFFC7C5
-    C3FFAAA8A6FFA7A5A3FFA2A09EFFA2A09EFFA2A09EFFA2A09EFFA2A09EFF8D8B
-    8ACE020202500000000100000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000002000000100000
-    001D00000031000000230000003EBDBBBAD6CCCAC9FFCCCAC9FFCFCDCCFFBBB9
-    B7FFA6A4A2FFA5A3A1FFA2A09EFFA2A09EFFA2A09EFFA2A09EFFA19F9DFF6F6E
-    6D9B000000230000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    00000000000000000000000000259897969FD4D2D1FFD5D4D3FFD7D6D5FFCECD
-    CCFFB6B4B3FFA2A09EFFA09E9CFFA09E9CFFA19F9DFFA2A09EFFA09E9CFF4A49
-    4875000000120000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    00000000000000000000000000040000002F7C7A7A88A4A3A2BDBBB9B8E7C3C1
-    C0F9C2C0BFFFB8B6B5FFB4B2B1FFABA9A8FFA5A3A1FFA2A09EFF939290DC0707
-    0752000000020000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000001A00000032111111553D3C
-    3B667776758EA5A3A1C6ACAAA8D2A5A3A2C5959392AC79777792313030640000
-    001F000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000030000
-    000B0000001D000000360000003C000000360000002A0000001F0000000A0000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000FFFFC0FFFFFF85DFFFFF803E3FFF85DFFFFF
-    001C1FFF85DFFFFF000007FF85DFFFFF000003FF85DFFFFF000001FF85DFFFFE
-    000000FF85DFFF9C0000007F85DFFF000000003F85DFFE000000003F85DFFC00
-    0000003F85DFF8000000003F85DFF8000000007F85DFFC000000007F85DFFC00
-    0000003F85DFFC000000000F85DFFC000000000785DFFC000020000385DFFC00
-    00E0000185DFF80001E0000185DFF00003E0000185DFC00007E0000185DF8000
-    07E0000185DF80000FE0000185DF80000FC0000185DF80000FC0000385DF8000
-    0F80000F85DF80000F00003F85DFC0000E00003F85DFE0000C00007F85DFF800
-    0000007F85DFF8000000007F85DFF8000000007F85DFF8000000007F85DFF000
-    0000003F85DFF0000000001F85DFE0000000001F85DFE0000000001F85DFF000
-    0000003F85DFF0000000007F85DFF800000000FF85DFFC000001E1FF85DFFF00
-    0001FFFF85DFFFC00003FFFF85DFFFFE0003FFFF85DFFFFE0003FFFF85DFFFFF
-    8007FFFF85DFFFFFE00FFFFF85DF280000002000000040000000010020000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    00000000000000000000000000000000000A0000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    000000000000000000171E1E1E463A3A39511514144600000016000000000000
-    0000000000000000000000000017000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000177F7E7D74C9C8C7ECCFCECDFF868382EA56555472000000200000
-    0005000000062B2B2A45706F6E74212120390000000600000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    000000000021A2A1A0A0CECCCBFFD8D6D5FF969493FF7F7C7BEF6461609D0000
-    00210D0D0C44C3C1C0DED9D7D6FFADABABBE1717164600000006000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    00003231313EB8B6B5C7CDCBCAFFD1CFCEFFCBC9C8FFC3C0BFFFAFADACEF9594
-    93A0CECCCBEFCDCBCAFFD1CFCEFFCAC8C7FFACAAA9EA020202420000000B0000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000030000000400000000000000061D1D
-    1D2A92908F87CDCBCAFFCDCBCAFFCDCBCAFFD0CECDFFD4D2D1FFD6D4D3FFD2D0
-    CFFFCDCCCBFFCECCCBFFD2D0CFFFB7B5B2FFAAA8A6FFA5A3A1EF373635540000
-    000E000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000006111111450F0F0F460000002127272645ABAA
-    A9AACBC9C8F8CDCBCAFFCDCBCAFFCCCAC9FFCCCAC9FFCCCAC9FFCDCBCAFFCDCB
-    CAFFCDCBCAFFD0CECDFFC8C6C4FFAFADABFFA5A3A1FFA7A5A3FFA6A4A2EF4746
-    455B0000000E0000000000000000000000000000000000000000000000000000
-    0000000000000000000527262645C9C7C6E1D4D2D1EFA6A4A3A1C5C3C2E2CDCB
-    CAFFCBC9C7FFCAC8C7FFCDCBCAFFD1CFCEFFD0CECDFFCCCAC9FFCDCBCAFFCDCB
-    CAFFCDCBCAFFD1CFCFFFBEBCBAFFA09E9CFFA7A5A3FFA8A6A4FFA7A5A3F83636
-    35530000000B0000000000000000000000000000000000000000000000000000
-    00000000000000000020A19F9E9DCDCBCAFFCDCBCAFFCFCDCCFFCCCAC9FFC8C6
-    C5FFD2D0CFFFDCDCDBFFD8D6D5FFCFCFCEFFCFCECDFFD5D3D2FFD2D0CFFFCDCB
-    CAFFCDCBCAFFCECCCBFFD1CFCEFFA3A19FFF9A9896FFA8A6A4FF898785AA1616
-    152A000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000622212149CBC9C8FACDCBCAFFCCCAC9FFC7C5C4FFE4E2
-    E2FFF0EEEEFFD6D5D4FFC1BFBEFFBAB8B7FFB5B3B1FFB7B5B3FFCBCBCBFFD4D2
-    D1FFCDCBCAFFCDCBCAFFD3D1D0FFC2C0BEFF9B9996FF93918FFF161515470000
-    0006000000000000000000000000000000000000000000000000000000000000
-    000000000000000000002121202CAAA9A8ABCCCAC9FFC6C4C3FFE5E5E4FFFCFD
-    FCFFDAD9D8FFD2D1D0FFD0CDCCFFCDCACAFFC3C1C0F4969594A55E5D5C6C605E
-    5E64CCCAC9EFCDCBCAFFCECCCBFFD0CECEFFCCCAC9FFC3C1C0FF696866651818
-    1846272727330000000600000000000000000000000000000000000000000000
-    000000000000000000003434333FBAB8B7C9CAC8C5FFD3D2D1FFFFFFFFFFE2E1
-    E0FFDAD9D8FFDDDCDBFFDEDDDCFFCFCECCEF5352515C0D0D0D26000000140000
-    0021A5A3A2A0CDCBCAFFCDCBCAFFCECCCBFFD0CECDFFD1CFCFFFD2D0CFFFCFCD
-    CDFF9E9C9BB42B2B2A4300000006000000000000000000000000000000000000
-    0000000000000000001168676663CCCBCAFFC8C4C3FFF1F1F0FFEFEFEEFFDBDA
-    D9FFE0DFDEFFE3E2E1FFD8D7D5EF0D0D0D450000000F00000000000000000000
-    0021A2A1A0A0CDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCECCCBFFD0CECDFFD6D4
-    D3FFBEBCBBFFAAA8A8D31B1B1B46151414290000000000000000000000000000
-    00000000000000000021A2A1A0A0CBC9C8FFCFCDCCFFF3F2F1FFD9D8D7FFDAD9
-    D8FFE0DFDEFFDEDEDDEF5958585E000000100000000000000000000000000000
-    0021A2A1A0A0CDCBCAFFCDCBCAFFCECCCBFFD0CECDFFD4D2D1FFC5C3C4FFC9C7
-    C6FFC8C6C5FFBFBDBCFF7775737C1A1A1A460000000000000000000000000000
-    00063231313A92908F87C8C6C5EFCBC9C8FFD5D4D3FFE0DFDEFFCFCECDFFD7D6
-    D5FFDFDEDDFFA5A4A2A000000021000000000000000000000000000000000000
-    0021A2A1A0A0CDCBCAFFCDCBCAFFCECCCBFFC7C5C4FFB4B2B0FFA5A3A1FFA09F
-    9CFFADABA9FFC6C4C2FF8C8B8B920707074400000002000000002F2E2E350909
-    0943B6B4B3C0CDCBCAFFCDCBCAFFCCCAC9FFD2D0CFFFCDCBCAFFC6C4C3FFD0CD
-    CCFFD6D4D3FF464645560000000C000000000000000000000000000000003030
-    3037B2B1B0BACDCBCAFFCCCAC9FFD4D2D1FFAEAEABFF999795FFA09D9CFFA2A1
-    9EFF9E9C9AFFA9A7A5FFA4A2A0C0373736510000000A000000001D1D1D468B8A
-    8980CDCBCAFFCDCBCAFFCDCBCAFFCFCDCCFFC8C6C5FFB9B7B5FFB7B5B3FFC2C0
-    BFFFB6B5B4D12B2A2A42000000000000000000000000000000000000000A3B3A
-    3A50CDCBCAFFCDCBCAFFC7C5C4FFEAE8E8FFE4E3E2FFBCBAB9FF9F9D9BFF9E9C
-    9AFF908E8DBD646361742626253A1010102700000000000000041A191947B6B4
-    B3C1D0CECDFFCFCDCCFFCECCCBFFD1CFCEFFC3C1BEFFA6A4A2FFA9A7A5FFB4B2
-    B0FF999795AF1D1C1C2E0000000000000000000000000000000006060623A5A3
-    A2A2CDCBCAFFCBC9C8FFCECCCBFFF7F6F6FFD9D8D7FFDAD8D7FFD7D6D5FF8684
-    8395242323380000001700000000000000000000000000000000000000062E2D
-    2D3B7C7B7A7CB6B4B4D3CFCDCDFFD0CECDFFCCCAC8FF979593FF999795FFA4A2
-    A0FF8E8C8AAE1B1B1B2E000000000000000000000000000000147372716BC9C7
-    C6F1CDCBCAFFC9C7C6FFDDDDDCFFFFFFFEFFDEDDDCFFD7D6D5FFD9D8D7F50E0E
-    0E44000000030000000000000000000000000000000000000000000000000000
-    0000000000192E2D2C43C0BEBED3CECCCBFFD6D4D4FFABA9A8FF858481FF9391
-    8FFF8F8D8BCE242423410000000000000000000000193737374EC8C6C5EFCDCB
-    CAFFCDCBCAFFD1CFCEFFB7B5B2FF949190FFD2CFCFFFECEBEAFFB9B7B6B02322
-    2230000000000000000000000000000000000000000000000000000000000000
-    00000000000000000021A2A1A0A0CDCBCAFFD0CECDFFD5D3D2FFA2A09FFF8380
-    7FFF858180FF2A292953000000132222222C8988877DC8C6C5EFCDCBCAFFCDCB
-    CAFFCDCBCAFFCECCCBFFD4D2D1FF868482FF7D7B77FFA9A9A6FF7574736B0000
-    0014000000000000000000000000000000000000000000000000000000000000
-    0000000000000000001F9B9A9994CDCBCAFFCDCBCAFFD0CECDFFD8D6D5FFC4C2
-    C1FFB3AFAEFFACABAAEF7372726AABAAA9ABCBC9C8FACDCBCAFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCECCCBFFD5D5D4FFB8B6B3FF747270FF7B7977FF4241415F0000
-    0010000000000000000000000000000000000000000000000000000000000000
-    0000000000003332323DB8B6B5C6CDCBCAFFCDCBCAFFCDCBCAFFCECCCBFFD2D1
-    D0FFD6D4D3FFD6D4D3FFCECCCBFFCDCBCAFFCDCBCAFFCCCAC9FFC8C6C5FFCAC8
-    C7FFCCCAC9FFCDCBCAFFCAC7C6FFD8D7D6FFD5D5D4FF999695FF706E6DC11F1E
-    1D3B000000020000000000000000000000000000000000000000000000000000
-    0000000000157978786ECDCBCAFFCECCCBFFD1CFCEFFCFCDCCFFCDCBCAFFCDCB
-    CAFFCDCBCAFFCDCBCAFFCDCBCAFFCDCBCAFFCAC8C7FFCAC8C7FFE4E2E2FFD7D5
-    D4FFCAC8C7FFCAC8C7FFCBC9C8FFFFFFFFFFFFFFFFFFEAE9E8FFD2D1D0FF7F7F
-    7D8E0000001D0000000000000000000000000000000000000000000000000000
-    000010101026A6A5A4A5CFCDCCFFD3D1D1FFC3C1C0FFCCCAC9FFD5D3D2FFCFCD
-    CCFFCDCBCAFFCDCBCAFFCECCCBFFCECCCBFFDDDDDCFFEFEEEDFFEBEBEAFFDAD8
-    D8FFD4D2D1FFCCC9C8FFF5F4F3FFF9F9F9FFDBDAD8FFE0DFDEFFEEEDECFCB1B0
-    AFA0000000210000000000000000000000000000000000000000000000000000
-    0000000000083030304CCBC9C8EFBAB8B6FFA8A6A4FFA6A4A2FFC1BFBEFFD0CE
-    CDFFCECCCBFFCDCBCAFFD0CECFFFC1BFBCFFBBBAB8FFCBCAC8FFCECCCAFFD6D4
-    D3FFD6D4D3EFA2A1A0A00606064376767565BBBABAB0E5E4E3FFB5B4B4AD2120
-    202E000000060000000000000000000000000000000000000000000000000000
-    000000000000000000125E5D5C6491908EBCA6A4A2F6A5A3A1FF9D9B99FFB4B2
-    B1FFD3D1D0FFCDCBCAFFD3D1D1FFB5B3B1FF989694FF969492FFA3A19FFFB1AF
-    AFF2343434500000002100000006000000122A2A29303130304C2F2E2E390000
-    0006000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000012262625380D0C0C4467666573807E7CA0302F
-    2F4FCECCCBEFCDCBCAFFD0CECDFFAAA8A6FFA2A09EFFA19F9DFF9F9D9BFF7C7A
-    79A3080808240000000000000000000000000000000000000008000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000016000000210000
-    0021A6A5A4A0D2D0CFFFCCCAC9FFA19F9DFF9D9B99FFA09E9CFFA2A09EFF7775
-    74920000001E0000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    00060D0D0D44A5A5A4A0AFAFAFADB7B5B3EDA5A3A3FFA2A09EFF9D9B99F23130
-    2F510000000A0000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    000000000006000000211D1D1C2D181818453737365013131346131313451312
-    1229000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000A00000004000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    00000000000000000000000000000000000000000000FFFDFFFFFFF07BFFFFE0
-    00FFFFE0007FFFE0003FFC80001FF800000FF000000FF000001FF000001FF800
-    0007F8000003F000C001F001C001C003C0008003C00080078001000780078007
-    000FE006001FF000001FF000001FF000000FE000000FE000000FE000000FF000
-    001FF8000F7FFF000FFFFFC00FFFFFE01FFFFFFE7FFF28000000180000003000
-    0000010020000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000F00000009000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    00063131313F5857575D26252552000000230000000600000006000000220000
-    0021000000040000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0023A2A09FA2D7D5D4FF9A9998EF615F5EA20000002300000022A7A5A5A18A89
-    889A1110102B0000000600000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000001414
-    1429A6A4A3A8D1CFCEFFC9C7C6FFACA9A8F08381809CA2A1A09DCCCAC9EFD2D1
-    D1F78D8C8AAA2121213900000006000000000000000000000000000000000000
-    0000000000000000000000000000000000060000002300000015000000238987
-    8781CAC8C7F6CDCBCAFFD0CECDFFD6D4D3FFD5D3D2FFCECCCBFFD1CFCFFFBFBD
-    BBFFA8A6A4FF918F8DBC1F1F1E47000000030000000000000000000000000000
-    00000000000000000000000000061D1C1C489E9C9BA26867666EA3A2A1A2C6C4
-    C3F0CAC8C7FFCECCCBFFD0CECDFFCDCBCAFFCDCBCAFFCECCCBFFCFCDCDFFABA9
-    A7FFA5A3A1FFA9A7A5FF7B7978940000001F0000000000000000000000000000
-    0000000000000000000000000023A2A09FA2D0CECDFFD2D0CFFFC8C6C5FFD1CF
-    CEFFDCD9D9FFD0CFCEFFCCCAC9FFD2D2D1FFD1CFCEFFCECCCBFFD3D1D0FFB4B2
-    B1FF959391FF9A9896DB21202047000000030000000000000000000000000000
-    000000000000000000000000000937363652CCCAC9FFC7C5C4FFDCDAD9FFEFEF
-    EEFFD2CFCFFFC1BFBEFFBAB8B6FFACAAA9D89B9A99A2CAC8C7EFD0CECDFFCECC
-    CBFFABA9A7FF7A7977A200000023000000110000000000000000000000000000
-    00000000000000000000000000011F1F1F48C3C1C0EAD3D1D1FFFDFFFEFFDEDD
-    DCFFDAD9D8FFD3D3D2EF9A9897A223232346000000239D9C9C95CECCCBFFD0CE
-    CDFFD4D2D1FFCDCBCAEFA6A4A4A2565554620000001D00000001000000000000
-    000000000000000000000000001E9292918DC8C5C4FFEFEFEEFFE6E5E5FFDEDD
-    DCFFE0DFDEEF8584837D0000002300000006000000147271706BCECCCBFFCDCB
-    CAFFCECCCBFFD3D1D0FFD7D6D6FFBDBBB9EF82807F8C2828273F000000000000
-    000000000000000000152B2B2B47C0BFBEDCCFCDCCFFE7E6E5FFD4D4D3FFDFDF
-    DEFFA8A8A7A2000000230000000000000000000000157170706DCDCBCAFFCECC
-    CBFFCFCDCAFFC0BEBBFFB2AFAEFFBDBBBBFFC3C1BFFF09090947000000020000
-    00002E2D2D3A7573736FC1BFBEDCCDCBCAFFD0CECDFFCFCDCCFFC9C7C6FFD7D5
-    D4FF1F1E1E4B00000006000000000000000000000022A09E9E9FCCCAC9FFD3D1
-    D0FFB7B5B3FF969490FF9C9A98FFA09E9CFFB3B1AFEE393837550000000B0000
-    00051E1E1E4BCFCDCCFFCFCDCCFFCFCDCCFFCAC8C7FFB4B1B0FFB8B6B4FFABAA
-    A8BD2727263A00000000000000000000000032313142B9B7B6CAC8C6C5FFDFDE
-    DDFFE3E2E1FFB6B4B3FF9B9B99EF7977759A141313481818182E000000000000
-    0000202020489B9A97A2C3C1C0E8D0CECDFFCCCAC9FF9D9B98FFA1A09DFF8C8A
-    89A50808082600000000000000000000001B8B8A8983CDCBCAFFCCC9C8FFF9F8
-    F9FFE5E4E3FFE1E0DFFF81807F7E000000210000000400000000000000000000
-    000000000006000000231F1E1E49C8C6C5E8D4D2D1FFA8A6A4FF83817FFF817F
-    7EBB1F1E1E39000000000000001C48484758C8C6C5EFCDCBCAFFCFCCCCFFADAC
-    AAFFCAC8C7FFE3E2E2EB1E1E1E49000000000000000000000000000000000000
-    0000000000000000000000000023A2A09FA2D0CECDFFD4D2D1FFA7A5A3FF8A88
-    87FF2221215020201F2E8F8D8D85C8C6C5EFCDCBCAFFCDCBCAFFD5D3D2FFA8A6
-    A5FF6C6A68FF7D7D7CA200000023000000000000000000000000000000000000
-    0000000000000000000010101027A4A2A2A6CDCBCAFFD0CECDFFD7D5D4FFD1CF
-    CEFFD1CECEFBADABAAAECCCAC9FBCBC8C7FFC9C7C6FFCCCAC9FFCDCBCAFFD2CF
-    CEFFADABA9FF747271D41C1C1B45000000060000000000000000000000000000
-    0000000000000000000C48484758CBC9C8F3D0CECDFFD0CECFFFCECCCBFFCECD
-    CCFFCFCDCCFFCDCBCAFFCCCAC9FFD5D3D2FFDEDEDEFFCAC9C8FFC8C6C5FFEFEF
-    EEFFFFFFFFFFE0DDDDFF8A8988A2000000230000000000000000000000000000
-    0000000000000000001C8E8D8C85CFCDCDF6BEBCBBFFBEBCBCFFD3D1D0FFD0CE
-    CDFFCECCCBFFCDCBCAFFD4D2D1FFEBEAE9FFE0DFDEFFD8D7D6FFBBBBBABDC2C1
-    C0A2D9D8D8EFE5E4E4EF979595820000001B0000000000000000000000000000
-    0000000000000000000014141429908F8DA2999795D49F9D9BFFA9A7A5FFCDCA
-    CAFFD0CECDFFCBC9C8FFA09E9BFFA3A19EFFBAB8B7FF8D8C8B8C2928283A0000
-    0023000000458988887B0000001B000000000000000000000000000000000000
-    00000000000000000000000000060000002326252545343332542C2C2B528281
-    807DD4D2D1FFBCBAB8FF9C9A98FF9C9A98FF8A8987C823222140000000010000
-    0000000000000000001900000000000000000000000000000000000000000000
-    000000000000000000000000000000000000000000000000000B0000000A0F0F
-    0F47BAB8B7B7BBB9B8EA9D9B99FF9D9B99FF7C7A79A200000023000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0006262626351D1D1D4857575661464645591C1B1B4800000006000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000000000
-    00000000000000000000000000110000000D0000000000000000000000000000
-    000000000000000000000000000000000000000000000000000000000000FFCF
-    FF41FF003F41FF001F41FF000F41F0000741E0000741E0000741E0000741E000
-    0141E0000141C018004180180041003801418030034180200F41E0000F41E000
-    0741C0000741C0000741E0000F41E000DF41FC01FF41FF01FF41FFE7FF412800
-    0000100000002000000001002000000000000000000000000000000000000000
-    0000000000000000000000000000000000000000000000000000000000052626
-    25445554536107070722000000052A29292D0808082200000005000000000000
-    000000000000000000000000000000000000000000000000000032313133B9B7
-    B6B7BDBAB9F2716F6FA10E0E0E3FBEBCBBAF9D9D9CA120201F31000000050000
-    0000000000000000000000000000000000080000001F0000001F7D7C7B68CCC9
-    C8FFD2D0CFFFD3D3D2FFCFCECDF6D3D1D0FFBBB9B6FF908E8CB4252524400000
-    00000000000000000000000000083D3D3C4BA19F9E9EA2A09F9EC8C6C5EED2D0
-    CFFFD1D0CFFFD1D1D0FFD0CDCCFFD0CECDFFA3A19EFF9F9D9CF43837364F0000
-    000A00000000000000000000000D5C5B5B57CECCCBFFD1CFCEFFE5E5E4FFCFCD
-    CCFFBEBEBBFFA7A6A6B0CAC8C8F6D3D1D0FFB8B6B5FF807E7CA30F0F0E230000
-    000500000000000000000000000022222241C3C1C0E9F3F2F2FFE6E5E4FFD8D6
-    D5EE9393918A2222212E0F0F0F3FCECCCBF6D2D0CFFFCECCCCF4AFADADA31717
-    16400000000500000000000000188D8B8A7DD9D6D5FFEAE9EAFFE2E1E0FFA09F
-    9E880000001B000000013736363EBFBDBCCECECCCBFFD1CFCEFFCBC9C8FFBDBB
-    BBEE181717412E2D2D318E8D8C7CC7C5C4EED4D2D1FFCFCDCCFFC5C3C2C63131
-    313A00000001000000001C1C1C41C9C7C6EECDCCCBFFA4A2A0FF999795FFAEAC
-    AAF1282828472A2A2A45CECCCBF4D0CECDFFC1BFBDFFB0AEACFF9796949E0000
-    001F0000000000000018918F8F7DCCCAC9FFEFEEEDFFC9C8C7FFA3A19FEE0505
-    053E050505201515142528272746CFCDCCEEC2C0BFFF898885FF7979769E0000
-    001F000000051010103FC9C7C6EECECBCBFFD6D6D4FFEAE7E8F60000003D0000
-    000500000000000000000000001894929280D5D3D2FFB2AFAEFF7C7A79C92E2D
-    2D3C23232343C9C7C6EECDCBCAFFD3D1D0FF8A8886FF787574A5181818260000
-    000000000000000000000000001FA6A4A39ED2D0CFFFD6D4D4FFD3D1D0FFBFBD
-    BCC9CECCCBFFCDCBCAFFCDCBCAFFCCCAC9FFE0DDDCFFAAA8A7F60202023D0000
-    0000000000000000000023222241CBC9C9E7C4C2C2FFCFCECCFFD1CFCEFFCFCD
-    CCFFD1CFCEFFEAE8E8FFDDDBDCFFC0BEBDC1D7D6D6B1F1F0EFFA9391917E0000
-    00180000000000000000000000147573736E868582A8918F8FB9CBC9C8FFD3D1
-    D0FFA9A8A6FFA9A7A5FFAAA8A5C1313130392F2F2F2F5E5E5D56212121290000
-    0000000000000000000000000000000000141818182828282734706F6F61D0CE
-    CDF19D9B99FF979593FF2424234800000007000000000000000D000000000000
-    00000000000000000000000000000000000000000000000000000D0D0D221717
-    17415756555962615F6122222131000000000000000000000000000000000000
-    000000000000F807AC41F803AC41C003AC418001AC418001AC41C000AC418000
-    AC410080AC410100AC410001AC418003AC418003AC418001AC418003AC41C017
-    AC41F83FAC41}
+    0000010001002020100000000000E80200001600000028000000200000004000
+    0000010004000000000080020000000000000000000000000000000000000000
+    000000008000008000000080800080000000800080008080000080808000C0C0
+    C0000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF000000
+    0000000000000000000000000000000078000000000000000000000000000007
+    77800000000000000007800000000077CE78000000000000007CE800000007CC
+    77EE80000000000007C77E8000007C77CE77E8000007800077CCEE78000077CC
+    77EE8800007CE807CC7777EE80000077CE880000077CE78C77CCEE77E8000000
+    780000007CC77EE8CC7777EE7E800000000000077CCCEEE78CCCEE77EEE80000
+    0000007CC77CE77EE87777EEE88000000000077CCCC77EEEE78CEEE880000000
+    00007CC77CCCEEE77EE8E8800000000000077CCCC77CE77EEEE7800000000000
+    007CC77CCCC77EEEE77EE80000000000077CCCC77CCCEEE77EEEE78000000000
+    7CC77CCCC77CE77EEEE77EE8000000077CCCC77CCCC77EEEE77EEEE78000007C
+    C77CCCC77CCCEEE77EEEE77EE800077CCCC77CCCC77CE77EEEE77EEEE7807CC7
+    7CCCC77CCCC77EEEE77EEEE77EE87CCCC77CCCC77CCCEEE77EEEE77EEEE8077C
+    CCC77CCCC77CE77EEEE77EEEE88000077CCCC77CCCC77EEEE77EEEE880000000
+    077CCCC77CCCEEE77EEEE8800000000000077CCCC77CE77EEEE8800000000000
+    0000077CCCC77EEEE880000000000000000000077CCCEEE88000000000000000
+    00000000077CE880000000000000000000000000000780000000000000000000
+    000000000000000000000000000000000000000000000000000000000000FFFF
+    FFFFF3FFFFFFE1FFFE7FC0FFFC3F807FF81F003E700F003C2007C0F80003F3F0
+    0001FFE00000FFC00001FF800007FF00001FFE00007FFC00003FF800001FF000
+    000FE0000007C000000380000001000000000000000080000001E0000007F800
+    001FFE00007FFF8001FFFFE007FFFFF81FFFFFFE7FFFFFFFFFFFFFFFFFFF}
   Position = poScreenCenter
   OnCreate = FormCreate
   TextHeight = 13

+ 8 - 19
Demos/glslshaders/SkyboxShader/fSkyboxShaderD.pas

@@ -45,25 +45,25 @@ type
     procedure DirectOGLRender(Sender: TObject; var rci: TGLRenderContextInfo);
   public
     Path: TFileName;
+    GLSL_Sky: TGLProgramHandle;
+    GLSL_Obj: TGLProgramHandle;
+    CubeMap: TGLTexture;
     procedure LoadCubemap;
     procedure InitGLSL;
   end;
 
 var
   FormSkyboxShader: TFormSkyboxShader;
-  GLSL_Sky: TGLProgramHandle;
-  GLSL_Obj: TGLProgramHandle;
-  CubeMap: TGLTexture;
 
 implementation
 
 {$R *.dfm}
 
-//
-// setup
-//
 procedure TFormSkyboxShader.FormCreate;
 begin
+  Path := GetCurrentAssetPath();
+  // Loading a cubemap as TGLCompositeImage
+  SetCurrentDir(Path  + '\cubemap');
   LoadCubemap;
   Skybox.Radius := Camera.DepthOfView;
   Skybox.Material.Texture := Cubemap;
@@ -72,14 +72,8 @@ begin
 
 end;
 
-//
-// LoadCubemap
-//
 procedure TFormSkyboxShader.LoadCubemap;
 begin
-  Path := GetCurrentAssetPath();
-  // Loading the whole cubemap as TGLCompositeImage
-  SetCurrentDir(Path  + '\cubemap');
   Cubemap := TGLTexture.Create(self);
   Cubemap.ImageClassName := 'TGLCompositeImage';
   Cubemap.Image.LoadFromFile('skybox.dds');
@@ -88,9 +82,6 @@ begin
   Cubemap.Disabled := False;
 end;
 
-//
-// cadProgress
-//
 procedure TFormSkyboxShader.CadencerProgress;
 begin
   DummyCam.Turn(deltaTime * 30);
@@ -99,8 +90,7 @@ begin
   Skybox.AbsolutePosition := Camera.AbsolutePosition;
 end;
 
-//
-// doglRender
+// Direct OpenGL rendering
 //
 procedure TFormSkyboxShader.DirectOGLRender;
 begin
@@ -119,8 +109,7 @@ begin
   GLSL_obj.EndUseProgramObject;
 end;
 
-//
-// initGLSL
+// GLSL Initialization
 //
 function Load(vp, fp: String): TGLProgramHandle;
 begin

+ 20 - 21
Demos/specialsFX/ShadowmappingFBO/fShadowFBOC.cpp

@@ -19,12 +19,12 @@
 #pragma link "GLS.Material"
 #pragma link "GLS.Objects"
 #pragma link "GLS.Scene"
+#pragma link "Formats.DDSImage"
 #pragma link "GLS.SimpleNavigation"
-#pragma link "GLSLShader"
 #pragma link "GLS.VectorFileObjects"
 #pragma link "GLS.SceneViewer"
-#pragma link "GLFileDDS"
 #pragma link "GLS.FileMD2"
+#pragma link "GLSL.Shader"
 #pragma resource "*.dfm"
 TForm1 *Form1;
 //---------------------------------------------------------------------------
@@ -37,51 +37,50 @@ __fastcall TForm1::TForm1(TComponent* Owner)
 void __fastcall TForm1::PrepareShadowMappingRender(TObject *Sender, TGLRenderContextInfo &rci)
 
 {
+
   // prepare shadow mapping matrix
   FInvCameraMatrix = rci.PipelineTransformation->InvModelViewMatrix;
   // go from eye space to light's "eye" space
-  FEyeToLightMatrix = MatrixMultiply(FInvCameraMatrix, FLightModelViewMatrix);
+  *FEyeToLightMatrix = MatrixMultiply(*FInvCameraMatrix, *FLightModelViewMatrix);
   // then to clip space
-  FEyeToLightMatrix = MatrixMultiply(FEyeToLightMatrix, FLightProjMatrix);
+  *FEyeToLightMatrix = MatrixMultiply(*FEyeToLightMatrix, *FLightProjMatrix);
   // and finally make the [-1..1] coordinates into [0..1]
-  FEyeToLightMatrix = MatrixMultiply(FEyeToLightMatrix, FBiasMatrix);
+  *FEyeToLightMatrix = MatrixMultiply(*FEyeToLightMatrix, *FBiasMatrix);
 }
 
 //---------------------------------------------------------------------------
 void __fastcall TForm1::FormCreate(TObject *Sender)
 {
-  // Loading textures
   TFileName Path = GetCurrentAssetPath();
-
-  //with GLMaterialLibrary1 do
+  // Loading textures
+  SetCurrentDir(Path  + "\\texture");
   GLMaterialLibrary1->TextureByName("Chekers")->Image->LoadFromFile("marbletiles.jpg");
   GLMaterialLibrary1->TextureByName("Chekers")->Disabled = false;
-
   GLMaterialLibrary1->TextureByName("Chekers2")->Image->LoadFromFile("concrete.jpg");
   GLMaterialLibrary1->TextureByName("Chekers2")->Disabled = false;
-
   GLMaterialLibrary1->TextureByName("Lightspot")->Image->LoadFromFile("flare1.bmp");
   GLMaterialLibrary1->TextureByName("Lightspot")->Disabled = false;
 
+  // Loading skeletal models with skin texture
+  SetCurrentDir(Path  + "\\modelext");
+  GLFreeForm1->LoadFromFile("waste.md2");
+  GLFreeForm1->Scale->Scale(0.05);
+  GLFreeForm1->Position->Y = GLPlane1->Position->Y + 0.6;
+  FBiasMatrix =
+	&CreateScaleAndTranslationMatrix(VectorMake(0.5, 0.5, 0.5), VectorMake(0.5, 0.5, 0.5));
   GLMaterialLibrary1->TextureByName("bark")->Image->LoadFromFile("waste.jpg");
   GLMaterialLibrary1->TextureByName("bark")->Disabled = false;
 
+  // Loading cubemap
+  SetCurrentDir(Path  + "\\cubemap");
   GLMaterialLibrary1->TextureByName("mask")->Image->LoadFromFile("masks.dds");
   GLMaterialLibrary1->TextureByName("mask")->Disabled = false;
 
-  // Loading models
-  GLFreeForm1->LoadFromFile("waste.md2");
-  GLFreeForm1->Scale->Scale(0.05);
-  GLFreeForm1->Position->Y = GLPlane1->Position->Y + 0.6;
-
-  FBiasMatrix =
-	CreateScaleAndTranslationMatrix(VectorMake(0.5, 0.5, 0.5), VectorMake(0.5, 0.5, 0.5));
-
-  // Loading shader
+  // Loading shaders
+  SetCurrentDir(Path  + "\\shader");
   GLSLShader1->VertexProgram->LoadFromFile("shadowmap_vp.glsl");
   GLSLShader1->FragmentProgram->LoadFromFile("shadowmapvis_fp.glsl");
   GLSLShader1->Enabled = true;
-
   GLSLShader2->VertexProgram->LoadFromFile("shadowmap_vp.glsl");
   GLSLShader2->FragmentProgram->LoadFromFile("shadowmap_fp.glsl");
   GLSLShader2->Enabled = true;
@@ -127,7 +126,7 @@ void __fastcall TForm1::GLSLShader2Apply(TGLCustomGLSLShader *Shader)
 	GLMaterialLibrary1->TextureByName("Lightspot");
   Shader->Param["Scale"]->AsFloat = 16.0;
   Shader->Param["Softly"]->AsInteger = 1;
-  Shader->Param["EyeToLightMatrix"]->AsMatrix4f = FEyeToLightMatrix;
+  Shader->Param["EyeToLightMatrix"]->AsMatrix4f = *FEyeToLightMatrix;
 }
 //---------------------------------------------------------------------------
 void __fastcall TForm1::GLSLShader2Initialize(TGLCustomGLSLShader *Shader)

+ 0 - 2
Demos/specialsFX/ShadowmappingFBO/fShadowFBOC.dfm

@@ -10,10 +10,8 @@ object Form1: TForm1
   Font.Height = -11
   Font.Name = 'Tahoma'
   Font.Style = []
-  OldCreateOrder = False
   OnCreate = FormCreate
   OnResize = FormResize
-  PixelsPerInch = 96
   TextHeight = 13
   object GLSceneViewer1: TGLSceneViewer
     Left = 0

+ 10 - 10
Demos/specialsFX/ShadowmappingFBO/fShadowFBOC.h

@@ -20,11 +20,11 @@
 #include "GLS.Objects.hpp"
 #include "GLS.Scene.hpp"
 #include "GLS.SimpleNavigation.hpp"
-#include "GLSL.Shader.hpp"
 #include "GLS.VectorFileObjects.hpp"
 #include "GLS.SceneViewer.hpp"
 #include "Formats.DDSImage.hpp"
 #include <Vcl.ExtCtrls.hpp>
+#include "GLSL.Shader.hpp"
 //---------------------------------------------------------------------------
 class TForm1 : public TForm
 {
@@ -32,18 +32,18 @@ __published:	// IDE-managed Components
 	TGLSceneViewer *GLSceneViewer1;
 	TGLScene *GLScene1;
 	TGLCamera *GLCamera1;
-	TGLCamera *GLCamera2;
-	TGLLightSource *GLLightSource1;
 	TGLSphere *GLSphere1;
-	TGLFBORenderer *LightFBORenderer;
 	TGLDummyCube *SceneRoot;
+	TGLMaterialLibrary *GLMaterialLibrary1;
+	TGLLightSource *GLLightSource1;
+	TGLFBORenderer *LightFBORenderer;
 	TGLDirectOpenGL *PrepareShadowMapping;
+	TGLCamera *GLCamera2;
 	TGLPlane *GLPlane1;
 	TGLTorus *GLTorus1;
 	TGLCylinder *GLCylinder1;
 	TGLFreeForm *GLFreeForm1;
 	TGLHUDSprite *GLShadowTextureSprite;
-	TGLMaterialLibrary *GLMaterialLibrary1;
 	TGLCadencer *GLCadencer1;
 	TTimer *Timer1;
 	TGLSLShader *GLSLShader1;
@@ -60,11 +60,11 @@ __published:	// IDE-managed Components
 	void __fastcall PrepareShadowMappingRender(TObject *Sender, TGLRenderContextInfo &rci);
 
 private:	// User declarations
-	TGLMatrix FBiasMatrix;
-	TGLMatrix FLightModelViewMatrix;
-	TGLMatrix FLightProjMatrix;
-	TGLMatrix FInvCameraMatrix;
-	TGLMatrix FEyeToLightMatrix;
+	TGLMatrix *FBiasMatrix;
+	TGLMatrix *FLightModelViewMatrix;
+	TGLMatrix *FLightProjMatrix;
+	TGLMatrix *FInvCameraMatrix;
+	TGLMatrix *FEyeToLightMatrix;
 public:		// User declarations
 	__fastcall TForm1(TComponent* Owner);
 };

+ 7 - 12
Demos/specialsFX/ShadowmappingFBO/fShadowFBOD.dfm

@@ -2,32 +2,27 @@ object FormShadowFBO: TFormShadowFBO
   Left = 273
   Top = 234
   Caption = 'Shadow Mapping FBO'
-  ClientHeight = 599
-  ClientWidth = 821
+  ClientHeight = 479
+  ClientWidth = 657
   Color = clBtnFace
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
-  Font.Height = -14
+  Font.Height = -11
   Font.Name = 'Tahoma'
   Font.Style = []
   Position = poScreenCenter
   OnCreate = FormCreate
   OnResize = FormResize
-  PixelsPerInch = 120
-  TextHeight = 17
+  TextHeight = 13
   object GLSceneViewer1: TGLSceneViewer
     Left = 0
     Top = 0
-    Width = 821
-    Height = 599
-    Margins.Left = 4
-    Margins.Top = 4
-    Margins.Right = 4
-    Margins.Bottom = 4
+    Width = 657
+    Height = 479
     Camera = GLCamera1
     Buffer.BackgroundColor = clGray
     Buffer.AntiAliasing = aa4xHQ
-    FieldOfView = 161.044342041015600000
+    FieldOfView = 156.415664672851600000
     PenAsTouch = False
     Align = alClient
     TabOrder = 0

+ 26 - 39
Demos/specialsFX/ShadowmappingFBO/fShadowFBOD.pas

@@ -49,16 +49,17 @@ type
   TFormShadowFBO = class(TForm)
     GLSceneViewer1: TGLSceneViewer;
     GLScene1: TGLScene;
+    GLSphere1: TGLSphere;
     GLMaterialLibrary1: TGLMaterialLibrary;
     GLCamera1: TGLCamera;
-    GLShadowTextureSprite: TGLHUDSprite;
-    GLCamera2: TGLCamera;
     SceneRoot: TGLDummyCube;
     GLPlane1: TGLPlane;
     GLTorus1: TGLTorus;
     GLLightSource1: TGLLightSource;
     GLCadencer1: TGLCadencer;
     Timer1: TTimer;
+    GLShadowTextureSprite: TGLHUDSprite;
+    GLCamera2: TGLCamera;
     GLCylinder1: TGLCylinder;
     GLSLShader1: TGLSLShader;
     GLSLShader2: TGLSLShader;
@@ -66,7 +67,6 @@ type
     GLNavigation: TGLSimpleNavigation;
     GLFreeForm1: TGLFreeForm;
     LightFBORenderer: TGLFBORenderer;
-    GLSphere1: TGLSphere;
     procedure GLSLShader2Initialize(Shader: TGLCustomGLSLShader);
     procedure GLSLShader1UnApply(Shader: TGLCustomGLSLShader; var ThereAreMorePasses: Boolean);
     procedure FormResize(Sender: TObject);
@@ -80,8 +80,6 @@ type
     procedure LightFBORendererAfterRender(Sender: TObject; var rci: TGLRenderContextInfo);
     procedure GLSceneViewer1BeforeRender(Sender: TObject);
   private
-     
-
     FBiasMatrix: TGLMatrix;
     FLightModelViewMatrix: TGLMatrix;
     FLightProjMatrix: TGLMatrix;
@@ -112,54 +110,43 @@ end;
 
 procedure TFormShadowFBO.FormCreate(Sender: TObject);
 begin
-  // Loading textures
   var Path: TFileName := GetCurrentAssetPath();
+  // Loading textures
   SetCurrentDir(Path  + '\texture');
   with GLMaterialLibrary1 do
   begin
-    with TextureByName('Chekers') do
-    begin
-      Image.LoadFromFile('marbletiles.jpg');
-      Disabled := false;
-    end;
-
-    with TextureByName('Chekers2') do
-    begin
-      Image.LoadFromFile('Concrete.jpg');
-      Disabled := false;
-    end;
-    with TextureByName('Lightspot') do
-    begin
-      Image.LoadFromFile('Flare1.bmp');
-      Disabled := false;
-    end;
-    with TextureByName('bark') do
-    begin
-      Image.LoadFromFile('waste.jpg');
-      Disabled := false;
-    end;
-    with TextureByName('mask') do
-    begin
-      Image.LoadFromFile('Masks.dds');
-      Disabled := false;
-    end;
+    TextureByName('Chekers').Image.LoadFromFile('marbletiles.jpg');
+    TextureByName('Chekers').Disabled := false;
 
+    TextureByName('Chekers2').Image.LoadFromFile('Concrete.jpg');
+    TextureByName('Chekers2').Disabled := false;
+
+    TextureByName('Lightspot').Image.LoadFromFile('Flare1.bmp');
+    TextureByName('Lightspot').Disabled := false;
+
+    // Loading cubemap
+    SetCurrentDir(Path  + '\cubemap');
+    TextureByName('mask').Image.LoadFromFile('Masks.dds');
+    TextureByName('mask').Disabled := false;
   end;
 
-  // Loading models
+  // Loading skeletal models with skin texture
+  SetCurrentDir(Path  + '\modelext');
   GLFreeForm1.LoadFromFile('waste.md2');
   GLFreeForm1.Scale.Scale(0.05);
   GLFreeForm1.Position.Y := GLPlane1.Position.Y + 0.6;
+  GLMaterialLibrary1.TextureByName('bark').Image.LoadFromFile('waste.jpg');
+  GLMaterialLibrary1.TextureByName('bark').Disabled := false;
 
   FBiasMatrix := CreateScaleAndTranslationMatrix(VectorMake(0.5, 0.5, 0.5), VectorMake(0.5, 0.5, 0.5));
 
-  // Loading shader
-  GLSLShader1.VertexProgram.LoadFromFile('Shaders\shadowmap_vp.glsl');
-  GLSLShader1.FragmentProgram.LoadFromFile('Shaders\shadowmapvis_fp.glsl');
+  // Loading shaders
+  SetCurrentDir(Path  +'\shader');
+  GLSLShader1.VertexProgram.LoadFromFile('shadowmap_vp.glsl');
+  GLSLShader1.FragmentProgram.LoadFromFile('shadowmapvis_fp.glsl');
   GLSLShader1.Enabled := true;
-
-  GLSLShader2.VertexProgram.LoadFromFile('Shaders\shadowmap_vp.glsl');
-  GLSLShader2.FragmentProgram.LoadFromFile('Shaders\shadowmap_fp.glsl');
+  GLSLShader2.VertexProgram.LoadFromFile('shadowmap_vp.glsl');
+  GLSLShader2.FragmentProgram.LoadFromFile('shadowmap_fp.glsl');
   GLSLShader2.Enabled := true;
 end;
 

+ 3 - 3
Readme.txt

@@ -1,5 +1,5 @@
-The release of GLScene v2.2 for 
-Embarcadero RAD Studio Delphi & C++Builder 11.0
+The release of GLScene v2.3 for 
+Embarcadero RAD Studio Delphi & C++Builder 11.3
   
 Extended support for third-party libraries 
 GR32, BASS, FMOD, OpenAL, ODE and Newton.  
@@ -7,6 +7,6 @@ The version includes bug fixes, improvements
 in GPU Computing using CUDA/OpenCL components 
 to develop OpenGL applications for Win32/Win64. 
 
-2022
+2023
 -------------------------------------------------
 GLS Team

+ 19 - 4
Source/FmInfo.dfm

@@ -19,7 +19,6 @@ object GLInfoForm: TGLInfoForm
   OnClose = FormClose
   OnKeyPress = FormKeyPress
   OnShow = FormShow
-  PixelsPerInch = 96
   DesignSize = (
     460
     376)
@@ -29,7 +28,7 @@ object GLInfoForm: TGLInfoForm
     Top = 0
     Width = 460
     Height = 341
-    ActivePage = TabSheetContributors
+    ActivePage = TabSheetAbout
     Align = alTop
     TabOrder = 0
     object TabSheetGLScene: TTabSheet
@@ -3543,7 +3542,7 @@ object GLInfoForm: TGLInfoForm
     end
     object TabSheetAbout: TTabSheet
       Caption = 'About'
-      object WebsiteLbl: TLabel
+      object lblSfGLScene: TLabel
         Left = 57
         Top = 274
         Width = 94
@@ -3558,7 +3557,7 @@ object GLInfoForm: TGLInfoForm
         Font.Style = [fsUnderline]
         ParentColor = False
         ParentFont = False
-        OnClick = WebsiteLblClick
+        OnClick = lblSfGLSceneClick
       end
       object Label34: TLabel
         Left = 9
@@ -3569,6 +3568,22 @@ object GLInfoForm: TGLInfoForm
         Color = clBtnFace
         ParentColor = False
       end
+      object lblGithubGLScene: TLabel
+        Left = 289
+        Top = 274
+        Width = 130
+        Height = 13
+        Caption = 'https://github.com/glscene'
+        Color = clBtnFace
+        Font.Charset = DEFAULT_CHARSET
+        Font.Color = clBlue
+        Font.Height = -11
+        Font.Name = 'MS Sans Serif'
+        Font.Style = [fsUnderline]
+        ParentColor = False
+        ParentFont = False
+        OnClick = lblGithubGLSceneClick
+      end
       object MemoAbout: TMemo
         Left = 0
         Top = 0

+ 11 - 4
Source/FmInfo.pas

@@ -109,7 +109,8 @@ type
     CloseButton: TButton;
     VersionLbl: TLabel;
     ViewLabel: TLabel;
-    WebsiteLbl: TLabel;
+    lblSfGLScene: TLabel;
+    lblGithubGLScene: TLabel;
     procedure CloseButtonClick(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure FormKeyPress(Sender: TObject; var Key: Char);
@@ -119,7 +120,8 @@ type
     procedure ListBoxExtensionsKeyPress(Sender: TObject; var Key: Char);
     procedure FormShow(Sender: TObject);
     procedure MIDelphi3DClick(Sender: TObject);
-    procedure WebsiteLblClick(Sender: TObject);
+    procedure lblSfGLSceneClick(Sender: TObject);
+    procedure lblGithubGLSceneClick(Sender: TObject);
   protected
     function GetSceneVersion: string;
   public
@@ -403,9 +405,14 @@ end;
 
 // ------------------------------------------------------------------------------
 
-procedure TGLInfoForm.WebsiteLblClick(Sender: TObject);
+procedure TGLInfoForm.lblSfGLSceneClick(Sender: TObject);
 begin
-  ShowHTMLUrl(WebsiteLbl.Caption);
+  ShowHTMLUrl(lblSfGLScene.Caption);
+end;
+
+procedure TGLInfoForm.lblGithubGLSceneClick(Sender: TObject);
+begin
+  ShowHTMLUrl(lblGithubGLScene.Caption);
 end;
 
 // ------------------------------------------------------------------------------

+ 6 - 7
Source/Formats.DDSImage.pas

@@ -1,7 +1,6 @@
 //
 // The graphics rendering engine GLScene http://glscene.org
 //
-
 unit Formats.DDSImage;
 
 (*
@@ -28,7 +27,9 @@ uses
   GLS.VectorTypes,
   GLS.VectorGeometry,
   GLS.Graphics,
-  GLS.Context;
+  GLS.Context,
+  GLS.FileDDS,
+  GLS.TextureFormat;
 
 type
 
@@ -40,14 +41,12 @@ type
 
   EDDSException = class(Exception);
 
-//-------------------------------------------------  
+//-------------------------------------------------
 implementation
-//-------------------------------------------------  
+//-------------------------------------------------
 
 uses
-  Formats.DXTC,
-  GLS.FileDDS,
-  GLS.TextureFormat;
+  Formats.DXTC;
 
 // ------------------
 // ------------------ TDDSImage ------------------

+ 0 - 1
Source/Formats.DXTC.pas

@@ -1,7 +1,6 @@
 //
 // The graphics rendering engine GLScene http://glscene.org
 //
-
 unit Formats.DXTC;
 
 (*

+ 2 - 2
Source/GLS.Scene.pas

@@ -55,8 +55,8 @@ type
 
 const
   cDefaultProxyOptions = [pooEffects, pooObjects, pooTransformation];
-  GLSCENE_REVISION = '$Revision: 2022$';
-  GLSCENE_VERSION = 'v2.2 %s';
+  GLSCENE_REVISION = '$Revision: 2023$';
+  GLSCENE_VERSION = 'v2.3 %s';
 
 type
 

+ 1 - 2
Source/GLSL.Shader.pas

@@ -1,7 +1,6 @@
 //
 // The graphics rendering engine GLScene http://glscene.org
 //
-
 unit GLSL.Shader;
 
 (* TGLSLShader is a wrapper for GLS shaders. *)
@@ -15,7 +14,7 @@ uses
   Winapi.OpenGLext,
   System.Classes,
   System.SysUtils,
-  
+
   GLS.OpenGLTokens,
   GLS.VectorGeometry,
   GLS.VectorTypes,