Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » EMF » Limit Copy, Paste, Cut keyboard shortcuts to EMF tree only (not the entire editor)
Limit Copy, Paste, Cut keyboard shortcuts to EMF tree only (not the entire editor) [message #416341] Mon, 28 January 2008 19:39 Go to next message
Mircea Luchian is currently offline Mircea LuchianFriend
Messages: 89
Registered: July 2009
Member
This is a multi-part message in MIME format.
--------------050503050803060707030600
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Hello,

The EditingDomainActionBarContributor.java class defined in the EMF
plugins overrides the Windows CUT/COPY/PASTE actions' keyboard shortcuts
(CTRL-X, CTRL-C, CTRL-V) with EMF's own.

This is correct as long as the actions are performed on the tree.
However, I implemented an editor based on eclipse forms, with text
widgets (Windows native) handling the COPY CUT PASTE actions with a
right click of a mouse. As the mouse actions work fine and interact with
the windows' clipboard, pressing the keyboard shortcuts for the same
actions in the text widgets will call the actions reserved by EMF . This
is problematic as the CTRL-X, CTRL-C, CTRL-V shortcuts are overridden
with the EMF copy, cut, paste actions for the entire editor.

Is there a possible way to register the actions for the editor's tree
only? (See picture)



I have a CustomEditingDomainActionBarContributor.java replacing a few
small things from the original EditingDomainActionBarContributor.java
class, but I don't want to manage the registering / unregistering the
copy, cut and paste actions when the tree is in focus or not.

Any help appreciated

Thanks,

Mircea

--------------050503050803060707030600
Content-Type: multipart/related;
boundary="------------080600020504060905060002"


--------------080600020504060905060002
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">
Hello, <br>
<br>
The EditingDomainActionBarContributor.java class defined in the EMF
plugins overrides the Windows CUT/COPY/PASTE actions' keyboard
shortcuts (CTRL-X, CTRL-C, CTRL-V) with EMF's own. <br>
<br>
This is correct as long as the actions are performed on the tree.
However, I implemented an editor based on eclipse forms, with text
widgets (Windows native) handling the COPY CUT PASTE actions with a
right click of a mouse. As the mouse actions work fine and interact
with the windows' clipboard, pressing the keyboard shortcuts for the
same actions in the text widgets will call the actions reserved by EMF
.. This is problematic as the CTRL-X, CTRL-C, CTRL-V shortcuts are
overridden with the EMF copy, cut, paste actions for the entire editor.
<br>
<br>
Is there a possible way to register the actions for the editor's tree
only? (See picture)<br>
<br>
<img src="cid:part1.04020600.02030008@matrox.com" alt=""><br>
<br>
I have a CustomEditingDomainActionBarContributor.java replacing a few
small things from the original EditingDomainActionBarContributor.java
class, but I don't want to manage the registering / unregistering the
copy, cut and paste actions when the tree is in focus or not. <br>
<br>
Any help appreciated<br>
<br>
Thanks, <br>
<br>
Mircea
</body>
</html>

--------------080600020504060905060002
Content-Type: image/jpeg;
name="moz-screenshot-2.jpg"
Content-Transfer-Encoding: base64
Content-ID: <part1.04020600.02030008@matrox.com>
Content-Disposition: inline;
filename="moz-screenshot-2.jpg"

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL DBkSEw8UHRof
Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwL DBgNDRgyIRwh
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjL/wAAR
CAG1BDEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI CQoL/8QAtRAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkK
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1 dnd4eXqDhIWG
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW 19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcI CQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz UvAVYnLRChYk
NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOE
hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU 1dbX2Nna4uPk
5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDjfMf1o8x/Wjyz6UeWfSv0 6zPjdA8x/Wjz
H9aPLPpR5Z9KLMNA8x/WjzH9aPLPpR5Z9KLMNA8x/WjzH9aPLPpR5Z9KLMNA 8x/WjzH9aPLP
pR5Z9KLMNA8x/WjzH9aPLPpR5Z9KLMNA8x/WjzH9aPLPpR5Z9KLMNA8x/Wjz H9aPLPpR5Z9K
LMNA8x/WjzH9aPLPpR5Z9KLMNA8x/WjzH9aPLPpR5Z9KLMNA8x/WjzH9aPLP pR5Z9KLMNA8x
/WjzH9aPLPpR5Z9KLMNA8x/WjzH9aPLPpR5Z9KLMNA8x/WjzH9aPLPpR5Z9K LMNA8x/WjzH9
aPLPpR5Z9KLMNA8x/WjzH9aPLPpR5Z9KLMNA8x/WjzH9aPLPpRsNFmPQPMf1 o8x/WjYaNhos
w0DzH9aPMf1o2GjYaLMNA8x/WjzH9aNho2GizDQPMf1o8x/WjYaNhosw0DzH 9aPMf1o2GjYa
LMNA8x/WjzH9aNho2GizDQPMf1o8x/WjYaNhosw0DzH9aPMf1o2GjYaLMNA8 x/WjzH9aNho2
GizDQPMf1o8x/WjYaNhosw0DzH9aPMf1o2GjYaLMNA8x/WjzH9aNho2GizDQ PMf1o8x/WjYa
Nhosw0DzH9aPMf1o2GjYaLMNA8x/WjzH9aNho2GizDQPMf1o8x/WjYaNhosw 0DzH9aPMf1o2
GjYaLMNA8x/WjzH9aNho2GizDQPMf1o8x/WjYaNhosw0DzH9aPMf1o2GjYaL MNA8x/WjzH9a
Nho2GizDQPMf1o8x/WjYaNhosw0DzH9aPMf1o2GjYaLMNA8x/WjzH9aNho2G izDQPMf1o8x/
WjYaNhosw0DzH9aPMf1o2GjYaLMNA8x/WjzH9aNho2GizDQPMf1o8x/WjYaN hosw0DzH9aPM
f1o2GjYaLMNA8x/WjzH9aNho2GizDQPMf1o8x/WjYaNhosw0DzH9aPMf1o2G jYaLMNA8x/Wj
zH9aNho2GizDQPMf1o8x/WjYaNhosw0DzH9aPMf1pNlGyjlYaC+Y/rR5j+tJ so2UcrDQXzH9
aPMf1pNlGyjlYaC+Y/rR5j+tJso2UcrDQXzH9aPMf1pNlGyjlYaC+Y/rR5j+ tJso2UcrDQXz
H9aPMf1pNlGyjlYaC+Y/rR5j+tJso2UcrDQXzH9aPMf1pNlGyjlYaC+Y/rR5 j+tJso2UcrDQ
XzH9aPMf1pNlGyjlYaC+Y/rR5j+tJso2UcrDQXzH9aPMf1pNlGyjlYaC+Y/r R5j+tJso2Ucr
DQXzH9aPMf1pNlGyjlYaC+Y/rR5j+tJso2UcrDQXzH9aKTZRRysNC7iOjEde y/8ACufCn/QL
P/gTL/8AFUf8K58Kf9As/wDgTL/8VXgf6zYX+WX4f5no/wBjVv5l+P8AkeNY joxHXsv/AArn
wp/0Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+Zfj/AJHj WI6MR17L/wAK
58Kf9As/+BMv/wAVR/wrnwp/0Cz/AOBMv/xVH+s2F/ll+H+Yf2NW/mX4/wCR 41iOjEdey/8A
CufCn/QLP/gTL/8AFUf8K58Kf9As/wDgTL/8VR/rNhf5Zfh/mH9jVv5l+P8A keNYjoxHXsv/
AArnwp/0Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+Zfj/ AJHjWI6MR17L
/wAK58Kf9As/+BMv/wAVR/wrnwp/0Cz/AOBMv/xVH+s2F/ll+H+Yf2NW/mX4 /wCR41iOjEde
y/8ACufCn/QLP/gTL/8AFUf8K58Kf9As/wDgTL/8VR/rNhf5Zfh/mH9jVv5l +P8AkeNYjoxH
Xsv/AArnwp/0Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ Zfj/AJHjWI6M
R17L/wAK58Kf9As/+BMv/wAVR/wrnwp/0Cz/AOBMv/xVH+s2F/ll+H+Yf2NW /mX4/wCR41iO
jEdey/8ACufCn/QLP/gTL/8AFUyX4e+EIYnll04RxopZ3a6lAUDqSd/Ao/1m wv8ALL8P8wWS
1nopL8f8jx3EdGI67vU4/hlprFBaveSBgCtrPK4AIzncXCkfQn+dZKaZDrTh vD3ggm3+cia6
uZtsig4GDvVQeuRlv0NZPizBJ25ZN+SX+Z6VPg/MZx55WjHvJ8q/E5rEdGI6 6iL4T67JEjtP
YxsyglGmfKn0OFIz9Ca0rb4QzNbqbnV4o5udyRwF1HPGGLAnj2qJcV0fsUpP 1sv1ZquFYx/i
4uC9OaX/ALajhcR0Yjrv/wDhUA/6Dg/8BP8A7Oorn4QzC3Y22rxyTDG1JIDG p55ywYkcexpL
iuF/eoyt6r/MT4YoNWhjI384zS++2hwuI6MR11Enws121UTqLG8KMD9nWdwZ BnkZIXj/AIEP
bmmfZNN0WTZ4m8FSwpv2m4trmbZyuQBlyrHr0f144q/9bMIvihNfJf5guDsV P+BVhN9oy1+5
pP7jmsR0Yjr0DTLX4ZamoxCLWTaWMd1cyxkAHH3i+0nvgE/zrpf+Fc+FP+gW f/AmX/4qtI8U
YOSvGMvw/wAzz6/DuLw8uWt7r87r9DxrEdGI69l/4Vz4U/6BZ/8AAmX/AOKo /wCFc+FP+gWf
/AmX/wCKqv8AWbC/yy/D/Mx/sat/Mvx/yPGsR0nye1ezf8K58Kf9As/+BMv/ AMVR/wAK58Kf
9As/+BMv/wAVR/rNhf5Zfh/mH9jVv5l+P+R4z8ntR8ntXs3/AArnwp/0Cz/4 Ey//ABVH/Cuf
Cn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7N/wrnwp/0Cz/4E y/8AxVH/AArn
wp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/mX4njPye1Hye1ezf8K58Kf8AQLP/ AIEy/wDxVH/C
ufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7N/wrnwp/0Cz/ AOBMv/xVH/Cu
fCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9jVv5l+J4z8ntR8ntXs3/AArnwp/0 Cz/4Ey//ABVH
/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7N/wrnwp/0C z/4Ey/8AxVH/
AArnwp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/mX4njPye1Hye1ezf8K58Kf8A QLP/AIEy/wDx
VH/CufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7N/wrnwp/ 0Cz/AOBMv/xV
H/CufCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9jVv5l+J4z8ntR8ntXs3/AArn wp/0Cz/4Ey//
ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7N/wrnw p/0Cz/4Ey/8A
xVH/AArnwp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/mX4njPye1Hye1ezf8K58 Kf8AQLP/AIEy
/wDxVH/CufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7N/wr nwp/0Cz/AOBM
v/xVH/CufCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9jVv5l+J4z8ntR8ntXs3/ AArnwp/0Cz/4
Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7N/ wrnwp/0Cz/4E
y/8AxVH/AArnwp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/mX4njPye1Hye1ezf 8K58Kf8AQLP/
AIEy/wDxVH/CufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7 N/wrnwp/0Cz/
AOBMv/xVH/CufCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9jVv5l+J4z8ntR8nt Xs3/AArnwp/0
Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7 V7N/wrnwp/0C
z/4Ey/8AxVH/AArnwp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/mX4njPye1Hye 1ezf8K58Kf8A
QLP/AIEy/wDxVH/CufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1b+ZfieM/J7Uf J7V7N/wrnwp/
0Cz/AOBMv/xVH/CufCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9jVv5l+J4z8nt R8ntXs3/AArn
wp/0Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ZfieM/J7 UfJ7V7N/wrnw
p/0Cz/4Ey/8AxVH/AArnwp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/mX4njPye 1Hye1ezf8K58
Kf8AQLP/AIEy/wDxVH/CufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1b+ZfieM/ J7UfJ7V7N/wr
nwp/0Cz/AOBMv/xVH/CufCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9jVv5l+J4 z8ntR8ntXs3/
AArnwp/0Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+Zfie M/J7UfJ7V7N/
wrnwp/0Cz/4Ey/8AxVH/AArnwp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/mX4n jPye1Hye1ezf
8K58Kf8AQLP/AIEy/wDxVH/CufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1b+Zf ieM/J7UfJ7V7
N/wrnwp/0Cz/AOBMv/xVH/CufCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9jVv5 l+J4z8ntR8nt
Xs3/AArnwp/0Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ ZfieM/J7UfJ7
V7N/wrnwp/0Cz/4Ey/8AxVH/AArnwp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/ mX4njPye1Hye
1ezf8K58Kf8AQLP/AIEy/wDxVH/CufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1 b+ZfieM/J7Uf
J7V7N/wrnwp/0Cz/AOBMv/xVH/CufCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9 jVv5l+J4z8nt
R8ntXs3/AArnwp/0Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/ Y1b+ZfieM/J7
UYSvZv8AhXPhT/oFn/wJl/8AiqP+FceFP+gUf/AmX/4qn/rNhf5Zfh/mH9jV v5l+J4xhPWjC
etezf8K48J/9Ar/yZl/+Ko/4Vx4T/wCgV/5My/8AxVH+s2F/ll+H+Yf2NV/m X4njOE9aMJ61
7N/wrjwn/wBAr/yZl/8AiqP+FceE/wDoFf8AkzL/APFUf6zYX+WX4f5h/Y1X +ZfieM4T1own
rXs3/CuPCf8A0Cv/ACZl/wDiqP8AhXHhP/oFf+TMv/xVH+s2F/ll+H+Yf2NV /mX4njOE9aMJ
617N/wAK48J/9Ar/AMmZf/iqP+FceE/+gV/5My//ABVH+s2F/ll+H+Yf2NV/ mX4njOE9aMJ6
17N/wrjwn/0Cv/JmX/4qj/hXHhP/AKBX/kzL/wDFUf6zYX+WX4f5h/Y1X+Zf ieM4T1ownrXs
3/CuPCf/AECv/JmX/wCKo/4Vx4T/AOgV/wCTMv8A8VR/rNhf5Zfh/mH9jVf5 l+J4zhPWjCet
ezf8K48J/wDQK/8AJmX/AOKo/wCFceE/+gV/5My//FUf6zYX+WX4f5h/Y1X+ ZfieM4T1ownr
Xs3/AArjwn/0Cv8AyZl/+Ko/4Vx4T/6BX/kzL/8AFUf6zYX+WX4f5h/Y1X+Z fieM4T1ownrX
s3/CuPCf/QK/8mZf/iqP+FceE/8AoFf+TMv/AMVR/rNhf5Zfh/mH9jVf5l+J 4zhPWjCetezf
8K48J/8AQK/8mZf/AIqj/hXHhP8A6BX/AJMy/wDxVH+s2F/ll+H+Yf2NV/mX 4njOE9aMJ617
N/wrjwn/ANAr/wAmZf8A4qj/AIVx4T/6BX/kzL/8VR/rNhf5Zfh/mH9jVf5l +J4zhPWjCete
zf8ACuPCf/QK/wDJmX/4qj/hXHhP/oFf+TMv/wAVR/rNhf5Zfh/mH9jVf5l+ J4zhPWjCetez
f8K48J/9Ar/yZl/+Ko/4Vx4T/wCgV/5My/8AxVH+s2F/ll+H+Yf2NV/mX4nj OE9aMJ617N/w
rjwn/wBAr/yZl/8AiqP+FceE/wDoFf8AkzL/APFUf6zYX+WX4f5h/Y1X+Zfi eM4T1ownrXs3
/CuPCf8A0Cv/ACZl/wDiqP8AhXHhP/oFf+TMv/xVH+s2F/ll+H+Yf2NV/mX4 njOE9aMJ617N
/wAK48J/9Ar/AMmZf/iqP+FceE/+gV/5My//ABVH+s2F/ll+H+Yf2NV/mX4n jOE9aK9m/wCF
ceE/+gV/5My//FUUf6zYX+WX4f5h/Y1X+ZfidVRT9i/89U/I/wCFGxf+eqfk f8K+HsfRjKKf
sX/nqn5H/CjYv/PVPyP+FFgGUU/Yv/PVPyP+FGxf+eqfkf8ACiwDKKfsX/nq n5H/AAo2L/z1
T8j/AIUWAZRT9i/89U/I/wCFGxf+eqfkf8KLAMop+xf+eqfkf8KNi/8APVPy P+FFgGUU/Yv/
AD1T8j/hRsX/AJ6p+R/wosAyin7F/wCeqfkf8KNi/wDPVPyP+FFgGVFcXMFn A09zPHBCuN0k
rhVGTgZJ461ieJPFtjoASCLbf6lI4RLKBjvycfe4OOCMDGTkYHUjn7Hwhqni qeLVPF13siC7
oLCPKFAWyQwx8owB3LYIyQVxWUqmvLFXZ6WHy+9NV8TLkp9O8v8ACv1ehNe/ EJr26+weFtOk
1G5OP3roRGoyvOODjkgk7QDjqKrw+AtT15hd+LNXnkk2/Jb25GIyQvfG0HjB CjnAOTXd2Gl2
Ol2q21jFBbwj+FFIycAZJxknAHJ5NWti/wDPVPyP+FL2LlrUd/LoavM44f3c DDk/vPWT+ey9
EY2meGNF0dg9jp0EUgYsJCC7qSMHDNkgY7Z9fWtan7F/56p+R/wo2L/z1T8j /hWqikrI8urW
qVZc1STb7t3GUU/Yv/PVPyP+FGxf+eqfkf8ACnYgZRT9i/8APVPyP+FGxf8A nqn5H/CiwDKK
fsX/AJ6p+R/wo2L/AM9U/I/4UWA5/VfB2g6xva40+NJm3Hzof3b7m6sccMc8 /Nn9TXNN4Q8Q
eGJTceFdSae33bmsbkj5vu59FJODk/KQBgE16LsX/nqn5H/CjYv/AD1T8j/h WcqMZa7M9Chm
uJox5HLmh/LLVfc9vlY4bSfiJayTix162k0q+GA3mqQhJC4znlM5J54A/irt IpY5oklidZI3
UMjqchgehB7iquqaFpmtQCHUYILhR90sGDLyCdrDkZwM4PNcTLoGu+BpjdeH 5n1LSmdGmsWB
aUnGCRhfpyvPTIIXNTepT+LVfidHssHjf4H7up/K37r9Jbp+T08z0Kisbw34 m07xLZJLb3Ec
VztJltXb95GRjJxjleRhvfscgbmxf+eqfkf8K1i1JXR5dajUoTdOqrNDKKfs X/nqn5H/AAo2
L/z1T8j/AIU7GYyin7F/56p+R/wo2L/z1T8j/hRYBlFP2L/z1T8j/hRsX/nq n5H/AAosAyin
7F/56p+R/wAKNi/89U/I/wCFFgGUU/Yv/PVPyP8AhRsX/nqn5H/CiwDKKfsX /nqn5H/CjYv/
AD1T8j/hRYBlFP2L/wA9U/I/4UbF/wCeqfkf8KLAMop+xf8Anqn5H/CjYv8A z1T8j/hRYBlF
P2L/AM9U/I/4UbF/56p+R/wosAyin7F/56p+R/wo2L/z1T8j/hRYBlFP2L/z 1T8j/hRsX/nq
n5H/AAosAyin7F/56p+R/wAKNi/89U/I/wCFFgGUU/Yv/PVPyP8AhRsX/nqn 5H/CiwDKKfsX
/nqn5H/CjYv/AD1T8j/hRYBlFP2L/wA9U/I/4UbF/wCeqfkf8KLAMop+xf8A nqn5H/CjYv8A
z1T8j/hRYBlFP2L/AM9U/I/4UbF/56p+R/wosAyin7F/56p+R/wo2L/z1T8j /hRYBlFP2L/z
1T8j/hRsX/nqn5H/AAosAyin7F/56p+R/wAKNi/89U/I/wCFFgGUU/Yv/PVP yP8AhRsX/nqn
5H/CiwDKKfsX/nqn5H/CjYv/AD1T8j/hRYBlFP2L/wA9U/I/4UbF/wCeqfkf 8KLAMop+xf8A
nqn5H/CjYv8Az1T8j/hRYBlFP2L/AM9U/I/4UbF/56p+R/wosAyin7F/56p+ R/wo2L/z1T8j
/hRYBlFP2L/z1T8j/hRsX/nqn5H/AAosAyin7F/56p+R/wAKNi/89U/I/wCF FgGUU/Yv/PVP
yP8AhRsX/nqn5H/CiwDKKfsX/nqn5H/CjYv/AD1T8j/hRYBlFP2L/wA9U/I/ 4UbF/wCeqfkf
8KLAMop+xf8Anqn5H/CjYv8Az1T8j/hRYBlFP2L/AM9U/I/4UbF/56p+R/wo sAyin7F/56p+
R/wo2L/z1T8j/hRYBlFP2L/z1T8j/hRsX/nqn5H/AAosAyin7F/56p+R/wAK Ni/89U/I/wCF
FgGUU/Yv/PVPyP8AhRsX/nqn5H/CiwDKKfsX/nqn5H/CjYv/AD1T8j/hRYBl FP2L/wA9U/I/
4UbF/wCeqfkf8KLAMop+xf8Anqn5H/CjYv8Az1T8j/hRYBlFP2L/AM9U/I/4 UbF/56p+R/wo
sAyin7F/56p+R/wo2L/z1T8j/hRYBlFP2L/z1T8j/hRsX/nqn5H/AAosAyin 7F/56p+R/wAK
Ni/89U/I/wCFFgGUU/Yv/PVPyP8AhRsX/nqn5H/CiwDKKfsX/nqn5H/CjYv/ AD1T8j/hRYBl
FP2L/wA9U/I/4UbF/wCeqfkf8KLAMop+xf8Anqn5H/CjYv8Az1T8j/hRYBlF P2L/AM9U/I/4
UbF/56p+R/wosAyin7F/56p+R/wo2L/z1T8j/hRYBlFP2L/z1T8j/hRRYBlF Ryy+SASjsCcf
KM1IDkA4x7GgAopuXaQpGEyoBO9iOuenB9KVYJFV5GdC+7IRXJBXA9QMHOf8 9KUWxXFopFYO
gZTkEZBpkc3mOy+W67eCWAqRklFFFABRRRQAUUUUAFFFNlljhieWV1jjRSzu xwFA6knsKASv
oh1cFqvibVfEN/Po3hJFeNF2XGobsBMnGUbsOvIyTyVHGTBeatrPjuefTtDT 7Nom8RT3zjDO
MEsAMg4Ix8oGem4gMRXa6Po9noenR2NjHsiTkk8s7d2Y9yf/AKwwABWF3V0j ou/+R7MaVPLl
z10pVekXqo+cvPtH5syfDvgyx0KU3krte6mzOz3kuc/N1wMnB9+ScnnBxXS0 UVrGKirRPMxG
Jq4iftKsrv8Ar7l5IKKKKoxCiiigAooooAKKKKACiiigAooooAKKKKAOR8Qe BoNQuTqWkXDa
Zqu5nM0TMBISuOcH5Se5Hqcg5qLw/wCLL6PVBoXii3W01FlXyJeAs2R0JBI3 E55HBORwRg9n
WP4k8N2fiXTjbXI2SpkwzqMtE39Qe47+xAIxlTafNDf8z1aGPjVgsPjNY7KX 2o+ndd0+m1jY
orgtK8Tar4ev4NG8WoqRuuy31DdkPg4y7dx05OCOCw5yO9q4TU1ocmLwdTDS SlZp7Napryf9
WCiiirOUKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACii
igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACimSzRQ gGWVIweAXYCo
vt9n/wA/cH/fwUASvCkhywOemQxH8qhW2IkfcxMROQpYnPA4Oe1L9vs/+fuD /v4KPt9n/wA/
cH/fwU7sRYoqv9vs/wDn7g/7+Cj7fZ/8/cH/AH8FIZYoqv8Ab7P/AJ+4P+/g o+32f/P3B/38
FAFiiq/2+z/5+4P+/go+32f/AD9wf9/BQBYoqv8Ab7P/AJ+4P+/go+32f/P3 B/38FAE0sscM
TyyuscaKWd2OAoHUk9hXntxcXnxF1FrKyeS28OW7jz58Ya4Yc4GfzAPThjzt Wm+INbfxhft4
c0ieGPT1YG8vpCNpAOcL6jI4x94jsoJPaad/Zml6db2NtcwLDAgRf3ign1Jx gZJ5J7kmsH+9
dl8P5ntQistpqpJfvnsn9hfzNfzPontuW7KyttOs4rS0hWG3iXaiL0A/qe+e 9T1X+32f/P3B
/wB/BR9vs/8An7g/7+Ct0rHjSk5Nyk7tliiq/wBvs/8An7g/7+Cj7fZ/8/cH /fwUCLFFV/t9
n/z9wf8AfwUfb7P/AJ+4P+/goAsUVX+32f8Az9wf9/BR9vs/+fuD/v4KALFF V/t9n/z9wf8A
fwUfb7P/AJ+4P+/goAsUVX+32f8Az9wf9/BR9vs/+fuD/v4KALFFV/t9n/z9 wf8AfwUfb7P/
AJ+4P+/goAsUVX+32f8Az9wf9/BR9vs/+fuD/v4KALFFV/t9n/z9wf8AfwUf b7P/AJ+4P+/g
oAsUVX+32f8Az9wf9/BR9vs/+fuD/v4KAINY0ez1zTpLG+j3xPyCOGRuzKex H/1jkEiuP0fW
LzwbqMfh7xDJvsH4sb88KF/ut6AcD/Z91II7f7fZ/wDP3B/38FZfiCz0zxDo 02nz3sCb8NHK
GVjG46EZ/I9MgkZGaynBv3o7no4LFwivq+I1pS++L/mXmuvdaG5RXB+FPE76 bcL4Z114Y57d
Qlrcqw8uZAMKM9M46Hv0OGHPafb7P/n7g/7+CqhNTV0YYvCTwtTklqnqmtmu jRYoqv8Ab7P/
AJ+4P+/go+32f/P3B/38FWcpYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/ AG+z/wCfuD/v
4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCf uD/v4KPt9n/z
9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt 9n/z9wf9/BQB
Yoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9 /BQBYoqv9vs/
+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv 9vs/+fuD/v4K
Pt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD /v4KPt9n/wA/
cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n /wA/cH/fwUAW
KKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/f wUAWKKr/AG+z
/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/ AG+z/wCfuD/v
4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCf uD/v4KPt9n/z
9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt 9n/z9wf9/BQB
Yoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9 /BQBYoqv9vs/
+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv 9vs/+fuD/v4K
Pt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD /v4KPt9n/wA/
cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n /wA/cH/fwUAW
KKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/f wUAWKKr/AG+z
/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/ AG+z/wCfuD/v
4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCf uD/v4KPt9n/z
9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt 9n/z9wf9/B/j
QBYoqv8Ab7P/AJ+4P+/g/wAaPt9l/wA/cH/fwf40AWKKr/b7L/n7g/7+D/Gj 7fZf8/cH/fwf
40AWKKr/AG+y/wCfuD/v4v8AjS/b7L/n8g/7+L/jQBPRUH2+y/5/If8Av4v+ NH2+x/5/If8A
v4v+NAE9FQfb7H/n8h/77X/Gj7fY/wDP5D/32v8AjQBPRUH2+x/5/If++1/x ooAl0u2V2d5D
+/AAd16knsD/AHeOn9a0GtmDJsdiN3z7m7Y7ceuKj0ohtPRgB8zMT7/MRV2u uT5XZGS1V2R+
Snof++jR5Keh/wC+jUlFTdjsR+Snof8Avo1SeK68xtiHbk4+YdPzrRopqTQN XMRrp0cqzEMp
wRmnJNNIMosjDplQTWzRWntV2J5H3MwR3hAIRufVgKsW8EhBM5YHPC7qt0VD m2NRI/JT0P8A
30a858VeJtQudWk8M+HS321iRcXOSBbp3wexwRk9s4GWPHReO/E6eGfD0zxy lL+5Vo7QLjIb
GN/II+XIPIwTgd6zfA3hEW1pJrmqyfaNT1QefJ8uwRh/mxwAcknJ6DOBjjJ5 5TcpeyT9fT/N
nrYSjGhReNqxv0gns5d33jHr3dl3J/Dml2/hrSFsLWR3yxklkY43uQATjsOA Me3c8m++sRR3
It2kcSYUk7G2jcSFy2MDJBAyeTWndafaxWk0ixYZI2YHceoH1rklv7ZNSYTO gAhxLAcM10rb
gIwp4ODkkn7v0ZiO2KgqfuLRHk1atSrVc6rvJ6tml9qsZrxoowyTkM3mRqyB sEBjuA2uQSM9
cHr3qzHdNGwSYhkJwsvf2DDt9Rx9M4rEa/tn1JRC6EGHEUAwrWqrtBjKjgZO CCPvfRVJnNyC
CDgg8EHvVLDqrG+zM3U5HY6Cisqx1AKRDK3yHhGJ6ex/ofwPvq1wThKEuWRv GSkroKKKKgoK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDn/ABX4aXxFZxNDO1tq FqxktZwxAVuO
DjscDkcjAI7g1vCfiW51GWfR9XgaDWbNf3o24EijA3jHAPI9jkEcHA6muH8c 6NNbSweKtKVU
vrBg84VWzMgwOdp6AZB9VJyeAKxqJxftI/M9bA1I4mH1Ks9/gf8ALJ9PSXXz 1O4orO0PWbbX
tJgv7Zlw6jzEDZMb45Q8DkfTng9DWjWqaaujzKlOVObhNWa0YUUUUyAooooA KKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKAINK1ixt9Niimn2yAtkbGPViewqzL4i06NQVkeU5xhEO f1xWRp9tFJYx
s0SMTnkqD3NX10kMoYWsWCMjha9OcaSm73OWLnyqxm3PiS9lfMG2BB2ADE/U kf4VB/b+p/8A
Pz/5DX/CteTTFiXc9tEBnH3RUf2OD/nhH/3wK0VSilpElwqfzGZ/b+p/8/P/ AJDX/Cmx63qU
SBFumIH95Qx/MjNav2OD/nhH/wB8Cj7HB/zwi/74FP2tL+UXs5/zGfF4i1GN iWkSUYxh0GP0
xU3/AAlF7/zyt/8Avlv8atfY4P8AnhH/AN8CnLYRvnbbI2PSMGk6lF/ZHyVO 5lt4g1JmJE4U
E5wEXA/MVHN4kv7eCSaW72xxqXY+WpwAMntWw2nxqMtaoB7xiuC8ViTX/EMH hPTkSILia7nC
N8gxnBA4xgqfQsVGRis62JpU4XUE309TswGBniq3JKdorWT7RW7/AK6lC0nv /GOsjWdUlla0
tXxYxEBF69cDvwMnueM4XFeqWet6dFY28b3GHSJVYbG4IH0rPtdJsrK1jtre 0ijhjXaqhRwP
r3Pv3qb7HB/zwj/74FZUoU40+WW+7fd/5djTH4qWIrc0NILSK7L/ADe7fVlb VPEElwZILXCw
EbSxHLjoevQfrWHXS/Y4P+eEf/fAo+xwf88I/wDvgV1wrwgrRR50qcpO7ZzV FdL9jg/54R/9
8Cj7HB/zwj/74FX9aj2J9g+5zVXrXVZ7ZdpAlTsHY5H481r/AGOD/nhH/wB8 Cj7HB/zwj/74
FZValKqrSiXCE4bMij1u0dfn8yM+jIT/ACzT/wC2LH/ns3/ftv8ACnfY4P8A nhH/AN8Cj7HB
/wA8I/8AvgVyOjT6Nm3PMb/bFj/z2b/v23+FH9sWP/PZv+/bf4U77HB/zwj/ AO+BR9jg/wCe
Ef8A3wKXsafdhzyG/wBsWP8Az2b/AL9t/hR/bFj/AM9m/wC/bf4U77HB/wA8 I/8AvgUfY4P+
eEf/AHwKPY0+7DnkN/tix/57N/37b/Cj+2LH/ns3/ftv8Kd9jg/54R/98Cj7 HB/zwj/74FHs
afdhzyG/2xY/89m/79t/hR/bFj/z2b/v23+FO+xwf88I/wDvgUfY4P8AnhH/ AN8Cj2NPuw55
Df7Ysf8Ans3/AH7b/Cj+2LH/AJ7N/wB+2/wp32OD/nhH/wB8Cj7HB/zwj/74 FHsafdhzyG/2
xY/89m/79t/hR/bFj/z2b/v23+FO+xwf88I/++BR9jg/54R/98Cj2NPuw55D f7Ysf+ezf9+2
/wAKP7Ysf+ezf9+2/wAKd9jg/wCeEf8A3wKPscH/ADwj/wC+BR7Gn3Yc8hv9 sWP/AD2b/v23
+FH9sWP/AD2b/v23+FO+xwf88I/++BR9jg/54R/98Cj2NPuw55Df7Ysf+ezf 9+2/wo/tix/5
7N/37b/CnfY4P+eEf/fAo+xwf88I/wDvgUexp92HPI88hvYvAvidRbTTt4bv TmRWjLCBznpn
njA56lePmK5r0H+2LH/ns3/ftv8ACqeseH7PWNLnspYYl3qdkmzmN+zDGOn1 56d65rwPcukt
34a1KCP7bp2djlSTJHnryOgyuDxlWGBxXNGlClU5Hfle3r2/yParylj8L9ZX 8WGk/OPSXqtp
fJnY/wBsWP8Az2b/AL9t/hR/bFj/AM9m/wC/bf4U77HB/wA8I/8AvgUfY4P+ eEf/AHwK6fY0
+7PF55Df7Ysf+ezf9+2/wo/tix/57N/37b/CnfY4P+eEf/fAo+xwf88I/wDv gUexp92HPIb/
AGxY/wDPZv8Av23+FH9sWP8Az2b/AL9t/hTvscH/ADwj/wC+BR9jg/54R/8A fAo9jT7sOeQ3
+2LH/ns3/ftv8KP7Ysf+ezf9+2/wp/2OD/nhH/3wKX7HB/zwi/74FHsafdhz yI/7Ysf+ezf9
+2/wo/tix/57N/37b/CpPsUH/PCL/vgUosrf/nhF/wB8Cj2NPuw5pEX9sWP/ AD2b/v23+FH9
sWP/AD2b/v23+FT/AGK3/wCfeL/vgUv2K3/594v++BR7Gn3Y+aRX/tix/wCe zf8Aftv8KP7Y
sf8Ans3/AH7b/CrP2K3/AOfeL/vgUv2K2/59ov8AvgUexp92HNIq/wBsWP8A z2b/AL9t/hR/
bFj/AM9m/wC/bf4Vb+w23/PtD/3wKX7Dbf8APtD/AN8Cl7Kn3Yc0in/bFj/z 2b/v23+FH9sW
P/PZv+/bf4Vd+w23/PtD/wB+xS/YbX/n2h/79ij2VPuw5pFH+2LH/ns3/ftv 8KP7Ysf+ezf9
+2/wq/8AYbX/AJ9Yf+/YpfsFr/z6w/8AfsUeyp92HNIz/wC2LH/ns3/ftv8A Cj+2LH/ns3/f
tv8ACtH7Ba/8+sH/AH7FL9gtP+fWD/v2KPZU/MOaRm/2xY/89m/79t/hR/bF j/z2b/v23+Fa
f2C0/wCfWD/v2KcLC0/59IP+/Ypezp+Yc0jK/tix/wCezf8Aftv8KP7Ysf8A ns3/AH7b/CtX
7BZ/8+kH/fsU7+z7P/n0g/79j/Cj2dPzDmkZH9sWP/PZv+/bf4Uf2xY/89m/ 79t/hWx/Z9n/
AM+kH/fsf4Uv9n2X/Ppb/wDfsf4Uezp+YXkY39sWP/PZv+/bf4Uf2xY/89m/ 79t/hW1/Z9l/
z52//fpf8KP7Psv+fO3/AO/S/wCFHs6fmO8jF/tix/57N/37b/Cj+2LH/ns3 /ftv8K2/7Psv
+fO3/wC/S/4Uv9nWX/Pnb/8Afpf8KXJT8wvIw/7Ysf8Ans3/AH7b/Cj+2LH/ AJ7N/wB+2/wr
c/s6y/587f8A79L/AIUf2dZf8+dv/wB+l/wo5KfmF5GH/bFj/wA9m/79t/hR /bFj/wA9m/79
t/hW5/Z1l/z52/8A36X/AAo/s6y/587f/v0v+FHJT8wvIw/7Ysf+ezf9+2/w o/tix/57N/37
b/Ctz+zrL/nzt/8Av0v+FH9nWX/Pnb/9+l/wo5KfmF5GH/bFj/z2b/v23+FH 9sWP/PZv+/bf
4Vuf2dZf8+dv/wB+l/wo/s6y/wCfO3/79L/hRyU/MLyMP+2LH/ns3/ftv8KP 7Ysf+ezf9+2/
wrc/s6y/587f/v0v+FH9nWX/AD52/wD36X/Cjkp+YXkYf9sWP/PZv+/bf4Uf 2xY/89m/79t/
hW5/Z1l/z52//fpf8KP7Osv+fO3/AO/S/wCFHJT8wvIw/wC2LH/ns3/ftv8A Cj+2LH/ns3/f
tv8ACtz+zrL/AJ87f/v0v+FH9nWX/Pnb/wDfpf8ACjkp+YXkYf8AbFj/AM9m /wC/bf4Uf2xY
/wDPZv8Av23+Fbn9nWX/AD52/wD36X/Cj+zrL/nzt/8Av0v+FHJT8wvIw/7Y sf8Ans3/AH7b
/Cj+2LH/AJ7N/wB+2/wrc/s6y/587f8A79L/AIUf2dZf8+dv/wB+l/wo5Kfm F5GH/bFj/wA9
m/79t/hR/bFj/wA9m/79t/hW5/Z1l/z52/8A36X/AAo/s6y/587f/v0v+FHJ T8wvIw/7Ysf+
ezf9+2/wo/tix/57N/37b/Ctz+zrL/nzt/8Av0v+FH9nWX/Pnb/9+l/wo5Kf mF5GH/bFj/z2
b/v23+FH9sWP/PZv+/bf4Vuf2dZf8+dv/wB+l/wo/s6y/wCfO3/79L/hRyU/ MLyMP+2LH/ns
3/ftv8KP7Ysf+ezf9+2/wrc/s6y/587f/v0v+FH9nWX/AD52/wD36X/Cjkp+ YXkYf9sWP/PZ
v+/bf4Uf2xY/89m/79t/hW5/Z1l/z52//fpf8KP7Osv+fO3/AO/S/wCFHJT8 wvIw/wC2LH/n
s3/ftv8ACj+2LH/ns3/ftv8ACtz+zrL/AJ87f/v0v+FH9nWX/Pnb/wDfpf8A Cjkp+YXkYf8A
bFj/AM9m/wC/bf4Uf2xY/wDPZv8Av23+Fbn9nWX/AD52/wD36X/Cj+zrL/nz t/8Av0v+FHJT
8wvIw/7Ysf8Ans3/AH7b/Cj+2LH/AJ7N/wB+2/wrc/s6y/587f8A79L/AIUf 2dZf8+dv/wB+
l/wo5KfmF5GH/bFj/wA9m/79t/hR/bFj/wA9m/79t/hW5/Z1l/z52/8A36X/ AAo/s6y/587f
/v0v+FHJT8wvIw/7Ysf+ezf9+2/wo/tix/57N/37b/Ctz+zrL/nzt/8Av0v+ FH9nWX/Pnb/9
+l/wo5KfmF5GH/bFj/z2b/v23+FH9sWP/PZv+/bf4Vuf2dZf8+dv/wB+l/wo /s6y/wCfO3/7
9L/hRyU/MLyMP+2LH/ns3/ftv8KP7Ysf+ezf9+2/wrc/s6y/587f/v0v+FH9 nWX/AD52/wD3
6X/Cjkp+YXkYf9sWP/PZv+/bf4Uf2xY/89m/79t/hW5/Z1l/z52//fpf8KP7 Osv+fO3/AO/S
/wCFHJT8wvIw/wC2LH/ns3/ftv8ACj+2LH/ns3/ftv8ACtz+zrL/AJ87f/v0 v+FH9nWX/Pnb
/wDfpf8ACjkp+YXkYf8AbFj/AM9m/wC/bf4Uf2xY/wDPZv8Av23+Fbn9nWX/ AD52/wD36X/C
j+zrL/nzt/8Av0v+FHJT8wvIw/7Ysf8Ans3/AH7b/Cj+2LH/AJ7N/wB+2/wr c/s6y/587f8A
79L/AIUf2dZf8+dv/wB+l/wo5KfmF5GH/bFj/wA9m/79t/hR/bFj/wA9m/79 t/hW5/Z1l/z5
2/8A36X/AAo/s6y/587f/v0v+FHJT8wvIw/7Ysf+ezf9+2/wo/tix/57N/37 b/Ctz+zrL/nz
t/8Av0v+FH9nWX/Pnb/9+l/wo5KfmF5GH/bFj/z2b/v23+FH9sWP/PZv+/bf 4Vuf2dZf8+dv
/wB+l/wo/s6y/wCfO3/79L/hRyU/MLyMP+2LH/ns3/ftv8KP7Ysf+ezf9+2/ wrc/s6y/587f
/v0v+FH9nWX/AD52/wD36X/Cjkp+YXkYf9sWP/PZv+/bf4Uf2xY/89m/79t/ hW5/Z1l/z52/
/fpf8KP7Osv+fO3/AO/S/wCFHJT8wvIw/wC2LH/ns3/ftv8ACj+2LH/ns3/f tv8ACtz+zrL/
AJ87f/v0v+FH9nWX/Pnb/wDfpf8ACjkp+YXkYf8AbFj/AM9m/wC/bf4UVuf2 dZf8+dv/AN+l
/wAKKOSn5heRneH4wbCFiM4DEf8AfRrarK0AY0iA/wC9/wChGtWtK38R+pNP 4UI6h0Kt0NQr
aRKc4J9jU9FRcsZ5MX/PNP8AvkUeTF/zzT/vkU+ilcCCS1jZTtUBj3zUkMQi jCj6n60+indg
YPjHWo9A8N3F+5UyL8sKN/HIchRjIyO5xzgGuf8Ah34ZeHT5Ne1El7/VR57N tUbUYlhjH97I
Y9P4RgYrNud/jn4nfYiJf7G0Y/6RG5JjklRiOVIK5LHbg9VVsHtXqFc8f3lT n6LRevV/oexi
L4LCLDfbqWlLyj9mP6v5Fb7FF6t+dKLOIHJ3H2JqxRXRdnj2IfssP9z9TR9l h/ufqamoyKLs
CH7LD/c/U0fZYf7n6mpsijIouwIfssP9z9TTxDEBjy1/Kn5HrRRdgM8mL/nm n/fIo8mL/nmn
/fIp9FK4DPJi/wCeaf8AfIo8mL/nmn/fIp9FFwGeTF/zzT/vkUhgiIwY1/AY qSii4FWa1QIP
LTnPbJqv5XtWlURTLE+9UpCsUvK9qPK9qubKNlPmCxT8n2o8n2q5so2UcwWK fk+1Hk+1XNlG
yjmCxT8r2o8n2q5so2UcwWKfle1Hk+1XNlGyjmCxT8r2o8n2q5so2UcwWKfl e1cB4+0ufSLu
38YaZtW6tWVJ0ZF2spyoY9CTyEPU4IxjbmvS9lRXVlDe2k1rcJvhmjaORckZ UjBGRz0NZVY+
0hbr09TswGKeFrqpa62a7xe6+aM3Tbu31bTbe/tW3QzoHXkEj1BwSMg5BHYg 1b8r2rhfB0tx
4Y8YXvg68lle1fM2nM+T8vLYHyjquSeihkbHJr0bZRRq88bvfr6jzDCLDVuW LvF6xfeL2/yf
min5PtR5PtVzZRsrXmOKxT8n2o8r2q5so2UcwWKnle1HlVb8ujZRzBYq+VR5 ftVrZS7KLhYq
+XS+XVnZRspXCxX8ujy6sbKXbRcCv5dLsqfbRtouBDso2VNtpdtFwIdlLsqX bRtpXAj20bak
xS4ouBHtpcU/FGKLjG4oxTsUuKAG4paXFGKQCYpaMUtACUtFFABRRRQAUUUU AFFVL7VdO0zy
/t9/a2nmZ2efMse7GM4yecZH51zt18S/Cdr56/2n50kW4bIYXbeR2VsbTnsc 498VEqkI/E7H
TRweIr60qbl6Js62ivOT8WY76ZYdC8O6jqMoUtIh+VlAwAQED5HPtjj1oj8Q /Em9U3Fr4Xs4
7d2by0uDtkUZIAYNIpz77Rnrjms/rMH8N36Jnb/YuKir1eWH+KUV+tz0aivO Y7D4pXim4bVt
OsTIzH7MyITGMnAyI249PmJx15oi+HviYwoZvHmopKVG9UMjKD3AJkGR74H0 o9tJ/DB/gg/s
6hD+LiYL05pfkj0asuXxJoUEzwza1p0csbFXR7pAykcEEE8GuNi+DWhCFBNf 6i8oUb2R0VSe
5AKnA9sn61qWvwt8J29ukUljLcuucyy3Dhm577SB7cDtRzVn9lL5/wDAD2GW Q3rSl6QS/ORp
3vjfwxYQiWbW7NlLbcQSec2fomTjjr0qj/wszwh/0F//ACWl/wDiKmtfh34T tLhJ49GiZ1zg
SyPIvIxyrMQfxFaP/CLeHv8AoA6X/wCAcf8AhR+/8vxC+VLpUf8A4Cvws/zO Xuvi94at7h4o
47+5RcYlihUK3HbcwPtyO1Rf8Lk8Pf8APnqn/fqP/wCLru7PT7LToTDY2kFr EzbikEYRSemc
AdeB+VWKOSt/Mvu/4IPEZatFQk/Wf/2p55/wuTw9/wA+eqf9+o//AIuj/hcn h7/nz1T/AL9R
/wDxdeh0Uclb+f8AD/gi+s5d/wBA7/8AA/8A7U88/wCFyeHv+fPVP+/Uf/xd H/C5PD3/AD56
p/36j/8Ai69Doo5K38/4f8EPrOXf9A7/APA//tTzz/hcnh7/AJ89U/79R/8A xdH/AAuTw9/z
56p/36j/APi69Doo5K38/wCH/BD6zl3/AEDv/wAD/wDtThLP4t+GLqYpMbyz ULnzJ4cqT6fI
WOfwxxV7/hZnhD/oL/8AktL/APEV0V9pWnan5f2+wtbvy87PPhWTbnGcZHGc D8qqf8It4e/6
AOl/+Acf+FFq66r7v+CP2mVy1dOa8lJNfjEhtfGXhq7t0nj1ywVGzgSzrG3B xyrYI/EVbtdf
0a9uEt7TV7Ced87Y4rlHZsDJwAc9ATWNL8N/CM0zyto6hnYsQk0irk+gDAAe w4qpe/CrwrdQ
hIbWezYNnzIJ2LEenz7hj8M8UXrrovxDkyqTspzXqou33PU7WivOZPg9pUSi TTtV1G2vEZWi
mZlYIQQc4AU59MEYPNEngPxZbKJ7LxzeTXMbKyR3BkEbEEfe+duPYqQelHtK q3h+KBYLAy+D
E/fGS/K6PRqK85e2+KWnNHcC907VAGwbZVRQQQeSSqcDjo2c47ZofxP8Q9Oa OfUfCkE9sW2t
HZktITg4+674HHUrjt3FH1hLeLXyD+yJy/h1YS9JJP0s7Ho1Fecp8XbK1aSD WdD1GxvEbmBQ
GIBAIJ3bCDz0x0xzzW/a/ETwnd3CQR6zErtnBljeNeBnlmUAfiaccRSltIyq 5RjqSvKk7d0r
r71dHT0VXs9QstRhM1jdwXUSttLwSB1B64yD15H51YrZO+x58ouLtJWYUUUU CCiiigAooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAzdAH/Elt
/wDgX/oRrSrC0f8A5BUP/Av/AEI1cd9vAUsxBIUYzgdTzWlX+JL1ZEPhRo0Y rK+0N/zxb/v5
H/8AFUfaG/54t/38j/8AiqnlZV0auKKyvtDf88W/7+R//FUfaG/54t/38j/+ Ko5WF0atcj8R
vEI0DwtKInAvbs+Tb4PzL/eccgjaOhHRitbP2hv+eLf9/I//AIqvPLmeXxb8 S7eONJBp+hNv
cgqMyhhnkjHLBRjPIRiDWFfmUeWO70R6eVUoTrurVXuU1zP5bL5uyO08EeGY /DPh2CBolW+m
USXbgfMXPO0nJyFzt4OOp7mukrK+0N/zxb/v5H/8VR9ob/ni3/fyP/4qtYUu SKiuhxYjETxF
WVWo7uTuzVorK+0N/wA8W/7+R/8AxVH2hv8Ani3/AH8j/wDiqrlZjdGrRisr 7Q3/ADxb/v5H
/wDFUfaG/wCeLf8AfyP/AOKo5WF0auKMVlfaG/54t/38j/8AiqPtDf8APFv+ /kf/AMVRysLo
1cUYrK+0N/zxb/v5H/8AFUfaG/54t/38j/8AiqOVhdGrRWV9ob/ni3/fyP8A +Ko+0N/zxb/v
5H/8VRysLo1aKyvtDf8APFv+/kf/AMVR9ob/AJ4t/wB/I/8A4qjlYXRq4oxW V9ob/ni3/fyP
/wCKo+0N/wA8W/7+R/8AxVHKwujVxRisr7Q3/PFv+/kf/wAVR9ob/ni3/fyP /wCKo5WF0auK
MVlfaG/54t/38j/+Ko+0N/zxb/v5H/8AFUcrC6NXFGKyvtDf88W/7+R//FUf aG/54t/38j/+
Ko5WF0auKMVlfaG/54t/38j/APiqPtDf88W/7+R//FUcrC6NXFGKyvtDf88W /wC/kf8A8VR9
ob/ni3/fyP8A+Ko5WF0auKMVlfaG/wCeLf8AfyP/AOKo+0N/zxb/AL+R/wDx VHKwujVxRisr
7Q3/ADxb/v5H/wDFUfaG/wCeLf8AfyP/AOKo5WF0auKMVlfaG/54t/38j/8A iqPtDf8APFv+
/kf/AMVRysLo5z4l+Hv7Q0M6xZr5ep6biZJkO1zGvLDdkYx98dSNpA+9W94V 12LxJ4dtdRUq
JWXbOi4+SQcMMZOB3GTnBB71L9ob/ni3/fyP/wCKrzzwdPL4W8Vah4WnSQwT sZ7Mkrk8Z64A
OVHJzgFCB1rmlF06ql0lp8+h7NGX1vATpPWVL3l/hfxL5aP7z1jFGKyvtDf8 8W/7+R//ABVH
2hv+eLf9/I//AIqunlZ410auKMVlfaG/54t/38j/APiqPtDf88W/7+R//FUc rC6NXFGKyvtD
f88W/wC/kf8A8VQJmJx5D/g6H9A2aOVhdGrijFZ4IZQykEEZBHelqRl/FGKo U1m244JJOFUd
SfSgDRxRisr7Q3/PFv8Av5H/APFUfaG/54t/38j/APiqrlYro1aKyvtDf88W /wC/kf8A8VR9
ob/ni3/fyP8A+Ko5WF0atFZX2hv+eLf9/I//AIqj7Q3/ADxb/v5H/wDFUcrC 6NWisr7Q3/PF
v+/kf/xVH2hv+eLf9/I//iqOVhdGrRWV9ob/AJ4t/wB/I/8A4qj7Q3/PFv8A v5H/APFUcrC6
NWisr7Q3/PFv+/kf/wAVR9ob/ni3/fyP/wCKo5WF0atFZX2hv+eLf9/I/wD4 qj7Q3/PFv+/k
f/xVHKwujVorK+0N/wA8W/7+R/8AxVH2hv8Ani3/AH8j/wDiqOVhdGrRWV9o b/ni3/fyP/4q
sHVfHOh6OSl1chpRuHlQMkrBl6qdrHae3zY/Q1MmoK8nY1o0aleXJSi5PyTZ 2dFeWN8RtT1Q
snh3w5cTqzrHHcz52BuMhwvA6/3+OCfSoZNA8b+Id39s6uthbOrj7PauhwGO NjBWUMuPVmP5
msFX5v4ab/Bfez0/7InS1xdSNNebvL/wGN399j0PU/FGhaN5ov8AVbWGSLG+ LzA0gzjHyDLd
wenTnpXK33xb0dJmttKs7zUrlmVYQibElJxwCfmzzj7vJH41Hp/w88OWG1n0 +e7kV96vc3CH
04KqwUjjoQetdPaQWunxGKy06K2jLbikPlICemcBuvA/KnyYiXVL8Re0yujt GVR+fur8Lv8A
H/M5M698Rdd3jTNBi0q3eRUEt0MSRdMk78bh15CHjIGSKG8B+LdWSdtY8ZSx vNlHhtg7RMm0
DlQUAzzkbffnJrtPtDf88W/7+R//ABVH2hv+eLf9/I//AIqj6rf4238/8g/t mVP/AHenGHpG
7++VzmbP4SeGLWYvMLy8Urjy55sKD6/IFOfxxzW/a+DfDVpbpBHodgyLnBlg WRuTnlmyT+Jq
f7Q3/PFv+/kf/wAVR9ob/ni3/fyP/wCKq44aEdoo5q2aYyt/Eqyfzf5GrRWV 9ob/AJ4t/wB/
I/8A4qj7Q3/PFv8Av5H/APFVrys4bo1aKyvtDf8APFv+/kf/AMVR9ob/AJ4t /wB/I/8A4qjl
YXRq0VlfaG/54t/38j/+Ko+0N/zxb/v5H/8AFUcrC6NWisr7Q3/PFv8Av5H/ APFUfaG/54t/
38j/APiqOVhdGrRWV9ob/ni3/fyP/wCKo+0N/wA8W/7+R/8AxVHKwujVorK+ 0N/zxb/v5H/8
VR9ob/ni3/fyP/4qjlYXRq0VlfaG/wCeLf8AfyP/AOKo+0N/zxb/AL+R/wDx VHKwujVorK+0
N/zxb/v5H/8AFUfaG/54t/38j/8AiqOVhdGrRWV9ob/ni3/fyP8A+Ko+0N/z xb/v5H/8VRys
Lo1aKyvtDf8APFv+/kf/AMVR9ob/AJ4t/wB/I/8A4qjlYXRq0VlfaG/54t/3 8j/+Ko+0N/zx
b/v5H/8AFUcrC6NWisr7Q3/PFv8Av5H/APFUfaG/54t/38j/APiqOVhdGlLF HPC8M0ayRSKV
dHGVYHggg9RWHe+CPDF/CIptEs1UNuzBH5LZ+qYOOenSrX2hv+eLf9/I/wD4 qj7Q3/PFv+/k
f/xVTKkpbpM1pYmrSd6cnH0bRyl/8IPD1y0z2s15Zsy/u0WQPGhxgHDAsRnk jd+IqE+DvG+m
zLLpXjJrlmUrIL7dtUcYwG8wE+/BH4mux+0N/wA8W/7+R/8AxVH2hv8Ani3/ AH8j/wDiqyeE
hulb0dj0I55jLctSXOu0kpfmr/icXH4p8f6R5S6v4V+3I0e0NacuWGPmYoXA zzxtGc8dMVb0
34ueHbvat4t1Yv5YZmkj3pu4yoKZJ78lR07dK6n7Q3/PFv8Av5H/APFVUvLS y1HZ9u0uC68v
OzzxC+3PXGTx0H5UvYVo/DL77FfXsDV/jULPvBtfg7ov6br2kavtGn6la3Lt GJPLjlBcLxyV
6jqOo4zWjXmmo/DXQLuLFpbXNjIFbDR3COCT0LB3OQPQEdTz6VE07x/oU3+g ahFq1tvz5d3K
m5srgk7myAD2D++OTRzVYfHH7tfw3D6ngq/+717PtNcv/kyuvyPVqK8si+J0 1j5S6/4evbPc
nEiA/vHGM4VwuBz/AHjjjr1rp9L8XaPrRC2FykkhYqI3dI3YgZOFYgkY7gY6 +lVCtCbsnr93
5mGIyzF4ePPOD5e61X3q6OsorK+0N/zxb/v5H/8AFUfaG/54t/38j/8Aiq25 WefdGrRWV9ob
/ni3/fyP/wCKo+0N/wA8W/7+R/8AxVHKwujVorK+0N/zxb/v5H/8VR9ob/ni 3/fyP/4qjlYX
Rq0VlfaG/wCeLf8AfyP/AOKo+0N/zxb/AL+R/wDxVHKwujVorK+0N/zxb/v5 H/8AFUfaG/54
t/38j/8AiqOVhdGrRWV9ob/ni3/fyP8A+Ko+0N/zxb/v5H/8VRysLo1aKyvt Df8APFv+/kf/
AMVR9ob/AJ4t/wB/I/8A4qjlYXRq0VlfaG/54t/38j/+Ko+0N/zxb/v5H/8A FUcrC6NWisr7
Q3/PFv8Av5H/APFUfaG/54t/38j/APiqOVhdGrRWV9ob/ni3/fyP/wCKo+0N /wA8W/7+R/8A
xVHKwujVorK+0N/zxb/v5H/8VR9ob/ni3/fyP/4qjlYXRq0VlfaG/wCeLf8A fyP/AOKoo5WF
0V9H/wCQVD/wL/0I1aMRmnCLjJibr/vLVXR/+QVD/wAC/wDQjV+NhHPvIOAh 6fUVdR2qS9WT
H4EJ/Zv/AE1/8d/+vR/Zv/TX/wAd/wDr046iBdpD9lnMbDJn+TYvsRu3fkD1 q35sf99fzqW5
IdkUG01wfldSPfip47CJUAkG5u5yasggjIII9RS0uZjsjjvHesQeGtCaeFlS 7mDR265yS3Hz
YIP3c5546DuKzfBHh260XQrMCwZ5r79/cTbkAjBGVU5w3Axxg4JbmsXxtdN4 y8XW2j6ZbtI2
lLK80mY2DE7eArMAQCFByc8njjn03Sm+zaPZQXBQTRW8aSBFwoYKAcADAGfS safvzdTe2i/V
/oetif8AZcFDDLSVT35em0V+cu+ov9m/9Nf/AB3/AOvR/Zv/AE1/8d/+vVwS xkZ3r+dIZ4lO
C4/DmtuZnk2RU/s3/pr/AOO//Xo/s3/pr/47/wDXq19pi/v/AKGj7TF/f/Q0 c0gsir/Zv/TX
/wAd/wDr0f2b/wBNf/Hf/r1a+0xf3/0NKLiInAf8xijmkFkUm01wfldSPfim Np8+V2mMjPzZ
YjA9uOa0vNj/AL6/nR5sf99fzo5mFkZ/9nS/3k/M/wCFH9nS/wB5PzP+FaHm x/31/OnUczCy
M3+zpf7yfmf8KP7Ol/vJ+Z/wrRJAGSQB6mk82P8Avr+dHMwsjJltZIeWAxnG Qai21pXbo8YV
WBOc8VT21SkS0Q7aNtTbaNtO4WIdtG2pttG2i4WIdtG2pttG2i4WIdtG2ptt G2i4WIdtG2pt
tG2i4WIdtG2pttG2i4WIdtG2pttG2i4WIdtG2pttG2i4WIdtG2pttG2i4WId tcZ8QtIlext9
csRi901xJuVQSUznOMHO04PPAG6u5202SCOaJ4pUV43UqyMMhgeoI7is6sFU g4s6sDiZYTER
rR1tuu66r5ozdG1KLWtHtdRhGFnTcV5O1ujLkgZwQRnvir22uD8BynQtb1Tw ndsokSUzQPwD
IMDP8R5K7WAHQbs9K9C20qFVzgm9+vqa5lhI4bEyhDWD1i+8XqiHbRtqbbRt rW5wWIdtSQL+
/j/3h/OnbafEv75P94UXCwWwxawj0Rf5VLTIhiFB6KKfWb3KWwVFKMtH9W/9 Aapaawyy/wDA
v/QTQtwZmzXNtbOiT3EUTPnaHcKWx1xnrimre2b2hu1u4Gth1mEgKD/gWcVl eIdFn1TWdGkF
qs9rBIxuA5XABx1BPPSsKbwnqjaReQRW6pt1I3EUG9AJI8YGOoH0NdtOnTlF Nys/+Cc8pTUr
JX/4Y7BNS094PPS+tmh37PMEyld3pnPX2pzXtmrzI11AGgG6UGQZjHq3p+Nc raeFLmfTdUEt
i9nNcRgJG1xGwLLyp2xoqrzxn68VUbwrrkyRzugFzqDsmoAOuI496kEc88Ke metWqNK9uf8A
r+r/AIE+0na/Kd4hSWNZI2V0YAqynII9Qa5lvFoebUFtbe1lSzYLmS9WIyZO CRkYwD3z6etb
39qaTbuLX+0bNHQ+X5RnUEEcYxmuPuvCl+1n4hWHT0ElzcKbXDIMx78nBzwO nBxU0Iwu/aeV
r+q/Qqo5WXLv/wABnXS6lY2yx/a7y2t3kUMFkmUZHtk8/WqrawF8Sro/kcNb +f52/wB8Yxj2
65rmtT8L6odVnnGnm+huIUX5JoUaMhQCMyK2OnVcfWrL+FdQN+I40KQDSmtR K0wfa/OBnAJH
I52jirVKkldy3X9f11J56jdrdjXl8RW39sWFjbeVcpdlwZopgQhUZxgZz+Yp IvElrc+IxpFs
BMQjM8yt8qkfwjjn86w9J8O6nDq2izyaPDaJaKyTyRyoWkO3h2A9c+569K3Z NHnTxlZ3sFsq
WUVq0bMpUAMSxxjr39KJwoxdk76Pr11t+gKVR6+a/S5tbayLXxDaXV1eQ+Vc Qx2ZZZbiVQsQ
IOCN2etbu2uU8LfZprrXrSUxO7X8jGFsEleOdvpmsKaTjJvoazbTVi3o3iK2 1iO+mRRDbWr7
fNkbAZcZ3HONopda8SWGj6ct15kdw0gzDHG4/ee4Izx71gXt1b+HLfxGNVaF JL6V3trdn3NM
pDYyqHcAcYycfWsNbjxJ4p0WO00fQ4raySIRtOesgBPyqzn7uVHAyQRyeamr Xw8Klt9tFq9v
67Hdhcsxdem6jtGGvvS0W+lu/wArnbap4ssNGSya/jnQXce9WRQyr0znkE4y OgrCufiMtzLJ
beH9Iu9QmVXO7YcADADBVyxXJ77e3rxj6h4Lt9OXTZNVv5LzUrq4ijliaTGI 8AEDnccYxuyB
jHAr1S3tILSBYLaCOGFc7Y40CqMnJwB71zTVecVL4E7+b/y/M64yy3DPls60 lb+7H5fafzse
fnwx4r8SFf8AhINTW0smYs1pb4z94HacfKRgZBJbHHHWt3TfAnh/TVGLFbmT aVMl1+8JBOfu
n5Qe2QB/Ouo20bamNCmndq77vUitm2KqR9nB8kf5Y+6vw3+bZDto21Nto21v c8yxDto21Nto
20XCxDto21Nto20XCxDto21Nto20XCxDto21Nto20XCxDto21Nto20XCxDto 21Nto20XCxDt
o21Nto20XCxDto21Nto20XCxDto21Nto20XCxDto21Nto20XCxDto21Nto20 XCxDto21Nto2
0XCxDto21Nto20XCxDto21Nto20XCxDto21Nto20XCxDto21Nto20XCxDto2 1Nto20XCxDto
21Nto20XCxDto21Nto20XCxXkhSaJ4pUV43UqyMMhgeoI7iua1L4feH9SYuL VrSQsCWtW2Ag
DGNpBUD6D+tdbto21E4QmrSVzow+Kr4aXNRm4vyZ5x/ZPjXwvDnTb2PVbGH7 tvIuX27P7p5A
GOFVvTjkirdr8SLFbk2us6fd6ZOG+YOpcKNuQW4DAn02nt+HebarX+mWeqWr W19bR3EJ/hdc
4OCMg9jgnkc1h7KcP4Uvk9V/mej/AGjQxH++UU3/ADR92Xq18LfqiO0u7S/i Mtncw3EYbaXh
kDgH0yO/IqfbXF3vw7ayuvt/hbUJNOuRj907kxsMrxnk44JIO4E46Cq6+Ltf 8MSi38Vaa09v
u2pfWwHzfex6KScDA+UgDJBp/WXDSqree6F/ZUMQubBVFP8Auv3Zfds/kzvN tG2q2l6xputw
GbTryO4UfeCnDLyQNynkZwcZHNX9tdCmmro8qpSnTk4TVmuj0ZDto21Nto20 7kWIdtG2pttG
2i4WIdtG2pttG2i4WIdtG2pttG2i4WIdtG2pttG2i4WIdtG2pttG2i4WIdtG 2pttG2i4WIdt
G2pttG2i4WIdtFTbaKLhYh0f/kFQ/wDAv/QjV8AfNn+7j9RVDR/+QVD/AMC/ 9CNXqVX+JL1Y
4fChNo9KNo9KWisyhUYx52nGar6pqsWmaXc313JiCCMu2MAn2Gcck8AdyRU9 eZeNNZutV8P+
H9IDW6Xmr+U82yVWVc7dv3d3yljkMCfuHBNZ1puFNyR2ZfhvrOJhSez3fZLV /gaPwwspn0q/
1q7LNcancFyxK4cKT8wA6Hcz/kOPXu9o9K5zwVHcrozia+lnihnltII3RAIo 4ZXjXBVQSSFG
SSenAHOekp0oezgohmGJ+s4qdW1rvT0Wi/BCbR6UbR6UtFWcYm0elG0elLRQ Am0elG0elLRQ
Am0elG0elLRQAm0elG0elLRQAm0elG0elLRQAm0elG0elLRQAm0elG0elLRQ Am0elG0elLRQ
Am0elG0elLRQAm0elG0elLRQAm0elG0elLRQAm0elG0elLRQAm0elG0elLRQ Am0elG0elLRQ
Am0elG0elLRQAm0elG0elLRQB554/D6J4k0HxPH5vlxSfZ7grtPyZJwAe7K0 gz7DpXfxPFPE
ksTrJG6hkdGyGB5BB7iuV+Itjc33hxYre9kh8y4hgMOE8uUySooLkqWG0nI2 ke+aZ8NdabVf
CscErKZ7Fvs5AYZKADYSAOBj5ffYTnrXPH3KrXSX5q1/0PYqr6zl0Kv2qT5X /hd3H7ndHYbR
6UbR6UtFdB44m0elOQASKfcUlFACAYUD0FLRRQAUoHzfgf5GkooAbto206in cBu2jbTqKLgN
20badRRcBu2jbTqKLgN20bayPEmoyaVYW96lwsSpdwrKr7dskbuEYEnpgNvy CPuDPGQfPT41
8QazrUltod1IPPmaKMyRxiCJQWZSuU37ikZY7mPVwE4BrKpWjDc7cJl9fFXl BWit5PRL1Z6L
rviDTPDtotxqM+zfkRxqNzyEDOAPy5OAMjJGa4SO+1/xVcSyeGNHg0i0m3B9 RkQJJKCWz84G
ecDO0Ehh96r+h+A9O1Wx07Xrq+1Ce8urRJnNw0cwJeLHIdGzjIIzn7o616F0 GBUuNWeknyrs
t/mzr9tgsHpSj7Sf80vhT8o9fVv5HHaN8OdJ0+VrrUWbVb12LPLcjKEnOTs5 yTnncW5GRiuv
206itIQjBWirHn4nF18VPnrScn+Xotl8irPp1ndTRzXFpBLLH9x5IwxXvwSO KsbacBiir5nb
U5rIbto206ii4xu2jbTqKLgN20badRRcBu2jbTqKLgN20badRRcBu2jbTqKL gN20badRRcBu
2jbTqKLgN20badRRcBu2jbTqKLgN20badRRcBu2jbTqKLgN20badRRcBu2jb TqKLgN20badR
RcBu2jbTqKLgN20badRRcBu2jbTqKLgN20badRRcBu2jbTqKLgN20badRRcB u2jbTqKLgN20
badRRcBu2mywRzRPFKiyRupV0cZDA8EEdxUlFIFpqjhtX+G9rJOb/QLqTSr8 bivlMRGSQ2cY
5TOQOOAP4aor4w8Q+FpRb+K9Mae33bUvrYD5vvY9FJOBgfKQBkg16PTJYo54 nilRZI3Uq6OM
hgeCCO4rB0LO9N8r/D7j1oZrKcVTxkfaRXf4l6S3+TuinpeqWGtWQvNOuVng LFdwBBBHUEHk
H69iD3q7trgtS+Hdxb6lcap4a1P+z7h2ytuFKx4+UlcgnjIJxgjoMACszw/4 ruvCUiaH4oFx
bJb28SQHy1dVUFznKDJG3Ygxu5Q55zQq7jpVVn+D/wAhzy2FaLqYGXOusXpN fL7Vu6+49Q20
barWWp2eo+d9jnWYROEdkBxkorjB6EFWU5HHNW63ueQ1bRjdtG2nUU7gN20b adRRcBu2jbTq
KLgN20badRRcBu2jbTqKLgN20badRRcBu2inUUXAo6P/AMgqH/gX/oRq9VHR /wDkFQ/8C/8A
QjV6rq/xJerJh8KCiiisygrzPR7W28afEDU766jt59M01PssMBCyRyKdyrxt wynDt7Er1Are
8farb6forLO2oQSMHa2mtZmiBmC4VWKsCfvFtp4IjbIOMHl/AMF1pup6Tb3D iO3vLd7uFJL5
ovMkO8NsjUbZiI0iJVj8m4sBnpz1Peqxh03/AMj2MH+4wNbEdZe4vnrL8LK/ n9/qUNvDbR+X
BFHEhZm2xqFGSSScDuSST7mpKKK6DxwooooAKKKKACiiigAooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAI5oIbhAk8SS qGVwrqGAZSCD
z3BAIPqK89hkPg34lXYuZki0rWVaczzuERHGWOWIA4O4Yz0dc5NejV5b8Y7e S6GloqbokhuJ
JjuwQu6FPX1cDjnmsa0Xy8y+zr/n+B62TtTrvDT+GonHXvvF/wDgVj1LqMii uT8MXtvd6tMW
urhZPskLWNrNdOxNoY4z5hQsQzeYWUucnjGeeesra6eqPKlFxdpbhRRRQIKK KKACiiigAooo
oAKKKKACg8jrj3oooAZDG0UEcbyvMyqAZHADOfU7QBk+wArnfF3irSPD9skV /CLu4kxJFagA
8qdyu2fugMoweTkZAODjO8Q+Kb+71hfDnhbbJqO7/SLogMluAeRyCMjucHHQ AseLXhbwRbaD
L/aN3K17q8ikyzudwVjncUzzk5wWPJ56ZIrCVWU5ctP7+x61LB0cPBVsa99V Bbvzb+yvxfRH
Mab4CvvE2tSeIPE0SWfnOrm0jBDSDYo5O4mMHamR14P3eDXf2HhvRNLmWax0 mygnWPyvPSBR
IV9C+Nx6Dqea1KKqnSjDbfuc+MzCtirRlpFbRWiXy7+b1GQwxW8EcEEaRRRq ESNFCqqgYAAH
QAU+iitThCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAo
oooAKKKKACs3VfD+k62oGpafBcMBtWRlw6jIJAcfMMkDODzitKik0mrMqE5Q kpQdmuqPMTpG
vfDmS4u9IxqejP8AvbiGQYaMAjng9duBuAxwSVwBXdaF4i03xFaNcadPv2YE kbDa8ZIzgj8+
RkHBwTitSuJ1vwBG16mreG5l0vU4mUoqjbCccHgA4JHXgg4wRyTWHJOlrDVd v8v8j2PrNDHq
2K9yp0mlo/8AGl/6UvmmdtRXI+E/Fkt/cPomtx/ZdctvlZGAAnAGdy44zjkg cEcjjp11awmp
q6PNxWFqYao6dRa/g10afVMKKKKs5wooooAKKKKACiiigAooooAKKKKAKOj/ APIKh/4F/wCh
Gr1UdH/5BUP/AAL/ANCNXq0q/wASXqyYfCgoqlcQQ3GqQLPDHKot5SFkQMAd 0fOD9ak/s2w/
6B9n/wCA6f4VFkO7OF+I7tq2paJ4Ygb95cziaUrGzNGvKhvQjBkJ/wB3tXoE UUcESRRIscaK
FREGAoHAAHYV51pFpDr3xS1K6+yoLHSkMCR+VGq7+UwVA+YE+awPXgdOBXY6 u+j6Lpkt/dWF
t5MeM7bZD1IAzxwMkcmueglKUp93b7j180bo0qOG/ljzP1lr+Csa9FeayeKZ vtErJomjra+Y
PJZogd6Hvkd8dsV2WkSaTrFkLiHTrZCDtdGgjypxnsORyOa7J0ZQV5Hhwrwm +WLNiiuautb8
NWd3c2smnySSWzBZjb6LNMiHaGwXSIr0YHr3rZhs9LuIUmhs7GSKRQyOkKEM DyCDjkVnZbmu
q0LlFVv7NsP+gfZ/+A6f4VHDZ6bOhdNOtwAzL89oEOQSDwVBxxwehHIyDRoG pdorOSLR5L+a
xWzszcwxpK6fZl4VywU5xjko35VY/s2w/wCgfZ/+A6f4UWQalmisPU73QdIu ILe6sFaadWeO
O20x7hiq4DHEaMQBuXk+tPe40OOFJpbGOKN/KCmXTmTmVtqDlBg7sAjquRnG aEkw1Nmiq39m
2H/QPs//AAHT/Cj+zbD/AKB9n/4Dp/hRoGpZoqt/Zth/0D7P/wAB0/wo/s2w /wCgfZ/+A6f4
UaBqWaKrf2bYf9A+z/8AAdP8KP7NsP8AoH2f/gOn+FGgalmiq39m2H/QPs// AAHT/Cj+zbD/
AKB9n/4Dp/hRoGpZoqt/Zth/0D7P/wAB0/wo/s2w/wCgfZ/+A6f4UaBqWaKr f2bYf9A+z/8A
AdP8KP7NsP8AoH2f/gOn+FGgalmiq39m2H/QPs//AAHT/Cj+zbD/AKB9n/4D p/hRoGpZoqt/
Zth/0D7P/wAB0/wo/s2w/wCgfZ/+A6f4UaBqWaKrf2bYf9A+z/8AAdP8KP7N sP8AoH2f/gOn
+FGgalmiq39m2H/QPs//AAHT/Cj+zbD/AKB9n/4Dp/hRoGpZoqt/Zth/0D7P /wAB0/wo/s2w
/wCgfZ/+A6f4UaBqWaKrf2bYf9A+z/8AAdP8KP7NsP8AoH2f/gOn+FGgalmi q39m2H/QPs//
AAHT/Cj+zbD/AKB9n/4Dp/hRoGpZqlq+nR6vo93p8u0LcRNGGZNwUkcNjuQc Ee4qT+zbD/oH
2f8A4Dp/hR/Zth/0D7P/AMB0/wAKTUWrMqE5wkpx3WpyHwuv2l8PTaXOvl3O nTsjRFGVlViW
G7PfdvGO2Onr3Feb6ZaQ6J8Vr7TJrVHtNUjM8CvFG4Dcvnp8qgiVQB7Zzwa7 /wDs2w/6B9n/
AOA6f4Vjhn7nK91p/XyPTzmK+te2htUSkvnv+NyzRVK3ght9UnWCGOJTbxEr GgUE7pOcD6Vd
rdqx5SCiiikMKKKKACo5ScovOGJ3YODgKT17dKkprjLJ7bv/AEE01uJmdcXV taRebcypDHnG
+S4dRn6lqW3uba7iEttIs0ZOA8dw7D8w1ZGtW9xHrmn34heW3ijkTKQmXypG xhyg5I4xxWZc
T67fw2MlxHPawF5VlMFvMCCPuEorCTBGe+M9e1dkaalFO/8AWv8AkYSnZtWO skkihieWU7I0
UsztO4CgdSTu4FcFqetXXjW8OieHHkisMA3t8WkwVP8ACAx6HkY4LHjhQScK /k1PxXc3Fjp2
oXV7p9jaqZZEVwLlgcj5P72TjnrsLc4xXTW2k3djevbwm4023XyWg+z2ksiv gDdu2Nt3EjDF
wT71yKDxLcYytBbvW79PI9tezyuEalWPNXaul0hfZy7y7LZaXOh0Hw9p3h2z a3sonLOcyTPI
2+TrjJUgcZwOP1JJvXN7a2bQLOzIZ5BFGPMlO5j0HDcVzRh1WO01S7calM4u 3iht98iqIyy4
cBcMwGONp6Z9TVeG21OV7NZkvJo4dXVkeSGQERbevzksFye5NdlPDxirJ6I8 bEYmpVm6k9ZP
q/68jtOP7rf9/pP/AIqjj+63/f6T/wCKqXZRsrn5i7EXH91v+/0n/wAVRx/d b/v9J/8AFVLs
o2UcwWIuP7rf9/pP/iqOP7rf9/pP/iql2UbKOYLEXH91v+/0n/xVHH91v+/0 n/xVS7KNlHMF
iLj+63/f6T/4qjj+63/f6T/4qpdlGyjmCxFx/db/AL/Sf/FUcf3W/wC/0n/x VS7KNlHMFiLj
+63/AH+k/wDiqOP7rf8Af6T/AOKqXZRso5gsRcf3W/7/AEn/AMVRx/db/v8A Sf8AxVS7KNlH
MFiLj+63/f6T/wCKo4/ut/3+k/8Aiql2UbKOYLEXH91v+/0n/wAVRx/db/v9 J/8AFVLso2Uc
wWIuP7rf9/pP/iqOP7rf9/pP/iql2UbKOYLEXH91v+/0n/xVHH91v+/0n/xV S7KNlHMFiLj+
63/f6T/4qjj+63/f6T/4qpdlGyjmCxFx/db/AL/Sf/FUcf3W/wC/0n/xVS7K NlHMFiLj+63/
AH+k/wDiqOP7rf8Af6T/AOKqXZRso5gsRcf3W/7/AEn/AMVRx/db/v8ASf8A xVS7KNlHMFiL
j+63/f6T/wCKo4/ut/3+k/8Aiql2UbKOYLEXH91v+/0n/wAVRx/db/v9J/8A FVLso2UcwWIu
P7rf9/pP/iqOP7rf9/pP/iql2UbKOYLEXH91v+/0n/xVHH91v+/0n/xVS7KN lHMFiLj+63/f
6T/4qjj+63/f6T/4qpdlGyjmCxFx/db/AL/Sf/FUcf3W/wC/0n/xVS7KNlHM FiLj+63/AH+k
/wDiqOP7rf8Af6T/AOKqXZRso5gsRcf3W/7/AEn/AMVRx/db/v8ASf8AxVS7 KNlHMFiLj+63
/f6T/wCKo4/ut/3+k/8Aiql2UbKOYLEXH91v+/0n/wAVRx/db/v9J/8AFVLs o2UcwWIuP7rf
9/pP/iqOP7rf9/pP/iql2UbKOYLEXH91v+/0n/xVHH91v+/0n/xVS7KNlHMF iLj+63/f6T/4
qjj+63/f6T/4qpdlGyjmCxFx/db/AL/Sf/FUcf3W/wC/0n/xVS7KNlHMFiMH arsoYMqMwPmO
RkDPIJPpVmUnKLzhid2Dg4Ck9e3SownyuPVG/wDQTUzjLJ7bv/QTUt6jRxni 7QtC1iKP+0bq
KxuwpENw02GI54Ic/MoJzjg+hGTWT4e8ZDT530TxJcqbiEgRXwndkmU4xuYH HQg7jjj72CDn
otXsLm58T6Q8LXEUaRzb54kB2ZAwCWBAz71z3iHRr/U7m/hnguJrZbiJVmaA yNHGU+Zoxx/F
tJCenIxxVSwvNapSlaTWt9nrazO7D5jHk+q4tOVJPS28dL3j5dGtn6nayXtr DeQWjswnnDGN
PMl+YL153YFCXttJey2asxuIlDunmS8A9DndivKre61bTNbh0eS4d3toJV06 aaJoncOuFUBw
D1GAPXgE8V2/hy1kXXbubyr4RNaxL5l2sgLOM7hl+fy4q6TjUpc97Nbrs7nL jcNPC1uR6xdn
GXSUWlqv60NttT05Lk2z3kCzg4MRu2DevTfmp4pobiJZYWEkbDKuk7kH6ENX LxQX9hqhTSZr
qa1nuGea3nsWQIG5ZxKQM89B/OqdmL6WLS4bwa1C6pvupwLklsMcIAuRk8ZJ HSt/Ypq6f9a9
PkcbqNOzX9af5nb8f3W/7/Sf/FVDc3VvaRq85ZFZ1jX97IcsxwBw3rXOWUOq vrjPeXV5A63b
YjFvM8ckXYbg3lgYPoCCOa1r9ftWv6bZAgrCGu5F+nyp+rE/hWbglJK/mVzX T0Ld1f2NkVF3
cxQF87fNumXP0y1To8csayR5dGGVZZnII9Qd1YOuWN7ceJdHe0UqFSYNM0Jk RMqOuCOvbmsy
70y/0pGsYG1F4orMCya2D7TNuyS+3gcn+LjFVGnGUV72r/zYpTak9NF/wDsi VUEkMAOSTNJ/
8VUEd9ZSlRHcROWTzFC3LHKZxuHzdM965vbrKa/EZPPukcKJFUTxLA235iCM RuufqTnFU9Ks
r0X+m3eoxalvaxZDJ++LCXzTgNjkDGPvcU1RVruX9a/5C9pd2t/V1/mdP/bu jf8AQTs//A4/
/F0V5jt8Y+mu/wDkaiur6lH+f8TH6zL+X8D17R/+QVD/AMC/9CNXqo6P/wAg qH/gX/oRq9Xl
Vf4kvVndD4UVm/5C0P8A17S/+hxVl+K76PTtI+1yLA6xGRglwMxuwikKKR3y 23j1xWo3/IWh
/wCvaX/0OKuP+Kt+LbwotqDEXu51Xa33tq5Yso9iFBP+171hWn7Om5eR25dh vrOLhR6OSv6d
fwMn4ZwPb2Ns7w2g+03TyRzRsTMyCN1KONowAy5GGbO7tjnoPHomFnaNGBMJ HaA20nEcu7By
zZAGArdQc5PFb2k6Na6VYWkCRQtNBCsRnWIKz4UAn8cetXLm2hvLeS3nQPFI pVlPoRj8KdFe
zjFdicwrvFYipVv8Tf3dPwPMbi105dH1BJrFbrzLTybQW4DpHLznB7EHac+g P0roPhxYXVjo
kgus7yVQ5JyCM5zx74q/beELG0aG3jub02ixPGIDINm0kEjhc8+u7PHHeuhh ijgiWKJdqKMA
V0VKile3U8+nScbX6HEXWja/Lc+JrrS9TvrORrxXithHEIrlRBEGwzxlgWwy hgcAjpwaydc0
2a4lsHtbGWGwGmxRadHLo811NaygnIUh08iTHl/O5x8v3gAc99e67ZWO7e5k K/e2YwPxJA/C
m2/iDTrgxgSsrSMFQMh5JOByOP1rjWKoqShzq6t18rHZ7Oo1zcuhx/iG2ij1 Od77T7mfUZL+
y+xXiW7EJBviDL5oG1BuEhKE5Oc4Oar6hpYfSrcX1hI5W8v2WO50aXUICHuG IJiQhlYjBV+m
C3qK706HpLaqNVOl2R1EdLs26ed0x9/GenHXpV+t7+7Yi9tEeY6jo14731xF o5tr+50mxEjf
Z2uMqkh+0RM4IMh2bQV3BnAAGccT6fohuodLt5rETaYdWdzbjSns4Ej+zOP9 Q7MVQv8A3toL
HIHIJ9Hop82rYr/18rHM6zpl5feLtLe1vL2wjjsrkPc2scbYJeHCEyI6jOCe mfl+tZ2uafeS
a7dPHb3EyH+yQJRGTu2XTs54GOAQTjoDniu3oojK1vL/ADuFzzvSNNv4vHDT XMe26+2TvLOm
kyB5ICG8tWuzJsZMGMBApIKjj5S1eiUUVPRLsJ6tsKKKKACiiigAooooAKKK KACiiigAoooo
AKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPPPihD9h/sbxBCIvtNndBA GTO/+NckEHAK
Hj/aPSvQIpY54klidZI3UMjochgeQQe4rD8bWf2/wXqsPmbNsBmzjP8AqyHx +O3H41F4C1D+
0fBenOWiMkKeQyxn7uw7VB54O0Kfxz3rnj7tZrur/oevW/fZZTn1pycfk9V+ N/6sba/8hab/
AK9ov/Q5as1WX/kLTf8AXtF/6HLVmulnjoKKKKQwooooAKBjPPof5GiigBu2 uA13UtQ8W6xP
4Y0ItBaQsU1G9ZSABnBQe3BGOrEHooJOh488Qz6fawaPpjN/a2pMI4jHIqmM FgM89C2doPHc
5BWtXwr4btvDOjx20SL9qdVa5lByZHxzzgfKOcD09ySeebdSXs1st/8AI9jC wjg6CxlRXnL4
E/LeTXl08y3o+iWWhabHY2MeyJOSTyzt3Zj3J/8ArDAAFX9tOoroSSVkeTUn KpJzm7t7sbto
206inckbto206ii4DdtG2nVVuLiaO5igghjkZ0ZyXkKABSo7Kf71CuxPQsba NtVvM1H/AJ9b
X/wJb/4ijzNR/wCfW1/8CW/+Ip2YXLO2jbVbzNR/59bX/wACW/8AiKPM1H/n 1tf/AAJb/wCI
oswuWdtG2q3maj/z62v/AIEt/wDEUeZqP/Pra/8AgS3/AMRRZhcs7aNtVvM1 H/n1tf8AwJb/
AOIo8zUf+fW1/wDAlv8A4iizC5Z20bareZqP/Pra/wDgS3/xFHmaj/z62v8A 4Et/8RRZhcs7
aNtVvM1H/n1tf/Alv/iKPM1H/n1tf/Alv/iKLMLlnbRtqt5mo/8APra/+BLf /EUeZqP/AD62
v/gS3/xFFmFyzto21W8zUf8An1tf/Alv/iKPM1H/AJ9bX/wJb/4iizC5Z20b areZqP8Az62v
/gS3/wARRFc3H2xLe4giTfGzq0cpb7pUYOVH96izC6LO2jbTqKVxjdtG2nUU XAbto206ii4D
dtG2nUUXAbto206ii4DdtG2nUUXAbto206ii4DdtG2nUUXAbto206ii4DdtG 2nUUXAbto206
ii4DdtG2nUUXAbto206ii4DdtG2nUUXAbto206ii4DdtG2nUUXAbto206ii4 DdtG2nUUXAbt
o206ii4CKoGc9wR+lKMZ59D/ACNFFIBu2jbTqKdwMTxJ4YsvE2mm1uRslTJg nUZaJv6g9x39
iARh+Fte1C11X/hFvESN/aKKTbXIywuEAJyT3OAfm74IOGHPb1y3jXwv/btg LuxXZrNrhrWZ
X2McHO0t+ZHTB7gE1z1YtP2kN/zX9bHqYHEQqQ+p4l+49n/I319P5l89zp9t G2ud8E+JV8S6
EkrnF5b4iuQSuWbH38DoG57DkEds10lawmpxUlscOIw88PVlRqK0loN20wW8 QmMwjTzSoUvt
G4gds+nNS0Vd2Y2G7aNtEksUbFWkGRxwrH+lR/bLYHBmA+qMP6VSjJ9BXXck 20baeRgkelJU
3GN20U6ii4FHR/8AkFQ/8C/9CNXqo6P/AMgqH/gX/oRq9V1f4kvVkw+FFZv+ QtD/ANe0v/oc
VcL4mk/tX4o+HdKWaJUtP9JJUbmDjLlW54yI1x6bs88V3Tf8haH/AK9pf/Q4 q4XwbJ/a/wAQ
vEusCaJkjxbIIhlXQthWBz6RD67u1cmI15Id3+Wp7GU/u1WxP8kXb1l7q/Nn odFFFbnknH/8
JJAmuabp082r/aLq0aZporEmNGzDhVbySCh8zlt2E2gMckVu+a1/oIVt/nXF rglUbG5lHQ49
WH6+hqs3hy3+1QsLi5DRxMkb/LlFyuVB2dDhe/O0dccbMES20EUMeQkahFye cAYFOWqaFHQ8
hXWbsxiOcrcRYztkGfpWxoMUmqeIbKRIgkUQ81wOi46fjnFdHrvhjSLrM/mR 2E7dHyArH3Xg
flg1e8N6XFpemhFljllc/vJIzkHHQA+g/qa+eoZU6eITdrLX+ketUxkXSfLu yLxFcXq3Oj2d
levZ/bbtoZZY40Zgohkf5dwIByg5IP0Nc1Lr2uTW+m2MD6hJM8l6slzZJaia TyJfLXIm2xjI
O5sDPHAAzjvpIIZXieSJHeJt8bMoJRsEZHocEj6E1UutE0m+tPsl3pdlcW3m GXyZrdHTeSSW
2kYySxOevJ9a+g6HmXX9fP8A4Bx974m1uO0t1iZPtt3bQ30SRiN1KIrNOiEE gg7FG7LYMwwT
XVeH799V0+TUPN8y3uJ3a24GPKB2qQR1DbdwJ/vVfNpbGSOQ28RkjQxoxQZV TjKg9gcDj2FZ
11okz+SlhrN7pVtDGI0trKK28sAdMB4mI4wMA446U7/1/Xy/Ent/X9f8MZOs 6rqVnq2tS29w
5h0zS0u47RY1KzSN5wwxILY+RThSOnXtWfaa3rcOn3cVxLdqzfZRHcXv2Qyx iaTy2cLAWXYB
8ylx1zksBx2Nhp4s0zLPJd3LKFe6njjWWRQSVDFFUYG4447n1NVW8OabHpN1 p2nW0GmQ3WfN
NnbQruzwcqyFGyODuU8Utirpv+vL+vmc3FqF6niC3sbjUY75bbVzAs0sMe9V +xNIclVADbic
lQOOPUVl6ne6rP4X1u01LUb3zbjSJriNilq0MoXG5rd48nyzuAxINxDAggg1 2uieGdO0O0SC
CJZWSUzCV4Y1YPt2ZAjVVXC/L8qjj6nNm10LR7H7T9k0qxt/tQxceVbonndf v4HzdT19TVXS
YKVmn2/zOSbWdch1+S3ja+ktrG4trUs5tEgmDqm55SxWTed5x5YC5UAA8itP Tob7XdF1CS71
i9RZLu4iVLcRx7I45pE2qwXcNwABOc8fKVPNbQ0LSFubW5GlWIuLSMRW0ot0 3QoOAqHGVHJ4
HrVyK3hgjMcMMcaFmYqigAliSxwO5JJPqTUys42EtPwMfwYMeB9BH/UPg/8A QBW5TIYYraCO
CCJIoY1CpGihVVRwAAOgp9VJ80mxBRRRUgFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFAB
RRRQAUUUUAFFFFABXnnwzk+wXeveH2mif7HdFozja8nJRmxnp8ifTd15Feh1 55PJ/Y/xnjdp
ovL1W1Ct5g27OMKoOeSWiX/vrGO9c9b3ZQn52+89fLf3tDEYfvHmXrB3/K53 S/8AIWm/69ov
/Q5as1WX/kLTf9e0X/octWa6WeOgooopDCiiigAqhreqxaJot3qUw3JAm4Ly NzHhVyAcZJAz
jjNX6868ZNJ4p8Xaf4Ttywt4GFxeuo+7xnrtOCFPB6EyAHpWVabhG636ep35 dhY4muoz0gtZ
PtFb/fsvNlrwRo1zf3svjHVypvb1T5EQi2iJOAG5GclQAMfwnkndxq/2vfR6 Vqck0q+YPtLW
sgUDHlsw2kdCRgH3GfQk9HFFHBEkUSLHGihURBgKBwAB2FZ9xodpc6VNp8jS +VK7ybwwDqWY
scHH+0R9ODmtsNGFONpfP9THHYqeKre02WyXRJbL5f8ABIrzWmsbyCGWO3CS siKXuQsrliBl
I8cgEjPI6Hj1j/ty7eSMRadGyS3EltGzXGCXQtyRt4XCHnk+3erE+hxT3Dyf armNZHSR402b
WZMbTkqW/hHAOOPrU0elQR+Rh5P3NxJcLkjln3ZB46fOf0ra9JRWmvzOG0zO n8SpDbW5ZLaK
eVpVK3F0Io1MbbW+crzzjHHPtitizuo76yhuos7JkDrnrg/SqZ0WIKnkXNxB KkkjrNGV3fvG
LMvKkYzjt2FaEMYhhSIM7BFC7nYsxx3JPU1M3Tt7q1KSlfXYfRRRWRYVUk/5 C9t/1wl/9Cjq
3VST/kL23/XCX/0KOmhMxda8T3Wl3l9FBpsdxBYWqXl1K9z5ZEbFwQihG3MB GTgkA+oqve+O
7O08SHSi1iFjmigkEt8qXBeQAr5cJGXUb1ydw/iwDjnXv/D1pqLamZpJ1/tG zWzm2MBtQb8F
cjg/vG656Dimv4ejOqm9h1C+tkkdJJ7aB1WOd1AAZjt3jhVBCsAQoBB5yK10 U7dP62/4Jmt4
3t4biGK4txGDBO87iYEQyRFxs6ZOfKmOePuH1rpbWSWa0hlmiEUrorPGG3BC RyM4GceuKxLr
wfpl214ZXuf9Lu47qQCQYBTHyLxwjfNuHfe3PNTT3XidbiRYNI0h4QxCPJqk qMy9iVFuQD7Z
P1pLbz/r+vkJ76bf1/XzOa0fxTqVvLd3euyN5KpqE/lQSI8ccdvKqYA8pWJ5 OCWOep6gLNH4
4bU7Fhazaet1Fd2SubC9S8j8qWZUKltow2NwIxxkEE9tyPwnpw4l82VGjuon jdgVZbiQSSA4
APUYHTj1PNCeGVNqYLvVtSvf30EqvcSJlfKcOqgKirjI5ONx7ngYpWTV/wCt f8im1e68yjNr
+qXGsaattaLFpcuoyWrT+ZmSTYkoYMhT5V3pwwYk4HTNWtIvtYl8VatZ6k9s sMVvBLbw2+WE
YZpQSXIBYnYD0AHQZwSXr4Vtk1SG8W9vVhhumu4rMMnkpKysGI+XdzvY4LYy eMVpx6dDFq1z
qSs/nXEMcLKSNoVC5GOM5+c559KStYUra2/rX/It0UUUhBRRRQAUUUUAFFFF ABVST/kL23/X
CX/0KOrdVJP+Qvbf9cJf/Qo6aEy3RRRSGFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABR
RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FACHgHr+FctZ
WsVpJYXIit5BKxVL+BtstwWUn96pXkHGT8xOQDgduqqtHp1jDcvcxWdulw+d 8qxKGbPXJxk1
pCfKmu5Mo3sYulvdXMOlmG8lRVto5biFI4xGBt4UDZkEn0PAB6cUuhajqF5P C9yJfKuYWlxK
YQqkEcRhTvIGcHcM9OnStRtF0p5FkbTLNnUAKxgUkAcDBx2xU8NlaW88s8Nr DHLKcySJGAz/
AFI61pKrBp6b+X9f0iFCWmpwPimzufB2v/8ACX6WiyQTsIr62KYGGxlgQOAS o5PO7HXdivQL
a5ivLSG6t33wzIskbYIypGQcHnoai1LT7fVdNuLC6XdDOhRuASM9CMgjIPIP YgVxnw5vrixe
/wDCmocXWnuzxcEBoyecfKOMkMCeSHHYV5y/d1LdJfn/AME96b+u4L2j/iUr J+cNl/4C9PR6
mpotkbLxzrga7ubp5bO1kaS4cEjLz4AAAVQAAMAD1OSST1NRiCFbh51iQTOo RpAo3MozgE9S
Bk4+pqSups8d6u5ga1bXV5DcQ2uoCzd5GBk2FmUZOQORg+/5etZ+laXLptq1 u+pC4t1bEO9C
GRf7pPfHHYflgDV1jw8msQz29w0TwyOXU8hkJJwRxwRmquleFDpVqY0nikmk bfPcNuLyN6nj
64H9STXbGcUviOZxd9jX17nRNT4x/o8v/oJrEkubiBPszXa3ag2cgd40+XfK AQABjGBkZ5Hr
0rqJkSYSI6q8b5BVhkEHsRVeOws4o2jjtIERn8xlWMAF8g7iPXIHPtXNTqKK s0ayi3sZn2K4
/wCgpd/98xf/ABFFbdFZ3f8ASRv7Qo6P/wAgqH/gX/oRq9VHR/8AkFQ/8C/9 CNXqur/El6sx
h8KMbXtQ/sqC4vw0SvBp9w6eacKXDR7QeR1OBjvmsX4XWf2XwXHN5m77VPJN jGNuDsx7/cz+
NV/ijeR2vh8wurFrpDChUcAiSJ+fbCH8cV1mh20tn4f021uE2TQ2sUci5Bww QAjI46iuR+9W
XkvzZ7C/dZW+9Sf4RX+b/q5fooorc8koQvfXMUN6lvaBHi3LvuCDtbB5/dnB 4HAOPrxT5LmS
bRWurcbZXtzJGDzglciucfwojXkNxJpGiS3kaptu5IAZcxhQrb9hIIwMc8Y4 6V0tpZR29pBE
8cbvHGqltvUgAZ/8dH5D0pyV0xRZ5tL4gW+Ui6WSN3HzSxsSSPTnoP8AIqzp b/adf06C2Zmj
3hyxHzHb8x5644NXdX8CSxky6ZIZUx/qJCAw+h6H8cfU1seEdEawtPtVzGUu ZF2KrDBRc/1P
8hXzFHLaqxSc097t7nszxNJUm4+ljQ1rVrjTWsIbSzS6uL2cwRrJN5SqRG75 ZtrHGEPQE+xr
CvfHsVnY2LSR6fb3ly86Ml9qAt4EML7HAlKHcd2No2jIyTjFdPeadDe3VjcS M4eymM0YUjBY
oyc8dMOfTnFZj+FYFii+yX97ZXEUs8i3MBjMmJnLunzoylSxHbI2jn1+m6Hk 6f18/wDgFC48
d20Oni8W13xulvNGPOAJhkDMznt8ixynAJzs4PNdBp1//aC3MixhYorh4UYP nfsO1j04+YMM
c9Peqk3hqxuLq1uJnuJGtrV7UB5SwkVgAS+clmAzgk/xN61BFaatoVjaabot jZ3lrBEFM19q
LxSs3OS22FwSepORkk8U9P6/r+rk9rf1/X6BqPiRtO1O+hezVrPT7IXt1cGb DBD5mAibTuOY
+5A5/Cs7TvHcN/Z3bJHYT3cJhCR6fqAuY2MrbEVpAo2Hd975Tgcgt0rXg0f7 b9sudWtolnv7
ZbW5t4pzLF5al8YYojZIkOePTHqatz4duF0a7t1v7vVLqTy/JN9crEIijZQq UiIBB+bJRiSA
GyOi2K0b0/rb/g/gRReI72TU7Wyu7FrScX5tZFhnEiP/AKM0uQWQEr0H8JyP TIOVceNtQvfD
euXFhBp8V3aWTzoseoLLLbsM/LPGY8xyAZO3DDKkEjqdPRPCs8JF7q91LLfm 9N4dk4cbvJ8k
AsI0z8uTwq4OPTmz/wAIjbzR3CX2pajfiW1ks0Nw8eYYnxuClUBYnavL7j8v Xk5rRME1df11
M+Tx5Da63Hpd0NOjlR4YLhDqAE3myBSPKiKgyIN65bKnrgHGKtLqepazY3E8 csOjWEFzLHJe
iZXlCRM6uwV4yifMi8tu+UtwDg1bTw2I75blNW1FAxje4iRo1W6kQAB3wgIJ CqCEKqQACMZB
ivPCNvdadDZR6jfW0cV497mLym3Ozs+GDoysoZsgEcEKeozSdrCVrFzw7Pd3 OjpJeSPK29xH
NJGI3ljDEI7KMAErg8Adeg6DVqtY20tparDNfXF64JJmuFjDn6hFVf0qzSEF FFFABRRRQAUU
UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV5/wDFESWcWia3 EymSxvPkjdch
icOCTkcDy+nv1FegVzfj62luvA+qRwpucIshGQPlR1Zjz6AE1jiI81KSPRyi qqWOpSezdn6P
R/gzYgljn1B5YnWSN7WFkdDkMC0hBB7irlc14Lu473Q9PliDBV06CI7hzlGl Q/hlTj2rpa1U
uZJ90jirUnSqypv7La+5hRRRTMwooooAr313Hp+n3N7KGaO3iaVwgySFBJx7 8VxXww093sL3
xBeLuvNRnYiUheUB5IwPly+7I/2RxU/xS1GO08ItaHa0l7KkaqXwQFIcsB3H ygf8CH49Poen
/wBlaFY2BWJXggRH8oYUuB8xHA6nJz3zXO/fr2/lX4s9iN8Pljl1qyt/27HX 83+BfooqiNSQ
6nJZhPuJnfngsMEr+TKfxPpXSk3sePcvUVlWmtwz2q3E22FTbRTlQWZhvzgY 288jAxkk9hxm
b+2bH7P52+XHmeX5fkSeZuxnGzbuzjnp056VTpzTtYnmXcv0VFbXMV3As8Db o2zgkEHg4IIP
IIPGDUtQ1bRlJ3CiiigAqlfGxLxJdwCZiGKL5BlIAxk8A46irtVJP+Qvbf8A XCX/ANCjprcT
2KmzR/8AoG/+U9//AIijZo//AEDf/Ke//wARWtRT5hcpk7NH/wCgb/5T3/8A iKNmj/8AQN/8
p7//ABFa1FHMHKZOzR/+gb/5T3/+Io2aP/0Df/Ke/wD8RWtRRzBymTs0f/oG /wDlPf8A+Io2
aP8A9A3/AMp7/wDxFa1FHMHKZOzR/wDoG/8AlPf/AOIo2aP/ANA3/wAp7/8A xFa1FHMHKZOz
R/8AoG/+U9//AIijZo//AEDf/Ke//wARWtRRzBymTs0f/oG/+U9//iKNmj/9 A3/ynv8A/EVr
UUcwcpk7NH/6Bv8A5T3/APiKNmj/APQN/wDKe/8A8RWtRRzBymTs0f8A6Bv/ AJT3/wDiKkhl
062cvBZSRMRgsli6nHpwtaVFFwsVP7Rg/wCed1/4Cy//ABNH9owf887r/wAB Zf8A4mrdFLQe
pU/tGD/nndf+Asv/AMTR/aMH/PO6/wDAWX/4mrdFGgalT+0YP+ed1/4Cy/8A xNH9owf887r/
AMBZf/iat0UaBqVP7Rg/553X/gLL/wDE0f2jB/zzuv8AwFl/+Jq3RRoGpU/t GD/nndf+Asv/
AMTR/aMH/PO6/wDAWX/4mrdFGgalT+0YP+ed1/4Cy/8AxNH9owf887r/AMBZ f/iat0UaBqVP
7Rg/553X/gLL/wDE0f2jB/zzuv8AwFl/+Jq3RRoGpU/tGD/nndf+Asv/AMTR /aMH/PO6/wDA
WX/4mrdFGgalT+0YP+ed1/4Cy/8AxNH9owf887r/AMBZf/iat0UaBqVP7Rg/ 553X/gLL/wDE
0f2jB/zzuv8AwFl/+Jq3RRoGpU/tGD/nndf+Asv/AMTR/aMH/PO6/wDAWX/4 mrdFGgalT+0Y
P+ed1/4Cy/8AxNH9owf887r/AMBZf/iat0UaBqVP7Rg/553X/gLL/wDE0f2j B/zzuv8AwFl/
+Jq3RRoGpU/tGD/nndf+Asv/AMTR/aMH/PO6/wDAWX/4mrdFGgalT+0YP+ed 1/4Cy/8AxNH9
owf887r/AMBZf/iat0UaBqVP7Rg/553X/gLL/wDE0f2jB/zzuv8AwFl/+Jq3 RRoGpU/tGD/n
ndf+Asv/AMTR/aMH/PO6/wDAWX/4mrdFGgalT+0YP+ed1/4Cy/8AxNH9owf8 87r/AMBZf/ia
t0UaBqVP7Rg/553X/gLL/wDE0+G9hnm8pfNVypYCSF0yBgHG4D1H51YqpJ/y F7b/AK4S/wDo
UdGgaluiiikMKzvJ1r/n/sP/AACf/wCO1o1BaXcd5C0sYZVWR4zu9VYqfwyK qLaV0JpMreTr
H/P/AGP/AIBP/wDHaXydX/5/rH/wDf8A+O1HBrcU8kP+jXMcFxnyJ3C7JeCR jDFhkAkbgOlN
tNcS6NqWsbuCK7/1MsvllWO0sB8rEjIB6gVpap2/Ij3f6uT+Vqv/AD+2X/gI 3/xyvP8Axvb3
nh/xHpPikSREiQQzvDbheMHqpYliULjORwo5HFenVzfj3T/7R8F6igWIyQp5 6tIPu7DuYjjg
7Qw/HHeuXEXlTdt1rt2PVyirGljIc3wy91+ktH/mbHlan/z92n/gK3/xyl8v Uf8An6tf/AZv
/jlc18P/ABPaa3o8WnQxypc6bbQpPuU7f4lXBOMkhMnHA3AZJBrsK1jUcoqX fyOLEYd0K0qU
t4tr7ir5eof8/Nt/4Dt/8XR5d9/z82//AH4b/wCLqLUNXg0+OaaZoo4YSdzO GOMHHrzVHT/E
0Wp2aXVqInjbqpUhlPdTzwa2VKbOdyijU2Xv/Pxb/wDfg/8AxdLsu/8AnvB/ 35P/AMVVlwA7
AdAaSseZl2INl3/z2h/78n/4qip6KLsLFHR/+QVD/wAC/wDQjV6qOj/8gqH/ AIF/6EavVdX+
JL1YofCjzr4lJFqGt+GtIkmwlxcETIhG9VZkUN7fxY7cH0r0WvP7hm1H402o t42I06zIuCSA
ACrYI55GZUHrnPYZr0CuSjrOcvO33HsZj+7w+Ho9o83zk2/yS+Vgooorc8ki Yf6VGcdEYZx7
r3x/UfQ9paiYf6VGcdEYZx7r3x/UfQ9paAIrgbrWUYzlCMYznj0wf5H6Gpai uButZRjOUIxj
OePTB/kfoaDE5zieQZz0C8dfb3H5D3yAZ17fNb3joGO1QjEcnILKCBj2NVv7 UlAIMoyAQSoY
8g7SRxz6j1PyjpmodYgaK8eeVm2MV28ZJAYN6gYGMevTrnmgFt42P+kA+WFb gD5sPuwPn68/
p+FdEIxcdjnm5KW51MMu+0aQk7RLJjPUAOwH6Vl2HifSNSLfZrptiw+f5ksL xI0fdlZ1AYDI
yQTjPOKvWgL6YQAQWkl+92y7VzA8H3M2k6dp9xcRIsOiS6bM8ZJO9xENy5Ay Bsbrg9Pw4pLV
3/rR/wDAOuKT6m3Z+JNLvlUwzSgtIsYWa2kibLAlTtdQdpwcN0OMA5qW11vT r3yvs1yJRLNJ
AhVG5ePIcdOMbTyePTqK5u18LakumahuW3h1B44vszvqNzeDzImLqzNLyq7s fKo6Z5OeJ7DQ
z4av5dRnkklsYrZEjjgilnl81giSMUUEkERR4xk8uTStG7/r+v8AhvMWv9f1 /VmaviXXR4e0
j7aLaS5kaWOGOJFc5Z2CjJRWIHP90+gBJAqNfFFlFp0V1dsQ8k0sQitYprhi Y2ZWwojD4G3k
7cD1PBNa9vYfEsMdlYx3sUsdzBclrzT7i3TbHMjsAzxgZwOBWbdeD7/y7WaF kluIJ7wmJdQn
s1aOeYyA+ZEN2RhcqQQcn0BosuXXe/4f8OVpb+vM3/8AhIrRby8R2X7Lb2kN 0LlG3iQSFwAo
AyfuDGMk7gAPWtb+LYLq31OeCxvJls51gSOOB/NlYxq2CjKDHy2PmwBjJIFU f+ETu44pBDJa
qyWlkkCkuVMtvI8mG3bmCklRnLMOT1HOro1hqMMuq3OoraRy3syyLHbyM6oB EiYLFVJOVPOO
mKJJa2/rb/ghpf8Arsi5o2of2volhqXleT9rt0m8vdu2blBxnvjNUm1+WIap I+nSyx2c4t4V
td0sszFFbldoCD5gMlsdyRVrQbCXS/D2m6fOyNLbW0cLlCSpKqAcZxxxVbSN 323XYWimRjd7
1aSJlV1MSAFWIw3IPQnGOaJW5pcvnb70S9Lev6Mn0rWU1HSLC+aCWJru0W68 tUaQICoJXcBg
n5uB1POBwazIfFc11Y313DpUka2l6ls0d3IYnZGVD5m3aSD+8GEOD67TwNLQ rK60rRdL06UQ
uLa0SKWRJD99VUfKNvIPzckjoODnjJ1KwnsrTWHZHmOoahDJClvE8jABYl+Y Acf6tjnoBjJo
la8rfL7/APIfQ7BPuCnU1PuCnVqtiAooopgFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFA
BRRRQAVXvrSPUNPubKUssdxE0TlDggMCDj35qxRQ1fQcZOLUlujzv4S3klxp N5BJIGFsyJGu
BlUJdv8A0JmOT/SvRK8/8Gu1l4/8V6dPGyzzy/aUxgjZvJGTnqRKp/POK9Ar DDu9NJ9NPuPU
zqKWNnOO0rS/8CSf5sKKKK3PKCiiigDz/wARo2ofFbw5YTSMLeGL7SirgEOC 7dcdD5SA+w4x
XoFef26NqHxquzPIxGnWYMAGAACqgg8cj9659c47cV6BWFDVzfn+R62ae7Ch TXSCfzk2/wBV
cKxP7CZTHdpIxvhN5rbp38v5uGAXp90kA47CtuiumM3HY8hpPc5+20bULS1K wzxLMLO3gBDE
ZKFiwzjgEHAOCR1xTItFvo7adWigcyXAmCPezFlwgXibG8HjrjoSK6OitPby 1fcn2aKmmwT2
1jHFcy+ZKCSTvL4BJIXceWwMDJ5OM1boorJu7uUlZWCiiikMKqSf8he2/wCu Ev8A6FHVuq9x
aGeaOVZ5YXRWUGPacg4JzuB/uimhMsUVU+xz/wDQSuv++Yv/AIij7HP/ANBK 6/75i/8AiKLe
YXLdFVPsc/8A0Err/vmL/wCIo+xz/wDQSuv++Yv/AIii3mFy3RVT7HP/ANBK 6/75i/8AiKPs
c/8A0Err/vmL/wCIot5hct0VU+xz/wDQSuv++Yv/AIij7HP/ANBK6/75i/8A iKLeYXLdFVPs
c/8A0Err/vmL/wCIo+xz/wDQSuv++Yv/AIii3mFy3RVT7HP/ANBK6/75i/8A iKPsc/8A0Err
/vmL/wCIot5hct0VU+xz/wDQSuv++Yv/AIij7HP/ANBK6/75i/8AiKLeYXLd FVPsc/8A0Err
/vmL/wCIo+xz/wDQSuv++Yv/AIii3mFy3RVT7HP/ANBK6/75i/8AiKPsc/8A 0Err/vmL/wCI
ot5hct0VU+xz/wDQSuv++Yv/AIij7HP/ANBK6/75i/8AiKLeYXLdFVPsc/8A 0Err/vmL/wCI
o+xz/wDQSuv++Yv/AIii3mFy3RVT7HP/ANBK6/75i/8AiKPsc/8A0Err/vmL /wCIot5hct0V
U+xz/wDQSuv++Yv/AIij7HP/ANBK6/75i/8AiKLeYXLdFVPsc/8A0Err/vmL /wCIo+xz/wDQ
Suv++Yv/AIii3mFy3RVT7HP/ANBK6/75i/8AiKPsc/8A0Err/vmL/wCIot5h ct0VU+xz/wDQ
Suv++Yv/AIij7HP/ANBK6/75i/8AiKLeYXLdFVPsc/8A0Err/vmL/wCIo+xz /wDQSuv++Yv/
AIii3mFy3RVT7HP/ANBK6/75i/8AiKPsc/8A0Err/vmL/wCIot5hct0VU+xz /wDQSuv++Yv/
AIij7HP/ANBK6/75i/8AiKLeYXLdFVPsc/8A0Err/vmL/wCIo+xz/wDQSuv+ +Yv/AIii3mFy
3RVT7HP/ANBK6/75i/8AiKPsc/8A0Err/vmL/wCIot5hct0VU+xz/wDQSuv+ +Yv/AIij7HP/
ANBK6/75i/8AiKLeYXLdFVPsc/8A0Err/vmL/wCIo+xz/wDQSuv++Yv/AIii 3mFy3RVT7HP/
ANBK6/75i/8AiKPsc/8A0Err/vmL/wCIot5hct0VU+xz/wDQSuv++Yv/AIij 7HP/ANBK6/75
i/8AiKLeYXLdFVPsc/8A0Err/vmL/wCIo+xz/wDQSuv++Yv/AIii3mFy3RVT 7HP/ANBK6/75
i/8AiKPsc/8A0Err/vmL/wCIot5hct1Uk/5C9t/1wl/9Cjo+xz/9BK6/75i/ +IpYrMx3KzyX
U0zKhRQ4QAAkE/dUf3RRsG5aooopDCsbTGvLMPayabc4a5lYTh4im1pGYHG/ d0I7ZrZoqlKy
asJq5z1rZ3aXMXl2M1myk+eVuAbZxg52R7jjJwfuqeuT619I0u5hOlq1lfQS 2oHmyT3YkjPy
FSETzGxknjgYH5HqaK09vKzXf1/rqR7NBRRRWJoeb/DSxi0/xB4ptYSxjt50 gVnOSVV5QM+9
ekV5/wCHEbT/AIreI7CGRjbzRfaXVsElyUbrjoPNcD2POa9ArDDv3LPo2vxP Wzr3sX7X+eMZ
ffFHM+Ibizt7a4mvNO+3QxSszIEDleT82CR+nr6ZqnpN9p99HcXdlpwhR5CD OY9gnIJ5GDk8
55Pr65rrHtLaSRnaBdzHJIZhk/nTE02xiRUS1RUQAKoLYAHQYzXpKtBLr/Xz PDdOTLb8O3Oe
abSk5JPrSVyGwUUUUAUdH/5BUP8AwL/0I1eqjo//ACCof+Bf+hGrcsscETyy uscaKWd3OAoH
JJPYVpV/iS9WTTV4pI898GySXnxM8UXU7lpYw8K8ADYJVUDj0CKK9Frzb4Sx RjT5pQiiRnmV
nA5IHkEAn0GT+Zr0muTDfwk++v4nr527Y6dNbRtFfKKQUUUVueURMP8ASozj ojDOPde+P6j6
HtLUTD/SozjojDOPde+P6j6HtLQBFcDdayjGcoRjGc8emD/I/Q1LTJkMkEiA AllIwenT3B/k
aaWn5xHGeuMyH3x2/wB38z6cgFS8niMxhmgSVVKn5k3AZIGf1qmJLMjjTYMk DjyR16Y/764/
XpVTVhI2oTF1QIdiEkjafmU4JOOwzj+dUxFLuPmeWccybmTo0nzZ+buuM+ox 9K3jCLV2YSlN
SsjrLUI0BVURVWR1AQYHDEf0qXYvpVOx+bTH24ILy42/77dK4TT9Av7LSbD+ ybF7PUbrw7Mt
xMIyjNdYi8vzGPO8EvjccjnHSue17/10f+R0pXPR9i+lGxfSvNdJ0+4tNJv7 yysWAtDb3MVr
b6LLYh5EJMgVJJGLyMnylgADleWwcavhjSdRtNaS1vYXNvao16szIdpnnA3B SSeQwnJHYSLT
5Ve39f1v/TJu7X/r+tv6R1eoXtnpVk93dsyQqVX5EZ2JYhVAVQSxJIAABPNS 20sN3AJo0lVS
SMSxPG3Bx91gD29OetYnjPS4tW0a3t5bFLxRf2rmNoRIAomTccYPG0tn2J7V yOo6TemwsVub
JW09LzUDJBcaTLfKHadjE/kxsrfd34fkDd7g0cqtfzLtpf8ArqejJdWsl/NY q+bmGNJXTB4V
ywU56clG/Kql1rml2f2gSzOXt5lgeOKGSRzIyBwqqoLOdpz8oPGfQ1yT6dqY gu/PgvLgHTdO
W43REPOiSyGZMZbc2wkFQzE7sZOaZa3UOhRalcaV4dvI4p9QQWWdMmKQA26B pfKVN6oMMNoA
yeMqCSBxSb/rsL+vwR3VheWmp2aXVo++JiRkqykEHBDKcFSCCCCAQRzVOfX9 Ktzdh3nJtZVh
kVLWVy0jDcFQBT5hwckJnA64p3h5YF0hWga6fzHeSSS7t3gkdyxLEo6gqM9B jGMY4rBlLwah
Pf8AkTzQ2ettJMsETSuFa1Cbgigs2C44UZwSe1HKr28v1X+ZLe3r+jf6HUQX llcWAvo5k+yl
C5kY7QoHXOemMHIPTBzVCPxLo8lobkSXIjWRImD2kyupc4UlCu4KezEbfese LSpJ/Cl/bfYm
XUb2O/ktg8JBWOWQsELEYQtuTKnB9vlOILp31BtU1ZLa5t7aS3srdRcwPC7O kzM3yuAcDeoz
0POCcUpRSux9N/6/rU7kAAYFFFFMQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFAB
RRRQAUUUUAcBcxnTvjTZtbyMBqVkWuA2CDhXAA44H7pD65z2OK7+vNfH7wwe PvC9xKyRqrxl
5GIACibOSfQc16VWFLSc4+d/vR62Y+/Qw1bvC3/gMmgooorc8kKKKKAOC0r/ AJLPrn/Xiv8A
KGu9rhLKNrT4y6k05WMXdgGgywzIB5YOB6/I/HXCk9K7usKG0vVnq5q7ypNf 8+4fkFFFFbnl
BRRRQAUUUUAFFFFABVC6t4bnVLZJ4Y5VEMpCuoYZ3R881fqpJ/yF7b/rhL/6 FHTW4nsH9lad
/wA+Fr/35X/Cj+ytO/58LX/vyv8AhVuii7CyKn9lad/z4Wv/AH5X/Cj+ytO/ 58LX/vyv+FW6
KLsLIqf2Vp3/AD4Wv/flf8KP7K07/nwtf+/K/wCFW6KLsLIqf2Vp3/Pha/8A flf8KUaTYN00
+2P0hX/CrVZmv6hf6VpLXlg9sGWWJGWeJnDB3VOM
Re: Limit Copy, Paste, Cut keyboard shortcuts to EMF tree only (not the entire editor) [message #416343 is a reply to message #416341] Mon, 28 January 2008 19:52 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 33142
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------000402030900070802060405
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Mircea,

Gosh, I don't have a lot of experience with this type of thing. I hope
someone else has some clue, because I won't even know where to begin.
Maybe Tom will read this and have an idea...


M. Luchian wrote:
> Hello,
>
> The EditingDomainActionBarContributor.java class defined in the EMF
> plugins overrides the Windows CUT/COPY/PASTE actions' keyboard
> shortcuts (CTRL-X, CTRL-C, CTRL-V) with EMF's own.
>
> This is correct as long as the actions are performed on the tree.
> However, I implemented an editor based on eclipse forms, with text
> widgets (Windows native) handling the COPY CUT PASTE actions with a
> right click of a mouse. As the mouse actions work fine and interact
> with the windows' clipboard, pressing the keyboard shortcuts for the
> same actions in the text widgets will call the actions reserved by EMF
> .. This is problematic as the CTRL-X, CTRL-C, CTRL-V shortcuts are
> overridden with the EMF copy, cut, paste actions for the entire editor.
>
> Is there a possible way to register the actions for the editor's tree
> only? (See picture)
>
>
>
> I have a CustomEditingDomainActionBarContributor.java replacing a few
> small things from the original EditingDomainActionBarContributor.java
> class, but I don't want to manage the registering / unregistering the
> copy, cut and paste actions when the tree is in focus or not.
>
> Any help appreciated
>
> Thanks,
>
> Mircea


--------------000402030900070802060405
Content-Type: multipart/related;
boundary="------------040706000509090907040302"


--------------040706000509090907040302
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">
Mircea,<br>
<br>
Gosh, I don't have a lot of experience with this type of thing.&nbsp;&nbsp; I
hope someone else has some clue, because I won't even know where to
begin.&nbsp; Maybe Tom will read this and have an idea...<br>
<br>
<br>
M. Luchian wrote:
<blockquote cite="mid:fnlb1b$e2t$1@build.eclipse.org" type="cite">
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
<title></title>
Hello, <br>
<br>
The EditingDomainActionBarContributor.java class defined in the EMF
plugins overrides the Windows CUT/COPY/PASTE actions' keyboard
shortcuts (CTRL-X, CTRL-C, CTRL-V) with EMF's own. <br>
<br>
This is correct as long as the actions are performed on the tree.
However, I implemented an editor based on eclipse forms, with text
widgets (Windows native) handling the COPY CUT PASTE actions with a
right click of a mouse. As the mouse actions work fine and interact
with the windows' clipboard, pressing the keyboard shortcuts for the
same actions in the text widgets will call the actions reserved by EMF
... This is problematic as the CTRL-X, CTRL-C, CTRL-V shortcuts are
overridden with the EMF copy, cut, paste actions for the entire editor.
<br>
<br>
Is there a possible way to register the actions for the editor's tree
only? (See picture)<br>
<br>
<img src="cid:part1.00070300.08000407@ca.ibm.com" alt=""><br>
<br>
I have a CustomEditingDomainActionBarContributor.java replacing a few
small things from the original EditingDomainActionBarContributor.java
class, but I don't want to manage the registering / unregistering the
copy, cut and paste actions when the tree is in focus or not. <br>
<br>
Any help appreciated<br>
<br>
Thanks, <br>
<br>
Mircea
</blockquote>
<br>
</body>
</html>

--------------040706000509090907040302
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-ID: <part1.00070300.08000407@ca.ibm.com>

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL DBkSEw8UHRof
Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwL DBgNDRgyIRwh
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjL/wAAR
CAG1BDEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI CQoL/8QAtRAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkK
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1 dnd4eXqDhIWG
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW 19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcI CQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz UvAVYnLRChYk
NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOE
hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU 1dbX2Nna4uPk
5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDjfMf1o8x/Wjyz6UeWfSv0 6zPjdA8x/Wjz
H9aPLPpR5Z9KLMNA8x/WjzH9aPLPpR5Z9KLMNA8x/WjzH9aPLPpR5Z9KLMNA 8x/WjzH9aPLP
pR5Z9KLMNA8x/WjzH9aPLPpR5Z9KLMNA8x/WjzH9aPLPpR5Z9KLMNA8x/Wjz H9aPLPpR5Z9K
LMNA8x/WjzH9aPLPpR5Z9KLMNA8x/WjzH9aPLPpR5Z9KLMNA8x/WjzH9aPLP pR5Z9KLMNA8x
/WjzH9aPLPpR5Z9KLMNA8x/WjzH9aPLPpR5Z9KLMNA8x/WjzH9aPLPpR5Z9K LMNA8x/WjzH9
aPLPpR5Z9KLMNA8x/WjzH9aPLPpR5Z9KLMNA8x/WjzH9aPLPpRsNFmPQPMf1 o8x/WjYaNhos
w0DzH9aPMf1o2GjYaLMNA8x/WjzH9aNho2GizDQPMf1o8x/WjYaNhosw0DzH 9aPMf1o2GjYa
LMNA8x/WjzH9aNho2GizDQPMf1o8x/WjYaNhosw0DzH9aPMf1o2GjYaLMNA8 x/WjzH9aNho2
GizDQPMf1o8x/WjYaNhosw0DzH9aPMf1o2GjYaLMNA8x/WjzH9aNho2GizDQ PMf1o8x/WjYa
Nhosw0DzH9aPMf1o2GjYaLMNA8x/WjzH9aNho2GizDQPMf1o8x/WjYaNhosw 0DzH9aPMf1o2
GjYaLMNA8x/WjzH9aNho2GizDQPMf1o8x/WjYaNhosw0DzH9aPMf1o2GjYaL MNA8x/WjzH9a
Nho2GizDQPMf1o8x/WjYaNhosw0DzH9aPMf1o2GjYaLMNA8x/WjzH9aNho2G izDQPMf1o8x/
WjYaNhosw0DzH9aPMf1o2GjYaLMNA8x/WjzH9aNho2GizDQPMf1o8x/WjYaN hosw0DzH9aPM
f1o2GjYaLMNA8x/WjzH9aNho2GizDQPMf1o8x/WjYaNhosw0DzH9aPMf1o2G jYaLMNA8x/Wj
zH9aNho2GizDQPMf1o8x/WjYaNhosw0DzH9aPMf1pNlGyjlYaC+Y/rR5j+tJ so2UcrDQXzH9
aPMf1pNlGyjlYaC+Y/rR5j+tJso2UcrDQXzH9aPMf1pNlGyjlYaC+Y/rR5j+ tJso2UcrDQXz
H9aPMf1pNlGyjlYaC+Y/rR5j+tJso2UcrDQXzH9aPMf1pNlGyjlYaC+Y/rR5 j+tJso2UcrDQ
XzH9aPMf1pNlGyjlYaC+Y/rR5j+tJso2UcrDQXzH9aPMf1pNlGyjlYaC+Y/r R5j+tJso2Ucr
DQXzH9aPMf1pNlGyjlYaC+Y/rR5j+tJso2UcrDQXzH9aKTZRRysNC7iOjEde y/8ACufCn/QL
P/gTL/8AFUf8K58Kf9As/wDgTL/8VXgf6zYX+WX4f5no/wBjVv5l+P8AkeNY joxHXsv/AArn
wp/0Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+Zfj/AJHj WI6MR17L/wAK
58Kf9As/+BMv/wAVR/wrnwp/0Cz/AOBMv/xVH+s2F/ll+H+Yf2NW/mX4/wCR 41iOjEdey/8A
CufCn/QLP/gTL/8AFUf8K58Kf9As/wDgTL/8VR/rNhf5Zfh/mH9jVv5l+P8A keNYjoxHXsv/
AArnwp/0Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+Zfj/ AJHjWI6MR17L
/wAK58Kf9As/+BMv/wAVR/wrnwp/0Cz/AOBMv/xVH+s2F/ll+H+Yf2NW/mX4 /wCR41iOjEde
y/8ACufCn/QLP/gTL/8AFUf8K58Kf9As/wDgTL/8VR/rNhf5Zfh/mH9jVv5l +P8AkeNYjoxH
Xsv/AArnwp/0Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ Zfj/AJHjWI6M
R17L/wAK58Kf9As/+BMv/wAVR/wrnwp/0Cz/AOBMv/xVH+s2F/ll+H+Yf2NW /mX4/wCR41iO
jEdey/8ACufCn/QLP/gTL/8AFUyX4e+EIYnll04RxopZ3a6lAUDqSd/Ao/1m wv8ALL8P8wWS
1nopL8f8jx3EdGI67vU4/hlprFBaveSBgCtrPK4AIzncXCkfQn+dZKaZDrTh vD3ggm3+cia6
uZtsig4GDvVQeuRlv0NZPizBJ25ZN+SX+Z6VPg/MZx55WjHvJ8q/E5rEdGI6 6iL4T67JEjtP
YxsyglGmfKn0OFIz9Ca0rb4QzNbqbnV4o5udyRwF1HPGGLAnj2qJcV0fsUpP 1sv1ZquFYx/i
4uC9OaX/ALajhcR0Yjrv/wDhUA/6Dg/8BP8A7Oorn4QzC3Y22rxyTDG1JIDG p55ywYkcexpL
iuF/eoyt6r/MT4YoNWhjI384zS++2hwuI6MR11Enws121UTqLG8KMD9nWdwZ BnkZIXj/AIEP
bmmfZNN0WTZ4m8FSwpv2m4trmbZyuQBlyrHr0f144q/9bMIvihNfJf5guDsV P+BVhN9oy1+5
pP7jmsR0Yjr0DTLX4ZamoxCLWTaWMd1cyxkAHH3i+0nvgE/zrpf+Fc+FP+gW f/AmX/4qtI8U
YOSvGMvw/wAzz6/DuLw8uWt7r87r9DxrEdGI69l/4Vz4U/6BZ/8AAmX/AOKo /wCFc+FP+gWf
/AmX/wCKqv8AWbC/yy/D/Mx/sat/Mvx/yPGsR0nye1ezf8K58Kf9As/+BMv/ AMVR/wAK58Kf
9As/+BMv/wAVR/rNhf5Zfh/mH9jVv5l+P+R4z8ntR8ntXs3/AArnwp/0Cz/4 Ey//ABVH/Cuf
Cn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7N/wrnwp/0Cz/4E y/8AxVH/AArn
wp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/mX4njPye1Hye1ezf8K58Kf8AQLP/ AIEy/wDxVH/C
ufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7N/wrnwp/0Cz/ AOBMv/xVH/Cu
fCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9jVv5l+J4z8ntR8ntXs3/AArnwp/0 Cz/4Ey//ABVH
/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7N/wrnwp/0C z/4Ey/8AxVH/
AArnwp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/mX4njPye1Hye1ezf8K58Kf8A QLP/AIEy/wDx
VH/CufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7N/wrnwp/ 0Cz/AOBMv/xV
H/CufCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9jVv5l+J4z8ntR8ntXs3/AArn wp/0Cz/4Ey//
ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7N/wrnw p/0Cz/4Ey/8A
xVH/AArnwp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/mX4njPye1Hye1ezf8K58 Kf8AQLP/AIEy
/wDxVH/CufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7N/wr nwp/0Cz/AOBM
v/xVH/CufCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9jVv5l+J4z8ntR8ntXs3/ AArnwp/0Cz/4
Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7N/ wrnwp/0Cz/4E
y/8AxVH/AArnwp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/mX4njPye1Hye1ezf 8K58Kf8AQLP/
AIEy/wDxVH/CufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7 N/wrnwp/0Cz/
AOBMv/xVH/CufCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9jVv5l+J4z8ntR8nt Xs3/AArnwp/0
Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7 V7N/wrnwp/0C
z/4Ey/8AxVH/AArnwp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/mX4njPye1Hye 1ezf8K58Kf8A
QLP/AIEy/wDxVH/CufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1b+ZfieM/J7Uf J7V7N/wrnwp/
0Cz/AOBMv/xVH/CufCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9jVv5l+J4z8nt R8ntXs3/AArn
wp/0Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ZfieM/J7 UfJ7V7N/wrnw
p/0Cz/4Ey/8AxVH/AArnwp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/mX4njPye 1Hye1ezf8K58
Kf8AQLP/AIEy/wDxVH/CufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1b+ZfieM/ J7UfJ7V7N/wr
nwp/0Cz/AOBMv/xVH/CufCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9jVv5l+J4 z8ntR8ntXs3/
AArnwp/0Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+Zfie M/J7UfJ7V7N/
wrnwp/0Cz/4Ey/8AxVH/AArnwp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/mX4n jPye1Hye1ezf
8K58Kf8AQLP/AIEy/wDxVH/CufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1b+Zf ieM/J7UfJ7V7
N/wrnwp/0Cz/AOBMv/xVH/CufCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9jVv5 l+J4z8ntR8nt
Xs3/AArnwp/0Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ ZfieM/J7UfJ7
V7N/wrnwp/0Cz/4Ey/8AxVH/AArnwp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/ mX4njPye1Hye
1ezf8K58Kf8AQLP/AIEy/wDxVH/CufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1 b+ZfieM/J7Uf
J7V7N/wrnwp/0Cz/AOBMv/xVH/CufCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9 jVv5l+J4z8nt
R8ntXs3/AArnwp/0Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/ Y1b+ZfieM/J7
UYSvZv8AhXPhT/oFn/wJl/8AiqP+FceFP+gUf/AmX/4qn/rNhf5Zfh/mH9jV v5l+J4xhPWjC
etezf8K48J/9Ar/yZl/+Ko/4Vx4T/wCgV/5My/8AxVH+s2F/ll+H+Yf2NV/m X4njOE9aMJ61
7N/wrjwn/wBAr/yZl/8AiqP+FceE/wDoFf8AkzL/APFUf6zYX+WX4f5h/Y1X +ZfieM4T1own
rXs3/CuPCf8A0Cv/ACZl/wDiqP8AhXHhP/oFf+TMv/xVH+s2F/ll+H+Yf2NV /mX4njOE9aMJ
617N/wAK48J/9Ar/AMmZf/iqP+FceE/+gV/5My//ABVH+s2F/ll+H+Yf2NV/ mX4njOE9aMJ6
17N/wrjwn/0Cv/JmX/4qj/hXHhP/AKBX/kzL/wDFUf6zYX+WX4f5h/Y1X+Zf ieM4T1ownrXs
3/CuPCf/AECv/JmX/wCKo/4Vx4T/AOgV/wCTMv8A8VR/rNhf5Zfh/mH9jVf5 l+J4zhPWjCet
ezf8K48J/wDQK/8AJmX/AOKo/wCFceE/+gV/5My//FUf6zYX+WX4f5h/Y1X+ ZfieM4T1ownr
Xs3/AArjwn/0Cv8AyZl/+Ko/4Vx4T/6BX/kzL/8AFUf6zYX+WX4f5h/Y1X+Z fieM4T1ownrX
s3/CuPCf/QK/8mZf/iqP+FceE/8AoFf+TMv/AMVR/rNhf5Zfh/mH9jVf5l+J 4zhPWjCetezf
8K48J/8AQK/8mZf/AIqj/hXHhP8A6BX/AJMy/wDxVH+s2F/ll+H+Yf2NV/mX 4njOE9aMJ617
N/wrjwn/ANAr/wAmZf8A4qj/AIVx4T/6BX/kzL/8VR/rNhf5Zfh/mH9jVf5l +J4zhPWjCete
zf8ACuPCf/QK/wDJmX/4qj/hXHhP/oFf+TMv/wAVR/rNhf5Zfh/mH9jVf5l+ J4zhPWjCetez
f8K48J/9Ar/yZl/+Ko/4Vx4T/wCgV/5My/8AxVH+s2F/ll+H+Yf2NV/mX4nj OE9aMJ617N/w
rjwn/wBAr/yZl/8AiqP+FceE/wDoFf8AkzL/APFUf6zYX+WX4f5h/Y1X+Zfi eM4T1ownrXs3
/CuPCf8A0Cv/ACZl/wDiqP8AhXHhP/oFf+TMv/xVH+s2F/ll+H+Yf2NV/mX4 njOE9aMJ617N
/wAK48J/9Ar/AMmZf/iqP+FceE/+gV/5My//ABVH+s2F/ll+H+Yf2NV/mX4n jOE9aK9m/wCF
ceE/+gV/5My//FUUf6zYX+WX4f5h/Y1X+ZfidVRT9i/89U/I/wCFGxf+eqfk f8K+HsfRjKKf
sX/nqn5H/CjYv/PVPyP+FFgGUU/Yv/PVPyP+FGxf+eqfkf8ACiwDKKfsX/nq n5H/AAo2L/z1
T8j/AIUWAZRT9i/89U/I/wCFGxf+eqfkf8KLAMop+xf+eqfkf8KNi/8APVPy P+FFgGUU/Yv/
AD1T8j/hRsX/AJ6p+R/wosAyin7F/wCeqfkf8KNi/wDPVPyP+FFgGVFcXMFn A09zPHBCuN0k
rhVGTgZJ461ieJPFtjoASCLbf6lI4RLKBjvycfe4OOCMDGTkYHUjn7Hwhqni qeLVPF13siC7
oLCPKFAWyQwx8owB3LYIyQVxWUqmvLFXZ6WHy+9NV8TLkp9O8v8ACv1ehNe/ EJr26+weFtOk
1G5OP3roRGoyvOODjkgk7QDjqKrw+AtT15hd+LNXnkk2/Jb25GIyQvfG0HjB CjnAOTXd2Gl2
Ol2q21jFBbwj+FFIycAZJxknAHJ5NWti/wDPVPyP+FL2LlrUd/LoavM44f3c DDk/vPWT+ey9
EY2meGNF0dg9jp0EUgYsJCC7qSMHDNkgY7Z9fWtan7F/56p+R/wo2L/z1T8j /hWqikrI8urW
qVZc1STb7t3GUU/Yv/PVPyP+FGxf+eqfkf8ACnYgZRT9i/8APVPyP+FGxf8A nqn5H/CiwDKK
fsX/AJ6p+R/wo2L/AM9U/I/4UWA5/VfB2g6xva40+NJm3Hzof3b7m6sccMc8 /Nn9TXNN4Q8Q
eGJTceFdSae33bmsbkj5vu59FJODk/KQBgE16LsX/nqn5H/CjYv/AD1T8j/h WcqMZa7M9Chm
uJox5HLmh/LLVfc9vlY4bSfiJayTix162k0q+GA3mqQhJC4znlM5J54A/irt IpY5oklidZI3
UMjqchgehB7iquqaFpmtQCHUYILhR90sGDLyCdrDkZwM4PNcTLoGu+BpjdeH 5n1LSmdGmsWB
aUnGCRhfpyvPTIIXNTepT+LVfidHssHjf4H7up/K37r9Jbp+T08z0Kisbw34 m07xLZJLb3Ec
VztJltXb95GRjJxjleRhvfscgbmxf+eqfkf8K1i1JXR5dajUoTdOqrNDKKfs X/nqn5H/AAo2
L/z1T8j/AIU7GYyin7F/56p+R/wo2L/z1T8j/hRYBlFP2L/z1T8j/hRsX/nq n5H/AAosAyin
7F/56p+R/wAKNi/89U/I/wCFFgGUU/Yv/PVPyP8AhRsX/nqn5H/CiwDKKfsX /nqn5H/CjYv/
AD1T8j/hRYBlFP2L/wA9U/I/4UbF/wCeqfkf8KLAMop+xf8Anqn5H/CjYv8A z1T8j/hRYBlF
P2L/AM9U/I/4UbF/56p+R/wosAyin7F/56p+R/wo2L/z1T8j/hRYBlFP2L/z 1T8j/hRsX/nq
n5H/AAosAyin7F/56p+R/wAKNi/89U/I/wCFFgGUU/Yv/PVPyP8AhRsX/nqn 5H/CiwDKKfsX
/nqn5H/CjYv/AD1T8j/hRYBlFP2L/wA9U/I/4UbF/wCeqfkf8KLAMop+xf8A nqn5H/CjYv8A
z1T8j/hRYBlFP2L/AM9U/I/4UbF/56p+R/wosAyin7F/56p+R/wo2L/z1T8j /hRYBlFP2L/z
1T8j/hRsX/nqn5H/AAosAyin7F/56p+R/wAKNi/89U/I/wCFFgGUU/Yv/PVP yP8AhRsX/nqn
5H/CiwDKKfsX/nqn5H/CjYv/AD1T8j/hRYBlFP2L/wA9U/I/4UbF/wCeqfkf 8KLAMop+xf8A
nqn5H/CjYv8Az1T8j/hRYBlFP2L/AM9U/I/4UbF/56p+R/wosAyin7F/56p+ R/wo2L/z1T8j
/hRYBlFP2L/z1T8j/hRsX/nqn5H/AAosAyin7F/56p+R/wAKNi/89U/I/wCF FgGUU/Yv/PVP
yP8AhRsX/nqn5H/CiwDKKfsX/nqn5H/CjYv/AD1T8j/hRYBlFP2L/wA9U/I/ 4UbF/wCeqfkf
8KLAMop+xf8Anqn5H/CjYv8Az1T8j/hRYBlFP2L/AM9U/I/4UbF/56p+R/wo sAyin7F/56p+
R/wo2L/z1T8j/hRYBlFP2L/z1T8j/hRsX/nqn5H/AAosAyin7F/56p+R/wAK Ni/89U/I/wCF
FgGUU/Yv/PVPyP8AhRsX/nqn5H/CiwDKKfsX/nqn5H/CjYv/AD1T8j/hRYBl FP2L/wA9U/I/
4UbF/wCeqfkf8KLAMop+xf8Anqn5H/CjYv8Az1T8j/hRYBlFP2L/AM9U/I/4 UbF/56p+R/wo
sAyin7F/56p+R/wo2L/z1T8j/hRYBlFP2L/z1T8j/hRsX/nqn5H/AAosAyin 7F/56p+R/wAK
Ni/89U/I/wCFFgGUU/Yv/PVPyP8AhRsX/nqn5H/CiwDKKfsX/nqn5H/CjYv/ AD1T8j/hRYBl
FP2L/wA9U/I/4UbF/wCeqfkf8KLAMop+xf8Anqn5H/CjYv8Az1T8j/hRYBlF P2L/AM9U/I/4
UbF/56p+R/wosAyin7F/56p+R/wo2L/z1T8j/hRYBlFP2L/z1T8j/hRRYBlF Ryy+SASjsCcf
KM1IDkA4x7GgAopuXaQpGEyoBO9iOuenB9KVYJFV5GdC+7IRXJBXA9QMHOf8 9KUWxXFopFYO
gZTkEZBpkc3mOy+W67eCWAqRklFFFABRRRQAUUUUAFFFNlljhieWV1jjRSzu xwFA6knsKASv
oh1cFqvibVfEN/Po3hJFeNF2XGobsBMnGUbsOvIyTyVHGTBeatrPjuefTtDT 7Nom8RT3zjDO
MEsAMg4Ix8oGem4gMRXa6Po9noenR2NjHsiTkk8s7d2Y9yf/AKwwABWF3V0j ou/+R7MaVPLl
z10pVekXqo+cvPtH5syfDvgyx0KU3krte6mzOz3kuc/N1wMnB9+ScnnBxXS0 UVrGKirRPMxG
Jq4iftKsrv8Ar7l5IKKKKoxCiiigAooooAKKKKACiiigAooooAKKKKAOR8Qe BoNQuTqWkXDa
Zqu5nM0TMBISuOcH5Se5Hqcg5qLw/wCLL6PVBoXii3W01FlXyJeAs2R0JBI3 E55HBORwRg9n
WP4k8N2fiXTjbXI2SpkwzqMtE39Qe47+xAIxlTafNDf8z1aGPjVgsPjNY7KX 2o+ndd0+m1jY
orgtK8Tar4ev4NG8WoqRuuy31DdkPg4y7dx05OCOCw5yO9q4TU1ocmLwdTDS SlZp7Napryf9
WCiiirOUKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACii
igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACimSzRQ gGWVIweAXYCo
vt9n/wA/cH/fwUASvCkhywOemQxH8qhW2IkfcxMROQpYnPA4Oe1L9vs/+fuD /v4KPt9n/wA/
cH/fwU7sRYoqv9vs/wDn7g/7+Cj7fZ/8/cH/AH8FIZYoqv8Ab7P/AJ+4P+/g o+32f/P3B/38
FAFiiq/2+z/5+4P+/go+32f/AD9wf9/BQBYoqv8Ab7P/AJ+4P+/go+32f/P3 B/38FAE0sscM
TyyuscaKWd2OAoHUk9hXntxcXnxF1FrKyeS28OW7jz58Ya4Yc4GfzAPThjzt Wm+INbfxhft4
c0ieGPT1YG8vpCNpAOcL6jI4x94jsoJPaad/Zml6db2NtcwLDAgRf3ign1Jx gZJ5J7kmsH+9
dl8P5ntQistpqpJfvnsn9hfzNfzPontuW7KyttOs4rS0hWG3iXaiL0A/qe+e 9T1X+32f/P3B
/wB/BR9vs/8An7g/7+Ct0rHjSk5Nyk7tliiq/wBvs/8An7g/7+Cj7fZ/8/cH /fwUCLFFV/t9
n/z9wf8AfwUfb7P/AJ+4P+/goAsUVX+32f8Az9wf9/BR9vs/+fuD/v4KALFF V/t9n/z9wf8A
fwUfb7P/AJ+4P+/goAsUVX+32f8Az9wf9/BR9vs/+fuD/v4KALFFV/t9n/z9 wf8AfwUfb7P/
AJ+4P+/goAsUVX+32f8Az9wf9/BR9vs/+fuD/v4KALFFV/t9n/z9wf8AfwUf b7P/AJ+4P+/g
oAsUVX+32f8Az9wf9/BR9vs/+fuD/v4KAINY0ez1zTpLG+j3xPyCOGRuzKex H/1jkEiuP0fW
LzwbqMfh7xDJvsH4sb88KF/ut6AcD/Z91II7f7fZ/wDP3B/38FZfiCz0zxDo 02nz3sCb8NHK
GVjG46EZ/I9MgkZGaynBv3o7no4LFwivq+I1pS++L/mXmuvdaG5RXB+FPE76 bcL4Z114Y57d
Qlrcqw8uZAMKM9M46Hv0OGHPafb7P/n7g/7+CqhNTV0YYvCTwtTklqnqmtmu jRYoqv8Ab7P/
AJ+4P+/go+32f/P3B/38FWcpYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/ AG+z/wCfuD/v
4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCf uD/v4KPt9n/z
9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt 9n/z9wf9/BQB
Yoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9 /BQBYoqv9vs/
+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv 9vs/+fuD/v4K
Pt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD /v4KPt9n/wA/
cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n /wA/cH/fwUAW
KKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/f wUAWKKr/AG+z
/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/ AG+z/wCfuD/v
4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCf uD/v4KPt9n/z
9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt 9n/z9wf9/BQB
Yoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9 /BQBYoqv9vs/
+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv 9vs/+fuD/v4K
Pt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD /v4KPt9n/wA/
cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n /wA/cH/fwUAW
KKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/f wUAWKKr/AG+z
/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/ AG+z/wCfuD/v
4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCf uD/v4KPt9n/z
9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt 9n/z9wf9/B/j
QBYoqv8Ab7P/AJ+4P+/g/wAaPt9l/wA/cH/fwf40AWKKr/b7L/n7g/7+D/Gj 7fZf8/cH/fwf
40AWKKr/AG+y/wCfuD/v4v8AjS/b7L/n8g/7+L/jQBPRUH2+y/5/If8Av4v+ NH2+x/5/If8A
v4v+NAE9FQfb7H/n8h/77X/Gj7fY/wDP5D/32v8AjQBPRUH2+x/5/If++1/x ooAl0u2V2d5D
+/AAd16knsD/AHeOn9a0GtmDJsdiN3z7m7Y7ceuKj0ohtPRgB8zMT7/MRV2u uT5XZGS1V2R+
Snof++jR5Keh/wC+jUlFTdjsR+Snof8Avo1SeK68xtiHbk4+YdPzrRopqTQN XMRrp0cqzEMp
wRmnJNNIMosjDplQTWzRWntV2J5H3MwR3hAIRufVgKsW8EhBM5YHPC7qt0VD m2NRI/JT0P8A
30a858VeJtQudWk8M+HS321iRcXOSBbp3wexwRk9s4GWPHReO/E6eGfD0zxy lL+5Vo7QLjIb
GN/II+XIPIwTgd6zfA3hEW1pJrmqyfaNT1QefJ8uwRh/mxwAcknJ6DOBjjJ5 5TcpeyT9fT/N
nrYSjGhReNqxv0gns5d33jHr3dl3J/Dml2/hrSFsLWR3yxklkY43uQATjsOA Me3c8m++sRR3
It2kcSYUk7G2jcSFy2MDJBAyeTWndafaxWk0ixYZI2YHceoH1rklv7ZNSYTO gAhxLAcM10rb
gIwp4ODkkn7v0ZiO2KgqfuLRHk1atSrVc6rvJ6tml9qsZrxoowyTkM3mRqyB sEBjuA2uQSM9
cHr3qzHdNGwSYhkJwsvf2DDt9Rx9M4rEa/tn1JRC6EGHEUAwrWqrtBjKjgZO CCPvfRVJnNyC
CDgg8EHvVLDqrG+zM3U5HY6Cisqx1AKRDK3yHhGJ6ex/ofwPvq1wThKEuWRv GSkroKKKKgoK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDn/ABX4aXxFZxNDO1tq FqxktZwxAVuO
DjscDkcjAI7g1vCfiW51GWfR9XgaDWbNf3o24EijA3jHAPI9jkEcHA6muH8c 6NNbSweKtKVU
vrBg84VWzMgwOdp6AZB9VJyeAKxqJxftI/M9bA1I4mH1Ks9/gf8ALJ9PSXXz 1O4orO0PWbbX
tJgv7Zlw6jzEDZMb45Q8DkfTng9DWjWqaaujzKlOVObhNWa0YUUUUyAooooA KKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKAINK1ixt9Niimn2yAtkbGPViewqzL4i06NQVkeU5xhEO f1xWRp9tFJYx
s0SMTnkqD3NX10kMoYWsWCMjha9OcaSm73OWLnyqxm3PiS9lfMG2BB2ADE/U kf4VB/b+p/8A
Pz/5DX/CteTTFiXc9tEBnH3RUf2OD/nhH/3wK0VSilpElwqfzGZ/b+p/8/P/ AJDX/Cmx63qU
SBFumIH95Qx/MjNav2OD/nhH/wB8Cj7HB/zwi/74FP2tL+UXs5/zGfF4i1GN iWkSUYxh0GP0
xU3/AAlF7/zyt/8Avlv8atfY4P8AnhH/AN8CnLYRvnbbI2PSMGk6lF/ZHyVO 5lt4g1JmJE4U
E5wEXA/MVHN4kv7eCSaW72xxqXY+WpwAMntWw2nxqMtaoB7xiuC8ViTX/EMH hPTkSILia7nC
N8gxnBA4xgqfQsVGRis62JpU4XUE309TswGBniq3JKdorWT7RW7/AK6lC0nv /GOsjWdUlla0
tXxYxEBF69cDvwMnueM4XFeqWet6dFY28b3GHSJVYbG4IH0rPtdJsrK1jtre 0ijhjXaqhRwP
r3Pv3qb7HB/zwj/74FZUoU40+WW+7fd/5djTH4qWIrc0NILSK7L/ADe7fVlb VPEElwZILXCw
EbSxHLjoevQfrWHXS/Y4P+eEf/fAo+xwf88I/wDvgV1wrwgrRR50qcpO7ZzV FdL9jg/54R/9
8Cj7HB/zwj/74FX9aj2J9g+5zVXrXVZ7ZdpAlTsHY5H481r/AGOD/nhH/wB8 Cj7HB/zwj/74
FZValKqrSiXCE4bMij1u0dfn8yM+jIT/ACzT/wC2LH/ns3/ftv8ACnfY4P8A nhH/AN8Cj7HB
/wA8I/8AvgVyOjT6Nm3PMb/bFj/z2b/v23+FH9sWP/PZv+/bf4U77HB/zwj/ AO+BR9jg/wCe
Ef8A3wKXsafdhzyG/wBsWP8Az2b/AL9t/hR/bFj/AM9m/wC/bf4U77HB/wA8 I/8AvgUfY4P+
eEf/AHwKPY0+7DnkN/tix/57N/37b/Cj+2LH/ns3/ftv8Kd9jg/54R/98Cj7 HB/zwj/74FHs
afdhzyG/2xY/89m/79t/hR/bFj/z2b/v23+FO+xwf88I/wDvgUfY4P8AnhH/ AN8Cj2NPuw55
Df7Ysf8Ans3/AH7b/Cj+2LH/AJ7N/wB+2/wp32OD/nhH/wB8Cj7HB/zwj/74 FHsafdhzyG/2
xY/89m/79t/hR/bFj/z2b/v23+FO+xwf88I/++BR9jg/54R/98Cj2NPuw55D f7Ysf+ezf9+2
/wAKP7Ysf+ezf9+2/wAKd9jg/wCeEf8A3wKPscH/ADwj/wC+BR7Gn3Yc8hv9 sWP/AD2b/v23
+FH9sWP/AD2b/v23+FO+xwf88I/++BR9jg/54R/98Cj2NPuw55Df7Ysf+ezf 9+2/wo/tix/5
7N/37b/CnfY4P+eEf/fAo+xwf88I/wDvgUexp92HPI88hvYvAvidRbTTt4bv TmRWjLCBznpn
njA56lePmK5r0H+2LH/ns3/ftv8ACqeseH7PWNLnspYYl3qdkmzmN+zDGOn1 56d65rwPcukt
34a1KCP7bp2djlSTJHnryOgyuDxlWGBxXNGlClU5Hfle3r2/yParylj8L9ZX 8WGk/OPSXqtp
fJnY/wBsWP8Az2b/AL9t/hR/bFj/AM9m/wC/bf4U77HB/wA8I/8AvgUfY4P+ eEf/AHwK6fY0
+7PF55Df7Ysf+ezf9+2/wo/tix/57N/37b/CnfY4P+eEf/fAo+xwf88I/wDv gUexp92HPIb/
AGxY/wDPZv8Av23+FH9sWP8Az2b/AL9t/hTvscH/ADwj/wC+BR9jg/54R/8A fAo9jT7sOeQ3
+2LH/ns3/ftv8KP7Ysf+ezf9+2/wp/2OD/nhH/3wKX7HB/zwi/74FHsafdhz yI/7Ysf+ezf9
+2/wo/tix/57N/37b/CpPsUH/PCL/vgUosrf/nhF/wB8Cj2NPuw5pEX9sWP/ AD2b/v23+FH9
sWP/AD2b/v23+FT/AGK3/wCfeL/vgUv2K3/594v++BR7Gn3Y+aRX/tix/wCe zf8Aftv8KP7Y
sf8Ans3/AH7b/CrP2K3/AOfeL/vgUv2K2/59ov8AvgUexp92HNIq/wBsWP8A z2b/AL9t/hR/
bFj/AM9m/wC/bf4Vb+w23/PtD/3wKX7Dbf8APtD/AN8Cl7Kn3Yc0in/bFj/z 2b/v23+FH9sW
P/PZv+/bf4Vd+w23/PtD/wB+xS/YbX/n2h/79ij2VPuw5pFH+2LH/ns3/ftv 8KP7Ysf+ezf9
+2/wq/8AYbX/AJ9Yf+/YpfsFr/z6w/8AfsUeyp92HNIz/wC2LH/ns3/ftv8A Cj+2LH/ns3/f
tv8ACtH7Ba/8+sH/AH7FL9gtP+fWD/v2KPZU/MOaRm/2xY/89m/79t/hR/bF j/z2b/v23+Fa
f2C0/wCfWD/v2KcLC0/59IP+/Ypezp+Yc0jK/tix/wCezf8Aftv8KP7Ysf8A ns3/AH7b/CtX
7BZ/8+kH/fsU7+z7P/n0g/79j/Cj2dPzDmkZH9sWP/PZv+/bf4Uf2xY/89m/ 79t/hWx/Z9n/
AM+kH/fsf4Uv9n2X/Ppb/wDfsf4Uezp+YXkY39sWP/PZv+/bf4Uf2xY/89m/ 79t/hW1/Z9l/
z52//fpf8KP7Psv+fO3/AO/S/wCFHs6fmO8jF/tix/57N/37b/Cj+2LH/ns3 /ftv8K2/7Psv
+fO3/wC/S/4Uv9nWX/Pnb/8Afpf8KXJT8wvIw/7Ysf8Ans3/AH7b/Cj+2LH/ AJ7N/wB+2/wr
c/s6y/587f8A79L/AIUf2dZf8+dv/wB+l/wo5KfmF5GH/bFj/wA9m/79t/hR /bFj/wA9m/79
t/hW5/Z1l/z52/8A36X/AAo/s6y/587f/v0v+FHJT8wvIw/7Ysf+ezf9+2/w o/tix/57N/37
b/Ctz+zrL/nzt/8Av0v+FH9nWX/Pnb/9+l/wo5KfmF5GH/bFj/z2b/v23+FH 9sWP/PZv+/bf
4Vuf2dZf8+dv/wB+l/wo/s6y/wCfO3/79L/hRyU/MLyMP+2LH/ns3/ftv8KP 7Ysf+ezf9+2/
wrc/s6y/587f/v0v+FH9nWX/AD52/wD36X/Cjkp+YXkYf9sWP/PZv+/bf4Uf 2xY/89m/79t/
hW5/Z1l/z52//fpf8KP7Osv+fO3/AO/S/wCFHJT8wvIw/wC2LH/ns3/ftv8A Cj+2LH/ns3/f
tv8ACtz+zrL/AJ87f/v0v+FH9nWX/Pnb/wDfpf8ACjkp+YXkYf8AbFj/AM9m /wC/bf4Uf2xY
/wDPZv8Av23+Fbn9nWX/AD52/wD36X/Cj+zrL/nzt/8Av0v+FHJT8wvIw/7Y sf8Ans3/AH7b
/Cj+2LH/AJ7N/wB+2/wrc/s6y/587f8A79L/AIUf2dZf8+dv/wB+l/wo5Kfm F5GH/bFj/wA9
m/79t/hR/bFj/wA9m/79t/hW5/Z1l/z52/8A36X/AAo/s6y/587f/v0v+FHJ T8wvIw/7Ysf+
ezf9+2/wo/tix/57N/37b/Ctz+zrL/nzt/8Av0v+FH9nWX/Pnb/9+l/wo5Kf mF5GH/bFj/z2
b/v23+FH9sWP/PZv+/bf4Vuf2dZf8+dv/wB+l/wo/s6y/wCfO3/79L/hRyU/ MLyMP+2LH/ns
3/ftv8KP7Ysf+ezf9+2/wrc/s6y/587f/v0v+FH9nWX/AD52/wD36X/Cjkp+ YXkYf9sWP/PZ
v+/bf4Uf2xY/89m/79t/hW5/Z1l/z52//fpf8KP7Osv+fO3/AO/S/wCFHJT8 wvIw/wC2LH/n
s3/ftv8ACj+2LH/ns3/ftv8ACtz+zrL/AJ87f/v0v+FH9nWX/Pnb/wDfpf8A Cjkp+YXkYf8A
bFj/AM9m/wC/bf4Uf2xY/wDPZv8Av23+Fbn9nWX/AD52/wD36X/Cj+zrL/nz t/8Av0v+FHJT
8wvIw/7Ysf8Ans3/AH7b/Cj+2LH/AJ7N/wB+2/wrc/s6y/587f8A79L/AIUf 2dZf8+dv/wB+
l/wo5KfmF5GH/bFj/wA9m/79t/hR/bFj/wA9m/79t/hW5/Z1l/z52/8A36X/ AAo/s6y/587f
/v0v+FHJT8wvIw/7Ysf+ezf9+2/wo/tix/57N/37b/Ctz+zrL/nzt/8Av0v+ FH9nWX/Pnb/9
+l/wo5KfmF5GH/bFj/z2b/v23+FH9sWP/PZv+/bf4Vuf2dZf8+dv/wB+l/wo /s6y/wCfO3/7
9L/hRyU/MLyMP+2LH/ns3/ftv8KP7Ysf+ezf9+2/wrc/s6y/587f/v0v+FH9 nWX/AD52/wD3
6X/Cjkp+YXkYf9sWP/PZv+/bf4Uf2xY/89m/79t/hW5/Z1l/z52//fpf8KP7 Osv+fO3/AO/S
/wCFHJT8wvIw/wC2LH/ns3/ftv8ACj+2LH/ns3/ftv8ACtz+zrL/AJ87f/v0 v+FH9nWX/Pnb
/wDfpf8ACjkp+YXkYf8AbFj/AM9m/wC/bf4Uf2xY/wDPZv8Av23+Fbn9nWX/ AD52/wD36X/C
j+zrL/nzt/8Av0v+FHJT8wvIw/7Ysf8Ans3/AH7b/Cj+2LH/AJ7N/wB+2/wr c/s6y/587f8A
79L/AIUf2dZf8+dv/wB+l/wo5KfmF5GH/bFj/wA9m/79t/hR/bFj/wA9m/79 t/hW5/Z1l/z5
2/8A36X/AAo/s6y/587f/v0v+FHJT8wvIw/7Ysf+ezf9+2/wo/tix/57N/37 b/Ctz+zrL/nz
t/8Av0v+FH9nWX/Pnb/9+l/wo5KfmF5GH/bFj/z2b/v23+FH9sWP/PZv+/bf 4Vuf2dZf8+dv
/wB+l/wo/s6y/wCfO3/79L/hRyU/MLyMP+2LH/ns3/ftv8KP7Ysf+ezf9+2/ wrc/s6y/587f
/v0v+FH9nWX/AD52/wD36X/Cjkp+YXkYf9sWP/PZv+/bf4Uf2xY/89m/79t/ hW5/Z1l/z52/
/fpf8KP7Osv+fO3/AO/S/wCFHJT8wvIw/wC2LH/ns3/ftv8ACj+2LH/ns3/f tv8ACtz+zrL/
AJ87f/v0v+FH9nWX/Pnb/wDfpf8ACjkp+YXkYf8AbFj/AM9m/wC/bf4UVuf2 dZf8+dv/AN+l
/wAKKOSn5heRneH4wbCFiM4DEf8AfRrarK0AY0iA/wC9/wChGtWtK38R+pNP 4UI6h0Kt0NQr
aRKc4J9jU9FRcsZ5MX/PNP8AvkUeTF/zzT/vkU+ilcCCS1jZTtUBj3zUkMQi jCj6n60+indg
YPjHWo9A8N3F+5UyL8sKN/HIchRjIyO5xzgGuf8Ah34ZeHT5Ne1El7/VR57N tUbUYlhjH97I
Y9P4RgYrNud/jn4nfYiJf7G0Y/6RG5JjklRiOVIK5LHbg9VVsHtXqFc8f3lT n6LRevV/oexi
L4LCLDfbqWlLyj9mP6v5Fb7FF6t+dKLOIHJ3H2JqxRXRdnj2IfssP9z9TR9l h/ufqamoyKLs
CH7LD/c/U0fZYf7n6mpsijIouwIfssP9z9TTxDEBjy1/Kn5HrRRdgM8mL/nm n/fIo8mL/nmn
/fIp9FK4DPJi/wCeaf8AfIo8mL/nmn/fIp9FFwGeTF/zzT/vkUhgiIwY1/AY qSii4FWa1QIP
LTnPbJqv5XtWlURTLE+9UpCsUvK9qPK9qubKNlPmCxT8n2o8n2q5so2UcwWK fk+1Hk+1XNlG
yjmCxT8r2o8n2q5so2UcwWKfle1Hk+1XNlGyjmCxT8r2o8n2q5so2UcwWKfl e1cB4+0ufSLu
38YaZtW6tWVJ0ZF2spyoY9CTyEPU4IxjbmvS9lRXVlDe2k1rcJvhmjaORckZ UjBGRz0NZVY+
0hbr09TswGKeFrqpa62a7xe6+aM3Tbu31bTbe/tW3QzoHXkEj1BwSMg5BHYg 1b8r2rhfB0tx
4Y8YXvg68lle1fM2nM+T8vLYHyjquSeihkbHJr0bZRRq88bvfr6jzDCLDVuW LvF6xfeL2/yf
min5PtR5PtVzZRsrXmOKxT8n2o8r2q5so2UcwWKnle1HlVb8ujZRzBYq+VR5 ftVrZS7KLhYq
+XS+XVnZRspXCxX8ujy6sbKXbRcCv5dLsqfbRtouBDso2VNtpdtFwIdlLsqX bRtpXAj20bak
xS4ouBHtpcU/FGKLjG4oxTsUuKAG4paXFGKQCYpaMUtACUtFFABRRRQAUUUU AFFVL7VdO0zy
/t9/a2nmZ2efMse7GM4yecZH51zt18S/Cdr56/2n50kW4bIYXbeR2VsbTnsc 498VEqkI/E7H
TRweIr60qbl6Js62ivOT8WY76ZYdC8O6jqMoUtIh+VlAwAQED5HPtjj1oj8Q /Em9U3Fr4Xs4
7d2by0uDtkUZIAYNIpz77Rnrjms/rMH8N36Jnb/YuKir1eWH+KUV+tz0aivO Y7D4pXim4bVt
OsTIzH7MyITGMnAyI249PmJx15oi+HviYwoZvHmopKVG9UMjKD3AJkGR74H0 o9tJ/DB/gg/s
6hD+LiYL05pfkj0asuXxJoUEzwza1p0csbFXR7pAykcEEE8GuNi+DWhCFBNf 6i8oUb2R0VSe
5AKnA9sn61qWvwt8J29ukUljLcuucyy3Dhm577SB7cDtRzVn9lL5/wDAD2GW Q3rSl6QS/ORp
3vjfwxYQiWbW7NlLbcQSec2fomTjjr0qj/wszwh/0F//ACWl/wDiKmtfh34T tLhJ49GiZ1zg
SyPIvIxyrMQfxFaP/CLeHv8AoA6X/wCAcf8AhR+/8vxC+VLpUf8A4Cvws/zO Xuvi94at7h4o
47+5RcYlihUK3HbcwPtyO1Rf8Lk8Pf8APnqn/fqP/wCLru7PT7LToTDY2kFr EzbikEYRSemc
AdeB+VWKOSt/Mvu/4IPEZatFQk/Wf/2p55/wuTw9/wA+eqf9+o//AIuj/hcn h7/nz1T/AL9R
/wDxdeh0Uclb+f8AD/gi+s5d/wBA7/8AA/8A7U88/wCFyeHv+fPVP+/Uf/xd H/C5PD3/AD56
p/36j/8Ai69Doo5K38/4f8EPrOXf9A7/APA//tTzz/hcnh7/AJ89U/79R/8A xdH/AAuTw9/z
56p/36j/APi69Doo5K38/wCH/BD6zl3/AEDv/wAD/wDtThLP4t+GLqYpMbyz ULnzJ4cqT6fI
WOfwxxV7/hZnhD/oL/8AktL/APEV0V9pWnan5f2+wtbvy87PPhWTbnGcZHGc D8qqf8It4e/6
AOl/+Acf+FFq66r7v+CP2mVy1dOa8lJNfjEhtfGXhq7t0nj1ywVGzgSzrG3B xyrYI/EVbtdf
0a9uEt7TV7Ced87Y4rlHZsDJwAc9ATWNL8N/CM0zyto6hnYsQk0irk+gDAAe w4qpe/CrwrdQ
hIbWezYNnzIJ2LEenz7hj8M8UXrrovxDkyqTspzXqou33PU7WivOZPg9pUSi TTtV1G2vEZWi
mZlYIQQc4AU59MEYPNEngPxZbKJ7LxzeTXMbKyR3BkEbEEfe+duPYqQelHtK q3h+KBYLAy+D
E/fGS/K6PRqK85e2+KWnNHcC907VAGwbZVRQQQeSSqcDjo2c47ZofxP8Q9Oa OfUfCkE9sW2t
HZktITg4+674HHUrjt3FH1hLeLXyD+yJy/h1YS9JJP0s7Ho1Fecp8XbK1aSD WdD1GxvEbmBQ
GIBAIJ3bCDz0x0xzzW/a/ETwnd3CQR6zErtnBljeNeBnlmUAfiaccRSltIyq 5RjqSvKk7d0r
r71dHT0VXs9QstRhM1jdwXUSttLwSB1B64yD15H51YrZO+x58ouLtJWYUUUU CCiiigAooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAzdAH/Elt
/wDgX/oRrSrC0f8A5BUP/Av/AEI1cd9vAUsxBIUYzgdTzWlX+JL1ZEPhRo0Y rK+0N/zxb/v5
H/8AFUfaG/54t/38j/8AiqnlZV0auKKyvtDf88W/7+R//FUfaG/54t/38j/+ Ko5WF0atcj8R
vEI0DwtKInAvbs+Tb4PzL/eccgjaOhHRitbP2hv+eLf9/I//AIqvPLmeXxb8 S7eONJBp+hNv
cgqMyhhnkjHLBRjPIRiDWFfmUeWO70R6eVUoTrurVXuU1zP5bL5uyO08EeGY /DPh2CBolW+m
USXbgfMXPO0nJyFzt4OOp7mukrK+0N/zxb/v5H/8VR9ob/ni3/fyP/4qtYUu SKiuhxYjETxF
WVWo7uTuzVorK+0N/wA8W/7+R/8AxVH2hv8Ani3/AH8j/wDiqrlZjdGrRisr 7Q3/ADxb/v5H
/wDFUfaG/wCeLf8AfyP/AOKo5WF0auKMVlfaG/54t/38j/8AiqPtDf8APFv+ /kf/AMVRysLo
1cUYrK+0N/zxb/v5H/8AFUfaG/54t/38j/8AiqOVhdGrRWV9ob/ni3/fyP8A +Ko+0N/zxb/v
5H/8VRysLo1aKyvtDf8APFv+/kf/AMVR9ob/AJ4t/wB/I/8A4qjlYXRq4oxW V9ob/ni3/fyP
/wCKo+0N/wA8W/7+R/8AxVHKwujVxRisr7Q3/PFv+/kf/wAVR9ob/ni3/fyP /wCKo5WF0auK
MVlfaG/54t/38j/+Ko+0N/zxb/v5H/8AFUcrC6NXFGKyvtDf88W/7+R//FUf aG/54t/38j/+
Ko5WF0auKMVlfaG/54t/38j/APiqPtDf88W/7+R//FUcrC6NXFGKyvtDf88W /wC/kf8A8VR9
ob/ni3/fyP8A+Ko5WF0auKMVlfaG/wCeLf8AfyP/AOKo+0N/zxb/AL+R/wDx VHKwujVxRisr
7Q3/ADxb/v5H/wDFUfaG/wCeLf8AfyP/AOKo5WF0auKMVlfaG/54t/38j/8A iqPtDf8APFv+
/kf/AMVRysLo5z4l+Hv7Q0M6xZr5ep6biZJkO1zGvLDdkYx98dSNpA+9W94V 12LxJ4dtdRUq
JWXbOi4+SQcMMZOB3GTnBB71L9ob/ni3/fyP/wCKrzzwdPL4W8Vah4WnSQwT sZ7Mkrk8Z64A
OVHJzgFCB1rmlF06ql0lp8+h7NGX1vATpPWVL3l/hfxL5aP7z1jFGKyvtDf8 8W/7+R//ABVH
2hv+eLf9/I//AIqunlZ410auKMVlfaG/54t/38j/APiqPtDf88W/7+R//FUc rC6NXFGKyvtD
f88W/wC/kf8A8VQJmJx5D/g6H9A2aOVhdGrijFZ4IZQykEEZBHelqRl/FGKo U1m244JJOFUd
SfSgDRxRisr7Q3/PFv8Av5H/APFUfaG/54t/38j/APiqrlYro1aKyvtDf88W /wC/kf8A8VR9
ob/ni3/fyP8A+Ko5WF0atFZX2hv+eLf9/I//AIqj7Q3/ADxb/v5H/wDFUcrC 6NWisr7Q3/PF
v+/kf/xVH2hv+eLf9/I//iqOVhdGrRWV9ob/AJ4t/wB/I/8A4qj7Q3/PFv8A v5H/APFUcrC6
NWisr7Q3/PFv+/kf/wAVR9ob/ni3/fyP/wCKo5WF0atFZX2hv+eLf9/I/wD4 qj7Q3/PFv+/k
f/xVHKwujVorK+0N/wA8W/7+R/8AxVH2hv8Ani3/AH8j/wDiqOVhdGrRWV9o b/ni3/fyP/4q
sHVfHOh6OSl1chpRuHlQMkrBl6qdrHae3zY/Q1MmoK8nY1o0aleXJSi5PyTZ 2dFeWN8RtT1Q
snh3w5cTqzrHHcz52BuMhwvA6/3+OCfSoZNA8b+Id39s6uthbOrj7PauhwGO NjBWUMuPVmP5
msFX5v4ab/Bfez0/7InS1xdSNNebvL/wGN399j0PU/FGhaN5ov8AVbWGSLG+ LzA0gzjHyDLd
wenTnpXK33xb0dJmttKs7zUrlmVYQibElJxwCfmzzj7vJH41Hp/w88OWG1n0 +e7kV96vc3CH
04KqwUjjoQetdPaQWunxGKy06K2jLbikPlICemcBuvA/KnyYiXVL8Re0yujt GVR+fur8Lv8A
H/M5M698Rdd3jTNBi0q3eRUEt0MSRdMk78bh15CHjIGSKG8B+LdWSdtY8ZSx vNlHhtg7RMm0
DlQUAzzkbffnJrtPtDf88W/7+R//ABVH2hv+eLf9/I//AIqj6rf4238/8g/t mVP/AHenGHpG
7++VzmbP4SeGLWYvMLy8Urjy55sKD6/IFOfxxzW/a+DfDVpbpBHodgyLnBlg WRuTnlmyT+Jq
f7Q3/PFv+/kf/wAVR9ob/ni3/fyP/wCKq44aEdoo5q2aYyt/Eqyfzf5GrRWV 9ob/AJ4t/wB/
I/8A4qj7Q3/PFv8Av5H/APFVrys4bo1aKyvtDf8APFv+/kf/AMVR9ob/AJ4t /wB/I/8A4qjl
YXRq0VlfaG/54t/38j/+Ko+0N/zxb/v5H/8AFUcrC6NWisr7Q3/PFv8Av5H/ APFUfaG/54t/
38j/APiqOVhdGrRWV9ob/ni3/fyP/wCKo+0N/wA8W/7+R/8AxVHKwujVorK+ 0N/zxb/v5H/8
VR9ob/ni3/fyP/4qjlYXRq0VlfaG/wCeLf8AfyP/AOKo+0N/zxb/AL+R/wDx VHKwujVorK+0
N/zxb/v5H/8AFUfaG/54t/38j/8AiqOVhdGrRWV9ob/ni3/fyP8A+Ko+0N/z xb/v5H/8VRys
Lo1aKyvtDf8APFv+/kf/AMVR9ob/AJ4t/wB/I/8A4qjlYXRq0VlfaG/54t/3 8j/+Ko+0N/zx
b/v5H/8AFUcrC6NWisr7Q3/PFv8Av5H/APFUfaG/54t/38j/APiqOVhdGlLF HPC8M0ayRSKV
dHGVYHggg9RWHe+CPDF/CIptEs1UNuzBH5LZ+qYOOenSrX2hv+eLf9/I/wD4 qj7Q3/PFv+/k
f/xVTKkpbpM1pYmrSd6cnH0bRyl/8IPD1y0z2s15Zsy/u0WQPGhxgHDAsRnk jd+IqE+DvG+m
zLLpXjJrlmUrIL7dtUcYwG8wE+/BH4mux+0N/wA8W/7+R/8AxVH2hv8Ani3/ AH8j/wDiqyeE
hulb0dj0I55jLctSXOu0kpfmr/icXH4p8f6R5S6v4V+3I0e0NacuWGPmYoXA zzxtGc8dMVb0
34ueHbvat4t1Yv5YZmkj3pu4yoKZJ78lR07dK6n7Q3/PFv8Av5H/APFVUvLS y1HZ9u0uC68v
OzzxC+3PXGTx0H5UvYVo/DL77FfXsDV/jULPvBtfg7ov6br2kavtGn6la3Lt GJPLjlBcLxyV
6jqOo4zWjXmmo/DXQLuLFpbXNjIFbDR3COCT0LB3OQPQEdTz6VE07x/oU3+g ahFq1tvz5d3K
m5srgk7myAD2D++OTRzVYfHH7tfw3D6ngq/+717PtNcv/kyuvyPVqK8si+J0 1j5S6/4evbPc
nEiA/vHGM4VwuBz/AHjjjr1rp9L8XaPrRC2FykkhYqI3dI3YgZOFYgkY7gY6 +lVCtCbsnr93
5mGIyzF4ePPOD5e61X3q6OsorK+0N/zxb/v5H/8AFUfaG/54t/38j/8Aiq25 WefdGrRWV9ob
/ni3/fyP/wCKo+0N/wA8W/7+R/8AxVHKwujVorK+0N/zxb/v5H/8VR9ob/ni 3/fyP/4qjlYX
Rq0VlfaG/wCeLf8AfyP/AOKo+0N/zxb/AL+R/wDxVHKwujVorK+0N/zxb/v5 H/8AFUfaG/54
t/38j/8AiqOVhdGrRWV9ob/ni3/fyP8A+Ko+0N/zxb/v5H/8VRysLo1aKyvt Df8APFv+/kf/
AMVR9ob/AJ4t/wB/I/8A4qjlYXRq0VlfaG/54t/38j/+Ko+0N/zxb/v5H/8A FUcrC6NWisr7
Q3/PFv8Av5H/APFUfaG/54t/38j/APiqOVhdGrRWV9ob/ni3/fyP/wCKo+0N /wA8W/7+R/8A
xVHKwujVorK+0N/zxb/v5H/8VR9ob/ni3/fyP/4qjlYXRq0VlfaG/wCeLf8A fyP/AOKoo5WF
0V9H/wCQVD/wL/0I1aMRmnCLjJibr/vLVXR/+QVD/wAC/wDQjV+NhHPvIOAh 6fUVdR2qS9WT
H4EJ/Zv/AE1/8d/+vR/Zv/TX/wAd/wDr046iBdpD9lnMbDJn+TYvsRu3fkD1 q35sf99fzqW5
IdkUG01wfldSPfip47CJUAkG5u5yasggjIII9RS0uZjsjjvHesQeGtCaeFlS 7mDR265yS3Hz
YIP3c5546DuKzfBHh260XQrMCwZ5r79/cTbkAjBGVU5w3Axxg4JbmsXxtdN4 y8XW2j6ZbtI2
lLK80mY2DE7eArMAQCFByc8njjn03Sm+zaPZQXBQTRW8aSBFwoYKAcADAGfS safvzdTe2i/V
/oetif8AZcFDDLSVT35em0V+cu+ov9m/9Nf/AB3/AOvR/Zv/AE1/8d/+vVwS xkZ3r+dIZ4lO
C4/DmtuZnk2RU/s3/pr/AOO//Xo/s3/pr/47/wDXq19pi/v/AKGj7TF/f/Q0 c0gsir/Zv/TX
/wAd/wDr0f2b/wBNf/Hf/r1a+0xf3/0NKLiInAf8xijmkFkUm01wfldSPfim Np8+V2mMjPzZ
YjA9uOa0vNj/AL6/nR5sf99fzo5mFkZ/9nS/3k/M/wCFH9nS/wB5PzP+FaHm x/31/OnUczCy
M3+zpf7yfmf8KP7Ol/vJ+Z/wrRJAGSQB6mk82P8Avr+dHMwsjJltZIeWAxnG Qai21pXbo8YV
WBOc8VT21SkS0Q7aNtTbaNtO4WIdtG2pttG2i4WIdtG2pttG2i4WIdtG2ptt G2i4WIdtG2pt
tG2i4WIdtG2pttG2i4WIdtG2pttG2i4WIdtG2pttG2i4WIdtG2pttG2i4WId tcZ8QtIlext9
csRi901xJuVQSUznOMHO04PPAG6u5202SCOaJ4pUV43UqyMMhgeoI7is6sFU g4s6sDiZYTER
rR1tuu66r5ozdG1KLWtHtdRhGFnTcV5O1ujLkgZwQRnvir22uD8BynQtb1Tw ndsokSUzQPwD
IMDP8R5K7WAHQbs9K9C20qFVzgm9+vqa5lhI4bEyhDWD1i+8XqiHbRtqbbRt rW5wWIdtSQL+
/j/3h/OnbafEv75P94UXCwWwxawj0Rf5VLTIhiFB6KKfWb3KWwVFKMtH9W/9 Aapaawyy/wDA
v/QTQtwZmzXNtbOiT3EUTPnaHcKWx1xnrimre2b2hu1u4Gth1mEgKD/gWcVl eIdFn1TWdGkF
qs9rBIxuA5XABx1BPPSsKbwnqjaReQRW6pt1I3EUG9AJI8YGOoH0NdtOnTlF Nys/+Cc8pTUr
JX/4Y7BNS094PPS+tmh37PMEyld3pnPX2pzXtmrzI11AGgG6UGQZjHq3p+Nc raeFLmfTdUEt
i9nNcRgJG1xGwLLyp2xoqrzxn68VUbwrrkyRzugFzqDsmoAOuI496kEc88Ke metWqNK9uf8A
r+r/AIE+0na/Kd4hSWNZI2V0YAqynII9Qa5lvFoebUFtbe1lSzYLmS9WIyZO CRkYwD3z6etb
39qaTbuLX+0bNHQ+X5RnUEEcYxmuPuvCl+1n4hWHT0ElzcKbXDIMx78nBzwO nBxU0Iwu/aeV
r+q/Qqo5WXLv/wABnXS6lY2yx/a7y2t3kUMFkmUZHtk8/WqrawF8Sro/kcNb +f52/wB8Yxj2
65rmtT8L6odVnnGnm+huIUX5JoUaMhQCMyK2OnVcfWrL+FdQN+I40KQDSmtR K0wfa/OBnAJH
I52jirVKkldy3X9f11J56jdrdjXl8RW39sWFjbeVcpdlwZopgQhUZxgZz+Yp IvElrc+IxpFs
BMQjM8yt8qkfwjjn86w9J8O6nDq2izyaPDaJaKyTyRyoWkO3h2A9c+569K3Z NHnTxlZ3sFsq
WUVq0bMpUAMSxxjr39KJwoxdk76Pr11t+gKVR6+a/S5tbayLXxDaXV1eQ+Vc Qx2ZZZbiVQsQ
IOCN2etbu2uU8LfZprrXrSUxO7X8jGFsEleOdvpmsKaTjJvoazbTVi3o3iK2 1iO+mRRDbWr7
fNkbAZcZ3HONopda8SWGj6ct15kdw0gzDHG4/ee4Izx71gXt1b+HLfxGNVaF JL6V3trdn3NM
pDYyqHcAcYycfWsNbjxJ4p0WO00fQ4raySIRtOesgBPyqzn7uVHAyQRyeamr Xw8Klt9tFq9v
67Hdhcsxdem6jtGGvvS0W+lu/wArnbap4ssNGSya/jnQXce9WRQyr0znkE4y OgrCufiMtzLJ
beH9Iu9QmVXO7YcADADBVyxXJ77e3rxj6h4Lt9OXTZNVv5LzUrq4ijliaTGI 8AEDnccYxuyB
jHAr1S3tILSBYLaCOGFc7Y40CqMnJwB71zTVecVL4E7+b/y/M64yy3DPls60 lb+7H5fafzse
fnwx4r8SFf8AhINTW0smYs1pb4z94HacfKRgZBJbHHHWt3TfAnh/TVGLFbmT aVMl1+8JBOfu
n5Qe2QB/Ouo20bamNCmndq77vUitm2KqR9nB8kf5Y+6vw3+bZDto21Nto21v c8yxDto21Nto
20XCxDto21Nto20XCxDto21Nto20XCxDto21Nto20XCxDto21Nto20XCxDto 21Nto20XCxDt
o21Nto20XCxDto21Nto20XCxDto21Nto20XCxDto21Nto20XCxDto21Nto20 XCxDto21Nto2
0XCxDto21Nto20XCxDto21Nto20XCxDto21Nto20XCxDto21Nto20XCxDto2 1Nto20XCxDto
21Nto20XCxDto21Nto20XCxXkhSaJ4pUV43UqyMMhgeoI7iua1L4feH9SYuL VrSQsCWtW2Ag
DGNpBUD6D+tdbto21E4QmrSVzow+Kr4aXNRm4vyZ5x/ZPjXwvDnTb2PVbGH7 tvIuX27P7p5A
GOFVvTjkirdr8SLFbk2us6fd6ZOG+YOpcKNuQW4DAn02nt+HebarX+mWeqWr W19bR3EJ/hdc
4OCMg9jgnkc1h7KcP4Uvk9V/mej/AGjQxH++UU3/ADR92Xq18LfqiO0u7S/i Mtncw3EYbaXh
kDgH0yO/IqfbXF3vw7ayuvt/hbUJNOuRj907kxsMrxnk44JIO4E46Cq6+Ltf 8MSi38Vaa09v
u2pfWwHzfex6KScDA+UgDJBp/WXDSqree6F/ZUMQubBVFP8Auv3Zfds/kzvN tG2q2l6xputw
GbTryO4UfeCnDLyQNynkZwcZHNX9tdCmmro8qpSnTk4TVmuj0ZDto21Nto20 7kWIdtG2pttG
2i4WIdtG2pttG2i4WIdtG2pttG2i4WIdtG2pttG2i4WIdtG2pttG2i4WIdtG 2pttG2i4WIdt
G2pttG2i4WIdtFTbaKLhYh0f/kFQ/wDAv/QjV8AfNn+7j9RVDR/+QVD/AMC/ 9CNXqVX+JL1Y
4fChNo9KNo9KWisyhUYx52nGar6pqsWmaXc313JiCCMu2MAn2Gcck8AdyRU9 eZeNNZutV8P+
H9IDW6Xmr+U82yVWVc7dv3d3yljkMCfuHBNZ1puFNyR2ZfhvrOJhSez3fZLV /gaPwwspn0q/
1q7LNcancFyxK4cKT8wA6Hcz/kOPXu9o9K5zwVHcrozia+lnihnltII3RAIo 4ZXjXBVQSSFG
SSenAHOekp0oezgohmGJ+s4qdW1rvT0Wi/BCbR6UbR6UtFWcYm0elG0elLRQ Am0elG0elLRQ
Am0elG0elLRQAm0elG0elLRQAm0elG0elLRQAm0elG0elLRQAm0elG0elLRQ Am0elG0elLRQ
Am0elG0elLRQAm0elG0elLRQAm0elG0elLRQAm0elG0elLRQAm0elG0elLRQ Am0elG0elLRQ
Am0elG0elLRQAm0elG0elLRQB554/D6J4k0HxPH5vlxSfZ7grtPyZJwAe7K0 gz7DpXfxPFPE
ksTrJG6hkdGyGB5BB7iuV+Itjc33hxYre9kh8y4hgMOE8uUySooLkqWG0nI2 ke+aZ8NdabVf
CscErKZ7Fvs5AYZKADYSAOBj5ffYTnrXPH3KrXSX5q1/0PYqr6zl0Kv2qT5X /hd3H7ndHYbR
6UbR6UtFdB44m0elOQASKfcUlFACAYUD0FLRRQAUoHzfgf5GkooAbto206in cBu2jbTqKLgN
20badRRcBu2jbTqKLgN20bayPEmoyaVYW96lwsSpdwrKr7dskbuEYEnpgNvy CPuDPGQfPT41
8QazrUltod1IPPmaKMyRxiCJQWZSuU37ikZY7mPVwE4BrKpWjDc7cJl9fFXl BWit5PRL1Z6L
rviDTPDtotxqM+zfkRxqNzyEDOAPy5OAMjJGa4SO+1/xVcSyeGNHg0i0m3B9 RkQJJKCWz84G
ecDO0Ehh96r+h+A9O1Wx07Xrq+1Ce8urRJnNw0cwJeLHIdGzjIIzn7o616F0 GBUuNWeknyrs
t/mzr9tgsHpSj7Sf80vhT8o9fVv5HHaN8OdJ0+VrrUWbVb12LPLcjKEnOTs5 yTnncW5GRiuv
206itIQjBWirHn4nF18VPnrScn+Xotl8irPp1ndTRzXFpBLLH9x5IwxXvwSO KsbacBiir5nb
U5rIbto206ii4xu2jbTqKLgN20badRRcBu2jbTqKLgN20badRRcBu2jbTqKL gN20badRRcBu
2jbTqKLgN20badRRcBu2jbTqKLgN20badRRcBu2jbTqKLgN20badRRcBu2jb TqKLgN20badR
RcBu2jbTqKLgN20badRRcBu2jbTqKLgN20badRRcBu2jbTqKLgN20badRRcB u2jbTqKLgN20
badRRcBu2mywRzRPFKiyRupV0cZDA8EEdxUlFIFpqjhtX+G9rJOb/QLqTSr8 bivlMRGSQ2cY
5TOQOOAP4aor4w8Q+FpRb+K9Mae33bUvrYD5vvY9FJOBgfKQBkg16PTJYo54 nilRZI3Uq6OM
hgeCCO4rB0LO9N8r/D7j1oZrKcVTxkfaRXf4l6S3+TuinpeqWGtWQvNOuVng LFdwBBBHUEHk
H69iD3q7trgtS+Hdxb6lcap4a1P+z7h2ytuFKx4+UlcgnjIJxgjoMACszw/4 ruvCUiaH4oFx
bJb28SQHy1dVUFznKDJG3Ygxu5Q55zQq7jpVVn+D/wAhzy2FaLqYGXOusXpN fL7Vu6+49Q20
barWWp2eo+d9jnWYROEdkBxkorjB6EFWU5HHNW63ueQ1bRjdtG2nUU7gN20b adRRcBu2jbTq
KLgN20badRRcBu2jbTqKLgN20badRRcBu2inUUXAo6P/AMgqH/gX/oRq9VHR /wDkFQ/8C/8A
QjV6rq/xJerJh8KCiiisygrzPR7W28afEDU766jt59M01PssMBCyRyKdyrxt wynDt7Er1Are
8farb6forLO2oQSMHa2mtZmiBmC4VWKsCfvFtp4IjbIOMHl/AMF1pup6Tb3D iO3vLd7uFJL5
ovMkO8NsjUbZiI0iJVj8m4sBnpz1Peqxh03/AMj2MH+4wNbEdZe4vnrL8LK/ n9/qUNvDbR+X
BFHEhZm2xqFGSSScDuSST7mpKKK6DxwooooAKKKKACiiigAooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAI5oIbhAk8SS qGVwrqGAZSCD
z3BAIPqK89hkPg34lXYuZki0rWVaczzuERHGWOWIA4O4Yz0dc5NejV5b8Y7e S6GloqbokhuJ
JjuwQu6FPX1cDjnmsa0Xy8y+zr/n+B62TtTrvDT+GonHXvvF/wDgVj1LqMii uT8MXtvd6tMW
urhZPskLWNrNdOxNoY4z5hQsQzeYWUucnjGeeesra6eqPKlFxdpbhRRRQIKK KKACiiigAooo
oAKKKKACg8jrj3oooAZDG0UEcbyvMyqAZHADOfU7QBk+wArnfF3irSPD9skV /CLu4kxJFagA
8qdyu2fugMoweTkZAODjO8Q+Kb+71hfDnhbbJqO7/SLogMluAeRyCMjucHHQ AseLXhbwRbaD
L/aN3K17q8ikyzudwVjncUzzk5wWPJ56ZIrCVWU5ctP7+x61LB0cPBVsa99V Bbvzb+yvxfRH
Mab4CvvE2tSeIPE0SWfnOrm0jBDSDYo5O4mMHamR14P3eDXf2HhvRNLmWax0 mygnWPyvPSBR
IV9C+Nx6Dqea1KKqnSjDbfuc+MzCtirRlpFbRWiXy7+b1GQwxW8EcEEaRRRq ESNFCqqgYAAH
QAU+iitThCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAo
oooAKKKKACs3VfD+k62oGpafBcMBtWRlw6jIJAcfMMkDODzitKik0mrMqE5Q kpQdmuqPMTpG
vfDmS4u9IxqejP8AvbiGQYaMAjng9duBuAxwSVwBXdaF4i03xFaNcadPv2YE kbDa8ZIzgj8+
RkHBwTitSuJ1vwBG16mreG5l0vU4mUoqjbCccHgA4JHXgg4wRyTWHJOlrDVd v8v8j2PrNDHq
2K9yp0mlo/8AGl/6UvmmdtRXI+E/Fkt/cPomtx/ZdctvlZGAAnAGdy44zjkg cEcjjp11awmp
q6PNxWFqYao6dRa/g10afVMKKKKs5wooooAKKKKACiiigAooooAKKKKAKOj/ APIKh/4F/wCh
Gr1UdH/5BUP/AAL/ANCNXq0q/wASXqyYfCgoqlcQQ3GqQLPDHKot5SFkQMAd 0fOD9ak/s2w/
6B9n/wCA6f4VFkO7OF+I7tq2paJ4Ygb95cziaUrGzNGvKhvQjBkJ/wB3tXoE UUcESRRIscaK
FREGAoHAAHYV51pFpDr3xS1K6+yoLHSkMCR+VGq7+UwVA+YE+awPXgdOBXY6 u+j6Lpkt/dWF
t5MeM7bZD1IAzxwMkcmueglKUp93b7j180bo0qOG/ljzP1lr+Csa9FeayeKZ vtErJomjra+Y
PJZogd6Hvkd8dsV2WkSaTrFkLiHTrZCDtdGgjypxnsORyOa7J0ZQV5Hhwrwm +WLNiiuautb8
NWd3c2smnySSWzBZjb6LNMiHaGwXSIr0YHr3rZhs9LuIUmhs7GSKRQyOkKEM DyCDjkVnZbmu
q0LlFVv7NsP+gfZ/+A6f4VHDZ6bOhdNOtwAzL89oEOQSDwVBxxwehHIyDRoG pdorOSLR5L+a
xWzszcwxpK6fZl4VywU5xjko35VY/s2w/wCgfZ/+A6f4UWQalmisPU73QdIu ILe6sFaadWeO
O20x7hiq4DHEaMQBuXk+tPe40OOFJpbGOKN/KCmXTmTmVtqDlBg7sAjquRnG aEkw1Nmiq39m
2H/QPs//AAHT/Cj+zbD/AKB9n/4Dp/hRoGpZoqt/Zth/0D7P/wAB0/wo/s2w /wCgfZ/+A6f4
UaBqWaKrf2bYf9A+z/8AAdP8KP7NsP8AoH2f/gOn+FGgalmiq39m2H/QPs// AAHT/Cj+zbD/
AKB9n/4Dp/hRoGpZoqt/Zth/0D7P/wAB0/wo/s2w/wCgfZ/+A6f4UaBqWaKr f2bYf9A+z/8A
AdP8KP7NsP8AoH2f/gOn+FGgalmiq39m2H/QPs//AAHT/Cj+zbD/AKB9n/4D p/hRoGpZoqt/
Zth/0D7P/wAB0/wo/s2w/wCgfZ/+A6f4UaBqWaKrf2bYf9A+z/8AAdP8KP7N sP8AoH2f/gOn
+FGgalmiq39m2H/QPs//AAHT/Cj+zbD/AKB9n/4Dp/hRoGpZoqt/Zth/0D7P /wAB0/wo/s2w
/wCgfZ/+A6f4UaBqWaKrf2bYf9A+z/8AAdP8KP7NsP8AoH2f/gOn+FGgalmi q39m2H/QPs//
AAHT/Cj+zbD/AKB9n/4Dp/hRoGpZqlq+nR6vo93p8u0LcRNGGZNwUkcNjuQc Ee4qT+zbD/oH
2f8A4Dp/hR/Zth/0D7P/AMB0/wAKTUWrMqE5wkpx3WpyHwuv2l8PTaXOvl3O nTsjRFGVlViW
G7PfdvGO2Onr3Feb6ZaQ6J8Vr7TJrVHtNUjM8CvFG4Dcvnp8qgiVQB7Zzwa7 /wDs2w/6B9n/
AOA6f4Vjhn7nK91p/XyPTzmK+te2htUSkvnv+NyzRVK3ght9UnWCGOJTbxEr GgUE7pOcD6Vd
rdqx5SCiiikMKKKKACo5ScovOGJ3YODgKT17dKkprjLJ7bv/AEE01uJmdcXV taRebcypDHnG
+S4dRn6lqW3uba7iEttIs0ZOA8dw7D8w1ZGtW9xHrmn34heW3ijkTKQmXypG xhyg5I4xxWZc
T67fw2MlxHPawF5VlMFvMCCPuEorCTBGe+M9e1dkaalFO/8AWv8AkYSnZtWO skkihieWU7I0
UsztO4CgdSTu4FcFqetXXjW8OieHHkisMA3t8WkwVP8ACAx6HkY4LHjhQScK /k1PxXc3Fjp2
oXV7p9jaqZZEVwLlgcj5P72TjnrsLc4xXTW2k3djevbwm4023XyWg+z2ksiv gDdu2Nt3EjDF
wT71yKDxLcYytBbvW79PI9tezyuEalWPNXaul0hfZy7y7LZaXOh0Hw9p3h2z a3sonLOcyTPI
2+TrjJUgcZwOP1JJvXN7a2bQLOzIZ5BFGPMlO5j0HDcVzRh1WO01S7calM4u 3iht98iqIyy4
cBcMwGONp6Z9TVeG21OV7NZkvJo4dXVkeSGQERbevzksFye5NdlPDxirJ6I8 bEYmpVm6k9ZP
q/68jtOP7rf9/pP/AIqjj+63/f6T/wCKqXZRsrn5i7EXH91v+/0n/wAVRx/d b/v9J/8AFVLs
o2UcwWIuP7rf9/pP/iqOP7rf9/pP/iql2UbKOYLEXH91v+/0n/xVHH91v+/0 n/xVS7KNlHMF
iLj+63/f6T/4qjj+63/f6T/4qpdlGyjmCxFx/db/AL/Sf/FUcf3W/wC/0n/x VS7KNlHMFiLj
+63/AH+k/wDiqOP7rf8Af6T/AOKqXZRso5gsRcf3W/7/AEn/AMVRx/db/v8A Sf8AxVS7KNlH
MFiLj+63/f6T/wCKo4/ut/3+k/8Aiql2UbKOYLEXH91v+/0n/wAVRx/db/v9 J/8AFVLso2Uc
wWIuP7rf9/pP/iqOP7rf9/pP/iql2UbKOYLEXH91v+/0n/xVHH91v+/0n/xV S7KNlHMFiLj+
63/f6T/4qjj+63/f6T/4qpdlGyjmCxFx/db/AL/Sf/FUcf3W/wC/0n/xVS7K NlHMFiLj+63/
AH+k/wDiqOP7rf8Af6T/AOKqXZRso5gsRcf3W/7/AEn/AMVRx/db/v8ASf8A xVS7KNlHMFiL
j+63/f6T/wCKo4/ut/3+k/8Aiql2UbKOYLEXH91v+/0n/wAVRx/db/v9J/8A FVLso2UcwWIu
P7rf9/pP/iqOP7rf9/pP/iql2UbKOYLEXH91v+/0n/xVHH91v+/0n/xVS7KN lHMFiLj+63/f
6T/4qjj+63/f6T/4qpdlGyjmCxFx/db/AL/Sf/FUcf3W/wC/0n/xVS7KNlHM FiLj+63/AH+k
/wDiqOP7rf8Af6T/AOKqXZRso5gsRcf3W/7/AEn/AMVRx/db/v8ASf8AxVS7 KNlHMFiLj+63
/f6T/wCKo4/ut/3+k/8Aiql2UbKOYLEXH91v+/0n/wAVRx/db/v9J/8AFVLs o2UcwWIuP7rf
9/pP/iqOP7rf9/pP/iql2UbKOYLEXH91v+/0n/xVHH91v+/0n/xVS7KNlHMF iLj+63/f6T/4
qjj+63/f6T/4qpdlGyjmCxFx/db/AL/Sf/FUcf3W/wC/0n/xVS7KNlHMFiMH arsoYMqMwPmO
RkDPIJPpVmUnKLzhid2Dg4Ck9e3SownyuPVG/wDQTUzjLJ7bv/QTUt6jRxni 7QtC1iKP+0bq
KxuwpENw02GI54Ic/MoJzjg+hGTWT4e8ZDT530TxJcqbiEgRXwndkmU4xuYH HQg7jjj72CDn
otXsLm58T6Q8LXEUaRzb54kB2ZAwCWBAz71z3iHRr/U7m/hnguJrZbiJVmaA yNHGU+Zoxx/F
tJCenIxxVSwvNapSlaTWt9nrazO7D5jHk+q4tOVJPS28dL3j5dGtn6nayXtr DeQWjswnnDGN
PMl+YL153YFCXttJey2asxuIlDunmS8A9DndivKre61bTNbh0eS4d3toJV06 aaJoncOuFUBw
D1GAPXgE8V2/hy1kXXbubyr4RNaxL5l2sgLOM7hl+fy4q6TjUpc97Nbrs7nL jcNPC1uR6xdn
GXSUWlqv60NttT05Lk2z3kCzg4MRu2DevTfmp4pobiJZYWEkbDKuk7kH6ENX LxQX9hqhTSZr
qa1nuGea3nsWQIG5ZxKQM89B/OqdmL6WLS4bwa1C6pvupwLklsMcIAuRk8ZJ HSt/Ypq6f9a9
PkcbqNOzX9af5nb8f3W/7/Sf/FVDc3VvaRq85ZFZ1jX97IcsxwBw3rXOWUOq vrjPeXV5A63b
YjFvM8ckXYbg3lgYPoCCOa1r9ftWv6bZAgrCGu5F+nyp+rE/hWbglJK/mVzX T0Ld1f2NkVF3
cxQF87fNumXP0y1To8csayR5dGGVZZnII9Qd1YOuWN7ceJdHe0UqFSYNM0Jk RMqOuCOvbmsy
70y/0pGsYG1F4orMCya2D7TNuyS+3gcn+LjFVGnGUV72r/zYpTak9NF/wDsi VUEkMAOSTNJ/
8VUEd9ZSlRHcROWTzFC3LHKZxuHzdM965vbrKa/EZPPukcKJFUTxLA235iCM RuufqTnFU9Ks
r0X+m3eoxalvaxZDJ++LCXzTgNjkDGPvcU1RVruX9a/5C9pd2t/V1/mdP/bu jf8AQTs//A4/
/F0V5jt8Y+mu/wDkaiur6lH+f8TH6zL+X8D17R/+QVD/AMC/9CNXqo6P/wAg qH/gX/oRq9Xl
Vf4kvVndD4UVm/5C0P8A17S/+hxVl+K76PTtI+1yLA6xGRglwMxuwikKKR3y 23j1xWo3/IWh
/wCvaX/0OKuP+Kt+LbwotqDEXu51Xa33tq5Yso9iFBP+171hWn7Om5eR25dh vrOLhR6OSv6d
fwMn4ZwPb2Ns7w2g+03TyRzRsTMyCN1KONowAy5GGbO7tjnoPHomFnaNGBMJ HaA20nEcu7By
zZAGArdQc5PFb2k6Na6VYWkCRQtNBCsRnWIKz4UAn8cetXLm2hvLeS3nQPFI pVlPoRj8KdFe
zjFdicwrvFYipVv8Tf3dPwPMbi105dH1BJrFbrzLTybQW4DpHLznB7EHac+g P0roPhxYXVjo
kgus7yVQ5JyCM5zx74q/beELG0aG3jub02ixPGIDINm0kEjhc8+u7PHHeuhh ijgiWKJdqKMA
V0VKile3U8+nScbX6HEXWja/Lc+JrrS9TvrORrxXithHEIrlRBEGwzxlgWwy hgcAjpwaydc0
2a4lsHtbGWGwGmxRadHLo811NaygnIUh08iTHl/O5x8v3gAc99e67ZWO7e5k K/e2YwPxJA/C
m2/iDTrgxgSsrSMFQMh5JOByOP1rjWKoqShzq6t18rHZ7Oo1zcuhx/iG2ij1 Od77T7mfUZL+
y+xXiW7EJBviDL5oG1BuEhKE5Oc4Oar6hpYfSrcX1hI5W8v2WO50aXUICHuG IJiQhlYjBV+m
C3qK706HpLaqNVOl2R1EdLs26ed0x9/GenHXpV+t7+7Yi9tEeY6jo14731xF o5tr+50mxEjf
Z2uMqkh+0RM4IMh2bQV3BnAAGccT6fohuodLt5rETaYdWdzbjSns4Ej+zOP9 Q7MVQv8A3toL
HIHIJ9Hop82rYr/18rHM6zpl5feLtLe1vL2wjjsrkPc2scbYJeHCEyI6jOCe mfl+tZ2uafeS
a7dPHb3EyH+yQJRGTu2XTs54GOAQTjoDniu3oojK1vL/ADuFzzvSNNv4vHDT XMe26+2TvLOm
kyB5ICG8tWuzJsZMGMBApIKjj5S1eiUUVPRLsJ6tsKKKKACiiigAooooAKKK KACiiigAoooo
AKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPPPihD9h/sbxBCIvtNndBA GTO/+NckEHAK
Hj/aPSvQIpY54klidZI3UMjochgeQQe4rD8bWf2/wXqsPmbNsBmzjP8AqyHx +O3H41F4C1D+
0fBenOWiMkKeQyxn7uw7VB54O0Kfxz3rnj7tZrur/oevW/fZZTn1pycfk9V+ N/6sba/8hab/
AK9ov/Q5as1WX/kLTf8AXtF/6HLVmulnjoKKKKQwooooAKBjPPof5GiigBu2 uA13UtQ8W6xP
4Y0ItBaQsU1G9ZSABnBQe3BGOrEHooJOh488Qz6fawaPpjN/a2pMI4jHIqmM FgM89C2doPHc
5BWtXwr4btvDOjx20SL9qdVa5lByZHxzzgfKOcD09ySeebdSXs1st/8AI9jC wjg6CxlRXnL4
E/LeTXl08y3o+iWWhabHY2MeyJOSTyzt3Zj3J/8ArDAAFX9tOoroSSVkeTUn KpJzm7t7sbto
206inckbto206ii4DdtG2nVVuLiaO5igghjkZ0ZyXkKABSo7Kf71CuxPQsba NtVvM1H/AJ9b
X/wJb/4ijzNR/wCfW1/8CW/+Ip2YXLO2jbVbzNR/59bX/wACW/8AiKPM1H/n 1tf/AAJb/wCI
oswuWdtG2q3maj/z62v/AIEt/wDEUeZqP/Pra/8AgS3/AMRRZhcs7aNtVvM1 H/n1tf8AwJb/
AOIo8zUf+fW1/wDAlv8A4iizC5Z20bareZqP/Pra/wDgS3/xFHmaj/z62v8A 4Et/8RRZhcs7
aNtVvM1H/n1tf/Alv/iKPM1H/n1tf/Alv/iKLMLlnbRtqt5mo/8APra/+BLf /EUeZqP/AD62
v/gS3/xFFmFyzto21W8zUf8An1tf/Alv/iKPM1H/AJ9bX/wJb/4iizC5Z20b areZqP8Az62v
/gS3/wARRFc3H2xLe4giTfGzq0cpb7pUYOVH96izC6LO2jbTqKVxjdtG2nUU XAbto206ii4D
dtG2nUUXAbto206ii4DdtG2nUUXAbto206ii4DdtG2nUUXAbto206ii4DdtG 2nUUXAbto206
ii4DdtG2nUUXAbto206ii4DdtG2nUUXAbto206ii4DdtG2nUUXAbto206ii4 DdtG2nUUXAbt
o206ii4CKoGc9wR+lKMZ59D/ACNFFIBu2jbTqKdwMTxJ4YsvE2mm1uRslTJg nUZaJv6g9x39
iARh+Fte1C11X/hFvESN/aKKTbXIywuEAJyT3OAfm74IOGHPb1y3jXwv/btg LuxXZrNrhrWZ
X2McHO0t+ZHTB7gE1z1YtP2kN/zX9bHqYHEQqQ+p4l+49n/I319P5l89zp9t G2ud8E+JV8S6
EkrnF5b4iuQSuWbH38DoG57DkEds10lawmpxUlscOIw88PVlRqK0loN20wW8 QmMwjTzSoUvt
G4gds+nNS0Vd2Y2G7aNtEksUbFWkGRxwrH+lR/bLYHBmA+qMP6VSjJ9BXXck 20baeRgkelJU
3GN20U6ii4FHR/8AkFQ/8C/9CNXqo6P/AMgqH/gX/oRq9V1f4kvVkw+FFZv+ QtD/ANe0v/oc
VcL4mk/tX4o+HdKWaJUtP9JJUbmDjLlW54yI1x6bs88V3Tf8haH/AK9pf/Q4 q4XwbJ/a/wAQ
vEusCaJkjxbIIhlXQthWBz6RD67u1cmI15Id3+Wp7GU/u1WxP8kXb1l7q/Nn odFFFbnknH/8
JJAmuabp082r/aLq0aZporEmNGzDhVbySCh8zlt2E2gMckVu+a1/oIVt/nXF rglUbG5lHQ49
WH6+hqs3hy3+1QsLi5DRxMkb/LlFyuVB2dDhe/O0dccbMES20EUMeQkahFye cAYFOWqaFHQ8
hXWbsxiOcrcRYztkGfpWxoMUmqeIbKRIgkUQ81wOi46fjnFdHrvhjSLrM/mR 2E7dHyArH3Xg
flg1e8N6XFpemhFljllc/vJIzkHHQA+g/qa+eoZU6eITdrLX+ketUxkXSfLu yLxFcXq3Oj2d
levZ/bbtoZZY40Zgohkf5dwIByg5IP0Nc1Lr2uTW+m2MD6hJM8l6slzZJaia TyJfLXIm2xjI
O5sDPHAAzjvpIIZXieSJHeJt8bMoJRsEZHocEj6E1UutE0m+tPsl3pdlcW3m GXyZrdHTeSSW
2kYySxOevJ9a+g6HmXX9fP8A4Bx974m1uO0t1iZPtt3bQ30SRiN1KIrNOiEE gg7FG7LYMwwT
XVeH799V0+TUPN8y3uJ3a24GPKB2qQR1DbdwJ/vVfNpbGSOQ28RkjQxoxQZV TjKg9gcDj2FZ
11okz+SlhrN7pVtDGI0trKK28sAdMB4mI4wMA446U7/1/Xy/Ent/X9f8MZOs 6rqVnq2tS29w
5h0zS0u47RY1KzSN5wwxILY+RThSOnXtWfaa3rcOn3cVxLdqzfZRHcXv2Qyx iaTy2cLAWXYB
8ylx1zksBx2Nhp4s0zLPJd3LKFe6njjWWRQSVDFFUYG4447n1NVW8OabHpN1 p2nW0GmQ3WfN
NnbQruzwcqyFGyODuU8Utirpv+vL+vmc3FqF6niC3sbjUY75bbVzAs0sMe9V +xNIclVADbic
lQOOPUVl6ne6rP4X1u01LUb3zbjSJriNilq0MoXG5rd48nyzuAxINxDAggg1 2uieGdO0O0SC
CJZWSUzCV4Y1YPt2ZAjVVXC/L8qjj6nNm10LR7H7T9k0qxt/tQxceVbonndf v4HzdT19TVXS
YKVmn2/zOSbWdch1+S3ja+ktrG4trUs5tEgmDqm55SxWTed5x5YC5UAA8itP Tob7XdF1CS71
i9RZLu4iVLcRx7I45pE2qwXcNwABOc8fKVPNbQ0LSFubW5GlWIuLSMRW0ot0 3QoOAqHGVHJ4
HrVyK3hgjMcMMcaFmYqigAliSxwO5JJPqTUys42EtPwMfwYMeB9BH/UPg/8A QBW5TIYYraCO
CCJIoY1CpGihVVRwAAOgp9VJ80mxBRRRUgFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFAB
RRRQAUUUUAFFFFABXnnwzk+wXeveH2mif7HdFozja8nJRmxnp8ifTd15Feh1 55PJ/Y/xnjdp
ovL1W1Ct5g27OMKoOeSWiX/vrGO9c9b3ZQn52+89fLf3tDEYfvHmXrB3/K53 S/8AIWm/69ov
/Q5as1WX/kLTf9e0X/octWa6WeOgooopDCiiigAqhreqxaJot3qUw3JAm4Ly NzHhVyAcZJAz
jjNX6868ZNJ4p8Xaf4Ttywt4GFxeuo+7xnrtOCFPB6EyAHpWVabhG636ep35 dhY4muoz0gtZ
PtFb/fsvNlrwRo1zf3svjHVypvb1T5EQi2iJOAG5GclQAMfwnkndxq/2vfR6 Vqck0q+YPtLW
sgUDHlsw2kdCRgH3GfQk9HFFHBEkUSLHGihURBgKBwAB2FZ9xodpc6VNp8jS +VK7ybwwDqWY
scHH+0R9ODmtsNGFONpfP9THHYqeKre02WyXRJbL5f8ABIrzWmsbyCGWO3CS siKXuQsrliBl
I8cgEjPI6Hj1j/ty7eSMRadGyS3EltGzXGCXQtyRt4XCHnk+3erE+hxT3Dyf armNZHSR402b
WZMbTkqW/hHAOOPrU0elQR+Rh5P3NxJcLkjln3ZB46fOf0ra9JRWmvzOG0zO n8SpDbW5ZLaK
eVpVK3F0Io1MbbW+crzzjHHPtitizuo76yhuos7JkDrnrg/SqZ0WIKnkXNxB KkkjrNGV3fvG
LMvKkYzjt2FaEMYhhSIM7BFC7nYsxx3JPU1M3Tt7q1KSlfXYfRRRWRYVUk/5 C9t/1wl/9Cjq
3VST/kL23/XCX/0KOmhMxda8T3Wl3l9FBpsdxBYWqXl1K9z5ZEbFwQihG3MB GTgkA+oqve+O
7O08SHSi1iFjmigkEt8qXBeQAr5cJGXUb1ydw/iwDjnXv/D1pqLamZpJ1/tG zWzm2MBtQb8F
cjg/vG656Dimv4ejOqm9h1C+tkkdJJ7aB1WOd1AAZjt3jhVBCsAQoBB5yK10 U7dP62/4Jmt4
3t4biGK4txGDBO87iYEQyRFxs6ZOfKmOePuH1rpbWSWa0hlmiEUrorPGG3BC RyM4GceuKxLr
wfpl214ZXuf9Lu47qQCQYBTHyLxwjfNuHfe3PNTT3XidbiRYNI0h4QxCPJqk qMy9iVFuQD7Z
P1pLbz/r+vkJ76bf1/XzOa0fxTqVvLd3euyN5KpqE/lQSI8ccdvKqYA8pWJ5 OCWOep6gLNH4
4bU7Fhazaet1Fd2SubC9S8j8qWZUKltow2NwIxxkEE9tyPwnpw4l82VGjuon jdgVZbiQSSA4
APUYHTj1PNCeGVNqYLvVtSvf30EqvcSJlfKcOqgKirjI5ONx7ngYpWTV/wCt f8im1e68yjNr
+qXGsaattaLFpcuoyWrT+ZmSTYkoYMhT5V3pwwYk4HTNWtIvtYl8VatZ6k9s sMVvBLbw2+WE
YZpQSXIBYnYD0AHQZwSXr4Vtk1SG8W9vVhhumu4rMMnkpKysGI+XdzvY4LYy eMVpx6dDFq1z
qSs/nXEMcLKSNoVC5GOM5+c559KStYUra2/rX/It0UUUhBRRRQAUUUUAFFFF ABVST/kL23/X
CX/0KOrdVJP+Qvbf9cJf/Qo6aEy3RRRSGFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABR
RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FACHgHr+FctZ
WsVpJYXIit5BKxVL+BtstwWUn96pXkHGT8xOQDgduqqtHp1jDcvcxWdulw+d 8qxKGbPXJxk1
pCfKmu5Mo3sYulvdXMOlmG8lRVto5biFI4xGBt4UDZkEn0PAB6cUuhajqF5P C9yJfKuYWlxK
YQqkEcRhTvIGcHcM9OnStRtF0p5FkbTLNnUAKxgUkAcDBx2xU8NlaW88s8Nr DHLKcySJGAz/
AFI61pKrBp6b+X9f0iFCWmpwPimzufB2v/8ACX6WiyQTsIr62KYGGxlgQOAS o5PO7HXdivQL
a5ivLSG6t33wzIskbYIypGQcHnoai1LT7fVdNuLC6XdDOhRuASM9CMgjIPIP YgVxnw5vrixe
/wDCmocXWnuzxcEBoyecfKOMkMCeSHHYV5y/d1LdJfn/AME96b+u4L2j/iUr J+cNl/4C9PR6
mpotkbLxzrga7ubp5bO1kaS4cEjLz4AAAVQAAMAD1OSST1NRiCFbh51iQTOo RpAo3MozgE9S
Bk4+pqSups8d6u5ga1bXV5DcQ2uoCzd5GBk2FmUZOQORg+/5etZ+laXLptq1 u+pC4t1bEO9C
GRf7pPfHHYflgDV1jw8msQz29w0TwyOXU8hkJJwRxwRmquleFDpVqY0nikmk bfPcNuLyN6nj
64H9STXbGcUviOZxd9jX17nRNT4x/o8v/oJrEkubiBPszXa3ag2cgd40+XfK AQABjGBkZ5Hr
0rqJkSYSI6q8b5BVhkEHsRVeOws4o2jjtIERn8xlWMAF8g7iPXIHPtXNTqKK s0ayi3sZn2K4
/wCgpd/98xf/ABFFbdFZ3f8ASRv7Qo6P/wAgqH/gX/oRq9VHR/8AkFQ/8C/9 CNXqur/El6sx
h8KMbXtQ/sqC4vw0SvBp9w6eacKXDR7QeR1OBjvmsX4XWf2XwXHN5m77VPJN jGNuDsx7/cz+
NV/ijeR2vh8wurFrpDChUcAiSJ+fbCH8cV1mh20tn4f021uE2TQ2sUci5Bww QAjI46iuR+9W
XkvzZ7C/dZW+9Sf4RX+b/q5fooorc8koQvfXMUN6lvaBHi3LvuCDtbB5/dnB 4HAOPrxT5LmS
bRWurcbZXtzJGDzglciucfwojXkNxJpGiS3kaptu5IAZcxhQrb9hIIwMc8Y4 6V0tpZR29pBE
8cbvHGqltvUgAZ/8dH5D0pyV0xRZ5tL4gW+Ui6WSN3HzSxsSSPTnoP8AIqzp b/adf06C2Zmj
3hyxHzHb8x5644NXdX8CSxky6ZIZUx/qJCAw+h6H8cfU1seEdEawtPtVzGUu ZF2KrDBRc/1P
8hXzFHLaqxSc097t7nszxNJUm4+ljQ1rVrjTWsIbSzS6uL2cwRrJN5SqRG75 ZtrHGEPQE+xr
CvfHsVnY2LSR6fb3ly86Ml9qAt4EML7HAlKHcd2No2jIyTjFdPeadDe3VjcS M4eymM0YUjBY
oyc8dMOfTnFZj+FYFii+yX97ZXEUs8i3MBjMmJnLunzoylSxHbI2jn1+m6Hk 6f18/wDgFC48
d20Oni8W13xulvNGPOAJhkDMznt8ixynAJzs4PNdBp1//aC3MixhYorh4UYP nfsO1j04+YMM
c9Peqk3hqxuLq1uJnuJGtrV7UB5SwkVgAS+clmAzgk/xN61BFaatoVjaabot jZ3lrBEFM19q
LxSs3OS22FwSepORkk8U9P6/r+rk9rf1/X6BqPiRtO1O+hezVrPT7IXt1cGb DBD5mAibTuOY
+5A5/Cs7TvHcN/Z3bJHYT3cJhCR6fqAuY2MrbEVpAo2Hd975Tgcgt0rXg0f7 b9sudWtolnv7
ZbW5t4pzLF5al8YYojZIkOePTHqatz4duF0a7t1v7vVLqTy/JN9crEIijZQq UiIBB+bJRiSA
GyOi2K0b0/rb/g/gRReI72TU7Wyu7FrScX5tZFhnEiP/AKM0uQWQEr0H8JyP TIOVceNtQvfD
euXFhBp8V3aWTzoseoLLLbsM/LPGY8xyAZO3DDKkEjqdPRPCs8JF7q91LLfm 9N4dk4cbvJ8k
AsI0z8uTwq4OPTmz/wAIjbzR3CX2pajfiW1ks0Nw8eYYnxuClUBYnavL7j8v Xk5rRME1df11
M+Tx5Da63Hpd0NOjlR4YLhDqAE3myBSPKiKgyIN65bKnrgHGKtLqepazY3E8 csOjWEFzLHJe
iZXlCRM6uwV4yifMi8tu+UtwDg1bTw2I75blNW1FAxje4iRo1W6kQAB3wgIJ CqCEKqQACMZB
ivPCNvdadDZR6jfW0cV497mLym3Ozs+GDoysoZsgEcEKeozSdrCVrFzw7Pd3 OjpJeSPK29xH
NJGI3ljDEI7KMAErg8Adeg6DVqtY20tparDNfXF64JJmuFjDn6hFVf0qzSEF FFFABRRRQAUU
UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV5/wDFESWcWia3 EymSxvPkjdch
icOCTkcDy+nv1FegVzfj62luvA+qRwpucIshGQPlR1Zjz6AE1jiI81KSPRyi qqWOpSezdn6P
R/gzYgljn1B5YnWSN7WFkdDkMC0hBB7irlc14Lu473Q9PliDBV06CI7hzlGl Q/hlTj2rpa1U
uZJ90jirUnSqypv7La+5hRRRTMwooooAr313Hp+n3N7KGaO3iaVwgySFBJx7 8VxXww093sL3
xBeLuvNRnYiUheUB5IwPly+7I/2RxU/xS1GO08ItaHa0l7KkaqXwQFIcsB3H ygf8CH49Poen
/wBlaFY2BWJXggRH8oYUuB8xHA6nJz3zXO/fr2/lX4s9iN8Pljl1qyt/27HX 83+BfooqiNSQ
6nJZhPuJnfngsMEr+TKfxPpXSk3sePcvUVlWmtwz2q3E22FTbRTlQWZhvzgY 288jAxkk9hxm
b+2bH7P52+XHmeX5fkSeZuxnGzbuzjnp056VTpzTtYnmXcv0VFbXMV3As8Db o2zgkEHg4IIP
IIPGDUtQ1bRlJ3CiiigAqlfGxLxJdwCZiGKL5BlIAxk8A46irtVJP+Qvbf8A XCX/ANCjprcT
2KmzR/8AoG/+U9//AIijZo//AEDf/Ke//wARWtRT5hcpk7NH/wCgb/5T3/8A iKNmj/8AQN/8
p7//ABFa1FHMHKZOzR/+gb/5T3/+Io2aP/0Df/Ke/wD8RWtRRzBymTs0f/oG /wDlPf8A+Io2
aP8A9A3/AMp7/wDxFa1FHMHKZOzR/wDoG/8AlPf/AOIo2aP/ANA3/wAp7/8A xFa1FHMHKZOz
R/8AoG/+U9//AIijZo//AEDf/Ke//wARWtRRzBymTs0f/oG/+U9//iKNmj/9 A3/ynv8A/EVr
UUcwcpk7NH/6Bv8A5T3/APiKNmj/APQN/wDKe/8A8RWtRRzBymTs0f8A6Bv/ AJT3/wDiKkhl
062cvBZSRMRgsli6nHpwtaVFFwsVP7Rg/wCed1/4Cy//ABNH9owf887r/wAB Zf8A4mrdFLQe
pU/tGD/nndf+Asv/AMTR/aMH/PO6/wDAWX/4mrdFGgalT+0YP+ed1/4Cy/8A xNH9owf887r/
AMBZf/iat0UaBqVP7Rg/553X/gLL/wDE0f2jB/zzuv8AwFl/+Jq3RRoGpU/t GD/nndf+Asv/
AMTR/aMH/PO6/wDAWX/4mrdFGgalT+0YP+ed1/4Cy/8AxNH9owf887r/AMBZ f/iat0UaBqVP
7Rg/553X/gLL/wDE0f2jB/zzuv8AwFl/+Jq3RRoGpU/tGD/nndf+Asv/AMTR /aMH/PO6/wDA
WX/4mrdFGgalT+0YP+ed1/4Cy/8AxNH9owf887r/AMBZf/iat0UaBqVP7Rg/ 553X/gLL/wDE
0f2jB/zzuv8AwFl/+Jq3RRoGpU/tGD/nndf+Asv/AMTR/aMH/PO6/wDAWX/4 mrdFGgalT+0Y
P+ed1/4Cy/8AxNH9owf887r/AMBZf/iat0UaBqVP7Rg/553X/gLL/wDE0f2j B/zzuv8AwFl/
+Jq3RRoGpU/tGD/nndf+Asv/AMTR/aMH/PO6/wDAWX/4mrdFGgalT+0YP+ed 1/4Cy/8AxNH9
owf887r/AMBZf/iat0UaBqVP7Rg/553X/gLL/wDE0f2jB/zzuv8AwFl/+Jq3 RRoGpU/tGD/n
ndf+Asv/AMTR/aMH/PO6/wDAWX/4mrdFGgalT+0YP+ed1/4Cy/8AxNH9owf8 87r/AMBZf/ia
t0UaBqVP7Rg/553X/gLL/wDE0+G9hnm8pfNVypYCSF0yBgHG4D1H51YqpJ/y F7b/AK4S/wDo
UdGgaluiiikMKzvJ1r/n/sP/AACf/wCO1o1BaXcd5C0sYZVWR4zu9VYqfwyK qLaV0JpMreTr
H/P/AGP/AIBP/wDHaXydX/5/rH/wDf8A+O1HBrcU8kP+jXMcFxnyJ3C7JeCR jDFhkAkbgOlN
tNcS6NqWsbuCK7/1MsvllWO0sB8rEjIB6gVpap2/Ij3f6uT+Vqv/AD+2X/gI 3/xyvP8Axvb3
nh/xHpPikSREiQQzvDbheMHqpYliULjORwo5HFenVzfj3T/7R8F6igWIyQp5 6tIPu7DuYjjg
7Qw/HHeuXEXlTdt1rt2PVyirGljIc3wy91+ktH/mbHlan/z92n/gK3/xyl8v Uf8An6tf/AZv
/jlc18P/ABPaa3o8WnQxypc6bbQpPuU7f4lXBOMkhMnHA3AZJBrsK1jUcoqX fyOLEYd0K0qU
t4tr7ir5eof8/Nt/4Dt/8XR5d9/z82//AH4b/wCLqLUNXg0+OaaZoo4YSdzO GOMHHrzVHT/E
0Wp2aXVqInjbqpUhlPdTzwa2VKbOdyijU2Xv/Pxb/wDfg/8AxdLsu/8AnvB/ 35P/AMVVlwA7
AdAaSseZl2INl3/z2h/78n/4qip6KLsLFHR/+QVD/wAC/wDQjV6qOj/8gqH/ AIF/6EavVdX+
JL1YofCjzr4lJFqGt+GtIkmwlxcETIhG9VZkUN7fxY7cH0r0WvP7hm1H402o t42I06zIuCSA
ACrYI55GZUHrnPYZr0CuSjrOcvO33HsZj+7w+Ho9o83zk2/yS+Vgooorc8ki Yf6VGcdEYZx7
r3x/UfQ9paiYf6VGcdEYZx7r3x/UfQ9paAIrgbrWUYzlCMYznj0wf5H6Gpai uButZRjOUIxj
OePTB/kfoaDE5zieQZz0C8dfb3H5D3yAZ17fNb3joGO1QjEcnILKCBj2NVv7 UlAIMoyAQSoY
8g7SRxz6j1PyjpmodYgaK8eeVm2MV28ZJAYN6gYGMevTrnmgFt42P+kA+WFb gD5sPuwPn68/
p+FdEIxcdjnm5KW51MMu+0aQk7RLJjPUAOwH6Vl2HifSNSLfZrptiw+f5ksL xI0fdlZ1AYDI
yQTjPOKvWgL6YQAQWkl+92y7VzA8H3M2k6dp9xcRIsOiS6bM8ZJO9xENy5Ay Bsbrg9Pw4pLV
3/rR/wDAOuKT6m3Z+JNLvlUwzSgtIsYWa2kibLAlTtdQdpwcN0OMA5qW11vT r3yvs1yJRLNJ
AhVG5ePIcdOMbTyePTqK5u18LakumahuW3h1B44vszvqNzeDzImLqzNLyq7s fKo6Z5OeJ7DQ
z4av5dRnkklsYrZEjjgilnl81giSMUUEkERR4xk8uTStG7/r+v8AhvMWv9f1 /VmaviXXR4e0
j7aLaS5kaWOGOJFc5Z2CjJRWIHP90+gBJAqNfFFlFp0V1dsQ8k0sQitYprhi Y2ZWwojD4G3k
7cD1PBNa9vYfEsMdlYx3sUsdzBclrzT7i3TbHMjsAzxgZwOBWbdeD7/y7WaF kluIJ7wmJdQn
s1aOeYyA+ZEN2RhcqQQcn0BosuXXe/4f8OVpb+vM3/8AhIrRby8R2X7Lb2kN 0LlG3iQSFwAo
AyfuDGMk7gAPWtb+LYLq31OeCxvJls51gSOOB/NlYxq2CjKDHy2PmwBjJIFU f+ETu44pBDJa
qyWlkkCkuVMtvI8mG3bmCklRnLMOT1HOro1hqMMuq3OoraRy3syyLHbyM6oB EiYLFVJOVPOO
mKJJa2/rb/ghpf8Arsi5o2of2volhqXleT9rt0m8vdu2blBxnvjNUm1+WIap I+nSyx2c4t4V
td0sszFFbldoCD5gMlsdyRVrQbCXS/D2m6fOyNLbW0cLlCSpKqAcZxxxVbSN 323XYWimRjd7
1aSJlV1MSAFWIw3IPQnGOaJW5pcvnb70S9Lev6Mn0rWU1HSLC+aCWJru0W68 tUaQICoJXcBg
n5uB1POBwazIfFc11Y313DpUka2l6ls0d3IYnZGVD5m3aSD+8GEOD67TwNLQ rK60rRdL06UQ
uLa0SKWRJD99VUfKNvIPzckjoODnjJ1KwnsrTWHZHmOoahDJClvE8jABYl+Y Acf6tjnoBjJo
la8rfL7/APIfQ7BPuCnU1PuCnVqtiAooopgFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFA
BRRRQAVXvrSPUNPubKUssdxE0TlDggMCDj35qxRQ1fQcZOLUlujzv4S3klxp N5BJIGFsyJGu
BlUJdv8A0JmOT/SvRK8/8Gu1l4/8V6dPGyzzy/aUxgjZvJGTnqRKp/POK9Ar DDu9NJ9NPuPU
zqKWNnOO0rS/8CSf5sKKKK3PKCiiigDz/wARo2ofFbw5YTSMLeGL7SirgEOC 7dcdD5SA+w4x
XoFef26NqHxquzPIxGnWYMAGAACqgg8cj9659c47cV6BWFDVzfn+R62ae7Ch TXSCfzk2/wBV
cKxP7CZTHdpIxvhN5rbp38v5uGAXp90kA47CtuiumM3HY8hpPc5+20bULS1K wzxLMLO3gBDE
ZKFiwzjgEHAOCR1xTItFvo7adWigcyXAmCPezFlwgXibG8HjrjoSK6OitPby 1fcn2aKmmwT2
1jHFcy+ZKCSTvL4BJIXceWwMDJ5OM1boorJu7uUlZWCiiikMKqSf8he2/wCu Ev8A6FHVuq9x
aGeaOVZ5YXRWUGPacg4JzuB/uimhMsUVU+xz/wDQSuv++Yv/AIij7HP/ANBK 6/75i/8AiKLe
YXLdFVPsc/8A0Err/vmL/wCIo+xz/wDQSuv++Yv/AIii3mFy3RVT7HP/ANBK 6/75i/8AiKPs
c/8A0Err/vmL/wCIot5hct0VU+xz/wDQSuv++Yv/AIij7HP/ANBK6/75i/8A iKLeYXLdFVPs
c/8A0Err/vmL/wCIo+xz/wDQSuv++Yv/AIii3mFy3RVT7HP/ANBK6/75i/8A iKPsc/8A0Err
/vmL/wCIot5hct0VU+xz/wDQSuv++Yv/AIij7HP/ANBK6/75i/8AiKLeYXLd FVPsc/8A0Err
/vmL/wCIo+xz/wDQSuv++Yv/AIii3mFy3RVT7HP/ANBK6/75i/8AiKPsc/8A 0Err/vmL/wCI
ot5hct0VU+xz/wDQSuv++Yv/AIij7HP/ANBK6/75i/8AiKLeYXLdFVPsc/8A 0Err/vmL/wCI
o+xz/wDQSuv++Yv/AIii3mFy3RVT7HP/ANBK6/75i/8AiKPsc/8A0Err/vmL /wCIot5hct0V
U+xz/wDQSuv++Yv/AIij7HP/ANBK6/75i/8AiKLeYXLdFVPsc/8A0Err/vmL /wCIo+xz/wDQ
Suv++Yv/AIii3mFy3RVT7HP/ANBK6/75i/8AiKPsc/8A0Err/vmL/wCIot5h ct0VU+xz/wDQ
Suv++Yv/AIij7HP/ANBK6/75i/8AiKLeYXLdFVPsc/8A0Err/vmL/wCIo+xz /wDQSuv++Yv/
AIii3mFy3RVT7HP/ANBK6/75i/8AiKPsc/8A0Err/vmL/wCIot5hct0VU+xz /wDQSuv++Yv/
AIij7HP/ANBK6/75i/8AiKLeYXLdFVPsc/8A0Err/vmL/wCIo+xz/wDQSuv+ +Yv/AIii3mFy
3RVT7HP/ANBK6/75i/8AiKPsc/8A0Err/vmL/wCIot5hct0VU+xz/wDQSuv+ +Yv/AIij7HP/
ANBK6/75i/8AiKLeYXLdFVPsc/8A0Err/vmL/wCIo+xz/wDQSuv++Yv/AIii 3mFy3RVT7HP/
ANBK6/75i/8AiKPsc/8A0Err/vmL/wCIot5hct0VU+xz/wDQSuv++Yv/AIij 7HP/ANBK6/75
i/8AiKLeYXLdFVPsc/8A0Err/vmL/wCIo+xz/wDQSuv++Yv/AIii3mFy3RVT 7HP/ANBK6/75
i/8AiKPsc/8A0Err/vmL/wCIot5hct1Uk/5C9t/1wl/9Cjo+xz/9BK6/75i/ +IpYrMx3KzyX
U0zKhRQ4QAAkE/dUf3RRsG5aooopDCsbTGvLMPayabc4a5lYTh4im1pGYHG/ d0I7ZrZoqlKy
asJq5z1rZ3aXMXl2M1myk+eVuAbZxg52R7jjJwfuqeuT619I0u5hOlq1lfQS 2oHmyT3YkjPy
FSETzGxknjgYH5HqaK09vKzXf1/rqR7NBRRRWJoeb/DSxi0/xB4ptYSxjt50 gVnOSVV5QM+9
ekV5/wCHEbT/AIreI7CGRjbzRfaXVsElyUbrjoPNcD2POa9ArDDv3LPo2vxP Wzr3sX7X+eMZ
ffFHM+Ibizt7a4mvNO+3QxSszIEDleT82CR+nr6ZqnpN9p99HcXdlpwhR5CD OY9gnIJ5GDk8
55Pr65rrHtLaSRnaBdzHJIZhk/nTE02xiRUS1RUQAKoLYAHQYzXpKtBLr/Xz PDdOTLb8O3Oe
abSk5JPrSVyGwUUUUAUdH/5BUP8AwL/0I1eqjo//ACCof+Bf+hGrcsscETyy uscaKWd3OAoH
JJPYVpV/iS9WTTV4pI898GySXnxM8UXU7lpYw8K8ADYJVUDj0CKK9Frzb4Sx RjT5pQiiRnmV
nA5IHkEAn0GT+Zr0muTDfwk++v4nr527Y6dNbRtFfKKQUUUVueURMP8ASozj ojDOPde+P6j6
HtLUTD/SozjojDOPde+P6j6HtLQBFcDdayjGcoRjGc8emD/I/Q1LTJkMkEiA AllIwenT3B/k
aaWn5xHGeuMyH3x2/wB38z6cgFS8niMxhmgSVVKn5k3AZIGf1qmJLMjjTYMk DjyR16Y/764/
XpVTVhI2oTF1QIdiEkjafmU4JOOwzj+dUxFLuPmeWccybmTo0nzZ+buuM+ox 9K3jCLV2YSlN
SsjrLUI0BVURVWR1AQYHDEf0qXYvpVOx+bTH24ILy42/77dK4TT9Av7LSbD+ ybF7PUbrw7Mt
xMIyjNdYi8vzGPO8EvjccjnHSue17/10f+R0pXPR9i+lGxfSvNdJ0+4tNJv7 yysWAtDb3MVr
b6LLYh5EJMgVJJGLyMnylgADleWwcavhjSdRtNaS1vYXNvao16szIdpnnA3B SSeQwnJHYSLT
5Ve39f1v/TJu7X/r+tv6R1eoXtnpVk93dsyQqVX5EZ2JYhVAVQSxJIAABPNS 20sN3AJo0lVS
SMSxPG3Bx91gD29OetYnjPS4tW0a3t5bFLxRf2rmNoRIAomTccYPG0tn2J7V yOo6TemwsVub
JW09LzUDJBcaTLfKHadjE/kxsrfd34fkDd7g0cqtfzLtpf8ArqejJdWsl/NY q+bmGNJXTB4V
ywU56clG/Kql1rml2f2gSzOXt5lgeOKGSRzIyBwqqoLOdpz8oPGfQ1yT6dqY gu/PgvLgHTdO
W43REPOiSyGZMZbc2wkFQzE7sZOaZa3UOhRalcaV4dvI4p9QQWWdMmKQA26B pfKVN6oMMNoA
yeMqCSBxSb/rsL+vwR3VheWmp2aXVo++JiRkqykEH


Ed Merks
Professional Support: https://www.macromodeling.com/
Re: Limit Copy, Paste, Cut keyboard shortcuts to EMF tree only (not the entire editor) [message #416344 is a reply to message #416343] Mon, 28 January 2008 20:45 Go to previous messageGo to next message
Mircea Luchian is currently offline Mircea LuchianFriend
Messages: 89
Registered: July 2009
Member
This is a multi-part message in MIME format.
--------------020901060505040009000902
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Kind of makes your head spin. I know.

The original EMF templates are not enabled to create an EMF editor with
Eclipse forms. However, with some support from this newsgroup, this is
made possible. This improvement with the Eclipse forms puts a constraint
to the copy, cut, paste EMF actions as their keyboard shortcuts must be
bound to the tree area only.
Before, the properties view was used to input the model's attributes
which was outside the editor's scope and the EMF actions's keyboard
shortcuts did not apply. Since one might choose not to use the the
properties view and customize an EMF-enabled editor, this keyboard
shortcut problem can happen to others.

Mircea


Ed Merks wrote:
> Mircea,
>
> Gosh, I don't have a lot of experience with this type of thing. I
> hope someone else has some clue, because I won't even know where to
> begin. Maybe Tom will read this and have an idea...
>
>
> M. Luchian wrote:
>> Hello,
>>
>> The EditingDomainActionBarContributor.java class defined in the EMF
>> plugins overrides the Windows CUT/COPY/PASTE actions' keyboard
>> shortcuts (CTRL-X, CTRL-C, CTRL-V) with EMF's own.
>>
>> This is correct as long as the actions are performed on the tree.
>> However, I implemented an editor based on eclipse forms, with text
>> widgets (Windows native) handling the COPY CUT PASTE actions with a
>> right click of a mouse. As the mouse actions work fine and interact
>> with the windows' clipboard, pressing the keyboard shortcuts for the
>> same actions in the text widgets will call the actions reserved by
>> EMF ... This is problematic as the CTRL-X, CTRL-C, CTRL-V shortcuts
>> are overridden with the EMF copy, cut, paste actions for the entire
>> editor.
>>
>> Is there a possible way to register the actions for the editor's tree
>> only? (See picture)
>>
>>
>>
>> I have a CustomEditingDomainActionBarContributor.java replacing a few
>> small things from the original EditingDomainActionBarContributor.java
>> class, but I don't want to manage the registering / unregistering the
>> copy, cut and paste actions when the tree is in focus or not.
>>
>> Any help appreciated
>>
>> Thanks,
>>
>> Mircea
>


--------------020901060505040009000902
Content-Type: multipart/related;
boundary="------------060001050104090505030403"


--------------060001050104090505030403
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">
Kind of makes your head spin. I know. <br>
<br>
The original EMF templates are not enabled to create an EMF editor with
Eclipse forms. However, with some support from this newsgroup, this is
made possible. This improvement with the Eclipse forms puts a
constraint to the copy, cut, paste EMF actions as their keyboard
shortcuts must be bound to the tree area only. <br>
Before, the properties view was used to input the model's attributes
which was outside the editor's scope and the EMF actions's keyboard
shortcuts did not apply. Since one might choose not to use the the
properties view and customize an EMF-enabled editor, this keyboard
shortcut problem can happen to others.<br>
<br>
Mircea<br>
<br>
<br>
Ed Merks wrote:
<blockquote cite="midfnlbqs$j8f$1@build.eclipse.org" type="cite">
<meta http-equiv="Context-Type"
content="text/html; charset=ISO-8859-1">
Mircea,<br>
<br>
Gosh, I don't have a lot of experience with this type of thing.&nbsp;&nbsp; I
hope someone else has some clue, because I won't even know where to
begin.&nbsp; Maybe Tom will read this and have an idea...<br>
<br>
<br>
M. Luchian wrote:
<blockquote cite="mid:fnlb1b$e2t$1@build.eclipse.org" type="cite">
<title></title>
Hello, <br>
<br>
The EditingDomainActionBarContributor.java class defined in the EMF
plugins overrides the Windows CUT/COPY/PASTE actions' keyboard
shortcuts (CTRL-X, CTRL-C, CTRL-V) with EMF's own. <br>
<br>
This is correct as long as the actions are performed on the tree.
However, I implemented an editor based on eclipse forms, with text
widgets (Windows native) handling the COPY CUT PASTE actions with a
right click of a mouse. As the mouse actions work fine and interact
with the windows' clipboard, pressing the keyboard shortcuts for the
same actions in the text widgets will call the actions reserved by EMF
.... This is problematic as the CTRL-X, CTRL-C, CTRL-V shortcuts are
overridden with the EMF copy, cut, paste actions for the entire editor.
<br>
<br>
Is there a possible way to register the actions for the editor's tree
only? (See picture)<br>
<br>
<img src="cid:part1.09030309.01070402@matrox.com" alt=""><br>
<br>
I have a CustomEditingDomainActionBarContributor.java replacing a few
small things from the original EditingDomainActionBarContributor.java
class, but I don't want to manage the registering / unregistering the
copy, cut and paste actions when the tree is in focus or not. <br>
<br>
Any help appreciated<br>
<br>
Thanks, <br>
<br>
Mircea
</blockquote>
<br>
</blockquote>
<br>
</body>
</html>

--------------060001050104090505030403
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-ID: <part1.09030309.01070402@matrox.com>

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL DBkSEw8UHRof
Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwL DBgNDRgyIRwh
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjL/wAAR
CAG1BDEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI CQoL/8QAtRAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkK
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1 dnd4eXqDhIWG
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW 19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcI CQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz UvAVYnLRChYk
NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOE
hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU 1dbX2Nna4uPk
5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDjfMf1o8x/Wjyz6UeWfSv0 6zPjdA8x/Wjz
H9aPLPpR5Z9KLMNA8x/WjzH9aPLPpR5Z9KLMNA8x/WjzH9aPLPpR5Z9KLMNA 8x/WjzH9aPLP
pR5Z9KLMNA8x/WjzH9aPLPpR5Z9KLMNA8x/WjzH9aPLPpR5Z9KLMNA8x/Wjz H9aPLPpR5Z9K
LMNA8x/WjzH9aPLPpR5Z9KLMNA8x/WjzH9aPLPpR5Z9KLMNA8x/WjzH9aPLP pR5Z9KLMNA8x
/WjzH9aPLPpR5Z9KLMNA8x/WjzH9aPLPpR5Z9KLMNA8x/WjzH9aPLPpR5Z9K LMNA8x/WjzH9
aPLPpR5Z9KLMNA8x/WjzH9aPLPpR5Z9KLMNA8x/WjzH9aPLPpRsNFmPQPMf1 o8x/WjYaNhos
w0DzH9aPMf1o2GjYaLMNA8x/WjzH9aNho2GizDQPMf1o8x/WjYaNhosw0DzH 9aPMf1o2GjYa
LMNA8x/WjzH9aNho2GizDQPMf1o8x/WjYaNhosw0DzH9aPMf1o2GjYaLMNA8 x/WjzH9aNho2
GizDQPMf1o8x/WjYaNhosw0DzH9aPMf1o2GjYaLMNA8x/WjzH9aNho2GizDQ PMf1o8x/WjYa
Nhosw0DzH9aPMf1o2GjYaLMNA8x/WjzH9aNho2GizDQPMf1o8x/WjYaNhosw 0DzH9aPMf1o2
GjYaLMNA8x/WjzH9aNho2GizDQPMf1o8x/WjYaNhosw0DzH9aPMf1o2GjYaL MNA8x/WjzH9a
Nho2GizDQPMf1o8x/WjYaNhosw0DzH9aPMf1o2GjYaLMNA8x/WjzH9aNho2G izDQPMf1o8x/
WjYaNhosw0DzH9aPMf1o2GjYaLMNA8x/WjzH9aNho2GizDQPMf1o8x/WjYaN hosw0DzH9aPM
f1o2GjYaLMNA8x/WjzH9aNho2GizDQPMf1o8x/WjYaNhosw0DzH9aPMf1o2G jYaLMNA8x/Wj
zH9aNho2GizDQPMf1o8x/WjYaNhosw0DzH9aPMf1pNlGyjlYaC+Y/rR5j+tJ so2UcrDQXzH9
aPMf1pNlGyjlYaC+Y/rR5j+tJso2UcrDQXzH9aPMf1pNlGyjlYaC+Y/rR5j+ tJso2UcrDQXz
H9aPMf1pNlGyjlYaC+Y/rR5j+tJso2UcrDQXzH9aPMf1pNlGyjlYaC+Y/rR5 j+tJso2UcrDQ
XzH9aPMf1pNlGyjlYaC+Y/rR5j+tJso2UcrDQXzH9aPMf1pNlGyjlYaC+Y/r R5j+tJso2Ucr
DQXzH9aPMf1pNlGyjlYaC+Y/rR5j+tJso2UcrDQXzH9aKTZRRysNC7iOjEde y/8ACufCn/QL
P/gTL/8AFUf8K58Kf9As/wDgTL/8VXgf6zYX+WX4f5no/wBjVv5l+P8AkeNY joxHXsv/AArn
wp/0Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+Zfj/AJHj WI6MR17L/wAK
58Kf9As/+BMv/wAVR/wrnwp/0Cz/AOBMv/xVH+s2F/ll+H+Yf2NW/mX4/wCR 41iOjEdey/8A
CufCn/QLP/gTL/8AFUf8K58Kf9As/wDgTL/8VR/rNhf5Zfh/mH9jVv5l+P8A keNYjoxHXsv/
AArnwp/0Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+Zfj/ AJHjWI6MR17L
/wAK58Kf9As/+BMv/wAVR/wrnwp/0Cz/AOBMv/xVH+s2F/ll+H+Yf2NW/mX4 /wCR41iOjEde
y/8ACufCn/QLP/gTL/8AFUf8K58Kf9As/wDgTL/8VR/rNhf5Zfh/mH9jVv5l +P8AkeNYjoxH
Xsv/AArnwp/0Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ Zfj/AJHjWI6M
R17L/wAK58Kf9As/+BMv/wAVR/wrnwp/0Cz/AOBMv/xVH+s2F/ll+H+Yf2NW /mX4/wCR41iO
jEdey/8ACufCn/QLP/gTL/8AFUyX4e+EIYnll04RxopZ3a6lAUDqSd/Ao/1m wv8ALL8P8wWS
1nopL8f8jx3EdGI67vU4/hlprFBaveSBgCtrPK4AIzncXCkfQn+dZKaZDrTh vD3ggm3+cia6
uZtsig4GDvVQeuRlv0NZPizBJ25ZN+SX+Z6VPg/MZx55WjHvJ8q/E5rEdGI6 6iL4T67JEjtP
YxsyglGmfKn0OFIz9Ca0rb4QzNbqbnV4o5udyRwF1HPGGLAnj2qJcV0fsUpP 1sv1ZquFYx/i
4uC9OaX/ALajhcR0Yjrv/wDhUA/6Dg/8BP8A7Oorn4QzC3Y22rxyTDG1JIDG p55ywYkcexpL
iuF/eoyt6r/MT4YoNWhjI384zS++2hwuI6MR11Enws121UTqLG8KMD9nWdwZ BnkZIXj/AIEP
bmmfZNN0WTZ4m8FSwpv2m4trmbZyuQBlyrHr0f144q/9bMIvihNfJf5guDsV P+BVhN9oy1+5
pP7jmsR0Yjr0DTLX4ZamoxCLWTaWMd1cyxkAHH3i+0nvgE/zrpf+Fc+FP+gW f/AmX/4qtI8U
YOSvGMvw/wAzz6/DuLw8uWt7r87r9DxrEdGI69l/4Vz4U/6BZ/8AAmX/AOKo /wCFc+FP+gWf
/AmX/wCKqv8AWbC/yy/D/Mx/sat/Mvx/yPGsR0nye1ezf8K58Kf9As/+BMv/ AMVR/wAK58Kf
9As/+BMv/wAVR/rNhf5Zfh/mH9jVv5l+P+R4z8ntR8ntXs3/AArnwp/0Cz/4 Ey//ABVH/Cuf
Cn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7N/wrnwp/0Cz/4E y/8AxVH/AArn
wp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/mX4njPye1Hye1ezf8K58Kf8AQLP/ AIEy/wDxVH/C
ufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7N/wrnwp/0Cz/ AOBMv/xVH/Cu
fCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9jVv5l+J4z8ntR8ntXs3/AArnwp/0 Cz/4Ey//ABVH
/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7N/wrnwp/0C z/4Ey/8AxVH/
AArnwp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/mX4njPye1Hye1ezf8K58Kf8A QLP/AIEy/wDx
VH/CufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7N/wrnwp/ 0Cz/AOBMv/xV
H/CufCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9jVv5l+J4z8ntR8ntXs3/AArn wp/0Cz/4Ey//
ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7N/wrnw p/0Cz/4Ey/8A
xVH/AArnwp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/mX4njPye1Hye1ezf8K58 Kf8AQLP/AIEy
/wDxVH/CufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7N/wr nwp/0Cz/AOBM
v/xVH/CufCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9jVv5l+J4z8ntR8ntXs3/ AArnwp/0Cz/4
Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7N/ wrnwp/0Cz/4E
y/8AxVH/AArnwp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/mX4njPye1Hye1ezf 8K58Kf8AQLP/
AIEy/wDxVH/CufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7V7 N/wrnwp/0Cz/
AOBMv/xVH/CufCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9jVv5l+J4z8ntR8nt Xs3/AArnwp/0
Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ZfieM/J7UfJ7 V7N/wrnwp/0C
z/4Ey/8AxVH/AArnwp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/mX4njPye1Hye 1ezf8K58Kf8A
QLP/AIEy/wDxVH/CufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1b+ZfieM/J7Uf J7V7N/wrnwp/
0Cz/AOBMv/xVH/CufCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9jVv5l+J4z8nt R8ntXs3/AArn
wp/0Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ZfieM/J7 UfJ7V7N/wrnw
p/0Cz/4Ey/8AxVH/AArnwp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/mX4njPye 1Hye1ezf8K58
Kf8AQLP/AIEy/wDxVH/CufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1b+ZfieM/ J7UfJ7V7N/wr
nwp/0Cz/AOBMv/xVH/CufCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9jVv5l+J4 z8ntR8ntXs3/
AArnwp/0Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+Zfie M/J7UfJ7V7N/
wrnwp/0Cz/4Ey/8AxVH/AArnwp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/mX4n jPye1Hye1ezf
8K58Kf8AQLP/AIEy/wDxVH/CufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1b+Zf ieM/J7UfJ7V7
N/wrnwp/0Cz/AOBMv/xVH/CufCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9jVv5 l+J4z8ntR8nt
Xs3/AArnwp/0Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/Y1b+ ZfieM/J7UfJ7
V7N/wrnwp/0Cz/4Ey/8AxVH/AArnwp/0Cz/4Ey//ABVH+s2F/ll+H+Yf2NW/ mX4njPye1Hye
1ezf8K58Kf8AQLP/AIEy/wDxVH/CufCn/QLP/gTL/wDFUf6zYX+WX4f5h/Y1 b+ZfieM/J7Uf
J7V7N/wrnwp/0Cz/AOBMv/xVH/CufCn/AECz/wCBMv8A8VR/rNhf5Zfh/mH9 jVv5l+J4z8nt
R8ntXs3/AArnwp/0Cz/4Ey//ABVH/CufCn/QLP8A4Ey//FUf6zYX+WX4f5h/ Y1b+ZfieM/J7
UYSvZv8AhXPhT/oFn/wJl/8AiqP+FceFP+gUf/AmX/4qn/rNhf5Zfh/mH9jV v5l+J4xhPWjC
etezf8K48J/9Ar/yZl/+Ko/4Vx4T/wCgV/5My/8AxVH+s2F/ll+H+Yf2NV/m X4njOE9aMJ61
7N/wrjwn/wBAr/yZl/8AiqP+FceE/wDoFf8AkzL/APFUf6zYX+WX4f5h/Y1X +ZfieM4T1own
rXs3/CuPCf8A0Cv/ACZl/wDiqP8AhXHhP/oFf+TMv/xVH+s2F/ll+H+Yf2NV /mX4njOE9aMJ
617N/wAK48J/9Ar/AMmZf/iqP+FceE/+gV/5My//ABVH+s2F/ll+H+Yf2NV/ mX4njOE9aMJ6
17N/wrjwn/0Cv/JmX/4qj/hXHhP/AKBX/kzL/wDFUf6zYX+WX4f5h/Y1X+Zf ieM4T1ownrXs
3/CuPCf/AECv/JmX/wCKo/4Vx4T/AOgV/wCTMv8A8VR/rNhf5Zfh/mH9jVf5 l+J4zhPWjCet
ezf8K48J/wDQK/8AJmX/AOKo/wCFceE/+gV/5My//FUf6zYX+WX4f5h/Y1X+ ZfieM4T1ownr
Xs3/AArjwn/0Cv8AyZl/+Ko/4Vx4T/6BX/kzL/8AFUf6zYX+WX4f5h/Y1X+Z fieM4T1ownrX
s3/CuPCf/QK/8mZf/iqP+FceE/8AoFf+TMv/AMVR/rNhf5Zfh/mH9jVf5l+J 4zhPWjCetezf
8K48J/8AQK/8mZf/AIqj/hXHhP8A6BX/AJMy/wDxVH+s2F/ll+H+Yf2NV/mX 4njOE9aMJ617
N/wrjwn/ANAr/wAmZf8A4qj/AIVx4T/6BX/kzL/8VR/rNhf5Zfh/mH9jVf5l +J4zhPWjCete
zf8ACuPCf/QK/wDJmX/4qj/hXHhP/oFf+TMv/wAVR/rNhf5Zfh/mH9jVf5l+ J4zhPWjCetez
f8K48J/9Ar/yZl/+Ko/4Vx4T/wCgV/5My/8AxVH+s2F/ll+H+Yf2NV/mX4nj OE9aMJ617N/w
rjwn/wBAr/yZl/8AiqP+FceE/wDoFf8AkzL/APFUf6zYX+WX4f5h/Y1X+Zfi eM4T1ownrXs3
/CuPCf8A0Cv/ACZl/wDiqP8AhXHhP/oFf+TMv/xVH+s2F/ll+H+Yf2NV/mX4 njOE9aMJ617N
/wAK48J/9Ar/AMmZf/iqP+FceE/+gV/5My//ABVH+s2F/ll+H+Yf2NV/mX4n jOE9aK9m/wCF
ceE/+gV/5My//FUUf6zYX+WX4f5h/Y1X+ZfidVRT9i/89U/I/wCFGxf+eqfk f8K+HsfRjKKf
sX/nqn5H/CjYv/PVPyP+FFgGUU/Yv/PVPyP+FGxf+eqfkf8ACiwDKKfsX/nq n5H/AAo2L/z1
T8j/AIUWAZRT9i/89U/I/wCFGxf+eqfkf8KLAMop+xf+eqfkf8KNi/8APVPy P+FFgGUU/Yv/
AD1T8j/hRsX/AJ6p+R/wosAyin7F/wCeqfkf8KNi/wDPVPyP+FFgGVFcXMFn A09zPHBCuN0k
rhVGTgZJ461ieJPFtjoASCLbf6lI4RLKBjvycfe4OOCMDGTkYHUjn7Hwhqni qeLVPF13siC7
oLCPKFAWyQwx8owB3LYIyQVxWUqmvLFXZ6WHy+9NV8TLkp9O8v8ACv1ehNe/ EJr26+weFtOk
1G5OP3roRGoyvOODjkgk7QDjqKrw+AtT15hd+LNXnkk2/Jb25GIyQvfG0HjB CjnAOTXd2Gl2
Ol2q21jFBbwj+FFIycAZJxknAHJ5NWti/wDPVPyP+FL2LlrUd/LoavM44f3c DDk/vPWT+ey9
EY2meGNF0dg9jp0EUgYsJCC7qSMHDNkgY7Z9fWtan7F/56p+R/wo2L/z1T8j /hWqikrI8urW
qVZc1STb7t3GUU/Yv/PVPyP+FGxf+eqfkf8ACnYgZRT9i/8APVPyP+FGxf8A nqn5H/CiwDKK
fsX/AJ6p+R/wo2L/AM9U/I/4UWA5/VfB2g6xva40+NJm3Hzof3b7m6sccMc8 /Nn9TXNN4Q8Q
eGJTceFdSae33bmsbkj5vu59FJODk/KQBgE16LsX/nqn5H/CjYv/AD1T8j/h WcqMZa7M9Chm
uJox5HLmh/LLVfc9vlY4bSfiJayTix162k0q+GA3mqQhJC4znlM5J54A/irt IpY5oklidZI3
UMjqchgehB7iquqaFpmtQCHUYILhR90sGDLyCdrDkZwM4PNcTLoGu+BpjdeH 5n1LSmdGmsWB
aUnGCRhfpyvPTIIXNTepT+LVfidHssHjf4H7up/K37r9Jbp+T08z0Kisbw34 m07xLZJLb3Ec
VztJltXb95GRjJxjleRhvfscgbmxf+eqfkf8K1i1JXR5dajUoTdOqrNDKKfs X/nqn5H/AAo2
L/z1T8j/AIU7GYyin7F/56p+R/wo2L/z1T8j/hRYBlFP2L/z1T8j/hRsX/nq n5H/AAosAyin
7F/56p+R/wAKNi/89U/I/wCFFgGUU/Yv/PVPyP8AhRsX/nqn5H/CiwDKKfsX /nqn5H/CjYv/
AD1T8j/hRYBlFP2L/wA9U/I/4UbF/wCeqfkf8KLAMop+xf8Anqn5H/CjYv8A z1T8j/hRYBlF
P2L/AM9U/I/4UbF/56p+R/wosAyin7F/56p+R/wo2L/z1T8j/hRYBlFP2L/z 1T8j/hRsX/nq
n5H/AAosAyin7F/56p+R/wAKNi/89U/I/wCFFgGUU/Yv/PVPyP8AhRsX/nqn 5H/CiwDKKfsX
/nqn5H/CjYv/AD1T8j/hRYBlFP2L/wA9U/I/4UbF/wCeqfkf8KLAMop+xf8A nqn5H/CjYv8A
z1T8j/hRYBlFP2L/AM9U/I/4UbF/56p+R/wosAyin7F/56p+R/wo2L/z1T8j /hRYBlFP2L/z
1T8j/hRsX/nqn5H/AAosAyin7F/56p+R/wAKNi/89U/I/wCFFgGUU/Yv/PVP yP8AhRsX/nqn
5H/CiwDKKfsX/nqn5H/CjYv/AD1T8j/hRYBlFP2L/wA9U/I/4UbF/wCeqfkf 8KLAMop+xf8A
nqn5H/CjYv8Az1T8j/hRYBlFP2L/AM9U/I/4UbF/56p+R/wosAyin7F/56p+ R/wo2L/z1T8j
/hRYBlFP2L/z1T8j/hRsX/nqn5H/AAosAyin7F/56p+R/wAKNi/89U/I/wCF FgGUU/Yv/PVP
yP8AhRsX/nqn5H/CiwDKKfsX/nqn5H/CjYv/AD1T8j/hRYBlFP2L/wA9U/I/ 4UbF/wCeqfkf
8KLAMop+xf8Anqn5H/CjYv8Az1T8j/hRYBlFP2L/AM9U/I/4UbF/56p+R/wo sAyin7F/56p+
R/wo2L/z1T8j/hRYBlFP2L/z1T8j/hRsX/nqn5H/AAosAyin7F/56p+R/wAK Ni/89U/I/wCF
FgGUU/Yv/PVPyP8AhRsX/nqn5H/CiwDKKfsX/nqn5H/CjYv/AD1T8j/hRYBl FP2L/wA9U/I/
4UbF/wCeqfkf8KLAMop+xf8Anqn5H/CjYv8Az1T8j/hRYBlFP2L/AM9U/I/4 UbF/56p+R/wo
sAyin7F/56p+R/wo2L/z1T8j/hRYBlFP2L/z1T8j/hRsX/nqn5H/AAosAyin 7F/56p+R/wAK
Ni/89U/I/wCFFgGUU/Yv/PVPyP8AhRsX/nqn5H/CiwDKKfsX/nqn5H/CjYv/ AD1T8j/hRYBl
FP2L/wA9U/I/4UbF/wCeqfkf8KLAMop+xf8Anqn5H/CjYv8Az1T8j/hRYBlF P2L/AM9U/I/4
UbF/56p+R/wosAyin7F/56p+R/wo2L/z1T8j/hRYBlFP2L/z1T8j/hRRYBlF Ryy+SASjsCcf
KM1IDkA4x7GgAopuXaQpGEyoBO9iOuenB9KVYJFV5GdC+7IRXJBXA9QMHOf8 9KUWxXFopFYO
gZTkEZBpkc3mOy+W67eCWAqRklFFFABRRRQAUUUUAFFFNlljhieWV1jjRSzu xwFA6knsKASv
oh1cFqvibVfEN/Po3hJFeNF2XGobsBMnGUbsOvIyTyVHGTBeatrPjuefTtDT 7Nom8RT3zjDO
MEsAMg4Ix8oGem4gMRXa6Po9noenR2NjHsiTkk8s7d2Y9yf/AKwwABWF3V0j ou/+R7MaVPLl
z10pVekXqo+cvPtH5syfDvgyx0KU3krte6mzOz3kuc/N1wMnB9+ScnnBxXS0 UVrGKirRPMxG
Jq4iftKsrv8Ar7l5IKKKKoxCiiigAooooAKKKKACiiigAooooAKKKKAOR8Qe BoNQuTqWkXDa
Zqu5nM0TMBISuOcH5Se5Hqcg5qLw/wCLL6PVBoXii3W01FlXyJeAs2R0JBI3 E55HBORwRg9n
WP4k8N2fiXTjbXI2SpkwzqMtE39Qe47+xAIxlTafNDf8z1aGPjVgsPjNY7KX 2o+ndd0+m1jY
orgtK8Tar4ev4NG8WoqRuuy31DdkPg4y7dx05OCOCw5yO9q4TU1ocmLwdTDS SlZp7Napryf9
WCiiirOUKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACii
igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACimSzRQ gGWVIweAXYCo
vt9n/wA/cH/fwUASvCkhywOemQxH8qhW2IkfcxMROQpYnPA4Oe1L9vs/+fuD /v4KPt9n/wA/
cH/fwU7sRYoqv9vs/wDn7g/7+Cj7fZ/8/cH/AH8FIZYoqv8Ab7P/AJ+4P+/g o+32f/P3B/38
FAFiiq/2+z/5+4P+/go+32f/AD9wf9/BQBYoqv8Ab7P/AJ+4P+/go+32f/P3 B/38FAE0sscM
TyyuscaKWd2OAoHUk9hXntxcXnxF1FrKyeS28OW7jz58Ya4Yc4GfzAPThjzt Wm+INbfxhft4
c0ieGPT1YG8vpCNpAOcL6jI4x94jsoJPaad/Zml6db2NtcwLDAgRf3ign1Jx gZJ5J7kmsH+9
dl8P5ntQistpqpJfvnsn9hfzNfzPontuW7KyttOs4rS0hWG3iXaiL0A/qe+e 9T1X+32f/P3B
/wB/BR9vs/8An7g/7+Ct0rHjSk5Nyk7tliiq/wBvs/8An7g/7+Cj7fZ/8/cH /fwUCLFFV/t9
n/z9wf8AfwUfb7P/AJ+4P+/goAsUVX+32f8Az9wf9/BR9vs/+fuD/v4KALFF V/t9n/z9wf8A
fwUfb7P/AJ+4P+/goAsUVX+32f8Az9wf9/BR9vs/+fuD/v4KALFFV/t9n/z9 wf8AfwUfb7P/
AJ+4P+/goAsUVX+32f8Az9wf9/BR9vs/+fuD/v4KALFFV/t9n/z9wf8AfwUf b7P/AJ+4P+/g
oAsUVX+32f8Az9wf9/BR9vs/+fuD/v4KAINY0ez1zTpLG+j3xPyCOGRuzKex H/1jkEiuP0fW
LzwbqMfh7xDJvsH4sb88KF/ut6AcD/Z91II7f7fZ/wDP3B/38FZfiCz0zxDo 02nz3sCb8NHK
GVjG46EZ/I9MgkZGaynBv3o7no4LFwivq+I1pS++L/mXmuvdaG5RXB+FPE76 bcL4Z114Y57d
Qlrcqw8uZAMKM9M46Hv0OGHPafb7P/n7g/7+CqhNTV0YYvCTwtTklqnqmtmu jRYoqv8Ab7P/
AJ+4P+/go+32f/P3B/38FWcpYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/ AG+z/wCfuD/v
4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCf uD/v4KPt9n/z
9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt 9n/z9wf9/BQB
Yoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9 /BQBYoqv9vs/
+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv 9vs/+fuD/v4K
Pt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD /v4KPt9n/wA/
cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n /wA/cH/fwUAW
KKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/f wUAWKKr/AG+z
/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/ AG+z/wCfuD/v
4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCf uD/v4KPt9n/z
9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt 9n/z9wf9/BQB
Yoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9 /BQBYoqv9vs/
+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv 9vs/+fuD/v4K
Pt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD /v4KPt9n/wA/
cH/fwUAWKKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n /wA/cH/fwUAW
KKr/AG+z/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/f wUAWKKr/AG+z
/wCfuD/v4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/ AG+z/wCfuD/v
4KPt9n/z9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCf uD/v4KPt9n/z
9wf9/BQBYoqv9vs/+fuD/v4KPt9n/wA/cH/fwUAWKKr/AG+z/wCfuD/v4KPt 9n/z9wf9/B/j
QBYoqv8Ab7P/AJ+4P+/g/wAaPt9l/wA/cH/fwf40AWKKr/b7L/n7g/7+D/Gj 7fZf8/cH/fwf
40AWKKr/AG+y/wCfuD/v4v8AjS/b7L/n8g/7+L/jQBPRUH2+y/5/If8Av4v+ NH2+x/5/If8A
v4v+NAE9FQfb7H/n8h/77X/Gj7fY/wDP5D/32v8AjQBPRUH2+x/5/If++1/x ooAl0u2V2d5D
+/AAd16knsD/AHeOn9a0GtmDJsdiN3z7m7Y7ceuKj0ohtPRgB8zMT7/MRV2u uT5XZGS1V2R+
Snof++jR5Keh/wC+jUlFTdjsR+Snof8Avo1SeK68xtiHbk4+YdPzrRopqTQN XMRrp0cqzEMp
wRmnJNNIMosjDplQTWzRWntV2J5H3MwR3hAIRufVgKsW8EhBM5YHPC7qt0VD m2NRI/JT0P8A
30a858VeJtQudWk8M+HS321iRcXOSBbp3wexwRk9s4GWPHReO/E6eGfD0zxy lL+5Vo7QLjIb
GN/II+XIPIwTgd6zfA3hEW1pJrmqyfaNT1QefJ8uwRh/mxwAcknJ6DOBjjJ5 5TcpeyT9fT/N
nrYSjGhReNqxv0gns5d33jHr3dl3J/Dml2/hrSFsLWR3yxklkY43uQATjsOA Me3c8m++sRR3
It2kcSYUk7G2jcSFy2MDJBAyeTWndafaxWk0ixYZI2YHceoH1rklv7ZNSYTO gAhxLAcM10rb
gIwp4ODkkn7v0ZiO2KgqfuLRHk1atSrVc6rvJ6tml9qsZrxoowyTkM3mRqyB sEBjuA2uQSM9
cHr3qzHdNGwSYhkJwsvf2DDt9Rx9M4rEa/tn1JRC6EGHEUAwrWqrtBjKjgZO CCPvfRVJnNyC
CDgg8EHvVLDqrG+zM3U5HY6Cisqx1AKRDK3yHhGJ6ex/ofwPvq1wThKEuWRv GSkroKKKKgoK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDn/ABX4aXxFZxNDO1tq FqxktZwxAVuO
DjscDkcjAI7g1vCfiW51GWfR9XgaDWbNf3o24EijA3jHAPI9jkEcHA6muH8c 6NNbSweKtKVU
vrBg84VWzMgwOdp6AZB9VJyeAKxqJxftI/M9bA1I4mH1Ks9/gf8ALJ9PSXXz 1O4orO0PWbbX
tJgv7Zlw6jzEDZMb45Q8DkfTng9DWjWqaaujzKlOVObhNWa0YUUUUyAooooA KKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKAINK1ixt9Niimn2yAtkbGPViewqzL4i06NQVkeU5xhEO f1xWRp9tFJYx
s0SMTnkqD3NX10kMoYWsWCMjha9OcaSm73OWLnyqxm3PiS9lfMG2BB2ADE/U kf4VB/b+p/8A
Pz/5DX/CteTTFiXc9tEBnH3RUf2OD/nhH/3wK0VSilpElwqfzGZ/b+p/8/P/ AJDX/Cmx63qU
SBFumIH95Qx/MjNav2OD/nhH/wB8Cj7HB/zwi/74FP2tL+UXs5/zGfF4i1GN iWkSUYxh0GP0
xU3/AAlF7/zyt/8Avlv8atfY4P8AnhH/AN8CnLYRvnbbI2PSMGk6lF/ZHyVO 5lt4g1JmJE4U
E5wEXA/MVHN4kv7eCSaW72xxqXY+WpwAMntWw2nxqMtaoB7xiuC8ViTX/EMH hPTkSILia7nC
N8gxnBA4xgqfQsVGRis62JpU4XUE309TswGBniq3JKdorWT7RW7/AK6lC0nv /GOsjWdUlla0
tXxYxEBF69cDvwMnueM4XFeqWet6dFY28b3GHSJVYbG4IH0rPtdJsrK1jtre 0ijhjXaqhRwP
r3Pv3qb7HB/zwj/74FZUoU40+WW+7fd/5djTH4qWIrc0NILSK7L/ADe7fVlb VPEElwZILXCw
EbSxHLjoevQfrWHXS/Y4P+eEf/fAo+xwf88I/wDvgV1wrwgrRR50qcpO7ZzV FdL9jg/54R/9
8Cj7HB/zwj/74FX9aj2J9g+5zVXrXVZ7ZdpAlTsHY5H481r/AGOD/nhH/wB8 Cj7HB/zwj/74
FZValKqrSiXCE4bMij1u0dfn8yM+jIT/ACzT/wC2LH/ns3/ftv8ACnfY4P8A nhH/AN8Cj7HB
/wA8I/8AvgVyOjT6Nm3PMb/bFj/z2b/v23+FH9sWP/PZv+/bf4U77HB/zwj/ AO+BR9jg/wCe
Ef8A3wKXsafdhzyG/wBsWP8Az2b/AL9t/hR/bFj/AM9m/wC/bf4U77HB/wA8 I/8AvgUfY4P+
eEf/AHwKPY0+7DnkN/tix/57N/37b/Cj+2LH/ns3/ftv8Kd9jg/54R/98Cj7 HB/zwj/74FHs
afdhzyG/2xY/89m/79t/hR/bFj/z2b/v23+FO+xwf88I/wDvgUfY4P8AnhH/ AN8Cj2NPuw55
Df7Ysf8Ans3/AH7b/Cj+2LH/AJ7N/wB+2/wp32OD/nhH/wB8Cj7HB/zwj/74 FHsafdhzyG/2
xY/89m/79t/hR/bFj/z2b/v23+FO+xwf88I/++BR9jg/54R/98Cj2NPuw55D f7Ysf+ezf9+2
/wAKP7Ysf+ezf9+2/wAKd9jg/wCeEf8A3wKPscH/ADwj/wC+BR7Gn3Yc8hv9 sWP/AD2b/v23
+FH9sWP/AD2b/v23+FO+xwf88I/++BR9jg/54R/98Cj2NPuw55Df7Ysf+ezf 9+2/wo/tix/5
7N/37b/CnfY4P+eEf/fAo+xwf88I/wDvgUexp92HPI88hvYvAvidRbTTt4bv TmRWjLCBznpn
njA56lePmK5r0H+2LH/ns3/ftv8ACqeseH7PWNLnspYYl3qdkmzmN+zDGOn1 56d65rwPcukt
34a1KCP7bp2djlSTJHnryOgyuDxlWGBxXNGlClU5Hfle3r2/yParylj8L9ZX 8WGk/OPSXqtp
fJnY/wBsWP8Az2b/AL9t/hR/bFj/AM9m/wC/bf4U77HB/wA8I/8AvgUfY4P+ eEf/AHwK6fY0
+7PF55Df7Ysf+ezf9+2/wo/tix/57N/37b/CnfY4P+eEf/fAo+xwf88I/wDv gUexp92HPIb/
AGxY/wDPZv8Av23+FH9sWP8Az2b/AL9t/hTvscH/ADwj/wC+BR9jg/54R/8A fAo9jT7sOeQ3
+2LH/ns3/ftv8KP7Ysf+ezf9+2/wp/2OD/nhH/3wKX7HB/zwi/74FHsafdhz yI/7Ysf+ezf9
+2/wo/tix/57N/37b/CpPsUH/PCL/vgUosrf/nhF/wB8Cj2NPuw5pEX9sWP/ AD2b/v23+FH9
sWP/AD2b/v23+FT/AGK3/wCfeL/vgUv2K3/594v++BR7Gn3Y+aRX/tix/wCe zf8Aftv8KP7Y
sf8Ans3/AH7b/CrP2K3/AOfeL/vgUv2K2/59ov8AvgUexp92HNIq/wBsWP8A z2b/AL9t/hR/
bFj/AM9m/wC/bf4Vb+w23/PtD/3wKX7Dbf8APtD/AN8Cl7Kn3Yc0in/bFj/z 2b/v23+FH9sW
P/PZv+/bf4Vd+w23/PtD/wB+xS/YbX/n2h/79ij2VPuw5pFH+2LH/ns3/ftv 8KP7Ysf+ezf9
+2/wq/8AYbX/AJ9Yf+/YpfsFr/z6w/8AfsUeyp92HNIz/wC2LH/ns3/ftv8A Cj+2LH/ns3/f
tv8ACtH7Ba/8+sH/AH7FL9gtP+fWD/v2KPZU/MOaRm/2xY/89m/79t/hR/bF j/z2b/v23+Fa
f2C0/wCfWD/v2KcLC0/59IP+/Ypezp+Yc0jK/tix/wCezf8Aftv8KP7Ysf8A ns3/AH7b/CtX
7BZ/8+kH/fsU7+z7P/n0g/79j/Cj2dPzDmkZH9sWP/PZv+/bf4Uf2xY/89m/ 79t/hWx/Z9n/
AM+kH/fsf4Uv9n2X/Ppb/wDfsf4Uezp+YXkY39sWP/PZv+/bf4Uf2xY/89m/ 79t/hW1/Z9l/
z52//fpf8KP7Psv+fO3/AO/S/wCFHs6fmO8jF/tix/57N/37b/Cj+2LH/ns3 /ftv8K2/7Psv
+fO3/wC/S/4Uv9nWX/Pnb/8Afpf8KXJT8wvIw/7Ysf8Ans3/AH7b/Cj+2LH/ AJ7N/wB+2/wr
c/s6y/587f8A79L/AIUf2dZf8+dv/wB+l/wo5KfmF5GH/bFj/wA9m/79t/hR /bFj/wA9m/79
t/hW5/Z1l/z52/8A36X/AAo/s6y/587f/v0v+FHJT8wvIw/7Ysf+ezf9+2/w o/tix/57N/37
b/Ctz+zrL/nzt/8Av0v+FH9nWX/Pnb/9+l/wo5KfmF5GH/bFj/z2b/v23+FH 9sWP/PZv+/bf
4Vuf2dZf8+dv/wB+l/wo/s6y/wCfO3/79L/hRyU/MLyMP+2LH/ns3/ftv8KP 7Ysf+ezf9+2/
wrc/s6y/587f/v0v+FH9nWX/AD52/wD36X/Cjkp+YXkYf9sWP/PZv+/bf4Uf 2xY/89m/79t/
hW5/Z1l/z52//fpf8KP7Osv+fO3/AO/S/wCFHJT8wvIw/wC2LH/ns3/ftv8A Cj+2LH/ns3/f
tv8ACtz+zrL/AJ87f/v0v+FH9nWX/Pnb/wDfpf8ACjkp+YXkYf8AbFj/AM9m /wC/bf4Uf2xY
/wDPZv8Av23+Fbn9nWX/AD52/wD36X/Cj+zrL/nzt/8Av0v+FHJT8wvIw/7Y sf8Ans3/AH7b
/Cj+2LH/AJ7N/wB+2/wrc/s6y/587f8A79L/AIUf2dZf8+dv/wB+l/wo5Kfm F5GH/bFj/wA9
m/79t/hR/bFj/wA9m/79t/hW5/Z1l/z52/8A36X/AAo/s6y/587f/v0v+FHJ T8wvIw/7Ysf+
ezf9+2/wo/tix/57N/37b/Ctz+zrL/nzt/8Av0v+FH9nWX/Pnb/9+l/wo5Kf mF5GH/bFj/z2
b/v23+FH9sWP/PZv+/bf4Vuf2dZf8+dv/wB+l/wo/s6y/wCfO3/79L/hRyU/ MLyMP+2LH/ns
3/ftv8KP7Ysf+ezf9+2/wrc/s6y/587f/v0v+FH9nWX/AD52/wD36X/Cjkp+ YXkYf9sWP/PZ
v+/bf4Uf2xY/89m/79t/hW5/Z1l/z52//fpf8KP7Osv+fO3/AO/S/wCFHJT8 wvIw/wC2LH/n
s3/ftv8ACj+2LH/ns3/ftv8ACtz+zrL/AJ87f/v0v+FH9nWX/Pnb/wDfpf8A Cjkp+YXkYf8A
bFj/AM9m/wC/bf4Uf2xY/wDPZv8Av23+Fbn9nWX/AD52/wD36X/Cj+zrL/nz t/8Av0v+FHJT
8wvIw/7Ysf8Ans3/AH7b/Cj+2LH/AJ7N/wB+2/wrc/s6y/587f8A79L/AIUf 2dZf8+dv/wB+
l/wo5KfmF5GH/bFj/wA9m/79t/hR/bFj/wA9m/79t/hW5/Z1l/z52/8A36X/ AAo/s6y/587f
/v0v+FHJT8wvIw/7Ysf+ezf9+2/wo/tix/57N/37b/Ctz+zrL/nzt/8Av0v+ FH9nWX/Pnb/9
+l/wo5KfmF5GH/bFj/z2b/v23+FH9sWP/PZv+/bf4Vuf2dZf8+dv/wB+l/wo /s6y/wCfO3/7
9L/hRyU/MLyMP+2LH/ns3/ftv8KP7Ysf+ezf9+2/wrc/s6y/587f/v0v+FH9 nWX/AD52/wD3
6X/Cjkp+YXkYf9sWP/PZv+/bf4Uf2xY/89m/79t/hW5/Z1l/z52//fpf8KP7 Osv+fO3/AO/S
/wCFHJT8wvIw/wC2LH/ns3/ftv8ACj+2LH/ns3/ftv8ACtz+zrL/AJ87f/v0 v+FH9nWX/Pnb
/wDfpf8ACjkp+YXkYf8AbFj/AM9m/wC/bf4Uf2xY/wDPZv8Av23+Fbn9nWX/ AD52/wD36X/C
j+zrL/nzt/8Av0v+FHJT8wvIw/7Ysf8Ans3/AH7b/Cj+2LH/AJ7N/wB+2/wr c/s6y/587f8A
79L/AIUf2dZf8+dv/wB+l/wo5KfmF5GH/bFj/wA9m/79t/hR/bFj/wA9m/79 t/hW5/Z1l/z5
2/8A36X/AAo/s6y/587f/v0v+FHJT8wvIw/7Ysf+ezf9+2/wo/tix/57N/37 b/Ctz+zrL/nz
t/8Av0v+FH9nWX/Pnb/9+l/wo5KfmF5GH/bFj/z2b/v23+FH9sWP/PZv+/bf 4Vuf2dZf8+dv
/wB+l/wo/s6y/wCfO3/79L/hRyU/MLyMP+2LH/ns3/ftv8KP7Ysf+ezf9+2/ wrc/s6y/587f
/v0v+FH9nWX/AD52/wD36X/Cjkp+YXkYf9sWP/PZv+/bf4Uf2xY/89m/79t/ hW5/Z1l/z52/
/fpf8KP7Osv+fO3/AO/S/wCFHJT8wvIw/wC2LH/ns3/ftv8ACj+2LH/ns3/f tv8ACtz+zrL/
AJ87f/v0v+FH9nWX/Pnb/wDfpf8ACjkp+YXkYf8AbFj/AM9m/wC/bf4UVuf2 dZf8+dv/AN+l
/wAKKOSn5heRneH4wbCFiM4DEf8AfRrarK0AY0iA/wC9/wChGtWtK38R+pNP 4UI6h0Kt0NQr
aRKc4J9jU9FRcsZ5MX/PNP8AvkUeTF/zzT/vkU+ilcCCS1jZTtUBj3zUkMQi jCj6n60+indg
YPjHWo9A8N3F+5UyL8sKN/HIchRjIyO5xzgGuf8Ah34ZeHT5Ne1El7/VR57N tUbUYlhjH97I
Y9P4RgYrNud/jn4nfYiJf7G0Y/6RG5JjklRiOVIK5LHbg9VVsHtXqFc8f3lT n6LRevV/oexi
L4LCLDfbqWlLyj9mP6v5Fb7FF6t+dKLOIHJ3H2JqxRXRdnj2IfssP9z9TR9l h/ufqamoyKLs
CH7LD/c/U0fZYf7n6mpsijIouwIfssP9z9TTxDEBjy1/Kn5HrRRdgM8mL/nm n/fIo8mL/nmn
/fIp9FK4DPJi/wCeaf8AfIo8mL/nmn/fIp9FFwGeTF/zzT/vkUhgiIwY1/AY qSii4FWa1QIP
LTnPbJqv5XtWlURTLE+9UpCsUvK9qPK9qubKNlPmCxT8n2o8n2q5so2UcwWK fk+1Hk+1XNlG
yjmCxT8r2o8n2q5so2UcwWKfle1Hk+1XNlGyjmCxT8r2o8n2q5so2UcwWKfl e1cB4+0ufSLu
38YaZtW6tWVJ0ZF2spyoY9CTyEPU4IxjbmvS9lRXVlDe2k1rcJvhmjaORckZ UjBGRz0NZVY+
0hbr09TswGKeFrqpa62a7xe6+aM3Tbu31bTbe/tW3QzoHXkEj1BwSMg5BHYg 1b8r2rhfB0tx
4Y8YXvg68lle1fM2nM+T8vLYHyjquSeihkbHJr0bZRRq88bvfr6jzDCLDVuW LvF6xfeL2/yf
min5PtR5PtVzZRsrXmOKxT8n2o8r2q5so2UcwWKnle1HlVb8ujZRzBYq+VR5 ftVrZS7KLhYq
+XS+XVnZRspXCxX8ujy6sbKXbRcCv5dLsqfbRtouBDso2VNtpdtFwIdlLsqX bRtpXAj20bak
xS4ouBHtpcU/FGKLjG4oxTsUuKAG4paXFGKQCYpaMUtACUtFFABRRRQAUUUU AFFVL7VdO0zy
/t9/a2nmZ2efMse7GM4yecZH51zt18S/Cdr56/2n50kW4bIYXbeR2VsbTnsc 498VEqkI/E7H
TRweIr60qbl6Js62ivOT8WY76ZYdC8O6jqMoUtIh+VlAwAQED5HPtjj1oj8Q /Em9U3Fr4Xs4
7d2by0uDtkUZIAYNIpz77Rnrjms/rMH8N36Jnb/YuKir1eWH+KUV+tz0aivO Y7D4pXim4bVt
OsTIzH7MyITGMnAyI249PmJx15oi+HviYwoZvHmopKVG9UMjKD3AJkGR74H0 o9tJ/DB/gg/s
6hD+LiYL05pfkj0asuXxJoUEzwza1p0csbFXR7pAykcEEE8GuNi+DWhCFBNf 6i8oUb2R0VSe
5AKnA9sn61qWvwt8J29ukUljLcuucyy3Dhm577SB7cDtRzVn9lL5/wDAD2GW Q3rSl6QS/ORp
3vjfwxYQiWbW7NlLbcQSec2fomTjjr0qj/wszwh/0F//ACWl/wDiKmtfh34T tLhJ49GiZ1zg
SyPIvIxyrMQfxFaP/CLeHv8AoA6X/wCAcf8AhR+/8vxC+VLpUf8A4Cvws/zO Xuvi94at7h4o
47+5RcYlihUK3HbcwPtyO1Rf8Lk8Pf8APnqn/fqP/wCLru7PT7LToTDY2kFr EzbikEYRSemc
AdeB+VWKOSt/Mvu/4IPEZatFQk/Wf/2p55/wuTw9/wA+eqf9+o//AIuj/hcn h7/nz1T/AL9R
/wDxdeh0Uclb+f8AD/gi+s5d/wBA7/8AA/8A7U88/wCFyeHv+fPVP+/Uf/xd H/C5PD3/AD56
p/36j/8Ai69Doo5K38/4f8EPrOXf9A7/APA//tTzz/hcnh7/AJ89U/79R/8A xdH/AAuTw9/z
56p/36j/APi69Doo5K38/wCH/BD6zl3/AEDv/wAD/wDtThLP4t+GLqYpMbyz ULnzJ4cqT6fI
WOfwxxV7/hZnhD/oL/8AktL/APEV0V9pWnan5f2+wtbvy87PPhWTbnGcZHGc D8qqf8It4e/6
AOl/+Acf+FFq66r7v+CP2mVy1dOa8lJNfjEhtfGXhq7t0nj1ywVGzgSzrG3B xyrYI/EVbtdf
0a9uEt7TV7Ced87Y4rlHZsDJwAc9ATWNL8N/CM0zyto6hnYsQk0irk+gDAAe w4qpe/CrwrdQ
hIbWezYNnzIJ2LEenz7hj8M8UXrrovxDkyqTspzXqou33PU7WivOZPg9pUSi TTtV1G2vEZWi
mZlYIQQc4AU59MEYPNEngPxZbKJ7LxzeTXMbKyR3BkEbEEfe+duPYqQelHtK q3h+KBYLAy+D
E/fGS/K6PRqK85e2+KWnNHcC907VAGwbZVRQQQeSSqcDjo2c47ZofxP8Q9Oa OfUfCkE9sW2t
HZktITg4+674HHUrjt3FH1hLeLXyD+yJy/h1YS9JJP0s7Ho1Fecp8XbK1aSD WdD1GxvEbmBQ
GIBAIJ3bCDz0x0xzzW/a/ETwnd3CQR6zErtnBljeNeBnlmUAfiaccRSltIyq 5RjqSvKk7d0r
r71dHT0VXs9QstRhM1jdwXUSttLwSB1B64yD15H51YrZO+x58ouLtJWYUUUU CCiiigAooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAzdAH/Elt
/wDgX/oRrSrC0f8A5BUP/Av/AEI1cd9vAUsxBIUYzgdTzWlX+JL1ZEPhRo0Y rK+0N/zxb/v5
H/8AFUfaG/54t/38j/8AiqnlZV0auKKyvtDf88W/7+R//FUfaG/54t/38j/+ Ko5WF0atcj8R
vEI0DwtKInAvbs+Tb4PzL/eccgjaOhHRitbP2hv+eLf9/I//AIqvPLmeXxb8 S7eONJBp+hNv
cgqMyhhnkjHLBRjPIRiDWFfmUeWO70R6eVUoTrurVXuU1zP5bL5uyO08EeGY /DPh2CBolW+m
USXbgfMXPO0nJyFzt4OOp7mukrK+0N/zxb/v5H/8VR9ob/ni3/fyP/4qtYUu SKiuhxYjETxF
WVWo7uTuzVorK+0N/wA8W/7+R/8AxVH2hv8Ani3/AH8j/wDiqrlZjdGrRisr 7Q3/ADxb/v5H
/wDFUfaG/wCeLf8AfyP/AOKo5WF0auKMVlfaG/54t/38j/8AiqPtDf8APFv+ /kf/AMVRysLo
1cUYrK+0N/zxb/v5H/8AFUfaG/54t/38j/8AiqOVhdGrRWV9ob/ni3/fyP8A +Ko+0N/zxb/v
5H/8VRysLo1aKyvtDf8APFv+/kf/AMVR9ob/AJ4t/wB/I/8A4qjlYXRq4oxW V9ob/ni3/fyP
/wCKo+0N/wA8W/7+R/8AxVHKwujVxRisr7Q3/PFv+/kf/wAVR9ob/ni3/fyP /wCKo5WF0auK
MVlfaG/54t/38j/+Ko+0N/zxb/v5H/8AFUcrC6NXFGKyvtDf88W/7+R//FUf aG/54t/38j/+
Ko5WF0auKMVlfaG/54t/38j/APiqPtDf88W/7+R//FUcrC6NXFGKyvtDf88W /wC/kf8A8VR9
ob/ni3/fyP8A+Ko5WF0auKMVlfaG/wCeLf8AfyP/AOKo+0N/zxb/AL+R/wDx VHKwujVxRisr
7Q3/ADxb/v5H/wDFUfaG/wCeLf8AfyP/AOKo5WF0auKMVlfaG/54t/38j/8A iqPtDf8APFv+
/kf/AMVRysLo5z4l+Hv7Q0M6xZr5ep6biZJkO1zGvLDdkYx98dSNpA+9W94V 12LxJ4dtdRUq
JWXbOi4+SQcMMZOB3GTnBB71L9ob/ni3/fyP/wCKrzzwdPL4W8Vah4WnSQwT sZ7Mkrk8Z64A
OVHJzgFCB1rmlF06ql0lp8+h7NGX1vATpPWVL3l/hfxL5aP7z1jFGKyvtDf8 8W/7+R//ABVH
2hv+eLf9/I//AIqunlZ410auKMVlfaG/54t/38j/APiqPtDf88W/7+R//FUc rC6NXFGKyvtD
f88W/wC/kf8A8VQJmJx5D/g6H9A2aOVhdGrijFZ4IZQykEEZBHelqRl/FGKo U1m244JJOFUd
SfSgDRxRisr7Q3/PFv8Av5H/APFUfaG/54t/38j/APiqrlYro1aKyvtDf88W /wC/kf8A8VR9
ob/ni3/fyP8A+Ko5WF0atFZX2hv+eLf9/I//AIqj7Q3/ADxb/v5H/wDFUcrC 6NWisr7Q3/PF
v+/kf/xVH2hv+eLf9/I//iqOVhdGrRWV9ob/AJ4t/wB/I/8A4qj7Q3/PFv8A v5H/APFUcrC6
NWisr7Q3/PFv+/kf/wAVR9ob/ni3/fyP/wCKo5WF0atFZX2hv+eLf9/I/wD4 qj7Q3/PFv+/k
f/xVHKwujVorK+0N/wA8W/7+R/8AxVH2hv8Ani3/AH8j/wDiqOVhdGrRWV9o b/ni3/fyP/4q
sHVfHOh6OSl1chpRuHlQMkrBl6qdrHae3zY/Q1MmoK8nY1o0aleXJSi5PyTZ 2dFeWN8RtT1Q
snh3w5cTqzrHHcz52BuMhwvA6/3+OCfSoZNA8b+Id39s6uthbOrj7PauhwGO NjBWUMuPVmP5
msFX5v4ab/Bfez0/7InS1xdSNNebvL/wGN399j0PU/FGhaN5ov8AVbWGSLG+ LzA0gzjHyDLd
wenTnpXK33xb0dJmttKs7zUrlmVYQibElJxwCfmzzj7vJH41Hp/w88OWG1n0 +e7kV96vc3CH
04KqwUjjoQetdPaQWunxGKy06K2jLbikPlICemcBuvA/KnyYiXVL8Re0yujt GVR+fur8Lv8A
H/M5M698Rdd3jTNBi0q3eRUEt0MSRdMk78bh15CHjIGSKG8B+LdWSdtY8ZSx vNlHhtg7RMm0
DlQUAzzkbffnJrtPtDf88W/7+R//ABVH2hv+eLf9/I//AIqj6rf4238/8g/t mVP/AHenGHpG
7++VzmbP4SeGLWYvMLy8Urjy55sKD6/IFOfxxzW/a+DfDVpbpBHodgyLnBlg WRuTnlmyT+Jq
f7Q3/PFv+/kf/wAVR9ob/ni3/fyP/wCKq44aEdoo5q2aYyt/Eqyfzf5GrRWV 9ob/AJ4t/wB/
I/8A4qj7Q3/PFv8Av5H/APFVrys4bo1aKyvtDf8APFv+/kf/AMVR9ob/AJ4t /wB/I/8A4qjl
YXRq0VlfaG/54t/38j/+Ko+0N/zxb/v5H/8AFUcrC6NWisr7Q3/PFv8Av5H/ APFUfaG/54t/
38j/APiqOVhdGrRWV9ob/ni3/fyP/wCKo+0N/wA8W/7+R/8AxVHKwujVorK+ 0N/zxb/v5H/8
VR9ob/ni3/fyP/4qjlYXRq0VlfaG/wCeLf8AfyP/AOKo+0N/zxb/AL+R/wDx VHKwujVorK+0
N/zxb/v5H/8AFUfaG/54t/38j/8AiqOVhdGrRWV9ob/ni3/fyP8A+Ko+0N/z xb/v5H/8VRys
Lo1aKyvtDf8APFv+/kf/AMVR9ob/AJ4t/wB/I/8A4qjlYXRq0VlfaG/54t/3 8j/+Ko+0N/zx
b/v5H/8AFUcrC6NWisr7Q3/PFv8Av5H/APFUfaG/54t/38j/APiqOVhdGlLF HPC8M0ayRSKV
dHGVYHggg9RWHe+CPDF/CIptEs1UNuzBH5LZ+qYOOenSrX2hv+eLf9/I/wD4 qj7Q3/PFv+/k
f/xVTKkpbpM1pYmrSd6cnH0bRyl/8IPD1y0z2s15Zsy/u0WQPGhxgHDAsRnk jd+IqE+DvG+m
zLLpXjJrlmUrIL7dtUcYwG8wE+/BH4mux+0N/wA8W/7+R/8AxVH2hv8Ani3/ AH8j/wDiqyeE
hulb0dj0I55jLctSXOu0kpfmr/icXH4p8f6R5S6v4V+3I0e0NacuWGPmYoXA zzxtGc8dMVb0
34ueHbvat4t1Yv5YZmkj3pu4yoKZJ78lR07dK6n7Q3/PFv8Av5H/APFVUvLS y1HZ9u0uC68v
OzzxC+3PXGTx0H5UvYVo/DL77FfXsDV/jULPvBtfg7ov6br2kavtGn6la3Lt GJPLjlBcLxyV
6jqOo4zWjXmmo/DXQLuLFpbXNjIFbDR3COCT0LB3OQPQEdTz6VE07x/oU3+g ahFq1tvz5d3K
m5srgk7myAD2D++OTRzVYfHH7tfw3D6ngq/+717PtNcv/kyuvyPVqK8si+J0 1j5S6/4evbPc
nEiA/vHGM4VwuBz/AHjjjr1rp9L8XaPrRC2FykkhYqI3dI3YgZOFYgkY7gY6 +lVCtCbsnr93
5mGIyzF4ePPOD5e61X3q6OsorK+0N/zxb/v5H/8AFUfaG/54t/38j/8Aiq25 WefdGrRWV9ob
/ni3/fyP/wCKo+0N/wA8W/7+R/8AxVHKwujVorK+0N/zxb/v5H/8VR9ob/ni 3/fyP/4qjlYX
Rq0VlfaG/wCeLf8AfyP/AOKo+0N/zxb/AL+R/wDxVHKwujVorK+0N/zxb/v5 H/8AFUfaG/54
t/38j/8AiqOVhdGrRWV9ob/ni3/fyP8A+Ko+0N/zxb/v5H/8VRysLo1aKyvt Df8APFv+/kf/
AMVR9ob/AJ4t/wB/I/8A4qjlYXRq0VlfaG/54t/38j/+Ko+0N/zxb/v5H/8A FUcrC6NWisr7
Q3/PFv8Av5H/APFUfaG/54t/38j/APiqOVhdGrRWV9ob/ni3/fyP/wCKo+0N /wA8W/7+R/8A
xVHKwujVorK+0N/zxb/v5H/8VR9ob/ni3/fyP/4qjlYXRq0VlfaG/wCeLf8A fyP/AOKoo5WF
0V9H/wCQVD/wL/0I1aMRmnCLjJibr/vLVXR/+QVD/wAC/wDQjV+NhHPvIOAh 6fUVdR2qS9WT
H4EJ/Zv/AE1/8d/+vR/Zv/TX/wAd/wDr046iBdpD9lnMbDJn+TYvsRu3fkD1 q35sf99fzqW5
IdkUG01wfldSPfip47CJUAkG5u5yasggjIII9RS0uZjsjjvHesQeGtCaeFlS 7mDR265yS3Hz
YIP3c5546DuKzfBHh260XQrMCwZ5r79/cTbkAjBGVU5w3Axxg4JbmsXxtdN4 y8XW2j6ZbtI2
lLK80mY2DE7eArMAQCFByc8njjn03Sm+zaPZQXBQTRW8aSBFwoYKAcADAGfS safvzdTe2i/V
/oetif8AZcFDDLSVT35em0V+cu+ov9m/9Nf/AB3/AOvR/Zv/AE1/8d/+vVwS xkZ3r+dIZ4lO
C4/DmtuZnk2RU/s3/pr/AOO//Xo/s3/pr/47/wDXq19pi/v/AKGj7TF/f/Q0 c0gsir/Zv/TX
/wAd/wDr0f2b/wBNf/Hf/r1a+0xf3/0NKLiInAf8xijmkFkUm01wfldSPfim Np8+V2mMjPzZ
YjA9uOa0vNj/AL6/nR5sf99fzo5mFkZ/9nS/3k/M/wCFH9nS/wB5PzP+FaHm x/31/OnUczCy
M3+zpf7yfmf8KP7Ol/vJ+Z/wrRJAGSQB6mk82P8Avr+dHMwsjJltZIeWAxnG Qai21pXbo8YV
WBOc8VT21SkS0Q7aNtTbaNtO4WIdtG2pttG2i4WIdtG2pttG2i4WIdtG2ptt G2i4WIdtG2pt
tG2i4WIdtG2pttG2i4WIdtG2pttG2i4WIdtG2pttG2i4WIdtG2pttG2i4WId tcZ8QtIlext9
csRi901xJuVQSUznOMHO04PPAG6u5202SCOaJ4pUV43UqyMMhgeoI7is6sFU g4s6sDiZYTER
rR1tuu66r5ozdG1KLWtHtdRhGFnTcV5O1ujLkgZwQRnvir22uD8BynQtb1Tw ndsokSUzQPwD
IMDP8R5K7WAHQbs9K9C20qFVzgm9+vqa5lhI4bEyhDWD1i+8XqiHbRtqbbRt rW5wWIdtSQL+
/j/3h/OnbafEv75P94UXCwWwxawj0Rf5VLTIhiFB6KKfWb3KWwVFKMtH9W/9 Aapaawyy/wDA
v/QTQtwZmzXNtbOiT3EUTPnaHcKWx1xnrimre2b2hu1u4Gth1mEgKD/gWcVl eIdFn1TWdGkF
qs9rBIxuA5XABx1BPPSsKbwnqjaReQRW6pt1I3EUG9AJI8YGOoH0NdtOnTlF Nys/+Cc8pTUr
JX/4Y7BNS094PPS+tmh37PMEyld3pnPX2pzXtmrzI11AGgG6UGQZjHq3p+Nc raeFLmfTdUEt
i9nNcRgJG1xGwLLyp2xoqrzxn68VUbwrrkyRzugFzqDsmoAOuI496kEc88Ke metWqNK9uf8A
r+r/AIE+0na/Kd4hSWNZI2V0YAqynII9Qa5lvFoebUFtbe1lSzYLmS9WIyZO CRkYwD3z6etb
39qaTbuLX+0bNHQ+X5RnUEEcYxmuPuvCl+1n4hWHT0ElzcKbXDIMx78nBzwO nBxU0Iwu/aeV
r+q/Qqo5WXLv/wABnXS6lY2yx/a7y2t3kUMFkmUZHtk8/WqrawF8Sro/kcNb +f52/wB8Yxj2
65rmtT8L6odVnnGnm+huIUX5JoUaMhQCMyK2OnVcfWrL+FdQN+I40KQDSmtR K0wfa/OBnAJH
I52jirVKkldy3X9f11J56jdrdjXl8RW39sWFjbeVcpdlwZopgQhUZxgZz+Yp IvElrc+IxpFs
BMQjM8yt8qkfwjjn86w9J8O6nDq2izyaPDaJaKyTyRyoWkO3h2A9c+569K3Z NHnTxlZ3sFsq
WUVq0bMpUAMSxxjr39KJwoxdk76Pr11t+gKVR6+a/S5tbayLXxDaXV1eQ+Vc Qx2ZZZbiVQsQ
IOCN2etbu2uU8LfZprrXrSUxO7X8jGFsEleOdvpmsKaTjJvoazbTVi3o3iK2 1iO+mRRDbWr7
fNkbAZcZ3HONopda8SWGj6ct15kdw0gzDHG4/ee4Izx71gXt1b+HLfxGNVaF JL6V3trdn3NM
pDYyqHcAcYycfWsNbjxJ4p0WO00fQ4raySIRtOesgBPyqzn7uVHAyQRyeamr Xw8Klt9tFq9v
67Hdhcsxdem6jtGGvvS0W+lu/wArnbap4ssNGSya/jnQXce9WRQyr0znkE4y OgrCufiMtzLJ
beH9Iu9QmVXO7YcADADBVyxXJ77e3rxj6h4Lt9OXTZNVv5LzUrq4ijliaTGI 8AEDnccYxuyB
jHAr1S3tILSBYLaCOGFc7Y40CqMnJwB71zTVecVL4E7+b/y/M64yy3DPls60 lb+7H5fafzse
fnwx4r8SFf8AhINTW0smYs1pb4z94HacfKRgZBJbHHHWt3TfAnh/TVGLFbmT aVMl1+8JBOfu
n5Qe2QB/Ouo20bamNCmndq77vUitm2KqR9nB8kf5Y+6vw3+bZDto21Nto21v c8yxDto21Nto
20XCxDto21Nto20XCxDto21Nto20XCxDto21Nto20XCxDto21Nto20XCxDto 21Nto20XCxDt
o21Nto20XCxDto21Nto20XCxDto21Nto20XCxDto21Nto20XCxDto21Nto20 XCxDto21Nto2
0XCxDto21Nto20XCxDto21Nto20XCxDto21Nto20XCxDto21Nto20XCxDto2 1Nto20XCxDto
21Nto20XCxDto21Nto20XCxXkhSaJ4pUV43UqyMMhgeoI7iua1L4feH9SYuL VrSQsCWtW2Ag
DGNpBUD6D+tdbto21E4QmrSVzow+Kr4aXNRm4vyZ5x/ZPjXwvDnTb2PVbGH7 tvIuX27P7p5A
GOFVvTjkirdr8SLFbk2us6fd6ZOG+YOpcKNuQW4DAn02nt+HebarX+mWeqWr W19bR3EJ/hdc
4OCMg9jgnkc1h7KcP4Uvk9V/mej/AGjQxH++UU3/ADR92Xq18LfqiO0u7S/i Mtncw3EYbaXh
kDgH0yO/IqfbXF3vw7ayuvt/hbUJNOuRj907kxsMrxnk44JIO4E46Cq6+Ltf 8MSi38Vaa09v
u2pfWwHzfex6KScDA+UgDJBp/WXDSqree6F/ZUMQubBVFP8Auv3Zfds/kzvN tG2q2l6xputw
GbTryO4UfeCnDLyQNynkZwcZHNX9tdCmmro8qpSnTk4TVmuj0ZDto21Nto20 7kWIdtG2pttG
2i4WIdtG2pttG2i4WIdtG2pttG2i4WIdtG2pttG2i4WIdtG2pttG2i4WIdtG 2pttG2i4WIdt
G2pttG2i4WIdtFTbaKLhYh0f/kFQ/wDAv/QjV8AfNn+7j9RVDR/+QVD/AMC/ 9CNXqVX+JL1Y
4fChNo9KNo9KWisyhUYx52nGar6pqsWmaXc313JiCCMu2MAn2Gcck8AdyRU9 eZeNNZutV8P+
H9IDW6Xmr+U82yVWVc7dv3d3yljkMCfuHBNZ1puFNyR2ZfhvrOJhSez3fZLV /gaPwwspn0q/
1q7LNcancFyxK4cKT8wA6Hcz/kOPXu9o9K5zwVHcrozia+lnihnltII3RAIo 4ZXjXBVQSSFG
SSenAHOekp0oezgohmGJ+s4qdW1rvT0Wi/BCbR6UbR6UtFWcYm0elG0elLRQ Am0elG0elLRQ
Am0elG0elLRQAm0elG0elLRQAm0elG0elLRQAm0elG0elLRQAm0elG0elLRQ Am0elG0elLRQ
Am0elG0elLRQAm0elG0elLRQAm0elG0elLRQAm0elG0elLRQAm0elG0elLRQ Am0elG0elLRQ
Am0elG0elLRQAm0elG0elLRQB554/D6J4k0HxPH5vlxSfZ7grtPyZJwAe7K0 gz7DpXfxPFPE
ksTrJG6hkdGyGB5BB7iuV+Itjc33hxYre9kh8y4hgMOE8uUySooLkqWG0nI2 ke+aZ8NdabVf
CscErKZ7Fvs5AYZKADYSAOBj5ffYTnrXPH3KrXSX5q1/0PYqr6zl0Kv2qT5X /hd3H7ndHYbR
6UbR6UtFdB44m0elOQASKfcUlFACAYUD0FLRRQAUoHzfgf5GkooAbto206in cBu2jbTqKLgN
20badRRcBu2jbTqKLgN20bayPEmoyaVYW96lwsSpdwrKr7dskbuEYEnpgNvy CPuDPGQfPT41
8QazrUltod1IPPmaKMyRxiCJQWZSuU37ikZY7mPVwE4BrKpWjDc7cJl9fFXl BWit5PRL1Z6L
rviDTPDtotxqM+zfkRxqNzyEDOAPy5OAMjJGa4SO+1/xVcSyeGNHg0i0m3B9 RkQJJKCWz84G
ecDO0Ehh96r+h+A9O1Wx07Xrq+1Ce8urRJnNw0cwJeLHIdGzjIIzn7o616F0 GBUuNWeknyrs
t/mzr9tgsHpSj7Sf80vhT8o9fVv5HHaN8OdJ0+VrrUWbVb12LPLcjKEnOTs5 yTnncW5GRiuv
206itIQjBWirHn4nF18VPnrScn+Xotl8irPp1ndTRzXFpBLLH9x5IwxXvwSO KsbacBiir5nb
U5rIbto206ii4xu2jbTqKLgN20badRRcBu2jbTqKLgN20badRRcBu2jbTqKL gN20badRRcBu
2jbTqKLgN20badRRcBu2jbTqKLgN20badRRcBu2jbTqKLgN20badRRcBu2jb TqKLgN20badR
RcBu2jbTqKLgN20badRRcBu2jbTqKLgN20badRRcBu2jbTqKLgN20badRRcB u2jbTqKLgN20
badRRcBu2mywRzRPFKiyRupV0cZDA8EEdxUlFIFpqjhtX+G9rJOb/QLqTSr8 bivlMRGSQ2cY
5TOQOOAP4aor4w8Q+FpRb+K9Mae33bUvrYD5vvY9FJOBgfKQBkg16PTJYo54 nilRZI3Uq6OM
hgeCCO4rB0LO9N8r/D7j1oZrKcVTxkfaRXf4l6S3+TuinpeqWGtWQvNOuVng LFdwBBBHUEHk
H69iD3q7trgtS+Hdxb6lcap4a1P+z7h2ytuFKx4+UlcgnjIJxgjoMACszw/4 ruvCUiaH4oFx
bJb28SQHy1dVUFznKDJG3Ygxu5Q55zQq7jpVVn+D/wAhzy2FaLqYGXOusXpN fL7Vu6+49Q20
barWWp2eo+d9jnWYROEdkBxkorjB6EFWU5HHNW63ueQ1bRjdtG2nUU7gN20b adRRcBu2jbTq
KLgN20badRRcBu2jbTqKLgN20badRRcBu2inUUXAo6P/AMgqH/gX/oRq9VHR /wDkFQ/8C/8A
QjV6rq/xJerJh8KCiiisygrzPR7W28afEDU766jt59M01PssMBCyRyKdyrxt wynDt7Er1Are
8farb6forLO2oQSMHa2mtZmiBmC4VWKsCfvFtp4IjbIOMHl/AMF1pup6Tb3D iO3vLd7uFJL5
ovMkO8NsjUbZiI0iJVj8m4sBnpz1Peqxh03/AMj2MH+4wNbEdZe4vnrL8LK/ n9/qUNvDbR+X
BFHEhZm2xqFGSSScDuSST7mpKKK6DxwooooAKKKKACiiigAooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAI5oIbhAk8SS qGVwrqGAZSCD
z3BAIPqK89hkPg34lXYuZki0rWVaczzuERHGWOWIA4O4Yz0dc5NejV5b8Y7e S6GloqbokhuJ
JjuwQu6FPX1cDjnmsa0Xy8y+zr/n+B62TtTrvDT+GonHXvvF/wDgVj1LqMii uT8MXtvd6tMW
urhZPskLWNrNdOxNoY4z5hQsQzeYWUucnjGeeesra6eqPKlFxdpbhRRRQIKK KKACiiigAooo
oAKKKKACg8jrj3oooAZDG0UEcbyvMyqAZHADOfU7QBk+wArnfF3irSPD9skV /CLu4kxJFagA
8qdyu2fugMoweTkZAODjO8Q+Kb+71hfDnhbbJqO7/SLogMluAeRyCMjucHHQ AseLXhbwRbaD
L/aN3K17q8ikyzudwVjncUzzk5wWPJ56ZIrCVWU5ctP7+x61LB0cPBVsa99V Bbvzb+yvxfRH
Mab4CvvE2tSeIPE0SWfnOrm0jBDSDYo5O4mMHamR14P3eDXf2HhvRNLmWax0 mygnWPyvPSBR
IV9C+Nx6Dqea1KKqnSjDbfuc+MzCtirRlpFbRWiXy7+b1GQwxW8EcEEaRRRq ESNFCqqgYAAH
QAU+iitThCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKK
ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAo
oooAKKKKACs3VfD+k62oGpafBcMBtWRlw6jIJAcfMMkDODzitKik0mrMqE5Q kpQdmuqPMTpG
vfDmS4u9IxqejP8AvbiGQYaMAjng9duBuAxwSVwBXdaF4i03xFaNcadPv2YE kbDa8ZIzgj8+
RkHBwTitSuJ1vwBG16mreG5l0vU4mUoqjbCccHgA4JHXgg4wRyTWHJOlrDVd v8v8j2PrNDHq
2K9yp0mlo/8AGl/6UvmmdtRXI+E/Fkt/cPomtx/ZdctvlZGAAnAGdy44zjkg cEcjjp11awmp
q6PNxWFqYao6dRa/g10afVMKKKKs5wooooAKKKKACiiigAooooAKKKKAKOj/ APIKh/4F/wCh
Gr1UdH/5BUP/AAL/ANCNXq0q/wASXqyYfCgoqlcQQ3GqQLPDHKot5SFkQMAd 0fOD9ak/s2w/
6B9n/wCA6f4VFkO7OF+I7tq2paJ4Ygb95cziaUrGzNGvKhvQjBkJ/wB3tXoE UUcESRRIscaK
FREGAoHAAHYV51pFpDr3xS1K6+yoLHSkMCR+VGq7+UwVA+YE+awPXgdOBXY6 u+j6Lpkt/dWF
t5MeM7bZD1IAzxwMkcmueglKUp93b7j180bo0qOG/ljzP1lr+Csa9FeayeKZ vtErJomjra+Y
PJZogd6Hvkd8dsV2WkSaTrFkLiHTrZCDtdGgjypxnsORyOa7J0ZQV5Hhwrwm +WLNiiuautb8
NWd3c2smnySSWzBZjb6LNMiHaGwXSIr0YHr3rZhs9LuIUmhs7GSKRQyOkKEM DyCDjkVnZbmu
q0LlFVv7NsP+gfZ/+A6f4VHDZ6bOhdNOtwAzL89oEOQSDwVBxxwehHIyDRoG pdorOSLR5L+a
xWzszcwxpK6fZl4VywU5xjko35VY/s2w/wCgfZ/+A6f4UWQalmisPU73QdIu ILe6sFaadWeO
O20x7hiq4DHEaMQBuXk+tPe40OOFJpbGOKN/KCmXTmTmVtqDlBg7sAjquRnG aEkw1Nmiq39m
2H/QPs//AAHT/Cj+zbD/AKB9n/4Dp/hRoGpZoqt/Zth/0D7P/wAB0/wo/s2w /wCgfZ/+A6f4
UaBqWaKrf2bYf9A+z/8AAdP8KP7NsP8AoH2f/gOn+FGgalmiq39m2H/QPs// AAHT/Cj+zbD/
AKB9n/4Dp/hRoGpZoqt/Zth/0D7P/wAB0/wo/s2w/wCgfZ/+A6f4UaBqWaKr f2bYf9A+z/8A
AdP8KP7NsP8AoH2f/gOn+FGgalmiq39m2H/QPs//AAHT/Cj+zbD/AKB9n/4D p/hRoGpZoqt/
Zth/0D7P/wAB0/wo/s2w/wCgfZ/+A6f4UaBqWaKrf2bYf9A+z/8AAdP8KP7N sP8AoH2f/gOn
+FGgalmiq39m2H/QPs//AAHT/Cj+zbD/AKB9n/4Dp/hRoGpZoqt/Zth/0D7P /wAB0/wo/s2w
/wCgfZ/+A6f4UaBqWaKrf2bYf9A+z/8AAdP8KP7NsP8AoH2f/gOn+FGgalmi q39m2H/QPs//
AAHT/Cj+zbD/AKB9n/4Dp/hRoGpZqlq+nR6vo93p8u0LcRNGGZNwUkcNjuQc Ee4qT+zbD/oH
2f8A4Dp/hR/Zth/0D7P/AMB0/wAKTUWrMqE5wkpx3WpyHwuv2l8PTaXOvl3O nTsjRFGVlViW
G7PfdvGO2Onr3Feb6ZaQ6J8Vr7TJrVHtNUjM8CvFG4Dcvnp8qgiVQB7Zzwa7 /wDs2w/6B9n/
AOA6f4Vjhn7nK91p/XyPTzmK+te2htUSkvnv+NyzRVK3ght9UnWCGOJTbxEr GgUE7pOcD6Vd
rdqx5SCiiikMKKKKACo5ScovOGJ3YODgKT17dKkprjLJ7bv/AEE01uJmdcXV taRebcypDHnG
+S4dRn6lqW3uba7iEttIs0ZOA8dw7D8w1ZGtW9xHrmn34heW3ijkTKQmXypG xhyg5I4xxWZc
T67fw2MlxHPawF5VlMFvMCCPuEorCTBGe+M9e1dkaalFO/8AWv8AkYSnZtWO skkihieWU7I0
UsztO4CgdSTu4FcFqetXXjW8OieHHkisMA3t8WkwVP8ACAx6HkY4LHjhQScK /k1PxXc3Fjp2
oXV7p9jaqZZEVwLlgcj5P72TjnrsLc4xXTW2k3djevbwm4023XyWg+z2ksiv gDdu2Nt3EjDF
wT71yKDxLcYytBbvW79PI9tezyuEalWPNXaul0hfZy7y7LZaXOh0Hw9p3h2z a3sonLOcyTPI
2+TrjJUgcZwOP1JJvXN7a2bQLOzIZ5BFGPMlO5j0HDcVzRh1WO01S7calM4u 3iht98iqIyy4
cBcMwGONp6Z9TVeG21OV7NZkvJo4dXVkeSGQERbevzksFye5NdlPDxirJ6I8 bEYmpVm6k9ZP
q/68jtOP7rf9/pP/AIqjj+63/f6T/wCKqXZRsrn5i7EXH91v+/0n/wAVRx/d b/v9J/8AFVLs
o2UcwWIuP7rf9/pP/iqOP7rf9/pP/iql2UbKOYLEXH91v+/0n/xVHH91v+/0 n/xVS7KNlHMF
iLj+63/f6T/4qjj+63/f6T/4qpdlGyjmCxFx/db/AL/Sf/FUcf3W/wC/0n/x VS7KNlHMFiLj
+63/AH+k/wDiqOP7rf8Af6T/AOKqXZRso5gsRcf3W/7/AEn/AMVRx/db/v8A Sf8AxVS7KNlH
MFiLj+63/f6T/wCKo4/ut/3+k/8Aiql2UbKOYLEXH91v+/0n/wAVRx/db/v9 J/8AFVLso2Uc
wWIuP7rf9/pP/iqOP7rf9/pP/iql2UbKOYLEXH91v+/0n/xVHH91v+/0n/xV S7KNlHMFiLj+
63/f6T/4qjj+63/f6T/4qpdlGyjmCxFx/db/AL/Sf/FUcf3W/wC/0n/xVS7K NlHMFiLj+63/
AH+k/wDiqOP7rf8Af6T/AOKqXZRso5gsRcf3W/7/AEn/AMVRx/db/v8ASf8A xVS7KNlHMFiL
j+63/f6T/wCKo4/ut/3+k/8Aiql2UbKOYLEXH91v+/0n/wAVRx/db/v9J/8A FVLso2UcwWIu
P7rf9/pP/iqOP7rf9/pP/iql2UbKOYLEXH91v+/0n/xVHH91v+/0n/xVS7KN lHMFiLj+63/f
6T/4qjj+63/f6T/4qpdlGyjmCxFx/db/AL/Sf/FUcf3W/wC/0n/xVS7KNlHM FiLj+63/AH+k
/wDiqOP7rf8Af6T/AOKqXZRso5gsRcf3W/7/AEn/AMVRx/db/v8ASf8AxVS7 KNlHMFiLj+63
/f6T/wCKo4/ut/3+k/8Aiql2UbKOYLEXH91v+/0n/wAVRx/db/v9J/8AFVLs o2UcwWIuP7rf
9/pP/iqOP7rf9/pP/iql2UbKOYLEXH91v+/0n/xVHH91v+/0n/xVS7KNlHMF iLj+63/f6T/4
qjj+63/f6T/4qpdlGyjmCxFx/db/AL/Sf/FUcf3W/wC/0n/xVS7KNlHMFiMH arsoYMqMwPmO
RkDPIJPpVmUnKLzhid2Dg4Ck9e3SownyuPVG/wDQTUzjLJ7bv/QTUt6jRxni 7QtC1iKP+0bq
KxuwpENw02GI54Ic/MoJzjg+hGTWT4e8ZDT530TxJcqbiEgRXwndkmU4xuYH HQg7jjj72CDn
otXsLm58T6Q8LXEUaRzb54kB2ZAwCWBAz71z3iHRr/U7m/hnguJrZbiJVmaA yNHGU+Zoxx/F
tJCenIxxVSwvNapSlaTWt9nrazO7D5jHk+q4tOVJPS28dL3j5dGtn6nayXtr DeQWjswnnDGN
PMl+YL153YFCXttJey2asxuIlDunmS8A9DndivKre61bTNbh0eS4d3toJV06 aaJoncOuFUBw
D1GAPXgE8V2/hy1kXXbubyr4RNaxL5l2sgLOM7hl+fy4q6TjUpc97Nbrs7nL jcNPC1uR6xdn
GXSUWlqv60NttT05Lk2z3kCzg4MRu2DevTfmp4pobiJZYWEkbDKuk7kH6ENX LxQX9hqhTSZr
qa1nuGea3nsWQIG5ZxKQM89B/OqdmL6WLS4bwa1C6pvupwLklsMcIAuRk8ZJ HSt/Ypq6f9a9
PkcbqNOzX9af5nb8f3W/7/Sf/FVDc3VvaRq85ZFZ1jX97IcsxwBw3rXOWUOq vrjPeXV5A63b
YjFvM8ckXYbg3lgYPoCCOa1r9ftWv6bZAgrCGu5F+nyp+rE/hWbglJK/mVzX T0Ld1f2NkVF3
cxQF87fNumXP0y1To8csayR5dGGVZZnII9Qd1YOuWN7ceJdHe0UqFSYNM0Jk RMqOuCOvbmsy
70y/0pGsYG1F4orMCya2D7TNuyS+3gcn+LjFVGnGUV72r/zYpTak9NF/wDsi VUEkMAOSTNJ/
8VUEd9ZSlRHcROWTzFC3LHKZxuHzdM965vbrKa/EZPPukcKJFUTxLA235iCM RuufqTnFU9Ks
r0X+m3eoxalvaxZDJ++LCXzTgNjkDGPvcU1RVruX9a/5C9pd2t/V1/mdP/bu jf8AQTs//A4/
/F0V5jt8Y+mu/wDkaiur6lH+f8TH6zL+X8D17R/+QVD/AMC/9CNXqo6P/wAg qH/gX/oRq9Xl
Vf4kvVndD4UVm/5C0P8A17S/+hxVl+K76PTtI+1yLA6xGRglwMxuwikKKR3y 23j1xWo3/IWh
/wCvaX/0OKuP+Kt+LbwotqDEXu51Xa33tq5Yso9iFBP+171hWn7Om5eR25dh vrOLhR6OSv6d
fwMn4ZwPb2Ns7w2g+03TyRzRsTMyCN1KONowAy5GGbO7tjnoPHomFnaNGBMJ HaA20nEcu7By
zZAGArdQc5PFb2k6Na6VYWkCRQtNBCsRnWIKz4UAn8cetXLm2hvLeS3nQPFI pVlPoRj8KdFe
zjFdicwrvFYipVv8Tf3dPwPMbi105dH1BJrFbrzLTybQW4DpHLznB7EHac+g P0roPhxYXVjo
kgus7yVQ5JyCM5zx74q/beELG0aG3jub02ixPGIDINm0kEjhc8+u7PHHeuhh ijgiWKJdqKMA
V0VKile3U8+nScbX6HEXWja/Lc+JrrS9TvrORrxXithHEIrlRBEGwzxlgWwy hgcAjpwaydc0
2a4lsHtbGWGwGmxRadHLo811NaygnIUh08iTHl/O5x8v3gAc99e67ZWO7e5k K/e2YwPxJA/C
m2/iDTrgxgSsrSMFQMh5JOByOP1rjWKoqShzq6t18rHZ7Oo1zcuhx/iG2ij1 Od77T7mfUZL+
y+xXiW7EJBviDL5oG1BuEhKE5Oc4Oar6hpYfSrcX1hI5W8v2WO50aXUICHuG IJiQhlYjBV+m
C3qK706HpLaqNVOl2R1EdLs26ed0x9/GenHXpV+t7+7Yi9tEeY6jo14731xF o5tr+50mxEjf
Z2uMqkh+0RM4IMh2bQV3BnAAGccT6fohuodLt5rETaYdWdzbjSns4Ej+zOP9 Q7MVQv8A3toL
HIHIJ9Hop82rYr/18rHM6zpl5feLtLe1vL2wjjsrkPc2scbYJeHCEyI6jOCe mfl+tZ2uafeS
a7dPHb3EyH+yQJRGTu2XTs54GOAQTjoDniu3oojK1vL/ADuFzzvSNNv4vHDT XMe26+2TvLOm
kyB5ICG8tWuzJsZMGMBApIKjj5S1eiUUVPRLsJ6tsKKKKACiiigAooooAKKK KACiiigAoooo
AKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPPPihD9h/sbxBCIvtNndBA GTO/+NckEHAK
Hj/aPSvQIpY54klidZI3UMjochgeQQe4rD8bWf2/wXqsPmbNsBmzjP8AqyHx +O3H41F4C1D+
0fBenOWiMkKeQyxn7uw7VB54O0Kfxz3rnj7tZrur/oevW/fZZTn1pycfk9V+ N/6sba/8hab/
AK9ov/Q5as1WX/kLTf8AXtF/6HLVmulnjoKKKKQwooooAKBjPPof5GiigBu2 uA13UtQ8W6xP
4Y0ItBaQsU1G9ZSABnBQe3BGOrEHooJOh488Qz6fawaPpjN/a2pMI4jHIqmM FgM89C2doPHc
5BWtXwr4btvDOjx20SL9qdVa5lByZHxzzgfKOcD09ySeebdSXs1st/8AI9jC wjg6CxlRXnL4
E/LeTXl08y3o+iWWhabHY2MeyJOSTyzt3Zj3J/8ArDAAFX9tOoroSSVkeTUn KpJzm7t7sbto
206inckbto206ii4DdtG2nVVuLiaO5igghjkZ0ZyXkKABSo7Kf71CuxPQsba NtVvM1H/AJ9b
X/wJb/4ijzNR/wCfW1/8CW/+Ip2YXLO2jbVbzNR/59bX/wACW/8AiKPM1H/n 1tf/AAJb/wCI
oswuWdtG2q3maj/z62v/AIEt/wDEUeZqP/Pra/8AgS3/AMRRZhcs7aNtVvM1 H/n1tf8AwJb/
AOIo8zUf+fW1/wDAlv8A4iizC5Z20bareZqP/Pra/wDgS3/xFHmaj/z62v8A 4Et/8RRZhcs7
aNtVvM1H/n1tf/Alv/iKPM1H/n1tf/Alv/iKLMLlnbRtqt5mo/8APra/+BLf /EUeZqP/AD62
v/gS3/xFFmFyzto21W8zUf8An1tf/Alv/iKPM1H/AJ9bX/wJb/4iizC5Z20b areZqP8Az62v
/gS3/wARRFc3H2xLe4giTfGzq0cpb7pUYOVH96izC6LO2jbTqKVxjdtG2nUU XAbto206ii4D
dtG2nUUXAbto206ii4DdtG2nUUXAbto206ii4DdtG2nUUXAbto206ii4DdtG 2nUUXAbto206
ii4DdtG2nUUXAbto206ii4DdtG2nUUXAbto206ii4DdtG2nUUXAbto206ii4 DdtG2nUUXAbt
o206ii4CKoGc9wR+lKMZ59D/ACNFFIBu2jbTqKdwMTxJ4YsvE2mm1uRslTJg nUZaJv6g9x39
iARh+Fte1C11X/hFvESN/aKKTbXIywuEAJyT3OAfm74IOGHPb1y3jXwv/btg LuxXZrNrhrWZ
X2McHO0t+ZHTB7gE1z1YtP2kN/zX9bHqYHEQqQ+p4l+49n/I319P5l89zp9t G2ud8E+JV8S6
EkrnF5b4iuQSuWbH38DoG57DkEds10lawmpxUlscOIw88PVlRqK0loN20wW8 QmMwjTzSoUvt
G4gds+nNS0Vd2Y2G7aNtEksUbFWkGRxwrH+lR/bLYHBmA+qMP6VSjJ9BXXck 20baeRgkelJU
3GN20U6ii4FHR/8AkFQ/8C/9CNXqo6P/AMgqH/gX/oRq9V1f4kvVkw+FFZv+ QtD/ANe0v/oc
VcL4mk/tX4o+HdKWaJUtP9JJUbmDjLlW54yI1x6bs88V3Tf8haH/AK9pf/Q4 q4XwbJ/a/wAQ
vEusCaJkjxbIIhlXQthWBz6RD67u1cmI15Id3+Wp7GU/u1WxP8kXb1l7q/Nn odFFFbnknH/8
JJAmuabp082r/aLq0aZporEmNGzDhVbySCh8zlt2E2gMckVu+a1/oIVt/nXF rglUbG5lHQ49
WH6+hqs3hy3+1QsLi5DRxMkb/LlFyuVB2dDhe/O0dccbMES20EUMeQkahFye cAYFOWqaFHQ8
hXWbsxiOcrcRYztkGfpWxoMUmqeIbKRIgkUQ81wOi46fjnFdHrvhjSLrM/mR 2E7dHyArH3Xg
flg1e8N6XFpemhFljllc/vJIzkHHQA+g/qa+eoZU6eITdrLX+ketUxkXSfLu yLxFcXq3Oj2d
levZ/bbtoZZY40Zgohkf5dwIByg5IP0Nc1Lr2uTW+m2MD6hJM8l6slzZJaia TyJfLXIm2xjI
O5sDPHAAzjvpIIZXieSJHeJt8bMoJRsEZHocEj6E1UutE0m+tPsl3pdlcW3m GXyZrdHTeSSW
2kYySxOevJ9a+g6HmXX9fP8A4Bx974m1uO0t1iZPtt3bQ30SRiN1KIrNOiEE gg7FG7LYMwwT
XVeH799V0+TUPN8y3uJ3a24GPKB2qQR1DbdwJ/vVfNpbGSOQ28RkjQxoxQZV TjKg9gcDj2FZ
11okz+SlhrN7pVtDGI0trKK28sAdMB4mI4wMA446U7/1/Xy/Ent/X9f8MZOs 6rqVnq2tS29w
5h0zS0u47RY1KzSN5wwxILY+RThSOnXtWfaa3rcOn3cVxLdqzfZRHcXv2Qyx iaTy2cLAWXYB
8ylx1zksBx2Nhp4s0zLPJd3LKFe6njjWWRQSVDFFUYG4447n1NVW8OabHpN1 p2nW0GmQ3WfN
NnbQruzwcqyFGyODuU8Utirpv+vL+vmc3FqF6niC3sbjUY75bbVzAs0sMe9V +xNIclVADbic
lQOOPUVl6ne6rP4X1u01LUb3zbjSJriNilq0MoXG5rd48nyzuAxINxDAggg1 2uieGdO0O0SC
CJZWSUzCV4Y1YPt2ZAjVVXC/L8qjj6nNm10LR7H7T9k0qxt/tQxceVbonndf v4HzdT19TVXS
YKVmn2/zOSbWdch1+S3ja+ktrG4trUs5tEgmDqm55SxWTed5x5YC5UAA8itP Tob7XdF1CS71
i9RZLu4iVLcRx7I45pE2qwXcNwABOc8fKVPNbQ0LSFubW5GlWIuLSMRW0ot0 3QoOAqHGVHJ4
HrVyK3hgjMcMMcaFmYqigAliSxwO5JJPqTUys42EtPwMfwYMeB9BH/UPg/8A QBW5TIYYraCO
CCJIoY1CpGihVVRwAAOgp9VJ80mxBRRRUgFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFAB
RRRQAUUUUAFFFFABXnnwzk+wXeveH2mif7HdFozja8nJRmxnp8ifTd15Feh1 55PJ/Y/xnjdp
ovL1W1Ct5g27OMKoOeSWiX/vrGO9c9b3ZQn52+89fLf3tDEYfvHmXrB3/K53 S/8AIWm/69ov
/Q5as1WX/kLTf9e0X/octWa6WeOgooopDCiiigAqhreqxaJot3qUw3JAm4Ly NzHhVyAcZJAz
jjNX6868ZNJ4p8Xaf4Ttywt4GFxeuo+7xnrtOCFPB6EyAHpWVabhG636ep35 dhY4muoz0gtZ
PtFb/fsvNlrwRo1zf3svjHVypvb1T5EQi2iJOAG5GclQAMfwnkndxq/2vfR6 Vqck0q+YPtLW
sgUDHlsw2kdCRgH3GfQk9HFFHBEkUSLHGihURBgKBwAB2FZ9xodpc6VNp8jS +VK7ybwwDqWY
scHH+0R9ODmtsNGFONpfP9THHYqeKre02WyXRJbL5f8ABIrzWmsbyCGWO3CS siKXuQsrliBl
I8cgEjPI6Hj1j/ty7eSMRadGyS3EltGzXGCXQtyRt4XCHnk+3erE+hxT3Dyf armNZHSR402b
WZMbTkqW/hHAOOPrU0elQR+Rh5P3NxJcLkjln3ZB46fOf0ra9JRWmvzOG0zO n8SpDbW5ZLaK
eVpVK3F0Io1MbbW+crzzjHHPtitizuo76yhuos7JkDrnrg/SqZ0WIKnkXNxB KkkjrNGV3fvG
LMvKkYzjt2FaEMYhhSIM7BFC7nYsxx3JPU1M3Tt7q1KSlfXYfRRRWRYVUk/5 C9t/1wl/9Cjq
3VST/kL23/XCX/0KOmhMxda8T3Wl3l9FBpsdxBYWqXl1K9z5ZEbFwQihG3MB GTgkA+oqve+O
7O08SHSi1iFjmigkEt8qXBeQAr5cJGXUb1ydw/iwDjnXv/D1pqLamZpJ1/tG zWzm2MBtQb8F
cjg/vG656Dimv4ejOqm9h1C+tkkdJJ7aB1WOd1AAZjt3jhVBCsAQoBB5yK10 U7dP62/4Jmt4
3t4biGK4txGDBO87iYEQyRFxs6ZOfKmOePuH1rpbWSWa0hlmiEUrorPGG3BC RyM4GceuKxLr
wfpl214ZXuf9Lu47qQCQYBTHyLxwjfNuHfe3PNTT3XidbiRYNI0h4QxCPJqk qMy9iVFuQD7Z
P1pLbz/r+vkJ76bf1/XzOa0fxTqVvLd3euyN5KpqE/lQSI8ccdvKqYA8pWJ5 OCWOep6gLNH4
4bU7Fhazaet1Fd2SubC9S8j8qWZUKltow2NwIxxkEE9tyPwnpw4l82VGjuon jdgVZbiQSSA4
APUYHTj1PNCeGVNqYLvVtSvf30EqvcSJlfKcOqgKirjI5ONx7ngYpWTV/wCt f8im1e68yjNr
+qXGsaattaLFpcuoyWrT+ZmSTYkoYMhT5V3pwwYk4HTNWtIvtYl8VatZ6k9s sMVvBLbw2+WE
YZpQSXIBYnYD0AHQZwSXr4Vtk1SG8W9vVhhumu4rMMnkpKysGI+XdzvY4LYy eMVpx6dDFq1z
qSs/nXEMcLKSNoVC5GOM5+c559KStYUra2/rX/It0UUUhBRRRQAUUUUAFFFF ABVST/kL23/X
CX/0KOrdVJP+Qvbf9cJf/Qo6aEy3RRRSGFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABR
RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FACHgHr+FctZ
WsVpJYXIit5BKxVL+BtstwWUn96pXkHGT8xOQDgduqqtHp1jDcvcxWdulw+d 8qxKGbPXJxk1
pCfKmu5Mo3sYulvdXMOlmG8lRVto5biFI4xGBt4UDZkEn0PAB6cUuhajqF5P C9yJfKuYWlxK
YQqkEcRhTvIGcHcM9OnStRtF0p5FkbTLNnUAKxgUkAcDBx2xU8NlaW88s8Nr DHLKcySJGAz/
AFI61pKrBp6b+X9f0iFCWmpwPimzufB2v/8ACX6WiyQTsIr62KYGGxlgQOAS o5PO7HXdivQL
a5ivLSG6t33wzIskbYIypGQcHnoai1LT7fVdNuLC6XdDOhRuASM9CMgjIPIP YgVxnw5vrixe
/wDCmocXWnuzxcEBoyecfKOMkMCeSHHYV5y/d1LdJfn/AME96b+u4L2j/iUr J+cNl/4C9PR6
mpotkbLxzrga7ubp5bO1kaS4cEjLz4AAAVQAAMAD1OSST1NRiCFbh51iQTOo RpAo3MozgE9S
Bk4+pqSups8d6u5ga1bXV5DcQ2uoCzd5GBk2FmUZOQORg+/5etZ+laXLptq1 u+pC4t1bEO9C
GRf7pPfHHYflgDV1jw8msQz29w0TwyOXU8hkJJwRxwRmquleFDpVqY0nikmk bfPcNuLyN6nj
64H9STXbGcUviOZxd9jX17nRNT4x/o8v/oJrEkubiBPszXa3ag2cgd40+XfK AQABjGBkZ5Hr
0rqJkSYSI6q8b5BVhkEHsRVeOws4o2jjtIERn8xlWMAF8g7iPXIHPtXNTqKK s0ayi3sZn2K4
/wCgpd/98xf/ABFFbdFZ3f8ASRv7Qo6P/wAgqH/gX/oRq9VHR/8AkFQ/8C/9 CNXqur/El6sx
h8KMbXtQ/sqC4vw0SvBp9w6eacKXDR7QeR1OBjvmsX4XWf2XwXHN5m77VPJN jGNuDsx7/cz+
NV/ijeR2vh8wurFrpDChUcAiSJ+fbCH8cV1mh20tn4f021uE2TQ2sUci5Bww QAjI46iuR+9W
XkvzZ7C/dZW+9Sf4RX+b/q5fooorc8koQvfXMUN6lvaBHi3LvuCDtbB5/dnB 4HAOPrxT5LmS
bRWurcbZXtzJGDzglciucfwojXkNxJpGiS3kaptu5IAZcxhQrb9hIIwMc8Y4 6V0tpZR29pBE
8cbvHGqltvUgAZ/8dH5D0pyV0xRZ5tL4gW+Ui6WSN3HzSxsSSPTnoP8AIqzp b/adf06C2Zmj
3hyxHzHb8x5644NXdX8CSxky6ZIZUx/qJCAw+h6H8cfU1seEdEawtPtVzGUu ZF2KrDBRc/1P
8hXzFHLaqxSc097t7nszxNJUm4+ljQ1rVrjTWsIbSzS6uL2cwRrJN5SqRG75 ZtrHGEPQE+xr
CvfHsVnY2LSR6fb3ly86Ml9qAt4EML7HAlKHcd2No2jIyTjFdPeadDe3VjcS M4eymM0YUjBY
oyc8dMOfTnFZj+FYFii+yX97ZXEUs8i3MBjMmJnLunzoylSxHbI2jn1+m6Hk 6f18/wDgFC48
d20Oni8W13xulvNGPOAJhkDMznt8ixynAJzs4PNdBp1//aC3MixhYorh4UYP nfsO1j04+YMM
c9Peqk3hqxuLq1uJnuJGtrV7UB5SwkVgAS+clmAzgk/xN61BFaatoVjaabot jZ3lrBEFM19q
LxSs3OS22FwSepORkk8U9P6/r+rk9rf1/X6BqPiRtO1O+hezVrPT7IXt1cGb DBD5mAibTuOY
+5A5/Cs7TvHcN/Z3bJHYT3cJhCR6fqAuY2MrbEVpAo2Hd975Tgcgt0rXg0f7 b9sudWtolnv7
ZbW5t4pzLF5al8YYojZIkOePTHqatz4duF0a7t1v7vVLqTy/JN9crEIijZQq UiIBB+bJRiSA
GyOi2K0b0/rb/g/gRReI72TU7Wyu7FrScX5tZFhnEiP/AKM0uQWQEr0H8JyP TIOVceNtQvfD
euXFhBp8V3aWTzoseoLLLbsM/LPGY8xyAZO3DDKkEjqdPRPCs8JF7q91LLfm 9N4dk4cbvJ8k
AsI0z8uTwq4OPTmz/wAIjbzR3CX2pajfiW1ks0Nw8eYYnxuClUBYnavL7j8v Xk5rRME1df11
M+Tx5Da63Hpd0NOjlR4YLhDqAE3myBSPKiKgyIN65bKnrgHGKtLqepazY3E8 csOjWEFzLHJe
iZXlCRM6uwV4yifMi8tu+UtwDg1bTw2I75blNW1FAxje4iRo1W6kQAB3wgIJ CqCEKqQACMZB
ivPCNvdadDZR6jfW0cV497mLym3Ozs+GDoysoZsgEcEKeozSdrCVrFzw7Pd3 OjpJeSPK29xH
NJGI3ljDEI7KMAErg8Adeg6DVqtY20tparDNfXF64JJmuFjDn6hFVf0qzSEF FFFABRRRQAUU
UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV5/wDFESWcWia3 EymSxvPkjdch
icOCTkcDy+nv1FegVzfj62luvA+qRwpucIshGQPlR1Zjz6AE1jiI81KSPRyi qqWOpSezdn6P
R/gzYgljn1B5YnWSN7WFkdDkMC0hBB7irlc14Lu473Q9PliDBV06CI7hzlGl Q/hlTj2rpa1U
uZJ90jirUnSqypv7La+5hRRRTMwooooAr313Hp+n3N7KGaO3iaVwgySFBJx7 8VxXww093sL3
xBeLuvNRnYiUheUB5IwPly+7I/2RxU/xS1GO08ItaHa0l7KkaqXwQFIcsB3H ygf8CH49Poen
/wBlaFY2BWJXggRH8oYUuB8xHA6nJz3zXO/fr2/lX4s9iN8Pljl1qyt/27HX 83+BfooqiNSQ
6nJZhPuJnfngsMEr+TKfxPpXSk3sePcvUVlWmtwz2q3E22FTbRTlQWZhvzgY 288jAxkk9hxm
b+2bH7P52+XHmeX5fkSeZuxnGzbuzjnp056VTpzTtYnmXcv0VFbXMV3As8Db o2zgkEHg4IIP
IIPGDUtQ1bRlJ3CiiigAqlfGxLxJdwCZiGKL5BlIAxk8A46irtVJP+Qvbf8A XCX/ANCjprcT
2KmzR/8AoG/+U9//AIijZo//AEDf/Ke//wARWtRT5hcpk7NH/wCgb/5T3/8A iKNmj/8AQN/8
p7//ABFa1FHMHKZOzR/+gb/5T3/+Io2aP/0Df/Ke/wD8RWtRRzBymTs0f/oG /wDlPf8A+Io2
aP8A9A3/AMp7/wDxFa1FHMHKZOzR/wDoG/8AlPf/AOIo2aP/ANA3/wAp7/8A xFa1FHMHKZOz
R/8AoG/+U9//AIijZo//AEDf/Ke//wARWtRRzBymTs0f/oG/+U9//iKNmj/9 A3/ynv8A/EVr
UUcwcpk7NH/6Bv8A5T3/APiKNmj/APQN/wDKe/8A8RWtRRzBymTs0f8A6Bv/ AJT3/wDiKkhl
062cvBZSRMRgsli6nHpwtaVFFwsVP7Rg/wCed1/4Cy//ABNH9owf887r/wAB Zf8A4mrdFLQe
pU/tGD/nndf+Asv/AMTR/aMH/PO6/wDAWX/4mrdFGgalT+0YP+ed1/4Cy/8A xNH9owf887r/
AMBZf/iat0UaBqVP7Rg/553X/gLL/wDE0f2jB/zzuv8AwFl/+Jq3RRoGpU/t GD/nndf+Asv/
AMTR/aMH/PO6/wDAWX/4mrdFGgalT+0YP+ed1/4Cy/8AxNH9owf887r/AMBZ f/iat0UaBqVP
7Rg/553X/gLL/wDE0f2jB/zzuv8AwFl/+Jq3RRoGpU/tGD/nndf+Asv/AMTR /aMH/PO6/wDA
WX/4mrdFGgalT+0YP+ed1/4Cy/8AxNH9owf887r/AMBZf/iat0UaBqVP7Rg/ 553X/gLL/wDE
0f2jB/zzuv8AwFl/+Jq3RRoGpU/tGD/nndf+Asv/AMTR/aMH/PO6/wDAWX/4 mrdFGgalT+0Y
P+ed1/4Cy/8AxNH9owf887r/AMBZf/iat0UaBqVP7Rg/553X/gLL/wDE0f2j B/zzuv8AwFl/
+Jq3RRoGpU/tGD/nndf+Asv/AMTR/aMH/PO6/wDAWX/4mrdFGgalT+0YP+ed 1/4Cy/8AxNH9
owf887r/AMBZf/iat0UaBqVP7Rg/553X/gLL/wDE0f2jB/zzuv8AwFl/+Jq3 RRoGpU/tGD/n
ndf+Asv/AMTR/aMH/PO6/wDAWX/4mrdFGgalT+0YP+ed1/4Cy/8AxNH9owf8 87r/AMBZf/ia
t0UaBqVP7Rg/553X/gLL/wDE0+G9hnm8pfNVypYCSF0yBgHG4D1H51YqpJ/y F7b/AK4S/wDo
UdGgaluiiikMKzvJ1r/n/sP/AACf/wCO1o1BaXcd5C0sYZVWR4zu9VYqfwyK qLaV0JpMreTr
H/P/AGP/AIBP/wDHaXydX/5/rH/wDf8A+O1HBrcU8kP+jXMcFxnyJ3C7JeCR jDFhkAkbgOlN
tNcS6NqWsbuCK7/1MsvllWO0sB8rEjIB6gVpap2/Ij3f6uT+Vqv/AD+2X/gI 3/xyvP8Axvb3
nh/xHpPikSREiQQzvDbheMHqpYliULjORwo5HFenVzfj3T/7R8F6igWIyQp5 6tIPu7DuYjjg
7Qw/HHeuXEXlTdt1rt2PVyirGljIc3wy91+ktH/mbHlan/z92n/gK3/xyl8v Uf8An6tf/AZv
/jlc18P/ABPaa3o8WnQxypc6bbQpPuU7f4lXBOMkhMnHA3AZJBrsK1jUcoqX fyOLEYd0K0qU
t4tr7ir5eof8/Nt/4Dt/8XR5d9/z82//AH4b/wCLqLUNXg0+OaaZoo4YSdzO GOMHHrzVHT/E
0Wp2aXVqInjbqpUhlPdTzwa2VKbOdyijU2Xv/Pxb/wDfg/8AxdLsu/8AnvB/ 35P/AMVVlwA7
AdAaSseZl2INl3/z2h/78n/4qip6KLsLFHR/+QVD/wAC/wDQjV6qOj/8gqH/ AIF/6EavVdX+
JL1YofCjzr4lJFqGt+GtIkmwlxcETIhG9VZkUN7fxY7cH0r0WvP7hm1H402o t42I06zIuCSA
ACrYI55GZUHrnPYZr0CuSjrOcvO33HsZj+7w+Ho9o83zk2/yS+Vgooorc8ki Yf6VGcdEYZx7
r3x/UfQ9paiYf6VGcdEYZx7r3x/UfQ9paAIrgbrWUYzlCMYznj0wf5H6Gpai uButZRjOUIxj
OePTB/kfoaDE5zieQZz0C8dfb3H5D3yAZ17fNb3joGO1QjEcnILKCBj2NVv7 UlAIMoyAQSoY
8g7SRxz6j1PyjpmodYgaK8eeVm2MV28ZJAYN6gYGMevTrnmgFt42P+kA+WFb gD5sPuwPn68/
p+FdEIxcdjnm5KW51MMu+0aQk7RLJjPUAOwH6Vl2HifSNSLfZrptiw+f5ksL xI0fdlZ1AYDI
yQTjPOKvWgL6YQAQWkl+92y7VzA8H3M2k6dp9xcRIsOiS6bM8ZJO9xENy5Ay Bsbrg9Pw4pLV
3/rR/wDAOuKT6m3Z+JNLvlUwzSgtIsYWa2kibLAlTtdQdpwcN0OMA5qW11vT r3yvs1yJRLNJ
AhVG5ePIcdOMbTyePTqK5u18LakumahuW3h1B44vszvqNzeDzImLqzNLyq7s fKo6Z5OeJ7DQ
z4av5dRnkklsYrZEjjgilnl81giSMUUEkERR4xk8uTStG7/r+v8AhvMWv9f1 /VmaviXXR4e0
j7aLaS5kaWOGOJFc5Z2CjJRWIHP90+gBJAqNfFFlFp0V1dsQ8k0sQitYprhi Y2ZWwojD4G3k
7cD1PBNa9vYfEsMdlYx3sUsdzBclrzT7i3TbHMjsAzxgZwOBWbdeD7/y7WaF kluIJ7wmJdQn
s1aOeYyA+ZEN2RhcqQQcn0BosuXXe/4f8OVpb+vM3/8AhIrRby8R2X7Lb2kN 0LlG3iQSFwAo
AyfuDGMk7gAPWtb+LYLq31OeCxvJls51gSOOB/NlYxq2CjKDHy2PmwBjJIFU f+ETu44pBDJa
qyWlkkCkuVMtvI8mG3bmCklRnLMOT1HOro1hqMMuq3OoraRy3syyLHbyM6oB EiYLFVJOVPOO
mKJJa2/rb/ghpf8Arsi5o2of2volhqXleT9rt0m8vdu2blBxnvjNUm1+WIap I+nSyx2c4t4V
td0sszFFbldoCD5gMlsdyRVrQbCXS/D2m6fOyNLbW0cLlCSpKqAcZxxxVbSN 323XYWimRjd7
1aSJlV1MSAFWIw3IPQnGOaJW5pcvnb70S9Lev6Mn0rWU1HSLC+aCWJru0W68 tUaQICoJXcBg
n5uB1POBwazIfFc11Y313DpUka2l6ls0d3IYnZGVD5m3aSD+8GEOD67TwNLQ rK60rRdL06UQ
uLa0SKWRJD99VUfKNvIPzckjoODnjJ1KwnsrTWHZHmOoahDJClvE8jABYl+Y Acf6tjnoBjJo
la8rfL7/APIfQ7BPuCnU1PuCnVqtiAooopgFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFA
BRRRQAVXvrSPUNPubKUssdxE0TlDggMCDj35qxRQ1fQcZOLUlujzv4S3klxp N5BJIGFsyJGu
BlUJdv8A0JmOT/SvRK8/8Gu1l4/8V6dPGyzzy/aUxgjZvJGTnqRKp/POK9Ar DDu9NJ9NPuPU
zqKWNnOO0rS/8CSf5sKKKK3PKCiiigDz/wARo2ofFbw5YTSMLeGL7SirgEOC 7dcdD5SA+w4x
XoFef26NqHxquzPIxGnWYMAGAACqgg8cj9659c47cV6BWFDVzfn+R62ae7Ch TXSCfzk2/wBV
cKxP7CZTHdpIxvhN5rbp38v5uGAXp90kA47CtuiumM3HY8hpPc5+20bULS1K wzxLMLO3gBDE
ZKFiwzjgEHAOCR1xTItFvo7adWigcyXAmCPezFlwgXibG8HjrjoSK6OitPby 1fcn2aKmmwT2
1jHFcy+ZKCSTvL4BJIXceWwMDJ5OM1boorJu7uUlZWCiiikMKqSf8he2/wCu Ev8A6FHVuq9x
aGeaOVZ5YXRWUGPacg4JzuB/uimhMsUVU+xz/wDQSuv++Yv/AIij7HP/ANBK 6/75i/8AiKLe
YXLdFVPsc/8A0Err/vmL/wCIo+xz/wDQSuv++Yv/AIii3mFy3RVT7HP/ANBK 6/75i/8AiKPs
c/8A0Err/vmL/wCIot5hct0VU+xz/wDQSuv++Yv/AIij7HP/ANBK6/75i/8A iKLeYXLdFVPs
c/8A0Err/vmL/wCIo+xz/wDQSuv++Yv/AIii3mFy3RVT7HP/ANBK6/75i/8A iKPsc/8A0Err
/vmL/wCIot5hct0VU+xz/wDQSuv++Yv/AIij7HP/ANBK6/75i/8AiKLeYXLd FVPsc/8A0Err
/vmL/wCIo+xz/wDQSuv++Yv/AIii3mFy3RVT7HP/ANBK6/75i/8AiKPsc/8A 0Err/vmL/wCI
ot5hct0VU+xz/wDQSuv++Yv/AIij7HP/ANBK6/75i/8AiKLeYXLdFVPsc/8A 0Err/vmL/wCI
o+xz/wDQSuv++Yv/AIii3mFy3RVT7HP/ANBK6/75i/8AiKPsc/8A0Err/vmL /wCIot5hct0V
U+xz/wDQSuv++Yv/AIij7HP/ANBK6/75i/8AiKLeYXLdFVPsc/8A0Err/vmL /wCIo+xz/wDQ
Suv++Yv/AIii3mFy3RVT7HP/ANBK6/75i/8AiKPsc/8A0Err/vmL/wCIot5h ct0VU+xz/wDQ
Suv++Yv/AIij7HP/ANBK6/75i/8AiKLeYXLdFVPsc/8A0Err/vmL/wCIo+xz /wDQSuv++Yv/
AIii3mFy3RVT7HP/ANBK6/75i/8AiKPsc/8A0Err/vmL/wCIot5hct0VU+xz /wDQSuv++Yv/
AIij7HP/ANBK6/75i/8Ai
Re: Limit Copy, Paste, Cut keyboard shortcuts to EMF tree only (not the entire editor) [message #416352 is a reply to message #416343] Tue, 29 January 2008 07:50 Go to previous messageGo to next message
Thomas Schindl is currently offline Thomas SchindlFriend
Messages: 6651
Registered: July 2009
Senior Member
Ed Merks schrieb:
> Mircea,
>
> Gosh, I don't have a lot of experience with this type of thing. I hope
> someone else has some clue, because I won't even know where to begin.
> Maybe Tom will read this and have an idea...
>
>

Tom has read it :-) I'm not really skilled when it comes to all those
key-binding thingies.

But the following could work. If your TextWidget receives focus I'd try
to reset the copy/cut/paste actions to their original counter parts:

widget.addFocusListener( new FocusListener() {
IAction emfcutaction =
actionBars.getGlobalActionHandler(ActionFactory.CUT.getId()) ;
IAction emfcopyaction =
actionBars.getGlobalActionHandler(ActionFactory.COPY.getId() );
IAction emfpasteaction =
actionBars.getGlobalActionHandler(ActionFactory.PASTE.getId( ));

IAction standardCut = ActionFactory.CUT.create(....);
IAction standardCopy = ActionFactory.COPY.create(....);
IAction standardPaste = ActionFactory.PASTE.create(....);

public void focusLost(FocusEvent e) {

actionbars.setGlobalActionHandler(ActionFactory.CUT.getId(), emfcutaction);
actionbars.setGlobalActionHandler(ActionFactory.COPY.getId() ,emfcopyaction);

actionbars.setGlobalActionHandler(ActionFactory.PASTE.getId( ),emfpasteaction);
actionbars.updateActionBars();
}

public void focusGained(FocusEvent e) {
actionbars.setGlobalActionHandler(ActionFactory.CUT.getId(), standardCut);
actionbars.setGlobalActionHandler(ActionFactory.COPY.getId() ,standardCopy);
actionbars.setGlobalActionHandler(ActionFactory.PASTE.getId( ),standardPaste);
actionbars.updateActionBars();
}
});

If this works it would be great if the EditingDomainActionBarContributor
would provide a possibility to restore the actions.

Another possible solution that comes to my mind is usage of the commands
framework. I don't know if COPY/CUT/PASTE are handled by commands (but
Paul knows so I've added eclipse.platform to the CC list :-).

Tom

> M. Luchian wrote:
>> Hello,
>>
>> The EditingDomainActionBarContributor.java class defined in the EMF
>> plugins overrides the Windows CUT/COPY/PASTE actions' keyboard
>> shortcuts (CTRL-X, CTRL-C, CTRL-V) with EMF's own.
>>
>> This is correct as long as the actions are performed on the tree.
>> However, I implemented an editor based on eclipse forms, with text
>> widgets (Windows native) handling the COPY CUT PASTE actions with a
>> right click of a mouse. As the mouse actions work fine and interact
>> with the windows' clipboard, pressing the keyboard shortcuts for the
>> same actions in the text widgets will call the actions reserved by EMF
>> .. This is problematic as the CTRL-X, CTRL-C, CTRL-V shortcuts are
>> overridden with the EMF copy, cut, paste actions for the entire editor.
>>
>> Is there a possible way to register the actions for the editor's tree
>> only? (See picture)
>>
>>
>>
>> I have a CustomEditingDomainActionBarContributor.java replacing a few
>> small things from the original EditingDomainActionBarContributor.java
>> class, but I don't want to manage the registering / unregistering the
>> copy, cut and paste actions when the tree is in focus or not.
>>
>> Any help appreciated
>>
>> Thanks,
>>
>> Mircea
>


--
B e s t S o l u t i o n . at
------------------------------------------------------------ --------
Tom Schindl JFace-Committer
------------------------------------------------------------ --------
Re: Limit Copy, Paste, Cut keyboard shortcuts to EMF tree only (not the entire editor) [message #416360 is a reply to message #416352] Tue, 29 January 2008 11:38 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 33142
Registered: July 2009
Senior Member
Tom,

All that command stuff came long after we'd already done the EMF.Edit
support. It's impossible to keep up with the Jone's when there are
dozens of them and only two or three of us. Maybe an Eclipse 4.0 effort
would allow us to throw away some of the cruft and focus on supporting
only the latests and greatest patterns.

I'd be happy to provide hooks for whatever solution works well for this
type of scenario. I hope we can find at least a bit of time this
release to look at how to support forms and exploit data binding. I'm
kind of sick and tired of the limitations of the crummy properties view
(which doesn't even work for RAP).


Tom Schindl wrote:
> Ed Merks schrieb:
>> Mircea,
>>
>> Gosh, I don't have a lot of experience with this type of thing. I
>> hope someone else has some clue, because I won't even know where to
>> begin. Maybe Tom will read this and have an idea...
>>
>>
>
> Tom has read it :-) I'm not really skilled when it comes to all those
> key-binding thingies.
>
> But the following could work. If your TextWidget receives focus I'd
> try to reset the copy/cut/paste actions to their original counter parts:
>
> widget.addFocusListener( new FocusListener() {
> IAction emfcutaction =
> actionBars.getGlobalActionHandler(ActionFactory.CUT.getId()) ;
> IAction emfcopyaction =
> actionBars.getGlobalActionHandler(ActionFactory.COPY.getId() );
> IAction emfpasteaction =
> actionBars.getGlobalActionHandler(ActionFactory.PASTE.getId( ));
>
> IAction standardCut = ActionFactory.CUT.create(....);
> IAction standardCopy = ActionFactory.COPY.create(....);
> IAction standardPaste = ActionFactory.PASTE.create(....);
>
> public void focusLost(FocusEvent e) {
>
> actionbars.setGlobalActionHandler(ActionFactory.CUT.getId(), emfcutaction);
>
> actionbars.setGlobalActionHandler(ActionFactory.COPY.getId() ,emfcopyaction);
>
> actionbars.setGlobalActionHandler(ActionFactory.PASTE.getId( ),emfpasteaction);
>
> actionbars.updateActionBars();
> }
>
> public void focusGained(FocusEvent e) {
> actionbars.setGlobalActionHandler(ActionFactory.CUT.getId(), standardCut);
> actionbars.setGlobalActionHandler(ActionFactory.COPY.getId() ,standardCopy);
>
> actionbars.setGlobalActionHandler(ActionFactory.PASTE.getId( ),standardPaste);
>
> actionbars.updateActionBars();
> }
> });
>
> If this works it would be great if the
> EditingDomainActionBarContributor would provide a possibility to
> restore the actions.
>
> Another possible solution that comes to my mind is usage of the
> commands framework. I don't know if COPY/CUT/PASTE are handled by
> commands (but Paul knows so I've added eclipse.platform to the CC list
> :-).
>
> Tom
>
>> M. Luchian wrote:
>>> Hello,
>>>
>>> The EditingDomainActionBarContributor.java class defined in the EMF
>>> plugins overrides the Windows CUT/COPY/PASTE actions' keyboard
>>> shortcuts (CTRL-X, CTRL-C, CTRL-V) with EMF's own.
>>>
>>> This is correct as long as the actions are performed on the tree.
>>> However, I implemented an editor based on eclipse forms, with text
>>> widgets (Windows native) handling the COPY CUT PASTE actions with a
>>> right click of a mouse. As the mouse actions work fine and interact
>>> with the windows' clipboard, pressing the keyboard shortcuts for the
>>> same actions in the text widgets will call the actions reserved by
>>> EMF .. This is problematic as the CTRL-X, CTRL-C, CTRL-V shortcuts
>>> are overridden with the EMF copy, cut, paste actions for the entire
>>> editor.
>>>
>>> Is there a possible way to register the actions for the editor's
>>> tree only? (See picture)
>>>
>>>
>>>
>>> I have a CustomEditingDomainActionBarContributor.java replacing a
>>> few small things from the original
>>> EditingDomainActionBarContributor.java class, but I don't want to
>>> manage the registering / unregistering the copy, cut and paste
>>> actions when the tree is in focus or not.
>>>
>>> Any help appreciated
>>>
>>> Thanks,
>>>
>>> Mircea
>>
>
>


Ed Merks
Professional Support: https://www.macromodeling.com/
Re: Limit Copy, Paste, Cut keyboard shortcuts to EMF tree only (not the entire editor) [message #416381 is a reply to message #416352] Tue, 29 January 2008 21:06 Go to previous messageGo to next message
Mircea Luchian is currently offline Mircea LuchianFriend
Messages: 89
Registered: July 2009
Member
This is a multi-part message in MIME format.
--------------010508000907040505010103
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Hello Tom,

Thank you for the focus listener solution. I added the listeners on
every text widget that accepts a copy, paste, cut command set. The EMF
actions are disabled successfully while the focus is in the text widgets
and enabled when the focus goes out. However, the keyboard shortcuts for
the normal cut, paste, copy actions are not properly initialized.
Pressing CTRL-X, CTRL-C or CTRL-V does nothing while the focus is in one
of these widgets.

Would it be possible that I pass the wrong workbench window to these
three actions? Here is how I initialized them below:

IAction standardCut =
ActionFactory.CUT.create(editor.getEditorSite().getWorkbench Window());
IAction standardCopy =
ActionFactory.COPY.create(editor.getEditorSite().getWorkbenc hWindow());
IAction standardPaste =
ActionFactory.PASTE.create(editor.getEditorSite().getWorkben chWindow());

Thanks,

Mircea


Tom Schindl wrote:
> Ed Merks schrieb:
>> Mircea,
>>
>> Gosh, I don't have a lot of experience with this type of thing. I
>> hope someone else has some clue, because I won't even know where to
>> begin. Maybe Tom will read this and have an idea...
>>
>>
>
> Tom has read it :-) I'm not really skilled when it comes to all those
> key-binding thingies.
>
> But the following could work. If your TextWidget receives focus I'd
> try to reset the copy/cut/paste actions to their original counter parts:
>
> widget.addFocusListener( new FocusListener() {
> IAction emfcutaction =
> actionBars.getGlobalActionHandler(ActionFactory.CUT.getId()) ;
> IAction emfcopyaction =
> actionBars.getGlobalActionHandler(ActionFactory.COPY.getId() );
> IAction emfpasteaction =
> actionBars.getGlobalActionHandler(ActionFactory.PASTE.getId( ));
>
> IAction standardCut = ActionFactory.CUT.create(....);
> IAction standardCopy = ActionFactory.COPY.create(....);
> IAction standardPaste = ActionFactory.PASTE.create(....);
>
> public void focusLost(FocusEvent e) {
>
> actionbars.setGlobalActionHandler(ActionFactory.CUT.getId(), emfcutaction);
>
> actionbars.setGlobalActionHandler(ActionFactory.COPY.getId() ,emfcopyaction);
>
> actionbars.setGlobalActionHandler(ActionFactory.PASTE.getId( ),emfpasteaction);
>
> actionbars.updateActionBars();
> }
>
> public void focusGained(FocusEvent e) {
> actionbars.setGlobalActionHandler(ActionFactory.CUT.getId(), standardCut);
> actionbars.setGlobalActionHandler(ActionFactory.COPY.getId() ,standardCopy);
>
> actionbars.setGlobalActionHandler(ActionFactory.PASTE.getId( ),standardPaste);
>
> actionbars.updateActionBars();
> }
> });
>
> If this works it would be great if the
> EditingDomainActionBarContributor would provide a possibility to
> restore the actions.
>
> Another possible solution that comes to my mind is usage of the
> commands framework. I don't know if COPY/CUT/PASTE are handled by
> commands (but Paul knows so I've added eclipse.platform to the CC list
> :-).
>
> Tom
>
>> M. Luchian wrote:
>>> Hello,
>>>
>>> The EditingDomainActionBarContributor.java class defined in the EMF
>>> plugins overrides the Windows CUT/COPY/PASTE actions' keyboard
>>> shortcuts (CTRL-X, CTRL-C, CTRL-V) with EMF's own.
>>>
>>> This is correct as long as the actions are performed on the tree.
>>> However, I implemented an editor based on eclipse forms, with text
>>> widgets (Windows native) handling the COPY CUT PASTE actions with a
>>> right click of a mouse. As the mouse actions work fine and interact
>>> with the windows' clipboard, pressing the keyboard shortcuts for the
>>> same actions in the text widgets will call the actions reserved by
>>> EMF .. This is problematic as the CTRL-X, CTRL-C, CTRL-V shortcuts
>>> are overridden with the EMF copy, cut, paste actions for the entire
>>> editor.
>>>
>>> Is there a possible way to register the actions for the editor's
>>> tree only? (See picture)
>>>
>>>
>>>
>>> I have a CustomEditingDomainActionBarContributor.java replacing a
>>> few small things from the original
>>> EditingDomainActionBarContributor.java class, but I don't want to
>>> manage the registering / unregistering the copy, cut and paste
>>> actions when the tree is in focus or not.
>>>
>>> Any help appreciated
>>>
>>> Thanks,
>>>
>>> Mircea
>>
>
>


--------------010508000907040505010103
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">
Hello Tom, <br>
<br>
Thank you for the focus listener solution. I added the listeners on
every text widget that accepts a copy, paste, cut command set. The EMF
actions are disabled successfully while the focus is in the text
widgets and enabled when the focus goes out. However, the keyboard
shortcuts for the normal cut, paste, copy actions are not properly
initialized. Pressing CTRL-X, CTRL-C or CTRL-V does nothing while the
focus is in one of these widgets.<br>
<br>
Would it be possible that I pass the wrong workbench window to these
three actions? Here is how I initialized them below: <br>
<br>
<font face="Courier New, Courier, monospace">&nbsp;&nbsp;&nbsp; IAction standardCut =
ActionFactory.CUT.create(editor.getEditorSite().getWorkbench Window());
<br>
&nbsp;&nbsp;&nbsp; IAction standardCopy =
ActionFactory.COPY.create(editor.getEditorSite().getWorkbenc hWindow());
<br>
&nbsp;&nbsp;&nbsp; IAction standardPaste =
ActionFactory.PASTE.create(editor.getEditorSite().getWorkben chWindow());
</font><br>
<br>
Thanks, <br>
<br>
Mircea<br>
<br>
<br>
Tom Schindl wrote:
<blockquote cite="midfnmlsf$nbi$1@build.eclipse.org" type="cite">Ed
Merks schrieb:
<br>
<blockquote type="cite">Mircea,
<br>
<br>
Gosh, I don't have a lot of experience with this type of thing.&nbsp;&nbsp; I
hope someone else has some clue, because I won't even know where to
begin.&nbsp; Maybe Tom will read this and have an idea...
<br>
<br>
<br>
</blockquote>
<br>
Tom has read it :-) I'm not really skilled when it comes to all those
key-binding thingies.
<br>
<br>
But the following could work. If your TextWidget receives focus I'd try
to reset the copy/cut/paste actions to their original counter parts:
<br>
<br>
widget.addFocusListener( new FocusListener() {
<br>
&nbsp;&nbsp;&nbsp; IAction emfcutaction =
actionBars.getGlobalActionHandler(ActionFactory.CUT.getId()) ;
<br>
&nbsp;&nbsp;&nbsp; IAction emfcopyaction =
actionBars.getGlobalActionHandler(ActionFactory.COPY.getId() );
<br>
&nbsp;&nbsp;&nbsp; IAction emfpasteaction =
actionBars.getGlobalActionHandler(ActionFactory.PASTE.getId( ));
<br>
<br>
&nbsp;&nbsp;&nbsp; IAction standardCut = ActionFactory.CUT.create(....);
<br>
&nbsp;&nbsp;&nbsp; IAction standardCopy = ActionFactory.COPY.create(....);
<br>
&nbsp;&nbsp;&nbsp; IAction standardPaste = ActionFactory.PASTE.create(....);
<br>
<br>
&nbsp;&nbsp;&nbsp; public void focusLost(FocusEvent e) {
<br>
<br>
actionbars.setGlobalActionHandler(ActionFactory.CUT.getId(), emfcutaction);
<br>
actionbars.setGlobalActionHandler(ActionFactory.COPY.getId() ,emfcopyaction);
<br>
actionbars.setGlobalActionHandler(ActionFactory.PASTE.getId( ),emfpasteaction);
<br>
actionbars.updateActionBars();
<br>
&nbsp;&nbsp;&nbsp; }
<br>
<br>
&nbsp;&nbsp;&nbsp; public void focusGained(FocusEvent e) {
<br>
actionbars.setGlobalActionHandler(ActionFactory.CUT.getId(), standardCut);
<br>
actionbars.setGlobalActionHandler(ActionFactory.COPY.getId() ,standardCopy);
<br>
actionbars.setGlobalActionHandler(ActionFactory.PASTE.getId( ),standardPaste);
<br>
actionbars.updateActionBars();
<br>
&nbsp;&nbsp;&nbsp; }
<br>
});
<br>
<br>
If this works it would be great if the
EditingDomainActionBarContributor would provide a possibility to
restore the actions.
<br>
<br>
Another possible solution that comes to my mind is usage of the
commands framework. I don't know if COPY/CUT/PASTE are handled by
commands (but Paul knows so I've added eclipse.platform to the CC list
:-).
<br>
<br>
Tom
<br>
<br>
<blockquote type="cite">M. Luchian wrote:
<br>
<blockquote type="cite">Hello,
<br>
<br>
The EditingDomainActionBarContributor.java class defined in the EMF
plugins overrides the Windows CUT/COPY/PASTE actions' keyboard
shortcuts (CTRL-X, CTRL-C, CTRL-V) with EMF's own.
<br>
<br>
This is correct as long as the actions are performed on the tree.
However, I implemented an editor based on eclipse forms, with text
widgets (Windows native) handling the COPY CUT PASTE actions with a
right click of a mouse. As the mouse actions work fine and interact
with the windows' clipboard, pressing the keyboard shortcuts for the
same actions in the text widgets will call the actions reserved by EMF
... This is problematic as the CTRL-X, CTRL-C, CTRL-V shortcuts are
overridden with the EMF copy, cut, paste actions for the entire editor.
<br>
<br>
Is there a possible way to register the actions for the editor's tree
only? (See picture)
<br>
<br>
<br>
<br>
I have a CustomEditingDomainActionBarContributor.java replacing a few
small things from the original EditingDomainActionBarContributor.java
class, but I don't want to manage the registering / unregistering the
copy, cut and paste actions when the tree is in focus or not.
<br>
<br>
Any help appreciated
<br>
<br>
Thanks,
<br>
<br>
Mircea </blockquote>
<br>
</blockquote>
<br>
<br>
</blockquote>
<br>
</body>
</html>

--------------010508000907040505010103--
Re: Limit Copy, Paste, Cut keyboard shortcuts to EMF tree only (not the entire editor) [message #416383 is a reply to message #416381] Tue, 29 January 2008 21:39 Go to previous messageGo to next message
Thomas Schindl is currently offline Thomas SchindlFriend
Messages: 6651
Registered: July 2009
Senior Member
Mircea Luchian schrieb:
> Hello Tom,
>
> Thank you for the focus listener solution. I added the listeners on
> every text widget that accepts a copy, paste, cut command set. The EMF
> actions are disabled successfully while the focus is in the text widgets
> and enabled when the focus goes out. However, the keyboard shortcuts for
> the normal cut, paste, copy actions are not properly initialized.
> Pressing CTRL-X, CTRL-C or CTRL-V does nothing while the focus is in one
> of these widgets.
>
> Would it be possible that I pass the wrong workbench window to these
> three actions? Here is how I initialized them below:
>
> IAction standardCut =
> ActionFactory.CUT.create(editor.getEditorSite().getWorkbench Window());
> IAction standardCopy =
> ActionFactory.COPY.create(editor.getEditorSite().getWorkbenc hWindow());
> IAction standardPaste =
> ActionFactory.PASTE.create(editor.getEditorSite().getWorkben chWindow());
>

This might not be 100% correct, those WorkbenchWindow-Actions are
special ones because they are retargetabe. Maybe it is a enough to set
your own anonmyous instance.

As said those are only guesses, I've never worked with those actions
myself :-(

Tom

--
B e s t S o l u t i o n . at
------------------------------------------------------------ --------
Tom Schindl JFace-Committer
------------------------------------------------------------ --------
Re: Limit Copy, Paste, Cut keyboard shortcuts to EMF tree only (not the entire editor) [message #416405 is a reply to message #416381] Wed, 30 January 2008 14:41 Go to previous messageGo to next message
Paul Webster is currently offline Paul WebsterFriend
Messages: 6859
Registered: July 2009
Location: Ottawa
Senior Member

Mircea Luchian wrote:
>
> Would it be possible that I pass the wrong workbench window to these
> three actions? Here is how I initialized them below:
>
> IAction standardCut =
> ActionFactory.CUT.create(editor.getEditorSite().getWorkbench Window());
> IAction standardCopy =
> ActionFactory.COPY.create(editor.getEditorSite().getWorkbenc hWindow());
> IAction standardPaste =
> ActionFactory.PASTE.create(editor.getEditorSite().getWorkben chWindow());

As Tom mentioned, the ActionFactory actions are retargetable (and not
even that in 3.4). They don't do anything, they just delegate execution
to something else.

If you need to have "copy" work as *either* normal copy in the current
text control *or* run your copy action to deal with something in the
part (a graphical object, for example) you can use
org.eclipse.ui.actions.TextActionHandler

PW


--
Paul Webster
http://wiki.eclipse.org/Platform_Command_Framework
http://wiki.eclipse.org/Command_Core_Expressions
http://wiki.eclipse.org/Menu_Contributions
http://wiki.eclipse.org/Menus_Extension_Mapping
http://help.eclipse.org/help33/index.jsp?topic=/org.eclipse. platform.doc.isv/guide/workbench.htm


Re: Limit Copy, Paste, Cut keyboard shortcuts to EMF tree only (not the entire editor) [message #416412 is a reply to message #416360] Wed, 30 January 2008 16:16 Go to previous messageGo to next message
Mircea Luchian is currently offline Mircea LuchianFriend
Messages: 89
Registered: July 2009
Member
This is a multi-part message in MIME format.
--------------060600010109030808000101
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Hello Ed,

I agree with your point on the properties view. It's purpose is
justified for requirements not needing GUI validation, however, to
implement on the spot GUI validation, the Properties view is not
sufficient. For this reason, I believe an effort in 4.0 should be
reserved towards the adjustment of the JET templates to generate an EMF
editor using eclipse forms.

Here are the main changes I made. I feel that some of them could be
improvements made for 4.0 whenever possible.

* I created a composite panel for every node in the tree. I modified
the ObjectDetailsPage and removed the SampleSection inner class. I
replaced it with a DetailsSection class responsible to create the
panels and update them in function of the "Object input" variable

private void detailsPageSwitch(final Object input)
{
sampleSectionHolder = new DetailSection(toolkit, input,
adapterFactoryItemDelegator, adapterFactoryLabelProvider,
mform.getMessageManager(), this);
ScrolledPropertiesBlock.setDetailsPage(this);
sampleSectionHolder.createSection(input);
}

public void update()
{

detailsSection.setText(adapterFactoryItemDelegator.getText(i nput));
detailsSection.layout();
ScrolledPropertiesBlock.setDetailsPage(this);
sampleSectionHolder.updateSection(input);
}

With the detailsPageSwitch(), I pass the message manager of the
managed form (mform) SrolledPropertiesBlock class to every panel.
As such, the panels now have control on the message manager and
can add / remove errors depending whether the user types in a
widget or switches from the one node to another.
_
_

* There is one "problem" with radio buttons (A = "true" and B =
"false" initially) attached to boolean attributes in EMF.

and

As radio buttons are mutually exclusive, setting B, unsets A
automatically. This will register as two actions in the EMF's
command stack (B = "true", then A = "false"). If the user presses
undo once, the B radio button will be "false" leaving A radio
button "false" as well. The user must execute a second undo
action to revert to the initial state.

To prevent this from happening, I had to "hack" the
EditingDomainActionBarContributor class located in
org.eclipse.emf.edit.ui.action so I can call cutom Undo and Redo
actions.

I created the following and put all custom code in my plugin:

public class CustomEditingDomainActionBarContributor extends
MultiPageEditorActionBarContributor implements IMenuListener,
IPropertyListener {
[....]

protected CustomUndoAction customUndoAction;

protected CustomRedoAction customRedoAction;
[....]
}

Custom Undo/Redo actions call themselves recursively if they
detect that variables reserved for a group of mutually exclusive
radio buttons are all set to false

public class CustomRedoAction extends RedoAction {

@Override
public void run()
{
super.run();
MyEditor.updateFromRedoUndo();

Command mostRecentCommand =
domain.getCommandStack().getMostRecentCommand();

if (mostRecentCommand instanceof SetCommand)
{
SetCommand mostRecentSetCommand = (SetCommand)
mostRecentCommand;
EObject owner = mostRecentSetCommand.getOwner();


/*********************************************************** ************************************************
* MyNodeImpl OWNER

************************************************************ **********************************************/
if (owner instanceof MyNodeImpl)
{
if (!((MyNodeImpl) owner).isReadOnly() &&
!((MyNodeImpl) owner).isReadWrite() && !((MyNodeImpl)
owner).isWriteOnly())
run(); // RUN AGAIN TO SET THE RADIO BUTTON
THAT WAS DESELECTED
[....]
_



_
* The eclipse forms panels (with every widget bound to the model)
was not updated during an Undo or Redo action. I added both
actions a MyEditor.updateFromRedoUndo(); statement that calls the
editor to refresh the current selected panel in the Scrolled
properties block:

public static void updateFromRedoUndo()
{
try
{
if
(scrolledPropertiesBlock.treeViewer.getTree().getSelection() .length
!= 0)
{
scrolledPropertiesBlock.getObjectDetailsPage().update();
}
}
catch (Exception e)
{
}
}_
_
This update mechanism for the eclipse forms does not exist on the
EMF example found on the net.
_
_
_

_
* I added error and warning status variables for every node in the
model. This is really custom work, however with the usage of the
eclispe forms' message manager, this complements very well the
user experience.
Data can have errors or warnings in the panels, so I changed the
item providers for every node to display the icons in an
error/warning state. Whenever we use validation on such panels,
the nodes in the tree must reflect these same error states for
later correction (say the errors exist but the user chooses to
save/closes his file and chooses fix the errors later during the
day; he must then know where the errors are...).

I also made the parent nodes aware if their children have errors
or warnings so they can be propagated to the root node. This makes
the errors easier to search if the nodes are collapsed. How the
error/warning flags are initialized on the faulty node is custom
implementation, however, the error propagation to the parent nodes
is performed in the model's implementation classes. Only the
latter mechanism could be accomodated in a future version of EMF.
See pictures below for a better understanding. I had to hide some
information as the product is still under development.

1.
2.
3.
4.
5.
6.No more errors / warnings in the tree

Thanks,

Mircea





Ed Merks wrote:
> Tom,
>
> All that command stuff came long after we'd already done the EMF.Edit
> support. It's impossible to keep up with the Jone's when there are
> dozens of them and only two or three of us. Maybe an Eclipse 4.0
> effort would allow us to throw away some of the cruft and focus on
> supporting only the latests and greatest patterns.
>
> I'd be happy to provide hooks for whatever solution works well for
> this type of scenario. I hope we can find at least a bit of time this
> release to look at how to support forms and exploit data binding. I'm
> kind of sick and tired of the limitations of the crummy properties
> view (which doesn't even work for RAP).
>
>
> Tom Schindl wrote:
>> Ed Merks schrieb:
>>> Mircea,
>>>
>>> Gosh, I don't have a lot of experience with this type of thing. I
>>> hope someone else has some clue, because I won't even know where to
>>> begin. Maybe Tom will read this and have an idea...
>>>
>>>
>>
>> Tom has read it :-) I'm not really skilled when it comes to all those
>> key-binding thingies.
>>
>> But the following could work. If your TextWidget receives focus I'd
>> try to reset the copy/cut/paste actions to their original counter parts:
>>
>> widget.addFocusListener( new FocusListener() {
>> IAction emfcutaction =
>> actionBars.getGlobalActionHandler(ActionFactory.CUT.getId()) ;
>> IAction emfcopyaction =
>> actionBars.getGlobalActionHandler(ActionFactory.COPY.getId() );
>> IAction emfpasteaction =
>> actionBars.getGlobalActionHandler(ActionFactory.PASTE.getId( ));
>>
>> IAction standardCut = ActionFactory.CUT.create(....);
>> IAction standardCopy = ActionFactory.COPY.create(....);
>> IAction standardPaste = ActionFactory.PASTE.create(....);
>>
>> public void focusLost(FocusEvent e) {
>>
>> actionbars.setGlobalActionHandler(ActionFactory.CUT.getId(), emfcutaction);
>>
>> actionbars.setGlobalActionHandler(ActionFactory.COPY.getId() ,emfcopyaction);
>>
>> actionbars.setGlobalActionHandler(ActionFactory.PASTE.getId( ),emfpasteaction);
>>
>> actionbars.updateActionBars();
>> }
>>
>> public void focusGained(FocusEvent e) {
>> actionbars.setGlobalActionHandler(ActionFactory.CUT.getId(), standardCut);
>>
>> actionbars.setGlobalActionHandler(ActionFactory.COPY.getId() ,standardCopy);
>>
>> actionbars.setGlobalActionHandler(ActionFactory.PASTE.getId( ),standardPaste);
>>
>> actionbars.updateActionBars();
>> }
>> });
>>
>> If this works it would be great if the
>> EditingDomainActionBarContributor would provide a possibility to
>> restore the actions.
>>
>> Another possible solution that comes to my mind is usage of the
>> commands framework. I don't know if COPY/CUT/PASTE are handled by
>> commands (but Paul knows so I've added eclipse.platform to the CC
>> list :-).
>>
>> Tom
>>
>>> M. Luchian wrote:
>>>> Hello,
>>>>
>>>> The EditingDomainActionBarContributor.java class defined in the EMF
>>>> plugins overrides the Windows CUT/COPY/PASTE actions' keyboard
>>>> shortcuts (CTRL-X, CTRL-C, CTRL-V) with EMF's own.
>>>>
>>>> This is correct as long as the actions are performed on the tree.
>>>> However, I implemented an editor based on eclipse forms, with text
>>>> widgets (Windows native) handling the COPY CUT PASTE actions with a
>>>> right click of a mouse. As the mouse actions work fine and interact
>>>> with the windows' clipboard, pressing the keyboard shortcuts for
>>>> the same actions in the text widgets will call the actions reserved
>>>> by EMF .. This is problematic as the CTRL-X, CTRL-C, CTRL-V
>>>> shortcuts are overridden with the EMF copy, cut, paste actions for
>>>> the entire editor.
>>>>
>>>> Is there a possible way to register the actions for the editor's
>>>> tree only? (See picture)
>>>>
>>>>
>>>>
>>>> I have a CustomEditingDomainActionBarContributor.java replacing a
>>>> few small things from the original
>>>> EditingDomainActionBarContributor.java class, but I don't want to
>>>> manage the registering / unregistering the copy, cut and paste
>>>> actions when the tree is in focus or not.
>>>>
>>>> Any help appreciated
>>>>
>>>> Thanks,
>>>>
>>>> Mircea
>>>
>>
>>


--------------060600010109030808000101
Content-Type: multipart/related;
boundary="------------090307060804040709080604"


--------------090307060804040709080604
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">
Hello Ed, <br>
<br>
I agree with your point on the properties view. It's purpose is
justified for requirements not needing GUI validation, however, to
implement on the spot GUI validation, the Properties view is not
sufficient. For this reason, I believe an effort in 4.0 should be
reserved towards the adjustment of the JET templates to generate an EMF
editor using eclipse forms. <br>
<br>
Here are the main changes I made. I feel that some of them could be
improvements made for 4.0 whenever possible.<br>
<br>
<ul>
<li>I created a composite panel for every node in the tree. I
modified the ObjectDetailsPage and removed the SampleSection inner
class. I replaced it with a DetailsSection class responsible to create
the panels and update them in function of the "Object input" variable<br>
<br>
<font face="Courier New">private void detailsPageSwitch(final
Object input)<br>
{<br>
&nbsp;&nbsp;&nbsp;&nbsp; sampleSectionHolder = new DetailSection(toolkit, input,
adapterFactoryItemDelegator, adapterFactoryLabelProvider,
mform.getMessageManager(), this);<br>
&nbsp;&nbsp;&nbsp;&nbsp; ScrolledPropertiesBlock.setDetailsPage(this);<br>
&nbsp;&nbsp;&nbsp;&nbsp; sampleSectionHolder.createSection(input);<br>
}<br>
<br>
public void update()<br>
{<br>
&nbsp;&nbsp;&nbsp;&nbsp; detailsSection.setText(adapterFactoryItemDelegator.getText(i nput)); <br>
&nbsp;&nbsp;&nbsp;&nbsp; detailsSection.layout();<br>
&nbsp;&nbsp;&nbsp;&nbsp; ScrolledPropertiesBlock.setDetailsPage(this);<br>
&nbsp;&nbsp;&nbsp;&nbsp; sampleSectionHolder.updateSection(input);<br>
}<br>
<br>
</font>With the detailsPageSwitch(), I pass the message manager of
the managed form (mform) SrolledPropertiesBlock class to every panel.
As such, the panels now have control on the message manager and can add
/ remove errors depending whether the user types in a widget or
switches from the one node to another. <br>
<u> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
</u><br>
</li>
</ul>
<ul>
<li>There is one "problem" with radio buttons (A = "true" and B =
"false" initially) attached to boolean attributes in EMF.<br>
<br>
<img src="cid:part1.09000005.08090205@matrox.com" alt=""> and <img
src="cid:part2.06000707.00060204@matrox.com" alt=""><br>
<br>
As radio buttons are mutually exclusive, setting B, unsets A
automatically. This will register as two actions in the EMF's command
stack (B = "true", then A = "false"). If the user presses undo once,
the B radio button will be "false"&nbsp; leaving&nbsp; A radio button "false" as
well.&nbsp; The user must execute a second undo action to revert to the
initial state. <br>
<br>
To prevent this from happening, I had to "hack" the <font
face="Courier New, Courier, monospace">EditingDomainActionBarContributor</font>
class located in <font face="Courier New, Courier, monospace">org.eclipse.emf.edit.ui.action</font>&nbsp;
so I can call cutom Undo and Redo actions. <br>
<br>
I created the following and put all custom code in my plugin:<br>
<br>
<font face="Courier New, Courier, monospace">public class
CustomEditingDomainActionBarContributor extends
MultiPageEditorActionBarContributor implements IMenuListener,
IPropertyListener {<br>
[....]<br>
<br>
&nbsp;&nbsp;&nbsp; protected CustomUndoAction customUndoAction;<br>
<br>
&nbsp;&nbsp;&nbsp; protected CustomRedoAction customRedoAction;<br>
[....]<br>
}<br>
<br>
</font>Custom Undo/Redo actions call themselves recursively if they
detect that variables reserved for a group of mutually exclusive radio
buttons are all set to false<br>
<font face="Courier New, Courier, monospace"><br>
public class CustomRedoAction extends RedoAction {<br>
<br>
&nbsp;&nbsp;&nbsp; @Override<br>
&nbsp;&nbsp;&nbsp; public void run()<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; super.run();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MyEditor.updateFromRedoUndo();<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Command mostRecentCommand =
domain.getCommandStack().getMostRecentCommand();<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (mostRecentCommand instanceof SetCommand)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SetCommand mostRecentSetCommand = (SetCommand)
mostRecentCommand;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EObject owner = mostRecentSetCommand.getOwner();<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
/*********************************************************** ************************************************ <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* </font><font face="Courier New, Courier, monospace">MyNodeImpl
</font><font face="Courier New, Courier, monospace">OWNER<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;************************************************** ********************************************************/ <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (owner instanceof MyNodeImpl)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (!((</font><font
face="Courier New, Courier, monospace">MyNodeImpl</font><font
face="Courier New, Courier, monospace">) owner).isReadOnly()
&amp;&amp; !((</font><font face="Courier New, Courier, monospace">MyNodeImpl</font><font
face="Courier New, Courier, monospace">) owner).isReadWrite()
&amp;&amp; !((</font><font face="Courier New, Courier, monospace">MyNodeImpl</font><font
face="Courier New, Courier, monospace">) owner).isWriteOnly())<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; run(); // RUN AGAIN TO SET THE RADIO BUTTON THAT
WAS DESELECTED<br>
[....]<br>
</font><u> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
<br>
<br>
<br>
</u></li>
<li>The eclipse forms panels (with every widget bound to the model)
was not updated during an Undo or Redo action. I added both actions a&nbsp; <font
face="Courier New, Courier, monospace">MyEditor.updateFromRedoUndo();</font>
statement that calls the editor to refresh the current selected panel
in the Scrolled properties block: <br>
<br>
<font face="Courier New, Courier, monospace">public static void
updateFromRedoUndo()<br>
{<br>
&nbsp;&nbsp;&nbsp; try<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if
(scrolledPropertiesBlock.treeViewer.getTree().getSelection() .length !=
0)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; scrolledPropertiesBlock.getObjectDetailsPage().update();<br >
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; catch (Exception e)<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; }<br>
}</font><u><br>
</u><br>
This update mechanism for the eclipse forms does not exist on the EMF
example found on the net.<br>
<u> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;
</u><br>
<u> <br>
<br>
</u></li>
<li>I added error and warning status variables for every node in the
model. This is really custom work, however with the usage of the
eclispe forms' message manager, this complements very well the user
experience. <br>
Data can have errors or warnings in the panels, so I changed the item
providers for every node to display the icons in an error/warning
state. Whenever we use validation on such panels, the nodes in the tree
must reflect these same error states for later correction (say the
errors exist but the user chooses to save/closes his file and chooses
fix the errors later during the day; he must then know where the errors
are...).<br>
<br>
I also made the parent nodes aware if their children have errors or
warnings so they can be propagated to the root node. This makes the
errors easier to search if the nodes are collapsed. How the
error/warning flags are initialized on the faulty node is custom
implementation, however, the error propagation to the parent nodes is
performed in the model's implementation classes. Only the latter
mechanism could be accomodated in a future version of EMF. See pictures
below for a better understanding. I had to hide some information as the
product is still under development. <br>
<br>
1.<img src="cid:part3.07080308.06040607@matrox.com" alt=""> <br>
2.<img src="cid:part4.07050408.08000008@matrox.com" alt=""><br>
3.<img src="cid:part5.05000702.01070906@matrox.com" alt=""><br>
4.<img src="cid:part6.03040502.04020901@matrox.com" alt=""><br>
5.<img src="cid:part7.02090802.09010406@matrox.com" alt=""><br>
6.<img src="cid:part8.00080607.00060408@matrox.com" alt="">No more
errors / warnings in the tree<br>
<br>
</li>
</ul>
Thanks, <br>
<br>
Mircea<br>
<br>
<br>
<br>
<br>
<br>
Ed Merks wrote:
<blockquote cite="midfnn379$99b$1@build.eclipse.org" type="cite">Tom,
<br>
<br>
All that command stuff came long after we'd already done the EMF.Edit
support.&nbsp; It's impossible to keep up with the Jone's when there are
dozens of them and only two or three of us.&nbsp; Maybe an Eclipse 4.0
effort would allow us to throw away some of the cruft and focus on
supporting only the latests and greatest patterns.
<br>
<br>
I'd be happy to provide hooks for whatever solution works well for this
type of scenario.&nbsp; I hope we can find at least a bit of time this
release to look at how to support forms and exploit data binding.&nbsp; I'm
kind of sick and tired of the limitations of the crummy properties view
(which doesn't even work for RAP).
<br>
<br>
<br>
Tom Schindl wrote:
<br>
<blockquote type="cite">Ed Merks schrieb:
<br>
<blockquote type="cite">Mircea,
<br>
<br>
Gosh, I don't have a lot of experience with this type of thing.&nbsp;&nbsp; I
hope someone else has some clue, because I won't even know where to
begin.&nbsp; Maybe Tom will read this and have an idea...
<br>
<br>
<br>
</blockquote>
<br>
Tom has read it :-) I'm not really skilled when it comes to all those
key-binding thingies.
<br>
<br>
But the following could work. If your TextWidget receives focus I'd try
to reset the copy/cut/paste actions to their original counter parts:
<br>
<br>
widget.addFocusListener( new FocusListener() {
<br>
&nbsp;&nbsp;&nbsp; IAction emfcutaction =
actionBars.getGlobalActionHandler(ActionFactory.CUT.getId()) ;
<br>
&nbsp;&nbsp;&nbsp; IAction emfcopyaction =
actionBars.getGlobalActionHandler(ActionFactory.COPY.getId() );
<br>
&nbsp;&nbsp;&nbsp; IAction emfpasteaction =
actionBars.getGlobalActionHandler(ActionFactory.PASTE.getId( ));
<br>
<br>
&nbsp;&nbsp;&nbsp; IAction standardCut = ActionFactory.CUT.create(....);
<br>
&nbsp;&nbsp;&nbsp; IAction standardCopy = ActionFactory.COPY.create(....);
<br>
&nbsp;&nbsp;&nbsp; IAction standardPaste = ActionFactory.PASTE.create(....);
<br>
<br>
&nbsp;&nbsp;&nbsp; public void focusLost(FocusEvent e) {
<br>
<br>
actionbars.setGlobalActionHandler(ActionFactory.CUT.getId(), emfcutaction);
<br>
actionbars.setGlobalActionHandler(ActionFactory.COPY.getId() ,emfcopyaction);
<br>
actionbars.setGlobalActionHandler(ActionFactory.PASTE.getId( ),emfpasteaction);
<br>
actionbars.updateActionBars();
<br>
&nbsp;&nbsp;&nbsp; }
<br>
<br>
&nbsp;&nbsp;&nbsp; public void focusGained(FocusEvent e) {
<br>
actionbars.setGlobalActionHandler(ActionFactory.CUT.getId(), standardCut);
<br>
actionbars.setGlobalActionHandler(ActionFactory.COPY.getId() ,standardCopy);
<br>
actionbars.setGlobalActionHandler(ActionFactory.PASTE.getId( ),standardPaste);
<br>
actionbars.updateActionBars();
<br>
&nbsp;&nbsp;&nbsp; }
<br>
});
<br>
<br>
If this works it would be great if the
EditingDomainActionBarContributor would provide a possibility to
restore the actions.
<br>
<br>
Another possible solution that comes to my mind is usage of the
commands framework. I don't know if COPY/CUT/PASTE are handled by
commands (but Paul knows so I've added eclipse.platform to the CC list
:-).
<br>
<br>
Tom
<br>
<br>
<blockquote type="cite">M. Luchian wrote:
<br>
<blockquote type="cite">Hello,
<br>
<br>
The EditingDomainActionBarContributor.java class defined in the EMF
plugins overrides the Windows CUT/COPY/PASTE actions' keyboard
shortcuts (CTRL-X, CTRL-C, CTRL-V) with EMF's own.
<br>
<br>
This is correct as long as the actions are performed on the tree.
However, I implemented an editor based on eclipse forms, with text
widgets (Windows native) handling the COPY CUT PASTE actions with a
right click of a mouse. As the mouse actions work fine and interact
with the windows' clipboard, pressing the keyboard shortcuts for the
same actions in the text widgets will call the actions reserved by EMF
... This is problematic as the CTRL-X, CTRL-C, CTRL-V shortcuts are
overridden with the EMF copy, cut, paste actions for the entire editor.
<br>
<br>
Is there a possible way to register the actions for the editor's tree
only? (See picture)
<br>
<br>
<br>
<br>
I have a CustomEditingDomainActionBarContributor.java replacing a few
small things from the original EditingDomainActionBarContributor.java
class, but I don't want to manage the registering / unregistering the
copy, cut and paste actions when the tree is in focus or not.
<br>
<br>
Any help appreciated
<br>
<br>
Thanks,
<br>
<br>
Mircea </blockquote>
<br>
</blockquote>
<br>
<br>
</blockquote>
</blockquote>
<br>
</body>
</html>

--------------090307060804040709080604
Content-Type: image/jpeg;
name="moz-screenshot-4.jpg"
Content-Transfer-Encoding: base64
Content-ID: <part1.09000005.08090205@matrox.com>
Content-Disposition: inline;
filename="moz-screenshot-4.jpg"

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL DBkSEw8UHRof
Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwL DBgNDRgyIRwh
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjL/wAAR
CAEWANwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI CQoL/8QAtRAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkK
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1 dnd4eXqDhIWG
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW 19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcI CQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz UvAVYnLRChYk
NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOE
hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU 1dbX2Nna4uPk
5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD1Cw0O0urKOZ94Zs5C4x1I 9KSTTdDikaOS
+jR1OCrTICPwxWno/wDyCof+Bf8AoRrCudY1Kzd4LLVtNtFWSXdFdWLzPuMr nO4TJgEEcY98
88b1JtTl6mUYrlRox6Bp0sayRyO6NyGVlIP44rK1SGy00nFld3IWGWdzE8Y2 Rx7Q7Hdj+8OB
k10Gjyebpwl6+ZLK4PqDIxz+tYPiiG1f+zXujYoq3si+bexB41BjlOCCRwSF 7jkD0p05Nysx
SStdF06JaqCzI+0cnDjOP++as/8ACN2PrL+a/wCFcx4fuZ59cvC+qLdxtFcM PLeco/7xcFVc
bAFHy/Kx69T1rW8Z2f286Nb/ANmWGp7rxj9lv22xNiGTqdj8jt8v5UVXKDsV CKZo/wDCN2Pr
L+a/4Uf8I3Y+sv5r/hWvRWXtJFciMj/hG7H1l/Nf8KP+EbsfWX81/wAK16KP aSDkRkf8I3Y+
sv5r/hR/wjdj6y/mv+Fa9FHtJByIyP8AhG7H1l/Nf8KP+EbsfWX81/wrXoo9 pIORGR/wjdj6
y/mv+FH/AAjdj6y/mv8AhWvRR7SQciMj/hG7H1l/Nf8ACj/hG7H1l/Nf8K16 KPaSDkRkf8I3
Y+sv5r/hR/wjdj6y/mv+Fa9FHtJByIyP+EbsfWX81/wo/wCEbsfWX81/wrXo o9pIORGR/wAI
3Y+sv5r/AIUf8I3Y+sv5r/hWvRR7SQciMj/hG7H1l/Nf8KP+EbsfWX81/wAK 16KPaSDkRkf8
I3Y+sv5r/hR/wjdj6y/mv+Fa9FHtJByIo6P/AMgqH/gX/oRq9VHR/wDkFQ/8 C/8AQjV6nV/i
S9WEPhQVCbcFiRI6gnOBj+oqasbWnMc8RW0s7txDIUhvJCkRbfHyWCPggFsf KfTjOahDYWPh
6wtrp7+NJluJ1YyZlYj5yGYAHpkjsB+FaskojIG0sT0ArB0i4ml1FN+nabZS +VJmOxmMiMu6
PBLGNDkZbjH488S+JXuF0G+ZY4vMFpLwZCBjaNxzt6jnAxzgdM8Wm5yV2CXQ 1BexmVogrGRV
DMgZcgHIBIz0OD+RqaOQSKSAQQcEHtXiU4lSS8P2azAWBCCr8jryOOteyW7S fZJWlVUlxllR
iwVtozg4GR74FXXpKlG9zapS5Gtb3LlFcj4DkL2H7y01mGd7a3lkk1G8a4WY sG+aPMjhRkHI
G08jI6V11YtWdjIKKKKQBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAUdH/5BUP/
AAL/ANCNXqo6P/yCof8AgX/oRq9WlX+JL1ZMPhQVFPa29yALiCKUDkCRA2Pz qWisyiCCztbZ
i1vbQxEjBMaBc/lS3FuLhdrbSCpUq67gQeoIqaqupSPFpd3JGxV0hdlI7EKa abuJ2SMtPDGk
LeOy6bp4k2Jn/RlwBlsYXPB684545OONlIxGj72BzyxIwOn/ANaucvdRETXU MejazD5aybL2
S/RosqDtbaJy5BwMAp3GQOa6CeRjBKPKcDaw3EjHQ+/sPzHvinJy3YXfUqnV 9IscWpure38p
QoiOE2DHAx2GMUSzRazaGPT9Wltzux9otBGzAjkr86Mv6Zqlb3y2+oamh1Kx tT9oU7LgZY/u
o+fvjj8O1SaVMLi+vZBPDODeD95D9w/uE6cn+dc8ZylNxa7lbI1LO2+yWkcB nmnKDmWZtzue
5PQdewAA6AAcVPXK311qr+NUtbd9WNlFFA7rZi08obncMZTL+8xhR/q+cA45 xXVVruK1tAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKOj/APIKh/4F/wChGr1U dH/5BUP/AAL/
ANCNXq0q/wASXqyYfCgooorMoKbJGksTxyKGRwVYHuD1p1FAGX/YWnmZg0Uj DAOGlkIPXqS2
D9P8a0pE8yJ0zjcCM0xR/pUhx1RRnHu3fH9T9B3louwsY32TV7W5upbW5slj uJVkKS27yMp2
KnUMOPlB6cc1Np9jdwTzzXk0Eks03mkwoUA/dqgABJ7LnOavTjMYGM/Oh6Z/ iHsf89x1AJ0O
MCTnHWNh6e3uP19DiVGKd0tQI/KtYLyS5JVJ5UVHYv1VSccf8Cb86l+0Qf8A PaP/AL6FZOp3
EkbQuj3UcTzgSvBAZHVfKJHy7WI+YKOneq8d0WvrRLe61OdXkIlFxZGNAmxj ncYl/iC9+9Dm
lLlsws7XOiorOvNSj0rSYrmWKaUExRBIV3MWdgowMjuRTtK1QapDMxtLi0mg lMUsFxs3o2Ae
qMynIYHgnr61QF+iiigAooooAKKKKACiiigAooooAKKKKACiiigCjo//ACCo f+Bf+hGr1UdH
/wCQVD/wL/0I1erSr/El6smHwoKKKKzKCiiigCFSv2yQcbvLTPrjLe317/gO 81RKf9KkGeiK
cZ927Z/oPqe0tAENyVES7sY8xOvruGOx/wA9x1qaopziMHOPnQdcfxD3H+ex 6EFxA2MTRnOM
YYc5xj/0JfzHrQBG6SLK5EZYMcggj0A7n2rJ8O2F/pulG1u7ZVcTyyL5dwZs q7s4yzAEkbiM
nOcZzzgW7q5jWVCIGummkCRLHtOfk3dWIGMAnrUfn7J4Ip9Mmg85yiO/lEZC lsfKxPRT2qva
xXutkcrepduLCO7s4YJmYCJ4pMof4kYMOo6ZFOtbGK0uLuaMuXupRK+48AhV XA9sKKGuVttO
+0yiVlSMMwjjaRzx2VQWY+wBNR6bqltqsTS2pk2KdrLLC8Tq3cMjgMp6HkDg g96l7/1/XQvo
XaKKKACiiigAooooAKKKKACiiigAooooAKKKKAKOj/8AIKh/4F/6EavVR0f/ AJBUP/Av/QjV
6tKv8SXqyYfCgooorMoKKKKAIlP+lSDPRFOM+7ds/wBB9T2lqJR/pUhx1RRn Hu3fH9T9B3lo
AinOIwc4+dB1x/EPcf57HoZainGYwMZ+dD0z/EPY/wCe46iWgDNvbKK6kxOs /wAsgkjaF3Qg
7dudyEHoSPxqGPTbaOeKb/TpHiJZPOuJ5ACQRnDEjOCR+NWLu6jgkPnNN80g jRYldiTt3Ywv
PQE1Cl9A80cX+mI8hKp5sUyAnBOMsAOgP5UN07pO1ybS6DtW0p9V0JtPEqws 6pkuhdDgglXU
MNynGCuRkEioPDXh5fD1tcxIbUCeXzTHaWot4kO0AhUBOBxnr3rUNzHBY/ab mZIokj3ySSMF
VQBkkk8AVT0bXLTXUu5bGaCe2gn8lJ4JhIknyKxII46tjv0otqyuiNOiiigA ooooAKKKKACi
iigAooooAKKKKACiiigCjo//ACCof+Bf+hGr1UdH/wCQVD/wL/0I1erSr/El 6smHwoKKKKzK
CiiigCJR/pUhx1RRnHu3fH9T9B3lqFQv2yQ8bvLTPrjLe/17fie01AEU4zGB jPzoemf4h7H/
AD3HUAt4FxiGMYxjCjjGMf8AoK/kPSkuQpiXdjHmJ19dwx3H+ex6VNQBk3to kkiBbl7RoJRJ
E0WwEfIU6MCMYJHSoxalrmCa41e4uBA5dEk8kLuKlcnagPRj3qzeXskEyIiT SPJJ5SRxbMk7
C/8AEQOgPeo/ttyk8EU9veQec5RHcwkZClsfKxPRT2qW6fMr7itK2gmr6fPq GhLbwLCZ0aGZ
EnyEdo3VwrEAkA7cZwcdcHGKNEsr62a/uNQW3Sa7uBL5dvIzqg8tFxuKqScq ecDtVu4v47Sz
hnmViJXijwg/idgo6npk1bqvP+un/AH0sFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFAFH
R/8AkFQ/8C/9CNXqo6P/AMgqH/gX/oRq9WlX+JL1ZMPhQUUUVmUFFFFAESn/ AEqQZ6Ipxn3b
tn+g+p7S1EoP2qQ5bGxeMnHVunGM/j6dO8tAEU5xGDnHzoOuP4h7j/PY9CCB BjBk4x1kY+nv
7D9fU5JwTGMFh86fdJB+8PQHj/PHWpaAMy5sYLpvLl8391IGRkmdGB2bc7lI PQkde9Y3hlrb
VrJNQaYzTwXMyYjv5biNCrMgI3MQSUIOcDIbOBmtu+uooZB5qKSX8tAIGlZj t3cBeemfyqBL
yB5o4vJ2PISqebYyICcE4ywA6A/lT5qd7StfQm0t1sLqlrPeaRax26b3We3k I3AfKsisTn6A
1keB9Gn0gXqyaY1nG4jCvOkP2iZhuLNI8LlZOWGGKqx53ZPJ6yN/MiR8Y3AH FIJY2laISKZE
AZkB5UHOCR74P5Gja5Seg+iiikAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBR 0f8A5BUP/Av/
AEI1eqjo/wDyCof+Bf8AoRq9WlX+JL1ZMPhQUUUVmUFFFFAESj/SpDjqijOP du+P6n6DvLUK
/wDH5JyP9WnGBnq3fr+fHp3qagCKcZjAxn50PTP8Q9j/AJ7jqAROMZnkOMdQ vPT29j+Z9sJc
8xLyB+8TqAf4h6//AK/TmpqAMu6smuZFxdTwywSh0ljCbs+XtOQykchj2rO0 j7RqsMF/dXd9
mC4mAt5/J+VkZ4uSiDnGeASOep61ty4aVsR5I4J8wrk49qqWenWenQmGy0+C 2iLbikDFAT0z
gDrwPyq+SL1a1Iu77lfxCJm8KSLBc3Nu5WMGW1t5JnC7lzhIyHIIyCUIYAkg 8VU8INft5xuo
L2CEwR+Ul1PLL/y0mzhpVV842cMAwGAeldNGVaJGUYUgED0FOqe5fQKKKKQB RRRQAUUUUAFF
FFABRRRQAUUUUAFFFFAFHR/+QVD/AMC/9CNXqo6P/wAgqH/gX/oRq9WlX+JL 1ZMPhQUUUVmU
FFFFAESn/SpBnoinGfdu2f6D6ntLUS7vtUmfu7Fx165bPt6dOfXtUtAEU5xG DnHzoOuP4h7j
/PY9CBZ+MyRnpnEZ9s9/978x6ck+7yxt6709em4Z6e34evGaloAxdTS4Zods U86rODOltL5T
MvlEcEsvG4qcZ/Oq8aSm+tDBp+p26LITM9zdh0KbGGMea2TuK9q2Jdvmtt83 P8WzbjOPf2xT
Of8Ap4/8cpOlGUlJk8zWhFfm7XQjJYuVuI41kUAA79uCU5B+8AVz1GeKTRLy TULaW+Mpe3uJ
DJajaAFiwAuD33bS+T/fFaMe3yk2fcwNv0p1PqV0CiiigAooooAKKKKACiii gAooooAKKKKA
CiiigCjo/wDyCof+Bf8AoRq9VHR/+QVD/wAC/wDQjV6tKv8AEl6smHwoKKKK zKCiiigCJR/p
Uhx1RRnHu3fH9T9B3lqFf+PyTgf6tOcjPVu3X8+PTvU1AEU4zGBjPzoemf4h 7H/PcdQBp+Mx
xjpnEh9s9v8Ae/IevCXPES8A/vE6kD+Iev8A+v05qagDmNauoTf2ttJHbTTi dJHgnDmLDIyK
GcIwXLH5dwG4jA5qC6kg02+sJbrT9M01VkZg9uzO8vyMvlqBEMsSwIXOTg4B xxpaho1tdaqL
s3MyMfKMsSJuWQxtvj3cZG1jngjOecjis/U/Cen6y0UmpTPczRLhJXtV3AgA AkhRkAhm2nKk
u2QRgCvYUpSU5GbnNJpGxqd8+naAbiI/v9iJCPJMu6RiFUbdy5ySByyj1IHN UvDGq6nqkcw1
KJILi1lkgmjEaqWOEZThZZAvDEEbm9cjpTPEOsaLoOmWun6hYm5sriMxrAkK PGUUKMFSQMcj
isay8f8AhjTYPIsdKuLWEf8ALOC3jRegHQNjoAPwrWOFq1FzRjdP/P8A4f8A pClWhF2b1/4B
3tMSKONpGjjRWkbc5VQCxwBk+pwAPwrjf+Fn6L/z66h/37T/AOLo/wCFn6L/ AM+uof8AftP/
AIuq+p1/5WL6xS/mO1oriv8AhZ+i/wDPrqH/AH7T/wCLo/4Wfov/AD66h/37 T/4uj6nX/lYf
WKX8x2tFcV/ws/Rf+fXUP+/af/F0f8LP0X/n11D/AL9p/wDF0fU6/wDKw+sU v5jtaK4r/hZ+
i/8APrqH/ftP/i6P+Fn6L/z66h/37T/4uj6nX/lYfWKX8x2tFcV/ws/Rf+fX UP8Av2n/AMXR
/wALP0X/AJ9dQ/79p/8AF0fU6/8AKw+sUv5jtaK4r/hZ+i/8+uof9+0/+Lo/ 4Wfov/PrqH/f
tP8A4uj6nX/lYfWKX8x2tFQWd0l9Y293EGEc8ayqG6gMMjPvzU9c7VnZmydy jo//ACCof+Bf
+hGr1UdH/wCQVD/wL/0I1eq6v8SXqyYfCgooorMoKKKKAIlP+lSDPRFOM+7d s/0H1PaWolJ+
1SDDY2Lzg46t05xn8PTr2loAinOIwc4+dB1x/EPcf57HoQSucZgkGcdSvHT3 9z+R9sk5IjGA
x+dPugk/eHoRx/nnpUtAGLqd+bNoWaeC0WecI8lyMrH+6Lc/MBnKgde9V49W Rr60gi1fTL3z
pCjR2w+dQEZt3+sbjKgdO9bEv7uVjviG7nDvtPTH9KZ5n/TS3/7+/wD1qTpy clJSJvbSxx/j
iwTUZNEgkn8hBBcSNJs3YCojdMj0rj18OW76Z9s/tJEMiPLAkvlIXVSQMgyb gx2nAVWHTnrj
u/Gmj6xejTTpEPmtDHNFIdyLhXVV/iPcZrlY/DXjGOxFn/Z8TwruCCX7O7Jn rtZslfXgjnmv
cwtVKjFKaXq13f8AwDz60L1G3Fv/AIZf8EqnwiPKjk+2tGFbFykqJvhARnPy pIxzhSMNtOce
+LB0jTr2zsorVWZvJik85oxG7IZ3RywBI/iTkk8LVttJ8dsQfssakSeaSgt1 3tgjLY+9kMQc
5znmo20Lxw04m+yKjiBrceW0CARnOVABAHU1s6re9SP3kKCX2H9xVfQtOuTK 8R+yw3Debbt8
0hjjWEyOuM88so59Kih0fTDYTTSySlTZCaF0g+bPn7MsDJjOMDAOMH1HNoeG vGgigiFp8kET
xRjzYflV87h15zk0Q+GvGcCqqWSlFhMAR2gZShbdggkg/Nzk80/aL/n4vv8A 68vxDlfWD+70
/wCD+Bla14fi0i3LDUYZp0k8qWEPHkHByVCuzYBGPmCnkcemY8NuqWpjuPNe QZlj2FfLO7GM
98jByPWuovfDPjHUIwt1p0MhBBMn+jrI2Bj5nHzN+JNQy+EPFs8NtFJY7ktl KxDzohtBJb+9
zyT1rSFeCS55q/qjOdKTvyxf3FyTT9FGu3FksOkmOEzfKrXm9QiMRvJOCAQM 7efSqN5omnSR
xXv2hLWzaONd9pG8qySMzj5VkYMAAhzuOcjgc1onSPHDTmc6dZ+cxYs4gtAz bgQcnHOQTnNN
TRfHMczSLZxYKqvlkW5jAU5GI/ujBJOQOpPqaxU0rfvF/wCBGrje/uP7jLPh UW8xtp7wfbws
siQrFlGSNmBy+eCdjEDB6DJGatat4YgWe+uTe29sWkmeC3zGo2q7ALguGydp ACoR0564nGg+
OBbPb/ZtyPuyzSQs/wAxywDk7gCeoBwcn1NLJoXjaeKSOaxilDs7ZlFu7KWO W2k8rzz8uOea
ftXdP2kfvQuRa+4ykPCCGFZHv2iCg+ekkaF4iI2flVkYj7pGG2n264xdTsIr L7NJb3DzQXMX
mozx+Ww+YqQQCR1U966qTR/HUsbo1pGFkJL7BbqXJUqSxGCSQx5PPNZ83gzx XPHDHJYblgTZ
GPOiG1ck4+96k1cK6vedRfeiZU9LKD+49S8Pf8i1pX/XnD/6AK0qpaPby2uh 6fbzLtlito0d
cg4YKARx71dr56o7zZ6sfhRR0f8A5BUP/Av/AEI1eqjo/wDyCof+Bf8AoRq9 Tq/xJerCHwoK
KKKzKCiiigCJR/pUhx1RRnHu3fH9T9B3lqFSv2yQcbvLTPrjLe317/gO81AE U4zGBjPzoemf
4h7H/PcdQCdDjAk5x1jYent7j9fQ4S5KiJd2MeYnX13DHY/57jrU1AGXc3Uk c8SW8SySXM2x
RK5jA/dl+flJ6L0xSPPe29xbR3Vtbqk8hjDR3DMQdjN0KD+6e9TXljDdlkub OO6iLBwsiqwB
xjo3fr+dQQaPY2syzW+kW8Mq/deOKNWHbgik4zck1LQV12JbzUo9K0mK5lim lBMUQSFdzFnY
KMDI7kVNYahFfrKER45YHEc8MmN0TlFfaSCQSA69CR70XFhHd2cMEzMBE8Um UP8AEjBh1HTI
qWC0htpbiSJSGuJPNk+YnLbVXPtwo6f1pjVrE1FFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFF
FAFHR/8AkFQ/8C/9CNXqo6P/AMgqH/gX/oRq9WlX+JL1ZMPhQUUUVmUFFFFA ESn/AEqQZ6Ip
xn3btn+g+p7S1Ep/0qQZ6Ipxn3btn+g+p7S0ARTnEYOcfOg64/iHuP8APY9C C4gbGJoznGMM
Oc4x/wChL+Y9aJziMHOPnQdcfxD3H+ex6GWgDLurmNZUIga6aaQJEse05+Td 1YgYwCetR+fs
ngin0yaDznKI7+URkKWx8rE9FPapr2yiupMTrP8ALIJI2hd0IO3bnchB6Ej8 ahj022jnim/0
6R4iWTzrieQAkEZwxIzgkfjQ1U5k09Cfd6ot3Go22m6bHd3s3lxfIpYqWJZi FAwMkkkgfjU1
peQXsRkgcnGAyspR0JUMAykAqcMDggHmq93p5vbC3gaTyzHLDKTjP3HVsde+ 3GaltLCKznvZ
oyxa7nE7g44bYicfgg65/lQUrWLVFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFAFHR/+QVD
/wAC/wDQjV6qOj/8gqH/AIF/6EavVpV/iS9WTD4UFFFFZlBRRRQBEo/0qQ46 oozj3bvj+p+g
7y1Eo/0qQ46oozj3bvj+p+g7y0ARTjMYGM/Oh6Z/iHsf89x1EtRTjMYGM/Oh 6Z/iHsf89x1A
LeBcYhjGMYwo4xjH/oK/kPSgCpd3UcEh85pvmkEaLErsSdu7GF56AmoUvoHm ji/0xHkJVPNi
mQE4JxlgB0B/Ki9tEkkQLcvaNBKJImi2Aj5CnRgRjBI6VGLUtcwTXGr3FwIH LoknkhdxUrk7
UB6Me9D9rzLltYn3epyXxLSW4i0XYjSP5czkKuTgBCTx2xk1wSadfSPsjsrh nwDtWJicEbge
ncAke1ejeObpbC78PTTK5jVZllVR8xQqisB74Jrmz4rgYMwimjkYTKSmOFKy CIZz28wg+wHW
voMJKcaEeVX3/NnmV4xdV8ztt+SMqLw3qc0czR20peCLzZIvJkDj59mMbeTk E+mAecgioYdD
1OWW2Q2U0QueYpJkKIwxknceMAc59KvwaxZfYktJxOq/Yfs7OiK2HE3mDgsM jGB1FX7rxVbS
3TToZWhuHLXFr9jhi4ZGU4lU7mI3nBI+tdDnWTaS7mSjTau2YsuhzmFZrGaH UULmNvsgclWx
nBVlDdATnGODzxQdBvktJnltriO4jlRPszQsHIZXbdjrwEPar9jrGnaPbzwW T3kvnhy80kax
lT5bogChj3cknP4UsPiBF0zTrWAOt1bywsHkwI8q8p5Oen7xf1ocqvRdgtDd +f8AwDnmhlRI
3aJ1WUExsVIDjOOPXnirdppc9zqDWUhW1lRXaT7QrLsCqWOQAT0HpU+vXVvc ay62nFnb4hg2
HPyL3B9zk/jU9nqttaeJJr5bi/8AJdZVSdsNONyFQx5AJBOetaOcnC6Wtn/w CeWKlZvqv+CR
x6DHLC8yazp5hR0jL7Z8bmzgY8vP8J7YqrPpF/bi5ZrSZobaQxSzIhaNWBwR uxj0/Ot6HxFD
HBPGdf10yyPG32nyhv2rvyn+u6fMD1/Cmy+JLCXdciCeKdIriGO1VVMJWVmO ScgjG88bTnaO
RWSnVT2uv68l/X43ywa3Mi20O8kdftEE9tG8Ek0ckkJAkCIW4zjOcDketQHS dSXyM6fdj7R/
qcwt+97/AC8c/hXRP4n09WvZI1u5HvXeWRZVXETGJ0Cqd3zDL9cDgDii68S6 fd3nnS+Y0Esv
nSWx0+EBX2thi4YGXax6MBkdaPaVb/D/AF/Xy08w5Kdt/wCv6+evkYA0TVmn aBdLvTMmN0Yt
33LkZGRj0BqTQVZPFGmI6lWW9iBBGCDvFauq+IrS60yO0tvP3KYtz+RHCrBG kJ+RDgffXA9j
VS0u0v8Ax5bXcYYRz6kkihuoBkB5p803F8y6MXLFNWfY9wooor5c9oo6P/yC of8AgX/oRq9V
HR/+QVD/AMC/9CNXq0q/xJerJh8KCiiisygooooAhUL9skPG7y0z64y3v9e3 4ntNUSn/AEqQ
Z6Ipxn3btn+g+p7S0AQ3IUxLuxjzE6+u4Y7j/PY9KmqKc4jBzj50HXH8Q9x/ nsehBAgxgycY
6yMfT39h+vqcgFa6vI7dmae6S3jDBAXZVBOM9T36/lUMOp2txKIodUhkkboi SISfwFNu7WeS
aJrWdIpbaYOplQyA/uymD8wP8Wc57U02+pT3VrJd3lq8cEhkCQ2rIWOxl6mR uPmz07Um6nMk
loTp3Lk1jZ6lDC97Z29wQuV82IPtzjOM9O35VD/wj2i/9AfT/wDwGT/Cmapb SXXh8rBEZZ41
jnhjDBd7oQ6jJIAyVA545pdA06bTLB4JmBLSeZx03Mql/wA33n8a0U5LRMfK mrsd/wAI9ov/
AEB9P/8AAZP8KP8AhHtF/wCgPp//AIDJ/hWlRR7Sfdi5I9jN/wCEe0X/AKA+ n/8AgMn+FMOg
6MJlT+w7IqVJMn2aPaCMceuTn0xwfatWmu6RRtJIyoigszMcAAdSTR7Wfdhy R7Gf/wAI9ov/
AEB9P/8AAZP8KYNB0YzMh0OyCgAiQ20eGzngd+Mdx3HXnGorK6hlIZSMgg5B FLR7SfdhyR7G
VFoOjSJubQ7KM5I2vbR54OM8Z69fx5xUP9kaV/aP2X/hGYPJ8vf9r+zweVnP 3cZ35/4Dj3rb
oo9pPuw5I9jKfQdGV41Gh2ThjgsttHhOCcnP5cZ60/8A4R7Rf+gPp/8A4DJ/ hWlRR7SfdhyR
7Gb/AMI9ov8A0B9P/wDAZP8ACnx6FpEMqSxaVYpIhDKy26AqR0IOODV+ij2k +7Dkj2CmRO0i
bmieM5I2uRng4zwT16/jzin0VBRR0f8A5BUP/Av/AEI1eqjo/wDyCof+Bf8A oRq9WlX+JL1Z
MPhQUUUVmUFFFFAESg/apDlsbF4ycdW6cYz+Pp07y1Eo/wBKkOOqKM49274/ qfoO8tAEU4Jj
GCw+dPukg/eHoDx/njrUtRTjMYGM/Oh6Z/iHsf8APcdQCJxjM8hxjqF56e3s fzPtgAil/eSs
NkR28ZdNx6Z/rTPL/wCmdv8A9+v/AK9UtTs5blodkNvd+TOHeO6basg8orzh Tzlgenaq8eny
/brSVdJ0yyWGQu728hZ2BRl248te7A9e1JzmpJKOhNlvcyPHniDVNHGlSadc NAs6yNIPLDA4
MZAOUI6bh94HBOAeq8YvjnxOu3OrM2MZzbxfNjb1wnfaf++2xj5dvY+MTbx3 2hzXMUDolnd7
fPQFd3loVGSvUkDA3DOOjYyvNwz6fJ4eD/ZLKWaWOU3JM9vCySZOCqFN+ANp AjIBxjHXPq4S
lSlTvKN9e/8AXY5K85qVlKxSXxz4nXbnVmbGM5t4vmxt64TvtP8A322MfLtt w+JfGsjWyRXd
xcPNH5kaR2sTs6ggE4VM9UbPT77dPl26Tx6MscSSHTnkhl2wStJb7Zv3b7Wd Y1G1d4Thycd+
+a1/MLvSF08XmnpftbxFxFLFHEwWSQmPcuEB+ZGxnBx64ro9jQe0Pz/rTqZK dTrL+v8Ag9DP
l8ZeLbOfybnUZkljIDpLaxK3G3qNgxnafT77Yx8u1X8YeLbaO3km1RtsqB0J hh+dQQCTheMl
G9PvtjHy7bU9/bWmjQRl7C71C3EMLySIk+FzKSq7gQQAUUkZHoelWbhNJvtV XTlaA2nkSFZI
cP5ISeR+COgKZH4im6FBbw0+fTqL2lR/a/puxjr458TrtzqzNjGc28XzY29c J32n/vtsY+Xb
asfE/ja+z9jubu78vbv8qyjf+712pxna3p99sYwu3JtZ1utbnnSLT4lkErLH cqFiUFTgADuP
4ffFXNDMb6HfQGGwnka4iYRXl15IwFfJB3pnGR371pPC0IxvydvxfqRGvUbt zd/yLza/48t4
DPM9+IYvvySWCBeCoOT5YxyrZ6ffbphdtFfHPiddudWZsYzm3i+bG3rhO+0/ 99tjHy7dYy20
VhAZF0yJY7KeJ5YbwPLEzNJhEXzDuB3AZweGJ3dw5/7I+0jzf7J8vzz/AGf5 ezbs8ttvnY5x
u8vPmc5znjNZKjQV7wv/AF6mnPUe0v6t/SMyPxh4t+yG6/tRnhidEdjDDyxA IBG3PPlt0/vt
0+XES+OfE67c6szYxnNvF82NvXCd9p/77bGPl27kEukiOKK9ew89miadIXjW IyhJtp+UFMcx
5IBXJ571FEbBr6SdrbT4pFjRDB9qsmWQFmy+7YUGAANqruPB+r9jQu17P8f6 /qwvaVbJ8xkL
458TrtzqzNjGc28XzY29cJ32n/vtsY+Xb0/gLxHrWr67JbahevcQpas/MSKN wMagkqgGfvH7
w+82AQBsyr6fSY7trK3TTTaNbXRMgSNm3hpPL+fqDwmMEZyOtJ8MVz4qnfbn FjIN23pl4+M7
eOnTcM46NjK44qjSWHlOMbPT87GtGpU9qoylff8AK563RRRXkHcUdH/5BUP/ AAL/ANCNXqKK
0q/xJerJh8KCiiisygooooAgQj7dKueREhxtHq3fqfp2/Gp6KKAILshYVJOP 3sY+6G/jHr/P
t1qeiigCrLhpWxHkjgnzCuTj2pm3/pl/5HaiitUtDJvUzdd8Laf4m+xS3Uk8 Yt1PliHYDhih
IJKkgYQDAI6nuFIx1+F2jLtzfak2MZy8fzY29cJ32n/vtsY+XaUVKqTjpGTX o2W4Rlq0n8gX
4XaMu3N9qTYxnLx/Njb1wnfaf++2xj5dovwu0Zdub7UmxjOXj+bG3rhO+0/9 9tjHy7Siq9vV
/nf3v/MXs6f8q+5Avwu0Zdub7UmxjOXj+bG3rhO+0/8AfbYx8u10Pwz0qD7m paoMqFfEsY3j
5cg4Todpz/vt0wu0ope2q/zv73/mHs4fyr7kNX4XaMu3N9qTYxnLx/Njb1wn faf++2xj5dov
wu0Zdub7UmxjOXj+bG3rhO+0/wDfbYx8u0op+3q/zv73/mHs6f8AKvuQL8Lt GXbm+1JsYzl4
/mxt64TvtP8A322MfLtF+F2jLtzfak2MZy8fzY29cJ32n/vtsY+XaUUe3q/z v73/AJh7On/K
vuQL8LtGXbm+1JsYzl4/mxt64TvtP/fbYx8u0X4XaMu3N9qTYxnLx/Njb1wn faf++2xj5dpR
R7er/O/vf+Yezp/yr7kC/C7Rl25vtSbGM5eP5sbeuE77T/322MfLt0tA8E6f 4dvze2txdTTG
Ewkz+WeDszyEBHKZ4OMseOF2lFTKrUkrSk2vVjUIJ3SX3HS0UUVBR//Z
--------------090307060804040709080604
Content-Type: image/jpeg;
name="moz-screenshot-5.jpg"
Content-Transfer-Encoding: base64
Content-ID: <part2.06000707.00060204@matrox.com>
Content-Disposition: inline;
filename="moz-screenshot-5.jpg"

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL DBkSEw8UHRof
Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwL DBgNDRgyIRwh
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjL/wAAR
CABnAIEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI CQoL/8QAtRAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkK
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1 dnd4eXqDhIWG
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW 19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcI CQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz UvAVYnLRChYk
NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOE
hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU 1dbX2Nna4uPk
5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD28kKCSQAOpNM84f8APOf/ AL8P/hSyDIQf
9NE/9CFZGr366Xp0166GRl+6mcF2JwBn3JrSEObQmUrGt5w/55z/APfh/wDC jzh/zzn/AO/D
/wCFco3ieNdKsr02km6e5FtJEMsYmyQegOSMcDqami8R2z6je20kM8UdrGsh laGTkFSx3Db8
uMd+vatvq0tdDP2q7nS+cP8AnnP/AN+H/wAKPOH/ADzn/wC/D/4Vy114ntPJ c2M0EzeTI67t
/wB5EDYxtweCM8j061LaeJLCTTknupvKlWKN5lMLrgvwCARkjPcZHvR9Wla9 mHto9zpPOH/P
Of8A78P/AIUecP8AnnP/AN+H/wAK5vUfEVrYlVjR7hhdrbSqqt8hPOfunJx2 HWrMmtadFII5
JXVvkBJhcBC33QxxhSfRsGp9g7Xsx+0W1zb84f8APOf/AL8P/hR5w/55z/8A fh/8KyrfUbS7
uHggaSRkYqzLC+wEdRvxtz+NXNlS6aW5SlfYs+cP+ec//fh/8KPOH/POf/vw /wDhVbZRspcs
Quyz5w/55z/9+H/wo84f885/+/D/AOFVtlGyjliF2WfOH/POf/vw/wDhR5w/ 55z/APfh/wDC
q2yjZRyxC7LPnD/nnP8A9+H/AMKKrbKKOWIXZdxlk/31/mKxtX0Uau9osk7J bwS+a8aZBkIH
HzAgjB5raBwQfQ5pMVMJuDuhyipKzOUfwht84W98yRm7jvIkkQybHXrklssD 9Qanl8O3Etzq
Ev26Ifb7dYpx9nPBCldy/PwOc4OfrXSYoxWn1ip3/rT/ACJ9lHsczdeFftEN jGLvZ9ltJLXP
lZ3bkC7uvGMZxVZ/BjT2ssc+oBpTbxW8TpBtCLGwYZBY5JIHcV1+KMU1iqq2 f9XuS6EH0/rb
9DlW8KzSJM8l+huHvUvA625CBlGMbd+SPxp58LA6lLes1jM8+xpRcWQkwwGC UO4FQfQ5rp8U
YpfWanf+v6Q3Rg91/X9M5yy8NLaa6+prLHGX3boreNow+em/LkHHsBzzW7sq bFGKidWU/iKj
BRvYh2UbKmxRip5irEOyjZU2KMUcwWIdlGypsUYo5gsQ7KKmxRRzBYKKKKkZ z95qVzcTXJiu
xYWFq5je4EYd5HGM7c5AA5HIJJB9ObFhfXCXMEFzcR3cF0he1u41C7sAZVhn GcZIIwMA8DHN
C/02NEu7K9trqXTbiVriOa0Qs8DtywKjJOWLEEA9SCPW1ptkGksUgs5bTTNP DGBJxiSWRhje
RnIADOOeSWPTu/e5nty2+dzBOfP5f1+BBLrutS32qRafpGnzW+nyiJ5LjUXh Zz5aSHCiFgBh
wOW7dqsf8JZpK2lhcTSTRC9gW4VfId/KjbGGkKgiNefvMQODzwaytQ8Aadq8 2tXF/aWTXl3c
rNaXnkq8sG2OMLksOgdCdvIIPPUiodX8K6rql0l7Its1zc2SWt3Gmp3VvFGV LHcBFgyqd7fI
23pgMMmhW0v5fl/n9x0NK+h0c/iLTLbUlsJZpBMXVCywSNGjtjarSBdiMcjA YgncPUZrXPiq
yi1qz0uFZJpp7o27N5brGpEbucOV2uRtwVByM89Ky9Z8OazqOqoyTRNZxXFv PATfTRCJY2Rm
jMKrskyUJ3OxI3cAYqaLQtXh1KzhX7CdNtdRlvRKXbznEglJXZswCGk+9u5A 7UK2l/62/wCC
Gln/AF0/zN977GrxWCx7i0DTO+fuAFQBj3yf++TWW3ifA07Fpk3Nw8EwEh/c bJPKJ+783zlR
2657YrSt7KRNYvb6VlIlSOKIA/dRcnn3LM34AVkv4euXuNZJkh8q4T/QhzmJ 2+Zy3H98KeM1
PqIsp4nsftP2eXessk8sNuscbymQRsEdjtU7QHOCTwMZzVKx8b2NzcTxzI8U UOnwXzXCxytG
wkz8qkxjPRcd2JIC5Uip7PQbqC+024kkhJgsJ4Z8MctLK8bkjI6ZVuvPI4rD /wCEI1E6Wlm0
1vxpllAXSeSMie2cuACqghGzjeCGXGQD2tJW13/4f/hylytf13/yOy07UrXV bYz2rSFVYoyy
xPE6MOzI4DKcEHBA4IPQirdYnhrSZ9KtLj7TGkc083mFVvZ7sgBQozLN8zHj 0UDgY4ydukyQ
ooopAFFFFABRRRQBDc3dtZwma6uIoIh1eVwoH4mnxTRTxLLDIkkbchkYEH8R WHp1omo6neX9
0okmiuHgiVwD5KKcYX03Y3Z/2h6VPJZxaXrtk9mojW9MiTwoAFYhdwkI9RgL nvuHpVWWxPM9
zYorzTWLxYdU8RXN9aeI57e3u0iS4sdVaCC3Bhi+8onTADMWLbCADkng409Q 8TaxpM9tpu0X
N7a2EVxdmLTri5+1O2RtQxDEWSjfMwI+YfLwaSWif9bXLas7HcUVyOr+J7zT 9agjSW2a2a4g
t3tltJpZAZGQZeZT5cJG8EKwO4Ac/NxHJqer32r6TcrPbxaY+rS23kRhllIj SZTvbdtcFkzt
2jHHXFCVwtpf+u52VFc9e2x1nxHNp9zcXkNpa2scypa3MluZHdnBJaMqxChO Bux8xyPu4yrT
WtcmNpplpc2bTbL3deXcLSbxBMsanarJksG5OQM8j0pBZnbUVxOn+JLm4vW1 NjstpdO06eSF
mLLEJXlDlecAj5ST6LXV6Zcy3mmw3MyqrTAyKFBGEJyuQe+3GffNNxabTE9H Yt0UUUgCiiig
AooooAKKKKAM2fTJVvXvdPu/ss8mPNVoxJHKQAAWXIOQBjII4/CpLTTmiumv Lu5a6uyuwSMo
URrxlUA6AkAnqT61Bd6w63j2Vhafa7iMfvSZAkcROCAzYJyQc4APFS2WqG4u WtLq2e1uwu8R
swYOvGWQjqASAehHpV+9Yj3bkyabZp9txApF6++4DEsJDsCcg/7KgYHHFZ03 hPRriC2gkt5j
HbReQii6lG+P+5Jhv3i/7L5HXjk1buNb0+1tnuJpysUc4t2IjYkSEgYwBnv1 6Y5zjmrSXUMl
1NbI+ZYQrOuDwGzjnp2NQu6/r+kXfUzrrwxpN5etdzQzeY7pI6JdSpG7rjaz RqwQsNq/MRn5
R6Uv/CNaV/aq6l9nk+0rKZ1/0iTy1kKlS4j3bAxDHJA5zzVtNTtZLyO0Dutx IsjpG8ToSsbB
WPIHGWXHqDkZHNW6NtQ8jO1LRLHVnie6WdZYgQk1vcyQSAHGV3xsrbTgEjOC QDjgU+LR9Pt5
LZ4bVIzbQNbwhMgJGxUlQBx/Av5VXn8S6VbaibGW4kEqusbuIJGijdsYV5Qu xGOV4ZgfmX1G
dagDDn8MWY02WysUjt1mto7KQyK0ubdNwCAFuuGYBjnrkg4xW2qhVCqMADAF QWd7b38DTW0n
mRrI8RO0j5kYqw59GUirFNt9QfmFFFFIAooooAKKKKACiiigDD0p4rTU7ywu nEdzLcPPCXIH
noxyCvrtztx/sj1qaeeHUNeso7N1lFkZHuJoyCqkrtEZPqchsdtg9a0Lm0tr yEw3VvFPEeqS
oGB/A0+KGKCJYoY0jjXgKigAfgKq636k8r2OWvdIe98RXdhJby/YrhDeGbB2 CQxeRtzjAOPm
x+NZ66VNqy6PNqemySC61NpbyCaElVVbZ4xvU8bSUU88EsPWu8oqVoXdnmDa FefaEuLfTXj1
JoNYhtbk253RSvOWiO/HyAqX2sSB8xwfm52/Adk1q96Y4Rb2zJEPJj0iTT4/ MG7cdsjsXfG0
FwADgctjjtKKd/6+d/1CT5jirpp4dF1Xw42n3s19eSXAgkFtI0DrM7MrmUZV QobkMwb5Dgcr
mtc6E/2/UNR/s95L+LWrP7PcmEl1hxbiQoeoUjzAxHHBz0rvqKE7O/8AXT/I L33/AKucHbad
dJBawtbsn26/vbadZF2kxNcPKGwexRWA/wCugNd5UTWtu12l00ERuUQxrMUG 9VJBKg9QCQOP
YVLQDd22FFFFIQUUUUAFFFFABRRRQBz/APpOtX1yDdTW9jBK0KxwSFGlYY3M zD5hg5AAI6Z7
1YgFzpep29pLcyXNrdBhE0xy8bqM7c4+YEBjk8gjvmiirvq0Z9Lmfcavrdzr Oq22lfYf+JZ5
Za0mhZpLoMu75ZN6rHnlRkNgrk8HFNg8XTi81S3udJui8F+tnZxxGLdcExCQ jJk2ggbmyxUb
do+9kUUVMNdPL9UbLVN9v8ipf+OZYpY3t9PnS1On3lxNLJGjtBLAwUqVEo3Y OQQDgkrhsZI2
5/EkFvqi2RtLp0EkcMt0gTyopJMbFYFt5JyvKqQNwyRzgoptfCu7/WwVFyp2 6X/CxtUUUVJI
UUUUAFFFFABRRRQAUUUUAf/Z
--------------090307060804040709080604
Content-Type: image/jpeg;
name="moz-screenshot-10.jpg"
Content-Transfer-Encoding: base64
Content-ID: <part3.07080308.06040607@matrox.com>
Content-Disposition: inline;
filename="moz-screenshot-10.jpg"

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL DBkSEw8UHRof
Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwL DBgNDRgyIRwh
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjL/wAAR
CAD5AZIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI CQoL/8QAtRAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkK
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1 dnd4eXqDhIWG
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW 19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcI CQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz UvAVYnLRChYk
NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOE
hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU 1dbX2Nna4uPk
5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2NbJ3G64kdnP8KSMir7Db gn6n9OlO+wR/
9Nf/AAIk/wDiqt0UKy6AUHtoI2w3m5xn/j4k/wDiqb5Nv/02/wDAiT/4qqfi B7jypY7R9lw0
J8ttwXDc4OSrAf8AfJ+hriYdQ8RaZqMP2678+BY5JpYV2tuQMgJHy7lI3E43 Nn2yAOmNKLSb
W5i5tN6noXk2/wD02/8AAiT/AOKo8m3/AOm3/gRJ/wDFV59/wnNzbssKWM9+ weR5HiilbEfm
uqhfLiYFsJ/EUHTk840pPFxjkkRrM7kEoI83nepbYvT+MIxz24HNWqEOwnOS OwFtCwyFnI9p
5P8A4ql+yxf3Lj/v/J/8VTtMk8y2Zv8Ab/oKu1zzUYyasaRu1e5Q+yxf3Lj/ AL/yf/FUfZYv
7lx/3/k/+Kq/RU3j/KOz7lD7LF/cuP8Av/J/8VR9li/uXH/f+T/4qr9FF4/y hZ9yh9li/uXH
/f8Ak/8AiqabeBTgicH3uJP/AIqtGsrU5vLuVGf4Af1NaU4xnK1iZtxV7iyW 8DoVElxGT/El
w+R+ZI/SoPs7Q8mSadB1xNIrgf8AfWGP5e3pWdp9laLpsaJGoO1hb2yyLGuo qqghmBHXsSOG
AycqQKWweK3s1ji2hdzEqqbArFiWUL/CASRg8jGD0ojSjUbSVgc3FXNiO3t5 k3pJOR0/18gw
fQjPFP8AsUX9+f8A8CH/AMazkuzFL5ick/eXPDj/AB9/wPtrQzJPGJIzlT+n sa5qtKVN2ZpC
aktCL7FF/fn/APAh/wDGj7FF/fn/APAh/wDGrFFZFlf7FF/fn/8AAh/8aPsU X9+f/wACH/xq
xRQBX+xRf35//Ah/8aPsUX9+f/wIf/GrFFAFf7FF/fn/APAh/wDGj7FF/fn/ APAh/wDGrFFA
Ff7FF/fn/wDAh/8AGj7FF/fn/wDAh/8AGrFFAFf7FF/fn/8AAh/8aPsUX9+f /wACH/xqxRQB
X+xRf35//Ah/8aPsUX9+f/wIf/GrFFAFf7FF/fn/APAh/wDGj7FF/fn/APAh /wDGrFFAFf7F
F/fn/wDAh/8AGj7FF/fn/wDAh/8AGrFFAFf7FF/fn/8AAh/8aPsUX9+f/wAC H/xqxRQBX+xR
f35//Ah/8aPsUX9+f/wIf/GrFFAFf7FF/fn/APAh/wDGj7FF/fn/APAh/wDG rFFAFf7FF/fn
/wDAh/8AGj7FF/fn/wDAh/8AGrFFAFf7FF/fn/8AAh/8aPsUX9+f/wACH/xq xRQBX+xRf35/
/Ah/8aPsUX9+f/wIf/GrFFAFf7FF/fn/APAh/wDGj7FF/fn/APAh/wDGrFFA Ff7FF/fn/wDA
h/8AGirFFAC/bbT/AJ+of+/go+22n/P1D/38FYcOlQyQRuWkyygnBHp9Kk/s iD+9L+Y/wr0n
SpLqzm559iHW50kvUMUiuvlgZUgjOTWQYka5W4IzKiFFbPRSQSMfgK3f7Ig/ vS/mP8KP7Ig/
vS/mP8K6oVacYqPYxlTm3c5EeHdMQRCGGW28oEL9muJIeCxbadjDIySQDkDJ xirTabaPJLI0
WWllSZzuPLqAFPX2HHTr6muk/siD+9L+Y/wo/seD+9L+Y/wqvb0kL2cw8PfY 7O2um8yOKS4u
DLJuflm2KueT6KBx6VsfbbT/AJ+of+/grH/siD+9L+Y/wo/siD+9L+Y/wrln GlKV7s2jKola
xsfbbT/n6h/7+Cj7baf8/UP/AH8FY/8AZEH96X8x/hR/ZEH96X8x/hU+ypd2 Pnn2Nj7baf8A
P1D/AN/BR9ttP+fqH/v4Kx/7Ig/vSfmP8KP7Ig/vS/mP8KPZUu7Dnn2Nj7ba f8/UP/fwVg63
Okl6hikV18sDKkEZyam/siD+9L+Y/wAKP7Ig/vS/mP8ACtKSpU5cyZM+eStY wEgSOIRqXwAq
qWkYlQv3QCTkY6jHQ9KkiXyU2IWxksSzFiSTkkk8nkmtv+x4P70v5j/Cj+yI P70v5j/Ct1Wp
LZfgZOnN7mPvb1qe2vprVyyEHP3lbof/AK/v/OtH+yIP70v5j/Cj+yIP70v5 j/ClOpRqR5ZD
jCpF3RZh1e0lADSeU3pJwPz6frV4EEZHIrI/siD+9L+Y/wAKb/Ylr/t/p/hX nyw8L+7L8DpV
SXVGzRWN/Ylr/t/p/hR/Ylr/ALf6f4VP1dfzD9o+xs0Vjf2Ja/7f6f4Uf2Ja /wC3+n+FH1df
zB7R9jZorG/sS1/2/wBP8KP7Etf9v9P8KPq6/mD2j7GzRWN/Ylr/ALf6f4Uf 2Ja/7f6f4UfV
1/MHtH2Nmisb+xLX/b/T/Cj+xLX/AG/0/wAKPq6/mD2j7GzRWN/Ylr/t/p/h R/Ylr/t/p/hR
9XX8we0fY2aKxv7Etf8Ab/T/AAo/sS1/2/0/wo+rr+YPaPsbNFY39iWv+3+n +FH9iWv+3+n+
FH1dfzB7R9jZorG/sS1/2/0/wo/sS1/2/wBP8KPq6/mD2j7GzRWN/Ylr/t/p /hR/Ylr/ALf6
f4UfV1/MHtH2Nmisb+xLX/b/AE/wo/sS1/2/0/wo+rr+YPaPsbNFY39iWv8A t/p/hR/Ylr/t
/p/hR9XX8we0fY2aKxv7Etf9v9P8KP7Dtf8Ab/T/AAo+rr+YPaPsbNFY/wDY dr/t/p/hR/Yd
r/t/p/hS+rr+YPaPsbFFZH9hWv8At/p/hR/YNp/t/p/hR9XX8we0fY16Kyf7 BtP9v9P8KKPq
6/mDnfY0bOLNlAf+ma/yrCuvEyJczRWdp9oSEkSTO5RAQQDjCkkZOM4xmuos I86dbHH/ACyT
+QryvQrs6LePNqIeU24+zNaKv+sJBV95PGBycdyy9skTiKkouy0PSy3CQrqT kr2Ssu9zt9K1
qLUbg2ssD210E8wIxyHXjlW78EHt1raWEd6888OLeXfjiF2uftaI0kzTbCpK FGUEg/dyWXj/
AGeOBXpci7cUqVSUo3ZGYYaGHqqMOqT9CDyV96PJX3qSir5mcNiPyV96PJX3 qSijmYWI/JX3
o8lfepKKOZhYj8lfejyV96koo5mFiPyV96PJX3qSijmYWI/JX3o8lfepKKOZ hYj8lfejyV96
koo5mFiPyV96PJX3qSijmYWI/JX3o8lfepKKOZhYj8lfemtCB0qanxruzTUm Fir5VHlVB4it
hJod0/mTxtEhkRoZniIIB7qQSPY8VmTRXWkXuoPYuhgt7eGSQXTSTvIMyEqG Zsr9Tu+lKVRp
7HVSwyqQupa/h06/PsbXlUvk1l6ZqWq3+qvmwA04Syw+YAnyFGK5LeaSclfu +WMZ68ZO2Rhi
PehVLq6Mq1B0pcsmr+Tv8vUg8k0eSamop8zMrEPkmjyamoo5mFiHyTR5Jqal UZYD3o5mFiv5
VHlVl38l7aapqNzam3EcFtDJIsqMxcAyZUYI2nHfn6VDNrepJfzCC1Se1cTL bF41h3yIDxuM
pJGVIyUUd846z7ZLdHZHAzkrxa2v26J2+5m15VHlVnw6rcRaBqN7cqktxZBy 8Yha3wVQNtIZ
mHf7wYqRyDUFvfeIHaGCe1gt5J5dqTSxAKV2MxwiTPkgqOrDO725ftUSsFPV 3St579dFvsa/
lUeVWYL/AFOSOHa9jE93dvbwl42YRhDISSNw3khBwNuOTk9KjttW1S7huZIo bUm2gLFGBUzy
AyL8pLYVSUBBOeD+NL2yH9RqWbutPP5fnp/wNTX8qjyqr6RfPcQsl7NELoTG HZ5LQHcEDFdr
M2SBk5VmBAyDitXy/arU7q5z1KTpy5WUvKo8qrvl+1Hl+1PmM7FLyqXyqu
Re: Limit Copy, Paste, Cut keyboard shortcuts to EMF tree only (not the entire editor) [message #416413 is a reply to message #416412] Wed, 30 January 2008 16:39 Go to previous messageGo to next message
Steve Blass is currently offline Steve BlassFriend
Messages: 276
Registered: July 2009
Senior Member
Very nice. Thanks for sharing the forms tips.
-
Steve


Mircea Luchian wrote:
> Hello Ed,
>
> I agree with your point on the properties view. It's purpose is
> justified for requirements not needing GUI validation, however, to
> implement on the spot GUI validation, the Properties view is not
> sufficient. For this reason, I believe an effort in 4.0 should be
> reserved towards the adjustment of the JET templates to generate an EMF
> editor using eclipse forms.
>
> Here are the main changes I made. I feel that some of them could be
> improvements made for 4.0 whenever possible.
>
> * I created a composite panel for every node in the tree. I modified
> the ObjectDetailsPage and removed the SampleSection inner class. I
> replaced it with a DetailsSection class responsible to create the
> panels and update them in function of the "Object input" variable
>
> private void detailsPageSwitch(final Object input)
> {
> sampleSectionHolder = new DetailSection(toolkit, input,
> adapterFactoryItemDelegator, adapterFactoryLabelProvider,
> mform.getMessageManager(), this);
> ScrolledPropertiesBlock.setDetailsPage(this);
> sampleSectionHolder.createSection(input);
> }
>
> public void update()
> {
>
> detailsSection.setText(adapterFactoryItemDelegator.getText(i nput));
> detailsSection.layout();
> ScrolledPropertiesBlock.setDetailsPage(this);
> sampleSectionHolder.updateSection(input);
> }
>
> With the detailsPageSwitch(), I pass the message manager of the
> managed form (mform) SrolledPropertiesBlock class to every panel.
> As such, the panels now have control on the message manager and
> can add / remove errors depending whether the user types in a
> widget or switches from the one node to another.
> _
> _
>
> * There is one "problem" with radio buttons (A = "true" and B =
> "false" initially) attached to boolean attributes in EMF.
>
> and
>
> As radio buttons are mutually exclusive, setting B, unsets A
> automatically. This will register as two actions in the EMF's
> command stack (B = "true", then A = "false"). If the user presses
> undo once, the B radio button will be "false" leaving A radio
> button "false" as well. The user must execute a second undo
> action to revert to the initial state.
>
> To prevent this from happening, I had to "hack" the
> EditingDomainActionBarContributor class located in
> org.eclipse.emf.edit.ui.action so I can call cutom Undo and Redo
> actions.
>
> I created the following and put all custom code in my plugin:
>
> public class CustomEditingDomainActionBarContributor extends
> MultiPageEditorActionBarContributor implements IMenuListener,
> IPropertyListener {
> [....]
>
> protected CustomUndoAction customUndoAction;
>
> protected CustomRedoAction customRedoAction;
> [....]
> }
>
> Custom Undo/Redo actions call themselves recursively if they
> detect that variables reserved for a group of mutually exclusive
> radio buttons are all set to false
>
> public class CustomRedoAction extends RedoAction {
>
> @Override
> public void run()
> {
> super.run();
> MyEditor.updateFromRedoUndo();
>
> Command mostRecentCommand =
> domain.getCommandStack().getMostRecentCommand();
>
> if (mostRecentCommand instanceof SetCommand)
> {
> SetCommand mostRecentSetCommand = (SetCommand)
> mostRecentCommand;
> EObject owner = mostRecentSetCommand.getOwner();
>
>
> /*********************************************************** ************************************************
> * MyNodeImpl OWNER
>
> ************************************************************ **********************************************/
> if (owner instanceof MyNodeImpl)
> {
> if (!((MyNodeImpl) owner).isReadOnly() &&
> !((MyNodeImpl) owner).isReadWrite() && !((MyNodeImpl)
> owner).isWriteOnly())
> run(); // RUN AGAIN TO SET THE RADIO BUTTON
> THAT WAS DESELECTED
> [....]
> _
>
>
>
> _
> * The eclipse forms panels (with every widget bound to the model)
> was not updated during an Undo or Redo action. I added both
> actions a MyEditor.updateFromRedoUndo(); statement that calls the
> editor to refresh the current selected panel in the Scrolled
> properties block:
>
> public static void updateFromRedoUndo()
> {
> try
> {
> if
> (scrolledPropertiesBlock.treeViewer.getTree().getSelection() .length
> != 0)
> {
> scrolledPropertiesBlock.getObjectDetailsPage().update();
> }
> }
> catch (Exception e)
> {
> }
> }_
> _
> This update mechanism for the eclipse forms does not exist on the
> EMF example found on the net.
> _
> _
> _
>
> _
> * I added error and warning status variables for every node in the
> model. This is really custom work, however with the usage of the
> eclispe forms' message manager, this complements very well the
> user experience.
> Data can have errors or warnings in the panels, so I changed the
> item providers for every node to display the icons in an
> error/warning state. Whenever we use validation on such panels,
> the nodes in the tree must reflect these same error states for
> later correction (say the errors exist but the user chooses to
> save/closes his file and chooses fix the errors later during the
> day; he must then know where the errors are...).
>
> I also made the parent nodes aware if their children have errors
> or warnings so they can be propagated to the root node. This makes
> the errors easier to search if the nodes are collapsed. How the
> error/warning flags are initialized on the faulty node is custom
> implementation, however, the error propagation to the parent nodes
> is performed in the model's implementation classes. Only the
> latter mechanism could be accomodated in a future version of EMF.
> See pictures below for a better understanding. I had to hide some
> information as the product is still under development.
>
> 1.
> 2.
> 3.
> 4.
> 5.
> 6.No more errors / warnings in the tree
>
> Thanks,
>
> Mircea
>
>
>
>
>
> Ed Merks wrote:
>> Tom,
>>
>> All that command stuff came long after we'd already done the EMF.Edit
>> support. It's impossible to keep up with the Jone's when there are
>> dozens of them and only two or three of us. Maybe an Eclipse 4.0
>> effort would allow us to throw away some of the cruft and focus on
>> supporting only the latests and greatest patterns.
>>
>> I'd be happy to provide hooks for whatever solution works well for
>> this type of scenario. I hope we can find at least a bit of time this
>> release to look at how to support forms and exploit data binding. I'm
>> kind of sick and tired of the limitations of the crummy properties
>> view (which doesn't even work for RAP).
>>
>>
>> Tom Schindl wrote:
>>> Ed Merks schrieb:
>>>> Mircea,
>>>>
>>>> Gosh, I don't have a lot of experience with this type of thing. I
>>>> hope someone else has some clue, because I won't even know where to
>>>> begin. Maybe Tom will read this and have an idea...
>>>>
>>>>
>>>
>>> Tom has read it :-) I'm not really skilled when it comes to all those
>>> key-binding thingies.
>>>
>>> But the following could work. If your TextWidget receives focus I'd
>>> try to reset the copy/cut/paste actions to their original counter parts:
>>>
>>> widget.addFocusListener( new FocusListener() {
>>> IAction emfcutaction =
>>> actionBars.getGlobalActionHandler(ActionFactory.CUT.getId()) ;
>>> IAction emfcopyaction =
>>> actionBars.getGlobalActionHandler(ActionFactory.COPY.getId() );
>>> IAction emfpasteaction =
>>> actionBars.getGlobalActionHandler(ActionFactory.PASTE.getId( ));
>>>
>>> IAction standardCut = ActionFactory.CUT.create(....);
>>> IAction standardCopy = ActionFactory.COPY.create(....);
>>> IAction standardPaste = ActionFactory.PASTE.create(....);
>>>
>>> public void focusLost(FocusEvent e) {
>>>
>>> actionbars.setGlobalActionHandler(ActionFactory.CUT.getId(), emfcutaction);
>>>
>>> actionbars.setGlobalActionHandler(ActionFactory.COPY.getId() ,emfcopyaction);
>>>
>>> actionbars.setGlobalActionHandler(ActionFactory.PASTE.getId( ),emfpasteaction);
>>>
>>> actionbars.updateActionBars();
>>> }
>>>
>>> public void focusGained(FocusEvent e) {
>>> actionbars.setGlobalActionHandler(ActionFactory.CUT.getId(), standardCut);
>>>
>>> actionbars.setGlobalActionHandler(ActionFactory.COPY.getId() ,standardCopy);
>>>
>>> actionbars.setGlobalActionHandler(ActionFactory.PASTE.getId( ),standardPaste);
>>>
>>> actionbars.updateActionBars();
>>> }
>>> });
>>>
>>> If this works it would be great if the
>>> EditingDomainActionBarContributor would provide a possibility to
>>> restore the actions.
>>>
>>> Another possible solution that comes to my mind is usage of the
>>> commands framework. I don't know if COPY/CUT/PASTE are handled by
>>> commands (but Paul knows so I've added eclipse.platform to the CC
>>> list :-).
>>>
>>> Tom
>>>
>>>> M. Luchian wrote:
>>>>> Hello,
>>>>>
>>>>> The EditingDomainActionBarContributor.java class defined in the EMF
>>>>> plugins overrides the Windows CUT/COPY/PASTE actions' keyboard
>>>>> shortcuts (CTRL-X, CTRL-C, CTRL-V) with EMF's own.
>>>>>
>>>>> This is correct as long as the actions are performed on the tree.
>>>>> However, I implemented an editor based on eclipse forms, with text
>>>>> widgets (Windows native) handling the COPY CUT PASTE actions with a
>>>>> right click of a mouse. As the mouse actions work fine and interact
>>>>> with the windows' clipboard, pressing the keyboard shortcuts for
>>>>> the same actions in the text widgets will call the actions reserved
>>>>> by EMF .. This is problematic as the CTRL-X, CTRL-C, CTRL-V
>>>>> shortcuts are overridden with the EMF copy, cut, paste actions for
>>>>> the entire editor.
>>>>>
>>>>> Is there a possible way to register the actions for the editor's
>>>>> tree only? (See picture)
>>>>>
>>>>>
>>>>>
>>>>> I have a CustomEditingDomainActionBarContributor.java replacing a
>>>>> few small things from the original
>>>>> EditingDomainActionBarContributor.java class, but I don't want to
>>>>> manage the registering / unregistering the copy, cut and paste
>>>>> actions when the tree is in focus or not.
>>>>>
>>>>> Any help appreciated
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Mircea
>>>>
>>>
>>>
>
Re: Limit Copy, Paste, Cut keyboard shortcuts to EMF tree only (not the entire editor) [message #416414 is a reply to message #416412] Wed, 30 January 2008 17:08 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 33142
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------040700020803000804040900
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Mircea,

Wow, lots of good helpful details! I hope we have some time for forms
even for this release. It would be really good to add your comments to
https://bugs.eclipse.org/bugs/show_bug.cgi?id=108470 so we can track all
the folks who have been contributing towards the forms stuff in various
ways. We hold contributors in high regard!


Mircea Luchian wrote:
> Hello Ed,
>
> I agree with your point on the properties view. It's purpose is
> justified for requirements not needing GUI validation, however, to
> implement on the spot GUI validation, the Properties view is not
> sufficient. For this reason, I believe an effort in 4.0 should be
> reserved towards the adjustment of the JET templates to generate an
> EMF editor using eclipse forms.
>
> Here are the main changes I made. I feel that some of them could be
> improvements made for 4.0 whenever possible.
>
> * I created a composite panel for every node in the tree. I
> modified the ObjectDetailsPage and removed the SampleSection
> inner class. I replaced it with a DetailsSection class
> responsible to create the panels and update them in function of
> the "Object input" variable
>
> private void detailsPageSwitch(final Object input)
> {
> sampleSectionHolder = new DetailSection(toolkit, input,
> adapterFactoryItemDelegator, adapterFactoryLabelProvider,
> mform.getMessageManager(), this);
> ScrolledPropertiesBlock.setDetailsPage(this);
> sampleSectionHolder.createSection(input);
> }
>
> public void update()
> {
>
> detailsSection.setText(adapterFactoryItemDelegator.getText(i nput));
> detailsSection.layout();
> ScrolledPropertiesBlock.setDetailsPage(this);
> sampleSectionHolder.updateSection(input);
> }
>
> With the detailsPageSwitch(), I pass the message manager of the
> managed form (mform) SrolledPropertiesBlock class to every
> panel. As such, the panels now have control on the message
> manager and can add / remove errors depending whether the user
> types in a widget or switches from the one node to another.
> _
> _
>
> * There is one "problem" with radio buttons (A = "true" and B =
> "false" initially) attached to boolean attributes in EMF.
>
> and
>
> As radio buttons are mutually exclusive, setting B, unsets A
> automatically. This will register as two actions in the EMF's
> command stack (B = "true", then A = "false"). If the user
> presses undo once, the B radio button will be "false" leaving
> A radio button "false" as well. The user must execute a second
> undo action to revert to the initial state.
>
> To prevent this from happening, I had to "hack" the
> EditingDomainActionBarContributor class located in
> org.eclipse.emf.edit.ui.action so I can call cutom Undo and
> Redo actions.
>
> I created the following and put all custom code in my plugin:
>
> public class CustomEditingDomainActionBarContributor extends
> MultiPageEditorActionBarContributor implements IMenuListener,
> IPropertyListener {
> [....]
>
> protected CustomUndoAction customUndoAction;
>
> protected CustomRedoAction customRedoAction;
> [....]
> }
>
> Custom Undo/Redo actions call themselves recursively if they
> detect that variables reserved for a group of mutually exclusive
> radio buttons are all set to false
>
> public class CustomRedoAction extends RedoAction {
>
> @Override
> public void run()
> {
> super.run();
> MyEditor.updateFromRedoUndo();
>
> Command mostRecentCommand =
> domain.getCommandStack().getMostRecentCommand();
>
> if (mostRecentCommand instanceof SetCommand)
> {
> SetCommand mostRecentSetCommand = (SetCommand)
> mostRecentCommand;
> EObject owner = mostRecentSetCommand.getOwner();
>
>
> /*********************************************************** ************************************************
> * MyNodeImpl OWNER
>
> ************************************************************ **********************************************/
> if (owner instanceof MyNodeImpl)
> {
> if (!((MyNodeImpl) owner).isReadOnly() &&
> !((MyNodeImpl) owner).isReadWrite() && !((MyNodeImpl)
> owner).isWriteOnly())
> run(); // RUN AGAIN TO SET THE RADIO BUTTON
> THAT WAS DESELECTED
> [....]
> _
>
>
>
> _
> * The eclipse forms panels (with every widget bound to the model)
> was not updated during an Undo or Redo action. I added both
> actions a MyEditor.updateFromRedoUndo(); statement that calls
> the editor to refresh the current selected panel in the Scrolled
> properties block:
>
> public static void updateFromRedoUndo()
> {
> try
> {
> if
> (scrolledPropertiesBlock.treeViewer.getTree().getSelection() .length
> != 0)
> {
> scrolledPropertiesBlock.getObjectDetailsPage().update();
> }
> }
> catch (Exception e)
> {
> }
> }_
> _
> This update mechanism for the eclipse forms does not exist on
> the EMF example found on the net.
> _
> _
> _
>
> _
> * I added error and warning status variables for every node in the
> model. This is really custom work, however with the usage of the
> eclispe forms' message manager, this complements very well the
> user experience.
> Data can have errors or warnings in the panels, so I changed the
> item providers for every node to display the icons in an
> error/warning state. Whenever we use validation on such panels,
> the nodes in the tree must reflect these same error states for
> later correction (say the errors exist but the user chooses to
> save/closes his file and chooses fix the errors later during the
> day; he must then know where the errors are...).
>
> I also made the parent nodes aware if their children have errors
> or warnings so they can be propagated to the root node. This
> makes the errors easier to search if the nodes are collapsed.
> How the error/warning flags are initialized on the faulty node
> is custom implementation, however, the error propagation to the
> parent nodes is performed in the model's implementation classes.
> Only the latter mechanism could be accomodated in a future
> version of EMF. See pictures below for a better understanding. I
> had to hide some information as the product is still under
> development.
>
> 1.
> 2.
> 3.
> 4.
> 5.
> 6.No more errors / warnings in the tree
>
> Thanks,
>
> Mircea
>
>
>
>
>
> Ed Merks wrote:
>> Tom,
>>
>> All that command stuff came long after we'd already done the EMF.Edit
>> support. It's impossible to keep up with the Jone's when there are
>> dozens of them and only two or three of us. Maybe an Eclipse 4.0
>> effort would allow us to throw away some of the cruft and focus on
>> supporting only the latests and greatest patterns.
>>
>> I'd be happy to provide hooks for whatever solution works well for
>> this type of scenario. I hope we can find at least a bit of time
>> this release to look at how to support forms and exploit data
>> binding. I'm kind of sick and tired of the limitations of the crummy
>> properties view (which doesn't even work for RAP).
>>
>>
>> Tom Schindl wrote:
>>> Ed Merks schrieb:
>>>> Mircea,
>>>>
>>>> Gosh, I don't have a lot of experience with this type of thing. I
>>>> hope someone else has some clue, because I won't even know where to
>>>> begin. Maybe Tom will read this and have an idea...
>>>>
>>>>
>>>
>>> Tom has read it :-) I'm not really skilled when it comes to all
>>> those key-binding thingies.
>>>
>>> But the following could work. If your TextWidget receives focus I'd
>>> try to reset the copy/cut/paste actions to their original counter
>>> parts:
>>>
>>> widget.addFocusListener( new FocusListener() {
>>> IAction emfcutaction =
>>> actionBars.getGlobalActionHandler(ActionFactory.CUT.getId()) ;
>>> IAction emfcopyaction =
>>> actionBars.getGlobalActionHandler(ActionFactory.COPY.getId() );
>>> IAction emfpasteaction =
>>> actionBars.getGlobalActionHandler(ActionFactory.PASTE.getId( ));
>>>
>>> IAction standardCut = ActionFactory.CUT.create(....);
>>> IAction standardCopy = ActionFactory.COPY.create(....);
>>> IAction standardPaste = ActionFactory.PASTE.create(....);
>>>
>>> public void focusLost(FocusEvent e) {
>>>
>>> actionbars.setGlobalActionHandler(ActionFactory.CUT.getId(), emfcutaction);
>>>
>>> actionbars.setGlobalActionHandler(ActionFactory.COPY.getId() ,emfcopyaction);
>>>
>>> actionbars.setGlobalActionHandler(ActionFactory.PASTE.getId( ),emfpasteaction);
>>>
>>> actionbars.updateActionBars();
>>> }
>>>
>>> public void focusGained(FocusEvent e) {
>>> actionbars.setGlobalActionHandler(ActionFactory.CUT.getId(), standardCut);
>>>
>>> actionbars.setGlobalActionHandler(ActionFactory.COPY.getId() ,standardCopy);
>>>
>>> actionbars.setGlobalActionHandler(ActionFactory.PASTE.getId( ),standardPaste);
>>>
>>> actionbars.updateActionBars();
>>> }
>>> });
>>>
>>> If this works it would be great if the
>>> EditingDomainActionBarContributor would provide a possibility to
>>> restore the actions.
>>>
>>> Another possible solution that comes to my mind is usage of the
>>> commands framework. I don't know if COPY/CUT/PASTE are handled by
>>> commands (but Paul knows so I've added eclipse.platform to the CC
>>> list :-).
>>>
>>> Tom
>>>
>>>> M. Luchian wrote:
>>>>> Hello,
>>>>>
>>>>> The EditingDomainActionBarContributor.java class defined in the
>>>>> EMF plugins overrides the Windows CUT/COPY/PASTE actions' keyboard
>>>>> shortcuts (CTRL-X, CTRL-C, CTRL-V) with EMF's own.
>>>>>
>>>>> This is correct as long as the actions are performed on the tree.
>>>>> However, I implemented an editor based on eclipse forms, with text
>>>>> widgets (Windows native) handling the COPY CUT PASTE actions with
>>>>> a right click of a mouse. As the mouse actions work fine and
>>>>> interact with the windows' clipboard, pressing the keyboard
>>>>> shortcuts for the same actions in the text widgets will call the
>>>>> actions reserved by EMF ... This is problematic as the CTRL-X,
>>>>> CTRL-C, CTRL-V shortcuts are overridden with the EMF copy, cut,
>>>>> paste actions for the entire editor.
>>>>>
>>>>> Is there a possible way to register the actions for the editor's
>>>>> tree only? (See picture)
>>>>>
>>>>>
>>>>>
>>>>> I have a CustomEditingDomainActionBarContributor.java replacing a
>>>>> few small things from the original
>>>>> EditingDomainActionBarContributor.java class, but I don't want to
>>>>> manage the registering / unregistering the copy, cut and paste
>>>>> actions when the tree is in focus or not.
>>>>>
>>>>> Any help appreciated
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Mircea
>>>>
>>>
>>>
>


--------------040700020803000804040900
Content-Type: multipart/related;
boundary="------------060305050908010501090008"


--------------060305050908010501090008
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">
Mircea,<br>
<br>
Wow, lots of good helpful details!&nbsp; I hope we have some time for forms
even for this release.&nbsp; It would be really good to add your comments to
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108470">https://bugs.eclipse.org/bugs/show_bug.cgi?id=108470</a>
so we can track all the folks who have been contributing towards the
forms stuff in various ways.&nbsp; We hold contributors in high regard!<br>
<br>
<br>
Mircea Luchian wrote:
<blockquote cite="mid:fnq7sm$7bu$1@build.eclipse.org" type="cite">
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
Hello Ed, <br>
<br>
I agree with your point on the properties view. It's purpose is
justified for requirements not needing GUI validation, however, to
implement on the spot GUI validation, the Properties view is not
sufficient. For this reason, I believe an effort in 4.0 should be
reserved towards the adjustment of the JET templates to generate an EMF
editor using eclipse forms. <br>
<br>
Here are the main changes I made. I feel that some of them could be
improvements made for 4.0 whenever possible.<br>
<br>
<ul>
<li>I created a composite panel for every node in the tree. I
modified the ObjectDetailsPage and removed the SampleSection inner
class. I replaced it with a DetailsSection class responsible to create
the panels and update them in function of the "Object input" variable<br>
<br>
<font face="Courier New">private void detailsPageSwitch(final
Object input)<br>
{<br>
&nbsp;&nbsp;&nbsp;&nbsp; sampleSectionHolder = new DetailSection(toolkit, input,
adapterFactoryItemDelegator, adapterFactoryLabelProvider,
mform.getMessageManager(), this);<br>
&nbsp;&nbsp;&nbsp;&nbsp; ScrolledPropertiesBlock.setDetailsPage(this);<br>
&nbsp;&nbsp;&nbsp;&nbsp; sampleSectionHolder.createSection(input);<br>
}<br>
<br>
public void update()<br>
{<br>
&nbsp;&nbsp;&nbsp;&nbsp; detailsSection.setText(adapterFactoryItemDelegator.getText(i nput)); <br>
&nbsp;&nbsp;&nbsp;&nbsp; detailsSection.layout();<br>
&nbsp;&nbsp;&nbsp;&nbsp; ScrolledPropertiesBlock.setDetailsPage(this);<br>
&nbsp;&nbsp;&nbsp;&nbsp; sampleSectionHolder.updateSection(input);<br>
}<br>
<br>
</font>With the detailsPageSwitch(), I pass the message manager
of
the managed form (mform) SrolledPropertiesBlock class to every panel.
As such, the panels now have control on the message manager and can add
/ remove errors depending whether the user types in a widget or
switches from the one node to another. <br>
<u> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
</u><br>
</li>
</ul>
<ul>
<li>There is one "problem" with radio buttons (A = "true" and B =
"false" initially) attached to boolean attributes in EMF.<br>
<br>
<img src="cid:part1.01060806.08090601@ca.ibm.com" alt=""> and <img
src="cid:part2.05030804.08080306@ca.ibm.com" alt=""><br>
<br>
As radio buttons are mutually exclusive, setting B, unsets A
automatically. This will register as two actions in the EMF's command
stack (B = "true", then A = "false"). If the user presses undo once,
the B radio button will be "false"&nbsp; leaving&nbsp; A radio button "false" as
well.&nbsp; The user must execute a second undo action to revert to the
initial state. <br>
<br>
To prevent this from happening, I had to "hack" the <font
face="Courier New, Courier, monospace">EditingDomainActionBarContributor</font>
class located in <font face="Courier New, Courier, monospace">org.eclipse.emf.edit.ui.action</font>&nbsp;
so I can call cutom Undo and Redo actions. <br>
<br>
I created the following and put all custom code in my plugin:<br>
<br>
<font face="Courier New, Courier, monospace">public class
CustomEditingDomainActionBarContributor extends
MultiPageEditorActionBarContributor implements IMenuListener,
IPropertyListener {<br>
[....]<br>
<br>
&nbsp;&nbsp;&nbsp; protected CustomUndoAction customUndoAction;<br>
<br>
&nbsp;&nbsp;&nbsp; protected CustomRedoAction customRedoAction;<br>
[....]<br>
}<br>
<br>
</font>Custom Undo/Redo actions call themselves recursively if
they
detect that variables reserved for a group of mutually exclusive radio
buttons are all set to false<br>
<font face="Courier New, Courier, monospace"><br>
public class CustomRedoAction extends RedoAction {<br>
<br>
&nbsp;&nbsp;&nbsp; @Override<br>
&nbsp;&nbsp;&nbsp; public void run()<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; super.run();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MyEditor.updateFromRedoUndo();<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Command mostRecentCommand =
domain.getCommandStack().getMostRecentCommand();<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (mostRecentCommand instanceof SetCommand)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SetCommand mostRecentSetCommand = (SetCommand)
mostRecentCommand;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EObject owner = mostRecentSetCommand.getOwner();<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
/*********************************************************** ************************************************ <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* </font><font face="Courier New, Courier, monospace">MyNodeImpl
</font><font face="Courier New, Courier, monospace">OWNER<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;************************************************** ********************************************************/ <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (owner instanceof MyNodeImpl)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (!((</font><font
face="Courier New, Courier, monospace">MyNodeImpl</font><font
face="Courier New, Courier, monospace">) owner).isReadOnly()
&amp;&amp; !((</font><font face="Courier New, Courier, monospace">MyNodeImpl</font><font
face="Courier New, Courier, monospace">) owner).isReadWrite()
&amp;&amp; !((</font><font face="Courier New, Courier, monospace">MyNodeImpl</font><font
face="Courier New, Courier, monospace">) owner).isWriteOnly())<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; run(); // RUN AGAIN TO SET THE RADIO BUTTON THAT
WAS DESELECTED<br>
[....]<br>
</font><u> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
<br>
<br>
<br>
</u></li>
<li>The eclipse forms panels (with every widget bound to the model)
was not updated during an Undo or Redo action. I added both actions a&nbsp; <font
face="Courier New, Courier, monospace">MyEditor.updateFromRedoUndo();</font>
statement that calls the editor to refresh the current selected panel
in the Scrolled properties block: <br>
<br>
<font face="Courier New, Courier, monospace">public static void
updateFromRedoUndo()<br>
{<br>
&nbsp;&nbsp;&nbsp; try<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if
(scrolledPropertiesBlock.treeViewer.getTree().getSelection() .length !=
0)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; scrolledPropertiesBlock.getObjectDetailsPage().update();<br >
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; catch (Exception e)<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; }<br>
}</font><u><br>
</u><br>
This update mechanism for the eclipse forms does not exist on the EMF
example found on the net.<br>
<u> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;
</u><br>
<u> <br>
<br>
</u></li>
<li>I added error and warning status variables for every node in
the
model. This is really custom work, however with the usage of the
eclispe forms' message manager, this complements very well the user
experience. <br>
Data can have errors or warnings in the panels, so I changed the item
providers for every node to display the icons in an error/warning
state. Whenever we use validation on such panels, the nodes in the tree
must reflect these same error states for later correction (say the
errors exist but the user chooses to save/closes his file and chooses
fix the errors later during the day; he must then know where the errors
are...).<br>
<br>
I also made the parent nodes aware if their children have errors or
warnings so they can be propagated to the root node. This makes the
errors easier to search if the nodes are collapsed. How the
error/warning flags are initialized on the faulty node is custom
implementation, however, the error propagation to the parent nodes is
performed in the model's implementation classes. Only the latter
mechanism could be accomodated in a future version of EMF. See pictures
below for a better understanding. I had to hide some information as the
product is still under development. <br>
<br>
1.<img src="cid:part3.01050608.06060202@ca.ibm.com" alt=""> <br>
2.<img src="cid:part4.07050308.05060709@ca.ibm.com" alt=""><br>
3.<img src="cid:part5.00080906.08050204@ca.ibm.com" alt=""><br>
4.<img src="cid:part6.08010708.04050605@ca.ibm.com" alt=""><br>
5.<img src="cid:part7.04050708.02000902@ca.ibm.com" alt=""><br>
6.<img src="cid:part8.08070005.08090901@ca.ibm.com" alt="">No more
errors / warnings in the tree<br>
<br>
</li>
</ul>
Thanks, <br>
<br>
Mircea<br>
<br>
<br>
<br>
<br>
<br>
Ed Merks wrote:
<blockquote cite="midfnn379$99b$1@build.eclipse.org" type="cite">Tom,
<br>
<br>
All that command stuff came long after we'd already done the EMF.Edit
support.&nbsp; It's impossible to keep up with the Jone's when there are
dozens of them and only two or three of us.&nbsp; Maybe an Eclipse 4.0
effort would allow us to throw away some of the cruft and focus on
supporting only the latests and greatest patterns. <br>
<br>
I'd be happy to provide hooks for whatever solution works well for this
type of scenario.&nbsp; I hope we can find at least a bit of time this
release to look at how to support forms and exploit data binding.&nbsp; I'm
kind of sick and tired of the limitations of the crummy properties view
(which doesn't even work for RAP). <br>
<br>
<br>
Tom Schindl wrote: <br>
<blockquote type="cite">Ed Merks schrieb: <br>
<blockquote type="cite">Mircea, <br>
<br>
Gosh, I don't have a lot of experience with this type of thing.&nbsp;&nbsp; I
hope someone else has some clue, because I won't even know where to
begin.&nbsp; Maybe Tom will read this and have an idea... <br>
<br>
<br>
</blockquote>
<br>
Tom has read it :-) I'm not really skilled when it comes to all those
key-binding thingies. <br>
<br>
But the following could work. If your TextWidget receives focus I'd try
to reset the copy/cut/paste actions to their original counter parts: <br>
<br>
widget.addFocusListener( new FocusListener() { <br>
&nbsp;&nbsp;&nbsp; IAction emfcutaction =
actionBars.getGlobalActionHandler(ActionFactory.CUT.getId()) ; <br>
&nbsp;&nbsp;&nbsp; IAction emfcopyaction =
actionBars.getGlobalActionHandler(ActionFactory.COPY.getId() ); <br>
&nbsp;&nbsp;&nbsp; IAction emfpasteaction =
actionBars.getGlobalActionHandler(ActionFactory.PASTE.getId( )); <br>
<br>
&nbsp;&nbsp;&nbsp; IAction standardCut = ActionFactory.CUT.create(....); <br>
&nbsp;&nbsp;&nbsp; IAction standardCopy = ActionFactory.COPY.create(....); <br>
&nbsp;&nbsp;&nbsp; IAction standardPaste = ActionFactory.PASTE.create(....); <br>
<br>
&nbsp;&nbsp;&nbsp; public void focusLost(FocusEvent e) { <br>
<br>
actionbars.setGlobalActionHandler(ActionFactory.CUT.getId(), emfcutaction);
<br>
actionbars.setGlobalActionHandler(ActionFactory.COPY.getId() ,emfcopyaction);
<br>
actionbars.setGlobalActionHandler(ActionFactory.PASTE.getId( ),emfpasteaction);
<br>
actionbars.updateActionBars(); <br>
&nbsp;&nbsp;&nbsp; } <br>
<br>
&nbsp;&nbsp;&nbsp; public void focusGained(FocusEvent e) { <br>
actionbars.setGlobalActionHandler(ActionFactory.CUT.getId(), standardCut);
<br>
actionbars.setGlobalActionHandler(ActionFactory.COPY.getId() ,standardCopy);
<br>
actionbars.setGlobalActionHandler(ActionFactory.PASTE.getId( ),standardPaste);
<br>
actionbars.updateActionBars(); <br>
&nbsp;&nbsp;&nbsp; } <br>
}); <br>
<br>
If this works it would be great if the
EditingDomainActionBarContributor would provide a possibility to
restore the actions. <br>
<br>
Another possible solution that comes to my mind is usage of the
commands framework. I don't know if COPY/CUT/PASTE are handled by
commands (but Paul knows so I've added eclipse.platform to the CC list
:-). <br>
<br>
Tom <br>
<br>
<blockquote type="cite">M. Luchian wrote: <br>
<blockquote type="cite">Hello, <br>
<br>
The EditingDomainActionBarContributor.java class defined in the EMF
plugins overrides the Windows CUT/COPY/PASTE actions' keyboard
shortcuts (CTRL-X, CTRL-C, CTRL-V) with EMF's own. <br>
<br>
This is correct as long as the actions are performed on the tree.
However, I implemented an editor based on eclipse forms, with text
widgets (Windows native) handling the COPY CUT PASTE actions with a
right click of a mouse. As the mouse actions work fine and interact
with the windows' clipboard, pressing the keyboard shortcuts for the
same actions in the text widgets will call the actions reserved by EMF
.... This is problematic as the CTRL-X, CTRL-C, CTRL-V shortcuts are
overridden with the EMF copy, cut, paste actions for the entire editor.
<br>
<br>
Is there a possible way to register the actions for the editor's tree
only? (See picture) <br>
<br>
<br>
<br>
I have a CustomEditingDomainActionBarContributor.java replacing a few
small things from the original EditingDomainActionBarContributor.java
class, but I don't want to manage the registering / unregistering the
copy, cut and paste actions when the tree is in focus or not. <br>
<br>
Any help appreciated <br>
<br>
Thanks, <br>
<br>
Mircea </blockquote>
<br>
</blockquote>
<br>
<br>
</blockquote>
</blockquote>
<br>
</blockquote>
<br>
</body>
</html>

--------------060305050908010501090008
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-ID: <part1.01060806.08090601@ca.ibm.com>

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL DBkSEw8UHRof
Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwL DBgNDRgyIRwh
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjL/wAAR
CAEWANwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI CQoL/8QAtRAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkK
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1 dnd4eXqDhIWG
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW 19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcI CQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz UvAVYnLRChYk
NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOE
hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU 1dbX2Nna4uPk
5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD1Cw0O0urKOZ94Zs5C4x1I 9KSTTdDikaOS
+jR1OCrTICPwxWno/wDyCof+Bf8AoRrCudY1Kzd4LLVtNtFWSXdFdWLzPuMr nO4TJgEEcY98
88b1JtTl6mUYrlRox6Bp0sayRyO6NyGVlIP44rK1SGy00nFld3IWGWdzE8Y2 Rx7Q7Hdj+8OB
k10Gjyebpwl6+ZLK4PqDIxz+tYPiiG1f+zXujYoq3si+bexB41BjlOCCRwSF 7jkD0p05Nysx
SStdF06JaqCzI+0cnDjOP++as/8ACN2PrL+a/wCFcx4fuZ59cvC+qLdxtFcM PLeco/7xcFVc
bAFHy/Kx69T1rW8Z2f286Nb/ANmWGp7rxj9lv22xNiGTqdj8jt8v5UVXKDsV CKZo/wDCN2Pr
L+a/4Uf8I3Y+sv5r/hWvRWXtJFciMj/hG7H1l/Nf8KP+EbsfWX81/wAK16KP aSDkRkf8I3Y+
sv5r/hR/wjdj6y/mv+Fa9FHtJByIyP8AhG7H1l/Nf8KP+EbsfWX81/wrXoo9 pIORGR/wjdj6
y/mv+FH/AAjdj6y/mv8AhWvRR7SQciMj/hG7H1l/Nf8ACj/hG7H1l/Nf8K16 KPaSDkRkf8I3
Y+sv5r/hR/wjdj6y/mv+Fa9FHtJByIyP+EbsfWX81/wo/wCEbsfWX81/wrXo o9pIORGR/wAI
3Y+sv5r/AIUf8I3Y+sv5r/hWvRR7SQciMj/hG7H1l/Nf8KP+EbsfWX81/wAK 16KPaSDkRkf8
I3Y+sv5r/hR/wjdj6y/mv+Fa9FHtJByIo6P/AMgqH/gX/oRq9VHR/wDkFQ/8 C/8AQjV6nV/i
S9WEPhQVCbcFiRI6gnOBj+oqasbWnMc8RW0s7txDIUhvJCkRbfHyWCPggFsf KfTjOahDYWPh
6wtrp7+NJluJ1YyZlYj5yGYAHpkjsB+FaskojIG0sT0ArB0i4ml1FN+nabZS +VJmOxmMiMu6
PBLGNDkZbjH488S+JXuF0G+ZY4vMFpLwZCBjaNxzt6jnAxzgdM8Wm5yV2CXQ 1BexmVogrGRV
DMgZcgHIBIz0OD+RqaOQSKSAQQcEHtXiU4lSS8P2azAWBCCr8jryOOteyW7S fZJWlVUlxllR
iwVtozg4GR74FXXpKlG9zapS5Gtb3LlFcj4DkL2H7y01mGd7a3lkk1G8a4WY sG+aPMjhRkHI
G08jI6V11YtWdjIKKKKQBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAUdH/5BUP/
AAL/ANCNXqo6P/yCof8AgX/oRq9WlX+JL1ZMPhQVFPa29yALiCKUDkCRA2Pz qWisyiCCztbZ
i1vbQxEjBMaBc/lS3FuLhdrbSCpUq67gQeoIqaqupSPFpd3JGxV0hdlI7EKa abuJ2SMtPDGk
LeOy6bp4k2Jn/RlwBlsYXPB684545OONlIxGj72BzyxIwOn/ANaucvdRETXU MejazD5aybL2
S/RosqDtbaJy5BwMAp3GQOa6CeRjBKPKcDaw3EjHQ+/sPzHvinJy3YXfUqnV 9IscWpure38p
QoiOE2DHAx2GMUSzRazaGPT9Wltzux9otBGzAjkr86Mv6Zqlb3y2+oamh1Kx tT9oU7LgZY/u
o+fvjj8O1SaVMLi+vZBPDODeD95D9w/uE6cn+dc8ZylNxa7lbI1LO2+yWkcB nmnKDmWZtzue
5PQdewAA6AAcVPXK311qr+NUtbd9WNlFFA7rZi08obncMZTL+8xhR/q+cA45 xXVVruK1tAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKOj/APIKh/4F/wChGr1U dH/5BUP/AAL/
ANCNXq0q/wASXqyYfCgooorMoKbJGksTxyKGRwVYHuD1p1FAGX/YWnmZg0Uj DAOGlkIPXqS2
D9P8a0pE8yJ0zjcCM0xR/pUhx1RRnHu3fH9T9B3louwsY32TV7W5upbW5slj uJVkKS27yMp2
KnUMOPlB6cc1Np9jdwTzzXk0Eks03mkwoUA/dqgABJ7LnOavTjMYGM/Oh6Z/ iHsf89x1AJ0O
MCTnHWNh6e3uP19DiVGKd0tQI/KtYLyS5JVJ5UVHYv1VSccf8Cb86l+0Qf8A PaP/AL6FZOp3
EkbQuj3UcTzgSvBAZHVfKJHy7WI+YKOneq8d0WvrRLe61OdXkIlFxZGNAmxj ncYl/iC9+9Dm
lLlsws7XOiorOvNSj0rSYrmWKaUExRBIV3MWdgowMjuRTtK1QapDMxtLi0mg lMUsFxs3o2Ae
qMynIYHgnr61QF+iiigAooooAKKKKACiiigAooooAKKKKACiiigCjo//ACCo f+Bf+hGr1UdH
/wCQVD/wL/0I1erSr/El6smHwoKKKKzKCiiigCFSv2yQcbvLTPrjLe317/gO 81RKf9KkGeiK
cZ927Z/oPqe0tAENyVES7sY8xOvruGOx/wA9x1qaopziMHOPnQdcfxD3H+ex 6EFxA2MTRnOM
YYc5xj/0JfzHrQBG6SLK5EZYMcggj0A7n2rJ8O2F/pulG1u7ZVcTyyL5dwZs q7s4yzAEkbiM
nOcZzzgW7q5jWVCIGummkCRLHtOfk3dWIGMAnrUfn7J4Ip9Mmg85yiO/lEZC lsfKxPRT2qva
xXutkcrepduLCO7s4YJmYCJ4pMof4kYMOo6ZFOtbGK0uLuaMuXupRK+48AhV XA9sKKGuVttO
+0yiVlSMMwjjaRzx2VQWY+wBNR6bqltqsTS2pk2KdrLLC8Tq3cMjgMp6HkDg g96l7/1/XQvo
XaKKKACiiigAooooAKKKKACiiigAooooAKKKKAKOj/8AIKh/4F/6EavVR0f/ AJBUP/Av/QjV
6tKv8SXqyYfCgooorMoKKKKAIlP+lSDPRFOM+7ds/wBB9T2lqJR/pUhx1RRn Hu3fH9T9B3lo
AinOIwc4+dB1x/EPcf57HoZainGYwMZ+dD0z/EPY/wCe46iWgDNvbKK6kxOs /wAsgkjaF3Qg
7dudyEHoSPxqGPTbaOeKb/TpHiJZPOuJ5ACQRnDEjOCR+NWLu6jgkPnNN80g jRYldiTt3Ywv
PQE1Cl9A80cX+mI8hKp5sUyAnBOMsAOgP5UN07pO1ybS6DtW0p9V0JtPEqws 6pkuhdDgglXU
MNynGCuRkEioPDXh5fD1tcxIbUCeXzTHaWot4kO0AhUBOBxnr3rUNzHBY/ab mZIokj3ySSMF
VQBkkk8AVT0bXLTXUu5bGaCe2gn8lJ4JhIknyKxII46tjv0otqyuiNOiiigA ooooAKKKKACi
iigAooooAKKKKACiiigCjo//ACCof+Bf+hGr1UdH/wCQVD/wL/0I1erSr/El 6smHwoKKKKzK
CiiigCJR/pUhx1RRnHu3fH9T9B3lqFQv2yQ8bvLTPrjLe/17fie01AEU4zGB jPzoemf4h7H/
AD3HUAt4FxiGMYxjCjjGMf8AoK/kPSkuQpiXdjHmJ19dwx3H+ex6VNQBk3to kkiBbl7RoJRJ
E0WwEfIU6MCMYJHSoxalrmCa41e4uBA5dEk8kLuKlcnagPRj3qzeXskEyIiT SPJJ5SRxbMk7
C/8AEQOgPeo/ttyk8EU9veQec5RHcwkZClsfKxPRT2qW6fMr7itK2gmr6fPq GhLbwLCZ0aGZ
EnyEdo3VwrEAkA7cZwcdcHGKNEsr62a/uNQW3Sa7uBL5dvIzqg8tFxuKqScq ecDtVu4v47Sz
hnmViJXijwg/idgo6npk1bqvP+un/AH0sFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFAFH
R/8AkFQ/8C/9CNXqo6P/AMgqH/gX/oRq9WlX+JL1ZMPhQUUUVmUFFFFAESn/ AEqQZ6Ipxn3b
tn+g+p7S1EoP2qQ5bGxeMnHVunGM/j6dO8tAEU5xGDnHzoOuP4h7j/PY9CCB BjBk4x1kY+nv
7D9fU5JwTGMFh86fdJB+8PQHj/PHWpaAMy5sYLpvLl8391IGRkmdGB2bc7lI PQkde9Y3hlrb
VrJNQaYzTwXMyYjv5biNCrMgI3MQSUIOcDIbOBmtu+uooZB5qKSX8tAIGlZj t3cBeemfyqBL
yB5o4vJ2PISqebYyICcE4ywA6A/lT5qd7StfQm0t1sLqlrPeaRax26b3We3k I3AfKsisTn6A
1keB9Gn0gXqyaY1nG4jCvOkP2iZhuLNI8LlZOWGGKqx53ZPJ6yN/MiR8Y3AH FIJY2laISKZE
AZkB5UHOCR74P5Gja5Seg+iiikAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBR 0f8A5BUP/Av/
AEI1eqjo/wDyCof+Bf8AoRq9WlX+JL1ZMPhQUUUVmUFFFFAESj/SpDjqijOP du+P6n6DvLUK
/wDH5JyP9WnGBnq3fr+fHp3qagCKcZjAxn50PTP8Q9j/AJ7jqAROMZnkOMdQ vPT29j+Z9sJc
8xLyB+8TqAf4h6//AK/TmpqAMu6smuZFxdTwywSh0ljCbs+XtOQykchj2rO0 j7RqsMF/dXd9
mC4mAt5/J+VkZ4uSiDnGeASOep61ty4aVsR5I4J8wrk49qqWenWenQmGy0+C 2iLbikDFAT0z
gDrwPyq+SL1a1Iu77lfxCJm8KSLBc3Nu5WMGW1t5JnC7lzhIyHIIyCUIYAkg 8VU8INft5xuo
L2CEwR+Ul1PLL/y0mzhpVV842cMAwGAeldNGVaJGUYUgED0FOqe5fQKKKKQB RRRQAUUUUAFF
FFABRRRQAUUUUAFFFFAFHR/+QVD/AMC/9CNXqo6P/wAgqH/gX/oRq9WlX+JL 1ZMPhQUUUVmU
FFFFAESn/SpBnoinGfdu2f6D6ntLUS7vtUmfu7Fx165bPt6dOfXtUtAEU5xG DnHzoOuP4h7j
/PY9CBZ+MyRnpnEZ9s9/978x6ck+7yxt6709em4Z6e34evGaloAxdTS4Zods U86rODOltL5T
MvlEcEsvG4qcZ/Oq8aSm+tDBp+p26LITM9zdh0KbGGMea2TuK9q2Jdvmtt83 P8WzbjOPf2xT
Of8Ap4/8cpOlGUlJk8zWhFfm7XQjJYuVuI41kUAA79uCU5B+8AVz1GeKTRLy TULaW+Mpe3uJ
DJajaAFiwAuD33bS+T/fFaMe3yk2fcwNv0p1PqV0CiiigAooooAKKKKACiii gAooooAKKKKA
CiiigCjo/wDyCof+Bf8AoRq9VHR/+QVD/wAC/wDQjV6tKv8AEl6smHwoKKKK zKCiiigCJR/p
Uhx1RRnHu3fH9T9B3lqFf+PyTgf6tOcjPVu3X8+PTvU1AEU4zGBjPzoemf4h 7H/PcdQBp+Mx
xjpnEh9s9v8Ae/IevCXPES8A/vE6kD+Iev8A+v05qagDmNauoTf2ttJHbTTi dJHgnDmLDIyK
GcIwXLH5dwG4jA5qC6kg02+sJbrT9M01VkZg9uzO8vyMvlqBEMsSwIXOTg4B xxpaho1tdaqL
s3MyMfKMsSJuWQxtvj3cZG1jngjOecjis/U/Cen6y0UmpTPczRLhJXtV3AgA AkhRkAhm2nKk
u2QRgCvYUpSU5GbnNJpGxqd8+naAbiI/v9iJCPJMu6RiFUbdy5ySByyj1IHN UvDGq6nqkcw1
KJILi1lkgmjEaqWOEZThZZAvDEEbm9cjpTPEOsaLoOmWun6hYm5sriMxrAkK PGUUKMFSQMcj
isay8f8AhjTYPIsdKuLWEf8ALOC3jRegHQNjoAPwrWOFq1FzRjdP/P8A4f8A pClWhF2b1/4B
3tMSKONpGjjRWkbc5VQCxwBk+pwAPwrjf+Fn6L/z66h/37T/AOLo/wCFn6L/ AM+uof8AftP/
AIuq+p1/5WL6xS/mO1oriv8AhZ+i/wDPrqH/AH7T/wCLo/4Wfov/AD66h/37 T/4uj6nX/lYf
WKX8x2tFcV/ws/Rf+fXUP+/af/F0f8LP0X/n11D/AL9p/wDF0fU6/wDKw+sU v5jtaK4r/hZ+
i/8APrqH/ftP/i6P+Fn6L/z66h/37T/4uj6nX/lYfWKX8x2tFcV/ws/Rf+fX UP8Av2n/AMXR
/wALP0X/AJ9dQ/79p/8AF0fU6/8AKw+sUv5jtaK4r/hZ+i/8+uof9+0/+Lo/ 4Wfov/PrqH/f
tP8A4uj6nX/lYfWKX8x2tFQWd0l9Y293EGEc8ayqG6gMMjPvzU9c7VnZmydy jo//ACCof+Bf
+hGr1UdH/wCQVD/wL/0I1eq6v8SXqyYfCgooorMoKKKKAIlP+lSDPRFOM+7d s/0H1PaWolJ+
1SDDY2Lzg46t05xn8PTr2loAinOIwc4+dB1x/EPcf57HoQSucZgkGcdSvHT3 9z+R9sk5IjGA
x+dPugk/eHoRx/nnpUtAGLqd+bNoWaeC0WecI8lyMrH+6Lc/MBnKgde9V49W Rr60gi1fTL3z
pCjR2w+dQEZt3+sbjKgdO9bEv7uVjviG7nDvtPTH9KZ5n/TS3/7+/wD1qTpy clJSJvbSxx/j
iwTUZNEgkn8hBBcSNJs3YCojdMj0rj18OW76Z9s/tJEMiPLAkvlIXVSQMgyb gx2nAVWHTnrj
u/Gmj6xejTTpEPmtDHNFIdyLhXVV/iPcZrlY/DXjGOxFn/Z8TwruCCX7O7Jn rtZslfXgjnmv
cwtVKjFKaXq13f8AwDz60L1G3Fv/AIZf8EqnwiPKjk+2tGFbFykqJvhARnPy pIxzhSMNtOce
+LB0jTr2zsorVWZvJik85oxG7IZ3RywBI/iTkk8LVttJ8dsQfssakSeaSgt1 3tgjLY+9kMQc
5znmo20Lxw04m+yKjiBrceW0CARnOVABAHU1s6re9SP3kKCX2H9xVfQtOuTK 8R+yw3Debbt8
0hjjWEyOuM88so59Kih0fTDYTTSySlTZCaF0g+bPn7MsDJjOMDAOMH1HNoeG vGgigiFp8kET
xRjzYflV87h15zk0Q+GvGcCqqWSlFhMAR2gZShbdggkg/Nzk80/aL/n4vv8A 68vxDlfWD+70
/wCD+Bla14fi0i3LDUYZp0k8qWEPHkHByVCuzYBGPmCnkcemY8NuqWpjuPNe QZlj2FfLO7GM
98jByPWuovfDPjHUIwt1p0MhBBMn+jrI2Bj5nHzN+JNQy+EPFs8NtFJY7ktl KxDzohtBJb+9
zyT1rSFeCS55q/qjOdKTvyxf3FyTT9FGu3FksOkmOEzfKrXm9QiMRvJOCAQM 7efSqN5omnSR
xXv2hLWzaONd9pG8qySMzj5VkYMAAhzuOcjgc1onSPHDTmc6dZ+cxYs4gtAz bgQcnHOQTnNN
TRfHMczSLZxYKqvlkW5jAU5GI/ujBJOQOpPqaxU0rfvF/wCBGrje/uP7jLPh UW8xtp7wfbws
siQrFlGSNmBy+eCdjEDB6DJGatat4YgWe+uTe29sWkmeC3zGo2q7ALguGydp ACoR0564nGg+
OBbPb/ZtyPuyzSQs/wAxywDk7gCeoBwcn1NLJoXjaeKSOaxilDs7ZlFu7KWO W2k8rzz8uOea
ftXdP2kfvQuRa+4ykPCCGFZHv2iCg+ekkaF4iI2flVkYj7pGG2n264xdTsIr L7NJb3DzQXMX
mozx+Ww+YqQQCR1U966qTR/HUsbo1pGFkJL7BbqXJUqSxGCSQx5PPNZ83gzx XPHDHJYblgTZ
GPOiG1ck4+96k1cK6vedRfeiZU9LKD+49S8Pf8i1pX/XnD/6AK0qpaPby2uh 6fbzLtlito0d
cg4YKARx71dr56o7zZ6sfhRR0f8A5BUP/Av/AEI1eqjo/wDyCof+Bf8AoRq9 Tq/xJerCHwoK
KKKzKCiiigCJR/pUhx1RRnHu3fH9T9B3lqFSv2yQcbvLTPrjLe317/gO81AE U4zGBjPzoemf
4h7H/PcdQCdDjAk5x1jYent7j9fQ4S5KiJd2MeYnX13DHY/57jrU1AGXc3Uk c8SW8SySXM2x
RK5jA/dl+flJ6L0xSPPe29xbR3Vtbqk8hjDR3DMQdjN0KD+6e9TXljDdlkub OO6iLBwsiqwB
xjo3fr+dQQaPY2syzW+kW8Mq/deOKNWHbgik4zck1LQV12JbzUo9K0mK5lim lBMUQSFdzFnY
KMDI7kVNYahFfrKER45YHEc8MmN0TlFfaSCQSA69CR70XFhHd2cMEzMBE8Um UP8AEjBh1HTI
qWC0htpbiSJSGuJPNk+YnLbVXPtwo6f1pjVrE1FFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFF
FAFHR/8AkFQ/8C/9CNXqo6P/AMgqH/gX/oRq9WlX+JL1ZMPhQUUUVmUFFFFA ESn/AEqQZ6Ip
xn3btn+g+p7S1Ep/0qQZ6Ipxn3btn+g+p7S0ARTnEYOcfOg64/iHuP8APY9C C4gbGJoznGMM
Oc4x/wChL+Y9aJziMHOPnQdcfxD3H+ex6GWgDLurmNZUIga6aaQJEse05+Td 1YgYwCetR+fs
ngin0yaDznKI7+URkKWx8rE9FPapr2yiupMTrP8ALIJI2hd0IO3bnchB6Ej8 ahj022jnim/0
6R4iWTzrieQAkEZwxIzgkfjQ1U5k09Cfd6ot3Go22m6bHd3s3lxfIpYqWJZi FAwMkkkgfjU1
peQXsRkgcnGAyspR0JUMAykAqcMDggHmq93p5vbC3gaTyzHLDKTjP3HVsde+ 3GaltLCKznvZ
oyxa7nE7g44bYicfgg65/lQUrWLVFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFAFHR/+QVD
/wAC/wDQjV6qOj/8gqH/AIF/6EavVpV/iS9WTD4UFFFFZlBRRRQBEo/0qQ46 oozj3bvj+p+g
7y1Eo/0qQ46oozj3bvj+p+g7y0ARTjMYGM/Oh6Z/iHsf89x1EtRTjMYGM/Oh 6Z/iHsf89x1A
LeBcYhjGMYwo4xjH/oK/kPSgCpd3UcEh85pvmkEaLErsSdu7GF56AmoUvoHm ji/0xHkJVPNi
mQE4JxlgB0B/Ki9tEkkQLcvaNBKJImi2Aj5CnRgRjBI6VGLUtcwTXGr3FwIH LoknkhdxUrk7
UB6Me9D9rzLltYn3epyXxLSW4i0XYjSP5czkKuTgBCTx2xk1wSadfSPsjsrh nwDtWJicEbge
ncAke1ejeObpbC78PTTK5jVZllVR8xQqisB74Jrmz4rgYMwimjkYTKSmOFKy CIZz28wg+wHW
voMJKcaEeVX3/NnmV4xdV8ztt+SMqLw3qc0czR20peCLzZIvJkDj59mMbeTk E+mAecgioYdD
1OWW2Q2U0QueYpJkKIwxknceMAc59KvwaxZfYktJxOq/Yfs7OiK2HE3mDgsM jGB1FX7rxVbS
3TToZWhuHLXFr9jhi4ZGU4lU7mI3nBI+tdDnWTaS7mSjTau2YsuhzmFZrGaH UULmNvsgclWx
nBVlDdATnGODzxQdBvktJnltriO4jlRPszQsHIZXbdjrwEPar9jrGnaPbzwW T3kvnhy80kax
lT5bogChj3cknP4UsPiBF0zTrWAOt1bywsHkwI8q8p5Oen7xf1ocqvRdgtDd +f8AwDnmhlRI
3aJ1WUExsVIDjOOPXnirdppc9zqDWUhW1lRXaT7QrLsCqWOQAT0HpU+vXVvc ay62nFnb4hg2
HPyL3B9zk/jU9nqttaeJJr5bi/8AJdZVSdsNONyFQx5AJBOetaOcnC6Wtn/w CeWKlZvqv+CR
x6DHLC8yazp5hR0jL7Z8bmzgY8vP8J7YqrPpF/bi5ZrSZobaQxSzIhaNWBwR uxj0/Ot6HxFD
HBPGdf10yyPG32nyhv2rvyn+u6fMD1/Cmy+JLCXdciCeKdIriGO1VVMJWVmO ScgjG88bTnaO
RWSnVT2uv68l/X43ywa3Mi20O8kdftEE9tG8Ek0ckkJAkCIW4zjOcDketQHS dSXyM6fdj7R/
qcwt+97/AC8c/hXRP4n09WvZI1u5HvXeWRZVXETGJ0Cqd3zDL9cDgDii68S6 fd3nnS+Y0Esv
nSWx0+EBX2thi4YGXax6MBkdaPaVb/D/AF/Xy08w5Kdt/wCv6+evkYA0TVmn aBdLvTMmN0Yt
33LkZGRj0BqTQVZPFGmI6lWW9iBBGCDvFauq+IrS60yO0tvP3KYtz+RHCrBG kJ+RDgffXA9j
VS0u0v8Ax5bXcYYRz6kkihuoBkB5p803F8y6MXLFNWfY9wooor5c9oo6P/yC of8AgX/oRq9V
HR/+QVD/AMC/9CNXq0q/xJerJh8KCiiisygooooAhUL9skPG7y0z64y3v9e3 4ntNUSn/AEqQ
Z6Ipxn3btn+g+p7S0AQ3IUxLuxjzE6+u4Y7j/PY9KmqKc4jBzj50HXH8Q9x/ nsehBAgxgycY
6yMfT39h+vqcgFa6vI7dmae6S3jDBAXZVBOM9T36/lUMOp2txKIodUhkkboi SISfwFNu7WeS
aJrWdIpbaYOplQyA/uymD8wP8Wc57U02+pT3VrJd3lq8cEhkCQ2rIWOxl6mR uPmz07Um6nMk
loTp3Lk1jZ6lDC97Z29wQuV82IPtzjOM9O35VD/wj2i/9AfT/wDwGT/Cmapb SXXh8rBEZZ41
jnhjDBd7oQ6jJIAyVA545pdA06bTLB4JmBLSeZx03Mql/wA33n8a0U5LRMfK mrsd/wAI9ov/
AEB9P/8AAZP8KP8AhHtF/wCgPp//AIDJ/hWlRR7Sfdi5I9jN/wCEe0X/AKA+ n/8AgMn+FMOg
6MJlT+w7IqVJMn2aPaCMceuTn0xwfatWmu6RRtJIyoigszMcAAdSTR7Wfdhy R7Gf/wAI9ov/
AEB9P/8AAZP8KYNB0YzMh0OyCgAiQ20eGzngd+Mdx3HXnGorK6hlIZSMgg5B FLR7SfdhyR7G
VFoOjSJubQ7KM5I2vbR54OM8Z69fx5xUP9kaV/aP2X/hGYPJ8vf9r+zweVnP 3cZ35/4Dj3rb
oo9pPuw5I9jKfQdGV41Gh2ThjgsttHhOCcnP5cZ60/8A4R7Rf+gPp/8A4DJ/ hWlRR7SfdhyR
7Gb/AMI9ov8A0B9P/wDAZP8ACnx6FpEMqSxaVYpIhDKy26AqR0IOODV+ij2k +7Dkj2CmRO0i
bmieM5I2uRng4zwT16/jzin0VBRR0f8A5BUP/Av/AEI1eqjo/wDyCof+Bf8A oRq9WlX+JL1Z
MPhQUUUVmUFFFFAESg/apDlsbF4ycdW6cYz+Pp07y1Eo/wBKkOOqKM49274/ qfoO8tAEU4Jj
GCw+dPukg/eHoDx/njrUtRTjMYGM/Oh6Z/iHsf8APcdQCJxjM8hxjqF56e3s fzPtgAil/eSs
NkR28ZdNx6Z/rTPL/wCmdv8A9+v/AK9UtTs5blodkNvd+TOHeO6basg8orzh Tzlgenaq8eny
/brSVdJ0yyWGQu728hZ2BRl248te7A9e1JzmpJKOhNlvcyPHniDVNHGlSadc NAs6yNIPLDA4
MZAOUI6bh94HBOAeq8YvjnxOu3OrM2MZzbxfNjb1wnfaf++2xj5dvY+MTbx3 2hzXMUDolnd7
fPQFd3loVGSvUkDA3DOOjYyvNwz6fJ4eD/ZLKWaWOU3JM9vCySZOCqFN+ANp AjIBxjHXPq4S
lSlTvKN9e/8AXY5K85qVlKxSXxz4nXbnVmbGM5t4vmxt64TvtP8A322MfLtt w+JfGsjWyRXd
xcPNH5kaR2sTs6ggE4VM9UbPT77dPl26Tx6MscSSHTnkhl2wStJb7Zv3b7Wd Y1G1d4Thycd+
+a1/MLvSF08XmnpftbxFxFLFHEwWSQmPcuEB+ZGxnBx64ro9jQe0Pz/rTqZK dTrL+v8Ag9DP
l8ZeLbOfybnUZkljIDpLaxK3G3qNgxnafT77Yx8u1X8YeLbaO3km1RtsqB0J hh+dQQCTheMl
G9PvtjHy7bU9/bWmjQRl7C71C3EMLySIk+FzKSq7gQQAUUkZHoelWbhNJvtV XTlaA2nkSFZI
cP5ISeR+COgKZH4im6FBbw0+fTqL2lR/a/puxjr458TrtzqzNjGc28XzY29c J32n/vtsY+Xb
asfE/ja+z9jubu78vbv8qyjf+712pxna3p99sYwu3JtZ1utbnnSLT4lkErLH cqFiUFTgADuP
4ffFXNDMb6HfQGGwnka4iYRXl15IwFfJB3pnGR371pPC0IxvydvxfqRGvUbt zd/yLza/48t4
DPM9+IYvvySWCBeCoOT5YxyrZ6ffbphdtFfHPiddudWZsYzm3i+bG3rhO+0/ 99tjHy7dYy20
VhAZF0yJY7KeJ5YbwPLEzNJhEXzDuB3AZweGJ3dw5/7I+0jzf7J8vzz/AGf5 ezbs8ttvnY5x
u8vPmc5znjNZKjQV7wv/AF6mnPUe0v6t/SMyPxh4t+yG6/tRnhidEdjDDyxA IBG3PPlt0/vt
0+XES+OfE67c6szYxnNvF82NvXCd9p/77bGPl27kEukiOKK9ew89miadIXjW IyhJtp+UFMcx
5IBXJ571FEbBr6SdrbT4pFjRDB9qsmWQFmy+7YUGAANqruPB+r9jQu17P8f6 /qwvaVbJ8xkL
458TrtzqzNjGc28XzY29cJ32n/vtsY+Xb0/gLxHrWr67JbahevcQpas/MSKN wMagkqgGfvH7
w+82AQBsyr6fSY7trK3TTTaNbXRMgSNm3hpPL+fqDwmMEZyOtJ8MVz4qnfbn FjIN23pl4+M7
eOnTcM46NjK44qjSWHlOMbPT87GtGpU9qoylff8AK563RRRXkHcUdH/5BUP/ AAL/ANCNXqKK
0q/xJerJh8KCiiisygooooAgQj7dKueREhxtHq3fqfp2/Gp6KKAILshYVJOP 3sY+6G/jHr/P
t1qeiigCrLhpWxHkjgnzCuTj2pm3/pl/5HaiitUtDJvUzdd8Laf4m+xS3Uk8 Yt1PliHYDhih
IJKkgYQDAI6nuFIx1+F2jLtzfak2MZy8fzY29cJ32n/vtsY+XaUVKqTjpGTX o2W4Rlq0n8gX
4XaMu3N9qTYxnLx/Njb1wnfaf++2xj5dovwu0Zdub7UmxjOXj+bG3rhO+0/9 9tjHy7Siq9vV
/nf3v/MXs6f8q+5Avwu0Zdub7UmxjOXj+bG3rhO+0/8AfbYx8u10Pwz0qD7m paoMqFfEsY3j
5cg4Todpz/vt0wu0ope2q/zv73/mHs4fyr7kNX4XaMu3N9qTYxnLx/Njb1wn faf++2xj5dov
wu0Zdub7UmxjOXj+bG3rhO+0/wDfbYx8u0op+3q/zv73/mHs6f8AKvuQL8Lt GXbm+1JsYzl4
/mxt64TvtP8A322MfLtF+F2jLtzfak2MZy8fzY29cJ32n/vtsY+XaUUe3q/z v73/AJh7On/K
vuQL8LtGXbm+1JsYzl4/mxt64TvtP/fbYx8u0X4XaMu3N9qTYxnLx/Njb1wn faf++2xj5dpR
R7er/O/vf+Yezp/yr7kC/C7Rl25vtSbGM5eP5sbeuE77T/322MfLt0tA8E6f 4dvze2txdTTG
Ewkz+WeDszyEBHKZ4OMseOF2lFTKrUkrSk2vVjUIJ3SX3HS0UUVBR//Z
--------------060305050908010501090008
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-ID: <part2.05030804.08080306@ca.ibm.com>

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL DBkSEw8UHRof
Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwL DBgNDRgyIRwh
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjL/wAAR
CABnAIEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI CQoL/8QAtRAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkK
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1 dnd4eXqDhIWG
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW 19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcI CQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz UvAVYnLRChYk
NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOE
hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU 1dbX2Nna4uPk
5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD28kKCSQAOpNM84f8APOf/ AL8P/hSyDIQf
9NE/9CFZGr366Xp0166GRl+6mcF2JwBn3JrSEObQmUrGt5w/55z/APfh/wDC jzh/zzn/AO/D
/wCFco3ieNdKsr02km6e5FtJEMsYmyQegOSMcDqami8R2z6je20kM8UdrGsh laGTkFSx3Db8
uMd+vatvq0tdDP2q7nS+cP8AnnP/AN+H/wAKPOH/ADzn/wC/D/4Vy114ntPJ c2M0EzeTI67t
/wB5EDYxtweCM8j061LaeJLCTTknupvKlWKN5lMLrgvwCARkjPcZHvR9Wla9 mHto9zpPOH/P
Of8A78P/AIUecP8AnnP/AN+H/wAK5vUfEVrYlVjR7hhdrbSqqt8hPOfunJx2 HWrMmtadFII5
JXVvkBJhcBC33QxxhSfRsGp9g7Xsx+0W1zb84f8APOf/AL8P/hR5w/55z/8A fh/8KyrfUbS7
uHggaSRkYqzLC+wEdRvxtz+NXNlS6aW5SlfYs+cP+ec//fh/8KPOH/POf/vw /wDhVbZRspcs
Quyz5w/55z/9+H/wo84f885/+/D/AOFVtlGyjliF2WfOH/POf/vw/wDhR5w/ 55z/APfh/wDC
q2yjZRyxC7LPnD/nnP8A9+H/AMKKrbKKOWIXZdxlk/31/mKxtX0Uau9osk7J bwS+a8aZBkIH
HzAgjB5raBwQfQ5pMVMJuDuhyipKzOUfwht84W98yRm7jvIkkQybHXrklssD 9Qanl8O3Etzq
Ev26Ifb7dYpx9nPBCldy/PwOc4OfrXSYoxWn1ip3/rT/ACJ9lHsczdeFftEN jGLvZ9ltJLXP
lZ3bkC7uvGMZxVZ/BjT2ssc+oBpTbxW8TpBtCLGwYZBY5JIHcV1+KMU1iqq2 f9XuS6EH0/rb
9DlW8KzSJM8l+huHvUvA625CBlGMbd+SPxp58LA6lLes1jM8+xpRcWQkwwGC UO4FQfQ5rp8U
YpfWanf+v6Q3Rg91/X9M5yy8NLaa6+prLHGX3boreNow+em/LkHHsBzzW7sq bFGKidWU/iKj
BRvYh2UbKmxRip5irEOyjZU2KMUcwWIdlGypsUYo5gsQ7KKmxRRzBYKKKKkZ z95qVzcTXJiu
xYWFq5je4EYd5HGM7c5AA5HIJJB9ObFhfXCXMEFzcR3cF0he1u41C7sAZVhn GcZIIwMA8DHN
C/02NEu7K9trqXTbiVriOa0Qs8DtywKjJOWLEEA9SCPW1ptkGksUgs5bTTNP DGBJxiSWRhje
RnIADOOeSWPTu/e5nty2+dzBOfP5f1+BBLrutS32qRafpGnzW+nyiJ5LjUXh Zz5aSHCiFgBh
wOW7dqsf8JZpK2lhcTSTRC9gW4VfId/KjbGGkKgiNefvMQODzwaytQ8Aadq8 2tXF/aWTXl3c
rNaXnkq8sG2OMLksOgdCdvIIPPUiodX8K6rql0l7Its1zc2SWt3Gmp3VvFGV LHcBFgyqd7fI
23pgMMmhW0v5fl/n9x0NK+h0c/iLTLbUlsJZpBMXVCywSNGjtjarSBdiMcjA YgncPUZrXPiq
yi1qz0uFZJpp7o27N5brGpEbucOV2uRtwVByM89Ky9Z8OazqOqoyTRNZxXFv PATfTRCJY2Rm
jMKrskyUJ3OxI3cAYqaLQtXh1KzhX7CdNtdRlvRKXbznEglJXZswCGk+9u5A 7UK2l/62/wCC
Gln/AF0/zN977GrxWCx7i0DTO+fuAFQBj3yf++TWW3ifA07Fpk3Nw8EwEh/c bJPKJ+783zlR
2657YrSt7KRNYvb6VlIlSOKIA/dRcnn3LM34AVkv4euXuNZJkh8q4T/QhzmJ 2+Zy3H98KeM1
PqIsp4nsftP2eXessk8sNuscbymQRsEdjtU7QHOCTwMZzVKx8b2NzcTxzI8U UOnwXzXCxytG
wkz8qkxjPRcd2JIC5Uip7PQbqC+024kkhJgsJ4Z8MctLK8bkjI6ZVuvPI4rD /wCEI1E6Wlm0
1vxpllAXSeSMie2cuACqghGzjeCGXGQD2tJW13/4f/hylytf13/yOy07UrXV bYz2rSFVYoyy
xPE6MOzI4DKcEHBA4IPQirdYnhrSZ9KtLj7TGkc083mFVvZ7sgBQozLN8zHj 0UDgY4ydukyQ
ooopAFFFFABRRRQBDc3dtZwma6uIoIh1eVwoH4mnxTRTxLLDIkkbchkYEH8R WHp1omo6neX9
0okmiuHgiVwD5KKcYX03Y3Z/2h6VPJZxaXrtk9mojW9MiTwoAFYhdwkI9RgL nvuHpVWWxPM9
zYorzTWLxYdU8RXN9aeI57e3u0iS4sdVaCC3Bhi+8onTADMWLbCADkng409Q 8TaxpM9tpu0X
N7a2EVxdmLTri5+1O2RtQxDEWSjfMwI+YfLwaSWif9bXLas7HcUVyOr+J7zT 9agjSW2a2a4g
t3tltJpZAZGQZeZT5cJG8EKwO4Ac/NxHJqer32r6TcrPbxaY+rS23kRhllIj SZTvbdtcFkzt
2jHHXFCVwtpf+u52VFc9e2x1nxHNp9zcXkNpa2scypa3MluZHdnBJaMqxChO Bux8xyPu4yrT
WtcmNpplpc2bTbL3deXcLSbxBMsanarJksG5OQM8j0pBZnbUVxOn+JLm4vW1 NjstpdO06eSF
mLLEJXlDlecAj5ST6LXV6Zcy3mmw3MyqrTAyKFBGEJyuQe+3GffNNxabTE9H Yt0UUUgCiiig
AooooAKKKKAM2fTJVvXvdPu/ss8mPNVoxJHKQAAWXIOQBjII4/CpLTTmiumv Lu5a6uyuwSMo
URrxlUA6AkAnqT61Bd6w63j2Vhafa7iMfvSZAkcROCAzYJyQc4APFS2WqG4u WtLq2e1uwu8R
swYOvGWQjqASAehHpV+9Yj3bkyabZp9txApF6++4DEsJDsCcg/7KgYHHFZ03 hPRriC2gkt5j
HbReQii6lG+P+5Jhv3i/7L5HXjk1buNb0+1tnuJpysUc4t2IjYkSEgYwBnv1 6Y5zjmrSXUMl
1NbI+ZYQrOuDwGzjnp2NQu6/r+kXfUzrrwxpN5etdzQzeY7pI6JdSpG7rjaz RqwQsNq/MRn5
R6Uv/CNaV/aq6l9nk+0rKZ1/0iTy1kKlS4j3bAxDHJA5zzVtNTtZLyO0Dutx IsjpG8ToSsbB
WPIHGWXHqDkZHNW6NtQ8jO1LRLHVnie6WdZYgQk1vcyQSAHGV3xsrbTgEjOC QDjgU+LR9Pt5
LZ4bVIzbQNbwhMgJGxUlQBx/Av5VXn8S6VbaibGW4kEqusbuIJGijdsYV5Qu xGOV4ZgfmX1G
dagDDn8MWY02WysUjt1mto7KQyK0ubdNwCAFuuGYBjnrkg4xW2qhVCqMADAF QWd7b38DTW0n
mRrI8RO0j5kYqw59GUirFNt9QfmFFFFIAooooAKKKKACiiigDD0p4rTU7ywu nEdzLcPPCXIH
noxyCvrtztx/sj1qaeeHUNeso7N1lFkZHuJoyCqkrtEZPqchsdtg9a0Lm0tr yEw3VvFPEeqS
oGB/A0+KGKCJYoY0jjXgKigAfgKq636k8r2OWvdIe98RXdhJby/YrhDeGbB2 CQxeRtzjAOPm
x+NZ66VNqy6PNqemySC61NpbyCaElVVbZ4xvU8bSUU88EsPWu8oqVoXdnmDa FefaEuLfTXj1
JoNYhtbk253RSvOWiO/HyAqX2sSB8xwfm52/Adk1q96Y4Rb2zJEPJj0iTT4/ MG7cdsjsXfG0
FwADgctjjtKKd/6+d/1CT5jirpp4dF1Xw42n3s19eSXAgkFtI0DrM7MrmUZV QobkMwb5Dgcr
mtc6E/2/UNR/s95L+LWrP7PcmEl1hxbiQoeoUjzAxHHBz0rvqKE7O/8AXT/I L33/AKucHbad
dJBawtbsn26/vbadZF2kxNcPKGwexRWA/wCugNd5UTWtu12l00ERuUQxrMUG 9VJBKg9QCQOP
YVLQDd22FFFFIQUUUUAFFFFABRRRQBz/APpOtX1yDdTW9jBK0KxwSFGlYY3M zD5hg5AAI6Z7
1YgFzpep29pLcyXNrdBhE0xy8bqM7c4+YEBjk8gjvmiirvq0Z9Lmfcavrdzr Oq22lfYf+JZ5
Za0mhZpLoMu75ZN6rHnlRkNgrk8HFNg8XTi81S3udJui8F+tnZxxGLdcExCQ jJk2ggbmyxUb
do+9kUUVMNdPL9UbLVN9v8ipf+OZYpY3t9PnS1On3lxNLJGjtBLAwUqVEo3Y OQQDgkrhsZI2
5/EkFvqi2RtLp0EkcMt0gTyopJMbFYFt5JyvKqQNwyRzgoptfCu7/WwVFyp2 6X/CxtUUUVJI
UUUUAFFFFABRRRQAUUUUAf/Z
--------------060305050908010501090008
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-ID: <part3.01050608.06060202@ca.ibm.com>

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL DBkSEw8UHRof
Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwL DBgNDRgyIRwh
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjL/wAAR
CAD5AZIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI CQoL/8QAtRAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkK
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1 dnd4eXqDhIWG
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW 19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcI CQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz UvAVYnLRChYk
NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOE
hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU 1dbX2Nna4uPk
5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2NbJ3G64kdnP8KSMir7Db gn6n9OlO+wR/
9Nf/AAIk/wDiqt0UKy6AUHtoI2w3m5xn/j4k/wDiqb5Nv/02/wDAiT/4qqfi B7jypY7R9lw0
J8ttwXDc4OSrAf8AfJ+hriYdQ8RaZqMP2678+BY5JpYV2tuQMgJHy7lI3E43 Nn2yAOmNKLSb
W5i5tN6noXk2/wD02/8AAiT/AOKo8m3/AOm3/gRJ/wDFV59/wnNzbssKWM9+ weR5HiilbEfm
uqhfLiYFsJ/EUHTk840pPFxjkkRrM7kEoI83nepbYvT+MIxz24HNWqEOwnOS OwFtCwyFnI9p
5P8A4ql+yxf3Lj/v/J/8VTtMk8y2Zv8Ab/oKu1zzUYyasaRu1e5Q+yxf3Lj/ AL/yf/FUfZYv
7lx/3/k/+Kq/RU3j/KOz7lD7LF/cuP8Av/J/8VR9li/uXH/f+T/4qr9FF4/y hZ9yh9li/uXH
/f8Ak/8AiqabeBTgicH3uJP/AIqtGsrU5vLuVGf4Af1NaU4xnK1iZtxV7iyW 8DoVElxGT/El
w+R+ZI/SoPs7Q8mSadB1xNIrgf8AfWGP5e3pWdp9laLpsaJGoO1hb2yyLGuo qqghmBHXsSOG
AycqQKWweK3s1ji2hdzEqqbArFiWUL/CASRg8jGD0ojSjUbSVgc3FXNiO3t5 k3pJOR0/18gw
fQjPFP8AsUX9+f8A8CH/AMazkuzFL5ick/eXPDj/AB9/wPtrQzJPGJIzlT+n sa5qtKVN2ZpC
aktCL7FF/fn/APAh/wDGj7FF/fn/APAh/wDGrFFZFlf7FF/fn/8AAh/8aPsU X9+f/wACH/xq
xRQBX+xRf35//Ah/8aPsUX9+f/wIf/GrFFAFf7FF/fn/APAh/wDGj7FF/fn/ APAh/wDGrFFA
Ff7FF/fn/wDAh/8AGj7FF/fn/wDAh/8AGrFFAFf7FF/fn/8AAh/8aPsUX9+f /wACH/xqxRQB
X+xRf35//Ah/8aPsUX9+f/wIf/GrFFAFf7FF/fn/APAh/wDGj7FF/fn/APAh /wDGrFFAFf7F
F/fn/wDAh/8AGj7FF/fn/wDAh/8AGrFFAFf7FF/fn/8AAh/8aPsUX9+f/wAC H/xqxRQBX+xR
f35//Ah/8aPsUX9+f/wIf/GrFFAFf7FF/fn/APAh/wDGj7FF/fn/APAh/wDG rFFAFf7FF/fn
/wDAh/8AGj7FF/fn/wDAh/8AGrFFAFf7FF/fn/8AAh/8aPsUX9+f/wACH/xq xRQBX+xRf35/
/Ah/8aPsUX9+f/wIf/GrFFAFf7FF/fn/APAh/wDGj7FF/fn/APAh/wDGrFFA Ff7FF/fn/wDA
h/8AGirFFAC/bbT/AJ+of+/go+22n/P1D/38FYcOlQyQRuWkyygnBHp9Kk/s iD+9L+Y/wr0n
SpLqzm559iHW50kvUMUiuvlgZUgjOTWQYka5W4IzKiFFbPRSQSMfgK3f7Ig/ vS/mP8KP7Ig/
vS/mP8K6oVacYqPYxlTm3c5EeHdMQRCGGW28oEL9muJIeCxbadjDIySQDkDJ xirTabaPJLI0
WWllSZzuPLqAFPX2HHTr6muk/siD+9L+Y/wo/seD+9L+Y/wqvb0kL2cw8PfY 7O2um8yOKS4u<


Ed Merks
Professional Support: https://www.macromodeling.com/
Re: Limit Copy, Paste, Cut keyboard shortcuts to EMF tree only (not the entire editor) [message #416416 is a reply to message #416414] Wed, 30 January 2008 18:06 Go to previous messageGo to next message
Mircea Luchian is currently offline Mircea LuchianFriend
Messages: 89
Registered: July 2009
Member
This is a multi-part message in MIME format.
--------------080102060804060803080601
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Hi Ed,

I added it to bugzilla. I'll be happy to discuss further and give more
hints and help regarding this issue.

Mircea

Ed Merks wrote:
> Mircea,
>
> Wow, lots of good helpful details! I hope we have some time for forms
> even for this release. It would be really good to add your comments
> to https://bugs.eclipse.org/bugs/show_bug.cgi?id=108470 so we can
> track all the folks who have been contributing towards the forms stuff
> in various ways. We hold contributors in high regard!
>
>
> Mircea Luchian wrote:
>> Hello Ed,
>>
>> I agree with your point on the properties view. It's purpose is
>> justified for requirements not needing GUI validation, however, to
>> implement on the spot GUI validation, the Properties view is not
>> sufficient. For this reason, I believe an effort in 4.0 should be
>> reserved towards the adjustment of the JET templates to generate an
>> EMF editor using eclipse forms.
>>
>> Here are the main changes I made. I feel that some of them could be
>> improvements made for 4.0 whenever possible.
>>
>> * I created a composite panel for every node in the tree. I
>> modified the ObjectDetailsPage and removed the SampleSection
>> inner class. I replaced it with a DetailsSection class
>> responsible to create the panels and update them in function of
>> the "Object input" variable
>>
>> private void detailsPageSwitch(final Object input)
>> {
>> sampleSectionHolder = new DetailSection(toolkit, input,
>> adapterFactoryItemDelegator, adapterFactoryLabelProvider,
>> mform.getMessageManager(), this);
>> ScrolledPropertiesBlock.setDetailsPage(this);
>> sampleSectionHolder.createSection(input);
>> }
>>
>> public void update()
>> {
>>
>> detailsSection.setText(adapterFactoryItemDelegator.getText(i nput));
>> detailsSection.layout();
>> ScrolledPropertiesBlock.setDetailsPage(this);
>> sampleSectionHolder.updateSection(input);
>> }
>>
>> With the detailsPageSwitch(), I pass the message manager of the
>> managed form (mform) SrolledPropertiesBlock class to every
>> panel. As such, the panels now have control on the message
>> manager and can add / remove errors depending whether the user
>> types in a widget or switches from the one node to another.
>>
>>
>>
>> * There is one "problem" with radio buttons (A = "true" and B =
>> "false" initially) attached to boolean attributes in EMF.
>>
>> and
>>
>> As radio buttons are mutually exclusive, setting B, unsets A
>> automatically. This will register as two actions in the EMF's
>> command stack (B = "true", then A = "false"). If the user
>> presses undo once, the B radio button will be "false" leaving
>> A radio button "false" as well. The user must execute a second
>> undo action to revert to the initial state.
>>
>> To prevent this from happening, I had to "hack" the
>> EditingDomainActionBarContributor class located in
>> org.eclipse.emf.edit.ui.action so I can call cutom Undo and
>> Redo actions.
>>
>> I created the following and put all custom code in my plugin:
>>
>> public class CustomEditingDomainActionBarContributor extends
>> MultiPageEditorActionBarContributor implements IMenuListener,
>> IPropertyListener {
>> [....]
>>
>> protected CustomUndoAction customUndoAction;
>>
>> protected CustomRedoAction customRedoAction;
>> [....]
>> }
>>
>> Custom Undo/Redo actions call themselves recursively if they
>> detect that variables reserved for a group of mutually
>> exclusive radio buttons are all set to false
>>
>> public class CustomRedoAction extends RedoAction {
>>
>> @Override
>> public void run()
>> {
>> super.run();
>> MyEditor.updateFromRedoUndo();
>>
>> Command mostRecentCommand =
>> domain.getCommandStack().getMostRecentCommand();
>>
>> if (mostRecentCommand instanceof SetCommand)
>> {
>> SetCommand mostRecentSetCommand = (SetCommand)
>> mostRecentCommand;
>> EObject owner = mostRecentSetCommand.getOwner();
>>
>>
>> /*********************************************************** ************************************************
>> * MyNodeImpl OWNER
>>
>> ************************************************************ **********************************************/
>> if (owner instanceof MyNodeImpl)
>> {
>> if (!(( MyNodeImpl ) owner).isReadOnly() && !((
>> MyNodeImpl ) owner).isReadWrite() && !(( MyNodeImpl )
>> owner).isWriteOnly())
>> run(); // RUN AGAIN TO SET THE RADIO BUTTON
>> THAT WAS DESELECTED
>> [....]
>>
>>
>>
>>
>> * The eclipse forms panels (with every widget bound to the model)
>> was not updated during an Undo or Redo action. I added both
>> actions a MyEditor.updateFromRedoUndo(); statement that calls
>> the editor to refresh the current selected panel in the
>> Scrolled properties block:
>>
>> public static void updateFromRedoUndo()
>> {
>> try
>> {
>> if
>> (scrolledPropertiesBlock.treeViewer.getTree().getSelection() .length
>> != 0)
>> {
>>
>> scrolledPropertiesBlock.getObjectDetailsPage().update();
>> }
>> }
>> catch (Exception e)
>> {
>> }
>> }
>>
>> This update mechanism for the eclipse forms does not exist on
>> the EMF example found on the net.
>>
>>
>>
>>
>> * I added error and warning status variables for every node in
>> the model. This is really custom work, however with the usage
>> of the eclispe forms' message manager, this complements very
>> well the user experience.
>> Data can have errors or warnings in the panels, so I changed
>> the item providers for every node to display the icons in an
>> error/warning state. Whenever we use validation on such panels,
>> the nodes in the tree must reflect these same error states for
>> later correction (say the errors exist but the user chooses to
>> save/closes his file and chooses fix the errors later during
>> the day; he must then know where the errors are...).
>>
>> I also made the parent nodes aware if their children have
>> errors or warnings so they can be propagated to the root node.
>> This makes the errors easier to search if the nodes are
>> collapsed. How the error/warning flags are initialized on the
>> faulty node is custom implementation, however, the error
>> propagation to the parent nodes is performed in the model's
>> implementation classes. Only the latter mechanism could be
>> accomodated in a future version of EMF. See pictures below for
>> a better understanding. I had to hide some information as the
>> product is still under development.
>>
>> 1.
>> 2.
>> 3.
>> 4.
>> 5.
>> 6.No more errors / warnings in the tree
>>
>> Thanks,
>>
>> Mircea
>>
>>
>>
>>
>>
>> Ed Merks wrote:
>>> Tom,
>>>
>>> All that command stuff came long after we'd already done the
>>> EMF.Edit support. It's impossible to keep up with the Jone's when
>>> there are dozens of them and only two or three of us. Maybe an
>>> Eclipse 4.0 effort would allow us to throw away some of the cruft
>>> and focus on supporting only the latests and greatest patterns.
>>>
>>> I'd be happy to provide hooks for whatever solution works well for
>>> this type of scenario. I hope we can find at least a bit of time
>>> this release to look at how to support forms and exploit data
>>> binding. I'm kind of sick and tired of the limitations of the
>>> crummy properties view (which doesn't even work for RAP).


--------------080102060804060803080601
Content-Type: multipart/related;
boundary="------------060508040805090502000700"


--------------060508040805090502000700
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">
Hi Ed, <br>
<br>
I added it to bugzilla. I'll be happy to discuss further and give more
hints and help regarding this issue. <br>
<br>
Mircea<br>
<br>
Ed Merks wrote:
<blockquote cite="midfnqavh$pnt$1@build.eclipse.org" type="cite">
<meta http-equiv="Context-Type"
content="text/html; charset=ISO-8859-1">
Mircea,<br>
<br>
Wow, lots of good helpful details!&nbsp; I hope we have some time for forms
even for this release.&nbsp; It would be really good to add your comments to
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=108470">https://bugs.eclipse.org/bugs/show_bug.cgi?id=108470</a>
so we can track all the folks who have been contributing towards the
forms stuff in various ways.&nbsp; We hold contributors in high regard!<br>
<br>
<br>
Mircea Luchian wrote:
<blockquote cite="mid:fnq7sm$7bu$1@build.eclipse.org" type="cite">
Hello Ed, <br>
<br>
I agree with your point on the properties view. It's purpose is
justified for requirements not needing GUI validation, however, to
implement on the spot GUI validation, the Properties view is not
sufficient. For this reason, I believe an effort in 4.0 should be
reserved towards the adjustment of the JET templates to generate an EMF
editor using eclipse forms. <br>
<br>
Here are the main changes I made. I feel that some of them could be
improvements made for 4.0 whenever possible.<br>
<br>
<ul>
<li>I created a composite panel for every node in the tree. I
modified the ObjectDetailsPage and removed the SampleSection inner
class. I replaced it with a DetailsSection class responsible to create
the panels and update them in function of the "Object input" variable<br>
<br>
private void detailsPageSwitch(final
Object input)<br>
{<br>
&nbsp;&nbsp;&nbsp;&nbsp; sampleSectionHolder = new DetailSection(toolkit, input,
adapterFactoryItemDelegator, adapterFactoryLabelProvider,
mform.getMessageManager(), this);<br>
&nbsp;&nbsp;&nbsp;&nbsp; ScrolledPropertiesBlock.setDetailsPage(this);<br>
&nbsp;&nbsp;&nbsp;&nbsp; sampleSectionHolder.createSection(input);<br>
}<br>
<br>
public void update()<br>
{<br>
&nbsp;&nbsp;&nbsp;&nbsp; detailsSection.setText(adapterFactoryItemDelegator.getText(i nput)); <br>
&nbsp;&nbsp;&nbsp;&nbsp; detailsSection.layout();<br>
&nbsp;&nbsp;&nbsp;&nbsp; ScrolledPropertiesBlock.setDetailsPage(this);<br>
&nbsp;&nbsp;&nbsp;&nbsp; sampleSectionHolder.updateSection(input);<br>
}<br>
<br>
With the detailsPageSwitch(), I pass the message manager
of
the managed form (mform) SrolledPropertiesBlock class to every panel.
As such, the panels now have control on the message manager and can add
/ remove errors depending whether the user types in a widget or
switches from the one node to another. <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
</li>
</ul>
<ul>
<li>There is one "problem" with radio buttons (A = "true" and B =
"false" initially) attached to boolean attributes in EMF.<br>
<br>
<img src="cid:part1.08070703.03030300@matrox.com" alt=""> and <img
src="cid:part2.01060000.00070209@matrox.com" alt=""><br>
<br>
As radio buttons are mutually exclusive, setting B, unsets A
automatically. This will register as two actions in the EMF's command
stack (B = "true", then A = "false"). If the user presses undo once,
the B radio button will be "false"&nbsp; leaving&nbsp; A radio button "false" as
well.&nbsp; The user must execute a second undo action to revert to the
initial state. <br>
<br>
To prevent this from happening, I had to "hack" the
EditingDomainActionBarContributor class located in
org.eclipse.emf.edit.ui.action &nbsp;
so I can call cutom Undo and Redo actions. <br>
<br>
I created the following and put all custom code in my plugin:<br>
<br>
public class
CustomEditingDomainActionBarContributor extends
MultiPageEditorActionBarContributor implements IMenuListener,
IPropertyListener {<br>
[....]<br>
<br>
&nbsp;&nbsp;&nbsp; protected CustomUndoAction customUndoAction;<br>
<br>
&nbsp;&nbsp;&nbsp; protected CustomRedoAction customRedoAction;<br>
[....]<br>
}<br>
<br>
Custom Undo/Redo actions call themselves recursively if
they
detect that variables reserved for a group of mutually exclusive radio
buttons are all set to false<br>
<br>
public class CustomRedoAction extends RedoAction {<br>
<br>
&nbsp;&nbsp;&nbsp; @Override<br>
&nbsp;&nbsp;&nbsp; public void run()<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; super.run();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; MyEditor.updateFromRedoUndo();<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Command mostRecentCommand =
domain.getCommandStack().getMostRecentCommand();<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (mostRecentCommand instanceof SetCommand)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SetCommand mostRecentSetCommand = (SetCommand)
mostRecentCommand;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; EObject owner = mostRecentSetCommand.getOwner();<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
/*********************************************************** ************************************************ <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;* MyNodeImpl OWNER<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;************************************************** ********************************************************/ <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (owner instanceof MyNodeImpl)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (!(( MyNodeImpl ) owner).isReadOnly()
&amp;&amp; !(( MyNodeImpl ) owner).isReadWrite()
&amp;&amp; !(( MyNodeImpl ) owner).isWriteOnly())<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; run(); // RUN AGAIN TO SET THE RADIO BUTTON THAT
WAS DESELECTED<br>
[....]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
<br>
<br>
<br>
</li>
<li>The eclipse forms panels (with every widget bound to the
model)
was not updated during an Undo or Redo action. I added both actions a&nbsp;
MyEditor.updateFromRedoUndo(); statement that calls the editor to
refresh the current selected panel
in the Scrolled properties block: <br>
<br>
public static void
updateFromRedoUndo()<br>
{<br>
&nbsp;&nbsp;&nbsp; try<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if
(scrolledPropertiesBlock.treeViewer.getTree().getSelection() .length !=
0)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; scrolledPropertiesBlock.getObjectDetailsPage().update();<br >
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; catch (Exception e)<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; }<br>
} <br>
<br>
This update mechanism for the eclipse forms does not exist on the EMF
example found on the net.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;
<br>
<br>
<br>
</li>
<li>I added error and warning status variables for every node in
the
model. This is really custom work, however with the usage of the
eclispe forms' message manager, this complements very well the user
experience. <br>
Data can have errors or warnings in the panels, so I changed the item
providers for every node to display the icons in an error/warning
state. Whenever we use validation on such panels, the nodes in the tree
must reflect these same error states for later correction (say the
errors exist but the user chooses to save/closes his file and chooses
fix the errors later during the day; he must then know where the errors
are...).<br>
<br>
I also made the parent nodes aware if their children have errors or
warnings so they can be propagated to the root node. This makes the
errors easier to search if the nodes are collapsed. How the
error/warning flags are initialized on the faulty node is custom
implementation, however, the error propagation to the parent nodes is
performed in the model's implementation classes. Only the latter
mechanism could be accomodated in a future version of EMF. See pictures
below for a better understanding. I had to hide some information as the
product is still under development. <br>
<br>
1.<img src="cid:part3.04000700.05080503@matrox.com" alt=""> <br>
2.<img src="cid:part4.04020807.08080105@matrox.com" alt=""><br>
3.<img src="cid:part5.06090900.06030401@matrox.com" alt=""><br>
4.<img src="cid:part6.00020309.08020802@matrox.com" alt=""><br>
5.<img src="cid:part7.04050800.01000502@matrox.com" alt=""><br>
6.<img src="cid:part8.04030208.06070000@matrox.com" alt="">No more
errors / warnings in the tree<br>
<br>
</li>
</ul>
Thanks, <br>
<br>
Mircea<br>
<br>
<br>
<br>
<br>
<br>
Ed Merks wrote:
<blockquote cite="midfnn379$99b$1@build.eclipse.org" type="cite">Tom,
<br>
<br>
All that command stuff came long after we'd already done the EMF.Edit
support.&nbsp; It's impossible to keep up with the Jone's when there are
dozens of them and only two or three of us.&nbsp; Maybe an Eclipse 4.0
effort would allow us to throw away some of the cruft and focus on
supporting only the latests and greatest patterns. <br>
<br>
I'd be happy to provide hooks for whatever solution works well for this
type of scenario.&nbsp; I hope we can find at least a bit of time this
release to look at how to support forms and exploit data binding.&nbsp; I'm
kind of sick and tired of the limitations of the crummy properties view
(which doesn't even work for RAP). <br>
</blockquote>
</blockquote>
</blockquote>
<br>
</body>
</html>

--------------060508040805090502000700
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-ID: <part1.08070703.03030300@matrox.com>

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL DBkSEw8UHRof
Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwL DBgNDRgyIRwh
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjL/wAAR
CAEWANwDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI CQoL/8QAtRAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkK
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1 dnd4eXqDhIWG
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW 19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcI CQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz UvAVYnLRChYk
NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOE
hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU 1dbX2Nna4uPk
5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD1Cw0O0urKOZ94Zs5C4x1I 9KSTTdDikaOS
+jR1OCrTICPwxWno/wDyCof+Bf8AoRrCudY1Kzd4LLVtNtFWSXdFdWLzPuMr nO4TJgEEcY98
88b1JtTl6mUYrlRox6Bp0sayRyO6NyGVlIP44rK1SGy00nFld3IWGWdzE8Y2 Rx7Q7Hdj+8OB
k10Gjyebpwl6+ZLK4PqDIxz+tYPiiG1f+zXujYoq3si+bexB41BjlOCCRwSF 7jkD0p05Nysx
SStdF06JaqCzI+0cnDjOP++as/8ACN2PrL+a/wCFcx4fuZ59cvC+qLdxtFcM PLeco/7xcFVc
bAFHy/Kx69T1rW8Z2f286Nb/ANmWGp7rxj9lv22xNiGTqdj8jt8v5UVXKDsV CKZo/wDCN2Pr
L+a/4Uf8I3Y+sv5r/hWvRWXtJFciMj/hG7H1l/Nf8KP+EbsfWX81/wAK16KP aSDkRkf8I3Y+
sv5r/hR/wjdj6y/mv+Fa9FHtJByIyP8AhG7H1l/Nf8KP+EbsfWX81/wrXoo9 pIORGR/wjdj6
y/mv+FH/AAjdj6y/mv8AhWvRR7SQciMj/hG7H1l/Nf8ACj/hG7H1l/Nf8K16 KPaSDkRkf8I3
Y+sv5r/hR/wjdj6y/mv+Fa9FHtJByIyP+EbsfWX81/wo/wCEbsfWX81/wrXo o9pIORGR/wAI
3Y+sv5r/AIUf8I3Y+sv5r/hWvRR7SQciMj/hG7H1l/Nf8KP+EbsfWX81/wAK 16KPaSDkRkf8
I3Y+sv5r/hR/wjdj6y/mv+Fa9FHtJByIo6P/AMgqH/gX/oRq9VHR/wDkFQ/8 C/8AQjV6nV/i
S9WEPhQVCbcFiRI6gnOBj+oqasbWnMc8RW0s7txDIUhvJCkRbfHyWCPggFsf KfTjOahDYWPh
6wtrp7+NJluJ1YyZlYj5yGYAHpkjsB+FaskojIG0sT0ArB0i4ml1FN+nabZS +VJmOxmMiMu6
PBLGNDkZbjH488S+JXuF0G+ZY4vMFpLwZCBjaNxzt6jnAxzgdM8Wm5yV2CXQ 1BexmVogrGRV
DMgZcgHIBIz0OD+RqaOQSKSAQQcEHtXiU4lSS8P2azAWBCCr8jryOOteyW7S fZJWlVUlxllR
iwVtozg4GR74FXXpKlG9zapS5Gtb3LlFcj4DkL2H7y01mGd7a3lkk1G8a4WY sG+aPMjhRkHI
G08jI6V11YtWdjIKKKKQBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAUdH/5BUP/
AAL/ANCNXqo6P/yCof8AgX/oRq9WlX+JL1ZMPhQVFPa29yALiCKUDkCRA2Pz qWisyiCCztbZ
i1vbQxEjBMaBc/lS3FuLhdrbSCpUq67gQeoIqaqupSPFpd3JGxV0hdlI7EKa abuJ2SMtPDGk
LeOy6bp4k2Jn/RlwBlsYXPB684545OONlIxGj72BzyxIwOn/ANaucvdRETXU MejazD5aybL2
S/RosqDtbaJy5BwMAp3GQOa6CeRjBKPKcDaw3EjHQ+/sPzHvinJy3YXfUqnV 9IscWpure38p
QoiOE2DHAx2GMUSzRazaGPT9Wltzux9otBGzAjkr86Mv6Zqlb3y2+oamh1Kx tT9oU7LgZY/u
o+fvjj8O1SaVMLi+vZBPDODeD95D9w/uE6cn+dc8ZylNxa7lbI1LO2+yWkcB nmnKDmWZtzue
5PQdewAA6AAcVPXK311qr+NUtbd9WNlFFA7rZi08obncMZTL+8xhR/q+cA45 xXVVruK1tAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAKOj/APIKh/4F/wChGr1U dH/5BUP/AAL/
ANCNXq0q/wASXqyYfCgooorMoKbJGksTxyKGRwVYHuD1p1FAGX/YWnmZg0Uj DAOGlkIPXqS2
D9P8a0pE8yJ0zjcCM0xR/pUhx1RRnHu3fH9T9B3louwsY32TV7W5upbW5slj uJVkKS27yMp2
KnUMOPlB6cc1Np9jdwTzzXk0Eks03mkwoUA/dqgABJ7LnOavTjMYGM/Oh6Z/ iHsf89x1AJ0O
MCTnHWNh6e3uP19DiVGKd0tQI/KtYLyS5JVJ5UVHYv1VSccf8Cb86l+0Qf8A PaP/AL6FZOp3
EkbQuj3UcTzgSvBAZHVfKJHy7WI+YKOneq8d0WvrRLe61OdXkIlFxZGNAmxj ncYl/iC9+9Dm
lLlsws7XOiorOvNSj0rSYrmWKaUExRBIV3MWdgowMjuRTtK1QapDMxtLi0mg lMUsFxs3o2Ae
qMynIYHgnr61QF+iiigAooooAKKKKACiiigAooooAKKKKACiiigCjo//ACCo f+Bf+hGr1UdH
/wCQVD/wL/0I1erSr/El6smHwoKKKKzKCiiigCFSv2yQcbvLTPrjLe317/gO 81RKf9KkGeiK
cZ927Z/oPqe0tAENyVES7sY8xOvruGOx/wA9x1qaopziMHOPnQdcfxD3H+ex 6EFxA2MTRnOM
YYc5xj/0JfzHrQBG6SLK5EZYMcggj0A7n2rJ8O2F/pulG1u7ZVcTyyL5dwZs q7s4yzAEkbiM
nOcZzzgW7q5jWVCIGummkCRLHtOfk3dWIGMAnrUfn7J4Ip9Mmg85yiO/lEZC lsfKxPRT2qva
xXutkcrepduLCO7s4YJmYCJ4pMof4kYMOo6ZFOtbGK0uLuaMuXupRK+48AhV XA9sKKGuVttO
+0yiVlSMMwjjaRzx2VQWY+wBNR6bqltqsTS2pk2KdrLLC8Tq3cMjgMp6HkDg g96l7/1/XQvo
XaKKKACiiigAooooAKKKKACiiigAooooAKKKKAKOj/8AIKh/4F/6EavVR0f/ AJBUP/Av/QjV
6tKv8SXqyYfCgooorMoKKKKAIlP+lSDPRFOM+7ds/wBB9T2lqJR/pUhx1RRn Hu3fH9T9B3lo
AinOIwc4+dB1x/EPcf57HoZainGYwMZ+dD0z/EPY/wCe46iWgDNvbKK6kxOs /wAsgkjaF3Qg
7dudyEHoSPxqGPTbaOeKb/TpHiJZPOuJ5ACQRnDEjOCR+NWLu6jgkPnNN80g jRYldiTt3Ywv
PQE1Cl9A80cX+mI8hKp5sUyAnBOMsAOgP5UN07pO1ybS6DtW0p9V0JtPEqws 6pkuhdDgglXU
MNynGCuRkEioPDXh5fD1tcxIbUCeXzTHaWot4kO0AhUBOBxnr3rUNzHBY/ab mZIokj3ySSMF
VQBkkk8AVT0bXLTXUu5bGaCe2gn8lJ4JhIknyKxII46tjv0otqyuiNOiiigA ooooAKKKKACi
iigAooooAKKKKACiiigCjo//ACCof+Bf+hGr1UdH/wCQVD/wL/0I1erSr/El 6smHwoKKKKzK
CiiigCJR/pUhx1RRnHu3fH9T9B3lqFQv2yQ8bvLTPrjLe/17fie01AEU4zGB jPzoemf4h7H/
AD3HUAt4FxiGMYxjCjjGMf8AoK/kPSkuQpiXdjHmJ19dwx3H+ex6VNQBk3to kkiBbl7RoJRJ
E0WwEfIU6MCMYJHSoxalrmCa41e4uBA5dEk8kLuKlcnagPRj3qzeXskEyIiT SPJJ5SRxbMk7
C/8AEQOgPeo/ttyk8EU9veQec5RHcwkZClsfKxPRT2qW6fMr7itK2gmr6fPq GhLbwLCZ0aGZ
EnyEdo3VwrEAkA7cZwcdcHGKNEsr62a/uNQW3Sa7uBL5dvIzqg8tFxuKqScq ecDtVu4v47Sz
hnmViJXijwg/idgo6npk1bqvP+un/AH0sFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFAFH
R/8AkFQ/8C/9CNXqo6P/AMgqH/gX/oRq9WlX+JL1ZMPhQUUUVmUFFFFAESn/ AEqQZ6Ipxn3b
tn+g+p7S1EoP2qQ5bGxeMnHVunGM/j6dO8tAEU5xGDnHzoOuP4h7j/PY9CCB BjBk4x1kY+nv
7D9fU5JwTGMFh86fdJB+8PQHj/PHWpaAMy5sYLpvLl8391IGRkmdGB2bc7lI PQkde9Y3hlrb
VrJNQaYzTwXMyYjv5biNCrMgI3MQSUIOcDIbOBmtu+uooZB5qKSX8tAIGlZj t3cBeemfyqBL
yB5o4vJ2PISqebYyICcE4ywA6A/lT5qd7StfQm0t1sLqlrPeaRax26b3We3k I3AfKsisTn6A
1keB9Gn0gXqyaY1nG4jCvOkP2iZhuLNI8LlZOWGGKqx53ZPJ6yN/MiR8Y3AH FIJY2laISKZE
AZkB5UHOCR74P5Gja5Seg+iiikAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBR 0f8A5BUP/Av/
AEI1eqjo/wDyCof+Bf8AoRq9WlX+JL1ZMPhQUUUVmUFFFFAESj/SpDjqijOP du+P6n6DvLUK
/wDH5JyP9WnGBnq3fr+fHp3qagCKcZjAxn50PTP8Q9j/AJ7jqAROMZnkOMdQ vPT29j+Z9sJc
8xLyB+8TqAf4h6//AK/TmpqAMu6smuZFxdTwywSh0ljCbs+XtOQykchj2rO0 j7RqsMF/dXd9
mC4mAt5/J+VkZ4uSiDnGeASOep61ty4aVsR5I4J8wrk49qqWenWenQmGy0+C 2iLbikDFAT0z
gDrwPyq+SL1a1Iu77lfxCJm8KSLBc3Nu5WMGW1t5JnC7lzhIyHIIyCUIYAkg 8VU8INft5xuo
L2CEwR+Ul1PLL/y0mzhpVV842cMAwGAeldNGVaJGUYUgED0FOqe5fQKKKKQB RRRQAUUUUAFF
FFABRRRQAUUUUAFFFFAFHR/+QVD/AMC/9CNXqo6P/wAgqH/gX/oRq9WlX+JL 1ZMPhQUUUVmU
FFFFAESn/SpBnoinGfdu2f6D6ntLUS7vtUmfu7Fx165bPt6dOfXtUtAEU5xG DnHzoOuP4h7j
/PY9CBZ+MyRnpnEZ9s9/978x6ck+7yxt6709em4Z6e34evGaloAxdTS4Zods U86rODOltL5T
MvlEcEsvG4qcZ/Oq8aSm+tDBp+p26LITM9zdh0KbGGMea2TuK9q2Jdvmtt83 P8WzbjOPf2xT
Of8Ap4/8cpOlGUlJk8zWhFfm7XQjJYuVuI41kUAA79uCU5B+8AVz1GeKTRLy TULaW+Mpe3uJ
DJajaAFiwAuD33bS+T/fFaMe3yk2fcwNv0p1PqV0CiiigAooooAKKKKACiii gAooooAKKKKA
CiiigCjo/wDyCof+Bf8AoRq9VHR/+QVD/wAC/wDQjV6tKv8AEl6smHwoKKKK zKCiiigCJR/p
Uhx1RRnHu3fH9T9B3lqFf+PyTgf6tOcjPVu3X8+PTvU1AEU4zGBjPzoemf4h 7H/PcdQBp+Mx
xjpnEh9s9v8Ae/IevCXPES8A/vE6kD+Iev8A+v05qagDmNauoTf2ttJHbTTi dJHgnDmLDIyK
GcIwXLH5dwG4jA5qC6kg02+sJbrT9M01VkZg9uzO8vyMvlqBEMsSwIXOTg4B xxpaho1tdaqL
s3MyMfKMsSJuWQxtvj3cZG1jngjOecjis/U/Cen6y0UmpTPczRLhJXtV3AgA AkhRkAhm2nKk
u2QRgCvYUpSU5GbnNJpGxqd8+naAbiI/v9iJCPJMu6RiFUbdy5ySByyj1IHN UvDGq6nqkcw1
KJILi1lkgmjEaqWOEZThZZAvDEEbm9cjpTPEOsaLoOmWun6hYm5sriMxrAkK PGUUKMFSQMcj
isay8f8AhjTYPIsdKuLWEf8ALOC3jRegHQNjoAPwrWOFq1FzRjdP/P8A4f8A pClWhF2b1/4B
3tMSKONpGjjRWkbc5VQCxwBk+pwAPwrjf+Fn6L/z66h/37T/AOLo/wCFn6L/ AM+uof8AftP/
AIuq+p1/5WL6xS/mO1oriv8AhZ+i/wDPrqH/AH7T/wCLo/4Wfov/AD66h/37 T/4uj6nX/lYf
WKX8x2tFcV/ws/Rf+fXUP+/af/F0f8LP0X/n11D/AL9p/wDF0fU6/wDKw+sU v5jtaK4r/hZ+
i/8APrqH/ftP/i6P+Fn6L/z66h/37T/4uj6nX/lYfWKX8x2tFcV/ws/Rf+fX UP8Av2n/AMXR
/wALP0X/AJ9dQ/79p/8AF0fU6/8AKw+sUv5jtaK4r/hZ+i/8+uof9+0/+Lo/ 4Wfov/PrqH/f
tP8A4uj6nX/lYfWKX8x2tFQWd0l9Y293EGEc8ayqG6gMMjPvzU9c7VnZmydy jo//ACCof+Bf
+hGr1UdH/wCQVD/wL/0I1eq6v8SXqyYfCgooorMoKKKKAIlP+lSDPRFOM+7d s/0H1PaWolJ+
1SDDY2Lzg46t05xn8PTr2loAinOIwc4+dB1x/EPcf57HoQSucZgkGcdSvHT3 9z+R9sk5IjGA
x+dPugk/eHoRx/nnpUtAGLqd+bNoWaeC0WecI8lyMrH+6Lc/MBnKgde9V49W Rr60gi1fTL3z
pCjR2w+dQEZt3+sbjKgdO9bEv7uVjviG7nDvtPTH9KZ5n/TS3/7+/wD1qTpy clJSJvbSxx/j
iwTUZNEgkn8hBBcSNJs3YCojdMj0rj18OW76Z9s/tJEMiPLAkvlIXVSQMgyb gx2nAVWHTnrj
u/Gmj6xejTTpEPmtDHNFIdyLhXVV/iPcZrlY/DXjGOxFn/Z8TwruCCX7O7Jn rtZslfXgjnmv
cwtVKjFKaXq13f8AwDz60L1G3Fv/AIZf8EqnwiPKjk+2tGFbFykqJvhARnPy pIxzhSMNtOce
+LB0jTr2zsorVWZvJik85oxG7IZ3RywBI/iTkk8LVttJ8dsQfssakSeaSgt1 3tgjLY+9kMQc
5znmo20Lxw04m+yKjiBrceW0CARnOVABAHU1s6re9SP3kKCX2H9xVfQtOuTK 8R+yw3Debbt8
0hjjWEyOuM88so59Kih0fTDYTTSySlTZCaF0g+bPn7MsDJjOMDAOMH1HNoeG vGgigiFp8kET
xRjzYflV87h15zk0Q+GvGcCqqWSlFhMAR2gZShbdggkg/Nzk80/aL/n4vv8A 68vxDlfWD+70
/wCD+Bla14fi0i3LDUYZp0k8qWEPHkHByVCuzYBGPmCnkcemY8NuqWpjuPNe QZlj2FfLO7GM
98jByPWuovfDPjHUIwt1p0MhBBMn+jrI2Bj5nHzN+JNQy+EPFs8NtFJY7ktl KxDzohtBJb+9
zyT1rSFeCS55q/qjOdKTvyxf3FyTT9FGu3FksOkmOEzfKrXm9QiMRvJOCAQM 7efSqN5omnSR
xXv2hLWzaONd9pG8qySMzj5VkYMAAhzuOcjgc1onSPHDTmc6dZ+cxYs4gtAz bgQcnHOQTnNN
TRfHMczSLZxYKqvlkW5jAU5GI/ujBJOQOpPqaxU0rfvF/wCBGrje/uP7jLPh UW8xtp7wfbws
siQrFlGSNmBy+eCdjEDB6DJGatat4YgWe+uTe29sWkmeC3zGo2q7ALguGydp ACoR0564nGg+
OBbPb/ZtyPuyzSQs/wAxywDk7gCeoBwcn1NLJoXjaeKSOaxilDs7ZlFu7KWO W2k8rzz8uOea
ftXdP2kfvQuRa+4ykPCCGFZHv2iCg+ekkaF4iI2flVkYj7pGG2n264xdTsIr L7NJb3DzQXMX
mozx+Ww+YqQQCR1U966qTR/HUsbo1pGFkJL7BbqXJUqSxGCSQx5PPNZ83gzx XPHDHJYblgTZ
GPOiG1ck4+96k1cK6vedRfeiZU9LKD+49S8Pf8i1pX/XnD/6AK0qpaPby2uh 6fbzLtlito0d
cg4YKARx71dr56o7zZ6sfhRR0f8A5BUP/Av/AEI1eqjo/wDyCof+Bf8AoRq9 Tq/xJerCHwoK
KKKzKCiiigCJR/pUhx1RRnHu3fH9T9B3lqFSv2yQcbvLTPrjLe317/gO81AE U4zGBjPzoemf
4h7H/PcdQCdDjAk5x1jYent7j9fQ4S5KiJd2MeYnX13DHY/57jrU1AGXc3Uk c8SW8SySXM2x
RK5jA/dl+flJ6L0xSPPe29xbR3Vtbqk8hjDR3DMQdjN0KD+6e9TXljDdlkub OO6iLBwsiqwB
xjo3fr+dQQaPY2syzW+kW8Mq/deOKNWHbgik4zck1LQV12JbzUo9K0mK5lim lBMUQSFdzFnY
KMDI7kVNYahFfrKER45YHEc8MmN0TlFfaSCQSA69CR70XFhHd2cMEzMBE8Um UP8AEjBh1HTI
qWC0htpbiSJSGuJPNk+YnLbVXPtwo6f1pjVrE1FFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFF
FAFHR/8AkFQ/8C/9CNXqo6P/AMgqH/gX/oRq9WlX+JL1ZMPhQUUUVmUFFFFA ESn/AEqQZ6Ip
xn3btn+g+p7S1Ep/0qQZ6Ipxn3btn+g+p7S0ARTnEYOcfOg64/iHuP8APY9C C4gbGJoznGMM
Oc4x/wChL+Y9aJziMHOPnQdcfxD3H+ex6GWgDLurmNZUIga6aaQJEse05+Td 1YgYwCetR+fs
ngin0yaDznKI7+URkKWx8rE9FPapr2yiupMTrP8ALIJI2hd0IO3bnchB6Ej8 ahj022jnim/0
6R4iWTzrieQAkEZwxIzgkfjQ1U5k09Cfd6ot3Go22m6bHd3s3lxfIpYqWJZi FAwMkkkgfjU1
peQXsRkgcnGAyspR0JUMAykAqcMDggHmq93p5vbC3gaTyzHLDKTjP3HVsde+ 3GaltLCKznvZ
oyxa7nE7g44bYicfgg65/lQUrWLVFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFAFHR/+QVD
/wAC/wDQjV6qOj/8gqH/AIF/6EavVpV/iS9WTD4UFFFFZlBRRRQBEo/0qQ46 oozj3bvj+p+g
7y1Eo/0qQ46oozj3bvj+p+g7y0ARTjMYGM/Oh6Z/iHsf89x1EtRTjMYGM/Oh 6Z/iHsf89x1A
LeBcYhjGMYwo4xjH/oK/kPSgCpd3UcEh85pvmkEaLErsSdu7GF56AmoUvoHm ji/0xHkJVPNi
mQE4JxlgB0B/Ki9tEkkQLcvaNBKJImi2Aj5CnRgRjBI6VGLUtcwTXGr3FwIH LoknkhdxUrk7
UB6Me9D9rzLltYn3epyXxLSW4i0XYjSP5czkKuTgBCTx2xk1wSadfSPsjsrh nwDtWJicEbge
ncAke1ejeObpbC78PTTK5jVZllVR8xQqisB74Jrmz4rgYMwimjkYTKSmOFKy CIZz28wg+wHW
voMJKcaEeVX3/NnmV4xdV8ztt+SMqLw3qc0czR20peCLzZIvJkDj59mMbeTk E+mAecgioYdD
1OWW2Q2U0QueYpJkKIwxknceMAc59KvwaxZfYktJxOq/Yfs7OiK2HE3mDgsM jGB1FX7rxVbS
3TToZWhuHLXFr9jhi4ZGU4lU7mI3nBI+tdDnWTaS7mSjTau2YsuhzmFZrGaH UULmNvsgclWx
nBVlDdATnGODzxQdBvktJnltriO4jlRPszQsHIZXbdjrwEPar9jrGnaPbzwW T3kvnhy80kax
lT5bogChj3cknP4UsPiBF0zTrWAOt1bywsHkwI8q8p5Oen7xf1ocqvRdgtDd +f8AwDnmhlRI
3aJ1WUExsVIDjOOPXnirdppc9zqDWUhW1lRXaT7QrLsCqWOQAT0HpU+vXVvc ay62nFnb4hg2
HPyL3B9zk/jU9nqttaeJJr5bi/8AJdZVSdsNONyFQx5AJBOetaOcnC6Wtn/w CeWKlZvqv+CR
x6DHLC8yazp5hR0jL7Z8bmzgY8vP8J7YqrPpF/bi5ZrSZobaQxSzIhaNWBwR uxj0/Ot6HxFD
HBPGdf10yyPG32nyhv2rvyn+u6fMD1/Cmy+JLCXdciCeKdIriGO1VVMJWVmO ScgjG88bTnaO
RWSnVT2uv68l/X43ywa3Mi20O8kdftEE9tG8Ek0ckkJAkCIW4zjOcDketQHS dSXyM6fdj7R/
qcwt+97/AC8c/hXRP4n09WvZI1u5HvXeWRZVXETGJ0Cqd3zDL9cDgDii68S6 fd3nnS+Y0Esv
nSWx0+EBX2thi4YGXax6MBkdaPaVb/D/AF/Xy08w5Kdt/wCv6+evkYA0TVmn aBdLvTMmN0Yt
33LkZGRj0BqTQVZPFGmI6lWW9iBBGCDvFauq+IrS60yO0tvP3KYtz+RHCrBG kJ+RDgffXA9j
VS0u0v8Ax5bXcYYRz6kkihuoBkB5p803F8y6MXLFNWfY9wooor5c9oo6P/yC of8AgX/oRq9V
HR/+QVD/AMC/9CNXq0q/xJerJh8KCiiisygooooAhUL9skPG7y0z64y3v9e3 4ntNUSn/AEqQ
Z6Ipxn3btn+g+p7S0AQ3IUxLuxjzE6+u4Y7j/PY9KmqKc4jBzj50HXH8Q9x/ nsehBAgxgycY
6yMfT39h+vqcgFa6vI7dmae6S3jDBAXZVBOM9T36/lUMOp2txKIodUhkkboi SISfwFNu7WeS
aJrWdIpbaYOplQyA/uymD8wP8Wc57U02+pT3VrJd3lq8cEhkCQ2rIWOxl6mR uPmz07Um6nMk
loTp3Lk1jZ6lDC97Z29wQuV82IPtzjOM9O35VD/wj2i/9AfT/wDwGT/Cmapb SXXh8rBEZZ41
jnhjDBd7oQ6jJIAyVA545pdA06bTLB4JmBLSeZx03Mql/wA33n8a0U5LRMfK mrsd/wAI9ov/
AEB9P/8AAZP8KP8AhHtF/wCgPp//AIDJ/hWlRR7Sfdi5I9jN/wCEe0X/AKA+ n/8AgMn+FMOg
6MJlT+w7IqVJMn2aPaCMceuTn0xwfatWmu6RRtJIyoigszMcAAdSTR7Wfdhy R7Gf/wAI9ov/
AEB9P/8AAZP8KYNB0YzMh0OyCgAiQ20eGzngd+Mdx3HXnGorK6hlIZSMgg5B FLR7SfdhyR7G
VFoOjSJubQ7KM5I2vbR54OM8Z69fx5xUP9kaV/aP2X/hGYPJ8vf9r+zweVnP 3cZ35/4Dj3rb
oo9pPuw5I9jKfQdGV41Gh2ThjgsttHhOCcnP5cZ60/8A4R7Rf+gPp/8A4DJ/ hWlRR7SfdhyR
7Gb/AMI9ov8A0B9P/wDAZP8ACnx6FpEMqSxaVYpIhDKy26AqR0IOODV+ij2k +7Dkj2CmRO0i
bmieM5I2uRng4zwT16/jzin0VBRR0f8A5BUP/Av/AEI1eqjo/wDyCof+Bf8A oRq9WlX+JL1Z
MPhQUUUVmUFFFFAESg/apDlsbF4ycdW6cYz+Pp07y1Eo/wBKkOOqKM49274/ qfoO8tAEU4Jj
GCw+dPukg/eHoDx/njrUtRTjMYGM/Oh6Z/iHsf8APcdQCJxjM8hxjqF56e3s fzPtgAil/eSs
NkR28ZdNx6Z/rTPL/wCmdv8A9+v/AK9UtTs5blodkNvd+TOHeO6basg8orzh Tzlgenaq8eny
/brSVdJ0yyWGQu728hZ2BRl248te7A9e1JzmpJKOhNlvcyPHniDVNHGlSadc NAs6yNIPLDA4
MZAOUI6bh94HBOAeq8YvjnxOu3OrM2MZzbxfNjb1wnfaf++2xj5dvY+MTbx3 2hzXMUDolnd7
fPQFd3loVGSvUkDA3DOOjYyvNwz6fJ4eD/ZLKWaWOU3JM9vCySZOCqFN+ANp AjIBxjHXPq4S
lSlTvKN9e/8AXY5K85qVlKxSXxz4nXbnVmbGM5t4vmxt64TvtP8A322MfLtt w+JfGsjWyRXd
xcPNH5kaR2sTs6ggE4VM9UbPT77dPl26Tx6MscSSHTnkhl2wStJb7Zv3b7Wd Y1G1d4Thycd+
+a1/MLvSF08XmnpftbxFxFLFHEwWSQmPcuEB+ZGxnBx64ro9jQe0Pz/rTqZK dTrL+v8Ag9DP
l8ZeLbOfybnUZkljIDpLaxK3G3qNgxnafT77Yx8u1X8YeLbaO3km1RtsqB0J hh+dQQCTheMl
G9PvtjHy7bU9/bWmjQRl7C71C3EMLySIk+FzKSq7gQQAUUkZHoelWbhNJvtV XTlaA2nkSFZI
cP5ISeR+COgKZH4im6FBbw0+fTqL2lR/a/puxjr458TrtzqzNjGc28XzY29c J32n/vtsY+Xb
asfE/ja+z9jubu78vbv8qyjf+712pxna3p99sYwu3JtZ1utbnnSLT4lkErLH cqFiUFTgADuP
4ffFXNDMb6HfQGGwnka4iYRXl15IwFfJB3pnGR371pPC0IxvydvxfqRGvUbt zd/yLza/48t4
DPM9+IYvvySWCBeCoOT5YxyrZ6ffbphdtFfHPiddudWZsYzm3i+bG3rhO+0/ 99tjHy7dYy20
VhAZF0yJY7KeJ5YbwPLEzNJhEXzDuB3AZweGJ3dw5/7I+0jzf7J8vzz/AGf5 ezbs8ttvnY5x
u8vPmc5znjNZKjQV7wv/AF6mnPUe0v6t/SMyPxh4t+yG6/tRnhidEdjDDyxA IBG3PPlt0/vt
0+XES+OfE67c6szYxnNvF82NvXCd9p/77bGPl27kEukiOKK9ew89miadIXjW IyhJtp+UFMcx
5IBXJ571FEbBr6SdrbT4pFjRDB9qsmWQFmy+7YUGAANqruPB+r9jQu17P8f6 /qwvaVbJ8xkL
458TrtzqzNjGc28XzY29cJ32n/vtsY+Xb0/gLxHrWr67JbahevcQpas/MSKN wMagkqgGfvH7
w+82AQBsyr6fSY7trK3TTTaNbXRMgSNm3hpPL+fqDwmMEZyOtJ8MVz4qnfbn FjIN23pl4+M7
eOnTcM46NjK44qjSWHlOMbPT87GtGpU9qoylff8AK563RRRXkHcUdH/5BUP/ AAL/ANCNXqKK
0q/xJerJh8KCiiisygooooAgQj7dKueREhxtHq3fqfp2/Gp6KKAILshYVJOP 3sY+6G/jHr/P
t1qeiigCrLhpWxHkjgnzCuTj2pm3/pl/5HaiitUtDJvUzdd8Laf4m+xS3Uk8 Yt1PliHYDhih
IJKkgYQDAI6nuFIx1+F2jLtzfak2MZy8fzY29cJ32n/vtsY+XaUVKqTjpGTX o2W4Rlq0n8gX
4XaMu3N9qTYxnLx/Njb1wnfaf++2xj5dovwu0Zdub7UmxjOXj+bG3rhO+0/9 9tjHy7Siq9vV
/nf3v/MXs6f8q+5Avwu0Zdub7UmxjOXj+bG3rhO+0/8AfbYx8u10Pwz0qD7m paoMqFfEsY3j
5cg4Todpz/vt0wu0ope2q/zv73/mHs4fyr7kNX4XaMu3N9qTYxnLx/Njb1wn faf++2xj5dov
wu0Zdub7UmxjOXj+bG3rhO+0/wDfbYx8u0op+3q/zv73/mHs6f8AKvuQL8Lt GXbm+1JsYzl4
/mxt64TvtP8A322MfLtF+F2jLtzfak2MZy8fzY29cJ32n/vtsY+XaUUe3q/z v73/AJh7On/K
vuQL8LtGXbm+1JsYzl4/mxt64TvtP/fbYx8u0X4XaMu3N9qTYxnLx/Njb1wn faf++2xj5dpR
R7er/O/vf+Yezp/yr7kC/C7Rl25vtSbGM5eP5sbeuE77T/322MfLt0tA8E6f 4dvze2txdTTG
Ewkz+WeDszyEBHKZ4OMseOF2lFTKrUkrSk2vVjUIJ3SX3HS0UUVBR//Z
--------------060508040805090502000700
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-ID: <part2.01060000.00070209@matrox.com>

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL DBkSEw8UHRof
Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwL DBgNDRgyIRwh
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjL/wAAR
CABnAIEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI CQoL/8QAtRAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkK
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1 dnd4eXqDhIWG
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW 19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcI CQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz UvAVYnLRChYk
NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOE
hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU 1dbX2Nna4uPk
5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD28kKCSQAOpNM84f8APOf/ AL8P/hSyDIQf
9NE/9CFZGr366Xp0166GRl+6mcF2JwBn3JrSEObQmUrGt5w/55z/APfh/wDC jzh/zzn/AO/D
/wCFco3ieNdKsr02km6e5FtJEMsYmyQegOSMcDqami8R2z6je20kM8UdrGsh laGTkFSx3Db8
uMd+vatvq0tdDP2q7nS+cP8AnnP/AN+H/wAKPOH/ADzn/wC/D/4Vy114ntPJ c2M0EzeTI67t
/wB5EDYxtweCM8j061LaeJLCTTknupvKlWKN5lMLrgvwCARkjPcZHvR9Wla9 mHto9zpPOH/P
Of8A78P/AIUecP8AnnP/AN+H/wAK5vUfEVrYlVjR7hhdrbSqqt8hPOfunJx2 HWrMmtadFII5
JXVvkBJhcBC33QxxhSfRsGp9g7Xsx+0W1zb84f8APOf/AL8P/hR5w/55z/8A fh/8KyrfUbS7
uHggaSRkYqzLC+wEdRvxtz+NXNlS6aW5SlfYs+cP+ec//fh/8KPOH/POf/vw /wDhVbZRspcs
Quyz5w/55z/9+H/wo84f885/+/D/AOFVtlGyjliF2WfOH/POf/vw/wDhR5w/ 55z/APfh/wDC
q2yjZRyxC7LPnD/nnP8A9+H/AMKKrbKKOWIXZdxlk/31/mKxtX0Uau9osk7J bwS+a8aZBkIH
HzAgjB5raBwQfQ5pMVMJuDuhyipKzOUfwht84W98yRm7jvIkkQybHXrklssD 9Qanl8O3Etzq
Ev26Ifb7dYpx9nPBCldy/PwOc4OfrXSYoxWn1ip3/rT/ACJ9lHsczdeFftEN jGLvZ9ltJLXP
lZ3bkC7uvGMZxVZ/BjT2ssc+oBpTbxW8TpBtCLGwYZBY5JIHcV1+KMU1iqq2 f9XuS6EH0/rb
9DlW8KzSJM8l+huHvUvA625CBlGMbd+SPxp58LA6lLes1jM8+xpRcWQkwwGC UO4FQfQ5rp8U
YpfWanf+v6Q3Rg91/X9M5yy8NLaa6+prLHGX3boreNow+em/LkHHsBzzW7sq bFGKidWU/iKj
BRvYh2UbKmxRip5irEOyjZU2KMUcwWIdlGypsUYo5gsQ7KKmxRRzBYKKKKkZ z95qVzcTXJiu
xYWFq5je4EYd5HGM7c5AA5HIJJB9ObFhfXCXMEFzcR3cF0he1u41C7sAZVhn GcZIIwMA8DHN
C/02NEu7K9trqXTbiVriOa0Qs8DtywKjJOWLEEA9SCPW1ptkGksUgs5bTTNP DGBJxiSWRhje
RnIADOOeSWPTu/e5nty2+dzBOfP5f1+BBLrutS32qRafpGnzW+nyiJ5LjUXh Zz5aSHCiFgBh
wOW7dqsf8JZpK2lhcTSTRC9gW4VfId/KjbGGkKgiNefvMQODzwaytQ8Aadq8 2tXF/aWTXl3c
rNaXnkq8sG2OMLksOgdCdvIIPPUiodX8K6rql0l7Its1zc2SWt3Gmp3VvFGV LHcBFgyqd7fI
23pgMMmhW0v5fl/n9x0NK+h0c/iLTLbUlsJZpBMXVCywSNGjtjarSBdiMcjA YgncPUZrXPiq
yi1qz0uFZJpp7o27N5brGpEbucOV2uRtwVByM89Ky9Z8OazqOqoyTRNZxXFv PATfTRCJY2Rm
jMKrskyUJ3OxI3cAYqaLQtXh1KzhX7CdNtdRlvRKXbznEglJXZswCGk+9u5A 7UK2l/62/wCC
Gln/AF0/zN977GrxWCx7i0DTO+fuAFQBj3yf++TWW3ifA07Fpk3Nw8EwEh/c bJPKJ+783zlR
2657YrSt7KRNYvb6VlIlSOKIA/dRcnn3LM34AVkv4euXuNZJkh8q4T/QhzmJ 2+Zy3H98KeM1
PqIsp4nsftP2eXessk8sNuscbymQRsEdjtU7QHOCTwMZzVKx8b2NzcTxzI8U UOnwXzXCxytG
wkz8qkxjPRcd2JIC5Uip7PQbqC+024kkhJgsJ4Z8MctLK8bkjI6ZVuvPI4rD /wCEI1E6Wlm0
1vxpllAXSeSMie2cuACqghGzjeCGXGQD2tJW13/4f/hylytf13/yOy07UrXV bYz2rSFVYoyy
xPE6MOzI4DKcEHBA4IPQirdYnhrSZ9KtLj7TGkc083mFVvZ7sgBQozLN8zHj 0UDgY4ydukyQ
ooopAFFFFABRRRQBDc3dtZwma6uIoIh1eVwoH4mnxTRTxLLDIkkbchkYEH8R WHp1omo6neX9
0okmiuHgiVwD5KKcYX03Y3Z/2h6VPJZxaXrtk9mojW9MiTwoAFYhdwkI9RgL nvuHpVWWxPM9
zYorzTWLxYdU8RXN9aeI57e3u0iS4sdVaCC3Bhi+8onTADMWLbCADkng409Q 8TaxpM9tpu0X
N7a2EVxdmLTri5+1O2RtQxDEWSjfMwI+YfLwaSWif9bXLas7HcUVyOr+J7zT 9agjSW2a2a4g
t3tltJpZAZGQZeZT5cJG8EKwO4Ac/NxHJqer32r6TcrPbxaY+rS23kRhllIj SZTvbdtcFkzt
2jHHXFCVwtpf+u52VFc9e2x1nxHNp9zcXkNpa2scypa3MluZHdnBJaMqxChO Bux8xyPu4yrT
WtcmNpplpc2bTbL3deXcLSbxBMsanarJksG5OQM8j0pBZnbUVxOn+JLm4vW1 NjstpdO06eSF
mLLEJXlDlecAj5ST6LXV6Zcy3mmw3MyqrTAyKFBGEJyuQe+3GffNNxabTE9H Yt0UUUgCiiig
AooooAKKKKAM2fTJVvXvdPu/ss8mPNVoxJHKQAAWXIOQBjII4/CpLTTmiumv Lu5a6uyuwSMo
URrxlUA6AkAnqT61Bd6w63j2Vhafa7iMfvSZAkcROCAzYJyQc4APFS2WqG4u WtLq2e1uwu8R
swYOvGWQjqASAehHpV+9Yj3bkyabZp9txApF6++4DEsJDsCcg/7KgYHHFZ03 hPRriC2gkt5j
HbReQii6lG+P+5Jhv3i/7L5HXjk1buNb0+1tnuJpysUc4t2IjYkSEgYwBnv1 6Y5zjmrSXUMl
1NbI+ZYQrOuDwGzjnp2NQu6/r+kXfUzrrwxpN5etdzQzeY7pI6JdSpG7rjaz RqwQsNq/MRn5
R6Uv/CNaV/aq6l9nk+0rKZ1/0iTy1kKlS4j3bAxDHJA5zzVtNTtZLyO0Dutx IsjpG8ToSsbB
WPIHGWXHqDkZHNW6NtQ8jO1LRLHVnie6WdZYgQk1vcyQSAHGV3xsrbTgEjOC QDjgU+LR9Pt5
LZ4bVIzbQNbwhMgJGxUlQBx/Av5VXn8S6VbaibGW4kEqusbuIJGijdsYV5Qu xGOV4ZgfmX1G
dagDDn8MWY02WysUjt1mto7KQyK0ubdNwCAFuuGYBjnrkg4xW2qhVCqMADAF QWd7b38DTW0n
mRrI8RO0j5kYqw59GUirFNt9QfmFFFFIAooooAKKKKACiiigDD0p4rTU7ywu nEdzLcPPCXIH
noxyCvrtztx/sj1qaeeHUNeso7N1lFkZHuJoyCqkrtEZPqchsdtg9a0Lm0tr yEw3VvFPEeqS
oGB/A0+KGKCJYoY0jjXgKigAfgKq636k8r2OWvdIe98RXdhJby/YrhDeGbB2 CQxeRtzjAOPm
x+NZ66VNqy6PNqemySC61NpbyCaElVVbZ4xvU8bSUU88EsPWu8oqVoXdnmDa FefaEuLfTXj1
JoNYhtbk253RSvOWiO/HyAqX2sSB8xwfm52/Adk1q96Y4Rb2zJEPJj0iTT4/ MG7cdsjsXfG0
FwADgctjjtKKd/6+d/1CT5jirpp4dF1Xw42n3s19eSXAgkFtI0DrM7MrmUZV QobkMwb5Dgcr
mtc6E/2/UNR/s95L+LWrP7PcmEl1hxbiQoeoUjzAxHHBz0rvqKE7O/8AXT/I L33/AKucHbad
dJBawtbsn26/vbadZF2kxNcPKGwexRWA/wCugNd5UTWtu12l00ERuUQxrMUG 9VJBKg9QCQOP
YVLQDd22FFFFIQUUUUAFFFFABRRRQBz/APpOtX1yDdTW9jBK0KxwSFGlYY3M zD5hg5AAI6Z7
1YgFzpep29pLcyXNrdBhE0xy8bqM7c4+YEBjk8gjvmiirvq0Z9Lmfcavrdzr Oq22lfYf+JZ5
Za0mhZpLoMu75ZN6rHnlRkNgrk8HFNg8XTi81S3udJui8F+tnZxxGLdcExCQ jJk2ggbmyxUb
do+9kUUVMNdPL9UbLVN9v8ipf+OZYpY3t9PnS1On3lxNLJGjtBLAwUqVEo3Y OQQDgkrhsZI2
5/EkFvqi2RtLp0EkcMt0gTyopJMbFYFt5JyvKqQNwyRzgoptfCu7/WwVFyp2 6X/CxtUUUVJI
UUUUAFFFFABRRRQAUUUUAf/Z
--------------060508040805090502000700
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-ID: <part3.04000700.05080503@matrox.com>

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL DBkSEw8UHRof
Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwL DBgNDRgyIRwh
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjL/wAAR
CAD5AZIDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI CQoL/8QAtRAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkK
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1 dnd4eXqDhIWG
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW 19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcI CQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz UvAVYnLRChYk
NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOE
hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU 1dbX2Nna4uPk
5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2NbJ3G64kdnP8KSMir7Db gn6n9OlO+wR/
9Nf/AAIk/wDiqt0UKy6AUHtoI2w3m5xn/j4k/wDiqb5Nv/02/wDAiT/4qqfi B7jypY7R9lw0
J8ttwXDc4OSrAf8AfJ+hriYdQ8RaZqMP2678+BY5JpYV2tuQMgJHy7lI3E43 Nn2yAOmNKLSb
W5i5tN6noXk2/wD02/8AAiT/AOKo8m3/AOm3/gRJ/wDFV59/wnNzbssKWM9+ weR5HiilbEfm
uqhfLiYFsJ/EUHTk840pPFxjkkRrM7kEoI83nepbYvT+MIxz24HNWqEOwnOS OwFtCwyFnI9p
5P8A4ql+yxf3Lj/v/J/8VTtMk8y2Zv8Ab/oKu1zzUYyasaRu1e5Q+yxf3Lj/ AL/yf/FUfZYv
7lx/3/k/+Kq/RU3j/KOz7lD7LF/cuP8Av/J/8VR9li/uXH/f+T/4qr9FF4/y hZ9yh9li/uXH
/f8Ak/8AiqabeBTgicH3uJP/AIqtGsrU5vLuVGf4Af1NaU4xnK1iZtxV7iyW 8DoVElxGT/El
w+R+ZI/SoPs7Q8mSadB1xNIrgf8AfWGP5e3pWdp9laLpsaJGoO1hb2yyLGuo qqghmBHXsSOG
AycqQKWweK3s1ji2hdzEqqbArFiWUL/CASRg8jGD0ojSjUbSVgc3FXNiO3t5 k3pJOR0/18gw
fQjPFP8AsUX9+f8A8CH/AMazkuzFL5ick/eXPDj/AB9/wPtrQzJPGJIzlT+n sa5qtKVN2ZpC
aktCL7FF/fn/APAh/wDGj7FF/fn/APAh/wDGrFFZFlf7FF/fn/8AAh/8aPsU X9+f/wACH/xq
xRQBX+xRf35//Ah/8aPsUX9+f/wIf/GrFFAFf7FF/fn/APAh/wDGj7FF/fn/ APAh/wDGrFFA
Ff7FF/fn/wDAh/8AGj7FF/fn/wDAh/8AGrFFAFf7FF/fn/8AAh/8aPsUX9+f /wACH/xqxRQB
X+xRf35//Ah/8aPsUX9+f/wIf/GrFFAFf7FF/fn/APAh/wDGj7FF/fn/APAh /wDGrFFAFf7F
F/fn/wDAh/8AGj7FF/fn/wDAh/8AGrFFAFf7FF/fn/8AAh/8aPsUX9+f/wAC H/xqxRQBX+xR
f35//Ah/8aPsUX9+f/wIf/GrFFAFf7FF/fn/APAh/wDGj7FF/fn/APAh/wDG rFFAFf7FF/fn
/wDAh/8AGj7FF/fn/wDAh/8AGrFFAFf7FF/fn/8AAh/8aPsUX9+f/wACH/xq xRQBX+xRf35/
/Ah/8aPsUX9+f/wIf/GrFFAFf7FF/fn/APAh/wDGj7FF/fn/APAh/wDGrFFA Ff7FF/fn/wDA
h/8AGirFFAC/bbT/AJ+of+/go+22n/P1D/38FYcOlQyQRuWkyygnBHp9Kk/s iD+9L+Y/wr0n
SpLqzm559iHW50kvUMUiuvlgZUgjOTWQYka5W4IzKiFFbPRSQSMfgK3f7Ig/ vS/mP8KP7Ig/
vS/mP8K6oVacYqPYxlTm3c5EeHdMQRCGGW28oEL9muJIeCxbadjDIySQDkDJ xirTabaPJLI0
WWllSZzuPLqAFPX2HHTr6muk/siD+9L+Y/wo/seD+9L+Y/wqvb0kL2cw8PfY 7O2um8yOKS4u
DLJuflm2KueT6KBx6VsfbbT/AJ+of+/grH/siD+9L+Y/wo/siD+9L+Y/wrln GlKV7s2jKola
xsfbbT/n6h/7+Cj7baf8/UP/AH8FY/8AZEH96X8x/hR/ZEH96X8x/hU+ypd2 Pnn2Nj7baf8A
P1D/AN/BR9ttP+fqH/v4Kx/7Ig/vSfmP8KP7Ig/vS/mP8KPZUu7Dnn2Nj7ba f8/UP/fwVg63
Okl6hikV18sDKkEZyam/siD+9L+Y/wAKP7Ig/vS/mP8ACtKSpU5cyZM+eStY wEgSOIRqXwAq
qWkYlQv3QCTkY6jHQ9KkiXyU2IWxksSzFiSTkkk8nkmtv+x4P70v5j/Cj+yI P70v5j/Ct1Wp
LZfgZOnN7mPvb1qe2vprVyyEHP3lbof/AK/v/OtH+yIP70v5j/Cj+yIP70v5 j/ClOpRqR5ZD
jCpF3RZh1e0lADSeU3pJwPz6frV4EEZHIrI/siD+9L+Y/wAKb/Ylr/t/p/hX nyw8L+7L8DpV
SXVGzRWN/Ylr/t/p/hR/Ylr/ALf6f4VP1dfzD9o+xs0Vjf2Ja/7f6f4Uf2Ja /wC3+n+FH1df
zB7R9jZorG/sS1/2/wBP8KP7Etf9v9P8KPq6/mD2j7GzRWN/Ylr/ALf6f4Uf 2Ja/7f6f4UfV
1/MHtH2Nmisb+xLX/b/T/Cj+xLX/AG/0/wAKPq6/mD2j7GzRWN/Ylr/t/p/h R/Ylr/t/p/hR
9XX8we0fY2aKxv7Etf8Ab/T/AAo/sS1/2/0/wo+rr+YPaPsbNFY39iWv+3+n +FH9iWv+3+n+
FH1dfzB7R9jZorG/sS1/2/0/wo/sS1/2/wBP8KPq6/mD2j7GzRWN/Ylr/t/p /hR/Ylr/ALf6
f4UfV1/MHtH2Nmisb+xLX/b/AE/wo/sS1/2/0/wo+rr+YPaPsbNFY39iWv8A t/p/hR/Ylr/t
/p/hR9XX8we0fY2aKxv7Etf9v9P8KP7Dtf8Ab/T/AAo+rr+YPaPsbNFY/wDY dr/t/p/hR/Yd
r/t/p/hS+rr+YPaPsbFFZH9hWv8At/p/hR/YNp/t/p/hR9XX8we0fY16Kyf7 BtP9v9P8KKPq
6/mDnfY0bOLNlAf+ma/yrCuvEyJczRWdp9oSEkSTO5RAQQDjCkkZOM4xmuos I86dbHH/ACyT
+QryvQrs6LePNqIeU24+zNaKv+sJBV95PGBycdyy9skTiKkouy0PSy3CQrqT kr2Ssu9zt9K1
qLUbg2ssD210E8wIxyHXjlW78EHt1raWEd6888OLeXfjiF2uftaI0kzTbCpK FGUEg/dyWXj/
AGeOBXpci7cUqVSUo3ZGYYaGHqqMOqT9CDyV96PJX3qSir5mcNiPyV96PJX3 qSijmYWI/JX3
o8lfepKKOZhYj8lfejyV96koo5mFiPyV96PJX3qSijmYWI/JX3o8lfepKKOZ hYj8lfejyV96
koo5mFiPyV96PJX3qSijmYWI/JX3o8lfepKKOZhYj8lfemtCB0qanxruzTUm Fir5VHlVB4it
hJod0/mTxtEhkRoZniIIB7qQSPY8VmTRXWkXuoPYuhgt7eGSQXTSTvIMyEqG Zsr9Tu+lKVRp
7HVSwyqQupa/h06/PsbXlUvk1l6ZqWq3+qvmwA04Syw+YAnyFGK5LeaSclfu +WMZ68ZO2Rhi
PehVLq6Mq1B0pcsmr+Tv8vUg8k0eSamop8zMrEPkmjyamoo5mFiHyTR5Jqal UZYD3o5mFiv5
VHlVl38l7aapqNzam3EcFtDJIsqMxcAyZUYI2nHfn6VDNrepJfzCC1Se1cTL bF41h3yIDxuM
pJGVIyUUd846z7ZLdHZHAzkrxa2v26J2+5m15VHlVnw6rcRaBqN7cqktxZBy 8Yha3wVQNtIZ
mHf7wYqRyDUFvfeIHaGCe1gt5J5dqTSxAKV2MxwiTPkgqOrDO725ftUSsFPV 3St579dFvsa/
lUeVWYL/AFOSOHa9jE93dvbwl42YRhDISSNw3khBwNuOTk9KjttW1S7huZIo bUm2gLFGBUzy
AyL8pLYVSUBBOeD+NL2yH9RqWbutPP5fnp/wNTX8qjyqr6RfPcQsl7NELoTG HZ5LQHcEDFdr
M2SBk5VmBAyDitXy/arU7q5z1KTpy5WUvKo8qrvl+1Hl+1PmM7FLyqXyqueX 7Uvl+1HMFil5
VL5XtVzy6PLpcwWKnlUvl1a8ujy6LjsVfLoq3soouKwzTx/xLbX/AK4p/IVS 1HwxpGq3X2m7
tCZ8BTLHK8TEDoCUIz+NSWMzjT7YBuBEvb2FSvdmJd0kqoOmWwKU1eTRdOpK naUXZiabo2n6
PE8dhbLCJDucgksx92OSfxqzNGzbdozVT+0ov+fqH/vtaP7Si/5+of8AvtaS i10CU3J80ndk
3kyf3f1o8mT+7+tQ/wBpRf8AP1D/AN9rR/aUX/P1D/32tHK+xN0TeTJ/d/Wj yZP7v61D/aUX
/P1D/wB9rR/aUX/P1D/32tHK+wXRN5Mn939aPJk/u/rUP9pRf8/UP/fa0f2l F/z9Q/8Afa0c
r7BdE3kyf3f1o8mT+7+tQ/2lF/z9Q/8Afa0f2lF/z9Q/99rRyvsF0TeTJ/d/ WjyZP7v61D/a
UX/P1D/32tH9pRf8/UP/AH2tHK+wXRN5Mn939aPJk/u/rUP9pRf8/UP/AH2t H9pRf8/UP/fa
0cr7BdE3kyf3f1o8mT+7+tQ/2lF/z9Q/99rR/aUX/P1D/wB9rRyvsF0TeTJ/ d/WjyZP7v61D
/aUX/P1D/wB9rR/aUX/P1D/32tHK+wXRN5Mn939aPJk/u/rUP9pRf8/UP/fa 0f2lF/z9Q/8A
fa0cr7BdE3kyf3f1qWGNl3bhiqn9pRf8/UP/AH2tH9pRf8/UP/fa0cr7BdEu oWLX9qYBdS24
J+ZokjYsMH5SHVhj8O1Z7+Hp5PM367qDeYoV90NqdwGeD+55HJ/Orf8AaUX/ AD9Q/wDfa0f2
lF/z9Q/99rSdNvo/xNoYiUFaNvuT/NGcvhNVv2v11W6F43BuBbWnmHjH3vJz 04rXS1kSNVaU
ysAAZHwGb3OABk+wAqH+0ov+fqH/AL7Wj+0ov+fqH/vtaI0+XZBVxEqtudrT yS/IsfZ39Vo+
zv6rVf8AtKL/AJ+of++1o/tKL/n6h/77WnyvsY3RY+zv6rR9nf1Wq/8AaUX/ AD9Q/wDfa0f2
lF/z9Q/99rRyvsF0WPs7+q017WR42VZTExBAkTBZfcZBGR7gimR3glz5cyPj rtIOKf50n979
KTQ0+pnP4enk8zfruoN5ihXzDancBng/ueRyfzqufB0LSzSnUrgyT5Erm0tM yZBB3HyOcgkc
+prZ86T+9+lHnSf3v0qHTi9zqjjK0drfcv8AIzLXw09lbi3tNavoIBnEcVva ooz14EOKitPC
EVh/x56nc23zbv3NraJzgjPEHXBI/GtjzpP736UedJ/e/Sj2cQ+uVtdVrvot fwMubwubm1a1
n1i9lt2OWikt7RkJznJBhx15+tH/AAjDCBoP7ZvfJaMQtH9ntNpQDAUjycbc EjHTmtTzpP73
6UedJ/e/Sj2cf6YfXKtrafcv8jJt/Cv2WOKO31e7hjhYvGsdtaKEYggkAQ8E gnp6mt2KIxwo
jSNKyqAZHxuY+pwAMn2AFQedJ/e/SjzpP736U1FLYyq151fj/JL8i1to21V8 6T+9+lHnSf3v
0qjItbaMVV86T+9+lHnSf3v0oAtYoxVXzpP736UedJ/e/SgC1ijFVfOk/vfp R50n979KALWK
Kq+dJ/e/SigCpZf8eFv/ANcl/kKJGZZZGViDtQAjtktn+Q/Kiy/48Lf/AK5L /IU51yZD/uf+
zVo/iZPRCIJnQN58gz7mnbJv+fiT8z/jToxiMU6p5mOxHsm/5+JPzP8AjRsm /wCfiT8z/jUl
FLmYWRHsm/5+JPzP+NGyb/n4k/M/41JRRzMLIj2Tf8/En5n/ABo2Tf8APxJ+ Z/xqSijmYWRH
sm/5+JPzP+NGyb/n4k/M/wCNSUUczCyI9k3/AD8Sfmf8aNk3/PxJ+Z/xqSij mYWRHsm/5+JP
zP8AjRsm/wCfiT8z/jUlFHMwsiPZN/z8Sfmf8aNk3/PxJ+Z/xqSijmYWRHsm /wCfiT8z/jUL
STBiPOk4P941aquy/MfrVRfcTQzzZv8AnrJ/30aPNm/56yf99GnbaNtVdCG+ bN/z1k/76NHm
zf8APWT/AL6NO20baLoBvmzf89ZP++jR5s3/AD1k/wC+jTttG2i6Ab5s3/PW T/vo0ebN/wA9
ZP8Avo07bRtougG+bN/z1k/76NHmzf8APWT/AL6NO20baLoBvmzf89ZP++jR 5s3/AD1k/wC+
jTttG2i6AFZ3MZZiSJMZJ5wVbj9B+VWahReF/wB8f+gtU1RIpBRRRUjCiiig AooooAKKKKAC
iiigAooooAKKKKACiiigAooooAgsv+PC3/65L/IVPtyrfVf61BZf8eFv/wBc l/kKnqpfExR2
QgGBilooqRhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU0pk06igBuyj ZTqKdwsN2UbK
dRRcLDdlGynUUXCw3ZRsp1FFwsN2UbKdRRcLDdlGynUUXCwgXCf8CH8jS0UU gCiiigAooooA
KKKKACiiigAooooAKKKKACiiigAooooAKKKKAILL/jwt/wDrkv8AIVPUFl/x 4W//AFyX+Qqe
qn8TFHZBRRRUjCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAxL7V tRt9ch0230+1
lE8byxySXbJwu3dkCM4OW4wT07Vbt9QmSO4fVIrazWHBMi3G+PB9WZVwc9se nrXP6/d6S/jL
Tob3Uo7cQ204k23pgZGJjKhirAjI5wetV9duNDfwbqltb3kN5HEDIsrzeaFk YkgCRicv175A
+orn9o03rtc9mODhUhSXI05Wu7PrJq9722tpbqdcdTsAzKb62DKzIwMq5DKM sDz1A5PoKZPr
GmWsUMtxqNpDHON0TyTqokHHKknkcjp61zmpx6DH4j8PTRjTlaeRz5i7AZF8 pgnP8QztA98V
Ja3NhpGuava6r9ms4JljFoZtqRSQBAPLXPHDFsr/ALXTmn7SV7aGX1Km4qS5 npe3V+9ytLfb
f0Ommu7a2Kie4iiLgld7hdwAycZ9ByfahrhHsjcQTQshj3pIWyhGMg5Hb3rh LO1tLCbwpBqJ
hScSzCNbggSLEQ/lKc891AB78da6/VYbGDw9dQzRW8dmkBGx1URqAOBg8DnG KPaNwlLt/l1M
6+EhRnCKbd3vbT4mtPuHQanbx2MMl9fWKym3WaRo5gIyOAXUk/cyeD7ir0ci TRJLE6vG6hld
TkMD0IPcV5/4futFXVNFne5sFkXRP3jmRAQ67PvHPUKG69AD6V0ng2a3m8L2 q28sciRloz5b
BguGOBx04I/AiqhU5pW9fwdjTG4FUYuavuullrzf5fiawv7NpxALuAyl2jEY kG4soyVxnqAQ
SKbBqen3N1Ja299bS3Eed8Mcqs6YODkA5GDxXH2NvaXGneKE0ZbR76O5la2E O3KExAKVx93k
uAeOc+9TSTWGr2WgwaU8a39pcRN5KcSWqLxIHUcqMZUg8E4HcVKqt287fj/k U8vgna78/LS9
35dPvfkdVPqen213Ha3F9bRXMmNkMkqq7ZOBgE5OTxVafXtPt9bh0qW5hS4l jLgNIAQcqFXB
7tuOB7GucjubIaZrulazsS/nnmPkyY33Kt/qjGOr8BVGOQVxVqxMmna7okWp TAXLaS0JZ2yZ
JQ0eQD/Ee/60RqOTX9d9PUPqNON+a7dn89L3Xl/wPQ6iWeGAIZpUjDuEXewG 5j0Az1J9KbbX
lrextJa3MM6IxRmicMAw6gkd/auf8ZnT1ttMa+NspF/DtaYqCF3jfgntjr7d aydTuI7ibxJD
prx3Um+2ea3gcM8ka4WUBR14G0j8KJVXFtf1tcjD4BVqaldq/W2i95L9b/I7 Kz1Ow1Hf9hvr
a62Y3+RKr7c9M4PHQ1l674hTTgsVncWMl2s8STQSTfvER3VchByT8w646556 GnNNa6z4g0m9
0S6hmeCOUTywtkLEyfKj46ZbBCnngnsaxptQ09fBNtaXDIup21zA9zbkZmWU TLvcqOTnJ577
vepnVe2367bG+HwEPawbTd2rx6q7a18tOy3Xz7ufULK1uIre4u7eKaY4ijkk Cs5zj5QTk8+l
WK4bUIrS8vtXstX1O8tY7x0kgt1jj/0iPYm0JujLlwwPyg5B7ZOT18N7bvdt YCRjdRRLI6MD
kK2QCT0PQ9K1hPm3OLEYT2UIyV22rvR2tp1t52f562WfrGuvol1bNdWqnTpp PLe5WUlojgnL
Jt+7x13cVavb27hktBZ29vcR3D7S8lwUxwWyMI2RgHuO1V9YvLCO+022vLm2 QyzMPKmdRvUx
uvQ9QSQPxxWTbWl5oWtWGlKrz6RJMz2khJLW5CPmJieq91PXjHNS5SUrX0v/ AEjanQpTpxly
2lZvW9pJX213XbZrz36Y6hZLfLYm7txdsMrAZB5hGM5C5z0BoOoWS3y2LXdu LthlYDIPMIxn
IXOegNcbBb21zcmz1PVLxb+DUmuI7JViy7eYWR0+TeV2kZO7AGQcAcEFvbXN ybPU9UvFv4NS
a4jslWLLt5hZHT5N5XaRk7sAZBwBwlVbtpv/AF95o8upreT0XZ/etNV+H946 DxFr0ej6ddGG
4sv7QjgaaO3uJtpYAE5Cjk9DxxnHUda1oHMtvHI2MsgY49xXDXd5ZxeGvEth qLxJqbm5cxyY
DzDBMbKOrAKFwR029sV2emzJcaZbSoHCtGuN6FT09CARTpTcm/RfLcxxWGVG hGy1u9e+itby
3t/VrVFFFbHnBRRRQAUUUUAFFFFAEFl/x4W//XJf5Cp6gsv+PC3/AOuS/wAh U9VP4mKOyCii
ipGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUVhXN9qKeL7ezi jgNn9keR905U
43oC2Np5HYZ5yeRUU3ieWCxXVmsAdGLD/SFmzKEJwJDHtxtzjo2cHOO1R7SP U61gq0lHlV7+
a63svV223OioqC7vIbGxmvJ3xBDGZHYc8AZrAs/Fhvr+awtobGe58gzweRfi RHAOCrsF+RuQ
ehB9eKJTjF2ZFLC1qsXOC0W/9P8ApHTUVg6Tr11q0UcsenIEVH+0qs53wyqS PKwyAFuBnJGM
+mCa6eKrk6MuryaSY7JHZLjM4MkYDlSwULhgMc8jvjOMlOrFamn1CvzONtU7 brd3st+tv6uj
pqK5OK5ttI8S+ILt/MdGhtW2hyzO7FwFXccDJIAGQB7Vorrl1balBY6lp6wy 3KM1sbefzVkZ
RlkJZU2tjkZ4PPPFCqLqE8FUT9zVWT6LopPS+tr626am3RXNW/iuR9NXUbrT vstmd6GSS4X5
ZRJ5YU+x67ugwe2CbOheI4tZury1xb+da7GLWtyJ4nVhwQwA5BBBBA7dc01U i3ZMU8DiIRlN
x0jvqnbW3Rm5RWBd3eov4sg0+OOI2b2bu/8ApDI2N6Atwv3hzgZHU8is7w3q MmnaVptt9kJt
Jbye285pvmDeZIVwpB3DjGSQc9jS9orr+uti1gZul7RPXTTTZ83nv7ux2FFc xP40s4dRigVr
WSB7r7KxW7Xz0bJXcYsfd3DGc5wc4xV/xTeXdh4avrmyCeckRwzOV2DpuGAc kdhTVSLTa6Ef
UqynCE1bn2ubFFc/Nrupw6h/Z40USXZtWuFCXQ8tyrAbQxUHuOSBzxjHzVXm 8a2kWoQwg2rw
vc/ZX23a+ej5K5MWPu7hjOc4OcYpe1h3HHL8RL4Y366NP9fu79DqKK5ifxpZ w6jFArWskD3X
2Vit2vno2Su4xY+7uGM5zg5xiunqozjLZmVbDVaKTqK19goooqjAKKKKACii igAooooAKKKK
ACiiigAooooAgsv+PC3/AOuS/wAhU9QWX/Hhb/8AXJf5Cp6qfxMUdkFFFFSM KKKKACiiigAo
oooAKKKKACiiigAooooAKKKKACiiigDJvNOupNft76HyGg+zSW0yyMVYBmVs rgHP3SMEis2H
QNRTRP8AhHpXtpNNH7sXPmMJvJznaU27c4+Xdu98dq6iiodNM64Y2pCKiraW t6q9n6q78u6Z
U1Gwj1HS7mwdikc8TRbl6rkYyPpVOEeIBasJv7PM8cZWMq77Zn7M3y/IB6Dd knqMc69FNxu7
mUKzjHlaTV76/wBdf61MC10zUrHWkurdbb7NcQr9uV7hizSj+NfkxnHHbIxw MCsvSLLUdT8M
tp5W1WwnnnWSbzG8wJ5z7lCbcZPIzu4znHHPYyRpLG0ciK6MCrKwyCD1BFQ2 dhZ6fG0dlaQW
0bHcVhjCAn1wBUOnrbpr+J1LHPkd1711Z+l7dd1fT0sc7f8Ahu91HUNTLPBb wXEcH2eWOQs8
bxMWUlCoBBJ5Ge3vxfWx1K9vLS71KGzjksgzRRwTM4kkZduSSg2gDPGG6+3O 3RTVNGcsdUcV
F200X3JP70rP8LM5u10K/Phk6fcPbwXUVwbiCWJzIobzfNXIKr3OCPTn6bFj /aTbn1AW0ZwA
sVu5cZ7sWYA8+mOMdTni5RVRjYzq4mVS/Mlq2/m97ev/AAxk3lje/wBv2+o2 gt3RbaSCRJXZ
SMsrAjCnP3cdvXnpWRDomtR6dptqYdP3Wt+10xF0+CpZmAH7vr85H4D1462i pdNP+vO5pDGz
hFRsnb/g+fmzEstP1TT5ZbSCS1OnvO0ySsW82IMxZk24w3JOGyMZ5Bxzb12w k1TQr2xhdUln
iKoX6Z7Zx2rQoquVcvKZvEzdRVdLrX1fdmHHZ6q/iO31GeGyWJbVoJAlwxYF mVsgFBnG3HUd
c8dKWy0/VNPlltIJLU6e87TJKxbzYgzFmTbjDck4bIxnkHHO3RSULdSnipNc tla1rel7P11M
Sy0/VNPlltIJLU6e87TJKxbzYgzFmTbjDck4bIxnkHHOnb/bPOuftPkeVvH2 fy87tmB97PfO
enbFWKKajYzqV3Ubckrv+r+oUUUVRiFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAQWX/Hhb/8A
XJf5Cp6gsv8Ajwt/+uS/yFT1U/iYo7IKKybyTToL+eXUVtyPKhSPzUDlmJlO 1BgksccAcnFV
/wCxn1H/AI+bS0sLY/8ALG3iQzMPRpMYXIOCE5BGRJUtpadTWFNyXM9F3f6d /wCrmtd31pp8
QlvbqC2jLbQ80gQE9cZPfg/lVP8At
Re: Limit Copy, Paste, Cut keyboard shortcuts to EMF tree only (not the entire editor) [message #416417 is a reply to message #416405] Wed, 30 January 2008 19:30 Go to previous messageGo to next message
Mircea Luchian is currently offline Mircea LuchianFriend
Messages: 89
Registered: July 2009
Member
This is a multi-part message in MIME format.
--------------050409070902010705050606
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Hi Paul an Tom,

With some extra inspiration, I found the solution to my problem. Here it
is:

textName.addFocusListener(new FocusListener()
{
IAction emfcutaction =
detailsPage.getActionBars().getGlobalActionHandler(ActionFac tory.CUT.getId());
IAction emfcopyaction =
detailsPage.getActionBars().getGlobalActionHandler(ActionFac tory.COPY.getId());
IAction emfpasteaction =
detailsPage.getActionBars().getGlobalActionHandler(ActionFac tory.PASTE.getId());

IAction standardCut = new Action()
{
public void run()
{
textName.cut();
}
};

IAction standardCopy = new Action()
{
public void run()
{
textName.copy();
}
};

IAction standardPaste = new Action()
{
public void run()
{
textName.paste();
}
};

public void focusLost(FocusEvent e)
{


detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.CUT.getId(),
emfcutaction);

detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.COPY.getId(),
emfcopyaction);

detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.PASTE.getId(),
emfpasteaction);
detailsPage.getActionBars().updateActionBars();
}


public void focusGained(FocusEvent e)
{

detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.CUT.getId(),
standardCut);

detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.COPY.getId(),
standardCopy);

detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.PASTE.getId(),
standardPaste);
detailsPage.getActionBars().updateActionBars();
}
});

Thanks for your help.

Mircea


Paul Webster wrote:
> Mircea Luchian wrote:
>>
>> Would it be possible that I pass the wrong workbench window to these
>> three actions? Here is how I initialized them below:
>>
>> IAction standardCut =
>> ActionFactory.CUT.create(editor.getEditorSite().getWorkbench Window());
>> IAction standardCopy =
>> ActionFactory.COPY.create(editor.getEditorSite().getWorkbenc hWindow());
>> IAction standardPaste =
>> ActionFactory.PASTE.create(editor.getEditorSite().getWorkben chWindow());
>
> As Tom mentioned, the ActionFactory actions are retargetable (and not
> even that in 3.4). They don't do anything, they just delegate
> execution to something else.
>
> If you need to have "copy" work as *either* normal copy in the current
> text control *or* run your copy action to deal with something in the
> part (a graphical object, for example) you can use
> org.eclipse.ui.actions.TextActionHandler
>
> PW
>
>


--------------050409070902010705050606
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">
Hi Paul an Tom, <br>
<br>
With some extra inspiration, I found the solution to my problem. Here
it is: <br>
<br>
&nbsp;&nbsp;<font face="Courier New, Courier, monospace">&nbsp; &nbsp;&nbsp;&nbsp;
textName.addFocusListener(new FocusListener()<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IAction emfcutaction =
detailsPage.getActionBars().getGlobalActionHandler(ActionFac tory.CUT.getId()); <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IAction emfcopyaction =
detailsPage.getActionBars().getGlobalActionHandler(ActionFac tory.COPY.getId()); <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IAction emfpasteaction =
detailsPage.getActionBars().getGlobalActionHandler(ActionFac tory.PASTE.getId()); <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IAction standardCut = new Action()<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void run()<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; textName.cut();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; };<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IAction standardCopy = new Action()<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void run()<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; textName.copy();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; };<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IAction standardPaste = new Action()<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void run()<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; textName.paste();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void focusLost(FocusEvent e)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.CUT.getId(),
emfcutaction);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.COPY.getId(),
emfcopyaction);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.PASTE.getId(),
emfpasteaction);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; detailsPage.getActionBars().updateActionBars();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void focusGained(FocusEvent e)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.CUT.getId(),
standardCut);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.COPY.getId(),
standardCopy);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.PASTE.getId(),
standardPaste);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; detailsPage.getActionBars().updateActionBars();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</font><br>
<font face="Courier New, Courier, monospace">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }); </font><br>
<br>
Thanks for your help. <br>
<br>
Mircea<br>
<br>
<br>
Paul Webster wrote:
<blockquote cite="midfnq256$hkm$1@build.eclipse.org" type="cite">Mircea
Luchian wrote:
<br>
<blockquote type="cite"><br>
Would it be possible that I pass the wrong workbench window to these
three actions? Here is how I initialized them below:
<br>
<br>
&nbsp;&nbsp;&nbsp; IAction standardCut =
ActionFactory.CUT.create(editor.getEditorSite().getWorkbench Window());
<br>
&nbsp;&nbsp;&nbsp; IAction standardCopy =
ActionFactory.COPY.create(editor.getEditorSite().getWorkbenc hWindow());
<br>
&nbsp;&nbsp;&nbsp; IAction standardPaste =
ActionFactory.PASTE.create(editor.getEditorSite().getWorkben chWindow());
<br>
</blockquote>
<br>
As Tom mentioned, the ActionFactory actions are retargetable (and not
even that in 3.4).&nbsp; They don't do anything, they just delegate
execution to something else.
<br>
<br>
If you need to have "copy" work as *either* normal copy in the current
text control *or* run your copy action to deal with something in the
part (a graphical object, for example) you can use
org.eclipse.ui.actions.TextActionHandler
<br>
<br>
PW
<br>
<br>
<br>
</blockquote>
<br>
</body>
</html>

--------------050409070902010705050606--
Re: Limit Copy, Paste, Cut keyboard shortcuts to EMF tree only (not the entire editor) [message #416418 is a reply to message #416417] Wed, 30 January 2008 20:16 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 33142
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------080608080206030402080502
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Mircea,

Such a nice community effort all around! Thanks everyone and thanks for
sharing the results!! Please include this in the bugzilla...


Mircea Luchian wrote:
> Hi Paul an Tom,
>
> With some extra inspiration, I found the solution to my problem. Here
> it is:
>
> textName.addFocusListener(new FocusListener()
> {
> IAction emfcutaction =
> detailsPage.getActionBars().getGlobalActionHandler(ActionFac tory.CUT.getId());
> IAction emfcopyaction =
> detailsPage.getActionBars().getGlobalActionHandler(ActionFac tory.COPY.getId());
> IAction emfpasteaction =
> detailsPage.getActionBars().getGlobalActionHandler(ActionFac tory.PASTE.getId());
>
> IAction standardCut = new Action()
> {
> public void run()
> {
> textName.cut();
> }
> };
>
> IAction standardCopy = new Action()
> {
> public void run()
> {
> textName.copy();
> }
> };
>
> IAction standardPaste = new Action()
> {
> public void run()
> {
> textName.paste();
> }
> };
>
> public void focusLost(FocusEvent e)
> {
>
>
> detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.CUT.getId(),
> emfcutaction);
>
> detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.COPY.getId(),
> emfcopyaction);
>
> detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.PASTE.getId(),
> emfpasteaction);
> detailsPage.getActionBars().updateActionBars();
> }
>
>
> public void focusGained(FocusEvent e)
> {
>
> detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.CUT.getId(),
> standardCut);
>
> detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.COPY.getId(),
> standardCopy);
>
> detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.PASTE.getId(),
> standardPaste);
> detailsPage.getActionBars().updateActionBars();
> }
> });
>
> Thanks for your help.
>
> Mircea
>
>
> Paul Webster wrote:
>> Mircea Luchian wrote:
>>>
>>> Would it be possible that I pass the wrong workbench window to these
>>> three actions? Here is how I initialized them below:
>>>
>>> IAction standardCut =
>>> ActionFactory.CUT.create(editor.getEditorSite().getWorkbench Window());
>>> IAction standardCopy =
>>> ActionFactory.COPY.create(editor.getEditorSite().getWorkbenc hWindow());
>>> IAction standardPaste =
>>> ActionFactory.PASTE.create(editor.getEditorSite().getWorkben chWindow());
>>>
>>
>> As Tom mentioned, the ActionFactory actions are retargetable (and not
>> even that in 3.4). They don't do anything, they just delegate
>> execution to something else.
>>
>> If you need to have "copy" work as *either* normal copy in the
>> current text control *or* run your copy action to deal with something
>> in the part (a graphical object, for example) you can use
>> org.eclipse.ui.actions.TextActionHandler
>>
>> PW
>>
>>
>


--------------080608080206030402080502
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">
Mircea,<br>
<br>
Such a nice community effort all around!&nbsp; Thanks everyone and thanks
for sharing the results!!&nbsp; Please include this in the bugzilla...<br>
<br>
<br>
Mircea Luchian wrote:
<blockquote cite="mid:fnqj93$7s9$1@build.eclipse.org" type="cite">
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
<title></title>
Hi Paul an Tom, <br>
<br>
With some extra inspiration, I found the solution to my problem. Here
it is: <br>
<br>
&nbsp;&nbsp;<font face="Courier New, Courier, monospace">&nbsp; &nbsp;&nbsp;&nbsp;
textName.addFocusListener(new FocusListener()<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IAction emfcutaction =
detailsPage.getActionBars().getGlobalActionHandler(ActionFac tory.CUT.getId()); <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IAction emfcopyaction =
detailsPage.getActionBars().getGlobalActionHandler(ActionFac tory.COPY.getId()); <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IAction emfpasteaction =
detailsPage.getActionBars().getGlobalActionHandler(ActionFac tory.PASTE.getId()); <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IAction standardCut = new Action()<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void run()<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; textName.cut();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; };<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IAction standardCopy = new Action()<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void run()<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; textName.copy();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; };<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; IAction standardPaste = new Action()<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void run()<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; textName.paste();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void focusLost(FocusEvent e)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.CUT.getId(),
emfcutaction);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.COPY.getId(),
emfcopyaction);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.PASTE.getId(),
emfpasteaction);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; detailsPage.getActionBars().updateActionBars();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>
<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void focusGained(FocusEvent e)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.CUT.getId(),
standardCut);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.COPY.getId(),
standardCopy);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
detailsPage.getActionBars().setGlobalActionHandler(ActionFac tory.PASTE.getId(),
standardPaste);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; detailsPage.getActionBars().updateActionBars();<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</font><br>
<font face="Courier New, Courier, monospace">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }); </font><br>
<br>
Thanks for your help. <br>
<br>
Mircea<br>
<br>
<br>
Paul Webster wrote:
<blockquote cite="midfnq256$hkm$1@build.eclipse.org" type="cite">Mircea
Luchian wrote: <br>
<blockquote type="cite"><br>
Would it be possible that I pass the wrong workbench window to these
three actions? Here is how I initialized them below: <br>
<br>
&nbsp;&nbsp;&nbsp; IAction standardCut =
ActionFactory.CUT.create(editor.getEditorSite().getWorkbench Window()); <br>
&nbsp;&nbsp;&nbsp; IAction standardCopy =
ActionFactory.COPY.create(editor.getEditorSite().getWorkbenc hWindow());
<br>
&nbsp;&nbsp;&nbsp; IAction standardPaste =
ActionFactory.PASTE.create(editor.getEditorSite().getWorkben chWindow());
<br>
</blockquote>
<br>
As Tom mentioned, the ActionFactory actions are retargetable (and not
even that in 3.4).&nbsp; They don't do anything, they just delegate
execution to something else. <br>
<br>
If you need to have "copy" work as *either* normal copy in the current
text control *or* run your copy action to deal with something in the
part (a graphical object, for example) you can use
org.eclipse.ui.actions.TextActionHandler <br>
<br>
PW <br>
<br>
<br>
</blockquote>
<br>
</blockquote>
<br>
</body>
</html>

--------------080608080206030402080502--


Ed Merks
Professional Support: https://www.macromodeling.com/
Re: Limit Copy, Paste, Cut keyboard shortcuts to EMF tree only (not the entire editor) [message #416429 is a reply to message #416417] Thu, 31 January 2008 13:45 Go to previous message
Paul Webster is currently offline Paul WebsterFriend
Messages: 6859
Registered: July 2009
Location: Ottawa
Senior Member

Mircea Luchian wrote:
> Hi Paul an Tom,
>
> With some extra inspiration, I found the solution to my problem. Here it
> is:

>> org.eclipse.ui.actions.TextActionHandler

That's more or less how TextActionHandler works :-) You add multiple
text controls to it, and your part-level actions (i.e. one part level
cut + any of your text controls).

When the text control is active, it will use textControl.cut() and if no
registered text control is active, it will use the part level cut.

Later,
PW


--
Paul Webster
http://wiki.eclipse.org/Platform_Command_Framework
http://wiki.eclipse.org/Command_Core_Expressions
http://wiki.eclipse.org/Menu_Contributions
http://wiki.eclipse.org/Menus_Extension_Mapping
http://help.eclipse.org/help33/index.jsp?topic=/org.eclipse. platform.doc.isv/guide/workbench.htm


Previous Topic:[newbie qns] reflection and class impl
Next Topic:Attribute dependency validation
Goto Forum:
  


Current Time: Fri Apr 26 18:09:52 GMT 2024

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

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

Back to the top