T24gTW9uLCBKdW4gMjcsIDIwMTEgYXQgODoxOSBBTSwgUnVzc2VsbE1jIDxhcHB0ZWNobnpAZ21h aWwuY29tPiB3cm90ZToKCj4gPj4gT24gMjcvMDYvMjAxMSAwMzo0NiwgUnVzc2VsbE1jIHdyb3Rl Ogo+ID4+PiDXkNeg15kg16nXldee16gg15DXl9eZPwo+ID4+Pgo+ID4+IFdlIGFsbCBzaG91bGQg YmUuCj4KPiA+IEkgbG92ZSBpdCEgV2UgaGF2ZSBicnVzaGVkIGFnYWluc3QgdGhlIGZvcmJpZGRl biB0b3BpYyBvZiByZWxpZ2lvbiBmb3IKPiA+IG92ZXIgMTIgaG91cnMgd2l0aG91dCBzb21lIHdo aW5lciB0YWtpbmcgb2ZmZW5zZSEKPgo+IDEuIFlvdSBuZWVkIHRvIGJlIHByb3Blcmx5IGNvbnZl cnNhbnQgd2l0aCB0aGUgbGlzdCBydWxlcy4KPiBTdWNoIGl0ZW1zIGFyZSBwZXJtaXR0ZWQgYXMg bG9uZyBhcyBubyBsb25nZXIgdGhhbiBvbmUgbGluZSAoYnkgT2xpbidzCj4gZGVmaW5pdGlvbikg YW5kIHdyaXR0ZW4gaW4gSGVicmV3LCBLbGluZ29uLCBHcmVlayBvciBhbnkgb3RoZXIgZGVhZAo+ IGxhbmd1YWdlIGZvciB3aGljaCBhIGZvbnQgc2V0IGlzIG5vdCBhdmFpbGFibGUgYW5kL29yIHdo aWNoIGlzIG5vdAo+IHRyYW5zbGF0ZWQgYnkgR2FyZ295bGUgb3IgQmFiZWxGaXNoLiAoRm9yIHN5 bWJvbCBiYXNlZCBsYW5ndWFnZXMsCj4gaW5kaXZpZHVhbCBoaWVyb2dseXBocyBtdXN0IGJlIGNv dW50ZWQgYXMgaGF2aW5nIHRoZSBlcXVpdmFsZW50IHdvcmQKPiBjb3VudCBhcyB0aGVpciB0cmFu c2xhdGlvbiBpbnRvIHNvbWUgcXVhbGlmeWluZyBsYW5ndWFnZS4pIExhbmd1YWdlcwo+IHdoaWNo IGludm9sdmUgcmVjdXJzaW9uIG9yIHdob3NlIHdvcmRzIHJlcHJlc2VudCBoYXNoZXMgaW50byBs YXJnZXIKPiB0YWJsZSBzdHJ1Y3R1cmVzIGFyZSBkaXNxdWFsaWZpZWQgcmVnYXJkbGVzcyBvZiBv dGhlcndpc2UgYmVpbmcKPiBtZXJldHJpY2lvdXMuIC4KPgo+IDIuIFlvdSBwcm9iYWJseSBkbyBv bmUgb2YgbXkgbGl0dGVybWF0ZXMgW3RtXVt2aXJ0dWFsXSBhIGRpc3NlcnZpY2UgaW4KPiB5b3Vy IGFkdW1icmF0aW9ucy4KPgo+IFRydWUgcmVsaWdpb24gaGFzIGEgZGlzdGluY3RseSBkaWZmZXJl bnQgcmluZyB0byBpdCB0aGF0IHdoYXQgd2UgaGF2ZQo+IGJlZW4gc2VlaW5nIGhlcmUuCj4gQmUg aXQKPgo+ICAgICAgICAgIEdvZHMgZ29kcywgZ19kcywgbW90b3IgdmVoaWNsZXMgZnJvbSBjZXJ0 YWluIHJlZ2lvbnMgLSBvcgo+IG5vdCwgTy9TcyBmcm9tIGNlcnRhaW4gbWFudWZhY3R1cmVycyAt IG9yIG5vdCwgb3Igc2FtZSB3aXRoIGN1dGUKPiBhbmltYWxzIGFzIGxvZ29zLCBvciBwZW9wbGUg b3IgcGFydGllcyB0aGF0IGFib3V0IG5lYXJseSBoYWxmIG9mIHlvdXIKPiBjb3VudHJ5bWVuIHZv dGVkIGVpdGhlciBmb3Igb3IgYWdhaW5zdCwgbW9yYWxseSBzb3VuZCBzb2NpZXRhbGx5Cj4ganVz dGlmaWFibGUganVzdC1ob3ctZ19kLWludGVuZGVkLWl0IGVjb25vbW8tc29jaWV0YWwgcGhpbG9z b3BoaWNhbAo+IGJlbGllZiBzeXN0ZW1zIGZyb20gdGhlIHRvbyBmYXIgcmlnaHQgYW5kIHRvbyBm YXIgbGVmdCwgb3IgIC4uLgo+Cj4gdGhlcmUgaXMgYSBjZXJ0YWluIGNpcmNsaW5nIG9mIHdhZ29u cywgY3VybGluZyBvZiB0aGUgbGlwLCBmbGF0dGVuaW5nCj4gb2YgdGhlIGVhcnMsIHF1aWNrZW5p bmcgb2YgdGhlIHB1bHNlLCBjdXJkbGluZyBvZiB0aGUgc3RvbWFjaCwgaGludHMKPiBvZiBhZHJl bmFsaW4gcHVtcGluZyBpbnRvIHRoZSBzeXN0ZW0sIHR1cmJpbmVzIGFuZCB0dXJib3Mgc3Bvb2xp bmcgdXAKPiBhbmQgY29taW5nIG9uIGxpbmUgYW5kIC4uLiB0aGF0IGNoYXJhY3RlcmlzZXMgc3Vj aCB0aGluZ3MuIE9mIGFsbAo+IHRoZXNlIGhlcmUgd2UgaGF2ZSBub25lLiBTbyBmYXIuCj4KPiBN eSBhZm9yZW1lbnRpb25lZCBsaXR0ZXJtYXRlIGlzIGluZGVlZCBzb21ld2hhdCBtb3JlIGhhaXJ0 cmlnZ2VyZWQKPiB0b3dhcmRzIGVzY2hld2luZyBhbGwgc3VjaCwgYnV0IGV4YW1pbmF0aW9uIG9m IHRoZSByZWNvcmQgd291bGQgc2FkbHkKPiBzaG93IHRoYXQgaGUgaXMgbW9yZSBwcmVzY2llbnQg YW5kIGV4cGVyaWVuY2VkIGluIHN1Y2ggdGhpbmdzIHRoYW4KPiBzb21lIGdpdmUgbWVyaXQuIFNv bWV0aW1lcywgYWxhcywgaW1wb3J0YW50IHBlcnNvbiBhZ3JlZXMgd2l0aCBoaW0KPiBldmVuIHdo ZW4gSSBkb24ndCA6LSkuIFNvbWV0aW1lcyBub3QuCj4KPiBPZGRzIG1heSBiZSBsYWlkIHRoYXQg bm93IHlvdSBoYXZlIHJhaXNlZCB0aGUgc3BlY3RyZSBvZiBmZXZlcmVkCj4gcGFydGlzYW4gYmlh cywgd2UgbWF5IHNlZSBzb21lIHN1Y2ggc29vbiBhZGRlZCB0byB0aGUgbWl4LiBCdXQsIG1heWJl Cj4gbm90LiBJJ2Qgd2FnZXIgdGhhdCAiT3JpZW50YWwiIG1heSBub3QgYmUgYSB0ZXJtIHRoYXQg S2xpbmdvbnMgLCBvcgo+IGV2ZW4gRmVycmVuZ2ksIGhhdmUgY29uY2VwdHMsIGxldCBhbG9uZSB3 b3JkcywgZm9yLCB3aGV0aGVyIGluIHRoZQo+IHJlYWxtcyBvZiBjb25zdHJ1Y3Rpb24gb2YgZmlu ZSBtYWNoaW5lcyBvciBvdGhlci4gVGhlIEdyZWVrcwo+IHVuZG91YnRlZGx5IGRpZCAoYnV0IHBy b2JhYmx5IG5vdCB3cnQgbWFjaGluZXJ5KS4KPgo+IE15IGFmb3JlbWVudGlvbmVkIGxpdHRlcm1h dGUgYW5kIGFueW9uZSB3aG8gZG9lcyBub3QgdHJ5IGV4Y2Vzc2l2ZWx5Cj4gaGFyZCBtYXkgaGF2 ZSBjb25jbHVkZWQgYmVmb3JlIG5vdyB0aGF0IEkgYW0gYmFiYmxpbmcuIEFzIHdlbGwgbWF5IGJl Cj4gdGhlIGNhc2UuIEV2ZW4gdGhvdWdoIGl0IGFsbCBzY2FucyAoRSZPRSkgYW5kIG1ha2VzIGEg ZGVncmVlIG9mZiBzZW5zZQo+IChZTU1WKS4KPgo+ID4gSSBmaW5kIGl0IHZlcnkgaW50ZXJlc3Rp bmcuIFBlcmhhcHMgYWRkaW5nIGEgc3VmZml4IG9mIFRhYm9vIHRvIHRoZSBPVAo+ID4gdGFnIHdv dWxkIGFsbG93IHVzIHRvIGNvbnRpbnVlIGluZGVmaW5pdGVseT8gIFNvbWV0aGluZyBsaWtlCj4g PiBbT1RdOlRhYm9vPwo+Cj4gTm8uIEFsYXMuCj4gV2hhdCBpcyByZXF1aXJlZCBpcyAibXkgc3Ry ZW5ndGggaXMgYXMgdGhlIHN0cmVuZ3RoIG9mIHRlbiBiZWNhdXNlLi4uIgo+IHN0cmFpZ2h0IGRl YWxpbmcgYW5kIGludGVudGlvbnMsIHdoaWNoLCBsYXJnZWx5LCBpbiBzdWNoIHRoaW5ncywgd2UK PiBoYXZlIG5vdCBnb3QqLgo+IFBlb3BsZSB0aGluayAndGFib28nIG9yIHdoYXRldmVyIG1lYW5z ICdpdCdzIG5vdyBPSyBub3QgdG8gYmUgbmllJyBhcwo+IGhhcyBiZWVuIGxvbmcgc2luY2UgZGVt b25zdHJhdGVkLiBBbmQsIHdoZW4gZnJlZWRvbSBpcyBhbGxvd2VkIHRoZSBPVAo+IGNoYW5uZWwg YmVjb21lcyBzb29uIGNhcHRpdmUgdG8gdGhlIGV4dHJlbWUgcmlnaHQgYW5kIGV4dHJlbWUgbGVm dCBvZgo+IHdoYXRldmVyIHN1YmplY3QgZW50ZXJzIGl0cyBkb29yLiBJZiB0aGVyZSBpcyBhbnl0 aGluZyBtb3JlCj4gZGlzcXVpZXRpbmcgdGhhbiBvYnNlcnZpbmcgemVhbG90cyBvZiBvcHBvc2lu ZyB2aWV3IHNob3dpbmcgZXZlcnlvbmUKPiBob3cgZmFjaWxlIHRoZXkgYXJlLCBpdHMgYSBlaXN0 ZWRkZm9kIG9mIHplYWxvdHMgYWxsIG9mIGEgZmVhdGhlcgo+IHNsYXBwaW5nIGVhY2ggb3RoZXIg b24gdGhlIGJhY2sgYW5kIHNheWluZyBob3cgcmlnaHQgdGhleSBhcmUgYW5kIHdoYXQKPiB0dXJr ZXlzIHRoZSBvdGhlciBndXlzIGFyZS4gRG9uJ3QgYXNrIG1lIGhvdyBJIGtub3cuCj4KPiBbKiBO YW1pbmcgb2YgcGFydHNdW0dhcmdveWxlIGtub3dzXSoqLgo+Cj4gKiogTXVjaCBhcyBJIGhhdGUg dG8gbWFrZSBpdCBlYXN5IHRvIGZvbGxvdyBteSBzZW1pLXJhbmRvbSAgZm9yYXlzLAo+IHRoaXMg c2VlbXMgYSBiZXR0ZXIgdGhhbiBhdmVyYWdlIGNvbW1lbnRhcnkgb24gTi5PLlAuCj4gQmVjYXVz ZTogaXQgaGFzIHZhcmlvdXMgaW5kaXZpZHVhbHMgaGFwcGlseSBkaXNhZ3JlZWluZyB3aXRoIGVh Y2gKPiBvdGhlciwgc29tZSBoYXZpbmcgbGl0dGxlICBpZGVhIG9mIHdoYXQgdGhleSBzcGVhayBv ZiBbdG1dLgo+IFR1cmJpbmVzIHNwb29saW5nIHVwIC4uLgo+Cj4gaHR0cDovL3dvbmRlcmluZ21p bnN0cmVscy5ibG9nc3BvdC5jb20vMjAwMC8wNC9uYW1pbmctb2YtcGFydHMtaGVucnktcmVlZC5o dG1sCj4KPiA+IE9yIGlzIGl0IHRoZSBjYXNlIHRoYXQgaGUgd2hvIGNvbXBsYWlucyB3YW50cyB0 byBsaW1pdCB3aGF0IEkgY2FuIGRvPwo+Cj4gVGhhdCBhcHByb2FjaGVzIGEgc2VsZiBldmlkZW50 IHRydXRoIHRvIHBvc3NpYmx5IG5vdCBiZSB1c2VmdWwuCj4gSXQgd291bGQsIEkgdGhpbmssIGJl IHVudXN1YWwgdG8gY29tcGxhaW4gYWJvdXQgYW55IHdyb25nLCBpbWFnaW5lZCBvcgo+IHRydWUs ICBpdCB5b3Ugd2VyZSBub3Qgc2Vla2luZyByZWRyZXNzLiBObz8KPgo+ID4gUGxlYXNlIGRvIGNv bnRpbnVlIQo+Cj4gOi0pCj4KPgo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGxlc3N1Ugo+ Cj4KV293LiBKdXN0LCB3b3cuCkknbSBub3Qgc3VyZSB3aGljaCBkaXN0dXJicyBtZSBtb3JlLiBI b3cgbXVjaCBvZiB0aGF0IEkgdW5kZXJzdG9vZCwgb3IgaG93Cm11Y2ggSSBkaWRuJ3QuCgotRGVu bnkKLS0gCmh0dHA6Ly93d3cucGljbGlzdC5jb20gUElDL1NYIEZBUSAmIGxpc3QgYXJjaGl2ZQpW aWV3L2NoYW5nZSB5b3VyIG1lbWJlcnNoaXAgb3B0aW9ucyBhdApodHRwOi8vbWFpbG1hbi5taXQu ZWR1L21haWxtYW4vbGlzdGluZm8vcGljbGlzdAo= .