From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael H. Nguyen" Subject: Re: [PATCH v6 1/5] drm/i915: Implement a framework for batch buffer pools Date: Wed, 10 Dec 2014 08:33:50 -0800 Message-ID: <548875EE.106@intel.com> References: <1418078030-17690-1-git-send-email-michael.h.nguyen@intel.com> <1418078030-17690-2-git-send-email-michael.h.nguyen@intel.com> <20141209131820.GV27182@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 342F17A01E for ; Wed, 10 Dec 2014 08:38:33 -0800 (PST) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Bloomfield, Jon" Cc: "intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org SGkgSm9uLAoKT24gMTIvMTAvMjAxNCAwMzowNiBBTSwgQmxvb21maWVsZCwgSm9uIHdyb3RlOgo+ PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+PiBGcm9tOiBJbnRlbC1nZnggW21haWx0bzpp bnRlbC1nZngtYm91bmNlc0BsaXN0cy5mcmVlZGVza3RvcC5vcmddIE9uIEJlaGFsZgo+PiBPZiBE YW5pZWwgVmV0dGVyCj4+IFNlbnQ6IFR1ZXNkYXksIERlY2VtYmVyIDA5LCAyMDE0IDE6MTggUE0K Pj4gVG86IE5ndXllbiwgTWljaGFlbCBICj4+IENjOiBCcmFkIFZvbGtpbjsgaW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwo+PiBTdWJqZWN0OiBSZTogW0ludGVsLWdmeF0gW1BBVENIIHY2 IDEvNV0gZHJtL2k5MTU6IEltcGxlbWVudCBhIGZyYW1ld29yayBmb3IKPj4gYmF0Y2ggYnVmZmVy IHBvb2xzCj4+Cj4+IE9uIE1vbiwgRGVjIDA4LCAyMDE0IGF0IDAyOjMzOjQ2UE0gLTA4MDAsIG1p Y2hhZWwuaC5uZ3V5ZW5AaW50ZWwuY29tCj4+IHdyb3RlOgo+Pj4gRnJvbTogQnJhZCBWb2xraW4g PGJyYWRsZXkuZC52b2xraW5AaW50ZWwuY29tPgo+Pj4KPj4+IFRoaXMgYWRkcyBhIHNtYWxsIG1v ZHVsZSBmb3IgbWFuYWdpbmcgYSBwb29sIG9mIGJhdGNoIGJ1ZmZlcnMuCj4+PiBUaGUgb25seSBj dXJyZW50IHVzZSBjYXNlIGlzIGZvciB0aGUgY29tbWFuZCBwYXJzZXIsIGFzIGRlc2NyaWJlZCBp bgo+Pj4gdGhlIGtlcm5lbGRvYyBpbiB0aGUgcGF0Y2guIFRoZSBjb2RlIGlzIHNpbXBsZSwgYnV0 IHNlcGFyYXRpbmcgaXQgb3V0Cj4+PiBtYWtlcyBpdCBlYXNpZXIgdG8gY2hhbmdlIHRoZSB1bmRl cmx5aW5nIGFsZ29yaXRobXMgYW5kIHRvIGV4dGVuZCB0bwo+Pj4gZnV0dXJlIHVzZSBjYXNlcyBz aG91bGQgdGhleSBhcmlzZS4KPj4+Cj4+PiBUaGUgaW50ZXJmYWNlIGlzIHNpbXBsZTogaW5pdCB0 byBjcmVhdGUgYW4gZW1wdHkgcG9vbCwgZmluaSB0byBjbGVhbgo+Pj4gaXQgdXAsIGdldCB0byBv YnRhaW4gYSBuZXcgYnVmZmVyLiBOb3RlIHRoYXQgYWxsIGJ1ZmZlcnMgYXJlIGV4cGVjdGVkCj4+ PiB0byBiZSBpbmFjdGl2ZSBiZWZvcmUgY2xlYW5pbmcgdXAgdGhlIHBvb2wuCj4+Pgo+Pj4gTG9j a2luZyBpcyBjdXJyZW50bHkgYmFzZWQgb24gdGhlIGNhbGxlciBob2xkaW5nIHRoZSBzdHJ1Y3Rf bXV0ZXguCj4+PiBXZSBhbHJlYWR5IGRvIHRoYXQgaW4gdGhlIHBsYWNlcyB3aGVyZSB3ZSB3aWxs IHVzZSB0aGUgYmF0Y2ggcG9vbCBmb3IKPj4+IHRoZSBjb21tYW5kIHBhcnNlci4KPj4+Cj4+PiB2 MjoKPj4+IC0gcy9CVUdfT04vV0FSTl9PTi8gZm9yIGxvY2tpbmcgYXNzZXJ0aW9ucwo+Pj4gLSBS ZW1vdmUgdGhlIGNhcCBvbiBwb29sIHNpemUKPj4+IC0gU3dpdGNoIGZyb20gYWxsb2MvZnJlZSB0 byBpbml0L2ZpbmkKPj4+Cj4+PiB2MzoKPj4+IC0gSWRpb21hdGljIGxvb3Bpbmcgc3RydWN0dXJl IGluIF9maW5pCj4+PiAtIENvcnJlY3QgaGFuZGxpbmcgb2YgcHVyZ2VkIG9iamVjdHMKPj4+IC0g RG9uJ3QgcmV0dXJuIGEgYnVmZmVyIHRoYXQncyB0b28gbXVjaCBsYXJnZXIgdGhhbiBuZWVkZWQK Pj4+Cj4+PiB2NDoKPj4+IC0gUmViYXNlZCB0byBsYXRlc3QgLW5pZ2h0bHkKPj4+Cj4+PiB2NToK Pj4+IC0gUmVtb3ZlIF9wdXQoKSBmdW5jdGlvbiBhbmQgY2xlYW4gdXAgY29tbWVudHMgdG8gbWF0 Y2gKPj4+Cj4+PiB2NjoKPj4+IC0gTW92ZSBwdXJnZWQgY2hlY2sgaW5zaWRlIHRoZSBsb29wIChk YW52ZXQsIGZyb20gdjQgMS83IGZlZWRiYWNrKQo+Pj4KPj4+IHY3Ogo+Pj4gLSBVc2Ugc2luZ2xl IGxpc3QgaW5zdGVhZCBvZiB0d28uIChDaHJpcyBXKQo+Pj4gLSBzL2FjdGl2ZV9saXN0L2NhY2hl X2xpc3QKPj4+IC0gU3F1YXNoZWQgaW4gZGVidWcgcGF0Y2hlcyAoQ2hyaXMgVykKPj4+ICAgIGRy bS9pOTE1OiBBZGQgYSBiYXRjaCBwb29sIGRlYnVnZnMgZmlsZQo+Pj4KPj4+ICAgIEl0IHByb3Zp ZGVzIHNvbWUgdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBidWZmZXJzIGluCj4+PiAgICB0 aGUgZ2xvYmFsIGNvbW1hbmQgcGFyc2VyIGJhdGNoIHBvb2wuCj4+Pgo+Pj4gICAgdjI6IHJlYmFz ZSBvbiBnbG9iYWwgcG9vbCBpbnN0ZWFkIG9mIHBlci1yaW5nIHBvb2xzCj4+PiAgICB2MzogcmVi YXNlCj4+Pgo+Pj4gICAgZHJtL2k5MTU6IEFkZCBiYXRjaCBwb29sIGRldGFpbHMgdG8gaTkxNV9n ZW1fb2JqZWN0cyBkZWJ1Z2ZzCj4+Pgo+Pj4gICAgVG8gYmV0dGVyIGFjY291bnQgZm9yIHRoZSBw b3RlbnRpYWxseSBsYXJnZSBtZW1vcnkgY29uc3VtcHRpb24KPj4+ICAgIG9mIHRoZSBiYXRjaCBw b29sLgo+Pj4KPj4+IElzc3VlOiBWSVotNDcxOQo+Pj4gU2lnbmVkLW9mZi1ieTogQnJhZCBWb2xr aW4gPGJyYWRsZXkuZC52b2xraW5AaW50ZWwuY29tPgo+Pj4gLS0tCj4+PiAgIERvY3VtZW50YXRp b24vRG9jQm9vay9kcm0udG1wbCAgICAgICAgICAgICB8ICAgNSArKwo+Pj4gICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgIDEgKwo+Pj4gICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyAgICAgICAgfCAgNzEgKysrKysrKysrKysrKystLQo+ Pj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgICAgICAgfCAgMjEgKysr KysKPj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgICAgIHwgICAx ICsKPj4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fYmF0Y2hfcG9vbC5jIHwgMTMy Cj4+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+Pj4gICA2IGZpbGVzIGNoYW5nZWQs IDIyMiBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKSAgY3JlYXRlIG1vZGUKPj4+IDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9iYXRjaF9wb29sLmMKPj4+Cj4+PiBkaWZm IC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RybS50bXBsCj4+PiBiL0RvY3VtZW50YXRp b24vRG9jQm9vay9kcm0udG1wbCBpbmRleCA4NTI4N2NiLi4wMjI5MjNhIDEwMDY0NAo+Pj4gLS0t IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RybS50bXBsCj4+PiArKysgYi9Eb2N1bWVudGF0aW9u L0RvY0Jvb2svZHJtLnRtcGwKPj4+IEBAIC00MDI5LDYgKzQwMjksMTEgQEAgaW50IG51bV9pb2N0 bHM7PC9zeW5vcHNpcz4KPj4+ICFJZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRfcGFyc2Vy LmMKPj4+ICAgICAgICAgPC9zZWN0Mj4KPj4+ICAgICAgICAgPHNlY3QyPgo+Pj4gKyAgICAgICAg PHRpdGxlPkJhdGNoYnVmZmVyIFBvb2xzPC90aXRsZT4KPj4+ICshUGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2JhdGNoX3Bvb2wuYyBiYXRjaCBwb29sCj4+PiArIUlkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbV9iYXRjaF9wb29sLmMKPj4+ICsgICAgICA8L3NlY3QyPgo+Pj4gKyAg ICAgIDxzZWN0Mj4KPj4+ICAgICAgICAgICA8dGl0bGU+TG9naWNhbCBSaW5ncywgTG9naWNhbCBS aW5nIENvbnRleHRzIGFuZAo+Pj4gRXhlY2xpc3RzPC90aXRsZT4gICFQZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfbHJjLmMgTG9naWNhbCBSaW5ncywKPj4+IExvZ2ljYWwgUmluZyBDb250ZXh0 cyBhbmQgRXhlY2xpc3RzCj4+PiAhSWRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCj4+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPj4+IGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgaW5kZXggZTQwODNlNC4uYzhkYmIzN2QgMTAwNjQ0Cj4+ PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+Pj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUKPj4+IEBAIC0xOSw2ICsxOSw3IEBAIGk5MTUtJChDT05GSUdf REVCVUdfRlMpICs9IGk5MTVfZGVidWdmcy5vCj4+Pgo+Pj4gICAjIEdFTSBjb2RlCj4+PiAgIGk5 MTUteSArPSBpOTE1X2NtZF9wYXJzZXIubyBcCj4+PiArCSAgaTkxNV9nZW1fYmF0Y2hfcG9vbC5v IFwKPj4+ICAgCSAgaTkxNV9nZW1fY29udGV4dC5vIFwKPj4+ICAgCSAgaTkxNV9nZW1fcmVuZGVy X3N0YXRlLm8gXAo+Pj4gICAJICBpOTE1X2dlbV9kZWJ1Zy5vIFwKPj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+Pj4gYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2RlYnVnZnMuYwo+Pj4gaW5kZXggZDBlNDQ1ZS4uM2MzYmY5OCAxMDA2NDQKPj4+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4+PiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+Pj4gQEAgLTM1OSw2ICszNTksMzMgQEAg c3RhdGljIGludCBwZXJfZmlsZV9zdGF0cyhpbnQgaWQsIHZvaWQgKnB0ciwgdm9pZAo+PiAqZGF0 YSkKPj4+ICAgCXJldHVybiAwOwo+Pj4gICB9Cj4+Pgo+Pj4gKyNkZWZpbmUgcHJpbnRfZmlsZV9z dGF0cyhtLCBuYW1lLCBzdGF0cykgXAo+Pj4gKwlzZXFfcHJpbnRmKG0sICIlczogJXUgb2JqZWN0 cywgJXp1IGJ5dGVzICglenUgYWN0aXZlLCAlenUgaW5hY3RpdmUsCj4+ICV6dSBnbG9iYWwsICV6 dSBzaGFyZWQsICV6dSB1bmJvdW5kKVxuIiwgXAo+Pj4gKwkJICAgbmFtZSwgXAo+Pj4gKwkJICAg c3RhdHMuY291bnQsIFwKPj4+ICsJCSAgIHN0YXRzLnRvdGFsLCBcCj4+PiArCQkgICBzdGF0cy5h Y3RpdmUsIFwKPj4+ICsJCSAgIHN0YXRzLmluYWN0aXZlLCBcCj4+PiArCQkgICBzdGF0cy5nbG9i YWwsIFwKPj4+ICsJCSAgIHN0YXRzLnNoYXJlZCwgXAo+Pj4gKwkJICAgc3RhdHMudW5ib3VuZCkK Pgo+ICJwcmludF9maWxlX3N0YXRzIiBtaWdodCBiZSBiZXR0ZXIgbmFtZWQgInByaW50X29ial9z dGF0cyIgb3Igc2ltaWxhci4gQXMgaXQgc3RhbmRzCj4gdGhlcmUgaXMgbm90aGluZyBpbiBpdHMg bmFtZSB0byBzdWdnZXN0IGl0cyBwdXJwb3NlIGlzIHRvIGRlc2NyaWJlIGFuIG9iamVjdC4KSSBn dWVzcyB0aGUgZm5jIG5hbWUgJ3ByaW50X2ZpbGVfc3RhdHMnIHdhcyBjaG9zZW4gYi9jIGl0IHRh a2VzIGEgCidzdGF0cycgcGFyYW1ldGVyIG9mIHR5cGUgJ3N0cnVjdCBmaWxlX3N0YXRzJyBhbmQg cHJpbnRzIHRoZSBtZW1iZXJzLiAKU2VlbXMgZmFpciB0byBsZWF2ZSBpdCBJIHRoaW5rIGFzIGl0 cyBnZW5lcmljLgo+Cj4KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBwcmludF9iYXRjaF9wb29sX3N0 YXRzKHN0cnVjdCBzZXFfZmlsZSAqbSwKPj4+ICsJCQkJICAgc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KSB7Cj4+PiArCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4+ PiArCXN0cnVjdCBmaWxlX3N0YXRzIHN0YXRzOwo+Pj4gKwo+Pj4gKwltZW1zZXQoJnN0YXRzLCAw LCBzaXplb2Yoc3RhdHMpKTsKPj4+ICsKPj4+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosCj4+ PiArCQkJICAgICZkZXZfcHJpdi0+bW0uYmF0Y2hfcG9vbC5jYWNoZV9saXN0LAo+Pj4gKwkJCSAg ICBiYXRjaF9wb29sX2xpc3QpCj4+PiArCQlwZXJfZmlsZV9zdGF0cygwLCBvYmosICZzdGF0cyk7 Cj4KPiBTaG91bGRuJ3Qgd2UgYmUgaG9sZGluZyB0aGUgYmF0Y2hfcG9vbCBsb2NrIGhlcmUgPwpU aGluayB3ZSdyZSBva2F5IGhlcmUuIFRoZSBjYWxsZXJzIG9mIHByaW50X2JhdGNoX3Bvb2xfc3Rh dHMoKSBob2xkIApkZXYtPnN0cnVjdF9tdXRleC4KClRoYW5rcywKLU1pa2UKPgo+Cj4+PiArCj4+ PiArCXByaW50X2ZpbGVfc3RhdHMobSwgImJhdGNoIHBvb2wiLCBzdGF0cyk7IH0KPj4+ICsKPj4+ ICAgI2RlZmluZSBjb3VudF92bWFzKGxpc3QsIG1lbWJlcikgZG8geyBcCj4+PiAgIAlsaXN0X2Zv cl9lYWNoX2VudHJ5KHZtYSwgbGlzdCwgbWVtYmVyKSB7IFwKPj4+ICAgCQlzaXplICs9IGk5MTVf Z2VtX29ial9nZ3R0X3NpemUodm1hLT5vYmopOyBcIEBAIC00NDEsNgo+PiArNDY4LDkgQEAKPj4+ IHN0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lk KiBkYXRhKQo+Pj4gICAJCSAgIGRldl9wcml2LT5ndHQubWFwcGFibGVfZW5kIC0gZGV2X3ByaXYt Pmd0dC5iYXNlLnN0YXJ0KTsKPj4+Cj4+PiAgIAlzZXFfcHV0YyhtLCAnXG4nKTsKPj4+ICsJcHJp bnRfYmF0Y2hfcG9vbF9zdGF0cyhtLCBkZXZfcHJpdik7Cj4+PiArCj4+PiArCXNlcV9wdXRjKG0s ICdcbicpOwo+Pj4gICAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGZpbGUsICZkZXYtPmZp bGVsaXN0LCBsaGVhZCkgewo+Pj4gICAJCXN0cnVjdCBmaWxlX3N0YXRzIHN0YXRzOwo+Pj4gICAJ CXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKPj4+IEBAIC00NTgsMTUgKzQ4OCw3IEBAIHN0YXRp YyBpbnQgaTkxNV9nZW1fb2JqZWN0X2luZm8oc3RydWN0IHNlcV9maWxlICptLAo+PiB2b2lkKiBk YXRhKQo+Pj4gICAJCSAqLwo+Pj4gICAJCXJjdV9yZWFkX2xvY2soKTsKPj4+ICAgCQl0YXNrID0g cGlkX3Rhc2soZmlsZS0+cGlkLCBQSURUWVBFX1BJRCk7Cj4+PiAtCQlzZXFfcHJpbnRmKG0sICIl czogJXUgb2JqZWN0cywgJXp1IGJ5dGVzICglenUgYWN0aXZlLCAlenUKPj4gaW5hY3RpdmUsICV6 dSBnbG9iYWwsICV6dSBzaGFyZWQsICV6dSB1bmJvdW5kKVxuIiwKPj4+IC0JCQkgICB0YXNrID8g dGFzay0+Y29tbSA6ICI8dW5rbm93bj4iLAo+Pj4gLQkJCSAgIHN0YXRzLmNvdW50LAo+Pj4gLQkJ CSAgIHN0YXRzLnRvdGFsLAo+Pj4gLQkJCSAgIHN0YXRzLmFjdGl2ZSwKPj4+IC0JCQkgICBzdGF0 cy5pbmFjdGl2ZSwKPj4+IC0JCQkgICBzdGF0cy5nbG9iYWwsCj4+PiAtCQkJICAgc3RhdHMuc2hh cmVkLAo+Pj4gLQkJCSAgIHN0YXRzLnVuYm91bmQpOwo+Pj4gKwkJcHJpbnRfZmlsZV9zdGF0cyht LCB0YXNrID8gdGFzay0+Y29tbSA6ICI8dW5rbm93bj4iLCBzdGF0cyk7Cj4+PiAgIAkJcmN1X3Jl YWRfdW5sb2NrKCk7Cj4+PiAgIAl9Cj4+Pgo+Pj4gQEAgLTU4Myw2ICs2MDUsMzYgQEAgc3RhdGlj IGludCBpOTE1X2dlbV9wYWdlZmxpcF9pbmZvKHN0cnVjdCBzZXFfZmlsZQo+PiAqbSwgdm9pZCAq ZGF0YSkKPj4+ICAgCXJldHVybiAwOwo+Pj4gICB9Cj4+Pgo+Pj4gK3N0YXRpYyBpbnQgaTkxNV9n ZW1fYmF0Y2hfcG9vbF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkgewo+Pj4g KwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IG0tPnByaXZhdGU7Cj4+PiArCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2Owo+Pj4gKwlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+Pj4gKwlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqOwo+Pj4gKwlpbnQgY291bnQgPSAwOwo+Pj4gKwlpbnQgcmV0Owo+ Pj4gKwo+Pj4gKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+c3RydWN0X211 dGV4KTsKPj4+ICsJaWYgKHJldCkKPj4+ICsJCXJldHVybiByZXQ7Cj4+PiArCj4+PiArCXNlcV9w dXRzKG0sICJjYWNoZTpcbiIpOwo+Pj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwKPj4+ICsJ CQkgICAgJmRldl9wcml2LT5tbS5iYXRjaF9wb29sLmNhY2hlX2xpc3QsCj4+PiArCQkJICAgIGJh dGNoX3Bvb2xfbGlzdCkgewo+Pj4gKwkJc2VxX3B1dHMobSwgIiAgICIpOwo+Pj4gKwkJZGVzY3Jp YmVfb2JqKG0sIG9iaik7Cj4+PiArCQlzZXFfcHV0YyhtLCAnXG4nKTsKPj4+ICsJCWNvdW50Kys7 Cj4+PiArCX0KPj4+ICsKPj4+ICsJc2VxX3ByaW50ZihtLCAidG90YWw6ICVkXG4iLCBjb3VudCk7 Cj4+PiArCj4+PiArCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+Pj4gKwo+Pj4g KwlyZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiAgIHN0YXRpYyBpbnQgaTkxNV9nZW1fcmVxdWVz dF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkgIHsKPj4+ICAgCXN0cnVjdCBk cm1faW5mb19ub2RlICpub2RlID0gbS0+cHJpdmF0ZTsgQEAgLTQzMjQsNiArNDM3Niw3IEBACj4+ PiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pbmZvX2xpc3QgaTkxNV9kZWJ1Z2ZzX2xpc3RbXSA9 IHsKPj4+ICAgCXsiaTkxNV9nZW1faHdzX2JsdCIsIGk5MTVfaHdzX2luZm8sIDAsICh2b2lkICop QkNTfSwKPj4+ICAgCXsiaTkxNV9nZW1faHdzX2JzZCIsIGk5MTVfaHdzX2luZm8sIDAsICh2b2lk ICopVkNTfSwKPj4+ICAgCXsiaTkxNV9nZW1faHdzX3ZlYm94IiwgaTkxNV9od3NfaW5mbywgMCwg KHZvaWQgKilWRUNTfSwKPj4+ICsJeyJpOTE1X2dlbV9iYXRjaF9wb29sIiwgaTkxNV9nZW1fYmF0 Y2hfcG9vbF9pbmZvLCAwfSwKPj4+ICAgCXsiaTkxNV9mcmVxdWVuY3lfaW5mbyIsIGk5MTVfZnJl cXVlbmN5X2luZm8sIDB9LAo+Pj4gICAJeyJpOTE1X2RycGNfaW5mbyIsIGk5MTVfZHJwY19pbmZv LCAwfSwKPj4+ICAgCXsiaTkxNV9lbW9uX3N0YXR1cyIsIGk5MTVfZW1vbl9zdGF0dXMsIDB9LCBk aWZmIC0tZ2l0Cj4+PiBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4+PiBpbmRleCAxMWU4NWNiLi5mM2UyN2U5IDEwMDY0 NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+Pj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+Pj4gQEAgLTExMjksNiArMTEyOSwxMSBAQCBz dHJ1Y3QgaW50ZWxfbDNfcGFyaXR5IHsKPj4+ICAgCWludCB3aGljaF9zbGljZTsKPj4+ICAgfTsK Pj4+Cj4+PiArc3RydWN0IGk5MTVfZ2VtX2JhdGNoX3Bvb2wgewo+Pj4gKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2Owo+Pj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGNhY2hlX2xpc3Q7Cj4+PiArfTsKPj4+ ICsKPj4+ICAgc3RydWN0IGk5MTVfZ2VtX21tIHsKPj4+ICAgCS8qKiBNZW1vcnkgYWxsb2NhdG9y IGZvciBHVFQgc3RvbGVuIG1lbW9yeSAqLwo+Pj4gICAJc3RydWN0IGRybV9tbSBzdG9sZW47Cj4+ PiBAQCAtMTE0Miw2ICsxMTQ3LDEzIEBAIHN0cnVjdCBpOTE1X2dlbV9tbSB7Cj4+PiAgIAkgKi8K Pj4+ICAgCXN0cnVjdCBsaXN0X2hlYWQgdW5ib3VuZF9saXN0Owo+Pj4KPj4+ICsJLyoKPj4+ICsJ ICogQSBwb29sIG9mIG9iamVjdHMgdG8gdXNlIGFzIHNoYWRvdyBjb3BpZXMgb2YgY2xpZW50IGJh dGNoIGJ1ZmZlcnMKPj4+ICsJICogd2hlbiB0aGUgY29tbWFuZCBwYXJzZXIgaXMgZW5hYmxlZC4g UHJldmVudHMgdGhlIGNsaWVudCBmcm9tCj4+PiArCSAqIG1vZGlmeWluZyB0aGUgYmF0Y2ggY29u dGVudHMgYWZ0ZXIgc29mdHdhcmUgcGFyc2luZy4KPj4+ICsJICovCj4+PiArCXN0cnVjdCBpOTE1 X2dlbV9iYXRjaF9wb29sIGJhdGNoX3Bvb2w7Cj4+PiArCj4+PiAgIAkvKiogVXNhYmxlIHBvcnRp b24gb2YgdGhlIEdUVCBmb3IgR0VNICovCj4+PiAgIAl1bnNpZ25lZCBsb25nIHN0b2xlbl9iYXNl OyAvKiBsaW1pdGVkIHRvIGxvdyBtZW1vcnkgKDMyLWJpdCkgKi8KPj4+Cj4+PiBAQCAtMTg3Miw2 ICsxODg0LDggQEAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qgewo+Pj4gICAJLyoqIFVzZWQg aW4gZXhlY2J1ZiB0byB0ZW1wb3JhcmlseSBob2xkIGEgcmVmICovCj4+PiAgIAlzdHJ1Y3QgbGlz dF9oZWFkIG9ial9leGVjX2xpbms7Cj4+Pgo+Pj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGJhdGNoX3Bv b2xfbGlzdDsKPj4+ICsKPj4+ICAgCS8qKgo+Pj4gICAJICogVGhpcyBpcyBzZXQgaWYgdGhlIG9i amVjdCBpcyBvbiB0aGUgYWN0aXZlIGxpc3RzIChoYXMgcGVuZGluZwo+Pj4gICAJICogcmVuZGVy aW5nIGFuZCBzbyBhIG5vbi16ZXJvIHNlcW5vKSwgYW5kIGlzIG5vdCBzZXQgaWYgaXQgaSBzIG9u Cj4+PiBAQCAtMjg3Niw2ICsyODkwLDEzIEBAIHZvaWQgaTkxNV9kZXN0cm95X2Vycm9yX3N0YXRl KHN0cnVjdAo+PiBkcm1fZGV2aWNlCj4+PiAqZGV2KTsgIHZvaWQgaTkxNV9nZXRfZXh0cmFfaW5z dGRvbmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdWludDMyX3QKPj4+ICppbnN0ZG9uZSk7ICBj b25zdCBjaGFyICppOTE1X2NhY2hlX2xldmVsX3N0cihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZQo+ Pj4gKmk5MTUsIGludCB0eXBlKTsKPj4+Cj4+PiArLyogaTkxNV9nZW1fYmF0Y2hfcG9vbC5jICov Cj4+PiArdm9pZCBpOTE1X2dlbV9iYXRjaF9wb29sX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKPj4+ICsJCQkgICAgICBzdHJ1Y3QgaTkxNV9nZW1fYmF0Y2hfcG9vbCAqcG9vbCk7IHZvaWQK Pj4+ICtpOTE1X2dlbV9iYXRjaF9wb29sX2Zpbmkoc3RydWN0IGk5MTVfZ2VtX2JhdGNoX3Bvb2wg KnBvb2wpOyBzdHJ1Y3QKPj4+ICtkcm1faTkxNV9nZW1fb2JqZWN0KiBpOTE1X2dlbV9iYXRjaF9w b29sX2dldChzdHJ1Y3QKPj4+ICtpOTE1X2dlbV9iYXRjaF9wb29sICpwb29sLCBzaXplX3Qgc2l6 ZSk7Cj4+PiArCj4+PiAgIC8qIGk5MTVfY21kX3BhcnNlci5jICovCj4+PiAgIGludCBpOTE1X2Nt ZF9wYXJzZXJfZ2V0X3ZlcnNpb24odm9pZCk7Cj4+PiAgIGludCBpOTE1X2NtZF9wYXJzZXJfaW5p dF9yaW5nKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpOyBkaWZmCj4+PiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uYyBpbmRleCBkZTI0MWViLi4yZjE0YWUxIDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uYwo+Pj4gQEAgLTQzODQsNiArNDM4NCw3IEBAIHZvaWQgaTkxNV9nZW1fb2JqZWN0 X2luaXQoc3RydWN0Cj4+IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPj4+ICAgCUlOSVRfTElT VF9IRUFEKCZvYmotPnJpbmdfbGlzdCk7Cj4+PiAgIAlJTklUX0xJU1RfSEVBRCgmb2JqLT5vYmpf ZXhlY19saW5rKTsKPj4+ICAgCUlOSVRfTElTVF9IRUFEKCZvYmotPnZtYV9saXN0KTsKPj4+ICsJ SU5JVF9MSVNUX0hFQUQoJm9iai0+YmF0Y2hfcG9vbF9saXN0KTsKPj4+Cj4+PiAgIAlvYmotPm9w cyA9IG9wczsKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fYmF0Y2hfcG9vbC5jCj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2JhdGNo X3Bvb2wuYwo+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+IGluZGV4IDAwMDAwMDAuLmU5MzQ5 ZTMKPj4+IC0tLSAvZGV2L251bGwKPj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2JhdGNoX3Bvb2wuYwo+Pj4gQEAgLTAsMCArMSwxMzIgQEAKPj4+ICsvKgo+Pj4gKyAqIENv cHlyaWdodCDCqSAyMDE0IEludGVsIENvcnBvcmF0aW9uCj4+PiArICoKPj4+ICsgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgo+Pj4g K29idGFpbmluZyBhCj4+PiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQo+Pj4gKyJTb2Z0d2FyZSIpLAo+Pj4gKyAqIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 Cj4+PiArbGltaXRhdGlvbgo+Pj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLAo+Pj4gK3N1YmxpY2Vuc2UsCj4+PiArICogYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20KPj4+ICt0aGUKPj4+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+Pj4gKyAqCj4+PiArICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGlu Zwo+Pj4gK3RoZSBuZXh0Cj4+PiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCj4+PiArb2YgdGhlCj4+PiArICogU29m dHdhcmUuCj4+PiArICoKPj4+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKPj4gS0lORCwKPj4+ICtFWFBSRVNTIE9SCj4+PiArICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+ Pj4gK01FUkNIQU5UQUJJTElUWSwKPj4+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4KPj4gTk8gRVZFTlQKPj4+ICtTSEFMTAo+Pj4g KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLAo+PiBEQU1BR0VTCj4+PiArT1IgT1RIRVIKPj4+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCj4+IE9USEVSV0lTRSwKPj4+ICtBUklT SU5HCj4+PiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRQo+PiBPUgo+Pj4gK09USEVSIERFQUxJTkdTCj4+PiArICogSU4gVEhFIFNP RlRXQVJFLgo+Pj4gKyAqCj4+PiArICovCj4+PiArCj4+PiArI2luY2x1ZGUgImk5MTVfZHJ2Lmgi Cj4+PiArCj4+PiArLyoqCj4+PiArICogRE9DOiBiYXRjaCBwb29sCj4+PiArICoKPj4+ICsgKiBJ biBvcmRlciB0byBzdWJtaXQgYmF0Y2ggYnVmZmVycyBhcyAnc2VjdXJlJywgdGhlIHNvZnR3YXJl IGNvbW1hbmQKPj4+ICtwYXJzZXIKPj4+ICsgKiBtdXN0IGVuc3VyZSB0aGF0IGEgYmF0Y2ggYnVm ZmVyIGNhbm5vdCBiZSBtb2RpZmllZCBhZnRlciBwYXJzaW5nLgo+Pj4gK0l0IGRvZXMKPj4+ICsg KiB0aGlzIGJ5IGNvcHlpbmcgdGhlIHVzZXIgcHJvdmlkZWQgYmF0Y2ggYnVmZmVyIGNvbnRlbnRz IHRvIGEKPj4+ICtrZXJuZWwgb3duZWQKPj4+ICsgKiBidWZmZXIgZnJvbSB3aGljaCB0aGUgaGFy ZHdhcmUgd2lsbCBhY3R1YWxseSBleGVjdXRlLCBhbmQgYnkKPj4+ICtjYXJlZnVsbHkKPj4+ICsg KiBtYW5hZ2luZyB0aGUgYWRkcmVzcyBzcGFjZSBiaW5kaW5ncyBmb3Igc3VjaCBidWZmZXJzLgo+ Pj4gKyAqCj4+PiArICogVGhlIGJhdGNoIHBvb2wgZnJhbWV3b3JrIHByb3ZpZGVzIGEgbWVjaGFu aXNtIGZvciB0aGUgZHJpdmVyIHRvCj4+PiArbWFuYWdlIGEKPj4+ICsgKiBzZXQgb2Ygc2NyYXRj aCBidWZmZXJzIHRvIHVzZSBmb3IgdGhpcyBwdXJwb3NlLiBUaGUgZnJhbWV3b3JrIGNhbgo+Pj4g K2JlCj4+PiArICogZXh0ZW5kZWQgdG8gc3VwcG9ydCBvdGhlciB1c2VzIGNhc2VzIHNob3VsZCB0 aGV5IGFyaXNlLgo+Pj4gKyAqLwo+Pj4gKwo+Pj4gKy8qKgo+Pj4gKyAqIGk5MTVfZ2VtX2JhdGNo X3Bvb2xfaW5pdCgpIC0gaW5pdGlhbGl6ZSBhIGJhdGNoIGJ1ZmZlciBwb29sCj4+PiArICogQGRl djogdGhlIGRybSBkZXZpY2UKPj4+ICsgKiBAcG9vbDogdGhlIGJhdGNoIGJ1ZmZlciBwb29sCj4+ PiArICovCj4+PiArdm9pZCBpOTE1X2dlbV9iYXRjaF9wb29sX2luaXQoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKPj4+ICsJCQkgICAgICBzdHJ1Y3QgaTkxNV9nZW1fYmF0Y2hfcG9vbCAqcG9vbCkg ewo+Pj4gKwlwb29sLT5kZXYgPSBkZXY7Cj4+PiArCUlOSVRfTElTVF9IRUFEKCZwb29sLT5jYWNo ZV9saXN0KTsKPj4+ICt9Cj4+PiArCj4+PiArLyoqCj4+PiArICogaTkxNV9nZW1fYmF0Y2hfcG9v bF9maW5pKCkgLSBjbGVhbiB1cCBhIGJhdGNoIGJ1ZmZlciBwb29sCj4+PiArICogQHBvb2w6IHRo ZSBwb29sIHRvIGNsZWFuIHVwCj4+PiArICoKPj4+ICsgKiBOb3RlOiBDYWxsZXJzIG11c3QgaG9s ZCB0aGUgc3RydWN0X211dGV4Lgo+Pj4gKyAqLwo+Pj4gK3ZvaWQgaTkxNV9nZW1fYmF0Y2hfcG9v bF9maW5pKHN0cnVjdCBpOTE1X2dlbV9iYXRjaF9wb29sICpwb29sKSB7Cj4+PiArCVdBUk5fT04o IW11dGV4X2lzX2xvY2tlZCgmcG9vbC0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKPj4+ICsKPj4+ICsJ d2hpbGUgKCFsaXN0X2VtcHR5KCZwb29sLT5jYWNoZV9saXN0KSkgewo+Pj4gKwkJc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9Cj4+PiArCQkJbGlzdF9maXJzdF9lbnRyeSgmcG9vbC0+ Y2FjaGVfbGlzdCwKPj4+ICsJCQkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwKPj4+ICsJ CQkJCSBiYXRjaF9wb29sX2xpc3QpOwo+Pj4gKwo+Pj4gKwkJV0FSTl9PTihvYmotPmFjdGl2ZSk7 Cj4+PiArCj4+PiArCQlsaXN0X2RlbF9pbml0KCZvYmotPmJhdGNoX3Bvb2xfbGlzdCk7Cj4+PiAr CQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKPj4+ICsJfQo+Pj4gK30K Pj4+ICsKPj4+ICsvKioKPj4+ICsgKiBpOTE1X2dlbV9iYXRjaF9wb29sX2dldCgpIC0gc2VsZWN0 IGEgYnVmZmVyIGZyb20gdGhlIHBvb2wKPj4+ICsgKiBAcG9vbDogdGhlIGJhdGNoIGJ1ZmZlciBw b29sCj4+PiArICogQHNpemU6IHRoZSBtaW5pbXVtIGRlc2lyZWQgc2l6ZSBvZiB0aGUgcmV0dXJu ZWQgYnVmZmVyCj4+PiArICoKPj4+ICsgKiBGaW5kcyBvciBhbGxvY2F0ZXMgYSBiYXRjaCBidWZm ZXIgaW4gdGhlIHBvb2wgd2l0aCBhdCBsZWFzdCB0aGUKPj4+ICtyZXF1ZXN0ZWQKPj4+ICsgKiBz aXplLiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBhbnkgZG9tYWluLCBhY3RpdmUvaW5h Y3RpdmUsCj4+PiArb3IKPj4+ICsgKiBwdXJnZWFiaWxpdHkgbWFuYWdlbWVudCBmb3IgdGhlIHJl dHVybmVkIGJ1ZmZlci4KPj4+ICsgKgo+Pj4gKyAqIE5vdGU6IENhbGxlcnMgbXVzdCBob2xkIHRo ZSBzdHJ1Y3RfbXV0ZXgKPj4+ICsgKgo+Pj4gKyAqIFJldHVybjogdGhlIHNlbGVjdGVkIGJhdGNo IGJ1ZmZlciBvYmplY3QgICovIHN0cnVjdAo+Pj4gK2RybV9pOTE1X2dlbV9vYmplY3QgKiBpOTE1 X2dlbV9iYXRjaF9wb29sX2dldChzdHJ1Y3QKPj4+ICtpOTE1X2dlbV9iYXRjaF9wb29sICpwb29s LAo+Pj4gKwkJCXNpemVfdCBzaXplKQo+Pj4gK3sKPj4+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaiA9IE5VTEw7Cj4+PiArCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICp0bXAs ICpuZXh0Owo+Pj4gKwo+Pj4gKwlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJnBvb2wtPmRldi0+ c3RydWN0X211dGV4KSk7Cj4+PiArCj4+PiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0bXAs IG5leHQsCj4+PiArCQkJJnBvb2wtPmNhY2hlX2xpc3QsIGJhdGNoX3Bvb2xfbGlzdCkgewo+Pj4g Kwo+Pj4gKwkJaWYgKHRtcC0+YWN0aXZlKQo+Pj4gKwkJCWNvbnRpbnVlOwo+Pj4gKwo+Pj4gKwkJ LyogV2hpbGUgd2UncmUgbG9vcGluZywgZG8gc29tZSBjbGVhbiB1cCAqLwo+Pj4gKwkJaWYgKHRt cC0+bWFkdiA9PSBfX0k5MTVfTUFEVl9QVVJHRUQpIHsKPj4+ICsJCQlsaXN0X2RlbCgmdG1wLT5i YXRjaF9wb29sX2xpc3QpOwo+Pj4gKwkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZ0bXAt PmJhc2UpOwo+Pj4gKwkJCWNvbnRpbnVlOwo+Pj4gKwkJfQo+Pj4gKwo+Pj4gKwkJLyoKPj4+ICsJ CSAqIFNlbGVjdCBhIGJ1ZmZlciB0aGF0IGlzIGF0IGxlYXN0IGFzIGJpZyBhcyBuZWVkZWQKPj4+ ICsJCSAqIGJ1dCBub3QgJ3RvbyBtdWNoJyBiaWdnZXIuIEEgYmV0dGVyIHdheSB0byBkbyB0aGlz Cj4+PiArCQkgKiBtaWdodCBiZSB0byBidWNrZXQgdGhlIHBvb2wgb2JqZWN0cyBiYXNlZCBvbiBz aXplLgo+Pj4gKwkJICovCj4+PiArCQlpZiAodG1wLT5iYXNlLnNpemUgPj0gc2l6ZSAmJgo+Pj4g KwkJICAgIHRtcC0+YmFzZS5zaXplIDw9ICgyICogc2l6ZSkpIHsKPj4+ICsJCQlvYmogPSB0bXA7 Cj4+PiArCQkJYnJlYWs7Cj4+PiArCQl9Cj4+PiArCX0KPj4+ICsKPj4+ICsJaWYgKCFvYmopIHsK Pj4+ICsJCW9iaiA9IGk5MTVfZ2VtX2FsbG9jX29iamVjdChwb29sLT5kZXYsIHNpemUpOwo+Pj4g KwkJaWYgKCFvYmopCj4+PiArCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4+PiArCj4+PiAr CQlsaXN0X2FkZF90YWlsKCZvYmotPmJhdGNoX3Bvb2xfbGlzdCwgJnBvb2wtPmNhY2hlX2xpc3Qp Owo+Pj4gKwl9Cj4+Cj4+IFNob3VsZG4ndCB3ZSBoYXZlIGEgZWxzZSBsaXN0X21vdmVfdGFpbCBo ZXJlIHRvIGtlZXAgdGhlIGxpc3QgaW4gbHJ1IG9yZGVyPwo+PiAtRGFuaWVsCj4+Cj4+PiArCj4+ PiArCXJldHVybiBvYmo7Cj4+PiArfQo+Pj4gLS0KPj4+IDEuOS4xCj4+Pgo+Pj4gX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4+IEludGVsLWdmeCBtYWls aW5nIGxpc3QKPj4+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPj4+IGh0dHA6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKPj4KPj4gLS0K Pj4gRGFuaWVsIFZldHRlcgo+PiBTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24K Pj4gKzQxICgwKSA3OSAzNjUgNTcgNDggLSBodHRwOi8vYmxvZy5mZndsbC5jaAo+PiBfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+PiBJbnRlbC1nZnggbWFp bGluZyBsaXN0Cj4+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPj4gaHR0cDovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeApfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBs aXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=