Re: Starting FriCAS not in the $HOME directory
Grégory Vanuxem <[email protected]> Fri, 30 May 2025 17:08:21 +0200
| Newsgroups | gmane.comp.mathematics.algebra.fricas.devel,gmane.lisp.gcl.devel |
|---|---|
| Message-ID | <CAHnU2dYvkuF4T1Hg8Kv9iPAZswo_vOaoELU8xkbQAMaj0WiP_A@mail.gmail.com> |
--00000000000037899106365bcb76
Content-Type: multipart/alternative; boundary="00000000000037898f06365bcb74"
--00000000000037898f06365bcb74
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Hello Camm, *,
That's excellent, that's exactly what I was looking for. Data types and the
GCL FFI access to a shared library. I have to look deeper since I load
libjulia.so and initialize Julia the first time I use it. And only one time
the library loading:
(defun init-julia (wrapper-lib)
(if (ignore-errors (|quiet_load_alien| wrapper-lib) t)
(let ((system-julia-name #+:WIN32 "libjulia.dll"
#+:DARWIN "libjulia.dylib"
#-(or :WIN32 :DARWIN) "libjulia.so")
(bundled-julia-name #+:WIN32 "/lib/libjulia.dll"
#+:DARWIN "/lib/libjulia.dylib"
#-(or :WIN32 :DARWIN) "/lib/libjulia.so"))
(if (ignore-errors (|quiet_load_alien| system-julia-name) t)
t
(and bundled-julia-name (ignore-errors (|quiet_load_alien|
(BOOT::make-absolute-filename bundled-julia-name)) t
))))))
After loading the library, the C code call Julia for its initialization,
the GC and several other stuff.
I think mimicking the libspad.so support will be a good start.
However, I noticed that about utf-8 support:
In SBCL or Clozure CL, the later needs a special routine to handle utf-8
string returned from the C wrapper:
(1) -> #"Hello world, =CE=9A=CE=B1=CE=BB=CE=B7=CE=BC=E1=BD=B3=CF=81=CE=B1 =
=CE=BA=E1=BD=B9=CF=83=CE=BC=CE=B5, =E3=82=B3=E3=83=B3=E3=83=8B=E3=83=81=E3=
=83=8F"
(1) 34
Whereas in gcl27, 2.7.1-7 (the Debian sid package):
(2) -> #"Hello world, =CE=9A=CE=B1=CE=BB=CE=B7=CE=BC=E1=BD=B3=CF=81=CE=B1 =
=CE=BA=E1=BD=B9=CF=83=CE=BC=CE=B5, =E3=82=B3=E3=83=B3=E3=83=8B=E3=83=81=E3=
=83=8F"
(2) 59
# is the operation that returns the number of elements in an Aggregate.
So I think handling strings returned by Julia, I use them sometimes for
formatting purposes or regular expressions related operation principally,
will probably become difficult with gcl27, they are in utf-8. For BLAS and
LAPACK and purely numerical functions I don't think it will it be a problem
but for returned strings (char *) I wonder if there is a special function
to let GCL "knows" it is in utf-8 and handle them correctly.
BTW many many thanks, it's a good headway for me, it will prevent me a lot
of digging in the GCL internals.
- Greg
PS: attached is a file I regularly use to check utf-8 support.
Le jeu. 29 mai 2025, 22:28, Camm Maguire <[email protected]> a =C3=A9c=
rit :
> Greetings, and thanks again!
>
> From my reading of the spec GCL's parsing of the pathname-type is
> compliant. It also passes Paul Dietz' test suite. If this is causing
> difficulties it would be great if someone could post the failing lisp
> code.
>
> There are advantages to not allowing '.' in pathname-name.
>
> Take care,
>
> Gr=C3=A9gory Vanuxem <[email protected]> writes:
>
> > Hello,
> >
> > Le sam. 24 mai 2025, 18:41, Waldek Hebisch <[email protected]> a =C3=A9c=
rit :
> >
> > On Sat, May 24, 2025 at 06:14:40PM +0200, Gr=C3=A9gory Vanuxem wrote:
> > > Hi Waldek,
> > >
> > > Many thanks for this quick response and fix. Just tested on official
> FriCAS
> > > and the 2 problems you mentioned previously gone away.
> > >
> > > The .fricas.input file is still not "read" but for my mid-term work
> it is
> > > not a big problem, my startup file is just displaying computation
> times and
> > > augmenting line length of output to 110. Maybe this is related to my
> Kali
> > > distribution on WSL2, I don't know.
> > >
> > > The )read command is to blame on my settings:
> > >
> > > (1) -> )sys pws
> > >
> > > >> System error:
> > > INTERNAL-SIMPLE-ERROR: The assertion !posix_spawnp(&pid, *p1,
> > > &file_actions, &attr, (void *)p1, environ) on line 65 of o/unixsys.c
> in
> > > function vsystem failed: No such file or directory
> > >
> > > (1) -> )sys pwd
> > > /home/greg
> > > (1) -> )sys ls -l .fricas.input
> > > -rw-r--r-- 1 greg greg 35 Feb 11 09:42 .fricas.input
> > > (1) -> )read .fricas.input
> > >
> > > The file .fricas.input is needed but does not exist.
> >
> > AFAICS the problem is due to PATHNAME-TYPE in gcl:
> >
> > )lisp (PATHNAME-TYPE "/home/hebisch/.fricas.input")
> >
> > Value =3D "fricas.input"
> > (1) ->
> >
> > All other Lisp implementations that we use return "input".
> >
> > Yes and this is required by CLHS from what I have read:
> >
> >
> http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/fun_pat=
hname-_name-version.html#pathname-type
> >
> > It's a good thing to know for Camm since apparently he is working on
> several things and will add some suggestions for macOS from Chun Tian fro=
m
> what I have
> > understood so I think it will fix that.
> >
> > - Greg
>
> --
> Camm Maguire [email protected]=
g
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> "The earth is but one country, and mankind its citizens." -- Baha'u'lla=
h
>
--=20
You received this message because you are subscribed to the Google Groups "=
FriCAS - computer algebra system" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to [email protected].
To view this discussion visit https://groups.google.com/d/msgid/fricas-deve=
l/CAHnU2dYvkuF4T1Hg8Kv9iPAZswo_vOaoELU8xkbQAMaj0WiP_A%40mail.gmail.com.
--00000000000037898f06365bcb74
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div dir=3D"auto">Hello Camm, *,<div dir=3D"auto"><br></di=
v><div dir=3D"auto">That's excellent, that's exactly what I was loo=
king for. Data types and the GCL FFI access to a shared library. I have to =
look deeper since I load libjulia.so and initialize Julia the first time I =
use it. And only one time the library loading:</div><div dir=3D"auto"><br><=
/div><div dir=3D"auto"><div style=3D"color:rgb(171,178,191);background-colo=
r:rgb(35,39,46);font-family:Consolas,"Courier New",monospace;font=
-size:14px;line-height:19px;white-space:pre"><div>(<span style=3D"color:rgb=
(198,120,221)">defun</span> <span style=3D"color:rgb(97,175,239)">init-juli=
a</span> (wrapper-lib)</div><div>=C2=A0 =C2=A0 (<span style=3D"color:rgb(19=
8,120,221)">if</span> (<span style=3D"color:rgb(198,120,221)">ignore-errors=
</span> (|quiet_load_alien| wrapper-lib) <span style=3D"color:rgb(209,154,1=
02)">t</span>)</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 (<span style=3D"color:=
rgb(198,120,221)">let</span> ((system-julia-name =C2=A0<span style=3D"color=
:rgb(209,154,102)">#+:WIN32</span> <span style=3D"color:rgb(152,195,121)">&=
quot;libjulia.dll"</span></div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 <span style=3D"color:rgb(209,154,102)">=
#+:DARWIN</span> <span style=3D"color:rgb(152,195,121)">"libjulia.dyli=
b"</span></div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 <span style=3D"color:rgb(209,154,102)">#-</span>(<span=
style=3D"color:rgb(198,120,221)">or</span> <span style=3D"color:rgb(198,12=
0,221)">:WIN32</span> <span style=3D"color:rgb(198,120,221)">:DARWIN</span>=
) <span style=3D"color:rgb(152,195,121)">"libjulia.so"</span>)</d=
iv><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (bundled-ju=
lia-name <span style=3D"color:rgb(209,154,102)">#+:WIN32</span> <span style=
=3D"color:rgb(152,195,121)">"/lib/libjulia.dll"</span></div><div>=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 <span=
style=3D"color:rgb(209,154,102)">#+:DARWIN</span> <span style=3D"color:rgb=
(152,195,121)">"/lib/libjulia.dylib"</span></div><div>=C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 <span style=3D"=
color:rgb(209,154,102)">#-</span>(<span style=3D"color:rgb(198,120,221)">or=
</span> <span style=3D"color:rgb(198,120,221)">:WIN32</span> <span style=3D=
"color:rgb(198,120,221)">:DARWIN</span>) <span style=3D"color:rgb(152,195,1=
21)">"/lib/libjulia.so"</span>))</div><div>=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 (<span style=3D"color:rgb(198,120,221)">if</span> (<sp=
an style=3D"color:rgb(198,120,221)">ignore-errors</span> (|quiet_load_alien=
| system-julia-name) <span style=3D"color:rgb(209,154,102)">t</span>)</div>=
<div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 <span style=3D=
"color:rgb(209,154,102)">t</span></div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 (<span style=3D"color:rgb(198,120,221)">and</span>=
bundled-julia-name (<span style=3D"color:rgb(198,120,221)">ignore-errors</=
span> (|quiet_load_alien|</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (BOOT::make-absolute-filename bundled-julia=
-name)) <span style=3D"color:rgb(209,154,102)">t</span>))))))</div></div></=
div><div>After loading the library, the C code call Julia for its initializ=
ation, the GC and several other stuff.</div><div dir=3D"auto"><br></div><di=
v>I think mimicking=C2=A0the libspad.so support will be a good start.</div>=
<div dir=3D"auto"><br></div><div>However, I noticed that about utf-8 suppor=
t:</div><div><br></div><div>In SBCL or Clozure CL, the later needs a specia=
l routine to handle utf-8 string returned from the C wrapper:</div><div><br=
></div><div>(1) -> #"Hello world, =CE=9A=CE=B1=CE=BB=CE=B7=CE=BC=E1=
=BD=B3=CF=81=CE=B1 =CE=BA=E1=BD=B9=CF=83=CE=BC=CE=B5, =E3=82=B3=E3=83=B3=E3=
=83=8B=E3=83=81=E3=83=8F"<br><br>=C2=A0 =C2=A0(1) =C2=A034</div><div><=
br></div><div>Whereas in gcl27, 2.7.1-7 (the Debian sid package):</div><div=
><br></div><div>(2) -> #"Hello world, =CE=9A=CE=B1=CE=BB=CE=B7=CE=
=BC=E1=BD=B3=CF=81=CE=B1 =CE=BA=E1=BD=B9=CF=83=CE=BC=CE=B5, =E3=82=B3=E3=83=
=B3=E3=83=8B=E3=83=81=E3=83=8F"<br><br>=C2=A0 =C2=A0(2) =C2=A059</div>=
<div><br></div><div># is the operation=C2=A0that returns the number of elem=
ents in an Aggregate.</div><div><br></div><div>So I think handling strings =
returned by Julia, I use them sometimes for formatting=C2=A0purposes or reg=
ular expressions related operation principally, will probably become diffic=
ult with gcl27, they are in utf-8. For BLAS and LAPACK and purely numerical=
functions I don't think it will it be a problem but for returned strin=
gs (char *) I wonder if there is a special function to let GCL "knows&=
quot; it is in utf-8 and handle them correctly.</div><div><br></div><div>BT=
W many many thanks, it's a good headway for me, it will prevent me a lo=
t of digging in the GCL internals.</div><div><br></div><div>- Greg</div><di=
v><br></div><div>PS: attached is a file I regularly use to check utf-8 supp=
ort.</div></div></div><br><div class=3D"gmail_quote"><div dir=3D"ltr" class=
=3D"gmail_attr">Le jeu. 29 mai 2025, 22:28, Camm Maguire <<a href=3D"mai=
lto:[email protected]" rel=3D"noreferrer" target=3D"_blank">camm@magui=
refamily.org</a>> a =C3=A9crit=C2=A0:<br></div><blockquote class=3D"gmai=
l_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,20=
4,204);padding-left:1ex">Greetings, and thanks again!<br>
<br>
From my reading of the spec GCL's parsing of the pathname-type is<br>
compliant.=C2=A0 It also passes Paul Dietz' test suite.=C2=A0 If this i=
s causing<br>
difficulties it would be great if someone could post the failing lisp<br>
code.<br>
<br>
There are advantages to not allowing '.' in pathname-name.<br>
<br>
Take care,<br>
<br>
Gr=C3=A9gory Vanuxem <<a href=3D"mailto:[email protected]" rel=3D"nore=
ferrer noreferrer" target=3D"_blank">[email protected]</a>> writes:<br=
>
<br>
> Hello, <br>
><br>
> Le sam. 24 mai 2025, 18:41, Waldek Hebisch <<a href=3D"mailto:devel=
@fricas.org" rel=3D"noreferrer noreferrer" target=3D"_blank">[email protected]=
rg</a>> a =C3=A9crit :<br>
><br>
>=C2=A0 On Sat, May 24, 2025 at 06:14:40PM +0200, Gr=C3=A9gory Vanuxem w=
rote:<br>
>=C2=A0 > Hi Waldek,<br>
>=C2=A0 > <br>
>=C2=A0 > Many thanks for this quick response and fix. Just tested on=
official FriCAS<br>
>=C2=A0 > and the 2 problems you mentioned previously gone away.<br>
>=C2=A0 > <br>
>=C2=A0 > The .fricas.input file is still not "read" but fo=
r my mid-term work it is<br>
>=C2=A0 > not a big problem, my startup file is just displaying compu=
tation times and<br>
>=C2=A0 > augmenting line length of output to 110. Maybe this is rela=
ted to my Kali<br>
>=C2=A0 > distribution on WSL2, I don't know.<br>
>=C2=A0 > <br>
>=C2=A0 > The )read command is to blame on my settings:<br>
>=C2=A0 > <br>
>=C2=A0 > (1) -> )sys pws<br>
>=C2=A0 > <br>
>=C2=A0 >=C2=A0 =C2=A0 >> System error:<br>
>=C2=A0 >=C2=A0 =C2=A0 INTERNAL-SIMPLE-ERROR: The assertion !posix_sp=
awnp(&pid, *p1,<br>
>=C2=A0 > &file_actions, &attr, (void *)p1, environ) on line =
65 of o/unixsys.c in<br>
>=C2=A0 > function vsystem failed: No such file or directory<br>
>=C2=A0 > <br>
>=C2=A0 > (1) -> )sys pwd<br>
>=C2=A0 > /home/greg<br>
>=C2=A0 > (1) -> )sys ls -l .fricas.input<br>
>=C2=A0 > -rw-r--r-- 1 greg greg 35 Feb 11 09:42 .fricas.input<br>
>=C2=A0 > (1) -> )read .fricas.input<br>
>=C2=A0 > <br>
>=C2=A0 >=C2=A0 =C2=A0 The file .fricas.input is needed but does not =
exist.<br>
><br>
>=C2=A0 AFAICS the problem is due to PATHNAME-TYPE in gcl:<br>
><br>
>=C2=A0 )lisp (PATHNAME-TYPE "/home/hebisch/.fricas.input")<br=
>
><br>
>=C2=A0 Value =3D "fricas.input"<br>
>=C2=A0 (1) -> <br>
><br>
>=C2=A0 All other Lisp implementations that we use return "input&qu=
ot;.<br>
><br>
> Yes and this is required by CLHS from what I have read:<br>
><br>
> <a href=3D"http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpe=
c/Body/fun_pathname-_name-version.html#pathname-type" rel=3D"noreferrer nor=
eferrer noreferrer" target=3D"_blank">http://www.ai.mit.edu/projects/iiip/d=
oc/CommonLISP/HyperSpec/Body/fun_pathname-_name-version.html#pathname-type<=
/a><br>
><br>
> It's a good thing to know for Camm since apparently he is working =
on several things and will add some suggestions for macOS from Chun Tian fr=
om what I have<br>
> understood so I think it will fix that. <br>
><br>
> - Greg<br>
<br>
-- <br>
Camm Maguire=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 <a href=3D"mailto:[email protected]" rel=3D"noreferrer noreferrer"=
target=3D"_blank">[email protected]</a><br>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D<br=
>
"The earth is but one country, and mankind its citizens."=C2=A0 -=
-=C2=A0 Baha'u'llah<br>
</blockquote></div>
<p></p>
-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;FriCAS - computer algebra system" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:[email protected]">fricas=
[email protected]</a>.<br />
To view this discussion visit <a href=3D"https://groups.google.com/d/msgid/=
fricas-devel/CAHnU2dYvkuF4T1Hg8Kv9iPAZswo_vOaoELU8xkbQAMaj0WiP_A%40mail.gma=
il.com?utm_medium=3Demail&utm_source=3Dfooter">https://groups.google.com/d/=
msgid/fricas-devel/CAHnU2dYvkuF4T1Hg8Kv9iPAZswo_vOaoELU8xkbQAMaj0WiP_A%40ma=
il.gmail.com</a>.<br />
--00000000000037898f06365bcb74--
--00000000000037899106365bcb76
Content-Type: text/plain; charset="UTF-8"; name="utf-8-demo.txt"
Content-Disposition: attachment; filename="utf-8-demo.txt"
Content-Transfer-Encoding: base64
Content-ID: <f_mbawury80>
X-Attachment-Id: f_mbawury80
LSotIGNvZGluZzogdXRmLTggLSotClVURi04IGVuY29kZWQgc2FtcGxlIHBsYWluLXRleHQgZmls
ZQrigL7igL7igL7igL7igL7igL7igL7igL7igL7igL7igL7igL7igL7igL7igL7igL7igL7igL7i
gL7igL7igL7igL7igL7igL7igL7igL7igL7igL7igL7igL7igL7igL7igL7igL7igL7igL4KCk1h
cmt1cyBLdWhuIFvLiG1hyrNryopzIGt1y5BuXSA8aHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1n
azI1Lz4g4oCUIDIwMDItMDctMjUKCgpUaGUgQVNDSUkgY29tcGF0aWJsZSBVVEYtOCBlbmNvZGlu
ZyB1c2VkIGluIHRoaXMgcGxhaW4tdGV4dCBmaWxlCmlzIGRlZmluZWQgaW4gVW5pY29kZSwgSVNP
IDEwNjQ2LTEsIGFuZCBSRkMgMjI3OS4KCgpNYXRoZW1hdGljcyBhbmQgc2NpZW5jZXM6CgogIOKI
riBF4ouFZGEgPSBRLCAgbiDihpIg4oieLCDiiJEgZihpKSA9IOKIjyBnKGkpLCAgICAgIOKOp+KO
oeKOm+KUjOKUgOKUgOKUgOKUgOKUgOKUkOKOnuKOpOKOqwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIOKOquKOouKOnOKUgmHCsitiwrMg4o6f4o6l4o6qCiAg4oiA
eOKIiOKEnTog4oyIeOKMiSA9IOKIkuKMiuKIknjijIssIM6xIOKIpyDCrM6yID0gwqwowqzOsSDi
iKggzrIpLCAgICDijqrijqLijpzilILilIDilIDilIDilIDilIAg4o6f4o6l4o6qCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4o6q4o6i4o6c4o63IGPigoggICDi
jp/ijqXijqoKICDihJUg4oqGIOKEleKCgCDiioIg4oSkIOKKgiDihJog4oqCIOKEnSDiioIg4oSC
LCAgICAgICAgICAgICAgICAgICDijqjijqLijpwgICAgICAg4o6f4o6l4o6sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4o6q4o6i4o6cIOKIniAgICAg4o6f4o6l
4o6qCiAg4oqlIDwgYSDiiaAgYiDiiaEgYyDiiaQgZCDiiaog4oqkIOKHkiAo4p+mQeKfpyDih5Qg
4p+qQuKfqyksICAgICAg4o6q4o6i4o6cIOKOsiAgICAg4o6f4o6l4o6qCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4o6q4o6i4o6cIOKOs2HigbEtYuKBseKOn+KO
peKOqgogIDJI4oKCICsgT+KCgiDih4wgMkjigoJPLCBSID0gNC43IGvOqSwg4oyAIDIwMCBtbSAg
ICAg4o6p4o6j4o6daT0xICAgIOKOoOKOpuKOrQoKTGF0ZXggU3ltYm9scwoKR3JlZWsgzpHOks6T
zpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoc6jzqTOpc6mzqfOqM6pCkdyZWVrIM6xzrLOs860
zrXOts63zrjOuc66zrvOvM69zr7Ov8+Az4HPgs+Ez4XPhs+Hz4jPiQoKbWF0aCBvcGVyYXRvcnMg
4oyI4oyJIOKMiuKMiyDiiI8g4oiRIOKIqyDDlyDiipUg4oqWIOKKlyDiipgg4oqZIOKKmiDiipsg
4oiZIOKImCDigLIg4oCzIOKAtCDiiLwg4oiCIOKImiDiiZQgw5cgwrIgwrMKbWF0aCBjb25zdGFu
dHMgz4Ag4oS1IOKIngptYXRoIG1pc2MgwrEg4oiOIApHZW9tZXRyeSDijIXijIbihJPiiJ/iiKDi
iKHiiKLiiKXiiKbiiLbiiLcKTG9naWMgJiBTZXQgVGhlb3J5IOKIgMKs4oin4oio4oiD4oqm4oi1
4oi04oiF4oiI4oiJ4oqC4oqD4oqG4oqH4oqE4ouC4ouDClJlbGF0aW9ucyDiiaDiiaTiiaXiia7i
ia/iiaviiariiYjiiaEKU2V0cyDihJXihKTihJrihJ3ihIIKQXJyb3dzIOKGkOKGkuKGkeKGkyDi
hpQg4oaW4oaX4oaZ4oaYICDih5Dih5Lih5Hih5Mg4oeU4oeXICDih6bih6jih6fih6kg4peA4pa2
4pay4pa8IOKXgeKWt+KWs+KWvSDihqTihqbihqXihqcg4oae4oag4oaf4oahIOKHpOKHpSDih57i
h58g4oa64oa7IOKGtuKGt+KHhOKGteKGqSDimJ7imJzimJ3imJ8KCk1hdGNoaW5nIFBhaXJzIMKr
wrsg4oC54oC6IOKAnOKAnSDigJjigJkg44CW44CX44CQ44CR44CM44CN44CO44CP44CI44CJ44CK
44CL44CU44CVCmN1cnJlbmN5IMKiIOKCrCDigqAgwqMgwqUKY29tbW9uIHN5bWJvbHMgwrAgwqkg
wq4g4oSiIMKnIMK2IOKAoCDigKEg4oC7CkJ1bGxldC1saWtlIOKAouKXpiDigKMg4pyTIOKXj+KW
oOKXhuKXi+KWoeKXhyDimIXimIYg4pmg4pmj4pml4pmmIOKZpOKZp+KZoeKZoiDvvIoKc3RhcnMg
4pym4py44py34py2CgpMaW5ndWlzdGljcyBhbmQgZGljdGlvbmFyaWVzOgoKICDDsGkgxLFudMmZ
y4huw6bKg8mZbsmZbCBmyZnLiG7Jm3TEsWsgyZlzb8qKc2nLiGXEscqDbgogIFkgW8uIyo9wc2ls
yZRuXSwgWWVuIFtqyZtuXSwgWW9nYSBby4hqb8uQZ8mRXQoKQVBMOgoKICAoKFbijbNWKT3ijbPi
jbRWKS9W4oaQLFYgICAg4oy34oaQ4o2z4oaS4o204oiG4oiH4oqD4oC+4o2O4o2V4oyICgpOaWNl
ciB0eXBvZ3JhcGh5IGluIHBsYWluIHRleHQgZmlsZXM6CgogIOKVlOKVkOKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKV
kOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVlwog
IOKVkSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkQogIOKVkSAg
IOKAoiDigJhzaW5nbGXigJkgYW5kIOKAnGRvdWJsZeKAnSBxdW90ZXMgICAgICAgICDilZEKICDi
lZEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilZEKICDilZEgICDi
gKIgQ3VybHkgYXBvc3Ryb3BoZXM6IOKAnFdl4oCZdmUgYmVlbiBoZXJl4oCdIOKVkQogIOKVkSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkQogIOKVkSAgIOKAoiBM
YXRpbi0xIGFwb3N0cm9waGUgYW5kIGFjY2VudHM6ICfCtGAgIOKVkQogIOKVkSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkQogIOKVkSAgIOKAoiDigJpkZXV0c2No
ZeKAmCDigJ5BbmbDvGhydW5nc3plaWNoZW7igJwgICAgICAg4pWRCiAg4pWRICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pWRCiAg4pWRICAg4oCiIOKAoCwg4oChLCDi
gLAsIOKAoiwgM+KAkzQsIOKAlCwg4oiSNS8rNSwg4oSiLCDigKYgICAgICDilZEKICDilZEgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilZEKICDilZEgICDigKIgQVND
SUkgc2FmZXR5IHRlc3Q6IDFsSXwsIDBPRCwgOEIgICAgIOKVkQogIOKVkSAgICAgICAgICAgICAg
ICAgICAgICDila3ilIDilIDilIDilIDilIDilIDilIDilIDilIDila4gICAgICAgICDilZEKICDi
lZEgICDigKIgdGhlIGV1cm8gc3ltYm9sOiDilIIgMTQuOTUg4oKsIOKUgiAgICAgICAgIOKVkQog
IOKVkSAgICAgICAgICAgICAgICAgICAgICDilbDilIDilIDilIDilIDilIDilIDilIDilIDilIDi
la8gICAgICAgICDilZEKICDilZrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDi
lZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZ0KCkNvbWJpbmluZyBjaGFyYWN0ZXJz
OgoKICBTVEFSR86bzIpURSBTRy0xLCBhID0gdsyHID0gcsyILCBh4oORIOKKpSBi4oORCgpHcmVl
ayAoaW4gUG9seXRvbmljKToKCiAgVGhlIEdyZWVrIGFudGhlbToKCiAgzqPhvbIgzrPOvc+Jz4Hh
vbfOts+JIOG8gM+A4b24IM+E4b20zr0gzrrhvbnPiM63CiAgz4TOv+G/piDPg8+AzrHOuM65zr/h
v6Ygz4ThvbTOvSDPhM+Bzr/OvM61z4HhvbUsCiAgz4PhvbIgzrPOvc+Jz4HhvbfOts+JIOG8gM+A
4b24IM+E4b20zr0g4b2Ez4jOtwogIM+Azr/hvbogzrzhvbIgzrLhvbfOsSDOvM61z4TPgeG9sc61
zrkgz4ThvbQgzrPhv4YuCgogIOG+v86Rz4Dhvr8gz4ThvbAgzrrhvbnOus66zrHOu86xIM6yzrPO
sc67zrzhvbPOvc63CiAgz4Thv7bOvSDhv77Olc67zrvhvbXOvc+Jzr0gz4ThvbAg4byxzrXPgeG9
sQogIM66zrHhvbYgz4PhvbDOvSDPgM+B4b+2z4TOsSDhvIDOvc60z4HOtc65z4nOvOG9s869zrcK
ICDPh86x4b+Wz4HOtSwg4b2mIM+HzrHhv5bPgc61LCDhvr/Olc67zrXPhc64zrXPgc654b2xIQoK
ICBGcm9tIGEgc3BlZWNoIG9mIERlbW9zdGhlbmVzIGluIHRoZSA0dGggY2VudHVyeSBCQzoKCiAg
zp/hvZDPh+G9tiDPhM6x4b2Qz4ThvbAgz4DOsc+B4b23z4PPhM6xz4TOseG9tyDOvM6/zrkgzrPO
uc6zzr3hvb3Pg866zrXOuc69LCDhvaYg4byEzr3OtM+BzrXPgiDhvr/Okc64zrfOvc6x4b+Wzr/O
uSwKICDhvYXPhM6xzr0gz4Thvr8gzrXhvLDPgiDPhOG9sCDPgM+B4b2xzrPOvM6xz4TOsSDhvIDP
gM6/zrLOu+G9s8+Iz4kgzrrOseG9tiDhvYXPhM6xzr0gz4DPgeG9uM+CIM+Ezr/hvbrPggogIM67
4b25zrPOv8+Fz4Igzr/hvZPPgiDhvIDOus6/4b27z4nOhyDPhM6/4b26z4IgzrzhvbLOvSDOs+G9
sM+BIM674b25zrPOv8+Fz4Igz4DOtc+B4b22IM+Ezr/hv6YKICDPhM65zrzPic+B4b21z4POsc+D
zrjOsc65IM6m4b23zrvOuc+Az4DOv869IOG9gc+B4b+2IM6zzrnOs869zr/OvOG9s869zr/Phc+C
LCDPhOG9sCDOtOG9siDPgM+B4b2xzrPOvM6xz4Thvr8KICDOteG8sM+CIM+Ezr/hv6bPhM6/IM+A
z4HOv+G9tc66zr/Ovc+EzrEsICDhvaXPg8644b6/IOG9hc+Az4nPgiDOvOG9tCDPgM61zrnPg+G9
uc68zrXOuOG+vyDOseG9kM+Ezr/hvbYKICDPgM+B4b25z4TOtc+Bzr/OvSDOus6xzrrhv7bPgiDP
g8664b2zz4jOsc+DzrjOsc65IM604b2zzr/OvS4gzr/hvZDOtOG9s869IM6/4b2Wzr0g4byEzrvO
u86/IM68zr/OuSDOtM6/zrrOv+G/ps+DzrnOvQogIM6/4byxIM+E4b2wIM+Ezr/Ouc6x4b+mz4TO
sSDOu+G9s86zzr/Ovc+EzrXPgiDhvKIgz4ThvbTOvSDhvZHPgOG9uc64zrXPg865zr0sIM+AzrXP
geG9tiDhvKfPgiDOss6/z4XOu8614b27zrXPg864zrHOuSwKICDOv+G9kM+H4b22IM+E4b20zr0g
zr/hvZbPg86xzr0gz4DOsc+BzrnPg8+E4b2xzr3PhM61z4Ig4b2Rzrzhv5bOvSDhvIHOvM6xz4HP
hOG9sc69zrXOuc69LiDhvJDOs+G9vCDOtOG9sywg4b2Fz4TOuSDOvOG9s869CiAgz4DOv8+E4b6/
IOG8kM6+4b+Gzr0gz4Thv4cgz4DhvbnOu861zrkgzrrOseG9tiDPhOG9sCDOseG9kc+E4b+Gz4Ig
4byUz4fOtc65zr0g4byAz4PPhs6xzrvhv7bPgiDOus6x4b22IM6m4b23zrvOuc+Az4DOv869CiAg
z4TOuc68z4nPgeG9tc+DzrHPg864zrHOuSwgzrrOseG9tiDOvOG9sc674b6/IOG8gM66z4HOuc6y
4b+2z4Igzr/hvLbOtM6xzocg4byQz4Dhvr8g4byQzrzOv+G/piDOs+G9sc+BLCDOv+G9kCDPgOG9
sc67zrHOuQogIM6z4b2zzrPOv869zrXOvSDPhM6x4b+mz4Thvr8g4byAzrzPhuG9uc+EzrXPgc6x
zocgzr3hv6bOvSDOvOG9s869z4TOv865IM+A4b2zz4DOtc65z4POvM6xzrkgz4TOv+G/ps644b6/
IOG8sc66zrHOveG9uM69CiAgz4DPgc6/zrvOsc6yzrXhv5bOvSDhvKHOvOG/ls69IM614by2zr3O
sc65IM+E4b20zr0gz4DPgeG9vc+EzrfOvSwg4b2Fz4DPic+CIM+Ezr/hvbrPgiDPg8+FzrzOvOG9
sc+Hzr/Phc+CCiAgz4Phvb3Pg86/zrzOtc69LiDhvJDhvbDOvSDOs+G9sM+BIM+Ezr/hv6bPhM6/
IM6yzrXOss6x4b23z4nPgiDhvZHPgOG9sc+Bzr7hv4MsIM+E4b25z4TOtSDOus6x4b22IM+AzrXP
geG9tiDPhM6/4b+mCiAgz4ThvbfOvc6xIM+EzrnOvM+Jz4HhvbXPg861z4TOseG9tyDPhM65z4Ig
zrrOseG9tiDhvYPOvSDPhM+B4b25z4DOv869IOG8kM6+4b2zz4PPhM6xzrkgz4POus6/z4DOteG/
ls69zocgz4DPgeG9ts69IM604b2yCiAgz4ThvbTOvSDhvIDPgc+H4b20zr0g4b2Az4HOuOG/ts+C
IOG9kc+Azr/OuOG9s8+DzrjOsc65LCDOvOG9sc+EzrHOuc6/zr0g4byhzrPOv+G/ps68zrHOuSDP
gM61z4HhvbYgz4Thv4bPggogIM+EzrXOu861z4XPhOG/hs+CIOG9gc69z4TOuc69zr/hv6bOvSDP
gM6/zrnOteG/ls+DzrjOsc65IM674b25zrPOv869LgoKICDOlM63zrzOv8+DzrjhvbPOvc6/z4XP
giwgzpPhv70g4b6/zp/Ou8+Fzr3OuM65zrHOuuG9uM+CCgpHZW9yZ2lhbjoKCiAgRnJvbSBhIFVu
aWNvZGUgY29uZmVyZW5jZSBpbnZpdGF0aW9uOgoKICDhg5Lhg5fhg67hg53hg5Xhg5cg4YOQ4YOu
4YOa4YOQ4YOV4YOUIOGDkuGDkOGDmOGDkOGDoOGDneGDlyDhg6Dhg5Thg5Lhg5jhg6Hhg6Lhg6Dh
g5Dhg6rhg5jhg5AgVW5pY29kZS3hg5jhg6Eg4YOb4YOU4YOQ4YOX4YOUIOGDoeGDkOGDlOGDoOGD
l+GDkOGDqOGDneGDoOGDmOGDoeGDnQogIOGDmeGDneGDnOGDpOGDlOGDoOGDlOGDnOGDquGDmOGD
kOGDluGDlCDhg5Phg5Dhg6Hhg5Dhg6Hhg6zhg6Dhg5Thg5Hhg5Dhg5MsIOGDoOGDneGDm+GDlOGD
muGDmOGDqiDhg5Lhg5Dhg5jhg5vhg5Dhg6Dhg5fhg5Thg5Hhg5AgMTAtMTIg4YOb4YOQ4YOg4YOi
4YOhLAogIOGDpS4g4YOb4YOQ4YOY4YOc4YOq4YOo4YOYLCDhg5Lhg5Thg6Dhg5vhg5Dhg5zhg5jh
g5Dhg6jhg5guIOGDmeGDneGDnOGDpOGDlOGDoOGDlOGDnOGDquGDmOGDkCDhg6jhg5Thg7Dhg5nh
g6Dhg5Thg5Hhg6Eg4YOU4YOg4YOX4YOQ4YOTIOGDm+GDoeGDneGDpOGDmuGDmOGDneGDoQogIOGD
lOGDpeGDoeGDnuGDlOGDoOGDouGDlOGDkeGDoSDhg5jhg6Hhg5Thg5cg4YOT4YOQ4YOg4YOS4YOU
4YOR4YOo4YOYIOGDoOGDneGDkuGDneGDoOGDmOGDquGDkOGDkCDhg5jhg5zhg6Lhg5Thg6Dhg5zh
g5Thg6Lhg5gg4YOT4YOQIFVuaWNvZGUt4YOYLAogIOGDmOGDnOGDouGDlOGDoOGDnOGDkOGDquGD
mOGDneGDnOGDkOGDmuGDmOGDluGDkOGDquGDmOGDkCDhg5Phg5Ag4YOa4YOd4YOZ4YOQ4YOa4YOY
4YOW4YOQ4YOq4YOY4YOQLCBVbmljb2RlLeGDmOGDoSDhg5Lhg5Dhg5vhg53hg6fhg5Thg5zhg5Th
g5Hhg5AKICDhg53hg57hg5Thg6Dhg5Dhg6rhg5jhg6Phg5og4YOh4YOY4YOh4YOi4YOU4YOb4YOU
4YOR4YOh4YOQLCDhg5Phg5Ag4YOS4YOQ4YOb4YOd4YOn4YOU4YOc4YOU4YOR4YOY4YOXIOGDnuGD
oOGDneGDkuGDoOGDkOGDm+GDlOGDkeGDqOGDmCwg4YOo4YOg4YOY4YOk4YOi4YOU4YOR4YOo4YOY
LAogIOGDouGDlOGDpeGDoeGDouGDlOGDkeGDmOGDoSDhg5Phg5Dhg5vhg6Phg6jhg5Dhg5Xhg5Th
g5Hhg5Dhg6Hhg5Ag4YOT4YOQIOGDm+GDoOGDkOGDleGDkOGDmuGDlOGDnOGDneGDleGDkOGDnCDh
g5nhg53hg5vhg57hg5jhg6Phg6Lhg5Thg6Dhg6Phg5og4YOh4YOY4YOh4YOi4YOU4YOb4YOU4YOR
4YOo4YOYLgoKUnVzc2lhbjoKCiAgRnJvbSBhIFVuaWNvZGUgY29uZmVyZW5jZSBpbnZpdGF0aW9u
OgoKICDQl9Cw0YDQtdCz0LjRgdGC0YDQuNGA0YPQudGC0LXRgdGMINGB0LXQudGH0LDRgSDQvdCw
INCU0LXRgdGP0YLRg9GOINCc0LXQttC00YPQvdCw0YDQvtC00L3Rg9GOINCa0L7QvdGE0LXRgNC1
0L3RhtC40Y4g0L/QvgogIFVuaWNvZGUsINC60L7RgtC+0YDQsNGPINGB0L7RgdGC0L7QuNGC0YHR
jyAxMC0xMiDQvNCw0YDRgtCwIDE5OTcg0LPQvtC00LAg0LIg0JzQsNC50L3RhtC1INCyINCT0LXR
gNC80LDQvdC40LguCiAg0JrQvtC90YTQtdGA0LXQvdGG0LjRjyDRgdC+0LHQtdGA0LXRgiDRiNC4
0YDQvtC60LjQuSDQutGA0YPQsyDRjdC60YHQv9C10YDRgtC+0LIg0L/QviAg0LLQvtC/0YDQvtGB
0LDQvCDQs9C70L7QsdCw0LvRjNC90L7Qs9C+CiAg0JjQvdGC0LXRgNC90LXRgtCwINC4IFVuaWNv
ZGUsINC70L7QutCw0LvQuNC30LDRhtC40Lgg0Lgg0LjQvdGC0LXRgNC90LDRhtC40L7QvdCw0LvQ
uNC30LDRhtC40LgsINCy0L7Qv9C70L7RidC10L3QuNGOINC4CiAg0L/RgNC40LzQtdC90LXQvdC4
0Y4gVW5pY29kZSDQsiDRgNCw0LfQu9C40YfQvdGL0YUg0L7Qv9C10YDQsNGG0LjQvtC90L3Ri9GF
INGB0LjRgdGC0LXQvNCw0YUg0Lgg0L/RgNC+0LPRgNCw0LzQvNC90YvRhQogINC/0YDQuNC70L7Q
ttC10L3QuNGP0YUsINGI0YDQuNGE0YLQsNGFLCDQstC10YDRgdGC0LrQtSDQuCDQvNC90L7Qs9C+
0Y/Qt9GL0YfQvdGL0YUg0LrQvtC80L/RjNGO0YLQtdGA0L3Ri9GFINGB0LjRgdGC0LXQvNCw0YUu
CgpUaGFpIChVQ1MgTGV2ZWwgMik6CgogIEV4Y2VycHQgZnJvbSBhIHBvZXRyeSBvbiBUaGUgUm9t
YW5jZSBvZiBUaGUgVGhyZWUgS2luZ2RvbXMgKGEgQ2hpbmVzZQogIGNsYXNzaWMgJ1NhbiBHdWEn
KToKCiAgWy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tXQogICAg4LmPIOC5geC4nOC5iOC4meC4lOC4tOC4meC4ruC4seC5iOC4meC5gOC4quC4t+C5
iOC4reC4oeC5guC4l+C4o+C4oeC5geC4quC4meC4quC4seC4h+C5gOC4p+C4iiAg4Lie4Lij4Liw
4Lib4LiB4LmA4LiB4Lio4LiB4Lit4LiH4Lia4Li54LmK4LiB4Li54LmJ4LiC4Li24LmJ4LiZ4LmD
4Lir4Lih4LmICiAg4Liq4Li04Lia4Liq4Lit4LiH4LiB4Lip4Lix4LiV4Lij4Li04Lii4LmM4LiB
4LmI4Lit4LiZ4Lir4LiZ4LmJ4Liy4LmB4Lil4LiW4Lix4LiU4LmE4LibICAgICAgIOC4quC4reC4
h+C4reC4h+C4hOC5jOC5hOC4i+C4o+C5ieC5guC4h+C5iOC5gOC4guC4peC4suC5gOC4muC4suC4
m+C4seC4jeC4jeC4sgogICAg4LiX4Lij4LiH4LiZ4Lix4Lia4LiW4Li34Lit4LiC4Lix4LiZ4LiX
4Li14LmA4Lib4LmH4LiZ4LiX4Li14LmI4Lie4Li24LmI4LiHICAgICAgICAgICDguJrguYnguLLg
uJnguYDguKHguLfguK3guIfguIjguLbguIfguKfguLTguJvguKPguLTguJXguYDguJvguYfguJng
uJnguLHguIHguKvguJnguLIKICDguYLguK7guIjguLTguYvguJnguYDguKPguLXguKLguIHguJfg
uLHguJ7guJfguLHguYjguKfguKvguLHguKfguYDguKHguLfguK3guIfguKHguLIgICAgICAgICDg
uKvguKHguLLguKLguIjguLDguIbguYjguLLguKHguJTguIrguLHguYjguKfguJXguLHguKfguKrg
uLPguITguLHguI0KICAgIOC5gOC4q+C4oeC4t+C4reC4meC4guC4seC4muC5hOC4quC5hOC4peC5
iOC5gOC4quC4t+C4reC4iOC4suC4geC5gOC4hOC4q+C4siAgICAgIOC4o+C4seC4muC4q+C4oeC4
suC4m+C5iOC4suC5gOC4guC5ieC4suC4oeC4suC5gOC4peC4ouC4reC4suC4quC4seC4jQogIOC4
neC5iOC4suC4ouC4reC5ieC4reC4h+C4reC4uOC5ieC4meC4ouC4uOC5geC4ouC4geC5g+C4q+C5
ieC5geC4leC4geC4geC4seC4mSAgICAgICAgICDguYPguIrguYnguKrguLLguKfguJnguLHguYng
uJnguYDguJvguYfguJnguIrguJnguKfguJnguIrguLfguYjguJnguIrguKfguJnguYPguIgKICAg
IOC4nuC4peC4seC4meC4peC4tOC4ieC4uOC4ouC4geC4uOC4ouC4geC4teC4geC4peC4seC4muC4
geC5iOC4reC5gOC4q+C4leC4uCAgICAgICAgICDguIrguYjguLLguIfguK3guLLguYDguJ7guKjg
uIjguKPguLTguIfguKvguJnguLLguJ/guYnguLLguKPguYnguK3guIfguYTguKvguYkKICDguJXg
uYnguK3guIfguKPguJrguKPguLLguIbguYjguLLguJ/guLHguJnguIjguJnguJrguKPguKPguKXg
uLHguKIgICAgICAgICAgIOC4pOC5heC4q+C4suC5g+C4hOC4o+C4hOC5ieC4s+C4iuC4ueC4geC4
ueC5ieC4muC4o+C4o+C4peC4seC4h+C4geC5jCDguK8KCiAgKFRoZSBhYm92ZSBpcyBhIHR3by1j
b2x1bW4gdGV4dC4gSWYgY29tYmluaW5nIGNoYXJhY3RlcnMgYXJlIGhhbmRsZWQKICBjb3JyZWN0
bHksIHRoZSBsaW5lcyBvZiB0aGUgc2Vjb25kIGNvbHVtbiBzaG91bGQgYmUgYWxpZ25lZCB3aXRo
IHRoZQogIHwgY2hhcmFjdGVyIGFib3ZlLikKCkV0aGlvcGlhbjoKCiAgUHJvdmVyYnMgaW4gdGhl
IEFtaGFyaWMgbGFuZ3VhZ2U6CgogIOGIsOGIm+GLrSDhiqDhi63hibPhiKjhiLUg4YqV4YyJ4Yil
IOGKoOGLreGKqOGIsOGIteGNogogIOGJpeGIiyDhiqvhiIjhip0g4Yql4YqV4Yuw4Yqg4Ymj4Ym0
IOGJoOGJhuGImOGMoOGKneGNogogIOGMjOGMpSDhi6vhiIjhiaThibEg4YmB4Yid4Yyl4YqTIOGK
kOGLjeGNogogIOGLsOGIgCDhiaDhiJXhiI3hiJkg4YmF4YmkIOGJo+GLreGMoOGMoyDhipXhjKPh
ibUg4Ymg4YyI4Yuw4YiI4YuN4Y2iCiAg4Yuo4Yqg4Y2NIOGLiOGIiOGIneGJsyDhiaDhiYXhiaQg
4Yqg4Yut4Ymz4Yi94Yid4Y2iCiAg4Yqg4Yut4YylIOGJoOGJoOGIiyDhi7Phi4sg4Ymw4YiY4Ymz
4Y2iCiAg4Yiy4Ymw4Yio4YyJ4YiZIOGLreGLsOGIqOGMjeGImeGNogogIOGJgOGItSDhiaDhiYDh
iLXhjaUg4YuV4YqV4YmB4YiL4YiNIOGJoOGKpeGMjeGIqSDhi63hiIThi7PhiI3hjaIKICDhi7Xh
iK0g4Ymi4Yur4Yml4YitIOGKoOGKleGJoOGIsyDhi6vhiLXhiK3hjaIKICDhiLDhi40g4Yql4YqV
4Yuw4Ymk4YmxIOGKpeGKleGMhSDhiqXhipXhi7Ag4YyJ4Yio4Ymk4YmxIOGKoOGLreGJsOGLs+GL
sOGIreGIneGNogogIOGKpeGMjeGLnOGIrSDhi6jhiqjhjYjhibDhi43hipUg4YyJ4Yiu4YiuIOGI
s+GLreGLmOGMi+GLjSDhiqDhi63hi7XhiK3hiJ3hjaIKICDhi6jhjI7hiKjhiaThibUg4YiM4Ymj
4Y2lIOGJouGLq+GLqeGJtSDhi63hiLXhiYUg4Ymj4Yur4Yup4Ym1IOGLq+GMoOGIjeGJheGNogog
IOGIpeGIqyDhiqjhiJjhjY3hibPhibUg4YiN4YyE4YqVIOGIi+GNi+GJs+GJteGNogogIOGLk+GJ
o+GLrSDhiJvhi7DhiKrhi6sg4Yuo4YiI4YuN4Y2lIOGMjeGKleGLtSDhi63hi54g4Yut4Yue4Yir
4YiN4Y2iCiAg4Yuo4Yql4Yi14YiL4YidIOGKoOGMiOGIqSDhiJjhiqsg4Yuo4Yqg4Yie4YirIOGK
oOGMiOGIqSDhi4vhiK3hiqvhjaIKICDhibDhipXhjIvhiI4g4Ymi4Ymw4Y2JIOGJsOGImOGIjeGI
tiDhiaPhjYnhjaIKICDhi4jhi7PhjIXhiIUg4Yib4YitIOGJouGIhuGKlSDhjKjhiK3hiLXhiIUg
4Yqg4Ym14YiL4Yiw4YuN4Y2iCiAg4Yql4YyN4Yit4YiF4YqVIOGJoOGNjeGIq+GIveGIhSDhiI3h
iq0g4YuY4Yit4YyL4Y2iCgpSdW5lczoKCiAg4Zq74ZuWIOGas+GaueGaq+GapiDhmqbhmqvhm48g
4Zq74ZuWIOGbkuGaouGbnuGbliDhmqnhmr4g4Zqm4Zqr4ZuXIOGbmuGaquGavuGbnuGbliDhmr7h
mqnhmrHhmqbhmrnhm5bhmqrhmrHhm57hmqLhm5cg4Zq54ZuB4ZqmIOGapuGaqiDhmrnhm5bhm6Xh
mqsKCiAgKE9sZCBFbmdsaXNoLCB3aGljaCB0cmFuc2NyaWJlZCBpbnRvIExhdGluIHJlYWRzICdI
ZSBjd2FldGggdGhhdCBoZQogIGJ1ZGUgdGhhZW0gbGFuZGUgbm9ydGh3ZWFyZHVtIHdpdGggdGhh
IFdlc3RzYWUuJyBhbmQgbWVhbnMgJ0hlIHNhaWQKICB0aGF0IGhlIGxpdmVkIGluIHRoZSBub3J0
aGVybiBsYW5kIG5lYXIgdGhlIFdlc3Rlcm4gU2VhLicpCgpCcmFpbGxlOgoKICDioYzioIHioKfi
oJEg4qC84qCB4qCSICDioY3ioJzioIfioJHioLnioLDioI4g4qGj4qCV4qCMCgogIOKhjeKgnOKg
h+KgkeKguSDioLrioIHioI4g4qCZ4qCR4qCB4qCZ4qCSIOKgnuKglSDioIPioJHioJvioJQg4qC6
4qCK4qC54qCyIOKhueKgu+KgkSDioIrioI4g4qCd4qCVIOKgmeKgs+Kgg+KgngogIOKgseKggeKg
nuKgkeKgp+KguyDioIHioIPioLPioJ4g4qC54qCB4qCe4qCyIOKhueKgkSDioJfioJHioJvioIri
oIzioLsg4qCV4qCLIOKgmeKgiuKgjiDioIPioKXioJfioIrioIHioIcg4qC64qCB4qCOCiAg4qCO
4qCK4qCb4qCd4qCrIOKgg+KguSDioLnioJEg4qCK4qCH4qC74qCb4qC54qCN4qCB4qCd4qCCIOKg
ueKgkSDioIrioIfioLvioIXioIIg4qC54qCRIOKgpeKgneKgmeKgu+KgnuKggeKgheKgu+Kgggog
IOKggeKgneKgmSDioLnioJEg4qCh4qCK4qCR4qCLIOKgjeKgs+Kgl+KgneKgu+KgsiDioY7ioIri
oJfioJXioJXioJvioJEg4qCO4qCK4qCb4qCd4qCrIOKgiuKgnuKgsiDioYHioJ3ioJkKICDioY7i
oIrioJfioJXioJXioJvioJHioLDioI4g4qCd4qCB4qCN4qCRIOKguuKggeKgjiDioJvioJXioJXi
oJkg4qCl4qCP4qCV4qCdIOKgsOKhoeKggeKgneKgm+KgkeKggiDioIvioJXioJcg4qCB4qCd4qC5
4qC54qCU4qCbIOKgmeKgkQogIOKgoeKgleKgjuKgkSDioJ7ioJUg4qCP4qCl4qCeIOKgmeKgiuKg
jiDioJnioIHioJ3ioJkg4qCe4qCV4qCyCgogIOKhleKgh+KgmSDioY3ioJzioIfioJHioLkg4qC6
4qCB4qCOIOKggeKgjiDioJnioJHioIHioJkg4qCB4qCOIOKggSDioJnioJXioJXioJfioKTioJ3i
oIHioIrioIfioLIKCiAg4qGN4qCU4qCZ4qCWIOKhiiDioJnioJXioJ3ioLDioJ4g4qCN4qCR4qCB
4qCdIOKgnuKglSDioI7ioIHioLkg4qC54qCB4qCeIOKhiiDioIXioJ3ioKrioIIg4qCV4qCLIOKg
jeKguQogIOKgquKgnSDioIXioJ3ioKrioIfioKvioJvioJHioIIg4qCx4qCB4qCeIOKgueKgu+Kg
kSDioIrioI4g4qCP4qCc4qCe4qCK4qCK4qCl4qCH4qCc4qCH4qC5IOKgmeKgkeKggeKgmSDioIHi
oIPioLPioJ4KICDioIEg4qCZ4qCV4qCV4qCX4qCk4qCd4qCB4qCK4qCH4qCyIOKhiiDioI3ioIri
oKPioJ4g4qCZ4qCB4qCn4qCRIOKgg+KgkeKgsiDioJTioIrioIfioJTioKvioIIg4qCN4qC54qCO
4qCR4qCH4qCL4qCCIOKgnuKglQogIOKgl+KgkeKgm+KgnOKgmSDioIEg4qCK4qCV4qCL4qCL4qCU
4qCk4qCd4qCB4qCK4qCHIOKggeKgjiDioLnioJEg4qCZ4qCR4qCB4qCZ4qCR4qCMIOKgj+KgiuKg
keKgiuKgkSDioJXioIsg4qCK4qCX4qCV4qCd4qCN4qCV4qCd4qCb4qC74qC5CiAg4qCUIOKgueKg
kSDioJ7ioJfioIHioJnioJHioLIg4qGD4qCl4qCeIOKgueKgkSDioLrioIrioI7ioJnioJXioI0g
4qCV4qCLIOKgs+KglyDioIHioJ3ioIrioJHioIzioJXioJfioI4KICDioIrioI4g4qCUIOKgueKg
kSDioI7ioIrioI3ioIrioIfioJHioIYg4qCB4qCd4qCZIOKgjeKguSDioKXioJ3ioJnioIHioIfi
oIfioKrioKsg4qCZ4qCB4qCd4qCZ4qCOCiAg4qCp4qCB4qCH4qCHIOKgneKgleKgniDioJnioIri
oIzioKXioJfioIMg4qCK4qCe4qCCIOKgleKglyDioLnioJEg4qGK4qCz4qCd4qCe4qCX4qC54qCw
4qCOIOKgmeKgleKgneKgkSDioIvioJXioJfioLIg4qG54qCzCiAg4qC64qCK4qCH4qCHIOKgueKg
u+KgkeKgi+KgleKgl+KgkSDioI/ioLvioI3ioIrioJ4g4qCN4qCRIOKgnuKglSDioJfioJHioI/i
oJHioIHioJ7ioIIg4qCR4qCN4qCP4qCZ4qCB4qCe4qCK4qCK4qCB4qCH4qCH4qC54qCCIOKgueKg
geKgngogIOKhjeKgnOKgh+KgkeKguSDioLrioIHioI4g4qCB4qCOIOKgmeKgkeKggeKgmSDioIHi
oI4g4qCBIOKgmeKgleKgleKgl+KgpOKgneKggeKgiuKgh+KgsgoKICAoVGhlIGZpcnN0IGNvdXBs
ZSBvZiBwYXJhZ3JhcGhzIG9mICJBIENocmlzdG1hcyBDYXJvbCIgYnkgRGlja2VucykKCkNvbXBh
Y3QgZm9udCBzZWxlY3Rpb24gZXhhbXBsZSB0ZXh0OgoKICBBQkNERUZHSElKS0xNTk9QUVJTVFVW
V1hZWiAvMDEyMzQ1Njc4OQogIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IMKjwqnCtcOAw4bD
lsOew5/DqcO2w78KICDigJPigJTigJjigJzigJ3igJ7igKDigKLigKbigLDihKLFk8WgxbjFvuKC
rCDOkc6SzpPOlM6pzrHOss6zzrTPiSDQkNCR0JLQk9CU0LDQsdCy0LPQtAogIOKIgOKIguKIiOKE
neKIp+KIquKJoeKIniDihpHihpfihqjihrvih6Mg4pSQ4pS84pWU4pWY4paR4pa64pi64pmAIO+s
ge+/veKRgOKCguG8oOG4gtOl4bqEyZDLkOKNjteQ1LHhg5AKCkdyZWV0aW5ncyBpbiB2YXJpb3Vz
IGxhbmd1YWdlczoKCiAgSGVsbG8gd29ybGQsIM6azrHOu863zrzhvbPPgc6xIM664b25z4POvM61
LCDjgrPjg7Pjg4vjg4Hjg48KCkJveCBkcmF3aW5nIGFsaWdubWVudCB0ZXN0czogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilogKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKWiQogIOKV
lOKVkOKVkOKVpuKVkOKVkOKVlyAg4pSM4pSA4pSA4pSs4pSA4pSA4pSQICDila3ilIDilIDilKzi
lIDilIDila4gIOKVreKUgOKUgOKUrOKUgOKUgOKVriAg4pSP4pSB4pSB4pSz4pSB4pSB4pSTICDi
lI7ilJLilI/ilJEgICDilbcgIOKVuyDilI/ilK/ilJMg4pSM4pSw4pSQICAgIOKWiiDilbHilbLi
lbHilbLilbPilbPilbMKICDilZHilIzilIDilajilIDilJDilZEgIOKUguKVlOKVkOKVp+KVkOKV
l+KUgiAg4pSC4pWS4pWQ4pWq4pWQ4pWV4pSCICDilILilZPilIDilYHilIDilZbilIIgIOKUg+KU
jOKUgOKVguKUgOKUkOKUgyAg4pSX4pWD4pWE4pSZICDilbbilLzilbTilbrilYvilbjilKDilLzi
lKgg4pSd4pWL4pSlICAgIOKWiyDilbLilbHilbLilbHilbPilbPilbMKICDilZHilILilbIg4pWx
4pSC4pWRICDilILilZEgICDilZHilIIgIOKUguKUgiDilIIg4pSC4pSCICDilILilZEg4pSDIOKV
keKUgiAg4pSD4pSCIOKVvyDilILilIMgIOKUjeKVheKVhuKUkyAgIOKVtSAg4pW5IOKUl+KUt+KU
myDilJTilLjilJggICAg4paMIOKVseKVsuKVseKVsuKVs+KVs+KVswogIOKVoOKVoSDilbMg4pWe
4pWjICDilJzilaIgICDilZ/ilKQgIOKUnOKUvOKUgOKUvOKUgOKUvOKUpCAg4pSc4pWr4pSA4pWC
4pSA4pWr4pSkICDilKPilL/ilb7ilLzilbzilL/ilKsgIOKUleKUm+KUluKUmiAgICAg4pSM4pSE
4pSE4pSQIOKVjiDilI/ilIXilIXilJMg4pSLIOKWjSDilbLilbHilbLilbHilbPilbPilbMKICDi
lZHilILilbEg4pWy4pSC4pWRICDilILilZEgICDilZHilIIgIOKUguKUgiDilIIg4pSC4pSCICDi
lILilZEg4pSDIOKVkeKUgiAg4pSD4pSCIOKVvSDilILilIMgIOKWkeKWkeKWkuKWkuKWk+KWk+KW
iOKWiCDilIogIOKUhiDilY4g4pWPICDilIcg4pSLIOKWjgogIOKVkeKUlOKUgOKVpeKUgOKUmOKV
kSAg4pSC4pWa4pWQ4pWk4pWQ4pWd4pSCICDilILilZjilZDilarilZDilZvilIIgIOKUguKVmeKU
gOKVgOKUgOKVnOKUgiAg4pSD4pSU4pSA4pWC4pSA4pSY4pSDICDilpHilpHilpLilpLilpPilpPi
lojilogg4pSKICDilIYg4pWOIOKVjyAg4pSHIOKUiyDilo8KICDilZrilZDilZDilanilZDilZDi
lZ0gIOKUlOKUgOKUgOKUtOKUgOKUgOKUmCAg4pWw4pSA4pSA4pS04pSA4pSA4pWvICDilbDilIDi
lIDilLTilIDilIDila8gIOKUl+KUgeKUgeKUu+KUgeKUgeKUmyAg4paX4paE4paW4pab4paA4pac
ICAg4pSU4pWM4pWM4pSYIOKVjiDilJfilY3ilY3ilJsg4pSLICDiloHiloLiloPiloTiloXilobi
lofilogKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilp3i
loDilpjilpniloTilp8K
--00000000000037899106365bcb76--