T24gV2VkLCBKdWwgMSwgMjAxNSBhdCAxMjo0MSBQTSwgU3RlcGhlbiBHYWxsYWdoZXIgPHNnYWxs YWdoQHJlZGhhdC5jb20+IHdyb3RlOgo+IFNvIHRoaXMgd2FzIGRpc2N1c3NlZCBhdCB0b2RheSdz IEZFU0NvIG1lZXRpbmdbMV0uIEJhc2ljYWxseSwgd2UncmUgbm90Cj4gc3VyZSB0aGF0IGl0IG1h a2VzIHNlbnNlIHRvIGhhdmUgYm90aCBpbnRlcnByZXRlcnMgaW4gdGhlIGRpc3RyaWJ1dGlvbiwK PiBwYXJ0aWN1bGFybHkgc2luY2UgdGhleSBhcmUgbWVyZ2luZyBiYWNrIHRvZ2V0aGVyIGluIHRo ZSBmdXR1cmUuCj4KPiBXb3VsZCB5b3UgYmUgd2lsbGluZyB0byBjb25zaWRlciBqdXN0IHBhY2th Z2luZyBpby5qcyAqYXMqIG5vZGUuanMgaW4KPiBGZWRvcmEgMjM/IEFtb25nIG90aGVyIHRoaW5n cywgdGhpcyB3b3VsZCBhdm9pZCB0aGUgbmVlZCB0byBnbyB0aHJvdWdoCj4gYWRkaXRpb25hbCBw YWNrYWdlIHJldmlld3MsIHJlYnVpbGQgbm9kZWpzLSogcGFja2FnZXMgdG8gd29yayB3aXRoCj4g aW8uanMsIGV0Yy4KPgo+IE15IGxpbWl0ZWQgdW5kZXJzdGFuZGluZyBvZiBpby5qcyBpcyB0aGF0 IGl0IGlzIGVzc2VudGlhbGx5IGEgc3VwZXJzZXQKPiBvZiBub2RlLmpzIGZ1bmN0aW9uYWxpdHks CgpUaGlzIGlzIGNvcnJlY3QuICBJdCBoYXMgYWRkaXRpb25hbCBmZWF0dXJlcyBidXQgaXMgYnJv YWRseSBjb21wYXRpYmxlCndpdGggdGhlIGVjb3N5c3RlbSBvZiBwYWNrYWdlcyBhdmFpbGFibGUg dmlhIG5wbS4KCj4gc28gaXQgc2VlbXMgbGlrZSBqdXN0IG1vdmluZyB0byB0aGlzIGluc3RlYWQK PiBvZiBub2RlLmpzIDAuMTIuMCB3b3VsZCBtYWtlIHNlbnNlLgoKSSdtIGZpbmUgd2l0aCBtb3Zp bmcgdGhlIGRlZmF1bHQgZW5naW5lIGluIEZlZG9yYSAyMyB0byBpby5qcy4KCkknbSBub3Qgc28g ZmluZSB3aXRoIHN0aWxsIGNhbGxpbmcgdGhlIHBhY2thZ2Ugd2Ugc2hpcCBpby5qcyBpbgoibm9k ZWpzIiwgc2luY2UgaXQncyBub3Qgbm9kZS5qcywgYW5kIHdlIGNhbid0IGJlIGVudGlyZWx5IHN1 cmUgdGhlCm5leHQgdmVyc2lvbiBvZiBub2RlLmpzIHdpbGwgYmUgZ3JlYXRlciB0aGFuIHRoZSBj dXJyZW50IHZlcnNpb24gb2YKaW8uanMgKGFsdGhvdWdoIEkgYmVsaWV2ZSB0aGF0IGlzIHRoZSBw bGFuKS4KCj4gT3RoZXJ3aXNlLCB3aWxsIHRoaXMgQ2hhbmdlIHJlcXVpcmUgYnVpbGRpbmcgTlBN IHBhY2thZ2VzIGZvciBpb2pzCj4gLTxtb2R1bGU+IHJhdGhlciB0aGFuIChvciBpbiBhZGRpdGlv biB0bykgbm9kZWpzLW1vZHVsZT8gQ2FuIHRoaXMgYmUKPiBhdm9pZGVkIGJ5IHJ1bm5pbmcgdGhl bSB3aXRoIGFuIGFsdGVybmF0aXZlcy1wcm92aWRlZCAvdXNyL2Jpbi9ub2RlPwoKTm8uICBPbmx5 IGJpbmFyeSBtb2R1bGVzIHdvdWxkIHJlcXVpcmUgc3BlY2lhbCBpb2pzLWZvbyBjb3VzaW5zIGR1 ZSB0bwp0aGUgZGlmZmVyZW50IGJpbmFyeSBjb21wYXRpYmlsaXR5IHN1cmZhY2Ugb2YgdGhlIHR3 byBlbmdpbmVzLiAgVGhlc2UKd291bGQgYmUgYnVpbHQgZnJvbSB0aGUgU1JQTVMgdGhhdCBhbHJl YWR5IGV4aXN0LiAgV2hpbGUgYmluYXJ5IG1vZHVsZQpTUlBNcyB3b3VsZCByZXF1aXJlIGNoYW5n ZXMsIG5vbmUgd291bGQgYmUgbmVjZXNzYXJ5IGZvcgpwdXJlLUphdmFTY3JpcHQgbW9kdWxlcy4K Cm5wbSBkb2VzIG5vdCBvZmZlciBhbnkgYWJpbGl0eSB0byBzaGlwIGRpZmZlcmVudCBjb2RlIHdo ZW4gZGlmZmVyZW50Cm5vZGUuanMvaW8uanMgdmVyc2lvbnMgYXJlIHVzZWQsIHNvIGl0IHJlYWxs eSBpc24ndCBuZWNlc3NhcnkgZm9yIHVzCnRvIGVpdGhlci4gIFRoZSB2YXN0IG1ham9yaXR5IG9m IGFsbCBjb2RlIGluIHRoZSBlY29zeXN0ZW0gd2lsbCBlaXRoZXIKSnVzdCBXb3JrIG9yIGRldGVj dCBhbmQgZG8gdGhlIHJpZ2h0IHRoaW5nIGF0IHJ1bnRpbWUuICBXZSBhbHNvIGRvbid0CnJlYWxs eSBoYXZlIHRoZSByZXNvdXJjZXMgdG8gbWFpbnRhaW4gdHdvIHNlcGFyYXRlIHN0YWNrcyBvZgpK YXZhU2NyaXB0IGFwcGxpY2F0aW9ucywgYXMgeW91J3JlIHJpZ2h0bHkgY29uY2VybmVkIGFib3V0 LgoKVGhlcmVmb3JlLCB3ZSBkbyBub3QgaW50ZW5kIHRvIHN1cHBvcnQgc2hpcHBpbmcgZGlmZmVy ZW50IHZlcnNpb25zIG9mCnB1cmUtSmF2YVNjcmlwdCBub2RlanMgc29mdHdhcmUgZm9yIGRpZmZl cmVudCBlbmdpbmVzLCB0aG91Z2ggaXQgb2YKY291cnNlIHdpbGwgYmUgcG9zc2libGUgdG8gZXhw cmVzcyB0aGF0IGEgcGFydGljdWxhciBwYWNrYWdlIG9ubHkKd29ya3MvZG9lc24ndCB3b3JrIHdp dGggYSBwYXJ0aWN1bGFyIGVuZ2luZSB2aWEgUmVxdWlyZXMvQ29uZmxpY3RzLgoKTm90ZSB0aGF0 IGFsbCBvZiB0aGUgYWJvdmUgaXMgYSBjb25jZXJuIGZvciB0aGUgU0lHIGV2ZW4gaWYgd2Ugb25s eQpzaGlwIGlvLmpzIGluIEZlZG9yYSwgYXMgSSdkIGV2ZW50dWFsbHkgbGlrZSB0byBnZXQgMC4x MiBpbnRvIEVQRUwKd2l0aG91dCBsZWF2aW5nIDAuMTAgdXNlcnMgaW4gdGhlIGR1c3QuICBNeSBp bnRlbnRpb24gd2FzIHRvIGRlc2lnbgp0aGUgYmluYXJ5IFNSUE0gYnVpbGQgbG9naWMgc3VjaCB0 aGF0IHRoZSBzYW1lIFNSUE0gd291bGQgYnVpbGQKbm9kZWpzLWZvbyBhbmQgaW9qcy1mb28gY291 c2lucyBvbiBGZWRvcmEgYW5kIG5vZGVqczAuMTAtZm9vIGFuZApub2RlanMwLjEyLWZvbyBjb3Vz aW5zIG9uIEVQRUwgd2l0aCBubyBzcGVjIGNoYW5nZXMuCgpTbyByZW1lbWJlciB0aGF0IHNvbWUg YmlnIGNoYW5nZXMgYXJlIGNvbWluZyB0byBub2RlanMtcGFja2FnaW5nIGFuZApiaW5hcnkgbW9k dWxlIFNSUE1zIGFueXdheSwgdGhlIG9ubHkgcXVlc3Rpb24gaXMgd2hpY2ggYnJhbmNoZXMKdGhl eSdyZSBsYW5kaW5nIGluLiAgOy0pCgotVC5DLgotLSAKZGV2ZWwgbWFpbGluZyBsaXN0CmRldmVs QGxpc3RzLmZlZG9yYXByb2plY3Qub3JnCmh0dHBzOi8vYWRtaW4uZmVkb3JhcHJvamVjdC5vcmcv bWFpbG1hbi9saXN0aW5mby9kZXZlbApGZWRvcmEgQ29kZSBvZiBDb25kdWN0OiBodHRwOi8vZmVk b3JhcHJvamVjdC5vcmcvY29kZS1vZi1jb25kdWN0