From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC 07/39] drm/i915: Start of GPU scheduler Date: Tue, 21 Jul 2015 11:40:10 +0200 Message-ID: <20150721094010.GG16722@phenom.ffwll.local> References: <1437143628-6329-1-git-send-email-John.C.Harrison@Intel.com> <1437143628-6329-8-git-send-email-John.C.Harrison@Intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wg0-f41.google.com (mail-wg0-f41.google.com [74.125.82.41]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8C1F56E34E for ; Tue, 21 Jul 2015 02:37:31 -0700 (PDT) Received: by wgkl9 with SMTP id l9so151001046wgk.1 for ; Tue, 21 Jul 2015 02:37:30 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1437143628-6329-8-git-send-email-John.C.Harrison@Intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: John.C.Harrison@Intel.com Cc: Intel-GFX@Lists.FreeDesktop.Org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBKdWwgMTcsIDIwMTUgYXQgMDM6MzM6MTZQTSArMDEwMCwgSm9obi5DLkhhcnJpc29u QEludGVsLmNvbSB3cm90ZToKPiBGcm9tOiBKb2huIEhhcnJpc29uIDxKb2huLkMuSGFycmlzb25A SW50ZWwuY29tPgo+IAo+IEluaXRpYWwgY3JlYXRpb24gb2Ygc2NoZWR1bGVyIHNvdXJjZSBmaWxl cy4gTm90ZSB0aGF0IHRoaXMgcGF0Y2ggaW1wbGVtZW50cyBtb3N0Cj4gb2YgdGhlIHNjaGVkdWxl ciBmdW5jdGlvbmFsaXR5IGJ1dCBkb2VzIG5vdCBob29rIGl0IGluIHRvIHRoZSBkcml2ZXIgeWV0 LiBJdAo+IGFsc28gbGVhdmVzIHRoZSBzY2hlZHVsZXIgY29kZSBpbiAncGFzcyB0aHJvdWdoJyBt b2RlIHNvIHRoYXQgZXZlbiB3aGVuIGl0IGlzCj4gaG9va2VkIGluLCBpdCB3aWxsIG5vdCBhY3R1 YWxseSBkbyB2ZXJ5IG11Y2guIFRoaXMgYWxsb3dzIHRoZSBob29rcyB0byBiZSBhZGRlZAo+IG9u ZSBhdCBhIHRpbWUgaW4gYnl0ZSBzaXplIGNodW5rcyBhbmQgb25seSB3aGVuIHRoZSBzY2hlZHVs ZXIgaXMgZmluYWxseSBlbmFibGVkCj4gYXQgdGhlIGVuZCBkb2VzIGFueXRoaW5nIHN0YXJ0IGhh cHBlbmluZy4KPiAKPiBUaGUgZ2VuZXJhbCB0aGVvcnkgb2Ygb3BlcmF0aW9uIGlzIHRoYXQgd2hl biBiYXRjaCBidWZmZXJzIGFyZSBzdWJtaXR0ZWQgdG8gdGhlCj4gZHJpdmVyLCB0aGUgZXhlY2J1 ZmZlcigpIGNvZGUgYXNzaWducyBhIHVuaXF1ZSByZXF1ZXN0IGFuZCB0aGVuIHBhY2thZ2VzIHVw IGFsbAo+IHRoZSBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBleGVjdXRlIHRoZSBiYXRjaCBidWZm ZXIgYXQgYSBsYXRlciB0aW1lLiBUaGlzCj4gcGFja2FnZSBpcyBnaXZlbiBvdmVyIHRvIHRoZSBz Y2hlZHVsZXIgd2hpY2ggYWRkcyBpdCB0byBhbiBpbnRlcm5hbCBub2RlIGxpc3QuCj4gVGhlIHNj aGVkdWxlciBhbHNvIHNjYW5zIHRoZSBsaXN0IG9mIG9iamVjdHMgYXNzb2NpYXRlZCB3aXRoIHRo ZSBiYXRjaCBidWZmZXIKPiBhbmQgY29tcGFyZXMgdGhlbSBhZ2FpbnN0IHRoZSBvYmplY3RzIGFs cmVhZHkgaW4gdXNlIGJ5IG90aGVyIGJ1ZmZlcnMgaW4gdGhlCj4gbm9kZSBsaXN0LiBJZiBtYXRj aGVzIGFyZSBmb3VuZCB0aGVuIHRoZSBuZXcgYmF0Y2ggYnVmZmVyIG5vZGUgaXMgbWFya2VkIGFz Cj4gYmVpbmcgZGVwZW5kZW50IHVwb24gdGhlIG1hdGNoaW5nIG5vZGUuIFRoZSBzYW1lIGlzIGRv bmUgZm9yIHRoZSBjb250ZXh0IG9iamVjdC4KPiBUaGUgc2NoZWR1bGVyIGFsc28gYnVtcHMgdXAg dGhlIHByaW9yaXR5IG9mIHN1Y2ggbWF0Y2hpbmcgbm9kZXMgb24gdGhlIGdyb3VuZHMKPiB0aGF0 IHRoZSBtb3JlIGRlcGVuZGVuY2llcyBhIGdpdmVuIGJhdGNoIGJ1ZmZlciBoYXMgdGhlIG1vcmUg aW1wb3J0YW50IGl0IGlzCj4gbGlrZWx5IHRvIGJlLgo+IAo+IFRoZSBzY2hlZHVsZXIgYWltcyB0 byBoYXZlIGEgZ2l2ZW4gKHR1bmVhYmxlKSBudW1iZXIgb2YgYmF0Y2ggYnVmZmVycyBpbiBmbGln aHQKPiBvbiB0aGUgaGFyZHdhcmUgYXQgYW55IGdpdmVuIHRpbWUuIElmIGZld2VyIHRoYW4gdGhp cyBhcmUgY3VycmVudGx5IGV4ZWN1dGluZwo+IHdoZW4gYSBuZXcgbm9kZSBpcyBxdWV1ZWQsIHRo ZW4gdGhlIG5vZGUgaXMgcGFzc2VkIHN0cmFpZ2h0IHRocm91Z2ggdG8gdGhlCj4gc3VibWl0IGZ1 bmN0aW9uLiBPdGhlcndpc2UgaXQgaXMgc2ltcGx5IGFkZGVkIHRvIHRoZSBxdWV1ZSBhbmQgdGhl IGRyaXZlcgo+IHJldHVybnMgYmFjayB0byB1c2VyIGxhbmQuCj4gCj4gQXMgZWFjaCBiYXRjaCBi dWZmZXIgY29tcGxldGVzLCBpdCByYWlzZXMgYW4gaW50ZXJydXB0IHdoaWNoIHdha2VzIHVwIHRo ZQo+IHNjaGVkdWxlci4gTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlIGZvciBtdWx0aXBsZSBidWZm ZXJzIHRvIGNvbXBsZXRlIGJlZm9yZSB0aGUKPiBJUlEgaGFuZGxlciBnZXRzIHRvIHJ1bi4gRnVy dGhlciwgaXQgaXMgcG9zc2libGUgZm9yIHRoZSBzZXFubyB2YWx1ZXMgdG8gYmUKPiB1bi1vcmRl cmVkIChwYXJ0aWN1bGFybHkgb25jZSBwcmUtZW1wdGlvbiBpcyBlbmFibGVkKS4gSG93ZXZlciwg dGhlIHNjaGVkdWxlcgo+IGtlZXBzIHRoZSBsaXN0IG9mIGV4ZWN1dGluZyBidWZmZXJzIGluIG9y ZGVyIG9mIGhhcmR3YXJlIHN1Ym1pc3Npb24uIFRodXMgaXQgY2FuCj4gc2NhbiB0aHJvdWdoIHRo ZSBsaXN0IHVudGlsIGEgbWF0Y2hpbmcgc2Vxbm8gaXMgZm91bmQgYW5kIHRoZW4gbWFyayBhbGwg aW4KPiBmbGlnaHQgbm9kZXMgZnJvbSB0aGF0IHBvaW50IG9uIGFzIGNvbXBsZXRlZC4KPiAKPiBB IGRlZmVycmVkIHdvcmsgcXVldWUgaXMgYWxzbyBwb2tlZCBieSB0aGUgaW50ZXJydXB0IGhhbmRs ZXIuIFdoZW4gdGhpcyB3YWtlcyB1cAo+IGl0IGNhbiBkbyBtb3JlIGludm9sdmVkIHByb2Nlc3Np bmcgc3VjaCBhcyBhY3R1YWxseSByZW1vdmluZyBjb21wbGV0ZWQgbm9kZXMKPiBmcm9tIHRoZSBx dWV1ZSBhbmQgZnJlZWluZyB1cCB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGVtIChp bnRlcm5hbAo+IG1lbW9yeSBhbGxvY2F0aW9ucywgRFJNIG9iamVjdCByZWZlcmVuY2VzLCBjb250 ZXh0IHJlZmVyZW5jZSwgZXRjLikuIFRoZSB3b3JrCj4gaGFuZGxlciBhbHNvIGNoZWNrcyB0aGUg aW4gZmxpZ2h0IGNvdW50IGFuZCBjYWxscyB0aGUgc3VibWlzc2lvbiBjb2RlIGlmIGEgbmV3Cj4g c2xvdCBoYXMgYXBwZWFyZWQuCj4gCj4gV2hlbiB0aGUgc2NoZWR1bGVyJ3Mgc3VibWl0IGNvZGUg aXMgY2FsbGVkLCBpdCBzY2FucyB0aGUgcXVldWVkIG5vZGUgbGlzdCBmb3IKPiB0aGUgaGlnaGVz dCBwcmlvcml0eSBub2RlIHRoYXQgaGFzIG5vIHVubWV0IGRlcGVuZGVuY2llcy4gTm90ZSB0aGF0 IHRoZQo+IGRlcGVuZGVuY3kgY2FsY3VsYXRpb24gaXMgY29tcGxleCBhcyBpdCBtdXN0IHRha2Ug aW50ZXItcmluZyBkZXBlbmRlbmNpZXMgYW5kCj4gcG90ZW50aWFsIHByZWVtcHRpb25zIGludG8g YWNjb3VudC4gTm90ZSBhbHNvIHRoYXQgaW4gdGhlIGZ1dHVyZSB0aGlzIHdpbGwgYmUKPiBleHRl bmRlZCB0byBpbmNsdWRlIGV4dGVybmFsIGRlcGVuZGVuY2llcyBzdWNoIGFzIHRoZSBBbmRyb2lk IE5hdGl2ZSBTeW5jIGZpbGUKPiBkZXNjcmlwdG9ycyBhbmQvb3IgdGhlIGxpbnV4IGRtYS1idWZm IHN5bmNocm9uaXNhdGlvbiBzY2hlbWUuCj4gCj4gSWYgYSBzdWl0YWJsZSBub2RlIGlzIGZvdW5k IHRoZW4gaXQgaXMgc2VudCB0byBleGVjYnVmZl9maW5hbCgpIGZvciBzdWJtaXNzaW9uCj4gdG8g dGhlIGhhcmR3YXJlLiBUaGUgaW4gZmxpZ2h0IGNvdW50IGlzIHRoZW4gcmUtY2hlY2tlZCBhbmQg YSBuZXcgbm9kZSBwb3BwZWQKPiBmcm9tIHRoZSBsaXN0IGlmIGFwcHJvcHJpYXRlLgo+IAo+IE5v dGUgdGhhdCB0aGlzIHBhdGNoIGRvZXMgbm90IGltcGxlbWVudCBwcmUtZW1wdGl2ZSBzY2hlZHVs aW5nLiBPbmx5IGJhc2ljCj4gc2NoZWR1bGluZyBieSByZS1vcmRlcmluZyBiYXRjaCBidWZmZXIg c3VibWlzc2lvbiBpcyBjdXJyZW50bHkgaW1wbGVtZW50ZWQuCj4gCj4gQ2hhbmdlLUlkOiBJMWUw OGY1OWU2NTBhM2MyYmJhYWE5ZGU3NjI3ZGEzMzg0OWIwNjEwNgo+IEZvcjogVklaLTE1ODcKPiBT aWduZWQtb2ZmLWJ5OiBKb2huIEhhcnJpc29uIDxKb2huLkMuSGFycmlzb25ASW50ZWwuY29tPgo+ IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgIHwgICAxICsKPiAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICB8ICAgNCArCj4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAgICAgfCAgIDUgKwo+ICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X3NjaGVkdWxlci5jIHwgNzc2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuaCB8ICA5MSArKysr Cj4gIDUgZmlsZXMgY2hhbmdlZCwgODc3IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmMKPiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmgKPiAKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9NYWtlZmlsZQo+IGluZGV4IDQ3YTc0MTE0Li5jMzY3YjM5IDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUKPiBAQCAtOSw2ICs5LDcgQEAgY2NmbGFncy15IDo9IC1XZXJyb3IKPiAgIyBjb3JlIGRy aXZlciBjb2RlCj4gIGk5MTUteSA6PSBpOTE1X2Rydi5vIFwKPiAgCSAgaTkxNV9wYXJhbXMubyBc Cj4gKwkgIGk5MTVfc2NoZWR1bGVyLm8gXAo+ICAgICAgICAgICAgaTkxNV9zdXNwZW5kLm8gXAo+ ICAJICBpOTE1X3N5c2ZzLm8gXAo+ICAJICBpbnRlbF9wbS5vIFwKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmgKPiBpbmRleCBhNjgwNzc4Li43ZDJhNDk0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oCj4gQEAgLTE3MDAsNiArMTcwMCw4IEBAIHN0cnVjdCBpOTE1X2V4ZWNidWZmZXJfcGFyYW1z IHsKPiAgCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAgICAgKnJlcXVlc3Q7Cj4gIH07Cj4g IAo+ICtzdHJ1Y3QgaTkxNV9zY2hlZHVsZXI7Cj4gKwo+ICBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSB7Cj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2Owo+ICAJc3RydWN0IGttZW1fY2FjaGUgKm9i amVjdHM7Cj4gQEAgLTE5MzIsNiArMTkzNCw4IEBAIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsK PiAgCj4gIAlzdHJ1Y3QgaTkxNV9ydW50aW1lX3BtIHBtOwo+ICAKPiArCXN0cnVjdCBpOTE1X3Nj aGVkdWxlciAqc2NoZWR1bGVyOwo+ICsKPiAgCS8qIEFic3RyYWN0IHRoZSBzdWJtaXNzaW9uIG1l Y2hhbmlzbSAobGVnYWN5IHJpbmdidWZmZXIgb3IgZXhlY2xpc3RzKSBhd2F5ICovCj4gIAlzdHJ1 Y3Qgewo+ICAJCWludCAoKmV4ZWNidWZfc3VibWl0KShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyX3Bh cmFtcyAqcGFyYW1zLAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IGluZGV4IDBjNDA3YWUuLjNm YmM2ZWMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBAQCAtNDAsNiArNDAsNyBAQAo+ ICAjaWZkZWYgQ09ORklHX1NZTkMKPiAgI2luY2x1ZGUgPC4uL2RyaXZlcnMvc3RhZ2luZy9hbmRy b2lkL3N5bmMuaD4KPiAgI2VuZGlmCj4gKyNpbmNsdWRlICJpOTE1X3NjaGVkdWxlci5oIgo+ICAK PiAgI2RlZmluZSBSUV9CVUdfT04oZXhwcikKPiAgCj4gQEAgLTUzOTgsNiArNTM5OSwxMCBAQCBp OTE1X2dlbV9pbml0X2h3KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAo+ICAJaTkxNV9nZW1f aW5pdF9zd2l6emxpbmcoZGV2KTsKPiAgCj4gKwlyZXQgPSBpOTE1X3NjaGVkdWxlcl9pbml0KGRl dik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICAJLyoKPiAgCSAqIEF0IGxl YXN0IDgzMCBjYW4gbGVhdmUgc29tZSBvZiB0aGUgdW51c2VkIHJpbmdzCj4gIAkgKiAiYWN0aXZl IiAoaWUuIGhlYWQgIT0gdGFpbCkgYWZ0ZXIgcmVzdW1lIHdoaWNoCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3NjaGVkdWxlci5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw Li43MWQ4ZGY3Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfc2NoZWR1bGVyLmMKPiBAQCAtMCwwICsxLDc3NiBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQg KGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiAr ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChp bmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4K PiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJ U0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiAr ICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiArI2luY2x1ZGUgImludGVs X2Rydi5oIgo+ICsjaW5jbHVkZSAiaTkxNV9zY2hlZHVsZXIuaCIKPiArCj4gK3N0YXRpYyBpbnQg ICAgICAgICBpOTE1X3NjaGVkdWxlcl9mbHlfbm9kZShzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVl dWVfZW50cnkgKm5vZGUpOwo+ICtzdGF0aWMgaW50ICAgICAgICAgaTkxNV9zY2hlZHVsZXJfcmVt b3ZlX2RlcGVuZGVudChzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxlciwKPiArCQkJCQkJ ICAgc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpyZW1vdmUpOwo+ICtzdGF0aWMg aW50ICAgICAgICAgaTkxNV9zY2hlZHVsZXJfc3VibWl0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KnJpbmcsCj4gKwkJCQkJIGJvb2wgaXNfbG9ja2VkKTsKPiArc3RhdGljIHVpbnQzMl90ICAgIGk5 MTVfc2NoZWR1bGVyX2NvdW50X2ZseWluZyhzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgKnNjaGVkdWxl ciwKPiArCQkJCQkgICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7Cj4gK3N0YXRp YyB2b2lkICAgICAgICBpOTE1X3NjaGVkdWxlcl9wcmlvcml0eV9idW1wX2NsZWFyKHN0cnVjdCBp OTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyKTsKPiArc3RhdGljIGludCAgICAgICAgIGk5MTVfc2No ZWR1bGVyX3ByaW9yaXR5X2J1bXAoc3RydWN0IGk5MTVfc2NoZWR1bGVyICpzY2hlZHVsZXIsCj4g KwkJCQkJCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqdGFyZ2V0LAo+ICsJCQkJ CQl1aW50MzJfdCBidW1wKTsKPiArCj4gK2ludCBpOTE1X3NjaGVkdWxlcl9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgICAqc2NoZWR1 bGVyID0gZGV2X3ByaXYtPnNjaGVkdWxlcjsKPiArCWludCAgICAgICAgICAgICAgICAgICAgIHI7 Cj4gKwo+ICsJaWYgKHNjaGVkdWxlcikKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlzY2hlZHVsZXIg PSBremFsbG9jKHNpemVvZigqc2NoZWR1bGVyKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXNjaGVk dWxlcikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlzcGluX2xvY2tfaW5pdCgmc2NoZWR1 bGVyLT5sb2NrKTsKPiArCj4gKwlmb3IgKHIgPSAwOyByIDwgSTkxNV9OVU1fUklOR1M7IHIrKykK PiArCQlJTklUX0xJU1RfSEVBRCgmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW3JdKTsKPiArCj4gKwlz Y2hlZHVsZXItPmluZGV4ID0gMTsKPiArCj4gKwkvKiBEZWZhdWx0IHR1bmluZyB2YWx1ZXM6ICov Cj4gKwlzY2hlZHVsZXItPnByaW9yaXR5X2xldmVsX21heCAgICAgPSB+MFU7Cj4gKwlzY2hlZHVs ZXItPnByaW9yaXR5X2xldmVsX3ByZWVtcHQgPSA5MDA7Cj4gKwlzY2hlZHVsZXItPm1pbl9mbHlp bmcgICAgICAgICAgICAgPSAyOwo+ICsKPiArCWRldl9wcml2LT5zY2hlZHVsZXIgPSBzY2hlZHVs ZXI7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCBpOTE1X3NjaGVkdWxlcl9xdWV1 ZV9leGVjYnVmZmVyKHN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqcWUpCj4gK3sK PiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHFlLT5wYXJhbXMuZGV2LT5k ZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlciAgICpzY2hlZHVsZXIgPSBkZXZf cHJpdi0+c2NoZWR1bGVyOwo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAgKnJpbmcgPSBxZS0+ cGFyYW1zLnJpbmc7Cj4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgICpub2Rl Owo+ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICAqdGVzdDsKPiArCXN0cnVj dCB0aW1lc3BlYyAgICAgc3RhbXA7Cj4gKwl1bnNpZ25lZCBsb25nICAgICAgIGZsYWdzOwo+ICsJ Ym9vbCAgICAgICAgICAgICAgICBub3RfZmx5aW5nLCBmb3VuZDsKPiArCWludCAgICAgICAgICAg ICAgICAgaSwgaiwgcjsKPiArCWludCAgICAgICAgICAgICAgICAgaW5jb21wbGV0ZSA9IDA7Cj4g Kwo+ICsJQlVHX09OKCFzY2hlZHVsZXIpOwo+ICsKPiArCWlmICgxLyppOTE1LnNjaGVkdWxlcl9v dmVycmlkZSAmIGk5MTVfc29fZGlyZWN0X3N1Ym1pdCovKSB7Cj4gKwkJaW50IHJldDsKPiArCj4g KwkJcWUtPnNjaGVkdWxlcl9pbmRleCA9IHNjaGVkdWxlci0+aW5kZXgrKzsKPiArCj4gKwkJc2No ZWR1bGVyLT5mbGFnc1txZS0+cGFyYW1zLnJpbmctPmlkXSB8PSBpOTE1X3NmX3N1Ym1pdHRpbmc7 Cj4gKwkJcmV0ID0gZGV2X3ByaXYtPmd0LmV4ZWNidWZfZmluYWwoJnFlLT5wYXJhbXMpOwo+ICsJ CXNjaGVkdWxlci0+ZmxhZ3NbcWUtPnBhcmFtcy5yaW5nLT5pZF0gJj0gfmk5MTVfc2Zfc3VibWl0 dGluZzsKPiArCj4gKwkJLyoKPiArCQkgKiBEb24ndCBkbyBhbnkgY2xlYW4gdXAgb24gZmFpbHVy ZSBiZWNhdXNlIHRoZSBjYWxsZXIgd2lsbAo+ICsJCSAqIGRvIGl0IGFsbCBhbnl3YXkuCj4gKwkJ ICovCj4gKwkJaWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsKPiArCj4gKwkJLyogRnJlZSBldmVy eXRoaW5nIHRoYXQgaXMgb3duZWQgYnkgdGhlIFFFIHN0cnVjdHVyZTogKi8KPiArCQlrZnJlZShx ZS0+cGFyYW1zLmNsaXByZWN0cyk7Cj4gKwkJaWYgKHFlLT5wYXJhbXMuZGlzcGF0Y2hfZmxhZ3Mg JiBJOTE1X0RJU1BBVENIX1NFQ1VSRSkKPiArCQkJaTkxNV9nZW1fZXhlY2J1ZmZfcmVsZWFzZV9i YXRjaF9vYmoocWUtPnBhcmFtcy5iYXRjaF9vYmopOwo+ICsKPiArCQlyZXR1cm4gMDsKPiArCX0K PiArCj4gKwlnZXRyYXdtb25vdG9uaWMoJnN0YW1wKTsKPiArCj4gKwlub2RlID0ga21hbGxvYyhz aXplb2YoKm5vZGUpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghbm9kZSkKPiArCQlyZXR1cm4gLUVO T01FTTsKPiArCj4gKwkqbm9kZSA9ICpxZTsKPiArCUlOSVRfTElTVF9IRUFEKCZub2RlLT5saW5r KTsKPiArCW5vZGUtPnN0YXR1cyA9IGk5MTVfc3FzX3F1ZXVlZDsKPiArCW5vZGUtPnN0YW1wICA9 IHN0YW1wOwo+ICsJaTkxNV9nZW1fcmVxdWVzdF9yZWZlcmVuY2Uobm9kZS0+cGFyYW1zLnJlcXVl c3QpOwo+ICsKPiArCS8qIE5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgaW5jb21wbGV0 ZSBlbnRyaWVzIGluIHRoZSBsaXN0IGFzCj4gKwkgKiB0aGF0IHdpbGwgYmUgdGhlIG1heGltdW0g c2l6ZSBvZiB0aGUgZGVwZW5kZW5jeSBsaXN0Lgo+ICsJICoKPiArCSAqIE5vdGUgdGhhdCB0aGUg YWxsb2NhdGlvbiBtdXN0IG5vdCBiZSBtYWRlIHdpdGggdGhlIHNwaW5sb2NrIGFjcXVpcmVkCj4g KwkgKiBhcyBrbWFsbG9jIGNhbiBzbGVlcC4gSG93ZXZlciwgdGhlIHVubG9jay9yZWxvY2sgaXMg c2FmZSBiZWNhdXNlIG5vCj4gKwkgKiBuZXcgZW50cmllcyBjYW4gYmUgcXVldWVkIHVwIGR1cmlu ZyB0aGUgdW5sb2NrIGFzIHRoZSBpOTE1IGRyaXZlcgo+ICsJICogbXV0ZXggaXMgc3RpbGwgaGVs ZC4gRW50cmllcyBjb3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGxpc3QgYnV0IHRoYXQKPiArCSAq IGp1c3QgbWVhbnMgdGhlIGRlcF9saXN0IHdpbGwgYmUgb3Zlci1hbGxvY2F0ZWQgd2hpY2ggaXMg ZmluZS4KPiArCSAqLwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJnNjaGVkdWxlci0+bG9jaywgZmxh Z3MpOwo+ICsJZm9yIChyID0gMDsgciA8IEk5MTVfTlVNX1JJTkdTOyByKyspIHsKPiArCQlsaXN0 X2Zvcl9lYWNoX2VudHJ5KHRlc3QsICZzY2hlZHVsZXItPm5vZGVfcXVldWVbcl0sIGxpbmspIHsK PiArCQkJaWYgKEk5MTVfU1FTX0lTX0NPTVBMRVRFKHRlc3QpKQo+ICsJCQkJY29udGludWU7Cj4g Kwo+ICsJCQlpbmNvbXBsZXRlKys7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCS8qIFRlbXBvcmFyaWx5 IHVubG9jayB0byBhbGxvY2F0ZSBtZW1vcnk6ICovCj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZzY2hlZHVsZXItPmxvY2ssIGZsYWdzKTsKPiArCWlmIChpbmNvbXBsZXRlKSB7Cj4gKwkJbm9k ZS0+ZGVwX2xpc3QgPSBrbWFsbG9jKHNpemVvZihub2RlLT5kZXBfbGlzdFswXSkgKiBpbmNvbXBs ZXRlLAo+ICsJCQkJCSBHRlBfS0VSTkVMKTsKPiArCQlpZiAoIW5vZGUtPmRlcF9saXN0KSB7Cj4g KwkJCWtmcmVlKG5vZGUpOwo+ICsJCQlyZXR1cm4gLUVOT01FTTsKPiArCQl9Cj4gKwl9IGVsc2UK PiArCQlub2RlLT5kZXBfbGlzdCA9IE5VTEw7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJnNj aGVkdWxlci0+bG9jaywgZmxhZ3MpOwo+ICsJbm9kZS0+bnVtX2RlcHMgPSAwOwo+ICsKPiArCWlm IChub2RlLT5kZXBfbGlzdCkgewo+ICsJCWZvciAociA9IDA7IHIgPCBJOTE1X05VTV9SSU5HUzsg cisrKSB7Cj4gKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkodGVzdCwgJnNjaGVkdWxlci0+bm9kZV9x dWV1ZVtyXSwgbGluaykgewo+ICsJCQkJaWYgKEk5MTVfU1FTX0lTX0NPTVBMRVRFKHRlc3QpKQo+ ICsJCQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJCS8qCj4gKwkJCQkgKiBCYXRjaGVzIG9uIHRoZSBz YW1lIHJpbmcgZm9yIHRoZSBzYW1lCj4gKwkJCQkgKiBjb250ZXh0IG11c3QgYmUga2VwdCBpbiBv cmRlci4KPiArCQkJCSAqLwo+ICsJCQkJZm91bmQgPSAobm9kZS0+cGFyYW1zLmN0eCA9PSB0ZXN0 LT5wYXJhbXMuY3R4KSAmJgo+ICsJCQkJCShub2RlLT5wYXJhbXMucmluZyA9PSB0ZXN0LT5wYXJh bXMucmluZyk7Cj4gKwo+ICsJCQkJLyoKPiArCQkJCSAqIEJhdGNoZXMgd29ya2luZyBvbiB0aGUg c2FtZSBvYmplY3RzIG11c3QKPiArCQkJCSAqIGJlIGtlcHQgaW4gb3JkZXIuCj4gKwkJCQkgKi8K PiArCQkJCWZvciAoaSA9IDA7IChpIDwgbm9kZS0+bnVtX29ianMpICYmICFmb3VuZDsgaSsrKSB7 Cj4gKwkJCQkJZm9yIChqID0gMDsgaiA8IHRlc3QtPm51bV9vYmpzOyBqKyspIHsKPiArCQkJCQkJ aWYgKG5vZGUtPnNhdmVkX29iamVjdHNbaV0ub2JqICE9Cj4gKwkJCQkJCQkgICAgdGVzdC0+c2F2 ZWRfb2JqZWN0c1tqXS5vYmopCj4gKwkJCQkJCQljb250aW51ZTsKPiArCj4gKwkJCQkJCWZvdW5k ID0gdHJ1ZTsKPiArCQkJCQkJYnJlYWs7CgpJIGd1ZXNzIHRoaXMgc2hvdWxkIGJlIGEgZ290byB0 byBicmVhayBvdXQgb2YgYm90aCBsb29wcz8KCj4gKwkJCQkJfQo+ICsJCQkJfQo+ICsKPiArCQkJ CWlmIChmb3VuZCkgewo+ICsJCQkJCW5vZGUtPmRlcF9saXN0W25vZGUtPm51bV9kZXBzXSA9IHRl c3Q7Cj4gKwkJCQkJbm9kZS0+bnVtX2RlcHMrKzsKPiArCQkJCX0KPiArCQkJfQo+ICsJCX0KPiAr Cj4gKwkJQlVHX09OKG5vZGUtPm51bV9kZXBzID4gaW5jb21wbGV0ZSk7Cj4gKwl9CgpUaGlzIHNl ZW1zIHRvIGJlIE8ocGVuZGluZ19yZXF1ZXN0cyAqIG9ial9wZXJfcmVxdWVzdCBeIDIpLCB3aGlj aCBpcyBhIGJpdApleGNlc3NpdmUuIEFsc28gc2luY2UgeW91IG9ubHkgY2hlY2sgZGVwcyBhdCB0 aGUgb2JqZWN0IGxldmVsIHRoaXMgYnJlYWtzCnJlYWQtcmVhZC4KCkZpbmFsbHkgbW92ZV90b19h Y3RpdmUgZG9lcyB0cmFjayBhbGwgdGhpcyBhbHJlYWR5IHNpbmNlIGl0IGhhcyB0bwpleGNoYW5n ZSBhbGwgdGhlIHJlcXVlc3QgZm9yIG5ldyBvbmVzLiBXZSBtaWdodCB3YW50IHRvIG1vdmUgb2Jq ZWN0X3N5bmMKaW4gdGhlcmUgdG9vIGp1c3QgYmVjYXVzZSwgYnV0IEkgdGhpbmsgdGhpcyB3b3Vs ZCBkZWZpbml0ZWx5IGZpdCBiZXR0ZXIKaW4gdGhlcmUuCi1EYW5pZWwKCj4gKwo+ICsJaWYgKG5v ZGUtPnByaW9yaXR5ICYmIG5vZGUtPm51bV9kZXBzKSB7Cj4gKwkJaTkxNV9zY2hlZHVsZXJfcHJp b3JpdHlfYnVtcF9jbGVhcihzY2hlZHVsZXIpOwo+ICsKPiArCQlmb3IgKGkgPSAwOyBpIDwgbm9k ZS0+bnVtX2RlcHM7IGkrKykKPiArCQkJaTkxNV9zY2hlZHVsZXJfcHJpb3JpdHlfYnVtcChzY2hl ZHVsZXIsCj4gKwkJCQkJbm9kZS0+ZGVwX2xpc3RbaV0sIG5vZGUtPnByaW9yaXR5KTsKPiArCX0K PiArCj4gKwlub2RlLT5zY2hlZHVsZXJfaW5kZXggPSBzY2hlZHVsZXItPmluZGV4Kys7Cj4gKwo+ ICsJbGlzdF9hZGRfdGFpbCgmbm9kZS0+bGluaywgJnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtyaW5n LT5pZF0pOwo+ICsKPiArCW5vdF9mbHlpbmcgPSBpOTE1X3NjaGVkdWxlcl9jb3VudF9mbHlpbmco c2NoZWR1bGVyLCByaW5nKSA8Cj4gKwkJCQkJCSBzY2hlZHVsZXItPm1pbl9mbHlpbmc7Cj4gKwo+ ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NoZWR1bGVyLT5sb2NrLCBmbGFncyk7Cj4gKwo+ ICsJaWYgKG5vdF9mbHlpbmcpCj4gKwkJaTkxNV9zY2hlZHVsZXJfc3VibWl0KHJpbmcsIHRydWUp Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGk5MTVfc2NoZWR1bGVy X2ZseV9ub2RlKHN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqbm9kZSkKPiArewo+ ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gbm9kZS0+cGFyYW1zLmRldi0+ ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgICAqc2NoZWR1bGVyID0gZGV2 X3ByaXYtPnNjaGVkdWxlcjsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgICpyaW5nOwo+ICsK PiArCUJVR19PTighc2NoZWR1bGVyKTsKPiArCUJVR19PTighbm9kZSk7Cj4gKwlCVUdfT04obm9k ZS0+c3RhdHVzICE9IGk5MTVfc3FzX3BvcHBlZCk7Cj4gKwo+ICsJcmluZyA9IG5vZGUtPnBhcmFt cy5yaW5nOwo+ICsKPiArCS8qIEFkZCB0aGUgbm9kZSAod2hpY2ggc2hvdWxkIGN1cnJlbnRseSBi ZSBpbiBzdGF0ZSBub25lKSB0byB0aGUgZnJvbnQKPiArCSAqIG9mIHRoZSBxdWV1ZS4gVGhpcyBl bnN1cmUgdGhhdCBmbHlpbmcgbm9kZXMgYXJlIGFsd2F5cyBoZWxkIGluCj4gKwkgKiBoYXJkd2Fy ZSBzdWJtaXNzaW9uIG9yZGVyLiAqLwo+ICsJbGlzdF9hZGQoJm5vZGUtPmxpbmssICZzY2hlZHVs ZXItPm5vZGVfcXVldWVbcmluZy0+aWRdKTsKPiArCj4gKwlub2RlLT5zdGF0dXMgPSBpOTE1X3Nx c19mbHlpbmc7Cj4gKwo+ICsJaWYgKCEoc2NoZWR1bGVyLT5mbGFnc1tyaW5nLT5pZF0gJiBpOTE1 X3NmX2ludGVycnVwdHNfZW5hYmxlZCkpIHsKPiArCQlib29sICAgIHN1Y2Nlc3MgPSB0cnVlOwo+ ICsKPiArCQlzdWNjZXNzID0gcmluZy0+aXJxX2dldChyaW5nKTsKPiArCQlpZiAoc3VjY2VzcykK PiArCQkJc2NoZWR1bGVyLT5mbGFnc1tyaW5nLT5pZF0gfD0gaTkxNV9zZl9pbnRlcnJ1cHRzX2Vu YWJsZWQ7Cj4gKwkJZWxzZQo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArLyoKPiArICogTm9kZXMgYXJlIGNvbnNpZGVyZWQgdmFsaWQgZGVw ZW5kZW5jaWVzIGlmIHRoZXkgYXJlIHF1ZXVlZCBvbiBhbnkgcmluZyBvcgo+ICsgKiBpZiB0aGV5 IGFyZSBpbiBmbGlnaHQgb24gYSBkaWZmZXJlbnQgcmluZy4gSW4gZmxpZ2h0IG9uIHRoZSBzYW1l IHJpbmcgaXMgbm8KPiArICogbG9uZ2VyIGludGVyZXN0aW5nIGZvciBub24tcHJlbXB0aXZlIG5v ZGVzIGFzIHRoZSByaW5nIHNlcmlhbGlzZXMgZXhlY3V0aW9uLgo+ICsgKiBGb3IgcHJlLWVtcHRp bmcgbm9kZXMsIGFsbCBpbiBmbGlnaHQgZGVwZW5kZW5jaWVzIGFyZSB2YWxpZCBhcyB0aGV5IG11 c3Qgbm90Cj4gKyAqIGJlIGp1bXBlZCBieSB0aGUgYWN0IG9mIHByZS1lbXB0aW5nLgo+ICsgKgo+ ICsgKiBBbnl0aGluZyB0aGF0IGlzIG5laXRoZXIgcXVldWVkIG5vciBmbHlpbmcgaXMgdW5pbnRl cmVzdGluZy4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBpOTE1X3NjaGVkdWxlcl9pc19k ZXBlbmRlbmN5X3ZhbGlkKAo+ICsJCQlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkg Km5vZGUsIHVpbnQzMl90IGlkeCkKPiArewo+ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVl X2VudHJ5ICpkZXA7Cj4gKwo+ICsJZGVwID0gbm9kZS0+ZGVwX2xpc3RbaWR4XTsKPiArCWlmICgh ZGVwKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlpZiAoSTkxNV9TUVNfSVNfUVVFVUVEKGRl cCkpCj4gKwkJcmV0dXJuIHRydWU7Cj4gKwo+ICsJaWYgKEk5MTVfU1FTX0lTX0ZMWUlORyhkZXAp KSB7Cj4gKwkJaWYgKG5vZGUtPnBhcmFtcy5yaW5nICE9IGRlcC0+cGFyYW1zLnJpbmcpCj4gKwkJ CXJldHVybiB0cnVlOwo+ICsJfQo+ICsKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArc3Rh dGljIHVpbnQzMl90IGk5MTVfc2NoZWR1bGVyX2NvdW50X2ZseWluZyhzdHJ1Y3QgaTkxNV9zY2hl ZHVsZXIgKnNjaGVkdWxlciwKPiArCQkJCQkgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmlu ZykKPiArewo+ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICpub2RlOwo+ICsJ dWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgIGZseWluZyA9IDA7Cj4gKwo+ICsJbGlz dF9mb3JfZWFjaF9lbnRyeShub2RlLCAmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW3JpbmctPmlkXSwg bGluaykKPiArCQlpZiAoSTkxNV9TUVNfSVNfRkxZSU5HKG5vZGUpKQo+ICsJCQlmbHlpbmcrKzsK PiArCj4gKwlyZXR1cm4gZmx5aW5nOwo+ICt9Cj4gKwo+ICsvKiBBZGQgYSBwb3BwZWQgbm9kZSBi YWNrIGluIHRvIHRoZSBxdWV1ZS4gRm9yIGV4YW1wbGUsIGJlY2F1c2UgdGhlIHJpbmcgd2FzCj4g KyAqIGh1bmcgd2hlbiBleGVjZmluYWwoKSB3YXMgY2FsbGVkIGFuZCB0aHVzIHRoZSByaW5nIHN1 Ym1pc3Npb24gbmVlZHMgdG8gYmUKPiArICogcmV0cmllZCBsYXRlci4gKi8KPiArc3RhdGljIHZv aWQgaTkxNV9zY2hlZHVsZXJfbm9kZV9yZXF1ZXVlKHN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1 ZV9lbnRyeSAqbm9kZSkKPiArewo+ICsJQlVHX09OKCFub2RlKTsKPiArCUJVR19PTighSTkxNV9T UVNfSVNfRkxZSU5HKG5vZGUpKTsKPiArCj4gKwlub2RlLT5zdGF0dXMgPSBpOTE1X3Nxc19xdWV1 ZWQ7Cj4gK30KPiArCj4gKy8qIEdpdmUgdXAgb24gYSBwb3BwZWQgbm9kZSBjb21wbGV0ZWx5LiBG b3IgZXhhbXBsZSwgYmVjYXVzZSBpdCBpcyBjYXVzaW5nIHRoZQo+ICsgKiByaW5nIHRvIGhhbmcg b3IgaXMgdXNpbmcgc29tZSByZXNvdXJjZSB0aGF0IG5vIGxvbmdlciBleGlzdHMuICovCj4gK3N0 YXRpYyB2b2lkIGk5MTVfc2NoZWR1bGVyX25vZGVfa2lsbChzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJf cXVldWVfZW50cnkgKm5vZGUpCj4gK3sKPiArCUJVR19PTighbm9kZSk7Cj4gKwlCVUdfT04oIUk5 MTVfU1FTX0lTX0ZMWUlORyhub2RlKSk7Cj4gKwo+ICsJbm9kZS0+c3RhdHVzID0gaTkxNV9zcXNf ZGVhZDsKPiArfQo+ICsKPiArLyoKPiArICogVGhlIGJhdGNoIHRhZ2dlZCB3aXRoIHRoZSBpbmRp Y2F0ZWQgc2VxZW5jZSBudW1iZXIgaGFzIGNvbXBsZXRlZC4KPiArICogU2VhcmNoIHRoZSBxdWV1 ZSBmb3IgaXQsIHVwZGF0ZSBpdHMgc3RhdHVzIGFuZCB0aG9zZSBvZiBhbnkgYmF0Y2hlcwo+ICsg KiBzdWJtaXR0ZWQgZWFybGllciwgd2hpY2ggbXVzdCBhbHNvIGhhdmUgY29tcGxldGVkIG9yIGJl ZW4gcHJlZWVtcHRlZAo+ICsgKiBhcyBhcHByb3ByaWF0ZS4KPiArICoKPiArICogQ2FsbGVkIHdp dGggc3BpbmxvY2sgYWxyZWFkeSBoZWxkLgo+ICsgKi8KPiArc3RhdGljIHZvaWQgaTkxNV9zY2hl ZHVsZXJfc2Vxbm9fY29tcGxldGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywgdWludDMy X3Qgc2Vxbm8pCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHJp bmctPmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXIgICAqc2NoZWR1 bGVyID0gZGV2X3ByaXYtPnNjaGVkdWxlcjsKPiArCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1 ZV9lbnRyeSAqbm9kZTsKPiArCWJvb2wgZ290X2NoYW5nZXMgPSBmYWxzZTsKPiArCj4gKwkvKgo+ ICsJICogQmF0Y2ggYnVmZmVycyBhcmUgYWRkZWQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QgaW4g ZXhlY3V0aW9uIG9yZGVyLAo+ICsJICogdGh1cyBzZXFubyB2YWx1ZXMsIGFsdGhvdWdoIG5vdCBu ZWNlc3NhcmlseSBpbmNyZW1lbnRpbmcsIHdpbGwgYmUKPiArCSAqIG1ldCBpbiBjb21wbGV0aW9u IG9yZGVyIHdoZW4gc2Nhbm5pbmcgdGhlIGxpc3QuIFNvIHdoZW4gYSBtYXRjaCBpcwo+ICsJICog Zm91bmQsIGFsbCBzdWJzZXF1ZW50IGVudHJpZXMgbXVzdCBoYXZlIGFsc28gcG9wcGVkIG91dC4g Q29udmVyc2VseSwKPiArCSAqIGlmIGEgY29tcGxldGVkIGVudHJ5IGlzIGZvdW5kIHRoZW4gdGhl cmUgaXMgbm8gbmVlZCB0byBzY2FuIGZ1cnRoZXIuCj4gKwkgKi8KPiArCWxpc3RfZm9yX2VhY2hf ZW50cnkobm9kZSwgJnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtyaW5nLT5pZF0sIGxpbmspIHsKPiAr CQlpZiAoSTkxNV9TUVNfSVNfQ09NUExFVEUobm9kZSkpCj4gKwkJCXJldHVybjsKPiArCj4gKwkJ aWYgKHNlcW5vID09IG5vZGUtPnBhcmFtcy5yZXF1ZXN0LT5zZXFubykKPiArCQkJYnJlYWs7Cj4g Kwl9Cj4gKwo+ICsJLyoKPiArCSAqIE5COiBMb3RzIG9mIGV4dHJhIHNlcW5vcyBnZXQgYWRkZWQg dG8gdGhlIHJpbmcgdG8gdHJhY2sgdGhpbmdzCj4gKwkgKiBsaWtlIGNhY2hlIGZsdXNoZXMgYW5k IHBhZ2UgZmxpcHMuIFNvIGRvbid0IGNvbXBsYWluIGFib3V0IGlmCj4gKwkgKiBubyBub2RlIHdh cyBmb3VuZC4KPiArCSAqLwo+ICsJaWYgKCZub2RlLT5saW5rID09ICZzY2hlZHVsZXItPm5vZGVf cXVldWVbcmluZy0+aWRdKQo+ICsJCXJldHVybjsKPiArCj4gKwlXQVJOX09OKCFJOTE1X1NRU19J U19GTFlJTkcobm9kZSkpOwo+ICsKPiArCS8qIEV2ZXJ5dGhpbmcgZnJvbSBoZXJlIGNhbiBiZSBt YXJrZWQgYXMgZG9uZTogKi8KPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbShub2RlLCAmc2No ZWR1bGVyLT5ub2RlX3F1ZXVlW3JpbmctPmlkXSwgbGluaykgewo+ICsJCS8qIENoZWNrIGlmIHRo ZSBtYXJraW5nIGhhcyBhbHJlYWR5IGJlZW4gZG9uZTogKi8KPiArCQlpZiAoSTkxNV9TUVNfSVNf Q09NUExFVEUobm9kZSkpCj4gKwkJCWJyZWFrOwo+ICsKPiArCQlpZiAoIUk5MTVfU1FTX0lTX0ZM WUlORyhub2RlKSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCS8qIE5vZGUgd2FzIGluIGZsaWdo dCBzbyBtYXJrIGl0IGFzIGNvbXBsZXRlLiAqLwo+ICsJCW5vZGUtPnN0YXR1cyA9IGk5MTVfc3Fz X2NvbXBsZXRlOwo+ICsJCWdvdF9jaGFuZ2VzID0gdHJ1ZTsKPiArCX0KPiArCj4gKwkvKiBTaG91 bGQgc3VibWl0IG5ldyB3b3JrIGhlcmUgaWYgZmxpZ2h0IGxpc3QgaXMgZW1wdHkgYnV0IHRoZSBE Uk0KPiArCSAqIG11dGV4IGxvY2sgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBpZiBhICdfX3dhaXRf cmVxdWVzdCgpJyBjYWxsIGlzCj4gKwkgKiBibG9ja2luZyB0aGUgc3lzdGVtLiAqLwo+ICt9Cj4g Kwo+ICtpbnQgaTkxNV9zY2hlZHVsZXJfaGFuZGxlX2lycShzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICpyaW5nKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSByaW5n LT5kZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVyICAgKnNjaGVkdWxl ciA9IGRldl9wcml2LT5zY2hlZHVsZXI7Cj4gKwl1bnNpZ25lZCBsb25nICAgICAgIGZsYWdzOwo+ ICsJdWludDMyX3QgICAgICAgICAgICBzZXFubzsKPiArCj4gKwlzZXFubyA9IHJpbmctPmdldF9z ZXFubyhyaW5nLCBmYWxzZSk7Cj4gKwo+ICsJaWYgKDEvKmk5MTUuc2NoZWR1bGVyX292ZXJyaWRl ICYgaTkxNV9zb19kaXJlY3Rfc3VibWl0Ki8pCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKHNl cW5vID09IHNjaGVkdWxlci0+bGFzdF9pcnFfc2Vxbm9bcmluZy0+aWRdKSB7Cj4gKwkJLyogV2h5 IGFyZSB0aGVyZSBzb21ldGltZXMgbXVsdGlwbGUgaW50ZXJydXB0cyBwZXIgc2Vxbm8/ICovCj4g KwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwlzY2hlZHVsZXItPmxhc3RfaXJxX3NlcW5vW3JpbmctPmlk XSA9IHNlcW5vOwo+ICsKPiArCXNwaW5fbG9ja19pcnFzYXZlKCZzY2hlZHVsZXItPmxvY2ssIGZs YWdzKTsKPiArCWk5MTVfc2NoZWR1bGVyX3NlcW5vX2NvbXBsZXRlKHJpbmcsIHNlcW5vKTsKPiAr CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjaGVkdWxlci0+bG9jaywgZmxhZ3MpOwo+ICsKPiAr CS8qIFhYWDogTmVlZCB0byBhbHNvIGNhbGwgaTkxNV9zY2hlZHVsZXJfcmVtb3ZlKCkgdmlhIHdv cmsgaGFuZGxlci4gKi8KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAraW50IGk5MTVfc2No ZWR1bGVyX3JlbW92ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSByaW5nLT5kZXYtPmRldl9wcml2YXRlOwo+ ICsJc3RydWN0IGk5MTVfc2NoZWR1bGVyICAgKnNjaGVkdWxlciA9IGRldl9wcml2LT5zY2hlZHVs ZXI7Cj4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgICpub2RlLCAqbm9kZV9u ZXh0Owo+ICsJdW5zaWduZWQgbG9uZyAgICAgICBmbGFnczsKPiArCWludCAgICAgICAgICAgICAg ICAgZmx5aW5nID0gMCwgcXVldWVkID0gMDsKPiArCWludCAgICAgICAgICAgICAgICAgcmV0ID0g MDsKPiArCWJvb2wgICAgICAgICAgICAgICAgZG9fc3VibWl0Owo+ICsJdWludDMyX3QgICAgICAg ICAgICBtaW5fc2Vxbm87Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFkICAgIHJlbW92ZTsKPiArCj4gKwlp ZiAobGlzdF9lbXB0eSgmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW3JpbmctPmlkXSkpCj4gKwkJcmV0 dXJuIDA7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJnNjaGVkdWxlci0+bG9jaywgZmxhZ3Mp Owo+ICsKPiArCS8qIC9pOTE1X3NjaGVkdWxlcl9kdW1wX2xvY2tlZChyaW5nLCAicmVtb3ZlL3By ZSIpOy8gKi8KPiArCj4gKwkvKgo+ICsJICogSW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHN5c3RlbSBp cyBpZGxlLCBzdGFydGluZyAnbWluX3NlcW5vJyBmcm9tIGEgYmlnCj4gKwkgKiBudW1iZXIgd2ls bCBjYXVzZSBhbGwgbm9kZXMgdG8gYmUgcmVtb3ZlZCBhcyB0aGV5IGFyZSBub3cgYmFjayB0bwo+ ICsJICogYmVpbmcgaW4tb3JkZXIuIEhvd2V2ZXIsIHRoaXMgd2lsbCBiZSBhIHByb2JsZW0gaWYg dGhlIGxhc3Qgb25lIHRvCj4gKwkgKiBjb21wbGV0ZSB3YXMgYWN0dWFsbHkgb3V0LW9mLW9yZGVy IGFzIHRoZSByaW5nIHNlcW5vIHZhbHVlIHdpbGwgYmUKPiArCSAqIGxvd2VyIHRoYW4gb25lIG9y IG1vcmUgY29tcGxldGVkIGJ1ZmZlcnMuIFRodXMgY29kZSBsb29raW5nIGZvciB0aGUKPiArCSAq IGNvbXBsZXRpb24gb2Ygc2FpZCBidWZmZXJzIHdpbGwgd2FpdCBmb3JldmVyLgo+ICsJICogSW5z dGVhZCwgdXNlIHRoZSBoYXJkd2FyZSBzZXFubyBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRoaXMg bWVhbnMKPiArCSAqIHRoYXQgc29tZSBidWZmZXJzIG1pZ2h0IGJlIGtlcHQgYXJvdW5kIGV2ZW4g aW4gYSBjb21wbGV0ZWx5IGlkbGUKPiArCSAqIHN5c3RlbSBidXQgaXQgc2hvdWxkIGd1YXJhbnRl ZSB0aGF0IG5vLW9uZSBldmVyIGdldHMgY29uZnVzZWQgd2hlbgo+ICsJICogd2FpdGluZyBmb3Ig YnVmZmVyIGNvbXBsZXRpb24uCj4gKwkgKi8KPiArCW1pbl9zZXFubyA9IHJpbmctPmdldF9zZXFu byhyaW5nLCB0cnVlKTsKPiArCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZzY2hlZHVs ZXItPm5vZGVfcXVldWVbcmluZy0+aWRdLCBsaW5rKSB7Cj4gKwkJaWYgKEk5MTVfU1FTX0lTX1FV RVVFRChub2RlKSkKPiArCQkJcXVldWVkKys7Cj4gKwkJZWxzZSBpZiAoSTkxNV9TUVNfSVNfRkxZ SU5HKG5vZGUpKQo+ICsJCQlmbHlpbmcrKzsKPiArCQllbHNlIGlmIChJOTE1X1NRU19JU19DT01Q TEVURShub2RlKSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWlmIChub2RlLT5wYXJhbXMucmVx dWVzdC0+c2Vxbm8gPT0gMCkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWlmICghaTkxNV9zZXFu b19wYXNzZWQobm9kZS0+cGFyYW1zLnJlcXVlc3QtPnNlcW5vLCBtaW5fc2Vxbm8pKQo+ICsJCQlt aW5fc2Vxbm8gPSBub2RlLT5wYXJhbXMucmVxdWVzdC0+c2Vxbm87Cj4gKwl9Cj4gKwo+ICsJSU5J VF9MSVNUX0hFQUQoJnJlbW92ZSk7Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwg bm9kZV9uZXh0LCAmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW3JpbmctPmlkXSwgbGluaykgewo+ICsJ CS8qCj4gKwkJICogT25seSByZW1vdmUgY29tcGxldGVkIG5vZGVzIHdoaWNoIGhhdmUgYSBsb3dl ciBzZXFubyB0aGFuCj4gKwkJICogYWxsIHBlbmRpbmcgbm9kZXMuIFdoaWxlIHRoZXJlIGlzIHRo ZSBwb3NzaWJpbGl0eSBvZiB0aGUKPiArCQkgKiByaW5nJ3Mgc2Vxbm8gY291bnRpbmcgYmFja3dh cmRzLCBhbGwgaGlnaGVyIGJ1ZmZlcnMgbXVzdAo+ICsJCSAqIGJlIHJlbWVtYmVyZWQgc28gdGhh dCB0aGUgJ2k5MTVfc2Vxbm9fcGFzc2VkKCknIHRlc3QgY2FuCj4gKwkJICogcmVwb3J0IHRoYXQg dGhleSBoYXZlIGluIGZhY3QgcGFzc2VkLgo+ICsJCSAqCj4gKwkJICogTkI6IFRoaXMgaXMgbm90 IHRydWUgZm9yICdkZWFkJyBub2Rlcy4gVGhlIEdQVSByZXNldCBjYXVzZXMKPiArCQkgKiB0aGUg c29mdHdhcmUgc2Vxbm8gdG8gcmVzdGFydCBmcm9tIGl0cyBpbml0aWFsIHZhbHVlLiBUaHVzCj4g KwkJICogdGhlIGRlYWQgbm9kZXMgbXVzdCBiZSByZW1vdmVkIGV2ZW4gdGhvdWdoIHRoZWlyIHNl cW5vIHZhbHVlcwo+ICsJCSAqIGFyZSBwb3RlbnRpYWxseSB2YXN0bHkgZ3JlYXRlciB0aGFuIHRo ZSBjdXJyZW50IHJpbmcgc2Vxbm8uCj4gKwkJICovCj4gKwkJaWYgKCFJOTE1X1NRU19JU19DT01Q TEVURShub2RlKSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWlmIChub2RlLT5zdGF0dXMgIT0g aTkxNV9zcXNfZGVhZCkgewo+ICsJCQlpZiAoaTkxNV9zZXFub19wYXNzZWQobm9kZS0+cGFyYW1z LnJlcXVlc3QtPnNlcW5vLCBtaW5fc2Vxbm8pICYmCj4gKwkJCSAgICAobm9kZS0+cGFyYW1zLnJl cXVlc3QtPnNlcW5vICE9IG1pbl9zZXFubykpCj4gKwkJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+ ICsJCWxpc3RfZGVsKCZub2RlLT5saW5rKTsKPiArCQlsaXN0X2FkZCgmbm9kZS0+bGluaywgJnJl bW92ZSk7Cj4gKwo+ICsJCS8qIFN0cmlwIHRoZSBkZXBlbmRlbmN5IGluZm8gd2hpbGUgdGhlIG11 dGV4IGlzIHN0aWxsIGxvY2tlZCAqLwo+ICsJCWk5MTVfc2NoZWR1bGVyX3JlbW92ZV9kZXBlbmRl bnQoc2NoZWR1bGVyLCBub2RlKTsKPiArCj4gKwkJY29udGludWU7Cj4gKwl9Cj4gKwo+ICsJLyoK PiArCSAqIE5vIGlkZWEgd2h5IGJ1dCB0aGlzIHNlZW1zIHRvIGNhdXNlIHByb2JsZW1zIG9jY2Fz aW9uYWxseS4KPiArCSAqIE5vdGUgdGhhdCB0aGUgJ2lycV9wdXQnIGNvZGUgaXMgaW50ZXJuYWxs eSByZWZlcmVuY2UgY291bnRlZAo+ICsJICogYW5kIHNwaW5fbG9ja2VkIHNvIGl0IHNob3VsZCBi ZSBzYWZlIHRvIGNhbGwuCj4gKwkgKi8KPiArCS8qaWYgKChzY2hlZHVsZXItPmZsYWdzW3Jpbmct PmlkXSAmIGk5MTVfc2ZfaW50ZXJydXB0c19lbmFibGVkKSAmJgo+ICsJICAgIChmaXJzdF9mbGln aHRbcmluZy0+aWRdID09IE5VTEwpKSB7Cj4gKwkJcmluZy0+aXJxX3B1dChyaW5nKTsKPiArCQlz Y2hlZHVsZXItPmZsYWdzW3JpbmctPmlkXSAmPSB+aTkxNV9zZl9pbnRlcnJ1cHRzX2VuYWJsZWQ7 Cj4gKwl9Ki8KPiArCj4gKwkvKiBMYXVuY2ggbW9yZSBwYWNrZXRzIG5vdz8gKi8KPiArCWRvX3N1 Ym1pdCA9IChxdWV1ZWQgPiAwKSAmJiAoZmx5aW5nIDwgc2NoZWR1bGVyLT5taW5fZmx5aW5nKTsK PiArCj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2hlZHVsZXItPmxvY2ssIGZsYWdzKTsK PiArCj4gKwlpZiAoZG9fc3VibWl0KQo+ICsJCXJldCA9IGk5MTVfc2NoZWR1bGVyX3N1Ym1pdChy aW5nLCB0cnVlKTsKPiArCj4gKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnJlbW92ZSkpIHsKPiArCQlu b2RlID0gbGlzdF9maXJzdF9lbnRyeSgmcmVtb3ZlLCB0eXBlb2YoKm5vZGUpLCBsaW5rKTsKPiAr CQlsaXN0X2RlbCgmbm9kZS0+bGluayk7Cj4gKwo+ICsJCS8qIFRoZSBiYXRjaCBidWZmZXIgbXVz dCBiZSB1bnBpbm5lZCBiZWZvcmUgaXQgaXMgdW5yZWZlcmVuY2VkCj4gKwkJICogb3RoZXJ3aXNl IHRoZSB1bnBpbiBmYWlscyB3aXRoIGEgbWlzc2luZyB2bWEhPyAqLwo+ICsJCWlmIChub2RlLT5w YXJhbXMuZGlzcGF0Y2hfZmxhZ3MgJiBJOTE1X0RJU1BBVENIX1NFQ1VSRSkKPiArCQkJaTkxNV9n ZW1fZXhlY2J1ZmZfcmVsZWFzZV9iYXRjaF9vYmoobm9kZS0+cGFyYW1zLmJhdGNoX29iaik7Cj4g Kwo+ICsJCS8qIEZyZWUgZXZlcnl0aGluZyB0aGF0IGlzIG93bmVkIGJ5IHRoZSBub2RlOiAqLwo+ ICsJCWk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2Uobm9kZS0+cGFyYW1zLnJlcXVlc3QpOwo+ ICsJCWtmcmVlKG5vZGUtPnBhcmFtcy5jbGlwcmVjdHMpOwo+ICsJCWtmcmVlKG5vZGUtPmRlcF9s aXN0KTsKPiArCQlrZnJlZShub2RlKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBpOTE1X3NjaGVkdWxlcl9wcmlvcml0eV9idW1wX2NsZWFyKHN0cnVj dCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1bGVyKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVs ZXJfcXVldWVfZW50cnkgKm5vZGU7Cj4gKwlpbnQgaTsKPiArCj4gKwkvKgo+ICsJICogRW5zdXJl IGNpcmN1bGFyIGRlcGVuZGVuY2llcyBkb24ndCBjYXVzZSBwcm9ibGVtcyBhbmQgdGhhdCBhIGJ1 bXAKPiArCSAqIGJ5IG9iamVjdCB1c2FnZSBvbmx5IGJ1bXBzIGVhY2ggdXNpbmcgYnVmZmVyIG9u Y2U6Cj4gKwkgKi8KPiArCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsrKSB7Cj4g KwkJbGlzdF9mb3JfZWFjaF9lbnRyeShub2RlLCAmc2NoZWR1bGVyLT5ub2RlX3F1ZXVlW2ldLCBs aW5rKQo+ICsJCQlub2RlLT5idW1wZWQgPSBmYWxzZTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGlj IGludCBpOTE1X3NjaGVkdWxlcl9wcmlvcml0eV9idW1wKHN0cnVjdCBpOTE1X3NjaGVkdWxlciAq c2NoZWR1bGVyLAo+ICsJCQkJCXN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqdGFy Z2V0LAo+ICsJCQkJCXVpbnQzMl90IGJ1bXApCj4gK3sKPiArCXVpbnQzMl90IG5ld19wcmlvcml0 eTsKPiArCWludCAgICAgIGksIGNvdW50Owo+ICsKPiArCWlmICh0YXJnZXQtPnByaW9yaXR5ID49 IHNjaGVkdWxlci0+cHJpb3JpdHlfbGV2ZWxfbWF4KQo+ICsJCXJldHVybiAxOwo+ICsKPiArCWlm ICh0YXJnZXQtPmJ1bXBlZCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwluZXdfcHJpb3JpdHkgPSB0 YXJnZXQtPnByaW9yaXR5ICsgYnVtcDsKPiArCWlmICgobmV3X3ByaW9yaXR5IDw9IHRhcmdldC0+ cHJpb3JpdHkpIHx8Cj4gKwkgICAgKG5ld19wcmlvcml0eSA+IHNjaGVkdWxlci0+cHJpb3JpdHlf bGV2ZWxfbWF4KSkKPiArCQl0YXJnZXQtPnByaW9yaXR5ID0gc2NoZWR1bGVyLT5wcmlvcml0eV9s ZXZlbF9tYXg7Cj4gKwllbHNlCj4gKwkJdGFyZ2V0LT5wcmlvcml0eSA9IG5ld19wcmlvcml0eTsK PiArCj4gKwljb3VudCA9IDE7Cj4gKwl0YXJnZXQtPmJ1bXBlZCA9IHRydWU7Cj4gKwo+ICsJZm9y IChpID0gMDsgaSA8IHRhcmdldC0+bnVtX2RlcHM7IGkrKykgewo+ICsJCWlmICghdGFyZ2V0LT5k ZXBfbGlzdFtpXSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWlmICh0YXJnZXQtPmRlcF9saXN0 W2ldLT5idW1wZWQpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQljb3VudCArPSBpOTE1X3NjaGVk dWxlcl9wcmlvcml0eV9idW1wKHNjaGVkdWxlciwKPiArCQkJCQkJICAgICAgdGFyZ2V0LT5kZXBf bGlzdFtpXSwKPiArCQkJCQkJICAgICAgYnVtcCk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGNvdW50 Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGk5MTVfc2NoZWR1bGVyX3BvcF9mcm9tX3F1ZXVlX2xv Y2tlZChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLAo+ICsJCQkJICAgIHN0cnVjdCBpOTE1 X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqKnBvcF9ub2RlLAo+ICsJCQkJICAgIHVuc2lnbmVkIGxv bmcgKmZsYWdzKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAgICAgICAgICAgICpk ZXZfcHJpdiA9IHJpbmctPmRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVs ZXIgICAgICAgICAgICAgICpzY2hlZHVsZXIgPSBkZXZfcHJpdi0+c2NoZWR1bGVyOwo+ICsJc3Ry dWN0IGk5MTVfc2NoZWR1bGVyX3F1ZXVlX2VudHJ5ICAqYmVzdDsKPiArCXN0cnVjdCBpOTE1X3Nj aGVkdWxlcl9xdWV1ZV9lbnRyeSAgKm5vZGU7Cj4gKwlpbnQgICAgIHJldDsKPiArCWludCAgICAg aTsKPiArCWJvb2wJYW55X3F1ZXVlZDsKPiArCWJvb2wJaGFzX2xvY2FsLCBoYXNfcmVtb3RlLCBv bmx5X3JlbW90ZTsKPiArCj4gKwkqcG9wX25vZGUgPSBOVUxMOwo+ICsJcmV0ID0gLUVOT0RBVEE7 Cj4gKwo+ICsJYW55X3F1ZXVlZCA9IGZhbHNlOwo+ICsJb25seV9yZW1vdGUgPSBmYWxzZTsKPiAr CWJlc3QgPSBOVUxMOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwgJnNjaGVkdWxl ci0+bm9kZV9xdWV1ZVtyaW5nLT5pZF0sIGxpbmspIHsKPiArCQlpZiAoIUk5MTVfU1FTX0lTX1FV RVVFRChub2RlKSkKPiArCQkJY29udGludWU7Cj4gKwkJYW55X3F1ZXVlZCA9IHRydWU7Cj4gKwo+ ICsJCWhhc19sb2NhbCAgPSBmYWxzZTsKPiArCQloYXNfcmVtb3RlID0gZmFsc2U7Cj4gKwkJZm9y IChpID0gMDsgaSA8IG5vZGUtPm51bV9kZXBzOyBpKyspIHsKPiArCQkJaWYgKCFpOTE1X3NjaGVk dWxlcl9pc19kZXBlbmRlbmN5X3ZhbGlkKG5vZGUsIGkpKQo+ICsJCQkJY29udGludWU7Cj4gKwo+ ICsJCQlpZiAobm9kZS0+ZGVwX2xpc3RbaV0tPnBhcmFtcy5yaW5nID09IG5vZGUtPnBhcmFtcy5y aW5nKQo+ICsJCQkJaGFzX2xvY2FsID0gdHJ1ZTsKPiArCQkJZWxzZQo+ICsJCQkJaGFzX3JlbW90 ZSA9IHRydWU7Cj4gKwkJfQo+ICsKPiArCQlpZiAoaGFzX3JlbW90ZSAmJiAhaGFzX2xvY2FsKQo+ ICsJCQlvbmx5X3JlbW90ZSA9IHRydWU7Cj4gKwo+ICsJCWlmICghaGFzX2xvY2FsICYmICFoYXNf cmVtb3RlKSB7Cj4gKwkJCWlmICghYmVzdCB8fAo+ICsJCQkgICAgKG5vZGUtPnByaW9yaXR5ID4g YmVzdC0+cHJpb3JpdHkpKQo+ICsJCQkJYmVzdCA9IG5vZGU7Cj4gKwkJfQo+ICsJfQo+ICsKPiAr CWlmIChiZXN0KSB7Cj4gKwkJbGlzdF9kZWwoJmJlc3QtPmxpbmspOwo+ICsKPiArCQlJTklUX0xJ U1RfSEVBRCgmYmVzdC0+bGluayk7Cj4gKwkJYmVzdC0+c3RhdHVzICA9IGk5MTVfc3FzX3BvcHBl ZDsKPiArCj4gKwkJcmV0ID0gMDsKPiArCX0gZWxzZSB7Cj4gKwkJLyogQ2FuIG9ubHkgZ2V0IGhl cmUgaWY6Cj4gKwkJICogKGEpIHRoZXJlIGFyZSBubyBidWZmZXJzIGluIHRoZSBxdWV1ZQo+ICsJ CSAqIChiKSBhbGwgcXVldWVkIGJ1ZmZlcnMgYXJlIGRlcGVuZGVudCBvbiBvdGhlciBidWZmZXJz Cj4gKwkJICogICAgIGUuZy4gb24gYSBidWZmZXIgdGhhdCBpcyBpbiBmbGlnaHQgb24gYSBkaWZm ZXJlbnQgcmluZwo+ICsJCSAqLwo+ICsJCWlmIChvbmx5X3JlbW90ZSkgewo+ICsJCQkvKiBUaGUg b25seSBkZXBlbmRlbnQgYnVmZmVycyBhcmUgb24gYW5vdGhlciByaW5nLiAqLwo+ICsJCQlyZXQg PSAtRUFHQUlOOwo+ICsJCX0gZWxzZSBpZiAoYW55X3F1ZXVlZCkgewo+ICsJCQkvKiBJdCBzZWVt cyB0aGF0IHNvbWV0aGluZyBoYXMgZ29uZSBob3JyaWJseSB3cm9uZyEgKi8KPiArCQkJRFJNX0VS Uk9SKCJCcm9rZW4gZGVwZW5kZW5jeSB0cmFja2luZyBvbiByaW5nICVkIVxuIiwKPiArCQkJCSAg KGludCkgcmluZy0+aWQpOwo+ICsJCX0KPiArCX0KPiArCj4gKwkvKiBpOTE1X3NjaGVkdWxlcl9k dW1wX3F1ZXVlX3BvcChyaW5nLCBiZXN0KTsgKi8KPiArCj4gKwkqcG9wX25vZGUgPSBiZXN0Owo+ ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpOTE1X3NjaGVkdWxlcl9zdWJt aXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywgYm9vbCB3YXNfbG9ja2VkKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2RldmljZSAgICpkZXYgPSByaW5nLT5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGk5MTVf c2NoZWR1bGVyICAgKnNjaGVkdWxlciA9IGRldl9wcml2LT5zY2hlZHVsZXI7Cj4gKwlzdHJ1Y3Qg aTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgICpub2RlOwo+ICsJdW5zaWduZWQgbG9uZyAgICAg ICBmbGFnczsKPiArCWludCAgICAgICAgICAgICAgICAgcmV0ID0gMCwgY291bnQgPSAwOwo+ICsK PiArCWlmICghd2FzX2xvY2tlZCkgewo+ICsJCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1 cHRpYmxlKGRldik7CgpOYWgsIHNjaGVkdWxlciBuZWVkcyBpdHMgb3duIGh3IGxvY2ssIG90aGVy d2lzZSBoZWxsIHdpbGwgYnJlYWsgbG9zZSB3aXRoCmxvY2tpbmcgaW52ZXJzaW9ucy4gV2UgbWln aHQgbmVlZCB0byBhZGQgZW5naW5lLT5od19sb2NrLgoKCj4gKwkJaWYgKHJldCkKPiArCQkJcmV0 dXJuIHJldDsKPiArCX0KPiArCj4gKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2LT5zdHJ1 Y3RfbXV0ZXgpKTsKPiArCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2NoZWR1bGVyLT5sb2NrLCBm bGFncyk7Cj4gKwo+ICsJLyogRmlyc3QgdGltZSBhcm91bmQsIGNvbXBsYWluIGlmIGFueXRoaW5n IHVuZXhwZWN0ZWQgb2NjdXJzOiAqLwo+ICsJcmV0ID0gaTkxNV9zY2hlZHVsZXJfcG9wX2Zyb21f cXVldWVfbG9ja2VkKHJpbmcsICZub2RlLCAmZmxhZ3MpOwo+ICsJaWYgKHJldCkgewo+ICsJCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjaGVkdWxlci0+bG9jaywgZmxhZ3MpOwo+ICsKPiArCQlp ZiAoIXdhc19sb2NrZWQpCj4gKwkJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ ICsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWRvIHsKPiArCQlCVUdfT04oIW5vZGUp Owo+ICsJCUJVR19PTihub2RlLT5wYXJhbXMucmluZyAhPSByaW5nKTsKPiArCQlCVUdfT04obm9k ZS0+c3RhdHVzICE9IGk5MTVfc3FzX3BvcHBlZCk7Cj4gKwkJY291bnQrKzsKPiArCj4gKwkJLyog VGhlIGNhbGwgdG8gcG9wIGFib3ZlIHdpbGwgaGF2ZSByZW1vdmVkIHRoZSBub2RlIGZyb20gdGhl Cj4gKwkJICogbGlzdC4gU28gYWRkIGl0IGJhY2sgaW4gYW5kIG1hcmsgaXQgYXMgaW4gZmxpZ2h0 LiAqLwo+ICsJCWk5MTVfc2NoZWR1bGVyX2ZseV9ub2RlKG5vZGUpOwo+ICsKPiArCQlzY2hlZHVs ZXItPmZsYWdzW3JpbmctPmlkXSB8PSBpOTE1X3NmX3N1Ym1pdHRpbmc7Cj4gKwkJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmc2NoZWR1bGVyLT5sb2NrLCBmbGFncyk7Cj4gKwkJcmV0ID0gZGV2X3By aXYtPmd0LmV4ZWNidWZfZmluYWwoJm5vZGUtPnBhcmFtcyk7Cj4gKwkJc3Bpbl9sb2NrX2lycXNh dmUoJnNjaGVkdWxlci0+bG9jaywgZmxhZ3MpOwo+ICsJCXNjaGVkdWxlci0+ZmxhZ3NbcmluZy0+ aWRdICY9IH5pOTE1X3NmX3N1Ym1pdHRpbmc7Cj4gKwo+ICsJCWlmIChyZXQpIHsKPiArCQkJYm9v bCByZXF1ZXVlID0gdHJ1ZTsKPiArCj4gKwkJCS8qIE9oIGRlYXIhIEVpdGhlciB0aGUgbm9kZSBp cyBicm9rZW4gb3IgdGhlIHJpbmcgaXMKPiArCQkJICogYnVzeS4gU28gbmVlZCB0byBraWxsIHRo ZSBub2RlIG9yIHJlcXVldWUgaXQgYW5kIHRyeQo+ICsJCQkgKiBhZ2FpbiBsYXRlciBhcyBhcHBy b3ByaWF0ZS4gKi8KPiArCj4gKwkJCXN3aXRjaCAoLXJldCkgewo+ICsJCQljYXNlIEVOT0RFVjoK PiArCQkJY2FzZSBFTk9FTlQ6Cj4gKwkJCQkvKiBGYXRhbCBlcnJvcnMuIEtpbGwgdGhlIG5vZGUu ICovCj4gKwkJCQlyZXF1ZXVlID0gZmFsc2U7Cj4gKwkJCWJyZWFrOwo+ICsKPiArCQkJY2FzZSBF QUdBSU46Cj4gKwkJCWNhc2UgRUJVU1k6Cj4gKwkJCWNhc2UgRUlPOgo+ICsJCQljYXNlIEVOT01F TToKPiArCQkJY2FzZSBFUkVTVEFSVFNZUzoKPiArCQkJY2FzZSBFSU5UUjoKPiArCQkJCS8qIFN1 cHBvc2VkbHkgcmVjb3ZlcmFibGUgZXJyb3JzLiAqLwo+ICsJCQlicmVhazsKPiArCj4gKwkJCWRl ZmF1bHQ6Cj4gKwkJCQlEUk1fREVCVUdfRFJJVkVSKCI8JXM+IEdvdCB1bmV4cGVjdGVkIGVycm9y IGZyb20gZXhlY2ZpbmFsKCk6ICVkIVxuIiwKPiArCQkJCQkJIHJpbmctPm5hbWUsIHJldCk7Cj4g KwkJCQkvKiBBc3N1bWUgaXQgaXMgcmVjb3ZlcmFibGUgYW5kIGhvcGUgZm9yIHRoZSBiZXN0LiAq Lwo+ICsJCQlicmVhazsKPiArCQkJfQo+ICsKPiArCQkJaWYgKHJlcXVldWUpIHsKPiArCQkJCWk5 MTVfc2NoZWR1bGVyX25vZGVfcmVxdWV1ZShub2RlKTsKPiArCQkJCS8qIE5vIHBvaW50IHNwaW5u aW5nIGlmIHRoZSByaW5nIGlzIGN1cnJlbnRseQo+ICsJCQkJICogdW5hdmFpbGFibGUgc28ganVz dCBnaXZlIHVwIGFuZCBjb21lIGJhY2sKPiArCQkJCSAqIGxhdGVyLiAqLwo+ICsJCQkJYnJlYWs7 Cj4gKwkJCX0gZWxzZQo+ICsJCQkJaTkxNV9zY2hlZHVsZXJfbm9kZV9raWxsKG5vZGUpOwo+ICsJ CX0KPiArCj4gKwkJLyogS2VlcCBsYXVuY2hpbmcgdW50aWwgdGhlIHNreSBpcyBzdWZmaWNpZW50 bHkgZnVsbC4gKi8KPiArCQlpZiAoaTkxNV9zY2hlZHVsZXJfY291bnRfZmx5aW5nKHNjaGVkdWxl ciwgcmluZykgPj0KPiArCQkJCQkJc2NoZWR1bGVyLT5taW5fZmx5aW5nKQo+ICsJCQlicmVhazsK PiArCj4gKwkJcmV0ID0gaTkxNV9zY2hlZHVsZXJfcG9wX2Zyb21fcXVldWVfbG9ja2VkKHJpbmcs ICZub2RlLCAmZmxhZ3MpOwo+ICsJfSB3aGlsZSAocmV0ID09IDApOwo+ICsKPiArCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJnNjaGVkdWxlci0+bG9jaywgZmxhZ3MpOwo+ICsKPiArCWlmICghd2Fz X2xvY2tlZCkKPiArCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiArCj4gKwkv KiBEb24ndCBjb21wbGFpbiBhYm91dCBub3QgYmVpbmcgYWJsZSB0byBzdWJtaXQgZXh0cmEgZW50 cmllcyAqLwo+ICsJaWYgKHJldCA9PSAtRU5PREFUQSkKPiArCQlyZXQgPSAwOwo+ICsKPiArCXJl dHVybiAocmV0IDwgMCkgPyByZXQgOiBjb3VudDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpOTE1 X3NjaGVkdWxlcl9yZW1vdmVfZGVwZW5kZW50KHN0cnVjdCBpOTE1X3NjaGVkdWxlciAqc2NoZWR1 bGVyLAo+ICsJCQkJCSAgIHN0cnVjdCBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9lbnRyeSAqcmVtb3Zl KQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgICpub2RlOwo+ICsJ aW50ICAgICBpLCByOwo+ICsJaW50ICAgICBjb3VudCA9IDA7Cj4gKwo+ICsJZm9yIChpID0gMDsg aSA8IHJlbW92ZS0+bnVtX2RlcHM7IGkrKykKPiArCQlpZiAoKHJlbW92ZS0+ZGVwX2xpc3RbaV0p ICYmCj4gKwkJICAgICghSTkxNV9TUVNfSVNfQ09NUExFVEUocmVtb3ZlLT5kZXBfbGlzdFtpXSkp KQo+ICsJCQljb3VudCsrOwo+ICsJQlVHX09OKGNvdW50KTsKPiArCj4gKwlmb3IgKHIgPSAwOyBy IDwgSTkxNV9OVU1fUklOR1M7IHIrKykgewo+ICsJCWxpc3RfZm9yX2VhY2hfZW50cnkobm9kZSwg JnNjaGVkdWxlci0+bm9kZV9xdWV1ZVtyXSwgbGluaykgewo+ICsJCQlmb3IgKGkgPSAwOyBpIDwg bm9kZS0+bnVtX2RlcHM7IGkrKykgewo+ICsJCQkJaWYgKG5vZGUtPmRlcF9saXN0W2ldICE9IHJl bW92ZSkKPiArCQkJCQljb250aW51ZTsKPiArCj4gKwkJCQlub2RlLT5kZXBfbGlzdFtpXSA9IE5V TEw7Cj4gKwkJCX0KPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuaCBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAuLjBjNWZjN2YKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9zY2hlZHVsZXIuaAo+IEBAIC0wLDAgKzEsOTEgQEAKPiArLyoKPiArICogQ29w eXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsg Kgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVk ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29m dHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xV RElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ LAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElB QklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ U0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdB UkUuCj4gKyAqCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfSTkxNV9TQ0hFRFVMRVJfSF8KPiArI2Rl ZmluZSBfSTkxNV9TQ0hFRFVMRVJfSF8KPiArCj4gK2VudW0gaTkxNV9zY2hlZHVsZXJfcXVldWVf c3RhdHVzIHsKPiArCS8qIExpbWJvOiAqLwo+ICsJaTkxNV9zcXNfbm9uZSA9IDAsCj4gKwkvKiBO b3QgeWV0IHN1Ym1pdHRlZCB0byBoYXJkd2FyZTogKi8KPiArCWk5MTVfc3FzX3F1ZXVlZCwKPiAr CS8qIFBvcHBlZCBmcm9tIHF1ZXVlLCByZWFkeSB0byBmbHk6ICovCj4gKwlpOTE1X3Nxc19wb3Bw ZWQsCj4gKwkvKiBTZW50IHRvIGhhcmR3YXJlIGZvciBwcm9jZXNzaW5nOiAqLwo+ICsJaTkxNV9z cXNfZmx5aW5nLAo+ICsJLyogRmluaXNoZWQgcHJvY2Vzc2luZyBvbiB0aGUgaGFyZHdhcmU6ICov Cj4gKwlpOTE1X3Nxc19jb21wbGV0ZSwKPiArCS8qIEtpbGxlZCBieSBjYXRhc3Ryb3BoaWMgc3Vi bWlzc2lvbiBmYWlsdXJlOiAqLwo+ICsJaTkxNV9zcXNfZGVhZCwKPiArCS8qIExpbWl0IHZhbHVl IGZvciB1c2Ugd2l0aCBhcnJheXMvbG9vcHMgKi8KPiArCWk5MTVfc3FzX01BWAo+ICt9Owo+ICsK PiArI2RlZmluZSBJOTE1X1NRU19JU19RVUVVRUQobm9kZSkJKCgobm9kZSktPnN0YXR1cyA9PSBp OTE1X3Nxc19xdWV1ZWQpKQo+ICsjZGVmaW5lIEk5MTVfU1FTX0lTX0ZMWUlORyhub2RlKQkoKChu b2RlKS0+c3RhdHVzID09IGk5MTVfc3FzX2ZseWluZykpCj4gKyNkZWZpbmUgSTkxNV9TUVNfSVNf Q09NUExFVEUobm9kZSkJKCgobm9kZSktPnN0YXR1cyA9PSBpOTE1X3Nxc19jb21wbGV0ZSkgfHwg XAo+ICsJCQkJCSAoKG5vZGUpLT5zdGF0dXMgPT0gaTkxNV9zcXNfZGVhZCkpCj4gKwo+ICtzdHJ1 Y3QgaTkxNV9zY2hlZHVsZXJfb2JqX2VudHJ5IHsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICAgICAgICAgICpvYmo7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgaTkxNV9zY2hlZHVsZXJfcXVl dWVfZW50cnkgewo+ICsJc3RydWN0IGk5MTVfZXhlY2J1ZmZlcl9wYXJhbXMgICAgICAgcGFyYW1z Owo+ICsJdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHk7Cj4gKwlz dHJ1Y3QgaTkxNV9zY2hlZHVsZXJfb2JqX2VudHJ5ICAgICAqc2F2ZWRfb2JqZWN0czsKPiArCWlu dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9vYmpzOwo+ICsJYm9vbCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVtcGVkOwo+ICsJc3RydWN0IGk5MTVfc2NoZWR1 bGVyX3F1ZXVlX2VudHJ5ICAgKipkZXBfbGlzdDsKPiArCWludCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG51bV9kZXBzOwo+ICsJZW51bSBpOTE1X3NjaGVkdWxlcl9xdWV1ZV9zdGF0 dXMgICAgc3RhdHVzOwo+ICsJc3RydWN0IHRpbWVzcGVjICAgICAgICAgICAgICAgICAgICAgc3Rh bXA7Cj4gKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgICAgICAgICBsaW5rOwo+ICsJdWlu dDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVyX2luZGV4Owo+ICt9Owo+ ICsKPiArc3RydWN0IGk5MTVfc2NoZWR1bGVyIHsKPiArCXN0cnVjdCBsaXN0X2hlYWQgICAgbm9k ZV9xdWV1ZVtJOTE1X05VTV9SSU5HU107Cj4gKwl1aW50MzJfdCAgICAgICAgICAgIGZsYWdzW0k5 MTVfTlVNX1JJTkdTXTsKPiArCXNwaW5sb2NrX3QgICAgICAgICAgbG9jazsKPiArCXVpbnQzMl90 ICAgICAgICAgICAgaW5kZXg7Cj4gKwl1aW50MzJfdCAgICAgICAgICAgIGxhc3RfaXJxX3NlcW5v W0k5MTVfTlVNX1JJTkdTXTsKPiArCj4gKwkvKiBUdW5pbmcgcGFyYW1ldGVyczogKi8KPiArCXVp bnQzMl90ICAgICAgICAgICAgcHJpb3JpdHlfbGV2ZWxfbWF4Owo+ICsJdWludDMyX3QgICAgICAg ICAgICBwcmlvcml0eV9sZXZlbF9wcmVlbXB0Owo+ICsJdWludDMyX3QgICAgICAgICAgICBtaW5f Zmx5aW5nOwo+ICt9Owo+ICsKPiArLyogRmxhZyBiaXRzIGZvciBpOTE1X3NjaGVkdWxlcjo6Zmxh Z3MgKi8KPiArZW51bSB7Cj4gKwlpOTE1X3NmX2ludGVycnVwdHNfZW5hYmxlZCAgPSAoMSA8PCAw KSwKPiArCWk5MTVfc2Zfc3VibWl0dGluZyAgICAgICAgICA9ICgxIDw8IDEpLAo+ICt9Owo+ICsK PiAraW50ICAgICAgICAgaTkxNV9zY2hlZHVsZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KTsKPiAraW50ICAgICAgICAgaTkxNV9zY2hlZHVsZXJfcXVldWVfZXhlY2J1ZmZlcihzdHJ1Y3Qg aTkxNV9zY2hlZHVsZXJfcXVldWVfZW50cnkgKnFlKTsKPiAraW50ICAgICAgICAgaTkxNV9zY2hl ZHVsZXJfaGFuZGxlX2lycShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKTsKPiArCj4gKyNl bmRpZiAgLyogX0k5MTVfU0NIRURVTEVSX0hfICovCj4gLS0gCj4gMS45LjEKPiAKPiBfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWls aW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cDovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAoKLS0gCkRhbmllbCBW ZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZm d2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCklu dGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==