[Biocorba-l] Biocorba-0.2.0 - A proposal
Alan Robinson
alan@ebi.ac.uk
Wed, 8 Nov 2000 11:40:17 +0000 (GMT Standard Time)
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.
--8445424-9746-973683617=:100
Content-Type: TEXT/PLAIN; charset=US-ASCII
Hi all,
Please find attached to this e-mail, a proposal for a next version of
BioCorba that I hope answers some of the limitations of the current
version.
This has had input from a number of people [see below]. All through the
design we were trying to balance completeness with simplicity and
ease-of-use.
Given some of the current problems with bioperl handling sequences with
very large numbers of features (e.g. chr. 22), there has been a positive
decision to move away from returning CORBA sequences (i.e. arrays).
Extra thanks to Ewan Birney (EBI), Juha Muilu (EBI) and Matthew Pocock
(Sanger) for providing animated discussion. Also to "FatBoy Slim" for
providing the soundtrack...
In a subsequent e-mail I'll be giving out an IOR for a server that uses
this proposed IDL to provide access to the EMBL database, along with a
Java and/or perl client.
cheers,
al
--
============================================================
Alan J. Robinson, D.Phil. Tel:+44-(0)1223 494444
European Bioinformatics Institute Fax:+44-(0)1223 494468
EMBL Outstation - Hinxton Email: alan@ebi.ac.uk
Wellcome Trust Genome Campus
Hinxton, Cambridge
CB10 1SD, UK http://industry.ebi.ac.uk/~alan/
============================================================
Notes on BioCorba.idl (proposed v0.2.0) by Alan Robinson.
Updated: 08 November 2000
Acknowledgements:
-----------------
Input for this proposal came from Ewan Birney, Brad Chapman, Philip
Lijnzaad, Juha Muilu, Matthew Pocock and Jason Stajich.
Introduction:
-------------
This IDL is designed to be pretty uncontroversial and simple. It is
using very simple CORBA features, and contains no valuetypes or any's,
which are being implemented late in ORBs (if at all). This IDL will
work with ORBacus & JavaORB for Java, ORBit for perl.
This IDL is designed for biological sequences and their features.
These are the biological objects that are defined:
1) There are three levels of object describing biological sequences:
AnonymousSeq, PrimarySeq and Seq.
2) Objects that describe the features and locations of features on a
biological sequence: SeqFeature and SeqFeatureLocation.
3) Vector and iterator objects that allow us to process large lists
of biological objects easily and are designed for network access:
PrimarySeqIterator, PrimarySeqVector, SeqFeatureIterator,
SeqFeatureVector.
4) There are three levels of objects describing biological databases:
PrimarySeqDB, SeqDB and UpdateableSeqDB. Each one provides a
richer level of functionality than its superclass.
5) A factory object that creates and makes available biological
database objects: BioEnv.
6) A collection of Exceptions for when error conditions occur.
BioCorba 0.2: Changes for the proposed next version:
----------------------------------------------------
Aside from some re-naming of methods for consistency, there are some
differences and additions compared to the previous version of
BioCorba:
1) The enum for describing the type of a sequence has been replaced
by a SeqType object using 'const' definitions. This should allow
the BioCorba IDL to be extended in the future without clients that
expect the old version being broken (this situation can happen
very easily when using enum's).
2) The list of biological sequence types has been extended to include
the 'UNKNOWN'.
3) In AnonymousSeq, a method 'is_circular()' has been added to
differentiate linear from circular biological sequences.
4) The method 'max_request_length()' has been removed from
AnonymousSeq and placed in the PrimarySeqDB interface as
'max_sequence_length()', since the maximum length of sequence that
can be returned is a property of the database server, not the
sequence itself.
5) Seq and SeqFeature now have the concept of sub-SeqFeatures. Thus
the methods to return the SeqFeature objects of a Seq may specify
whether all the SeqFeatures are to be returned, or just the top
ones.
6) A SeqFeature now has the concept that it may have sub-SeqFeatures
(borrowed from bioperl). These may be returned with the
'sub_SeqFeatures()' method.
7) The use of arrays (i.e. CORBA sequences) as return types has been
removed since this can put a burden on server implementors (except
for SeqFeatureLocation objects - see [24]). Instead lists of
objects are accessed using Vector objects. For example, Seq now
returns only a SeqFeatureVector rather than the SeqFeatureList or
a SeqFeatureIterator of BioCorba-0.1. The Vector allows random
access to its list contents, but a server does not have to
implement the 'size()' or 'elementAt()' methods. However, the
Vector should be able to return an 'Iterator' object that may be
used to cycle over the objects in order.
8) Vectors are being used when lists of PrimarySeq and SeqFeature
objects have to be returned.
9) A SeqFeature now has the concept that it may have multiple
locations along a Seq (borrowed from biojava, OMG-BSA, EMBL-Bank,
etc.). An array of SeqFeatureLocation objects may be returned from
a SeqFeature with the 'locations()' method. For usability, the
description of a location in BioCorba is kept simple and handles
only joined locations. For example:
(1..10)
join(1..10, 21..30, ...)
complement(1..10)
join(complement(1..10), complement(21..30), ...)
join(complement(1..10), (21..30), ...)
N.B. The positions of the start and end points may be fuzzy. If
the location of a SeqFeature cannot be described by this simple
model (e.g. it uses other operators such as 'group', 'one-of' or
'order'), then an 'UnableToProcess' exception is thrown. The
Exception description string may return the actual location as a
string for parsing by a client.
10) A SeqFeatureLocation is composed of a start and end
SeqFeaturePosition. A SeqFeaturePosition may be fuzzy. The
different types of fuzziness are specified in a FuzzyTypeCode
interface and handles the operators: '<', '>', '.' and '^'.
11) Despite the definition of SeqFeatureLocation objects for a
SeqFeature, a SeqFeature retains its 'start()', 'end()' and
'strand()' methods. These values return the range of the
SeqFeatureLocation objects, plus the consensus for the strand that
these SeqFeature objects all lie on. These values must be
consistent with the values returned in the SeqFeatureLocation
objects.
12) In the BioEnv interface, the version of the database is now
returned as a long, which is consistent with the PrimarySeqDB
interface.
13) In the PrimarySeqDB interface, a PrimarySeqVector is now
available, rather than a PrimarySeqIterator.
14) In the PrimarySeqDB interface, the 'get_PrimarySeq()' is now
specified as using an accession number (which is unique to a
database), rather than the primary ID (which is unique to the
application). The method now throws a 'DoesNotExist' exception,
rather than an 'UnableToProcess' exception.
15) In the SeqDB interface, the 'get_Seq()' method is now specified as
using an accession number and throws a 'DoesNotExist' exception.
16) In the SeqDB interface, the method 'get_PrimaryidList()' has been
replaced with 'acession_numbers()' since a database uses accession
numbers. The list of accession numbers is returned in a StringList
object.
17) In the BioEnv interface, method 'get_SeqDB_names()' and
'get_SeqDB_versions()' have been added to allow the BioEnv object to
be queried.
18) In the BioEnv interface, the method 'get_SeqDB_by_name()' now
throws a 'DoesNotExist' exception, rather than an
'UnableToProcess' exception.
19) I've re-ordered the file, which has necessitated the use of
forward declarations in some places.
20) In Exceptions, occurences of 'description' have been replaced with
'reason' for consistency.
21) The module name is now org.biocorba.seqcore.
22) The 'get_PrimarySeq()' and 'get_Seq()' methods of PrimarySeqDB and
SeqDB respectively now include the version of the required
biological sequence to be specified.
23) In the Seq interface, it is now specified that the Seq object may
return SeqFeature objects of a given type only (e.g. exon, intron,
CDS, etc.).
24) Vectors and iterators have not been used for SeqFeatureLocation
objects. Instead the 'locations()' method returns an array. This
decision was made on the basis that a SeqFeature will (probably)
have a small number of SeqFeatureLocation objects (at least
compared to the possible number of SeqFeature objects that a Seq
object may have) and the desire to prevent an explosion in the
number of interfaces.
Probable areas of contention:
-----------------------------
0) Naming: I've tried to choose sensible names that are consistent
with biojava, bioperl, BioCorba-0.1 and general IDL style. YMMV.
1) Use of Vectors and Iterators: Using Vectors places a (optional)
requirement on server implementors to provide random access to
lists of objects. Fine if you work against a database, big
problem if you are working off a flat file being accessed
sequentially. Alternative is to drop Vectors, but retain
Iterators.
2) Does SeqFeatureLocation handle all the normal cases. e.g. can
people live without 'group', 'one-of' and 'order'
operators. Solving this will add a layer of complexity.
3) SeqFeaturePosition aka Fuzziness: Will be people be happy that
the position is accessed through a second struct? Alternative is
to drop fuzziness.
4) That for a SeqFeature we have both SeqFeatureLocation objects and
start()/end()/strand() methods. This is redundancy, but retained
for convenience.
5) There are (still) no SeqVector and SeqIterator objects defined
(c.f. PrimarySeqVector and PrimarySeqIterator).
6) All version information (e.g. for PrimarySeq and PrimarySeqDB) is
defined as a 'long' data type, rather than a 'string' data
type. This decision was made on the basis that using a 'string'
to specify the version makes it much less convenient to determine
the most recent version of a database.
--8445424-9746-973683617=:100
Content-Type: APPLICATION/octet-stream; name="BioCorba-0.2.idl"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.WNT.4.05.10011081140170.100@medusa.ebi.ac.uk>
Content-Description:
Content-Disposition: attachment; filename="BioCorba-0.2.idl"
Ly8gTm90ZXMgb24gdGhlIGJpb2NvcmJhIElETC4gCi8vCi8vIFRoaXMgSURM
IGlzIGRlc2lnbmVkIHRvIGJlIHByZXR0eSB1bmNvbnRyb3ZlcnNpYWwgYW5k
IHNpbXBsZS4gSXQgaXMKLy8gdXNpbmcgdmVyeSBzaW1wbGUgQ09SQkEgZmVh
dHVyZXMsIGFuZCBjb250YWlucyBubyB2YWx1ZXR5cGVzIG9yCi8vIGFueSdz
LCB3aGljaCBhcmUgYmVpbmcgaW1wbGVtZW50ZWQgbGF0ZSBpbiBPUkJzIChp
ZiBhdCBhbGwpLiBUaGlzCi8vIElETCB3aWxsIHdvcmsgd2l0aCBPUkJhY3Vz
ICYgSmF2YU9SQiBmb3IgSmF2YSwgT1JCaXQgZm9yIHBlcmwuCi8vCi8vIFRo
aXMgSURMIGlzIGRlc2lnbmVkIGZvciBiaW9sb2dpY2FsIHNlcXVlbmNlcyBh
bmQgdGhlaXIKLy8gZmVhdHVyZXMuIAoKCi8vIFRoaXMgY29tZXMgZGlyZWN0
bHkgZnJvbSB0aGUgR05PTUUgYm9ub2JvbyBtb2RlbC4KLy8gSXQgYWxsb3dz
IG1lbW9yeSBtYW5hZ2VtZW50IHZpYSByZWYgYW5kIHVucmVmIGNhbGxzLgov
LyBUaGUgcXVlcnlfaW50ZXJmYWNlIGlzIG5vdCBpbXBvcnRhbnQgZm9yIHRo
aXMgY2FzZSwKLy8gYnV0IGhlcmUgZm9yIGNvbXBsZXRlbmVzcy4KbW9kdWxl
IEdOT01FIHsKICBpbnRlcmZhY2UgVW5rbm93biAKICB7CiAgICB2b2lkIHJl
ZigpOwogICAgdm9pZCB1bnJlZigpOwogICAgT2JqZWN0IHF1ZXJ5X2ludGVy
ZmFjZShpbiBzdHJpbmcgcmVwb2lkKTsKICB9Owp9OwogCgovLyBUaGVzZSBh
cmUgdGhlIGJpb2xvZ2ljYWwgb2JqZWN0cyB0aGF0IGFyZSBkZWZpbmVkOgov
LyAKLy8gMSkgVGhlcmUgYXJlIHRocmVlIGxldmVscyBvZiBvYmplY3QgZGVz
Y3JpYmluZyBiaW9sb2dpY2FsCi8vIHNlcXVlbmNlczogQW5vbnltb3VzU2Vx
LCBQcmltYXJ5U2VxIGFuZCBTZXEuIAovLwovLyAyKSBPYmplY3RzIHRoYXQg
ZGVzY3JpYmUgdGhlIGZlYXR1cmVzIGFuZCBsb2NhdGlvbnMgb2YgZmVhdHVy
ZXMgb24KLy8gYSBiaW9sb2dpY2FsIHNlcXVlbmNlOiBTZXFGZWF0dXJlIGFu
ZCBTZXFGZWF0dXJlTG9jYXRpb24uCi8vCi8vIDMpIFZlY3RvciBhbmQgaXRl
cmF0b3Igb2JqZWN0cyB0aGF0IGFsbG93IHVzIHRvIHByb2Nlc3MgbGlzdHMg
b2YKLy8gYmlvbG9naWNhbCBvYmplY3RzIGVhc2lseSBhbmQgYXJlIGRlc2ln
bmVkIGZvciBuZXR3b3JrIGFjY2VzczoKLy8gUHJpbWFyeVNlcUl0ZXJhdG9y
LCBQcmltYXJ5U2VxVmVjdG9yLCBTZXFGZWF0dXJlSXRlcmF0b3IsCi8vIFNl
cUZlYXR1cmVWZWN0b3IsIFNlcUZlYXR1cmVMb2NhdGlvblZlY3RvciwKLy8g
U2VxRmVhdHVyZUxvY2F0aW9uSXRlcmF0b3IKLy8KLy8gNCkgVGhlcmUgYXJl
IHRocmVlIGxldmVscyBvZiBvYmplY3RzIGRlc2NyaWJpbmcgYmlvbG9naWNh
bAovLyBkYXRhYmFzZXM6IFByaW1hcnlTZXFEQiwgU2VxREIgYW5kIFVwZGF0
ZWFibGVTZXFEQi4gRWFjaCBvbmUKLy8gcHJvdmlkZXMgYSByaWNoZXIgbGV2
ZWwgb2YgZnVuY3Rpb25hbGl0eSB0aGFuIGl0cyBzdXBlcmNsYXNzLgovLwov
LyA1KSBBIGZhY3Rvcnkgb2JqZWN0IHRoYXQgY3JlYXRlcyBhbmQgbWFrZXMg
YXZhbGFpYmxlIGJpb2xvZ2ljYWwKLy8gZGF0YWJhc2Ugb2JqZWN0czogQmlv
RW52LgovLwovLyA2KSBBIGNvbGxlY3Rpb24gb2YgRXhjZXB0aW9ucyBmb3Ig
d2hlbiBlcnJvciBjb25kaXRpb25zIG9jY3VyLgoKLy8gVGhlIG9yZy5iaW9j
b3JiYS5zZXFjb3JlIHBhY2thZ2UgaXMgc28gd2UgbG9vayBnb29kIGluIEph
dmEuCi8vIE1ha2VzIHRoZSBDIGludGVyZmFjZSBuYW1lcyB3YWFhYWF5IHRv
byBsb25nIG9mIGNvdXJzZQoKbW9kdWxlIG9yZyB7CiAgbW9kdWxlIGJpb2Nv
cmJhIHsKICAgIG1vZHVsZSBzZXFjb3JlIAogICAgewogICAgICAvLyAqKiog
RVhDRVBUSU9OUyAqKioKCiAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gd2hl
biB0aGUgc2l6ZSBvZiB0aGUgb2JqZWN0IHJlcXVlc3RlZCBpcwogICAgICAv
LyBsYXJnZXIgdGhhbiB0aGUgc2VydmVyIHdpbGwgYWxsb3cuCiAgICAgIGV4
Y2VwdGlvbiBSZXF1ZXN0VG9vTGFyZ2UgeyBzdHJpbmcgcmVhc29uOyBsb25n
IHN1Z2dlc3RlZF9zaXplOyB9OyAKCiAgICAgIC8vIEV4Y2VwdGlvbiB0aHJv
d24gd2hlbiB2YWx1ZXMgc3BlY2lmaWVkIGFyZSBvdXRzaWRlIG9mIHRoZQog
ICAgICAvLyBhbGxvd2VkIHJhbmdlLgogICAgICBleGNlcHRpb24gT3V0T2ZS
YW5nZSB7IHN0cmluZyByZWFzb247IH07CgogICAgICAvLyBFeGNlcHRpb24g
dGhyb3duIHdoZW4gdGhlIG1ldGhvZCBoYXMgcmVhY2hlZCB0aGUgZW5kIG9m
IGEKICAgICAgLy8gc3RyZWFtLgogICAgICBleGNlcHRpb24gRW5kT2ZTdHJl
YW0geyB9OyAgICAgICAgICAgICAgICAgICAKCiAgICAgIC8vIEV4Y2VwdGlv
biB0aHJvd24gd2hlbiB0aGUgb2JqZWN0IG5lZWRzIHRvIGJlIHVwZGF0ZWQu
CiAgICAgIGV4Y2VwdGlvbiBOZWVkc1VwZGF0ZSB7IHN0cmluZyByZWFzb247
IH07CgogICAgICAvL0V4Y2VwdGlvbiB0aHJvd24gd2hlbiB0aGUgcmVxdWVz
dGVkIElEIGRvZXMgbm90IGV4aXN0IGluIGEKICAgICAgLy9kYXRhYmFzZS4K
ICAgICAgZXhjZXB0aW9uIERvZXNOb3RFeGlzdCB7IHN0cmluZyByZWFzb247
IH07CgogICAgICAvLyBBIGdlbmVyYWwgZXhjZXB0aW9uIHRocm93biBmb3Ig
b3RoZXIgZXJyb3IgY29uZGl0aW9ucy4KICAgICAgZXhjZXB0aW9uIFVuYWJs
ZVRvUHJvY2VzcyB7IHN0cmluZyByZWFzb247IH07IAogCgogICAgICAvLyAq
KiogU0lNUExFIFRZUEVERUZTICoqKgoKICAgICAgLy8gRGVmaW5lIGFuIGFy
cmF5IG9mIHN0cmluZyBvYmplY3RzLgogICAgICB0eXBlZGVmIHNlcXVlbmNl
PHN0cmluZz4gU3RyaW5nTGlzdDsKIAogICAgICAvLyBEZWZpbmUgYW4gYXJy
YXkgb2YgbG9uZyB0eXBlcwogICAgICB0eXBlZGVmIHNlcXVlbmNlPGxvbmc+
IExvbmdMaXN0OwoKCiAgICAgIC8vICoqKiBHRU5FUkFMIE9CSkVDVFMgKioq
KgoKICAgICAgLy8gRGVmaW5lIGEgc3RydWN0IHRvIGhvbGQgYSBOYW1lLVZh
bHVlcyBwcm9wZXJ0eSBvYmplY3QuIFRoZQogICAgICAvLyBOYW1lVmFsdWVT
ZXQgaXMgdXNlZCB0byBob2xkIHN0cnVjdHVyZWQgYW5ub3RhdGlvbi4KICAg
ICAgc3RydWN0IE5hbWVWYWx1ZVNldCAKICAgICAgewoJLy8gVGhlIG5hbWUg
b2YgdGhlIHByb3BlcnR5LgoJc3RyaW5nIG5hbWU7CgoJLy8gVGhlIHZhbHVl
cyBvZiB0aGUgbmFtZWQgcHJvcGVydHkuCglTdHJpbmdMaXN0IHZhbHVlczsK
ICAgICAgfTsKIAogICAgICAvLyBEZWZpbmUgYW4gYXJyYXkgb2YgTmFtZS1W
YWx1ZXMgcHJvcGVydHkgb2JqZWN0cy4KICAgICAgdHlwZWRlZiBzZXF1ZW5j
ZTxOYW1lVmFsdWVTZXQ+IE5hbWVWYWx1ZVNldExpc3Q7CiAKCiAgICAgIC8v
ICoqKiBCSU9MT0dJQ0FMIFNFUVVFTkNFIE9CSkVDVFMgKioqKgoKICAgICAg
Ly8gRGVmaW5lIHR5cGUgY29kZXMgZm9yIHRoZSBkaWZmZXJlbnQgdHlwZXMg
b2YgYmlvbG9naWNhbAogICAgICAvLyBzZXF1ZW5jZS4gQXMgbG9uZyBhcyB0
aGUgbnVtZXJpY2FsIHZhbHVlcyBmb3IgcHJldmlvdXNseQogICAgICAvLyBk
ZWNsYXJlZCB0eXBlcyBkbyBub3QgY2hhbmdlLCB0aGVuIG5ldyB0eXBlcyBt
YXkgYmUgYWRkZWQKICAgICAgLy8gd2l0aG91dCB0aGUgcmlzayBvZiBjbGll
bnRzIHVzaW5nIGFuIG9sZGVyIHZlcnNpb24gYnJlYWtpbmcuCiAgICAgIC8v
CiAgICAgIC8vRW51bXMgaGF2ZSBiZWVuIHJlbW92ZWQgc2luY2UgdGhleSBj
YW4gbGVhZCB0byBleGFjdGx5IHRoZXNlCiAgICAgIC8vcHJvYmxlbXMgZm9y
IGNsaWVudCBhcHBsaWNhdGlvbnMgd2hlbiB0aGUgSURMIGlzIGV4dGVuZGVk
LiBUaGUKICAgICAgLy9uZXcgJ2NvbnN0JyB2YWx1ZXMgYXJlIGNvbnNpc3Rl
bnQgd2l0aCB0aGUgcHJldmlvdXMgZW51bQogICAgICAvL3ZhbHVlcy4KICAg
ICAgaW50ZXJmYWNlIFNlcVR5cGUgCiAgICAgIHsKCS8vVHlwZSBjb2RlcyBm
b3IgZGlmZmVyZW50IHR5cGVzIG9mIGJpb2xvZ2ljYWwgc2VxdWVuY2UuCglj
b25zdCBzaG9ydCBQUk9URUlOID0gMDsKCWNvbnN0IHNob3J0IEROQSA9IDE7
Cgljb25zdCBzaG9ydCBSTkEgPSAyOwoKCS8vIFJlcHJlc2VudHMgYW55dGhp
bmcgdGhhdCBpcyBvZiB1bmtub3duIHR5cGUuCgljb25zdCBzaG9ydCBVTktO
T1dOID0gLTE7CiAgICAgIH07CiAKCiAgICAgIC8vIEludGVyZmFjZSBmb3Ig
YW4gdWx0cmEgbGlnaHR3ZWlnaHQgYmlvbG9naWNhbCBzZXF1ZW5jZSBvYmpl
Y3QuCiAgICAgIC8vIEFub255bW91c1NlcSBpcyB0aGUgc2VxdWVuY2UgaW5m
b3JtYXRpb24gb25seS4KICAgICAgaW50ZXJmYWNlIEFub255bW91c1NlcSA6
IEdOT01FOjpVbmtub3duIAogICAgICB7CgkvLyBSZXR1cm4gdGhlIHR5cGUg
b2YgdGhlIGJpb2xvZ2ljYWwgc2VxdWVuY2UsIGUuZy4gUFJPVEVJTiwKCS8v
IFJOQSwgRE5BLCBldGMuIGFzIGRlZmluZWQgdXNpbmcgdGhlIHR5cGUgY29k
ZXMgZGVjbGFyZWQgaW4KCS8vIHRoZSBTZXFUeXBlIGludGVyZmFjZS4KCXNo
b3J0IHR5cGUoKTsgCgoJLy8gUmV0dXJuIHdoZXRoZXIgdGhlIGJpb2xvZ2lj
YWwgc2VxdWVuY2UgaXMgY2lyY3VsYXIgb3IKCS8vIGxpbmVhci4KCWJvb2xl
YW4gaXNfY2lyY3VsYXIoKTsKCgkvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0
aGUgYmlvbG9naWNhbCBzZXF1ZW5jZS4KCWxvbmcgbGVuZ3RoKCk7CgoJLy8g
UmV0dXJuIHRoZSBiaW9sb2dpY2FsIHNlcXVlbmNlIGFzIGEgc3RyaW5nLgoJ
c3RyaW5nIHNlcSgpIAoJICByYWlzZXMgKFJlcXVlc3RUb29MYXJnZSk7CgoJ
Ly8gUmV0dXJuIGEgc3ViLXN0cmluZyBvZiB0aGUgYmlvbG9naWNhbCBzZXF1
ZW5jZS4gVGhlIHN0YXJ0CgkvLyBhbmQgZW5kIHZhbHVlcyBhcmUgaW4gYmlv
bG9naWNhbCBjb29yZGluYXRlcywgaWUsIDEtMiBhcmUKCS8vIHRoZSBmaXJz
dCB0d28gYmFzZXMuCglzdHJpbmcgc3Vic2VxKGluIGxvbmcgc3RhcnQsCgkJ
ICAgICAgaW4gbG9uZyBlbmQpIAoJICByYWlzZXMgKE91dE9mUmFuZ2UsCgkJ
ICBSZXF1ZXN0VG9vTGFyZ2UpOwogICAgICB9OwogCgogICAgICAvLyBJbnRl
cmZhY2UgZm9yIGEgbGlnaHR3ZWlnaHQgYmlvbG9naWNhbCBzZXF1ZW5jZSBv
YmplY3QuIEEKICAgICAgLy8gUHJpbWFyeVNlcXVlbmNlIG9iamVjdCByZXBy
ZXNlbnRzIGp1c3QgdGhlIHNlcXVlbmNlCiAgICAgIC8vIGluZm9ybWF0aW9u
IGFuZCBpZGVudGl0eSBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBwcm9jZXNz
IHRoZQogICAgICAvLyBzZXF1ZW5jZSwgc3RvcmUgcmVzdWx0cywgZXRjLgog
ICAgICAvLwogICAgICAvLyBQcmltYXJ5U2VxIGRlZmluZXMgdGhyZWUgZGlm
ZmVyZW50IHR5cGVzIG9mIElELCB3aGljaCBtYXkgYWxsCiAgICAgIC8vIGhh
dmUgdGhlIGlkZW50aWNhbCB2YWx1ZS4KICAgICAgaW50ZXJmYWNlIFByaW1h
cnlTZXEgOiBBbm9ueW1vdXNTZXEgCiAgICAgIHsKCS8vIFJldHVybiB0aGUg
SUQgdG8gYmUgdXNlZCBmb3IgZGlzcGxheSBwdXJwb3Nlcy4KCXN0cmluZyBk
aXNwbGF5X2lkKCk7CgoJLy8gUmV0dXJuIHRoZSBJRCB0byB1c2VkIGFzIGEg
dW5pcXVlIElEIGZvciB0aGlzIHNlcXVlbmNlLAoJLy8gZS5nLiB0aGUgYWNj
ZXNzaW9uIG51bWJlciBvciB0aGUgYnl0ZSBwb3NpdGlvbi9maWxlIG11bmdl
ZAoJLy8gaW50byBhIHN0cmluZy4KCXN0cmluZyBwcmltYXJ5X2lkKCk7ICAg
ICAgICAKCgkvLyBSZXR1cm4gdGhlIHVuaXF1ZSBJRCBmb3IgdGhlIFByaW1h
cnlTZXEgaW4gaXRzIGJpb2xvZ2ljYWwKCS8vIGRhdGFiYXNlLgoJc3RyaW5n
IGFjY2Vzc2lvbl9udW1iZXIoKTsgIAoJCgkvLyBSZXR1cm4gdGhlICh1bnN0
YWJsZSkgdmVyc2lvbiBudW1iZXIgZm9yIHRoZSBzZXF1ZW5jZS4gVGhpcwoJ
Ly8gaXMgMCBmb3IgUHJpbWFyeVNlcSBvYmplY3RzIHRoYXQgZG8gbm90IGhh
dmUgYSB2ZXJzaW9uCgkvLyBudW1iZXIuCglsb25nIHZlcnNpb24oKTsgICAg
CiAgICAgIH07CiAKICAgICAgLy8gRGVmaW5lIGFuIGFycmF5IG9mIFByaW1h
cnlTZXEgb2JqZWN0cy4KICAgICAgdHlwZWRlZiBzZXF1ZW5jZTxQcmltYXJ5
U2VxPiBQcmltYXJ5U2VxTGlzdDsKIAoKICAgICAgLy8gRm9yd2FyZCBkZWNs
YXJhdGlvbiBvZiBTZXFGZWF0dXJlVmVjdG9yIG9iamVjdC4KICAgICAgaW50
ZXJmYWNlIFNlcUZlYXR1cmVWZWN0b3I7CiAKICAgICAgLy8gSW50ZXJmYWNl
IGZvciBhIGJpb2xvZ2ljYWwgc2VxdWVuY2Ugb2JqZWN0LiBOb3RpY2UgdGhh
dCB0aGUKICAgICAgLy8gU2VxIG9iamVjdCBib3RoIGluaGVyaWV0cyBmcm9t
IHRoZSBQcmltYXJ5U2VxIGludGVyZmFjZSBhbmQKICAgICAgLy8gYWxzbyBo
YXMtYSBQcmltYXJ5U2VxIGludGVyZmFjZS4gVGhpcyBpcyBkZWxpYmVyYXRl
IHNvIHRoYXQgYQogICAgICAvLyBjbGllbnQgbWF5IGluZGljYXRlIHdoZW4g
dGhleSB3YW50IHRvIGRpc2NhcmQgYSBjb21wbGV0ZSBTZXEKICAgICAgLy8g
b2JqZWN0IHdpdGggU2VxRmVhdHVyZSBmZWF0dXJlcyBieSBmcmVlaW5nIGl0
LCB3aGlsc3QKICAgICAgLy8gcmV0YWluaW5nIGEgcmVmZXJlbmNlIHRvIGEg
bGlnaHR3ZWlnaHQgUHJpbWFyeVNlcSBvYmplY3QgZm9yCiAgICAgIC8vIGl0
LgogICAgICBpbnRlcmZhY2UgU2VxIDogUHJpbWFyeVNlcSAKICAgICAgewoJ
Ly8gUmV0dXJuIGEgU2VxRmVhdHVyZVZlY3RvciB0aGF0IGFsbG93cyBhY2Nl
c3MgdG8gYWxsIHRoZQoJLy8gU2VxRmVhdHVyZSBvYmplY3RzIGFsb25nIHRo
ZSBTZXEuIFRoZSAnc3ViX3NlcWZlYXR1cmVzJwoJLy8gZmxhZyBzcGVjaWZp
ZXMgd2hldGhlciB0byByZXR1cm4gYWxsIHN1Yi1TZXFGZWF0dXJlcyBvcgoJ
Ly8ganVzdCB0aGUgdG9wLWxldmVsIG9uZXMgKGMuZi4gQmlvOjpTZXFJIG9m
IGJpb3BlcmwpLgoJU2VxRmVhdHVyZVZlY3RvciBhbGxfU2VxRmVhdHVyZXMo
aW4gYm9vbGVhbiBzdWJfc2VxZmVhdHVyZXMpOwoJCgkvLyBSZXR1cm4gYSBT
ZXFGZWF0dXJlVmVjdG9yIHRoYXQgYWxsb3dzIGFjY2VzcyB0byBhbGwgdGhl
CgkvLyBTZXFGZWF0dXJlIG9iamVjdHMgYWxvbmcgdGhlIFNlcSBvZiBhIHBh
cnRpY3VsYXIgdHlwZSwKCS8vIGUuZy4gZXhvbi4gVGhlICdzdWJfc2VxZmVh
dHVyZXMnIGZsYWcgc3BlY2lmaWVzIHdoZXRoZXIgdG8KCS8vIHJldHVybiBh
bGwgc3ViLVNlcUZlYXR1cmVzIG9yIGp1c3QgdGhlIHRvcC1sZXZlbCBvbmVz
CgkvLyAoYy5mLiBCaW86OlNlcUkgb2YgYmlvcGVybCkuCglTZXFGZWF0dXJl
VmVjdG9yIGdldF9TZXFGZWF0dXJlc19ieV90eXBlKGluIGJvb2xlYW4gc3Vi
X3NlcWZlYXR1cmVzLAoJCQkJCQkgaW4gc3RyaW5nIHR5cGUpOwoJCgkvLyBS
ZXR1cm4gYSBTZXFGZWF0dXJlVmVjdG9yIHRoYXQgYWxsb3dzIGFjY2VzcyB0
byBhbGwgdGhlCgkvLyBTZXFGZWF0dXJlIG9iamVjdHMgYWxvbmcgdGhlIGdp
dmVuIHJhbmdlIG9mIHRoZSBTZXEuIFRoZQoJLy8gJ3N1Yl9zZXFmZWF0dXJl
cycgZmxhZyBzcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gYWxsCgkvLyBz
dWItU2VxRmVhdHVyZXMgb3IganVzdCB0aGUgdG9wLWxldmVsIG9uZXMgKGMu
Zi4gQmlvOjpTZXFJCgkvLyBvZiBiaW9wZXJsKS4KCVNlcUZlYXR1cmVWZWN0
b3IgZ2V0X1NlcUZlYXR1cmVzX2luX3JlZ2lvbihpbiBsb25nIHN0YXJ0LAoJ
CQkJCQkgICBpbiBsb25nIGVuZCwgCgkJCQkJCSAgIGluIGJvb2xlYW4gc3Vi
X3NlcWZlYXR1cmVzKSAKCSAgcmFpc2VzIChPdXRPZlJhbmdlKTsKCQoJLy8g
UmV0dXJuIGEgU2VxRmVhdHVyZVZlY3RvciB0aGF0IGFsbG93cyBhY2Nlc3Mg
dG8gYWxsIHRoZQoJLy8gU2VxRmVhdHVyZSBvYmplY3RzIGFsb25nIHRoZSBn
aXZlbiByYW5nZSBvZiB0aGUgU2VxIG9mIGEKCS8vIHBhcnRpY3VsYXIgdHlw
ZSwgZS5nLiBleG9uLiBUaGUgJ3N1Yl9zZXFmZWF0dXJlcycgZmxhZwoJLy8g
c3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIGFsbCBzdWItU2VxRmVhdHVy
ZXMgb3IganVzdCB0aGUKCS8vIHRvcC1sZXZlbCBvbmVzIChjLmYuIEJpbzo6
U2VxSSBvZiBiaW9wZXJsKS4KCVNlcUZlYXR1cmVWZWN0b3IgZ2V0X1NlcUZl
YXR1cmVzX2luX3JlZ2lvbl9ieV90eXBlKGluIGxvbmcgc3RhcnQsCgkJCQkJ
CQkgICBpbiBsb25nIGVuZCwgCgkJCQkJCQkgICBpbiBib29sZWFuIHN1Yl9z
ZXFmZWF0dXJlcywKCQkJCQkJCSAgIGluIHN0cmluZyB0eXBlKSAKCSAgcmFp
c2VzIChPdXRPZlJhbmdlKTsKCQoJLy8gUmV0dXJuIGEgcmVmZXJlbmNlIHRv
IGEgUHJpbWFyeVNlcSBmb3IgdGhpcyBTZXEgb2JqZWN0LgoJLy8gVGhpcyBp
cyBzbyB0aGF0IGNsaWVudHMgbWF5IGFzayBzZXJ2ZXJzIGZvciBqdXN0IHRo
ZQoJLy8gc2VxdWVuY2UgYW5kIHRoZW4gZnJlZSB0aGUgU2VxIG9iamVjdCBh
bmQgYWxsIGl0cwoJLy8gYXNzb2NpYXRlZCBTZXFGZWF0dXJlIG9iamVjdHMu
CglQcmltYXJ5U2VxIGdldF9QcmltYXJ5U2VxKCk7IAogICAgICB9OyAgCiAK
ICAgICAgLy8gRGVmaW5lIGFuIGFycmF5IG9mIFNlcSBvYmplY3RzLgogICAg
ICB0eXBlZGVmIHNlcXVlbmNlPFNlcT4gU2VxTGlzdDsKIAoKICAgICAgLy8g
KioqIFNFUVVFTkNFIEZFQVRVUkUgT0JKRUNUUyAqKioKCiAgICAgIC8vIEEg
c3RydWN0IGRlY2xhcmluZyB0eXBlIGNvZGVzIGZvciBkaWZmZXJlbnQgdHlw
ZXMgb2YKICAgICAgLy8gZnV6emluZXNzIHBvc3NpYmxlIGZvciBhIHBvc2l0
aW9uIG9uIGEgYmlvbG9naWNhbCBzZXF1ZW5jZS4KICAgICAgaW50ZXJmYWNl
IEZ1enp5VHlwZUNvZGUgCiAgICAgIHsKCS8vIFBvc2l0aW9uIGlzICdleGFj
dCcuCgljb25zdCBzaG9ydCBFWEFDVCA9IDE7CgoJLy8gRXhhY3QgcG9zaXRp
b24gaXMgdW5rbm93biwgYnV0IGlzIHdpdGhpbiB0aGUgcmFuZ2UKCS8vIHNw
ZWNpZmllZCwgZS5nLiBmb3IgKCgxLjIpLi4xMDApLCB0aGUgcG9zaXRpb24g
aXMgMSBvciAyCgkvLyBmb3IgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBs
b2NhdGlvbi4KCWNvbnN0IHNob3J0IFdJVEhJTiA9IDI7CgoJLy8gRXhhY3Qg
cG9zaXRpb24gaXMgYmV0d2VlbiB0d28gb2YgdGhlIHBvc2l0aW9ucyBpbiB0
aGUgcmFuZ2UKCS8vIHNwZWNpZmllZCwgZS5nLiBmb3IgKDFeMiksIHRoZSBw
b3NpdGlvbiBpcyBiZXR3ZWVuIGJhc2VzIDEKCS8vIGFuZCAyLgoJY29uc3Qg
c2hvcnQgQkVUV0VFTiA9IDM7CgoJLy8gRXhhY3QgbG93ZXIgYm91bmRhcnkg
b2YgcG9zaXRpb24gaXMgdW5rbm93biwgYnV0IHByZXZpb3VzCgkvLyB0byB0
aGUgcG9zaXRpb24gc3BlY2lmaWVkLCBlLmcuIGZvciAoPDEwLi4xMDApLCB0
aGUKCS8vIHBvc2l0aW9uIHN0YXJ0cyBiZWZvcmUgMTAgZm9yIHRoZSBzdGFy
dCBwb3NpdGlvbiBvZiB0aGUKCS8vIGxvY2F0aW9uLgoJY29uc3Qgc2hvcnQg
QkVGT1JFID0gNDsKCgkvLyBFeGFjdCB1cHBlciBib3VuZGFyeSBvZiBwb3Np
dGlvbiBpcyB1bmtub3duLCBidXQgZm9sbG93aW5nCgkvLyB0aGUgcG9zaXRp
b24gc3BlY2lmaWVkLCBlLmcuIGZvciAoPjEwLi4xMDApLCB0aGUgcG9zaXRp
b24KCS8vIHN0YXJ0cyBhZnRlciAxMCBmb3IgdGhlIHN0YXJ0IHBvc2l0aW9u
IG9mIHRoZSBsb2NhdGlvbi4KCWNvbnN0IHNob3J0IEFGVEVSID0gNTsKICAg
ICAgfTsKIAoKICAgICAgLy8gQSBzdHJ1Y3QgZGVmaW5pbmcgdGhlIHByb3Bl
cnRpZXMgb2YgYSBwb3NpdGlvbiBvbiBhCiAgICAgIC8vIGJpb2xvZ2ljYWwg
c2VxdWVuY2UuCiAgICAgIHN0cnVjdCBTZXFGZWF0dXJlUG9zaXRpb24KICAg
ICAgewoJLy8gU3BlY2lmaWVzIHRoZSBwb3NpdGlvbiBvZiBhIFNlcUZlYXR1
cmUgb24gYSBiaW9sb2dpY2FsCgkvLyBzZXF1ZW5jZS4KCWxvbmcgcG9zaXRp
b247CgkKCS8vIFNwZWNpZmllcyB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBwb3Np
dGlvbiwgZS5nLiBmb3IKCS8vICgxLjMuLjEyKSwgdGhlIGV4dGVuc2lvbiBv
ZiB0aGUgc3RhcnQgcG9zaXRpb24gaXMgMi4gRm9yCgkvLyAoMS4uMTIpLCB0
aGUgZXh0ZW5zaW9uIG9mIGJvdGggdGhlIHN0YXJ0IGFuZCBlbmQgcG9zaXRp
b25zCgkvLyBpcyAwLgoJbG9uZyBleHRlbnNpb247CgoJLy8gU3BlY2lmaWVz
IHRoZSB0eXBlIGNvZGUgZGVzY3JpYmluZyB0aGUgZnV6enkgY2hhcmFjdGVy
IG9mCgkvLyB0aGUgcG9zaXRpb24gYXMgc3BlY2lmaWVkIGluIEZ1enp5VHlw
ZUNvZGUgaW50ZXJmYWNlLgoJc2hvcnQgZnV6enk7CiAgICAgIH07CiAKCiAg
ICAgIC8vIEEgc3RydWN0IGRlZmluaW5nIHRoZSBwcm9wZXJ0aWVzIG9mIGEg
U2VxRmVhdHVyZUxvY2F0aW9uCiAgICAgIC8vIG9iamVjdCB0aGF0IHNwZWNp
ZmllcyB0aGUgbG9jYXRpb24gb2YgYSBTZXFGZWF0dXJlIGFsb25nIGEKICAg
ICAgLy8gYmlvbG9naWNhbCBzZXF1ZW5jZSB1c2luZyBzdGFydCBhbmQgZW5k
IHBvc2l0aW9ucy4gVGhlc2UKICAgICAgLy8gcG9zaXRpb25zIG1heSBiZSAn
ZnV6enknLiBOLkIuIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUKICAgICAgLy8g
bG9jYXRpb24gJ2pvaW4oMS4uMTAsMjApJyBpcyBlcXVpdmFsZW50IHRvCiAg
ICAgIC8vICdqb2luKDEuLjEwLDIwLi4yMCknLgogICAgICBzdHJ1Y3QgU2Vx
RmVhdHVyZUxvY2F0aW9uIAogICAgICB7CgkvLyBTcGVjaWZpZXMgdGhlIChm
dXp6eSkgc3RhcnQgcG9zaXRpb24gb2YgYSBTZXFGZWF0dXJlIGFsb25nCgkv
LyBhIGJpb2xvZ2ljYWwgc2VxdWVuY2UuCglTZXFGZWF0dXJlUG9zaXRpb24g
c3RhcnQ7CgoJLy8gU3BlY2lmaWVzIHRoZSAoZnV6enkpIGVuZCBwb3NpdGlv
biBvZiBhIFNlcUZlYXR1cmUgYWxvbmcgYQoJLy8gYmlvbG9naWNhbCBzZXF1
ZW5jZS4KCVNlcUZlYXR1cmVQb3NpdGlvbiBlbmQ7CgoJLy8gU3BlY2lmaWNl
cyB3aGljaCBzdHJhbmQgb2YgdGhlIFNlcSB0aGUgU2VxRmVhdHVyZUxvY2F0
aW9uCgkvLyBsaWVzIG9uLiBWYWx1ZXM6IC0xLDAsMSBbLTEgPSByZXZlcnNl
OyAwID0gZWl0aGVyOyAxID0KCS8vIGZvcndhcmRdLiBJcnJlbGV2YW50IGZv
ciBwcm90ZWlucy4KCXNob3J0IHN0cmFuZDsgICAgICAgICAgCiAgICAgIH07
CiAKICAgICAgdHlwZWRlZiBzZXF1ZW5jZTxTZXFGZWF0dXJlTG9jYXRpb24+
IFNlcUZlYXR1cmVMb2NhdGlvbkxpc3Q7CgogCiAgICAgIC8vIERlZmluZSBh
IFNlcUZlYXR1cmUgb2JqZWN0LiBTZXFGZWF0dXJlcyBhcmUgZmVhdHVyZXMg
b24gYQogICAgICAvLyBzZXF1ZW5jZS4gVGhpcyBpcyBHRkYgY29tcGF0aWJs
ZS4gV2Ugc2hvdWxkIGluaGVyaXQgb2ZmCiAgICAgIC8vIFNlcUZlYXR1cmUg
Zm9yIG1vcmUgY29tcGxleCB0aGluZ3MuIFBsZWFzZSBpbmhlcml0IG9mZgog
ICAgICAvLyBTZXFGZWF0dXJlIGZvciB5b3VyIGZhdm91cnRpZSBmZWF0dXJl
IGV4dGVuc2lvbi4KICAgICAgaW50ZXJmYWNlIFNlcUZlYXR1cmUgOiBHTk9N
RTo6VW5rbm93biAKICAgICAgewoJLy8gUmV0dXJuIHRoZSB0eXBlIG9mIHRo
ZSBTZXFGZWF0dXJlLCBlLmcuIGV4b24sIHJlcGVhdCwgZXRjLgoJc3RyaW5n
IHR5cGUoKTsgICAgICAgICAgIAoKCS8vIFJldHVybiB0aGUgc291cmNlIG9m
IHRoZSBTZXFGZWF0dXJlLiBUaGlzIGlzIGluY2x1ZGVkCgkvLyBtYWlubHkg
Zm9yIEdGRiBjb21wYXRpYmlsaXR5LgoJc3RyaW5nIHNvdXJjZSgpOyAgICAg
ICAgIAoKCS8vIFJldHVybiB0aGUgcHJpbWFyeSBJRCBvZiB0aGUgU2VxIHRo
YXQgdGhpcyBTZXFGZWF0dXJlCgkvLyBiZWxvbmdzIHRvLgoJc3RyaW5nIHNl
cV9wcmltYXJ5X2lkKCk7IAoKCS8vIFJldHVybiB0aGUgc3RhcnQgaW4gYmlv
bG9naWNhbCBjb29yZGluYXRlcyBvZiB0aGUKCS8vIFNlcUZlYXR1cmUgb24g
dGhlIFNlcSAoMSBpcyB0aGUgZmlyc3QgYmFzZSkuCglsb25nIHN0YXJ0KCk7
ICAgICAgICAgICAgCgoJLy8gUmV0dXJuIHRoZSBlbmQgaW4gYmlvbG9naWNh
bCBjb29yZGluYXRlcyBvZiB0aGUgU2VxRmVhdHVyZQoJLy8gb24gdGhlIFNl
cSAoc3RhcnQ9MTplbmQ9MiBhcmUgdGhlIGZpcnN0IHR3byBiYXNlcykuCgls
b25nIGVuZCgpOyAgICAgICAgICAgICAgCgoJLy8gUmV0dXJuIHdoaWNoIHN0
cmFuZCBvZiB0aGUgU2VxIHRoZSBTZXFGZWF0dXJlIGxpZXMKCS8vIG9uLiBW
YWx1ZXM6IC0xLDAsMSBbLTEgPSByZXZlcnNlOyAwID0gZWl0aGVyL2JvdGg7
IDEgPQoJLy8gZm9yd2FyZF0uIElycmVsZXZhbnQgZm9yIHByb3RlaW5zLgoJ
c2hvcnQgc3RyYW5kKCk7ICAgICAgICAgIAoKCS8vIFJldHVybiBhZGRpdGlv
bmFsIGFubm90YXRpb24gZm9yIHRoZSBTZXFGZWF0dXJlIHdoaWNoIGlzCgkv
LyBzdG9yZWQgYXMgTmFtZS1WYWx1ZXMgcHJvcGVydHkgb2JqZWN0cy4KCU5h
bWVWYWx1ZVNldExpc3QgcXVhbGlmaWVycygpOyAKCQoJLy8gUmV0dXJuIGEg
U2VxRmVhdXJlVmVjdG9yIGFsbG93aW5nIGFjY2VzcyB0byByZWZlcmVuY2Vz
IHRvCgkvLyB0aGUgc3ViLVNlcUZlYXR1cmUgb2JqZWN0cyBvZiB0aGlzIFNl
cUZlYXR1cmUuIFRoaXMgaXMKCS8vIHNpbWlsYXIgdG8gaG93IGJpb3Blcmwg
d29ya3MuCglTZXFGZWF0dXJlVmVjdG9yIHN1Yl9TZXFGZWF0dXJlcygpOwoK
CS8vIFJldHVybiB0aGUgbG9jYXRpb24gb2YgdGhpcyBTZXFGZWF0dXJlIGFs
b25nIGl0cyBTZXEgdXNpbmcKCS8vIFNlcUZlYXR1cmVMb2NhdGlvbiBvYmpl
Y3RzLiBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IGJpb2phdmEKCS8vIHdvcmtz
LgoJLy8KCS8vIEZvciB1c2FiaWxpdHksIHRoZSBkZXNjcmlwdGlvbiBvZiBh
IGxvY2F0aW9uIGluIEJpb0NvcmJhIGlzCgkvLyBrZXB0IHNpbXBsZSBhbmQg
aGFuZGxlcyBvbmx5IGpvaW5lZCBsb2NhdGlvbnMuIEZvciBleGFtcGxlOgoJ
Ly8gICAoMS4uMTApIAoJLy8gICBqb2luKDEuLjEwLDIxLi4zMCwgLi4uKQoJ
Ly8gICBjb21wbGVtZW50KDEuLjEwKQoJLy8gICBqb2luKGNvbXBsZW1lbnQo
MS4uMTApLGNvbXBsZW1lbnQoMjEuLjMwKSwgLi4uKQoJLy8gICBqb2luKGNv
bXBsZW1lbnQoMS4uMTApLCgyMS4uMzApLCAuLi4pCgkvLwoJLy8gTi5CLiBU
aGUgcG9zaXRpb25zIG9mIHRoZSBzdGFydCBhbmQgZW5kIHBvaW50cyBtYXkg
YmUKCS8vIGZ1enp5LgoJLy8KCS8vIElmIHRoZSBsb2NhdGlvbiBvZiBhIFNl
cUZlYXR1cmUgY2Fubm90IGJlIGRlc2NyaWJlZCBieSB0aGlzCgkvLyBzaW1w
bGUgbW9kZWwgKGUuZy4gaXQgdXNlcyBvdGhlciBvcGVyYXRvcnMgc3VjaCBh
cyAnZ3JvdXAnLAoJLy8gJ29uZS1vZicgb3IgJ29yZGVyJyksIHRoZW4gYW4g
J1VuYWJsZVRvUHJvY2VzcycgZXhjZXB0aW9uIGlzCgkvLyB0aHJvd24uIFRo
ZSBFeGNlcHRpb24gZGVzY3JpcHRpb24gc3RyaW5nIG1heSByZXR1cm4gdGhl
CgkvLyBhY3R1YWwgbG9jYXRpb24gYXMgYSBzdHJpbmcgZm9yIHBhcnNpbmcg
YnkgYSBjbGllbnQuCglTZXFGZWF0dXJlTG9jYXRpb25MaXN0IGxvY2F0aW9u
cygpCgkgIHJhaXNlcyAoVW5hYmxlVG9Qcm9jZXNzKTsKCgkvLyBEZXRlcm1p
bmUgaWYgdGhlIFByaW1hcnlTZXEgZm9yIHRoaXMgU2VxRmVhdHVyZSBpcwoJ
Ly8gYXZhaWxhYmxlLgoJYm9vbGVhbiBQcmltYXJ5U2VxX2lzX2F2YWlsYWJs
ZSgpOyAgCgkKCS8vIFJldHVybiB0aGUgUHJpbWFyeVNlcSBmb3IgdGhpcyBT
ZXFGZWF0dXJlLCBpZiBpdCBpcwoJLy8gYXZhaWxhYmxlLgoJUHJpbWFyeVNl
cSBnZXRfUHJpbWFyeVNlcSgpIAoJICByYWlzZXMgKFVuYWJsZVRvUHJvY2Vz
cyk7IAogICAgICB9OwogCgogICAgICAvLyAqKiogSVRFUkFUT1JTIEZPUiBC
SU9MT0dJQ0FMIE9CSkVDVFMgKioqCgogICAgICAvLyBBbiBpbnRlcmZhY2Ug
dG8gYW4gaXRlcmF0b3IgZm9yIFByaW1hcnlTZXEgb2JqZWN0cy4KICAgICAg
aW50ZXJmYWNlIFByaW1hcnlTZXFJdGVyYXRvciA6IEdOT01FOjpVbmtub3du
IAogICAgICB7CgkvLyBSZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIG5leHQg
UHJpbWFyeVNlcSBvYmplY3QgaW4gdGhpcwoJLy8gUHJpbWFyeVNlcUl0ZXJh
dG9yLgoJUHJpbWFyeVNlcSBuZXh0KCkgCgkgIHJhaXNlcyAoRW5kT2ZTdHJl
YW0pOwoKCS8vIFJldHVybiB3aGV0aGVyIHRoaXMgUHJpbWFyeVNlcUl0ZXJh
dG9yIGNhbiByZXR1cm4gYW5vdGhlcgoJLy8gUHJpbWFyeVNlcSBvYmpldnQu
Cglib29sZWFuIGhhc19tb3JlKCk7IAogICAgICB9OwogCgogICAgICAvLyBB
biBpbnRlcmZhY2UgdG8gYW4gaXRlcmF0b3IgZm9yIFNlcUZlYXR1cmUgb2Jq
ZWN0cy4KICAgICAgaW50ZXJmYWNlIFNlcUZlYXR1cmVJdGVyYXRvciA6IEdO
T01FOjpVbmtub3duIAogICAgICB7CgkvLyBSZXR1cm4gdGhlIG5leHQgU2Vx
RmVhdHVyZSBpbiB0aGlzIFNlcUZlYXR1cmVJdGVyYXRvci4KCVNlcUZlYXR1
cmUgbmV4dCgpIAoJICByYWlzZXMgKEVuZE9mU3RyZWFtKTsKCgkvLyBSZXR1
cm4gd2hldGhlciB0aGlzIFNlcUZlYXR1cmVJdGVyYXRvciBjYW4gcmV0dXJu
IGFub3RoZXIKCS8vIFNlcUZlYXR1cmUgb2JqZWN0LgoJYm9vbGVhbiBoYXNf
bW9yZSgpOwogICAgICB9OwogCgogICAgICAvLyAqKiogVkVDVE9SUyBGT1Ig
QklPTE9HSUNBTCBPQkpFQ1RTICoqKgoKICAgICAgLy8gQW4gaW50ZXJmYWNl
IHRvIGEgdmVjdG9yIG9mIFByaW1hcnlTZXEgb2JqZWN0cy4KICAgICAgaW50
ZXJmYWNlIFByaW1hcnlTZXFWZWN0b3IgOiBHTk9NRTo6VW5rbm93bgogICAg
ICB7CgkvLyBSZXR1cm4gdGhlIG51bWJlciBvZiBQcmltYXJ5U2VxIG9iamVj
dHMgaW4gdGhpcwoJLy8gdmVjdG9yLiBPcHRpb25hbCBpbXBsZW1lbnRhdGlv
bi4KCWxvbmcgc2l6ZSgpOwoKCS8vIFJldHVybiB0aGUgUHJpbWFyeVNlcSBv
YmplY3QgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIGluIHRoaXMKCS8vIFByaW1h
cnlTZXFWZWN0b3IuIE9wdGlvbmFsIGltcGxlbWVudGF0aW9uLgoJUHJpbWFy
eVNlcSBlbGVtZW50QXQoaW4gbG9uZyBpbmRleCkKCSAgcmFpc2VzIChPdXRP
ZlJhbmdlKTsKCgkvLyBSZXR1cm4gYW4gaXRlcmF0b3IgZm9yIHRoZSBQcmlt
YXJ5U2Vxb2JqZWN0cyBpbiB0aGlzCgkvLyBQcmltYXJ5U2VxVmVjdG9yLgoJ
UHJpbWFyeVNlcUl0ZXJhdG9yIGl0ZXJhdG9yKCk7CiAgICAgIH07CiAKCiAg
ICAgIC8vIEFuIGludGVyZmFjZSB0byBhIHZlY3RvciBvZiBTZXFGZWF0dXJl
IG9iamVjdHMuCiAgICAgIGludGVyZmFjZSBTZXFGZWF0dXJlVmVjdG9yIDog
R05PTUU6OlVua25vd24KICAgICAgewoJLy8gUmV0dXJuIHRoZSBudW1iZXIg
b2YgU2VxRmVhdHVyZSBvYmplY3RzIGluIHRoaXMKCS8vIFNlcUZlYXR1cmVW
ZWN0b3IuIE9wdGlvbmFsIGltcGxlbWVudGF0aW9uLgoJbG9uZyBzaXplKCk7
CgoJLy8gUmV0dXJuIHRoZSBTZXFGZWF0dXJlIG9iamVjdCBhdCB0aGUgZ2l2
ZW4gcG9zaXRpb24gaW4gdGhpcwoJLy8gU2VxRmVhdHVyZVZlY3Rvci4gT3B0
aW9uYWwgaW1wbGVtZW50YXRpb24uCglTZXFGZWF0dXJlIGVsZW1lbnRBdChp
biBsb25nIGluZGV4KQoJICByYWlzZXMgKE91dE9mUmFuZ2UpOwoKCS8vIFJl
dHVybiBhbiBpdGVyYXRvciBmb3IgdGhlIFNlcUZlYXR1cmUgb2JqZWN0cyBp
biB0aGlzCgkvLyBTZXFGZWF0dXJlVmVjdG9yLgoJU2VxRmVhdHVyZUl0ZXJh
dG9yIGl0ZXJhdG9yKCk7CiAgICAgIH07CiAKCiAgICAgIC8vICoqKiBCSU9M
T0dJQ0FMIFNFUVVFTkNFIERBVEFCQVNFIE9CSkVDVFMgKioqKgoKICAgICAg
Ly8gRGVmaW5lIGEgUHJpbWFyeVNlcURCIG9iamVjdC4gUHJpbWFyeVNlcURC
IHByb3ZpZGVzIGFuCiAgICAgIC8vIGludGVyZmFjZSB0byBhIGRhdGFiYXNl
IHRoYXQgc2VydmVzIFByaW1hcnlTZXEgb2JqZWN0cy4gSXQKICAgICAgLy8g
Y2FuIGJlIHF1ZXJpZWQgYnkgc2VxdWVuY2UgYWNjZXNzaW9uIG51bWJlciBh
bmQgcmV0dXJuCiAgICAgIC8vIFByaW1hcnlTZXEgb2JqZWN0cyBhbmQgdmVj
dG9ycy4KICAgICAgaW50ZXJmYWNlIFByaW1hcnlTZXFEQiA6IEdOT01FOjpV
bmtub3duIAogICAgICB7CgkvLyBSZXR1cm4gdGhlIG5hbWUgb2YgdGhpcyBk
YXRhYmFzZS4KCXN0cmluZyBuYW1lKCk7ICAgICAKCgkvLyBSZXR1cm4gdGhl
IHZlcnNpb24gb2YgdGhpcyBkYXRhYmFzZS4KCWxvbmcgdmVyc2lvbigpOyAK
CQoJLy8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGxhcmdlc3Qgc3RyaW5n
IGZvciBhIGJpb2xvZ2ljYWwKCS8vIHNlcXVlbmNlIHRoYXQgY2FuIGJlIHJl
dHVybmVkIGJ5IHRoaXMgc2VydmVyLgoJbG9uZyBtYXhfc2VxdWVuY2VfbGVu
Z3RoKCk7IAoKCS8vIFJldHVybiBhIHJlZmVyZW5jZSB0byBhIFByaW1hcnlT
ZXEgb2JqZWN0IHdpdGggdGhlIGdpdmVuCgkvLyBhY2Nlc3Npb24gbnVtYmVy
IGluIHRoaXMgZGF0YWJhc2UuIElmIHRoZSBzZXF1ZW5jZSB2ZXJzaW9uCgkv
LyBpcyB1bmtub3duLCBvciB0aGUgbGF0ZXN0IHZlcnNpb24gaXMgcmVxdWly
ZWQsIHRoZW4gc3BlY2lmeQoJLy8gdmVyc2lvbiBpcyAnMCcuCglQcmltYXJ5
U2VxIGdldF9QcmltYXJ5U2VxKGluIHN0cmluZyBhY2Nlc3Npb25fbnVtYmVy
LCAKCQkJCSAgaW4gbG9uZyB2ZXJzaW9uKSAKCSAgcmFpc2VzIChEb2VzTm90
RXhpc3QpOwoKCS8vIFJldHVybiBhIHJlZmVyZW5jZSB0byBhIFByaW1hcnlT
ZXFWZWN0b3IgdGhhdCBtYXkgYmUgdXNlZAoJLy8gdG8gYWNjZXNzIGFsbCB0
aGUgUHJpbWFyeVNlcSBvYmplY3RzIGluIHRoaXMgZGF0YWJhc2UuCglQcmlt
YXJ5U2VxVmVjdG9yIGdldF9QcmltYXJ5U2VxVmVjdG9yKCk7IAogICAgICB9
OwogCgogICAgICAvLyBEZWZpbmUgYSBTZXFEQiBvYmplY3QuIFNlcURCIHBy
b3ZpZGVzIGFuIGludGVyZmFjZSB0byBhCiAgICAgIC8vIGRhdGFiYXNlIHRo
YXQgc2VydmVzIFNlcSBvYmplY3RzLiBJdCBjYW4gYmUgcXVlcmllZCBieQog
ICAgICAvLyBzZXF1ZW5jZSBhY2Nlc3Npb24gbnVtYmVyIGFuZCByZXR1cm4g
U2VxIG9iamVjdHMuCiAgICAgIGludGVyZmFjZSBTZXFEQiA6IFByaW1hcnlT
ZXFEQiAKICAgICAgewoJLy8gUmV0dXJuIGEgcmVmZXJlbmNlIHRvIGEgU2Vx
IG9iamVjdCB3aXRoIHRoZSBnaXZlbiBhY2Nlc3Npb24KCS8vIG51bWJlciBp
biB0aGlzIGRhdGFiYXNlLiBJZiB0aGUgc2VxdWVuY2UgdmVyc2lvbiBpcwoJ
Ly8gdW5rbm93biwgb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIGlzIHJlcXVpcmVk
LCB0aGVuIHNwZWNpZnkKCS8vIHZlcnNpb24gaXMgJzAnLgoJU2VxIGdldF9T
ZXEoaW4gc3RyaW5nIGFjY2Vzc2lvbl9udW1iZXIsIAoJCSAgICBpbiBsb25n
IHZlcnNpb24pIAoJICByYWlzZXMgKERvZXNOb3RFeGlzdCk7IAoKCS8vIFJl
dHVybiBhIGxpc3Qgb2YgYWxsIHRoZSBhY2Nlc3Npb24gbnVtYmVycyBpbiB0
aGlzCgkvLyBkYXRhYmFzZS4KCVN0cmluZ0xpc3QgYWNjZXNzaW9uX251bWJl
cnMoKTsKICAgICAgfTsKIAoKICAgICAgLy8gQW4gaW50ZXJmYWNlIHRvIGEg
bXV0YWJsZSBiaW9sb2dpY2FsIHNlcXVlbmNlIGRhdGFiYXNlIHdoZXJlCiAg
ICAgIC8vIGl0IGlzIHBvc3NpYmxlIHRvIGFkZCwgcmVtb3ZlLCBvciB1cGRh
dGUgU2VxIGFuZCBQcmltYXJ5U2VxCiAgICAgIC8vIG9iamVjdHMuCiAgICAg
IGludGVyZmFjZSBVcGRhdGVhYmxlU2VxREIgOiBTZXFEQiAKICAgICAgewoJ
Ly8gV3JpdGUgbGlzdHMgb2YgdXBkYXRlZCwgYWRkZWQgYW5kIGRlYWQgU2Vx
IG9iamVjdHMgdG8gdGhpcwoJLy8gZGF0YWJhc2UuCgl2b2lkIHdyaXRlX1Nl
cShpbiBTZXFMaXN0IHVwZGF0ZWRTZXFzLCAKCQkgICAgICAgaW4gU2VxTGlz
dCBhZGRlZFNlcXMsCgkJICAgICAgIGluIFNlcUxpc3QgZGVhZFNlcXMpIAoJ
ICByYWlzZXMgKE5lZWRzVXBkYXRlLAoJCSAgVW5hYmxlVG9Qcm9jZXNzLCAK
CQkgIE91dE9mUmFuZ2UpOwoJCgkvLyBXcml0ZSBsaXN0cyBvZiB1cGRhdGVk
LCBhZGRlZCBhbmQgZGVhZCBQcmltYXJ5U2VxIG9iamVjdHMKCS8vIHRvIHRo
aXMgZGF0YWJhc2UuCgl2b2lkIHdyaXRlX1ByaW1hcnlTZXEoaW4gUHJpbWFy
eVNlcUxpc3QgdXBkYXRlZFNlcXMsIAoJCQkgICAgICBpbiBQcmltYXJ5U2Vx
TGlzdCBhZGRlZFNlcXMsCgkJCSAgICAgIGluIFByaW1hcnlTZXFMaXN0IGRl
YWRTZXFzKSAKCSAgcmFpc2VzIChOZWVkc1VwZGF0ZSwgCgkJICBVbmFibGVU
b1Byb2Nlc3MsIAoJCSAgT3V0T2ZSYW5nZSk7CiAgICAgIH07CiAKCiAgICAg
IC8vICoqKiBCSU9MT0dJQ0FMIFNFUVVFTkNFIERBVEFCQVNFIEZBQ1RPUlkg
T0JKRUNUICoqKgoKICAgICAgLy8gRGVmaW5lIGEgQmlvRW52IG9iamVjdC4g
VGhlIEJpb0VudiBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gYQogICAgICAv
LyBmYWN0b3J5IGZvciBQcmltYXJ5U2VxLCBTZXEgYW5kIFNlcURCIHJlZmVy
ZW5jZXMuIAogICAgICAvLwogICAgICAvLyBOb3RpY2UgdGhhdCB3ZSBhbGxv
dyBjb25jZXB0cyBsaWtlIGZpbGVuYW1lcyBoZXJlLiBJZiBzbwogICAgICAv
LyB3aXNoZWQsIHRoZSBzZXJ2ZXIgY2FuIHRocm93IGFuIGV4Y2VwdGlvbiBv
biBhbGwgdGhlIGZpbGVuYW1lCiAgICAgIC8vIGNvZGUgKGUuZy4gaWYgY2xp
ZW50IGlzIG9uIGEgZGlmZmVyZW50IG1hY2hpbmUgdG8gc2VydmVyKS4KICAg
ICAgaW50ZXJmYWNlIEJpb0VudiAKICAgICAgewoJLy8gUmV0dXJuIGEgUHJp
bWFyeVNlcVZlY3RvciBvYmplY3QgZ2VuZXJhdGVkIGJ5IHRoaXMgQmlvRW52
CgkvLyBmYWN0b3J5IGZyb20gdGhlIHNlcXVlbmNlcyBpbiB0aGUgbG9jYWwg
ZmlsZSBzcGVjaWZpZWQgaW4KCS8vIHRoZSBnaXZlbiBmb3JtYXQuIFRoZSBm
b3JtYXQgbWF5IGJlIGFuIGVtcHR5IHN0cmluZywgaW4KCS8vIHdoaWNoIGNh
c2UgdGhlIEJpb0VudiBmYWN0b3J5IGd1ZXNzZXMgdGhlIGZvcm1hdCwgYnV0
CgkvLyB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIGl0IGNhbm5vdCBkZXRlcm1p
bmUgaXQuCglQcmltYXJ5U2VxSXRlcmF0b3IgZ2V0X1ByaW1hcnlTZXFJdGVy
YXRvcl9mcm9tX2ZpbGUoaW4gc3RyaW5nIGZvcm1hdCwKCQkJCQkJCSAgICBp
biBzdHJpbmcgZmlsZW5hbWUpIAoJICByYWlzZXMgKFVuYWJsZVRvUHJvY2Vz
cyk7CgoJLy8gUmV0dXJuIGEgUHJpbWFyeVNlcSBvYmplY3QgZ2VuZXJhdGVk
IGJ5IHRoaXMgQmlvRW52IGZhY3RvcnkKCS8vIGZyb20gdGhlIHNlcXVlbmNl
IGluIHRoZSBsb2NhbCBmaWxlIHNwZWNpZmllZCBpbiB0aGUgZ2l2ZW4KCS8v
IGZvcm1hdC4KCVByaW1hcnlTZXEgZ2V0X1ByaW1hcnlTZXFfZnJvbV9maWxl
KGluIHN0cmluZyBmb3JtYXQsCgkJCQkJICAgIGluIHN0cmluZyBmaWxlbmFt
ZSkgCgkgIHJhaXNlcyAoVW5hYmxlVG9Qcm9jZXNzKTsKCQoJLy8gUmV0dXJu
IGEgU2VxIG9iamVjdCBnZW5lcmF0ZWQgYnkgdGhpcyBCaW9FbnYgZmFjdG9y
eSBmcm9tCgkvLyB0aGUgc2VxdWVuY2UgaW4gdGhlIGxvY2FsIGZpbGUgc3Bl
Y2lmaWVkIGluIHRoZSBnaXZlbgoJLy8gZm9ybWF0LgoJU2VxIGdldF9TZXFf
ZnJvbV9maWxlKGluIHN0cmluZyBmb3JtYXQsCgkJCSAgICAgIGluIHN0cmlu
ZyBmaWxlbmFtZSkKCSAgcmFpc2VzIChVbmFibGVUb1Byb2Nlc3MpOwoKCS8v
IFJldHVybiBhIGxpc3Qgb2YgdGhlIG5hbWVzIG9mIHRoZSBkYXRhYmFzZXMg
YXZhaWxhYmxlIGZyb20KCS8vIHRoaXMgQmlvRW52IHNlcnZlci4KCVN0cmlu
Z0xpc3QgZ2V0X1NlcURCX25hbWVzKCk7CgoJLy8gUmV0dXJuIGEgbGlzdCBv
ZiB0aGUgYXZhaWxhYmxlIHZlcnNpb25zIG9mIGEgZGF0YWJhc2Ugd2l0aAoJ
Ly8gdGhlIGdpdmVuIG5hbWUuCglMb25nTGlzdCBnZXRfU2VxREJfdmVyc2lv
bnMgKGluIHN0cmluZyBuYW1lKQoJICByYWlzZXMgKERvZXNOb3RFeGlzdCk7
CgoJLy8gUmV0dXJuIGEgU2VxREIgcmVmZXJlbmNlIGZvciB0aGUgZGF0YWJh
c2Ugd2l0aCB0aGUgZ2l2ZW4KCS8vIG5hbWUgYW5kIHZlcnNpb24uIFRoZSAn
dmVyc2lvbicgbWF5IGJlICcwJywgaW4gd2hpY2ggY2FzZQoJLy8gdGhlIGxh
dGVzdCB2ZXJzaW9uIG9mIHRoZSBkYXRhYmFzZSBpcyByZXR1cm5lZC4KCVNl
cURCIGdldF9TZXFEQl9ieV9uYW1lKGluIHN0cmluZyBuYW1lLAoJCQkJaW4g
bG9uZyB2ZXJzaW9uKQoJICByYWlzZXMgKERvZXNOb3RFeGlzdCk7CiAgICAg
IH07ICAgIAogICAgfTsKICB9Owp9OyAKCg==
--8445424-9746-973683617=:100
Content-Type: APPLICATION/octet-stream; name="BioCorba-0.2_Stripped.idl"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.WNT.4.05.10011081140171.100@medusa.ebi.ac.uk>
Content-Description:
Content-Disposition: attachment; filename="BioCorba-0.2_Stripped.idl"
Cgptb2R1bGUgR05PTUUgewogIGludGVyZmFjZSBVbmtub3duIAogIHsKICAg
IHZvaWQgcmVmKCk7CiAgICB2b2lkIHVucmVmKCk7CiAgICBPYmplY3QgcXVl
cnlfaW50ZXJmYWNlKGluIHN0cmluZyByZXBvaWQpOwogIH07Cn07CiAKCgoK
bW9kdWxlIG9yZyB7CiAgbW9kdWxlIGJpb2NvcmJhIHsKICAgIG1vZHVsZSBz
ZXFjb3JlIAogICAgewoKICAgICAgZXhjZXB0aW9uIFJlcXVlc3RUb29MYXJn
ZSB7IHN0cmluZyByZWFzb247IGxvbmcgc3VnZ2VzdGVkX3NpemU7IH07IAoK
ICAgICAgZXhjZXB0aW9uIE91dE9mUmFuZ2UgeyBzdHJpbmcgcmVhc29uOyB9
OwoKICAgICAgZXhjZXB0aW9uIEVuZE9mU3RyZWFtIHsgfTsgICAgICAgICAg
ICAgICAgICAgCgogICAgICBleGNlcHRpb24gTmVlZHNVcGRhdGUgeyBzdHJp
bmcgcmVhc29uOyB9OwoKICAgICAgZXhjZXB0aW9uIERvZXNOb3RFeGlzdCB7
IHN0cmluZyByZWFzb247IH07CgogICAgICBleGNlcHRpb24gVW5hYmxlVG9Q
cm9jZXNzIHsgc3RyaW5nIHJlYXNvbjsgfTsgCiAKCgogICAgICB0eXBlZGVm
IHNlcXVlbmNlPHN0cmluZz4gU3RyaW5nTGlzdDsKIAogICAgICB0eXBlZGVm
IHNlcXVlbmNlPGxvbmc+IExvbmdMaXN0OwoKCgogICAgICBzdHJ1Y3QgTmFt
ZVZhbHVlU2V0IAogICAgICB7CglzdHJpbmcgbmFtZTsKCglTdHJpbmdMaXN0
IHZhbHVlczsKICAgICAgfTsKIAogICAgICB0eXBlZGVmIHNlcXVlbmNlPE5h
bWVWYWx1ZVNldD4gTmFtZVZhbHVlU2V0TGlzdDsKIAoKCiAgICAgIGludGVy
ZmFjZSBTZXFUeXBlIAogICAgICB7Cgljb25zdCBzaG9ydCBQUk9URUlOID0g
MDsKCWNvbnN0IHNob3J0IEROQSA9IDE7Cgljb25zdCBzaG9ydCBSTkEgPSAy
OwoKCWNvbnN0IHNob3J0IFVOS05PV04gPSAtMTsKICAgICAgfTsKIAoKICAg
ICAgaW50ZXJmYWNlIEFub255bW91c1NlcSA6IEdOT01FOjpVbmtub3duIAog
ICAgICB7CglzaG9ydCB0eXBlKCk7IAoKCWJvb2xlYW4gaXNfY2lyY3VsYXIo
KTsKCglsb25nIGxlbmd0aCgpOwoKCXN0cmluZyBzZXEoKSAKCSAgcmFpc2Vz
IChSZXF1ZXN0VG9vTGFyZ2UpOwoKCXN0cmluZyBzdWJzZXEoaW4gbG9uZyBz
dGFydCwKCQkgICAgICBpbiBsb25nIGVuZCkgCgkgIHJhaXNlcyAoT3V0T2ZS
YW5nZSwKCQkgIFJlcXVlc3RUb29MYXJnZSk7CiAgICAgIH07CiAKCiAgICAg
IGludGVyZmFjZSBQcmltYXJ5U2VxIDogQW5vbnltb3VzU2VxIAogICAgICB7
CglzdHJpbmcgZGlzcGxheV9pZCgpOwoKCXN0cmluZyBwcmltYXJ5X2lkKCk7
ICAgICAgICAKCglzdHJpbmcgYWNjZXNzaW9uX251bWJlcigpOyAgCgkKCWxv
bmcgdmVyc2lvbigpOyAgICAKICAgICAgfTsKIAogICAgICB0eXBlZGVmIHNl
cXVlbmNlPFByaW1hcnlTZXE+IFByaW1hcnlTZXFMaXN0OwogCgogICAgICBp
bnRlcmZhY2UgU2VxRmVhdHVyZVZlY3RvcjsKIAogICAgICBpbnRlcmZhY2Ug
U2VxIDogUHJpbWFyeVNlcSAKICAgICAgewoJU2VxRmVhdHVyZVZlY3RvciBh
bGxfU2VxRmVhdHVyZXMoaW4gYm9vbGVhbiBzdWJfc2VxZmVhdHVyZXMpOwoJ
CglTZXFGZWF0dXJlVmVjdG9yIGdldF9TZXFGZWF0dXJlc19ieV90eXBlKGlu
IGJvb2xlYW4gc3ViX3NlcWZlYXR1cmVzLAoJCQkJCQkgaW4gc3RyaW5nIHR5
cGUpOwoJCglTZXFGZWF0dXJlVmVjdG9yIGdldF9TZXFGZWF0dXJlc19pbl9y
ZWdpb24oaW4gbG9uZyBzdGFydCwKCQkJCQkJICAgaW4gbG9uZyBlbmQsIAoJ
CQkJCQkgICBpbiBib29sZWFuIHN1Yl9zZXFmZWF0dXJlcykgCgkgIHJhaXNl
cyAoT3V0T2ZSYW5nZSk7CgkKCVNlcUZlYXR1cmVWZWN0b3IgZ2V0X1NlcUZl
YXR1cmVzX2luX3JlZ2lvbl9ieV90eXBlKGluIGxvbmcgc3RhcnQsCgkJCQkJ
CQkgICBpbiBsb25nIGVuZCwgCgkJCQkJCQkgICBpbiBib29sZWFuIHN1Yl9z
ZXFmZWF0dXJlcywKCQkJCQkJCSAgIGluIHN0cmluZyB0eXBlKSAKCSAgcmFp
c2VzIChPdXRPZlJhbmdlKTsKCQoJUHJpbWFyeVNlcSBnZXRfUHJpbWFyeVNl
cSgpOyAKICAgICAgfTsgIAogCiAgICAgIHR5cGVkZWYgc2VxdWVuY2U8U2Vx
PiBTZXFMaXN0OwogCgoKICAgICAgaW50ZXJmYWNlIEZ1enp5VHlwZUNvZGUg
CiAgICAgIHsKCWNvbnN0IHNob3J0IEVYQUNUID0gMTsKCgljb25zdCBzaG9y
dCBXSVRISU4gPSAyOwoKCWNvbnN0IHNob3J0IEJFVFdFRU4gPSAzOwoKCWNv
bnN0IHNob3J0IEJFRk9SRSA9IDQ7CgoJY29uc3Qgc2hvcnQgQUZURVIgPSA1
OwogICAgICB9OwogCgogICAgICBzdHJ1Y3QgU2VxRmVhdHVyZVBvc2l0aW9u
CiAgICAgIHsKCWxvbmcgcG9zaXRpb247CgkKCWxvbmcgZXh0ZW5zaW9uOwoK
CXNob3J0IGZ1enp5OwogICAgICB9OwogCgogICAgICBzdHJ1Y3QgU2VxRmVh
dHVyZUxvY2F0aW9uIAogICAgICB7CglTZXFGZWF0dXJlUG9zaXRpb24gc3Rh
cnQ7CgoJU2VxRmVhdHVyZVBvc2l0aW9uIGVuZDsKCglzaG9ydCBzdHJhbmQ7
ICAgICAgICAgIAogICAgICB9OwogCiAgICAgIHR5cGVkZWYgc2VxdWVuY2U8
U2VxRmVhdHVyZUxvY2F0aW9uPiBTZXFGZWF0dXJlTG9jYXRpb25MaXN0OwoK
IAogICAgICBpbnRlcmZhY2UgU2VxRmVhdHVyZSA6IEdOT01FOjpVbmtub3du
IAogICAgICB7CglzdHJpbmcgdHlwZSgpOyAgICAgICAgICAgCgoJc3RyaW5n
IHNvdXJjZSgpOyAgICAgICAgIAoKCXN0cmluZyBzZXFfcHJpbWFyeV9pZCgp
OyAKCglsb25nIHN0YXJ0KCk7ICAgICAgICAgICAgCgoJbG9uZyBlbmQoKTsg
ICAgICAgICAgICAgIAoKCXNob3J0IHN0cmFuZCgpOyAgICAgICAgICAKCglO
YW1lVmFsdWVTZXRMaXN0IHF1YWxpZmllcnMoKTsgCgkKCVNlcUZlYXR1cmVW
ZWN0b3Igc3ViX1NlcUZlYXR1cmVzKCk7CgoJU2VxRmVhdHVyZUxvY2F0aW9u
TGlzdCBsb2NhdGlvbnMoKQoJICByYWlzZXMgKFVuYWJsZVRvUHJvY2Vzcyk7
CgoJYm9vbGVhbiBQcmltYXJ5U2VxX2lzX2F2YWlsYWJsZSgpOyAgCgkKCVBy
aW1hcnlTZXEgZ2V0X1ByaW1hcnlTZXEoKSAKCSAgcmFpc2VzIChVbmFibGVU
b1Byb2Nlc3MpOyAKICAgICAgfTsKIAoKCiAgICAgIGludGVyZmFjZSBQcmlt
YXJ5U2VxSXRlcmF0b3IgOiBHTk9NRTo6VW5rbm93biAKICAgICAgewoJUHJp
bWFyeVNlcSBuZXh0KCkgCgkgIHJhaXNlcyAoRW5kT2ZTdHJlYW0pOwoKCWJv
b2xlYW4gaGFzX21vcmUoKTsgCiAgICAgIH07CiAKCiAgICAgIGludGVyZmFj
ZSBTZXFGZWF0dXJlSXRlcmF0b3IgOiBHTk9NRTo6VW5rbm93biAKICAgICAg
ewoJU2VxRmVhdHVyZSBuZXh0KCkgCgkgIHJhaXNlcyAoRW5kT2ZTdHJlYW0p
OwoKCWJvb2xlYW4gaGFzX21vcmUoKTsKICAgICAgfTsKIAoKCiAgICAgIGlu
dGVyZmFjZSBQcmltYXJ5U2VxVmVjdG9yIDogR05PTUU6OlVua25vd24KICAg
ICAgewoJbG9uZyBzaXplKCk7CgoJUHJpbWFyeVNlcSBlbGVtZW50QXQoaW4g
bG9uZyBpbmRleCkKCSAgcmFpc2VzIChPdXRPZlJhbmdlKTsKCglQcmltYXJ5
U2VxSXRlcmF0b3IgaXRlcmF0b3IoKTsKICAgICAgfTsKIAoKICAgICAgaW50
ZXJmYWNlIFNlcUZlYXR1cmVWZWN0b3IgOiBHTk9NRTo6VW5rbm93bgogICAg
ICB7Cglsb25nIHNpemUoKTsKCglTZXFGZWF0dXJlIGVsZW1lbnRBdChpbiBs
b25nIGluZGV4KQoJICByYWlzZXMgKE91dE9mUmFuZ2UpOwoKCVNlcUZlYXR1
cmVJdGVyYXRvciBpdGVyYXRvcigpOwogICAgICB9OwogCgoKICAgICAgaW50
ZXJmYWNlIFByaW1hcnlTZXFEQiA6IEdOT01FOjpVbmtub3duIAogICAgICB7
CglzdHJpbmcgbmFtZSgpOyAgICAgCgoJbG9uZyB2ZXJzaW9uKCk7IAoJCgls
b25nIG1heF9zZXF1ZW5jZV9sZW5ndGgoKTsgCgoJUHJpbWFyeVNlcSBnZXRf
UHJpbWFyeVNlcShpbiBzdHJpbmcgYWNjZXNzaW9uX251bWJlciwgCgkJCQkg
IGluIGxvbmcgdmVyc2lvbikgCgkgIHJhaXNlcyAoRG9lc05vdEV4aXN0KTsK
CglQcmltYXJ5U2VxVmVjdG9yIGdldF9QcmltYXJ5U2VxVmVjdG9yKCk7IAog
ICAgICB9OwogCgogICAgICBpbnRlcmZhY2UgU2VxREIgOiBQcmltYXJ5U2Vx
REIgCiAgICAgIHsKCVNlcSBnZXRfU2VxKGluIHN0cmluZyBhY2Nlc3Npb25f
bnVtYmVyLCAKCQkgICAgaW4gbG9uZyB2ZXJzaW9uKSAKCSAgcmFpc2VzIChE
b2VzTm90RXhpc3QpOyAKCglTdHJpbmdMaXN0IGFjY2Vzc2lvbl9udW1iZXJz
KCk7CiAgICAgIH07CiAKCiAgICAgIGludGVyZmFjZSBVcGRhdGVhYmxlU2Vx
REIgOiBTZXFEQiAKICAgICAgewoJdm9pZCB3cml0ZV9TZXEoaW4gU2VxTGlz
dCB1cGRhdGVkU2VxcywgCgkJICAgICAgIGluIFNlcUxpc3QgYWRkZWRTZXFz
LAoJCSAgICAgICBpbiBTZXFMaXN0IGRlYWRTZXFzKSAKCSAgcmFpc2VzIChO
ZWVkc1VwZGF0ZSwKCQkgIFVuYWJsZVRvUHJvY2VzcywgCgkJICBPdXRPZlJh
bmdlKTsKCQoJdm9pZCB3cml0ZV9QcmltYXJ5U2VxKGluIFByaW1hcnlTZXFM
aXN0IHVwZGF0ZWRTZXFzLCAKCQkJICAgICAgaW4gUHJpbWFyeVNlcUxpc3Qg
YWRkZWRTZXFzLAoJCQkgICAgICBpbiBQcmltYXJ5U2VxTGlzdCBkZWFkU2Vx
cykgCgkgIHJhaXNlcyAoTmVlZHNVcGRhdGUsIAoJCSAgVW5hYmxlVG9Qcm9j
ZXNzLCAKCQkgIE91dE9mUmFuZ2UpOwogICAgICB9OwogCgoKICAgICAgaW50
ZXJmYWNlIEJpb0VudiAKICAgICAgewoJUHJpbWFyeVNlcUl0ZXJhdG9yIGdl
dF9QcmltYXJ5U2VxSXRlcmF0b3JfZnJvbV9maWxlKGluIHN0cmluZyBmb3Jt
YXQsCgkJCQkJCQkgICAgaW4gc3RyaW5nIGZpbGVuYW1lKSAKCSAgcmFpc2Vz
IChVbmFibGVUb1Byb2Nlc3MpOwoKCVByaW1hcnlTZXEgZ2V0X1ByaW1hcnlT
ZXFfZnJvbV9maWxlKGluIHN0cmluZyBmb3JtYXQsCgkJCQkJICAgIGluIHN0
cmluZyBmaWxlbmFtZSkgCgkgIHJhaXNlcyAoVW5hYmxlVG9Qcm9jZXNzKTsK
CQoJU2VxIGdldF9TZXFfZnJvbV9maWxlKGluIHN0cmluZyBmb3JtYXQsCgkJ
CSAgICAgIGluIHN0cmluZyBmaWxlbmFtZSkKCSAgcmFpc2VzIChVbmFibGVU
b1Byb2Nlc3MpOwoKCVN0cmluZ0xpc3QgZ2V0X1NlcURCX25hbWVzKCk7CgoJ
TG9uZ0xpc3QgZ2V0X1NlcURCX3ZlcnNpb25zIChpbiBzdHJpbmcgbmFtZSkK
CSAgcmFpc2VzIChEb2VzTm90RXhpc3QpOwoKCVNlcURCIGdldF9TZXFEQl9i
eV9uYW1lKGluIHN0cmluZyBuYW1lLAoJCQkJaW4gbG9uZyB2ZXJzaW9uKQoJ
ICByYWlzZXMgKERvZXNOb3RFeGlzdCk7CiAgICAgIH07ICAgIAogICAgfTsK
ICB9Owp9OyAKCg==
--8445424-9746-973683617=:100
Content-Type: TEXT/plain; name="BioCorba-0.2_Notes.txt"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.WNT.4.05.10011081140172.100@medusa.ebi.ac.uk>
Content-Description:
Content-Disposition: attachment; filename="BioCorba-0.2_Notes.txt"
Tm90ZXMgb24gQmlvQ29yYmEuaWRsIChwcm9wb3NlZCB2MC4yLjApIGJ5IEFs
YW4gUm9iaW5zb24uCgpVcGRhdGVkOiAwOCBOb3ZlbWJlciAyMDAwCgpBY2tu
b3dsZWRnZW1lbnRzOgotLS0tLS0tLS0tLS0tLS0tLQoKSW5wdXQgZm9yIHRo
aXMgcHJvcG9zYWwgY2FtZSAoaW4pZGlyZWN0bHkgZnJvbSBFd2FuIEJpcm5l
eSwgQnJhZApDaGFwbWFuLCBQaGlsaXAgTGlqbnphYWQsIEp1aGEgTXVpbHUs
IE1hdHRoZXcgUG9jb2NrIGFuZCBKYXNvbgpTdGFqaWNoLgoKCkludHJvZHVj
dGlvbjoKLS0tLS0tLS0tLS0tLQoKVGhpcyBJREwgaXMgZGVzaWduZWQgdG8g
YmUgcHJldHR5IHVuY29udHJvdmVyc2lhbCBhbmQgc2ltcGxlLiBJdCBpcwp1
c2luZyB2ZXJ5IHNpbXBsZSBDT1JCQSBmZWF0dXJlcywgYW5kIGNvbnRhaW5z
IG5vIHZhbHVldHlwZXMgb3IgYW55J3MsCndoaWNoIGFyZSBiZWluZyBpbXBs
ZW1lbnRlZCBsYXRlIGluIE9SQnMgKGlmIGF0IGFsbCkuIFRoaXMgSURMIHdp
bGwKd29yayB3aXRoIE9SQmFjdXMgJiBKYXZhT1JCIGZvciBKYXZhLCBPUkJp
dCBmb3IgcGVybC4KClRoaXMgSURMIGlzIGRlc2lnbmVkIGZvciBiaW9sb2dp
Y2FsIHNlcXVlbmNlcyBhbmQgdGhlaXIgZmVhdHVyZXMuIAoKVGhlc2UgYXJl
IHRoZSBiaW9sb2dpY2FsIG9iamVjdHMgdGhhdCBhcmUgZGVmaW5lZDoKIAog
MSkgVGhlcmUgYXJlIHRocmVlIGxldmVscyBvZiBvYmplY3QgZGVzY3JpYmlu
ZyBiaW9sb2dpY2FsIHNlcXVlbmNlczoKICAgIEFub255bW91c1NlcSwgUHJp
bWFyeVNlcSBhbmQgU2VxLgoKIDIpIE9iamVjdHMgdGhhdCBkZXNjcmliZSB0
aGUgZmVhdHVyZXMgYW5kIGxvY2F0aW9ucyBvZiBmZWF0dXJlcyBvbiBhCiAg
ICBiaW9sb2dpY2FsIHNlcXVlbmNlOiBTZXFGZWF0dXJlIGFuZCBTZXFGZWF0
dXJlTG9jYXRpb24uCgogMykgVmVjdG9yIGFuZCBpdGVyYXRvciBvYmplY3Rz
IHRoYXQgYWxsb3cgdXMgdG8gcHJvY2VzcyBsYXJnZSBsaXN0cwogICAgb2Yg
YmlvbG9naWNhbCBvYmplY3RzIGVhc2lseSBhbmQgYXJlIGRlc2lnbmVkIGZv
ciBuZXR3b3JrIGFjY2VzczoKICAgIFByaW1hcnlTZXFJdGVyYXRvciwgUHJp
bWFyeVNlcVZlY3RvciwgU2VxRmVhdHVyZUl0ZXJhdG9yLAogICAgU2VxRmVh
dHVyZVZlY3Rvci4KCiA0KSBUaGVyZSBhcmUgdGhyZWUgbGV2ZWxzIG9mIG9i
amVjdHMgZGVzY3JpYmluZyBiaW9sb2dpY2FsIGRhdGFiYXNlczoKICAgIFBy
aW1hcnlTZXFEQiwgU2VxREIgYW5kIFVwZGF0ZWFibGVTZXFEQi4gRWFjaCBv
bmUgcHJvdmlkZXMgYQogICAgcmljaGVyIGxldmVsIG9mIGZ1bmN0aW9uYWxp
dHkgdGhhbiBpdHMgc3VwZXJjbGFzcy4KCiA1KSBBIGZhY3Rvcnkgb2JqZWN0
IHRoYXQgY3JlYXRlcyBhbmQgbWFrZXMgYXZhaWxhYmxlIGJpb2xvZ2ljYWwK
ICAgIGRhdGFiYXNlIG9iamVjdHM6IEJpb0Vudi4KCiA2KSBBIGNvbGxlY3Rp
b24gb2YgRXhjZXB0aW9ucyBmb3Igd2hlbiBlcnJvciBjb25kaXRpb25zIG9j
Y3VyLgoKCkJpb0NvcmJhIDAuMjogQ2hhbmdlcyBmb3IgdGhlIHByb3Bvc2Vk
IG5leHQgdmVyc2lvbjoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKQXNpZGUgZnJvbSBzb21lIHJlLW5h
bWluZyBvZiBtZXRob2RzIGZvciBjb25zaXN0ZW5jeSwgdGhlcmUgYXJlIHNv
bWUKZGlmZmVyZW5jZXMgYW5kIGFkZGl0aW9ucyBjb21wYXJlZCB0byB0aGUg
cHJldmlvdXMgdmVyc2lvbiBvZgpCaW9Db3JiYToKCiAxKSBUaGUgZW51bSBm
b3IgZGVzY3JpYmluZyB0aGUgdHlwZSBvZiBhIHNlcXVlbmNlIGhhcyBiZWVu
IHJlcGxhY2VkCiAgICBieSBhIFNlcVR5cGUgb2JqZWN0IHVzaW5nICdjb25z
dCcgZGVmaW5pdGlvbnMuIFRoaXMgc2hvdWxkIGFsbG93CiAgICB0aGUgQmlv
Q29yYmEgSURMIHRvIGJlIGV4dGVuZGVkIGluIHRoZSBmdXR1cmUgd2l0aG91
dCBjbGllbnRzIHRoYXQKICAgIGV4cGVjdCB0aGUgb2xkIHZlcnNpb24gYmVp
bmcgYnJva2VuICh0aGlzIHNpdHVhdGlvbiBjYW4gaGFwcGVuCiAgICB2ZXJ5
IGVhc2lseSB3aGVuIHVzaW5nIGVudW0ncykuCgogMikgVGhlIGxpc3Qgb2Yg
YmlvbG9naWNhbCBzZXF1ZW5jZSB0eXBlcyBoYXMgYmVlbiBleHRlbmRlZCB0
byBpbmNsdWRlCiAgICB0aGUgJ1VOS05PV04nLgoKIDMpIEluIEFub255bW91
c1NlcSwgYSBtZXRob2QgJ2lzX2NpcmN1bGFyKCknIGhhcyBiZWVuIGFkZGVk
IHRvCiAgICBkaWZmZXJlbnRpYXRlIGxpbmVhciBmcm9tIGNpcmN1bGFyIGJp
b2xvZ2ljYWwgc2VxdWVuY2VzLgoKIDQpIFRoZSBtZXRob2QgJ21heF9yZXF1
ZXN0X2xlbmd0aCgpJyBoYXMgYmVlbiByZW1vdmVkIGZyb20KICAgIEFub255
bW91c1NlcSBhbmQgcGxhY2VkIGluIHRoZSBQcmltYXJ5U2VxREIgaW50ZXJm
YWNlIGFzCiAgICAnbWF4X3NlcXVlbmNlX2xlbmd0aCgpJywgc2luY2UgdGhl
IG1heGltdW0gbGVuZ3RoIG9mIHNlcXVlbmNlIHRoYXQKICAgIGNhbiBiZSBy
ZXR1cm5lZCBpcyBhIHByb3BlcnR5IG9mIHRoZSBkYXRhYmFzZSBzZXJ2ZXIs
IG5vdCB0aGUKICAgIHNlcXVlbmNlIGl0c2VsZi4KCiA1KSBTZXEgYW5kIFNl
cUZlYXR1cmUgbm93IGhhdmUgdGhlIGNvbmNlcHQgb2Ygc3ViLVNlcUZlYXR1
cmVzLiBUaHVzCiAgICB0aGUgbWV0aG9kcyB0byByZXR1cm4gdGhlIFNlcUZl
YXR1cmUgb2JqZWN0cyBvZiBhIFNlcSBtYXkgc3BlY2lmeQogICAgd2hldGhl
ciBhbGwgdGhlIFNlcUZlYXR1cmVzIGFyZSB0byBiZSByZXR1cm5lZCwgb3Ig
anVzdCB0aGUgdG9wCiAgICBvbmVzLgoKIDYpIEEgU2VxRmVhdHVyZSBub3cg
aGFzIHRoZSBjb25jZXB0IHRoYXQgaXQgbWF5IGhhdmUgc3ViLVNlcUZlYXR1
cmVzCiAgICAoYm9ycm93ZWQgZnJvbSBiaW9wZXJsKS4gVGhlc2UgbWF5IGJl
IHJldHVybmVkIHdpdGggdGhlCiAgICAnc3ViX1NlcUZlYXR1cmVzKCknIG1l
dGhvZC4KCiA3KSBUaGUgdXNlIG9mIGFycmF5cyAoaS5lLiBDT1JCQSBzZXF1
ZW5jZXMpIGFzIHJldHVybiB0eXBlcyBoYXMgYmVlbgogICAgcmVtb3ZlZCBz
aW5jZSB0aGlzIGNhbiBwdXQgYSBidXJkZW4gb24gc2VydmVyIGltcGxlbWVu
dG9ycyAoZXhjZXB0CiAgICBmb3IgU2VxRmVhdHVyZUxvY2F0aW9uIG9iamVj
dHMgLSBzZWUgWzI0XSkuIEluc3RlYWQgbGlzdHMgb2YKICAgIG9iamVjdHMg
YXJlIGFjY2Vzc2VkIHVzaW5nIFZlY3RvciBvYmplY3RzLiBGb3IgZXhhbXBs
ZSwgU2VxIG5vdwogICAgcmV0dXJucyBvbmx5IGEgU2VxRmVhdHVyZVZlY3Rv
ciByYXRoZXIgdGhhbiB0aGUgU2VxRmVhdHVyZUxpc3Qgb3IKICAgIGEgU2Vx
RmVhdHVyZUl0ZXJhdG9yIG9mIEJpb0NvcmJhLTAuMS4gVGhlIFZlY3RvciBh
bGxvd3MgcmFuZG9tCiAgICBhY2Nlc3MgdG8gaXRzIGxpc3QgY29udGVudHMs
IGJ1dCBhIHNlcnZlciBkb2VzIG5vdCBoYXZlIHRvCiAgICBpbXBsZW1lbnQg
dGhlICdzaXplKCknIG9yICdlbGVtZW50QXQoKScgbWV0aG9kcy4gSG93ZXZl
ciwgdGhlCiAgICBWZWN0b3Igc2hvdWxkIGJlIGFibGUgdG8gcmV0dXJuIGFu
ICdJdGVyYXRvcicgb2JqZWN0IHRoYXQgbWF5IGJlCiAgICB1c2VkIHRvIGN5
Y2xlIG92ZXIgdGhlIG9iamVjdHMgaW4gb3JkZXIuCgogOCkgVmVjdG9ycyBh
cmUgYmVpbmcgdXNlZCB3aGVuIGxpc3RzIG9mIFByaW1hcnlTZXEgYW5kIFNl
cUZlYXR1cmUKICAgIG9iamVjdHMgaGF2ZSB0byBiZSByZXR1cm5lZC4KCiA5
KSBBIFNlcUZlYXR1cmUgbm93IGhhcyB0aGUgY29uY2VwdCB0aGF0IGl0IG1h
eSBoYXZlIG11bHRpcGxlCiAgICBsb2NhdGlvbnMgYWxvbmcgYSBTZXEgKGJv
cnJvd2VkIGZyb20gYmlvamF2YSwgT01HLUJTQSwgRU1CTC1CYW5rLAogICAg
ZXRjLikuIEFuIGFycmF5IG9mIFNlcUZlYXR1cmVMb2NhdGlvbiBvYmplY3Rz
IG1heSBiZSByZXR1cm5lZCBmcm9tCiAgICBhIFNlcUZlYXR1cmUgd2l0aCB0
aGUgJ2xvY2F0aW9ucygpJyBtZXRob2QuIEZvciB1c2FiaWxpdHksIHRoZQog
ICAgZGVzY3JpcHRpb24gb2YgYSBsb2NhdGlvbiBpbiBCaW9Db3JiYSBpcyBr
ZXB0IHNpbXBsZSBhbmQgaGFuZGxlcwogICAgb25seSBqb2luZWQgbG9jYXRp
b25zLiBGb3IgZXhhbXBsZToKCiAgICAgKDEuLjEwKSAKICAgICBqb2luKDEu
LjEwLCAyMS4uMzAsIC4uLikKICAgICBjb21wbGVtZW50KDEuLjEwKQogICAg
IGpvaW4oY29tcGxlbWVudCgxLi4xMCksIGNvbXBsZW1lbnQoMjEuLjMwKSwg
Li4uKQogICAgIGpvaW4oY29tcGxlbWVudCgxLi4xMCksICgyMS4uMzApLCAu
Li4pCiAgICAgCiAgICBOLkIuIFRoZSBwb3NpdGlvbnMgb2YgdGhlIHN0YXJ0
IGFuZCBlbmQgcG9pbnRzIG1heSBiZSBmdXp6eS4gSWYKICAgIHRoZSBsb2Nh
dGlvbiBvZiBhIFNlcUZlYXR1cmUgY2Fubm90IGJlIGRlc2NyaWJlZCBieSB0
aGlzIHNpbXBsZQogICAgbW9kZWwgKGUuZy4gaXQgdXNlcyBvdGhlciBvcGVy
YXRvcnMgc3VjaCBhcyAnZ3JvdXAnLCAnb25lLW9mJyBvcgogICAgJ29yZGVy
JyksIHRoZW4gYW4gJ1VuYWJsZVRvUHJvY2VzcycgZXhjZXB0aW9uIGlzIHRo
cm93bi4gVGhlCiAgICBFeGNlcHRpb24gZGVzY3JpcHRpb24gc3RyaW5nIG1h
eSByZXR1cm4gdGhlIGFjdHVhbCBsb2NhdGlvbiBhcyBhCiAgICBzdHJpbmcg
Zm9yIHBhcnNpbmcgYnkgYSBjbGllbnQuCgoxMCkgQSBTZXFGZWF0dXJlTG9j
YXRpb24gaXMgY29tcG9zZWQgb2YgYSBzdGFydCBhbmQgZW5kCiAgICBTZXFG
ZWF0dXJlUG9zaXRpb24uIEEgU2VxRmVhdHVyZVBvc2l0aW9uIG1heSBiZSBm
dXp6eS4gVGhlCiAgICBkaWZmZXJlbnQgdHlwZXMgb2YgZnV6emluZXNzIGFy
ZSBzcGVjaWZpZWQgaW4gYSBGdXp6eVR5cGVDb2RlCiAgICBpbnRlcmZhY2Ug
YW5kIGhhbmRsZXMgdGhlIG9wZXJhdG9yczogJzwnLCAnPicsICcuJyBhbmQg
J14nLgoKMTEpIERlc3BpdGUgdGhlIGRlZmluaXRpb24gb2YgU2VxRmVhdHVy
ZUxvY2F0aW9uIG9iamVjdHMgZm9yIGEKICAgIFNlcUZlYXR1cmUsIGEgU2Vx
RmVhdHVyZSByZXRhaW5zIGl0cyAnc3RhcnQoKScsICdlbmQoKScgYW5kCiAg
ICAnc3RyYW5kKCknIG1ldGhvZHMuIFRoZXNlIHZhbHVlcyByZXR1cm4gdGhl
IHJhbmdlIG9mIHRoZQogICAgU2VxRmVhdHVyZUxvY2F0aW9uIG9iamVjdHMs
IHBsdXMgdGhlIGNvbnNlbnN1cyBmb3IgdGhlIHN0cmFuZCB0aGF0CiAgICB0
aGVzZSBTZXFGZWF0dXJlIG9iamVjdHMgYWxsIGxpZSBvbi4gVGhlc2UgdmFs
dWVzIG11c3QgYmUKICAgIGNvbnNpc3RlbnQgd2l0aCB0aGUgdmFsdWVzIHJl
dHVybmVkIGluIHRoZSBTZXFGZWF0dXJlTG9jYXRpb24KICAgIG9iamVjdHMu
CgoxMikgSW4gdGhlIEJpb0VudiBpbnRlcmZhY2UsIHRoZSB2ZXJzaW9uIG9m
IHRoZSBkYXRhYmFzZSBpcyBub3cKICAgIHJldHVybmVkIGFzIGEgbG9uZywg
d2hpY2ggaXMgY29uc2lzdGVudCB3aXRoIHRoZSBQcmltYXJ5U2VxREIKICAg
IGludGVyZmFjZS4KCjEzKSBJbiB0aGUgUHJpbWFyeVNlcURCIGludGVyZmFj
ZSwgYSBQcmltYXJ5U2VxVmVjdG9yIGlzIG5vdwogICAgYXZhaWxhYmxlLCBy
YXRoZXIgdGhhbiBhIFByaW1hcnlTZXFJdGVyYXRvci4KCjE0KSBJbiB0aGUg
UHJpbWFyeVNlcURCIGludGVyZmFjZSwgdGhlICdnZXRfUHJpbWFyeVNlcSgp
JyBpcyBub3cKICAgIHNwZWNpZmllZCBhcyB1c2luZyBhbiBhY2Nlc3Npb24g
bnVtYmVyICh3aGljaCBpcyB1bmlxdWUgdG8gYQogICAgZGF0YWJhc2UpLCBy
YXRoZXIgdGhhbiB0aGUgcHJpbWFyeSBJRCAod2hpY2ggaXMgdW5pcXVlIHRv
IHRoZQogICAgYXBwbGljYXRpb24pLiBUaGUgbWV0aG9kIG5vdyB0aHJvd3Mg
YSAnRG9lc05vdEV4aXN0JyBleGNlcHRpb24sCiAgICByYXRoZXIgdGhhbiBh
biAnVW5hYmxlVG9Qcm9jZXNzJyBleGNlcHRpb24uCgoxNSkgSW4gdGhlIFNl
cURCIGludGVyZmFjZSwgdGhlICdnZXRfU2VxKCknIG1ldGhvZCBpcyBub3cg
c3BlY2lmaWVkIGFzCiAgICB1c2luZyBhbiBhY2Nlc3Npb24gbnVtYmVyIGFu
ZCB0aHJvd3MgYSAnRG9lc05vdEV4aXN0JyBleGNlcHRpb24uCgoxNikgSW4g
dGhlIFNlcURCIGludGVyZmFjZSwgdGhlIG1ldGhvZCAnZ2V0X1ByaW1hcnlp
ZExpc3QoKScgaGFzIGJlZW4KICAgIHJlcGxhY2VkIHdpdGggJ2FjZXNzaW9u
X251bWJlcnMoKScgc2luY2UgYSBkYXRhYmFzZSB1c2VzIGFjY2Vzc2lvbgog
ICAgbnVtYmVycy4gVGhlIGxpc3Qgb2YgYWNjZXNzaW9uIG51bWJlcnMgaXMg
cmV0dXJuZWQgaW4gYSBTdHJpbmdMaXN0CiAgICBvYmplY3QuCgoxNykgSW4g
dGhlIEJpb0VudiBpbnRlcmZhY2UsIG1ldGhvZCAnZ2V0X1NlcURCX25hbWVz
KCknIGFuZAogICAgJ2dldF9TZXFEQl92ZXJzaW9ucygpJyBoYXZlIGJlZW4g
YWRkZWQgdG8gYWxsb3cgdGhlIEJpb0VudiBvYmplY3QgdG8KICAgIGJlIHF1
ZXJpZWQuCgoxOCkgSW4gdGhlIEJpb0VudiBpbnRlcmZhY2UsIHRoZSBtZXRo
b2QgJ2dldF9TZXFEQl9ieV9uYW1lKCknIG5vdwogICAgdGhyb3dzIGEgJ0Rv
ZXNOb3RFeGlzdCcgZXhjZXB0aW9uLCByYXRoZXIgdGhhbiBhbgogICAgJ1Vu
YWJsZVRvUHJvY2VzcycgZXhjZXB0aW9uLgoKMTkpIEkndmUgcmUtb3JkZXJl
ZCB0aGUgZmlsZSwgd2hpY2ggaGFzIG5lY2Vzc2l0YXRlZCB0aGUgdXNlIG9m
CiAgICBmb3J3YXJkIGRlY2xhcmF0aW9ucyBpbiBzb21lIHBsYWNlcy4KCjIw
KSBJbiBFeGNlcHRpb25zLCBvY2N1cmVuY2VzIG9mICdkZXNjcmlwdGlvbicg
aGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGgKICAgICdyZWFzb24nIGZvciBjb25z
aXN0ZW5jeS4KCjIxKSBUaGUgbW9kdWxlIG5hbWUgaXMgbm93IG9yZy5iaW9j
b3JiYS5zZXFjb3JlLgoKMjIpIFRoZSAnZ2V0X1ByaW1hcnlTZXEoKScgYW5k
ICdnZXRfU2VxKCknIG1ldGhvZHMgb2YgUHJpbWFyeVNlcURCIGFuZAogICAg
U2VxREIgcmVzcGVjdGl2ZWx5IG5vdyBpbmNsdWRlIHRoZSB2ZXJzaW9uIG9m
IHRoZSByZXF1aXJlZAogICAgYmlvbG9naWNhbCBzZXF1ZW5jZSB0byBiZSBz
cGVjaWZpZWQuCgoyMykgSW4gdGhlIFNlcSBpbnRlcmZhY2UsIGl0IGlzIG5v
dyBzcGVjaWZpZWQgdGhhdCB0aGUgU2VxIG9iamVjdCBtYXkKICAgIHJldHVy
biBTZXFGZWF0dXJlIG9iamVjdHMgb2YgYSBnaXZlbiB0eXBlIG9ubHkgKGUu
Zy4gZXhvbiwgaW50cm9uLAogICAgQ0RTLCBldGMuKS4KCjI0KSBWZWN0b3Jz
IGFuZCBpdGVyYXRvcnMgaGF2ZSBub3QgYmVlbiB1c2VkIGZvciBTZXFGZWF0
dXJlTG9jYXRpb24KICAgIG9iamVjdHMuIEluc3RlYWQgdGhlICdsb2NhdGlv
bnMoKScgbWV0aG9kIHJldHVybnMgYW4gYXJyYXkuIFRoaXMKICAgIGRlY2lz
aW9uIHdhcyBtYWRlIG9uIHRoZSBiYXNpcyB0aGF0IGEgU2VxRmVhdHVyZSB3
aWxsIChwcm9iYWJseSkKICAgIGhhdmUgYSBzbWFsbCBudW1iZXIgb2YgU2Vx
RmVhdHVyZUxvY2F0aW9uIG9iamVjdHMgKGF0IGxlYXN0CiAgICBjb21wYXJl
ZCB0byB0aGUgcG9zc2libGUgbnVtYmVyIG9mIFNlcUZlYXR1cmUgb2JqZWN0
cyB0aGF0IGEgU2VxCiAgICBvYmplY3QgbWF5IGhhdmUpIGFuZCB0aGUgZGVz
aXJlIHRvIHByZXZlbnQgYW4gZXhwbG9zaW9uIGluIHRoZQogICAgbnVtYmVy
IG9mIGludGVyZmFjZXMuCgoKUHJvYmFibGUgYXJlYXMgb2YgY29udGVudGlv
bjoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgMCkgTmFtaW5n
OiBJJ3ZlIHRyaWVkIHRvIGNob29zZSBzZW5zaWJsZSBuYW1lcyB0aGF0IGFy
ZSBjb25zaXN0ZW50CiAgICAgd2l0aCBiaW9qYXZhLCBiaW9wZXJsLCBCaW9D
b3JiYS0wLjEgYW5kIGdlbmVyYWwgSURMIHN0eWxlLiBZTU1WLgoKICAxKSBV
c2Ugb2YgVmVjdG9ycyBhbmQgSXRlcmF0b3JzOiBVc2luZyBWZWN0b3JzIHBs
YWNlcyBhIChvcHRpb25hbCkKICAgICByZXF1aXJlbWVudCBvbiBzZXJ2ZXIg
aW1wbGVtZW50b3JzIHRvIHByb3ZpZGUgcmFuZG9tIGFjY2VzcyB0bwogICAg
IGxpc3RzIG9mIG9iamVjdHMuIEZpbmUgaWYgeW91IHdvcmsgYWdhaW5zdCBh
IGRhdGFiYXNlLCBiaWcKICAgICBwcm9ibGVtIGlmIHlvdSBhcmUgd29ya2lu
ZyBvZmYgYSBmbGF0IGZpbGUgYmVpbmcgYWNjZXNzZWQKICAgICBzZXF1ZW50
aWFsbHkuIEFsdGVybmF0aXZlIGlzIHRvIGRyb3AgVmVjdG9ycywgYnV0IHJl
dGFpbgogICAgIEl0ZXJhdG9ycy4KCiAgMikgRG9lcyBTZXFGZWF0dXJlTG9j
YXRpb24gaGFuZGxlIGFsbCB0aGUgbm9ybWFsIGNhc2VzLiBlLmcuIGNhbgog
ICAgIHBlb3BsZSBsaXZlIHdpdGhvdXQgJ2dyb3VwJywgJ29uZS1vZicgYW5k
ICdvcmRlcicKICAgICBvcGVyYXRvcnMuIFNvbHZpbmcgdGhpcyB3aWxsIGFk
ZCBhIGxheWVyIG9mIGNvbXBsZXhpdHkuCgogIDMpIFNlcUZlYXR1cmVQb3Np
dGlvbiBha2EgRnV6emluZXNzOiBXaWxsIGJlIHBlb3BsZSBiZSBoYXBweSB0
aGF0CiAgICAgdGhlIHBvc2l0aW9uIGlzIGFjY2Vzc2VkIHRocm91Z2ggYSBz
ZWNvbmQgc3RydWN0PyBBbHRlcm5hdGl2ZSBpcwogICAgIHRvIGRyb3AgZnV6
emluZXNzLgoKICA0KSBUaGF0IGZvciBhIFNlcUZlYXR1cmUgd2UgaGF2ZSBi
b3RoIFNlcUZlYXR1cmVMb2NhdGlvbiBvYmplY3RzIGFuZAogICAgIHN0YXJ0
KCkvZW5kKCkvc3RyYW5kKCkgbWV0aG9kcy4gVGhpcyBpcyByZWR1bmRhbmN5
LCBidXQgcmV0YWluZWQKICAgICBmb3IgY29udmVuaWVuY2UuCgogIDUpIFRo
ZXJlIGFyZSAoc3RpbGwpIG5vIFNlcVZlY3RvciBhbmQgU2VxSXRlcmF0b3Ig
b2JqZWN0cyBkZWZpbmVkCiAgICAgKGMuZi4gUHJpbWFyeVNlcVZlY3RvciBh
bmQgUHJpbWFyeVNlcUl0ZXJhdG9yKS4KCiAgNikgQWxsIHZlcnNpb24gaW5m
b3JtYXRpb24gKGUuZy4gZm9yIFByaW1hcnlTZXEgYW5kIFByaW1hcnlTZXFE
QikgaXMKICAgICBkZWZpbmVkIGFzIGEgJ2xvbmcnIGRhdGEgdHlwZSwgcmF0
aGVyIHRoYW4gYSAnc3RyaW5nJyBkYXRhCiAgICAgdHlwZS4gVGhpcyBkZWNp
c2lvbiB3YXMgbWFkZSBvbiB0aGUgYmFzaXMgdGhhdCB1c2luZyBhICdzdHJp
bmcnCiAgICAgdG8gc3BlY2lmeSB0aGUgdmVyc2lvbiBtYWtlcyBpdCBtdWNo
IGxlc3MgY29udmVuaWVudCB0byBkZXRlcm1pbmUKICAgICB0aGUgbW9zdCBy
ZWNlbnQgdmVyc2lvbiBvZiBhIGRhdGFiYXNlLgo=
--8445424-9746-973683617=:100--