From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Huang, Kai" Subject: Re: [RFC PATCH 00/15] RFC: SGX virtualization design and draft patches Date: Fri, 21 Jul 2017 21:04:54 +1200 Message-ID: <38df0575-e170-fe61-a3a3-220222fa399b@linux.intel.com> References: <8b4da043-e27e-773a-52f7-625fa2aa0b13@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <8b4da043-e27e-773a-52f7-625fa2aa0b13@linux.intel.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Andrew Cooper , Kai Huang , xen-devel@lists.xen.org Cc: kevin.tian@intel.com, sstabellini@kernel.org, wei.liu2@citrix.com, George.Dunlap@eu.citrix.com, tim@xen.org, ian.jackson@eu.citrix.com, jbeulich@suse.com List-Id: xen-devel@lists.xenproject.org CgpPbiA3LzE3LzIwMTcgNjowOCBQTSwgSHVhbmcsIEthaSB3cm90ZToKPiBIaSBBbmRyZXcsCj4g Cj4gVGhhbmsgeW91IHZlcnkgbXVjaCBmb3IgY29tbWVudHMuIFNvcnJ5IGZvciBsYXRlIHJlcGx5 LCBhbmQgcGxlYXNlIHNlZSAKPiBteSByZXBseSBiZWxvdy4KPiAKPiBPbiA3LzEyLzIwMTcgMjox MyBBTSwgQW5kcmV3IENvb3BlciB3cm90ZToKPj4gT24gMDkvMDcvMTcgMDk6MDMsIEthaSBIdWFu ZyB3cm90ZToKPj4+IEhpIGFsbCwKPj4+Cj4+PiBUaGlzIHNlcmllcyBpcyBSRkMgWGVuIFNHWCB2 aXJ0dWFsaXphdGlvbiBzdXBwb3J0IGRlc2lnbiBhbmQgUkZDIAo+Pj4gZHJhZnQgcGF0Y2hlcy4K Pj4KPj4gVGhhbmt5b3UgdmVyeSBtdWNoIGZvciB0aGlzIGRlc2lnbiBkb2MuCj4+Cj4+PiAyLiBT R1ggVmlydHVhbGl6YXRpb24gRGVzaWduCj4+Pgo+Pj4gMi4xIEhpZ2ggTGV2ZWwgVG9vbHN0YWNr IENoYW5nZXM6Cj4+Pgo+Pj4gMi4xLjEgTmV3ICdlcGMnIHBhcmFtZXRlcgo+Pj4KPj4+IEVQQyBp cyBsaW1pdGVkIHJlc291cmNlLiBJbiBvcmRlciB0byB1c2UgRVBDIGVmZmljaWVudGx5IGFtb25n IGFsbCAKPj4+IGRvbWFpbnMsCj4+PiB3aGVuIGNyZWF0aW5nIGd1ZXN0LCBhZG1pbmlzdHJhdG9y IHNob3VsZCBiZSBhYmxlIHRvIHNwZWNpZnkgZG9tYWluJ3MgCj4+PiB2aXJ0dWFsCj4+PiBFUEMg c2l6ZS4gQW5kIGFkbWluCj4+PiBhbGFvIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhbGwgZG9tYWlu J3MgdmlydHVhbCBFUEMgc2l6ZS4KPj4+Cj4+PiBGb3IgdGhpcyBwdXJwb3NlLCBhIG5ldyAnZXBj ID0gPHNpemU+JyBwYXJhbWV0ZXIgaXMgYWRkZWQgdG8gWEwgCj4+PiBjb25maWd1cmF0aW9uCj4+ PiBmaWxlLiBUaGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgZ3Vlc3QncyB2aXJ0dWFsIEVQQyBzaXpl LiBUaGUgRVBDIGJhc2UgCj4+PiBhZGRyZXNzCj4+PiB3aWxsIGJlIGNhbGN1bGF0ZWQgYnkgdG9v bHN0YWNrIGludGVybmFsbHksIGFjY29yZGluZyB0byBndWVzdCdzIAo+Pj4gbWVtb3J5IHNpemUs Cj4+PiBNTUlPIHNpemUsIGV0Yy4gJ2VwYycgaXMgTUIgaW4gdW5pdCBhbmQgYW55IDFNQiBhbGln bmVkIHZhbHVlIHdpbGwgYmUgCj4+PiBhY2NlcHRlZC4KPj4KPj4gSG93IHdpbGwgdGhpcyBpbnRl cmFjdCB3aXRoIG11bHRpLXBhY2thZ2Ugc2VydmVycz8gIEV2ZW4gdGhvdWdoIGl0cyAKPj4gZmlu ZSB0byBpbXBsZW1lbnQgdGhlIHNpbmdsZS1wYWNrYWdlIHN1cHBvcnQgZmlyc3QsIHRoZSBkZXNp Z24gc2hvdWxkIAo+PiBiZSBleHRlbnNpYmxlIHRvIHRoZSBtdWx0aS1wYWNrYWdlIGNhc2UuCj4+ Cj4+IEZpcnN0IG9mIGFsbCwgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiBtdWx0aS1wYWNr YWdlIFNHWD8KPj4KPj4gKFNvbWV3aGVyZSkgeW91IG1lbnRpb24gY2hhbmdlcyB0byBzY2hlZHVs aW5nLiAgSSBwcmVzdW1lIHRoaXMgaXMgCj4+IGJlY2F1c2UgYSBndWVzdCB3aXRoIEVQQyBtYXBw aW5ncyBpbiBFUFQgbXVzdCBiZSBzY2hlZHVsZWQgb24gdGhlIHNhbWUgCj4+IHBhY2thZ2UsIG9y IEVOQ0xVW0VFTlRFUl0gd2lsbCBmYWlsLiAgSSBwcmVzdW1lIGFsc28gdGhhdCBlYWNoIHBhY2th Z2UgCj4+IHdpbGwgaGF2ZSBzZXBhcmF0ZSwgdW5yZWxhdGVkIHByaXZhdGUga2V5cz8KPiAKPiBU aGUgRU5DTFVbRUVOVEVdIHdpbGwgY29udGludWUgdG8gd29yayBvbiBtdWx0aS1wYWNrYWdlIHNl cnZlci4gQWN0dWFsbHkgCj4gSSB3YXMgdG9sZCBhbGwgSVNBIGV4aXN0aW5nIGJlaGF2aW9yIGRv Y3VtZW50ZWQgaW4gU0RNIHdvbid0IGNoYW5nZSBmb3IgCj4gc2VydmVyLCBhcyBvdGhlcndpc2Ug dGhpcyB3b3VsZCBiZSBhIGJhZCBkZXNpZ24gOikKPiAKPiBVbmZvcnR1bmF0ZWx5IEkgd2FzIHRv bGQgSSBjYW5ub3QgdGFsayBhYm91dCBNUCBzZXJ2ZXIgU0dYIGEgbG90IG5vdy4gCj4gQmFzaWNh bGx5IEkgY2FuIG9ubHkgdGFsayBhYm91dCBzdGFmZiBhbHJlYWR5IGRvY3VtZW50ZWQgaW4gU0RN IChzb3JyeSAKPiA6KCApLiBCdXQgSSBndWVzcyBtdWx0aXBsZSBFUEMgaW4gQ1BVSUQgaXMgZGVz aWduZWQgdG8gY292ZXIgTVAgc2VydmVyLCAKPiBhdCBsZWFzZSBtYWlubHkgKHdlIGNhbiBkbyBy ZWFzb25hYmxlIGd1ZXNzKS4KPiAKPiBJbiB0ZXJtcyBvZiB0aGUgZGVzaWduLCBJIHRoaW5rIHdl IGNhbiBmb2xsb3cgWEwgY29uZmlnIGZpbGUgcGFyYW1ldGVycyAKPiBmb3IgbWVtb3J5LiAnZXBj JyBwYXJhbWV0ZXIgd2lsbCBhbHdheXMgc3BlY2lmeSB0b3RvbCBFUEMgc2l6ZSB0aGF0IHRoZSAK PiBkb21haW4gaGFzLiBBbmQgd2UgY2FuIHVzZSBleGlzdGluZyBOVU1BIHJlbGF0ZWQgcGFyYW1l dGVycywgc3VjaCBhcyAKPiBzZXR0aW5nIGNwdXM9Jy4uLicgdG8gcGh5c2ljYWxseSBwaW4gdmNw dSB0byBzcGVjaWZpYyBwQ1BVcywgc28gdGhhdCBFUEMgCj4gd2lsbCBiZSBtb3N0bHkgYWxsb2Nh dGVkIGZyb20gcmVsYXRlZCBub2RlLiBJZiB0aGF0IG5vZGUgcnVucyBvdXQgb2YgCj4gRVBDLCB3 ZSBjYW4gZGVjaWRlIHdoZXRoZXIgdG8gYWxsb2NhdGUgRVBDIGZyb20gb3RoZXIgbm9kZSwgb3Ig ZmFpbCB0byAKPiBjcmVhdGUgZG9tYWluLiBJIGtub3cgTGludXggc3VwcG9ydHMgTlVNQSBwb2xp Y3kgd2hpY2ggY2FuIHNwZWNpZnkgCj4gd2hldGhlciB0byBhbGxvdyBhbGxvY2F0aW5nIG1lbW9y eSBmcm9tIG90aGVyIG5vZGVzLCBkb2VzIFhlbiBoYXMgc3VjaCAKPiBwb2xpY3k/IFNvcnJ5IEkg aGF2ZW4ndCBjaGVja2VkIHRoaXMuIElmIFhlbiBoYXMgc3VjaCBwb2xpY3ksIHdlIG5lZWQgdG8g Cj4gY2hvb3NlIHdoZXRoZXIgdG8gdXNlIG1lbW9yeSBwb2xpY3ksIG9yIGludHJvZHVjZSBuZXcg cG9saWN5IGZvciBFUEMuCj4gCj4gSWYgd2UgYXJlIGdvaW5nIHRvIHN1cHBvcnQgdk5VQU0gRVBD IGluIHRoZSBmdXR1cmUuIFdlIGNhbiBhbHNvIHVzZSAKPiBzaW1pbGFyIHdheSB0byBjb25maWcg dk5VTUEgRVBDIGluIFhMIGNvbmZpZy4KPiAKPiBTb3JyeSBJIG1lbnRpb25lZCBzY2hlZHVsaW5n LiBJIHNob3VsZCBzYXkgKnBvdGVudGlhbGx5KiA6KS4gTXkgdGhpbmtpbmcgCj4gd2FzIGFzIFNH WCBpcyBwZXItdGhyZWFkLCB0aGVuIFNHWCBpbmZvIHJlcG9ydGVkIGJ5IGRpZmZlcmVudCBDUFUg Cj4gcGFja2FnZSBtYXkgYmUgZGlmZmVyZW50IChleCwgd2hldGhlciBTR1gyIGlzIHN1cHBvcnRl ZCksIHRoZW4gd2UgbWF5IAo+IG5lZWQgc2NoZWR1bGVyIHRvIGJlIGF3YXJlIG9mIFNHWC4gQnV0 IEkgdGhpbmsgd2UgZG9uJ3QgaGF2ZSB0byBjb25zaWRlciAKPiB0aGlzIG5vdy4KPiAKPiBXaGF0 J3MgeW91ciBjb21tZW50cz8KPiAKPj4KPj4gSSBwcmVzdW1lIHRoZXJlIGlzIG5vIHNlbnNpYmxl IHdheSAoZXZlbiBvbiBuYXRpdmUpIGZvciBhIHNpbmdsZSAKPj4gbG9naWNhbCBwcm9jZXNzIHRv IHVzZSBtdWx0aXBsZSBkaWZmZXJlbnQgZW5jbGF2ZXM/ICBCeSBleHRlbnNpb24sIAo+PiBkb2Vz IGl0IG1ha2Ugc2Vuc2UgdG8gdHJ5IGFuZCBvZmZlciBwYXJ0cyBvZiBtdWx0aXBsZSBlbmNsYXZl cyB0byBhIAo+PiBzaW5nbGUgVk0/Cj4gCj4gVGhlIG5hdGl2ZSBtYWNoaW5lIGFsbG93cyBydW5u aW5nIG11bHRpcGxlIGVuY2xhdmVzLCBldmVuIHNpZ25lZCBieSAKPiBtdWx0aXBsZSBhdXRob3Jz LiBTR1ggb25seSBoYXMgbGltaXQgdGhhdCBiZWZvcmUgbGF1bmNoaW5nIGFueSBvdGhlciAKPiBl bmNsYXZlLCBMYXVuY2ggRW5jbGF2ZSAoTEUpIG11c3QgYmUgbGF1bmNoZWQuIExFIGlzIHRoZSBv bmx5IGVuY2xhdmUgCj4gdGhhdCBkb2Vzbid0IHJlcXVpcmUgRUlOSVRUT0tFTiBpbiBFSU5JVC4g Rm9yIExFLCBpdHMgc2lnbmVyIAo+IChTSEEyNTYoc2lnc3RydWN0LT5tb2R1bHVzKSkgbXVzdCBi ZSBlcXVhbCB0byB0aGUgdmFsdWUgaW4gCj4gSUEzMl9TR1hMRVBVQktFWUhBU0huIE1TUnMuIExF IHdpbGwgZ2VuZXJhdGVzIEVJTklUVE9LRU4gZm9yIG90aGVyIAo+IGVuY2xhdmVzIChFSU5JVCBm b3Igb3RoZXIgZW5jbGF2ZXMgcmVxdWlyZXMgRUlOSVRUT0tFTikuIEZvciBvdGhlciAKPiBlbmNs YXZlcywgdGhlcmUncyBubyBzdWNoIGxpbWl0YXRpb24gdGhhdCBlbmNsYXZlJ3Mgc2lnbmVyIG11 c3QgbWF0Y2ggCj4gSUEzMl9TR1hMRVBVQktFWUhBU0huIHNvIHRoZSBzaWduZXIgY2FuIGJlIGFu eWJvZHkuIEJ1dCBmb3Igb3RoZXIgCj4gZW5jbGF2ZXMsIGJlZm9yZSBydW5uaW5nIEVJTklULCB0 aGUgTEUncyBzaWduZXIgKHdoaWNoIGlzIGVxdWFsIHRvIAo+IElBMzJfU0dYTEVQVUJLRVlIQVNI biBhcyBleHBsYWluZWQgYWJvdmUpIG5lZWRzIHRvIGJlIHVwZGF0ZWQgdG8gCj4gSUEzMl9TR1hM RVBVQktFWUhBU0huIChNU1JzIGNhbiBiZSBjaGFuZ2VkLCBmb3IgZXhhbXBsZSwgd2hlbiB0aGVy ZSdzIAo+IG11bHRpcGxlIExFcyBydW5uaW5nIGluIE9TKS4gVGhpcyBpcyBiZWNhdXNlIEVJTklU IG5lZWRzIHRvIHBlcmZvcm0gCj4gRUlOSVRUT0tFTiBpbnRlZ3JpdHkgY2hlY2sgKEVJTklUVE9L RU4gY29udGFpbnMgTUFDIGluZm8gdGhhdCBjYWxjdWxhdGVkIAo+IGJ5IExFLCBhbmQgRUlOSVQg bmVlZHMgTEUncyBJQTMyX1NHWExFUFVCS0VZSEFTSG4gdG8gZGVyaXZlIHRoZSBrZXkgdG8gCj4g dmVyaWZ5IE1BQykuCj4gCj4gU0dYIGluIFZNIGRvZXNuJ3QgY2hhbmdlIHRob3NlIGJlaGF2aW9y cywgc28gaW4gVk0sIHRoZSBlbmNsYXZlcyBjYW4gCj4gYWxzbyBiZSBzaWduZWQgYnkgYW55b25l LCBidXQgWGVuIG5lZWRzIHRvIGVtdWxhdGUgSUEzMl9TR1hMRVBVQktFWUhBU0huIAo+IHNvIHRo YXQgd2hlbiBvbmUgVk0gaXMgcnVubmluZywgdGhlIGNvcnJlY3QgSUEzMl9TR1hMRVBVQktFWUhB U0huIGFyZSAKPiBhbHJlYWR5IGluIHBoeXNpY2FsIE1TUnMuCj4gCj4+Cj4+PiAyLjEuMyBOb3Rp ZnkgZG9tYWluJ3MgdmlydHVhbCBFUEMgYmFzZSBhbmQgc2l6ZSB0byBYZW4KPj4+Cj4+PiBYZW4g bmVlZHMgdG8ga25vdyBndWVzdCdzIEVQQyBiYXNlIGFuZCBzaXplIGluIG9yZGVyIHRvIHBvcHVs YXRlIEVQQyAKPj4+IHBhZ2VzIGZvcgo+Pj4gaXQuIFRvb2xzdGFjayBub3RpZmllcyBFUEMgYmFz ZSBhbmQgc2l6ZSB0byBYZW4gdmlhIAo+Pj4gWEVOX0RPTUNUTF9zZXRfY3B1aWQuCj4+Cj4+IEkg YW0gY3VycmVudGx5IGluIHRoZSBwcm9jZXNzIG9mIHJld29ya2luZyB0aGUgWGVuL1Rvb2xzdGFj ayBpbnRlcmZhY2UgCj4+IHdoZW4gaXQgY29tZXMgdG8gQ1BVSUQgaGFuZGxpbmcuICBUaGUgbGF0 ZXN0IGRlc2lnbiBpcyBhdmFpbGFibGUgaGVyZTogCj4+IGh0dHBzOi8vbGlzdHMueGVucHJvamVj dC5vcmcvYXJjaGl2ZXMvaHRtbC94ZW4tZGV2ZWwvMjAxNy0wNy9tc2cwMDM3OC5odG1sIAo+PiBi dXQgdGhlIGVuZCByZXN1bHQgd2lsbCBiZSB0aGUgdG9vbHN0YWNrIGV4cHJlc3NpbmcgaXRzIENQ VUlEIHBvbGljeSAKPj4gaW4gdGVybXMgb2YgdGhlIGFyY2hpdGVjdHVyYWwgbGF5b3V0Lgo+Pgo+ PiBUaGVyZWZvcmUsIEkgd291bGQgZXhwZWN0IHRoYXQsIGhvd2V2ZXIgdGhlIHNldHRpbmcgaXMg cmVwcmVzZW50ZWQgaW4gCj4+IHRoZSBjb25maWd1cmF0aW9uIGZpbGUsIHhsL2xpYnhsIHdvdWxk IGNvbmZpZ3VyZSBpdCB3aXRoIHRoZSAKPj4gaHlwZXJ2aXNvciBieSBzZXR0aW5nIENQVUlELjB4 MTJbMl0gd2l0aCB0aGUgYXBwcm9wcmlhdGUgYmFzZSBhbmQgc2l6ZS4KPiAKPiBJIGFncmVlLiBJ IHNhdyB5b3UgYXJlIHBsYW5uaW5nIHRvIGludHJvZHVjZSBuZXcgCj4gWEVOX0RPTUNUTF9nZXR7 c2V0fV9jcHVpZF9wb2xpY3ksIHdoaWNoIHdpbGwgYWxsb3cgdG9vbHN0YWNrIHRvIAo+IHF1ZXJ5 L3NldCBjcHVpZCBwb2xpY3kgaW4gc2luZ2xlIGh5cGVyY2FsbCAoaWYgSSB1bmRlcnN0YW5kIGNv cnJlY3RseSksIAo+IHNvIEkgdGhpbmsgd2Ugc2hvdWxkIGRlZmluaXRlbHkgdXNlIHRoZSBuZXcg aHlwZXJjYWxscy4KPiAKPiBJIGFsc28gc2F3IHlvdSBhcmUgcGxhbm5pbmcgdG8gaW50cm9kdWNl IG5ldyBoeXBlcmNhbGwgdG8gcXVlcnkgCj4gcmF3L2hvc3QvcHZfbWF4L2h2bV9tYXggY3B1aWQg cG9saWN5IChub3QganVzdCBmZWF0dXJlc2V0KSwgc28gSSB0aGluayAKPiAneGwgc2d4aW5mbycg KG9yIHhsIGluZm8gLXNneCkgY2FuIGNlcnRhaW5seSB1c2UgdGhhdCB0byBnZXQgcGh5c2ljYWwg Cj4gU0dYIGluZm8gKEVQQyBpbmZvKS4gQW5kICd4bCBzZ3hsaXN0JyAob3IgeGwgbGlzdCAtc2d4 KSBjYW4gdXNlIAo+IFhFTl9ET01DVExfZ2V0e3NldH1fY3B1aWRfcG9saWN5IHRvIGRpc3BsYXkg ZG9tYWluJ3MgU0dYIGluZm8gKEVQQyBpbmZvKS4KPiAKPiBCdHcsIGRvIHlvdSB0aGluayB3ZSBu ZWVkICd4bCBzZ3hpbmZvJyBhbmQgJ3hsIHNneGxpc3QnPyBJZiB3ZSBkbywgd2hpY2ggCj4gaXMg YmV0dGVyPyBOZXcgJ3hsIHNneGluZm8nIGFuZCAneGwgc2d4bGlzdCcsIG9yIGV4dGVuZGluZyBl eGlzdGluZyAneGwgCj4gaW5mbycgYW5kICd4bCBsaXN0JyB0byBzdXBwb3J0IFNHWCwgc3VjaCBh cyAneGwgaW5mbyAtc2d4JyBhbmQgJ3hsIGxpc3QgCj4gLXNneCcgYWJvdmU/Cj4gCj4gCj4+Cj4+ PiAyLjEuNCBMYXVuY2ggQ29udHJvbCBTdXBwb3J0ICg/KQo+Pj4KPj4+IFhlbiBMYXVuY2ggQ29u dHJvbCBTdXBwb3J0IGlzIGFib3V0IHRvIHN1cHBvcnQgcnVubmluZyBtdWx0aXBsZSAKPj4+IGRv bWFpbnMgd2l0aAo+Pj4gZWFjaCBydW5uaW5nIGl0cyBvd24gTEUgc2lnbmVkIGJ5IGRpZmZlcmVu dCBvd25lcnMgKGlmIEhXIGFsbG93cywgCj4+PiBleHBsYWluZWQKPj4+IGJlbG93KS4gQXMgZXhw bGFpbmVkIGluIDEuNCBTR1ggTGF1bmNoIENvbnRyb2wsIEVJTklUIGZvciBMRSAoTGF1bmNoIAo+ Pj4gRW5jbGF2ZSkKPj4+IG9ubHkgc3VjY2VlZHMgd2hlbiBTSEEyNTYoU0lHU1RSVUNULm1vZHVs dXMpIG1hdGNoZXMgCj4+PiBJQTMyX1NHWExFUFVCS0VZSEFTSG4sCj4+PiBhbmQgRUlOSVQgZm9y IG90aGVyIGVuY2xhdmVzIHdpbGwgZGVyaXZlIEVJTklUVE9LRU4ga2V5IGFjY29yZGluZyB0bwo+ Pj4gSUEzMl9TR1hMRVBVQktFWUhBU0huLiBUaGVyZWZvcmUsIHRvIHN1cHBvcnQgdGhpcywgZ3Vl c3QncyB2aXJ0dWFsCj4+PiBJQTMyX1NHWExFUFVCS0VZSEFTSG4gbXVzdCBiZSB1cGRhdGVkIHRv IHBoeWlzY2FsIE1TUnMgYmVmb3JlIEVJTklUIAo+Pj4gKHdoaWNoCj4+PiBhbHNvIG1lYW5zIHRo ZSBwaHlzaWNhbCBJQTMyX1NHWExFUFVCS0VZSEFTSG4gbmVlZCB0byBiZSAqdW5sb2NrZWQqIAo+ Pj4gaW4gQklPUwo+Pj4gYmVmb3JlIGJvb3RpbmcgdG8gT1MpLgo+Pj4KPj4+IEZvciBwaHlzaWNh bCBtYWNoaW5lLCBpdCBpcyBCSU9TJ3Mgd3JpdGVyJ3MgZGVjaXNpb24gdGhhdCB3aGV0aGVyIAo+ Pj4gQklPUyB3b3VsZAo+Pj4gcHJvdmlkZSBpbnRlcmZhY2UgZm9yIHVzZXIgdG8gc3BlY2lmeSBj dXN0b21lcml6ZWQgCj4+PiBJQTMyX1NHWExFUFVCS0VZSEFTSG4gKGl0Cj4+PiBpcyBkZWZhdWx0 IHRvIGRpZ2VzdCBvZiBJbnRlbCdzIHNpZ25pbmcga2V5IGFmdGVyIHJlc2V0KS4gSW4gcmVhbGl0 eSwgCj4+PiBPUydzIFNHWAo+Pj4gZHJpdmVyIG1heSByZXF1aXJlIEJJT1MgdG8gbWFrZSBNU1Jz ICp1bmxvY2tlZCogYW5kIGFjdGl2ZWx5IHdyaXRlIAo+Pj4gdGhlIGhhc2gKPj4+IHZhbHVlIHRv IE1TUnMgaW4gb3JkZXIgdG8gcnVuIEVJTklUIHN1Y2Nlc3NmdWxseSwgYXMgaW4gdGhpcyBjYXNl LCAKPj4+IHRoZSBkcml2ZXIKPj4+IHdpbGwgbm90IGRlcGVuZCBvbiBCSU9TJ3MgY2FwYWJpbGl0 eSAod2hldGhlciBpdCBhbGxvd3MgdXNlciB0byAKPj4+IGN1c3RvbWVyaXplCj4+PiBJQTMyX1NH WExFUFVCS0VZSEFTSG4gdmFsdWUpLgo+Pj4KPj4+IFRoZSBwcm9ibGVtIGlzIGZvciBYZW4sIGRv IHdlIG5lZWQgYSBuZXcgcGFyYW1ldGVyLCBzdWNoIGFzIAo+Pj4gJ2xlaGFzaD08U0hBMjU2PicK Pj4+IHRvIHNwZWNpZnkgdGhlIGRlZmF1bHQgdmFsdWUgb2YgZ3VzZXQncyB2aXJ0dWFsIAo+Pj4g SUEzMl9TR1hMRVBVQktFWUhBU0huPyBBbmQgZG8KPj4+IHdlIG5lZWQgYSBuZXcgcGFyYW1ldGVy LCBzdWNoIGFzICdsZXdyJyB0byBzcGVjaWZ5IHdoZXRoZXIgZ3Vlc3QncyAKPj4+IHZpcnR1YWwg TVNScwo+Pj4gYXJlIGxvY2tlZCBvciBub3QgYmVmb3JlIGhhbmRsaW5nIHRvIGd1ZXN0J3MgT1M/ Cj4+Pgo+Pj4gSSB0ZW5kcyB0byBub3QgaW50cm9kdWNlICdsZWhhc2gnLCBhcyBpdCBzZWVtcyBT R1ggZHJpdmVyIHdvdWxkIAo+Pj4gYWN0aXZlbHkgdXBkYXRlCj4+PiB0aGUgTVNScy4gQW5kIG5l dyBwYXJhbWV0ZXIgd291bGQgYWRkIGFkZGl0aW9uYWwgY2hhbmdlcyBmb3IgdXBwZXIgbGF5ZXIK Pj4+IHNvZnR3YXJlIChzdWNoIGFzIG9wZW5zdGFjaykuIEFuZCAnbGV3cicgaXMgbm90IG5lZWRl ZCBlaXRoZXIgYXMgWGVuIAo+Pj4gY2FuIGFsd2F5cwo+Pj4gKnVubG9jayogdGhlIE1TUnMgdG8g Z3Vlc3QuCj4+Pgo+Pj4gUGxlYXNlIGdpdmUgY29tbWVudHM/Cj4+Pgo+Pj4gQ3VycmVudGx5IGlu IG15IFJGQyBwYXRjaGVzIGFib3ZlIHR3byBwYXJhbWV0ZXJzIGFyZSBub3QgaW1wbGVtZW50ZWQu Cj4+PiBYZW4gaHlwZXJ2aXNvciB3aWxsIGFsd2F5cyAqdW5sb2NrKiB0aGUgTVNScy4gV2hldGhl ciB0aGVyZSBpcyAnbGVoYXNoJwo+Pj4gcGFyYW1ldGVyIG9yIG5vdCBkb2Vzbid0IGltcGFjdCBY ZW4gaHlwZXJ2aXNvcidzIGVtdWxhdGlvbiBvZgo+Pj4gSUEzMl9TR1hMRVBVQktFWUhBU0huLiBT ZWUgYmVsb3cgWGVuIGh5cGVydmlzb3IgY2hhbmdlcyBmb3IgZGV0YWlscy4KPj4KPj4gUmVhZGlu ZyBhcm91bmQsIGFtIEkgY29ycmVjdCB3aXRoIHRoZSBmb2xsb3dpbmc/Cj4+Cj4+IDEpIFNvbWUg cHJvY2Vzc29ycyBoYXZlIG5vIGxhdW5jaCBjb250cm9sLiAgVGhlcmUgaXMgbm8gcmVzdHJpY3Rp b24gb24gCj4+IHdoaWNoIGVuY2xhdmVzIGNhbiBib290Lgo+IAo+IFllcyB0aGF0IHNvbWUgcHJv Y2Vzc29ycyBoYXZlIG5vIGxhdW5jaCBjb250cm9sLiBIb3dldmVyIGl0IGRvZXNuJ3QgbWVhbiAK PiB0aGVyZSdzIG5vIHJlc3RyaWN0aW9uIG9uIHdoaWNoIGVuY2xhdmVzIGNhbiBib290LiBDb250 cmFyeSwgb24gdGhvc2UgCj4gbWFjaGluZXMgb25seSBJbnRlbCdzIExhdW5jaCBFbmNsYXZlIChM RSkgY2FuIHJ1biwgYXMgb24gdGhvc2UgbWFjaGluZSwgCj4gSUEzMl9TR1hMRVBVQktFWUhBU0hu IGVpdGhlciBkb2Vzbid0IGV4aXN0LCBvciBlcXVhbCB0byBkaWdlc3Qgb2YgCj4gSW50ZWwncyBz aWduaW5nIFJTQSBwdWJrZXkuIEhvd2V2ZXIgYWx0aG91Z2ggb25seSBJbnRlbCdzIExFIGNhbiBi ZSBydW4sIAo+IHdlIGNhbiBzdGlsbCBydW4gb3RoZXIgZW5jbGF2ZXMgZnJvbSBvdGhlciBzaWdu ZXJzLiBQbGVhc2Ugc2VlIG15IHJlcGx5IAo+IGFib3ZlLgo+IAo+Pgo+PiAyKSBTb21lIFNreWxh a2UgY2xpZW50IHByb2Nlc3NvcnMgY2xhaW0gdG8gaGF2ZSBsYXVuY2ggY29udHJvbCwgYnV0IAo+ PiB0aGUgTVNScyBhcmUgdW5hdmFpbGFibGUgKGlzIHRoaXMgYW4gZXJyYXR1bT8pLiAgVGhlc2Ug YXJlIGxpbWl0ZWQgdG8gCj4+IGJvb3RpbmcgZW5jbGF2ZXMgbWF0Y2hpbmcgdGhlIEludGVsIHB1 YmxpYyBrZXkuCj4gCj4gU29ycnkgSSBkb24ndCBrbm93IHdoZXRoZXIgdGhpcyBpcyBhbiBlcnJh dHVtLiBJIHdpbGwgZ2V0IGJhY2sgdG8geW91IAo+IGFmdGVyIGNvbmZpcm1pbmcgaW50ZXJuYWxs eS4KCkhpIEFuZHJldywKCkkgcmFpc2VkIHRoaXMgaW50ZXJuYWxseSwgYW5kIGl0IHR1cm5zIG91 dCB0aGF0IGluIHRoZSBsYXRlc3QgU0RNIEludGVsIApoYXMgZml4ZWQgdGhlIHN0YXRlbWVudCwg c28gdGhhdCBJQTMyX1NHWExFUFVCS0VZSEFTSG4gTVNScyBhcmUgb25seSAKYXZhaWxhYmxlIHdo ZW4gYm90aCBTR1ggYW5kIFNHWF9MQyBpcyBwcmVzZW50IGluIENQVUlELiBXaGVuIEkgd2FzIAp3 cml0aW5nIHRoZSBkZXNpZ24gYW5kIHBhdGNoZXMsIEkgd2FzIHJlZmVycmluZyB0byBvbGQgU0RN LCBhbmQgdGhlIG9sZCAKb25lIGRvZXNuJ3QgbWVudGlvbiBTR1hfTEMgaW4gQ1BVSUQgYXMgY29u ZGl0aW9uLiBTbyBpdCBpcyBteSBmYXVsdCBhbmQgCnRoaXMgc3RhdGVtZW50IGhhcyBiZWVuIGZp eGVkIGluIGxhdGVzdCBTRE0gKDQxLjIuMiBJbnRlbCBTR1ggTGF1bmNoIApDb250cm9sIENvbmZp Z3VyYXRpb24pOgoKaHR0cHM6Ly9zb2Z0d2FyZS5pbnRlbC5jb20vc2l0ZXMvZGVmYXVsdC9maWxl cy9tYW5hZ2VkLzdjL2YxLzMzMjgzMS1zZG0tdm9sLTNkLnBkZgoKSG93ZXZlciBpbiBsYXRlc3Qg U0RNIHZvbHVtZSA0OiBNb2RlbC1TcGVjaWZpYyBSZWdpc3RlcnM6CgpodHRwczovL3NvZnR3YXJl LmludGVsLmNvbS9zaXRlcy9kZWZhdWx0L2ZpbGVzL21hbmFnZWQvMjIvMGQvMzM1NTkyLXNkbS12 b2wtNC5wZGYKCllvdSBjYW4gc3RpbGwgc2VlIHRoYXQgZm9yIElBMzJfU0dYTEVQVUJLRVlIQVNI biAodGFibGUgMi0yLCByZWdpc3RlciAKYWRkcmVzcyA4Q0gpOiAiUmVhZCBwZXJtaXR0ZWQgSWYg Q1BVSUQuKEVBWD0xMkgsRUNYPTBIKTpFQVhbMF09MSIuIFNvIAp0aGVyZSdzIHN0aWxsIGVycm9y IGluIFNETS4KCkkgZG9uJ3QgdGhpbmsgdGhpcyB3aWxsIGJlIGFuIGVycmF0dW0uIEludGVsIHdp bGwgZml4IHRoZSBlcnJvciBpbiB2b2wgNCAKaW4gbmV4dCB2ZXJzaW9uIFNETS4gV2Ugc2hvdWxk IHJlZmVyIHRvIDQxLjIuMiBhcyBpdCBoYXMgYWNjdXJhdGUgCmRlc2NyaXB0aW9uLgoKPiAKPiAK Pj4KPj4gMykgTGF1bmNoIGNvbnRyb2wgbWF5IGJlIGxvY2tlZCBieSB0aGUgQklPUy4gIFRoZXJl IG1heSBiZSBhIGN1c3RvbSAKPj4gaGFzaCwgb3IgaXQgbWlnaHQgYmUgdGhlIEludGVsIGRlZmF1 bHQuICBYZW4gY2FuJ3QgYWRqdXN0IGl0IGF0IGFsbCwgCj4+IGJ1dCBjYW4gc3VwcG9ydCBydW5u aW5nIGFueSBudW1iZXIgb2YgVk1zIHdpdGggbWF0Y2hpbmcgZW5jbGF2ZXMuCj4gCj4gWWVzIExh dW5jaCBjb250cm9sIG1heSBiZSBsb2NrZWQgYnkgQklPUywgYWx0aG91Z2ggdGhpcyBkZXBlbmRz IG9uIAo+IHdoZXRoZXIgQklPUyBwcm92aWRlcyBpbnRlcmZhY2UgZm9yIHVzZXIgdG8gY29uZmln dXJlLiBJIHdhcyB0b2xkIHRoYXQgCj4gdHlwaWNhbGx5IEJJT1Mgd2lsbCB1bmxvY2sgTGF1bmNo IENvbnRyb2wsIGFzIFNHWCBkcml2ZXIgaXMgZXhwZWN0aW5nIAo+IHN1Y2ggYmVoYXZpb3IuIEJ1 dCBJIGFtIG5vdCBzdXJlIHdlIGNhbiBhbHdheXMgYXNzdW1lIHRoaXMuCj4gCj4gV2hldGhlciB0 aGVyZSB3aWxsIGJlIGN1c3RvbSBoYXNoIGFsc28gZGVwZW5kcyBvbiBCSU9TLiBCSU9TIG1heSBv ciBtYXkgCj4gbm90IHByb3ZpZGUgaW50ZXJmYWNlIGZvciB1c2VyIHRvIGNvbmZpZ3VyZSBjdXN0 b20gaGFzaC4gU28gb24gcGh5c2ljYWwgCj4gbWFjaGluZSwgSSB0aGluayB3ZSBuZWVkIHRvIGNv bnNpZGVyIGFsbCB0aGUgY2FzZXMuIE9uIG1hY2hpbmUgdGhhdCB3aXRoIAo+IExhdW5jaCBjb250 cm9sICp1bmxvY2tlZCosIFhlbiBpcyBhYmxlIHRvIGR5bmFtaWNhbGx5IGNoYW5nZSAKPiBJQTMy X1NHWExFS0VZSEFTSG4gc28gdGhhdCBYZW4gaXMgYWJsZSB0byBydW4gbXVsdGlwbGUgVk0gd2l0 aCBlYWNoIAo+IHJ1bm5pbmcgTEUgZnJvbSBkaWZmZXJlbnQgc2lnbmVyLiBIb3dldmVyIGlmIGxh dW5jaCBjb250cm9sIGlzICpsb2NrZWQqIAo+IGluIEJJT1MsIHRoZW4gWGVuIGlzIHN0aWxsIGFi bGUgdG8gcnVuIG11bHRpcGxlIFZNLCBidXQgYWxsIFZNIGNhbiBvbmx5IAo+IHJ1biBMRSBmcm9t IHRoZSBzaWduZXIgdGhhdCBtYXRjaGVzIHRoZSBJQTMyX1NHWExFUFVCS0VZSEFTSG4gKHdoaWNo IGluIAo+IG1vc3QgY2FzZSBzaG91bGQgYmUgSW50ZWwgZGVmYXVsdCwgYnV0IGNhbiBiZSBjdXN0 b20gaGFzaCBpZiBCSU9TIGFsbG93cyAKPiB1c2VyIHRvIGNvbmZpZ3VyZSkuCj4gCj4gU29ycnkg SSBhbSBub3QgcXVpdGUgc3VyZSB0aGUgdHlwaWNhbCBpbXBsZW1lbnRhdGlvbiBvZiBCSU9TLiBJ IHRoaW5rIEkgCj4gY2FuIHJlYWNoIG91dCBpbnRlcm5hbGx5IGFuZCBnZXQgYmFjayB0byB5b3Ug aWYgSSBoYXZlIHNvbWV0aGluZy4KCkkgYWxzbyByZWFjaGVkIG91dCBpbnRlcm5hbGx5IHRvIGZp bmQgdGhlIHR5cGljYWwgQklPUyBpbXBsZW1lbnRhdGlvbiBpbiAKdGVybXMgb2YgU0dYIExDLiBU eXBpY2FsbHkgQklPUyB3aWxsIG5laXRoZXIgcHJvdmlkZSBjb25maWd1cmF0aW9uIApvcHRpb25z IGZvciB1c2VyIHRvIHNldCBjdXN0b20gaGFzaCwgbm9yIHNlbGVjdCB3aGV0aGVyIE1TUnMgYXJl IGxvY2tlZCAKb3Igbm90LiBUeXBpY2FsbHkgZm9yIGNsaWVudCBtYWNoaW5lLCBNU1JzIGFyZSBs b2NrZWQgd2l0aCBJbnRlbCAKZGVmYXVsdCwgYW5kIGZvciBzZXJ2ZXIgbWFjaGluZSwgTVNScyBh cmUgdW5sb2NrZWQuIEJ1dCB3ZSBjYW5ub3QgcnVsZSAKb3V0IDNyZCBwYXJ0eSB0byBwcm92aWRl IGRpZmZlcmVudCBCSU9TIHRoYXQgbWF5IHByb3ZpZGUgb3B0aW9ucyBmb3IgCnVzZXIgdG8gY2hv b3NlIGxvY2tlZC91bmxvY2tlZCBtb2RlLCBhbmQvb3IgZm9yIHVzZXIgdG8gc3BlY2lmeSBjdXN0 b20gCmhhc2guIEN1c3RvbSBoYXNoICsgbG9ja2VkIG1vZGUgbWF5IGJlIHVzZWZ1bCBmb3Igc29t ZSBzcGVjaWFsIHB1cnBvc2UgCihleCwgSVQgbWFuYWdlbWVudCkgYXMgaXQgcHJvdmlkZXMgbW9z dCBzZWN1cmUgb3B0aW9uIC0tIHRoYXQgZXZlbiAKa2VybmVsL1ZNTSBjYW4gb25seSBsYXVuY2gg TEUgc2lnbmVkIHdpdGggcGFydGljdWxhciBzaWduZXIuIEluIGNhc2Ugb2YgClZNLCBjdXN0b20g aGFzaCArIGxvY2tlZCBtb2RlIG1heSBiZSBldmVuIG1vcmUgdXNlZnVsIHRoYW4gYmFyZS1tZXRh bCBhcyAKVk0gaXMgdXN1YWxseSBzdXBwb3NlZCB0byBydW4gc29tZSBwYXJ0aWN1bGFyIHB1cnBv c2UgYXBwbGlhbmNlLgoKU28gSSB0aGluayBpdCBpcyBiZXR0ZXIgdG8ga2VlcCAnbGVoYXNoJyBh bmQgJ2xld3InIFhMIHBhcmFtZXRlcnMuIFRoZXkgCmJvdGggYXJlIG9wdGlvbmFsIC0tIHRoZSBm b3JtZXIgcHJvdmlkZXMgY3VzdG9tIGhhc2gsIGFuZCB0aGUgbGF0dGVyIHNldCAKVk0gdG8gYmUg aW4gdW5sb2NrZWQgbW9kZS4gSWYgbmVpdGhlciBpcyBzcGVjaWZpZWQsIHRoZW4gVk0gd2lsbCBi ZSBpbiAKbG9ja2VkIG1vZGUsIGFuZCBWTSdzIHZpcnR1YWwgSUEzMl9TR1hMRVBVQktFWUhBU0hu IGVpdGhlciBoYXZlIEludGVsJ3MgCmRlZmF1bHQgdmFsdWUgKHdoZW4gcGh5c2ljYWwgbWFjaGlu ZSBpcyB1bmxvY2tlZCksIG9yIGhhdmUgbWFjaGluZSdzIE1TUiAKdmFsdWVzICh3aGVuIG1hY2hp bmUgaXMgaW4gbG9ja2VkIG1vZGUpLiBBbmQgd2hlbiBwaHlzaWNhbCBtYWNoaW5lIGlzIGluIAps b2NrZWQgbW9kZSwgc3BlY2lmeWluZyBlaXRoZXIgJ2xlaGFzaCcgb3IgJ2xld3InIHdpbGwgcmVz dWx0IGluIApjcmVhdGluZyBWTSBmYWlsdXJlLgoKU28gd2UgaGF2ZSAzIFhMIHBhcmFtZXRlcnMg Zm9yIFNHWDogJ2VwYycsICdsZWhhc2gnIGFuZCAnbGV3cicsIHByb2JhYmx5IAp3ZSBzaG91bGQg Y29uc29saWRhdGUgdGhlbSBpbnRvIG9uZSBYTCBwYXJhbWV0ZXIsIHN1Y2ggCnNneD1bJ2VwYz08 c2l6ZT4nLCAnbGVoYXNoPTxzaGEyNTY+JywgJ2xld3I9W29ufG9mZl0nXSA/CgpUaGFua3MsCi1L YWkKCj4gCj4+Cj4+IDQpIExhdW5jaCBjb250cm9sIG1heSBiZSB1bmxvY2tlZCBieSB0aGUgQklP Uy4gIEluIHRoaXMgY2FzZSwgWGVuIGNhbiAKPj4gY29udGV4dCBzd2l0Y2ggYSBoYXNoIHBlciBk b21haW4sIGFuZCBydW4gYWxsIGVuY2xhdmVzLgo+IAo+IFllcy4gV2l0aCBlbmNsYXZlID09IExF IEkgdGhpbmsgeW91IG1lYW50Lgo+IAo+Pgo+PiBUaGUgZXZlbnR1YWwgcGxhbnMgZm9yIENQVUlE IGFuZCBNU1IgbGV2ZWxsaW5nIHNob3VsZCBhbGxvdyBhbGwgb2YgCj4+IHRoZXNlIHRvIGJlIGV4 cHJlc3NlZCBpbiBzZW5zaWJsZSB3YXlzLCBhbmQgSSBkb24ndCBmb3JzZWUgYW55IGlzc3VlcyAK Pj4gd2l0aCBzdXBwb3J0aW5nIGFsbCBvZiB0aGVzZSBzY2VuYXJpb3MuCj4gCj4gU28gZG8geW91 IHRoaW5rIHdlIHNob3VsZCBoYXZlICdsZWhhc2gnIGFuZCAnbGV3cicgcGFyYW1ldGVycyBpbiBY TCAKPiBjb25maWcgZmlsZT8gVGhlIGZvcm1lciBwcm92aWRlcyBjdXN0b20gaGFzaCwgYW5kIHRo ZSBsYXR0ZXIgcHJvdmlkZXMgCj4gd2hldGhlciB1bmxvY2sgZ3Vlc3QncyBMYXVuY2ggY29udHJv bC4KPiAKPiBNeSB0aGlua2luZyBpcyBTR1ggZHJpdmVyIG5lZWRzIHRvICphY3RpdmVseSogd3Jp dGUgTEUncyBwdWJrZXkgaGFzaCB0byAKPiBJQTMyX1NHWExFUFVCS0VZSEFTSG4gaW4gKnVubG9j a2VkKiBtb2RlLCBzbyAnbGVoYXNoJyBhbG9uZSBpcyBub3QgCj4gbmVlZGVkLiAnbGVoYXNoJyBv bmx5IGhhcyBtZWFuaW5nIHdoZW4gJ2xld3InIGlzIG5lZWRlZCB0byBwcm92aWRlIGEgCj4gZGVm YXVsdCBoYXNoIHZhbHVlIGluIGxvY2tlZCBtb2RlLCBhcyBpZiB3ZSBhbHdheXMgdXNlICp1bmxv Y2tlZCogbW9kZSAKPiBmb3IgZ3Vlc3QsICdsZWhhc2gnIGlzIG5vdCBuZWNlc3NhcnkuCj4gCj4+ Cj4+Cj4+Cj4+PiAyLjIgSGlnaCBMZXZlbCBYZW4gSHlwZXJ2aXNvciBDaGFuZ2VzOgo+Pj4KPj4+ IDIuMi4xIEVQQyBNYW5hZ2VtZW50ICg/KQo+Pj4KPj4+IFhlbiBoeXBlcnZpc29yIG5lZWRzIHRv IGRldGVjdCBTR1gsIGRpc2NvdmVyIEVQQywgYW5kIG1hbmFnZSBFUEMgYmVmb3JlCj4+PiBzdXBw b3J0aW5nIFNHWCB0byBndWVzdC4gRVBDIGlzIGRldGVjdGVkIHZpYSBTR1ggQ1BVSUQgMHgxMi4w eDIuIEl0J3MgCj4+PiBwb3NzaWJsZQo+Pj4gdGhhdCB0aGVyZSBhcmUgbXVsdGlwbGUgRVBDIHNl Y3Rpb25zIChlbnVtZXJhdGVkIHZpYSBzdWItbGVhdmVzIDB4MyAKPj4+IGFuZCBzbyBvbiwKPj4+ IHVudGlsIGludmFpZCBFUEMgaXMgcmVwb3J0ZWQpLCBidXQgdGhpcyBpcyBvbmx5IHRydWUgb24g Cj4+PiBtdWx0aXBsZS1zb2NrZXQgc2VydmVyCj4+PiBtYWNoaW5lcy4gRm9yIHNlcnZlciBtYWNo aW5lcyB0aGVyZSBhcmUgYWRkaXRpb25hbCB0aGluZ3MgYWxzbyBuZWVkcyAKPj4+IHRvIGJlIGRv bmUsCj4+PiBzdWNoIGFzIE5VTUEgRVBDLCBzY2hlZHVsaW5nLCBldGMuIFdlIHdpbGwgc3VwcG9y dCBzZXJ2ZXIgbWFjaGluZSBpbiAKPj4+IHRoZSBmdXR1cmUKPj4+IGJ1dCBjdXJyZW50bHkgd2Ug b25seSBzdXBwb3J0IG9uZSBFUEMuCj4+Pgo+Pj4gRVBDIGlzIHJlcG9ydGVkIGFzIHJlc2VydmVk IG1lbW9yeSAoc28gaXQgaXMgbm90IHJlcG9ydGVkIGFzIG5vcm1hbCAKPj4+IG1lbW9yeSkuCj4+ PiBFUEMgbXVzdCBiZSBtYW5hZ2VkIGluIDRLIHBhZ2VzLiBDUFUgaGFyZHdhcmUgdXNlcyBFUENN IHRvIHRyYWNrIAo+Pj4gc3RhdHVzIG9mIGVhY2gKPj4+IEVQQyBwYWdlcy4gWGVuIG5lZWRzIHRv IG1hbmFnZSBFUEMgYW5kIHByb3ZpZGUgZnVuY3Rpb25zIHRvLCBpZSwgCj4+PiBhbGxvYyBhbmQg ZnJlZQo+Pj4gRVBDIHBhZ2VzIGZvciBndWVzdC4KPj4+Cj4+PiBUaGVyZSBhcmUgdHdvIHdheXMg dG8gbWFuYWdlIEVQQzogTWFuYWdlIEVQQyBzZXBhcmF0ZWx5OyBvciBJbnRlZ3JhdGUgCj4+PiBp dCB0bwo+Pj4gZXhpc3RpbmcgbWVtb3J5IG1hbmFnZW1lbnQgZnJhbWV3b3JrLgo+Pj4KPj4+IEl0 IGlzIGVhc3kgdG8gbWFuYWdlIEVQQyBzZXBhcmF0ZWx5LCBhcyBjdXJyZW50bHkgRVBDIGlzIHBy ZXR0eSBzbWFsbCAKPj4+ICh+MTAwTUIpLAo+Pj4gYW5kIHdlIGNhbiBldmVuIHB1dCB0aGVtIGlu IGEgc2luZ2xlIGxpc3QuIEhvd2V2ZXIgaXQgaXMgbm90IAo+Pj4gZmxleGlibGUsIGZvcgo+Pj4g ZXhhbXBsZSwgeW91IHdpbGwgaGF2ZSB0byB3cml0ZSBuZXcgYWxnb3JpdGhtcyB3aGVuIEVQQyBi ZWNvbWVzIAo+Pj4gbGFyZ2VyLCBleCwgR0IuCj4+PiBBbmQgeW91IGhhdmUgdG8gd3JpdGUgbmV3 IGNvZGUgdG8gc3VwcG9ydCBOVU1BIEVQQyAoYWx0aG91Z2ggdGhpcyAKPj4+IHdpbGwgbm90IGNv bWUKPj4+IGluIHNob3J0IHRpbWUpLgo+Pj4KPj4+IEludGVncmF0aW5nIEVQQyB0byBleGlzdGlu ZyBtZW1vcnkgbWFuYWdlbWVudCBmcmFtZXdvcmsgc2VlbXMgbW9yZSAKPj4+IHJlYXNvbmFibGUs Cj4+PiBhcyBpbiB0aGlzIHdheSB3ZSBjYW4gcmVzdW1lIG1lbW9yeSBtYW5hZ2VtZW50IGRhdGEg Cj4+PiBzdHJ1Y3R1cmVzL2FsZ29yaXRobXMsIGFuZAo+Pj4gaXQgd2lsbCBiZSBtb3JlIGZsZXhp YmxlIHRvIHN1cHBvcnQgbGFyZ2VyIEVQQyBhbmQgcG90ZW50aWFsbHkgTlVNQSAKPj4+IEVQQy4g QnV0Cj4+PiBtb2RpZnlpbmcgTU0gZnJhbWV3b3JrIGhhcyBhIGhpZ2hlciByaXNrIHRvIGJyZWFr IGV4aXN0aW5nIG1lbW9yeSAKPj4+IG1hbmFnZW1lbnQKPj4+IGNvZGUgKHBvdGVudGlhbGx5IG1v cmUgYnVncykuCj4+Pgo+Pj4gSW4gbXkgUkZDIHBhdGNoZXMgY3VycmVudGx5IHdlIGNob29zZSB0 byBtYW5hZ2UgRVBDIHNlcGFyYXRlbHkuIEEgbmV3Cj4+PiBzdHJ1Y3R1cmUgZXBjX3BhZ2UgaXMg YWRkZWQgdG8gcmVwcmVzZW50IGEgc2luZ2xlIDRLIEVQQyBwYWdlLiBBIAo+Pj4gd2hvbGUgYXJy YXkKPj4+IG9mIHN0cnVjdCBlcGNfcGFnZSB3aWxsIGJlIGFsbG9jYXRlZCBkdXJpbmcgRVBDIGlu aXRpYWxpemF0aW9uLCBzbyAKPj4+IHRoYXQgZ2l2ZW4KPj4+IHRoZSBvdGhlciwgb25lIG9mIFBG TiBvZiBFUEMgcGFnZSBhbmQgJ3N0cnVjdCBlcGNfcGFnZScgY2FuIGJlIGdvdCBieSAKPj4+IGFk ZGluZwo+Pj4gb2Zmc2V0Lgo+Pj4KPj4+IEJ1dCBtYXliZSBpbnRlZ3JhdGluZyBFUEMgdG8gTU0g ZnJhbWV3b3JrIGlzIG1vcmUgcmVhc29uYWJsZS4gQ29tbWVudHM/Cj4+Pgo+Pj4gMi4yLjIgRVBD IFZpcnR1YWxpemF0aW9uICg/KQo+Pgo+PiBJdCBsb29rcyBsaWtlIG1hbmFnaW5nIHRoZSBFUEMg aXMgdmVyeSBzaW1pbGFyIHRvIG1hbmFnaW5nIHRoZSBOVkRJTU0gCj4+IHJhbmdlcy4gIFdlIGhh dmUgYSAoc2V0IG9mKSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlcyB3aGljaCBuZWVkIDRrIAo+PiBv d25lcnNoaXAgZ3JhbnVsYXJpdHkgdG8gZGlmZmVyZW50IGRvbWFpbnMuCj4+Cj4+IEkgdGhpbmsg aW50ZWdyYXRpbmcgdGhpcyBpbnRvIHN0cnVjdCBwYWdlX3N0cnVjdCBpcyB0aGUgYmV0dGVyIHdh eSB0byBnby4KPiAKPiBXaWxsIGRvLiBTbyBJIGFzc3VtZSB3ZSB3aWxsIGludHJvZHVjZSBuZXcg TUVNRl9lcGMsIGFuZCB1c2UgZXhpc3RpbmcgCj4gYWxsb2NfZG9taGVhcC94ZW5oZWFwX3BhZ2Vz IHRvIGFsbG9jYXRlIEVQQz8gTUVNRl9lcGMgY2FuIGFsc28gYmUgdXNlZCAKPiBpZiB3ZSBuZWVk IHRvIHN1cHBvcnQgYmFsbG9vbmluZyBpbiB0aGUgZnV0dXJlICh1c2luZyBleGlzdGluZyAKPiBY RU5NRU1fe2RlY3JlYXNlL2luY3JlYXNlfV9yZXNlcnZhdGlvbi4KPiAKPj4KPj4+Cj4+PiBUaGlz IHBhcnQgaXMgaG93IHRvIHBvcHVsYXRlIEVQQyBmb3IgZ3Vlc3RzLiBXZSBoYXZlIDMgY2hvaWNl czoKPj4+ICAgICAgLSBTdGF0aWMgUGFydGl0aW9uaW5nCj4+PiAgICAgIC0gT3ZlcnN1YnNjcmlw dGlvbgo+Pj4gICAgICAtIEJhbGxvb25pbmcKPj4+Cj4+PiBTdGF0aWMgUGFydGl0aW9uaW5nIG1l YW5zIGFsbCBFUEMgcGFnZXMgd2lsbCBiZSBhbGxvY2F0ZWQgYW5kIG1hcHBlZCAKPj4+IHRvIGd1 ZXN0Cj4+PiB3aGVuIGl0IGlzIGNyZWF0ZWQsIGFuZCB0aGVyZSdzIG5vIHJ1bnRpbWUgY2hhbmdl IG9mIHBhZ2UgdGFibGUgCj4+PiBtYXBwaW5ncyBmb3IgRVBDCj4+PiBwYWdlcy4gT3ZlcnN1YnNj cmlwdGlvbiBtZWFucyBYZW4gaHlwZXJ2aXNvciBzdXBwb3J0cyBFUEMgcGFnZSAKPj4+IHN3YXBw aW5nIGJldHdlZW4KPj4+IGRvbWFpbnMsIG1lYW5pbmcgWGVuIGlzIGFibGUgdG8gZXZpY3QgRVBD IHBhZ2UgZnJvbSBhbm90aGVyIGRvbWFpbiAKPj4+IGFuZCBhc3NpZ24gaXQKPj4+IHRvIHRoZSBk b21haW4gdGhhdCBuZWVkcyB0aGUgRVBDLiBXaXRoIG92ZXJzdWJzY3JpcHRpb24sIEVQQyBjYW4g YmUgCj4+PiBhc3NpZ25lZCB0bwo+Pj4gZG9tYWluIG9uIGRlbWFuZCwgd2hlbiBFUFQgdmlvbGF0 aW9uIGhhcHBlbnMuIEJhbGxvb25pbmcgaXMgc2ltaWxhciAKPj4+IHRvIG1lbW9yeQo+Pj4gYmFs bG9vbmluZy4gSXQgaXMgYmFzaWNhbGx5ICJTdGF0aWMgUGFydGl0aW9uaW5nIiArICJCYWxsb29u IGRyaXZlciIgCj4+PiBpbiBndWVzdC4KPj4+Cj4+PiBTdGF0aWMgUGFydGl0aW9uaW5nIGlzIHRo ZSBlYXNpZXN0IHdheSBpbiB0ZXJtcyBvZiBpbXBsZW1lbnRhdGlvbiwgCj4+PiBhbmQgdGhlcmUK Pj4+IHdpbGwgYmUgbm8gaHlwZXJ2aXNvciBvdmVyaGVhZCAoZXhjZXB0IEVQVCBvdmVyaGVhZCBv ZiBjb3Vyc2UpLCAKPj4+IGJlY2F1c2UgaW4KPj4+ICJTdGF0aWMgcGFydGl0aW9uaW5nIiwgdGhl cmUgaXMgbm8gRVBUIHZpb2xhdGlvbiBmb3IgRVBDLCBhbmQgWGVuIAo+Pj4gZG9lc24ndCBuZWVk Cj4+PiB0byB0dXJuIG9uIEVOQ0xTIFZNRVhJVCBmb3IgZ3Vlc3QgYXMgRU5DTFMgcnVucyBwZXJm ZWN0bHkgaW4gbm9uLXJvb3QgCj4+PiBtb2RlLgo+Pj4KPj4+IEJhbGxvb25pbmcgaXMgIlN0YXRp YyBQYXJ0aXRpb25pbmciICsgIkJhbGxvb24gZHJpdmVyIiBpbiBndWVzdC4gTGlrZSAKPj4+ICJT dGF0aWMKPj4+IFBhcmF0aXRpb25pbmciLCBiYWxsb29uaW5nIGRvZXNuJ3QgbmVlZCB0byB0dXJu IG9uIEVOQ0xTIFZNRVhJVCwgYW5kIAo+Pj4gZG9lc24ndAo+Pj4gaGF2ZSBFUFQgdmlvbGF0aW9u IGZvciBFUEMgZWl0aGVyLiBUbyBzdXBwb3J0IGJhbGxvb25pbmcsIHdlIG5lZWQgCj4+PiBiYWxs b29uaW5nCj4+PiBkcml2ZXIgaW4gZ3Vlc3QgdG8gaXNzdWUgaHlwZXJjYWxsIHRvIGdpdmUgdXAg b3IgcmVjbGFpbSBFUEMgcGFnZXMuIAo+Pj4gSW4gdGVybXMgb2YKPj4+IGh5cGVyY2FsbCwgd2Ug aGF2ZSB0d28gY2hvaWNlczogMSkgQWRkIG5ldyBoeXBlcmNhbGwgZm9yIEVQQyAKPj4+IGJhbGxv b25pbmc7IDIpCj4+PiBVc2luZyBleGlzdGluZyBYRU5NRU1fe2luY3JlYXNlL2RlY3JlYXNlfV9y ZXNlcnZhdGlvbiB3aXRoIG5ldyBtZW1vcnkgCj4+PiBmbGFnLCBpZSwKPj4+IFhFTk1FTUZfZXBj LiBJJ2xsIGRpc2N1c3MgbW9yZSByZWdhcmRpbmcgdG8gYWRkaW5nIGRlZGljYXRlZCAKPj4+IGh5 cGVyY2FsbCBvciBub3QKPj4+IGxhdGVyLgo+Pj4KPj4+IE92ZXJzdWJzY3JpcHRpb24gbG9va3Mg bmljZSBidXQgaXQgcmVxdWlyZXMgbW9yZSBjb21wbGljYXRlZCAKPj4+IGltcGxlbWV0YXRpb24u Cj4+PiBGaXJzdGx5LCBhcyBleHBsYWluZWQgaW4gMS4zLjMgRVBDIEV2aWN0aW9uICYgUmVsb2Fk LCB3ZSBuZWVkIHRvIAo+Pj4gZm9sbG93IHNwZWNpZmljCj4+PiBzdGVwcyB0byBldmljdCBFUEMg cGFnZXMsIGFuZCBpbiBvcmRlciB0byBkbyB0aGF0LCBiYXNpY2FsbHkgWGVuIAo+Pj4gbmVlZHMg dG8gdHJhcAo+Pj4gRU5DTFMgZnJvbSBndWVzdCBhbmQga2VlcCB0cmFjayBvZiBFUEMgcGFnZSBz dGF0dXMgYW5kIGVuY2xhdmUgaW5mbyAKPj4+IGZyb20gYWxsCj4+PiBndWVzdC4gVGhpcyBpcyBi ZWNhdXNlOgo+Pj4gICAgICAtIFRvIGV2aWN0IHJlZ3VsYXIgRVBDIHBhZ2UsIFhlbiBuZWVkcyB0 byBrbm93IFNFQ1MgbG9jYXRpb24KPj4+ICAgICAgLSBYZW4gbmVlZHMgdG8ga25vdyBFUEMgcGFn ZSB0eXBlOiBldmljdGluZyByZWd1bGFyIEVQQyBhbmQgCj4+PiBldmljdGluZyBTRUNTLAo+Pj4g ICAgICAgIFZBIHBhZ2UgaGF2ZSBkaWZmZXJlbnQgc3RlcHMuCj4+PiAgICAgIC0gWGVuIG5lZWRz IHRvIGtub3cgRVBDIHBhZ2Ugc3RhdHVzOiB3aGV0aGVyIHRoZSBwYWdlIGlzIGJsb2NrZWQgCj4+ PiBvciBub3QuCj4+Pgo+Pj4gVGhvc2UgaW5mbyBjYW4gb25seSBiZSBnb3QgYnkgdHJhcHBpbmcg RU5DTFMgZnJvbSBndWVzdCwgYW5kIHBhcnNpbmcgaXRzCj4+PiBwYXJhbWV0ZXJzICh0byBpZGVu dGlmeSBTRUNTIHBhZ2UsIGV0YykuIFBhcnNpbmcgRU5DTFMgcGFyYW1ldGVycyAKPj4+IG1lYW5z IHdlIG5lZWQKPj4+IHRvIGtub3cgd2hpY2ggRU5DTFMgbGVhZiBpcyBiZWluZyB0cmFwcGVkLCBh bmQgd2UgbmVlZCB0byB0cmFuc2xhdGUgCj4+PiBndWVzdCdzCj4+PiB2aXJ0dWFsIGFkZHJlc3Mg dG8gZ2V0IHBoeXNpY2FsIGFkZHJlc3MgaW4gb3JkZXIgdG8gbG9jYXRlIEVQQyBwYWdlLiAKPj4+ IEFuZCBvbmNlCj4+PiBFTkNMUyBpcyB0cmFwcGVkLCB3ZSBoYXZlIHRvIGVtdWxhdGUgRU5DTFMg aW4gWGVuLCB3aGljaCBtZWFucyB3ZSAKPj4+IG5lZWQgdG8KPj4+IHJlY29uc3RydWN0IEVOQ0xT IHBhcmFtZXRlcnMgYnkgcmVtYXBwaW5nIGFsbCBndWVzdCdzIHZpcnR1YWwgYWRkcmVzcyAKPj4+ IHRvIFhlbidzCj4+PiB2aXJ0dWFsIGFkZHJlc3MgKGd2YS0+Z3BhLT5wYS0+eGVuX3ZhKSwgYXMg RU5DTFMgYWx3YXlzIHVzZSAKPj4+ICplZmZlY3RpdmUgYWRkcmVzcyoKPj4+IHdoaWNoIGlzIGFi bGUgdG8gYmUgdHJhc2xhdGVkIGJ5IHByb2Nlc3NvciB3aGVuIHJ1bm5pbmcgRU5DTFMuCj4+Pgo+ Pj4gICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQo+Pj4gICAgICAgICAgICAgICAgICB8ICAgRU5DTFMgICB8Cj4+PiAgICAg IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCj4+PiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgL3xcCj4+PiAgICAgIEVOQ0xT IFZNRVhJVHwgICAgICAgICAgIHwgVk1FTlRSWQo+Pj4gICAgICAgICAgICAgICAgICB8ICAgICAg ICAgICB8Cj4+PiAgICAgICAgICAgICAgICAgXHwvICAgICAgICAgIHwKPj4+Cj4+PiAgICAgICAg IDEpIHBhcnNlIEVOQ0xTIHBhcmFtZXRlcnMKPj4+ICAgICAgICAgMikgcmVjb25zdHJ1Y3QocmVt YXApIGd1ZXN0J3MgRU5DTFMgcGFyYW1ldGVycwo+Pj4gICAgICAgICAzKSBydW4gRU5DTFMgb24g YmVoYWxmIG9mIGd1ZXN0IChhbmQgc2tpcCBFTkNMUykKPj4+ICAgICAgICAgNCkgb24gc3VjY2Vz cywgdXBkYXRlIEVQQy9lbmNsYXZlIGluZm8sIG9yIGluamVjdCBlcnJvcgo+Pj4KPj4+IEFuZCBY ZW4gbmVlZHMgdG8gbWFpbnRhaW4gZWFjaCBFUEMgcGFnZSdzIHN0YXR1cyAodHlwZSwgYmxvY2tl ZCBvciAKPj4+IG5vdCwgaW4KPj4+IGVuY2xhdmUgb3Igbm90LCBldGMpLiBYZW4gYWxzbyBuZWVk cyB0byBtYWludGFpbiBhbGwgRW5jbGF2ZSdzIGluZm8gCj4+PiBmcm9tIGFsbAo+Pj4gZ3Vlc3Rz LCBpbiBvcmRlciB0byBmaW5kIHRoZSBjb3JyZWN0IFNFQ1MgZm9yIHJlZ3VsYXIgRVBDIHBhZ2Us IGFuZCAKPj4+IGVuY2xhdmUncwo+Pj4gbGluZWFyIGFkZHJlc3MgYXMgd2VsbC4KPj4+Cj4+PiBT byBpbiBnZW5lcmFsLCAiU3RhdGljIFBhcnRpdGlvbmluZyIgaGFzIHNpbXBsZXN0IGltcGxlbWVu dGF0aW9uLCBidXQgCj4+PiBvYnZpb3VzbHkKPj4+IG5vdCB0aGUgYmVzdCB3YXkgdG8gdXNlIEVQ QyBlZmZpY2llbnRseTsgIkJhbGxvb25pbmciIGhhcyBhbGwgcHJvcyBvZiAKPj4+IFN0YXRpYwo+ Pj4gUGFydGl0aW9uaW5nIGJ1dCByZXF1aWVzIGd1ZXN0IGJhbGxvb24gZHJpdmVyOyAiT3ZlcnN1 YnNjcmlwdGlvbiIgaXMgCj4+PiBiZXN0IGluCj4+PiB0ZXJtcyBvZiBmbGV4aWJpbGl0eSBidXQg cmVxdWlyZXMgY29tcGxpY2F0ZWQgaHlwZXJ2aXNvciBpbXBsZW1ldGF0aW9uLgo+Pj4KPj4+IFdl IGhhdmUgaW1wbGVtZW50ZWQgIlN0YXRpYyBQYXJ0aXRpb25pbmciIGluIFJGQyBwYXRjaGVzLCBi dXQgbmVlZHMgeW91cgo+Pj4gZmVlZGJhY2sgb24gd2hldGhlciBpdCBpcyBlbm91Z2guIElmIG5v dCwgd2hpY2ggb25lIHNob3VsZCB3ZSBkbyBhdCAKPj4+IG5leHQgc3RhZ2UKPj4+IC0tIEJhbGxv b25pbmcgb3IgT3ZlcnN1YnNjcmlwdGlvbi4gSU1PIEJhbGxvb25pbmcgbWF5IGJlIGdvb2QgZW5v dWdoLCAKPj4+IGdpdmVuIGZhY3QKPj4+IHRoYXQgY3VycmVudGx5IG1lbW9yeSBpcyBhbHNvICJT dGF0aWMgUGFydGl0aW9uaW5nIiArICJCYWxsb29uaW5nIi4KPj4+Cj4+PiBDb21tZW50cz8KPj4K Pj4gRGVmaW5pdGVseSBnbyBmb3Igc3RhdGljIHBhcnRpdGlvbmluZyB0byBiZWdpbiB3aXRoLiAg VGhpcyBpcyBmYXIgCj4+IHNpbXBsZXIgdG8gaW1wbGVtZW50Lgo+Pgo+PiBJIGNhbid0IHNlZSBh IHByZXNzaW5nIHVzZWNhc2UgZm9yIG92ZXJzdWJzY3JpcHRpb24gb3IgYmFsbG9vbmluZy4gQW55 IAo+PiBkYXRhY2VudGVyIHdvcmsgd2lsbCBiZSB1c2luZyBleGNsdXNpdmVseSBzdGF0aWMsIGFu ZCBJIGV4cGVjdCBzdGF0aWMgCj4+IHdpbGwgZmluZSBmb3IgYWxsIChvciBhdCBsZWFzdCwgbW9z dCkgY2xpZW50IHVzZWNhc2VzLgo+IAo+IFRoYW5rcy4gU28gZm9yIHRoZSBmaXJzdCBzdGFnZSBJ IHdpbGwgZm9jdXMgb24gc3RhdGljIHBhcnRpdGlvbmluZy4KPiAKPj4KPj4+Cj4+PiAyLjIuMyBQ b3B1bGF0ZSBFUEMgZm9yIEd1ZXN0Cj4+Pgo+Pj4gVG9vbHN0YWNrIG5vdGlmaWVzIFhlbiBhYm91 dCBkb21haW4ncyBFUEMgYmFzZSBhbmQgc2l6ZSBieSAKPj4+IFhFTl9ET01DVExfc2V0X2NwdWlk LAo+Pj4gc28gY3VycmVudGx5IFhlbiBwb3B1bGF0ZXMgYWxsIEVQQyBwYWdlcyBmb3IgZ3Vlc3Qg aW4gCj4+PiBYRU5fRE9NQ1RMX3NldF9jcHVpZCwKPj4+IHBhcnRpY3VsYXJseSwgaW4gaGFuZGxp bmcgWEVOX0RPTUNUTF9zZXRfY3B1aWQgZm9yIENQVUlELjB4MTIuMHgyLiAKPj4+IE9uY2UgWGVu Cj4+PiBjaGVja3MgdGhlIHZhbHVlcyBwYXNzZWQgZnJvbSB0b29sc3RhY2sgaXMgdmFsaWQsIFhl biB3aWxsIGFsbG9jYXRlIAo+Pj4gYWxsIEVQQwo+Pj4gcGFnZXMgYW5kIHNldHVwIEVQVCBtYXBw aW5ncyBmb3IgZ3Vlc3QuCj4+Pgo+Pj4gMi4yLjQgTmV3IERlZGljYXRlZCBIeXBlcmNhbGwgKD8p Cj4+Cj4+IEFsbCB0aGlzIGluZm9ybWF0aW9uIHNob3VsZCAoZXZlbnR1YWxseSkgYmUgYXZhaWxh YmxlIHZpYSB0aGUgCj4+IGFwcHJvcHJpYXRlIFNZU0NUTF9nZXRfe2NwdWlkLG1zcn1fcG9saWN5 IGh5cGVyY2FsbHMuICBJIGRvbid0IHNlZSBhbnkgCj4+IG5lZWQgZm9yIGRlZGljYXRlZCBoeXBl cmNhbGxzLgo+IAo+IFllcyBJIGFncmVlLiAgT3JpZ2luYWxseSBJIGhhZCBjb25jZXJuIHRoYXQg d2l0aG91dCBkZWRpY2F0ZWQgaHlwZXJjYWxsLCAKPiBpdCBpcyBoYXJkIHRvIGltcGxlbWVudCAn eGwgc2d4aW5mbycgYW5kICd4bCBzZ3hsaXN0JywgYnV0IGFjY29yZGluZyB0byAKPiB5b3VyIG5l dyBDUFVJRCBlbmhhbmNlbWVudCBwbGFuLCB0aGUgdHdvIGNhbiBiZSBkb25lIHZpYSB0aGUgbmV3 IAo+IGh5cGVyY2FsbHMgdG8gcXVlcnkgWGVuJ3MgYW5kIGRvbWFpbidzIGNwdWlkIHBvbGljeS4g U2VlIG15IHJlcGx5IGFib3ZlIAo+IHJlZ2FyZGluZyB0byAiTm90aWZ5IFhlbiBhYm91dCBndWVz dCdzIEVQQyBpbmZvIi4KPiAKPj4KPj4+IDIuMi45IEd1ZXN0IFN1c3BlbmQgJiBSZXN1bWUKPj4+ Cj4+PiBPbiBoYXJkd2FyZSwgRVBDIGlzIGRlc3Ryb3llZCB3aGVuIHBvd2VyIGdvZXMgdG8gUzMt UzUuIFNvIFhlbiB3aWxsIAo+Pj4gZGVzdHJveQo+Pj4gZ3Vlc3QncyBFUEMgd2hlbiBndWVzdCdz IHBvd2VyIGdvZXMgaW50byBTMy1TNS4gQ3VycmVudGx5IFhlbiBpcyAKPj4+IG5vdGlmaWVkIGJ5 Cj4+PiBRZW11IGluIHRlcm1zIG9mIFMgU3RhdGUgY2hhbmdlIHZpYSBIVk1fUEFSQU1fQUNQSV9T X1NUQVRFLCB3aGVyZSBYZW4gCj4+PiB3aWxsCj4+PiBkZXN0cm95IEVQQyBpZiBTIFN0YXRlIGlz IFMzLVM1Lgo+Pj4KPj4+IFNwZWNpZmljYWxseSwgWGVuIHdpbGwgcnVuIEVSRU1PVkUgZm9yIGd1 ZXN0J3MgZWFjaCBFUEMgcGFnZSwgYXMgCj4+PiBndWVzdCBtYXkKPj4+IG5vdCBoYW5kbGUgRVBD IHN1c3BlbmQgJiByZXN1bWUgY29ycmVjdGx5LCBpbiB3aGljaCBjYXNlIHBoeXNpY2FsbHkgCj4+ PiBndWVzdCdzIEVQQwo+Pj4gcGFnZXMgbWF5IHN0aWxsIGJlIHZhbGlkLCBzbyBYZW4gbmVlZHMg dG8gcnVuIEVSRU1PVkUgdG8gbWFrZSBzdXJlIAo+Pj4gYWxsIEVQQwo+Pj4gcGFnZXMgYXJlIGJl Y29taW5nIGludmFsaWQuIE90aGVyd2lzZSBmdXJ0aGVyIG9wZXJhdGlvbiBpbiBndWVzdCBvbiAK Pj4+IEVQQyBtYXkKPj4+IGZhdWx0IGFzIGl0IGFzc3VtZXMgYWxsIEVQQyBwYWdlcyBhcmUgaW52 YWxpZCBhZnRlciBndWVzdCBpcyByZXN1bWVkLgo+Pj4KPj4+IEZvciBTRUNTIHBhZ2UsIEVSRU1P VkUgbWF5IGZhdWx0IHdpdGggU0dYX0NISUxEX1BSRVNFTlQsIGluIHdoaWNoIAo+Pj4gY2FzZSBY ZW4gd2lsbAo+Pj4ga2VlcCB0aGlzIFNFQ1MgcGFnZSBpbnRvIGEgbGlzdCwgYW5kIGNhbGwgRVJF TU9WRSBmb3IgdGhlbSBhZ2FpbiAKPj4+IGFmdGVyIGFsbCBFUEMKPj4+IHBhZ2VzIGhhdmUgYmVl biBjYWxsZWQgd2l0aCBFUkVNT1ZFLiBUaGlzIHRpbWUgdGhlIEVSRU1PVkUgb24gU0VDUyAKPj4+ IHdpbGwgc3VjY2VlZAo+Pj4gYXMgYWxsIGNoaWxkcmVuIChyZWd1bGFyIEVQQyBwYWdlcykgaGF2 ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZC4KPj4+Cj4+PiAyLjIuMTAgRGVzdHJveWluZyBEb21haW4K Pj4+Cj4+PiBOb3JtYWxseSBYZW4ganVzdCBmcmVlcyBhbGwgRVBDIHBhZ2VzIGZvciBkb21haW4g d2hlbiBpdCBpcyAKPj4+IGRlc3Ryb3llZC4gQnV0IFhlbgo+Pj4gd2lsbCBhbHNvIGRvIEVSRU1P VkUgb24gYWxsIGd1ZXN0J3MgRVBDIHBhZ2VzIChkZXNjcmliZWQgaW4gYWJvdmUgCj4+PiAyLjIu NykgYmVmb3JlCj4+PiBmcmVlIHRoZW0sIGFzIGd1ZXN0IG1heSBzaHV0ZG93biB1bmV4cGVjdGVk IChleCwgdXNlciBraWxscyBndWVzdCksIAo+Pj4gYW5kIGluIHRoaXMKPj4+IGNhc2UsIGd1ZXN0 J3MgRVBDIG1heSBzdGlsbCBiZSB2YWxpZC4KPj4+Cj4+PiAyLjMgQWRkaXRpb25hbCBQb2ludDog TGl2ZSBNaWdyYXRpb24sIFNuYXBzaG90IFN1cHBvcnQgKD8pCj4+Cj4+IEhvdyBiaWcgaXMgdGhl IEVQQz8gIElmIHdlIGFyZSB0YWxraW5nIE1CIHJhdGhlciB0aGFuIEdCLCBtb3ZlbWVudCBvZiAK Pj4gdGhlIEVQQyBjb3VsZCBiZSBhZnRlciB0aGUgcGF1c2UsIHdoaWNoIHdvdWxkIGFkZCBzb21l IGxhdGVuY3kgdG8gbGl2ZSAKPj4gbWlncmF0aW9uIGJ1dCBzaG91bGQgd29yay4gIEkgZXhwZWN0 IHRoYXQgcGVvcGxlIHdvdWxkIHByZWZlciB0byBoYXZlIAo+PiB0aGUgZmxleGliaWxpdHkgb2Yg bWlncmF0aW9uIGV2ZW4gYXQgdGhlIGNvc3Qgb2YgZXh0cmEgbGF0ZW5jeS4KPj4KPiAKPiBUaGUg RVBDIGlzIHR5cGljYWxseSB+MTAwTUIgYXQgbWF4aW11bSAoYXMgSSBvYnNlcnZlZCkuIFRoZSBF UEMgaXMgCj4gdHlwaWNhbGx5IHJlc2VydmVkIHdpdGggRVBDTSAoRVBDIG1hcCwgd2hpY2ggaXMg aW52aXNpYmxlIHRvIFNXKSAKPiB0b2dldGhlciBieSBCSU9TIGFzIHByb2Nlc3NvciByZXNlcnZl ZCBtZW1vcnkgKFJQTSkuIE9uIHJlYWwgbWFjaGluZSwgCj4gZm9yIGJvdGggb3VyIGludGVybmFs IGRldmVsb3AgbWFjaGluZXMsIGFuZCBzb21lIG1hY2hpbmVzIHRoYXQgZnJvbSAKPiBEZWxsLCBI UCwgTGVub3ZvICh0aGF0IHlvdSBjYW4gYnV5IGZyb20gbWFya2V0IG5vdyksIEJJT1MgYWx3YXlz IAo+IHByb3ZpZGVzIDMgY2hvaWNlcyBpbiB0ZXJtcyBSUE06IDMyTSwgNjRNLCBhbmQgMTI4TS4g QW5kIHdpdGggMTI4TSBSUE0sIAo+IEVQQyBpcyBzbGlnaHRseSBsZXNzIHRoYW4gMTAwTS4KPiAK PiBUaGUgcHJvYmxlbSBpcyBFUEMgY2Fubm90IGJlIG1vdmVkLiBJIHRoaW5rIHlvdSB3ZXJlIHNh eWluZyBtb3ZpbmcgRVBDIAo+IGJ5IGV2aWN0aW5nIEVQQyBvdXQgYXQgbGFzdCBzdGFnZSBhbmQg Y29weSBldmljdGVkIGNvbnRlbnQgdG8gcmVtb3RlLCAKPiBhbmQgdGhlbiByZWxvYWQuIEhvd2V2 ZXIgSSBkb24ndCB0aGluayB0aGlzIHdpbGwgd29yaywgYXMgRVBDIGV2aWN0aW9uIAo+IGl0c2Vs ZiBuZWVkcyB0byB1c2UgYSBWQSBzbG90ICh3aGljaCBpdHNsZWYgaXMgRVBDKSwgc28geW91IGNh biBpbWFnZSAKPiB0aGF0IHRoZSBWQSBzbG90cyBjYW5ub3QgYmUgbW92ZWQgdG8gcmVtb3RlLiBF dmVuIGlmIHRoZXkgY2FuLCB0aGV5IAo+IGNhbm5vdCBiZSB1c2VkIHRvIHJlbG9hZCBFUEMgaW4g cmVtb3RlLCBhcyBpbmZvIGluIFZBIHNsb3QgaXMgYm91bmQgdG8gCj4gcGxhdGZvcm0gYW5kIGNh bm5vdCBiZSB1c2VkIG9uIHJlbW90ZS4KPiAKPiBUbyBzdXBwb3J0IGxpdmUgbWlncmF0aW9uLCB3 ZSBjYW4gb25seSBjaG9vc2UgdG8gaWdub3JlIEVQQyBkdXJpbmcgbGl2ZSAKPiBtaWdyYXRpb24g YW5kIGxldCBndWVzdCBTR1ggZHJpdmVyL3VzZXIgU1cgc3RhY2sgdG8gaGFuZGxlIHJlc3Rvcmlu ZyAKPiBlbmNsYXZlICh3aGljaCBpcyBhY3R1YWxseSBhIGxvdCBzaW1wbGVyIGluIGh5cGVydmlz b3IvdG9vbHN0YWNrJ3MgCj4gaW1wbGVtZW50YXRpb24pIC4gR3Vlc3QgU0dYIGRyaXZlciBuZWVk cyB0byBoYW5kbGUgbG9zZSBFUEMgYW55d2F5LCBhcyAKPiBFUEMgaXMgZGVzdHJveWVkIGluIFMz LVM1LiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRvIHN1cHBvcnQgbGl2ZSAKPiBtaWdyYXRpb24s IGd1ZXN0IFNHWCBkcml2ZXIgbmVlZHMgdG8gc3VwcG9ydCAqc3VkZGVuKiBsb3NlIG9mIEVQQywg d2hpY2ggCj4gaXMgbm90IEhXIGJlaGF2aW9yLCBhbmQgSSB3YXMgdG9sZCB0aGF0IGN1cnJlbnRs eSBib3RoIFdpbmRvd3MgJiBMaW51eCAKPiBTR1ggZHJpdmVyIGFscmVhZHkgc3VwcG9ydCAqc3Vk ZGVuKiBsb3NlIG9mIEVQQywgd2hpY2ggbGVhdmVzIHVzIGEgCj4gcXVlc3Rpb24gd2hldGhlciB3 ZSBuZWVkIHRvIHN1cHBvcnQgU0dYIGxpdmUgbWlncmF0aW9uIChhbmQgc25hcHNob3QpLgo+IAo+ PiB+QW5kcmV3Cj4+Cj4+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCj4+IFhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKPj4gWGVuLWRldmVsQGxpc3RzLnhlbi5v cmcKPj4gaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo+IAo+IF9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gWGVuLWRldmVsIG1haWxpbmcgbGlz dAo+IFhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCj4gaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1k ZXZlbAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVu LWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3Rz Lnhlbi5vcmcveGVuLWRldmVsCg==