From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 08/13] drm/i915: Allow a context to define its set of engines Date: Mon, 11 Mar 2019 09:23:44 +0000 Message-ID: References: <20190308141244.16837-1-chris@chris-wilson.co.uk> <20190308141244.16837-9-chris@chris-wilson.co.uk> <155206365832.28502.10760120430992049361@skylake-alporthouse-com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5431C899DE for ; Mon, 11 Mar 2019 09:23:46 +0000 (UTC) In-Reply-To: <155206365832.28502.10760120430992049361@skylake-alporthouse-com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDA4LzAzLzIwMTkgMTY6NDcsIENocmlzIFdpbHNvbiB3cm90ZToKPiBRdW90aW5nIFR2cnRr byBVcnN1bGluICgyMDE5LTAzLTA4IDE2OjI3OjIyKQo+Pgo+PiBPbiAwOC8wMy8yMDE5IDE0OjEy LCBDaHJpcyBXaWxzb24gd3JvdGU6Cj4+PiBPdmVyIHRoZSBsYXN0IGZldyB5ZWFycywgd2UgaGF2 ZSBkZWJhdGVkIGhvdyB0byBleHRlbmQgdGhlIHVzZXIgQVBJIHRvCj4+PiBzdXBwb3J0IGFuIGlu Y3JlYXNlIGluIHRoZSBudW1iZXIgb2YgZW5naW5lcywgdGhhdCBtYXkgYmUgc3BhcnNlIGFuZAo+ Pj4gZXZlbiBiZSBoZXRlcm9nZW5lb3VzIHdpdGhpbiBhIGNsYXNzIChub3QgYWxsIHZpZGVvIGRl Y29kZXJzIGNyZWF0ZWQKPj4+IGVxdWFsKS4gV2Ugc2V0dGxlZCBvbiB1c2luZyAoY2xhc3MsIGlu c3RhbmNlKSB0dXBsZXMgdG8gaWRlbnRpZnkgYQo+Pj4gc3BlY2lmaWMgZW5naW5lLCB3aXRoIGFu IEFQSSBmb3IgdGhlIHVzZXIgdG8gY29uc3RydWN0IGEgbWFwIG9mIGVuZ2luZXMKPj4+IHRvIGNh cGFiaWxpdGllcy4gSW50byB0aGlzIHBpY3R1cmUsIHdlIHRoZW4gYWRkIGEgY2hhbGxlbmdlIG9m IHZpcnR1YWwKPj4+IGVuZ2luZXM7IG9uZSB1c2VyIGVuZ2luZSB0aGF0IG1hcHMgYmVoaW5kIHRo ZSBzY2VuZXMgdG8gYW55IG51bWJlciBvZgo+Pj4gcGh5c2ljYWwgZW5naW5lcy4gVG8ga2VlcCBp dCBnZW5lcmFsLCB3ZSB3YW50IHRoZSB1c2VyIHRvIGhhdmUgZnVsbAo+Pj4gY29udHJvbCBvdmVy IHRoYXQgbWFwcGluZy4gVG8gdGhhdCBlbmQsIHdlIGFsbG93IHRoZSB1c2VyIHRvIGNvbnN0cmFp biBhCj4+PiBjb250ZXh0IHRvIGRlZmluZSB0aGUgc2V0IG9mIGVuZ2luZXMgdGhhdCBpdCBjYW4g YWNjZXNzLCBvcmRlciBmdWxseQo+Pj4gY29udHJvbGxlZCBieSB0aGUgdXNlciB2aWEgKGNsYXNz LCBpbnN0YW5jZSkuIFdpdGggc3VjaCBwcmVjaXNlIGNvbnRyb2wKPj4+IGluIGNvbnRleHQgc2V0 dXAsIHdlIGNhbiBjb250aW51ZSB0byB1c2UgdGhlIGV4aXN0aW5nIGV4ZWNidWYgdUFCSSBvZgo+ Pj4gc3BlY2lmeWluZyBhIHNpbmdsZSBpbmRleDsgb25seSBub3cgaXQgZG9lc24ndCBhdXRvbWFn aWNhbGx5IG1hcCBvbnRvCj4+PiB0aGUgZW5naW5lcywgaXQgdXNlcyB0aGUgdXNlciBkZWZpbmVk IGVuZ2luZSBtYXAgZnJvbSB0aGUgY29udGV4dC4KPj4+Cj4+PiBUaGUgSTkxNV9FWEVDX0RFRkFV TFQgc2xvdCBpcyBsZWZ0IGVtcHR5LCBhbmQgaW52YWxpZCBmb3IgdXNlIGJ5Cj4+PiBleGVjYnVm LiBJdCdzIHVzZSB3aWxsIGJlIHJldmVhbGVkIGluIHRoZSBuZXh0IHBhdGNoLgo+Pj4KPj4+IHYy OiBGaXh1cCBmcmVlaW5nIG9mIGxvY2FsIG9uIHN1Y2Nlc3Mgb2YgZ2V0X2VuZ2luZXMoKQo+Pj4K Pj4+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVr Pgo+Pj4gQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4+PiAt LS0KPj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuYyAgICAgICB8 IDIwNCArKysrKysrKysrKysrKysrKy0KPj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2NvbnRleHRfdHlwZXMuaCB8ICAgNCArCj4+PiAgICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV9leGVjYnVmZmVyLmMgICAgfCAgMjIgKy0KPj4+ICAgIGluY2x1ZGUvdWFwaS9kcm0v aTkxNV9kcm0uaCAgICAgICAgICAgICAgICAgICB8ICA0MiArKystCj4+PiAgICA0IGZpbGVzIGNo YW5nZWQsIDI1OSBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKPj4+Cj4+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCj4+PiBpbmRleCAyY2ZjNjhiNjY5NDQuLjg2 ZDliZWE2ZjI3NSAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2NvbnRleHQuYwo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4 dC5jCj4+PiBAQCAtMTAxLDYgKzEwMSwyMSBAQCBzdGF0aWMgc3RydWN0IGk5MTVfZ2xvYmFsX2dl bV9jb250ZXh0IHsKPj4+ICAgICAgICBzdHJ1Y3Qga21lbV9jYWNoZSAqc2xhYl9sdXRzOwo+Pj4g ICAgfSBnbG9iYWw7Cj4+PiAgICAKPj4+ICtzdGF0aWMgc3RydWN0IGludGVsX2VuZ2luZV9jcyAq Cj4+PiArbG9va3VwX3VzZXJfZW5naW5lKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4+ PiArICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHUxNiBjbGFzcywgdTE2IGlu c3RhbmNlKQo+Pj4gKyNkZWZpbmUgTE9PS1VQX1VTRVJfSU5ERVggQklUKDApCj4+PiArewo+Pj4g KyAgICAgaWYgKGZsYWdzICYgTE9PS1VQX1VTRVJfSU5ERVgpIHsKPj4+ICsgICAgICAgICAgICAg aWYgKGluc3RhbmNlID49IGN0eC0+bmVuZ2luZSkKPj4+ICsgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gTlVMTDsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgcmV0dXJuIGN0eC0+ZW5naW5lc1tp bnN0YW5jZV07Cj4+PiArICAgICB9Cj4+PiArCj4+PiArICAgICByZXR1cm4gaW50ZWxfZW5naW5l X2xvb2t1cF91c2VyKGN0eC0+aTkxNSwgY2xhc3MsIGluc3RhbmNlKTsKPj4+ICt9Cj4+PiArCj4+ PiAgICBzdHJ1Y3QgaTkxNV9sdXRfaGFuZGxlICppOTE1X2x1dF9oYW5kbGVfYWxsb2Modm9pZCkK Pj4+ICAgIHsKPj4+ICAgICAgICByZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhnbG9iYWwuc2xhYl9s dXRzLCBHRlBfS0VSTkVMKTsKPj4+IEBAIC0yMzQsNiArMjQ5LDggQEAgc3RhdGljIHZvaWQgaTkx NV9nZW1fY29udGV4dF9mcmVlKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4+PiAgICAg ICAgcmVsZWFzZV9od19pZChjdHgpOwo+Pj4gICAgICAgIGk5MTVfcHBndHRfcHV0KGN0eC0+cHBn dHQpOwo+Pj4gICAgCj4+PiArICAgICBrZnJlZShjdHgtPmVuZ2luZXMpOwo+Pj4gKwo+Pj4gICAg ICAgIHJidHJlZV9wb3N0b3JkZXJfZm9yX2VhY2hfZW50cnlfc2FmZShpdCwgbiwgJmN0eC0+aHdf Y29udGV4dHMsIG5vZGUpCj4+PiAgICAgICAgICAgICAgICBpdC0+b3BzLT5kZXN0cm95KGl0KTsK Pj4+ICAgIAo+Pj4gQEAgLTEzMTEsOSArMTMyOCw5IEBAIHN0YXRpYyBpbnQgc2V0X3NzZXUoc3Ry dWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKPj4+ICAgICAgICBpZiAodXNlcl9zc2V1LmZsYWdz IHx8IHVzZXJfc3NldS5yc3ZkKQo+Pj4gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ PiAgICAKPj4+IC0gICAgIGVuZ2luZSA9IGludGVsX2VuZ2luZV9sb29rdXBfdXNlcihpOTE1LAo+ Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfc3NldS5lbmdp bmVfY2xhc3MsCj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNl cl9zc2V1LmVuZ2luZV9pbnN0YW5jZSk7Cj4+PiArICAgICBlbmdpbmUgPSBsb29rdXBfdXNlcl9l bmdpbmUoY3R4LCAwLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJf c3NldS5lbmdpbmVfY2xhc3MsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dXNlcl9zc2V1LmVuZ2luZV9pbnN0YW5jZSk7Cj4+PiAgICAgICAgaWYgKCFlbmdpbmUpCj4+PiAg ICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4+ICAgIAo+Pj4gQEAgLTEzMzEsOSArMTM0 OCwxNTQgQEAgc3RhdGljIGludCBzZXRfc3NldShzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4 LAo+Pj4gICAgCj4+PiAgICAgICAgYXJncy0+c2l6ZSA9IHNpemVvZih1c2VyX3NzZXUpOwo+Pj4g ICAgCj4+PiArICAgICByZXR1cm4gMDsKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0cnVjdCBzZXRfZW5n aW5lcyB7Cj4+PiArICAgICBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4Owo+Pj4gKyAgICAg c3RydWN0IGludGVsX2VuZ2luZV9jcyAqKmVuZ2luZXM7Cj4+PiArICAgICB1bnNpZ25lZCBpbnQg bmVuZ2luZTsKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBpOTE1X3VzZXJfZXh0ZW5z aW9uX2ZuIHNldF9lbmdpbmVzX19leHRlbnNpb25zW10gPSB7Cj4+PiArfTsKPj4+ICsKPj4+ICtz dGF0aWMgaW50Cj4+PiArc2V0X2VuZ2luZXMoc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwK Pj4+ICsgICAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gKmFy Z3MpCj4+PiArewo+Pj4gKyAgICAgc3RydWN0IGk5MTVfY29udGV4dF9wYXJhbV9lbmdpbmVzIF9f dXNlciAqdXNlcjsKPj4+ICsgICAgIHN0cnVjdCBzZXRfZW5naW5lcyBzZXQgPSB7IC5jdHggPSBj dHggfTsKPj4+ICsgICAgIHU2NCBzaXplLCBleHRlbnNpb25zOwo+Pj4gKyAgICAgdW5zaWduZWQg aW50IG47Cj4+PiArICAgICBpbnQgZXJyOwo+Pj4gKwo+Pj4gKyAgICAgdXNlciA9IHU2NF90b191 c2VyX3B0cihhcmdzLT52YWx1ZSk7Cj4+PiArICAgICBzaXplID0gYXJncy0+c2l6ZTsKPj4+ICsg ICAgIGlmICghc2l6ZSkKPj4+ICsgICAgICAgICAgICAgZ290byBvdXQ7Cj4+Cj4+IFRoaXMgcHJl dmVudHMgYSBoeXBvdGhldGljYWwgZXh0ZW5zaW9uIHdpdGggZW1wdHkgbWFwIGRhdGEuCj4gCj4g Tm8uLi4gVGhpcyBpcyByZXF1aXJlZCBmb3IgcmVzZXR0aW5nIGFuZCBJIHRoaW5rIHRoYXQncyBj b3ZlcmVkIGluIHdoYXQKPiBsaXR0bGUgZG9jcyB0aGVyZSBhcmUuIEl0J3MgdGhlIHNldC5uZW5n aW5lPT0wIHRlc3QgbGF0ZXIKPiB0aGF0IHlvdSBtZWFuIHRvIG9iamVjdCB0by4gQnV0IHdlIGNh bid0IGRvIHRoYXQgYXMgdGhhdCdzIGhvdyB3ZQo+IGRpZmZlcmVudGlhdGUgYmV0d2VlbiBtb2Rl cyBhdCB0aGUgbW9tZW50Lgo+IAo+IFdlIGNvdWxkIHVzZSBjdHgtPm5lbmdpbmUgPSAwIGFuZCBj dHgtPmVuZ2luZXMgPSBaRVJPX1BUUi4KCnNpemUgPT0gc2l6ZW9mKHN0cnVjdCBpOTE1X2NvbnRl eHRfcGFyYW1fZW5naW5lcykgY291bGQgbWVhbiByZXNldCAtIAptZWFuaW5nIG5vIG1hcCBhcnJh eSBwcm92aWRlZC4KCk1lYW5pbmcgb25lIGNvdWxkIHJlc2V0IHRoZSBtYXAgYW5kIHN0aWxsIHBh c3MgaW4gZXh0ZW5zaW9ucy4KCj4gCj4+PiArICAgICBCVUlMRF9CVUdfT04oIUlTX0FMSUdORUQo c2l6ZW9mKCp1c2VyKSwgc2l6ZW9mKCp1c2VyLT5jbGFzc19pbnN0YW5jZSkpKTsKPj4+ICsgICAg IGlmIChzaXplIDwgc2l6ZW9mKCp1c2VyKSB8fCBzaXplICUgc2l6ZW9mKCp1c2VyLT5jbGFzc19p bnN0YW5jZSkpCj4+Cj4+IElTX0FMSUdORUQgZm9yIHRoZSBzZWNvbmQgY29uZGl0aW9uIGZvciBj b25zaXN0ZW5jeSB3aXRoIHRoZSBCVUlMRF9CVUdfT04/Cj4+Cj4+PiArICAgICAgICAgICAgIHJl dHVybiAtRUlOVkFMOwo+Pj4gKwo+Pj4gKyAgICAgc2V0Lm5lbmdpbmUgPSAoc2l6ZSAtIHNpemVv ZigqdXNlcikpIC8gc2l6ZW9mKCp1c2VyLT5jbGFzc19pbnN0YW5jZSk7Cj4+PiArICAgICBpZiAo c2V0Lm5lbmdpbmUgPT0gMCB8fCBzZXQubmVuZ2luZSA+IEk5MTVfRVhFQ19SSU5HX01BU0sgKyAx KQo+Pgo+PiBJIHdvdWxkIHByZWZlciB3ZSBkcm9wIHRoZSBzaXplIHJlc3RyaWN0aW9uIHNpbmNl IGl0IGRvZXNuJ3QgYXBwbHkgdG8KPj4gdGhlIGVuZ2luZSBtYXAgcGVyIHNlLgo+IAo+IHU2NCBp cyBhIGxpbWl0IHRoYXQgd2lsbCBiZSBub24tdHJpdmlhbCB0byBsaWZ0LiBNYXJraW5nIHRoZSBs aW1pdHMgb2YKPiB0aGUga2VybmVsIGRvZXNuJ3QgcmVzdHJpY3QgaXQgYmVpbmcgbGlmdGVkIGxh dGVyLgoKTXkgdGhpbmtpbmcgaXMgdGhhdCB1NjQgbGltaXQgYXBwbGllcyB0byB0aGUgbG9hZCBi YWxhbmNpbmcgZXh0ZW5zaW9uLCAKYW5kIHRoZSA2NCBlbmdpbmUgbGltaXQgYXBwbGllcyB0byBl eGVjYnVmLiBFbmdpbmUgbWFwIGl0c2VsZiBpcyBub3QgCmxpbWl0ZWQuIEJ1dCBJIGd1ZXNzIGl0 IGlzIGEgdGhlb3JldGljYWwvcG9pbnRsZXNzIGRpc2N1c3Npb24gYXQgdGhpcyBwb2ludC4KCj4g Cj4+PiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+Pj4gKwo+Pj4gKyAgICAgc2V0LmVu Z2luZXMgPSBrbWFsbG9jX2FycmF5KHNldC5uZW5naW5lLAo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVvZigqc2V0LmVuZ2luZXMpLAo+Pj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpOwo+Pj4gKyAgICAgaWYgKCFzZXQuZW5naW5l cykKPj4+ICsgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4+PiArCj4+PiArICAgICBmb3Ig KG4gPSAwOyBuIDwgc2V0Lm5lbmdpbmU7IG4rKykgewo+Pj4gKyAgICAgICAgICAgICB1MTYgY2xh c3MsIGluc3Q7Cj4+PiArCj4+PiArICAgICAgICAgICAgIGlmIChnZXRfdXNlcihjbGFzcywgJnVz ZXItPmNsYXNzX2luc3RhbmNlW25dLmVuZ2luZV9jbGFzcykgfHwKPj4+ICsgICAgICAgICAgICAg ICAgIGdldF91c2VyKGluc3QsICZ1c2VyLT5jbGFzc19pbnN0YW5jZVtuXS5lbmdpbmVfaW5zdGFu Y2UpKSB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAga2ZyZWUoc2V0LmVuZ2luZXMpOwo+Pj4g KyAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwo+Pj4gKyAgICAgICAgICAgICB9 Cj4+PiArCj4+PiArICAgICAgICAgICAgIGlmIChjbGFzcyA9PSAodTE2KUk5MTVfRU5HSU5FX0NM QVNTX0lOVkFMSUQgJiYKPj4+ICsgICAgICAgICAgICAgICAgIGluc3QgPT0gKHUxNilJOTE1X0VO R0lORV9DTEFTU19JTlZBTElEX05PTkUpIHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBzZXQu ZW5naW5lc1tuXSA9IE5VTEw7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4+ PiArICAgICAgICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgICAgICAgc2V0LmVuZ2luZXNbbl0g PSBsb29rdXBfdXNlcl9lbmdpbmUoY3R4LCAwLCBjbGFzcywgaW5zdCk7Cj4+PiArICAgICAgICAg ICAgIGlmICghc2V0LmVuZ2luZXNbbl0pIHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICBrZnJl ZShzZXQuZW5naW5lcyk7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7 Cj4+PiArICAgICAgICAgICAgIH0KPj4+ICsgICAgIH0KPj4+ICsKPj4+ICsgICAgIGVyciA9IC1F RkFVTFQ7Cj4+PiArICAgICBpZiAoIWdldF91c2VyKGV4dGVuc2lvbnMsICZ1c2VyLT5leHRlbnNp b25zKSkKPj4+ICsgICAgICAgICAgICAgZXJyID0gaTkxNV91c2VyX2V4dGVuc2lvbnModTY0X3Rv X3VzZXJfcHRyKGV4dGVuc2lvbnMpLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzZXRfZW5naW5lc19fZXh0ZW5zaW9ucywKPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQVJSQVlfU0laRShzZXRfZW5naW5lc19fZXh0ZW5zaW9u cyksCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZXQpOwo+ Pj4gKyAgICAgaWYgKGVycikgewo+Pj4gKyAgICAgICAgICAgICBrZnJlZShzZXQuZW5naW5lcyk7 Cj4+PiArICAgICAgICAgICAgIHJldHVybiBlcnI7Cj4+PiArICAgICB9Cj4+PiArCj4+PiArb3V0 Ogo+Pj4gKyAgICAgbXV0ZXhfbG9jaygmY3R4LT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPj4+ ICsgICAgIGtmcmVlKGN0eC0+ZW5naW5lcyk7Cj4+PiArICAgICBjdHgtPmVuZ2luZXMgPSBzZXQu ZW5naW5lczsKPj4+ICsgICAgIGN0eC0+bmVuZ2luZSA9IHNldC5uZW5naW5lOwo+Pj4gKyAgICAg bXV0ZXhfdW5sb2NrKCZjdHgtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+Pj4gKwo+Pj4gICAg ICAgIHJldHVybiAwOwo+Pj4gICAgfQo+Pj4gICAgCj4+PiArc3RhdGljIGludAo+Pj4gK2dldF9l bmdpbmVzKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4+PiArICAgICAgICAgc3RydWN0 IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtICphcmdzKQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVj dCBpOTE1X2NvbnRleHRfcGFyYW1fZW5naW5lcyAqbG9jYWw7Cj4+PiArICAgICB1bnNpZ25lZCBp bnQgbiwgY291bnQsIHNpemU7Cj4+PiArICAgICBpbnQgZXJyID0gMDsKPj4+ICsKPj4+ICtyZXN0 YXJ0Ogo+Pj4gKyAgICAgY291bnQgPSBSRUFEX09OQ0UoY3R4LT5uZW5naW5lKTsKPj4+ICsgICAg IGlmIChjb3VudCA+IChJTlRfTUFYIC0gc2l6ZW9mKCpsb2NhbCkpIC8gc2l6ZW9mKCpsb2NhbC0+ Y2xhc3NfaW5zdGFuY2UpKQo+Pj4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsgLyogdW5y ZXByZXNlbnRhYmxlISAqLwo+Pgo+PiBQcm9iYWJseSBvdmVybHkgcGFyYW5vaWQgc2luY2Ugd2Ug Y2FuJ3QgZW5kIHVwIHdpdGggdGhpcyBzdGF0ZSBzZXQuCj4gCj4gQW5kIEkgdGhvdWdodCB5b3Ug d2FudGVkIG1hbnkgZW5naW5lcyEgUGFyYW5vaWEgYXJvdW5kIGttYWxsb2MvdXNlcgo+IG92ZWZs b3dzIGlzIGFsd2F5cyB1c2VmdWwsIGJlY2F1c2UgeW91IGtub3cgc29tZW9uZSB3aWxsIHNlbmQg YSBwYXRjaAo+IGxhdGVyIChhbmQgc21hdGNoIGRvZXNuJ3QgcmVhbGx5IGNhcmUgYXMgaXQgb25s eSBjaGVja3MgdGhlIGxpbWl0cyBvZgo+IHR5cGVzIGFuZCBsb2NhbCBjb25zdHJhaW50cykuCgpQ dXQgYSBjb21tZW50IG9uIHdoYXQgaXQgaXMgY2hlY2tpbmcgdGhlbi4gV2h5IElOVF9NQVggYW5k IG5vdCBVMzJfTUFYIGJ0dz8KClJlZ2FyZHMsCgpUdnJ0a28KX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4