From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 10/15] drm/i915: Implementation of GuC client Date: Mon, 6 Jul 2015 16:10:32 +0200 Message-ID: <20150706141032.GG2156@phenom.ffwll.local> References: <1435926637-30892-1-git-send-email-david.s.gordon@intel.com> <1435926637-30892-11-git-send-email-david.s.gordon@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wg0-f48.google.com (mail-wg0-f48.google.com [74.125.82.48]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1A4766E8BA for ; Mon, 6 Jul 2015 07:07:46 -0700 (PDT) Received: by wgck11 with SMTP id k11so141466700wgc.0 for ; Mon, 06 Jul 2015 07:07:44 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1435926637-30892-11-git-send-email-david.s.gordon@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Dave Gordon Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gRnJpLCBKdWwgMDMsIDIwMTUgYXQgMDE6MzA6MzJQTSArMDEwMCwgRGF2ZSBHb3Jkb24gd3Jv dGU6Cj4gQSBHdUMgY2xpZW50IGhhcyBpdHMgb3duIGRvb3JiZWxsIGFuZCB3b3JrcXVldWUuIEl0 IG1haW50YWlucyB0aGUKPiBkb29yYmVsbCBjYWNoZSBsaW5lLCBwcm9jZXNzIGRlc2NyaXB0aW9u IG9iamVjdCBhbmQgd29yayBxdWV1ZSBpdGVtLgo+IAo+IEEgZGVmYXVsdCBndWNfY2xpZW50IGlz IGNyZWF0ZWQgZm9yIHRoZSBpOTE1IGRyaXZlciB0byB1c2UgZm9yCj4gbm9ybWFsLXByaW9yaXR5 IGluLW9yZGVyIHN1Ym1pc3Npb24uCj4gCj4gTm90ZSB0aGF0IHRoZSBjcmVhdGVkIGNsaWVudCBp cyBub3QgeWV0IHJlYWR5IGZvciB1c2U7IGRvb3JiZWxsCj4gYWxsb2NhdGlvbiB3aWxsIGZhaWwg YXMgd2UgaGF2ZW4ndCB5ZXQgbGlua2VkIHRoZSBHdUMncyBjb250ZXh0Cj4gZGVzY3JpcHRvciB0 byB0aGUgZGVmYXVsdCBjb250ZXh0cyBmb3IgZWFjaCByaW5nIChzZWUgbGF0ZXIgcGF0Y2gpLgo+ IEhvd2V2ZXIgdGhlIGRyaXZlciB3aWxsIHN0aWxsIGJlIHVzYWJsZSwgYXV0b21hdGljYWxseSBm YWxsaW5nCj4gYmFjayB0byBleGVjbGlzdCBtb2RlLgo+IAo+IHYyOgo+ICAgICBEZWZlciBhZGRp bmcgc3RydWN0dXJlIG1lbWJlcnMgdW50aWwgbmVlZGVkIFtDaHJpcyBXaWxzb25dCj4gICAgIFJh dGlvbmFsaXNlIHR5cGUgZGVjbGFyYXRpb25zIFtDaHJpcyBXaWxzb25dCj4gCj4gSXNzdWU6IFZJ Wi00ODg0Cj4gU2lnbmVkLW9mZi1ieTogQWxleCBEYWkgPHl1LmRhaUBpbnRlbC5jb20+Cj4gU2ln bmVkLW9mZi1ieTogRGF2ZSBHb3Jkb24gPGRhdmlkLnMuZ29yZG9uQGludGVsLmNvbT4KPiAtLS0K PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jIHwgNjYxICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1 Yy5oICAgICAgICAgICB8ICA0MyArKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNf bG9hZGVyLmMgICAgfCAgMTAgKwo+ICAzIGZpbGVzIGNoYW5nZWQsIDcxNCBpbnNlcnRpb25zKCsp Cj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Np b24uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYwo+IGluZGV4 IGU5ZDQ2ZDYuLjNjMjhjOGIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9ndWNfc3VibWlzc2lvbi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNf c3VibWlzc2lvbi5jCj4gQEAgLTI3LDYgKzI3LDUyNCBAQAo+ICAjaW5jbHVkZSAiaW50ZWxfZ3Vj LmgiCj4gIAo+ICAvKioKPiArICogRE9DOiBHdUMgQ2xpZW50CgpZb3UgbmVlZCB0byBwdWxsIGFs bCB5b3VyIHNoaW55IG5ldyBrZXJuZWxkb2MgaW50byB0aGUgZHJtLnRtcGwsIG90aGVyd2lzZQpp dCB3b24ndCBzaG93IHVwLiBZb3UgY2FuIGJ1aWxkIHRoZSBkcm0vaTkxNSBkb2Nib29rIHdpdGgK CiQgbWFrZSBodG1sZG9jcwoKTG9va2luZyBhdCB3aGF0IHdlIGhhdmUgcmlnaHQgbm93IGZvciBn ZW0gYSBzZWN0aW9uIG5leHQgdG8gdGhlIGV4ZWNsaXN0Cm9uZSB3b3VsZCBmaXQgYmVzdCBJIHRo aW5rLgoKVGhhbmtzLCBEYW5pZWwKCj4gKyAqCj4gKyAqIGk5MTVfZ3VjX2NsaWVudDoKPiArICog V2UgdXNlIHRoZSB0ZXJtIGNsaWVudCB0byBhdm9pZCBjb25mdXNpb24gd2l0aCBjb250ZXh0cy4g QSBpOTE1X2d1Y19jbGllbnQgaXMKPiArICogZXF1aXZhbGVudCB0byBHdUMgb2JqZWN0IGd1Y19j b250ZXh0X2Rlc2MuIFRoaXMgY29udGV4dCBkZXNjcmlwdG9yIGlzCj4gKyAqIGFsbG9jYXRlZCBm cm9tIGEgcG9vbCBvZiAxMDI0IGVudHJpZXMuIEtlcm5lbCBkcml2ZXIgd2lsbCBhbGxvY2F0ZSBk b29yYmVsbAo+ICsgKiBhbmQgd29ya3F1ZXVlIGZvciBpdC4gQWxzbyB0aGUgcHJvY2VzcyBkZXNj cmlwdG9yIChndWNfcHJvY2Vzc19kZXNjKSwgd2hpY2gKPiArICogaXMgbWFwcGVkIHRvIGNsaWVu dCBzcGFjZS4gU28gdGhlIGNsaWVudCBjYW4gd3JpdGUgV29yayBJdGVtIHRoZW4gcmluZyB0aGUK PiArICogZG9vcmJlbGwuCj4gKyAqCj4gKyAqIFRvIHNpbXBsaWZ5IHRoZSBpbXBsZW1lbnRhdGlv biwgd2UgYWxsb2NhdGUgb25lIGdlbSBvYmplY3QgdGhhdCBjb250YWlucyBhbGwKPiArICogcGFn ZXMgZm9yIGRvb3JiZWxsLCBwcm9jZXNzIGRlc2NyaXB0b3IgYW5kIHdvcmtxdWV1ZS4KPiArICoK PiArICogVGhlIFNjcmF0Y2ggcmVnaXN0ZXJzOgo+ICsgKiBUaGVyZSBhcmUgMTYgTU1JTy1iYXNl ZCByZWdpc3RlcnMgc3RhcnQgZnJvbSAweEMxODAuIFRoZSBrZXJuZWwgZHJpdmVyIHdyaXRlcwo+ ICsgKiBhIHZhbHVlIHRvIHRoZSBhY3Rpb24gcmVnaXN0ZXIgKFNPRlRfU0NSQVRDSF8wKSBhbG9u ZyB3aXRoIGFueSBkYXRhLiBJdCB0aGVuCj4gKyAqIHRyaWdnZXJzIGFuIGludGVycnVwdCBvbiB0 aGUgR3VDIHZpYSBhbm90aGVyIHJlZ2lzdGVyIHdyaXRlICgweEM0QzgpLgo+ICsgKiBGaXJtd2Fy ZSB3cml0ZXMgYSBzdWNjZXNzL2ZhaWwgY29kZSBiYWNrIHRvIHRoZSBhY3Rpb24gcmVnaXN0ZXIg YWZ0ZXIKPiArICogcHJvY2Vzc2VzIHRoZSByZXF1ZXN0LiBUaGUga2VybmVsIGRyaXZlciBwb2xs cyB3YWl0aW5nIGZvciB0aGlzIHVwZGF0ZSBhbmQKPiArICogdGhlbiBwcm9jZWVkcy4KPiArICog U2VlIGhvc3QyZ3VjX2FjdGlvbigpCj4gKyAqCj4gKyAqIERvb3JiZWxsczoKPiArICogRG9vcmJl bGxzIGFyZSBpbnRlcnJ1cHRzIHRvIHVLZXJuZWwuIEEgZG9vcmJlbGwgaXMgYSBzaW5nbGUgY2Fj aGUgbGluZSAoUVcpCj4gKyAqIG1hcHBlZCBpbnRvIHByb2Nlc3Mgc3BhY2UuCj4gKyAqCj4gKyAq IFdvcmsgSXRlbXM6Cj4gKyAqIFRoZXJlIGFyZSBzZXZlcmFsIHR5cGVzIG9mIHdvcmsgaXRlbXMg dGhhdCB0aGUgaG9zdCBtYXkgcGxhY2UgaW50byBhCj4gKyAqIHdvcmtxdWV1ZSwgZWFjaCB3aXRo IGl0cyBvd24gcmVxdWlyZW1lbnRzIGFuZCBsaW1pdGF0aW9ucy4gQ3VycmVudGx5IG9ubHkKPiAr ICogV1FfVFlQRV9JTk9SREVSIGlzIG5lZWRlZCB0byBzdXBwb3J0IGxlZ2FjeSBzdWJtaXNzaW9u IHZpYSBHdUMsIHdoaWNoCj4gKyAqIHJlcHJlc2VudHMgaW4tb3JkZXIgcXVldWUuIFRoZSBrZXJu ZWwgZHJpdmVyIHBhY2tzIHJpbmcgdGFpbCBwb2ludGVyIGFuZCBhbgo+ICsgKiBFTFNQIGNvbnRl eHQgZGVzY3JpcHRvciBkd29yZCBpbnRvIFdvcmsgSXRlbS4KPiArICogU2VlIGd1Y19hZGRfd29y a3F1ZXVlX2l0ZW0oKQo+ICsgKgo+ICsgKi8KPiArCj4gKy8qCj4gKyAqIFJlYWQgR3VDIGNvbW1h bmQvc3RhdHVzIHJlZ2lzdGVyIChTT0ZUX1NDUkFUQ0hfMCkKPiArICogUmV0dXJuIHRydWUgaWYg aXQgY29udGFpbnMgYSByZXNwb25zZSByYXRoZXIgdGhhbiBhIGNvbW1hbmQKPiArICovCj4gK3N0 YXRpYyBpbmxpbmUgYm9vbCBob3N0Mmd1Y19hY3Rpb25fcmVzcG9uc2Uoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAo+ICsJCQkJCSAgICB1MzIgKnN0YXR1cykKPiArewo+ICsJdTMy IHZhbCA9IEk5MTVfUkVBRChTT0ZUX1NDUkFUQ0goMCkpOwo+ICsJKnN0YXR1cyA9IHZhbDsKPiAr CXJldHVybiBHVUMySE9TVF9JU19SRVNQT05TRSh2YWwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGhvc3QyZ3VjX2FjdGlvbihzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIHUzMiAqZGF0YSwgdTMyIGxl bikKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3VjX3RvX2k5 MTUoZ3VjKTsKPiArCXUzMiBzdGF0dXM7Cj4gKwlpbnQgaTsKPiArCWludCByZXQ7Cj4gKwo+ICsJ aWYgKFdBUk5fT04obGVuIDwgMSB8fCBsZW4gPiAxNSkpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4g Kwo+ICsJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+Z3VjLmhvc3QyZ3VjX2xvY2spOwo+ICsKPiArCWRl dl9wcml2LT5ndWMuYWN0aW9uX2NvdW50ICs9IDE7Cj4gKwlkZXZfcHJpdi0+Z3VjLmFjdGlvbl9j bWQgPSBkYXRhWzBdOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKPiArCQlJOTE1 X1dSSVRFKFNPRlRfU0NSQVRDSChpKSwgZGF0YVtpXSk7Cj4gKwo+ICsJUE9TVElOR19SRUFEKFNP RlRfU0NSQVRDSChpIC0gMSkpOwo+ICsKPiArCUk5MTVfV1JJVEUoSE9TVDJHVUNfSU5URVJSVVBU LCBIT1NUMkdVQ19UUklHR0VSKTsKPiArCj4gKwlyZXQgPSB3YWl0X2Zvcl9hdG9taWMoaG9zdDJn dWNfYWN0aW9uX3Jlc3BvbnNlKGRldl9wcml2LCAmc3RhdHVzKSwgMTApOwo+ICsJaWYgKHN0YXR1 cyAhPSBHVUMySE9TVF9TVEFUVVNfU1VDQ0VTUykgewo+ICsJCS8qIGVpdGhlciBHdUMgZG9lc24n dCByZXNwb25kLCB3aGljaCBpcyBhIFRJTUVPVVQsCj4gKwkJICogb3IgYSBmYWlsdXJlIGNvZGUg aXMgcmV0dXJuZWQuICovCj4gKwkJaWYgKHJldCAhPSAtRVRJTUVET1VUKQo+ICsJCQlyZXQgPSAt RUlPOwo+ICsKPiArCQlEUk1fRVJST1IoIkdVQzogaG9zdDJndWMgYWN0aW9uIDB4JVggZmFpbGVk LiByZXQ9JWQgIgo+ICsJCQkJInN0YXR1cz0weCUwOFggcmVzcG9uc2U9MHglMDhYXG4iLAo+ICsJ CQkJZGF0YVswXSwgcmV0LCBzdGF0dXMsCj4gKwkJCQlJOTE1X1JFQUQoU09GVF9TQ1JBVENIKDE1 KSkpOwo+ICsKPiArCQlkZXZfcHJpdi0+Z3VjLmFjdGlvbl9mYWlsICs9IDE7Cj4gKwkJZGV2X3By aXYtPmd1Yy5hY3Rpb25fZXJyID0gcmV0Owo+ICsJfQo+ICsJZGV2X3ByaXYtPmd1Yy5hY3Rpb25f c3RhdHVzID0gc3RhdHVzOwo+ICsKPiArCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+Z3VjLmhvc3Qy Z3VjX2xvY2spOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qCj4gKyAqIFRlbGwg dGhlIEd1QyB0byBhbGxvY2F0ZSBvciBkZWFsbG9jYXRlIGEgc3BlY2lmaWMgZG9vcmJlbGwKPiAr ICovCj4gKwo+ICtzdGF0aWMgaW50IGhvc3QyZ3VjX2FsbG9jYXRlX2Rvb3JiZWxsKHN0cnVjdCBp bnRlbF9ndWMgKmd1YywKPiArCQkJCSAgICAgIHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVu dCkKPiArewo+ICsJdTMyIGRhdGFbMl07Cj4gKwo+ICsJZGF0YVswXSA9IEhPU1QyR1VDX0FDVElP Tl9BTExPQ0FURV9ET09SQkVMTDsKPiArCWRhdGFbMV0gPSBjbGllbnQtPmN0eF9pbmRleDsKPiAr Cj4gKwlyZXR1cm4gaG9zdDJndWNfYWN0aW9uKGd1YywgZGF0YSwgMik7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgaG9zdDJndWNfcmVsZWFzZV9kb29yYmVsbChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMs Cj4gKwkJCQkgICAgIHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudCkKPiArewo+ICsJdTMy IGRhdGFbMl07Cj4gKwo+ICsJZGF0YVswXSA9IEhPU1QyR1VDX0FDVElPTl9ERUFMTE9DQVRFX0RP T1JCRUxMOwo+ICsJZGF0YVsxXSA9IGNsaWVudC0+Y3R4X2luZGV4Owo+ICsKPiArCXJldHVybiBo b3N0Mmd1Y19hY3Rpb24oZ3VjLCBkYXRhLCAyKTsKPiArfQo+ICsKPiArLyoKPiArICogSW5pdGlh bGlzZSwgdXBkYXRlLCBvciBjbGVhciBkb29yYmVsbCBkYXRhIHNoYXJlZCB3aXRoIHRoZSBHdUMK PiArICoKPiArICogVGhlc2UgZnVuY3Rpb25zIG1vZGlmeSBzaGFyZWQgZGF0YSBhbmQgc28gbmVl ZCBhY2Nlc3MgdG8gdGhlIG1hcHBlZAo+ICsgKiBjbGllbnQgb2JqZWN0IHdoaWNoIGNvbnRhaW5z IHRoZSBwYWdlIGJlaW5nIHVzZWQgZm9yIHRoZSBkb29yYmVsbAo+ICsgKi8KPiArCj4gK3N0YXRp YyB2b2lkIGd1Y19pbml0X2Rvb3JiZWxsKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywKPiArCQkJICAg ICAgc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50KQo+ICt7Cj4gKwlzdHJ1Y3QgZ3VjX2Rv b3JiZWxsX2luZm8gKmRvb3JiZWxsOwo+ICsJdm9pZCAqYmFzZTsKPiArCj4gKwliYXNlID0ga21h cF9hdG9taWMoaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKGNsaWVudC0+Y2xpZW50X29iaiwgMCkp Owo+ICsJZG9vcmJlbGwgPSBiYXNlICsgY2xpZW50LT5kb29yYmVsbF9vZmZzZXQ7Cj4gKwo+ICsJ ZG9vcmJlbGwtPmRiX3N0YXR1cyA9IDE7Cj4gKwlkb29yYmVsbC0+Y29va2llID0gMDsKPiArCj4g KwlrdW5tYXBfYXRvbWljKGJhc2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGd1Y19yaW5nX2Rv b3JiZWxsKHN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmdjKQo+ICt7Cj4gKwlzdHJ1Y3QgZ3VjX3By b2Nlc3NfZGVzYyAqZGVzYzsKPiArCXVuaW9uIGd1Y19kb29yYmVsbF9xdyBkYl9jbXAsIGRiX2V4 YywgZGJfcmV0Owo+ICsJdW5pb24gZ3VjX2Rvb3JiZWxsX3F3ICpkYjsKPiArCXZvaWQgKmJhc2U7 Cj4gKwlpbnQgYXR0ZW1wdCA9IDIsIHJldCA9IC1FQUdBSU47Cj4gKwo+ICsJYmFzZSA9IGttYXBf YXRvbWljKGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZShnYy0+Y2xpZW50X29iaiwgMCkpOwo+ICsJ ZGVzYyA9IGJhc2UgKyBnYy0+cHJvY19kZXNjX29mZnNldDsKPiArCj4gKwkvKiBVcGRhdGUgdGhl IHRhaWwgc28gaXQgaXMgdmlzaWJsZSB0byBHdUMgKi8KPiArCWRlc2MtPnRhaWwgPSBnYy0+d3Ff dGFpbDsKPiArCj4gKwkvKiBjdXJyZW50IGNvb2tpZSAqLwo+ICsJZGJfY21wLmRiX3N0YXR1cyA9 IEdVQ19ET09SQkVMTF9FTkFCTEVEOwo+ICsJZGJfY21wLmNvb2tpZSA9IGdjLT5jb29raWU7Cj4g Kwo+ICsJLyogY29va2llIHRvIGJlIHVwZGF0ZWQgKi8KPiArCWRiX2V4Yy5kYl9zdGF0dXMgPSBH VUNfRE9PUkJFTExfRU5BQkxFRDsKPiArCWRiX2V4Yy5jb29raWUgPSBnYy0+Y29va2llICsgMTsK PiArCWlmIChkYl9leGMuY29va2llID09IDApCj4gKwkJZGJfZXhjLmNvb2tpZSA9IDE7Cj4gKwo+ ICsJLyogcG9pbnRlciBvZiBjdXJyZW50IGRvb3JiZWxsIGNhY2hlbGluZSAqLwo+ICsJZGIgPSBi YXNlICsgZ2MtPmRvb3JiZWxsX29mZnNldDsKPiArCj4gKwl3aGlsZSAoYXR0ZW1wdC0tKSB7Cj4g KwkJLyogbGV0cyByaW5nIHRoZSBkb29yYmVsbCAqLwo+ICsJCWRiX3JldC52YWx1ZV9xdyA9IGF0 b21pYzY0X2NtcHhjaGcoKGF0b21pYzY0X3QgKilkYiwKPiArCQkJZGJfY21wLnZhbHVlX3F3LCBk Yl9leGMudmFsdWVfcXcpOwo+ICsKPiArCQkvKiBpZiB0aGUgZXhjaGFuZ2Ugd2FzIHN1Y2Nlc3Nm dWxseSBleGVjdXRlZCAqLwo+ICsJCWlmIChkYl9yZXQudmFsdWVfcXcgPT0gZGJfY21wLnZhbHVl X3F3KSB7Cj4gKwkJCS8qIGRiIHdhcyBzdWNjZXNzZnVsbHkgcnVuZyAqLwo+ICsJCQlnYy0+Y29v a2llID0gZGJfZXhjLmNvb2tpZTsKPiArCQkJcmV0ID0gMDsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ ICsKPiArCQkvKiBYWFg6IGRvb3JiZWxsIHdhcyBsb3N0IGFuZCBuZWVkIHRvIGFjcXVpcmUgaXQg YWdhaW4gKi8KPiArCQlpZiAoZGJfcmV0LmRiX3N0YXR1cyA9PSBHVUNfRE9PUkJFTExfRElTQUJM RUQpCj4gKwkJCWJyZWFrOwo+ICsKPiArCQlEUk1fRVJST1IoIkNvb2tpZSBtaXNtYXRjaC4gRXhw ZWN0ZWQgJWQsIHJldHVybmVkICVkXG4iLAo+ICsJCQkgIGRiX2NtcC5jb29raWUsIGRiX3JldC5j b29raWUpOwo+ICsKPiArCQkvKiB1cGRhdGUgdGhlIGNvb2tpZSB0byBuZXdseSByZWFkIGNvb2tp ZSBmcm9tIEd1QyAqLwo+ICsJCWRiX2NtcC5jb29raWUgPSBkYl9yZXQuY29va2llOwo+ICsJCWRi X2V4Yy5jb29raWUgPSBkYl9yZXQuY29va2llICsgMTsKPiArCQlpZiAoZGJfZXhjLmNvb2tpZSA9 PSAwKQo+ICsJCQlkYl9leGMuY29va2llID0gMTsKPiArCX0KPiArCj4gKwlrdW5tYXBfYXRvbWlj KGJhc2UpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZ3VjX2Rpc2Fi bGVfZG9vcmJlbGwoc3RydWN0IGludGVsX2d1YyAqZ3VjLAo+ICsJCQkJIHN0cnVjdCBpOTE1X2d1 Y19jbGllbnQgKmNsaWVudCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gZ3VjX3RvX2k5MTUoZ3VjKTsKPiArCXN0cnVjdCBndWNfZG9vcmJlbGxfaW5mbyAqZG9v cmJlbGw7Cj4gKwl2b2lkICpiYXNlOwo+ICsJaW50IGRyYnJlZyA9IEdFTjhfRFJCUkVHTChjbGll bnQtPmRvb3JiZWxsX2lkKTsKPiArCWludCB2YWx1ZTsKPiArCj4gKwliYXNlID0ga21hcF9hdG9t aWMoaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKGNsaWVudC0+Y2xpZW50X29iaiwgMCkpOwo+ICsJ ZG9vcmJlbGwgPSBiYXNlICsgY2xpZW50LT5kb29yYmVsbF9vZmZzZXQ7Cj4gKwo+ICsJZG9vcmJl bGwtPmRiX3N0YXR1cyA9IDA7Cj4gKwo+ICsJa3VubWFwX2F0b21pYyhiYXNlKTsKPiArCj4gKwlJ OTE1X1dSSVRFKGRyYnJlZywgSTkxNV9SRUFEKGRyYnJlZykgJiB+R0VOOF9EUkJfVkFMSUQpOwo+ ICsKPiArCXZhbHVlID0gSTkxNV9SRUFEKGRyYnJlZyk7Cj4gKwlXQVJOX09OKCh2YWx1ZSAmIEdF TjhfRFJCX1ZBTElEKSAhPSAwKTsKPiArCj4gKwlJOTE1X1dSSVRFKEdFTjhfRFJCUkVHVShjbGll bnQtPmRvb3JiZWxsX2lkKSwgMCk7Cj4gKwlJOTE1X1dSSVRFKGRyYnJlZywgMCk7Cj4gKwo+ICsJ LyogWFhYOiB3YWl0IGZvciBhbnkgaW50ZXJydXB0cyAqLwo+ICsJLyogWFhYOiB3YWl0IGZvciB3 b3JrcXVldWUgdG8gZHJhaW4gKi8KPiArfQo+ICsKPiArLyoKPiArICogU2VsZWN0LCBhc3NpZ24g YW5kIHJlbGFzZSBkb29yYmVsbCBjYWNoZWxpbmVzCj4gKyAqCj4gKyAqIFRoZXNlIGZ1bmN0aW9u cyB0cmFjayB3aGljaCBkb29yYmVsbCBjYWNoZWxpbmVzIGFyZSBpbiB1c2UuCj4gKyAqIFRoZSBk YXRhIHRoZXkgbWFuaXB1bGF0ZSBpcyBwcm90ZWN0ZWQgYnkgdGhlIGhvc3QyZ3VjIGxvY2suCj4g KyAqLwo+ICsKPiArc3RhdGljIHVpbnQzMl90IHNlbGVjdF9kb29yYmVsbF9jYWNoZWxpbmUoc3Ry dWN0IGludGVsX2d1YyAqZ3VjKQo+ICt7Cj4gKwljb25zdCB1aW50MzJfdCBjYWNoZWxpbmVfc2l6 ZSA9IGJvb3RfY3B1X2RhdGEueDg2X2NsZmx1c2hfc2l6ZTsKPiArCXVpbnQzMl90IG9mZnNldDsK PiArCj4gKwlzcGluX2xvY2soJmd1Yy0+aG9zdDJndWNfbG9jayk7Cj4gKwo+ICsJLyogRG9vcmJl bGwgdXNlcyBhIHNpbmdsZSBjYWNoZSBsaW5lIHdpdGhpbiBhIHBhZ2UgKi8KPiArCW9mZnNldCA9 IGd1Yy0+ZGJfY2FjaGVsaW5lICYgUEFHRV9NQVNLOwo+ICsKPiArCS8qIE1vdmluZyB0byBuZXh0 IGNhY2hlIGxpbmUgdG8gcmVkdWNlIGNvbnRlbnRpb24gKi8KPiArCWd1Yy0+ZGJfY2FjaGVsaW5l ICs9IGNhY2hlbGluZV9zaXplOwo+ICsKPiArCXNwaW5fdW5sb2NrKCZndWMtPmhvc3QyZ3VjX2xv Y2spOwo+ICsKPiArCXJldHVybiBvZmZzZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB1aW50MTZfdCBh c3NpZ25fZG9vcmJlbGwoc3RydWN0IGludGVsX2d1YyAqZ3VjLCB1aW50MzJfdCBwcmlvcml0eSkK PiArewo+ICsJLyogVGhlIGJpdG1hcCBpcyBzcGxpdCBpbnRvIHR3byBoYWx2ZXMgLSBoaWdoIGFu ZCBub3JtYWwgcHJpb3JpdHkuICovCj4gKwljb25zdCB1aW50MTZfdCBoYWxmID0gR1VDX01BWF9E T09SQkVMTFMgLyAyOwo+ICsJY29uc3QgdWludDE2X3Qgc3RhcnQgPSAocHJpb3JpdHkgPD0gR1VD X0NUWF9QUklPUklUWV9ISUdIKSA/IGhhbGYgOiAwOwo+ICsJY29uc3QgdWludDE2X3QgZW5kID0g c3RhcnQgKyBoYWxmOwo+ICsJdWludDE2X3QgaWQ7Cj4gKwo+ICsJc3Bpbl9sb2NrKCZndWMtPmhv c3QyZ3VjX2xvY2spOwo+ICsJaWQgPSBmaW5kX25leHRfemVyb19iaXQoZ3VjLT5kb29yYmVsbF9i aXRtYXAsIGVuZCwgc3RhcnQpOwo+ICsJaWYgKGlkID09IGVuZCkKPiArCQlpZCA9IEdVQ19JTlZB TElEX0RPT1JCRUxMX0lEOwo+ICsJZWxzZQo+ICsJCWJpdG1hcF9zZXQoZ3VjLT5kb29yYmVsbF9i aXRtYXAsIGlkLCAxKTsKPiArCXNwaW5fdW5sb2NrKCZndWMtPmhvc3QyZ3VjX2xvY2spOwo+ICsK PiArCXJldHVybiBpZDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcmVsZWFzZV9kb29yYmVsbChz dHJ1Y3QgaW50ZWxfZ3VjICpndWMsIHVpbnQxNl90IGlkKQo+ICt7Cj4gKwlzcGluX2xvY2soJmd1 Yy0+aG9zdDJndWNfbG9jayk7Cj4gKwliaXRtYXBfY2xlYXIoZ3VjLT5kb29yYmVsbF9iaXRtYXAs IGlkLCAxKTsKPiArCXNwaW5fdW5sb2NrKCZndWMtPmhvc3QyZ3VjX2xvY2spOwo+ICt9Cj4gKwo+ ICsvKgo+ICsgKiBJbml0aWFsaXNlIHRoZSBwcm9jZXNzIGRlc2NyaXB0b3Igc2hhcmVkIHdpdGgg dGhlIEd1QyBmaXJtd2FyZS4KPiArICovCj4gK3N0YXRpYyB2b2lkIGd1Y19pbml0X3Byb2NfZGVz YyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsCj4gKwkJCSAgICAgICBzdHJ1Y3QgaTkxNV9ndWNfY2xp ZW50ICpjbGllbnQpCj4gK3sKPiArCXN0cnVjdCBndWNfcHJvY2Vzc19kZXNjICpkZXNjOwo+ICsJ dm9pZCAqYmFzZTsKPiArCj4gKwliYXNlID0ga21hcF9hdG9taWMoaTkxNV9nZW1fb2JqZWN0X2dl dF9wYWdlKGNsaWVudC0+Y2xpZW50X29iaiwgMCkpOwo+ICsJZGVzYyA9IGJhc2UgKyBjbGllbnQt PnByb2NfZGVzY19vZmZzZXQ7Cj4gKwo+ICsJbWVtc2V0KGRlc2MsIDAsIHNpemVvZigqZGVzYykp Owo+ICsKPiArCS8qCj4gKwkgKiBYWFg6IHBEb29yYmVsbCBhbmQgV1FWQmFzZUFkZHJlc3MgYXJl IHBvaW50ZXJzIGluIHByb2Nlc3MgYWRkcmVzcwo+ICsJICogc3BhY2UgZm9yIHJpbmczIGNsaWVu dHMgKHNldCB0aGVtIGFzIGluIG1tYXBfaW9jdGwpIG9yIGtlcm5lbAo+ICsJICogc3BhY2UgZm9y IGtlcm5lbCBjbGllbnRzIChtYXAgb24gZGVtYW5kIGluc3RlYWQ/IE1heSBtYWtlIGRlYnVnCj4g KwkgKiBlYXNpZXIgdG8gaGF2ZSBpdCBtYXBwZWQpLgo+ICsJICovCj4gKwlkZXNjLT53cV9iYXNl X2FkZHIgPSAwOwo+ICsJZGVzYy0+ZGJfYmFzZV9hZGRyID0gMDsKPiArCj4gKwlkZXNjLT5jb250 ZXh0X2lkID0gY2xpZW50LT5jdHhfaW5kZXg7Cj4gKwlkZXNjLT53cV9zaXplX2J5dGVzID0gY2xp ZW50LT53cV9zaXplOwo+ICsJZGVzYy0+d3Ffc3RhdHVzID0gV1FfU1RBVFVTX0FDVElWRTsKPiAr CWRlc2MtPnByaW9yaXR5ID0gY2xpZW50LT5wcmlvcml0eTsKPiArCj4gKwlrdW5tYXBfYXRvbWlj KGJhc2UpOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBJbml0aWFsaXNlL2NsZWFyIHRoZSBjb250ZXh0 IGRlc2NyaXB0b3Igc2hhcmVkIHdpdGggdGhlIEd1QyBmaXJtd2FyZS4KPiArICoKPiArICogVGhp cyBkZXNjcmlwdG9yIHRlbGxzIHRoZSBHdUMgd2hlcmUgKGluIEdHVFQgc3BhY2UpIHRvIGZpbmQg dGhlIGltcG9ydGFudAo+ICsgKiBkYXRhIHN0cnVjdHVyZXMgcmVsYXRpbmcgdG8gdGhpcyBjbGll bnQgKGRvb3JiZWxsLCBwcm9jZXNzIGRlc2NyaXB0b3IsCj4gKyAqIHdyaXRlIHF1ZXVlLCBldGMp Lgo+ICsgKi8KPiArCj4gK3N0YXRpYyB2b2lkIGd1Y19pbml0X2N0eF9kZXNjKHN0cnVjdCBpbnRl bF9ndWMgKmd1YywKPiArCQkJICAgICAgc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50KQo+ ICt7Cj4gKwlzdHJ1Y3QgZ3VjX2NvbnRleHRfZGVzYyBkZXNjOwo+ICsJc3RydWN0IHNnX3RhYmxl ICpzZzsKPiArCj4gKwltZW1zZXQoJmRlc2MsIDAsIHNpemVvZihkZXNjKSk7Cj4gKwo+ICsJZGVz Yy5hdHRyaWJ1dGUgPSBHVUNfQ1RYX0RFU0NfQVRUUl9BQ1RJVkUgfCBHVUNfQ1RYX0RFU0NfQVRU Ul9LRVJORUw7Cj4gKwlkZXNjLmNvbnRleHRfaWQgPSBjbGllbnQtPmN0eF9pbmRleDsKPiArCWRl c2MucHJpb3JpdHkgPSBjbGllbnQtPnByaW9yaXR5Owo+ICsJZGVzYy5lbmdpbmVzX3VzZWQgPSAo MSA8PCBSQ1MpIHwgKDEgPDwgVkNTKSB8ICgxIDw8IEJDUykgfAo+ICsJCQkgICAgKDEgPDwgVkVD UykgfCAoMSA8PCBWQ1MyKTsgLyogYWxsIGVuZ2luZXMgKi8KPiArCWRlc2MuZGJfaWQgPSBjbGll bnQtPmRvb3JiZWxsX2lkOwo+ICsKPiArCS8qCj4gKwkgKiBUaGUgQ1BVIGFkZHJlc3MgaXMgb25s eSBuZWVkZWQgYXQgY2VydGFpbiBwb2ludHMsIHNvIGttYXBfYXRvbWljIG9uCj4gKwkgKiBkZW1h bmQgaW5zdGVhZCBvZiBzdG9yaW5nIGl0IGluIHRoZSBjdHggZGVzY3JpcHRvci4KPiArCSAqIFhY WDogTWF5IG1ha2UgZGVidWcgZWFzaWVyIHRvIGhhdmUgaXQgbWFwcGVkCj4gKwkgKi8KPiArCWRl c2MuZGJfdHJpZ2dlcl9jcHUgPSAwOwo+ICsJZGVzYy5kYl90cmlnZ2VyX3VrID0gY2xpZW50LT5k b29yYmVsbF9vZmZzZXQgKwo+ICsJCWk5MTVfZ2VtX29ial9nZ3R0X29mZnNldChjbGllbnQtPmNs aWVudF9vYmopOwo+ICsJZGVzYy5kYl90cmlnZ2VyX3BoeSA9IGNsaWVudC0+ZG9vcmJlbGxfb2Zm c2V0ICsKPiArCQlzZ19kbWFfYWRkcmVzcyhjbGllbnQtPmNsaWVudF9vYmotPnBhZ2VzLT5zZ2wp Owo+ICsKPiArCWRlc2MucHJvY2Vzc19kZXNjID0gY2xpZW50LT5wcm9jX2Rlc2Nfb2Zmc2V0ICsK PiArCQlpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQoY2xpZW50LT5jbGllbnRfb2JqKTsKPiArCj4g KwlkZXNjLndxX2FkZHIgPSBjbGllbnQtPndxX29mZnNldCArCj4gKwkJaTkxNV9nZW1fb2JqX2dn dHRfb2Zmc2V0KGNsaWVudC0+Y2xpZW50X29iaik7Cj4gKwo+ICsJZGVzYy53cV9zaXplID0gY2xp ZW50LT53cV9zaXplOwo+ICsKPiArCS8qCj4gKwkgKiBYWFg6IFRha2UgTFJDcyBmcm9tIGFuIGV4 aXN0aW5nIGludGVsX2NvbnRleHQgaWYgdGhpcyBpcyBub3QgYW4KPiArCSAqIElzS01EQ3JlYXRl ZENvbnRleHQgY2xpZW50Cj4gKwkgKi8KPiArCWRlc2MuZGVzY19wcml2YXRlID0gKHVpbnRwdHJf dCljbGllbnQ7Cj4gKwo+ICsJLyogUG9vbCBjb250ZXh0IGlzIHBpbm5lZCBhbHJlYWR5ICovCj4g KwlzZyA9IGd1Yy0+Y3R4X3Bvb2xfb2JqLT5wYWdlczsKPiArCXNnX3Bjb3B5X2Zyb21fYnVmZmVy KHNnLT5zZ2wsIHNnLT5uZW50cywgJmRlc2MsIHNpemVvZihkZXNjKSwKPiArCQkJICAgICBzaXpl b2YoZGVzYykgKiBjbGllbnQtPmN0eF9pbmRleCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGd1 Y19maW5pX2N0eF9kZXNjKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywKPiArCQkJICAgICAgc3RydWN0 IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50KQo+ICt7Cj4gKwlzdHJ1Y3QgZ3VjX2NvbnRleHRfZGVz YyBkZXNjOwo+ICsJc3RydWN0IHNnX3RhYmxlICpzZzsKPiArCj4gKwltZW1zZXQoJmRlc2MsIDAs IHNpemVvZihkZXNjKSk7Cj4gKwo+ICsJc2cgPSBndWMtPmN0eF9wb29sX29iai0+cGFnZXM7Cj4g KwlzZ19wY29weV9mcm9tX2J1ZmZlcihzZy0+c2dsLCBzZy0+bmVudHMsICZkZXNjLCBzaXplb2Yo ZGVzYyksCj4gKwkJCSAgICAgc2l6ZW9mKGRlc2MpICogY2xpZW50LT5jdHhfaW5kZXgpOwo+ICt9 Cj4gKwo+ICsvKiBHZXQgdmFsaWQgd29ya3F1ZXVlIGl0ZW0gYW5kIHJldHVybiBpdCBiYWNrIHRv IG9mZnNldCAqLwo+ICtzdGF0aWMgaW50IGd1Y19nZXRfd29ya3F1ZXVlX3NwYWNlKHN0cnVjdCBp OTE1X2d1Y19jbGllbnQgKmdjLCB1MzIgKm9mZnNldCkKPiArewo+ICsJc3RydWN0IGd1Y19wcm9j ZXNzX2Rlc2MgKmRlc2M7Cj4gKwl2b2lkICpiYXNlOwo+ICsJdTMyIHNpemUgPSBzaXplb2Yoc3Ry dWN0IGd1Y193cV9pdGVtKTsKPiArCWludCByZXQgPSAwLCB0aW1lb3V0X2NvdW50ZXIgPSAyMDA7 Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsKPiArCWJhc2UgPSBrbWFwX2F0b21pYyhpOTE1 X2dlbV9vYmplY3RfZ2V0X3BhZ2UoZ2MtPmNsaWVudF9vYmosIDApKTsKPiArCWRlc2MgPSBiYXNl ICsgZ2MtPnByb2NfZGVzY19vZmZzZXQ7Cj4gKwo+ICsJd2hpbGUgKHRpbWVvdXRfY291bnRlci0t ID4gMCkgewo+ICsJCXNwaW5fbG9ja19pcnFzYXZlKCZnYy0+d3FfbG9jaywgZmxhZ3MpOwo+ICsK PiArCQlyZXQgPSB3YWl0X2Zvcl9hdG9taWMoQ0lSQ19TUEFDRShnYy0+d3FfdGFpbCwgZGVzYy0+ aGVhZCwKPiArCQkJCWdjLT53cV9zaXplKSA+PSBzaXplLCAxKTsKPiArCj4gKwkJaWYgKCFyZXQp IHsKPiArCQkJKm9mZnNldCA9IGdjLT53cV90YWlsOwo+ICsKPiArCQkJLyogYWR2YW5jZSB0aGUg dGFpbCBmb3IgbmV4dCB3b3JrcXVldWUgaXRlbSAqLwo+ICsJCQlnYy0+d3FfdGFpbCArPSBzaXpl Owo+ICsJCQlnYy0+d3FfdGFpbCAmPSBnYy0+d3Ffc2l6ZSAtIDE7Cj4gKwo+ICsJCQkvKiB0aGlz IHdpbGwgYnJlYWsgdGhlIGxvb3AgKi8KPiArCQkJdGltZW91dF9jb3VudGVyID0gMDsKPiArCQl9 Cj4gKwo+ICsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdjLT53cV9sb2NrLCBmbGFncyk7Cj4g Kwl9Owo+ICsKPiArCWt1bm1hcF9hdG9taWMoYmFzZSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiAr fQo+ICsKPiArc3RhdGljIGludCBndWNfYWRkX3dvcmtxdWV1ZV9pdGVtKHN0cnVjdCBpOTE1X2d1 Y19jbGllbnQgKmdjLAo+ICsJCQkJICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LAo+ICsJCQkJ ICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqY3R4X29iaiA9IGN0eC0+ZW5naW5lW3JpbmctPmlkXS5zdGF0ZTsKPiArCXN0 cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmID0gY3R4LT5lbmdpbmVbcmluZy0+aWRdLnJp bmdidWY7Cj4gKwlzdHJ1Y3QgZ3VjX3dxX2l0ZW0gKndxaTsKPiArCXZvaWQgKmJhc2U7Cj4gKwl1 MzIgdGFpbCwgd3FfbGVuLCB3cV9vZmYgPSAwOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBn dWNfZ2V0X3dvcmtxdWV1ZV9zcGFjZShnYywgJndxX29mZik7Cj4gKwlpZiAocmV0KQo+ICsJCXJl dHVybiByZXQ7Cj4gKwo+ICsJLyogRm9yIG5vdyB3b3JrcXVldWUgaXRlbSBpcyA0IERXczsgd29y a3F1ZXVlIGJ1ZmZlciBpcyAyIHBhZ2VzLiBTbyB3ZQo+ICsJICogc2hvdWxkIG5vdCBoYXZlIHRo ZSBjYXNlIHdoZXJlIHN0cnVjdHVyZSB3cWkgaXMgYWNyb3NzIHBhZ2UsIG5laXRoZXIKPiArCSAq IHdyYXBwZWQgdG8gdGhlIGJlZ2lubmluZy4gVGhpcyBzaW1wbGlmaWVzIHRoZSBpbXBsZW1lbnRh dGlvbiBiZWxvdy4KPiArCSAqCj4gKwkgKiBYWFg6IGlmIG5vdCB0aGUgY2FzZSwgd2UgbmVlZCBz YXZlIGRhdGEgdG8gYSB0ZW1wIHdxaSBhbmQgY29weSBpdCB0bwo+ICsJICogd29ya3F1ZXVlIGJ1 ZmZlciBkdyBieSBkdy4KPiArCSAqLwo+ICsJV0FSTl9PTihzaXplb2Yoc3RydWN0IGd1Y193cV9p dGVtKSAhPSAxNik7Cj4gKwlXQVJOX09OKHdxX29mZiAmIDMpOwo+ICsKPiArCS8qIHdxIHN0YXJ0 cyBmcm9tIHRoZSBwYWdlIGFmdGVyIGRvb3JiZWxsIC8gcHJvY2Vzc19kZXNjICovCj4gKwliYXNl ID0ga21hcF9hdG9taWMoaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlKGdjLT5jbGllbnRfb2JqLAo+ ICsJCQkod3Ffb2ZmICsgR1VDX0RCX1NJWkUpID4+IFBBR0VfU0hJRlQpKTsKPiArCXdxX29mZiAm PSBQQUdFX1NJWkUgLSAxOwo+ICsJd3FpID0gKHN0cnVjdCBndWNfd3FfaXRlbSAqKSgoY2hhciAq KWJhc2UgKyB3cV9vZmYpOwo+ICsKPiArCS8qIGxlbiBkb2VzIG5vdCBpbmNsdWRlIHRoZSBoZWFk ZXIgKi8KPiArCXdxX2xlbiA9IHNpemVvZihzdHJ1Y3QgZ3VjX3dxX2l0ZW0pIC8gc2l6ZW9mKHUz MikgLSAxOwo+ICsJd3FpLT5oZWFkZXIgPSBXUV9UWVBFX0lOT1JERVIgfAo+ICsJCQkod3FfbGVu IDw8IFdRX0xFTl9TSElGVCkgfAo+ICsJCQkocmluZy0+aWQgPDwgV1FfVEFSR0VUX1NISUZUKSB8 Cj4gKwkJCVdRX05PX1dDRkxVU0hfV0FJVDsKPiArCj4gKwkvKiBUaGUgR3VDIHdhbnRzIG9ubHkg dGhlIGxvdy1vcmRlciB3b3JkIG9mIHRoZSBjb250ZXh0IGRlc2NyaXB0b3IgKi8KPiArCXdxaS0+ Y29udGV4dF9kZXNjID0gKHUzMilpbnRlbF9scl9jb250ZXh0X2Rlc2NyaXB0b3IocmluZywgY3R4 X29iaik7Cj4gKwo+ICsJLyogVGhlIEd1QyBmaXJtd2FyZSB3YW50cyB0aGUgdGFpbCBpbmRleCBp biBRV29yZHMsIG5vdCBieXRlcyAqLwo+ICsJdGFpbCA9IHJpbmdidWYtPnRhaWwgPj4gMzsKPiAr CXdxaS0+cmluZ190YWlsID0gdGFpbCA8PCBXUV9SSU5HX1RBSUxfU0hJRlQ7Cj4gKwl3cWktPmZl bmNlX2lkID0gMDsgLypYWFg6IHdoYXQgZmVuY2UgdG8gYmUgaGVyZSAqLwo+ICsKPiArCWt1bm1h cF9hdG9taWMoYmFzZSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHVwZGF0ZV9jb250ZXh0X2ltYWdlKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgsCj4gKwkJCQkg c3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKmN0eF9vYmogPSBjdHgtPmVuZ2luZVtyaW5nLT5pZF0uc3RhdGU7Cj4gKwlzdHJ1 Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiA9IGN0eC0+ZW5naW5lW3JpbmctPmlkXS5yaW5n YnVmOwo+ICsKPiArCWludGVsX2xyX2NvbnRleHRfdXBkYXRlKGN0eF9vYmosIHJpbmdidWYtPm9i aiwgfjB1KTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGk5MTVfZ3VjX3N1Ym1pdCgpIC0gU3VibWl0 IGNvbW1hbmRzIHRocm91Z2ggR3VDCj4gKyAqIEBjbGllbnQ6CXRoZSBndWMgY2xpZW50IHdoZXJl IGNvbW1hbmRzIHdpbGwgZ28gdGhyb3VnaAo+ICsgKiBAY3R4OglMUkMgd2hlcmUgY29tbWFuZHMg Y29tZSBmcm9tCj4gKyAqIEByaW5nOglIVyBlbmdpbmUgdGhhdCB3aWxsIGV4Y3V0ZSB0aGUgY29t bWFuZHMKPiArICoKPiArICogUmV0dXJuOgkwIGlmIHN1Y2NlZWQKPiArICovCj4gK2ludCBpOTE1 X2d1Y19zdWJtaXQoc3RydWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50LAo+ICsJCSAgICBzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqY3R4LAo+ICsJCSAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpy aW5nKQo+ICt7Cj4gKwlpbnQgcV9yZXQsIGJfcmV0Owo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsK PiArCj4gKwkvKiBOZWVkIHRoaXMgYmVjYXVzZSBvZiB0aGUgZGVmZXJyZWQgcGluIGN0eCBhbmQg cmluZyAqLwo+ICsJLyogU2hhbGwgd2UgbW92ZSB0aGlzIHJpZ2h0IGFmdGVyIHJpbmcgaXMgcGlu bmVkPyAqLwo+ICsJdXBkYXRlX2NvbnRleHRfaW1hZ2UoY3R4LCByaW5nKTsKPiArCj4gKwlxX3Jl dCA9IGd1Y19hZGRfd29ya3F1ZXVlX2l0ZW0oY2xpZW50LCBjdHgsIHJpbmcpOwo+ICsJaWYgKHFf cmV0ID09IDApCj4gKwkJYl9yZXQgPSBndWNfcmluZ19kb29yYmVsbChjbGllbnQpOwo+ICsKPiAr CXNwaW5fbG9ja19pcnFzYXZlKCZjbGllbnQtPndxX2xvY2ssIGZsYWdzKTsKPiArCWNsaWVudC0+ c3VibWlzc2lvbnMgKz0gMTsKPiArCWlmIChxX3JldCkgewo+ICsJCWNsaWVudC0+cV9mYWlsICs9 IDE7Cj4gKwkJY2xpZW50LT5yZXRjb2RlID0gcV9yZXQ7Cj4gKwl9IGVsc2UgaWYgKGJfcmV0KSB7 Cj4gKwkJY2xpZW50LT5iX2ZhaWwgKz0gMTsKPiArCQljbGllbnQtPnJldGNvZGUgPSBxX3JldCA9 IGJfcmV0Owo+ICsJfSBlbHNlIHsKPiArCQljbGllbnQtPnJldGNvZGUgPSAwOwo+ICsJfQo+ICsJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xpZW50LT53cV9sb2NrLCBmbGFncyk7Cj4gKwo+ICsJ cmV0dXJuIHFfcmV0Owo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBFdmVyeXRoaW5nIGJlbG93IGhlcmUg aXMgY29uY2VybmVkIHdpdGggc2V0dXAgJiB0ZWFyZG93biwgYW5kIGlzCj4gKyAqIHRoZXJlZm9y ZSBub3QgcGFydCBvZiB0aGUgc29tZXdoYXQgdGltZS1jcml0aWNhbCBiYXRjaC1zdWJtaXNzaW9u Cj4gKyAqIHBhdGggb2YgaTkxNV9ndWNfc3VibWl0KCkgYWJvdmUuCj4gKyAqLwo+ICsKPiArLyoq Cj4gICAqIGdlbV9hbGxvY2F0ZV9ndWNfb2JqKCkgLSBBbGxvY2F0ZSBnZW0gb2JqZWN0IGZvciBH dUMgdXNhZ2UKPiAgICogQGRldjoJZHJtIGRldmljZQo+ICAgKiBAc2l6ZToJc2l6ZSBvZiBvYmpl Y3QKPiBAQCAtNzUsNiArNTkzLDEyMSBAQCBzdGF0aWMgdm9pZCBnZW1fcmVsZWFzZV9ndWNfb2Jq KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gIAlkcm1fZ2VtX29iamVjdF91bnJl ZmVyZW5jZSgmb2JqLT5iYXNlKTsKPiAgfQo+ICAKPiArc3RhdGljIHZvaWQgZ3VjX2NsaWVudF9m cmVlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCSAgICBzdHJ1Y3QgaTkxNV9ndWNfY2xp ZW50ICpjbGllbnQpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgaW50ZWxfZ3VjICpndWMgPSAmZGV2X3ByaXYt Pmd1YzsKPiArCj4gKwlpZiAoIWNsaWVudCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKGNsaWVu dC0+ZG9vcmJlbGxfaWQgIT0gR1VDX0lOVkFMSURfRE9PUkJFTExfSUQpIHsKPiArCQkvKgo+ICsJ CSAqIEZpcnN0IGRpc2FibGUgdGhlIGRvb3JiZWxsLCB0aGVuIHRlbGwgdGhlIEd1QyB3ZSd2ZQo+ ICsJCSAqIGZpbmlzaGVkIHdpdGggaXQsIGZpbmFsbHkgZGVhbGxvY2F0ZSBpdCBpbiBvdXIgYml0 bWFwCj4gKwkJICovCj4gKwkJZ3VjX2Rpc2FibGVfZG9vcmJlbGwoZ3VjLCBjbGllbnQpOwo+ICsJ CWhvc3QyZ3VjX3JlbGVhc2VfZG9vcmJlbGwoZ3VjLCBjbGllbnQpOwo+ICsJCXJlbGVhc2VfZG9v cmJlbGwoZ3VjLCBjbGllbnQtPmRvb3JiZWxsX2lkKTsKPiArCX0KPiArCj4gKwkvKgo+ICsJICog WFhYOiB3YWl0IGZvciBhbnkgb3V0c3RhbmRpbmcgc3VibWlzc2lvbnMgYmVmb3JlIGZyZWVpbmcg bWVtb3J5Lgo+ICsJICogQmUgc3VyZSB0byBkcm9wIGFueSBsb2Nrcwo+ICsJICovCj4gKwo+ICsJ Z2VtX3JlbGVhc2VfZ3VjX29iaihjbGllbnQtPmNsaWVudF9vYmopOwo+ICsKPiArCWlmIChjbGll bnQtPmN0eF9pbmRleCAhPSBHVUNfSU5WQUxJRF9DVFhfSUQpIHsKPiArCQlndWNfZmluaV9jdHhf ZGVzYyhndWMsIGNsaWVudCk7Cj4gKwkJaWRhX3NpbXBsZV9yZW1vdmUoJmd1Yy0+Y3R4X2lkcywg Y2xpZW50LT5jdHhfaW5kZXgpOwo+ICsJfQo+ICsKPiArCWtmcmVlKGNsaWVudCk7Cj4gK30KPiAr Cj4gKy8qKgo+ICsgKiBndWNfY2xpZW50X2FsbG9jKCkgLSBBbGxvY2F0ZSBhbiBpOTE1X2d1Y19j bGllbnQKPiArICogQGRldjoJZHJtIGRldmljZQo+ICsgKiBAcHJpb3JpdHk6CWZvdXIgbGV2ZWxz IHByaW9yaXR5IF9DUklUSUNBTCwgX0hJR0gsIF9OT1JNQUwgYW5kIF9MT1cKPiArICogCQlUaGUg a2VybmVsIGNsaWVudCB0byByZXBsYWNlIEV4ZWNMaXN0IHN1Ym1pc3Npb24gaXMgY3JlYXRlZCB3 aXRoCj4gKyAqIAkJTk9STUFMIHByaW9yaXR5LiBQcmlvcml0eSBvZiBhIGNsaWVudCBmb3Igc2No ZWR1bGVyIGNhbiBiZSBISUdILAo+ICsgKiAJCXdoaWxlIGEgcHJlZW1wdGlvbiBjb250ZXh0IGNh biB1c2UgQ1JJVElDQUwuCj4gKyAqCj4gKyAqIFJldHVybjoJQW4gaTkxNV9ndWNfY2xpZW50IG9i amVjdCBpZiBzdWNjZXNzLgo+ICsgKi8KPiArc3RhdGljIHN0cnVjdCBpOTE1X2d1Y19jbGllbnQg Kmd1Y19jbGllbnRfYWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiArCQkJCQkJdWludDMy X3QgcHJpb3JpdHkpCj4gK3sKPiArCXN0cnVjdCBpOTE1X2d1Y19jbGllbnQgKmNsaWVudDsKPiAr CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4g KwlzdHJ1Y3QgaW50ZWxfZ3VjICpndWMgPSAmZGV2X3ByaXYtPmd1YzsKPiArCXN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwo+ICsJY2xpZW50ID0ga3phbGxvYyhzaXplb2YoKmNs aWVudCksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFjbGllbnQpCj4gKwkJcmV0dXJuIE5VTEw7Cj4g Kwo+ICsJY2xpZW50LT5kb29yYmVsbF9pZCA9IEdVQ19JTlZBTElEX0RPT1JCRUxMX0lEOwo+ICsJ Y2xpZW50LT5wcmlvcml0eSA9IHByaW9yaXR5Owo+ICsKPiArCWNsaWVudC0+Y3R4X2luZGV4ID0g KHVpbnQzMl90KWlkYV9zaW1wbGVfZ2V0KCZndWMtPmN0eF9pZHMsIDAsCj4gKwkJCUdVQ19NQVhf R1BVX0NPTlRFWFRTLCBHRlBfS0VSTkVMKTsKPiArCWlmIChjbGllbnQtPmN0eF9pbmRleCA+PSBH VUNfTUFYX0dQVV9DT05URVhUUykgewo+ICsJCWNsaWVudC0+Y3R4X2luZGV4ID0gR1VDX0lOVkFM SURfQ1RYX0lEOwo+ICsJCWdvdG8gZXJyOwo+ICsJfQo+ICsKPiArCS8qIFRoZSBmaXJzdCBwYWdl IGlzIGRvb3JiZWxsL3Byb2NfZGVzYy4gVHdvIGZvbGxvd2VkIHBhZ2VzIGFyZSB3cS4gKi8KPiAr CW9iaiA9IGdlbV9hbGxvY2F0ZV9ndWNfb2JqKGRldiwgR1VDX0RCX1NJWkUgKyBHVUNfV1FfU0la RSk7Cj4gKwlpZiAoIW9iaikKPiArCQlnb3RvIGVycjsKPiArCj4gKwljbGllbnQtPmNsaWVudF9v YmogPSBvYmo7Cj4gKwljbGllbnQtPndxX29mZnNldCA9IEdVQ19EQl9TSVpFOwo+ICsJY2xpZW50 LT53cV9zaXplID0gR1VDX1dRX1NJWkU7Cj4gKwlzcGluX2xvY2tfaW5pdCgmY2xpZW50LT53cV9s b2NrKTsKPiArCj4gKwljbGllbnQtPmRvb3JiZWxsX29mZnNldCA9IHNlbGVjdF9kb29yYmVsbF9j YWNoZWxpbmUoZ3VjKTsKPiArCj4gKwkvKgo+ICsJICogU2luY2UgdGhlIGRvb3JiZWxsIG9ubHkg cmVxdWlyZXMgYSBzaW5nbGUgY2FjaGVsaW5lLCB3ZSBjYW4gc2F2ZQo+ICsJICogc3BhY2UgYnkg cHV0dGluZyB0aGUgYXBwbGljYXRpb24gcHJvY2VzcyBkZXNjcmlwdG9yIGluIHRoZSBzYW1lCj4g KwkgKiBwYWdlLiBVc2UgdGhlIGhhbGYgb2YgdGhlIHBhZ2UgdGhhdCBkb2Vzbid0IGluY2x1ZGUg dGhlIGRvb3JiZWxsLgo+ICsJICovCj4gKwlpZiAoY2xpZW50LT5kb29yYmVsbF9vZmZzZXQgPj0g KEdVQ19EQl9TSVpFIC8gMikpCj4gKwkJY2xpZW50LT5wcm9jX2Rlc2Nfb2Zmc2V0ID0gMDsKPiAr CWVsc2UKPiArCQljbGllbnQtPnByb2NfZGVzY19vZmZzZXQgPSAoR1VDX0RCX1NJWkUgLyAyKTsK PiArCj4gKwljbGllbnQtPmRvb3JiZWxsX2lkID0gYXNzaWduX2Rvb3JiZWxsKGd1YywgY2xpZW50 LT5wcmlvcml0eSk7Cj4gKwlpZiAoY2xpZW50LT5kb29yYmVsbF9pZCA9PSBHVUNfSU5WQUxJRF9E T09SQkVMTF9JRCkKPiArCQkvKiBYWFg6IGV2aWN0IGEgZG9vcmJlbGwgaW5zdGVhZCAqLwo+ICsJ CWdvdG8gZXJyOwo+ICsKPiArCWd1Y19pbml0X3Byb2NfZGVzYyhndWMsIGNsaWVudCk7Cj4gKwln dWNfaW5pdF9jdHhfZGVzYyhndWMsIGNsaWVudCk7Cj4gKwlndWNfaW5pdF9kb29yYmVsbChndWMs IGNsaWVudCk7Cj4gKwo+ICsJLyogSW52YWxpZGF0ZSBHdUMgVExCIHRvIGxldCBHdUMgdGFrZSB0 aGUgbGF0ZXN0IHVwZGF0ZXMgdG8gR1RULiAqLwo+ICsJSTkxNV9XUklURShHRU44X0dUQ1IsIEdF TjhfR1RDUl9JTlZBTElEQVRFKTsKPiArCj4gKwkvKiBYWFg6IEFueSBjYWNoZSBmbHVzaGVzIG5l ZWRlZD8gR2VuZXJhbCBkb21haW4gbWdtdCBjYWxscz8gKi8KPiArCj4gKwlpZiAoaG9zdDJndWNf YWxsb2NhdGVfZG9vcmJlbGwoZ3VjLCBjbGllbnQpKQo+ICsJCWdvdG8gZXJyOwo+ICsKPiArCURS TV9ERUJVR19EUklWRVIoIm5ldyBwcmlvcml0eSAldSBjbGllbnQgJXA6IGN0eF9pbmRleCAldSBk Yl9pZCAldVxuIiwKPiArCQlwcmlvcml0eSwgY2xpZW50LCBjbGllbnQtPmN0eF9pbmRleCwgY2xp ZW50LT5kb29yYmVsbF9pZCk7Cj4gKwo+ICsJcmV0dXJuIGNsaWVudDsKPiArCj4gK2VycjoKPiAr CWd1Y19jbGllbnRfZnJlZShkZXYsIGNsaWVudCk7Cj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsK PiAgc3RhdGljIHZvaWQgZ3VjX2NyZWF0ZV9sb2coc3RydWN0IGludGVsX2d1YyAqZ3VjKQo+ICB7 Cj4gIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBndWNfdG9faTkxNShndWMp Owo+IEBAIC0xMzgsNiArNzcxLDggQEAgaW50IGk5MTVfZ3VjX3N1Ym1pc3Npb25faW5pdChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAJaWYgKCFndWMtPmN0eF9wb29sX29iaikKPiAgCQlyZXR1 cm4gLUVOT01FTTsKPiAgCj4gKwlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPmd1Yy5ob3N0Mmd1 Y19sb2NrKTsKPiArCj4gIAlpZGFfaW5pdCgmZ3VjLT5jdHhfaWRzKTsKPiAgCj4gIAlndWNfY3Jl YXRlX2xvZyhndWMpOwo+IEBAIC0xNDUsNiArNzgwLDMyIEBAIGludCBpOTE1X2d1Y19zdWJtaXNz aW9uX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+ ICtpbnQgaTkxNV9ndWNfc3VibWlzc2lvbl9lbmFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikK PiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsKPiArCXN0cnVjdCBpbnRlbF9ndWMgKmd1YyA9ICZkZXZfcHJpdi0+Z3VjOwo+ICsJc3Ry dWN0IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50Owo+ICsKPiArCS8qIGNsaWVudCBmb3IgZXhlY2J1 ZiBzdWJtaXNzaW9uICovCj4gKwljbGllbnQgPSBndWNfY2xpZW50X2FsbG9jKGRldiwgR1VDX0NU WF9QUklPUklUWV9OT1JNQUwpOwo+ICsJaWYgKCFjbGllbnQpIHsKPiArCQlEUk1fRVJST1IoIkZh aWxlZCB0byBjcmVhdGUgZXhlY2J1ZiBndWNfY2xpZW50XG4iKTsKPiArCQlyZXR1cm4gLUVOT01F TTsKPiArCX0KPiArCj4gKwlndWMtPmV4ZWNidWZfY2xpZW50ID0gY2xpZW50Owo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3ZvaWQgaTkxNV9ndWNfc3VibWlzc2lvbl9kaXNhYmxlKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgaW50ZWxfZ3VjICpndWMgPSAmZGV2X3By aXYtPmd1YzsKPiArCj4gKwlndWNfY2xpZW50X2ZyZWUoZGV2LCBndWMtPmV4ZWNidWZfY2xpZW50 KTsKPiArCWd1Yy0+ZXhlY2J1Zl9jbGllbnQgPSBOVUxMOwo+ICt9Cj4gKwo+ICB2b2lkIGk5MTVf Z3VjX3N1Ym1pc3Npb25fZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICB7Cj4gIAlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2d1Yy5oCj4gaW5kZXggM2RlOTA5Ni4uNWJlZDUyOSAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2d1Yy5oCj4gQEAgLTI4LDYgKzI4LDMwIEBACj4gICNpbmNsdWRlICJpbnRl bF9ndWNfZndpZi5oIgo+ICAjaW5jbHVkZSAiaTkxNV9ndWNfcmVnLmgiCj4gIAo+ICtzdHJ1Y3Qg aTkxNV9ndWNfY2xpZW50IHsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpjbGllbnRf b2JqOwo+ICsJdWludDMyX3QgcHJpb3JpdHk7Cj4gKwl1aW50MzJfdCBjdHhfaW5kZXg7Cj4gKwo+ ICsJdWludDMyX3QgcHJvY19kZXNjX29mZnNldDsKPiArCXVpbnQzMl90IGRvb3JiZWxsX29mZnNl dDsKPiArCXVpbnQzMl90IGNvb2tpZTsKPiArCXVpbnQxNl90IGRvb3JiZWxsX2lkOwo+ICsJdWlu dDE2X3QgcGFkZGluZzsJCS8qIE1haW50YWluIGFsaWdubWVudAkJKi8KPiArCj4gKwl1aW50MzJf dCB3cV9vZmZzZXQ7Cj4gKwl1aW50MzJfdCB3cV9zaXplOwo+ICsKPiArCXNwaW5sb2NrX3Qgd3Ff bG9jazsJCS8qIFByb3RlY3RzIGFsbCBkYXRhIGJlbG93CSovCj4gKwl1aW50MzJfdCB3cV90YWls Owo+ICsKPiArCS8qIEd1QyBzdWJtaXNzaW9uIHN0YXRpc3RpY3MgJiBzdGF0dXMgKi8KPiArCXVp bnQ2NF90IHN1Ym1pc3Npb25zOwo+ICsJdWludDMyX3QgcV9mYWlsOwo+ICsJdWludDMyX3QgYl9m YWlsOwo+ICsJaW50IHJldGNvZGU7Cj4gK307Cj4gKwo+ICBzdHJ1Y3QgaW50ZWxfZ3VjIHsKPiAg CS8qIEdlbmVyaWMgdUMgZmlybXdhcmUgbWFuYWdlbWVudCAqLwo+ICAJc3RydWN0IGludGVsX3Vj X2Z3IGd1Y19mdzsKPiBAQCAtNDMsNiArNjcsMjAgQEAgc3RydWN0IGludGVsX2d1YyB7Cj4gIAo+ ICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmN0eF9wb29sX29iajsKPiAgCXN0cnVjdCBp ZGEgY3R4X2lkczsKPiArCj4gKwlzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50ICpleGVjYnVmX2NsaWVu dDsKPiArCj4gKwlzcGlubG9ja190IGhvc3QyZ3VjX2xvY2s7CS8qIFByb3RlY3RzIGFsbCBkYXRh IGJlbG93CSovCj4gKwo+ICsJREVDTEFSRV9CSVRNQVAoZG9vcmJlbGxfYml0bWFwLCBHVUNfTUFY X0RPT1JCRUxMUyk7Cj4gKwlpbnQgZGJfY2FjaGVsaW5lOwo+ICsKPiArCS8qIEFjdGlvbiBzdGF0 dXMgJiBzdGF0aXN0aWNzICovCj4gKwl1aW50NjRfdCBhY3Rpb25fY291bnQ7CQkvKiBUb3RhbCBj b21tYW5kcyBpc3N1ZWQJKi8KPiArCXVpbnQzMl90IGFjdGlvbl9jbWQ7CQkvKiBMYXN0IGNvbW1h bmQgd29yZAkJKi8KPiArCXVpbnQzMl90IGFjdGlvbl9zdGF0dXM7CQkvKiBMYXN0IHJldHVybiBz dGF0dXMJCSovCj4gKwl1aW50MzJfdCBhY3Rpb25fZmFpbDsJCS8qIFRvdGFsIG51bWJlciBvZiBm YWlsdXJlcwkqLwo+ICsJaW50MzJfdCBhY3Rpb25fZXJyOwkJLyogTGFzdCBlcnJvciBjb2RlCQkq Lwo+ICB9Owo+ICAKPiAgLyogaW50ZWxfZ3VjX2xvYWRlci5jICovCj4gQEAgLTUyLDYgKzkwLDEx IEBAIGV4dGVybiB2b2lkIGludGVsX2d1Y191Y29kZV9maW5pKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpOwo+ICAKPiAgLyogaTkxNV9ndWNfc3VibWlzc2lvbi5jICovCj4gIGludCBpOTE1X2d1Y19z dWJtaXNzaW9uX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gK2ludCBpOTE1X2d1Y19z dWJtaXNzaW9uX2VuYWJsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiAraW50IGk5MTVfZ3Vj X3N1Ym1pdChzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50ICpjbGllbnQsCj4gKwkJICAgIHN0cnVjdCBp bnRlbF9jb250ZXh0ICpjdHgsCj4gKwkJICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcp Owo+ICt2b2lkIGk5MTVfZ3VjX3N1Ym1pc3Npb25fZGlzYWJsZShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KTsKPiAgdm9pZCBpOTE1X2d1Y19zdWJtaXNzaW9uX2Zpbmkoc3RydWN0IGRybV9kZXZpY2Ug KmRldik7Cj4gIAo+ICAjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZ3VjX2xvYWRlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2xvYWRl ci5jCj4gaW5kZXggZGVlYWEyMC4uZWI3NmMzNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9ndWNfbG9hZGVyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9ndWNfbG9hZGVyLmMKPiBAQCAtNDE3LDYgKzQxNyw4IEBAIGludCBpbnRlbF9ndWNfdWNv ZGVfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAJCWludGVsX3VjX2Z3X3N0YXR1c19y ZXByKGd1Y19mdy0+dWNfZndfZmV0Y2hfc3RhdHVzKSwKPiAgCQlpbnRlbF91Y19md19zdGF0dXNf cmVwcihndWNfZnctPnVjX2Z3X2xvYWRfc3RhdHVzKSk7Cj4gIAo+ICsJaTkxNV9ndWNfc3VibWlz c2lvbl9kaXNhYmxlKGRldik7Cj4gKwo+ICAJaWYgKGd1Y19mdy0+dWNfZndfZmV0Y2hfc3RhdHVz ID09IElOVEVMX1VDX0ZJUk1XQVJFX05PTkUpCj4gIAkJcmV0dXJuIDA7Cj4gIAo+IEBAIC00NDQs MTIgKzQ0NiwyMCBAQCBpbnQgaW50ZWxfZ3VjX3Vjb2RlX2xvYWQoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKPiAgCQlpbnRlbF91Y19md19zdGF0dXNfcmVwcihndWNfZnctPnVjX2Z3X2ZldGNoX3N0 YXR1cyksCj4gIAkJaW50ZWxfdWNfZndfc3RhdHVzX3JlcHIoZ3VjX2Z3LT51Y19md19sb2FkX3N0 YXR1cykpOwo+ICAKPiArCWlmIChpOTE1LmVuYWJsZV9ndWNfc3VibWlzc2lvbikgewo+ICsJCWVy ciA9IGk5MTVfZ3VjX3N1Ym1pc3Npb25fZW5hYmxlKGRldik7Cj4gKwkJaWYgKGVycikKPiArCQkJ Z290byBmYWlsOwo+ICsJfQo+ICsKPiAgCXJldHVybiAwOwo+ICAKPiAgZmFpbDoKPiAgCWlmIChn dWNfZnctPnVjX2Z3X2xvYWRfc3RhdHVzID09IElOVEVMX1VDX0ZJUk1XQVJFX1BFTkRJTkcpCj4g IAkJZ3VjX2Z3LT51Y19md19sb2FkX3N0YXR1cyA9IElOVEVMX1VDX0ZJUk1XQVJFX0ZBSUw7Cj4g IAo+ICsJaTkxNV9ndWNfc3VibWlzc2lvbl9kaXNhYmxlKGRldik7Cj4gKwo+ICAJRFJNX0VSUk9S KCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBHdUMsIGVycm9yICVkXG4iLCBlcnIpOwo+ICAKPiAgCXJl dHVybiBlcnI7Cj4gLS0gCj4gMS45LjEKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2ludGVsLWdmeAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5l ZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QK SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==