From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jerome Glisse Subject: Re: Asynchronous eviction [WAS Re: [PATCH] drm/ttm: add minimum residency constraint for bo eviction] Date: Fri, 30 Nov 2012 17:02:07 -0500 Message-ID: <20121130220206.GD2111@gmail.com> References: <50B8E7FF.8050006@shipmail.org> <50B8F048.3060707@shipmail.org> <20121130180738.GA2111@gmail.com> <50B8FB68.4060605@shipmail.org> <20121130192542.GB2111@gmail.com> <50B918A5.9080802@shipmail.org> <20121130210753.GC2111@gmail.com> <50B926C1.1000606@shipmail.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qa0-f42.google.com (mail-qa0-f42.google.com [209.85.216.42]) by gabe.freedesktop.org (Postfix) with ESMTP id CCD68E6065 for ; Fri, 30 Nov 2012 14:05:16 -0800 (PST) Received: by mail-qa0-f42.google.com with SMTP id hg5so1756105qab.15 for ; Fri, 30 Nov 2012 14:05:16 -0800 (PST) Content-Disposition: inline In-Reply-To: <50B926C1.1000606@shipmail.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: Thomas Hellstrom Cc: Jerome Glisse , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBOb3YgMzAsIDIwMTIgYXQgMTA6MzY6MDFQTSArMDEwMCwgVGhvbWFzIEhlbGxzdHJv bSB3cm90ZToKPiBPbiAxMS8zMC8yMDEyIDEwOjA3IFBNLCBKZXJvbWUgR2xpc3NlIHdyb3RlOgo+ ID5PbiBGcmksIE5vdiAzMCwgMjAxMiBhdCAwOTozNTo0OVBNICswMTAwLCBUaG9tYXMgSGVsbHN0 cm9tIHdyb3RlOgo+ID4+T24gMTEvMzAvMjAxMiAwODoyNSBQTSwgSmVyb21lIEdsaXNzZSB3cm90 ZToKPiA+Pj5PbiBGcmksIE5vdiAzMCwgMjAxMiBhdCAwNzozMTowNFBNICswMTAwLCBUaG9tYXMg SGVsbHN0cm9tIHdyb3RlOgo+ID4+Pj5PbiAxMS8zMC8yMDEyIDA3OjA3IFBNLCBKZXJvbWUgR2xp c3NlIHdyb3RlOgo+ID4+Pj4+T24gRnJpLCBOb3YgMzAsIDIwMTIgYXQgMDY6NDM6MzZQTSArMDEw MCwgVGhvbWFzIEhlbGxzdHJvbSB3cm90ZToKPiA+Pj4+Pj5PbiAxMS8zMC8yMDEyIDA2OjE4IFBN LCBKZXJvbWUgR2xpc3NlIHdyb3RlOgo+ID4+Pj4+Pj5PbiBGcmksIE5vdiAzMCwgMjAxMiBhdCAx MjowOCBQTSwgVGhvbWFzIEhlbGxzdHJvbSA8dGhvbWFzQHNoaXBtYWlsLm9yZz4gd3JvdGU6Cj4g Pj4+Pj4+Pj5PbiAxMS8zMC8yMDEyIDA1OjMwIFBNLCBKZXJvbWUgR2xpc3NlIHdyb3RlOgo+ID4+ Pj4+Pj4+Pk9uIEZyaSwgTm92IDMwLCAyMDEyIGF0IDQ6MzkgQU0sIFRob21hcyBIZWxsc3Ryb20g PHRob21hc0BzaGlwbWFpbC5vcmc+Cj4gPj4+Pj4+Pj4+d3JvdGU6Cj4gPj4+Pj4+Pj4+Pk9uIDEx LzI5LzIwMTIgMTA6NTggUE0sIE1hcmVrIE9sxaHDoWsgd3JvdGU6Cj4gPj4+Pj4+Pj4+Pj5XaGF0 IEkgdHJpZWQgdG8gcG9pbnQgb3V0IHdhcyB0aGF0IHRoZSBzeW5jaHJvbml6YXRpb24gc2hvdWxk bid0IGJlCj4gPj4+Pj4+Pj4+Pj5uZWVkZWQsIGJlY2F1c2UgdGhlIENQVSBzaG91bGRuJ3QgZG8g YW55dGhpbmcgd2l0aCB0aGUgY29udGVudHMgb2YKPiA+Pj4+Pj4+Pj4+PmV2aWN0ZWQgYnVmZmVy cy4gVGhlIEdQVSBtb3ZlcyB0aGUgYnVmZmVycywgbm90IHRoZSBDUFUuIFdoYXQgZG9lcyB0aGUK PiA+Pj4+Pj4+Pj4+PkNQVSBkbyBiZXNpZGVzIHVwZGF0aW5nIHNvbWUga2VybmVsIHN0cnVjdHVy ZXM/Cj4gPj4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+PkFsc28sIGJ1ZmZlciBkZWxldGlvbiBpcyBz b21ldGhpbmcgd2hlcmUgeW91IGRvbid0IG5lZWQgdG8gd2FpdCBmb3IKPiA+Pj4+Pj4+Pj4+PnRo ZSBidWZmZXIgdG8gYmVjb21lIGlkbGUgaWYgeW91IGtub3cgdGhlIG1lbW9yeSBhcmVhIHdvbid0 IGJlCj4gPj4+Pj4+Pj4+Pj5tYXBwZWQgYnkgdGhlIENQVSwgZXZlci4gVGhlIG1lbW9yeSBjYW4g YmUgcmVjbGFpbWVkIHJpZ2h0IGF3YXkuIEl0Cj4gPj4+Pj4+Pj4+Pj53b3VsZCBiZSB0aGUgR1BV IHRvIG1vdmUgbmV3IGRhdGEgaW4gYW5kIG9uY2UgdGhhdCBoYXBwZW5zLCB0aGUgb2xkCj4gPj4+ Pj4+Pj4+Pj5idWZmZXIgd2lsbCBiZSB0cml2aWFsbHkgaWRsZSwgYmVjYXVzZSBzaW5nbGUtcmlu ZyBHUFVzIGV4ZWN1dGUKPiA+Pj4+Pj4+Pj4+PmNvbW1hbmRzIGluIG9yZGVyLgo+ID4+Pj4+Pj4+ Pj4+Cj4gPj4+Pj4+Pj4+Pj5NYXJlawo+ID4+Pj4+Pj4+Pj5BY3R1YWxseSBhc3luY2hyb25vdXMg ZXZpY3Rpb24gLyBkZWxldGlvbiBpcyBzb21ldGhpbmcgSSBoYXZlIGJlZW4KPiA+Pj4+Pj4+Pj4+ cHJvdG90eXBpbmcgZm9yIGEgd2hpbGUgYnV0IG5ldmVyIGdvdHRlbiBhcm91bmQgdG8gaW1wbGVt ZW50IGluIFRUTToKPiA+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+PlRoZXJlIGFyZSBhIGZldyBtaW5v ciBjYXZlYXRzOgo+ID4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+V2l0aCBidWZmZXIgZGVsZXRpb24s IHdoYXQgeW91IHNheSBpcyB0cnVlIGZvciBmaXhlZCBtZW1vcnksIGJ1dCBub3QgZm9yCj4gPj4+ Pj4+Pj4+PlRUCj4gPj4+Pj4+Pj4+Pm1lbW9yeSB3aGVyZSBwYWdlcyBhcmUgcmVjbGFpbWVkIGJ5 IHRoZSBzeXN0ZW0gYWZ0ZXIgYnVmZmVyIGRlc3RydWN0aW9uLgo+ID4+Pj4+Pj4+Pj5UaGF0IG1l YW5zIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3YWl0IGZvciBpZGxlIHRvIGZyZWUgR1BVIHNwYWNl LCBidXQgd2UKPiA+Pj4+Pj4+Pj4+bmVlZCB0byB3YWl0IGJlZm9yZSBwYWdlcyBhcmUgaGFuZGVk IGJhY2sgdG8gdGhlIHN5c3RlbS4KPiA+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+PlN3YXBvdXQgbmVl ZHMgdG8gYWNjZXNzIHRoZSBjb250ZW50cyBvZiBldmljdGVkIGJ1ZmZlcnMsIGJ1dAo+ID4+Pj4+ Pj4+Pj5zeW5jaHJvbml6aW5nCj4gPj4+Pj4+Pj4+PmRvZXNuJ3QgbmVlZCB0byBoYXBwZW4gdW50 aWwganVzdCBiZWZvcmUgc3dhcG91dC4KPiA+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+Pk11bHRpLXJp bmcgLSBDUFUgc3VwcG9ydDogSWYgYW5vdGhlciByaW5nIC8gZW5naW5lIG9yIHRoZSBDUFUgaXMg YWJvdXQgdG8KPiA+Pj4+Pj4+Pj4+bW92ZSBpbiBidWZmZXIgY29udGVudHMgdG8gVlJBTSBvciBh IEdQVSBhcGVydHVyZSB0aGF0IHdhcyBwcmV2aW91c2x5Cj4gPj4+Pj4+Pj4+PmV2aWN0ZWQgYnkg YW5vdGhlciByaW5nLCBpdCBuZWVkcyB0byBzeW5jIHdpdGggdGhhdCBldmljdGlvbiwgYnV0IGRv ZXNuJ3QKPiA+Pj4+Pj4+Pj4+a25vdyB3aGF0IGJ1ZmZlciBvciBldmVuIHdoaWNoIGJ1ZmZlcnMg b2NjdXBpZWQgdGhlIHNwYWNlIHByZXZpb3VzbHkuCj4gPj4+Pj4+Pj4+PlRyaXZpYWxseSBvbmUg Y2FuIGF0dGFjaCBhIHN5bmMgb2JqZWN0IHRvIHRoZSBtZW1vcnkgdHlwZSBtYW5hZ2VyIHRoYXQK PiA+Pj4+Pj4+Pj4+cmVwcmVzZW50cyB0aGUgbGFzdCBldmljdGlvbiBmcm9tIHRoYXQgbWVtb3J5 IHR5cGUsIGFuZCAqYW55KiBlbmdpbmUgKENQVQo+ID4+Pj4+Pj4+Pj5vcgo+ID4+Pj4+Pj4+Pj5H UFUpIHRoYXQgbW92ZXMgYnVmZmVyIGNvbnRlbnRzIGluIG5lZWRzIHRvIG9yZGVyIHRoYXQgbW92 ZW1lbnQgd2l0aAo+ID4+Pj4+Pj4+Pj5yZXNwZWN0Cj4gPj4+Pj4+Pj4+PnRvIHRoYXQgZmVuY2Uu IEFzIHlvdSBzYXksIHdpdGggYSBzaW5nbGUgcmluZyBhbmQgbm8gQ1BVIGZhbGxiYWNrcywgdGhh dAo+ID4+Pj4+Pj4+Pj5vcmRlcmluZyBpcyBhIG5vLW9wLCBidXQgYW55IGNvbW1vbiAobm9uLWRy aXZlciBiYXNlZCkgaW1wbGVtZW50YXRpb24KPiA+Pj4+Pj4+Pj4+bmVlZHMKPiA+Pj4+Pj4+Pj4+ dG8gc3VwcG9ydCB0aGlzLgo+ID4+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4+QSBzaW5nbGUgZmVuY2Ug YXR0YWNoZWQgdG8gdGhlIG1lbW9yeSB0eXBlIG1hbmFnZXIgaXMgdGhlIHNpbXBsZXN0Cj4gPj4+ Pj4+Pj4+PnNvbHV0aW9uLAo+ID4+Pj4+Pj4+Pj5idXQgYSBzb2x1dGlvbiB3aXRoIGEgZmVuY2Ug Zm9yIGVhY2ggZnJlZSByZWdpb24gaW4gdGhlIGZyZWUgbGlzdCBpcyBhbHNvCj4gPj4+Pj4+Pj4+ PnBvc3NpYmxlLiBUaGVuIFRUTSBuZWVkcyBhIGRyaXZlciBjYWxsYmFjayB0byBiZSBhYmxlIG9y ZGVyIGZlbmNlcyB3IHIgdAo+ID4+Pj4+Pj4+Pj5lY2hvdGhlci4KPiA+Pj4+Pj4+Pj4+Cj4gPj4+ Pj4+Pj4+Pi9UaG9tYXMKPiA+Pj4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4+UmFkZW9uIGFscmVhZHkgaGFu ZGxlIG11bHRpLXJpbmcgYW5kIHR0bSBpbnRlcmFjdGlvbiB3aXRoIHdoYXQgd2UgY2FsbAo+ID4+ Pj4+Pj4+PnNlbWFwaG9yZS4gU2VtYXBob3JlIGFyZSBjcmVhdGVkIHRvIHN5bmNocm9uaXplIHdp dGggZmVuY2UgYWNjcm9zcwo+ID4+Pj4+Pj4+PmRpZmZlcmVudCByaW5nLiBJIHRoaW5rIHRoZSBl YXNpZXN0IHNvbHV0aW9uIGlzIHRvIGp1c3QgcmVtb3ZlIHRoZSBibwo+ID4+Pj4+Pj4+PndhaXQg aW4gdHRtIGFuZCBsZXQgZHJpdmVyIGhhbmRsZSB0aGlzLgo+ID4+Pj4+Pj4+VGhlIHdhaXQgY2Fu IGJlIHJlbW92ZWQsIGJ1dCBvbmx5IGNvbmRpdGlvbmVkIG9uIGEgZHJpdmVyIGZsYWcgdGhhdCBz YXlzIGl0Cj4gPj4+Pj4+Pj5zdXBwb3J0cyB1bnN5bmNocm9ub3VzIGJ1ZmZlciBtb3Zlcy4KPiA+ Pj4+Pj4+Pgo+ID4+Pj4+Pj4+VGhlIG11bHRpLXJpbmcgY2FzZSBJJ20gdGFsa2luZyBhYm91dCBp czoKPiA+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+UmluZyAxIGV2aWN0cyBidWZmZXIgQSwgZW1pdHMgZmVu Y2UgMAo+ID4+Pj4+Pj4+UmluZyAyIGV2aWN0cyBidWZmZXIgQiwgZW1pdHMgZmVuY2UgMQo+ID4+ Pj4+Pj4+Li5PdGhlciBldmljdGlvbiB0YWtlcyBwbGFjZSBieSB2YXJpb3VzIHJpbmdzLCBwZXJo YXBzIGluY2x1ZGluZyByaW5nIDEgYW5kCj4gPj4+Pj4+Pj5yaW5nIDIuCj4gPj4+Pj4+Pj5SaW5n IDMgbW92ZXMgYnVmZmVyIEMgaW50byB0aGUgc3BhY2Ugd2hpY2ggaGFwcGVucyBibyBiZSB0aGUg dW5pb24gb2YgdGhlCj4gPj4+Pj4+Pj5zcGFjZSBwcmV2b3VzbHkgb2NjdXBpZWQgYnVmZmVyIEEg YW5kIGJ1ZmZlciBCLgo+ID4+Pj4+Pj4+Cj4gPj4+Pj4+Pj5RdWVzdGlvbiBpczogd2hpY2ggZmVu Y2UgZG8geW91IHdhbnQgdG8gb3JkZXIgdGhpcyBtb3ZlIHdpdGg/Cj4gPj4+Pj4+Pj5UaGUgYW5z d2VyIGlzIHdoaWNoZXZlciBvZiBmZW5jZSAwIGFuZCAxIHNpZ25hbHMgbGFzdC4KPiA+Pj4+Pj4+ Pgo+ID4+Pj4+Pj4+SSB0aGluayBpdCdzIGEgcmVhc29uYWJsZSB0aGluZyBmb3IgVFRNIHRvIGtl ZXAgdHJhY2sgb2YgdGhpcywgYnV0IGluIG9yZGVyCj4gPj4+Pj4+Pj50byBkbyBzbyBpdCBuZWVk cyBhIGRyaXZlciBjYWxsYmFjayB0aGF0Cj4gPj4+Pj4+Pj5jYW4gb3JkZXIgdHdvIGZlbmNlcywg YW5kIGNhbiBvcmRlciBhIGpvYiBpbiB0aGUgY3VycmVudCByaW5nIHcgciB0IGEgZmVuY2UuCj4g Pj4+Pj4+Pj5JbiByYWRlb24ncyBjYXNlIHRoYXQgZHJpdmVyIGNhbGxiYWNrCj4gPj4+Pj4+Pj53 b3VsZCBwcm9iYWJseSBpbnNlcnQgYSBiYXJyaWVyIC8gc2VtYXBob3JlLiBJbiB0aGUgY2FzZSBv ZiBzaW1wbGVyIGhhcmR3YXJlCj4gPj4+Pj4+Pj5pdCB3b3VsZCB3YWl0IG9uIG9uZSBvZiB0aGUg ZmVuY2VzLgo+ID4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4vVGhvbWFzCj4gPj4+Pj4+Pj4KPiA+Pj4+Pj4+ SSBkb24ndCB0aGluayB3ZSBjYW4gb3JkZXIgZmVuY2UgZWFzaWx5IHdpdGggYSBjbGVhbiBhcGks IGkgd291bGQKPiA+Pj4+Pj4+cmF0aGVyIHNlZSB0dG0gcHJvdmlkZSBhIGxpc3Qgb2YgZmVuY2Ug dG8gZHJpdmVyIGFuZCB0ZWxsIHRvIHRoZQo+ID4+Pj4+Pj5kcml2ZXIgYmVmb3JlIG1vdmluZyB0 aGlzIG9iamVjdCBhbGwgdGhlIGZlbmNlIG9uIHRoaXMgbGlzdCBuZWVkIHRvIGJlCj4gPj4+Pj4+ PmNvbXBsZXRlZC4gSSB0aGluayBpdCdzIGFzIGVhc3kgYXMgYXNzb2NpYXRpbmcgZmVuY2Ugd2l0 aCBkcm1fbW0gKHdlbGwKPiA+Pj4+Pj4+bm91dmVhdSBhcyBpdHMgb3duIG1tIHN0dWZmKSBidXQg aWRlYSB3b3VsZCBiYXNpY2x5IGJlIHRoYXQgZmVuY2UgYXJlCj4gPj4+Pj4+PmJvdGggYXNzb2Np YXRlZCB3aXRoIGJvIGFuZCB3aXRoIG1tIG9iamVjdCBzbyB5b3Uga25vdyB3aGVuIGEgc2VnbWVu dAo+ID4+Pj4+Pj5vZiBtZW1vcnkgaXMgaWRsZS9hdmFpbGFibGUgZm9yIHVzZS4KPiA+Pj4+Pj4+ Cj4gPj4+Pj4+PkNoZWVycywKPiA+Pj4+Pj4+SmVyb21lCj4gPj4+Pj4+SG1tLiBBZ3JlZWQgdGhh dCB3b3VsZCBzYXZlIGEgbG90IG9mIGJhcnJpZXJzLgo+ID4+Pj4+Pgo+ID4+Pj4+PkV2ZW4gaWYg VFRNIHRyYWNrcyBmZW5jZXMgYnkgZnJlZSBtbSByZWdpb25zIG9yIGEgc2luZ2xlIGZlbmNlIGZv cgo+ID4+Pj4+PnRoZSB3aG9sZSBtZW1vcnkgdHlwZSwgaXQncyBhIHNpbXBsZSBmYWN0IHRoYXQg ZmVuY2VzIGZyb20gdGhlIHNhbWUKPiA+Pj4+Pj5yaW5nIGFyZSB0cml2aWFsbHkgb3JkZXJlZCwg d2hpY2ggbWVhbnMgc3VjaCBhIGxpc3Qgc2hvdWxkIGNvbnRhaW4gYXQKPiA+Pj4+Pj5tb3N0IGFz IG1hbnkgZmVuY2VzIGFzIHRoZXJlIGFyZSByaW5ncy4KPiA+Pj4+Plllcywgb25lIGZ1bmN0aW9u IGNhbGxiYWNrIGlzIG5lZWRlZCB0byBrbm93IHdoaWNoIGZlbmNlIGlzIG5lY2Vzc2FyeSwKPiA+ Pj4+PmFsc28gdHRtIG5lZWRzIHRvIGtub3cgdGhlIG51bWJlciBvZiByaW5ncyAobm90ZSB0aGF0 IGkgdGhpbmsgbmV3ZXIKPiA+Pj4+Pmh3IHdpbGwgaGF2ZSBzb21ldGhpbmdzIGxpa2UgMTAyNCBy aW5ncyBvciBldmVuIG1vcmUsIGV2ZW4gdG9kYXkgaHcKPiA+Pj4+Pm1pZ2h0IGhhdmUgYXMgbWFu eSBhcyBpIHRoaW5rIG52aWRpYSBjaGFubmVsIGlzIHByZXR0eSBtdWNoIHdoYXQgaQo+ID4+Pj4+ ZGVmaW5lIHRvIGJlIGEgcmluZykuCj4gPj4+Pj4KPiA+Pj4+PkJ1dCBpIHRoaW5rIG1vc3QgY2Fz ZSB3aWxsIGJlIGZldyBmZW5jZSBhY2Nyb3NzIGZldyByaW5ncy4gTGlrZSAxCj4gPj4+Pj5yaW5n IGlzIHRoZSBkbWEgcmluZyBhbmQgdGhlbiB5b3UgaGF2ZSBhIHJpbmcgZm9yIG9uZSBvZiB0aGUg R0wKPiA+Pj4+PmNvbnRleHQgdGhhdCB1c2luZyB0aGUgbWVtb3J5IGFuZCBhbm90aGVyIHJpbmcg Zm9yIHRoZSBuZXcgY29udGV4dAo+ID4+Pj4+dGhhdCB3YW50IHRvIHVzZSB0aGUgbWVtb3J5Lgo+ ID4+Pj4+Cj4gPj4+Pj4+U28sIHdoYXRldmVyIGFwcHJvYWNoIGlzIGNob3NlbiwgVFRNIG5lZWRz IHRvIGJlIGFibGUgdG8gZGV0ZXJtaW5lCj4gPj4+Pj4+dGhhdCB0cml2aWFsIG9yZGVyaW5nLCBh bmQgSSB0aGluayB0aGUgdXBjb21pbmcgY3Jvc3MtZGV2aWNlIGZlbmNpbmcKPiA+Pj4+Pj53b3Jr IHdpbGwgZmFjZSB0aGUgZXhhY3Qgc2FtZSBwcm9ibGVtLgo+ID4+Pj4+Pgo+ID4+Pj4+Pk15IHBy b3Bvc2VkIG9yZGVyaW5nIEFQSSB3b3VsZCBsb29rIHNvbWV0aGluZyBsaWtlCj4gPj4+Pj4+Cj4g Pj4+Pj4+c3RydWN0IGZlbmNlICpvcmRlcl9mZW5jZXMoc3RydWN0IGZlbmNlICpmZW5jZV9hLCBz dHJ1Y3QgZmVuY2UKPiA+Pj4+Pj4qZmVuY2VfYiwgYm9vbCB0cml2aWFsX29yZGVyLCBib29sIGlu dGVycnVwdGlibGUsIGJvb2wgbm9fd2FpdF9ncHUpCj4gPj4+Pj4+Cj4gPj4+Pj4+UmV0dXJucyB3 aGljaCBvZiB0aGUgZmVuY2VzIEBmZW5jZV9hIGFuZCBAZmVuY2VfYiB0aGF0IHdoZW4KPiA+Pj4+ Pj5zaWduYWxlZCwgZ3VhcmFudGVlcyB0aGF0IGFsc28gdGhlIG90aGVyCj4gPj4+Pj4+ZmVuY2Ug aGFzIHNpZ25hbGVkLiBJZiBAcXVpY2tfb3JkZXIgaXMgdHJ1ZSwgYW5kIHRoZSBkcml2ZXIgY2Fu bm90Cj4gPj4+Pj4+dHJpdmlhbGx5IG9yZGVyIHRoZSBmZW5jZXMsIGl0IG1heSByZXR1cm4gRVJS X1BUUigtRUFHQUlOKSwKPiA+Pj4+Pj5pZiBAaW50ZXJydXB0aWJsZSBpcyB0cnVlLCBhbnkgd2Fp dCBzaG91bGQgYmUgcGVyZm9ybWVkCj4gPj4+Pj4+aW50ZXJydXB0aWJseSBhbmQgaWYgbm9fd2Fp dF9ncHUgaXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIGlzIG5vdAo+ID4+Pj4+PmFsbG93ZWQgdG8gd2Fp dCBvbiBncHUgYnV0IHNob3VsZCBpc3N1ZSBFUlJfUFRSKC1FQlVTWSkgaWYgaXQgbmVlZHMKPiA+ Pj4+Pj50byBkbyBzbyB0byBvcmRlciBmZW5jZXMuCj4gPj4+Pj4+Cj4gPj4+Pj4+KEhhcmR3YXJl IHdpdGhvdXQgc2VtYXBob3JlcyBjYW4ndCBvcmRlciBmZW5jZXMgd2l0aG91dCB3YWl0aW5nIG9u IHRoZW0pLgo+ID4+Pj4+Pgo+ID4+Pj4+PlRoZSBsaXN0IGFwcHJvYWNoIHlvdSBzdWdnZXN0IHdv dWxkIHVzZSBAdHJpdmlhbF9vcmRlciA9IHRydWUsCj4gPj4+Pj4+U2luZ2xlIGZlbmNlIGFwcHJv YWNoIHdvdWxkIHVzZSBAdHJpdmlhbF9vcmRlciA9IGZhbHNlLgo+ID4+Pj4+Pgo+ID4+Pj4+PkFu ZCBhIGZpcnN0IHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBpbiBUVE0gd291bGQgcGVyaGFwcyB1c2Ug eW91ciBsaXN0Cj4gPj4+Pj4+YXBwcm9hY2ggd2l0aCBhIHNpbmdsZSBsaXN0IGZvciB0aGUgd2hv bGUgbWVtb3J5IHR5cGUuCj4gPj4+Pj4+Cj4gPj4+Pj4+L1Rob21hcwo+ID4+Pj4+SSB3b3VsZCBy YXRoZXIgYWRkIGEgY2FsbGJhY2sgbGlrZSA6Cj4gPj4+Pj4KPiA+Pj4+PnR0bV9yZWR1Y2VfZmVu Y2VzKHVuc2lnbmVkICpuZmVuY2VzLCBmZW5jZSAqKmZlbmNlYXJyYXkpCj4gPj4+PkkgZG9uJ3Qg YWdyZWUgaGVyZS4gSSB0aGluayB0aGUgZmVuY2Ugb3JkZXIgZnVuY3Rpb24gaXMgbW9yZQo+ID4+ Pj52ZXJzYXRpbGUgYW5kIGEgZ29vZCBhYnN0cmFjdGlvbiB0aGF0IGNhbiBiZQo+ID4+Pj5hcHBs aWVkIGluIGEgbnVtYmVyIG9mIGNhc2VzIHRvIHRoaXMgcHJvYmxlbS4gQW55d2F5IHdlIHNob3Vs ZCBzeW5jCj4gPj4+PnRoaXMgd2l0aCBNYWFydGVuIGFuZCBoaXMKPiA+Pj4+ZmVuY2Ugd29yay4g VGhlIHNhbWUgcHJvYmxlbSBhcHBsaWVzIHRvIGF0dGFjaGluZyBzaGFyZWQgZmVuY2VzIHRvIGEg Ym8uCj4gPj4+UmFkZW9uIGFscmVhZHkgaGFuZGxlIHRoZSBibyBjYXNlIG9uIG11bHRpLXJpbmcg YW5kIGkgdGhpbmsgaXQgc2hvdWxkCj4gPj4+YmUgbGVmdCB0byB0aGUgZHJpdmVyIHRvIGRvIHdo YXQgaXRzIG5lY2Vzc2FyeSB0aGVyZS4KPiA+Pj4KPiA+Pj5JIGRvbid0IHRoaW5rIGhlcmUgbW9y ZSB2ZXJzYXRpbGl0eSBpcyBiYWQsIGluIGZhY3QgaSBhbSBwcmV0dHkgc3VyZQo+ID4+PnRoYXQg bm8gaHcgY2FuIGdpdmUgZmVuY2Ugb3JkZXJpbmcgYW5kIGkgYWxzbyB0aGluayB0aGF0IGlmIGRy aXZlciBoYXZlCj4gPj4+dG8gdHJhY2sgbXVsdGktcmluZyBmZW5jZSBvcmRlcmluZyBpdCB3aWxs IGp1c3Qgd2FzdGUgcmVzb3VyY2UgZm9yIG5vCj4gPj4+Z29vZCByZWFzb25zLiBGb3IgdHJhY2tp bmcgdGhhdCBpbiByYWRlb24gaSB3aWxsIG5lZWQgdG8ga2VlcCBhIGxpc3QKPiA+Pj5vZiBzZW1h cGhvcmUgYW5kIGtub3dzIHdoaWNoIHNlbWFwaG9yZXMgaW5zdXJlIHN5bmNocm9uaXphdGlvbiBi dHcKPiA+Pj53aGljaCByaW5nIGFuZCBmb3IgZWFjaCB3aGljaCBmZW5jZSBhcmUgY29uY2VybmVk IGp1c3QgdGhpbmtpbmcgdG8gaXQKPiA+Pj5pdCB3b3VsZCBiZSBhIG1lc3N5IGdyYXBoIHdpdGgg dG9ucyBvZiBub2Rlcy4KPiA+Pj4KPiA+Pj5PZiBjb3Vyc2UgaGVyZSBpIGFtIHRoaW5raW5nIGlu IHRlcm0gb2YgbmV3ZXIgR1BVIHdpdGggdG9ucyBvZiByaW5ncywKPiA+Pj5HUFUgd2l0aCBvbmUg cmluZywgd2hpY2ggYXJlIGEgdmFuaXNoaW5nIGNhdGVnb3J5IGFzIG5ld2VyIG9wZW5jbAo+ID4+ PnJlcXVpcmUgbW9yZSByaW5nLCBhcmUgZWFzeSB0byBoYW5kbGUgYnV0IGkgcmVhbGx5IGRvbid0 IHRoaW5rIHdlCj4gPj4+c2hvdWxkIGRlc2lnbiBmb3IgdGhvc2UuCj4gPj5UaGUgYmlnZ2VzdCBw cm9ibGVtIEkgc2VlIHdpdGggdHRtX3JlZHVjZV9mZW5jZXMoKSBpcyB0aGF0IGl0IHNlZW1zCj4g Pj50byBoYXZlIGhpZ2ggY29tcGxleGl0eSwgc2luY2UgaXQKPiA+PmRvZXNuJ3Qga25vdyB3aGlj aCBmZW5jZSBpcyB0aGUgbmV3IG9uZS4gQW5kIGlmIGl0IGRpZCwgaXQgd291bGQKPiA+Pm9ubHkg YmUgYSBtdWx0aS1mZW5jZSB2ZXJzaW9uIG9mCj4gPj5vcmRlcl9mZW5jZXModHJpdmlhbD10cnVl KS4KPiA+SSBhbSBzdXJlIGFsbCBkcml2ZXIgd2l0aCBtdWx0aS1yaW5nIHdpbGwgc3RvcmUgcmlu ZyBpZCBpbiB0aGVyZSBmZW5jZQo+ID5zdHJ1Y3R1cmUsIHRoYXQncyBmcm9tIG15IHBvdiBhIHJl cXVpcmVtZW50LiBTbyB3aGVuIHlvdSBnZXQgYSBsaXN0IG9mCj4gPmZlbmNlIHlvdSBmaXJzdCBn byBvdmVyIGZlbmNlIG9uIHRoZSBzYW1lIHJpbmcgYW5kIHNvIGZhciBhbGwgZmVuY2UKPiA+aW1w bGVtZW50YXRpb24gdXNlIGluY3JlYXNpbmcgc2VxdWVuY2UgbnVtYmVyIGZvciBmZW5jZS4gU28g cmVkdWNpbmcKPiA+YmVjb21lcyBhcyBlYXN5IGFzIG9ubHkgbGVhdmluZyB0aGUgbW9zdCByZWNl bnQgZmVuY2UgZm9yIGVhY2ggb2YgdGhlCj4gPnJpbmcgd2l0aCBhbiBhY3RpdmUgZmVuY2UuIEF0 IHRoZSBzYW1lIHRpbWUgaXQgY291bGQgY2hlY2sgKGFzc3VtaW5nCj4gPml0J3MgYSBxdWljayBv cGVyYXRpb24pIGlmIGZlbmNlIGlzIGFscmVhZHkgc2lnbmFsZWQgb3Igbm90Lgo+ID4KPiA+Rm9y IHJhZGVvbiB0aGlzIGZ1bmN0aW9uIHdvdWxkIGJlIHZlcnkgc21hbGwsIGEgc2ltcGxlIGltYnJp Y2F0ZWQgbG9vcAo+ID53aXRoIGNvdXBsZSB0ZXN0IGluIHRoZSBsb29wLgo+IAo+IFdoYXQgeW91 IGRlc2NyaWJlIHNvdW5kcyBsaWtlIGFuIE8obsKyKSBjb21wbGV4aXR5IGFsZ29yaXRobSwgd2hl cmVhcwo+IGFuIGFsZ29yaXRobSBiYXNlZCBvbiBvcmRlcl9mZW5jZXMgaXMgTyhuKSBjb21wbGV4 aXR5Lgo+IAo+IFRoYW5rcywgVGhvbWFzCgpOb3QgZXhhY3RseSBPKG7CsikgYnV0IGNsb3NlIGlu IHdvcnN0IGNhc2UsIGkgaW5jbHVkZSBwc2V1ZG8gY29kZSBiZWxvdywKYnV0IGFzIGkgc2FpZCBp IGV4cGVjdCA6IG4gPCA4LiBNeSBwb2ludCB3YXMgdGhhdCBvcmRlcl9mZW5jZXMgd291bGQKbmV2 ZXIgcmV0dXJuIGEgc2luZ2xlIGZlbmNlIGlmIGZlbmNlIHdlcmUgc2NoZWR1bGVkIGludG8gZGlm ZmVyZW50CnJpbmdzIGllIGl0IHdvdWxkIHdhaXQgKGlmIGdwdSB3YWl0IGlzIGFsbG93KSBzbyBt YWtpbmcgdGhlIHdob2xlIGxldAptb3ZlIHN5bmNoIGludG8gdGhlIGRyaXZlciBwb2ludGxlc3Mu CgpBcyBpIHNhaWQgdGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gcXVlcnkgZmVuY2UgaW50ZXJkZXBl bmRlbmN5IGFuZCB0bwprbm93IHdoaWNoIG9uZSB3aWxsIGNvbXBsZXRlIGZpcnN0IGlmIGZlbmNl IGFyZSBub3QgZW1pdGVkIG9uIHNhbWUgcmluZy4KWW91J3JlIGFwcHJvYWNoIGFzayB0aGUgZHJp dmVyIHZlcnkgZWFybHkgYW5kIG1heSByZXF1aXJlIHRoZSBkcml2ZXIKdG8gZG8gd29yayAobGlr ZWx5IGJsb2NraW5nIG9uZSkgdG8gcmV0dXJuIGEgc2luZ2xlIGZlbmNlLiBXaGF0IGkgYW0Kc3Vn Z2VzdGluZyBpcyB0byBkZWxheSB0aGUgd2hvbGUgc3luY2hyb25pemUgcmluZyB0byB0aGUgbGFz dCBtaW51dGUKaW4gdGhlIGJvIG1vdmUgY2FsbGJhY2sgYXQgdGhhdCBwb2ludCBpIGFtIGhvcHBp bmcgdGhhdCBpbiBtb3N0IGNhc2UKbW9zdCBmZW5jZSB3aWxsIGhhdmUgc2lnbmFsIGFuZCBvbmx5 IGxpdHRsZSB3b3JrIHdpbGwgYmUgbmVjZXNzYXJ5LgoKU28geWVzIGkgc3RvcmUgbW9yZSBmZW5j ZSBhbmQgaXQgcmVxdWlyZSBtb3JlIG1lbW9yeSwgYnV0IGkgYW0gcHJldHR5CnN1cmUgZ2l2ZW4g dGhlIGFyZ3VtZW50IGkgZ2F2ZSB0aGF0IHdlIHdpbGwgaGF2ZSBhIHNtYWxsIG51bWJlciBvZgpm ZW5jZXMuCgpQc2V1ZG8gcmVkdWNlIGNvZGUgOgoKcmVkdWNlKHVuc2lnbmVkICpuZmVuY2VzLCBm ZW5jZSAqKmZlbmNlcykKewogIGZvciAoaSA9IDAsIGxhc3RudWxsID0gMCwgYyA9IDA7IGkgPCAq bmZlbmNlczsgaSsrKSB7CiAgICBpZiAoaXNzaWduYWxlZChmZW5jZXNbaV0pKSB7CiAgICAgIGZl bmNlX3VucmVmKGZlbmNlc1tpXSk7CiAgICAgIGZlbmNlc1tpXSA9IE5VTEw7CiAgICB9CiAgICBp ZiAoZmVuY2VzW2ldKSB7CiAgICAgIGMrKzsKICAgICAgZm9yIChqID0gaSArIDE7IGogPCAqbmZl bmNlczsgaisrKSB7CiAgICAgICAgaWYgKGZlbmNlc1tpXS5yaW5naWQgPT0gZmVuY2VzW2pdLnJp bmdpZCkgewogICAgICAgICAgaWYgKGlzb2xkZXIoZmVuY2VzW2ldLCBmZW5jZXNbal0pKSB7CiAg ICAgICAgICAgIGZlbmNlX3VucmVmKGZlbmNlc1tqXSk7CiAgICAgICAgICAgIGZlbmNlc1tqXSA9 IE5VTEw7CiAgICAgICAgICAgIGZlbmNlc1tsYXN0bnVsbCsrXSA9IGZlbmNlc1tpXTsKICAgICAg ICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZlbmNlX3VucmVmKGZlbmNlc1tpXSk7CiAgICAgICAg ICAgIGZlbmNlc1tpXSA9IE5VTEw7CiAgICAgICAgICAgIGZlbmNlc1tsYXN0bnVsbCsrXSA9IGZl bmNlc1tqXTsKICAgICAgICAgICAgZmVuY2VzW2pdID0gTlVMTDsKICAgICAgICAgIH0KICAgICAg ICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGxhc3RudWxsID0gaTsKICAgIH0KICB9CiAg Km5mZW5jZXMgPSBjOwp9CgpJIHByb2JhYmx5IGdvdCB0aGUgbGFzdG51bGwgc3R1ZmYgd3Jvbmcg OikKCkNoZWVycywKSmVyb21lCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJp LWRldmVsCg==