Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » EMF » Using ECore definitions from JAR files
Using ECore definitions from JAR files [message #400692] Wed, 03 May 2006 07:43 Go to next message
Eclipse UserFriend
Originally posted by: reverse.moc.eliga.gnittib.salguod

Hi.

I'm in a bit of a quandry. I would like to use an ECore-based object
model that has been provided to me. This model is stored within a JAR
file; that is, it's a definition that has gone through all the code
generation and has been jarred up. How do I go about extending this
without exploding the JAR, etc? If I have my model interface extend the
desired interface contained within the JAR, code is not properly
generated. That is, there are missing implementations for methods
declared on the super type. I'm gathering that EMF doesn't quite
understand that the supertype is an EMF-based API because it isn't
marked as extending EObject?

Cheers,
--Doug
Re: Using ECore definitions from JAR files [message #400695 is a reply to message #400692] Wed, 03 May 2006 11:05 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 33137
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------090500000005050007080802
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Doug,

Is this jar installed in your development environment and does it have
the .ecore and the .genmodel in it? We package all our models now to
declare where the .genmodel is for it. E.g.,

<extension point="org.eclipse.emf.ecore.generated_package">
<package
uri =
" http:///org/eclipse/emf/examples/library/extlibrary.ecore/1. 0.0"
class = "org.eclipse.emf.examples.extlibrary.EXTLibraryPackage"
*genModel = "model/extlibrary.genmodel"* />
</extension>

And then in our build.properties we specify that the models should be
included in the jar:

bin.includes = org.eclipse.emf.examples.library.jar,\
* model/,\*
META-INF/,\
plugin.xml,\
plugin.properties
jars.compile.order = org.eclipse.emf.examples.library.jar
source.org.eclipse.emf.examples.library.jar = src/
output.org.eclipse.emf.examples.library.jar = bin/

This allows the Ecore editor to use "Browse Registered Packages..." to
locate all the packages available in the installed environment for which
the development time artifacts are available:


The latest code gen patterns will produce the plugin.xml and
build.properties to support this.


Doug Bitting wrote:

> Hi.
>
> I'm in a bit of a quandry. I would like to use an ECore-based object
> model that has been provided to me. This model is stored within a JAR
> file; that is, it's a definition that has gone through all the code
> generation and has been jarred up. How do I go about extending this
> without exploding the JAR, etc? If I have my model interface extend
> the desired interface contained within the JAR, code is not properly
> generated. That is, there are missing implementations for methods
> declared on the super type. I'm gathering that EMF doesn't quite
> understand that the supertype is an EMF-based API because it isn't
> marked as extending EObject?
>
> Cheers,
> --Doug



--------------090500000005050007080802
Content-Type: multipart/related;
boundary="------------000707020304070902040000"


--------------000707020304070902040000
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Doug,<br>
<br>
Is this jar installed in your development environment and does it have
the .ecore and the .genmodel in it?&nbsp; We package all our models now to
declare where the .genmodel is for it.&nbsp; E.g.,<br>
<blockquote>&nbsp; &lt;extension
point="org.eclipse.emf.ecore.generated_package"&gt;<br >
&nbsp;&nbsp;&nbsp; &lt;package <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uri =
<a class="moz-txt-link-rfc2396E" href=" http:///org/eclipse/emf/examples/library/extlibrary.ecore/1. 0.0">" http:///org/eclipse/emf/examples/library/extlibrary.ecore/1. 0.0"</a> <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class = "org.eclipse.emf.examples.extlibrary.EXTLibraryPackage"<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>genModel = "model/extlibrary.genmodel"</b> /&gt; <br>
&nbsp; &lt;/extension&gt;<br>
</blockquote>
And then in our build.properties we specify that the models should be
included in the jar:<br>
<blockquote>bin.includes = org.eclipse.emf.examples.library.jar,\<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; <b> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; model/,\</b><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; META-INF/,\<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; plugin.xml,\<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; plugin.properties<br>
jars.compile.order = org.eclipse.emf.examples.library.jar<br>
source.org.eclipse.emf.examples.library.jar = src/<br>
output.org.eclipse.emf.examples.library.jar = bin/<br>
</blockquote>
This allows the Ecore editor to use "Browse Registered Packages..." to
locate all the packages available in the installed environment for
which the development time artifacts are available:<br>
<blockquote><img src="cid:part1.06090507.09020205@ca.ibm.com" alt=""><br>
</blockquote>
The latest code gen patterns will produce the plugin.xml and
build.properties to support this. <br>
<br>
<br>
Doug Bitting wrote:
<blockquote cite="mide39muk$qn0$1@utils.eclipse.org" type="cite">Hi.
<br>
<br>
I'm in a bit of a quandry.&nbsp; I would like to use an ECore-based object
model that has been provided to me.&nbsp; This model is stored within a JAR
file; that is, it's a definition that has gone through all the code
generation and has been jarred up.&nbsp; How do I go about extending this
without exploding the JAR, etc?&nbsp; If I have my model interface extend
the desired interface contained within the JAR, code is not properly
generated.&nbsp; That is, there are missing implementations for methods
declared on the super type.&nbsp; I'm gathering that EMF doesn't quite
understand that the supertype is an EMF-based API because it isn't
marked as extending EObject?
<br>
<br>
Cheers,
<br>
--Doug
<br>
</blockquote>
<br>
</body>
</html>

--------------000707020304070902040000
Content-Type: image/jpeg;
name="moz-screenshot-6.jpg"
Content-Transfer-Encoding: base64
Content-ID: <part1.06090507.09020205@ca.ibm.com>
Content-Disposition: inline;
filename="moz-screenshot-6.jpg"

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL DBkSEw8UHRof
Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwL DBgNDRgyIRwh
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjL/wAAR
CAM/AuwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI CQoL/8QAtRAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkK
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1 dnd4eXqDhIWG
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW 19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcI CQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz UvAVYnLRChYk
NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOE
hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU 1dbX2Nna4uPk
5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDdu9W1DUbkJbPLErMBHHFw xPbpyT7VHPDr
1rH5lwdRiTON0hdRn8ahnnn06e2mt0fzA5Ksuz5SFJH3uM8Z6dvpXS+DNTu9 cgmsNWE11DFb
wuryshwSCMEg7iT756HJz1p0KjhzxtY1UPc52ct9s1D/AJ/bn/v63+NH2zUP +f25/wC/rf41
bt4lZYnYZUgE8dv0rQEFlKzkREKsQBJz8p+UZ4xnHPbn8eM07q5mYn2zUP8A n9uf+/rf40fb
NQ/5/bn/AL+t/jWxLp8YgVVGJk3hz/eI2kj2xk/XHvUBsD9pEAI3EhSSOh7j 8DTEZ32zUP8A
n9uf+/rf40fbNQ/5/bn/AL+t/jWq2mxqd3nZQDLYALDkDoCR3Hf1pv8AZ6Fe HO5lZ1BXgqM9
Tng8H1o0AzPtmof8/tz/AN/W/wAaPtmof8/tz/39b/Gtf+y082VfO+WM7S2A OefUj0//AF9a
qva7HZchsHGV5B+lAFL7ZqH/AD+3P/f1v8asW2p3UJ/fNNOuec3Ein8CDj9K 0NF0nTboal/a
Cx2tqhWV9WDJG9vJ8iiIuwIZWXB2kHaeTyyEQ6np0Vrr95FHp8dh5YWJIkHM kaltkrN/Gz5J
Le208qTTsBtWJsdQj3Qy3O4AbkNzICv/AI9+tW/7Ph/v3P8A4Eyf/FVy8Ky2 8yywsUkXof6H
1FdPYX6XsZ42TL99PT3HqKhqxSF/s+H+/c/+BMn/AMVR/Z8P9+5/8CZP/iqt UUhlX+z4f79z
/wCBMn/xVH9nw/37n/wJk/8AiqtUUAVf7Ph/v3P/AIEyf/FUf2fD/fuf/AmT /wCKq1RQBV/s
+H+/c/8AgTJ/8VR/Z8P9+5/8CZP/AIqrVFAFX+z4f79z/wCBMn/xVH9nw/37 n/wJk/8AiqtU
UAVf7Ph/v3P/AIEyf/FUf2fD/fuf/AmT/wCKq1RQBV/s+H+/c/8AgTJ/8VR/ Z8P9+5/8CZP/
AIqrVFAFX+z4f79z/wCBMn/xVH9nw/37n/wJk/8AiqtUUAVf7Ph/v3P/AIEy f/FUf2fD/fuf
/AmT/wCKq1RQBV/s+H+/c/8AgTJ/8VR/Z8P9+5/8CZP/AIqrVFAFX+z4f79z /wCBMn/xVH9n
w/37n/wJk/8AiqtUUAVf7Ph/v3P/AIEyf/FUf2fD/fuf/AmT/wCKq1RQBV/s +H+/c/8AgTJ/
8VR/Z8P9+5/8CZP/AIqrVFAFX+z4f79z/wCBMn/xVH9nw/37n/wJk/8AiqtU UAVf7Ph/v3P/
AIEyf/FUf2fD/fuf/AmT/wCKq1RQBV/s+H+/c/8AgTJ/8VR/Z8P9+5/8CZP/ AIqrVFAFX+z4
f79z/wCBMn/xVH9nw/37n/wJk/8AiqtUUAVf7Ph/v3P/AIEyf/FUf2fD/fuf /AmT/wCKq1RQ
BV/s+H+/c/8AgTJ/8VR/Z8P9+5/8CZP/AIqrVFAFX+z4f79z/wCBMn/xVH9n w/37n/wJk/8A
iqtUUAVf7Ph/v3P/AIEyf/FUf2fD/fuf/AmT/wCKq1RQBV/s+H+/c/8AgTJ/ 8VR/Z8P9+5/8
CZP/AIqrVFAFX+z4f79z/wCBMn/xVH9nw/37n/wJk/8AiqtUUAVf7Ph/v3P/ AIEyf/FUf2fD
/fuf/AmT/wCKq1RQBV/s+H+/c/8AgTJ/8VR/Z8P9+5/8CZP/AIqrVFAFX+z4 f79z/wCBMn/x
VH9nw/37n/wJk/8AiqtUUAVf7Ph/v3P/AIEyf/FUf2fD/fuf/AmT/wCKq1RQ BV/s+H+/c/8A
gTJ/8VR/Z8P9+5/8CZP/AIqrVFAFX+z4f79z/wCBMn/xVH9nw/37n/wJk/8A iqtUUAVf7Ph/
v3P/AIEyf/FUf2fD/fuf/AmT/wCKq1RQBV/s+H+/c/8AgTJ/8VR/Z8P9+5/8 CZP/AIqrVFAF
X+z4f79z/wCBMn/xVH9nw/37n/wJk/8AiqtUUAVf7Ph/v3P/AIEyf/FUf2fD /fuf/AmT/wCK
q1RQBV/s+H+/c/8AgTJ/8VR/Z8P9+5/8CZP/AIqrVFAFX+z4f79z/wCBMn/x VH9nw/37n/wJ
k/8AiqtUUAVf7Ph/v3P/AIEyf/FUf2fD/fuf/AmT/wCKq1RQBV/s+H+/c/8A gTJ/8VR/Z8P9
+5/8CZP/AIqrVFAFX+z4f79z/wCBMn/xVH9nw/37n/wJk/8AiqtUUAVf7Ph/ v3P/AIEyf/FU
f2fD/fuf/AmT/wCKq1RQBV/s+H+/c/8AgTJ/8VR/Z8P9+5/8CZP/AIqrVFAH OTWQlUAxwvhg
wWaMSKcHoVPX0/GrGnyXWlQCGxg023TAU7LVgWwMDcd+WPueapXOp3Sam9pD Cj8qFG0liSBx
wferP2i7ikEdzbGFyMhXjZSR+Nat292+/S5OrXkRw2ZigjjJ3FFC5xjOBUoh ZQwHRhg/z/pV
2H95nI/Krf2WP1NTotA3MmONkK8ZCksvsfX9BSLEyjCkjkNx6jp/Otf7LH6m j7LH6mldBYyt
smc/Lj0CjH5dPT8qNsm0jjBz/COM9h6D2rV+yx+po+yx+pougszKCyBmbglj k5UEE/SmGAsS
TyTySa2PssfqaPssfqaLoLGAunRrK0g8z5n8woZGKb9oXcFztDbRjIGccURa dHC5dfMJKLGN
8jMFRc7VUEkKoycAYAzW/wDZY/U0fZY/U0+ZBYxvs3tQLd0dZIm2SL91h/I+ o9q2fssfqaPs
sfqaOZBYqRaoEXbeI0bD/loqkoffjO38fzNXopY50DxSJIh/iRgRTPssfqah fS7OVy8kEbse
rMgJP6VOg9S5RVH+x7D/AJ9Yv+/a/wCFH9j2H/PrF/37X/CloBeoqj/Y9h/z 6xf9+1/wo/se
w/59Yv8Av2v+FGgF6iqP9j2H/PrF/wB+1/wo/sew/wCfWL/v2v8AhRoBeoqj /Y9h/wA+sX/f
tf8ACj+x7D/n1i/79r/hRoBeoqj/AGPYf8+sX/ftf8KP7HsP+fWL/v2v+FGg F6iqP9j2H/Pr
F/37X/Cj+x7D/n1i/wC/a/4UaAXqKo/2PYf8+sX/AH7X/Cj+x7D/AJ9Yv+/a /wCFGgF6iqP9
j2H/AD6xf9+1/wAKP7HsP+fWL/v2v+FGgF6iqP8AY9h/z6xf9+1/wo/sew/5 9Yv+/a/4UaAX
qKo/2PYf8+sX/ftf8KP7HsP+fWL/AL9r/hRoBeoqj/Y9h/z6xf8Aftf8KP7H sP8An1i/79r/
AIUaAXqKo/2PYf8APrF/37X/AAo/sew/59Yv+/a/4UaAXqKo/wBj2H/PrF/3 7X/Cj+x7D/n1
i/79r/hRoBeoqj/Y9h/z6xf9+1/wo/sew/59Yv8Av2v+FGgF6iqP9j2H/PrF /wB+1/wo/sew
/wCfWL/v2v8AhRoBeoqj/Y9h/wA+sX/ftf8ACj+x7D/n1i/79r/hRoBeoqj/ AGPYf8+sX/ft
f8KP7HsP+fWL/v2v+FGgF6iqP9j2H/PrF/37X/Cj+x7D/n1i/wC/a/4UaAXq Ko/2PYf8+sX/
AH7X/Cj+x7D/AJ9Yv+/a/wCFGgF6iqP9j2H/AD6xf9+1/wAKP7HsP+fWL/v2 v+FGgF6iqP8A
Y9h/z6xf9+1/wo/sew/59Yv+/a/4UaAXqKo/2PYf8+sX/ftf8KP7HsP+fWL/ AL9r/hRoBeoq
j/Y9h/z6xf8Aftf8KP7HsP8An1i/79r/AIUaAXqKo/2PYf8APrF/37X/AAo/ sew/59Yv+/a/
4UaAXqKo/wBj2H/PrF/37X/Cj+x7D/n1i/79r/hRoBeoqj/Y9h/z6xf9+1/w o/sew/59Yv8A
v2v+FGgF6iqP9j2H/PrF/wB+1/wo/sew/wCfWL/v2v8AhRoBeoqj/Y9h/wA+ sX/ftf8ACj+x
7D/n1i/79r/hRoBeoqj/AGPYf8+sX/ftf8KP7HsP+fWL/v2v+FGgF6iqP9j2 H/PrF/37X/Cj
+x7D/n1i/wC/a/4UaAXqKo/2PYf8+sX/AH7X/Cj+x7D/AJ9Yv+/a/wCFGgF6 iqP9j2H/AD6x
f9+1/wAKP7HsP+fWL/v2v+FGgF6iqP8AY9h/z6xf9+1/wo/sew/59Yv+/a/4 UaAXqKo/2PYf
8+sX/ftf8KP7HsP+fWL/AL9r/hRoBeoqj/Y9h/z6xf8Aftf8KP7HsP8An1i/ 79r/AIUaAXqK
o/2PYf8APrF/37X/AAo/sew/59Yv+/a/4UaAXqKo/wBj2H/PrF/37X/Cj+x7 D/n1i/79r/hR
oBeoqj/Y9h/z6xf9+1/wo/sew/59Yv8Av2v+FGgF6iqP9j2H/PrF/wB+1/wo /sew/wCfWL/v
2v8AhRoBgK2zxhA3pcwfzWutubSXVIptqRO8ACxswYsWI3Yz5mAMMOeep445 4fUiRrUxVmVg
yEFTgggDBBFbema5d20boU89nYMXklIP3Qvoc8L1pYyM+ROCvt+Fx0XG9m+5 oJBPayBLmBom
cEqCynIGM9CfUfnXMS61fDxZd2kV/eNKuow21vZG1X7M8RhiklzL5f3whmcD zAflHBHB6f7V
PfXKSzRpH5aMoCuWzkr7DH3f1ok0mxljvEeDIvJFmmIdgS6qqqwOcqwEaYK4 IKgjnmopSm43
qLUqain7phJ4ykk1C6iTRb6a1gaeNZIIJXdnh3bhzGI8Exsq4kYklQQMna+0 8T3t/wCTb2ln
p019J5rGNb9/LiWPywyuxh3pKDKv7spwM5IPFah8P6abqW4EUyvJvOFuZFRG cEM6KG2xudzZ
dQG+ZufmOYz4Z0swJGI7lWVmbz0vJlnYkAHdKG3sCFQYLEfIv90Y0IKVp4ui vtLfUILRxD9r
s7dFdwGK3CwMGOAcECfpznb154ZY+JtR1Ox0yS20iGO61G2a7ihuLzaohUR5 JZUb5i0owMcr
ySp+WtCTwzpEk8MotniETROsUE8kURaMrsJjRgjFdqAZB4VR0AFSSeH9Nexs 7QRTRRWcYht2
guZIpEQADbvRgxX5VyCcEqCckCgDOsPFUl/rz2KaXc/ZRPLbrciOXAeMsGLE xiMLlGAIkY5K
5UZO0v7jUbbXkkurm+t9NM8UcT2q25hO4qoWXeDLuaQlcp8oVkOQdxGpFomn w6gb5IXE25nV
TM5jR2zudYydisctlgATubJ+Y5JdFsp9QF7N9pkkDK4je6lMIZcbT5RbZkEA j5eCAevNAHKt
42v9R05ZrDTJoPOktXtZpUlWN0e4iQpIzxBVZlk/5ZmQY3EHgE9vCZWgjM6I kxUF1Ryyq2OQ
CQMjPfA+grLTwzpEaSoLZyrrsVWnkYQrkMBFlv3IBVSPL24KLj7q41IYlggj hQuVjUKC7l2I
AxyxJJPuTk0APooooGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFAB
RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUU
UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFAB
RRRQAUUUUAFFFFAEln4Xs9Qtku5JpVkkzkLHERwcdWQnt61G2k+H4JGjfXkj dCVZTJbAqR1B
Gyt/RP8AkEQf8C/9CNc/9vvIvMjs/EWh2CrcXAeG9tjLJu8+Q5yJ0wMEcY98 88aEF638PWdx
Cs1tq1zJE2cPH5JU9uoSql3pckN+trFezEsqlWmnjj3sd52qPJOSAhP0rb0K RJdNaSN1dHub
hlZTkEGZ8EGvL/GNpfnxjOZIWk8yfMRjsWYOvk/KAcnJAVgcd1JwOlXTpe0d r2NaUVJ2bO1t
dPSS+exur+7guRygV4mWQYzwTEOR6Y/PnGj/AMI0n/QTvvyi/wDiKz9H+0xW HhmC7x56kKwC
FduIJMAgk8gYB9SDwOlSeNNUOmJoobW/7FtbrUDDc3mYRtT7PM4GZVZRl0Qd PbvWSi4txbuR
Jq+hYGhWzXD266xdmdEV3jDQ7lViQpI2ZAJVgD32n0qT/hGk/wCgnfflF/8A EVwa+Ib1LjVL
t73yZp7S0t4dTeSOCIRLdX/lzySNG6Kskca4YRlWaVQoUMCMufVZ9W0TxFqO oaxHHJceHLm2
hSCSJotTMD36EqxQGQquxyY9g+cEqFIUOyJPSLHSbHU7OO8sNenu7WTOyaCS CRGwSDhgmDgg
j8Ksf8I0n/QTvvyi/wDiK5vxFq2paFLcWp8Qzi4tdPFxpyzpbh9Xui0uYCPL G/GyFdsIRv3v
JJZSCO916++whtfnt1v/ABBe2Km2toQ0UEP2wqMujAsTEgLY+6qjAO5mLIDp P+EaT/oJ335R
f/EVGNCtmuHt11i7M6IrvGGh3KrEhSRsyASrAHvtPpXP6D4j1G8sYZL/AFby ftVppGoiU2yt
5bXUzK1uoUD92dgRWbLL5hYscDBc3Goz+J5ZLC++zNfa2uli7WJZAbWGxklZ Ez8u5ZzP83OH
BDBguyiyA6T/AIRpP+gnfflF/wDEUf8ACNJ/0E778ov/AIiuPTxN4jPiDUl/ tXRoDC96v2G8
uf8Aj3ijEnkzSRLCHiQ7ImMjylCrnaAXQAs/E0s1vaLe+KLvT9Pd7gSazNJZ GOSZBCEjhmEX
lPE2+YglBITEwO3Yy0WQHYf8I0n/AEE778ov/iKP+EaT/oJ335Rf/EVydt40 1FdOSLV7uDT9
bu9Q0sQWEqrFIYZhaecEjf5mXe9wueSCrDOV4LLXNS/4R7wzca74p/s6HU9P N5PqQjt4FWXZ
D5cAMisg3K8rkEbmZGK7VGwFkB1n/CNJ/wBBO+/KL/4io4dCtrlC8GsXcqB2 QsjQsAysVYcJ
1DAgjsQRXN6b4m1c+MbldR1XTYLOG4uluLGS5HmW9tH5myYxCENECEjbzJJS hD8AF0Ax4ta1
DRrBIZNak0/VF0K31OHSZEhVtQ1CZ7iSZCjoZCWlCjZGVI3YXGRgsgPQP+Ea T/oJ335Rf/EU
f8I0n/QTvvyi/wDiK5s6zqyaZ9sv9e+yWVxrd3ZyXYhijFhbxSXIRi7qy7me OKMs4xhlAAcl
2y9Q1/XIksdQt7qOWSSyvIo55o4lUQJf28Qu/MEZ2hoH81mwYvlV9m0YJZAd x/wjSf8AQTvv
yi/+IqOfQra1t5bi41i7hgiQvJJI0KqigZJJKYAA5zXJ2fiTUHt7SPVvFVpZ aa73G3WrWaF1
kZBDsiM8kCwuT5k/3Ix/qgM5STJEB/YGr6O+pST3F9rr20+lMY98NvPfSGQK qqJAJLcySbmJ
O0F1KgZosgOw/wCEaT/oJ335Rf8AxFH/AAjSf9BO+/KL/wCIrzPVfD1xP4J8 WOjY0i6l1e/v
EwObmCecR853fNiBuOB9kwQfNavQLO+1mTxQ2jyyfu7OWS7muNqfvraQMLeP b/D8xkXcDn/R
MkYlFFkBc/4RpP8AoJ335Rf/ABFH/CNJ/wBBO+/KL/4iuT8S+LNUfUbOXRNU sbWwn0+G8sWu
5fK+3ySFzsEZgkkmwFi/dxmN/wB6Bkll22JvEV0seqSt4g8rUYrtoJdM/cD7 Dafa1i+1bSvm
DEBEu9y0fzbsbcAFkB0n/CNJ/wBBO+/KL/4ij/hGk/6Cd9+UX/xFc3o2s6tq fii10+2177Vp
C/apFvhDE7X0cYsyMOihOJJpoyyrjarLjeN4PAWv67q+okanf2M2+0865s4Z xLJYz5X90yrC
nkYy4KSvI5KcE7HJLIDpP+EaT/oJ335Rf/EUf8I0n/QTvvyi/wDiK3KKLIDD /wCEaT/oJ335
Rf8AxFH/AAjSf9BO+/KL/wCIrcoosgMP/hGk/wCgnfflF/8AEUf8I0n/AEE7 78ov/iK3KKLI
DD/4RpP+gnfflF/8RR/wjSf9BO+/KL/4ityiiyAw/wDhGk/6Cd9+UX/xFH/C NJ/0E778ov8A
4ityiiyAw/8AhGk/6Cd9+UX/AMRR/wAI0n/QTvvyi/8AiK3KKLIDD/4RpP8A oJ335Rf/ABFH
/CNJ/wBBO+/KL/4ityiiyAw/+EaT/oJ335Rf/EUf8I0n/QTvvyi/+Ircoosg MP8A4RpP+gnf
flF/8RR/wjSf9BO+/KL/AOIrcoosgMP/AIRpP+gnfflF/wDEUf8ACNJ/0E77 8ov/AIityiiy
Aw/+EaT/AKCd9+UX/wARR/wjSf8AQTvvyi/+IrcoosgMP/hGk/6Cd9+UX/xF H/CNJ/0E778o
v/iK3KKLIDD/AOEaT/oJ335Rf/EUf8I0n/QTvvyi/wDiK3KKLIDD/wCEaT/o J335Rf8AxFH/
AAjSf9BO+/KL/wCIrcoosgMP/hGk/wCgnfflF/8AEUf8I0n/AEE778ov/iK3 KKLIDD/4RpP+
gnfflF/8RR/wjSf9BO+/KL/4ityiiyAw/wDhGk/6Cd9+UX/xFH/CNJ/0E778 ov8A4ityiiyA
w/8AhGk/6Cd9+UX/AMRR/wAI0n/QTvvyi/8AiK3KKLIDD/4RpP8AoJ335Rf/ ABFH/CNJ/wBB
O+/KL/4ityiiyAw/+EaT/oJ335Rf/EUf8I0n/QTvvyi/+IrcoosgMP8A4RpP +gnfflF/8RR/
wjSf9BO+/KL/AOIrcoosgMP/AIRpP+gnfflF/wDEUf8ACNJ/0E778ov/AIit yiiyAw/+EaT/
AKCd9+UX/wARR/wjSf8AQTvvyi/+IrcoosgMP/hGk/6Cd9+UX/xFH/CNJ/0E 778ov/iK3KKL
IDD/AOEaT/oJ335Rf/EUf8I0n/QTvvyi/wDiK3KKLIDD/wCEaT/oJ335Rf8A xFH/AAjSf9BO
+/KL/wCIrcoosgMP/hGk/wCgnfflF/8AEUf8I0n/AEE778ov/iK3KKLIDD/4 RpP+gnfflF/8
RR/wjSf9BO+/KL/4ityiiyAw/wDhGk/6Cd9+UX/xFH/CNJ/0E778ov8A4ity iiyAw/8AhGk/
6Cd9+UX/AMRR/wAI0n/QTvvyi/8AiK3KKLIDD/4RpP8AoJ335Rf/ABFH/CNJ /wBBO+/KL/4i
tyiiyAw/+EaT/oJ335Rf/EUf8I0n/QTvvyi/+IrcoosgMP8A4RpP+gnfflF/ 8RR/wjSf9BO+
/KL/AOIrcoosgM/RP+QRB/wL/wBCNaFZ+if8giD/AIF/6Ea0KYBVC70ezvbn 7RMswl2BC0Vx
JHlQSQCFYZ5Y/nV+igDKsdGskNre+XcCZRvUSXUzhGKkHhz6MRyAfYVduLG3 u57SaePfJaSm
aA7iNjlGjJ46/K7Dn19cVHbJdQW8MPkQbY0VOJccAKDwEA/v9ABwOmflo+Ip LtfCWrOYYfNF
o/y+cduNnzHO3qPmwMc4HIzw4q7sNK7sa4mjaZoRIhlRQ7IGG4KcgEj0O1sf Q+lMup/s1s82
3dtxxnHfFeCziVJLw/ZrMBYEIKvyOvTjrXuN+ZG0djMiJKVUuqMWUNkZAJAy PfA+gravR9kl
qa1KXJbUr/25/wBO3/j/AP8AWo/tz/p2/wDH/wD61eZ6R4n1u/tftdzaWdnb 3Fkb+3e6dI0V
FKEqSsrsylX5lKIEwCUO7aLU3iDU7nT7V9OiRr28Z5YrUW4keKBMK4k3TRKJ FdlDDd8pYrht
peuW7M9D0L+3P+nb/wAf/wDrVXs7+30+BobWy8uNpZJiPNJy8jtI559WZj7Z 44rzjT/FOsaw
1vJbfYbaG9nit4UkgeVoWazW6LMwdd4wWTAC9Q2eNpfp3irU9Qtxquyzj083 NlB9k8pjL/pE
duc+bux8puOmzkLjjOQXYaHpn9uf9O3/AI//APWqxZal9smMflbMLuzuz6e3 vXjfhfxDq66Z
o9vb2CNpttBY2k0rmNQWkhhO7e0qkEeauEEbbiAAct8vq2i/8fj/APXM/wAx Tu7iN2iiiqEc
Zr2uW1hAtpfW7XMFzDtdGJdXUqNwYFgCDu6Vmjxtp63D3C2condFR5BncyqS VBO/JALMQO24
+tV/GMYlvtLjbo4Cn8VSsnXbu3ntY7e3SWFY+Plt2IP5VpRouoxtpK7Oi/4T 61/54XP/AH03
/wAXUZ8bae1wlw1nKZ0RkSQ53KrEFgDvyASqkjvtHpXnVsXWd0aWV1xkb7d0 x+LDH4V0d1pa
SeI20+2xEhIxkk4G0E/XvU1afs5crEndXR03/Ce23/PC5/76b/4umSeNbCZ4 ZJbOV3hffEzZ
JRtpXK/PwdrMMjsSO9cwNK3i2kikd4Jldi2wBkCnBJBbAHTnNSy6KIFllkuf 3CRJJuRAzHec
AYzjse57VGgzpv8AhPLb/nhcf99N/wDF0yPxpYQvNJFZyo8z75WXILttC5b5 +TtVRk9gB2rG
ksraXxcbVoVEB/gX5R/q89veoZNLSaewt0VILidWaRVYsoXJwwOTnIB7/lS0 A6P/AITu2/54
XH/fTf8AxdH/AAnVt/zwuP8Avpv/AIuuaj0dJriOKK8jfejNtBUuCO2AxGT9 fX0oXRwGPmyy
Rg3C26gxDduIzkjdgD3BOaegHTf8Jzb/APPG4/76b/4uj/hObf8A543H/fTf /F1zaaIxntYW
nAadpVJC5ClCR685x7UJo4eW0iF0vmXCLJtKH5VIJJ9OMfj7UtAOk/4Ti3/5 43H/AH03/wAX
S/8ACcW//PG4/wC+m/8Ai65a20+K6WaSO4YRRKu4uiqck4xy2Me+arXMK29y 8SypKqnh0OQR
TsB2X/Cb2/8AzxuP++m/+Lo/4TeD/njcf99N/wDF1xApRRYLnb/8JtB/zxn/ AO+m/wDi6P8A
hNoP+eM//fTf/F1xNLRYLna/8JrB/wA8Z/8Avpv/AIul/wCE1g/54z/99N/8 XXFUtFgudp/w
mkH/ADxn/wC+m/8Ai6X/AITSH/njP/303/xdcXS0WC52f/CZw/8APGf/AL7b /wCLo/4TOH/n
jP8A99t/8XXG0tFgudl/wmUP/PGf/vtv/i6P+Exh/wCeU3/fbf8AxdcdS0WC 52H/AAmMP/PK
b/vtv/i6X/hMIv8AnlN/323/AMXXH0tFgudf/wAJhF/zym/77b/4uj/hL4v+ eU3/AH23/wAX
XI0tFgudd/wl8X/PKb/vtv8A4uj/AIS6L/nlN/323/xdclS0WC51v/CXR/8A PKb/AL7b/wCL
o/4S2P8A55Tf99t/8XXJ0oosFzq/+Etj/wCeUv8A323/AMXS/wDCWR/88pf+ +2/+LrlBSiiw
XOq/4SyP/nlL/wB9t/8AF0f8JXH/AM8pf++2/wDi65YUoosFzqf+EqT/AJ5S /wDfbf8AxdH/
AAlSf88pf++3/wDi65cUCiwXOo/4SlP+ecv/AH2//wAXS/8ACUp/zzl/77f/ AOLrlxSiiwXO
n/4ShP8AnnL/AN9v/wDF0f8ACUL/AM85f++3/wDi65mlosFzpv8AhJ1/55yf 99v/APF0f8JO
v/POT/vt/wD4uuapaLBc6X/hJl/55yf99v8A/F0f8JMv/POT/vt//i65ulos Fzo/+ElX/nnJ
/wB9v/8AF0v/AAko/wCecn/fb/8Axdc5S0WC50X/AAkg/wCecn/fb/8AxdH/ AAkY/wCecn/f
b/8Axdc9S0WC50P/AAkY/wCecn/fb/8AxVH/AAkQ/wCeb/8Afb//ABVc/S0W C5v/APCRf9M3
/wC+3/8AiqX/AISH/Yf/AL7f/wCKrApaLBc3v+Eh/wBh/wDvt/8A4ql/4SD/ AGH/AO+3/wDi
qwaWiwXN3/hIP9h/++3/APiqP7f/ANh/++3/APiqw6UUWC5uf2+f7j/9/H/+ Ko/t4/3H/wC/
j/8AxVYgpRRYLm1/bx/uP/38f/4ql/t0/wBxv+/j/wDxVYopRRYLmz/bh/uN /wB/H/8AiqP7
cP8Acb/v4/8A8VWOKBRYLmz/AG239xv+/j//ABVH9tt/cb/v4/8A8VWOKUUW C5sf2039xv8A
v4//AMVUkWp3E+fKt5ZMddjSHH/j1Ygq/Z/8ec//AF0T+TUNAaH2u+/58rn/ AMif/FUwajct
M0ItpjKih2QGTcFOQCRu6Ha2PofSqlclq80tvY+O54JHimj06J0kRirKwhnI II6EGpTGd39r
vv8Anyuf/In/AMVUX9qz/afs3kyeftD+Vuk3bTnBxuzj5T+R9K8y17wTLpfh 3U9Qg8YeK2mt
bSWdFfUyVLKhYZwo4yK6rSP+R51n/r2i/wDRclNCOo+133/Plc/+RP8A4qop 9VnttnnwyReY
2xPMaRdzYJwMtycAn8DXnni/xRqfhfVz9jmhv0ubYyNZyRsTp4Xg3LGNCxh5 +YNzkfKeoF2Z
ZFn8K+bqX9pOxlY3gVFE2YmO4BPlC88Y7Y5PUiA7Lw3f3N34q16KaZ2hhhtf KjLEqmRITjJ6
njP0HoK6quM8I/8AI3eJP+uVn/KWuzpoRn6J/wAgiD/gX/oRrQrP0T/kEQf8 C/8AQjWhTAKK
KKACmyRpLG0ciK6OCrKwyGB6ginUUAZC+FfD6XDTrotgHZVX/j3XAwSRgYwD yeRyeM9BjQvY
GuLR4kIDNjGenXNT0U229xtt7nKxeDbSGSeSKx06N7iRZpmSEAyOrblZjt5Y NyCeQeaLvwba
X8bx3ljp1yjyCZ1mhDhnC7QxBXltoAz1wMV1VFTZBc5iHwnDbiMQWtjEI2Do EjC7WCeWCMDg
hPl/3eOlUrL4fafYalLqEFnYi6dlKS+Uu6FREsQSMhcqu1enufXFdpRRZBc5 VPBtpHdW90lj
py3FtGIYJRCA8SAEBVO3KrgkYHHJrY0/T5bS4aSRkIK7flJ9R7VpUUWC4UUU UxHmnjK3uZp7
FreGWQogJMak4+VMdK4nW/Dt5rA3i0urec/edYmKt/wHHX8a9Yuf9av/AFzT /wBBFQ0U6sqb
vFlWurHk+keE7jSUfZaXcksn3pGhOT7dK33fW5J1na2nEysGEi2wVs4xyQuS Mdq7milKo5u8
txKNjhgdaDKwtrgBVKBBb4Taeo24xz9KUtrTElraYgoIyhtht2g5A27ccfSu 4oqbjscNjWPt
3237PcfaP7/ke2OmMdKSJNXhSJY4LkCJi8f7k5Unrg46H06V3VFHMFjhvL1P cG+wHIBH/Hmu
Py2+1SK+tK7uYbhmZxId8G7DDoRkcH6V2tFHMFji4X1mHG2G4JViys8G4gnr gkEjNM2at50M
vkXIeFQkZERGAOg6c129FHMFjilXVVZitpIA6hWUWo2tg5GV24z71C9lfSOX azmBP92AqPyA
xXd0UcwWOD/s+9/587j/AL9n/Cl/s+9/59Lj/v2f8K7uijmCxwv2C8/59J/+ /Z/wo+wXn/Pp
P/37P+Fd1RRzBY4b7Bef8+k//fs0v2C8/wCfSf8A79mu4oo5gscR9gvP+fSf /v2aX7Def8+s
/wD37NdtRRzBY4r7Dd/8+s//AH7NL9hu/wDn1n/79mu0oo5gscX9hu/+fWf/ AL9ml+xXf/Pr
N/37NdnRRzBY437Fd/8APrN/37NL9iuv+fab/v2a7GijmCxx/wBiuv8An2m/ 79ml+xXX/PtN
/wB+zXX0UcwWOQ+x3X/PtN/3waX7Hdf8+03/AHwa66ijmCxyX2O6/wCfab/v g0v2O5/595v+
+DXWUUcwWOU+yXP/AD7y/wDfBpfslz/z7y/98Guqoo5gscqLS5/595f++DSi 0uf+feX/AL4N
dTRRzBY5cWlz/wA+8v8A3waX7Lcf8+8v/fBrp6KOYLHM/Zbj/nhL/wB8Gl+y 3H/PCX/vg10t
FHMFjmvstx/zwl/74NL9muP+eEv/AHwa6SijmCxzn2af/nhJ/wB8Gl+zT/8A PCT/AL4NdFRR
zBY577NP/wA8ZP8Avk0v2af/AJ4yf98mugoo5gsYH2ef/njJ/wB8mj7PP/zx k/75Nb9FHMFj
B+zzf88ZP++TS/Z5v+eMn/fJrdoo5gsYfkTf88pP++TS+RN/zyf/AL5NbdFH MFjF8ib/AJ5P
/wB8ml8iX/nk/wD3ya2aKOYLGN5Ev/PJ/wDvk0vky/8APJ/++TWxRRzBYyPJ l/55v/3yaXyZ
f+eb/wDfJrWoo5gsZXky/wDPN/8Avk0vlSf883/75NalFHMFjLEUn/PN/wAq URSf882/KtOi
jmCxmiKT+435UvlSf3G/KtGijmCxn+W/9xvypfLf+435Vfoo5gsUPLf+435V HczarDbeVp1t
bOzuGdrh2UAAHgBVOc59sY75406KOYLHK2tnrFnKs0Gi6KsyggObi4JGRgnB 4zz6VHJYa7Om
rJcWOmypqcccMyGeULsVZFI4TPIk654x78ddRRzBY4KbwxqtxBJBPAJYZFKP G+t37KykYIIL
cgitrToNbtdQ1HUpbeza6uIkjjjSV9mQHXJO3I4YHHOcdq6Oii4WOZij8QQ3 U91FpeiR3Fxt
86VDIHk2jC7jsycDgZ6VBbaRqa3mmBrDTLOysXkZYrLcoG9WBwu0Dqc/nXW0 UXCxH4R/5G7x
J/1ys/5S12dcZ4R/5G7xJ/1ys/5S12dUtiTP0T/kEQf8C/8AQjWhWfon/IIg /wCBf+hGtCmA
UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUActc/wCtX/rmn/oIqGprn/Wr /wBc0/8AQRXP
+K72ew0Fp7eea3c3NtGZYIhJIqvOiNtUq2W2scDaee1ZlG1RXHReKLiy0cz7 bnUhNftaWMk0
DJJKFQs5lSOMspV0mTiLPyLkYy9WovFk0txp0L6d9i+04DvqDyW6ljIybIi0 fzudpYI2xipU
45baWA6eiuVj8YS+XYTS6ciw6ksM1mUuCzGJ5oYyZBsGxgLhDtBYHDDcMAm1 /wAJJPJ4mbRY
NN8wpI6tMZwoVUS3csRjPS4wAM8qOgYlSwHQUVysvi27i0e01I6WjR6i0Y09 I5ZJHdWRpMyq
kTMhCL0QScnqAN1WrjWrqbw3aahHBNZTy3ttC8c0ZBAa5SN8B1B2sC2CVBwQ cKeAAdBRXF+I
9avrXxNDYR395a2j/Ztxs7VZ5RuS8J2r5bk5MMeeDgA9OTU8F/qV3b+GJxqM yRXl7IjMkcf+
lW4jlkidsqdrMkUZO3b99hhTjaWA62iuf0rxFdarDM8VhCssckINo1yVuYkd 8Fpo2RfLYJlg
MsGwdpIwT0FAwooooAKKKKACiiigAooooAKKKKACrMjRxMqi3jb5FOSWySVB 9feq1Z3jOaW3
8K6zPBI8U0emSOkiMVZWEOQQR0INAjX86P8A59ovzb/4qjzo/wDn2i/Nv/iq 8/gvdZ0rWY9I
hEKT3UkI8q5vJryOJWjuWMglfDlswD93gLheGBclbN94k1iC0lvbWC2nWWe8 tLS0WFzIJYFn
KsWDfOGMB+QKp+ccnb8wB2/nR/8APtF+bf8AxVHnR/8APtF+bf8AxVcYfFWo zXYjsNN+0iWS
SS1UjYJ7dYpcMHzjmaNfn+7snhPV6qnxNrkjw2FnCl1qRaY3AWw8s2/liHKG OS4UMf3ynesh
UjGAwO4AHe+dH/z7Rfm3/wAVR50f/PtF+bf/ABVcZrl7PfaX4amFveN9tuVa W206+CO4NtK+
0Sq6BlBAOdwB28Z4FVYtc1mPTdKtdNge6ubpbmcGRVlkhhjlVVikV5Y/3iiR FYlyQyMCGJLA
A73zo/8An2i/Nv8A4qjzo/8An2i/Nv8A4quITxLqt3At/ALGC2ju7K1mtypn ZzOICzJMrhcA
T4HysDsznDYGTc+JNW/4RASSn7BFcaKXtZBHJK9xJ9kMpKz+YTGykHiQEtsJ DMSdoB6b50f/
AD7Rfm3/AMVR50f/AD7Rfm3/AMVXEatr/iDTbt7WG2tr1rO0W7u5kjSGNlZp AFzJOPKAERy/
7zqTgYwSbxHrn2MSQWltLNc6pPYWiRJvYLE0+XYPIgJKw427hjlsnOwAHb+d H/z7Rfm3/wAV
R50f/PtF+bf/ABVeca1rOr6v4V1y2K2dm9tpM0l2rp5xkyZ4yq7JNsbfuCSM yYL4Odp3a/iU
yyeItKthb6pdQtaXUjQafem3YsrwAMx8yPIAZhjJ+90oA7Dzo/8An2i/Nv8A 4qjzo/8An2i/
Nv8A4quIbXtZ0+ewt5US9WBrWy1OZIVVRcyFASHMinH71GwIiDnGRk7a13q2 pzWPhrXJYobk
XNyLm2tLeFleMNZ3DbXbcxfAIyVQE7ThCSFoA9A86P8A59ovzb/4qjzo/wDn 2i/Nv/iq4y48
TX0V9aNaCHUNPEltbXdxBCqx+bMUAZXM2QuJY2ACOMHG/klaUvi3WobTT7zy rOdNVsluLa3i
gKyQs8tvGiszSbZMfaOf9Xkr1XPAB6B50f8Az7Rfm3/xVHnR/wDPtF+bf/FV wsviTXoNNeW7
tYbNbWSQXt4YBcCFQiOpaCKdmXO88h3wEDEAPleua8tV8zdcwjy5FhfLj5Xb btU+jHeuB1O4
eooAuedH/wA+0X5t/wDFVj6VfzX9xqvmhVWC9aGNVHCqET8TySefX04q+k0U rypHIjtE2yRV
YEo2A2D6HDA/Qj1rG8Of6/XP+wnJ/wCgJQB0UAXbKzIH2JkAk4zuA7fWjzo/ +faL82/+Koh/
1Vx/1zH/AKEtef8AimS/TW9VubeWZINP0mK53pfyx+Qd1wS6wr8kzYQfK5AO 0AnBOAD0Dzo/
+faL82/+Ko86P/n2i/Nv/iq4+LXNYuEjVRYwtd6pcWFs5jeQIsRnJd13LkkQ hdoIwfmyc7BV
Hi7Uw0kQ0/z5Y8hRBCzGXyZp0uGUbv7kKbRzteaNWJDA0Ad150f/AD7Rfm3/ AMVR50f/AD7R
fm3/AMVXGR+I9Tkms5pY4bbTJ7lo0vBbNOk4a4aOJRtcGPcgRhIQyN5g6cBn +F/EOr6xPA9/
YJb2t7afa7YkxqwXKfKAJXaQYkGXKx4wMj5gAAdh50f/AD7Rfm3/AMVR50f/ AD7Rfm3/AMVX
mv8AxM4dJ13WmjeWO3bU2SV9augcI8yqPIXCADaFGGBAAYEEUW/iHV7Bb230 2wSeGznvLu4d
zGFKteXI2l3lTyxiJvnxJ1zgbfmYHpXnR/8APtF+bf8AxVHnR/8APtF+bf8A xVc/r+n3999n
No2+JN3mW/26Wz3k42v5sQLfLhhsxg78nlRWfYeILicWFrZ2zlb1baeyecM+ LRkDSGVixJkX
a4J5AaWDJO40gOw86P8A59ovzb/4qjzo/wDn2i/Nv/iq8/bWNdvdR020e4h0 7UjeqZLSSzci
FGt7lgrssu2dT5fBUqAVyQCNoL3xfrdvHqV6mnQixh+2xwPLsALwLLg7vO3y ZMJygjUgEncQ
uWAPQPOj/wCfaL82/wDiqPOj/wCfaL82/wDiq5K01vU01pLG8azmQXp092hg aMl/s32kSDLt
hduE2cnPzbv4a6GK8tZ/J8q5hk8+MzQ7HB8xOPmX1X5l5HHzD1oAmvLxbeyn mS1hLRxs4BL4
yBn+9VLRriW70PT7mdt8sttHI7YAyxUEnA96L2aK40O4ngkSWGS2Z0kRgysp XIII6giovD3/
ACLOlf8AXnD/AOgCgDZUolsjmJHZnYZYnoAPQj1pPOj/AOfaL82/+Kob/jzi /wCuj/yWvLpd
T1TR4LzWd7kfa9TWJpL6adZvKFyyxtA2EiUeUPmQlvkAwA7EAHqPnR/8+0X5 t/8AFUedH/z7
Rfm3/wAVXH6lrmsWCX7MLENplgNQuYxG7iZWMpESNuG0gQkbypyWzsXG01bz xdqdvDe7NP3S
2/2qEfuWI8/fJ9lU/N/Eka5HUmeDbw9AHdedH/z7Rfm3/wAVR50f/PtF+bf/ ABVcRqPifVdP
ubyKW2RJywSxszbktKpnjhWYTeYEYZkBMZ2MNwBIHznRsZdV1vQNTs7w/wBn agPMthNEVDxl
owVfYkj7GG8YG8k4DcbgAAdN50f/AD7Rfm3/AMVR50f/AD7Rfm3/AMVXnD6/ qeqef5dteWf9
qW0dhDtkY/ZZ/k8x14GXX7RLuAwR9ifJGDsu6p4q1Ow0251NEs2tzJe28EBi bej26TsHZ92G
Vjbn5Qqkbx8x28gHdedH/wA+0X5t/wDFUedH/wA+0X5t/wDFVxC39/aeNJI7 pbaOS5tLJZpw
GMMWZrnEY7lmyEVjtUnnAJWNmR+Iddmu7awdrOy1K4uUSS2nsXb7KjRTyD51 l2zZ8nAZSAMH
IB+UAHdedH/z7Rfm3/xVHnR/8+0X5t/8VXBX/jDU4NNkubS1S5m05Z5NQjSE bSkUskYYM0q+
WHMMhwBKV7g4G67c69qsel3mqQpbSQi7axtrRYT5gk+0i3DlzIFYZy23CdQN 4xuoA7Dzo/8A
n2i/Nv8A4qjzo/8An2i/Nv8A4quf0LVbu5t3j1eOG2vEuTbqm+NTIfLEg+RZ JNrbSfl3E4Xd
wDgai3lq3l7bmE+ZI0KYcfM67tyj1YbGyOo2n0NAFXVNRki1fR7SGOOOO5lk EpUElgsTEDkn
HOD68fWtCsPV/wDkZfD3/XWf/wBEtW5QBH4R/wCRu8Sf9crP+UtdnXGeEf8A kbvEn/XKz/lL
XZ1a2JM/RP8AkEQf8C/9CNaFZ+if8giD/gX/AKEa0KYBRRRQAUUUUAFFFFAB RRRQAUUUUAFF
FFABRRRQBy1z/rV/65p/6CKp3VpBewrFcJvRZI5QMkfMjh1PHoyg/hVy5/1q /wDXNP8A0EVD
WZRn3WiafePK8sLrJKyuzxTPEwdQVDqVIKttO0sMErhSSABTE8P6aklu4imx b4KRm5kMZYMW
3shba77ju3sC27BzkA1p0UDMhPDOkRpKgtnKuuxVaeRhCuQwEWW/cgFVI8vb gouPuriTT/D+
m6ZdG6topjcHfmWa5kmc7xGGyXYk8Qxj228d606KAMgeGdLWB4VjuVjLKyKt 5MPIIBA8rDfu
hhiuE2jacdOKtf2TY/2Z/Z3kf6N1xvbdu3bt+/O7fu+bfndu+bOeau0UAZlt 4f021mimSKaS
eKTzUmnuZJpAdjoBudiSoEj4UnALEgZOaJfD+my3UFwYpleC5a6jEdzIiLKw wzbVYLzzkYwd
z5++2dOigDMh8P6bDC0flTS7pIpWee5klkJjcPGN7sW2qwyFzjJPHJzp0UUA FFFFABRRRQAU
UUUAFFFFABRRRQAVFqlxp7M9reTWpR4USSGZlwylBkEHqCDUtZ8mhaPNK8su lWLyOxZna3Ql
iepJxyaBEFpD4dsI0js49LtkSQzIsKxoFcrtLADo20kZ64OKen9hRahLqEf9 mpeyrskuV2CR
144LdSPlH5D0p3/CPaJ/0B9P/wDAZP8ACj/hHtE/6A+n/wDgMn+FADT/AGE0 CQH+zTCkDW6x
nZtWIgAxgdlIVcjpwPSoXs/DEunxafJb6Q9lE2+O2ZIjGjc8hegPzH8z61Y/ 4R7RP+gPp/8A
4DJ/hR/wj2if9AfT/wDwGT/CgCV7zS5XieS5s3aJt8bNIpKNgrkehwxH0J9a q3cPh2/jeO8j
0u5R5BM6zLG4Zwu0MQerbQBnrgYqX/hHtE/6A+n/APgMn+FH/CPaJ/0B9P8A /AZP8KAM3UdK
0HVNbtNUury2eW12FE/cdUYsp37fMGGIOA4BxyCCc3baHw7ZXRurSPS4Lgxi EyxLGr7AAAuR
ztAVQB04HpUv/CPaJ/0B9P8A/AZP8KP+Ee0T/oD6f/4DJ/hQBXFn4YVLRFt9 IC2bF7ZQkWIG
J3Ep/dOQDx3qab+wrizks5/7NltZGLvA+xkZi24kqeCS3zfXmnf8I9on/QH0 /wD8Bk/wo/4R
7RP+gPp//gMn+FAFe6s/DF7BbwXdvpFxDbLsgjlSJ1iXAGFB+6MAdPQVdN5p bTpObmzMyKyL
IZF3KpIJAPYEqufoPSov+Ee0T/oD6f8A+Ayf4Uf8I9on/QH0/wD8Bk/woAiu YfDt5fRXt1Hp
c93Djyp5VjaRMHI2seRgnIx3ohh8O21091BHpcVxJJ5zyosauz4YbiRyWw7j PX5j6mpf+Ee0
T/oD6f8A+Ayf4Uf8I9on/QH0/wD8Bk/woArvZ+GJbuK7kt9Ie5ibfHMyRF0b cXyG6g7mLfUk
9TVK00Tw5a6pf6g1xZzzXqyRyK6wKuyRtzqdirvBIHL7jx15bOr/AMI9on/Q H0//AMBk/wAK
P+Ee0T/oD6f/AOAyf4UAVxZ+GFS0RbfSAtmxe2UJFiBidxKf3TkA8d6tNNoz eZulsD5kizPl
k+Z127WPqw2Lg9RtHoKb/wAI9on/AEB9P/8AAZP8KP8AhHtE/wCgPp//AIDJ /hQBKl5pcTyv
Hc2aNK2+RlkUF2wFyfU4UD6AelZ/hpleTWnRgytqTkEHII2R1b/4R7RP+gPp /wD4DJ/hVu1s
7WxiMVpbQ28ZbcUijCAn1wO/AoAtLLHDbXMkrqiCMZZjgD5171i3MPh28vor 26j0ue7hx5U8
qxtImDkbWPIwTkY71oXVna30Qiu7aG4jDbgksYcA+uD35NVP+Ee0T/oD6f8A +Ayf4UANm/sK
4s5LOf8As2W1kYu8D7GRmLbiSp4JLfN9eakim0aDyfKlsI/IjMMOxkHlpx8q +i/KvA4+UelN
/wCEe0T/AKA+n/8AgMn+FH/CPaJ/0B9P/wDAZP8ACgCJIfDsd1b3SR6WtxbR iGCULGHiQAgK
p6quCRgccmn2v9hWU9xPaf2bbzXLb55ItiNK2ScsR945J6+pp3/CPaJ/0B9P /wDAZP8ACj/h
HtE/6A+n/wDgMn+FADjNoxtZbUy2Bt5d/mRFk2PvJL5HQ7iST65Oaglh8OzS QSSx6XI9vI00
LOsZMbs25mU9mLckjknmpf8AhHtE/wCgPp//AIDJ/hR/wj2if9AfT/8AwGT/ AAoAi1CHw7q3
l/2lHpd55WfL+0rHJszjON2cZwPyp4k0sao+oG/haYwLAqtMpWNQxY7fQsSu 712J6U7/AIR7
RP8AoD6f/wCAyf4Uf8I9on/QH0//AMBk/wAKAK6WfhiLT5dPjt9ISylbfJbK kQjduOSvQn5R
+Q9Ke8Ph2S6uLp49La4uYzDPKVjLyoQAVY9WXAAweOBUv/CPaJ/0B9P/APAZ P8KP+Ee0T/oD
6f8A+Ayf4UAO87RvO87zbDzfM87fuTO/Zs3Z/vbPlz1xx0oim0aDyfKlsI/I jMMOxkHlpx8q
+i/KvA4+UelN/wCEe0T/AKA+n/8AgMn+FH/CPaJ/0B9P/wDAZP8ACgCO6utN i0aa2tp7RES3
aOKKJ1AAC4CqB+QAqTw9/wAizpX/AF5w/wDoAo/4R7RP+gPp/wD4DJ/hWhHG kMSRRIqRooVU
UYCgdAB2FAD7i5gt7OHz544t0j43uFzwvrWItn4YSe5nS30hZrpWS4kCRBpl Y5YOf4gT1z1q
/daVp19KJbuwtbiQLtDywq5A9MkdOTUH/CPaJ/0B9P8A/AZP8KAG3X9hXs9v Pd/2bcTWzb4J
JdjtE2QcqT905A6egqRptGbzN0tgfMkWZ8snzOu3ax9WGxcHqNo9BTf+Ee0T /oD6f/4DJ/hR
/wAI9on/AEB9P/8AAZP8KAIo4fDsX2zy49LT7bn7VtWMefnOd/8Aezubrnqf Wp7SbRrC1S1s
5bC2t0zsihZERcnJwBwOST+NN/4R7RP+gPp//gMn+FH/AAj2if8AQH0//wAB k/woAcs2jL5e
2WwHlyNMmGT5XbduYejHe2T1O4+pqB4fDsl1cXTx6W1xcxmGeUrGXlQgAqx6 suABg8cCpf8A
hHtE/wCgPp//AIDJ/hR/wj2if9AfT/8AwGT/AAoAdLNo0/nebLYSefGIZt7I fMTn5W9V+ZuD
x8x9ay59F8Jz29ta+RpcdpBcm5+zRpEIpH8to8uuMHhs+uVX0rS/4R7RP+gP p/8A4DJ/hR/w
j2if9AfT/wDwGT/CgCvdWfhi9gt4Lu30i4htl2QRypE6xLgDCg/dGAOnoKe8 Ph2S6uLp49La
4uYzDPKVjLyoQAVY9WXAAweOBUv/AAj2if8AQH0//wABk/wo/wCEe0T/AKA+ n/8AgMn+FADb
f+wrSCCC2/s2GG3YvDHHsVYmIIJUDoSGbp/ePrUizaMvl7ZbAeXI0yYZPldt 25h6Md7ZPU7j
6mm/8I9on/QH0/8A8Bk/wo/4R7RP+gPp/wD4DJ/hQBQ1G5guPEugeRPHLtlm zscNj9y3pXQ1
St9G0u0nWe202zhlXO2SOBVYZGOCB6VdoAj8I/8AI3eJP+uVn/KWuzrjPCP/ ACN3iT/rlZ/y
lrs6tbEmfon/ACCIP+Bf+hGtCs/RP+QRB/wL/wBCNaFMAooooAKKKKACiiig AooooAKKKKAC
iiigAooooA5a5/1q/wDXNP8A0EVk67qEmlaJdX0SK7wpuCt0PIrWuf8AWr/1 zT/0EVzvjH/k
UdS/65f1FZ9SjS/sjxn/AM89B/8AAib/AOIo/sjxn/zz0H/wIm/+IruaKuyF c4b+yPGf/PPQ
f/Aib/4ij+yPGf8Azz0H/wACJv8A4iu5oosgucN/ZHjP/nnoP/gRN/8AEUf2 R4z/AOeeg/8A
gRN/8RXc0UWQXOG/sjxn/wA89B/8CJv/AIij+yPGf/PPQf8AwIm/+IruaKLI LnDf2R4z/wCe
eg/+BE3/AMRR/ZHjP/nnoP8A4ETf/EV3NFFkFzhv7I8Z/wDPPQf/AAIm/wDi KP7I8Z/889B/
8CJv/iK7miiyC5w39keM/wDnnoP/AIETf/EUf2R4z/556D/4ETf/ABFdzRRZ Bc4b+yPGf/PP
Qf8AwIm/+Io/sjxn/wA89B/8CJv/AIiu5oosgucN/ZHjP/nnoP8A4ETf/EUf 2R4z/wCeeg/+
BE3/AMRXc0UWQXOG/sjxn/zz0H/wIm/+Io/sjxn/AM89B/8AAib/AOIruaKL ILnDf2R4z/55
6D/4ETf/ABFH9keM/wDnnoP/AIETf/EV3NFFkFzhv7I8Z/8APPQf/Aib/wCI o/sjxn/zz0H/
AMCJv/iK7miiyC5w39keM/8AnnoP/gRN/wDEUf2R4z/556D/AOBE3/xFdzRR ZBc4b+yPGf8A
zz0H/wACJv8A4ij+yPGf/PPQf/Aib/4iu5oosgucN/ZHjP8A556D/wCBE3/x FH9keM/+eeg/
+BE3/wARXc0UWQXOG/sjxn/zz0H/AMCJv/iKP7I8Z/8APPQf/Aib/wCIruaK LILnDf2R4z/5
56D/AOBE3/xFH9keM/8AnnoP/gRN/wDEV3NFFkFzhv7I8Z/889B/8CJv/iKP 7I8Z/wDPPQf/
AAIm/wDiK7miiyC5w39keM/+eeg/+BE3/wARR/ZHjP8A556D/wCBE3/xFdzR RZBc4b+yPGf/
ADz0H/wIm/8AiKP7I8Z/889B/wDAib/4iu5oosgucN/ZHjP/AJ56D/4ETf8A xFH9keM/+eeg
/wDgRN/8RXc0UWQXOG/sjxn/AM89B/8AAib/AOIo/sjxn/zz0H/wIm/+Irua KLILnDf2R4z/
AOeeg/8AgRN/8RR/ZHjP/nnoP/gRN/8AEV3NFFkFzhv7I8Z/889B/wDAib/4 ij+yPGf/ADz0
H/wIm/8AiK7miiyC5w39keM/+eeg/wDgRN/8RR/ZHjP/AJ56D/4ETf8AxFdz RRZBc4b+yPGf
/PPQf/Aib/4ij+yPGf8Azz0H/wACJv8A4iu5oosgucN/ZHjP/nnoP/gRN/8A EUf2R4z/AOee
g/8AgRN/8RXc0UWQXOG/sjxn/wA89B/8CJv/AIij+yPGf/PPQf8AwIm/+Iru aKLILnDf2R4z
/wCeeg/+BE3/AMRR/ZHjP/nnoP8A4ETf/EV3NFFkFzhv7I8Z/wDPPQf/AAIm /wDiKP7I8Z/8
89B/8CJv/iK7miiyC5w39keM/wDnnoP/AIETf/EUf2R4z/556D/4ETf/ABFd zRRZBc4b+yPG
f/PPQf8AwIm/+Io/sjxn/wA89B/8CJv/AIiu5oosgucN/ZHjP/nnoP8A4ETf /EUf2R4z/wCe
eg/+BE3/AMRXc0UWQXOG/sjxn/zz0H/wIm/+Io/sjxn/AM89B/8AAib/AOIr uaKLILnDf2R4
z/556D/4ETf/ABFH9keM/wDnnoP/AIETf/EV3NFFkFzhv7I8Z/8APPQf/Aib /wCIo/sjxn/z
z0H/AMCJv/iK7miiyC5xtrYa1biZtX/s9VCZiFo7sSdwB3FgMde2fwxy+t3V v9Uf+uZ/9CSs
Kpe40R+Ef+Ru8Sf9crP+UtdnXGeEf+Ru8Sf9crP+UtdnVLYkz9E/5BEH/Av/ AEI1oVn6J/yC
IP8AgX/oRrQpgFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHLXP8ArV/6 5p/6CKy9Y006
xpNxp4mWHz12mRgSFGRk4HWtS5/1q/8AXNP/AEEVDWZRu/2tH6xf99N/8TR/ a0frF/303/xN
YVFPmYWN3+1o/WL/AL6b/wCJo/taP1i/76b/AOJrCoo5mFjd/taP1i/76b/4 mj+1o/WL/vpv
/iawqKOZhY3f7Wj9Yv8Avpv/AImj+1o/WL/vpv8A4msKijmYWN3+1o/WL/vp v/iaP7Wj9Yv+
+m/+JrCoo5mFjd/taP1i/wC+m/8AiaP7Wj9Yv++m/wDiawqKOZhY3f7Wj9Yv ++m/+Jo/taP1
i/76b/4msKijmYWN3+1o/WL/AL6b/wCJo/taP1i/76b/AOJrCoo5mFjd/taP 1i/76b/4mj+1
o/WL/vpv/iawqKOZhY3f7Wj9Yv8Avpv/AImj+1o/WL/vpv8A4msKijmYWN3+ 1o/WL/vpv/ia
P7Wj9Yv++m/+JrCoo5mFjd/taP1i/wC+m/8AiaP7Wj9Yv++m/wDiawqKOZhY 3f7Wj9Yv++m/
+Jo/taP1i/76b/4msKijmYWN3+1o/WL/AL6b/wCJo/taP1i/76b/AOJrCoo5 mFjd/taP1i/7
6b/4mj+1o/WL/vpv/iawqKOZhY3f7Wj9Yv8Avpv/AImj+1o/WL/vpv8A4msK ijmYWN3+1o/W
L/vpv/iaP7Wj9Yv++m/+JrCoo5mFjd/taP1i/wC+m/8AiaP7Wj9Yv++m/wDi awqKOZhY3f7W
j9Yv++m/+Jo/taP1i/76b/4msKijmYWN3+1o/WL/AL6b/wCJo/taP1i/76b/ AOJrCoo5mFjd
/taP1i/76b/4mj+1o/WL/vpv/iawqKOZhY3f7Wj9Yv8Avpv/AImj+1o/WL/v pv8A4msKijmY
WN3+1o/WL/vpv/iaP7Wj9Yv++m/+JrCoo5mFjd/taP1i/wC+m/8AiaP7Wj9Y v++m/wDiawqK
OZhY3f7Wj9Yv++m/+Jo/taP1i/76b/4msKijmYWN3+1o/WL/AL6b/wCJo/ta P1i/76b/AOJr
Coo5mFjd/taP1i/76b/4mj+1o/WL/vpv/iawqKOZhY3f7Wj9Yv8Avpv/AImj +1o/WL/vpv8A
4msKijmYWN3+1o/WL/vpv/iaP7Wj9Yv++m/+JrCoo5mFjd/taP1i/wC+m/8A iaP7Wj9Yv++m
/wDiawqKOZhY3f7Wj9Yv++m/+Jo/taP1i/76b/4msKijmYWN3+1o/WL/AL6b /wCJo/taP1i/
76b/AOJrCoo5mFjd/taP1i/76b/4mj+1o/WL/vpv/iawqKOZhY3f7Wj9Yv8A vpv/AImj+1o/
WL/vpv8A4msKijmYWN3+1o/WL/vpv/iaP7Wj9Yv++m/+JrCoo5mFjd/taP1i /wC+m/8AiaP7
Wj9Yv++m/wDiawqKOZhY1L29juIm+ZM7doCljnLKe6j0rLoopN3Aj8I/8jd4 k/65Wf8AKWuz
rjPCP/I3eJP+uVn/AClrs6tbEmfon/IIg/4F/wChGtCs/RP+QRB/wL/0I1oU wCiiigAooooA
KKKKACiiigAooooAKKKKACiiigDlLwyiVfLgaX92mcSIuPlH95h+lV83X/Pj J/3/AIP/AI5V
q5/1q/8AXNP/AEEVDWZRHm6/58ZP+/8AB/8AHKM3X/PjJ/3/AIP/AI5UlFAE ebr/AJ8ZP+/8
H/xyjN1/z4yf9/4P/jlSUUAR5uv+fGT/AL/wf/HKM3X/AD4yf9/4P/jlSUUA R5uv+fGT/v8A
wf8AxyjN1/z4yf8Af+D/AOOVJRQBHm6/58ZP+/8AB/8AHKM3X/PjJ/3/AIP/ AI5UlFAEebr/
AJ8ZP+/8H/xyjN1/z4yf9/4P/jlSUUAR5uv+fGT/AL/wf/HKM3X/AD4yf9/4 P/jlSUUAR5uv
+fGT/v8Awf8AxyjN1/z4yf8Af+D/AOOVJRQBHm6/58ZP+/8AB/8AHKM3X/Pj J/3/AIP/AI5U
lFAEebr/AJ8ZP+/8H/xyjN1/z4yf9/4P/jlSUUAR5uv+fGT/AL/wf/HKM3X/ AD4yf9/4P/jl
SUUAR5uv+fGT/v8Awf8AxyjN1/z4yf8Af+D/AOOVJRQBHm6/58ZP+/8AB/8A HKM3X/PjJ/3/
AIP/AI5UlFAEebr/AJ8ZP+/8H/xyjN1/z4yf9/4P/jlSUUAR5uv+fGT/AL/w f/HKM3X/AD4y
f9/4P/jlSUUAR5uv+fGT/v8Awf8AxyjN1/z4yf8Af+D/AOOVJRQBHm6/58ZP +/8AB/8AHKM3
X/PjJ/3/AIP/AI5UlFAEebr/AJ8ZP+/8H/xyjN1/z4yf9/4P/jlSUUAR5uv+ fGT/AL/wf/HK
M3X/AD4yf9/4P/jlSUUAR5uv+fGT/v8Awf8AxyjN1/z4yf8Af+D/AOOVJRQB Hm6/58ZP+/8A
B/8AHKM3X/PjJ/3/AIP/AI5UlFAEebr/AJ8ZP+/8H/xyjN1/z4yf9/4P/jlS UUAR5uv+fGT/
AL/wf/HKM3X/AD4yf9/4P/jlSUUAR5uv+fGT/v8Awf8AxyjN1/z4yf8Af+D/ AOOVJRQBHm6/
58ZP+/8AB/8AHKM3X/PjJ/3/AIP/AI5UlFAEebr/AJ8ZP+/8H/xyjN1/z4yf 9/4P/jlSUUAR
5uv+fGT/AL/wf/HKM3X/AD4yf9/4P/jlSUUAR5uv+fGT/v8Awf8AxyjN1/z4 yf8Af+D/AOOV
JRQBHm6/58ZP+/8AB/8AHKM3X/PjJ/3/AIP/AI5UlFAEebr/AJ8ZP+/8H/xy jN1/z4yf9/4P
/jlSUUAR5uv+fGT/AL/wf/HKM3X/AD4yf9/4P/jlSUUAR5uv+fGT/v8Awf8A xyjN1/z4yf8A
f+D/AOOVJRQBHm6/58ZP+/8AB/8AHKM3X/PjJ/3/AIP/AI5UlFAEebr/AJ8Z P+/8H/xyjN1/
z4yf9/4P/jlSUUAR5uv+fGT/AL/wf/HKM3X/AD4yf9/4P/jlSUUAR5uv+fGT /v8Awf8AxyjN
1/z4yf8Af+D/AOOVJRQBHm6/58ZP+/8AB/8AHKM3X/PjJ/3/AIP/AI5UlFAE fhH/AJG7xJ/1
ys/5S12dcZ4R/wCRu8Sf9crP+UtdnVrYkz9E/wCQRB/wL/0I1oVn6J/yCIP+ Bf8AoRrQpgFF
FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHLXP+tX/rmn/oIqGprn/Wr/1z T/0EVDWZQUUU
UDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigA
ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigArCt7e71L
UNYZtb1K2jt70W8UNqtuFVfs8EhJLwuxJaRu/pW7WXo3/H1r/wD2Ff8A20ta EIP7Gn/6GTXP
/JP/AORqP7Gn/wChk1z/AMk//katSii4GX/Y0/8A0Mmuf+Sf/wAjUf2NP/0M muf+Sf8A8jVq
Vx11PcHSdW1s3Vymq2U88VvbLMyx5RysMRhzhjKuw8gufNBUj5NoBu/2NP8A 9DJrn/kn/wDI
1H9jT/8AQya5/wCSf/yNWN4YvLq/1C7jvrmZPst7efZIS5/0hBPIpkJ/iVM+ WI+i4DEHdHt6
2gDL/saf/oZNc/8AJP8A+RqP7Gn/AOhk1z/yT/8AkatSii4HHXl3qGl+OtA0 yPV7+5trzzjO
l0tuQwETsuDHEhGCuevP8+4UolsjmJHZnYZYnoAPQj1rgte/5Kj4V+k//omW u8b/AI84v+uj
/wAlpsA86P8A59ovzb/4qjzo/wDn2i/Nv/iqhopDJvOj/wCfaL82/wDiqPOj /wCfaL82/wDi
q5nTLYatcT317PeC7tr2WIQRXcsUcSpIfLDRqwDbk2Od4O4Sf3SoGLL4v1cz IsEEIt7/AMuT
Trqa22oYmuIItxVZiz5WdW58ojHTkhQR6B50f/PtF+bf/FUedH/z7Rfm3/xV cfFrOsXOrPoc
ctjHewNKZLtrZ2jdUS3bAi8wFSftIGd5/wBWePm+XF1/xDq95o+vRyWCJpck GoWkcjGNTuiS
Ubg3mlnJMR+TylwCTkhcsAeledH/AM+0X5t/8VR50f8Az7Rfm3/xVQ0UDKGv alJaW9n9niij
aa9ghZhuJCs43YySORx+PrzV+sPxP/qNM/7Cdt/6GK3KBEfhH/kbvEn/AFys /wCUtdnXGeEf
+Ru8Sf8AXKz/AJS12dWtiTP0T/kEQf8AAv8A0I1oVn6J/wAgiD/gX/oRrQpg FFFFABRRRQAU
UUUAFFFFABRRRQAUUUUAFFFFAHLXP+tX/rmn/oIqGprn/Wr/ANc0/wDQRUNZ lBRRRQMKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACuat te0rStR12G+v
4YJW1PeEZvm2/ZLUZx6cH8j6V0tZl34b0K/unurzRdOubh8b5ZrVHdsDAySM ngAfhQhFb/hM
fD3/AEFYP1/wo/4THw9/0FYP1/wp3/CH+GP+hc0j/wAAYv8A4mj/AIQ/wx/0 Lmkf+AMX/wAT
RoA3/hMfD3/QVg/X/Cqr6/4Pl1CLUJLjT3vYl2R3LRAyIvPAbGQPmP5n1q5/ wh/hj/oXNI/8
AYv/AImj/hD/AAx/0Lmkf+AMX/xNGgFdfEvhRfL23lkPLkaZMJ9123bmHHDH e2T1O4+pqb/h
MfD3/QVg/X/Cnf8ACH+GP+hc0j/wBi/+Jo/4Q/wx/wBC5pH/AIAxf/E0aAN/ 4THw9/0FYP1/
wo/4THw9/wBBWD9f8Kd/wh/hj/oXNI/8AYv/AImj/hD/AAx/0Lmkf+AMX/xN GgHMX2qWOq/E
zwvLY3Mc6J56sUPQ+TLXoVxcwW9nD588cW6R8b3C54X1rLtPDehWF0l1Z6Lp 1tcJnZLDaojr
kYOCBkcEj8asXWladfSiW7sLW4kC7Q8sKuQPTJHTk07gL/adh/z+23/f1f8A Gj+07D/n9tv+
/q/41X/4R7RP+gPp/wD4DJ/hR/wj2if9AfT/APwGT/CloBFcw+Hby+ivbqPS 57uHHlTyrG0i
YORtY8jBORjvTEs/DEV3Ldx2+kJcytvkmVIg7tuD5LdSdyhvqAeoqx/wj2if 9AfT/wDwGT/C
j/hHtE/6A+n/APgMn+FAEV3D4dv43jvI9LuUeQTOsyxuGcLtDEHq20AZ64GK Hh8OyXVxdPHp
bXFzGYZ5SsZeVCACrHqy4AGDxwKl/wCEe0T/AKA+n/8AgMn+FH/CPaJ/0B9P /wDAZP8ACgCx
/adh/wA/tt/39X/Gj+07D/n9tv8Av6v+NV/+Ee0T/oD6f/4DJ/hR/wAI9on/ AEB9P/8AAZP8
KNAM/wAQ3ltcR6akNxDIw1K2JCOCcbx6V0VZ8ehaPDKksWlWKSIwZXW3QFSO hBxwa0KAI/CP
/I3eJP8ArlZ/ylrs64zwj/yN3iT/AK5Wf8pa7OrWxJn6J/yCIP8AgX/oRrQr P0T/AJBEH/Av
/QjWhTAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPOrnxl4d87A1a3O1 VUkEkZCgHnHP
Sof+Ex8Pf9BWD9f8K7/+0YsAlCMgHBdAcH/gVH9oxen/AJET/wCKqbId2cB/ wmPh7/oKwfr/
AIUf8Jj4e/6CsH6/4V3/APaMXp/5ET/4qj+0YvT/AMiJ/wDFUWQXZwH/AAmP h7/oKwfr/hR/
wmPh7/oKwfr/AIV3/wDaMXp/5ET/AOKo/tGL0/8AIif/ABVFkF2cB/wmPh7/ AKCsH6/4Uf8A
CY+Hv+grB+v+Fd//AGjF6f8AkRP/AIqj+0YvT/yIn/xVFkF2cB/wmPh7/oKw fr/hR/wmPh7/
AKCsH6/4V3/9oxen/kRP/iqP7Ri9P/Iif/FUWQXZwH/CY+Hv+grB+v8AhR/w mPh7/oKwfr/h
Xf8A9oxen/kRP/iqP7Ri9P8AyIn/AMVRZBdnAf8ACY+Hv+grB+v+FH/CY+Hv +grB+v8AhXf/
ANoxen/kRP8A4qj+0YvT/wAiJ/8AFUWQXZwH/CY+Hv8AoKwfr/hR/wAJj4e/ 6CsH6/4V3/8A
aMXp/wCRE/8AiqP7Ri9P/Iif/FUWQXZwH/CY+Hv+grB+v+FH/CY+Hv8AoKwf r/hXf/2jF6f+
RE/+Ko/tGL0/8iJ/8VRZBdnAf8Jj4e/6CsH6/wCFH/CY+Hv+grB+v+Fd/wD2 jF6f+RE/+Ko/
tGL0/wDIif8AxVFkF2cB/wAJj4e/6CsH6/4Uf8Jj4e/6CsH6/wCFd/8A2jF6 f+RE/wDiqP7R
i9P/ACIn/wAVRZBdnAf8Jj4e/wCgrB+v+FH/AAmPh7/oKwfr/hXf/wBoxen/ AJET/wCKo/tG
L0/8iJ/8VRZBdnAf8Jj4e/6CsH6/4Uf8Jj4e/wCgrB+v+Fd//aMXp/5ET/4q j+0YvT/yIn/x
VFkF2cB/wmPh7/oKwfr/AIUf8Jj4e/6CsH6/4V3/APaMXp/5ET/4qj+0YvT/ AMiJ/wDFUWQX
ZwH/AAmPh7/oKwfr/hR/wmPh7/oKwfr/AIV3/wDaMXp/5ET/AOKo/tGL0/8A Iif/ABVFkF2c
B/wmPh7/AKCsH6/4Uf8ACY+Hv+grB+v+Fd//AGjF6f8AkRP/AIqj+0YvT/yI n/xVFkF2cB/w
mPh7/oKwfr/hR/wmPh7/AKCsH6/4V3/9oxen/kRP/iqP7Ri9P/Iif/FUWQXZ wH/CY+Hv+grB
+v8AhR/wmPh7/oKwfr/hXf8A9oxen/kRP/iqP7Ri9P8AyIn/AMVRZBdnAf8A CY+Hv+grB+v+
FH/CY+Hv+grB+v8AhXf/ANoxen/kRP8A4qj+0YvT/wAiJ/8AFUWQXZwH/CY+ Hv8AoKwfr/hR
/wAJj4e/6CsH6/4V3/8AaMXp/wCRE/8AiqP7Ri9P/Iif/FUWQXZwH/CY+Hv+ grB+v+FH/CY+
Hv8AoKwfr/hXf/2jF6f+RE/+Ko/tGL0/8iJ/8VRZBdnAf8Jj4e/6CsH6/wCF H/CY+Hv+grB+
v+Fd/wD2jF6f+RE/+Ko/tGL0/wDIif8AxVFkF2cB/wAJj4e/6CsH6/4Uf8Jj 4e/6CsH6/wCF
d/8A2jF6f+RE/wDiqhi1u1m1lNKUP9pa3a5z8pUIrKvJBPOW6ex9slkFzhv+ Ex8Pf9BWD9f8
KP8AhMfD3/QVg/X/AAr0uijlQXPNP+Ex8Pf9BWD9f8KP+Ex8Pf8AQVg/X/Cv S6KOVBc80/4T
Hw9/0FYP1/wo/wCEx8Pf9BWD9f8ACvS6KOVBc80/4THw9/0FYP1/wo/4THw9 /wBBWD9f8K9L
oo5UFzzT/hMfD3/QVg/X/Cj/AITHw9/0FYP1/wAK9Loo5UFzzT/hMfD3/QVg /X/Cj/hMfD3/
AEFYP1/wr0uijlQXPNP+Ex8Pf9BWD9f8KP8AhMfD3/QVg/X/AAr0uijlQXPN P+Ex8Pf9BWD9
f8KP+Ex8Pf8AQVg/X/CvS6KOVBc80/4THw9/0FYP1/wo/wCEx8Pf9BWD9f8A CvS6KOVBc80/
4THw9/0FYP1/wo/4THw9/wBBWD9f8K9Loo5UFzzT/hMfD3/QVg/X/Cj/AITH w9/0FYP1/wAK
9Loo5UFzzT/hMfD3/QVg/X/Cj/hMfD3/AEFYP1/wr0uijlQXPNP+Ex8Pf9BW D9f8KP8AhMfD
3/QVg/X/AAr0uijlQXPNP+Ex8Pf9BWD9f8KP+Ex8Pf8AQVg/X/CvS6KOVBc8 0/4THw9/0FYP
1/wo/wCEx8Pf9BWD9f8ACvS6KOVBc4TwJfWuo+JfEVzZzpNC0VoA6njIEua7 uiiqEZ+if8gi
D/gX/oRrQrP0T/kEQf8AAv8A0I1oUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFAHhvxg
1DU7O60OLTLy7t5J1ZStvKyFztiwDg89T+dY974c8TabYQT3njC/WaQZMcc0 jBfbdvH8q1vi
5dJY674Vu5ASkEnmMB6L5JP8qoa94jmghW4R57i0fmOZJFKHPblTg+1elh1e nHTv+Zk0m2zi
L/WfEVhP5Z8QalIp6MLuTn9a1tUsvH2iQXM1/qGoKtqyLcCPVBK0BcZTeqOS gPYkAHj1FYGs
a8dWjEZSUBX3AuyEdCOyKe/rXZeMvHOn6p4l1S2sVQ6FqU9o19d20bi4uI4l XgCQ7VIOcYVc
7RkkZz0yi00lFf1YwdtdTkR4m1//AKDmpf8AgXJ/jWxYXHifUND1XV4tevBb 6Z5PnK95Lubz
GKrtHQ8jnJFd9/wm/hRLvTJby9hvxaa080LBLqeSK2aJlRma4ydwfy2IQ4yo IBIrH8O+K9K0
u01lPE2q/wDCSfaPsRjjzO/mLHK7MuZUX7uQ+04Vs4zycQ5NrSHb8wtr8RxI 8Sa7/wBBrUf/
AAKf/GpB4j1z/oM6j/4FP/jXcaB4l0vT9Zvr678SPdX0upwyS3kv2qOK4tVB PyxxAfvATjbI
CgGAMjOen8KajZ3V/Y3GjTPZaRY32pPe7beWK3mRstExZV8vCpt4kKlcAAdK U5qP2P6+4FFv
qeSL4i1v/oM6h/4FP/jWtp8nivUbOS8h1S7W1jkERnuNREKFyCdoZ3AJwM4H T8a3brxbZSeE
bXT9PuNMjiGki1uLS7jud5mBJZkVAYdxYBlc/Nk8kdKp+Ctfg0+y+w6ncaK+ lveLNLa6haSz
OvADPHtQrkrwNx7dBk5b+FtRF13MOTW9bhmeJ9YvSyMVJS8Z1JBxwwYgj3HF aWqy+IdH+w/a
dZun+22kd5H5d1IcI+cA5xzx7/WulsvFukWui29ro72FkiXF35ttqcdyVljk b5Nwi3LJ8hCn
zMkbePU2Lfxfo0dlHFBdxR3w0WytUuJUnRY3jdjJGXixIMgqfl4O3k1Lk/5B 2/vHCjXtY/6C
19/4EP8A41qSN4mguLSCfUbmF7uBbiEy34RWjYEgli2BnB4JBrbm8Sw3Wn6k kGsWel6rcagl
zJd2Uc8UU0flbSoKoXyGySGAGWJGc1d03xZp66t4Xu5dWaKxsbJbe4tGWUlJ VjkTzNoUqQcq
AQc4PIHOBt2uoAl5nFrrmrf9BS9/8CH/AMakXW9V/wCgne/+BDf411Y8SaT/ AGB5H2v9x/Yf
2L+zfLf/AI+92fNxjy+vzbs7vbPFTeI/E+m6tF4miF81xHM1o2nI6OQpUASF AR8h656ZyetO
+tuT+tBW0+I5JdZ1X/oJ3n/f9v8AGpBrGqf9BK8/7/t/jWatSCteSPYjmfc0 V1jU/wDoI3f/
AH/b/GpF1bUv+ghd/wDf5v8AGs5alWlyR7BzPuaC6rqP/QQuv+/zf41INU1D /n/uv+/zf41n
rUq0uSPYOZ9y+up6h/z/AFz/AN/W/wAakXUr/wD5/bn/AL+t/jVBalWjkj2F zPuXV1G+/wCf
24/7+t/jUq6he/8AP5cf9/W/xqitSrS5I9g5n3Lq395/z9z/APfw/wCNSC+u /wDn6n/7+Gqa
1ItHJHsHM+5bF7d/8/U3/fw1It5df8/M3/fZqotSrS5I9g5n3LS3dz/z8S/9 9mpFurj/AJ7y
/wDfZqqtSrS5I9g5n3LIuZ/+e8n/AH2akFxN/wA9pP8Avo1WWpRS5I9g5n3L Czzf89X/AO+j
UizS/wDPR/8Avo1XWpFo5Y9g5n3LCyyf89G/OpFkf++351AtSrS5Y9g5n3Lt oqy+aZTIVRN2
FbBPIHofWpttt/duP+/w/wDiagtpY4YbqSV1RBEMsxwB8696z49VeS6VAlks Bk2+c2oRDC5x
u25z05xXDiJOM7ROuik43ZZF3G3iEaeI5RELJ7lmMoLFhIiADjgfM2eueOmO eWh+JFjcQRzw
eEPGcsMih0kSzVlZSMggg8gitiK8tm8XyTC4hMS6S4Zw42g+fF3/ABFY+g6/ Npfh3TNPn0W7
aa1tIoHZLuzKllQKcZnHGRWPtJGvJE3NO1qHV9V0iK0jmjtL+xF5mVwXAZkC jjgcMc9ecenN
6XVNIh1eDSpZLiO8uI2lhR3IEgX7wVtm0sOpUHIHOMc1zPhGM2+t+GbV2QzW 2jRQyhHDhXVo
gRkEjg0ni3S7fxd5GmXWpWEOjL+9meORGuXkGQqpuBWNRnJYZJ+7gAkmpTly olQV2alx4l06
40yG80dpLiOS/SzEzMfLPzhWKnaN46gMpIz3OCK0dF/5KJF/2CJP/RsdcpI0 8OgaTYXlzp08
9tqNvHG9iQqyRK4CsYwMRnGMqMqOxwcDq9F/5KJF/wBgeT/0bHSu3G7GklLQ 7uiiipKCiiig
AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKK
KKAM/RP+QRB/wL/0I1oVn6J/yCIP+Bf+hGtCgAooooAKKKKACiiigAooooAK KKKACiiigAoo
ooA828YeD9P8WS2f2+a6j+zRjZ5DKM7lTOcqf7ormf8AhT/h/wD5/NT/AO/s f/xFejXP+tX/
AK5p/wCgioaca9SC5YvQHTi9Wjz/AP4U/wCH/wDn81P/AL+x/wDxFKPhD4fH /L5qf/f2P/4i
u/oqvrVb+YXsodjgh8I9AH/L3qX/AH8j/wDiKUfCbQR/y96l/wB/E/8AiK7y ij61W/mD2UOx
wo+FGhD/AJe9R/7+J/8AEUo+Fehj/l71H/v4n/xFdzRR9ZrfzB7KHY4gfC3R B/y9ah/38T/4
inD4YaKP+XrUP+/if/EV2tFH1mt/MHsodjjB8MtFH/L1f/8AfxP/AIilHw10 Yf8ALzf/APfx
P/ia7Kil9Zq/zB7KHY48fDfRx/y833/faf8AxNOHw60gf8vN9/32n/xNddRR 9Zq/zB7KHY5I
fDzSR/y8Xv8A32n/AMTTh8P9KH/Lxe/99r/8TXV0UfWav8weyh2OWHgLSh/y 8Xn/AH2v/wAT
SjwJpY/5b3n/AH2v/wATXUUUfWav8weyh2OZHgbTB/y3u/8Avtf/AImnDwTp o/5b3f8A32v/
AMTXSUUfWKv8weyh2OcHgvTh/wAtrr/vtf8A4mnDwdp4/wCW11/30v8A8TXQ 0UfWKv8AMHso
djAHhDTx/wAtrn/vpf8A4mlHhOwH/La5/wC+l/wreoo+sVf5g9lDsYY8K2I/ 5a3H/fS/4U4e
GLIf8tbj/vpf8K2qKX1ir/MHsodjGHhqzH/LWf8A76H+FOHh20H/AC0n/wC+ h/hWvRR9Yq/z
B7KHYyh4ftB/y0m/76H+FKNCtR/y0m/Mf4VqUUe3qdw9lDsZo0S2H8cv5j/C nDR7cfxy/mP8
K0KKPb1O4eyh2KA0mAfxyfmP8KcNMhH8Un5j/CrtFHt6ncPZQ7FQadCP4n/M f4UosYh/E/5i
rVFHt6ncPZQ7FcWcY7t+dOFsg7tU1FHt6ncPZQ7FS502zvYhHdQRzxg7gsqB gD64I9zVX/hG
tE/6BVl/4Dp/hWrRSdWb6h7OK6GV/wAI1on/AECrL/wHT/Cj/hGtE/6BVl/4 Dp/hWrRS9rPu
P2cexnRaDpUG/wAnT7WPzEMb7IVG5T1BwOR7VH/wjWif9Aqy/wDAdP8ACtWi j2s+4ezj2MyP
w9o8UiyR6ZZpIhDKywICpHQg4qxo4x8Rox6aRJ/6Ojq3VXSP+Sjp/wBgiX/0 dHRzyluHKlsd
zRRRTAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKK
KKACiiigAooooAz9E/5BEH/Av/QjWhWfon/IIg/4F/6Ea0KACiiigAooooAK KKKACiiigAoo
ooAKKKKACiiigDlrn/Wr/wBc0/8AQRWNrv8AaX2FP7N87d5g877P5fn7MH/V +b+73btud3G3
djnFbNz/AK1f+uaf+gis+/sIdRgWGd7lFDbgbe5kgbOCPvRsCRz0zj8qzKOV PjJ7JYbW3tNR
1WWKMyXTvCxmX95IhQCCIxlw0Ui8lFOBhmBLCG38YXNgZrRbC81GWK5upZii TSOI/tc6IqbI
3BbEZADlBwoBxnb0b+GdIkSJDbOFRdjKs8iiZcliJcN++BLMT5m7Jds/ebJJ 4Z0iU5a2cAs7
SKk8irNvdnZZAGxIu53O1sqNzADBIo0AzNS17VX0+a6061tkgW/itIpJLgh5 HF2kDqy+WQin
5xuBY4wcZ4GvqmqTaZpC3LwwteNtVbYPIwdzyyqUjZ2wAx4TOFJIAyQP4f01 5LhzFNi4yXjF
zIIwxYNvVA21H3DdvUBt2TnJJqa50q0u7GK0mEzJDjy5BPIJUIGMiQNvDYJB OckEg5yaAMwe
KN/heLWYtPmkdrlLY2oOx95uBAwG8L/FkjcFJ4zt5xAfFdyuujTTpE0nlSRQ XUkCzSCOR1Rv
lYRbCiiRSWZ0OAx29N2vDomnwabHp6QubaOcXADzO7GQS+buLElid/zcnn6U S6Jp82oC+eFz
NuV2UTOI3dcbXaMHYzDC4YgkbVwflGADnn8XXkn9mu1gkNrqSw3FrLFdbpDG 1xbpiRGjwpKz
jIBboQGHDUz/AISvU7+fT1sLWzimkvRG9lcXLJMEME7hZ0MW6Fv3asMbg2OC V5N2z8GW8WrP
d3M3mwR8WlrG0qxwKJUlUYaRgNpijwECLgEFSMAaA8M6WIHjMdyzMyt573kz TqQCBtlLb1AD
OMBgPnb+8cmgGLc+OpIX1J00a5ltbNbnbKElALwB925jH5aqTGygh2OSuVGS Fn1Hxdd6fdx2
x0O5lnEC3M8MQkldI2Zwir5cbqZMI2QzKucAOwyw05/DOkXL3JmtndbhZFeI zyeWPMBDsqbt
qMwZssoDHc3PzHM9/omn6lOs11C7Nt2OEmdFlTJOyRVIEi8t8rgj5m4+Y5NA MWXWL+91zRzD
CkOmtqlxbGQXLeZK0cVwrBowu3bvjJHzH7qnAPS1L4iuodTu42sITp9rew2T zi5Pml5Vi2kR
7MbczKD8+cAnB4Bur4f01dTj1BYphPHI0yKLmTyldlZWYRbtgYh2yduSWJ6k moIvDVoNZvdS
neaZ7i5S4WIyyCJCscaDMe7YzAx7gxXIOP7oNAGYPG4+2TW32Hfvx9hlQyiK 4DTRxKS7xKNp
M0ZzH5gxk8/LufDrF/D4waxu4UW4uLS22wJcs0Ef7y5LsHZVyxRAdoXc23+6 rOugvhPRkkZx
bzHMZiRWupSkKllbESlsRYKIRsC7dq4xgVOvh/TVhljMU0nmxpE7zXMkkhCO zoQ7MWDKzsQw
OQcYPAwaAYo8bj7ZNbfYd+/H2GVDKIrgNNHEpLvEo2kzRnMfmDGTz8u6O48Z 3trcSWEmjo2o
xzuhjglmmj2LHC5bdHAz5/foMFMcH5ugOpJ4S0sJM1vE6zGBoYfNnmkjtwSr Dy494EYDIhGz
aRsGCMDEGneD7W2tJFvLi5nupJ2me5iuZ4nBKom1X8wybSI0yrOwJAPZQDQC 1capO7+HJIkm
tkv7nE0M8YWQKbaWTYw52sGVc47jFc3q3iG5t/Et5bXWr31jp1u07F7KzWZl VIbNxu/dPhQZ
pSWIHUc9BXY3Ok2NzYxWbQeXBDjyRA7QmHAwNjIQU4JX5SOCR0JFMs9E0+wn jnghfz0V182S
Z5HYOU3bmYksf3cYySSAoAwOKAMu2uNXfXtCS9uXt2m0uWe8so1jMfnoYQcN gtgGVujfwr75
3rOWeaxt5bq3+zXDxq0sG8P5bEcruHBweMjriqUHh/Tba+tbuGKZJbWN4YFW 5k8tEY5KhN23
b0wMYAVQMBVxds7SCwsbeztU8u3t41iiTJO1VGAMnk8DvQBNRRRQMKKKKACi iigAooooAKKK
KACiiigAooooAKKKKACiiigAooooAKKKKACqukf8lHT/ALBEv/o6OrVVdI/5 KOn/AGCJf/R0
dOO4mdzRRRVkhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAF
FFFABRRRQAUUUUAFFFFAGfon/IIg/wCBf+hGtCs/RP8AkEQf8C/9CNaFABRR RQAUUUUAFFFF
ABRRRQAUUUUAFFFFABRRRQBy1z/rV/65p/6CKx9ZvbqyhtRZpC89xdRWyCYk LlztBJHI5I9a
2Ln/AFq/9c0/9BFYeuf63Rf+wvaf+jBWa3K6GRr/AIjvvDF8llrF9oNtcPEJ VTN0+UJIBysR
HVT+Vaukf8JJr2lw6npj6DPZzbvLk824XOGKnhoweoPasP4seJLDRvExtrrS ku5J9KjCu23/
AJ+Vfb06YiY/OJF3BflwZA/WfCH/AJJdo3/bf/0dJXXOhGNJTMlNufKN/sjx n/zz0H/wIm/+
Io/sjxn/AM89B/8AAib/AOIruaK57I0ucN/ZHjP/AJ56D/4ETf8AxFH9keM/ +eeg/wDgRN/8
RXc0UWQXOG/sjxn/AM89B/8AAib/AOIo/sjxn/zz0H/wIm/+IruaKLILnDf2 R4z/AOeeg/8A
gRN/8RR/ZHjP/nnoP/gRN/8AEV3NFFkFzhv7I8Z/889B/wDAib/4ij+yPGf/ ADz0H/wIm/8A
iK7miiyC5w39keM/+eeg/wDgRN/8RR/ZHjP/AJ56D/4ETf8AxFdzRRZBc4b+ yPGf/PPQf/Ai
b/4ij+yPGf8Azz0H/wACJv8A4iu5oosgucN/ZHjP/nnoP/gRN/8AEUf2R4z/ AOeeg/8AgRN/
8RXc0UWQXOG/sjxn/wA89B/8CJv/AIij+yPGf/PPQf8AwIm/+IruaKLILnDf 2R4z/wCeeg/+
BE3/AMRR/ZHjP/nnoP8A4ETf/EV3NFFkFzhv7I8Z/wDPPQf/AAIm/wDiKP7I 8Z/889B/8CJv
/iK7miiyC5w39keM/wDnnoP/AIETf/EUf2R4z/556D/4ETf/ABFdzRRZBc4b +yPGf/PPQf8A
wIm/+Io/sjxn/wA89B/8CJv/AIiu5oosgucN/ZHjP/nnoP8A4ETf/EUf2R4z /wCeeg/+BE3/
AMRXc0UWQXOG/sjxn/zz0H/wIm/+Io/sjxn/AM89B/8AAib/AOIruaKLILnD f2R4z/556D/4
ETf/ABFH9keM/wDnnoP/AIETf/EV3NFFkFzhv7I8Z/8APPQf/Aib/wCIo/sj xn/zz0H/AMCJ
v/iK7miiyC5w39keM/8AnnoP/gRN/wDEUf2R4z/556D/AOBE3/xFdzRRZBc4 b+yPGf8Azz0H
/wACJv8A4ij+yPGf/PPQf/Aib/4iu5oosgucN/ZHjP8A556D/wCBE3/xFS22 leJ1uoTqA0hb
QuokNvLIz4JxwCoH6/n0rtKhuf8AVL/10T/0IUWQXOWqrpH/ACUdP+wRL/6O jq1VXSP+Sjp/
2CJf/R0dTHcbO5oooqyQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAoooo
AKKKKACiiigAooooAKKKKACiiigDP0T/AJBEH/Av/QjWhWfon/IIg/4F/wCh GtCgAooooAKK
KKACiiigAooooAKKKKACiiigAooooA5a5/1q/wDXNP8A0EVn3lgb+WxPnJEL a8iuiXBO7Y27
aMDvjHt+laFz/rV/65p/6CKzdS1KLS7eOWWOaTzJFiVIU3szNwAB1OTxxWfU oq+LvBOheM9V
i1HUbq6imjgEAW3mCrtDM2fmiPOWNb/hy3sfDGg22j2Upkt7fdsaaQlzuYsc kIB1Y9qwP7ck
/wCgFr3/AILZP8KP7ck/6AWvf+C2T/CtXUqOPK3oSoxTudn/AGtH6xf99N/8 TR/a0frF/wB9
N/8AE1xD+I1ibbJo+toeuG0+Qf0pv/CTxf8AQJ1n/wAAH/wqLsdkdz/a0frF /wB9N/8AE0f2
tH6xf99N/wDE1w3/AAk8X/QJ1n/wAf8Awo/4SeL/AKBOs/8AgA/+FK7HZHc/ 2tH6xf8AfTf/
ABNH9rR+sX/fTf8AxNcN/wAJPF/0CdZ/8AH/AMKP+Eni/wCgTrP/AIAP/hRd hZHc/wBrR+sX
/fTf/E0f2tH6xf8AfTf/ABNcN/wk8X/QJ1n/AMAH/wAKP+Eni/6BOs/+AD/4 UXYWR3P9rR+s
X/fTf/E0f2tH6xf99N/8TXDf8JPF/wBAnWf/AAAf/Cj/AISeL/oE6z/4AP8A 4UXYWR3P9rR+
sX/fTf8AxNH9rR+sX/fTf/E1w3/CTxf9AnWf/AB/8KP+Eni/6BOs/wDgA/8A hRdhZHc/2tH6
xf8AfTf/ABNH9rR+sX/fTf8AxNcN/wAJPF/0CdZ/8AH/AMKP+Eni/wCgTrP/ AIAP/hRdhZHc
/wBrR+sX/fTf/E0f2tH6xf8AfTf/ABNcN/wk8X/QJ1n/AMAH/wAKP+Eni/6B Os/+AD/4UXYW
R3P9rR+sX/fTf/E0f2tH6xf99N/8TXDf8JPF/wBAnWf/AAAf/Cj/AISeL/oE 6z/4AP8A4UXY
WR3P9rR+sX/fTf8AxNH9rR+sX/fTf/E1w3/CTxf9AnWf/AB/8KP+Eni/6BOs /wDgA/8AhRdh
ZHc/2tH6xf8AfTf/ABNH9rR+sX/fTf8AxNcN/wAJPF/0CdZ/8AH/AMKP+Eni /wCgTrP/AIAP
/hRdhZHc/wBrR+sX/fTf/E0f2tH6xf8AfTf/ABNcN/wk8X/QJ1n/AMAH/wAK P+Eni/6BOs/+
AD/4UXYWR3P9rR+sX/fTf/E0f2tH6xf99N/8TXDf8JPF/wBAnWf/AAAf/Cj/ AISeL/oE6z/4
AP8A4UXYWR3P9rR+sX/fTf8AxNH9rR+sX/fTf/E1w3/CTxf9AnWf/AB/8KP+ Eni/6BOs/wDg
A/8AhRdhZHc/2tH6xf8AfTf/ABNH9rR+sX/fTf8AxNcN/wAJPF/0CdZ/8AH/ AMKP+Eni/wCg
TrP/AIAP/hRdhZHc/wBrR+sX/fTf/E0f2tH6xf8AfTf/ABNcN/wk8X/QJ1n/ AMAH/wAKP+En
i/6BOs/+AD/4UXYWR3P9rR+sX/fTf/E0f2tH6xf99N/8TXDf8JPF/wBAnWf/ AAAf/Cj/AISe
L/oE6z/4AP8A4UXYWR3P9rR+sX/fTf8AxNH9rR+sX/fTf/E1w3/CTxf9AnWf /AB/8KP+Eni/
6BOs/wDgA/8AhRdhZHc/2tH6xf8AfTf/ABNH9rR+sX/fTf8AxNcN/wAJPF/0 CdZ/8AH/AMKP
+Eni/wCgTrP/AIAP/hRdhZHc/wBrR+sX/fTf/E019SilCqzxKNysSCx6EH+7 7VxI8SxswVdI
1ok8ACwfn9Kt2epy3l5FbDR9XhMjBfMuLJ40X3LHgU7sWhoVV0j/AJKOn/YI l/8AR0dWqq6R
/wAlHT/sES/+jo6Udxs7miiirJCiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKK
KACiiigAooooAKKKKACiiigAooooAKKKKAM/RP8AkEQf8C/9CNaFZ+if8giD /gX/AKEa0KAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigDlrn/Wr/ANc0/wDQRWHrn+t0 X/sL2n/owVuX
P+tX/rmn/oIrD1z/AFui/wDYXtP/AEYKhbldDtta1FdJ0S9v2eJDBCzqZThS 2PlB6dTgY75r
zhviTqSXVy32nTXVYUKxeU2M5bODuznkZyccDGMnPpupWY1DS7uyLmMXELxb wM7dykZx+NcI
3w2vZbi4Ems24hliRCy2fzHBbIxvwOMYOTnJ4GOeyg6ST5zWk6aXvl3xjr0e nXei3EX7+0vZ
RGzwRPOxQxSyBkEeSeUXkAjBP1GBe+NbS2/tDybea4FtpxvkZY5AGI87dG52 YiYGEj58HJIx
lSK6zxRp/wBs1jSp/N2fYpTPt2535jljx14/1mc89Md65MeEMLqEX27/AEfU o7iG8XyfnKSS
TyL5bbsKym4YEkMGwOF5rje5kXW8V6THIqSPeRkxiZzJYTqIkLMoaQlMRrlG 5fAwCenNP1XW
lttL1OSxZJb21YW0cbqdpuXVPKQ9OGMkfOcDdyRg4ybnw/rWo6lqEd1e2a2l 7p0VpdSx2hBl
G+fcIwZT5bBJBy28EkHHBFaep6ffXc0ELS+daSajFO+FVDbxRIHUA5+bM0a5 OCcSEcYBCAh1
LXbq3/tr7LHC/wBkjhgtt4Pz3smdsTcj5Tvt+eB85y3B22Z/E2kWz3ImuXRb dZGeUwSeWfLB
Lqr7drsoVsqpLDa3HynGf/ZN9P8A66Db9s1r7Vd7XX93FD/qGXn+L7Pb7hyf nf7v8LNQ8Hy3
9pc2LaiiWTNdTQKLcmSOWdZVYs2/DKPPkIUKp+783ByAaFz4s0a0tRcyXEzw eWZi8NrLKFjB
I8xtinah2sVY4DAEqSBmiTX47fU7+Oc/6JbeTCnlRPJK9wys7oEXLNiMxN8q 9Cxz8p25ni7S
dVu/ta6Qm59UsjY3LSRq0cajftbJlRl/1z5IWTgD5eMM+fwu2rWlzJfR2y3T 6pJeLFcwi4gI
VTBHujyMgwhWxuBDnPGNtAGuniDTZJLeOKWaZ58YWK2kcx/MV/eBVPlfMGHz 7cFWH8JxkaR4
1tbrTLOS+D/bJ4I5DFZWs85yYYZHJVUO0Azr3IwRznIFrT/Dk+k3EMun3VnC GjSK6iFkFjZV
kkcCJUZRHzK4538bc5IJbI0/wjquialYnTb+2Kx2jxS3Fxal1BEVpEq7BIpy 32dmznA6eho0
A6T/AISHSjNsW63oI/Na4jjZoEXZvy8wGxflw3zMOCp7jNW98SQnRb6408Ob 2JVSG3u7eSFm
mkOyEFHCttZyF3cDhuRg4z/+EFgK/ZRd+TYiy+xkW0ZjnnXyfJHnvuKS4BJX KDacYOMhiHwr
JZ/Z4Y4NOWKe9gkujp1iloqJDulRsbmLMZVRTkkbTwFOWo0A1p/E2kWz3Imu XRbdZGeUwSeW
fLBLqr7drsoVsqpLDa3HynFa98YabbabeXMXnPNb20swhmgkg3MiF/LJdRtc qN20/Nt+bBXm
s658BW8z6lsexiF4tztnGnqbkPOHDbpSfmUGRsABTgKCxAO61rHhD+1or9Pt 3lfa7mSfPk7t
m+yNrj7wzjO/P4e9GgE8euTRx6UJ5oWM3nzXcstrJaCO3jVtz7JGymHaEHcT kMSBjkXYPEGm
3GAJZomMiRbLi2khYF87CVdQQrEFQx4LfKCTxVXUtFbWdUu47tXSybS3s45I mAZjOx87rnlR
HFg4x8zde1W08IJDY3do506CG92x3UenactsskIDZX7zMGbdgsScLwoVjvoA 1JfEGmxWsF00
sxtZ9xS4S2kaIKpwXZwu1U7h2IUj5gSOagPizRlklRriZfKkeN2a1lCDYxV2 3FcbEIwz52rk
ZIyM5mveDZ9dtWjub+znla2a2Mt5YCYxjLYkiAdRHKQw3MOGKKQqgYqa48If aLS5g+3bfOtt
Rg3eTnH2uUSZ+9/BjGO/XijQB+qeL7K30vVZbJ3a6tILkxefbSpFJLCrbkDk BXIKNkK2cKx7
EjRPiHSlupYHuvL8vfumkjZISUBLgSkBGZQrZAYkbWz90457/hEtR1PTLyy1 C8hgt2udQkto
44MyIZ2nRWd95DLsmZtoVTkrk8HNpPBVvFqF1comlsJmnkVptMV5meXduEsh b548u3ygKcBV
LYzuNANC414SWtq1hFN59xex2yR3drLCWGQ8pAcKeIhIwPQlccng4ul+OWuW 0v7XDkXFkZZx
Z2087rL5dtIBtVSVXFw394fd+YEkVdsPD11Y3+mxyS+dawST3haPKRwy7Fhj ijRmYpFseU7Q
SAwGCowtVdN8GX+iyW02n6vbCaGDyCbiyZ1ZfJto+glXBzbA9T9/HbJNAN6D xDpV1NcxWt19
pe2jEsot42lwpRXUjaDncrgrjO7nGdrYjj8TaRJPbW4uXW4uWZIoHgkSUspT cChUMpAkRuQP
lO77oJqlbeEYrPQ7zSoLtzDO0JQyIG+WKKKMJIARvVhD8w+XcrsvHWmaB4R/ sXU2vfPsxu87
9xZ2f2eJfMW3HyrvbGPs+T6lz0xyAajeIdKSxivGusW8tk9+j+W3MCBSz4xn gOvHXnp1qCy1
+NY7O11Q+TqbxxLdLHE7QwzsoPlmQZRWJIAUtk7lxncM5knh6dtK1pI7XZLq tybd4xICY7Rp
mDsGJwWIlnmGeQZAuCFAqzP4Rt5fEj6ttsSZZ47h3msVkuFdFVQI5SfkXCLx tJ5YhgSCoBPf
+K9PtLFLmEvcktFuijjcuivOsJ3KFJDBi3yEBiUZQMq2Mu88aSW090oiTbHd wpGrQy+aYWNn
vPl7clh9qbjgghRtbnGi/hueSGcNqW6W4kjupmMA2m5jdGjcAEEJiNUKZJKq vzBtzNSvPBt1
dX0l/wD2pCt28iTZ+yExh1Nofu+Znbm06ZziTr8uSaAa0fibSJJ7a3Fy63Fy zJFA8EiSllKb
gUKhlIEiNyB8p3fdBNFx4m0izM4vLl7UQMFdrmCSJTlwm5SygMoZlBZcqNwJ IBBqHTvD0trr
X9rXN4k11IswmEcJjRmcQKCoLMVAW3Xgk5LE5HSsiHwD5WoQ3P2uzHlbB5kd jtnn2zwzbp5N
58xz5OC2By7HHajQDpE1vT3gebznVY54rdw8LqyySiMopUgEE+bH24zzjBw/ UNVtNM8sXBmZ
5M7I4IJJpCBjJ2IpbaMgE4wCwHcVSk0n7R4uj1KSDbFb2y7ZN+fNlzIo4z8u xHk7Ybz/AFQV
V1bws2rm2muZrG7ubdpwn2+wE8QjkcMB5YZfmUIihs9A2RluADR/4SHSjNsW 63oI/Na4jjZo
EXZvy8wGxflw3zMOCp7jMDeLNGjjVpriaBmkESxT2sscrMVZlAjZQx3bHC8f MVKjJ4qqPCrJ
bXunRXqLpd/B5VzH9mAlz5Cw5jZSqINqIceWRnOMAgCSPw7dSazbatf38Mt3 DIhIgtjFGyJH
OirguxDZuGJOcEADA5JANCLW9Pm1A2KTOZtzIrGFxG7rnciyEbGYYbKgkja2 R8pxn2fiKeaP
RXks98WrXMywzowVFhCySQsQSWLPGinGBjJztICmk/hWTS7q+1XS4NOmvF+0 XNqGsUFxJPIH
O15y3KbnIAAQ4CgtgHdoN4elhi8PW9jeJHbaOynbPCZHmVYjEBuDKFO125we cHGAQQC7quoy
2ItIra3Se6u5/IhSSQxpuCPIdzBWIG2NuinnA4zkQJr0Q8N3WsXEDotms5ni jIY7oWZXCk43
DKNgnGRjIHQF/pN5dyLOmoIs9vd/abPzLfckQ8kxFGAZS4O6Rs7gQWHULgwj w4z6TLpk1+5t
bqC7S7WOMKXknfezqTnaFLSALzwwyTtyQC/oWpXVxrTWF/aQ293B5MxEE5mj KOzhfmKId2Y2
yMYxjk5IHb3P+qX/AK6J/wChCuI0LTbq31pr+/u4bi7n8mEmCAwxhEZyvyl3 O7MjZOcYxwME
nt7n/VL/ANdE/wDQhVITOWqrpH/JR0/7BEv/AKOjq1VXSP8Ako6f9giX/wBH R0o7jZ3NFFFW
SFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABR
RRQAUUUUAZ+if8giD/gX/oRrQrP0T/kEQf8AAv8A0I1oUAFFFFABRRRQAUUU UAFFFFABRRRQ
AUUUUAFFFFAHLXP+tX/rmn/oIrD1z/W6L/2F7T/0YK3Ln/Wr/wBc0/8AQRWH rn+t0X/sL2n/
AKMFQtyuh3moXf2DTLq82b/s8Ly7c43bQTjPbpXDt8SLhLm43aZbmKOJHCrd fNklsnO3BHTj
Axg8nPHZa3py6vod9p5WJjPCyJ5q5UPj5WP0OD+Feat8N9Ykublfs2kxq8KK JRIxAOWzgbM5
HGcgDkcnnHZQVJp85rSVO3vnoOveIrPw62mPfywQWt5dm2e4nmESQ/upJAxJ 45MYXGR978DT
1Dx1oOnPdJLeRu8OmDVIljlQm6h2yt+5+b5yFhYnHGCpzzxdv9Iaa70BrRYY bfTLszNGBtAj
+zTRBUAGODIvHAwD9K5pfBWpCLXLQz2nka5b3drPLvbdbK893LG6rtxISLoB lJTbs4LZ45jA
6RPFnhuSW1ij8QaU8l3j7Mi3sZM2WKDYM/N8wK8dwR1qTWNbh0zRtSvYfLup 7JCPsySAM8xU
GOHjJDuWQAYJO9cA5GeT1HTPEms6trdlJp1jbx6pokFlc3H2uRkgzJdqTEfJ HnMFcMVOzGVG
cHNbGs2F5cTx2n2SBYb3W7af7RbRkskcCJNvm9WZ7fygcgBXj6kbSAaketwv 4gudLby1EKQh
JjIP3kziR2hA/vrHGshGSdrg4A5NiLVtNmeBItQtJHuER4VSZSZFdWZSvPIK xuQR1CMexrk5
PDd5rdrqF2sk+n3c+tyTx/MY3ijWL7Czq2M7mhV5UOAAzJ1UEtHP8P5i9y9r fSW7pcRpYtHM
UMFrtmVgML8rot5ciML8qhIB/C2QDsItW02Z4Ei1C0ke4RHhVJlJkV1ZlK88 grG5BHUIx7Gp
La/s7zb9lu4J90STjypA2Y3zsfj+FtrYPQ4OOlcXP8P5i9y9rfSW7pcRpYtH MUMFrtmVgML8
rot5ciML8qhIB/C2dTS/Dd5ol1qE9hJA3my28FtHMxKRWaStIyYAGGXz51QD 5Qqwjs2QDcj1
bTZtUm0uLULR9QhTfLaLMplReOWTOQPmXkjuPWsc+NdKm1Kyt9PubTULe5ST Nza3cbKjrLbx
hCc4JP2lTjOeAAGLAVz9z8O7i8fUrSWSNbe4e+livGvrmUo1ysw+W0yIkK+e w3AtuCngF8ro
aroGva/qGmXt3Dptm9m4DRw3bzBlF3Zz5BMSc7beQYx1K88naAdBZ+JdB1C3 uriy1vTbmC0T
fcyQ3SOsK4Jy5BwowpOT6H0oXxLoLJZOut6aUv3KWbC6TFwwYKRHz85DEDAz ycVw+j+GNZ1P
wnoR1TS7SN7DR4bWC0OozwPIxa2k3yOsQeB0Nup2rvyTjIxk2L3wNrOoHzNR u49SnvLJbO7a
S/ntVjUSTMMpbhFuQFm24YRZ8vPy+YdoB3l9f2emWcl5f3cFpax43zTyCNFy QBljwMkgfjUc
WrabM8CRahaSPcIjwqkykyK6syleeQVjcgjqEY9jWXq2n6xd3MF3CLGSTTtQ +02ULyPGJYzb
NEyyOFbawaWRgQpBCqOCSRh23gGZ4tfF5LaJPq+mS2gmjQyNbNNPdTSqCQpZ AbiMZ+Xf5eSF
4oA3Lnxjo7aHqWo6RqFjq0llFuEFpdo5kkORHHlc4Z2AVRgkk4AJ4rQfXdHj vLqzk1WxS6tI
jPcwtcIHhjABLuucquCDk8ciuDgbWfEevNc3OjyWdvd3Gmw+aqzkR/ZZLi6Z mWaGJwCRHHnb
tzKMMxBWpNQ+Ht9dRatbRmBln/tCW2uZtSuWAkuVmAH2b/VR7fPILjeSFJ2g vlQDrLnxfoMO
l3V/BqdpepbWUt+Y7SdJHeGPIZlAbkblK56Z4zVeHxWr2Wkz+XaXZvnmMn9l 3LXiRxRJIzSI
VQNIAyxoQFGGlA5OAcfxL4K1LWYNXS3ntFN7ezXEfmOwwr6YbQA4U8+Yc9/l 568VsahBqVz4
qmuLCKOOew0eRLSS5VvImmuHBAYjkBDbIWAySJR0wNwAHxhFG5tZtI1KLVC6 LFpreSZZQ6yM
rKwkMQGIZj8zg/uzxyu6OTx1YJA8yWV9JHbRNNqBVY/9ARXkjYyZcbsNDMP3 Xmf6s4yCu6nB
oevLDZztZaat9Y3v20FtReU30jQyQuZZPIXYQsgI2owwgQBFAxTfwXrCWOq2 0T2L/wBu2ktt
es0zr9j8ya5lLRjYfOx9rYYPl58sHjdhQDqF8QJ/bEdhNp99bxzyvBb3cyKs c8qqzMqjd5g4
SQhmQKQmQSCu7LtPG0l9M8Nn4e1K9dUM261kg2GEzTRxSBpJE3CRYS4wCMMO TnNRy/8ACSaZ
eatrVzpFjqLRRXBtfIvpDN5KgtHDHD5JAZyqbzvJLc8hURc+HwVeaXqOmzwa ToetfYNKsrGC
fUJTDJDJbmQmRAIZNu7ep4IIK9+DQB2D67o8d5dWcmq2KXVpEZ7mFrhA8MYA Jd1zlVwQcnjk
UQ67o9xBbzwarYyw3OfIkS4Rllw6xnaQfm+d1Xj+JgOpFc+/h7WBp91pcaWL Wq6gdTtrhrhw
8kn2wXQiePyyEXOU3hmPAbbztBpnha8Hi9PEepRWImb7TIYY3Mv2eR47WJdj si5+S3fLYUjz
NuCMkgHSWerabqFxdW9lqFpcz2j7LmOGZXaFskYcA5U5UjB9D6Vcri/B3g64 8PXFsbhY2FjZ
fYYZzqNzcNMuUywjkIS3B8pSUTd1ADAL83aUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFQ3
P+qX/ron/oQqaobn/VL/ANdE/wDQhQBy1VdI/wCSjp/2CJf/AEdHVqqukf8A JR0/7BEv/o6O
ojuUzuaKKKskKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAo
oooAKKKKACiiigAooooAz9E/5BEH/Av/AEI1oVn6J/yCIP8AgX/oRrQoAKKK KACiiigAoooo
AKKKKACiiigAooooAKKKKAOWuf8AWr/1zT/0EVh65/rdF/7C9p/6MFblz/rV /wCuaf8AoIrD
1z/W6L/2F7T/ANGCoW5XQ768uksbG4u5QxjgjaVgvUhRk4/KuVPxEsVuJlfT r5Yo41ffhCck
nORu4HA5yc5PAxz0HiCxfUvD2oWcQYyzW7rGFkKEtj5RkEcZxnsRweM15O/g vXJLq6jTRbxX
aBAC10u0Elh134PToMkccDIz2UIU5J87NaUYNe8eu3upQ2N1p1vKshe/uDbx FQMBhFJLluem
2Nhxnkj6iO81vTrD+0PtNx5f9n2gvbr5GPlwnfhuBz/qn4GT8vTkZzPEPh6L V38PWk1jHfaf
aXxkuY7rEo8sW06KW35Lneyepyc9ia5JvA97MurwzaRA817p93p2m3TmMjTk 8288sE53JG0U
8KgRhsBcEKAK5jA9Qqnq2pQ6No19qlwsjQWVvJcSLGAWKopYgZIGcD1FeZ32 iw3utajZab4M
+yXh0S3Swby7VP7Jlaa82y5WQ7Pmw+YtzfLnG7ArqNbt8z/Ylsfs02p+ILSS OYy71uPISKdp
CP4PktnjC45ZFPAYkAHSR6lDLrNzparJ59vbw3DsQNpWRpFUDnOcxNnjuOva 5Xn8mmajq6ah
q2jzeTcHxBJJbkqrNHtt/wCz5JCGO07GEkwXncqKvBb5a7eC9ZtZzNp0/lSW EsFppp2I222C
XEaSfM3PkrekbWyX+y8nMvAB6RRXm7eC9ZtZzNp0/lSWEsFppp2I222CXEaS fM3PkrekbWyX
+y8nMvGxoWiaj4eur6SK3+0wp


Ed Merks
Professional Support: https://www.macromodeling.com/
Re: Using ECore definitions from JAR files [message #400707 is a reply to message #400695] Wed, 03 May 2006 15:13 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: reverse.moc.eliga.gnittib.salguod

This is a multi-part message in MIME format.
--------------010303090404070309090702
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Ed Merks wrote:
> Doug,
>
> Is this jar installed in your development environment and does it have
> the .ecore and the .genmodel in it? We package all our models now to
> declare where the .genmodel is for it. E.g.,
The JAR file does not currently contain those artifacts, but I can make
it. However, it's not really practical for me to install this as a
plugin. Can the generators discover these artifacts if they're
appropriately bundled and on the project's classpath?

Cheers,
--Doug

--------------010303090404070309090702
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Ed Merks wrote:
<blockquote cite="mide3a2po$bln$1@utils.eclipse.org" type="cite">
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
Doug,<br>
<br>
Is this jar installed in your development environment and does it have
the .ecore and the .genmodel in it?&nbsp; We package all our models now to
declare where the .genmodel is for it.&nbsp; E.g.,<br>
</blockquote>
The JAR file does not currently contain those artifacts, but I can make
it.&nbsp; However, it's not really practical for me to install this as a
plugin.&nbsp; Can the generators discover these artifacts if they're
appropriately bundled and on the project's classpath?<br>
<br>
Cheers,<br>
--Doug<br>
</body>
</html>

--------------010303090404070309090702--
Re: Using ECore definitions from JAR files [message #400731 is a reply to message #400707] Thu, 04 May 2006 10:41 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 33137
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------040406000600010407010402
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Doug,

This mechanism relies on plugin registration so just putting the plugin
on the classpath is not sufficient. Unzipping the jar as a workspace
project is your best bet...


Doug Bitting wrote:
> Ed Merks wrote:
>> Doug,
>>
>> Is this jar installed in your development environment and does it
>> have the .ecore and the .genmodel in it? We package all our models
>> now to declare where the .genmodel is for it. E.g.,
> The JAR file does not currently contain those artifacts, but I can
> make it. However, it's not really practical for me to install this as
> a plugin. Can the generators discover these artifacts if they're
> appropriately bundled and on the project's classpath?
>
> Cheers,
> --Doug


--------------040406000600010407010402
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
<title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Doug,<br>
<br>
This mechanism relies on plugin registration so just putting the plugin
on the classpath is not sufficient.&nbsp; Unzipping the jar as a workspace
project is your best bet...<br>
<br>
<br>
Doug Bitting wrote:
<blockquote cite="mide3ahao$82t$1@utils.eclipse.org" type="cite">
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
Ed Merks wrote:
<blockquote cite="mide3a2po$bln$1@utils.eclipse.org" type="cite">
<meta content="text/html;charset=ISO-8859-1"
http-equiv="Content-Type">
Doug,<br>
<br>
Is this jar installed in your development environment and does it have
the .ecore and the .genmodel in it?&nbsp; We package all our models now to
declare where the .genmodel is for it.&nbsp; E.g.,<br>
</blockquote>
The JAR file does not currently contain those artifacts, but I can make
it.&nbsp; However, it's not really practical for me to install this as a
plugin.&nbsp; Can the generators discover these artifacts if they're
appropriately bundled and on the project's classpath?<br>
<br>
Cheers,<br>
--Doug<br>
</blockquote>
<br>
</body>
</html>

--------------040406000600010407010402--


Ed Merks
Professional Support: https://www.macromodeling.com/
Re: Using ECore definitions from JAR files [message #400751 is a reply to message #400731] Thu, 04 May 2006 16:34 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: reverse.moc.eliga.gnittib.salguod

This is a multi-part message in MIME format.
--------------070009070002060209050400
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Ed,

Thanks for the information. From a process point of view, this will
cause some problems with EMF adoption around here. I can certainly open
a bugzilla feature request, but I'm also of the mind to look into this
myself. Can you point me in the right direction as to what it would
take to extend the current infrastructure to support models that are on
the classpath but not installed as plugins? It could be far more work
than I'm imagining, but I'd at least take a gander.

Thanks,
--Doug

Ed Merks wrote:
> Doug,
>
> This mechanism relies on plugin registration so just putting the
> plugin on the classpath is not sufficient. Unzipping the jar as a
> workspace project is your best bet...
>
>
> Doug Bitting wrote:
>> Ed Merks wrote:
>>> Doug,
>>>
>>> Is this jar installed in your development environment and does it
>>> have the .ecore and the .genmodel in it? We package all our models
>>> now to declare where the .genmodel is for it. E.g.,
>> The JAR file does not currently contain those artifacts, but I can
>> make it. However, it's not really practical for me to install this
>> as a plugin. Can the generators discover these artifacts if they're
>> appropriately bundled and on the project's classpath?
>>
>> Cheers,
>> --Doug
>


--------------070009070002060209050400
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Ed,<br>
<br>
Thanks for the information.&nbsp; From a process point of view, this will
cause some problems with EMF adoption around here.&nbsp; I can certainly
open a bugzilla feature request, but I'm also of the mind to look into
this myself.&nbsp; Can you point me in the right direction as to what it
would take to extend the current infrastructure to support models that
are on the classpath but not installed as plugins?&nbsp; It could be far
more work than I'm imagining, but I'd at least take a gander.<br>
<br>
Thanks,<br>
--Doug<br>
<br>
Ed Merks wrote:
<blockquote cite="mide3cloc$ioa$1@utils.eclipse.org" type="cite">
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
<title></title>
Doug,<br>
<br>
This mechanism relies on plugin registration so just putting the plugin
on the classpath is not sufficient.&nbsp; Unzipping the jar as a workspace
project is your best bet...<br>
<br>
<br>
Doug Bitting wrote:
<blockquote cite="mide3ahao$82t$1@utils.eclipse.org" type="cite">
<meta content="text/html;charset=ISO-8859-1"
http-equiv="Content-Type">
Ed Merks wrote:
<blockquote cite="mide3a2po$bln$1@utils.eclipse.org" type="cite">
<meta content="text/html;charset=ISO-8859-1"
http-equiv="Content-Type">
Doug,<br>
<br>
Is this jar installed in your development environment and does it have
the .ecore and the .genmodel in it?&nbsp; We package all our models now to
declare where the .genmodel is for it.&nbsp; E.g.,<br>
</blockquote>
The JAR file does not currently contain those artifacts, but I can make
it.&nbsp; However, it's not really practical for me to install this as a
plugin.&nbsp; Can the generators discover these artifacts if they're
appropriately bundled and on the project's classpath?<br>
<br>
Cheers,<br>
--Doug<br>
</blockquote>
<br>
</blockquote>
<br>
</body>
</html>

--------------070009070002060209050400--
Re: Using ECore definitions from JAR files [message #400753 is a reply to message #400751] Thu, 04 May 2006 17:27 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 33137
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------000300000008040408050403
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Doug,

I don't think it would even be necessary to put it on the classpath. I
was tempted to explain this earlier... EMF supports URIs that can
access resources in a jar/zip.

http://download.eclipse.org/tools/emf/2.2.0/javadoc/org/ecli pse/emf/common/archive/ArchiveURLConnection.html

So when you create an ecore model and you use "Load Resource..." you
could enter a URI like
archive:platform:/resource/project/some.jar!/path-in-jar/xyz .ecore.
Unfortunately our Browse... in the GenModel wizard only lets you look
for .genmodel in the workspace, but internally that's just produces a
URI and really any URI would work here too. So I suppose all that's
really needed is another browse button that lets you enter a URI directly...


Doug Bitting wrote:
> Ed,
>
> Thanks for the information. From a process point of view, this will
> cause some problems with EMF adoption around here. I can certainly
> open a bugzilla feature request, but I'm also of the mind to look into
> this myself. Can you point me in the right direction as to what it
> would take to extend the current infrastructure to support models that
> are on the classpath but not installed as plugins? It could be far
> more work than I'm imagining, but I'd at least take a gander.
>
> Thanks,
> --Doug
>
> Ed Merks wrote:
>> Doug,
>>
>> This mechanism relies on plugin registration so just putting the
>> plugin on the classpath is not sufficient. Unzipping the jar as a
>> workspace project is your best bet...
>>
>>
>> Doug Bitting wrote:
>>> Ed Merks wrote:
>>>> Doug,
>>>>
>>>> Is this jar installed in your development environment and does it
>>>> have the .ecore and the .genmodel in it? We package all our models
>>>> now to declare where the .genmodel is for it. E.g.,
>>> The JAR file does not currently contain those artifacts, but I can
>>> make it. However, it's not really practical for me to install this
>>> as a plugin. Can the generators discover these artifacts if they're
>>> appropriately bundled and on the project's classpath?
>>>
>>> Cheers,
>>> --Doug
>>
>


--------------000300000008040408050403
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Doug,<br>
<br>
I don't think it would even be necessary to put it on the classpath.&nbsp; I
was tempted to explain this earlier...&nbsp; EMF supports URIs that can
access resources in a jar/zip. <br>
<blockquote><a
href=" http://download.eclipse.org/tools/emf/2.2.0/javadoc/org/ecli pse/emf/common/archive/ArchiveURLConnection.html"> http://download.eclipse.org/tools/emf/2.2.0/javadoc/org/ecli pse/emf/common/archive/ArchiveURLConnection.html</a><br>
</blockquote>
So when you create an ecore model and you use "Load Resource..." you
could enter a URI like
archive:platform:/resource/project/some.jar!/path-in-jar/xyz .ecore.&nbsp;
Unfortunately our Browse... in the GenModel wizard only lets you look
for .genmodel in the workspace, but internally that's just produces a
URI and really any URI would work here too.&nbsp; So I suppose all that's
really needed is another browse button that lets you enter a URI
directly...<br>
<br>
<br>
Doug Bitting wrote:
<blockquote cite="mide3dae3$ioi$1@utils.eclipse.org" type="cite">
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
Ed,<br>
<br>
Thanks for the information.&nbsp; From a process point of view, this will
cause some problems with EMF adoption around here.&nbsp; I can certainly
open a bugzilla feature request, but I'm also of the mind to look into
this myself.&nbsp; Can you point me in the right direction as to what it
would take to extend the current infrastructure to support models that
are on the classpath but not installed as plugins?&nbsp; It could be far
more work than I'm imagining, but I'd at least take a gander.<br>
<br>
Thanks,<br>
--Doug<br>
<br>
Ed Merks wrote:
<blockquote cite="mide3cloc$ioa$1@utils.eclipse.org" type="cite">
<meta content="text/html;charset=ISO-8859-1"
http-equiv="Content-Type">
<title></title>
Doug,<br>
<br>
This mechanism relies on plugin registration so just putting the plugin
on the classpath is not sufficient.&nbsp; Unzipping the jar as a workspace
project is your best bet...<br>
<br>
<br>
Doug Bitting wrote:
<blockquote cite="mide3ahao$82t$1@utils.eclipse.org" type="cite">
<meta content="text/html;charset=ISO-8859-1"
http-equiv="Content-Type">
Ed Merks wrote:
<blockquote cite="mide3a2po$bln$1@utils.eclipse.org" type="cite">
<meta content="text/html;charset=ISO-8859-1"
http-equiv="Content-Type">
Doug,<br>
<br>
Is this jar installed in your development environment and does it have
the .ecore and the .genmodel in it?&nbsp; We package all our models now to
declare where the .genmodel is for it.&nbsp; E.g.,<br>
</blockquote>
The JAR file does not currently contain those artifacts, but I can make
it.&nbsp; However, it's not really practical for me to install this as a
plugin.&nbsp; Can the generators discover these artifacts if they're
appropriately bundled and on the project's classpath?<br>
<br>
Cheers,<br>
--Doug<br>
</blockquote>
<br>
</blockquote>
<br>
</blockquote>
<br>
</body>
</html>

--------------000300000008040408050403--


Ed Merks
Professional Support: https://www.macromodeling.com/
Re: Using ECore definitions from JAR files [message #400756 is a reply to message #400753] Thu, 04 May 2006 18:46 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: reverse.moc.eliga.gnittib.salguod

This is a multi-part message in MIME format.
--------------040909020308020900070303
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Ed Merks wrote:
> So when you create an ecore model and you use "Load Resource..." you
> could enter a URI like
> archive:platform:/resource/project/some.jar!/path-in-jar/xyz .ecore.
That's closer. The key drawback to that is that the JAR has to be at a
known location. If I'm using Maven, for example, to setup my classpath,
then the JAR files may live in various places (and those places may
change). The key is that they are available on the classpath. If we
had a URLConnection that was something like
/classpath:/path-to/xyz.ecore/, then that would be ideal. So, three
questions:

1. Is there a URLHandler/URLConnection within Eclipse that looks
things up on the classpath?
2. If not, is this a simple matter of creating a plugin that contains
such a URLHandler and registers it upon Eclipse startup?
3. Would this mechanism work or am I barking up the wrong tree?

OK, now to see which happens first:

* Ed responds to this posting with answers to the above questions
* I investigate and answer my own questions.

Given my lack of familiarity with creating a plugin, and my experience
with Ed's ability to respond to an insane number of postings exceedingly
quickly, my money is on Ed. ;-)

Thanks,
--Doug

--------------040909020308020900070303
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Ed Merks wrote:
<blockquote cite="mide3ddir$fc0$1@utils.eclipse.org" type="cite">
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
So when you create an ecore model and you use "Load Resource..." you
could enter a URI like
archive:platform:/resource/project/some.jar!/path-in-jar/xyz .ecore.&nbsp;
</blockquote>
That's closer.&nbsp; The key drawback to that is that the JAR has to be at a
known location.&nbsp; If I'm using Maven, for example, to setup my
classpath, then the JAR files may live in various places (and those
places may change).&nbsp; The key is
that they are available on the classpath.&nbsp; If we had a URLConnection
that was something like <i>classpath:/path-to/xyz.ecore</i>, then that
would be ideal.&nbsp; So, three questions:<br>
<ol>
<li>Is there a URLHandler/URLConnection within Eclipse that looks
things up on the classpath?</li>
<li>If not, is this a simple matter of creating a plugin that
contains such a URLHandler and registers it upon Eclipse startup?</li>
<li>Would this mechanism work or am I barking up the wrong tree?</li>
</ol>
OK, now to see which happens first:<br>
<ul>
<li>Ed responds to this posting with answers to the above questions <br>
</li>
<li>I investigate and answer my own questions.</li>
</ul>
Given my lack of familiarity with creating a plugin, and my experience
with Ed's ability to respond to an insane number of postings
exceedingly quickly, my money is on Ed.&nbsp; ;-)<br>
<br>
Thanks,<br>
--Doug<br>
</body>
</html>

--------------040909020308020900070303--
Re: Using ECore definitions from JAR files [message #400757 is a reply to message #400756] Thu, 04 May 2006 20:25 Go to previous message
Ed Merks is currently offline Ed MerksFriend
Messages: 33137
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------060807010507050803030308
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Doug,

Thanks for the kind words. For a moment there are I thought you were
saying I was insane. Just kidding. ;-)

This is exactly the right idea and you should not need to do anything
new to make this work. Java already directly supports "archive" style
URLs. Some class loaders use jar:, zip:, or even wsjar:. Have a look
in EMFPlugin.getBaseURL because your idea is very similar what's
happening here. This method will either return a URL like
platform:/plugin when running in an Eclipse environment or
jar:file:/.... when running standalone. So for your approach, it's just
a matter of finding the right URL for your resources using the class or
class loader.

Note that our org.eclipse.emf.common.URI class needs to know about any
nonstandard ones and is initialized like this:

// Static initializer for archiveSchemes.
static
{
Set set = new HashSet();
String propertyValue =
System.getProperty("org.eclipse.emf.common.util.URI.archiveSchemes ");

if (propertyValue == null)
{
set.add(SCHEME_JAR);
set.add(SCHEME_ZIP);
set.add(SCHEME_ARCHIVE);
}
else
{
for (StringTokenizer t = new StringTokenizer(propertyValue);
t.hasMoreTokens(); )
{
set.add(t.nextToken().toLowerCase());
}
}

archiveSchemes = Collections.unmodifiableSet(set);
}

Note also that a resource set has a URIConverter that supports URI
mapping. So you can map a logical URI to a physical location and then
have that logical URI be what appears in the resource and remap it
differently in different contexts. I explained this recently, so a
newsgroup search should turn that up...


Doug Bitting wrote:
> Ed Merks wrote:
>> So when you create an ecore model and you use "Load Resource..." you
>> could enter a URI like
>> archive:platform:/resource/project/some.jar!/path-in-jar/xyz .ecore.
> That's closer. The key drawback to that is that the JAR has to be at
> a known location. If I'm using Maven, for example, to setup my
> classpath, then the JAR files may live in various places (and those
> places may change). The key is that they are available on the
> classpath. If we had a URLConnection that was something like
> /classpath:/path-to/xyz.ecore/, then that would be ideal. So, three
> questions:
>
> 1. Is there a URLHandler/URLConnection within Eclipse that looks
> things up on the classpath?
> 2. If not, is this a simple matter of creating a plugin that
> contains such a URLHandler and registers it upon Eclipse startup?
> 3. Would this mechanism work or am I barking up the wrong tree?
>
> OK, now to see which happens first:
>
> * Ed responds to this posting with answers to the above questions
> * I investigate and answer my own questions.
>
> Given my lack of familiarity with creating a plugin, and my experience
> with Ed's ability to respond to an insane number of postings
> exceedingly quickly, my money is on Ed. ;-)
>
> Thanks,
> --Doug


--------------060807010507050803030308
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Doug,<br>
<br>
Thanks for the kind words. For a moment there are I thought you were
saying I was insane.&nbsp; Just kidding.&nbsp; ;-)<br>
<br>
This is exactly the right idea and you should not need to do anything
new to make this work.&nbsp; Java already directly supports "archive" style
URLs. Some class loaders use jar:, zip:, or even wsjar:.&nbsp;&nbsp; Have a look
in EMFPlugin.getBaseURL because your idea is very similar what's
happening here. This method will either return a URL like
platform:/plugin when running in an Eclipse environment or
jar:<a class="moz-txt-link-freetext" href="file:/">file:/</a>.... when running standalone.&nbsp; So for your approach, it's
just a matter of finding the right URL for your resources using the
class or class loader.<br>
<br>
Note that our org.eclipse.emf.common.URI class needs to know about any
nonstandard ones and is initialized like this:<br>
<blockquote><small>&nbsp; // Static initializer for archiveSchemes.<br>
&nbsp; static<br>
&nbsp; {<br>
&nbsp;&nbsp;&nbsp; Set set = new HashSet();<br>
&nbsp;&nbsp;&nbsp; String propertyValue =
System.getProperty("org.eclipse.emf.common.util.URI.archiveSchemes ");<br>
<br>
&nbsp;&nbsp;&nbsp; if (propertyValue == null)<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set.add(SCHEME_JAR);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set.add(SCHEME_ZIP);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set.add(SCHEME_ARCHIVE);<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; else<br>
&nbsp;&nbsp;&nbsp; { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (StringTokenizer t = new StringTokenizer(propertyValue);
t.hasMoreTokens(); )<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; set.add(t.nextToken().toLowerCase());<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; archiveSchemes = Collections.unmodifiableSet(set);<br>
&nbsp; }</small><br>
</blockquote>
Note also that a resource set has a URIConverter that supports URI
mapping.&nbsp; So you can map a logical URI to a physical location and then
have that logical URI be what appears in the resource and remap it
differently in different contexts.&nbsp; I explained this recently, so a
newsgroup search should turn that up...<br>
<br>
<br>
Doug Bitting wrote:
<blockquote cite="mide3di58$742$1@utils.eclipse.org" type="cite">
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
Ed Merks wrote:
<blockquote cite="mide3ddir$fc0$1@utils.eclipse.org" type="cite">
<meta content="text/html;charset=ISO-8859-1"
http-equiv="Content-Type">
So when you create an ecore model and you use "Load Resource..." you
could enter a URI like
archive:platform:/resource/project/some.jar!/path-in-jar/xyz .ecore.&nbsp;
</blockquote>
That's closer.&nbsp; The key drawback to that is that the JAR has to be at a
known location.&nbsp; If I'm using Maven, for example, to setup my
classpath, then the JAR files may live in various places (and those
places may change).&nbsp; The key is
that they are available on the classpath.&nbsp; If we had a URLConnection
that was something like <i>classpath:/path-to/xyz.ecore</i>, then that
would be ideal.&nbsp; So, three questions:<br>
<ol>
<li>Is there a URLHandler/URLConnection within Eclipse that looks
things up on the classpath?</li>
<li>If not, is this a simple matter of creating a plugin that
contains such a URLHandler and registers it upon Eclipse startup?</li>
<li>Would this mechanism work or am I barking up the wrong tree?</li>
</ol>
OK, now to see which happens first:<br>
<ul>
<li>Ed responds to this posting with answers to the above questions
<br>
</li>
<li>I investigate and answer my own questions.</li>
</ul>
Given my lack of familiarity with creating a plugin, and my experience
with Ed's ability to respond to an insane number of postings
exceedingly quickly, my money is on Ed.&nbsp; ;-)<br>
<br>
Thanks,<br>
--Doug<br>
</blockquote>
<br>
</body>
</html>

--------------060807010507050803030308--


Ed Merks
Professional Support: https://www.macromodeling.com/
Previous Topic:error in duplicating emf objects graph
Next Topic:editor not generated in emf 2.2.0 RC2
Goto Forum:
  


Current Time: Fri Apr 19 18:45:17 GMT 2024

Powered by FUDForum. Page generated in 0.03482 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top