Date: Thu, 28 Mar 2024 10:16:47 +0000 (UTC)
Message-ID: <2000824714.24483.1711621007334@ae5f4610bf64>
Subject: Exported From Confluence
MIME-Version: 1.0
Content-Type: multipart/related;
boundary="----=_Part_24482_1342272100.1711621007334"
------=_Part_24482_1342272100.1711621007334
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Content-Location: file:///C:/exported.html
This page presents a very simple client to access a server that implemen=
ts the file system we developed in Slice for a Simple File System. The C++ code shown he=
re hardly differs from the code you would write for an ordinary C++ program=
. This is one of the biggest advantages of using Ice: accessing a remote ob=
ject is as easy as accessing an ordinary, local C++ object. This allows you=
to put your effort where you should, namely, into developing your applicat=
ion logic instead of having to struggle with arcane networking APIs. This i=
s true for the server s=
ide as well, meaning that you can develop distributed applications easi=
ly and efficiently.
We now have seen enough of the client-side C++ mapping to develop a comp=
lete client to access our remote file system. For reference, here is the Sl=
ice definition once more:
module Filesystem {
interface Node {
idempotent string =
;name();
};
exception GenericError {
string reason;
};
sequence<string> Lines;
interface File extends Node {&n=
bsp;
idempotent Lines =
read();
idempotent void w=
rite(Lines text) throws GenericError;
};
sequence<Node*> NodeSeq;
interface Directory extends Node&nbs=
p;{
idempotent NodeSeq&nbs=
p;list();
};
};
To exercise the file system, the client does a recursive listing of the =
file system, starting at the root directory. For each node in the file syst=
em, the client shows the name of the node and whether that node is a file o=
r directory. If the node is a file, the client retrieves the contents of th=
e file and prints them.
The body of the client code looks as follows:
#include <Ice/Ice.h>
#include <Filesystem.h>
#include <iostream>
#include <iterator>
using namespace std;
using namespace Filesystem;
static void
listRecursive(const DirectoryPrx& dir, int depth&nb=
sp;=3D 0)
{
// ...
}
int
main(int argc, char* argv[])
{
int status =3D 0;
Ice::CommunicatorPtr ic;
try {
// Create a =
communicator
//
ic =3D Ice::initi=
alize(argc, argv);
// Create a =
proxy for the root directory
//
Ice::ObjectPrx base =
=3D ic->stringToProxy("RootDir:default -p 10000");
if (!base)
thr=
ow "Could not create proxy";
// Down-cast the&=
nbsp;proxy to a Directory proxy
//
DirectoryPrx rootDir&n=
bsp;=3D DirectoryPrx::checkedCast(base);
if (!rootDir)
thr=
ow "Invalid proxy";
// Recursively li=
st the contents of the root directory
//
cout << "Co=
ntents of root directory:" << endl;
listRecursive(rootDir);
} catch (const Ice::Exception&&n=
bsp;ex) {
cerr << ex&=
nbsp;<< endl;
status =3D 1;
} catch (const char* msg) =
{
cerr << msg=
<< endl;
status =3D 1;
}
// Clean up
//
if (ic)
ic->destroy();
return status;
}
- The code includes a few header files:=20
Ice/Ice.h
:
Always included in both client and server source files, provides definitio=
ns that are necessary for accessing the Ice run time.
Filesystem.h
:
The header that is generated by the Slice compiler from the Slice definiti=
ons in Filesystem.ice
.
iostream
:
The client uses the iostream
library to produce its output.=
li>
iterator
:
The implementation of listRecursive
uses an STL iterator.
- The code adds
using
declarations for the std
=
and Filesystem
namespaces.
- The structure of the code in
main
follows what we saw in <=
a href=3D"/display/Ice34/Hello+World+Application">Hello World Application=
a>. After initializing the run time, the client creates a proxy to the root=
directory of the file system. For this example, we assume that the server =
runs on the local host and listens using the default protocol (TCP/IP) at p=
ort 10000. The object identity of the root directory is known to be R=
ootDir
.
- The client down-casts the proxy to
DirectoryPrx
and passes=
that proxy to listRecursive
, which prints the contents of the=
file system.
Most of the work happens in listRecursive
:
// Recursively print the conten=
ts of directory "dir" in
// tree fashion. For files, show the con=
tents of each file.
// The "depth" parameter is the current =
nesting level
// (for indentation).
static void
listRecursive(const DirectoryPrx& dir, int depth&nb=
sp;=3D 0)
{
string indent(++depth, '\t');
NodeSeq contents =3D dir->list();
for (NodeSeq::const_iterator i =3D&n=
bsp;contents.begin(); i !=3D contents.end(); ++i) {
DirectoryPrx dir =
=3D DirectoryPrx::checkedCast(*i);
FilePrx file =3D&=
nbsp;FilePrx::uncheckedCast(*i);
cout << ind=
ent << (*i)->name() << (dir ? "&nbs=
p;(directory):" : " (file):") << endl;
if (dir) {
lis=
tRecursive(dir, depth);
} else {
Lin=
es text =3D file->read();
for=
(Lines::const_iterator j =3D text.begin(); j !=3D=
text.end(); ++j) {
&nb=
sp; cout << indent << "\t"=
<< *j << endl;
}
}
}
}
The function is passed a proxy to a directory to list, and an indent lev=
el. (The indent level increments with each recursive call and allows the co=
de to print the name of each node at an indent level that corresponds to th=
e depth of the tree at that node.) listRecursive
calls the lis=
t operation on the directory and iterates over the returned sequence of nod=
es:
- The code does a
checkedCast
to narrow the Node
proxy to a Directory
proxy, as well as an uncheckedCas=
t
to narrow the Node
proxy to a File
proxy=
. Exactly one of those casts will succeed, so there is no need to call checkedCast twice: if the Node
is-a Di=
rectory
, the code uses the DirectoryPrx
returned by the=
checkedCast
; if the checkedCast
fails, we kn=
ow that the Node
is-a File
and, the=
refore, an uncheckedCast
is sufficient to get a FilePrx<=
/code>.
In general, if you know that a down-cast to a specific type will succeed, =
it is preferable to use an uncheckedCast
instead of a ch=
eckedCast
because an uncheckedCast
does not incur any n=
etwork traffic.
- The code prints the name of the file or directory and then, depending o=
n which cast succeeded, prints
"(directory)"
or "(file)"=
following the name.
- The code checks the type of the node:=20
- If it is a directory, the code recurses, incrementing the indent level.=
- If it is a file, the code calls the
read
operation on the =
file to retrieve the file contents and then iterates over the returned sequ=
ence of lines, printing each line.
Assume that we have a small file system consisting of two files and a di=
rectory as follows:
A small file system.
The output produced by the client for this file system is:
Contents of root directory:
README (file):
&nb=
sp; This file system contains a c=
ollection of poetry.
Coleridge (directory):
&nb=
sp; Kubla_Khan (file):
&nb=
sp; In&nbs=
p;Xanadu did Kubla Khan
&nb=
sp; A =
;stately pleasure-dome decree:
&nb=
sp; Where&=
nbsp;Alph, the sacred river, ran
&nb=
sp; Throug=
h caverns measureless to man
&nb=
sp; Down&n=
bsp;to a sunless sea.
Note that, so far, our client (and server) are not very sophisticated:=
p>
- The protocol and address information are hard-wired into the code.
- The client makes more remote procedure calls than strictly necessary; w=
ith minor redesign of the Slice definitions, many of these calls can be avo=
ided.
We will see how to address these shortcomings in our discussions of IceGrid and object life cycle.
See Also
------=_Part_24482_1342272100.1711621007334
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: file:///C:/42d1c41851731792bf0b017d55153c75
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
AAAASUVORK5CYII=
------=_Part_24482_1342272100.1711621007334
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: file:///C:/729a26385aa286cc9f3761815b827d09
/9j/4AAQSkZJRgABAQEAyADIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsK
CwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQU
FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAD1AgoDASIA
AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm
p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx
BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK
U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3
uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9R9W1
ey0HTbjUNSu4bGxt0Mk1xcOERFHck9K4r/hZOu6z8/hrwPqV/Zn7l/q08emwy+hVH3TY92iXrxmo
NIZfiN4svtYuwJtD0O+kstKtm5SS6hYpPdMO7LIHiT+75bsOXG3vfNoA4n/hZmsaL8/ifwTqWmWY
+/qGmTR6lbxepdY8TAd9wiIA5YrXcabqVprFhb31hcxXllcIJYbiBw8ciEZDKw4IPrTfNrz7Ubhf
hn4y027tgIvDXiC7NpfWy8Ja3r5MVwg/hErAo4H3neNuCXLAHplFFFABRXI+PPi14S+GMlhH4n1q
LSpL9ZXto3jd2kWLZ5jAIpOF8xMk/wB4VZsviT4Y1Sy8PXlhrdpqVl4gna20u6sX+0Q3UipJIwV0
yowsUmSSBlSOvFAHS0UUUAFFV11G0fUJLBbqFr6OJZ3thIPNWNiyq5XqFJRgD0JU+hqxQAUUUUAF
FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU
UUAFFFFAFLWdZsfD2mXGo6ndw2NjbrvluJ3Cog6ck+5AA7kgVxf/AAsjX9Z+fw54F1G8sz9y91i4
j02OUdisb7pgP9+Je2Aag0Jl+Inim9167Al0bRr2Wx0e2blGnhYxz3bDuwkV4k/uqjMP9Ycd75tA
HE/8LO1XRPn8U+DNS0ezH39RsJY9Rtoh6uI8SqO+7ytoHLFecdzYX9tqtjBeWVxFd2lwglhngcOk
iEZDKw4II7imebXn1xOvwx8a6c1uBF4Z8SXTW09svCWd+ys6TIP4Ul2srgceYUYDLuSAemVyXij4
veBPBGrx6V4j8a+HdA1SVFlSy1TVYLaZ0YkKwR3DEEggHHJBrra+K/jovjJ/jn8ck8I2Wj6ijfDr
SV1G21SOSSR7czanvFuikK8uzzNquQpbaDxmgD7SR1lRXRg6MMhlOQR6inV8veGriPxf4i8G/D/R
PHus6F4F034d6frOnXemzR299qYZngEskrRtxFFFGzKuBunBYEAAYPwt+JHjD43v8LvD2t+LNR0C
11LQNX1OfVtFMVrca3La36WsG1zGQoMJ+0MIsbt44CjFAH160iIyKzKrOcKCeWOM8fhXG6x8bPh3
4e8QSaFqvj3wxpmuRusT6ZeazbxXKuwBVTEzhgSGUgY5yPWvkOxstc+K3jn4Lz6x4818fZvEnifQ
bLXtKu4If7QtbNboQ3akRlPMkRPKdl4cISACcj03wJqXgy08R/tRx+O7nS4vDJ8TxvqMerOohNuN
GsNxYN1HHbnI45oA+kD4n0geJV8OnU7Ua81ob8ab5y/aDbBwhm2Zzs3kLuxjJxWnXw14G8aeNvCf
wv0bTrnVdRsrix+COo6tDFO372K4ikjFtMxPPmLFsGTz685r6m+CGlanZ+ANN1LWPEup+JtS1qCH
VJ5tRMQWB5YULRQJGihIgc7VO4jPLE80Ad/RRRQAUUUUAFFFFABRRRQB5f8AAtsfCrQg/wDr1Ey3
Hr54mkEuffzN9d5v964ONR8MvFN9Z3R8rw3rt613YXR4jtryZszW7n+HzJCZEY8M0jpwdgbsvNoA
tb/evPfjy4Pw2nA/1x1LTBB/11+32/l/+Pba7jza831C4/4Wl4w0y108+f4e0S6NxNdLzHd3qgqk
aH+JIiWZmHG8IoJKuAAeu6c5ksLdm6mMZ/KvCRo3xBHxW8/zPiZ/YX9seZ/yEvD39l/Z/Ozjy/L+
0+Rt42583bxndzXvkMQhiSNfuooUfhT6APC/i/428PeAf2h/hdqnibXdN8Pab/YPiGIXeqXcdtEX
MmmEIGcgFiAcDqcGvO/h1rd5P8V9I1rQftukeCPF3xG1C4sbcCW3j1GBPD0olnMbBcxy3cEsq5BD
FVkHUGvriigD4Y0e+8VaR+yz8PfFcvi7XLy98Sazbx+JdW13xJe2tta2I+07FM8e42MZlS2jaaNV
dt+GfDZGrp3iu9sIvB1n4v8AiZZP8NNQ8QasbnXNA8YXMkFpttYntLCbWMxSn9412wDOCdsaFjtw
ftKmCJFiEQRRGF2hAOMemPSgD5RtF8M6J8fJtW0bxJqupavqfgGzuPC/9o+Ir149Zmha9XasbTCO
4OwwuUIOS5lxuZnPIeFvHkk2k+B7nwp4/wBd8Q+Lbzw1qdx44sJdamvfsEi6c8nmS27uVsJY70RR
osaRnDOuCAcfcFNVFQsVUAscsQOpxjJ/AD8qAPj+21/VfgH8EvhN8XNS8S+K/Etj/ZsLeLodS1Ke
8+1C9tEMcyxO+yNkult41CIMLNJnJLE/RvwY0LXvDvwt8OWfiq/uNS8TG1Fxqk9zMZWF1KxlljVi
T8iO7IgHARFAwABWh4+8AaZ8SNHtdK1hp20+G/tdQe3hcKtw1vMs0ccgIO6PeiErxnaOa6WgAooo
oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig
AooooA8v+BDY+EPhcP8A69bTbcevnhiJc+/mb67zf71wNuU+F/ia8029cQeHdbvnutMu2OI4Lud9
01q56KXlZpIyfvGRk4Kru7TzaALW/wB688+PDBvAUCqf9IOuaN5AHXzP7StiPw6k+wPbNdz5tecX
Mx+KfjPS1sWEvhzQ7h5/tK8peXoVowEP8UcQaQk9DIVwcxmgD16wcy2Nu7feaNSfyqCLQ9Ot9YuN
Wi0+1j1W5iS3nvkhUTyxoWKIz43Mql3IBOBuOOpq5HGIo1ReFUACnUAcZrPwW+H3iHRNL0bU/A3h
zUNI0rP2CwudKgeC0BILCJCmEBIGQoAOOc1b8UfC7wb430ay0jxB4U0XW9Lsdv2Szv7CKaK3wNo8
tWUhMKMfLjjjpXUUUAc1q3wz8Ia/oFhoWp+FdF1DRNPZHs9NudPiktrZkGEMcZXamASBgDgkd6p6
j8GvAGr+JW8RX/gbw3e+IGdZW1a40i3kuy6gBWMpQtkAAA54AFdjRQBl6h4W0XVrqe5vtIsL25ns
30+Wa4tkkeS1c5eBiRkxseSh+U9xV+0tILC1htraGO3toUWOKGJQqRqBgKoHAAAAAFS0UAFFFFAB
RRRQAUUUUAFFFFAFbUtNtNZ0+4sb+1hvbK5jMU1tcRh45EIwVZTwQR2NebXPwZ1HSCR4T8aaxodn
/Dp1wYr23T0CeejuijoFVwAOABgY9SooA8kHwW1bWz5fifxhqmu2Z+9Y7o7S2cdw6wRozj1V3Kkc
Edc+k6HoFn4fs4razhSGKNBGixoFVFAwFUDgADoBWlRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
RRXD+OdRutf1OHwZpE8lvc3cQn1S9gYq9jYklTtYfdllKsiHqMSOP9XggGcumWnxj1ue51K1h1Dw
Xpry21paXCB4dSucGOW4ZTw0aZeNM8FvMfkCNqq3Pwb1TSSV8K+NtZ0az6rp90Yr6FPQK06PIq9t
ocADgY4x6Vp2nWukafbWNlBHa2dtEsMMEShUjRQAqqB0AAAxVmgDyT/hSmp62fL8U+LdT8QWZ+9Y
u0dtbOPR44I0Mg9VdmU+lafw2sk8A67feCJc+THEb7RZn/5aWW4B4B7wOyrjtHJD1Oa9Irk/iN4c
vNZ0m3v9HCDxHo8327TS7bVkkAIeBz2SVC8ZPONwYcqMAHWUVl+F/Edn4u8P2OsWBf7LdxiRVlXb
JGejI6/wurAqynkFSO1alABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB4r+1P+1b4P8A2UPA
Ta94kkN5qVzuj0zRYHCz30oHQHnagyNzkHAPQnAP5M/E/wD4K3fHHxrqsz6Be2Hg7S9zeVaWFqsj
hTwu6RwWLAdxgZ5wOK8y/b9+NV/8bf2nvF9/cTs+m6XcvpWmxZ+WO3iYqMDsWOWPuxr50oA+3/hV
/wAFc/jZ4K1iF/E1zY+NNI3DzbS8tkhk29DsljAIP1yMjp1r9bv2af2m/Bv7UvgBPEvhO5dZISsO
oaZcDE9jMVzsb+8PRxwcHoQQP5sq+of+Ccfxs1H4OftP+GUgnddL8QSjSb6DPySLIcKSP9ltpz7U
Af0D0U2NxLGrqcqwBB9qdQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA
FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU2SRYkZ3YIiglmY4AHqaAMXxl4qi8Ia
G96YHvbuR1t7KxiIEl3cOcRxLnpk9SeFUMxwFJFfwN4Vl8M6ZNJfzpe67qMxu9TvEBCyzEAYTPIj
RQsaA9FRc5OScXwfG3j3XV8aXSn+y4kaHw/A4x+5YYe8I/vSjhPSIAjBlcV31ABRRRQAUUUUAef2
3/Fv/iG9qfk0DxTM00H9221IKWkT2EyKXHbfHJ3kGfQKxfGPheDxl4cvNKnle2MoV4bqLHmW0yMH
imTP8SOquM8ZUZ4qn8PvFE/ifQW/tCJLbXNPmaw1S2jztiuUA3Fc87HVkkQnkpIhPWgDpqKKKACi
iigAooooAKKKKACiiigAooooAKKKKAP5rP2qfA178OP2iPH+gX8TRy22rzlC38cbOWRx7FSCPrXl
VfuH/wAFF/2AT+0tYp428FiG3+IOnweVJbyHYmqQqPlQt0Ei9FJ4I4JGBX4xeNPhj4s+Hes3GleJ
PD2o6PfwMVkhurdkII+o5oA5mvaf2M/BV548/aZ8AadZxPII9Sju5yoJ2RRne7H2AFcD4E+FPi74
ma5b6R4Z8PX+r385+SOCEkY9SegFfst/wT6/YPj/AGd9Km8QeIzDe+NNRjCTyxjKWURAJgQ5IY5H
Lj6dKAPt3TFKadbBuvlr/KuX+I/xi8G/COGwl8Ya9b6FHfM62z3CuRIUwWA2qem4dfWuxAAAA4Ar
mPG/gX/hNls1/wCEh17Qfsxc50S9+zGXdj7/AMp3Y28emT60AYuufGDSrr4IeI/iH4RvLXXrGx0m
+1C0l+YRTPbxyHa3Rsb4yD0NcR4S+L/iK88EafrmreMPBF5LqN7ottFBo+nXD/ZmvLmONopQLqQ7
2DlUY7VVgS2QCB3nin4bXOpfBfxN4Js9Xu7+71PSL7T4dR1u4M0m+eORVMjhclVLjoMgDvXOX/wH
hX4ceEtB0i10jStR0zU9Bv7+4t7cRLdfYbqGaTlVBYkRybSw6tzjJNAFHwP+0BGth4hk8USS3F6v
jPVPD2k2GkafLc3M8dvI20CKJWY7Y0ZncgKO5GQD6n4L8ZaV8QPDVpruiTvcadcmRVaWF4ZEeN2j
kR43AZHR0dWVgCCpBr521/8AZM1S+vYtXP8AY2u3tp4r1vWotKv7u4tLa5tNQZWMbzxIzxSoY0II
R1OCMc5Hu3wp8HL4E8D2Okf2TpmiSpJNNLZ6RNJNbo8kryEiSUB3J3ZLMBkk8AYFAHXUUUUAFFFF
ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA
FcB4tY/EDxA/g23JOj2ypN4gmXo6MMx2WfWUfNIO0WAR++Uja8deKZvDmnW8GnQpea/qUv2TTLSQ
na8pBJd8ciNFBdz/AHVwMsVBteDvC0Pg/Q4rCOZ7u4Zmnu72YDzLqdzmSV8d2PYcAYUYAAoA2lUI
oVQFUDAA6CloooAKKKKACiiigArz/wAX/wDFC+LrTxhH8mlXoj03XFHRFLYt7o/9c3co5/uS7icR
CvQKralp1rrGnXVhewJdWd1E8E8EoykkbAqykdwQSKALNFcP8NtRutPN/wCD9Vne41TQtghuZjl7
yxfP2ecnu2FaNz3eJ2wAy13FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABWJ4i8FaD4tjCazpFlq
ajIAuoFkxnr1BrbooA57RPAHh/w5EYtM0q2sIjjMdtEsSnHThQBW+iLGoVVCqOgAwKdRQAUUUUAF
FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU
UUAFFFFABRRRQAVV1TU7TRdNutQv7iO0srWJp555WwkcaglmJ7AAE1arz/UP+Lk+LTpi/P4X0K4V
79v4b69XDJb+6RHa79i+xc/JItAFnwLpl3rWoz+MtYt5La/vovJ0+ynXD2FjkMqMP4ZZCFkk9CEQ
58oE9vRRQAUUUUAFFFFABRRRQAUUUUAcR8SdNurL7B4u0mB7jVdC3tJbwjL3lk+PtEAHdsKsiDu8
SDoTXW6ZqVrrOm2uoWM6XVldRJPBPGcrJGwDKwPoQQatV5/4S/4oTxhd+EZPk0m/83UtDY/dTLZu
bQemx3EiD+5IVAxEaAPQKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiqGv67YeF9C1LWdVuVstL062kvLu5c
ErFDGpd3OOcBQTx6V5t8NvjB4s8f6hpN3P8ADDUtD8IaxD9osdaudTtXnSMxmSN7m1Vt0QdQAArO
wZlDBeSAD1iiua8PfE3wf4t1q80fQ/Feh61q9kGa60/T9RhnuIAGCkvGjFlAYgHIHJAri/h7+0P4
d1r4O+FPHPjHWNE8ErrsRZI9T1KO3iLhmBRHlK7jhc460Aes0Vzmt/Ejwl4Ztba51jxToulW11EJ
4Jr7UIYUljLKodCzAMpLoARxl1HcVlWPxW0q10zxHqXia+0Xwxpuj6vLphvLnWrd4WChCrSvkCF2
3/6pzuHGeooA7iivM/B/x38O+ItP8a6xe6rpGleGvD2srpkety6lH9kuY2tLW4WbzSQgBNztGCR8
o55rbtPjL8P7/wAN3niK28c+Grjw/ZyiC51WLV7drWCQ4wjyh9qsdy8E55HrQB2NFZ+g+INL8VaR
baroupWesaXcqWgvrCdJ4JQCQSroSrDII4PUGtCgArF8U+K7LwnYxzXKzXNxPJ5NpY2qh7i7lIJE
cakgE4BJJIVQCzFVBI2q828CS/8ACW+Idd8XXH7xBdz6TpStyILWCQxSsvvLNHIxYdUWEc7QaAJ/
L+JHiH999u0PwfbtytoLV9TuQP8Abk8yONWx1VVcZ6MQOTy/iR4e/ffbtD8YWy8taG0fTLojvsk8
ySNjjorKgz1YA/L2nm0ebQBw2qfEz/hJLK30bwyZLTxVqEj27215EBNpCoFM006ZI/dh028lZGki
wSjbq7Xw34esvCmh2ek6fGyWlsm1S7Fnckks7seWdmJZmPLMxJ5NcB8R5B4M13RvHNqgR4riDStW
Cj/j4sppRGhb3ilkVweymUfxGvT0YOoZTlSMg0AOooooAKKKKACiiigAooooAKKKKACvJ/2mvG/h
j4bfCy78U+JNetfDkmkSreaVfXByxvUVikSKPmfzF8yNkXkxvJ0GSPWK/C//AIKr/tDaj8Vf2iNR
8HwXkg8M+EHNhFaK52NdD/XyMOm7d8oPoooA9d+Kf/BazxNc6q0PgDwXpthpqEj7RrDvPNJxwQFK
hR14IJ6VV+GX/BazxhY6pBF468GaXqulllWSfSWe3uFHRmAYsp9cYHpkV+alFAH9M3wN+PHg79oj
wHaeLPBepi+0+XCzQSYWe0lxkxSpk7WH4g9QSOa9Cr+fr/gnX+0RqfwG/aJ0KJbpx4c8QzJpup2r
ORGyucJKR03ITkHr1Hc1/QHHIssaupyrAEH2oAdRXwJp/wASPEV94/8AE9tYeIvGQ8at8VZ9F0aW
6vLhfDcdlHPGz2s/mMLcnyBcbY48zE7Nor0yC/m8VftQ/E/RNXuPiHeWNjqekW2nr4c1S8t9PsEl
sLd384QzIqguxcnB4LGgD6vor5A/aQ+N2oeFPi/Nrlj4wbR/D3wxjsLjWtCjuVQ6yb2UC6Roiw83
7PZ7Zl9GlBAyAR2vivSp/iT+1Pe+HJfFXiPTNCh8C2mpW0Xh/W57JBcSX1zGZsRMFclFT7wYfKOC
KAPoqivgr4geP/irrvhXw14T0LxneL4u0b4kar4cg1e1dYn1dLPTbm7tI7pVwrbiIY5RjaxViR2r
ov2l/wBoXVPiD8HvD998OdbvfD5m0AeM9UurKZorm2ttywQ2rOuNrPcSOGHBxaSj1FAH2nRXyj4j
1SfxD+1B8QNC1Wf4hXul2Fjov2C28Iald29vZtMtwZXmEMqAbiqHJB+43pX1YiCNFUZIUYG4kn8S
eTQA6iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDif
jb8P5Piv8HfG3gyC5Wzn1/RrvTYrhyQsbyxMis2ATtBIzgE4zXnWmeNPG/j74cy+CZvh/wCIvCXi
u60S60671a5MC6dp9yLV0WWOZZi0qtLsCeWrNg5OACa97ooA+S/hz4b1nXdd+AujWHw51fwKvw7h
lGtXl/aRRWyL/Zz27WltKGJuFlmkR96ZUiEsxDYFcR4N+FHjvwHZfC/XNStfGGnafZeEJ9CuYPCt
hY3t9Y3b3plIkt7qGX93LGVBeNcgwgMQrV910UAfN/wz+Cdt4e8c/Csr4f1Sbw7oHhHVoLabxNFb
yXVlczXlm0aP5Q8tJPKM6qEAwgK9iK5K68AeKPDXjObxdeeFdS1zQdJ+J2o67NpFnbrPcT28ulpb
217DEWHmGKY8bcuMsyj5a+vaKAPhrWtH8SaJaQXGmeCLrwzrGtfF865omhS2ltPJLENE3GYwm4ih
bLRyO6meMo28h96DL7bwprGr6JoV3pD+ME1Pwd4+1LU/GFjYabp41CG9u7SSRZrW2d7q2eNDdxkB
XlcLIxB3g4+xPGfgPw58RdIXS/FGhaf4g05JVuEttRt1mRJFyFdQwOGALDI5wSO5qTwj4K8P+ANH
GleGtFsNB00O0v2XTrdYYy7feYhQMscDJPJxQBwf7OvhO28M+FtduYIvFMcmt61Pq1wfF1va293J
NJHErusNsiJGjGPOCisWLsR8wJ9WoooAK8u+CrfZfAi6fJxdadqF/ZXCnqHS7lGT/vDDg9wwPevU
a858TaZdeBvEN94m061mvtG1HY2sWNqheWGVFCi7iQcv8gVZEGWIjQqCVIYA7DzKPMrF0LxLpnif
To7/AEnULfUrN+FntpQ657gkHgjuDyKNd8S6Z4Y06S/1bULfTbNOGnuZQi57AEnknsByaAOY+PEo
l+Gl9ZLzcajc2ljAo6mSW5jUEfTJb2Ck9q9M0rP9m227rsFeVaTZ3nxQ8U2Gs3FrPZaDppaTTba5
QpLNKylTdSIeUwjMsaHDAO7MASAvryII0VVGFUYAoAdRRRQAUUUUAFFFFABRRRQAUUUUAFfzifts
eHL7wt+1b8T7K/R1mbXLidGfq8buWRvxUg1/R3X5+f8ABTX9gy/+O9snxH8BWqz+M9PtxFf6auFO
o26AkMnHzSrwoBPKgDqOQD8WqKtappN7ol9NZahaTWV3CxSSCdCjqwOCCDUdlY3OpXUdtaQSXNxI
QqRRIWZj6ACgDs/gZ4fvPFXxj8GaTYK73d3qtvHGE65Mgr+mLRc/2XbZ67f61+Yf/BNP9gzWPBes
W/xL8d2TWOrtERpWlTL89sjDDTyg/dbBwq9RnPHFfqPHGsUaoowqgAfSgDyCb9mTw/N4N8aeH11T
VIf+El8SyeLP7QiaMXGn35lilR7c7MAI8KYyCSCwJINSXvwG1KH4jeKPF3h34i6/4Wl8STWs+oWF
nZ6fPC7QQJAm0z28jrlIxnDdSfbHrtFAHmOnfs5+B4rPxZDqmkW/iKbxNqF5qF/darBHLN/pHy+U
j7cqiRhUUDkBQc55rnLX9mGXRtY8P6noXxG8TaDfaX4atPCslxbQ2Ez3dpbu7oXM9vIBJmQ5ZQOg
98+40UAeU6d+zh4Y0iDwFFZ3GoofCOsz69HPNOJZ9RvJ4LiKaW6kZS0jObl3JGDkADCjFY0X7I3g
208L/EvQ7W41G2t/Hl411eypIhe1UyNKIIAV2pEsskzhcHHnNz0r2+igDyTXvgPqFz8Sdf8AGfhz
4ia/4PvtdtrO2v7axtLC4hkFsJBEw+0W8jKcSvnB5r1lFKIqli5AwWbGT7nHFOooAKKKKACiiigA
ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
iigAooooAKKKKAPFf2iPhh4ZHw08eeLbfSobDxLZaHfXkWqWI8i482O3d0ZnTBbDAEZJrptC+A/g
/QNSj1CDTI5b+P7l5c5nuE9cSyFmGe+DzUn7Qv8AyQL4l/8AYs6n/wCkslegUARW9tFaRiOJAi+g
qWiigAooooAKKKKACiiigAooooAKKKKACiiigDzT4kfs3fDT4tTtceKfBuk6peNnddS2yiVsjHLj
DHj3rO8B/sqfDH4aXS3HhzwjpelzqQVnhtVMqkdMO2WHXsa9cooAhtbSGzj2QoEXvjqfrU1FFABR
RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF
FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAef/ALQv/JAviX/2LOp/+kslegV5/wDt
C/8AJAviX/2LOp/+kslegUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF
FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB5/+0L/AMkC+Jf/AGLOp/8ApLJXoFef/tC/
8kC+Jf8A2LOp/wDpLJXoFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA
UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR
RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAef/ALQv/JAviX/2LOp/+kslegV5/wDtC/8A
JAviX/2LOp/+kslegUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR
QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA
BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB5/+0L/AMkC+Jf/AGLOp/8ApLJXoFef/tC/8kC+
Jf8A2LOp/wDpLJXoFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA
UUUUAFFeb/8ADQXg02yut5cSXEviSbwpBZR2zNcXGoQyMkqRoOWVQjuz/dCKzEgCvSKACiub8JeO
bLxjqXiqytIJ4ZPDuq/2RctMFAkl+zQXG5ME/LtuEHODkHjpmLw38Q9P8UeM/F/hq2guY77wxNbQ
3ckqqI5DPAs6GMhiThWwcgcjjNAHU0UV5zrv7QHgvw1c+O4NS1CW2k8FpaPqw+zuxzdJvt44gATK
78KEQEliFAyaAPRqK5Tw78RLLxJ4w1fw5FZ3trfaZpthqU5uowg2XZuAiYySHX7M+4EDGRjPOOro
AKKKKACsrxT4q0jwT4fvtd17UbfSdIsYjNc3l04SOJB3J/p1J4Fatfif/wAFYv2pdR+Jfxgufhnp
V40fhPwrN5c8MZwLi/AIkdvXZlkA/wB49zQB9A/tH/8ABXT4b6n4b8U+DPCfh7VfEdtqun3WltrD
SLbRJ5sTR+YiMCzgbsgHYT7Vu/C3/gs/8O/FGqwWPjHwrqfg+OQqn2+KdbyFSerOAqsqj23H2r8a
aKAP6k/C3irR/G/h6x13QNSt9X0e+jE1teWrh45FPcEfkR1BBB5rVr8R/wDglR+1XqPwq+Llt8Od
Uu3m8I+KZhHFA5yLa9IASRc9N2ApHfj0FftuDkZHIoAWiiigAooooAKKKKACiiigAooooAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK
KKACiiigAooooAKKKKACiiigD4Y+DyT/AAr+MPir4i67bSal4T1Hxtr3h17qZT/xTU0uosyXKj7o
guGMcUkhG5WWE7thYBnxL8eaf4e8IfG/wTe3dzD4uvviBaX9npYglaZ7KSbTXW4GFwISEkG/IXcC
udxCn7qooA+Afi9b+EbfV/j2S1+nxguPEEbeCo43uhK139gsRbtZBfl3+cuJSnOxV8z5cV2XxF1u
Hw34s+Nsmu6Ha6vY3/iDw3Z3MmoXE1tpVqH0+IG5vGTk2yOACrZUlkDYHI+zKKAPl/8AZti8TTeC
vHNl4E1TQrKys/GMy2Bv9Mu5dPWyextJStpEZ43SMyyu6kMUIYlRtKmvLfEeiazoH7WfxQ+JV1Zy
+I9F8F3Og32r6Fb27lJ0bTHjbULaPLF57X5nRCW+R5cEPsavvKigD5K+IHw98L/Fr4kfFzxFeRS6
taweAtJu9IuYbqVYQ7jU5I7iNVYKZV2oUkxuUMcEbjnyv4w+NbPxP8OYf+EgsbKHxrafDSw1aw1z
V3vJNVv717V5c6ZFCRseOVN0ki87mXeuxc1+hNFAHyd49+Hmm/Evxx8V73xHb3V8+neBNJurEefJ
HHDdMupMZ0RSF85Si7XxlcnGNxr334Kapf658GvAWo6pPLc6neaBYXF1PN9+SZ7eNnZvcsSTXaUU
AFfzTftQWV7p/wC0V8R7fUAwvY9duxLvGDu81q/pZr8mP+CsP7FmsHxNc/Gfwdp73+m3SKNftLWM
s9vIowLnA6owA3Hs3J60Afl9RQRg4PBoAycDk0Aeifs62d3qHx28BW9gGa8k1m2EQUZOfMHav6Wt
LYvp1sW67BX5E/8ABLj9jLWbzxVafFbxXp8ljY26n+w7W4Qq8zkYNwR2RRnGep6dK/X2KJYYkjX7
qAKPwoAfRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
RRRQAUUUUAFFFFABTJoY7mF4pY1likUq6OMqwPBBB6iiigD5S+Ln/BNT4F/ErUZ9Xl8NNoN5KxeZ
tFl+zq7Hvs5VfwArN+FP/BOD4I/D7WYb218OHV72Jg8U2tSfaQhA/ucKencGiigD610zSLbSIFit
4wigBemOB0A9B7VdoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii
igAooooA/9k=
------=_Part_24482_1342272100.1711621007334
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Location: file:///C:/636ffb57184d35b4dd4630b7850f79ec
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
------=_Part_24482_1342272100.1711621007334--