From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC PATCH 00/37] Modesetting for atomic modesetting Date: Wed, 25 Mar 2015 09:37:30 +0100 Message-ID: <20150325083730.GP1349@phenom.ffwll.local> References: <1426739556-10429-1-git-send-email-daniels@collabora.com> <20150323082055.GC1349@phenom.ffwll.local> <20150324085556.GY1349@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wg0-f46.google.com (mail-wg0-f46.google.com [74.125.82.46]) by gabe.freedesktop.org (Postfix) with ESMTP id 9BFC56E7B0 for ; Wed, 25 Mar 2015 01:35:46 -0700 (PDT) Received: by wgdm6 with SMTP id m6so18595991wgd.2 for ; Wed, 25 Mar 2015 01:35:45 -0700 (PDT) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Stone Cc: dri-devel List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBNYXIgMjQsIDIwMTUgYXQgMTA6NDk6MjJQTSArMDAwMCwgRGFuaWVsIFN0b25lIHdy b3RlOgo+IEhpLAo+IFlpa2VzLCBJIHRoaW5rIHdlJ3JlIHRhbGtpbmcgcGFzdCBlYWNoIG90aGVy IGEgYml0LiBTbyBJIHRob3VnaHQgYSB2Mgo+IG1pZ2h0IGhlbHAuCj4gCj4gT24gMjQgTWFyY2gg MjAxNSBhdCAwODo1NSwgRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPiB3cm90ZToKPiA+ IE9uIE1vbiwgTWFyIDIzLCAyMDE1IGF0IDA0OjU4OjQ3UE0gKzAwMDAsIERhbmllbCBTdG9uZSB3 cm90ZToKPiA+PiBPbiAyMyBNYXJjaCAyMDE1IGF0IDA4OjIwLCBEYW5pZWwgVmV0dGVyIDxkYW5p ZWxAZmZ3bGwuY2g+IHdyb3RlOgo+ID4+ID4gT2sgdGhpcyBpcyBxdWl0ZSBhIGJpdCBhIGRpZmZl cmVudCBiZWFzdCB0aGFuIHdoYXQgSSBleHBlY3RlZC4gSSB0aGluawo+ID4+ID4gaXQncyB3YXkg dG9vIGludHJ1c2l2ZSBmb3IgZHJpdmVycyB0byBsYW5kIHF1aWNrbHksIGFuZCB0aGVyZSdzIGEg YmlnCj4gPj4gPiBkZXBlbmN5IGNoYWluIGxpbmtpbmcgZXZlcnl0aGluZy4gSSB0aGluayB3ZSBu ZWVkIHNvbWV0aGluZyBtdWNoIHNpbXBsZXIuCj4gPj4KPiA+PiBZZWFoLCBJJ20gdW5lYXN5IHdp dGggaG93IGludmFzaXZlIGl0J3MgZ290OiBoZW5jZSB0aGUgcHJvcG9zYWwgdG8KPiA+PiBkcm9w IGNydGMtPm1vZGUgYmFjayBpbnRvIGJlaW5nIGlubGluZWQuIEkgZG9uJ3QgdGhpbmsgd2UgbG9z ZQo+ID4+IGFueXRoaW5nIGZyb20gZG9pbmcgdGhhdCAoYXMgY3J0Yy0+c3RhdGUtPm1vZGUgc3Rp bGwgY2hhbmdlcyksIGFuZAo+ID4+IHRoYXQgbWFrZXMgdGhlIGRpZmYgbXVjaCBsZXNzIHNjYXJ5 LiBUaGUgY29uc3RuZXNzIGNoYW5nZXMgbm8gbG9uZ2VyCj4gPj4gYmVjb21lIHJlcXVpcmVkLCBi dXQgSSB0aGluayBhcmUgc3RpbGwgcHJldHR5IHVzZWZ1bCBmcm9tIHRoZSBwb2ludCBvZgo+ID4+ IHZpZXcgb2Ygc2V0dGluZyAoYW5kIGVuZm9yY2luZykgb3VyIGV4aXN0aW5nIGV4cGVjdGF0aW9u cy4gSSdkIHN0aWxsCj4gPj4gbG9vayB0byBwdXNoIHRob3NlIGFueXdheSwgYnV0IGF0IGEgbXVj aCBtb3JlIHNlZGF0ZSBwYWNlLgo+IAo+IEFzIHByb21pc2VkLCBoYXZlIHB1bGxlZCB0aGlzIG91 dC4gSSd2ZSBzcGxpdCB0aGUgc2VyaWVzIGludG8gdHdvCj4gcGFyYWxsZWwgc2VyaWVzLCB3aGlj aCBiYXJlbHkgaW50ZXJzZWN0IChpLmUuIHRoZSBtZXJnZSBpcyB0cml2aWFsKToKPiBodHRwOi8v Y2dpdC5jb2xsYWJvcmEuY29tL2dpdC91c2VyL2RhbmllbHMvbGludXguZ2l0L2xvZy8/aD13aXAv ZHJtLW5leHQvZHJtLWNvbnN0bmVzcwo+IGlzIHRoZSBjaGFuZ2UgdG8gY29uc3RpZnkgYWxsIGNy dGMtPm1vZGUgdXNlcnMsIHdpdGhvdXQgdHVybmluZwo+IGNydGMtPm1vZGUgaXRzZWxmIGNvbnN0 LCBvciBpbnRvIGEgcG9pbnRlci4gSSB0aGluayB0aGVzZSBhcmUgYWxsCj4gd29ydGh3aGlsZSBj bGVhbnVwcyBpbiB0aGVpciBvd24gcmlnaHQsIGJ1dCBhcyB0aGV5J3JlIHF1aXRlIGludmFzaXZl LAo+IHdlIGNhbiBwdXNoIHRoZW0gc2VwYXJhdGVseSBhbmQgbXVjaCBtb3JlIHNsb3dseS4KPiAK PiBodHRwOi8vY2dpdC5jb2xsYWJvcmEuY29tL2dpdC91c2VyL2RhbmllbHMvbGludXguZ2l0L2xv Zy8/aD13aXAvZHJtLW5leHQvZHJtLW1vZGVzLXJlZgo+IGlzIHRoZSBtdWNoIGxlc3MgaW52YXNp dmVbMF0gd29yayB0byByZWZjb3VudCBtb2RlcywgZXhwb3NlCj4gQ1JUQy9jb25uZWN0b3IgbW9k ZXMgdG8gdXNlcnNwYWNlIHRocm91Z2ggcHJvcGVydGllcywgYW5kIGFsbG93Cj4gdXNlci1zdXBw bGllZCBibG9iIHByb3BlcnRpZXMuIEkgdGhpbmsgdGhpcyBpcyByZWFsbHkgcXVpdGUgc2FmZSwg YW5kCj4gdGhlIGludGVyYWN0aW9ucyB3aXRoIGRyaXZlcnMgYXJlIHByZXR0eSBtaW5pbWFsLgo+ IAo+IEZvciBub3csIEkgZG9uJ3QgaW50ZW5kIHRvIHJlYWxseSB0YWxrIG11Y2ggYWJvdXQgZHJt LWNvbnN0bmVzcywgc2luY2UKPiBpdCdzIG5laXRoZXIgaW50ZXJlc3Rpbmcgbm9yIHJlbGV2YW50 LiBTbyB0aGlzIGlzIGp1c3QgYWJvdXQKPiBkcm0tbW9kZXMtcmVmLgo+IAo+ID4+ID4+ICAgLSBh cyBmYXIgYXMgcG9zc2libGUsIG1vZGVzIHNob3VsZCBiZSByZWxhdGVhYmxlIHRvIHRoZWlyIHNv dXJjZSwgZS5nLiBpZgo+ID4+ID4+ICAgICBQbHltb3V0aCBwdWxscyBhIHBhcnRpY3VsYXIgbW9k ZSBmcm9tIHRoZSBlbmNvZGVyLCBhbmQgeW91IHBpY2sgdXAgb24gdGhhdAo+ID4+ID4+ICAgICBt b2RlIGFzIHBhcnQgb2YgY3VycmVudCBjb25maWd1cmF0aW9uIGR1cmluZyBoYW5kb3ZlciwgeW91 IHNob3VsZCBiZSBhYmxlCj4gPj4gPj4gICAgIHRvIHdvcmsgYmFja3dhcmRzIHRvIHdoZXJlIFBs eW1vdXRoIHNvdXJjZWQgaXQsIGkuZS4gdGhlIGVuY29kZXIgbGlzdAo+ID4+ID4KPiA+PiA+IFdp dGggbGVnYWN5IHNldGNydGMgd2UgYWxyZWFkeSBsb3NlIHRoaXMgaW5mb3JtYXRpb24gYW5kIHRo dXMgZmFyIG5vIG9uZQo+ID4+ID4gc2VlbXMgdG8gaGF2ZSBjYXJlZC4gQW5kIEkgZG9uJ3Qgc2Vl IHRoZSB1c2UtY2FzZSBzaW5jZSBzaW1wbHkgY29tcGFyaW5nCj4gPj4gPiBpdCB0byBzb3VyY2Vz IHdvcmtzIHdlbGwgZW5vdWdoLCBpbiBjYXNlIHlvdSB3YW50IHRvIGtub3cgd2hlcmUgYSBtb2Rl IGlzCj4gPj4gPiBmcm9tLgo+ID4+Cj4gPj4gT24gdGhlIG90aGVyIGhhbmQsIEkgd291bGRuJ3Qg c3VnZ2VzdCBTZXRDcnRjIHRvIHJlYWxseSBiZSBhIG1vZGVsIHRvCj4gPj4gZm9sbG93LiBJIHJl YWxseSBkb24ndCBtaW5kIFNldENydGMgYnJlYWtpbmcgYWxsIHRoZXNlIGV4cGVjdGF0aW9ucwo+ ID4+IGFib3ZlLCBtaW5kLgo+ID4KPiA+IFdlbGwgc2V0Y3J0YyBpcyBib3VuZCB0byBzdGF5IGFy b3VuZCwgYW5kIHVzZXJzcGFjZSB1c2luZyBpdCB3aWxsIGFsc28KPiA+IHN0aWNrIGFyb3VuZCBm b3IgcXVpdGUgYSBiaXQgSSB0aGluay4gSWYgd2UgYWRkIG5ldyBzZW1hbnRpYyBndWFyYW50ZWVz Cj4gPiBhbmQgdGhlbiB1c2Vyc3BhY2UgY2FuJ3QgcmVseSBvbiB0aGVtIHdlIGJlYXIgYWxsIHRo ZSBjb3N0IHdpdGhvdXQgbXVjaAo+ID4gYmVuZWZpdC4KPiAKPiBSaWdodCwgaWYgeW91J3JlIHVz aW5nIFNldENydGMgdGhlbiB5b3UgY2FuIGV4cGVjdCB0byBsb3NlLCBhbmQgdGhhdCdzCj4gZmlu ZS4gQnV0IEkgZG9uJ3QgdGhpbmsgd2Ugc2hvdWxkIGhvYmJsZSBuZXcgdXNlcnNwYWNlIGZvcmV2 ZXIgdG8gdGhlCj4gdGVycmlibGUgaW50ZXJmYWNlcyB3ZSBtYWRlIHByZXZpb3VzbHkuCj4gCj4g Pj4gRG8gd2UgbWFrZSBhbnkgZ3VhcmFudGVlIG9uIGNvbm5lY3Rvci0+bW9kZXMgbGlmZXRpbWVz PyBJZiBpdCBjYW4ndAo+ID4+IGNoYW5nZSB3aXRob3V0IGEgaG90cGx1ZyBldmVudCwgdGhlbiB3 ZSBrbm93IHRoZSBJRCBpcyB2YWxpZCB1bnRpbCB0aGUKPiA+PiBjb25uZWN0b3IgZ29lcyBkYXJr LCBhdCB3aGljaCBwb2ludCB3ZSBoYXZlIHRvIGRyb3AgYW55IGxvY2FsIGNhY2hlCj4gPj4gcmVs YXRpbmcgdG8gaXQuCj4gPj4KPiA+PiBTYXlpbmcgdGhhdCB1c2Vyc3BhY2UgbXVzdCByZWFkIGV2 ZXJ5IHNpbmdsZSBtb2RlIHByb3BlcnR5IGJhY2sgZXZlcnkKPiA+PiBzaW5nbGUgdGltZSBpcyBw cmV0dHkgaG9ycmlibGUgZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiByZXF1aXJpbmcKPiA+PiBt b3JlIHVzZXJzcGFjZS0+a2VybmVsLT51c2Vyc3BhY2UtPmtlcm5lbC0+Wy4uLl0gdHJpcHMgdG8g ZG8gZGlzY292ZXJ5Cj4gPj4gZXZlcnkgdGltZSwganVzdCBiZWNhdXNlIHdlIGRlY2lkZWQgbm90 IHRvIHdvcmsgb3V0IGEgc2Vuc2libGUKPiA+PiBsaWZldGltZSBzdHJhdGVneSB0byBleHBvc2Ug dG8gdXNlcnNwYWNlLgo+ID4KPiA+IEN1cnJlbnQga2VybmVscyBzaG91bGQgc2VuZCB5b3UgYSBo b3RwbHVnIGV2ZW50LCBzbyB3aXRoIHRob3NlIHRoYXQKPiA+IHN0cmF0ZWd5IHdvcmtzIC0geW91 IGNhbiBjYWNoZSB1bnRpbCB0aGUgbmV4dCBob3RwbHVnLiBCdXQgb24gb2xkZXIKPiA+IGtlcm5l bHMgKGFuZCBpaXJjIHdlJ3ZlIG9ubHkgZml4ZWQgdGhpcyB2ZXJ5IHJlY2VudGx5KSBzb21ldGlt ZXMgaG90cGx1Zwo+ID4gZXZlbnRzIGdldCBsb3N0LiBTbyB0aGVyZSBpZiBzb21lb25lIGFza3Mg Zm9yIGEgZnVsbCByZXByb2JlLCB5b3UgaGF2ZSB0bwo+ID4gZG8gdGhlIGZ1bGwgZGFuY2UuCj4g Cj4gUmlnaHQsIGJ1dCB0aGlzIGlzbid0IGluIGFueSBrZXJuZWxzIHlldCwgc28gd2UgZG9uJ3Qg ZXhhY3RseSBuZWVkIHRvCj4gd29ycnkgYWJvdXQgYmFkIGludGVyYWN0aW9ucyB3aXRoIG90aGVy IHBhcnRzIG9mIG9sZCBrZXJuZWxzLgo+IAo+ID4+ID4gVGhpcyBibGV3IHVwIHdpdGggZWRpZCBi bG9iIHByb3BlcnRpZXMgd2hlcmUgU05BIGhhZCBvbmUgY2xldmVyIHRyaWNrIHRvbwo+ID4+ID4g bWFueSBhbmQgdGhvdWdodCB0aGF0IG1hdGNoaW5nIGVkaWQgYmxvYiBwcm9wIGlkIG1lYW5zIHRo ZSBlZGlkIGlzCj4gPj4gPiB1bmNoYW5nZWQuIEJ1dCBzaW5jZSB3ZSByZW1vdmUgdGhlIG9sZCBi bG9iIGJlZm9yZSB3ZSBhZGQgdGhlIG5ldyBvbmUKPiA+PiA+IHlvdSdyZSBwcmV0dHkgbXVjaCBn dXJhbnRlZWQgdG8gcmV1c2UgdGhlIHNhbWUgc2xvdC4KPiA+Pgo+ID4+IFN1cmUsIGlmIHlvdSdy ZSBub3QgcGF5aW5nIGF0dGVudGlvbiB0byB0aGUgZGVmaW5lZCBsaWZldGltZSwgdGhlbgo+ID4+ IGRvbid0IGRvIGFueSBjYWNoaW5nLiBCdXQgdGhpcyBpcyBhYm91dCBfZGVmaW5pbmdfIHN1Y2gg YSB1c2FibGUKPiA+PiBsaWZldGltZSB0aGF0IHVzZXJzcGFjZSBjYW4uCj4gPgo+ID4gSG0gbGV0 J3MgYmFja3RyYWNrIGEgYml0OiBXaGF0J3MgdGhlIHVwc2lkZSBvZiB0aGlzIGRlZmluZWQgbGlm ZXRpbWU/IEF0bQo+ID4gSSBzZWUgYSBsb3Qgb2YgY29zdCBvbiB0aGUga2VybmVsIHNpZGUgKGdl dHRpbmcgdGhpcyBzZXJpZXMgaW4gd2lsbCB0YWtlIGEKPiA+IGZldyByZWxlYXNlcyBwcm9iYWJs eSBiZWNhdXNlIHRoZXJlJ3Mgc28gbWFueSBpbnRlcmxvY2tlZCBzdWJzeXN0ZW0td2lkZQo+ID4g Y2hhbmdlcykuIEJ1dCBJIGRvbid0IHNlZSBhIGJlbmVmaXQuCj4gCj4gSSB0aGluayB0aGUgY3Vy cmVudCBkcm0tbW9kZXMtcmVmIGJyYW5jaCBzaG91bGQgdGFrZSBjYXJlIG9mIHRoZSBjb3N0Cj4g YXJndW1lbnQuIFRoZSB1cHNpZGUgaXMgdGhhdCBpdCBnZXRzIG11Y2ggZWFzaWVyIHRvIGRlYnVn IGFuZCB0cmFjZQo+IGNvbW1hbmQgc3RyZWFtcyAoaS5lLiBpdCdzIHByZXR0eSBlYXN5IHRvIHJl bWVtYmVyIG1vZGUgSUQgMzQ7IG11Y2gKPiBtb3JlIHRlZGlvdXMgdG8gZHVtcCBvdXQgdGhlIGVu dGlyZSBtb2RlbGluZSBldmVyeSB0aW1lKSwgYW5kIHRoYXQKPiBpdCdzIG11Y2ggbW9yZSBkaWZm aWN1bHQgdG8gc2NyZXcgdXAgaW4gaW5jcmVkaWJseSBzdWJ0bGUgd2F5cyAodHdvCj4gaW5kZXBl bmRlbnQgbW9kZSBwcm9wZXJ0aWVzIHdoaWNoIGhhdmUgdG8gYmUgdXBkYXRlZCB0b2dldGhlciBh dCBhbGwKPiB0aW1lcywgaW5jbHVkaW5nIGluIGVycm9yIHBhdGhzPyB3aGF0IGNvdWxkIHBvc3Np Ymx5IGdvIHdyb25nIC4uLikuCgpUaGF0J3MgdGhlIHByaWNlIHdlIHBheSBmb3Igc21vb3RoIHVw Z3JhZGVzIC0gZXZlcnl0aGluZyBpbiBhdG9taWMgYXRtCmtlZXBzIG9sZCBhbmQgbmV3IHRoaW5n cyBpbiBzeW5jIHNvbWVob3csIGFuZCB5ZXAgaXQncyBmcmFnaWxlLiBBbmQgSQpkb24ndCBzZWUg YSByZWFsIHByb2JsZW0gd2l0aCBrZWVwaW5nIHRoZW0gaW4gc3luYywgdGhlcmUncyBub3QgbWFu eSB1c2Vycwpmb3IgaXQuIEFuZCB0aGUgdHJpY2t5IGJpdHMgY2FuIGJlIGV4dHJhY3RlZCBpbnRv IHR3byBoZWxwZXJzIChvbmUgd2hlcmUKeW91IGhhdmUgYSBtb2RlIGJsb2IgaWQgZm9yIGF0b21p Yywgb25lIHdoZXJlIHlvdSBoYXZlIGFuIGFscmVhZHkgZGVjb2RlZAptb2RlIHN0cnVjdCBmb3Ig bGVnYWN5L2ludGVybmFsIHBhdGhzKSBsaWtlIEkgbGluZWQgb3V0IHNvbWV3aGVyZSBiZWxvdy4K Cj4gPiBUaGUgb25seSBwbGFjZSB3ZSBjdXJyZW50bHkgcmVhZCBvdXQgdGhlIGN1cnJlbnQgY29u ZmlndXJhdGlvbiBpcyB3aGVuCj4gPiB0aGUgY29tcG9zaXRvciBzdGFydHMgdXAgc28gdGhhdCBp dCBjYW4gcGVyZmVjdGx5IHRha2Ugb3ZlciB3aGF0ZXZlcidzCj4gPiBiZWVuIHNldCB1cCBieSB0 aGUgZmlybXdhcmUvYm9vdCBzcGxhc2ggZm9yIGZhc3Rib290LiBBZnRlcndhcmRzIGV2ZXJ5b25l Cj4gPiBqdXN0IGJhc2hlcyBpbiB0aGVpciBvd24gY29uZmlnLCBldmVuIHdoZW4gc3dpdGNoaW5n IGJldHdlZW4gY29tcG9zaXRvcnMKPiA+IGFuZCBhbGwgdGhhdC4KPiAKPiBUaGV5IGJhc2ggaW4g dGhlaXIgb3duIGNvbmZpZywgYmVjYXVzZSByaWdodCBub3cgaXQncyBhYm91dCBhbGwgeW91Cj4g Y2FuIGRvLiBBcyB3ZSdyZSBnaXZpbmcgdXNlcnNwYWNlIGFuIGludGVyZmFjZSB0aGF0IGFsbG93 cyBzZW5zaWJsZQo+IGhhbmRvdmVycyBhbmQgaW5jcmVtZW50YWwgdXBkYXRlcywgd2h5IG5vdCB1 c2UgaXQgLi4uID8gVGhhdCB3ZSBkbwo+IGZ1bGwgbW9kZSByZXByb2dyYW1taW5nIHdoZW4gbW92 aW5nIGZyb20gc3BsYXNoIHNjcmVlbiB0byBjb21wb3NpdG9yCj4gaXMgYSBidWcsIG5vdCBhIGdy ZWF0IHBpZWNlIG9mIGRlc2lnbi4gSWYgd2UgY2FuIChldmVuIHN1YnRseSkKPiBlbmNvdXJhZ2Ug dXNlcnNwYWNlIHRvIGJlIGJldHRlciBhbmQgc21hcnRlciwgdGhlbiBJIGRvbid0IHNlZSB3aHkg d2UKPiB3b3VsZG4ndC4KCldlIGRvbid0IGhhdmUgZnVsbCBwcm9ncmFtbWluZyB3aGVuIG1vdmlu ZyBmcm9tIHNwbGFzaCB0byBjb21wb3NpdG9yLCBhdApsZWFzdCB3aGVuIHlvdSdyZSBydW5uaW5n IFNOQS4gSXQgZG9lcyByZWFkIG91dCB0aGUgZW50aXJlIGtlcm5lbCBzdGF0ZSB0bwpyZWNvbnN0 cnVjdCBtYXRjaGluZyB4cmFuZHIgc3RhdGUuIEFuZCBpdCB3b3JrcyBhbHJlYWR5LCBubyBhZGRp dGlvbmFsCmd1YXJhbnRlZXMgbmVlZGVkLgoKTWF5YmUgc3BsYXNoMmNvbXBvc2l0b3IgaXNuJ3Qg dGhlIG9ubHkgcGxhY2Ugd2Ugd2FudCB0byBkbyB0aGlzIHNtb290aApvcGVyYXRpb24sIGJ1dCBl dmVuIGlmIHlvdSBkbyBpdCBvbiBhbGwgdnQgc3dpdGNoZXMgaXRzIHN0aWxsIGEgcmVsYXRpdmVs eQpyYXJlIHRoaW5nLgoKPiBJdCBhbHNvIG1ha2VzIGl0IGEgbmlnaHRtYXJlIHRvIGRlYnVnIHRo ZSB1c2Vyc3BhY2Ugc2lkZSBvZiB0aGluZ3MsCj4gYmVjYXVzZSB3aGVuIHlvdSBqdXN0IGhhdmUg dG8gc21hc2ggdGhlIGVudGlyZSBjb25maWcgaW4gYWxsIHRoZSB0aW1lLAo+IGl0IGJlY29tZXMg bXVjaCBtb3JlIGRpZmZpY3VsdCB0byBzZXBhcmF0ZSB0aGUgaW50ZW5kZWQgY2hhbmdlcyBvdXQK PiBmcm9tIHRoZSB1bmludGVuZGVkIG9uZXMuIFdoaWNoIG1lYW5zIHBlb3BsZSBhcmUgbW9yZSBs aWtlbHkgdG8gdGhyb3cKPiB0aGVpciBoYW5kcyB1cCBhbmQganVzdCBibGFtZSB0aGUga2VybmVs Lgo+IAo+ID4gV2l0aG91dCBhIGNsZWFyIHVzZS1jYXNlIHRoYXQganVzdGlmaWVzIHRoZSB3b3Jr IEkgZG9uJ3QgdGhpbmsgd2Ugc2hvdWxkCj4gPiBkbyB0aGlzIC0gc29tZW9uZSB3aWxsIGNvbWUg dXAgd2l0aCBjbGV2ZXIgYWJ1c2UgZm9yIGl0IGFuZCB0aGVuIHdlIGhhdmUKPiA+IGFub3RoZXIg aGFyZC10by13b3JrLWFyb3VuZCByZWdyZXNzaW9uIGF0IGhhbmQuIFNvIGZyb20gbXkgc2lkZSB0 aGUgb25seQo+ID4gcmVxdWlyZW1lbnQgaXMgdGhhdCBhdG9taWMgY2xpZW50cyBzaG91bGQgYmUg YWJsZSB0byBzb21laG93IGdldCBhdCB0aGUKPiA+IGN1cnJlbnQgYmxvYiBwcm9wZXJ0aWVzIGxp a2UgbW9kZSwgZ2FtbWEgLi4uCj4gCj4gV2hpY2ggb2YgdGhlIHJlcXVpcmVtZW50cyBhcmUgeW91 IHdvcnJpZWQgYWJvdXQgcGVvcGxlIGFidXNpbmc/CgpJZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWxs b3cgdXNlcnNwYWNlIHRvIGJlIGFibGUgdG8gY29tcGFyZSBtb2RlIGlkcwpldmVyeXdoZXJlIHRo ZW4gc29vbmVyIG9yIGxhdGVyIHdlJ2xsIGhhdmUgdXNlcnNwYWNlIHRoYXQgZnVsbHkgcmVsaWVz IG9uCnRoYXQuIEFuZCB0aGVuIHdlIG5lZWQgdG8gYWRkIGhhY2tzIGluIHRoZSBrZXJuZWwgdG8g bWFrZSB0aGF0IHdvcmsgYnkKZS5nLiBzd2l0Y2hpbmcgaWRzIHNvIHRoYXQgdGhlcmUncyBvbmx5 IGV2ZXIgb25lIG1vZGUgaWQgcGVyIG1vZGUuIEFsbCBzbwp0aGF0IHVzZXJzcGFjZSBjYW4gYXZv aWQgMSBtb3JlIGdldGJsb2IgaW9jdGwgcGx1cyBhIG1lbWNtcC4KCkZvcmNpbmcgdXNlcnNwYWNl IHRvIGRvIHRoZSBpb2N0bCtmdWxsIG1lbWNtcCByZWFsbHkgc2VlbXMgbGlrZSB0aGUgbW9yZQpz b2xpZCBhcHByb2FjaC4gRXNwZWNpYWxseSBzaW5jZSBrZXJuZWwgc3RhdGUgcmVhZG91dCB3aWxs IG9ubHkgaGFwcGVuIG9uCnRha2VvdmVyIChib290LXVwLCB2dC1zd2l0Y2gpIHdoaWNoIGlzIGEg cmVhbGx5IHJhcmUgdGhpbmcuIE9uIHRvcCBvZiB0aGF0CmxpYmRybSBkb2Vzbid0IGdpdmUgeW91 IGFueSB3YXkgY3VycmVudGx5IHRvIHJlYWQgb3V0IHRoZSBrZXJuZWwgc3RhdGUKd2l0aG91dCBm b3JjaW5nIGEgZnVsbCByZXByb2JlIGFuZCBlZGlkIHJlYWQuIFNOQSBoYXMgZml4ZWQgdGhpcyBz aW5jZQp5ZWFycywgQ2hyaXMgZXZlbiBmbG9hdGVkIGEgbGliZHJtIHBhdGNoIGJ1dCBhZG9wdGlv biBpcyBtaW5pbWFsLiBDb21wYXJlCnRvIGFuIGlvY3RsIGJsb3dpbmcgdGhyb3VnaCBlZGlkIHJl YWRzIHVuZWNlc3NhcmlseSBvbiB0YWtlb3ZlciBpcyBhbgplbnRpcmVseSBkaWZmZXJlbnQgYmVh c3QuIEdpdmVuIHRoYXQgSSBkb24ndCB0aGluayBhbnlvbmUgd2lsbCBldmVyCm1lYXN1cmUgdGhl IGZldyB1c2VjIHRoZSBhZGRpdGlvbmFsIGlvY3RsIGNvc3RzLgoKPiA+PiA+IEkgdGhpbmsgd2Ug bmVlZCBtdWNoIGxlc3M6IElmIHlvdXIgZHJpdmVyIHN1cHBvcnRzIGF0b21pYyAoYW5kIGhlbmNl Cj4gPj4gPiB1c2Vyc3BhY2UgbWlnaHQgYmUgYXNraW5nIGZvciB0aGUgbW9kZSBibG9iIHByb3Ag aWQpIHRoZW4gdGhhdCBibG9iIHNob3VsZAo+ID4+ID4gc3Vydml2ZSBhcyBsb25nIGFzIHRoZSBt b2RlIGlzIGluIHVzZS4KPiA+Pgo+ID4+IFdoaWNoIG5vdCBvbmx5IHJlcXVpcmVzIHRoZSBtb3N0 IGludmFzaXZlIG9mIHRoZSBjaGFuZ2VzIGFueXdheQo+ID4+IChtb2R1bG8gdGhvc2UgdG8gY3J0 Yy0+bW9kZSwgd2hpY2ggY2FuIHJlZ2FyZGxlc3MgYmUgZHJvcHBlZCksIGJ1dAo+ID4+IGFsc28g YSBidW5jaCBvZiAnZXZlcnkgdGltZSB0aGUgc3RhdGUgY2hhbmdlcywgZ28gY29uc3VsdCBzb21l Cj4gPj4gYXV4aWxpYXJ5IHByb3BlcnR5IGFuZCBwb3RlbnRpYWxseSBleHBpcmUgaXRzIGxpZmV0 aW1lJy4KPiA+Cj4gPiBXZWxsIHllYWgsIGJ1dCBmb3IgdGhlIG1vZGUgcHJvcGVydHkgdGhlIG9u bHkgcGxhY2UgaXQgY2hhbmdlcyAoYmVzaWRlcwo+ID4gdGhlIGF0b21pYyBpb2N0bCkgaXMgaW4g ZHJtX2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZy4KPiAKPiBZb3UgZm9yZ290IGludGVsX2NydGNf c2V0X2NvbmZpZy4gOykKCldpbGwgZ28gYXdheSAobW9zdGx5IGF0IGxlYXN0KSBvbmNlIHdlJ3Zl IGNvbnZlcnRlZCB0byBhdG9taWMuIEF0b21pYwpoZWxwZXJzIG1hdGNoIGk5MTUgbW9kZXNldCBk ZXNpZ24gZm9yIGEgcmVhc29uIDstKQoKPiA+IFdlIGhhdmUgYSBsb3QgbW9yZQo+ID4gY29tcGF0 IGdsdWUgYWxyZWFkeSB0aGFuIHRoZSBmZXcgbGluZXMgeW91J2QgbmVlZCB0byBhZGQgaW4gdGhl cmUuIFRoZQo+ID4gY3J1Y2lhbCBiaXQgaXMgdGhhdCB3ZSBvbmx5IG5lZWQgdG8gbWFrZSB0aGlz IHdvcmsgZm9yIGF0b21pYyBkcml2ZXJzLAo+ID4gc2luY2Ugbm9uLWF0b21pYyBkcml2ZXJzIHdv bid0IGV2ZXIgZXhwb3NlIHRoZSBNT0RFX0lEIHByb3BlcnR5LiBBbmQKPiA+IG5vbi1hdG9taWMg dXNlcnNwYWNlIGRvZXNuJ3QgY2FyZSBhbnl3YXkuCj4gCj4gVGhhdCdzIGFjdHVhbGx5IGEgZmFp ciBwb2ludCwgYW5kIHdoeSBJIGRvbid0IHNvIG11Y2ggbWluZCByb3dpbmcgYmFjawo+IG9uIHRo ZSBjcnRjLT5tb2RlIGNoYW5nZXMuIEknbSBoYXBweSB0byBsZWF2ZSBuZXZlci13aWxsLWJlLWF0 b21pYwo+IGRyaXZlcnMgaW4gdGhlaXIgb3duIGxpdHRsZSBnaGV0dG8uIEJ1dCBpdCBkb2VzIG1h a2UgaXQgaGFyZGVyIGFuZAo+IG1vcmUgZmlkZGx5IGZvciBwZW9wbGUgdG8gaW1wbGVtZW50IGF0 b21pYyBkcml2ZXJzOiBpdCdzIG9uZSBtb3JlCj4gc3VidGxlIHRoaW5nIHRvIHNjcmV3IHVwIGFu ZCBnZXQgd3JvbmcsIGVzcGVjaWFsbHkgaW4gZXJyb3IgcGF0aHMuCj4gV2hlcmVhcyBjcnRjX3N0 YXRlLT5tb2RlID0gZHJtX21vZGVfcmVmZXJlbmNlKGZvbykgaXMgcHJldHR5IGhhcmQgdG8KPiBn ZXQgd3JvbmcuCgpEcml2ZXJzIGRvbid0IGNhcmUgYWJvdXQgaG93IHRoZSBzdGF0ZSBnZXRzIGZp bGxlZCBpbi4gT3Igd2VsbCBzaG91bGRuJ3QKZXZlciwgdGhhdCdzIGFsbCBkb25lIGluIGhlbHBl cnMuIFdlIGNhbiBlYXNpbHkgcHJvdmlkZSBhIGhlbHBlciBsaWtlCgpkcm1fYXRvbWljX2hlbHBl cl9maWxsX21vZGUoY3J0Y19zdGF0ZSwgbW9kZV9pZCkKewoJaWYgKGNydGNfc3RhdGUtPm1vZGVf YmxvYikKCQlkcm1fYmxvYl91bnJlZihjcnRjX3N0YXRlLT5tb2RlX2Jsb2IpOwoKCW1vZGVfYmxv YiA9IGxvb2t1cChtb2RlX2lkKTsgLyogYXNzdW1lIHRoaXMgZ3JhYnMgYSByZWYgKi8KCWNydGNf c3RhdGUtPm1vZGVfYmxvYiA9IG1vZGVfYmxvYjsKCglkcm1fdW1vZGVfdG9fbW9kZShtb2RlX2Js b2ItPmRhdGEsICZjcnRjX3N0YXRlLT5tb2RlKTsKfQoKV2UgYWxyZWFkeSBoYXZlIHNpbWlsYXIg aGVscGVycyB0byBzZXQgb3RoZXIgdGhpbmdzIHdoZXJlIHRyaWNreSBydWxlcwphcHBseS4gQW5k IGlmIHlvdSB3YW50IHdlIGNhbiBkbyBhIHNpbWlsYXIgbGVnYWN5IGhlbHBlciB3aGljaCBjcmVh dGVzIGFuCmFkLWhvYyBtb2RlIGJsb2IgKHNpbWlsYXIgdG8gaG93IHRoZSBjdXJzb3IgaW9jdGxz IGdldHMgcmVtYXBwZWQgdG8gcGxhbmUKZnVuY3Rpb25zKS4KCj4gPiBBbHNvIHRoZSBpbXBvcnRh bnQgcGFydCBoZXJlIGlzbid0IHNvIG11Y2ggdGhlIG1vZGUgKHVzZXJzcGFjZSBjYW4gZ2V0IGF0 Cj4gPiB0aGF0KSwgYnV0IG90aGVyIG5ldyBibG9iIHByb3BlcnRpZXMgbGlrZSBwZXItcGxhbmUg Z2FtbWEgb3Igb3RoZXIgY29sb3IKPiA+IGNvcnJlY3Rpb25zIHRhYmxlcy4KPiAKPiBTdXJlLgo+ IAo+ID4+ID4gU29tZXdoYXQgdW5vcmRlcmVkLCBidXQgaGVyZSdzIHdoYXQgSSB0aGluayB3ZSBu ZWVkOgo+ID4+ID4gLSBTdWJ0eXBpbmcgYmxvYiBwcm9wZXJ0aWVzIGlzIG5vdCBuZWVkZWQsIGF0 IGxlYXN0IEkgY2FuJ3QgdGhpbmsgb2YgYQo+ID4+ID4gICB1c2UtY2FzZS4gSXQgd2lsbCByZXN1 bHQgdGhvdWdoIGluIGxvdHMgb2YgZHVwbGljYXRlZCBjb2RlIGZvcgo+ID4+ID4gICBkdXBsaWNh dGVkIHJlZi91bnJlZiBmdW5jdGlvbnMgYW5kIGF0b21pYyBwcm9wIGhhbmRsaW5nLgo+ID4+Cj4g Pj4gV2hlbiB5b3Ugc2F5ICdzdWJ0eXBpbmcnLCBkbyB5b3UgbWVhbiB3aGF0IEkndmUgZG9uZSB3 aXRoIGdldGJsb2I/Cj4gPgo+ID4gTm90IGp1c3QgYnV0IHllcy4gVGhlIG90aGVyIHJlc3VsdCBp cyB0aGF0IHdlJ2QgbmVlZCB0byBkdXBsaWNhdGUgdGhlCj4gPiBwcm9wZXJ0eSBkZWNvZGluZyBj b2RlIGZvciBlYWNoIHR5cGUgaW4gdGhlIGF0b21pYyBpb2N0bC9zZXRfcHJvcGVydHkKPiA+IGZ1 bmN0aW9ucy4gQW5kIHlvdSBuZWVkIHBlci10eXBlIHJlZmVyZW5jZS91bnJlZmVyZW5jZSBmdW5j dGlvbnMuCj4gCj4gQXQgbGVhc3QgYXMgZmFyIGFzIGdhbW1hIGFuZCBvdGhlciBMVVRzIGFyZSBj b25jZXJuZWQsIEkgYWdyZWUuCj4gCj4gPj4gPiAtIFNpbmNlIHdlIGFscmVhZHkgaGF2ZSBhIGdl dGJsb2IgaW9jdGwgSSB0aGluayB3ZSBzaG91bGQganVzdCBleHRlbmQgdGhlCj4gPj4gPiAgIGV4 aXN0aW5nIGRybV9wcm9wZXJ0eV9ibG9iOgo+ID4+Cj4gPj4gVGhhdCB3YXMgYWN0dWFsbHkgbXkg aW5pdGlhbCBpbXBsZW1lbnRhdGlvbiwgYnV0IGRpZG4ndCBsaWtlIHRoZQo+ID4+IHJlc3VsdGlu ZyByZWZlcmVuY2UgdGllLXVwIGJldHdlZW4gZHJtX2Rpc3BsYXlfbW9kZSBhbmQKPiA+PiBkcm1f cHJvcGVydHlfYmxvYiAoYWthIGRybV9tb2RlX21vZGVpbmZvKS4gSSBjb3VsZG4ndCBmaWd1cmUg b3V0IGEKPiA+PiByZWFsbHkgY2xlYW4gd2F5IHRvIGRvIGl0IHRoYXQgZGlkbid0IHByb3ZhYmx5 IGZhbGwgZG93biBhdCBzb21lCj4gPj4gcG9pbnQsIHNvIGFiYW5kb25lZCBpdCBhbmQgd2VudCBm b3IgcmVmZXJlbmNpbmcgZHJtX2Rpc3BsYXlfbW9kZQo+ID4+IGluc3RlYWQuCj4gPgo+ID4gV2h5 IHJlZmNvdW50IGRybV9kaXNwbGF5X21vZGU/IFRoYXQncyB0aGUgZHJtLWludGVybmFsIHJlcHJl c2VudGF0aW9uLCB3ZQo+ID4gY2FuIGp1c3Qga2VlcCB0aGF0IGFzLWlzIGV2ZXJ5d2hlcmUuIEkg dGhpbmsgdGhhdCdzIHRoZSBtYWluIHBvaW50IG9mIHdoeQo+ID4geW91IG9wdGVkIGZvciB0aGlz IG11Y2ggbW9yZSBpbnZhc2l2ZSByZWZhY3RvcmluZywgYW5kIEkgZG9uJ3Qgc2VlIHdoeQo+ID4g d2UnZCBuZWVkIGl0LiBUaGUgYWRkZWQga3JlZiBmb3IgZHJtX2Jsb2JfcHJvcGVydHkgaXMgaW1v IHJlYWxseSBhbGwgdGhlCj4gPiBrcmVmcyBJIHRoaW5rIHdlIG5lZWQuCj4gCj4gSSB0aGluayBp dCdzIG5vdyBtdWNoIGxlc3MgaW52YXNpdmUuIFRoZSByZWFzb24gSSBvcHRlZCBmb3IgZG9pbmcg aXQKPiBsaWtlIHRoYXQgaXMgYmVjYXVzZSBpdCBhdm9pZGVkIGR1cGxpY2F0aW5nIHRoZSBtb2Rl IHN0cnVjdHVyZSBpbiBzdWNoCj4gYSB3YXkgdGhhdCByZXN1bHRlZCBpbiBub24tb2J2aW91cyBi cmVha2FnZS4gSSBqdXN0IGRvbid0IGxpa2UgdGhlCj4gcG90ZW50aWFsIGZvciBwZW9wbGUgdG8g YnJlYWsgdGhlIHN5bmNocm9uaXNhdGlvbiBiZXR3ZWVuIHRoZSB0d28uCj4gKFdoaWNoIHdhcyBw YXJ0IG9mIHRoZSByZWFzb24gSSBlbmRlZCB1cCBkb2luZyB0aGUgY3J0Yy0+bW9kZQo+IGNvbnN0 bmVzcyBkYW5jZSBpbiB0aGUgZmlyc3QgcGxhY2UgLi4uKQoKSW1vIHdlIG5lZWQgdG8ganVzdGlm eSBlYWNoIGFuZCBldmVyeSBrcmVmIGJlY2F1c2UgcmVmY291bnRpbmcgdGVuZHMgdG8gYmUKZnJh Z2lsZSBhbmQgYnVnZ3kgaW1vLiBGb3IgYmxvYiBwcm9wZXJ0aWVzIHdlIG5lZWQgdGhlIHJlZmNv dW50IGFzIHNvb24gYXMKd2UgYWxsb3cgdXNlcnNwYWNlIHRvIGNyZWF0ZSB0aGVtIGFuZCB0aGUg a2VybmVsIHRvIHVzZSB0aGVtCmluZGVwZW5kZW50bHkuIFdlJ3ZlIHRyaWVkIHRvIGRvIHRoYXQg d2l0aG91dCByZWZjb3VudHMgZm9yIGZyYW1lYnVmZmVycwp3YXkgYmFjaywgaXQgZG9lc24ndCB3 b3JrIHdlbGwuCgpGb3IgdGhlIGludGVybmFsIG1vZGUgcmVwcmVzZW50YXRpb24gd2hpY2ggaXMg Y29waWVkIGFyb3VuZCBhbGwgb3ZlciB0aGUKcGxhY2UgaW4gbW9kZXNldCBjb2RlIEkgZG9uJ3Qg c2VlIGFueSByZWFzb25zIHdoeSB3ZSBuZWVkIGEga3JlZi4gSXQncyBub3QKdGhlIHVzZXJzcGFj ZSByZXByZXNlbnRhdGlvbiBvZiBhIG1vZGUsIHNvIGV2ZW4gaWYgd2UgZGVjaWRlIHRvIG1ha2Ug c29tZQpndWFyYW50ZWVzIGFib3V0IHVuaXF1ZW5lc3Mgd2UgY2FuIHN0aWxsIGhhcHBpbHkgY29w eSB0aGUgbW9kZXMgYXJvdW5kCmludGVybmFsbHkuIEFuZCBhcyBsb25nIGFzIGNvcHlpbmcgaXMg b2sgdGhhdCdzIG11Y2ggc2ltcGxlciB0aGFuCnJlZmNvdW50aW5nLgoKPiA+PiA+ICAgUGx1cyBv ZmMgY2hhbmdpbmcgZHJtX3Byb3BlcnR5X2NyZWF0ZS9kZXN0cm95X2Jsb2IgaW50byByZWYvdW5y ZWYKPiA+PiA+ICAgZnVuY3Rpb25zLiBBbmQgZG9pbmcgdGhlIHNhbWUgd2VhayByZWZlcmVuY2Ug dHJpY2sgZm9yIGlkcnMgYXMgd2UncmUKPiA+PiA+ICAgdXNpbmcgZm9yIGZyYW1lYnVmZmVycyBu b3cuCj4gCj4gSW5kZWVkLgo+IAo+ID4+ID4gICBGb3IgbW9kZSBwcm9wZXJ0aWVzIHRoZSBkYXRh IGNvbnRhaW5lZCB3b3VsZCBiZSBzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8KPiA+PiA+ICAgKGku ZS4gdGhlIEFCSSBzdHJ1Y3Qgd2UgYWxyZWFkeSB1c2UgZm9yIHRoZSBzZXRjcnRjL2dldGNvbm5l Y3RvciBpb2N0bHMsCj4gPj4gPiAgIG5vdCB0aGUgaW50ZXJuYWwgb25lKS4KPiA+Pgo+ID4+IFJp Z2h0LCB0aGlzIGlzIHdoYXQncyB0aGVyZTogMjUvMzcgaXMgZXhwbGljaXRseSBhbHdheXMgcmV0 dXJuaW5nCj4gPj4gbW9kZWluZm8sIGFuZCB0aGUgY3JlYXRpb24gZG9lcyBhcyB3ZWxsLiBJIGRv bid0IHNlZSBhbnkgYmVuZWZpdCB0bwo+ID4+IGV4cG9zaW5nIHRoZSBpbnRlcm5hbCBzdHJ1Y3Qu Cj4gPgo+ID4gSG0sIG1heWJlIEkgbmVlZCB0byBleHBsYWluIG15IG1vdGl2aWF0aW9uIGZvciB0 aGUgYmxvYiBwcm9wIHN0dWZmOiBJIHdhbnQKPiA+IHRvIHVzZSBpdCBmb3IgZ2FtbWEgdGFibGVz IChub3QganVzdCB0aGUgcGVyLWNydGMgb25lIHdlIGhhdmUsIGJ1dAo+ID4gcGVyLXBsYW5lIHRh YmxlcyB0b28pIGFuZCBvdGhlciBiaWdnZXIgcHJvcGVydGllcy4gVXNpbmcgaXQgZm9yIHRoZSBt b2RlCj4gPiBieSBwYWNraW5nIHRoZSBleGlzdGluZyBkcm1fbW9kZV9tb2RlaW5mbyBpbnRvIGEg YmxvYiB0b28gd2FzIGp1c3QgYSBiaXQKPiA+IGFuIGFmdGVydGhvdWdodCAtIGZvciB0aGUgbW9k ZSB3ZSBjb3VsZCBhcyB3ZWxsIGp1c3QgYWRkIHByb3BlcnRpZXMgZm9yCj4gPiBhbGwgdGhlIGlu ZGl2aWR1YWwgbWVtYmVycywgbGlrZSB3ZSd2ZSBkb25lIHdpdGggYWxsIHRoZSBvdGhlciBzdHJ1 Y3R1cmVzLgo+ID4KPiA+IEJ1dCBsb2FkaW5nIGdhbW1hIHRhYmxlcyB3aXRoIGdhbW1hLTAgdXAg dG8gZ2FtbWEtMTAyNCBpcyB3YXkgdG9vCj4gPiB1bndpZWxkaW5nLCBzbyB0aGF0J3Mgd2h5IHdl IGltbyByZWFsbHkgbmVlZCBibG9icy4KPiAKPiBSaWdodCwgdGhhdCBtYWtlcyB0b3RhbCBzZW5z ZS4gSSBkb24ndCB0aGluayBhbnl0aGluZyBpbiBoZXJlCj4gcHJlY2x1ZGVzIHVzaW5nIHRoaXMs IGV4Y2VwdCB0aGUgcHJlY2VkZW50IG9mIHJlZmNvdW50aW5nIHRoZSBtb2RlCj4gcmF0aGVyIHRo YW4gdGhlIGJsb2IgcHJvcGVydHkuIFRoZSByZWFzb24gSSBkaWQgdGhhdCBpcyBiZWNhdXNlIHdl Cj4gYWxyZWFkeSBfaGF2ZV8gYSBkcm1fbW9kZV9vYmplY3QgdHlwZSBmb3IgbW9kZXMsIGFuZCBo YXZpbmcgdHdvCj4gcHJvcGVydGllcyB0aWVkIHRvZ2V0aGVyIGluIGEgbXV0dWFsIGRlYXRoZ3Jp cCBzZWVtZWQgbGlrZSBhbgo+IGludml0YXRpb24gZm9yIGZhaWx1cmUuCj4gCj4gU28gZm9yIGdh bW1hLCBlaXRoZXIgd2UgY291bGQgdGFrZSB0aGUgc2FtZSBhcHByb2FjaCBhbmQgZ2VuZXJhdGUK PiB3cmFwcGVyIG9iamVjdHMgYXJvdW5kIHRoZSBibG9icyAtIHdoaWNoIGlzIHVzZWZ1bCB3aGVu IHlvdSBoYXZlIG90aGVyCj4gcmVwcmVzZW50YXRpb25zIHdoaWNoIGFyZSBpbnRlcm5hbGx5IHdp ZGVseSB1c2VkIChlLmcuCj4gZHJtX2Rpc3BsYXlfbW9kZSB2cy4gZHJtX21vZGVfbW9kZWluZm8p LCBvciBqdXN0IHJlZmNvdW50IHRoZSBibG9icwo+IGFuZCBsZXQgZHJpdmVycyBkZWFsIHdpdGgg YW55IGNvbnZlcnNpb24uIE15IGd1ZXNzIGlzIHRoYXQgdGhlIGxhdHRlcgo+IHdvdWxkIGJlIG1v c3QgdXNlZnVsLCBhcyB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIHJlYWxseSBzdGFuZGFyZGlzZSBv bgo+IC0gYW5kIGF0IGxlYXN0IGN1cnJlbnRseSwgZ2FtbWEgX29ubHlfIHRlbmRzIHRvIGNvbWUg ZnJvbSB1c2Vyc3BhY2UuCj4gTm90IG9ubHkgZG8gbW9kZXMgaGF2ZSBhbiBhbHRlcm5hdGUgcmVw cmVzZW50YXRpb24gd2hpY2ggaXMgYWxyZWFkeQo+IHVzZWZ1bCBlbm91Z2ggdG8gaGF2ZSBpdHMg b3duIG9iamVjdCB0eXBlIGFuZCBJRCBzZXQsIGJ1dCB0aGV5Cj4gYmFzaWNhbGx5IGFsbCBjb21l IGZyb20gdGhlIGtlcm5lbCwgd2l0aCB0aGUgZHJtX21vZGVfbW9kZWluZm8gYmVpbmcgYQo+IGNv bnZlcnNpb24sIHJhdGhlciB0aGFuIHRoZSBvdGhlciB3YXkgYXJvdW5kLiBIZW5jZSB3aHkgSSBj aG9zZSB0bwo+IGtlZXAgdGhlIGN1cnJlbnQgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gYXMgdGhl IHByaW1hcnkuCgpJIHRoaW5rIG1vZGVzIGFyZSBzcGVjaWFsIGJlY2F1c2Ugd2UgaGF2ZSBib3Ro IHVhcGkgYW5kIGludGVybmFsIHZlcnNpb25zCm9mIGl0LiBTbyB0aGVyZSdzIG5lY2Vzc2FyaWx5 IHNvbWUgY29udmVyc2lvbiBnb2luZyBvbi4gQW5kIGJlY2F1c2UgYXRvbWljCnN0YXRlIHN0cnVj dHVyZXMgYXJlIG1lYW50IHRvIGJlIGNvbnN0IG9uY2UgY29tbWl0dGVkIGl0J3Mgc2ltcGxlciB0 bwpqdXN0IGtlZXAgYm90aCBhcm91bmQgaW4gcGFyYWxsZWwuCgpGb3IgZ2FtbWEgb3RvaCB3ZSBq dXN0IGhhdmUgdGhlIHJhdyBkYXRhIGFuZCBjb252ZXJzaW9uIChpZiB0aGVyZSdzIGFueSkKd2ls bCBoYXBwZW4gaW4gdGhlIGRyaXZlciB3aGVuIHVwbG9hZGluZy4gVGhlcmUgaXQncyBnb29kIGVu b3VnaCB0byBjYXJyeQphcm91bmQganVzdCB0aGUgdW5kZWNvZGVkIGJsb2Igd2l0aCBpdCdzIHJh dyBkYXRhLiBFdmVuIG1vcmUgc28gZm9yCmRyaXZlci9odyBzcGVjaWZpYyBwcm9wZXJ0aWVzIHdo aWNoIG1pZ2h0IGRpcmVjdGx5IHJlcHJlc2VudCBzb21lIHJlZ2lzdGVyCnNldHRpbmdzLgoKPiBT byBJIHRoaW5rIGEgbG90IG9mIHRoZSBzaW1pbGFyaXRpZXMgb24gdGhlcmUgYXJlIG1pc2xlYWRp bmcgd2hlbiB5b3UKPiBzY3JhdGNoIHRoZSBzdXJmYWNlIG9mIGl0OyBhZ2FpbiwgSSBoYWQgc3Rh cnRlZCB3aXRoIHRoYXQgZXhhY3QKPiBhcHByb2FjaCB3aGVuIEkgY2FtZSBpbnRvIHRoaXMsIGJ1 dCBsYXRlciByZXZpc2VkIGl0LgoKSG0gSSB0aGluayB5b3UndmUgbG9zdCBtZSAtIHdoaWNoIHNp bWlsYXJpdGllcyBhcmUgd2UgdGFsa2luZyBhYm91dCBub3c/Cgo+ID4+ID4gICBHZXR0aW5nIHRo ZSByZWZjb3VudGluZyByaWdodCBmb3IgdGhlIGF0b21pYyBpb2N0bCBzaG91bGQgYmUgc2ltcGxl LiBGb3IKPiA+PiA+ICAgdGhlIGxlZ2FjeSAtPnNldF9jb25maWcgZW50cnlwb2ludCB3ZSBuZWVk IHRvIGZpeCB0aGluZ3MgdXAgaW4gdGhlCj4gPj4gPiAgIGhlbHBlciB3aGVuIHdlIHVwZGF0ZSB0 aGUgbW9kZSwgYnkgbWFudWFsbHkgcmVsZWFzaW5nIHRoZSBvbGQgbW9kZSBibG9iCj4gPj4gPiAg IGFuZCBjcmVhdGluZyBhIG5ldyBvbmUgKG93bmVkIGJ5IHRoZSBrZXJuZWwgdG8gYXZvaWQgbGVh a3MgYmVjYXVzZSBvbGQKPiA+PiA+ICAgdXNlcnNwYWNlIHdvbid0IGNsZWFuIHRoZW0gdXAgLSB3 ZSd2ZSBoYWQgdGhpcyBidWcgd2l0aCBjb21wYXQgY3Vyc29yCj4gPj4gPiAgIGZicyBqdXN0IHJl Y2VudGx5KS4KPiA+Pgo+ID4+IFRvIGJlIGhvbmVzdCBJIHRoaW5rIHRoZSBmYiByZWZjbnQgYnVn IGlzIHByZXR0eSBhcHJvcG9zIGhlcmUgLSBieQo+ID4+IGtlZXBpbmcgdGhlc2UgYXdrd2FyZGx5 IHNwbGl0IG91dCwgaW5kZXBlbmRlbnRseSByZWZlcmVuY2UtY291bnRlZCwKPiA+PiBub3Qgc2Vu c2libHkgbGlua2VkIHRvIGVhY2ggb3RoZXIsIGFuZCBub3QgZXZlbiB2ZXJpZnlpbmcgdGhlCj4g Pj4gY29ycmVjdG5lc3Mgb2YgdGhlIHVzZXJzIChjb25zdCksIHlvdSdyZSBpbnZpdGluZyBhbm90 aGVyIGRpc2FzdGVyCj4gPj4gYWxvbmcgdGhlIHNhbWUgbGluZXMuIEVzcGVjaWFsbHkgYXMgZHJp dmVycyBzdGFydCB0byBtb3ZlIGF3YXkgZnJvbQo+ID4+IHRoZSBoZWxwZXJzIGFuZCBhcmUgZXhw ZWN0ZWQgdG8gbWFuYWdlIG1vcmUgc3RhdGUgdGhlbXNlbHZlcy4KPiA+Cj4gPiBXaGljaCBmYiBy ZWZjb3VudCBidWc/IFdlJ3ZlIGhhZCBwaWxlcyBvZiB0aGVtIGluIHRoZSBwYXN0LCBzaW1wbHkg YmVjYXVzZQo+ID4gcmVmY291bnRpbmcgaXMgYXBwYXJlbnRseSBoYXJkLgo+IAo+IFllYWguIFNv IGlmIHdlJ3JlIGludHJvZHVjaW5nIHJlZmNvdW50aW5nLCB3aHkgbm90IG1ha2UgaXQgYXMgZWFz eSBhbmQKPiBhcyBjbGVhciBhcyBwb3NzaWJsZSwgcmF0aGVyIHRoYW4gc3BsaXR0aW5nIHlvdXIg b2JqZWN0cyBiZXR3ZWVuIG9uZQo+IHRoYXQncyByZWZjb3VudGVkIGFuZCB1c2VkIGZvciBoYWxm IG9mIHdoYXQgeW91J3JlIGRvaW5nLCBhbmQgYW5vdGhlcgo+IHRoYXQgaXNuJ3QgcmVmY291bnRl ZCBhbmQgaXMgdXNlZCBmb3IgdGhlIG90aGVyIGhhbGY/IFdlIGFscmVhZHkga25vdwo+IHRoYXQg cGVvcGxlIHNjcmV3IHRoaXMgdXAsIHNvIHdoeSBub3QgbWFrZSBpdCBhcyBjbGVhciBhbmQgYXMK PiBkaWZmaWN1bHQgdG8gZ2V0IHdyb25nIGFzIHBvc3NpYmxlPwoKQmVjYXVzZSB0aGV5J3JlIG5v dCB0aGUgc2FtZSwgYXQgbGVhc3QgdG8gbWUuIFRoZSByZWZjb3VudGVkIGJsb2IgcHJvcApwYXJ0 IGlzIGp1c3QgdGhlIGRhdGEgdHJhbnNwb3J0IGJldHdlZW4gdXNlcnNwYWNlIGFuZCB0aGUga2Vy bmVsIGZvciBhbGwKa2luZHMgb2YgYmlnZ2VyLWlzaCBtb2Rlc2V0IGRhdGEuIFRoZSBpbnRlcm5h bCByZXByZXNlbnRhdGlvbiBpcyBzb21ldGhpbmcKZW50aXJlbHkgZGlmZmVyZW50IGFuZCBpbW8g ZG9lc24ndCBuZWVkIHRvIGJlIHRpZWQgdG8gdGhlIHB1YmxpYyBvbmUgaW1vLgoKV2VsbCBzaG91 bGRuJ3QgZXZlbiwgc2luY2UgZHJpdmVycyBleGNsdXNpdmVseSBkZWFsIHdpdGggdGhlIGludGVy bmFsCnJlcHJlc2VudGF0aW9uLCBzbyBpZiB3ZSBhbGxvdyB0aGVtIHRvIGtlZXAgb24gY29weWlu ZyB0aG9zZSB3ZSdsbCBoYXZlIG5vCnJlZmNvdW50aW5nIGlzc3VlcyBpbiBkcml2ZXJzIGF0IGFs bC4gQmVjdWFzZSB0aGVyZSB3b24ndCBiZSBhbnkKcmVmY291bnRpbmcgZ29pbmcgb24uCgo+ID4+ IEkgYWdyZWUgdGhlIGluaXRpYWwgc2VyaWVzIHdhcyB0b28gaW52YXNpdmUgYW5kIHRoZXJlJ3Mg dmFsdWUgaW4KPiA+PiBoYXZpbmcgYSBtdWNoIG1vcmUgbWluaW1hbCBzZXJpZXMsIHNvIGhvdyBh Ym91dCBJIHNwbGl0IG91dCB0aGUKPiA+PiBjcnRjLT5tb2RlIGNvbnN0bmVzcyAoYnV0IG5vdCBw b2ludGVyIC0gSSBkb24ndCB0aGluayBJIGhhdmUgYW55Cj4gPj4gZGVzaXJlIHRvIGV2ZXIgcHVz aCB0aGF0IHRocm91Z2ggdGJxaCkgY2hhbmdlcyBpbnRvIGFub3RoZXIgc2VyaWVzIHdlCj4gPj4g Y2FuIHRyYWNrIHNlcGFyYXRlbHksIGFuZCB0aGVuIHNlZSBpZiB3ZSBjYW4gZ2V0IGEgbXVjaCBt b3JlIG1pbmltYWwKPiA+PiBwYXRjaHNldCB0aGF0IGRvZXNuJ3QgbWFrZSBtZSBzaHVkZGVyIGFu ZCB0aGluayBvZiBwcmV2aW91cwo+ID4+IHJlZmNudC9zdGF0ZS1jb25zaXN0ZW5jeSBob3Jyb3Jz LCBub3IgeW91IG9mIGF0b21pYyBjb252ZXJzaW9ucyBwYXN0LAo+ID4+IHRvZ2V0aGVyLiBJJ20g aGFwcHkgdG8gcHVsbCBpbiB0aGUgb3RoZXIgZ3V5cyBkb2luZyBhdG9taWMgY29udmVyc2lvbnMK PiA+PiBhbmQgZ2V0IHNvbWUgdGVzdGluZyBvdXQgb2YgdGhlbSB0byBzZWUgaWYgaXQnbGwgd29y ayBmb3IgdGhlbSBhbmQgaG93Cj4gPj4gd2VsbCwgYnV0IGhhdmluZyBpdCBydW4gb24gVGVncmEg d2FzIGFib3V0IGFzIHBhaW5sZXNzIGFzIEkgY291bGQndmUKPiA+PiBob3BlZCBmb3IuCj4gPgo+ ID4gSG0sIGhvdyBkb2VzIGEgY29uc3QgY3J0Yy0+bW9kZSBhcyBhIG5vbi1wb2ludGVyIHdvcms/ IFdlIGRvIG5lZWQgdG8KPiA+IHVwZGF0ZSB0aGlzIG9uZSBpbiBzZXRfY29uZmlnLiBPciB3b3Vs ZCB5b3UgZG8gYSBmb3JjZWQgY2FzdCBpbiB0aGVzZQo+ID4gY2FzZXM/Cj4gPgo+ID4gQnV0IGV2 ZW4gZm9yIHRoYXQgSSBkb24ndCBzZWUgd2h5IHdlJ2QgbmVlZCB0byBjaGFuZ2UgY3J0Yy0+bW9k ZSByZWFsbHkgdG8KPiA+IG1ha2UgdGhlIGF0b21pYyBtb2RlIGEgYmxvYiBwcm9wZXJ0eS4KPiAK PiBJIGFncmVlOyBJJ2QgaW5pdGlhbGx5IHRob3VnaHQgdGhhdCB3YXMgbmVjZXNzYXJ5LCBhbmQg aXQgd2FzIG9ubHkKPiB3aGVuIEknZCBnb3QgYSByZWFzb25hYmxlIHdheSBkb3duIHRoZSByb2Fk IHRoYXQgSSdkIHJlYWxpc2VkIGl0Cj4gd2Fzbid0IG5lY2Vzc2FyeS4gQnkgdGhlIHRpbWUgSSdk IGRvbmUgdGhhdCwgaXQgc2VlbWVkIHBydWRlbnQgdG8KPiBmaW5pc2ggaXQgb2ZmIGFuZCBmaXgg dGhlIGRyaXZlcnMsIGlmIG9ubHkgdG8gY29udmluY2UgbXlzZWxmIHRoYXQgaXQKPiB3b3VsZG4n dCBiZSBicmVha2luZyBkcml2ZXJzIG9yIGludHJvZHVjaW5nIGJ1Z3MgYnkgZG9pbmcgYWxsIHRo aXMuCj4gCj4gSSdtIG5vdCBzdXJlIHdlJ3JlIGdvaW5nIHRvIGNvbnZpbmNlIGVhY2ggb3RoZXIg YXQgdGhpcyBwb2ludCwgc28gSSdsbAo+IGp1c3Qgc2tpbSBvdmVyIHRoZSBjb3JlIGFyZ3VtZW50 cyBhbmQgbGVhdmUgaXQgYXQgdGhpczoKPiAgIC0gdGhpcyBpcyBubyBsb25nZXIgcmVhbGx5IGlu dmFzaXZlIGF0IGFsbAo+ICAgLSBtb2RlcyBhcmVuJ3QgYXMgc2ltaWxhciB0byBvdGhlciBibG9i cyBhcyB0aGV5IGZpcnN0IHNlZW0gKGVsc2UKPiB3ZSdkIGp1c3QgYmUgdXNpbmcgZHJtX21vZGVf bW9kZWluZm8gd2l0aCBubyBtb2RlLW9iamVjdCB0eXBlCj4gZXZlcnl3aGVyZSkKPiAgIC0gcmVm Y291bnRpbmcgbW9kZXMgcHJvdmlkZXMgZm9yIG11Y2ggZWFzaWVyIGRlYnVnZ2FiaWxpdHkgYW5k Cj4gdHJhY2VhYmlsaXR5IGZvciBib3RoIGtlcm5lbCBhbmQgdXNlcnNwYWNlLCBhbmQgZXNwZWNp YWxseSBhY3Jvc3MgdGhlCj4gYm91bmRhcnkgd2hlcmUgeW91IG1heSBub3QgYmUgZmFtaWxpYXIg d2l0aCB0aGUgb3RoZXIgc2lkZQo+ICAgLSBnaXZpbmcgcGVvcGxlIGFub3RoZXIgb3Bwb3J0dW5p dHkgdG8gc2NyZXcgdGhpbmdzIHVwIGlzIG5ldmVyIGEKPiBnb29kIHRoaW5nLCBlc3BlY2lhbGx5 IHdoZW4gKGJvdGggaW4gcmVmY291bnRpbmcgYW5kIHNwZWNpZmljYWxseSBpbgo+IG1vZGVzKSB0 aGV5J3ZlIHJlcGVhdGVkbHkgcHJvdmVuIHRoYXQgdGhleSBkbyBzY3JldyBpdCB1cCBob3JyZW5k b3VzbHkKClllYWggSSB0aGluayBJJ3ZlIHVuZGVyc3Rvb2QgeW91ciBhcmd1bWVudC4gSSB3YW50 ZWQgdG8gc3VtbWFyaXplIG15IG93bgpidXQgdGhlbiBJIHN1ZGRlbmx5IG5vdGljZWQgdGhhdCB5 b3UncmUgbWVudGlvbmluZyB0aGF0IGRybV9tb2RlX21vZGVpbmZvCmlzIGEgbW9kZS1vYmplY3Qu IFRoYXQncyBmYWl0aGZ1bCBidXQgdXNlbGVzcyBjb3B5cGFzdGEgZnJvbSBob3cgeHJhbmRyCndv cmtzLCBzZWUKCmNvbW1pdCBjNTViNmIzZGEyNWFhM2FmMzZlYzUxYTEzYTRlZDE1ZmVmMGQ3YTcz CkF1dGhvcjogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4K RGF0ZTogICBGcmkgQXByIDI2IDE3OjQwOjI4IDIwMTMgKzAzMDAKCiAgICBkcm06IEtpbGwgdXNl cl9tb2RlcyBsaXN0IGFuZCB0aGUgYXNzb2NpYXRlZCBpb2N0bHMKICAgIAogICAgVGhlcmUgaXMg bm8gd2F5IHRvIHVzZSBtb2RlcyBhZGRlZCB0byB0aGUgdXNlcl9tb2RlcyBsaXN0LiBXZSBuZXZl cgogICAgbG9vayBhdCB0aGUgY29udGVudHMgb2Ygc2FpZCBsaXN0IGluIHRoZSBrZXJuZWwsIGFu ZCB0aGUgb25seSBvcGVyYXRpb25zCiAgICB1c2Vyc3BhY2UgY2FuIGRvIGFyZSBhdHRhY2ggYW5k IGRldGFjaC4gU28gdGhlIG9ubHkgImJlbmVmaXQiIG9mIHRoaXMKICAgIGludGVyZmFjZSBpcyB3 YXN0aW5nIGtlcm5lbCBtZW1vcnkuCiAgICAKICAgIEZvcnR1bmF0ZWx5IGl0IHNlZW1zIG5vIHJl YWwgdXNlciBzcGFjZSBhcHBsaWNhdGlvbiBldmVyIHVzZWQgdGhlc2UKICAgIGlvY3Rscy4gU28g anVzdCBraWxsIHRoZW0uCiAgICAKICAgIEFsc28gcmVtb3ZlIHRoZSBwcm90b3R5cGVzIGZvciB0 aGUgbm9uLWV4aXN0aW5nIGRybV9tb2RlX2FkZG1vZGVfaW9jdGwoKQogICAgYW5kIGRybV9tb2Rl X3JtbW9kZV9pb2N0bCgpIGZ1bmN0aW9ucy4KICAgIAogICAgdjI6IFVzZSBkcm1fbm9vcCBpbnN0 ZWFkIG9mIGNvbXBsZXRlbHkgcmVtb3ZpbmcgdGhlIGlvY3RscwogICAgCiAgICBTaWduZWQtb2Zm LWJ5OiBWaWxsZSBTeXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgogICAg U2lnbmVkLW9mZi1ieTogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KCklvdyB0aGF0 IG1vZGUgaWQgYW5kIG1vZGUgbGlzdCB0aGF0IHN0aWxsIGV4aXN0cyBjYW4gcHJvYmFibHkgYmUg cmlwcGVkCm91dCB3aXRob3V0IHNpZGUtZWZmZWN0cyAtIHRoZSBvbmx5IHdheSB3ZSB0cmFuc3Bv cnQgbW9kZXMgYmFjayZmb3J0aApiZXR3ZWVuIHRoZSBrZXJuZWwgYW5kIHVzZXJzcGFjZSBpcyB0 aHJvdWdoIHRoZSByYXcgdWFwaSBzdHJ1Y3R1cmUuCgpNaWdodCBiZSB1c2VmdWwgdG8gZG8gYW4g YXVkaXQgb2YgYWxsIHVzZXJzcGFjZSB0byBjaGVjayB3aGV0aGVyIHdlIGNvdWxkCnJlbW92ZSBt b3JlIGNyYXAgb3Igbm90LgoKPiBJZiB5b3UgaGF2ZSBhIGdvb2QtZmFpdGggbG9vayBhdCB0aGUg cGF0Y2hzZXQgKGdpdCBVUkwgaXMgaW4gd2l0aAo+IGNnaXQpIGFuZCBzdGlsbCB3YW50IGl0IHJl LWRvbmUgdG8gYWRkIHRoZSBibG9iIHByb3BlcnRpZXMgb24gdGhlIHNpZGUKPiBpbnN0ZWFkLCB0 aGVuIEknbGwgZG8gdGhhdC4gQnV0IGhvcGVmdWxseSB0aGUgbXVjaCBzbWFsbGVyIHNlcmllcwo+ IChJJ3ZlIGFsc28gc3F1YXNoZWQgc29tZSBvZiB0aGUgbW9yZSBhZ2dyZXNzaXZlbHktc3BsaXQg cGF0Y2hlcywgb24KPiB0aGUgZ3JvdW5kcyB0aGF0IHRoZXkncmUgbm90IHRoYXQgY3J1Y2lhbCBm b3IgYmlzZWN0KSB3aWxsIGNvbnZpbmNlCj4geW91IC4uLiA/CgpZZWFoIEknbGwgdGFrZSBhIGxv b2suCgpUaGFua3MsIERhbmllbAotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwg SW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmkt ZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK