VGhlcmUgYXJlIG1hbnkgdGhpbmdzIHRoYXQgd29yayBhIGJpdC4gIFdvcmtpbmcgd2VsbCBpcyBt b3JlIGRpZmZpY3VsdC4KR2FpbiBjb21lcyBhdCBhIGNvc3QsIHlvdSBjYW4gdHJhZGUgYmFuZHdp ZHRoIG9yIGRpcmVjdGlvbmFsaXR5IGZvciBpdC4gIEl0IG5ldmVyIGNvbWVzIGZvciBmcmVlLgpZ b3UgY2FuIHRyYWRlIGRpcmVjdGlvbmFsaXR5IGZvciBnYWluIHdpdGggYSBjb2xpbmVhciBhbnRl bm5hLCBidXQgdGhlIG1vcmUgZ2FpbiB5b3UgZ2V0LCB0aGUgbW9yZSBzZW5zaXRpdmUgaXQgaXMg dG8gYW50ZW5uYSB0aWx0IHRha2luZyB0aGUgcmVjZWl2ZXIgb3V0IG9mIHRoZSBiZWFtLgpXaXRo IGEgY29saW5lYXIsIGl0J3MgbGlrZSBhbiBvbW5pZGlyZWN0aW9uYWwgc2VhcmNoIGxpZ2h0LiBO byBlbmVyZ3kgc3RyYWlnaHQgdXAgb3IgZG93biwgdmVyeSBsaXR0bGUgYXQgNDUgZGVncmVlcywg YW5kIGxvdHMgYXQgMCBkZWdyZWVzLgpSZXR1cm4gbG9zcyBpcyBhIHJlYWxseSBiYWQgbWV0cmlj IG9mIGFudGVubmEgcGVyZm9ybWFuY2UuICBBIDUwIG9obSByZXNpc3RvciBoYXMgZ3JlYXQgcmV0 dXJuIGxvc3MgKGluIGEgNTAgb2htIHN5c3RlbSkgYnV0IHRvdGFsbHkgc3Vja3MgYXMgYW4gYW50 ZW5uYS4KClJlbWNvbSdzIFhGRFREIHdvdWxkIGJlIG15IGNob2ljZSB0byBnbyBhZnRlciB0aGlz IHByb2JsZW0sIGJ1dCBpdCBpcyBleHBlbnNpdmUuCgpEZXR1bmluZyBieSBuZWFyYnkgc3RydWN0 dXJlcyBpcyBhIG1ham9yIHByb2JsZW0gaGVyZSwgWEZEVEQgYWxsb3dzIHlvdSB0byBtb2RlbCB0 aG9zZSBzdHJ1Y3R1cmVzIGFuZCBldmVuIHVzZSB0aGVtIGFzIHBhcnQgb2YgeW91ciBhbnRlbm5h LgpTZWUgdGhlaXIgc3R1ZHkgb24gaG9sZGluZyB5b3VyIGNhciByZW1vdGUgYXQgeW91ciBjaGlu LiAg8J+YigoKQW4gaW5oZXJlbnRseSBicm9hZGJhbmQgYW50ZW5uYSBtYXkgaGF2ZSBsb3cgZ2Fp biwgYnV0IGl0IHdvbid0IHN1ZmZlciBzbyBtdWNoIGZyb20gZGV0dW5pbmcuCgpodHRwOi8vd3d3 LndhNXZqYi5jb20vcmVmZXJlbmNlcy9QbGFuYXJEaXNrQW50ZW5uYXMucGRmCkkgZGlkIHNvbWV0 aGluZyB2ZXJ5IHNpbWlsYXIgZm9yIDIuNCBHSHogdXNpbmcgWEZEVEQgYSBjb3VwbGUgeWVhcnMg YWdvLiAKCgoKLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KRnJvbTogcGljbGlzdC1ib3VuY2Vz QG1pdC5lZHUgPHBpY2xpc3QtYm91bmNlc0BtaXQuZWR1PiBPbiBCZWhhbGYgT2YgSmFzb24gV2hp dGUKU2VudDogV2VkbmVzZGF5LCBKdWx5IDExLCAyMDE4IDEyOjU3IFBNClRvOiBNaWNyb2NvbnRy b2xsZXIgZGlzY3Vzc2lvbiBsaXN0IC0gUHVibGljLiA8cGljbGlzdEBtaXQuZWR1PgpTdWJqZWN0 OiBSZTogW0VFXSBBbnRlbm5hIGRlc2lnbj8KClRvIGNsYXJpZnkgeW91IGFyZSBsb29raW5nIGZv ciBhIDUuOEdIeiBkaXJlY3Rpb25hbCAiaGlnaCBnYWluIiBhbnRlbm5hPwoKVGhlIHByb2JsZW0g d2l0aCBkaXJlY3Rpb25hbCAoaWUuIG5vdCB3aGlwIG9yIHBhdGNoKSBhbnRlbm5hcyBvbiB2ZWhp Y2xlcy9yb2JvdHMgaXMgdGhhdCB0aGV5IGFyZSBkaXJlY3Rpb25hbC4gSWYgdGhlIHZlaGljbGUg dHVybnMgOTAgZGVncmVlcyB0byB0aGUgbGVmdCB0aGVuIHRoZSByYWRpbyBiZWFtIHdpbGwgYWxz byBiZSBwb2ludGVkIDkwIGRlZ3JlZXMgdG8gdGhlIGxlZnQuIFVubGVzcyB5b3VyIHN5c3RlbSBp cyBzaWduaWZpY2FudGx5IGRpZmZlcmVudCB0aGFuIEkgaW1hZ2luZSBJIHdvdWxkIGFkdmlzZSBh Z2FpbnN0IGEgaGlnaGx5IGRpcmVjdGlvbmFsIGFudGVubmEuCgpJZiB5b3UgYXJlIHR5aW5nIHRv IHRyYW5zbWl0IHZpZGVvIGluZG9vcnMgSSB3b3VsZCByZWNvbW1lbmQgYm9vc3RpbmcgdGhlIHRy YW5zbWl0IHBvd2VyIC0gYW5kIHN0YXlpbmcgd2l0aCB5b3VyIG9tbmlkaXJlY3Rpb25hbCB3aGlw L3BhdGNoIGFudGVubmEuCklmIHlvdSBoYXZlIGEgSEFNIGxpY2Vuc2UgdGhlbiB5b3UgY2FuIHBy b2JhYmx5IGRvIHRoYXQgbGVnYWxseSAoZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBhcmUpLgoKSnVz dCBteSAywqIKLUphc29uIFdoaXRlCgoKT24gV2VkLCBKdWwgMTEsIDIwMTggYXQgMjozNyBQTSwg TmVpbCA8cGljZHVkZTNAbmFyd2FuaS5vcmc+IHdyb3RlOgoKPiBPa2F5IGFudGVubmEgZ3VydXMs IEkgY2FuIHVzZSBzb21lIGhlbHAgaGVyZSBwbGVhc2UuLi4KPgo+IEknbSB1c2luZyBhIDUuOEdo eiB2aWRlbyB0cmFuc21pdHRlci9yZWNlaXZlciBzeXN0ZW0gb24gYSByb2JvdCAoMkQgCj4gZHJp dmluZywgaW5kb29yKS4gIFRoZXNlIHN5c3RlbXMgYXJlIHBvcHVsYXIgd2l0aCB0aGUgZHJvbmUt cmFjaW5nIAo+IGNyb3dkLCBidXQgbW9zdCBvZiB0aGUgZ29vZCBhbnRlbm5hcyBhcmUgZWl0aGVy IGNpcmN1bGFyLXBvbGFyaXplZCAoc28gCj4gdGhleSBhcmUgdW5pZm9ybWx5IGVmZmVjdGl2ZSBh dCBtb3N0IGFuZ2xlcykgb3IgcGF0Y2ggYW50ZW5uYXMgd2hpY2ggCj4gYXJlIGFwcGFyZW50bHkg dmVyeSB1bmlkaXJlY3Rpb25hbC4gIExpbmVhciBhbnRlbm5hcyBoYXZlIG1vc3RseSBnb25lIAo+ IGF3YXkgZm9yIHRoaXMgcHVycG9zZS4KPgo+IEknbSB0cnlpbmcgdG8gbWF4aW1pemUgc2lnbmFs IHN0cmVuZ3RoL3JlY2VwdGlvbiBzbyB0aGUgb3BlcmF0b3IgY2FuIAo+IGJlIGluIGEgZGlmZmVy ZW50IHJvb20gYW5kIG9uIGEgZGlmZmVyZW50IGZsb29yLiAgRm9yIG15IHB1cnBvc2VzLCBJJ20g Cj4gdGhpbmtpbmcgYSBsaW5lYXIgYW50ZW5uYSBvbiB0aGUgdHJhbnNtaXR0ZXIgc2lkZSAocm9i b3QpIG1heSBiZSBiZXN0IAo+IHRob3VnaCwgYXMgSSBjYW4gbW91bnQgaXQgdmVydGljYWxseSBp biB0aGUgcm9ib3QgYm9keSwgYW5kIHBlcmhhcHMgCj4gdXNlIGEgcGF0Y2ggYW50ZW5uYSBvbiB0 aGUgcmVjZWl2ZXIgc2lkZSBhcyB0aGF0IHdvdWxkIGhhdmUgbWluaW1hbCAKPiBtb3ZlbWVudC4g IE9yIGxpbmVhciBhcyB3ZWxsIGZvciB0aGUgcmVjZWl2ZXIuICBJIHVuZGVyc3RhbmQgdGhhdCB3 aGlwIAo+IGFudGVubmFzIGFyZSByZWFsbHkgY3JhcHB5IHNvIHdvdWxkIGEgc3RyYWlnaHQgcGll Y2Ugb2Ygd2lyZSB3b3JrIAo+IGJldHRlcj8gIEkgYWxzbyBkaXNjb3ZlcmVkICJjb2xsaW5lYXIg YW50ZW5uYXMiIHdoaWxlIHNlYXJjaGluZy4KPgo+IEkgaGF2ZSBhYm91dCAxOC0yMCIgb2Ygcm9v bSB0byBwdXQgYW4gYW50ZW5uYSB2ZXJ0aWNhbGx5IGluc2lkZSB0aGUgCj4gcm9ib3QgLi4uIHdv dWxkIGhhdmluZyBhbiBhbnRlbm5hIGxlbmd0aCBvZiBhIG11bHRpcGxlIG9mIHRoZSAKPiB3YXZl bGVuZ3RoIHdvcmsgYmV0dGVyIHRoYW4ganVzdCBhIHNpbmdsZS13YXZlbGVuZ3RoIGFudGVubmE/ Cj4KPiBTbyB3aGF0IHNheSB5ZT8KPgo+IENoZWVycywKPiAtTmVpbC4KPgo+Cj4gLS0KPiBodHRw Oi8vd3d3LnBpY2xpc3QuY29tL3RlY2hyZWYvcGljbGlzdCBQSUMvU1ggRkFRICYgbGlzdCBhcmNo aXZlIAo+IFZpZXcvY2hhbmdlIHlvdXIgbWVtYmVyc2hpcCBvcHRpb25zIGF0IAo+IGh0dHA6Ly9t YWlsbWFuLm1pdC5lZHUvbWFpbG1hbi9saXN0aW5mby9waWNsaXN0Cj4KCgoKLS0KSmFzb24gV2hp dGUKLS0KaHR0cDovL3d3dy5waWNsaXN0LmNvbS90ZWNocmVmL3BpY2xpc3QgUElDL1NYIEZBUSAm IGxpc3QgYXJjaGl2ZSBWaWV3L2NoYW5nZSB5b3VyIG1lbWJlcnNoaXAgb3B0aW9ucyBhdCBodHRw Oi8vbWFpbG1hbi5taXQuZWR1L21haWxtYW4vbGlzdGluZm8vcGljbGlzdAoKLS0gCmh0dHA6Ly93 d3cucGljbGlzdC5jb20vdGVjaHJlZi9waWNsaXN0IFBJQy9TWCBGQVEgJiBsaXN0IGFyY2hpdmUK Vmlldy9jaGFuZ2UgeW91ciBtZW1iZXJzaGlwIG9wdGlvbnMgYXQKaHR0cDovL21haWxtYW4ubWl0 LmVkdS9tYWlsbWFuL2xpc3RpbmZvL3BpY2xpc3QK .