Compare commits

...

No commits in common. "c8" and "c10s" have entirely different histories.
c8 ... c10s

11 changed files with 366 additions and 142 deletions

15
.gitignore vendored
View File

@ -1,2 +1,13 @@
SOURCES/mesa-demos-20181118.tar.bz2
SOURCES/xdriinfo-1.0.4.tar.bz2
mesa-demos-20100615.tar.bz2
xdriinfo-1.0.3.tar.bz2
/mesa-demos-20101028.tar.bz2
/xdriinfo-1.0.4.tar.bz2
/mesa-demos-6eef979.tar.bz2
/mesa-demos-8.1.0.tar.bz2
/mesa-demos-8.2.0.tar.bz2
/mesa-demos-20151203.tar.bz2
/mesa-demos-8.3.0.tar.bz2
/mesa-demos-20181118.tar.bz2
/mesa-demos-20210504.tar.bz2
/mesa-demos-8.5.0.tar.bz2
/mesa-demos-9.0.0.tar.xz

View File

@ -1,2 +0,0 @@
e2cdd2260f18badda6f80d4baa6ebc30225b0c7e SOURCES/mesa-demos-20181118.tar.bz2
723482b3fc627d7cc6124fec43dd1c21d102daaa SOURCES/xdriinfo-1.0.4.tar.bz2

View File

@ -1,19 +0,0 @@
diff -up mesa-demos-6eef979a5488dab01088412f88374b2ea9d615cd/src/demos/Makefile.am.legal mesa-demos-6eef979a5488dab01088412f88374b2ea9d615cd/src/demos/Makefile.am
--- mesa-demos-6eef979a5488dab01088412f88374b2ea9d615cd/src/demos/Makefile.am.legal 2013-01-08 11:24:38.805867866 -0500
+++ mesa-demos-6eef979a5488dab01088412f88374b2ea9d615cd/src/demos/Makefile.am 2013-01-08 11:24:44.975870107 -0500
@@ -65,7 +65,6 @@ bin_PROGRAMS = \
multiarb \
paltex \
pixeltest \
- pointblast \
projtex \
ray \
readpix \
@@ -74,7 +73,6 @@ bin_PROGRAMS = \
shadowtex \
singlebuffer \
spectex \
- spriteblast \
stex3d \
teapot \
terrain \

View File

@ -1,13 +0,0 @@
diff -up mesa-demos-8.1.0/configure.ac.jx mesa-demos-8.1.0/configure.ac
--- mesa-demos-8.1.0/configure.ac.jx 2013-02-24 05:49:47.000000000 -0500
+++ mesa-demos-8.1.0/configure.ac 2013-03-27 14:41:42.493936005 -0400
@@ -267,6 +267,9 @@ cygwin*)
;;
esac
+dnl i am somewhat surprised this works
+DEMO_LIBS="-Wl,--as-needed $DEMO_LIBS"
+
AC_SUBST([DEMO_CFLAGS])
AC_SUBST([DEMO_LIBS])
AC_SUBST([EGL_CFLAGS])

View File

