Home » Modeling » GMF (Graphical Modeling Framework) » List of items based on internal list? 
| List of items based on internal list? [message #14865] | 
Thu, 10 August 2006 20:49   | 
 
Eclipse User  | 
 | 
 | 
   | 
 
Originally posted by: tansey.vt.edu 
 
Hi, 
 
I'm new to the GMF project (and Eclipse plugins in general) and have  
been going over it for the last few weeks.  I am working on a program  
visualization tool for a specialized domain.  I want the user to be able  
to first create their classes (nodes which contain a list of fields,  
these are simple classes with no methods) then be able to create their  
objects from those classes (nodes which contain a reference to the  
object's class).  When the user creates an object node, I want to list  
all of the fields in the member Class so that they can fill in their  
values.  I'm not sure how I can specify that in the XML document for the  
ECore file (or if I can). 
 
So far what I have for that portion is: 
> <xsd:complexType name="SpecialClass"> 
>     <xsd:attribute ecore:reference="special:FieldDeclaration" name="fieldDeclarations"> 
>       <xsd:simpleType> 
>         <xsd:list itemType="xsd:anyURI"/> 
>       </xsd:simpleType> 
>     </xsd:attribute> 
>     <xsd:attribute name="name" type="xsd:string"/> 
>   </xsd:complexType> 
>  
>   <xsd:complexType name="SpecialObject"> 
>     <xsd:attribute name="name" type="xsd:string"/> 
>     <xsd:attribute ecore:reference="special:SpecialClass" name="specialClass" type="xsd:anyURI"/> 
>     <xsd:attribute ecore:reference="special:FieldDefinition" name="fieldDefinitions"> 
>       <xsd:simpleType> 
>         <xsd:list itemType="xsd:anyURI"/> 
>       </xsd:simpleType> 
>   </xsd:complexType> 
>  
>   <xsd:complexType name="FieldDefinition"> 
>     <xsd:attribute ecore:reference="special:FieldDeclaration" name="field" type="xsd:anyURI"/> 
>     <xsd:attribute name="value" type="xsd:string"/> 
>   </xsd:complexType> 
>  
>   <xsd:complexType name="FieldDeclaration"> 
>     <xsd:attribute name="type" type="xsd:string"/> 
>     <xsd:attribute name="name" type="xsd:string"/> 
>   </xsd:complexType> 
 
What I want to do is have the user first create a node, say MyClass, and  
add a FieldDeclaration to it, say of type String and named myString.  
Then the user creates an object node, chooses MyClass as its  
specialClass; then my user should be able to see its field myString and  
be able to set its value. 
 
Any help or hints would be great! 
 
Thanks, 
Wesley
 |  
 |  
  |  
| Re: List of items based on internal list? [message #15843 is a reply to message #14865] | 
Fri, 11 August 2006 07:51    | 
 
Eclipse User  | 
 | 
 | 
   | 
 
Originally posted by: merks.ca.ibm.com 
 
This is a multi-part message in MIME format. 
--------------020907030309060200050609 
Content-Type: text/plain; charset=ISO-8859-1; format=flowed 
Content-Transfer-Encoding: 7bit 
 
Wesley, 
 
You've not really described how graphically this should look, but bot  
the EMF or GMF editor generated for the schema below will do all the  
instance editing things you've described.  Following the tutorial's  
steps but with your own schema as the starting point should help  
illustrate that: 
 
     http://www.eclipse.org/emf/docs.php?doc=tutorials/xlibmod/xl ibmod.html 
    http://wiki.eclipse.org/index.php/GMF_Tutorial 
 
It also sounds like your users are both creating a meta model (Ecore,  
XML Schema, or something) as well as generating the instance.  The steps  
you describe are possible in the Ecore editor directly.  I.e., you can  
create an EClass, add EStructuralFeatures, and then you can right click  
on the EClass and say "Create Dynamic Instance" which will open an  
editor for editing the instance based on your dynamic model.  Try it  
with an Ecore model you create when following the tutorials... 
 
 
Wesley Tansey wrote: 
> Hi, 
> 
> I'm new to the GMF project (and Eclipse plugins in general) and have  
> been going over it for the last few weeks.  I am working on a program  
> visualization tool for a specialized domain.  I want the user to be  
> able to first create their classes (nodes which contain a list of  
> fields, these are simple classes with no methods) then be able to  
> create their objects from those classes (nodes which contain a  
> reference to the object's class).  When the user creates an object  
> node, I want to list all of the fields in the member Class so that  
> they can fill in their values.  I'm not sure how I can specify that in  
> the XML document for the ECore file (or if I can). 
> 
> So far what I have for that portion is: 
>> <xsd:complexType name="SpecialClass"> 
>>     <xsd:attribute ecore:reference="special:FieldDeclaration"  
>> name="fieldDeclarations"> 
>>       <xsd:simpleType> 
>>         <xsd:list itemType="xsd:anyURI"/> 
>>       </xsd:simpleType> 
>>     </xsd:attribute> 
>>     <xsd:attribute name="name" type="xsd:string"/> 
>>   </xsd:complexType> 
>> 
>>   <xsd:complexType name="SpecialObject"> 
>>     <xsd:attribute name="name" type="xsd:string"/> 
>>     <xsd:attribute ecore:reference="special:SpecialClass"  
>> name="specialClass" type="xsd:anyURI"/> 
>>     <xsd:attribute ecore:reference="special:FieldDefinition"  
>> name="fieldDefinitions"> 
>>       <xsd:simpleType> 
>>         <xsd:list itemType="xsd:anyURI"/> 
>>       </xsd:simpleType> 
>>   </xsd:complexType> 
>> 
>>   <xsd:complexType name="FieldDefinition"> 
>>     <xsd:attribute ecore:reference="special:FieldDeclaration"  
>> name="field" type="xsd:anyURI"/> 
>>     <xsd:attribute name="value" type="xsd:string"/> 
>>   </xsd:complexType> 
>> 
>>   <xsd:complexType name="FieldDeclaration"> 
>>     <xsd:attribute name="type" type="xsd:string"/> 
>>     <xsd:attribute name="name" type="xsd:string"/> 
>>   </xsd:complexType> 
> 
> What I want to do is have the user first create a node, say MyClass,  
> and add a FieldDeclaration to it, say of type String and named  
> myString. Then the user creates an object node, chooses MyClass as its  
> specialClass; then my user should be able to see its field myString  
> and be able to set its value. 
> 
> Any help or hints would be great! 
> 
> Thanks, 
> Wesley 
 
 
--------------020907030309060200050609 
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"> 
Wesley,<br> 
<br> 
You've not really described how graphically this should look, but bot 
the EMF or GMF editor generated for the schema below will do all the 
instance editing things you've described.  Following the tutorial's 
steps but with your own schema as the starting point should help 
illustrate that:<br> 
<blockquote><a 
 href=" http://www.eclipse.org/emf/docs.php?doc=tutorials/xlibmod/xl ibmod.html"> http://www.eclipse.org/emf/docs.php?doc=tutorials/xlibmod/xl ibmod.html</a><br> 
  <a href="http://wiki.eclipse.org/index.php/GMF_Tutorial">http://wiki.eclipse.org/index.php/GMF_Tutorial</a><br> 
</blockquote> 
It also sounds like your users are both creating a meta model (Ecore, 
XML Schema, or something) as well as generating the instance.  The 
steps you describe are possible in the Ecore editor directly.  I.e., 
you can create an EClass, add EStructuralFeatures, and then you can 
right click on the EClass and say "Create Dynamic Instance" which will 
open an editor for editing the instance based on your dynamic model.  
Try it with an Ecore model you create when following the tutorials...<br> 
<br> 
<br> 
Wesley Tansey wrote: 
<blockquote cite="midebgk5t$k5n$1@utils.eclipse.org" type="cite">Hi, 
  <br> 
  <br> 
I'm new to the GMF project (and Eclipse plugins in general) and have 
been going over it for the last few weeks.  I am working on a program 
visualization tool for a specialized domain.  I want the user to be 
able to first create their classes (nodes which contain a list of 
fields, these are simple classes with no methods) then be able to 
create their objects from those classes (nodes which contain a 
reference to the object's class).  When the user creates an object 
node, I want to list all of the fields in the member Class so that they 
can fill in their values.  I'm not sure how I can specify that in the 
XML document for the ECore file (or if I can). 
  <br> 
  <br> 
So far what I have for that portion is: 
  <br> 
  <blockquote type="cite"><xsd:complexType name="SpecialClass"> 
    <br> 
    <xsd:attribute ecore:reference="special:FieldDeclaration" 
name="fieldDeclarations"> 
    <br> 
      <xsd:simpleType> 
    <br> 
          <xsd:list itemType="xsd:anyURI"/> 
    <br> 
      </xsd:simpleType> 
    <br> 
    </xsd:attribute> 
    <br> 
    <xsd:attribute name="name" type="xsd:string"/> 
    <br> 
  </xsd:complexType> 
    <br> 
    <br> 
  <xsd:complexType name="SpecialObject"> 
    <br> 
    <xsd:attribute name="name" type="xsd:string"/> 
    <br> 
    <xsd:attribute ecore:reference="special:SpecialClass" 
name="specialClass" type="xsd:anyURI"/> 
    <br> 
    <xsd:attribute ecore:reference="special:FieldDefinition" 
name="fieldDefinitions"> 
    <br> 
      <xsd:simpleType> 
    <br> 
          <xsd:list itemType="xsd:anyURI"/> 
    <br> 
      </xsd:simpleType> 
    <br> 
  </xsd:complexType> 
    <br> 
    <br> 
  <xsd:complexType name="FieldDefinition"> 
    <br> 
    <xsd:attribute ecore:reference="special:FieldDeclaration" 
name="field" type="xsd:anyURI"/> 
    <br> 
    <xsd:attribute name="value" type="xsd:string"/> 
    <br> 
  </xsd:complexType> 
    <br> 
    <br> 
  <xsd:complexType name="FieldDeclaration"> 
    <br> 
    <xsd:attribute name="type" type="xsd:string"/> 
    <br> 
    <xsd:attribute name="name" type="xsd:string"/> 
    <br> 
  </xsd:complexType> 
    <br> 
  </blockquote> 
  <br> 
What I want to do is have the user first create a node, say MyClass, 
and add a FieldDeclaration to it, say of type String and named 
myString. Then the user creates an object node, chooses MyClass as its 
specialClass; then my user should be able to see its field myString and 
be able to set its value. 
  <br> 
  <br> 
Any help or hints would be great! 
  <br> 
  <br> 
Thanks, 
  <br> 
Wesley 
  <br> 
</blockquote> 
<br> 
</body> 
</html> 
 
--------------020907030309060200050609--
 |  
 |  
  |  
| Re: List of items based on internal list? [message #16091 is a reply to message #15843] | 
Fri, 11 August 2006 19:53    | 
 
Eclipse User  | 
 | 
 | 
   | 
 
Originally posted by: tansey.vt.edu 
 
Ed, 
 
What I am trying to do is a little different than what you are  
suggesting I think.  I want to have 3 editors, one which allows users to  
create their SpecialClass and SpecialObject types, and another which  
allows them to draw control flow graphs using the SpecialObjects as part  
of the nodes.  Then the 3rd editor will take the graph from my 2nd  
editor and generate Java code (both the new classes and the new objects). 
 
I can almost use the EMF model creator.  Say for example I want to  
create two classes, A and B: 
 
Class A 
--------- 
int F1 
String F2 
double F3 
 
Class B 
--------- 
String F1 
 
Now I want to have 2 different objects, Obj1 and Obj2, with different  
values for these fields: 
 
Obj1 (type = A) 
----- 
int F1 = 1 
String F2 = "obj1" 
double F3 = .5 
 
Obj2 (type = B) 
----- 
String F4 = "obj2" 
 
If I were to create this as an EMF model, I would have my SpecialClass  
and SpecialObject.  The user would create a SpecialClass with the name A  
and then create child FieldDeclarations for it.  They follow the same  
process to create SpecialClass B.  Now, when my user goes to create  
Obj1, they choose A as their SpecialClass.  However, if they go to  
create child FieldDefinitions for Obj1, the list of available  
FieldDeclarations will be F1, F2, F3, and F4.  I would like instead for  
them instead to automatically have the list of FieldDeclarations  
available to them to be constrained to those contained in the parent  
SpecialClass. 
 
It's a small problem, but an important one, since I don't want users  
defining fields for their object that they don't actually have. 
 
 
 
Ed Merks wrote: 
> Wesley, 
>  
> You've not really described how graphically this should look, but bot  
> the EMF or GMF editor generated for the schema below will do all the  
> instance editing things you've described.  Following the tutorial's  
> steps but with your own schema as the starting point should help  
> illustrate that: 
>  
>      http://www.eclipse.org/emf/docs.php?doc=tutorials/xlibmod/xl ibmod.html 
>     http://wiki.eclipse.org/index.php/GMF_Tutorial 
>  
> It also sounds like your users are both creating a meta model (Ecore,  
> XML Schema, or something) as well as generating the instance.  The steps  
> you describe are possible in the Ecore editor directly.  I.e., you can  
> create an EClass, add EStructuralFeatures, and then you can right click  
> on the EClass and say "Create Dynamic Instance" which will open an  
> editor for editing the instance based on your dynamic model.  Try it  
> with an Ecore model you create when following the tutorials... 
>  
>  
> Wesley Tansey wrote: 
>> Hi, 
>> 
>> I'm new to the GMF project (and Eclipse plugins in general) and have  
>> been going over it for the last few weeks.  I am working on a program  
>> visualization tool for a specialized domain.  I want the user to be  
>> able to first create their classes (nodes which contain a list of  
>> fields, these are simple classes with no methods) then be able to  
>> create their objects from those classes (nodes which contain a  
>> reference to the object's class).  When the user creates an object  
>> node, I want to list all of the fields in the member Class so that  
>> they can fill in their values.  I'm not sure how I can specify that in  
>> the XML document for the ECore file (or if I can). 
>> 
>> So far what I have for that portion is: 
>>> <xsd:complexType name="SpecialClass"> 
>>>     <xsd:attribute ecore:reference="special:FieldDeclaration"  
>>> name="fieldDeclarations"> 
>>>       <xsd:simpleType> 
>>>         <xsd:list itemType="xsd:anyURI"/> 
>>>       </xsd:simpleType> 
>>>     </xsd:attribute> 
>>>     <xsd:attribute name="name" type="xsd:string"/> 
>>>   </xsd:complexType> 
>>> 
>>>   <xsd:complexType name="SpecialObject"> 
>>>     <xsd:attribute name="name" type="xsd:string"/> 
>>>     <xsd:attribute ecore:reference="special:SpecialClass"  
>>> name="specialClass" type="xsd:anyURI"/> 
>>>     <xsd:attribute ecore:reference="special:FieldDefinition"  
>>> name="fieldDefinitions"> 
>>>       <xsd:simpleType> 
>>>         <xsd:list itemType="xsd:anyURI"/> 
>>>       </xsd:simpleType> 
>>>   </xsd:complexType> 
>>> 
>>>   <xsd:complexType name="FieldDefinition"> 
>>>     <xsd:attribute ecore:reference="special:FieldDeclaration"  
>>> name="field" type="xsd:anyURI"/> 
>>>     <xsd:attribute name="value" type="xsd:string"/> 
>>>   </xsd:complexType> 
>>> 
>>>   <xsd:complexType name="FieldDeclaration"> 
>>>     <xsd:attribute name="type" type="xsd:string"/> 
>>>     <xsd:attribute name="name" type="xsd:string"/> 
>>>   </xsd:complexType> 
>> 
>> What I want to do is have the user first create a node, say MyClass,  
>> and add a FieldDeclaration to it, say of type String and named  
>> myString. Then the user creates an object node, chooses MyClass as its  
>> specialClass; then my user should be able to see its field myString  
>> and be able to set its value. 
>> 
>> Any help or hints would be great! 
>> 
>> Thanks, 
>> Wesley 
>
 |  
 |  
  |  
| Re: List of items based on internal list? [message #16112 is a reply to message #16091] | 
Sat, 12 August 2006 08:15    | 
 
Eclipse User  | 
 | 
 | 
   | 
 
Originally posted by: merks.ca.ibm.com 
 
This is a multi-part message in MIME format. 
--------------010601090501090505080408 
Content-Type: text/plain; charset=ISO-8859-1; format=flowed 
Content-Transfer-Encoding: 7bit 
 
Wesley, 
 
Is this screen capture an illustration of your scenario? 
 
 
When I create a dynamic instance of A and B, each has only the  
appropriate fields.  E.g., here B only has an F4 property only. 
 
 
Wesley Tansey wrote: 
> Ed, 
> 
> What I am trying to do is a little different than what you are  
> suggesting I think.  I want to have 3 editors, one which allows users  
> to create their SpecialClass and SpecialObject types, and another  
> which allows them to draw control flow graphs using the SpecialObjects  
> as part of the nodes.  Then the 3rd editor will take the graph from my  
> 2nd editor and generate Java code (both the new classes and the new  
> objects). 
> 
> I can almost use the EMF model creator.  Say for example I want to  
> create two classes, A and B: 
> 
> Class A 
> --------- 
> int F1 
> String F2 
> double F3 
> 
> Class B 
> --------- 
> String F1 
> 
> Now I want to have 2 different objects, Obj1 and Obj2, with different  
> values for these fields: 
> 
> Obj1 (type = A) 
> ----- 
> int F1 = 1 
> String F2 = "obj1" 
> double F3 = .5 
> 
> Obj2 (type = B) 
> ----- 
> String F4 = "obj2" 
> 
> If I were to create this as an EMF model, I would have my SpecialClass  
> and SpecialObject.  The user would create a SpecialClass with the name  
> A and then create child FieldDeclarations for it.  They follow the  
> same process to create SpecialClass B.  Now, when my user goes to  
> create Obj1, they choose A as their SpecialClass.  However, if they go  
> to create child FieldDefinitions for Obj1, the list of available  
> FieldDeclarations will be F1, F2, F3, and F4.  I would like instead  
> for them instead to automatically have the list of FieldDeclarations  
> available to them to be constrained to those contained in the parent  
> SpecialClass. 
> 
> It's a small problem, but an important one, since I don't want users  
> defining fields for their object that they don't actually have. 
> 
> 
> 
> Ed Merks wrote: 
>> Wesley, 
>> 
>> You've not really described how graphically this should look, but bot  
>> the EMF or GMF editor generated for the schema below will do all the  
>> instance editing things you've described.  Following the tutorial's  
>> steps but with your own schema as the starting point should help  
>> illustrate that: 
>> 
>>      
>>  http://www.eclipse.org/emf/docs.php?doc=tutorials/xlibmod/xl ibmod.html 
>>     http://wiki.eclipse.org/index.php/GMF_Tutorial 
>> 
>> It also sounds like your users are both creating a meta model (Ecore,  
>> XML Schema, or something) as well as generating the instance.  The  
>> steps you describe are possible in the Ecore editor directly.  I.e.,  
>> you can create an EClass, add EStructuralFeatures, and then you can  
>> right click on the EClass and say "Create Dynamic Instance" which  
>> will open an editor for editing the instance based on your dynamic  
>> model.  Try it with an Ecore model you create when following the  
>> tutorials... 
>> 
>> 
>> Wesley Tansey wrote: 
>>> Hi, 
>>> 
>>> I'm new to the GMF project (and Eclipse plugins in general) and have  
>>> been going over it for the last few weeks.  I am working on a  
>>> program visualization tool for a specialized domain.  I want the  
>>> user to be able to first create their classes (nodes which contain a  
>>> list of fields, these are simple classes with no methods) then be  
>>> able to create their objects from those classes (nodes which contain  
>>> a reference to the object's class).  When the user creates an object  
>>> node, I want to list all of the fields in the member Class so that  
>>> they can fill in their values.  I'm not sure how I can specify that  
>>> in the XML document for the ECore file (or if I can). 
>>> 
>>> So far what I have for that portion is: 
>>>> <xsd:complexType name="SpecialClass"> 
>>>>     <xsd:attribute ecore:reference="special:FieldDeclaration"  
>>>> name="fieldDeclarations"> 
>>>>       <xsd:simpleType> 
>>>>         <xsd:list itemType="xsd:anyURI"/> 
>>>>       </xsd:simpleType> 
>>>>     </xsd:attribute> 
>>>>     <xsd:attribute name="name" type="xsd:string"/> 
>>>>   </xsd:complexType> 
>>>> 
>>>>   <xsd:complexType name="SpecialObject"> 
>>>>     <xsd:attribute name="name" type="xsd:string"/> 
>>>>     <xsd:attribute ecore:reference="special:SpecialClass"  
>>>> name="specialClass" type="xsd:anyURI"/> 
>>>>     <xsd:attribute ecore:reference="special:FieldDefinition"  
>>>> name="fieldDefinitions"> 
>>>>       <xsd:simpleType> 
>>>>         <xsd:list itemType="xsd:anyURI"/> 
>>>>       </xsd:simpleType> 
>>>>   </xsd:complexType> 
>>>> 
>>>>   <xsd:complexType name="FieldDefinition"> 
>>>>     <xsd:attribute ecore:reference="special:FieldDeclaration"  
>>>> name="field" type="xsd:anyURI"/> 
>>>>     <xsd:attribute name="value" type="xsd:string"/> 
>>>>   </xsd:complexType> 
>>>> 
>>>>   <xsd:complexType name="FieldDeclaration"> 
>>>>     <xsd:attribute name="type" type="xsd:string"/> 
>>>>     <xsd:attribute name="name" type="xsd:string"/> 
>>>>   </xsd:complexType> 
>>> 
>>> What I want to do is have the user first create a node, say MyClass,  
>>> and add a FieldDeclaration to it, say of type String and named  
>>> myString. Then the user creates an object node, chooses MyClass as  
>>> its specialClass; then my user should be able to see its field  
>>> myString and be able to set its value. 
>>> 
>>> Any help or hints would be great! 
>>> 
>>> Thanks, 
>>> Wesley 
>> 
 
 
--------------010601090501090505080408 
Content-Type: multipart/related; 
 boundary="------------030404010002030808030002" 
 
 
--------------030404010002030808030002 
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"> 
Wesley,<br> 
<br> 
Is this screen capture an illustration of your scenario?<br> 
<blockquote><img src="cid:part1.02070408.02070709@ca.ibm.com" alt=""><br> 
</blockquote> 
When I create a dynamic instance of A and B, each has only the 
appropriate fields.  E.g., here B only has an F4 property only.<br> 
<br> 
<br> 
Wesley Tansey wrote: 
<blockquote cite="midebj593$6fv$1@utils.eclipse.org" type="cite">Ed, 
  <br> 
  <br> 
What I am trying to do is a little different than what you are 
suggesting I think.  I want to have 3 editors, one which allows users 
to create their SpecialClass and SpecialObject types, and another which 
allows them to draw control flow graphs using the SpecialObjects as 
part of the nodes.  Then the 3rd editor will take the graph from my 2nd 
editor and generate Java code (both the new classes and the new 
objects). 
  <br> 
  <br> 
I can almost use the EMF model creator.  Say for example I want to 
create two classes, A and B: 
  <br> 
  <br> 
Class A 
  <br> 
--------- 
  <br> 
int F1 
  <br> 
String F2 
  <br> 
double F3 
  <br> 
  <br> 
Class B 
  <br> 
--------- 
  <br> 
String F1 
  <br> 
  <br> 
Now I want to have 2 different objects, Obj1 and Obj2, with different 
values for these fields: 
  <br> 
  <br> 
Obj1 (type = A) 
  <br> 
----- 
  <br> 
int F1 = 1 
  <br> 
String F2 = "obj1" 
  <br> 
double F3 = .5 
  <br> 
  <br> 
Obj2 (type = B) 
  <br> 
----- 
  <br> 
String F4 = "obj2" 
  <br> 
  <br> 
If I were to create this as an EMF model, I would have my SpecialClass 
and SpecialObject.  The user would create a SpecialClass with the name 
A and then create child FieldDeclarations for it.  They follow the same 
process to create SpecialClass B.  Now, when my user goes to create 
Obj1, they choose A as their SpecialClass.  However, if they go to 
create child FieldDefinitions for Obj1, the list of available 
FieldDeclarations will be F1, F2, F3, and F4.  I would like instead for 
them instead to automatically have the list of FieldDeclarations 
available to them to be constrained to those contained in the parent 
SpecialClass. 
  <br> 
  <br> 
It's a small problem, but an important one, since I don't want users 
defining fields for their object that they don't actually have. 
  <br> 
  <br> 
  <br> 
  <br> 
Ed Merks wrote: 
  <br> 
  <blockquote type="cite">Wesley, 
    <br> 
    <br> 
You've not really described how graphically this should look, but bot 
the EMF or GMF editor generated for the schema below will do all the 
instance editing things you've described.  Following the tutorial's 
steps but with your own schema as the starting point should help 
illustrate that: 
    <br> 
    <br> 
    
<a class="moz-txt-link-freetext" href=" http://www.eclipse.org/emf/docs.php?doc=tutorials/xlibmod/xl ibmod.html"> http://www.eclipse.org/emf/docs.php?doc=tutorials/xlibmod/xl ibmod.html</a> 
    <br> 
    <a class="moz-txt-link-freetext" href="http://wiki.eclipse.org/index.php/GMF_Tutorial">http://wiki.eclipse.org/index.php/GMF_Tutorial</a> 
    <br> 
    <br> 
It also sounds like your users are both creating a meta model (Ecore, 
XML Schema, or something) as well as generating the instance.  The 
steps you describe are possible in the Ecore editor directly.  I.e., 
you can create an EClass, add EStructuralFeatures, and then you can 
right click on the EClass and say "Create Dynamic Instance" which will 
open an editor for editing the instance based on your dynamic model.  
Try it with an Ecore model you create when following the tutorials... 
    <br> 
    <br> 
    <br> 
Wesley Tansey wrote: 
    <br> 
    <blockquote type="cite">Hi, 
      <br> 
      <br> 
I'm new to the GMF project (and Eclipse plugins in general) and have 
been going over it for the last few weeks.  I am working on a program 
visualization tool for a specialized domain.  I want the user to be 
able to first create their classes (nodes which contain a list of 
fields, these are simple classes with no methods) then be able to 
create their objects from those classes (nodes which contain a 
reference to the object's class).  When the user creates an object 
node, I want to list all of the fields in the member Class so that they 
can fill in their values.  I'm not sure how I can specify that in the 
XML document for the ECore file (or if I can). 
      <br> 
      <br> 
So far what I have for that portion is: 
      <br> 
      <blockquote type="cite"><xsd:complexType 
name="SpecialClass"> 
        <br> 
    <xsd:attribute ecore:reference="special:FieldDeclaration" 
name="fieldDeclarations"> 
        <br> 
      <xsd:simpleType> 
        <br> 
          <xsd:list itemType="xsd:anyURI"/> 
        <br> 
      </xsd:simpleType> 
        <br> 
    </xsd:attribute> 
        <br> 
    <xsd:attribute name="name" type="xsd:string"/> 
        <br> 
  </xsd:complexType> 
        <br> 
        <br> 
  <xsd:complexType name="SpecialObject"> 
        <br> 
    <xsd:attribute name="name" type="xsd:string"/> 
        <br> 
    <xsd:attribute ecore:reference="special:SpecialClass" 
name="specialClass" type="xsd:anyURI"/> 
        <br> 
    <xsd:attribute ecore:reference="special:FieldDefinition" 
name="fieldDefinitions"> 
        <br> 
      <xsd:simpleType> 
        <br> 
          <xsd:list itemType="xsd:anyURI"/> 
        <br> 
      </xsd:simpleType> 
        <br> 
  </xsd:complexType> 
        <br> 
        <br> 
  <xsd:complexType name="FieldDefinition"> 
        <br> 
    <xsd:attribute ecore:reference="special:FieldDeclaration" 
name="field" type="xsd:anyURI"/> 
        <br> 
    <xsd:attribute name="value" type="xsd:string"/> 
        <br> 
  </xsd:complexType> 
        <br> 
        <br> 
  <xsd:complexType name="FieldDeclaration"> 
        <br> 
    <xsd:attribute name="type" type="xsd:string"/> 
        <br> 
    <xsd:attribute name="name" type="xsd:string"/> 
        <br> 
  </xsd:complexType> 
        <br> 
      </blockquote> 
      <br> 
What I want to do is have the user first create a node, say MyClass, 
and add a FieldDeclaration to it, say of type String and named 
myString. Then the user creates an object node, chooses MyClass as its 
specialClass; then my user should be able to see its field myString and 
be able to set its value. 
      <br> 
      <br> 
Any help or hints would be great! 
      <br> 
      <br> 
Thanks, 
      <br> 
Wesley 
      <br> 
    </blockquote> 
    <br> 
  </blockquote> 
</blockquote> 
<br> 
</body> 
</html> 
 
--------------030404010002030808030002 
Content-Type: image/jpeg; 
 name="moz-screenshot-18.jpg" 
Content-Transfer-Encoding: base64 
Content-ID: <part1.02070408.02070709@ca.ibm.com> 
Content-Disposition: inline; 
 filename="moz-screenshot-18.jpg" 
 
 /9j/4AAQSkZJRgABAQIAJQAlAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL DBkSEw8UHRof 
 Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwL DBgNDRgyIRwh 
 MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjL/wAAR 
 CAGpAdEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI CQoL/8QAtRAA 
 AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS 0fAkM2JyggkK 
 FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1 dnd4eXqDhIWG 
 h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW 19jZ2uHi4+Tl 
 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcI CQoL/8QAtREA 
 AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz UvAVYnLRChYk 
 NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0 dXZ3eHl6goOE 
 hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU 1dbX2Nna4uPk 
 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD1jS4o4NK/tiWBZ7xojPH6 ouCVVePlJB5x 
 1JPUYq9Jqt5FbNcm3tZYUYq5gui7ZDbWAGwDIORjI5GK5jVvtM3gO1jtgGIi tzIvlGQsgKk4 
 AI6de/AIxzkYvgG3voda87y2SARTJK72jIGbzPug5+8CPfG0j3FxoOcHJSsb RiuRyZ6fBexX 
 MCzQuHjYZBH+evtUnne9YWmT/wCjS/8AXzP/AOjXry3S9Fnh8HeFy7Z0q1l0 q+tEwOLiaaES 
 c53fLmZueD9qwAPLFZRbtqZNHt/ne9Hne9cJpmvahD9rl1i48u10O1eK/m2K ftEow/m7VGUx 
 CqSbVyP9I29YzVC98Q62vjlrOO+sre3juoYorKWYCS5hZULyLCIWkfBaQB1k VAY/mGEcs7ge 
 led70ed715db+Jp5dHsp5/FBhmuZYhq3NuP7HJikcpgp+7zKqxfvtx7fe5os /EfiK4XVbi3u 
 vtK6fpjXFrALYMb5/Nu0hclcZV0iichANxKlSqkqwB6j53vVS/1i201ImuDK TNJ5cawwvKzN 
 tLYCoCeisenauO8F6xqF/wDblutVs9Tgj8sxT21ytxhju3KZEhij4AQ7QCwy Sxwy1qeIL6CG 
 2tlluorOWWcJb3kzhFtpNrN5hJ9FDDb0bO08MaLgXNSvdAuJbY3QSaScRiKe GNnKq7YjPmIP 
 kVmOASQDzjPNV7vTZ7HMlqz3NuAS0btmROf4ePnGOx546knFUr7VNMS5tWW3 FlFLeB2s5Y1h 
 a8lkZVS4UD75VuSrYZchmAKpnofPoYIxY5EljWSNgyMMgjoRTqW9tjBK91ao WRjumhUdT3dR 
 6+o79evVkciSxrJGwZGGQR0IqBjqKKKBhRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUU 
 UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABWVd 6v8AZ9Tez87S 
 oNkKS79Qv/s+/czjCjY2cbOfqK1aKBGVaav9o1NLPztKn3wvLv0+/wDtGzay DDDYuM7+Poam 
 1S/lsRarBb+fJcTeUF/eHHyM+cRo7H7vZT17AVfqpcyS2+oaXex2styttctJ JHCUDbTDImRu 
 ZR1cd6OoGfJrGoQGJp9M2xvNHEW8u7XG9wmcyW6r/F3YZ+tXhGLK7hWEBIJi VMYHCsASCB24 
 Bz+Huasa1rU+r6etlFouoQs1zbyGSZoNqqkyOxO2Qnop6A1Fdf8AHzY/9dz/ AOi3pu3QC1RR 
 RSGQWPlz6DbQSjdHJbKjDOMgqAad9ig/57Xv/gbN/wDFVf0Fre38Jrd3EKyL BAHb5QThYwcD 
 NW571La3luJtAuViiQu7YgOABkniSqsTczLdY7WERRbggJb5mLEkkkkk5J5J qXzveui+yW3/ 
 AD7xf98CuNtde0q8v2t/7QuEd5B5RSzQRkO7BFBMec4C9eOep5wckn8KuVFO WxZtIYLGForZ 
 NiNLJKRkn53cux59WYn8an873rQ0o+b5lre2kIuYVVi4RcOrZAPHQ/Kcj8e+ BpfZLb/n3i/7 
 4FTH3lcT0djnfO96PO961tMnsNVtXuILVVRLie3IeNQd0UrRMeM8bkJHtjp0 qnc6zpUVnFPa 
 2bX0k93JZQQQRKryzRmQSKDIVUbfKkOSQDs4JJANWFcq+d70ed710X2S2/59 4v8AvgUfZLb/ 
 AJ94v++BRYLnO+d70ed710X2S2/594v++BVPTJ7DVbV7iC1VUS4ntyHjUHdF K0THjPG5CR7Y 
 6dKLBcyfO96ozWxWRprRxHIxLOjZKOfpn5TnuPU5BrsPslt/z7xf98Cj7Jbf 8+8X/fAosFzi 
 /tcsRxcWsijON8X71T+Xzf8AjtL/AGhD/cuf/AaT/wCJrs/slt/z7xf98Cj7 Jbf8+8X/AHwK 
 OULnGf2hD/cuf/AaT/4mj+0If7lz/wCA0n/xNdPq09ho2jX2qXFqrQWVvJcS LHGpYqiliBnA 
 zgeoq59ktv8An3i/74FHKFzjP7Qh/uXP/gNJ/wDE0f2hD/cuf/AaT/4muz+y W3/PvF/3wKjj 
 itJXmRbZQYn2NugKgnaG+UkYYYYcjIzkdQQDlC5yH9oQ/wBy5/8AAaT/AOJo /tCH+5c/+A0n 
 /wATXV376dpmnXN/eRxR2trE80z+VnaigljgDJwAelU9b1XSPD0ME+oQqkEr yKZFhDCMJDJM 
 zMBzjbE3QE5xxRyhcwP7Qh/uXP8A4DSf/E0f2hD/AHLn/wABpP8A4mttNe8O yT6JCkkRk1uJ 
 ptPH2dv3yKgkJ+78vykH5sfnWx9ktv8An3i/74FHKFzjP7Qh/uXP/gNJ/wDE 0f2hD/cuf/Aa 
 T/4muz+yW3/PvF/3wKPslt/z7xf98CjlC5xn9oQ/3Ln/AMBpP/iaP7Qh/uXP /gNJ/wDE12f2 
 S2/594v++BR9ktv+feL/AL4FHKFzjP7Qh/uXP/gNJ/8AE0f2hD/cuf8AwGk/ +Jrs/slt/wA+ 
 8X/fAo+yW3/PvF/3wKOULnGf2hD/AHLn/wABpP8A4mj+0If7lz/4DSf/ABNd n9ktv+feL/vg 
 UfZLb/n3i/74FHKFzjP7Qh/uXP8A4DSf/E0f2hD/AHLn/wABpP8A4muz+yW3 /PvF/wB8Cj7J 
 bf8APvF/3wKOULnGf2hD/cuf/AaT/wCJo/tCH+5c/wDgNJ/8TXZ/ZLb/AJ94 v++BR9ktv+fe 
 L/vgUcoXOM/tCH+5c/8AgNJ/8TR/aEP9y5/8BpP/AImuz+yW3/PvF/3wKPsl t/z7xf8AfAo5 
 QucZ/aEP9y5/8BpP/iaP7Qh/uXP/AIDSf/E12f2S2/594v8AvgUfZLb/AJ94 v++BRyhc4z+0 
 If7lz/4DSf8AxNH9oQ/3Ln/wGk/+Jrs/slt/z7xf98Cj7Jbf8+8X/fAo5Quc Z/aEP9y5/wDA 
 aT/4mj+0If7lz/4DSf8AxNdn9ktv+feL/vgUfZLb/n3i/wC+BRyhc4z+0If7 lz/4DSf/ABNH 
 9oQ/3Ln/AMBpP/ia7P7Jbf8APvF/3wKPslt/z7xf98CjlC5xn9oQ/wBy5/8A AaT/AOJo/tCH 
 +5c/+A0n/wATXZ/ZLb/n3i/74FH2S2/594v++BRyhc4z+0If7lz/AOA0n/xN H9oQ/wBy5/8A 
 AaT/AOJrs/slt/z7xf8AfAo+yW3/AD7xf98CjlC5xn9oQ/3Ln/wGk/8AiaP7 Qh/uXP8A4DSf 
 /E12f2S2/wCfeL/vgUfZLb/n3i/74FHKFzjP7Qh/uXP/AIDSf/E0f2hD/cuf /AaT/wCJrs/s 
 lt/z7xf98Cj7Jbf8+8X/AHwKOULnGf2hD/cuf/AaT/4mj+0If7lz/wCA0n/x Ndn9ktv+feL/ 
 AL4FH2S2/wCfeL/vgUcoXOM/tCH+5c/+A0n/AMTUMt1HPd2SoswImJ+eF0H+ rfuQK7n7Jbf8 
 +8X/AHwK5vxDGkWp6esaKg35wox/BJStYdyKiiikMn0iCS58Cy28K7pZbQoi 5xkmIADmobzS 
 PNF7PBpuvfap45Qqy6szQhnVh/qjOUA+bgbcDjAGBWl4S/5F62/3F/8AQFrc q0QVpLGGRXVn 
 uAHBB23Einnd0Ibj756dMLj7q48cs/D4t9XEd1qGnwpbyxrLJ/aDo58t2DBR wQflz2A3Ag9c 
 e2Vm3eqwxyPBH9paWKRBJ5VtI4H3WIyEYfdPT36jqNYVZQvy9S41HFNIp6Le 299rV+9tcRTI 
 tvAC0bhgDul4yK5XxVpZ1bxlrFvbaJ9s1J9EtUstQxCP7OlaS6Cy7nYOmG2t mMMw2dMgZ9At 
 L2C9WRoTJ+7fY4kjaNlOAcEMAehB/Go9R1Sz0mBJ72Uxxu/lqQjMS2CcYUE9 AazSbdkSk3oj 
 zPxB4V8QXOlTxR6ZPJcRy6hPpslmLMyQzy3U0iu8k/zRqVMDKYSHBD5wQuNS PwVFLfwW154b 
 tJov7duL69upI4Wju4pEu2iJBO9zGZo1wyjBPy5AzXUaZ4t0jVriO3tppRPI 7qiSQsu7aTzn 
 GMELkc5wecHitynKLi7NA4tbnl+ueE9WvLXVYLXR/wDiZy/2i0uqb4h9ugmi nWC337vMO0yQ 
 Da4CL5PB+VM6GreB0k1iaW10iCWFYtNhhlkKu5QXcrXgLOdx3xSHfk/vN7A7 iSK9AopCOLtI 
 28L6c2pajpchg0u31WRZoplJgtvtAkihSPOCGiRNvQIIgvGcVn2ngjUobKWE NHHqFv4XtdMs 
 bxJ2CR3SJcIzrjkEeYuH27gHYDqwr0Sq97fW+nwLNdSeXG0scIO0nLyOsaDj 1ZlHtnnigDzO 
 PwdPBo1zHDo+s+Q9xC66dImmeXI6LJky28eyFojuTJ3+YxRMbPLVq0IvDOpx 38HnaNaDUBcW 
 UsOp2flrBYwRJAJraMsRKiN5c4CKpUiYZI3Pj0SigDyuXwxrl7Z+HdIl0e7i j0iygsp7pbqJ 
 Fm23VizPEySeYBst5WBIRuBwGOK2L7wzOLzWYbLRo1u7i3eLRtXj8pV0tPsq xLEGyJYwJFc4 
 jUgeZnqWx3lFAHl9joD6XBBYR2d9YrqWq2IhhvPskahrd2uZH8u0UIu6OEru yWZgoIVVDHPf 
 w7dazo+tLo/h/wAi+ku9aSfUf3Ef29Xa7jSHcG3t+8eI4kCqPKznhc+wUUAe f+IvCcpluINP 
 0f7Usmni30y5Lox0y73Ss9yzSMHVmaSJjJHvkYxknJC5x9S8Lvq2tavPbWM9 zpA1WdmtrGK0 
 cSztBaqZdtyDE2147hWYfOHZh3evWKKAPN5vCF7PZapp95pX27UrzT2trPWr iaOf7IDZrCY3 
 lbbLzIJWJSPB83dgFmANU0s6rBf6Xo+if2XJbeGr2FdOYQx4e7fEYXy2MYyb aQn5hjevctt9 
 IooA4fUPAdvLqsbiD7RZ3moSvdpvKeVbPa3QZM7snM9zK2RyPOx91Bix4W/t F9HHiCT/AIml 
 9qP2WJJflg32asFWXHQZDy3O3AYeb5f8IrsKKAPL5fBetvrGr3Fu99Bqdx9u MepedbRQlZVk 
 ECeYiG6fZvi+VyFUx5UnYgOhNoNs/wBilTwDt0mLz1l0XyrIb538nZcbPM8o 4VJE3Ft43YAw 
 Sa9AooA8zg8EauvhzWEvGkm1id7JGuVnEjXEMcFoLgJ5mVzIYZFIkAEmF8z5 QMdR4K0eTRdG 
 mt2gu7eN7hpIre6aDdEu1QQEt1EUYLBm2pnO4sTuYgdJRQAUUUUAFFFFABRR RQAUUUUAFFFF 
 ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXMeJf+Qrp3 +/8A+ySV09cx 
 4l/5Cunf7/8A7JJSew0V6KKKgo0/CX/IvW3+4v8A6AtblYfhL/kXrb/cX/0B a3KtEBXL30U7 
 aheqmp6zpubjeDY2SyrKDFEMkvDIOCrDjHfOeK6iimBi6NDK32tzc3mPPXEk 8IjebEUQLMpQ 
 YyVYcADk4A4xk+O7G8n0rTvs730xhuB5gt4g7MNjDeQFzkHjjA+Y8dMdhUNz d21nGJLq4igQ 
 naGlcKCfTJ+lVCXLJSKjLldzyXwXpuoNr+myf8TNIormcySPb7UXAcFSWXGS RtI6jJxg9PRP 
 F41JvDF0ulSSR3JeIM8aM7LD5i+aQqEOT5e/hCHP8JDYq5ZavY3bCJL+0knZ 3CxxyoWIBOMA 
 Mf4Rn+g6DQq6tV1HdlVKnO7nndhHr0WjRrZ3es3N39okNu7WzwAWu2PzQVup HYvu3eWZTu8w 
 jA8gPmPVbjVV8Q6XJpv9qwQxS2UMEbW19P8AabZnTzJJWL+VGwV5VYTIZB5e 7IJQr2MGuPc2 
 8c8Wk3zRSqHRt0IyCMg/6ytG0uUvbKC6jDCOaNZFDdQCMjP51zxqRlsyGmjz XRrLX7Sx0uYv 
 rjXEdpo8zi4nnkzNPMUvQ6uSDiNVJUgiP7yhCSTn6L9u1Pw/4elsf7cu45It On1R777TIGuB 
 d2jq8Zm6qFFyxMXyYALcbK9gqOCCG1t4re3ijhgiQJHHGoVUUDAAA4AA4xVi OD8BQ6+mol9X 
 vr6WY2n+nwzWc8caXOV+7JLKyNg+aB9nVYyOTgeWK9AoooAKKKKACiiigAoo ooAKKKKACiii 
 gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAK 
 KKKACiiigAooooAK5jxL/wAhXTv9/wD9kkrp65jxL/yFdO/3/wD2SSk9hor0 UUVBRp+Ev+Re 
 tv8AcX/0Ba3Kw/CX/IvW3+4v/oC1uVaICiiimAVj6/N5H9nyC5gtmFw4Sa4G Y0YwShSwyuRn 
 HGRnpkVsUUAcnb3l5cX1jFca7o1/ObgmEWVsY/L/AHMuSwMzlhkr02/rx1EY mDN5kkbL/CFQ 
 qRyepyc8bR9QT3wG2xJibKsv7x+GZj/Ef7wB/p6ZGDU1AHG6MpbQ9Pb+z9Ub NtGdyXgVT8o5 
 A80YH4Cug8PHPhrSj62cP/oAqsnh3T4JIbaIXyQiM4C6hcgIF2gAANgDB9R0 4B5xrW1vFZ2s 
 NtAuyGFFjjXJOFAwBk89KxpUnB6lN3PNP7Ruv+E5/wCEm/sa++z/ANq/2N/a G+DZ9jz5Hl7P 
 M3f8fvz7tu7b3x8teoUUVsSFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAF 
 FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABXMe 
 Jf8AkK6d/v8A/skldPXMeJf+Qrp3+/8A+ySUnsNFeiiioKNPwl/yL1t/uL/6 AtblYfhL/kXr 
 b/cX/wBAWtyrRAUUUUwCiiigCvZrtgYbdv72Q4246uxz90fy59W6mxVXTyDb PhVX9/NwrKf+ 
 Wjf3QB/X1ycmrVAFWYP9vgZI1YiNxluMAsmedp7ZOMjOOh6q5XvDt3QQDpnE xOPu5/h93/Id 
 Mna2Qj+1bcbVz5EvO5cj5o+2N35HHAznIxaoAwNUvLmHV2iM+pQ23kIyG0sj MGcs+7JEb4IA 
 TjjrUuiXVzcXt2ry30tukcRje7tfJO8l9wHyLngJ2PWtqis1T97muyr6WOT1 +1mv/HXhy3Vr 
 RoIre6vHju7czKWjltgrINyhJQHYLJzt3Nwc1c8OPcHVfFEVxeT3KxaqBF5x B8tGtbd9igAA 
 KC5xx7kkkk7hgha4S4aKMzojIkhUblViCwB6gEqpI77R6VXs9J03T7i6uLLT 7S2nu333MkMK 
 o0zZJy5AyxyxOT6n1rQkLKeaa61FJZbR0huAkSwMS6L5UbYl9H3MxwP4Sh71 wfhDR9av/A1t 
 etPPFfXmn2zpO+u3dx9pVgryBlcYt2cDbvj3Mm8lfujPokcEMLzPFFGjzPvl ZVALttC5b1O1 
 VGT2AHasePwX4VhSZIvDWjIkybJVWwiAddwbDfLyNyqcHuAe1AHL6RNqC+Mb HSrSeSze1S8G 
 owXN5cajHIR9iceXJI6sDsmGGK4UlxtOcmv/AMJd4hfTvDd/IumxXmr2SSoF WZ4oRLcWMQLJ 
 5ihzid25wVyFDEBmfvE0LR47O1s49KsUtbSUT20K26BIZASQ6LjCtkk5HPJq T+ydN2Wyf2fa 
 bLVFS3XyVxCqsjAJx8oDRxkAd0U9hQBy8Gv69d63J4dim02PULd5jLfNaO0U ixpbPhYfNBUn 
 7WoyZG/1ZOPmwvQeGtSm1nwrpGqXCxrPe2UNxIsYIUM6BiBkk4yfU1X1/wAK 6f4hsmtZ1jhD 
 3AuZHW0t5TI4TYCwmjdSduBnGcKBnHFalhY2+madbWFnH5draxJDCm4naigB Rk8nAA60AWKK 
 KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiig 
 AooooAKKKKACiiigAooooAK5jxL/AMhXTv8Af/8AZJK6euY8S/8AIV07/f8A /ZJKT2GivRRR 
 UFGn4S/5F62/3F/9AWtysPwl/wAi9bf7i/8AoC1uVaICiiimAUUUUAV7Nt0D Hdu/eyDO7PR2 
 GPvH+fHovQWKr2ZZoGLCQHzZB84ION7Y6k8enbGMADgWKAKs0hS/gADMTG/y KwH8SDOCwzjO 
 eh+ozhnLcSttzZTrnGclOM7f9rtuP/fB9sjlv7RhXEm0xSEkA7Qcp1OcZ64y CeuCOc2KAMDV 
 NcNlq7Wbalp1kiwJKDdrkuWZwcfOvTaPXrUuiaudRvbuAXtleJDHE4ltBgAs XBU/O3Pyg/jW 
 1RWag+bmuVfSxy+vSX83jLw/YWw32rRXF3On2yS25jktwGyikyYEj/u2wjZ+ boKk0OTU31m5 
 DapJqViiMlxLJDHHGlyGH7u32jJRf3gfezkEIoYssmNx7G3k1GG/aPN1DFJD G+4/KjlCwx05 
 Mafl7ms/RvDGm6BsGnG+SNIhCkM2oXE0aIMYCpI7KuMADA4HHStCTQt5riSe 7Se18mOKUJA/ 
 mBvOTYpL4H3fmLLg/wBzPQiuD8MXPirVPB0WqG61l7y4sreRVu1sBHLv2tI9 v5YyHC7tgmIX 
 LLuBGcd5b2NvaT3c0EeyS7lE053E73CLGDz0+VFHHp65rHs/BmkWFmbS1fVY rfylhWNdYu8R 
 opBAT978mNoHy44yOhIIBh6VrWsHxLp+lwz3d2dl0dRg1doIpbcqbQrg28ZR yEm3BQcHzPmY 
 FcCP/hPdRksdE1EaN5TaraCW3tJL1Qh8yaziVpGEbEc3DEY/hHzLubbH1EPh fSbf7O0UM6zQ 
 SmZbj7XKZnY7ciSUtvkUhEBVyVIRARhVwHwtoxg02E2f7vTYkhtB5r/u0R4p FHXnDQRHnP3f 
 QnIBlx+K9SuL9tHt9JtDrUTyieKS+ZbdVRIHJWURFmOLmHgxrzv5+UFtzQtT /tvw9pmreT5P 
 260iufK3btm9A23OBnGcZwKy9d8Jx6iJJtOljsb+a486W6Jn3N+7WMqDFNEw BEUWRu2nYCVJ 
 wRsaTpsOjaNY6XbtI0Flbx28bSEFiqKFBOABnA9BQBcooooAKKKKACiiigAo oooAKKKKACii 
 igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigArmPEv 
 /IV07/f/APZJK6euY8S/8hXTv9//ANkkpPYaK9FFFQUafhL/AJF62/3F/wDQ FrcrD8Jf8i9b 
 f7i/+gLW5VogKKKKYBRRRQBXs12wMNu397IcbcdXY5+6P5c+rdTYqrp7I1s5 QqR58w+UY5Ej 
 Z7Dvnt+J6m1QBVmIS/gkKMR5brlYy2Msg6hTj8x0zg4yrlvIm24Sf5sYzA46 7fbj7w+mD/dO 
 LFISFUsxAA5JPagDNudRu11KSztbWCUxwpKzSzmP7xcAABG/uH86fYX9xcXt xa3NtFDJFHHI 
 DFMZAQ5cd1XH3D+dNu7PRL+US3ltp9zIF2h5kRyB6ZPbk1PZadp9grGws7a3 EmCxgiVN2Omc 
 DnqfzrNRnzXvoVdW2MbXNS1CLxVoWl2i3fkXCTXFw1oIdwEbwrh/NOPKxK27 YPM4XbjnJpWr 
 6q3iWTStS+yMTbtPiC3kiEJBT5FeQ4uRiTmRFUKVAZQXUDYk02GXWbbVGaTz 7e3mt0UEbSsj 
 RsxPGc5iXHPc9e1PT/D6WOoi9k1C+vZIomgthdurfZ4mKllDBQz58uP5pC7f IOcls6Emhb3X 
 2ie7i+zzxfZpRFvlTasuUV9yH+Jfn25/vKw7Vw/h/wAU+ItX8L/2xmCeRrSC U26aJdQeUZCp 
 Z1Z5D9oVF3ttjGXwACCwz3Fva/Z57uX7RPL9plEuyV9yxYRU2oP4V+Tdj+8z HvWHpnhS50nS 
 49OtfFGsi3ht0t7cNHaEwqu3BU+Rydq7fmzwT3wQAZ+m+KtSk1nTbBhHqguk uWna2sWspLTy 
 2twvmRTy7lAExY/xEMhVcckHxDtpLXTNQh07Ujbahb+bbwNboks5aW2iQqWk AUbrkL8ww2Cw 
 baFL6lt4TgtryK/TUb46ksrST3jeVvuVYRhkddmwKVghHyKrfuxggli0Z8Fa abXRLfz7vZo9 
 vFb253rlljlt5QX+Xk7raMHGOC3qCAAHjCKRxaw6RqUuqB3WXTV8kSxBFjZm ZjIIiMTQn5XJ 
 /eDjhtuxpOpQ6zo1jqlusiwXtvHcRrIAGCuoYA4JGcH1Nc/rXhe7F1NqmgTS RatcXBd5Wuki 
 CxtFEjqu6CUYP2eE8rnIOGAyp3NC0z+xPD2maT53nfYbSK283bt37EC7sZOM 4zjJoA0KKKKA 
 CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAoo 
 ooAKKKKACiiigAooooAK5jxL/wAhXTv9/wD9kkrp65jxL/yFdO/3/wD2SSk9 hor0UUVBRp+E 
 v+Retv8AcX/0Ba3Kw/CX/IvW3+4v/oC1uVaICiiimAVm6zfvYQwOtxbWyPIw lnuRlI0WN3LH 
 5lx9zqTxWlVO/tJrk2z280cUtvL5imSMup+RlwQGH9717UAYeneI7W5niFp4 h0bUrbzWFwbR 
 9xhBSSQEt5rbR8h4PGAcdK6SOeGVmWOWN2X7wVgSOSOfxVh9QfSqIsr+W7tZ bq8tnS3kMgWK 
 2ZCSUZepc/3vTtWlQByOmI9xpVnNJb6xK8kCO0i6gwDEqCSB5o6/QVs6fI83 hS1lkdnd7FGZ 
 mOSxKDJJrC06xurbTLS3m0bWTLFCiOY9QQLuCgHA88cZ9hW9YW8tp4VtbadN k0Vkkci5BwwQ 
 AjI461y0IOL1Lk7nnul+Lv7R1uTT/Is/luZ7fbBeebPH5TOu+WLYPLQ7ODuP LoP4sj1C0/48 
 4P8Armv8q82sfDt1b30T3F/DLaW97cXtvFHbFJA8plyHcuQygTOOFU5CnPBB 9JtP+POD/rmv 
 8q6IksmoooqhBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAF 
 FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXMeJf8A kK6d/v8A/skl 
 dPXMeJf+Qrp3+/8A+ySUnsNFeiiioKNPwl/yL1t/uL/6AtblYfhL/kXrb/cX /wBAWtyrRAUU 
 UUwCiiigAooooAruudRhbb0ikG7b05TjO32/vDp0OMrYqOSCGVlaSKN2X7pZ QSOQePxVT9QP 
 So1sLNNu20gXbjGIwMY24/LYn/fI9BQBFc6ra2lz9nkM7ShA5WK3kkwpJAJ2 qcfdP5U601K2 
 vpJI4TKHjCsyywvGQDnBwwGfun8qgu9INzftdxajd2sjRLEwhEZDBSxH30bn 5z0p9hpf2K5n 
 uHvbm6lmRELThBhVLEABFX++azXtObpYrSxS1nxHDpOs6RpbG0WfUXbY13dC BSqsisqcEvKT 
 Ku1MDdhvmGObFhr9jqWs6hplo0kktgkbTSbf3ZLtIu1W/iKtE4bHAIxnIYAn 02aXxVp+qK0f 
 kW9lc27qSdxaR4GUjjGMRNnnuOvbL0Dwba+HfEN1eWLTrYtp9vZwQyX083l+ W8pI2uxAUBow 
 vp8+ANx3aEnSRzwzPMkUsbvC+yVVYEo20NhvQ7WU4PYg965uy8aLd6PFqz6D qttY3EUUlrLM 
 bc/aGlZFiRQsrEM5dQNwVR/EVrcsoJobrUXlitESa4DxNApDuvlRrmX1fcrD I/hCDtXH+GfD 
 OpeH/DR0r/hFvDBc2UdvcSRXbKL9lAUmYfZuhUyHndycdyQAbieLbWLUbGw1 a1n0e6v/ADBb 
 JfzQDzShiG1SkjAsxlG1RydrcDjNiXxTokO2R9UsRamIytdG7iEaD91jJLZ+ YTxkEAjDLkjc 
 u7D0jwvqWk6pa6lBb6bAgeaI6ZBMywWcMv2fd5LCMbjuty+3YgLTNyMZanF4 CvLfSvClnAbG 
 L+yLSGK5CEqryLdWc7suF53fZ5Tk4JZhnqSADrJPEugw6XDqkut6amnzPsiu 2ukETtzwr5wT 
 8rcA9j6VoQTw3VvFcW8sc0EqB45I2DK6kZBBHBBHOa4fVbHUPDniK78TQQx3 puLiSOO1VLhj 
 skgtVLMYYZWBDWhGNuCHHzA8HpPCdjcaZ4N0OwvI/LurXT7eGZNwO11jUMMj g4IPSgDYoooo 
 AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACi 
 iigAooooAKKKKACiiigArmPEv/IV07/f/wDZJK6euY8S/wDIV07/AH//AGSS k9hor0UUVBRX 
 0+61fTrGK1iS22xqFz5x5IAGfue1Wv7Y1v8AuW3/AH9/+10tlaWsumNq2pRG ZNjTRwHlBGAS 
 DtzhiRz83TjoQSbEsOl28Zln8MxxRAjc5t4GCgnGcKxP5A0OSjuJK+xW/tjW /wC5bf8Af3/7 
 XR/bGt/3Lb/v7/8Aa61k0rRZEV00zT2RhlWW3Qgj1HFO/sfR/wDoFWP/AIDp /hVCMf8AtjW/ 
 7lt/39/+10f2xrf9y2/7+/8A2utj+x9H/wCgVY/+A6f4Uf2Po/8A0CrH/wAB 0/wosBj/ANsa 
 3/ctv+/v/wBro/tjW/7lt/39/wDtdbH9j6P/ANAqx/8AAdP8KrPb+Go76Oxe 10lbyRdyW7Rx 
 iRhzyF6kcH8jRYCh/bGt/wBy2/7+/wD2uj+2Nb/uW3/f3/7XTJtA8OXOozWt nNbQ6gimSS3R 
 kkIzggtG2Sq8j7u3g/Sqcml29pOIbvTrYbmKxzLEuyTvx3Bx2PocE4zQ7gX/ AO2Nb/uW3/f3 
 /wC10f2xrf8Actv+/v8A9rqn/Zlh/wA+Vt/36X/Cj+zLD/nytv8Av0v+FK47 Fz+2Nb/uW3/f 
 3/7XR/bGt/3Lb/v7/wDa6p/2ZYf8+Vt/36X/AAo/syw/58rb/v0v+FFwsXP7 Y1v+5bf9/f8A 
 7XR/bGt/3Lb/AL+//a6p/wBmWH/Plbf9+l/wo/syw/58rb/v0v8AhRcLFz+2 Nb/uW3/f3/7X 
 R/bGt/3Lb/v7/wDa6p/2ZYf8+Vt/36X/AAo/syw/58rb/v0v+FFwsXP7Y1v+ 5bf9/f8A7XR/ 
 bGt/3Lb/AL+//a6p/wBmWH/Plbf9+l/wo/syw/58rb/v0v8AhRcLFz+2Nb/u W3/f3/7XR/bG 
 t/3Lb/v7/wDa6p/2ZYf8+Vt/36X/AAo/syw/58rb/v0v+FFwsXP7Y1v+5bf9 /f8A7XR/bGt/ 
 3Lb/AL+//a6p/wBmWH/Plbf9+l/wo/syw/58rb/v0v8AhRcLFz+2Nb/uW3/f 3/7XR/bGt/3L 
 b/v7/wDa6yLe2F5G8tp4WlnhWWSISqLZQxRyjYDSA4yp6gU+1trO4kuYpdIS 2mt5RFJFLHGS 
 CUVxypYYw470agan9sa3/ctv+/v/ANro/tjW/wC5bf8Af3/7XXO6he6Pp18b SXT7UyCJZcs9 
 tCMMWAx5rrk/KemccetFhe6RqN8LSCzijl8tpQ8E8DkBSoPzQyMVPzDrjPNG oHRf2xrf9y2/ 
 7+//AGuj+2Nb/uW3/f3/AO11QjuGt1uUuG3fZ03hz1ZMHBOO/BH4ZxzXkmp6 nrvjHX0srS6a 
 COWXbbxI5Rc84JPXn/CtaVJzu72S3ZEpKNvM9q/tjW/7lt/39/8AtdH9sa3/ AHLb/v7/APa6 
 8Z1P4e+M9JsXu7i4lMa9o7ssx+gBrld2pf8AP/d/9/m/xrenhVUvyTvb1IlV 5d0fSH9sa3/c 
 tv8Av7/9ro/tjW/7lt/39/8AtdfN+7Uv+f8Au/8Av83+NG7Uv+f+7/7/ADf4 1p9Ql/MR9YXY 
 +kP7Y1v+5bf9/f8A7XR/bGt/3Lb/AL+//a6+b92pf8/93/3+b/GjdqX/AD/3 f/f5v8aPqEv5 
 g+sLsfSH9sa3/ctv+/v/ANro/tjW/wC5bf8Af3/7XXzgkupK4Zb+5JU5wZSR +IJrotH8W31k 
 yJd2lpewDhi0K7+T1zj07VEsFNL3XcpV4vdHtv8AbGt/3Lb/AL+//a6P7Y1v +5bf9/f/ALXW 
 Fo9xoet2xms7W3O04ZGhUMv4YrR/syw/58rb/v0v+FcTunZm6sy5/bGt/wBy 2/7+/wD2uj+2 
 Nb/uW3/f3/7XVP8Asyw/58rb/v0v+FH9mWH/AD5W3/fpf8KLhYuf2xrf9y2/ 7+//AGuj+2Nb 
 /uW3/f3/AO11T/syw/58rb/v0v8AhR/Zlh/z5W3/AH6X/Ci4WLn9sa3/AHLb /v7/APa6P7Y1 
 v+5bf9/f/tdU/wCzLD/nytv+/S/4Uf2ZYf8APlbf9+l/wouFi5/bGt/3Lb/v 7/8Aa6P7Y1v+ 
 5bf9/f8A7XVP+zLD/nytv+/S/wCFH9mWH/Plbf8Afpf8KLhYuf2xrf8Actv+ /v8A9ro/tjW/ 
 7lt/39/+11T/ALMsP+fK2/79L/hR/Zlh/wA+Vt/36X/Ci4WLn9sa3/ctv+/v /wBro/tjW/7l 
 t/39/wDtdU/7MsP+fK2/79L/AIUf2ZYf8+Vt/wB+l/wouFi5/bGt/wBy2/7+ /wD2uj+2Nb/u 
 W3/f3/7XVP8Asyw/58rb/v0v+FVTbQPfSWln4fN5JFEkshiSBQoYsF++y8/I 3Si4Gt/bGt/3 
 Lb/v7/8Aa6P7Y1v+5bf9/f8A7XWSLaBL6O0vPD5s5JYnljMqQMGClQ33Gbn5 161HqjaVpMUM 
 k9hbkSy+UvEUYB2s3LSFVAwp6nrgUAbX9sa3/ctv+/v/ANrqrcSahfXdtLdJ ABCxYlZCSRtY 
 YxtH96sBdY0RpYo/7OtCZZUiGy4s5DlmCj5UlLEZPOAeOa2kDWdzFCGZreXI XexYowGcZPJB 
 AJ56Y9wKGBdooopDFSTPgtVGc/2djhST/q/QZJ/CsO68XyT6gNVQN/ZFqrwz WsmA8hzyxUtg 
 EFVwGwQNwOMnGpaKtz4dgtnLBJbRY2K9QCmOKqS6J52rxai2oTmWNSNxVMlv 4TwNvA3DlT97 
 r8q4pNXZJuaLcpJpiyRKyRvLK6K8bRkAyMQNrAEce1cd4Y8Utd+KluHm1Nrb W/P8pbi2nS2T 
 ym/0fyC6hR5kAeRuTkqPu9D1VqgtIPKEjyfMzl3xklmLHoAOpPakSC1jjto0 toVjtcfZ1WMA 
 Q4UqNg/h+UleOxIpKyVhlbVPEk1vcWK2Nxp8sOpqqWszuSI2JH71sHDxkMij BX52jXP70MmF 
 ceNNctory6J094YV1G6SIW7hvJs5vLMZbzMb3DKQ+MLg/I2eOjFlp6wPALG2 ELwLbNGIl2tE 
 oIEZGMFQGbC9OT60NZae6Mj2NsyusqMpiUgrId0gPHRzyw7nk5p3CxL4d1F7 zTJpZOGW+vIh 
 87NwlzIg5Yk9FHHQdAAAAGXz2jatIZseSLdP7QLZ/wBXufyNmPm83zc7dnP3 v4vLqWLyrdCk 
 MaRqWZyqKACzEsx47kkknuSTUb29pJepevawNdRrtScxguo54DdQOT+ZouKw li9ourRmHHkm 
 3f8As8rn/V7k8/fn5vN83G7fz93+LzK1LgRXUDwToHjcYIP+eD71mJb2kd69 6lrAt1Iu15xG 
 A7Djgt1I4H5Cp/O96LhYoESWc4t52LqxxDMf4/8AZPo38+o7gTVLN5dxC0Uq hkbqP89D71QI 
 urU7QrXcXZtyiQfUHAI98g89O9SMtUVUGpWY4kmELYztnBjP5Nil/tOw/wCf 22/7+r/jQBao 
 qr/adh/z+23/AH9X/Gj+07D/AJ/bb/v6v+NAy1RVX+07D/n9tv8Av6v+NH9p 2H/P7bf9/V/x 
 oAtUVV/tOw/5/bb/AL+r/jR/adh/z+23/f1f8aALVFVf7TsP+f22/wC/q/40 f2nYf8/tt/39 
 X/GgC1RVX+07D/n9tv8Av6v+NH9p2H/P7bf9/V/xoAhk0LR5pXll0qxeR2LM 7W6EsT1JOOTV 
 m1s7WxiMVpbQ28ZbcUijCAn1wO/Apn9p2H/P7bf9/V/xo/tOw/5/bb/v6v8A jQIfp+qW+keI 
 b+W8S6Ec9pbrG8VpLMCVebcMopwRuXr60ahqlvq/iGwls0ujHBaXCyPLaSwg Fnh2jLqMk7W6 
 elM/tOw/5/bb/v6v+NH9p2H/AD+23/f1f8ad9LBYq3//ADFP+vJf/alcBoVs un67ZXjo5WGZ 
 XYRxs7YHXAUEmu7uZ4bhNUeGVJFFkASjAjP7z0rMXTHR0kjJSRGDqwAyCDkd eO1dmGV4Tj3X 
 +Zz13aUWX08Ws+oNqt2pl0i6VIorUbXeMg/K20EgsSzZC5JG0DOBni9J0pJv FNj50SyRvex7 
 0kQ4YFxkFWH6EV1MdpeRalJqEdzIty6gF9q9edxwRtGRsHAH3T/eOY4dLa3M ZjLK8eCrg4II 
 6HPrWtClKDbZnVqqSSRhatpcd7aWtxaxCVi8ytIloluxCKjYMceVwASd2cnJ BwFFLY+FbO5O 
 nvIt0I7ueOAqMDYSwDPuxypAbbx1DDJ2fN0ctvdzy+bNcTSSbSm93JO05BGT 25PHuaatpcJJ 
 5iSyq+FXcGIOFxtGfbauPTA9K6bu1kzHmV7mTp/hXTrm6snhS4i8wxXGJXSU BDcCEoQUAJzl 
 skYx8pU9a5j+yv8AZrvUtLiIqY5ZUKgKu1iMANuAH/AufrzUX9lf7NVFtN3Y m0xfDEOkjw5Z 
 p4rWzbTku2/svzQd4YMfO3bf+WW/Gd/Gc7uNlcv4gstRuPEeoPqwjOo+aBP5 X3Purt2/7Ozb 
 jPOMZ5zXRx6HFEztHAiM5y5VQCx9/WiLQ4oFKwwJGpOSEUAZ/CsadPknzXNJ VE42OX01brSr 
 tbm1Yqw6jsw9DXpGl6pFqdvvX5ZV+/Geqn/CsP8Asr/Zp0VhLBKJYWaOQdGW pxFFVVdbjpVe 
 TR7HU0VmQ6lKihbq3fI6yRDcD746j6AGrA1OwIybyBT6O4Uj6g8ivMlCUdGj tjJS2Zboqr/a 
 dh/z+23/AH9X/Gj+07D/AJ/bb/v6v+NSUWqKq/2nYf8AP7bf9/V/xo/tOw/5 /bb/AL+r/jQB 
 aoqr/adh/wA/tt/39X/Gj+07D/n9tv8Av6v+NAFqiqv9p2H/AD+23/f1f8aP 7TsP+f22/wC/ 
 q/40AWqKq/2nYf8AP7bf9/V/xo/tOw/5/bb/AL+r/jQBaqpdaVp19KJbuwtb iQLtDywq5A9M 
 kdOTS/2nYf8AP7bf9/V/xo/tOw/5/bb/AL+r/jQIS10rTrGUy2lha28hXaXi hVCR6ZA6cCi5 
 uEs9U0e8lSZoYLtmkMULylQYJVB2qCcZYDp3pf7TsP8An9tv+/q/40f2nYf8 /tt/39X/ABoA 
 n8QeILHVNLWztEvnme7tmAawnQYWdGYlmQAAAE8ntUF1/wAfNj/13P8A6Lej +07D/n9tv+/q 
 /wCNQy3ltcXdkkNxDIwmJIRwTjy39KbdwNCiiikMteHba0fw7BPchQqRKWdn KhVCA5PNWftP 
 hv8A5/7H/wACx/8AFVQsP+Se3X/Xk/8A6KFQanqVy9tqO/xLoM1k8E4S2ity JiCjbF8zzyCc 
 4ydnPOAM8WkSdN/Zdn/zx/8AHj/jWOsG+OSZprKCL7Q8KiSNzyJCijPmDJJx 26nFbyrc+YC0 
 sRTPIERBx83fd7r27H1GPMvEVzO7TW+osLbSFup3gmikOXlDyH5jwQRgkDGO M7jjITimwvY7 
 jS47a9jaO4s2huogPMQlgCDnDLk9Dg/TB+pv/wBl2f8Azx/8eP8AjWH4TudS ubm8fVYY4rgQ 
 whQp5ZN0u1mXkKTz0J+i9Kw/Fc9w3irVbe0l1k6kmj276VHZtc+Qt0z3IBlE f7oAssYJm+Uh 
 eeAaIxaVmDd3odhZw6VqEDTWq+ZGsskJOWGHjdo3HPoysPfHHFV7yfQrKzF1 I3mRtK0CC2Dz 
 u8ikhkVI8szLtfIAJGxicBTjz/Wv+EgstHuBZQ6lZ3FvcaldWTQWl3ObmZru dlQpC6ooAETB 
 pldGEvAwrZ0IfD3nX9pZTQayko8R3d1dtHPdRxpFIl68TxyKwRQQ6bvLI5YK /JxTshHoH9l2 
 f/PH/wAeP+NH9l2f/PH/AMeP+Ned65/b/wBl1X7D/bn9t/8AEx8/Z5/k/ZvK n+zeT/yx8zP2 
 THlfvM5zz5laGraRqcWsTLBda5PHFFpsSyi6mAk867lW7YhCE3eUwJIA8sbS mwKuCyA7T+y7 
 P/nj/wCPH/Gq9nDpWoQNNar5kayyQk5YYeN2jcc+jKw98ccVh6bfPpdst3rM mqxw2EWqFpJF 
 ZoRbRXIEbS9WeTylUoxyWXzDkk5OPp2j+JbTTp0he+h1K18NW5ghEq+TLqbC 58x2J+WSTeVL 
 ZJUlwzAkIwLIDvP7Ls/+eP8A48f8aP7Ls/8Anj/48f8AGvN44tWh0a5I1fWZ bP7RCREdL1KN 
 piFkLxhzJJdRg/uiZAPLXaAA5aRToRDWRfwCa21m21T7RZfZIBcTz28Vpsg+ 0LJICYXcf6UN 
 0n7wkKR1josgO4/suz/54/8Ajx/xo/suz/54/wDjx/xrzeW48Q3dn4d0yGTx Bb31pZQW+pzr 
 bzDE/wBqsVdvMdTHKQouDuG9Su8nKk52L6HULa81mC1OsnVo7d00AiS4e3KC 1UL5jEmFn87z 
 eZyWJ2542UWQHUX8OlaZp1zf3i+Xa2sTzTPljtRQSxwOTgA9Ksf2XZ/88f8A x4/4153aQ3za 
 Y+nSX19eQajqFlBDFd2dzbiQLIZLpP8ASpXlZTbxtuBxGQNq7mZxVO5n1S50 vWX0SXxBLqwu 
 NYS4bddNEIV+1LCId37reJBbgCL5xgjpvosgPUP7Ls/+eP8A48f8ajjstNme ZIhG7wvslVZC 
 SjbQ2G54O1lOD2IPeuP8RWup2UtxbwXGuXE66eDo80LzMHvy0pcz+X+7Ckm3 4lAiAyFAUMBl 
 6wmrvruq28Oo6lFpMOpy+Y0cd5dskjW1o6IBbyrKqfPcHAPljOCM7MFkB6JP Zaba28txcCOG 
 CJC8kkkhVUUDJJJOAAOc1HcQ6VaT2kM67JLuUwwDLHe4RpCOOnyox59PXFcP fWGq6jpWs6dq 
 o1m41y50x4NPwskdvIGslVvMETG2VzMZ/vsSDtwduw1oPeRxXtvcaTaalqEW j6PeXgs7zz/P 
 aZ3Ah4nBk3sIrpFOCQpI6OAxZAdRaxaPfef9jlguPIlaCbyZ9/lyL95GweGG RkHkVY/suz/5 
 4/8Ajx/xrh/DVrr3hC4nXUtKjngbRxNK+lyvO1xdQH95IytGgM84lHUlm8nk ntuXv2z/AISh 
 fL/tX+yfNj+1eXnb9owvl7P4/JxjzNnybtnb7RRZAbn9l2f/ADx/8eP+NRwW Wm3VvFcW4jmg 
 lQPHJHIWV1IyCCDggjnNef6NZa/aWOlzF9ca4jtNHmcXE88mZp5il6HVyQcR qpKkER/eUISS 
 e48J/bP+EN0P+0fP+3f2fb/aPtGfM8zy13b887s5znnNFkBc/suz/wCeP/jx /wAaP7Ls/wDn 
 j/48f8auUUWQHAauipc6yijCra4A9sy10NnZ6aNJS7vfLRed8kkhVR82Bk5x 6Vga1/x+a3/1 
 7f1lrceRIvC9tJI6oiXMLMzHAAFwuSTVwbUXby/UmSTkr+f6Ekf/AAjcsixx 3dm7uQqqt0CS 
 T0AG6r39jaf/AM+//j7f41z32+8l8uO88RaHfq1xbhIbK2MUm7z4znJnfIwD xj3zxz1US3IY 
 edLE4xyEiK84Hqx77vzHpkv2k+7Dkj2OZjtTJp1vcl7FZLiMNFCYpMuxQvtH 73k4B7dATWnp 
 9pp1/blzZvFKjbJYnZso2AcdeRggg+h7dK87ubu9c6Yb4/Z2gSNtLWBywlPy AHPG5jkKQVXh 
 iMYPzd94UmvZ7O8k1GGKG8NwPNjifcAfKj/LjHALAf3jWcXUVnzP7xuMH0Ro f2Np/wDz7/8A 
 j7f41XsLPR9T062v7NPMtbqJJoXy43IwBU4PIyCOtclJPcTeM9XS0l1l9Th1 i0SFVa5Nolr5 
 Vs0wb/l3B2NOcN82SCPmK1j6f/wkFnb+E40h1KyntbfTLX7MtpdyrNCREJnc q/kRFQ0qlZEL 
 jy9wIyhXT2k+7FyR7Heyt4fj+w7T5/2/Btvs3mTeYpx+8+TOIxuXLn5RuXJG RWh/Y2n/APPv 
 /wCPt/jXBeE/D3lXHhSCWDWYn0zTJ47syz3SKl0pswUDFgGiO1sKpMTbTgHB qukfiGazsYrW 
 bxBBfOlqutysJjsujdW25ofNBj2BftRPlAxbcbgV20e0n3Yckex6L/Y2n/8A Pv8A+Pt/jR/Y 
 2n/8+/8A4+3+Ncc2jXzeI5ITLrn2GTVUs2Iv7kKLNdPVwQwf5f8ASEAMgIYs WUsdzAk99qh8 
 DXU11JqsOu3fh+zhBdfJjF7MJI0EeMbJjK6h+gUGLOAOD2k+7Dkj2OpsLPR9 T062v7NPMtbq 
 JJoXy43IwBU4PIyCOtWP7G0//n3/APH2/wAa46/0zWLe18TNpk19bJFd21tY 26K/kwWflWvn 
 tDEhVm+USgBDuBUiPa7NnLkj1uLRrZRd6zqUf2iY21iLa/smucrGFBuBI80I VzLg3B2tuPCo 
 qOp7SfdhyR7Hov8AY2n/APPv/wCPt/jR/Y2n/wDPv/4+3+NcFqkPiG5Gowac dZGvSPqCSkyT 
 Jbi3Mc4tfLZiIFfP2TmMhwd27/lpVi8uNQ8R+M7ZbGTxBa6Oz20c7C3uLQYE V+ZB+8VSASYA 
 WGCCUwwYKQe0n3Yckex2v9jaf/z7/wDj7f41XvbPR9PgWa6Ty42ljhBy5y8j rGg49WZR7Z54 
 rkr4ao1nrKxSazHr5uHDuUunt1svtS4MaqREX+zbeIiJSd2CHzRpEd7LLoWn XN3d3sf9py3o 
 S7tpYM2sUGMlZ5HlYLcyREeYd24gqNiKQe0n3Yckex2v9jaf/wA+/wD4+3+N H9jaf/z7/wDj 
 7f415doz6tqHhrQ5NGvPEYa4tLI6ndTG4dhM1xa/PEbgEFdhui3lgxlfvgjb XSXMOoW3iBoI 
 TrJu4720TTiJLh7c2IEIn8xsmJn/AOPrmUmQnbjny6PaT7sOSPY6mHTdJuUL wLHKgdkLJKWA 
 ZWKsOD1DAgjsQRRNpuk2yB51jiQuqBnlKgszBVHJ6liAB3JArzIxeIpT5dtq uqx28Et3Dp7p 
 BdXrtMl7cphnWZF+VFtwPtJaM+wEmdjU7GbULTUob2PXJNUXUEmmCNdCEWcd 8kimHb+68wQK 
 hHlfvSQf491HtJ92HJHsdTqL+G9IlSPUp4LPdE8weeYogRWRGJcnaPmljHJ5 3cVYsbXRNTs4 
 7yweC7tZM7JoJ/MRsEg4YHBwQR+FcVr0R1EahcWH9pPb2CaPbxSLBJNdWzC5 WeYhJFaQv5TW 
 ztlTuKqGyUIHQeF5ZrU3Ly2+pXCalqZ8q8uLYxSyKLZP3s6bU8sBomiGEXOI zg7t7HtJ92HJ 
 Hsbv9jaf/wA+/wD4+3+NRzabpNsgedY4kLqgZ5SoLMwVRyepYgAdyQK465h1 W5s2gz4gEMlx 
 aJYESSI4sjdQiXzGQh1l255kIcRbf4/PquYfENrPZCA6yyTXsiXG+SaTEUOp 28cP3idoNsZC 
 SMeYu5n3YLUe0n3Yckex3v8AY2n/APPv/wCPt/jR/Y2n/wDPv/4+3+NX6KPa T7sOSPYof2Np 
 /wDz7/8Aj7f41z2uW0Npq+nxwJtUsSRknnZJ612Fcr4l/wCQ3p31/wDZJKan JppvoS4xTVkR 
 UUUVzm5p+Ev+Retv9xf/AEBa1EbOozLu6RRnbu6cvzjd7f3R06nGFy/CX/Iv W3+4v/oC1qI2 
 dRmXd0ijO3d05fnG72/ujp1OMLaILFY2p6HpEqebJp9qJHuImaQIEZm8xTyw Kk84PU5OOG6H 
 ZqOaNpUCq20h1bPPQMCRwR1xj09QRwWBFaafZWG/7HZ29vvxu8mJU3Y6ZwOe pqUQQrcPcLFG 
 J3RUeQKNzKpJUE9SAWYgdtx9ajVLwbd08B6ZxCRn7uf4vZ/zHXB3Q38WoyWK raXESXAHztt2 
 huOcZ3bfxzj3xgp6LQC1DPFOheKRXUEjKnvVTUr2Sz8ry1Q7853A9sf41keH YrosZLZvKsg2 
 HjkGSzY5IHOO2Tnk889Xr/ES/udO8Nyz2Su16ymC1CBSfPkZY4/vfLjey5z2 zUxk2rjNSDV7 
 iW4jjZIsMwU4B7n61tV5Z4CA0+/utDTTLnTra0mhntLed0cpBJ/tK75PmpMe SeGHbgep1SBk 
 c8EN1by29xFHNBKhSSORQyupGCCDwQRxipKKKYgooooAKKKKAI5IIZnheWKN 3hffEzKCUbaV 
 yvodrMMjsSO9EMENshSCKOJC7OVRQoLMxZjx3LEknuSTUlFABUcMENshSCKO JC7OVRQoLMxZ 
 jx3LEknuSTUlFABUYghW4e4WKMTuio8gUbmVSSoJ6kAsxA7bj61JRQAUUUUA FFFFABRRRQBw 
 Wtf8fmt/9e39Za67Rv8AkEwf8C/9CNcjrX/H5rf/AF7f1lrrtG/5BMH/AAL/ ANCNOPwP1X6i 
 fxL5/oT27bp7sbs7ZQMbs4+RTj7xx+S9enOTYqvbtunuxuztlAxuzj5FOPvH H5L16c5NikMx 
 Lrw/ov2iy/4llmn74kBY1QMfLccgEbuCeCG4J46kalrZ2tjEYrS2ht4ydxWJ AgJ9cDvwKW4i 
 lkCGKRUdCSCwYg/KQMgMM8kHB9OxwQ1kvDu2zwDrjMJOPvY/i90/I9MjarIB 6wwW5nlSOOIy 
 t5kzhQu9goXcx7naqjJ7KB2pYZo7iFJonDxuMqw71l+IIr+SzY20qi2VCZ4h w7r3Ab6fT6jO 
 RW8NRXghEqyIumtnyoSvzZzyR02gnkA5+gzgLm1sVbS5y/xI+JGo+CNYsba2 0+2uLeeHzGaX 
 zASRIAQDjb90MOCSCwJAAAeP4a/ErUfGur3Nle2tnb+Rbeb+56ufkUnDPkDd vPCkYZQSCAZG 
 ePhdR+LbiayttSluDoO1BpjGK4fF5DkJIImPAJJGW4J+VM7my/he+PiVriF8 O+nQPJGz/OJN 
 se8SDeN0qsSHbZkvuJ8vdtbqUIewcra97+fYx5nz26f8A9kqOaCG5QJPFHKg dXCuoYBlYMp5 
 7hgCD2IBqSiuc0CiiigAooooAKjMELXCXDRRmdEZEkKjcqsQWAPUAlVJHfaP SpKKAI4IIbW3 
 it7eKOGCJAkccahVRQMAADgADjFSUUUARwQQ2tvFb28UcMESBI441CqigYAA HAAHGKkoooAj 
 jghheZ4oo0eZ98rKoBdtoXLep2qoyewA7VJRRQAUUUUAFFFFABXK+Jf+Q3p3 1/8AZJK6quV8 
 S/8AIb076/8AsklVHZ+hMuhFRRRWJqafhL/kXrb/AHF/9AWtRN/9ozZ/1flR 7fvdcvnr8vp0 
 59eNtc5Yf8k9uv8Aryf/ANFCsi+sdRXWNeil8O6RDpEWnB4J42+ZW/0j5l/c jLnbHuTfhBtI 
 LbqtEHoVZy6o8hfytOu5EV2j3qYgCVYqcZcHqD2qxI96Ffy7e3ZgDtDTsAT8 2M/IcdE9cbm6 
 7Ru8V0rWtTOt27x3fmXMr2yFGvJAZPnJKtweMs2eDjJ9a1p0HVvZ2sa06fMm +x7VY30GoWwn 
 gY46Mp4ZD3BHr/npVmsfTRGut3yxoqD7PASFGMndL/hWP4i8Q6xpmo6y9m9j 9h0fSo9Smhmt 
 3aS4yZ9yK4kAj4gABKtgtnBxisY3t725m7X0OvChRhQAM54qpfWP23y/3mzZ n+HOc4/wrzv/ 
 AISnUdC0O+fSrX7Z/Z93qd9qEPkKcQ/bbjZ+8aZNm7ypRlVlI2529AxPDrGs WdhZ3N9Y3Fre 
 eJb6COG9s3nTy4zenZMplAlUGNCg+UJsXrtFVYR3cWjeVMknn52MGxs64/Gt WvP9Y8aaxpuk 
 3esRpYvatLqFrbWzQvvjktY7hg7yb8OrG1PyhVI8wfMdvzWNR8Q+JLHVJLZn 0pPKisfMQW8k 
 mJLu5kgXD+YuVj2oT8oMmG/1e4bS1gO4orn9D1m81N7UTvYpj7bDOikrJLJb 3AhEkaknEZwx 
 YEkqXjGTyTyeh+JdS07w/NeJb2klnBoS+I7pWLCR5rk3MzxJ2VNy8MclQuCH LblAPTKK4OPx 
 F4wW3ube40iNbuJ4XaYQRs0MDiTdIbWO5d3AMQAxIGbedqsYyGktfF1/dxLq VvPY3GmRXdjZ 
 OFtZEe6NytuRMjF/3Sj7Sp8tlY/IRuG75QDuKK8/ufG+sJovhe6trWxkutX0 +C5kjkLonmPP 
 Zx7QwJKri5fnDEYU84IOhdeIdYs7fX7+R7GS18PxMLmBbd1e7kW1Scsj+YRE pMgG0rIRtPzH 
 PAB2FFed3uq65qHh3VtI16yjt3uXs7NnAijcw3c/2dyI0nm2kKWKuzYJ42/I cmpeMte0vRrz 
 V3OmzQNcana2tuts6NE1styyO7+YQ4ItsFQqffyCMYIB6JRXF6t4i17TU1J2 Gmq+j6YNUvIh 
 E7idWaYiGN9y7CqwEeYVbcW3bFxtOfdeJfEcHiLUtG020ju7s3sziRIvMCQp BaMF8uW5jAP+ 
 kKCVcDKk7MuSAD0SivO9R8R61rHg7xHqVrNaafBZaZJuihJmlMrWSzh47hHC gKZlAIVs7CQf 
 mG08dSalFpqQ3V7H9ss9H1TVEurKNrfE0cQhTaC7FQFuXP3s7lUggZBAPRKK 8zuE8VW2saNb 
 x3sgewuJ9NtDcSy+VfsbS4lSW4/56gKlsCwxiQXGB9011mi+JP7X+0Xzx/Yt MHkQRfa18uU3 
 DffQ8leGeOLA5EqyqegoA6CivO7nx5rlm+pajLo8baPbvfRRbniiLtbLMflk 84u5YwN8ohXa 
 GJyQmW3JrrxJFqNlo39oaUb65inuvtf9nyeWscRhXZ5Xn5LEzZ3b8ALjac5A B1FFed2njvWr 
 /Qb7WYNOtBAHsYLS3Ul5Wluo7VhuJZFIQ3B7rv4GY9pZuo8L6lqeo2VyusWs dveW1wYWVTGC 
 w2I4LIksojOHxtLkkANwGAABz2tf8fmt/wDXt/WWuu0b/kEwf8C/9CNcjrX/ AB+a3/17f1lr 
 ceNJfC9tHIiuj3MKsrDIINwuQRTj8D9V+on8S+f6Gzb7/Pu9/wB3zRs+902L 68dc/d4/HNWK 
 8/0+11QX2pNqfh/SrKGHU7VbWW2fcyg/ZyVQmFN6EtIS+chty4wM10+vXGpQ eHNRmhhhWZLW 
 RgUuGBU7RkghOo+fHrtXpuO0Su7FJXdiVdaL2gul028MLR+YGzF93Gc4356V ft7iK6t0ngcP 
 G4yrD/PB9q8e8K6pev4nihjuEmjnuW82P7XIysgiAyQQQcBRjI6gDI616joo RZdTWNVVRdDA 
 UYH+pjoqUZ0pJN3uaVIKDsatIqqiBEUKqjAAGABXIXHiHWLfWNSl32LaZZar aab9n+zuJn89 
 bf5/N8zaNrXGcbDkJjIzkc/4d8U6jY+HvCsVla/adMhtNMsb5vIUeVNMkIH7 wzBuFmibCxOD 
 nG4ZJRGRq+OPhla+NtXtb+fUZLXyIRCUjgQlhvDfe6/dLjByASCB94MeBPhr H4Hv57qLVZLv 
 7RCI5EaMoMjYcgB8feEh5BIDAAjDF8rQIdY1f/hAv7SvrG9zpT6gftNm8mdv 2Pa3zSn/AEgb 
 3xN23N8nJq4/jXXotO0m8WDTZ31u3gu7OAo8Qt1e4tYzHI+5t523Q+cKuCmd jZwK55cvJfQV 
 le/U9Eorh217xIdck01brShnUE0yOQ2Mh2yCyW6aUjzuVOHQJkEblO47SGsP 4svJPBt94hgS 
 xTb4fj1WC0Zy8kcjRyuRJjGYztUKRgkrJ6CpGdhRXn6atqnhvSdT0+wtoLix 0SWz0ewVvmnm 
 eSO1VWfLInymYnGV35AzHt3MTeLPEttpMk99ZQWC2csov79rZbkW6LHG6l7a G4Z03CQ8h32h 
 AxAV8oAegUV5/rHjTWNN0m71iNLF7VpdQtba2aF98clrHcMHeTfh1Y2p+UKp HmD5jt+bQ1vx 
 JrFt4vt9C02Ox/0j7OBJcq52eZHeszfKfm2/ZkIXjPzDcuQygHYUVxd34l1q LR7/AFmCO0lg 
 F62nWlksBMolF2LUO0hlVXBIL7MJ1C7xgsa/9panrEOk6brVrHbTvrscM2wx hyIYTeIdiSyi 
 Mlo0UqXYlct8u8bQDvKK83j8aeJINF0S6mTSru61q0trq3jSGS3SHfPaxsjM XkLZF1wwA27M 
 7WzgbEviHWLe8uGkexe1sNQtNMuY1t3V55JhBmVG8wiNQbgfIVcnYRu+bKgH YUV5fF4y8SwR 
 3MNrp8F22nfaLi+myqxyAXdzGBumuVMC4t2Of3oUNwoCANqatquvX+iz39pf WlnB/bENjbxr 
 buZEZNRSAs7iUB0YK5KBV4fbu4JIB3lFeb+MIry+1J7WXUZ7W6trTTbb7Xpz G3f/AEy/RJmX 
 livFsm0ZONzA7sjEY1LxVB4ji1S6WRpxplwH0uESmKRbae1ErxxE5Mrl7nyj n5kMGcZagD0y 
 isfR9Z/tGJ7qZ4I7W6u3i0zJw08ar97k4bcUldSvBj2t61x+n+OvEVzY293d aVBbQ6pFBJYN 
 L5Y8vzpoYl+VZ3edVFwrFtsP3QCFMg2gHpFFcXq2v69pKakGm02Z9F0waleE WjqLtWabEcY8 
 0+SQsBG4+ZkvnaMYNefxV4j+wCW3srSae71i502yjhTewWF7gmR1eSNSSsG3 bvXHLbjkRgA7 
 yuV8S/8AIb076/8Askla3h7ULvU9Ehub+COC73yRSxpIjAMjsh+4zhSduSu5 tpJUkkE1k+Jf 
 +Q3p31/9kkqo7P0Jl0IqKKKxNTR8LRpL4agjkRXR41VlYZBBRcgir39haP8A 9Aqx/wDAdP8A 
 CqfhL/kXrb/cX/0Ba3KtEBWKfDqi6muI9SvYnmYltqwngszbcmMnALNgE8Zr aopgUNP0oWFx 
 PObu4uJJlRC02zgKWIxtUf3jVa48L6PeeIf7cvLGC6vlihiheeJH8jy3d1aM kZVsyHJB/hX0 
 rYooAy73w1oOpJGl/omm3SRvI6LPao4Vnbc5GRwWbknueTVgaTpq37366faC 8d1d7gQr5jMq 
 FFJbGSQrMoPYMR0NXKKAM99C0eS8uryTSrF7q7iMFzM1uheaMgAo7Yyy4AGD xwKsS2FnPK0s 
 tpBJI3l7neMEny2Lx5P+yxLD0JyOasUUAZeo+HtN1LS7ywe2jhS6t7i3aSBF V1WfmUqccFm+ 
 Y+pAJzWgIIVuHuFijE7oqPIFG5lUkqCepALMQO24+tSUUAY//CJ+G/7O/s7/ AIR/SvsPm+f9 
 m+xR+X5mNu/bjG7HGeuKuSaTps2qQ6pLp9o+oQpsiu2hUyovPCvjIHzNwD3P rVyigDLj8NaD 
 DezXsWiaal3M++WdbVA7tvEmWbGSd6q2T3APUVYk0nTZtUh1SXT7R9QhTZFd tCplReeFfGQP 
 mbgHufWrlFAGPF4X0e0aw+wWMFhHZXbXiRWcSRI8jRPESwA5+Vz6HhecDFR6 f4Q0HTzfOmmW 
 ks9885up5YEaSZZpDI6O23LJlsAHPAAOcVuUUAU7zSdN1C4tbi90+0uZ7R99 tJNCrtC2QcoS 
 MqcqDkeg9Kpv4X0e5iuo9QsYNRW6uzeSi9iSUGTaEUhSMDaiqgwM4HJJJJ2K KAKcmk6bNqkO 
 qS6faPqEKbIrtoVMqLzwr4yB8zcA9z61TtPC+j2Mt19msYI7W6tEs5LJIkEH lq0rYCAY+Yzv 
 nsfTrnYooAjkghmeF5Yo3eF98TMoJRtpXK+h2swyOxI71TsNGs7HR7bTNn2i GDY2+4Ad5JFY 
 P5rnHMhcby2MluetaFFAFOPSdNh1SbVItPtE1CZNkt2sKiV144Z8ZI+VeCew 9Kp/8In4b/s7 
 +zv+Ef0r7D5vn/ZvsUfl+Zjbv24xuxxnritiigCu9hZyRXUUlpA8d3n7SjRg ibKhDvH8XygL 
 z2AHSixsLPTLOOzsLSC0tY87IYIxGi5JJwo4GSSfxqxRQBwWtf8AH5rf/Xt/ WWuq02CG50OK 
 G4ijlibO5JFDKfmJ5Brlda/4/Nb/AOvb+stddo3/ACCYP+Bf+hGnH4H6r9RP 4l8/0Fj0XSop 
 Fkj0yzR0IZWWBQQR0IOKvUUUhmFB4ZFqhWHVb9AcbjthyxACgk+XknAAyeeB Wjp2nLpyTAXE 
 07TSea7y7c52qv8ACAMYUdquUUAY9v4X0e31671z7DBLqdzKJftUsSNJFiJY tqPjcq7U6Z6s 
 3ripH8NaDJcWlw+iaa09kiJayNaoWgVDlAhxlQp5AGMdq1KKAKdtpOm2dxJc Wun2kE8jyO8k 
 UKqzM5UuSQMksUQk99oz0FRw6Fo9vLcyw6VYxyXUqz3DpboDLIrb1diB8zBv mBPIPPWtCigC 
 v9gs/P8AP+yQed5vn+Z5Y3eZs8vfn+9s+XPXbx0qndeHtNubWK3S2jtkie1K m3RUIW3lEsSd 
 PuBhjHYM2MZzWpRQBXews5IrqKS0geO7z9pRowRNlQh3j+L5QF57ADpVNfDW gqlki6JpoSwc 
 vZqLVMW7FgxMfHyEsAcjHIzWpRQBTj0nTYdUm1SLT7RNQmTZLdrColdeOGfG SPlXgnsPSq9h 
 4a0HSn36domm2bhw+63tUjO4Kyg/KBztdxn0Zh3NalFAGe+haPJeXV5JpVi9 1dxGC5ma3QvN 
 GQAUdsZZcADB44FR23h7TbG9srixto7RLO3nt4be3RY4gsrxu52gdd0YPGOr ZznjUooAw9D8 
 IaD4e0uKwsNMtFREhDyGBA87RYKPIQo3OGG7PY8jFaEmk6bNqkOqS6faPqEK bIrtoVMqLzwr 
 4yB8zcA9z61cooAx7fwvo8UFmk9jBeTWcr3EVxdxJJIszv5jyA4+Vmf5vlAA OMAAACw+haPJ 
 eXV5JpVi91dxGC5ma3QvNGQAUdsZZcADB44FaFFAGXY+HtN08XaQ20fkXFxF ceQyL5cTRxxR 
 xhFAwoUQoR6EZGOMWNQ02HULeZGaSCeS3kt0u4CFnhVwNxjfGVOVU/VVParl FAFdLCzjitYo 
 7SBI7TH2ZFjAEOFKDYP4flJXjsSOlV4tC0eH7d5WlWMf9oZ+27bdB9pznPmc fPnc3XP3j61o 
 UUAZa+GtBVLJF0TTQlg5ezUWqYt2LBiY+PkJYA5GORmrE+k6bdWEthcafaTW crl5LeSFWjdi 
 +8kqRgkt82fXnrVyigCOCCG1t4re3ijhgiQJHHGoVUUDAAA4AA4xXM+Jf+Q3 p31/9kkrqq5X 
 xL/yG9O+v/sklVHZ+hMuhFRRRWJqafhL/kXrb/cX/wBAWtysPwl/yL1t/uL/ AOgLW5VogKKK 
 KYBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFAHBa1/x 
 +a3/ANe39Za67Rv+QTB/wL/0I1yOtf8AH5rf/Xt/WWuu0b/kEwf8C/8AQjTj 8D9V+on8S+f6 
 F+iiikMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAK 
 5XxL/wAhvTvr/wCySV1Vcr4l/wCQ3p31/wDZJKqOz9CZdCKiiisTU0/CX/Iv W3+4v/oC1uVh 
 +Ev+Retv9xf/AEBa3KtEBRRRTAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooo 
 oAKKKKACiiigAooooA4LWv8Aj81v/r2/rLXXaN/yCYP+Bf8AoRrkda/4/Nb/ AOvb+stddo3/ 
 ACCYP+Bf+hGnH4H6r9RP4l8/0L9FFFIYUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFF 
 FABRRRQAUUUUAFFFFABRRRQAVyviX/kN6d9f/ZJK6quV8S/8hvTvr/7JJVR2 foTLoRUUUVia 
 ma0SWMcUH9pXK4ULHGqIzEAdgEJNN83/AKfdS/8AAT/7XSJqFhpunR6hqd9b WouSCZrmVYwS 
 QSqAk44GePYnHWtKGaK4gjngkSWGRQ6SIwZWUjIII6gigRneb/0+6l/4Cf8A 2ujzf+n3Uv8A 
 wE/+11qVDeXcFhY3F5dP5dvbxtLK+CdqqMk4HJ4HagCj5v8A0+6l/wCAn/2u kW4V0Dpfaiys 
 Mgi1yCP+/datUrOaK30O3nnkSKGO2V3kdgqqoXJJJ6ACgCDzf+n3Uv8AwE/+ 10eb/wBPupf+ 
 An/2urVhqVhqkDT6fe213CrbDJbyrIobAOMgnnBH51aoAy/N/wCn3Uv/AAE/ +10eb/0+6l/4 
 Cf8A2utSoVu4HvpbNXzcRRpK6YPCuWCnPTko35fSgCg1wqDLX2oqMgZNrjkn A/5Z0vm/9Pup 
 f+An/wBrq1qH/Hsn/XeH/wBGLTNQ1jTNJ8v+0tRs7Pzc+X9pnWPfjGcbiM4y PzoAg83/AKfd 
 S/8AAT/7XR5v/T7qX/gJ/wDa61KKAMvzf+n3Uv8AwE/+10eb/wBPupf+An/2 ur0F3BczXMUT 
 7ntpBFMMEbWKK+Pf5XU8etTUAZfm/wDT7qX/AICf/a6PN/6fdS/8BP8A7XWp TIZoriCOeCRJ 
 YZFDpIjBlZSMggjqCKAM7zf+n3Uv/AT/AO10i3CugdL7UWVhkEWuQR/37rVq lYTRRabp6SSI 
 jSxIkaswBdtm7A9ThSfoD6UAQeb/ANPupf8AgJ/9ro83/p91L/wE/wDtdXlv LV7prVbmFrhc 
 7og4LjAUnI68B0P/AANfUU8TRNO8AkQzIqu0YYblUkgEjsCVbH0PpQBneb/0 +6l/4Cf/AGuj 
 zf8Ap91L/wABP/tdalFAGS9wkaF3v9QVVGSzWuAP/IdTRrNLGskc+qujgMrL ZEgg9CD5VaOm 
 Rpda1J5oBjtER1Q8guxOG/DafXk54IFSyeJNR8+RIdHaWNZXiVw8vzbSRniI jt2Jq4xuJuxl 
 +Tc/89dX/wDAE/8Axqjybn/nrq//AIAn/wCNVt2mu30t5BBc6VJbJKxUSMzY BClu6D0q1deI 
 tJsdQhsLvVbK3vZ9vlW8twiSSbjgbVJyckEDHU0ONtxJ3OZ+ylkuBLHqkpnj 8pmazcELz0wg 
 /vGm/ZJv7+r/APgCf/jVdv53vR53vTi3HZg0nujiPsk39/V//AE//GqPsk39 /V//AABP/wAa 
 rt/O96gm1S0t/P8AOu4I/s8Qmm3yAeVGd2HbPRflbk8fKfQ0/aT/AJmTyR7I 4/7JN/f1f/wB 
 P/xqj7JN/f1f/wAAT/8AGq7fzvejzvej2k/5mHJHsjiPsk39/V//AABP/wAa qs0sC3LWzX9+ 
 J1GWiNt8w78jy89xXY32tiyvILYWd1cvLHJMfs6q3lohQMxBIJ++vChmPYGq cutabqU9pbmz 
 +3WdzKY4rvbHJbmQIzkAk5Pyqw3KCM5GcggPnn/Mw5I9kc78n/P3qX/gL/8A a6Pk/wCfvUv/ 
 AAF/+11t3emSWIMtkXltxjdbtl3UdyrE5PrtPPXB6CoY5EljWSNgyMMgjoRU upPux+zh2Mr5 
 P+fvUv8AwF/+10fJ/wA/epf+Av8A9rrUmmit4JJ55EihjUu8jsFVVAySSegA qCw1Kw1SBp9P 
 vba7hVthkt5VkUNgHGQTzgj86XtZ92P2cOxS+T/n71L/AMBf/tdHyf8AP3qX /gL/APa616KP 
 az7sPZw7GR8n/P3qX/gL/wDa6Pk/5+9S/wDAX/7XWvRR7Wfdh7OHYx90QcIb 3UdxBIH2Xkgd 
 f+WfuPzpfk/5+9S/8Bf/ALXV2T/kK2//AFwl/wDQo6tU/az7sPZw7GR8n/P3 qX/gL/8Aa6Pk 
 /wCfvUv/AAF/+11r0Uvaz7sPZw7GR8n/AD96l/4C/wD2uj5P+fvUv/AX/wC1 1r0Ue1n3Yezh 
 2Mj5P+fvUv8AwF/+10fJ/wA/epf+Av8A9rrXoo9rPuw9nDsZHyf8/epf+Av/ ANro+T/n71L/ 
 AMBf/tda9ZV3e3EepvB9o+y26wo6Sf2XPd72LOGGY2AXAC9f71P2s+7F7OHY b8n/AD96l/4C 
 /wD2uj5P+fvUv/AX/wC1060vbiTU0g+0fardoXd5P7LntNjBkCjMjENkFun9 2pdUuL6J7GDT 
 4hJPc3Bi2+WHOBG7nAMiDPyd2HGevSj2k+7Dkh2IPk/5+9S/8Bf/ALXVi2to pWiuUvZLhEJZ 
 eU25wR2UepqrdP4jsEinubRlgNxDE7PaxKAHkVOq3TkH5uPlPP51dlXydQgk Q4E7GORR/EQp 
 IP1G0j8fak5z2bGoR3SLlFFFQWcxfC2jsdIuWuNUtbpbYxxz6fZNcMEYIXVh 5cigEqhyQD8v 
 B61kQjxLP4gtZtQnubW5LWzC2t7WaSIR+XGZhvEogA3+cPnDOAMqSfLrq9Pu ZV021AsbhgIU 
 AYNHg8Dnlqs/apv+gfc/99R//F0xHnxfxDPqLJDLqlt9qaN7mOO3uf8ARJPt cGVWWUvG4CNN 
 zGFQqpJUrgDR120lNr4gs5E1ea4NlLFpiRm4kieL7KBhyuUZzJ5v+sy5O3/Z rsPtU3/QPuf+ 
 +o//AIuj7VN/0D7n/vqP/wCLoAz9KtZtP1u+tI2vG08W0EsTXM0k371mlDgP ISeix/LnA64G 
 45gu4ZX0nQ7hY3mt7SSOe5hRSzOgiYAhf4irlHx1+TKgsFB1/tU3/QPuf++o /wD4uobOW4t7 
 KCF7C4LRxqhIaPGQMf3qQGLqd/HqM9nM6a0mkBZlmFvbXcEvn5jMfyoolK7T LzjZnryFrP0+ 
 111bd9Qvm1H+1kvbCJlEzmIo0dss5ESnyiuWnywXAOSCCuR2H2qb/oH3P/fU f/xdH2qb/oH3 
 P/fUf/xdAHEWn9o/Z/8ASf7XnsvtKfbr6P7ZFLcL5cpOy3P7yHEhhz5PysD2 UMq1ZrfXjLLK 
 DfQWzrCjzmCeST7Mst6YgRGyzFgGtt2GDjdl+N2fQftU3/QPuf8AvqP/AOLo +1Tf9A+5/wC+ 
 o/8A4umBmaat0nhqzW8mmmlE6YeaIxuU84bMqzMw+Xb98l/73zZFVfETPa3z 3OmPqKaw9sFj 
 jgs2lguSpcxRyuY2VF3M2SGQgOSSBgjXupbieJUWwuARIj8tH0VwT/F7VN9q m/6B9z/31H/8 
 XSA5LVk1iSLXbOzu7l1sILm5hkt5HMzyyxMY4SR1KF5G2DBA+zEZ5p9/a3en 6m1pG2rtoQ8i 
 W4aOa4ml+ZbgMEcEy/fW2yqHgckAM2enSQxPK8elzI0rb5GXygXbAXJ+bk4U D6AelP8AtU3/ 
 AED7n/vqP/4ugDkoNPnguL/U7FdUWRtUslhEkk+HtzHapIzRucMdpkBZgWBU kkFeGWltd2+i 
 aAdYm12WCWyMl6YmuDOLorFsVhD+8VQolBGNuRlsuQT2H2qb/oH3P/fUf/xd H2qb/oH3P/fU 
 f/xdAHH6fa66tu+oXzaj/ayXthEyiZzEUaO2WciJT5RXLT5YLgHJBBXIpWf9 qzWtv5P9u2+t 
 waSuzz/tLR3N0bXjdvzAqqTzuwxkHOMfP3v2qb/oH3P/AH1H/wDF0fapv+gf c/8AfUf/AMXT 
 AwvCEV3H9s828vLi2Ozy/tNrcQ7X+bdj7RI8p42eiDtk78GoWVze2nhdLaa5 tylyHe4t0Vmi 
 X7LMM/MrKASQvI/i9cVu/apv+gfc/wDfUf8A8XUNnLcW9lBC9hcFo41QkNHj IGP71IDi5rHW 
 LPVtWjGoaosEjSs14bN5TJ8lgB8kATJIEqBkwygOQQVJp8FrqSyXF9DZaja6 lNpJj01TdTzo 
 Zla5I81nwOQ8bKJwMbtoAKkDt/tU3/QPuf8AvqP/AOLo+1Tf9A+5/wC+o/8A 4umBx6213d6r 
 aQadNrsOivcxiR5muFlz5Nz5oLTfvAh/0cZ4AJypD5I1rFL+TxJNZm7d7Kwn e5MgkYs7SrlY 
 XPQhN8rbOML9mPPNbX2qb/oH3P8A31H/APF0xJDE8rx6XMjStvkZfKBdsBcn 5uThQPoB6UgL 
 Wlvs1jUPeOH/ANnqOG/SHcksM4cXMxOLSRhgu+DkREEcjuf8I7EzC/up5IHi WRI1UOVJON2e 
 hPqK0POq4ysJq5B9uSe+sRDFN8spLE2zoAPLcckxIOpHfv0rH1bStQ1jxLrF sk6W2m3uk29r 
 cu9sztIpe5DLE+8KrhX6kPjcpx2O/wCdR51JyuCVjljHqMenfaL241qS3m1i 6F4kbzeZHaLJ 
 ceSIlj/eBd5hOUyxUgE+WABjPd6k11fQNNrp1JNOD6NHG9ztVjcXYgM4X5Ml FgyZ+u07+jV6 
 F51MAiWd5xGgmdVRpAo3MqkkAnqQCzYHufWlcdjg9R/4SfztdkjvtT+2eVf7 IILS42+Vsk+z 
 7ZDL5O7/AFJHlJ5meD/y0NX9d065sLvV57eTWpr2TQmisbiGWZjJcKLln3+X 8gbMqFAwABOI 
 wMYHYedR51FwscWh8QjXdRlfVtQt5t13kR6bPNHHDiTyGGZDA5A8ltsUfmEj aeshrpPB8s66 
 TKJoLqMCciOS5nuHadQqjzAtwTJECcjyznGCQWBDHQ86jzqLhYi1W923+nxv BdNGrm4EttCz 
 vvQrtjBHCb9zAsxA2h1ON2Qx9RnfX7SWezlS6kQ28iKGlhiQBnEiS7QBuICM pAJIQ9FBax51 
 HnUXCxoefWTeW7QSvdWqFkY7poVHU92UevqO/Xr1m86jzqLgYPiZWvfBmspa q07zafOsSxjc 
 XJjYAADqTWXe6Jqb6rYXFxqMzS3VykF1Jp0TW6C3jhuGAPzORl5MFtw6pt2s A1dLLaDzDNau 
 LeRjl8ICjnPVhxz15BB9c0zzryI4ktRKOzQOOfqGIx+BNIDkLr+3fOuv7O/t H+2/MvN/mb/s 
 3k7Jvs+zf+43Z+zfd+b727+OqsKPe+KUsdMu/EEWn7rdrgTyXSuqmO93czfM qsViG4Y5AwQw 
 BHdfapv+gfc/99R//F1VsLe30uBoNP0L7JCzbzHbpDGpbAGcBhzgD8qYHKrH rw1q/kfU763m 
 3XWQmnzzJHDh/JYEyeS5A8o7Y08wn5T/AMtDUMg1IaXbiODVHAnlEdqJr9Wv ztQK5mP7y1AO 
 8BJMoeTkjEg7r7VN/wBA+5/76j/+Lo+1Tf8AQPuf++o//i6ACT/kK2//AFwl /wDQo6tVntLc 
 NexTCwuNqRuhG6POSVI/i/2TU32qb/oH3P8A31H/APF0gLVFVftU3/QPuf8A vqP/AOLo+1Tf 
 9A+5/wC+o/8A4ugZaoqr9qm/6B9z/wB9R/8AxdH2qb/oH3P/AH1H/wDF0AWq Kq/apv8AoH3P 
 /fUf/wAXR9qm/wCgfc/99R//ABdAFqiqv2qb/oH3P/fUf/xdH2qb/oH3P/fU f/xdAFqqtyLp 
 LzT7y0ihlktLgymOWUxhgYpE+8Fbn5wenaj7VN/0D7n/AL6j/wDi6PtU3/QP uf8AvqP/AOLo 
 EP1TUNY1ezWzl06xgjNxDK0i3zuQElVzhfKGSduOo60y6/4+bH/ruf8A0W9H 2qb/AKB9z/31 
 H/8AF1DLPJJd2Qe1miHnE7nKEf6t+OGNPcDQooopDKumf8gqz/64J/6CKtVV 0z/kFWf/AFwT 
 /wBBFWqBBRRRQMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiig 
 AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACodH0fTZtGs5ZbG3Z 2hVmZoxzx1/Q 
 /rz1KzVY0LjQbHt+4U+nb8PT9OvGUaEyKLTNDmkkjitbKR4TtkVQpKH0b0PB 6479Odk8Oj6b 
 BcQyR2NukiyoVYRjIO4frx/PjqFxmszDPrTwadYzKJdxNzMQA3lBvukEAZZj 1X7zfdxldbQp 
 DJpVm7RW0RaQHbbbfL/1nbaSOcZIBPOfT5dZQSV0RGV3ZlSaZYEDOJCM4+SN nP5AGqFnrUV7 
 KY0ikVluWgO8EdFZgRkdcLyOCM89s6dc9cyLJCykCfEssYSGRQfMCuWAXySV JXd1Pfqc5PNU 
 qcivyt+hrGPM97HQ01nCAFiAPUkAfmabGVd5HiiMNuxzFEwwVH0/hB7L29vu rPAwS5iYttwT 
 znHY98j+dOD5kmKSsyDzkPRkP0df8aerBlyKu/bG2yCO5VDG4PMhAfLZIzk4 GDjI5z345pkl 
 ncsMMWJIBz1OevfrVu3QSuNdtgz/AI/0pQwJwCM+lJJ9zpnkfzp9n5P2v98M qOi54Jz0PPTp 
 9f5lgEqpqFxdW1r5trbJcMGG5Gcrhe7DarE464AyRnGTgG3+6yPIaRo9owZB g5/Ie1FIDOe5 
 1OO6tIjb6ZMtwolL2188myI9JP8AVAYOMLz8xzjgMRPdf8fNj/13P/ot6mht 4LfzPIhji8xz 
 I+xQu5j1Y46k+tQ3X/HzY/8AXc/+i3oAtUUUUDM+yvLa302zSa4hjY26EB3A OMe9Tf2nYf8A 
 P7bf9/V/xqzpcskXh6w8uR0ygztYjPyJWTD41V52Fwt9Z2vnzwJeXEqCJ3hL 7xw5ZQBFIcsF 
 GF68gFiLv9p2H/P7bf8Af1f8aP7TsP8An9tv+/q/40+XxHaQyQRy6zDG9xI0 MKvdAGR1bayq 
 M8sG4IHIPFFt4jtLy+lsrXWYZ7uHPmwRXQaRMHB3KDkYJwc96QDP7TsP+f22 /wC/q/40f2nY 
 f8/tt/39X/GiLxTp89obuHXraS2DMhmS8UoGVS7DcDjIUFj6AE9Kj0/xXaan JLDBqYFxFcyW 
 zwNOPMDozjG0HPIjdh3KjPrQBJ/adh/z+23/AH9X/Gj+07D/AJ/bb/v6v+NX YtRknQvDeNIo 
 ZkLJLkBlJVhweoIIPoQaf9ruf+fiX/vs0aAZ/wDadh/z+23/AH9X/Gj+07D/ AJ/bb/v6v+Na 
 H2u5/wCfiX/vs0fa7n/n4l/77NGgGf8A2nYf8/tt/wB/V/xo/tOw/wCf22/7 +r/jWh9ruf8A 
 n4l/77NH2u5/5+Jf++zRoBn/ANp2H/P7bf8Af1f8aP7TsP8An9tv+/q/41of a7n/AJ+Jf++z 
 R9ruf+fiX/vs0aAZ/wDadh/z+23/AH9X/Gj+07D/AJ/bb/v6v+NaH2u5/wCf iX/vs0fa7n/n 
 4l/77NGgGf8A2nYf8/tt/wB/V/xo/tOw/wCf22/7+r/jWh9ruf8An4l/77NH 2u5/5+Jf++zR 
 oBn/ANp2H/P7bf8Af1f8aP7TsP8An9tv+/q/41ofa7n/AJ+Jf++zR9ruf+fi X/vs0aAZ/wDa 
 dh/z+23/AH9X/Gj+07D/AJ/bb/v6v+NaH2u5/wCfiX/vs0fa7n/n4l/77NGg Gf8A2nYf8/tt 
 /wB/V/xo/tOw/wCf22/7+r/jWh9ruf8An4l/77NH2u5/5+Jf++zRoBn/ANp2 H/P7bf8Af1f8 
 aP7TsP8An9tv+/q/41ofa7n/AJ+Jf++zR9ruf+fiX/vs0aAZ/wDadh/z+23/ AH9X/Gj+07D/ 
 AJ/bb/v6v+NaH2u5/wCfiX/vs0fa7n/n4l/77NGgGf8A2nYf8/tt/wB/V/xo /tOw/wCf22/7 
 +r/jWh9ruf8An4l/77NH2u5/5+Jf++zRoBn/ANp2H/P7bf8Af1f8aP7TsP8A n9tv+/q/41of 
 a7n/AJ+Jf++zR9ruf+fiX/vs0aAZ/wDadh/z+23/AH9X/Gj+07D/AJ/bb/v6 v+NQ67dXDNpC 
 G4lKPq1oGUucMPNU8/iAfwq5dazJaXFjBJNcFrycwRlW4DCN5OeemIz+OKAI f7TsP+f22/7+ 
 r/jR/adh/wA/tt/39X/Go4fFdpIsXm6mLZ5rmW2hjuJwjyvHIY2CDPzfMOMc 8j1xRp/icXlp 
 dTy3gt/ssk6zK9x9xI5ZI/MbphT5THnjgjJxQBJ/adh/z+23/f1f8aP7TsP+ f22/7+r/AI1M 
 muwy6hLp8eqo97Eu+S2W4BkReOSucgfMPzHrVr7Xc/8APxL/AN9mgDP/ALTs P+f22/7+r/jR 
 /adh/wA/tt/39X/GtD7Xc/8APxL/AN9mj7Xc/wDPxL/32aNAM/8AtOw/5/bb /v6v+NH9p2H/ 
 AD+23/f1f8a0Ptdz/wA/Ev8A32aPtdz/AM/Ev/fZo0Az/wC07D/n9tv+/q/4 1Y07UdOstOtr 
 ZtUsC8UaqSJjgkD6ew9+Ppix9ruf+fiX/vs0fa7n/n4l/wC+zTAq3Mvhy8Z2 uJdJkdxtLsw3 
 EYwOduemOmMdsfLtmstQ0Wxhigg1CySGN92PPZj97ceSOSff/DEn2u5/5+Jf ++zR9ruf+fiX 
 /vs0+d2sLlW5lzXelXCBJ7izlUHO13Vhn8aq2sWiWbl4Lm2RjKZSRKvJIYAf 7oDHAH+Od77X 
 c/8APxL/AN9mj7Xc/wDPxL/32aVx2M/+07D/AJ/bb/v6v+NH9p2H/P7bf9/V /wAa0Ptdz/z8 
 S/8AfZo+13P/AD8S/wDfZpaAZx1HTzjN7bcf9NV/xoGo6eOl7bf9/V/xrR+1 3P8Az8S/99mj 
 7Xc/8/Ev/fZoAzzqWnkYN7bEf9dV/wAab/aGnZJ+223P/TYf41pfa7n/AJ+J f++zR9ruf+fi 
 X/vs0AZ/9pWA/wCX22/7+r/jR/adh/z+23/f1f8AGtD7Xc/8/Ev/AH2aPtdz /wA/Ev8A32aN 
 AM/+07D/AJ/bb/v6v+NRyzw3E1k8MqSKLgglGBGfLf0rU+13P/PxL/32ao30 jy3Vi0js584j 
 LHP/ACzegCxRRRQMrWtzBb+HtN8+eOLcnG9wufkT1rkZfD+nyaFrEJ1C2fUL z7d5LSXztDEZ 
 2k2kISVRtsmCVXPLdcnPd6Boek6lolrNf6XZXUqxIgee3R2C7QcZI6cn860/ +ET8N/8AQv6V 
 /wCAUf8AhVWJueb6vYRTfbrfTbrS47TUNOTTZA04j+yovmgMiqpD8TH5coBs HPPGYLCTXNMu 
 NPurqwsbRb3UninM5eV/Na5jGYyqgLibcCHOQo4+bI9b/wCET8N/9C/pX/gF H/hXP6MvhnV9 
 OTU5fBMGm6Y9oLxb2+t7NYzGQGBOyRmX5Tn5gAADkinYLnG2ui27alZXt3Lp qmG7jmdJNUlv 
 WKxxThCHl7h5gQoUYwTuJIAnux9j0e6hiuLOWaO/N1p08U+X82Wdn/eLj5I1 MhVyrEtHv+7n 
 Fd3oul+E9e0wX9r4bsUhMssQWfTkjfMcjRtlSuV5Q8HB9QDxWh/wifhv/oX9 K/8AAKP/AApW 
 C5ymnSaXpmnwWcN/C6xLgySTKXkbqzsR1ZiSxPcknvVr+07D/n9tv+/q/wCN dD/wifhv/oX9 
 K/8AAKP/AAo/4RPw3/0L+lf+AUf+FHKFznv7TsP+f22/7+r/AI0f2nYf8/tt /wB/V/xrof8A 
 hE/Df/Qv6V/4BR/4Uf8ACJ+G/wDoX9K/8Ao/8KOULnPf2nYf8/tt/wB/V/xo /tOw/wCf22/7 
 +r/jXQ/8In4b/wChf0r/AMAo/wDCj/hE/Df/AEL+lf8AgFH/AIUcoXOe/tOw /wCf22/7+r/j 
 R/adh/z+23/f1f8AGuh/4RPw3/0L+lf+AUf+FH/CJ+G/+hf0r/wCj/wo5Quc 9/adh/z+23/f 
 1f8AGj+07D/n9tv+/q/410P/AAifhv8A6F/Sv/AKP/Cj/hE/Df8A0L+lf+AU f+FHKFznv7Ts 
 P+f22/7+r/jR/adh/wA/tt/39X/Guh/4RPw3/wBC/pX/AIBR/wCF
 |  
 |  
  |  
| Re: List of items based on internal list? [message #17385 is a reply to message #16112] | 
Mon, 14 August 2006 13:54    | 
 
Eclipse User  | 
 | 
 | 
   | 
 
Originally posted by: tansey.vt.edu 
 
Ed, 
 
I don't quite follow the route that you're suggesting I take.  If my  
Ecore file is needed before I can generate my GMF editor, how can users  
make use of the Ecore editor? 
 
Thanks, 
Wesley 
 
Ed Merks wrote: 
> Wesley, 
>  
> Is this screen capture an illustration of your scenario? 
>  
>  
> When I create a dynamic instance of A and B, each has only the  
> appropriate fields.  E.g., here B only has an F4 property only. 
>  
>  
> Wesley Tansey wrote: 
>> Ed, 
>> 
>> What I am trying to do is a little different than what you are  
>> suggesting I think.  I want to have 3 editors, one which allows users  
>> to create their SpecialClass and SpecialObject types, and another  
>> which allows them to draw control flow graphs using the SpecialObjects  
>> as part of the nodes.  Then the 3rd editor will take the graph from my  
>> 2nd editor and generate Java code (both the new classes and the new  
>> objects). 
>> 
>> I can almost use the EMF model creator.  Say for example I want to  
>> create two classes, A and B: 
>> 
>> Class A 
>> --------- 
>> int F1 
>> String F2 
>> double F3 
>> 
>> Class B 
>> --------- 
>> String F1 
>> 
>> Now I want to have 2 different objects, Obj1 and Obj2, with different  
>> values for these fields: 
>> 
>> Obj1 (type = A) 
>> ----- 
>> int F1 = 1 
>> String F2 = "obj1" 
>> double F3 = .5 
>> 
>> Obj2 (type = B) 
>> ----- 
>> String F4 = "obj2" 
>> 
>> If I were to create this as an EMF model, I would have my SpecialClass  
>> and SpecialObject.  The user would create a SpecialClass with the name  
>> A and then create child FieldDeclarations for it.  They follow the  
>> same process to create SpecialClass B.  Now, when my user goes to  
>> create Obj1, they choose A as their SpecialClass.  However, if they go  
>> to create child FieldDefinitions for Obj1, the list of available  
>> FieldDeclarations will be F1, F2, F3, and F4.  I would like instead  
>> for them instead to automatically have the list of FieldDeclarations  
>> available to them to be constrained to those contained in the parent  
>> SpecialClass. 
>> 
>> It's a small problem, but an important one, since I don't want users  
>> defining fields for their object that they don't actually have. 
>> 
>> 
>> 
>> Ed Merks wrote: 
>>> Wesley, 
>>> 
>>> You've not really described how graphically this should look, but bot  
>>> the EMF or GMF editor generated for the schema below will do all the  
>>> instance editing things you've described.  Following the tutorial's  
>>> steps but with your own schema as the starting point should help  
>>> illustrate that: 
>>> 
>>>      
>>>  http://www.eclipse.org/emf/docs.php?doc=tutorials/xlibmod/xl ibmod.html 
>>>     http://wiki.eclipse.org/index.php/GMF_Tutorial 
>>> 
>>> It also sounds like your users are both creating a meta model (Ecore,  
>>> XML Schema, or something) as well as generating the instance.  The  
>>> steps you describe are possible in the Ecore editor directly.  I.e.,  
>>> you can create an EClass, add EStructuralFeatures, and then you can  
>>> right click on the EClass and say "Create Dynamic Instance" which  
>>> will open an editor for editing the instance based on your dynamic  
>>> model.  Try it with an Ecore model you create when following the  
>>> tutorials... 
>>> 
>>> 
>>> Wesley Tansey wrote: 
>>>> Hi, 
>>>> 
>>>> I'm new to the GMF project (and Eclipse plugins in general) and have  
>>>> been going over it for the last few weeks.  I am working on a  
>>>> program visualization tool for a specialized domain.  I want the  
>>>> user to be able to first create their classes (nodes which contain a  
>>>> list of fields, these are simple classes with no methods) then be  
>>>> able to create their objects from those classes (nodes which contain  
>>>> a reference to the object's class).  When the user creates an object  
>>>> node, I want to list all of the fields in the member Class so that  
>>>> they can fill in their values.  I'm not sure how I can specify that  
>>>> in the XML document for the ECore file (or if I can). 
>>>> 
>>>> So far what I have for that portion is: 
>>>>> <xsd:complexType name="SpecialClass"> 
>>>>>     <xsd:attribute ecore:reference="special:FieldDeclaration"  
>>>>> name="fieldDeclarations"> 
>>>>>       <xsd:simpleType> 
>>>>>         <xsd:list itemType="xsd:anyURI"/> 
>>>>>       </xsd:simpleType> 
>>>>>     </xsd:attribute> 
>>>>>     <xsd:attribute name="name" type="xsd:string"/> 
>>>>>   </xsd:complexType> 
>>>>> 
>>>>>   <xsd:complexType name="SpecialObject"> 
>>>>>     <xsd:attribute name="name" type="xsd:string"/> 
>>>>>     <xsd:attribute ecore:reference="special:SpecialClass"  
>>>>> name="specialClass" type="xsd:anyURI"/> 
>>>>>     <xsd:attribute ecore:reference="special:FieldDefinition"  
>>>>> name="fieldDefinitions"> 
>>>>>       <xsd:simpleType> 
>>>>>         <xsd:list itemType="xsd:anyURI"/> 
>>>>>       </xsd:simpleType> 
>>>>>   </xsd:complexType> 
>>>>> 
>>>>>   <xsd:complexType name="FieldDefinition"> 
>>>>>     <xsd:attribute ecore:reference="special:FieldDeclaration"  
>>>>> name="field" type="xsd:anyURI"/> 
>>>>>     <xsd:attribute name="value" type="xsd:string"/> 
>>>>>   </xsd:complexType> 
>>>>> 
>>>>>   <xsd:complexType name="FieldDeclaration"> 
>>>>>     <xsd:attribute name="type" type="xsd:string"/> 
>>>>>     <xsd:attribute name="name" type="xsd:string"/> 
>>>>>   </xsd:complexType> 
>>>> 
>>>> What I want to do is have the user first create a node, say MyClass,  
>>>> and add a FieldDeclaration to it, say of type String and named  
>>>> myString. Then the user creates an object node, chooses MyClass as  
>>>> its specialClass; then my user should be able to see its field  
>>>> myString and be able to set its value. 
>>>> 
>>>> Any help or hints would be great! 
>>>> 
>>>> Thanks, 
>>>> Wesley 
>>> 
>
 |  
 |  
  |  
| Re: List of items based on internal list? [message #18125 is a reply to message #17385] | 
Mon, 14 August 2006 14:10   | 
 
Eclipse User  | 
 | 
 | 
   | 
 
Originally posted by: merks.ca.ibm.com 
 
Wesley, 
 
I'm not trying to suggest anything.  I'm simply pointing out the  
capabilities that exist already.  I'm really not at all clear on what  
you are trying to achieve so I'm pointing out the things that seem  
analogous as best as I can tell.  I don't think there's anything else I  
can add at this point... 
 
 
Wesley Tansey wrote: 
 
> Ed, 
> 
> I don't quite follow the route that you're suggesting I take.  If my  
> Ecore file is needed before I can generate my GMF editor, how can  
> users make use of the Ecore editor? 
> 
> Thanks, 
> Wesley 
> 
> Ed Merks wrote: 
> 
>> Wesley, 
>> 
>> Is this screen capture an illustration of your scenario? 
>> 
>> 
>> When I create a dynamic instance of A and B, each has only the  
>> appropriate fields.  E.g., here B only has an F4 property only. 
>> 
>> 
>> Wesley Tansey wrote: 
>> 
>>> Ed, 
>>> 
>>> What I am trying to do is a little different than what you are  
>>> suggesting I think.  I want to have 3 editors, one which allows  
>>> users to create their SpecialClass and SpecialObject types, and  
>>> another which allows them to draw control flow graphs using the  
>>> SpecialObjects as part of the nodes.  Then the 3rd editor will take  
>>> the graph from my 2nd editor and generate Java code (both the new  
>>> classes and the new objects). 
>>> 
>>> I can almost use the EMF model creator.  Say for example I want to  
>>> create two classes, A and B: 
>>> 
>>> Class A 
>>> --------- 
>>> int F1 
>>> String F2 
>>> double F3 
>>> 
>>> Class B 
>>> --------- 
>>> String F1 
>>> 
>>> Now I want to have 2 different objects, Obj1 and Obj2, with  
>>> different values for these fields: 
>>> 
>>> Obj1 (type = A) 
>>> ----- 
>>> int F1 = 1 
>>> String F2 = "obj1" 
>>> double F3 = .5 
>>> 
>>> Obj2 (type = B) 
>>> ----- 
>>> String F4 = "obj2" 
>>> 
>>> If I were to create this as an EMF model, I would have my  
>>> SpecialClass and SpecialObject.  The user would create a  
>>> SpecialClass with the name A and then create child FieldDeclarations  
>>> for it.  They follow the same process to create SpecialClass B.   
>>> Now, when my user goes to create Obj1, they choose A as their  
>>> SpecialClass.  However, if they go to create child FieldDefinitions  
>>> for Obj1, the list of available FieldDeclarations will be F1, F2,  
>>> F3, and F4.  I would like instead for them instead to automatically  
>>> have the list of FieldDeclarations available to them to be  
>>> constrained to those contained in the parent SpecialClass. 
>>> 
>>> It's a small problem, but an important one, since I don't want users  
>>> defining fields for their object that they don't actually have. 
>>> 
>>> 
>>> 
>>> Ed Merks wrote: 
>>> 
>>>> Wesley, 
>>>> 
>>>> You've not really described how graphically this should look, but  
>>>> bot the EMF or GMF editor generated for the schema below will do  
>>>> all the instance editing things you've described.  Following the  
>>>> tutorial's steps but with your own schema as the starting point  
>>>> should help illustrate that: 
>>>> 
>>>>      
>>>>  http://www.eclipse.org/emf/docs.php?doc=tutorials/xlibmod/xl ibmod.html 
>>>>     http://wiki.eclipse.org/index.php/GMF_Tutorial 
>>>> 
>>>> It also sounds like your users are both creating a meta model  
>>>> (Ecore, XML Schema, or something) as well as generating the  
>>>> instance.  The steps you describe are possible in the Ecore editor  
>>>> directly.  I.e., you can create an EClass, add EStructuralFeatures,  
>>>> and then you can right click on the EClass and say "Create Dynamic  
>>>> Instance" which will open an editor for editing the instance based  
>>>> on your dynamic model.  Try it with an Ecore model you create when  
>>>> following the tutorials... 
>>>> 
>>>> 
>>>> Wesley Tansey wrote: 
>>>> 
>>>>> Hi, 
>>>>> 
>>>>> I'm new to the GMF project (and Eclipse plugins in general) and  
>>>>> have been going over it for the last few weeks.  I am working on a  
>>>>> program visualization tool for a specialized domain.  I want the  
>>>>> user to be able to first create their classes (nodes which contain  
>>>>> a list of fields, these are simple classes with no methods) then  
>>>>> be able to create their objects from those classes (nodes which  
>>>>> contain a reference to the object's class).  When the user creates  
>>>>> an object node, I want to list all of the fields in the member  
>>>>> Class so that they can fill in their values.  I'm not sure how I  
>>>>> can specify that in the XML document for the ECore file (or if I  
>>>>> can). 
>>>>> 
>>>>> So far what I have for that portion is: 
>>>>> 
>>>>>> <xsd:complexType name="SpecialClass"> 
>>>>>>     <xsd:attribute ecore:reference="special:FieldDeclaration"  
>>>>>> name="fieldDeclarations"> 
>>>>>>       <xsd:simpleType> 
>>>>>>         <xsd:list itemType="xsd:anyURI"/> 
>>>>>>       </xsd:simpleType> 
>>>>>>     </xsd:attribute> 
>>>>>>     <xsd:attribute name="name" type="xsd:string"/> 
>>>>>>   </xsd:complexType> 
>>>>>> 
>>>>>>   <xsd:complexType name="SpecialObject"> 
>>>>>>     <xsd:attribute name="name" type="xsd:string"/> 
>>>>>>     <xsd:attribute ecore:reference="special:SpecialClass"  
>>>>>> name="specialClass" type="xsd:anyURI"/> 
>>>>>>     <xsd:attribute ecore:reference="special:FieldDefinition"  
>>>>>> name="fieldDefinitions"> 
>>>>>>       <xsd:simpleType> 
>>>>>>         <xsd:list itemType="xsd:anyURI"/> 
>>>>>>       </xsd:simpleType> 
>>>>>>   </xsd:complexType> 
>>>>>> 
>>>>>>   <xsd:complexType name="FieldDefinition"> 
>>>>>>     <xsd:attribute ecore:reference="special:FieldDeclaration"  
>>>>>> name="field" type="xsd:anyURI"/> 
>>>>>>     <xsd:attribute name="value" type="xsd:string"/> 
>>>>>>   </xsd:complexType> 
>>>>>> 
>>>>>>   <xsd:complexType name="FieldDeclaration"> 
>>>>>>     <xsd:attribute name="type" type="xsd:string"/> 
>>>>>>     <xsd:attribute name="name" type="xsd:string"/> 
>>>>>>   </xsd:complexType> 
>>>>> 
>>>>> 
>>>>> What I want to do is have the user first create a node, say  
>>>>> MyClass, and add a FieldDeclaration to it, say of type String and  
>>>>> named myString. Then the user creates an object node, chooses  
>>>>> MyClass as its specialClass; then my user should be able to see  
>>>>> its field myString and be able to set its value. 
>>>>> 
>>>>> Any help or hints would be great! 
>>>>> 
>>>>> Thanks, 
>>>>> Wesley 
>>>> 
>>>> 
>>
 |  
 |  
  |   
Goto Forum:
 
 Current Time: Mon Nov 03 20:32:32 EST 2025 
 Powered by  FUDForum. Page generated in 0.05368 seconds  
 |