@ -1,54 +0,0 @@
diff -up xdriinfo-1.0.4/xdriinfo.c~ xdriinfo-1.0.4/xdriinfo.c
--- xdriinfo-1.0.4/xdriinfo.c~ 2009-10-16 23:39:10.000000000 +0200
+++ xdriinfo-1.0.4/xdriinfo.c 2017-03-13 12:01:53.419636100 +0100
@@ -101,23 +101,9 @@ int main (int argc, char *argv[]) {
return 1;
}
}
- /* if the argument to the options command is a driver name, we can handle
- * it without opening an X connection */
- if (func == OPTIONS && screenNum == -1) {
- const char *options = (*GetDriverConfig) (funcArg);
- if (!options) {
- fprintf (stderr,
- "Driver \"%s\" is not installed or does not support configuration.\n",
- funcArg);
- return 1;
- }
- printf ("%s", options);
- if (isatty (STDOUT_FILENO))
- printf ("\n");
- return 0;
- }
+
/* driver command needs a valid screen number */
- else if (func == DRIVER && screenNum == -1) {
+ if (func == DRIVER && screenNum == -1) {
fprintf (stderr, "Invalid screen number \"%s\".\n", funcArg);
return 1;
}
@@ -135,6 +121,9 @@ int main (int argc, char *argv[]) {
return 1;
}
+ /* Call glXGetClientString to load vendor libs on glvnd enabled systems */
+ glXGetClientString (dpy, GLX_EXTENSIONS);
+
switch (func) {
case NSCREENS:
printf ("%d", nScreens);
@@ -154,7 +143,13 @@ int main (int argc, char *argv[]) {
break;
}
case OPTIONS: {
- const char *name = (*GetScreenDriver) (dpy, screenNum), *options;
+ const char *name, *options;
+
+ if (screenNum == -1) {
+ name = funcArg;
+ } else {
+ name = (*GetScreenDriver) (dpy, screenNum);
+ }
if (!name) {
fprintf (stderr, "Screen \"%d\" is not direct rendering capable.\n",
screenNum);

6
gating.yaml Normal file
View File

@ -0,0 +1,6 @@
--- !Policy
product_versions:
- rhel-10
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: desktop-qe.desktop-ci.tier1-gating.functional}

View File

@ -0,0 +1,28 @@
diff --git a/src/demos/meson.build b/src/demos/meson.build
index 8f01036b..929f5405 100644
--- a/src/demos/meson.build
+++ b/src/demos/meson.build
@@ -28,7 +28,6 @@ progs = [
'copypix',
'cubemap',
'cuberender',
- 'dinoshade',
'dissolve',
'drawpix',
'engine',
@@ -52,7 +51,6 @@ progs = [
'multiarb',
'paltex',
'pixeltest',
- 'pointblast',
'projtex',
'ray',
'readpix',
@@ -61,7 +59,6 @@ progs = [
'shadowtex',
'singlebuffer',
'spectex',
- 'spriteblast',
'stex3d',
'teapot',
'terrain',

View File

@ -0,0 +1,209 @@
diff --git a/src/glsl/bezier.c b/src/glsl/bezier.c
index 84e0367..62996fb 100644
--- a/src/glsl/bezier.c
+++ b/src/glsl/bezier.c
@@ -13,7 +13,7 @@
#include "glut_wrap.h"
#include "shaderutil.h"
-static const char *filename = "bezier.geom";
+static const char *filename = DEMOS_DATA_DIR "bezier.geom";
static GLuint fragShader;
static GLuint vertShader;
diff --git a/src/glsl/blinking-teapot.c b/src/glsl/blinking-teapot.c
index 62451e9..3420066 100644
--- a/src/glsl/blinking-teapot.c
+++ b/src/glsl/blinking-teapot.c
@@ -63,8 +63,8 @@ init_opengl (void)
exit(1);
}
- vshad_id = CompileShaderFile (GL_VERTEX_SHADER, "blinking-teapot.vert");
- fshad_id = CompileShaderFile (GL_FRAGMENT_SHADER, "blinking-teapot.frag");
+ vshad_id = CompileShaderFile (GL_VERTEX_SHADER, DEMOS_DATA_DIR "blinking-teapot.vert");
+ fshad_id = CompileShaderFile (GL_FRAGMENT_SHADER, DEMOS_DATA_DIR "blinking-teapot.frag");
prog_id = LinkShaders (vshad_id, fshad_id);
glUseProgram (prog_id);
diff --git a/src/glsl/brick.c b/src/glsl/brick.c
index 00d8349..f9f0ec7 100644
--- a/src/glsl/brick.c
+++ b/src/glsl/brick.c
@@ -14,8 +14,8 @@
#include "shaderutil.h"
-static char *FragProgFile = "CH06-brick.frag";
-static char *VertProgFile = "CH06-brick.vert";
+static char *FragProgFile = DEMOS_DATA_DIR "CH06-brick.frag";
+static char *VertProgFile = DEMOS_DATA_DIR "CH06-brick.vert";
/* program/shader objects */
static GLuint fragShader;
diff --git a/src/glsl/bump.c b/src/glsl/bump.c
index 95ad19f..f40cba0 100644
--- a/src/glsl/bump.c
+++ b/src/glsl/bump.c
@@ -15,9 +15,9 @@
#include "readtex.h"
-static char *FragProgFile = "CH11-bumpmap.frag";
-static char *FragTexProgFile = "CH11-bumpmaptex.frag";
-static char *VertProgFile = "CH11-bumpmap.vert";
+static char *FragProgFile = DEMOS_DATA_DIR "CH11-bumpmap.frag";
+static char *FragTexProgFile = DEMOS_DATA_DIR "CH11-bumpmaptex.frag";
+static char *VertProgFile = DEMOS_DATA_DIR "CH11-bumpmap.vert";
static char *TextureFile = DEMOS_DATA_DIR "tile.rgb";
/* program/shader objects */
diff --git a/src/glsl/convolutions.c b/src/glsl/convolutions.c
index 567b358..4c681dd 100644
--- a/src/glsl/convolutions.c
+++ b/src/glsl/convolutions.c
@@ -340,7 +340,7 @@ static void init(void)
menuInit();
readTexture(textureLocation);
- createProgram("convolution.vert", "convolution.frag");
+ createProgram(DEMOS_DATA_DIR "convolution.vert", DEMOS_DATA_DIR "convolution.frag");
glEnable(GL_TEXTURE_2D);
glClearColor(1.0, 1.0, 1.0, 1.0);
diff --git a/src/glsl/mandelbrot.c b/src/glsl/mandelbrot.c
index 18b817c..6bbeffd 100644
--- a/src/glsl/mandelbrot.c
+++ b/src/glsl/mandelbrot.c
@@ -14,8 +14,8 @@
#include "shaderutil.h"
-static char *FragProgFile = "CH18-mandel.frag";
-static char *VertProgFile = "CH18-mandel.vert";
+static char *FragProgFile = DEMOS_DATA_DIR "CH18-mandel.frag";
+static char *VertProgFile = DEMOS_DATA_DIR "CH18-mandel.vert";
/* program/shader objects */
static GLuint fragShader;
diff --git a/src/glsl/meson.build b/src/glsl/meson.build
index db8c613..13564a4 100644
--- a/src/glsl/meson.build
+++ b/src/glsl/meson.build
@@ -83,3 +83,38 @@ executable(
],
install: true
)
+
+glsl_data = [
+ 'bezier.geom',
+ 'blinking-teapot.frag',
+ 'blinking-teapot.vert',
+ 'brick.shtest',
+ 'CH06-brick.frag',
+ 'CH06-brick.vert',
+ 'CH11-bumpmap.frag',
+ 'CH11-bumpmaptex.frag',
+ 'CH11-bumpmap.vert',
+ 'CH11-toyball.frag',
+ 'CH11-toyball.vert',
+ 'CH18-mandel.frag',
+ 'CH18-mandel.vert',
+ 'convolution.frag',
+ 'convolution.vert',
+ 'cubemap.frag',
+ 'mandelbrot.shtest',
+ 'multitex.frag',
+ 'multitex.shtest',
+ 'multitex.vert',
+ 'reflect.vert',
+ 'shadowtex.frag',
+ 'simple.vert',
+ 'simplex-noise.glsl',
+ 'skinning.frag',
+ 'skinning.vert',
+ 'toyball.shtest',
+]
+
+install_data(
+ glsl_data,
+ install_dir: get_option('datadir') / 'mesa-demos'
+)
diff --git a/src/glsl/multitex.c b/src/glsl/multitex.c
index 2f9a2fa..b51aba3 100644
--- a/src/glsl/multitex.c
+++ b/src/glsl/multitex.c
@@ -35,8 +35,8 @@
static const char *Demo = "multitex";
-static const char *VertFile = "multitex.vert";
-static const char *FragFile = "multitex.frag";
+static const char *VertFile = DEMOS_DATA_DIR "multitex.vert";
+static const char *FragFile = DEMOS_DATA_DIR "multitex.frag";
static const char *TexFiles[2] =
{
diff --git a/src/glsl/simplex-noise.c b/src/glsl/simplex-noise.c
index a687508..9a2a029 100644
--- a/src/glsl/simplex-noise.c
+++ b/src/glsl/simplex-noise.c
@@ -169,7 +169,7 @@ SpecialKey(int key, int x, int y)
static void
Init(void)
{
- const char *filename = "simplex-noise.glsl";
+ const char *filename = DEMOS_DATA_DIR "simplex-noise.glsl";
char noiseText[10000];
FILE *f;
int len;
diff --git a/src/glsl/skinning.c b/src/glsl/skinning.c
index b451d13..0f4e943 100644
--- a/src/glsl/skinning.c
+++ b/src/glsl/skinning.c
@@ -20,8 +20,8 @@
#define M_PI 3.1415926535
#endif
-static char *FragProgFile = "skinning.frag";
-static char *VertProgFile = "skinning.vert";
+static char *FragProgFile = DEMOS_DATA_DIR "skinning.frag";
+static char *VertProgFile = DEMOS_DATA_DIR "skinning.vert";
/* program/shader objects */
static GLuint fragShader;
diff --git a/src/glsl/texdemo1.c b/src/glsl/texdemo1.c
index 861d696..42308d1 100644
--- a/src/glsl/texdemo1.c
+++ b/src/glsl/texdemo1.c
@@ -35,11 +35,11 @@
static const char *Demo = "texdemo1";
-static const char *ReflectVertFile = "reflect.vert";
-static const char *CubeFragFile = "cubemap.frag";
+static const char *ReflectVertFile = DEMOS_DATA_DIR "reflect.vert";
+static const char *CubeFragFile = DEMOS_DATA_DIR "cubemap.frag";
-static const char *SimpleVertFile = "simple.vert";
-static const char *SimpleTexFragFile = "shadowtex.frag";
+static const char *SimpleVertFile = DEMOS_DATA_DIR "simple.vert";
+static const char *SimpleTexFragFile = DEMOS_DATA_DIR "shadowtex.frag";
static const char *GroundImage = DEMOS_DATA_DIR "tile.rgb";
diff --git a/src/glsl/toyball.c b/src/glsl/toyball.c
index 17aa765..5b1f7d3 100644
--- a/src/glsl/toyball.c
+++ b/src/glsl/toyball.c
@@ -14,8 +14,8 @@
#include "shaderutil.h"
-static char *FragProgFile = "CH11-toyball.frag";
-static char *VertProgFile = "CH11-toyball.vert";
+static char *FragProgFile = DEMOS_DATA_DIR "CH11-toyball.frag";
+static char *VertProgFile = DEMOS_DATA_DIR "CH11-toyball.vert";
/* program/shader objects */
static GLuint fragShader;

View File

@ -1,35 +1,37 @@
%global gitdate 20181118
%global gitcommit 1830dcb6e48c88f16d328dc4fc9fa32fe3b4956e
%global shortcommit %(c=%{gitcommit}; echo ${c:0:7})
%global xdriinfo xdriinfo-1.0.4
%global demodir %{_libdir}/mesa
Summary: Mesa demos
Name: mesa-demos
Version: 8.4.0
Release: 5.%{gitdate}git%{shortcommit}%{?dist}
Version: 9.0.0
Release: 8%{?dist}
# SPDX
License: MIT
URL: http://www.mesa3d.org
#Source0: https://mesa.freedesktop.org/archive/demos/%{version}/%{name}-%{version}.tar.bz2
Source0: mesa-demos-%{gitdate}.tar.bz2
Source1: http://www.x.org/pub/individual/app/%{xdriinfo}.tar.bz2
Source2: mesad-git-snapshot.sh
# Patch pointblast/spriteblast out of the Makefile for legal reasons
Patch0: mesa-demos-8.0.1-legal.patch
Patch1: mesa-demos-as-needed.patch
# Fix xdriinfo not working with libglvnd
Patch2: xdriinfo-1.0.4-glvnd.patch
Source: https://archive.mesa3d.org/demos/%{name}-%{version}.tar.xz
# Patch pointblast/spriteblast/dinoshade out for legal reasons
# (not in public domain)
Patch0: mesa-demos-8.5.0-legal.patch
# Install glsl demos data
Patch1: mesa-demos-system-data.patch
BuildRequires: meson
BuildRequires: gcc
BuildRequires: gcc-c++
BuildRequires: pkgconfig autoconf automake libtool
BuildRequires: pkgconfig
BuildRequires: freeglut-devel
BuildRequires: glslang
BuildRequires: mesa-libGL-devel
BuildRequires: mesa-libEGL-devel
BuildRequires: mesa-libGLES-devel
BuildRequires: mesa-libgbm-devel
BuildRequires: libGLU-devel
BuildRequires: libXext-devel
BuildRequires: glew-devel
BuildRequires: libdecor-devel
BuildRequires: libxcb-devel
BuildRequires: libxkbcommon-devel
BuildRequires: libxkbcommon-x11-devel
BuildRequires: vulkan-loader-devel
BuildRequires: wayland-devel
BuildRequires: wayland-protocols-devel
BuildRequires: freetype-devel
%description
@ -38,6 +40,12 @@ This package provides some demo applications for testing Mesa.
%package -n glx-utils
Summary: GLX utilities
Provides: glxinfo glxinfo%{?__isa_bits}
# mesa-demos' glx-utils used to provide xdriinfo for a long time, but that has
# always been an additional external source, so it was split into its own
# package.
# Recommend it here so that it still gets pulled at first for anyone expecting
# it to be there, but it doesn't need to be a hard requirement anymore.
Recommends: xdriinfo
%description -n glx-utils
The glx-utils package provides the glxinfo and glxgears utilities.
@ -50,51 +58,40 @@ Provides: eglinfo es2_info
The egl-utils package provides the eglinfo and es2_info utilities.
%prep
%setup -q -n %{name}-%{gitdate} -b1
%setup -q -n %{name}-%{version}
%patch0 -p1 -b .legal
%patch1 -p1 -b .asneeded
pushd ../%{xdriinfo}
%patch2 -p1
popd
%patch1 -p1 -b .systemdata
# These two files are distributable, but non-free (lack of permission to modify).
rm -rf src/demos/pointblast.c
rm -rf src/demos/spriteblast.c
%build
autoreconf -vfi
%configure \
%meson \
--bindir=%{demodir} \
--with-system-data-files \
--enable-x11 \
--enable-wayland \
--enable-gbm \
--enable-egl \
--enable-gles2 \
--enable-libdrm \
--enable-freetype2
make %{?_smp_mflags}
-Dwith-system-data-files=true \
-Dx11=enabled \
-Dwayland=enabled \
-Degl=enabled \
-Dgles2=enabled \
-Dvulkan=enabled \
-Dlibdrm=enabled \
-Dosmesa=disabled
pushd ../%{xdriinfo}
%configure
make %{?_smp_mflags}
popd
%meson_build
%install
make install DESTDIR=%{buildroot}
%meson_install
pushd ../%{xdriinfo}
make %{?_smp_mflags} install DESTDIR=%{buildroot}
popd
install -m 0755 src/xdemos/glxgears %{buildroot}%{_bindir}
install -m 0755 src/xdemos/glxinfo %{buildroot}%{_bindir}
mkdir -p %{buildroot}%{_bindir}
install -m 0755 %{_vpath_builddir}/src/xdemos/glxgears %{buildroot}%{_bindir}
install -m 0755 %{_vpath_builddir}/src/xdemos/glxinfo %{buildroot}%{_bindir}
%if 0%{?__isa_bits} != 0
install -m 0755 src/xdemos/glxinfo %{buildroot}%{_bindir}/glxinfo%{?__isa_bits}
install -m 0755 %{_vpath_builddir}/src/xdemos/glxinfo %{buildroot}%{_bindir}/glxinfo%{?__isa_bits}
%endif
install -m 0755 src/egl/opengl/eglinfo %{buildroot}%{_bindir}
install -m 0755 src/egl/opengles2/es2_info %{buildroot}%{_bindir}
install -m 0755 %{_vpath_builddir}/src/egl/opengl/eglinfo %{buildroot}%{_bindir}
install -m 0755 %{_vpath_builddir}/src/egl/opengles2/es2_info %{buildroot}%{_bindir}
%check
@ -105,16 +102,76 @@ install -m 0755 src/egl/opengles2/es2_info %{buildroot}%{_bindir}
%files -n glx-utils
%{_bindir}/glxinfo*
%{_bindir}/glxgears
%{_bindir}/xdriinfo
%{_datadir}/man/man1/xdriinfo.1*
%files -n egl-utils
%{_bindir}/eglinfo
%{_bindir}/es2_info
%changelog
* Thu Jun 11 2020 Adam Jackson <ajax@redhat.com> - 8.4.0-5.20181118git1830dcb
- Rebuild for RHEL 8.3
* Tue Oct 29 2024 Troy Dawson <tdawson@redhat.com> - 9.0.0-8
- Bump release for October 2024 mass rebuild:
Resolves: RHEL-64018
* Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 9.0.0-7
- Bump release for June 2024 mass rebuild
* Thu Jan 25 2024 Fedora Release Engineering <releng@fedoraproject.org> - 9.0.0-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Sun Jan 21 2024 Fedora Release Engineering <releng@fedoraproject.org> - 9.0.0-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Tue Oct 03 2023 Erico Nunes <ernunes@redhat.com> - 9.0.0-4
- Split xdriinfo into its own package
- Remove xdriinfo additional source build and autotools dependencies
* Thu Sep 07 2023 José Expósito <jexposit@redhat.com>
- SPDX migration: license is already SPDX compatible
* Thu Jul 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 9.0.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Tue Apr 25 2023 Yaakov Selkowitz <yselkowi@redhat.com> - 9.0.0-2
- Install all necessary shader files (#1373299)
* Mon Mar 27 2023 Erico Nunes <ernunes@redhat.com> - 9.0.0-1
- Update to 9.0.0
- Enable vulkan demos
* Fri Feb 03 2023 Erico Nunes <ernunes@redhat.com> - 8.5.0-1
- Update to 8.5.0
- Change build system to meson
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 8.4.0-15.20210504git0f9e7d9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 8.4.0-14.20210504git0f9e7d9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 8.4.0-13.20210504git0f9e7d9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 8.4.0-12.20210504git0f9e7d9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Tue May 04 2021 Adam Jackson <ajax@redhat.com> - 8.4.0-11.20210504git0f9e7d995a14f15
- Sync with upstream to drop the glew dependency
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 8.4.0-9.20181118git1830dcb
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Wed Jul 29 2020 Tom Stellard <tstellar@redhat.com> - 8.4.0-8.20181118git1830dcb
- Use make macros
- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro
* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 8.4.0-7.20181118git1830dcb
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 8.4.0-6.20181118git1830dcb
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Fri Oct 04 2019 Gwyn Ciesla <gwync@protonmail.com> - 8.4.0-5.20181118git1830dcb
- Rebuilt for new freeglut.
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 8.4.0-4.20181118git1830dcb
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild

1
sources Normal file
View File

@ -0,0 +1 @@
SHA512 (mesa-demos-9.0.0.tar.xz) = af33ef72a521416e39d93370b2b4ccb768f08084c9e4c0aa62868210d9465c858e5cb8e5d23952295a3073946f609eb8723ee60b39dd9fb6696c4e45aafbb2c1