From mboxrd@z Thu Jan 1 00:00:00 1970 From: "O'Rourke, Tom" Subject: Re: [PATCH 01/10 v5] drm/i915: GuC-specific firmware loader Date: Thu, 6 Aug 2015 14:35:32 -0700 Message-ID: <20150806213532.GA17237@torourke-desk1> References: <1438192118-5807-1-git-send-email-david.s.gordon@intel.com> <1438192118-5807-2-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 mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 3917F6EC5E for ; Thu, 6 Aug 2015 14:39:27 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1438192118-5807-2-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 T24gV2VkLCBKdWwgMjksIDIwMTUgYXQgMDY6NDg6MjlQTSArMDEwMCwgRGF2ZSBHb3Jkb24gd3Jv dGU6Cj4gRnJvbTogQWxleCBEYWkgPHl1LmRhaUBpbnRlbC5jb20+Cj4gCj4gVGhpcyBmZXRjaGVz IHRoZSByZXF1aXJlZCBmaXJtd2FyZSBpbWFnZSBmcm9tIHRoZSBmaWxlc3lzdGVtLAo+IHRoZW4g bG9hZHMgaXQgaW50byB0aGUgR3VDJ3MgbWVtb3J5IHZpYSBhIGRlZGljYXRlZCBETUEgZW5naW5l Lgo+IAo+IFRoaXMgcGF0Y2ggaXMgZGVyaXZlZCBmcm9tIEd1QyBsb2FkaW5nIHdvcmsgb3JpZ2lu YWxseSBkb25lIGJ5Cj4gVmluaXQgQXphZCBhbmQgQmVuIFdpZGF3c2t5Lgo+IAo+IHYyOgo+ICAg ICBWYXJpb3VzIGltcHJvdmVtZW50cyBwZXIgcmV2aWV3IGNvbW1lbnRzIGJ5IENocmlzIFdpbHNv bgo+IAo+IHYzOgo+ICAgICBSZW1vdmVkICd3YWl0JyBwYXJhbWV0ZXIgdG8gaW50ZWxfZ3VjX3Vj b2RlX2xvYWQoKSBhcyBmaXJtd2FyZQo+ICAgICAgICAgcHJlZmV0Y2ggaXMgbm8gbG9uZ2VyIHN1 cHBvcnRlZCBpbiB0aGUgY29tbW9uIGZpcm13YXJlIGxvYWRlciwKPiAJcGVyIERhbmllbCBWZXR0 ZXIncyByZXF1ZXN0Lgo+ICAgICBGaXJtd2FyZSBjaGVja2VyIGNhbGxiYWNrIGZuIG5vdyByZXR1 cm5zIGVycm5vIHJhdGhlciB0aGFuIGJvb2wuCj4gCj4gdjQ6Cj4gICAgIFNxdWFzaCB1Qy1pbmRl cGVuZGVudCBjb2RlIGludG8gR3VDLXNwZWNpZmMgbG9hZGVyIFtEYW5pZWwgVmV0dGVyXQo+ICAg ICBEb24ndCBrZWVwIHRoZSBkcml2ZXIgd29ya2luZyAoYnkgZmFsbGluZyBiYWNrIHRvIGV4ZWNs aXN0IG1vZGUpCj4gICAgICAgICBpZiBHdUMgZmlybXdhcmUgbG9hZGluZyBmYWlscyBbRGFuaWVs IFZldHRlcl0KPiAKPiB2NToKPiAgICAgQ2xhcmlmeSBXT1BDTS1yZWxhdGVkICNkZWZpbmVzIFtU b20gTydSb3Vya2VdCj4gICAgIERlbGV0ZSBvYnNvbGV0ZSBjb2RlIG5vIGxvbmdlciByZXF1aXJl ZCB3aXRoIGN1cnJlbnQgaC93ICYgZi93Cj4gICAgICAgICBbVG9tIE8nUm91cmtlXQo+ICAgICBN b3ZlIHRoZSBjYWxsIHRvIGludGVsX2d1Y191Y29kZV9pbml0KCkgbGF0ZXIsIHNvIHRoYXQgaXQg Y2FuCj4gICAgICAgICBhbGxvY2F0ZSBHRU0gb2JqZWN0cywgYW5kIGhhdmUgaXQgZmV0Y2ggdGhl IGZpcm13YXJlOyB0aGVuCj4gCWludGVsX2d1Y191Y29kZV9sb2FkKCkgZG9lc24ndCBuZWVkIHRv IGZldGNoIGl0IGxhdGVyLgo+ICAgICAgICAgW0RhbmllbCBWZXR0ZXJdLgo+IAo+IElzc3VlOiBW SVotNDg4NAo+IFNpZ25lZC1vZmYtYnk6IEFsZXggRGFpIDx5dS5kYWlAaW50ZWwuY29tPgo+IFNp Z25lZC1vZmYtYnk6IERhdmUgR29yZG9uIDxkYXZpZC5zLmdvcmRvbkBpbnRlbC5jb20+Cj4gLS0t Cj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICB8ICAgMyArCj4gIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMgICAgICAgICB8ICAgOSArCj4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICB8ICAxMSArCj4gIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtLmMgICAgICAgICB8ICAxNiArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ3VjX3JlZy5oICAgICB8ICAxNyArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3JlZy5oICAgICAgICAgfCAgIDQgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3Vj LmggICAgICAgIHwgIDY3ICsrKysKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2Z3 aWYuaCAgIHwgICAzICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2FkZXIu YyB8IDUzMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICA5IGZpbGVzIGNoYW5n ZWQsIDY1MiBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2FkZXIuYwo+IAo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01h a2VmaWxlCj4gaW5kZXggNDFmYjhhOS4uY2MzNTllMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxl Cj4gQEAgLTQwLDYgKzQwLDkgQEAgaTkxNS15ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKPiAgCSAg aW50ZWxfcmluZ2J1ZmZlci5vIFwKPiAgCSAgaW50ZWxfdW5jb3JlLm8KPiAgCj4gKyMgZ2VuZXJh bC1wdXJwb3NlIG1pY3JvY29udHJvbGxlciAoR3VDKSBzdXBwb3J0Cj4gK2k5MTUteSArPSBpbnRl bF9ndWNfbG9hZGVyLm8KPiArCj4gICMgYXV0b2dlbmVyYXRlZCBudWxsIHJlbmRlciBzdGF0ZQo+ ICBpOTE1LXkgKz0gaW50ZWxfcmVuZGVyc3RhdGVfZ2VuNi5vIFwKPiAgCSAgaW50ZWxfcmVuZGVy c3RhdGVfZ2VuNy5vIFwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k bWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKPiBpbmRleCBhYjM3ZDExLi4y MTkzY2MyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCj4gQEAgLTQzNSw2ICs0MzUsMTEg QEAgc3RhdGljIGludCBpOTE1X2xvYWRfbW9kZXNldF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpCj4gIAkgKiB3b3JraW5nIGlycXMgZm9yIGUuZy4gZ21idXMgYW5kIGRwIGF1eCB0cmFuc2Zl cnMuICovCj4gIAlpbnRlbF9tb2Rlc2V0X2luaXQoZGV2KTsKPiAgCj4gKwkvKiBpbnRlbF9ndWNf dWNvZGVfaW5pdCgpIG5lZWRzIHRoZSBtdXRleCB0byBhbGxvY2F0ZSBHRU0gb2JqZWN0cyAqLwo+ ICsJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICsJaW50ZWxfZ3VjX3Vjb2RlX2lu aXQoZGV2KTsKPiArCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICsKPiAgCXJl dCA9IGk5MTVfZ2VtX2luaXQoZGV2KTsKPiAgCWlmIChyZXQpCj4gIAkJZ290byBjbGVhbnVwX2ly cTsKPiBAQCAtNDc2LDYgKzQ4MSw5IEBAIGNsZWFudXBfZ2VtOgo+ICAJaTkxNV9nZW1fY29udGV4 dF9maW5pKGRldik7Cj4gIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAgY2xl YW51cF9pcnE6Cj4gKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gKwlpbnRlbF9n dWNfdWNvZGVfZmluaShkZXYpOwo+ICsJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7 Cj4gIAlkcm1faXJxX3VuaW5zdGFsbChkZXYpOwo+ICBjbGVhbnVwX2dlbV9zdG9sZW46Cj4gIAlp OTE1X2dlbV9jbGVhbnVwX3N0b2xlbihkZXYpOwo+IEBAIC0xMTI4LDYgKzExMzYsNyBAQCBpbnQg aTkxNV9kcml2ZXJfdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAlmbHVzaF93b3Jr cXVldWUoZGV2X3ByaXYtPndxKTsKPiAgCj4gIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRl eCk7Cj4gKwlpbnRlbF9ndWNfdWNvZGVfZmluaShkZXYpOwo+ICAJaTkxNV9nZW1fY2xlYW51cF9y aW5nYnVmZmVyKGRldik7Cj4gIAlpOTE1X2dlbV9jb250ZXh0X2ZpbmkoZGV2KTsKPiAgCW11dGV4 X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IGlu ZGV4IDA0YWEzNGEuLjJjNTM5ZGYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAt NTAsNiArNTAsNyBAQAo+ICAjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KPiAgI2luY2x1 ZGUgPGxpbnV4L2tyZWYuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L3BtX3Fvcy5oPgo+ICsjaW5jbHVk ZSAiaW50ZWxfZ3VjLmgiCj4gIAo+ICAvKiBHZW5lcmFsIGN1c3RvbWl6YXRpb246Cj4gICAqLwo+ IEBAIC0xNjk3LDYgKzE2OTgsOCBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7Cj4gIAo+ICAJ c3RydWN0IGk5MTVfdmlydHVhbF9ncHUgdmdwdTsKPiAgCj4gKwlzdHJ1Y3QgaW50ZWxfZ3VjIGd1 YzsKPiArCj4gIAlzdHJ1Y3QgaW50ZWxfY3NyIGNzcjsKPiAgCj4gIAkvKiBEaXNwbGF5IENTUi1y ZWxhdGVkIHByb3RlY3Rpb24gKi8KPiBAQCAtMTk0MSw2ICsxOTQ0LDExIEBAIHN0YXRpYyBpbmxp bmUgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl90b19pOTE1KHN0cnVjdCBkZXZpY2UgKmRl dikKPiAgCXJldHVybiB0b19pOTE1KGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKPiAgfQo+ICAKPiAr c3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZ3VjX3RvX2k5MTUoc3RydWN0 IGludGVsX2d1YyAqZ3VjKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGd1Yywgc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUsIGd1Yyk7Cj4gK30KPiArCj4gIC8qIEl0ZXJhdGUgb3ZlciBpbml0 aWFsaXNlZCByaW5ncyAqLwo+ICAjZGVmaW5lIGZvcl9lYWNoX3JpbmcocmluZ19fLCBkZXZfcHJp dl9fLCBpX18pIFwKPiAgCWZvciAoKGlfXykgPSAwOyAoaV9fKSA8IEk5MTVfTlVNX1JJTkdTOyAo aV9fKSsrKSBcCj4gQEAgLTI1NDQsNiArMjU1Miw5IEBAIHN0cnVjdCBkcm1faTkxNV9jbWRfdGFi bGUgewo+ICAKPiAgI2RlZmluZSBIQVNfQ1NSKGRldikJKElTX1NLWUxBS0UoZGV2KSkKPiAgCj4g KyNkZWZpbmUgSEFTX0dVQ19VQ09ERShkZXYpCShJU19HRU45KGRldikpCj4gKyNkZWZpbmUgSEFT X0dVQ19TQ0hFRChkZXYpCShJU19HRU45KGRldikpCj4gKwo+ICAjZGVmaW5lIEhBU19SRVNPVVJD RV9TVFJFQU1FUihkZXYpIChJU19IQVNXRUxMKGRldikgfHwgXAo+ICAJCQkJICAgIElOVEVMX0lO Rk8oZGV2KS0+Z2VuID49IDgpCj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IGluZGV4IDc5 NTg1NmQuLjJjZmI0MjggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW0uYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBAQCAtNDY3OSw2 ICs0Njc5LDIyIEBAIGk5MTVfZ2VtX2luaXRfaHcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAg CQkJZ290byBvdXQ7Cj4gIAl9Cj4gIAo+ICsJLyogV2UgY2FuJ3QgZW5hYmxlIGNvbnRleHRzIHVu dGlsIGFsbCBmaXJtd2FyZSBpcyBsb2FkZWQgKi8KPiArCXJldCA9IGludGVsX2d1Y191Y29kZV9s b2FkKGRldik7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJLyoKPiArCQkgKiBJZiB3ZSBnb3QgYW4gZXJy b3IgYW5kIEd1QyBzdWJtaXNzaW9uIGlzIGVuYWJsZWQsIG1hcAo+ICsJCSAqIHRoZSBlcnJvciB0 byAtRUlPIHNvIHRoZSBHUFUgd2lsbCBiZSBkZWNsYXJlZCB3ZWRnZWQuCj4gKwkJICogT1RPSCwg aWYgd2UgZGlkbid0IGludGVuZCB0byB1c2UgdGhlIEd1QyBhbnl3YXksIGp1c3QKPiArCQkgKiBk aXNjYXJkIHRoZSBlcnJvciBhbmQgY2Fycnkgb24uCj4gKwkJICovCj4gKwkJRFJNX0VSUk9SKCJG YWlsZWQgdG8gaW5pdGlhbGl6ZSBHdUMsIGVycm9yICVkJXNcbiIsIHJldCwKPiArCQkJaTkxNS5l bmFibGVfZ3VjX3N1Ym1pc3Npb24gPyAiIiA6ICIgKGlnbm9yZWQpIik7Cj4gKwkJcmV0ID0gaTkx NS5lbmFibGVfZ3VjX3N1Ym1pc3Npb24gPyAtRUlPIDogMDsKPiArCQlpZiAocmV0KQo+ICsJCQln b3RvIG91dDsKPiArCX0KPiArCj4gIAkvKiBOb3cgaXQgaXMgc2FmZSB0byBnbyBiYWNrIHJvdW5k IGFuZCBkbyBldmVyeXRoaW5nIGVsc2U6ICovCj4gIAlmb3JfZWFjaF9yaW5nKHJpbmcsIGRldl9w cml2LCBpKSB7Cj4gIAkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXE7Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3JlZy5oIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9ndWNfcmVnLmgKPiBpbmRleCBjY2RjNmM4Li44YzhlNTc0IDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3JlZy5oCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfcmVnLmgKPiBAQCAtMzgsMTAgKzM4LDYgQEAKPiAgI2Rl ZmluZSAgIEdTX01JQV9TSElGVAkJCTE2Cj4gICNkZWZpbmUgICBHU19NSUFfTUFTSwkJCSAgKDB4 MDcgPDwgR1NfTUlBX1NISUZUKQo+ICAKPiAtI2RlZmluZSBHVUNfV09QQ01fU0laRQkJCTB4YzA1 MAo+IC0jZGVmaW5lICAgR1VDX1dPUENNX1NJWkVfVkFMVUUgIAkgICgweDgwIDw8IDEyKQkvKiA1 MTJLQiAqLwo+IC0jZGVmaW5lIEdVQ19XT1BDTV9PRkZTRVQJCTB4ODAwMDAJCS8qIDUxMktCICov Cj4gLQo+ICAjZGVmaW5lIFNPRlRfU0NSQVRDSChuKQkJCSgweGMxODAgKyAoKG4pICogNCkpCj4g IAo+ICAjZGVmaW5lIFVPU19SU0FfU0NSQVRDSF8wCQkweGMyMDAKPiBAQCAtNTYsMTAgKzUyLDE4 IEBACj4gICNkZWZpbmUgICBVT1NfTU9WRQkJCSAgKDE8PDQpCj4gICNkZWZpbmUgICBTVEFSVF9E TUEJCQkgICgxPDwwKQo+ICAjZGVmaW5lIERNQV9HVUNfV09QQ01fT0ZGU0VUCQkweGMzNDAKPiAr I2RlZmluZSAgIEdVQ19XT1BDTV9PRkZTRVRfVkFMVUUJICAweDgwMDAwCS8qIDUxMktCICovCj4g Kwo+ICsjZGVmaW5lIEdVQ19XT1BDTV9TSVpFCQkJMHhjMDUwCj4gKyNkZWZpbmUgICBHVUNfV09Q Q01fU0laRV9WQUxVRSAgCSAgKDB4ODAgPDwgMTIpCS8qIDUxMktCICovCj4gKwo+ICsvKiBHdUMg YWRkcmVzc2VzIGJlbG93IEdVQ19XT1BDTV9UT1AgZG9uJ3QgbWFwIHRocm91Z2ggdGhlIEdUVCAq Lwo+ICsjZGVmaW5lCUdVQ19XT1BDTV9UT1AJCQkoR1VDX1dPUENNX1NJWkVfVkFMVUUpCj4gIAo+ ICAjZGVmaW5lIEdFTjhfR1RfUE1fQ09ORklHCQkweDEzODE0MAo+ICsjZGVmaW5lIEdFTjlMUF9H VF9QTV9DT05GSUcJCTB4MTM4MTQwCj4gICNkZWZpbmUgR0VOOV9HVF9QTV9DT05GSUcJCTB4MTM4 MTZjCj4gLSNkZWZpbmUgICBHRU44X0dUX0RPT1JCRUxMX0VOQUJMRQkgICgxPDwwKQo+ICsjZGVm aW5lICAgR1RfRE9PUkJFTExfRU5BQkxFCQkgICgxPDwwKQo+ICAKPiAgI2RlZmluZSBHRU44X0dU Q1IJCQkweDQyNzQKPiAgI2RlZmluZSAgIEdFTjhfR1RDUl9JTlZBTElEQVRFCQkgICgxPDwwKQo+ IEBAIC04MCw3ICs4NCw4IEBACj4gIAkJCQkgR1VDX0VOQUJMRV9SRUFEX0NBQ0hFX0xPR0lDCQl8 IFwKPiAgCQkJCSBHVUNfRU5BQkxFX01JQV9DQUNISU5HCQkJfCBcCj4gIAkJCQkgR1VDX0VOQUJM RV9SRUFEX0NBQ0hFX0ZPUl9TUkFNX0RBVEEJfCBcCj4gLQkJCQkgR1VDX0VOQUJMRV9SRUFEX0NB Q0hFX0ZPUl9XT1BDTV9EQVRBKQo+ICsJCQkJIEdVQ19FTkFCTEVfUkVBRF9DQUNIRV9GT1JfV09Q Q01fREFUQQl8IFwKPiArCQkJCSBHVUNfRU5BQkxFX01JQV9DTE9DS19HQVRJTkcpCj4gIAo+ICAj ZGVmaW5lIEhPU1QyR1VDX0lOVEVSUlVQVAkJMHhjNGM4Cj4gICNkZWZpbmUgICBIT1NUMkdVQ19U UklHR0VSCQkgICgxPDwwKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+IGluZGV4IDNhNzc2Nzgu LmZmNTgyNDUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKPiBAQCAtNjg0OSw3ICs2ODQ5 LDkgQEAgZW51bSBza2xfZGlzcF9wb3dlcl93ZWxscyB7Cj4gICNkZWZpbmUgICBHRU45X1BHQ1RM X1NTQl9FVTMxMV9BQ0sJKDEgPDwgMTQpCj4gIAo+ICAjZGVmaW5lIEdFTjdfTUlTQ0NQQ1RMCQkJ KDB4OTQyNCkKPiAtI2RlZmluZSAgIEdFTjdfRE9QX0NMT0NLX0dBVEVfRU5BQkxFCSgxPDwwKQo+ ICsjZGVmaW5lICAgR0VON19ET1BfQ0xPQ0tfR0FURV9FTkFCTEUJCSgxPDwwKQo+ICsjZGVmaW5l ICAgR0VOOF9ET1BfQ0xPQ0tfR0FURV9DRkNMS19FTkFCTEUJKDE8PDIpCj4gKyNkZWZpbmUgICBH RU44X0RPUF9DTE9DS19HQVRFX0dVQ19FTkFCTEUJKDE8PDQpCj4gIAo+ICAvKiBJVllCUklER0Ug RFBGICovCj4gICNkZWZpbmUgR0VON19MM0NERVJSU1QxCQkJMHhCMDA4IC8qIEwzQ0QgRXJyb3Ig U3RhdHVzIDEgKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3Vj LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaAo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMC4uMjg0NmI2ZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaAo+IEBAIC0wLDAgKzEsNjcgQEAKPiArLyoKPiAr ICogQ29weXJpZ2h0IMKpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz dHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsg KiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklH SFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsg KiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBT T0ZUV0FSRS4KPiArICoKPiArICovCj4gKyNpZm5kZWYgX0lOVEVMX0dVQ19IXwo+ICsjZGVmaW5l IF9JTlRFTF9HVUNfSF8KPiArCj4gKyNpbmNsdWRlICJpbnRlbF9ndWNfZndpZi5oIgo+ICsjaW5j bHVkZSAiaTkxNV9ndWNfcmVnLmgiCj4gKwo+ICtlbnVtIGludGVsX2d1Y19md19zdGF0dXMgewo+ ICsJR1VDX0ZJUk1XQVJFX0ZBSUwgPSAtMSwKPiArCUdVQ19GSVJNV0FSRV9OT05FID0gMCwKPiAr CUdVQ19GSVJNV0FSRV9QRU5ESU5HLAo+ICsJR1VDX0ZJUk1XQVJFX1NVQ0NFU1MKPiArfTsKPiAr Cj4gKy8qCj4gKyAqIFRoaXMgc3RydWN0dXJlIGVuY2Fwc3VsYXRlcyBhbGwgdGhlIGRhdGEgbmVl ZGVkIGR1cmluZyB0aGUgcHJvY2Vzcwo+ICsgKiBvZiBmZXRjaGluZywgY2FjaGluZywgYW5kIGxv YWRpbmcgdGhlIGZpcm13YXJlIGltYWdlIGludG8gdGhlIEd1Qy4KPiArICovCj4gK3N0cnVjdCBp bnRlbF9ndWNfZncgewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKgkJZ3VjX2RldjsKPiArCWNvbnN0 IGNoYXIgKgkJCWd1Y19md19wYXRoOwo+ICsJc2l6ZV90CQkJCWd1Y19md19zaXplOwo+ICsJc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKglndWNfZndfb2JqOwo+ICsJZW51bSBpbnRlbF9ndWNf Zndfc3RhdHVzCWd1Y19md19mZXRjaF9zdGF0dXM7Cj4gKwllbnVtIGludGVsX2d1Y19md19zdGF0 dXMJZ3VjX2Z3X2xvYWRfc3RhdHVzOwo+ICsKPiArCXVpbnQxNl90CQkJZ3VjX2Z3X21ham9yX3dh bnRlZDsKPiArCXVpbnQxNl90CQkJZ3VjX2Z3X21pbm9yX3dhbnRlZDsKPiArCXVpbnQxNl90CQkJ Z3VjX2Z3X21ham9yX2ZvdW5kOwo+ICsJdWludDE2X3QJCQlndWNfZndfbWlub3JfZm91bmQ7Cj4g K307Cj4gKwo+ICtzdHJ1Y3QgaW50ZWxfZ3VjIHsKPiArCXN0cnVjdCBpbnRlbF9ndWNfZncgZ3Vj X2Z3Owo+ICsKPiArCXVpbnQzMl90IGxvZ19mbGFnczsKPiArfTsKPiArCj4gKy8qIGludGVsX2d1 Y19sb2FkZXIuYyAqLwo+ICtleHRlcm4gdm9pZCBpbnRlbF9ndWNfdWNvZGVfaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KTsKPiArZXh0ZXJuIGludCBpbnRlbF9ndWNfdWNvZGVfbG9hZChzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KTsKPiArZXh0ZXJuIHZvaWQgaW50ZWxfZ3VjX3Vjb2RlX2Zpbmko c3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gK2V4dGVybiBjb25zdCBjaGFyICppbnRlbF9ndWNf Zndfc3RhdHVzX3JlcHIoZW51bSBpbnRlbF9ndWNfZndfc3RhdHVzIHN0YXR1cyk7Cj4gKwo+ICsj ZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2Z3aWYu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19md2lmLmgKPiBpbmRleCAxOGQ3ZjIw Li4wNmFhZDZmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19m d2lmLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfZndpZi5oCj4gQEAg LTMyLDkgKzMyLDggQEAKPiAgICogRURJVElORyBUSElTIEZJTEUgSVMgVEhFUkVGT1JFIE5PVCBS RUNPTU1FTkRFRCAtIFlPVVIgQ0hBTkdFUyBNQVkgQkUgTE9TVC4KPiAgICovCj4gIAo+IC0jZGVm aW5lIEdGWENPUkVfRkFNSUxZX0dFTjgJCTExCj4gICNkZWZpbmUgR0ZYQ09SRV9GQU1JTFlfR0VO OQkJMTIKPiAtI2RlZmluZSBHRlhDT1JFX0ZBTUlMWV9GT1JDRV9VTE9ORwkweDdmZmZmZmZmCj4g KyNkZWZpbmUgR0ZYQ09SRV9GQU1JTFlfVU5LTk9XTgkJMHg3ZmZmZmZmZgo+ICAKPiAgI2RlZmlu ZSBHVUNfQ1RYX1BSSU9SSVRZX0NSSVRJQ0FMCTAKPiAgI2RlZmluZSBHVUNfQ1RYX1BSSU9SSVRZ X0hJR0gJCTEKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2xv YWRlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2xvYWRlci5jCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi43ZDBhZDNlCj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2FkZXIuYwo+IEBAIC0wLDAg KzEsNTMxIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE0IEludGVsIENvcnBvcmF0aW9u Cj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAq IHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBh cmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhF IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM SU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAqIEF1dGhvcnM6Cj4gKyAqICAg IFZpbml0IEF6YWQgPHZpbml0LmF6YWRAaW50ZWwuY29tPgo+ICsgKiAgICBCZW4gV2lkYXdza3kg PGJlbkBid2lkYXdzay5uZXQ+Cj4gKyAqICAgIERhdmUgR29yZG9uIDxkYXZpZC5zLmdvcmRvbkBp bnRlbC5jb20+Cj4gKyAqICAgIEFsZXggRGFpIDx5dS5kYWlAaW50ZWwuY29tPgo+ICsgKi8KPiAr I2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Cj4gKyNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ICsj aW5jbHVkZSAiaW50ZWxfZ3VjLmgiCj4gKwo+ICsvKioKPiArICogRE9DOiBHdUMKPiArICoKPiAr ICogaW50ZWxfZ3VjOgo+ICsgKiBUb3AgbGV2ZWwgc3RydWN0dXJlIG9mIGd1Yy4gSXQgaGFuZGxl cyBmaXJtd2FyZSBsb2FkaW5nIGFuZCBtYW5hZ2VzIGNsaWVudAo+ICsgKiBwb29sIGFuZCBkb29y YmVsbHMuIGludGVsX2d1YyBvd25zIGEgaTkxNV9ndWNfY2xpZW50IHRvIHJlcGxhY2UgdGhlIGxl Z2FjeQo+ICsgKiBFeGVjTGlzdCBzdWJtaXNzaW9uLgo+ICsgKgo+ICsgKiBGaXJtd2FyZSB2ZXJz aW9uaW5nOgo+ICsgKiBUaGUgZmlybXdhcmUgYnVpbGQgcHJvY2VzcyB3aWxsIGdlbmVyYXRlIGEg dmVyc2lvbiBoZWFkZXIgZmlsZSB3aXRoIG1ham9yIGFuZAo+ICsgKiBtaW5vciB2ZXJzaW9uIGRl ZmluZWQuIFRoZSB2ZXJzaW9ucyBhcmUgYnVpbHQgaW50byBDU1MgaGVhZGVyIG9mIGZpcm13YXJl Lgo+ICsgKiBpOTE1IGtlcm5lbCBkcml2ZXIgc2V0IHRoZSBtaW5pbWFsIGZpcm13YXJlIHZlcnNp b24gcmVxdWlyZWQgcGVyIHBsYXRmb3JtLgo+ICsgKiBUaGUgZmlybXdhcmUgaW5zdGFsbGF0aW9u IHBhY2thZ2Ugd2lsbCBpbnN0YWxsIChzeW1ib2xpYyBsaW5rKSBwcm9wZXIgdmVyc2lvbgo+ICsg KiBvZiBmaXJtd2FyZS4KPiArICoKPiArICogR3VDIGFkZHJlc3Mgc3BhY2U6Cj4gKyAqIEd1QyBk b2VzIG5vdCBhbGxvdyBhbnkgZ2Z4IEdHVFQgYWRkcmVzcyB0aGF0IGZhbGxzIGludG8gcmFuZ2Ug WzAsIFdPUENNX1RPUCksCj4gKyAqIHdoaWNoIGlzIHJlc2VydmVkIGZvciBCb290IFJPTSwgU1JB TSBhbmQgV09QQ00uIEN1cnJlbnRseSB0aGlzIHRvcCBhZGRyZXNzIGlzCj4gKyAqIDUxMksuIElu IG9yZGVyIHRvIGV4Y2x1ZGUgMC01MTJLIGFkZHJlc3Mgc3BhY2UgZnJvbSBHR1RULCBhbGwgZ2Z4 IG9iamVjdHMKPiArICogdXNlZCBieSBHdUMgaXMgcGlubmVkIHdpdGggUElOX09GRlNFVF9CSUFT IGFsb25nIHdpdGggc2l6ZSBvZiBXT1BDTS4KPiArICoKPiArICogRmlybXdhcmUgbG9nOgo+ICsg KiBGaXJtd2FyZSBsb2cgaXMgZW5hYmxlZCBieSBzZXR0aW5nIGk5MTUuZ3VjX2xvZ19sZXZlbCB0 byBub24tbmVnYXRpdmUgbGV2ZWwuCj4gKyAqIExvZyBkYXRhIGlzIHByaW50ZWQgb3V0IHZpYSBy ZWFkaW5nIGRlYnVnZnMgaTkxNV9ndWNfbG9nX2R1bXAuIFJlYWRpbmcgZnJvbQo+ICsgKiBpOTE1 X2d1Y19sb2FkX3N0YXR1cyB3aWxsIHByaW50IG91dCBmaXJtd2FyZSBsb2FkaW5nIHN0YXR1cyBh bmQgc2NyYXRjaAo+ICsgKiByZWdpc3RlcnMgdmFsdWUuCj4gKyAqCj4gKyAqLwo+ICsKPiArI2Rl ZmluZSBJOTE1X1NLTF9HVUNfVUNPREUgImk5MTUvc2tsX2d1Y192ZXIzLmJpbiIKPiArTU9EVUxF X0ZJUk1XQVJFKEk5MTVfU0tMX0dVQ19VQ09ERSk7Cj4gKwo+ICsvKiBVc2VyLWZyaWVuZGx5IHJl cHJlc2VudGF0aW9uIG9mIGFuIGVudW0gKi8KPiArY29uc3QgY2hhciAqaW50ZWxfZ3VjX2Z3X3N0 YXR1c19yZXByKGVudW0gaW50ZWxfZ3VjX2Z3X3N0YXR1cyBzdGF0dXMpCj4gK3sKPiArCXN3aXRj aCAoc3RhdHVzKSB7Cj4gKwljYXNlIEdVQ19GSVJNV0FSRV9GQUlMOgo+ICsJCXJldHVybiAiRkFJ TCI7Cj4gKwljYXNlIEdVQ19GSVJNV0FSRV9OT05FOgo+ICsJCXJldHVybiAiTk9ORSI7Cj4gKwlj YXNlIEdVQ19GSVJNV0FSRV9QRU5ESU5HOgo+ICsJCXJldHVybiAiUEVORElORyI7Cj4gKwljYXNl IEdVQ19GSVJNV0FSRV9TVUNDRVNTOgo+ICsJCXJldHVybiAiU1VDQ0VTUyI7Cj4gKwlkZWZhdWx0 Ogo+ICsJCXJldHVybiAiVU5LTk9XTiEiOwo+ICsJfQo+ICt9Owo+ICsKPiArc3RhdGljIHUzMiBn ZXRfZ3R0eXBlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJLyog WFhYOiBHVCB0eXBlIGJhc2VkIG9uIFBDSSBkZXZpY2UgSUQ/IGZpZWxkIHNlZW1zIHVudXNlZCBi eSBmdyAqLwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB1MzIgZ2V0X2NvcmVfZmFt aWx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJc3dpdGNoIChJ TlRFTF9JTkZPKGRldl9wcml2KS0+Z2VuKSB7Cj4gKwljYXNlIDk6Cj4gKwkJcmV0dXJuIEdGWENP UkVfRkFNSUxZX0dFTjk7Cj4gKwo+ICsJZGVmYXVsdDoKPiArCQlEUk1fRVJST1IoIkdVQzogdW5z dXBwb3J0ZWQgY29yZSBmYW1pbHlcbiIpOwo+ICsJCXJldHVybiBHRlhDT1JFX0ZBTUlMWV9VTktO T1dOOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzZXRfZ3VjX2luaXRfcGFyYW1zKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArewo+ICsJc3RydWN0IGludGVsX2d1 YyAqZ3VjID0gJmRldl9wcml2LT5ndWM7Cj4gKwl1MzIgcGFyYW1zW0dVQ19DVExfTUFYX0RXT1JE U107Cj4gKwlpbnQgaTsKPiArCj4gKwltZW1zZXQoJnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykp Owo+ICsKPiArCXBhcmFtc1tHVUNfQ1RMX0RFVklDRV9JTkZPXSB8PQo+ICsJCShnZXRfZ3R0eXBl KGRldl9wcml2KSA8PCBHVUNfQ1RMX0dUVFlQRV9TSElGVCkgfAo+ICsJCShnZXRfY29yZV9mYW1p bHkoZGV2X3ByaXYpIDw8IEdVQ19DVExfQ09SRUZBTUlMWV9TSElGVCk7Cj4gKwo+ICsJLyoKPiAr CSAqIEd1QyBBUkFUIGluY3JlbWVudCBpcyAxMCBucy4gR3VDIGRlZmF1bHQgc2NoZWR1bGVyIHF1 YW50dW0gaXMgb25lCj4gKwkgKiBzZWNvbmQuIFRoaXMgQVJBUiBpcyBjYWxjdWxhdGVkIGJ5Ogo+ ICsJICogU2NoZWR1bGVyLVF1YW50dW0taW4tbnMgLyBBUkFULWluY3JlbWVudC1pbi1ucyA9IDEw MDAwMDAwMDAgLyAxMAo+ICsJICovCj4gKwlwYXJhbXNbR1VDX0NUTF9BUkFUX0hJR0hdID0gMDsK PiArCXBhcmFtc1tHVUNfQ1RMX0FSQVRfTE9XXSA9IDEwMDAwMDAwMDsKPiArCj4gKwlwYXJhbXNb R1VDX0NUTF9XQV0gfD0gR1VDX0NUTF9XQV9VS19CWV9EUklWRVI7Cj4gKwo+ICsJcGFyYW1zW0dV Q19DVExfRkVBVFVSRV0gfD0gR1VDX0NUTF9ESVNBQkxFX1NDSEVEVUxFUiB8Cj4gKwkJCUdVQ19D VExfVkNTMl9FTkFCTEVEOwo+ICsKPiArCWlmIChpOTE1Lmd1Y19sb2dfbGV2ZWwgPj0gMCkgewo+ ICsJCXBhcmFtc1tHVUNfQ1RMX0xPR19QQVJBTVNdID0gZ3VjLT5sb2dfZmxhZ3M7Cj4gKwkJcGFy YW1zW0dVQ19DVExfREVCVUddID0KPiArCQkJaTkxNS5ndWNfbG9nX2xldmVsIDw8IEdVQ19MT0df VkVSQk9TSVRZX1NISUZUOwo+ICsJfQo+ICsKPiArCUk5MTVfV1JJVEUoU09GVF9TQ1JBVENIKDAp LCAwKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgR1VDX0NUTF9NQVhfRFdPUkRTOyBpKyspCj4g KwkJSTkxNV9XUklURShTT0ZUX1NDUkFUQ0goMSArIGkpLCBwYXJhbXNbaV0pOwo+ICt9Cj4gKwo+ ICsvKgo+ICsgKiBSZWFkIHRoZSBHdUMgc3RhdHVzIHJlZ2lzdGVyIChHVUNfU1RBVFVTKSBhbmQg c3RvcmUgaXQgaW4gdGhlCj4gKyAqIHNwZWNpZmllZCBsb2NhdGlvbjsgdGhlbiByZXR1cm4gYSBi b29sZWFuIGluZGljYXRpbmcgd2hldGhlcgo+ICsgKiB0aGUgdmFsdWUgbWF0Y2hlcyBlaXRoZXIg b2YgdHdvIHZhbHVlcyByZXByZXNlbnRpbmcgY29tcGxldGlvbgo+ICsgKiBvZiB0aGUgR3VDIGJv b3QgcHJvY2Vzcy4KPiArICoKPiArICogVGhpcyBpcyB1c2VkIGZvciBwb2xsaW5nIHRoZSBHdUMg c3RhdHVzIGluIGEgd2FpdF9mb3JfYXRvbWljKCkKPiArICogbG9vcCBiZWxvdy4KPiArICovCj4g K3N0YXRpYyBpbmxpbmUgYm9vbCBndWNfdWNvZGVfcmVzcG9uc2Uoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAo+ICsJCQkJICAgICAgdTMyICpzdGF0dXMpCj4gK3sKPiArCXUzMiB2 YWwgPSBJOTE1X1JFQUQoR1VDX1NUQVRVUyk7Cj4gKwkqc3RhdHVzID0gdmFsOwo+ICsJcmV0dXJu ICgodmFsICYgR1NfVUtFUk5FTF9NQVNLKSA9PSBHU19VS0VSTkVMX1JFQURZIHx8Cj4gKwkJKHZh bCAmIEdTX1VLRVJORUxfTUFTSykgPT0gR1NfVUtFUk5FTF9MQVBJQ19ET05FKTsKPiArfQo+ICsK PiArLyoKPiArICogVHJhbnNmZXIgdGhlIGZpcm13YXJlIGltYWdlIHRvIFJBTSBmb3IgZXhlY3V0 aW9uIGJ5IHRoZSBtaWNyb2NvbnRyb2xsZXIuCj4gKyAqCj4gKyAqIEd1QyBGaXJtd2FyZSBsYXlv dXQ6Cj4gKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgLS0tLQo+ICsgKiB8 ICAgICAgICAgIENTUyBoZWFkZXIgICAgICAgICAgIHwgIDEyOEIKPiArICogfCBjb250YWlucyBt YWpvci9taW5vciB2ZXJzaW9uICB8Cj4gKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKyAgLS0tLQo+ICsgKiB8ICAgICAgICAgICAgIHVDb2RlICAgICAgICAgICAgIHwKPiArICog Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAtLS0tCj4gKyAqIHwgICAgICAgICBS U0Egc2lnbmF0dXJlICAgICAgICAgfCAgMjU2Qgo+ICsgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSsgIC0tLS0KPiArICogfCAgICAgICAgIFJTQSBwdWJsaWMgS2V5ICAgICAgICB8 ICAyNTZCCj4gKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgLS0tLQo+ICsg KiB8ICAgICAgIFB1YmxpYyBrZXkgbW9kdWx1cyAgICAgIHwgICAgNEIKPiArICogKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAtLS0tCj4gKyAqCj4gKyAqIEFyY2hpdGVjdHVyYWxs eSwgdGhlIERNQSBlbmdpbmUgaXMgYmlkaXJlY3Rpb25hbCwgYW5kIGNhbiBwb3RlbnRpYWxseSBl dmVuCj4gKyAqIHRyYW5zZmVyIGJldHdlZW4gR1RUIGxvY2F0aW9ucy4gVGhpcyBmdW5jdGlvbmFs aXR5IGlzIGxlZnQgb3V0IG9mIHRoZSBBUEkKPiArICogZm9yIG5vdyBhcyB0aGVyZSBpcyBubyBu ZWVkIGZvciBpdC4KPiArICoKPiArICogTm90ZSB0aGF0IEd1QyBuZWVkcyB0aGUgQ1NTIGhlYWRl ciBwbHVzIHVLZXJuZWwgY29kZSB0byBiZSBjb3BpZWQgYnkgdGhlCj4gKyAqIERNQSBlbmdpbmUg aW4gb25lIG9wZXJhdGlvbiwgd2hlcmVhcyB0aGUgUlNBIHNpZ25hdHVyZSBpcyBsb2FkZWQgdmlh IE1NSU8uCj4gKyAqLwo+ICsKPiArI2RlZmluZSBVT1NfQ1NTX0hFQURFUl9PRkZTRVQJCTAKPiAr I2RlZmluZSBVT1NfVkVSX01JTk9SX09GRlNFVAkJMHg0NAo+ICsjZGVmaW5lIFVPU19WRVJfTUFK T1JfT0ZGU0VUCQkweDQ2Cj4gKyNkZWZpbmUgVU9TX0NTU19IRUFERVJfU0laRQkJMHg4MAo+ICsj ZGVmaW5lIFVPU19SU0FfU0lHX1NJWkUJCTB4MTAwCj4gKyNkZWZpbmUgVU9TX0NTU19TSUdOSU5H X1NJWkUJCTB4MjA0Cj4gKwo+ICtzdGF0aWMgaW50IGd1Y191Y29kZV94ZmVyX2RtYShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9ndWNfZncg Kmd1Y19mdyA9ICZkZXZfcHJpdi0+Z3VjLmd1Y19mdzsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpmd19vYmogPSBndWNfZnctPmd1Y19md19vYmo7Cj4gKwl1bnNpZ25lZCBsb25nIG9m ZnNldDsKPiArCXN0cnVjdCBzZ190YWJsZSAqc2cgPSBmd19vYmotPnBhZ2VzOwo+ICsJdTMyIHN0 YXR1cywgdWNvZGVfc2l6ZSwgcnNhW1VPU19SU0FfU0lHX1NJWkUgLyBzaXplb2YodTMyKV07Cj4g KwlpbnQgaSwgcmV0ID0gMDsKPiArCj4gKwkvKiB1Q29kZSBzaXplLCBhbHNvIGlzIHdoZXJlIFJT QSBzaWduYXR1cmUgc3RhcnRzICovCj4gKwlvZmZzZXQgPSB1Y29kZV9zaXplID0gZ3VjX2Z3LT5n dWNfZndfc2l6ZSAtIFVPU19DU1NfU0lHTklOR19TSVpFOwo+ICsJSTkxNV9XUklURShETUFfQ09Q WV9TSVpFLCB1Y29kZV9zaXplKTsKPiArCj4gKwkvKiBDb3B5IFJTQSBzaWduYXR1cmUgZnJvbSB0 aGUgZncgaW1hZ2UgdG8gSFcgZm9yIHZlcmlmaWNhdGlvbiAqLwo+ICsJc2dfcGNvcHlfdG9fYnVm ZmVyKHNnLT5zZ2wsIHNnLT5uZW50cywgcnNhLCBVT1NfUlNBX1NJR19TSVpFLCBvZmZzZXQpOwo+ ICsJZm9yIChpID0gMDsgaSA8IFVPU19SU0FfU0lHX1NJWkUgLyBzaXplb2YodTMyKTsgaSsrKQo+ ICsJCUk5MTVfV1JJVEUoVU9TX1JTQV9TQ1JBVENIXzAgKyBpICogc2l6ZW9mKHUzMiksIHJzYVtp XSk7Cj4gKwo+ICsJLyogU2V0IHRoZSBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIG5ldyBibG9iICov Cj4gKwlvZmZzZXQgPSBpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQoZndfb2JqKTsKPiArCUk5MTVf V1JJVEUoRE1BX0FERFJfMF9MT1csIGxvd2VyXzMyX2JpdHMob2Zmc2V0KSk7Cj4gKwlJOTE1X1dS SVRFKERNQV9BRERSXzBfSElHSCwgdXBwZXJfMzJfYml0cyhvZmZzZXQpICYgMHhGRkZGKTsKPiAr Cj4gKwkvKgo+ICsJICogU2V0IHRoZSBETUEgZGVzdGluYXRpb24uIEN1cnJlbnQgdUNvZGUgZXhw ZWN0cyB0aGUgY29kZSB0byBiZQo+ICsJICogbG9hZGVkIGF0IDhrOyBsb2NhdGlvbnMgYmVsb3cg dGhpcyBhcmUgdXNlZCBmb3IgdGhlIHN0YWNrLgo+ICsJICovCj4gKwlJOTE1X1dSSVRFKERNQV9B RERSXzFfTE9XLCAweDIwMDApOwo+ICsJSTkxNV9XUklURShETUFfQUREUl8xX0hJR0gsIERNQV9B RERSRVNTX1NQQUNFX1dPUENNKTsKPiArCj4gKwkvKiBGaW5hbGx5IHN0YXJ0IHRoZSBETUEgKi8K PiArCUk5MTVfV1JJVEUoRE1BX0NUUkwsIF9NQVNLRURfQklUX0VOQUJMRShVT1NfTU9WRSB8IFNU QVJUX0RNQSkpOwo+ICsKPiArCS8qCj4gKwkgKiBTcGluLXdhaXQgZm9yIHRoZSBETUEgdG8gY29t cGxldGUgJiB0aGUgR3VDIHRvIHN0YXJ0IHVwLgo+ICsJICogTkI6IERvY3MgcmVjb21tZW5kIG5v dCB1c2luZyB0aGUgaW50ZXJydXB0IGZvciBjb21wbGV0aW9uLgo+ICsJICogTWVhc3VyZW1lbnRz IGluZGljYXRlIHRoaXMgc2hvdWxkIHRha2Ugbm8gbW9yZSB0aGFuIDIwbXMsIHNvIGEKPiArCSAq IHRpbWVvdXQgaGVyZSBpbmRpY2F0ZXMgdGhhdCB0aGUgR3VDIGhhcyBmYWlsZWQgYW5kIGlzIHVu dXNhYmxlLgo+ICsJICogKEhpZ2hlciBsZXZlbHMgb2YgdGhlIGRyaXZlciB3aWxsIGF0dGVtcHQg dG8gZmFsbCBiYWNrIHRvCj4gKwkgKiBleGVjbGlzdCBtb2RlIGlmIHRoaXMgaGFwcGVucy4pCj4g KwkgKi8KPiArCXJldCA9IHdhaXRfZm9yX2F0b21pYyhndWNfdWNvZGVfcmVzcG9uc2UoZGV2X3By aXYsICZzdGF0dXMpLCAxMDApOwo+ICsKPiArCURSTV9ERUJVR19EUklWRVIoIkRNQSBzdGF0dXMg MHgleCwgR3VDIHN0YXR1cyAweCV4XG4iLAo+ICsJCQlJOTE1X1JFQUQoRE1BX0NUUkwpLCBzdGF0 dXMpOwo+ICsKPiArCWlmICgoc3RhdHVzICYgR1NfQk9PVFJPTV9NQVNLKSA9PSBHU19CT09UUk9N X1JTQV9GQUlMRUQpIHsKPiArCQlEUk1fRVJST1IoIkd1QyBmaXJtd2FyZSBzaWduYXR1cmUgdmVy aWZpY2F0aW9uIGZhaWxlZFxuIik7Cj4gKwkJcmV0ID0gLUVOT0VYRUM7Cj4gKwl9Cj4gKwo+ICsJ RFJNX0RFQlVHX0RSSVZFUigicmV0dXJuaW5nICVkXG4iLCByZXQpOwo+ICsKPiArCXJldHVybiBy ZXQ7Cj4gK30KPiArCj4gKy8qCj4gKyAqIExvYWQgdGhlIEd1QyBmaXJtd2FyZSBibG9iIGludG8g dGhlIE1pbnV0ZUlBLgo+ICsgKi8KPiArc3RhdGljIGludCBndWNfdWNvZGVfeGZlcihzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9ndWNfZncg Kmd1Y19mdyA9ICZkZXZfcHJpdi0+Z3VjLmd1Y19mdzsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBkZXZfcHJpdi0+ZGV2Owo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBpOTE1X2dlbV9v YmplY3Rfc2V0X3RvX2d0dF9kb21haW4oZ3VjX2Z3LT5ndWNfZndfb2JqLCBmYWxzZSk7Cj4gKwlp ZiAocmV0KSB7Cj4gKwkJRFJNX0RFQlVHX0RSSVZFUigic2V0LWRvbWFpbiBmYWlsZWQgJWRcbiIs IHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSBpOTE1X2dlbV9vYmpf Z2d0dF9waW4oZ3VjX2Z3LT5ndWNfZndfb2JqLCAwLCAwKTsKPiArCWlmIChyZXQpIHsKPiArCQlE Uk1fREVCVUdfRFJJVkVSKCJwaW4gZmFpbGVkICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7 Cj4gKwl9Cj4gKwo+ICsJLyogSW52YWxpZGF0ZSBHdUMgVExCIHRvIGxldCBHdUMgdGFrZSB0aGUg bGF0ZXN0IHVwZGF0ZXMgdG8gR1RULiAqLwo+ICsJSTkxNV9XUklURShHRU44X0dUQ1IsIEdFTjhf R1RDUl9JTlZBTElEQVRFKTsKPiArCj4gKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldChkZXZf cHJpdiwgRk9SQ0VXQUtFX0FMTCk7Cj4gKwo+ICsJLyogaW5pdCBXT1BDTSAqLwo+ICsJSTkxNV9X UklURShHVUNfV09QQ01fU0laRSwgR1VDX1dPUENNX1NJWkVfVkFMVUUpOwo+ICsJSTkxNV9XUklU RShETUFfR1VDX1dPUENNX09GRlNFVCwgR1VDX1dPUENNX09GRlNFVF9WQUxVRSk7Cj4gKwo+ICsJ LyogRW5hYmxlIE1JQSBjYWNoaW5nLiBHdUMgY2xvY2sgZ2F0aW5nIGlzIGRpc2FibGVkLiAqLwo+ ICsJSTkxNV9XUklURShHVUNfU0hJTV9DT05UUk9MLCBHVUNfU0hJTV9DT05UUk9MX1ZBTFVFKTsK PiArCj4gKwkvKiBXYUM2RGlzYWxsb3dCeUdmeFBhdXNlKi8KPiArCUk5MTVfV1JJVEUoR0VONl9H RlhQQVVTRSwgMHgzMEZGRik7Cj4gKwo+ICsJaWYgKElTX0JST1hUT04oZGV2KSkKPiArCQlJOTE1 X1dSSVRFKEdFTjlMUF9HVF9QTV9DT05GSUcsIEdUX0RPT1JCRUxMX0VOQUJMRSk7Cj4gKwllbHNl Cj4gKwkJSTkxNV9XUklURShHRU45X0dUX1BNX0NPTkZJRywgR1RfRE9PUkJFTExfRU5BQkxFKTsK PiArCj4gKwlpZiAoSVNfR0VOOShkZXYpKSB7Cj4gKwkJLyogRE9QIENsb2NrIEdhdGluZyBFbmFi bGUgZm9yIEd1QyBjbG9ja3MgKi8KPiArCQlJOTE1X1dSSVRFKEdFTjdfTUlTQ0NQQ1RMLCAoR0VO OF9ET1BfQ0xPQ0tfR0FURV9HVUNfRU5BQkxFIHwKPiArCQkJCQkgICAgSTkxNV9SRUFEKEdFTjdf TUlTQ0NQQ1RMKSkpOwo+ICsKPiArCQkvKiBhbGxvd3MgZm9yIDV1cyBiZWZvcmUgR1QgY2FuIGdv IHRvIFJDNiAqLwo+ICsJCUk5MTVfV1JJVEUoR1VDX0FSQVRfQzZESVMsIDB4MUZGKTsKPiArCX0K PiArCj4gKwlzZXRfZ3VjX2luaXRfcGFyYW1zKGRldl9wcml2KTsKPiArCj4gKwlyZXQgPSBndWNf dWNvZGVfeGZlcl9kbWEoZGV2X3ByaXYpOwo+ICsKPiArCWludGVsX3VuY29yZV9mb3JjZXdha2Vf cHV0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKPiArCj4gKwkvKgo+ICsJICogV2Uga2VlcCB0 aGUgb2JqZWN0IHBhZ2VzIGZvciByZXVzZSBkdXJpbmcgcmVzdW1lLiBCdXQgd2UgY2FuIHVucGlu IGl0Cj4gKwkgKiBub3cgdGhhdCBETUEgaGFzIGNvbXBsZXRlZCwgc28gaXQgZG9lc24ndCBjb250 aW51ZSB0byB0YWtlIHVwIHNwYWNlLgo+ICsJICovCj4gKwlpOTE1X2dlbV9vYmplY3RfZ2d0dF91 bnBpbihndWNfZnctPmd1Y19md19vYmopOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4g Ky8qKgo+ICsgKiBpbnRlbF9ndWNfdWNvZGVfbG9hZCgpIC0gbG9hZCBHdUMgdUNvZGUgaW50byB0 aGUgZGV2aWNlCj4gKyAqIEBkZXY6CWRybSBkZXZpY2UKPiArICoKPiArICogQ2FsbGVkIGZyb20g Z2VtX2luaXRfaHcoKSBkdXJpbmcgZHJpdmVyIGxvYWRpbmcgYW5kIGFsc28gYWZ0ZXIgYSBHUFUg cmVzZXQuCj4gKyAqCj4gKyAqIE9uIHRoZSBmaXJzdCBjYWxsIG9ubHksIHRoaXMgd2lsbCBmZXRj aCB0aGUgYmxvYiBmcm9tIHRoZSBmaWxlc3lzdGVtOwo+ICsgKiB0aGVyZWFmdGVyLCB3ZSB3aWxs IGFscmVhZHkgZWl0aGVyIGhhdmUgdGhlIGJsb2IgaW4gYSBHRU0gb2JqZWN0LCBvcgo+ICsgKiBo YXZlIGRldGVybWluZWQgdGhhdCBubyB2YWxpZCBmaXJtd2FyZSBpbWFnZSBjb3VsZCBiZSBmb3Vu ZC4KW1RPUjpdIFNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgbm90IGZldGNoaW5nIHRoZSBibG9iIG5v dywgCnRoaXMgY29tbWVudCBzaG91bGQgYmUgdXBkYXRlZC4gIFRoaXMgY291bGQgYmU6CiJXZSB3 aWxsIGFscmVhZHkgZWl0aGVyIGhhdmUgdGhlIGJsb2IgaW4gYSBHRU0gb2JqZWN0LCBvcgogaGF2 ZSBkZXRlcm1pbmVkIHRoYXQgbm8gdmFsaWQgZmlybXdhcmUgaW1hZ2UgY291bGQgYmUgZm91bmQu IgoKPiArICoKPiArICogSWYgd2UgaGF2ZSBhIGdvb2QgZmlybXdhcmUgaW1hZ2UsIHRyYW5zZmVy IGl0IHRvIHRoZSBoL3cuCj4gKyAqCj4gKyAqIFJldHVybjoJbm9uLXplcm8gY29kZSBvbiBlcnJv cgo+ICsgKi8KPiAraW50IGludGVsX2d1Y191Y29kZV9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2 X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgaW50ZWxfZ3VjX2Z3ICpndWNfZncgPSAmZGV2X3ByaXYtPmd1 Yy5ndWNfZnc7Cj4gKwlpbnQgZXJyID0gMDsKPiArCj4gKwlEUk1fREVCVUdfRFJJVkVSKCJHdUMg Zncgc3RhdHVzOiBmZXRjaCAlcywgbG9hZCAlc1xuIiwKPiArCQlpbnRlbF9ndWNfZndfc3RhdHVz X3JlcHIoZ3VjX2Z3LT5ndWNfZndfZmV0Y2hfc3RhdHVzKSwKPiArCQlpbnRlbF9ndWNfZndfc3Rh dHVzX3JlcHIoZ3VjX2Z3LT5ndWNfZndfbG9hZF9zdGF0dXMpKTsKPiArCj4gKwlpZiAoZ3VjX2Z3 LT5ndWNfZndfZmV0Y2hfc3RhdHVzID09IEdVQ19GSVJNV0FSRV9OT05FKQo+ICsJCXJldHVybiAw Owo+ICsKPiArCWlmIChndWNfZnctPmd1Y19md19mZXRjaF9zdGF0dXMgPT0gR1VDX0ZJUk1XQVJF X1NVQ0NFU1MgJiYKPiArCSAgICBndWNfZnctPmd1Y19md19sb2FkX3N0YXR1cyA9PSBHVUNfRklS TVdBUkVfRkFJTCkKPiArCQlyZXR1cm4gLUVOT0VYRUM7Cj4gKwo+ICsJZ3VjX2Z3LT5ndWNfZndf bG9hZF9zdGF0dXMgPSBHVUNfRklSTVdBUkVfUEVORElORzsKPiArCj4gKwlEUk1fREVCVUdfRFJJ VkVSKCJHdUMgZncgZmV0Y2ggc3RhdHVzICVzXG4iLAo+ICsJCWludGVsX2d1Y19md19zdGF0dXNf cmVwcihndWNfZnctPmd1Y19md19mZXRjaF9zdGF0dXMpKTsKPiArCj4gKwlzd2l0Y2ggKGd1Y19m dy0+Z3VjX2Z3X2ZldGNoX3N0YXR1cykgewo+ICsJY2FzZSBHVUNfRklSTVdBUkVfRkFJTDoKPiAr CQkvKiBzb21ldGhpbmcgd2VudCB3cm9uZyA6KCAqLwo+ICsJCWVyciA9IC1FSU87Cj4gKwkJZ290 byBmYWlsOwo+ICsKPiArCWNhc2UgR1VDX0ZJUk1XQVJFX05PTkU6Cj4gKwljYXNlIEdVQ19GSVJN V0FSRV9QRU5ESU5HOgo+ICsJZGVmYXVsdDoKPiArCQkvKiAiY2FuJ3QgaGFwcGVuIiAqLwo+ICsJ CVdBUk5fT05DRSgxLCAiR3VDIGZ3ICVzIGludmFsaWQgZ3VjX2Z3X2ZldGNoX3N0YXR1cyAlcyBb JWRdXG4iLAo+ICsJCQlndWNfZnctPmd1Y19md19wYXRoLAo+ICsJCQlpbnRlbF9ndWNfZndfc3Rh dHVzX3JlcHIoZ3VjX2Z3LT5ndWNfZndfZmV0Y2hfc3RhdHVzKSwKPiArCQkJZ3VjX2Z3LT5ndWNf ZndfZmV0Y2hfc3RhdHVzKTsKPiArCQllcnIgPSAtRU5YSU87Cj4gKwkJZ290byBmYWlsOwo+ICsK PiArCWNhc2UgR1VDX0ZJUk1XQVJFX1NVQ0NFU1M6Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJ ZXJyID0gZ3VjX3Vjb2RlX3hmZXIoZGV2X3ByaXYpOwo+ICsJaWYgKGVycikKPiArCQlnb3RvIGZh aWw7Cj4gKwo+ICsJZ3VjX2Z3LT5ndWNfZndfbG9hZF9zdGF0dXMgPSBHVUNfRklSTVdBUkVfU1VD Q0VTUzsKPiArCj4gKwlEUk1fREVCVUdfRFJJVkVSKCJHdUMgZncgc3RhdHVzOiBmZXRjaCAlcywg bG9hZCAlc1xuIiwKPiArCQlpbnRlbF9ndWNfZndfc3RhdHVzX3JlcHIoZ3VjX2Z3LT5ndWNfZndf ZmV0Y2hfc3RhdHVzKSwKPiArCQlpbnRlbF9ndWNfZndfc3RhdHVzX3JlcHIoZ3VjX2Z3LT5ndWNf ZndfbG9hZF9zdGF0dXMpKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2ZhaWw6Cj4gKwlpZiAo Z3VjX2Z3LT5ndWNfZndfbG9hZF9zdGF0dXMgPT0gR1VDX0ZJUk1XQVJFX1BFTkRJTkcpCj4gKwkJ Z3VjX2Z3LT5ndWNfZndfbG9hZF9zdGF0dXMgPSBHVUNfRklSTVdBUkVfRkFJTDsKPiArCj4gKwly ZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBndWNfZndfZmV0Y2goc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgc3RydWN0IGludGVsX2d1Y19mdyAqZ3VjX2Z3KQo+ICt7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwo+ICsJY29uc3Qgc3RydWN0IGZpcm13YXJlICpm dzsKPiArCWNvbnN0IHU4ICpjc3NfaGVhZGVyOwo+ICsJY29uc3Qgc2l6ZV90IG1pbnNpemUgPSBV T1NfQ1NTX0hFQURFUl9TSVpFICsgVU9TX0NTU19TSUdOSU5HX1NJWkU7Cj4gKwljb25zdCBzaXpl X3QgbWF4c2l6ZSA9IEdVQ19XT1BDTV9TSVpFX1ZBTFVFICsgVU9TX0NTU19TSUdOSU5HX1NJWkUK PiArCQkJLSAweDgwMDA7IC8qIDMyayByZXNlcnZlZCAoOEsgc3RhY2sgKyAyNGsgY29udGV4dCkg Ki8KPiArCWludCBlcnI7Cj4gKwo+ICsJRFJNX0RFQlVHX0RSSVZFUigiYmVmb3JlIHJlcXVlc3Rp bmcgZmlybXdhcmU6IEd1QyBmdyBmZXRjaCBzdGF0dXMgJXNcbiIsCj4gKwkJaW50ZWxfZ3VjX2Z3 X3N0YXR1c19yZXByKGd1Y19mdy0+Z3VjX2Z3X2ZldGNoX3N0YXR1cykpOwo+ICsKPiArCWVyciA9 IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBndWNfZnctPmd1Y19md19wYXRoLCAmZGV2LT5wZGV2LT5k ZXYpOwo+ICsJaWYgKGVycikKPiArCQlnb3RvIGZhaWw7Cj4gKwlpZiAoIWZ3KQo+ICsJCWdvdG8g ZmFpbDsKPiArCj4gKwlEUk1fREVCVUdfRFJJVkVSKCJmZXRjaCBHdUMgZncgZnJvbSAlcyBzdWNj ZWVkZWQsIGZ3ICVwXG4iLAo+ICsJCWd1Y19mdy0+Z3VjX2Z3X3BhdGgsIGZ3KTsKPiArCURSTV9E RUJVR19EUklWRVIoImZpcm13YXJlIGZpbGUgc2l6ZSAlenUgKG1pbmltdW0gJXp1LCBtYXhpbXVt ICV6dSlcbiIsCj4gKwkJZnctPnNpemUsIG1pbnNpemUsIG1heHNpemUpOwo+ICsKPiArCS8qIENo ZWNrIHRoZSBzaXplIG9mIHRoZSBibG9iIGJlZm9lIGV4YW1pbmluZyBidWZmZXIgY29udGVudHMg Ki8KPiArCWlmIChmdy0+c2l6ZSA8IG1pbnNpemUgfHwgZnctPnNpemUgPiBtYXhzaXplKQo+ICsJ CWdvdG8gZmFpbDsKPiArCj4gKwkvKgo+ICsJICogVGhlIEd1QyBmaXJtd2FyZSBpbWFnZSBoYXMg dGhlIHZlcnNpb24gbnVtYmVyIGVtYmVkZGVkIGF0IGEgd2VsbC1rbm93bgo+ICsJICogb2Zmc2V0 IHdpdGhpbiB0aGUgZmlybXdhcmUgYmxvYjsgbm90ZSB0aGF0IG1ham9yIC8gbWlub3IgdmVyc2lv biBhcmUKPiArCSAqIFRXTyBieXRlcyBlYWNoIChpLmUuIHUxNiksIGFsdGhvdWdoIGFsbCBwb2lu dGVycyBhbmQgb2Zmc2V0cyBhcmUgZGVmaW5lZAo+ICsJICogaW4gdGVybXMgb2YgYnl0ZXMgKHU4 KS4KPiArCSAqLwo+ICsJY3NzX2hlYWRlciA9IGZ3LT5kYXRhICsgVU9TX0NTU19IRUFERVJfT0ZG U0VUOwo+ICsJZ3VjX2Z3LT5ndWNfZndfbWFqb3JfZm91bmQgPSAqKHUxNiAqKShjc3NfaGVhZGVy ICsgVU9TX1ZFUl9NQUpPUl9PRkZTRVQpOwo+ICsJZ3VjX2Z3LT5ndWNfZndfbWlub3JfZm91bmQg PSAqKHUxNiAqKShjc3NfaGVhZGVyICsgVU9TX1ZFUl9NSU5PUl9PRkZTRVQpOwo+ICsKPiArCWlm IChndWNfZnctPmd1Y19md19tYWpvcl9mb3VuZCAhPSBndWNfZnctPmd1Y19md19tYWpvcl93YW50 ZWQgfHwKPiArCSAgICBndWNfZnctPmd1Y19md19taW5vcl9mb3VuZCA8IGd1Y19mdy0+Z3VjX2Z3 X21pbm9yX3dhbnRlZCkgewo+ICsJCURSTV9FUlJPUigiR3VDIGZpcm13YXJlIHZlcnNpb24gJWQu JWQsIHJlcXVpcmVkICVkLiVkXG4iLAo+ICsJCQlndWNfZnctPmd1Y19md19tYWpvcl9mb3VuZCwg Z3VjX2Z3LT5ndWNfZndfbWlub3JfZm91bmQsCj4gKwkJCWd1Y19mdy0+Z3VjX2Z3X21ham9yX3dh bnRlZCwgZ3VjX2Z3LT5ndWNfZndfbWlub3Jfd2FudGVkKTsKPiArCQllcnIgPSAtRU5PRVhFQzsK PiArCQlnb3RvIGZhaWw7Cj4gKwl9Cj4gKwo+ICsJRFJNX0RFQlVHX0RSSVZFUigiZmlybXdhcmUg dmVyc2lvbiAlZC4lZCBPSyAobWluaW11bSAlZC4lZClcbiIsCj4gKwkJCWd1Y19mdy0+Z3VjX2Z3 X21ham9yX2ZvdW5kLCBndWNfZnctPmd1Y19md19taW5vcl9mb3VuZCwKPiArCQkJZ3VjX2Z3LT5n dWNfZndfbWFqb3Jfd2FudGVkLCBndWNfZnctPmd1Y19md19taW5vcl93YW50ZWQpOwo+ICsKPiAr CW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfZnJvbV9kYXRhKGRldiwgZnctPmRhdGEsIGZ3 LT5zaXplKTsKPiArCWlmIChJU19FUlJfT1JfTlVMTChvYmopKSB7Cj4gKwkJZXJyID0gb2JqID8g UFRSX0VSUihvYmopIDogLUVOT01FTTsKPiArCQlnb3RvIGZhaWw7Cj4gKwl9Cj4gKwo+ICsJZ3Vj X2Z3LT5ndWNfZndfb2JqID0gb2JqOwo+ICsJZ3VjX2Z3LT5ndWNfZndfc2l6ZSA9IGZ3LT5zaXpl Owo+ICsKPiArCURSTV9ERUJVR19EUklWRVIoIkd1QyBmdyBmZXRjaCBzdGF0dXMgU1VDQ0VTUywg b2JqICVwXG4iLAo+ICsJCQlndWNfZnctPmd1Y19md19vYmopOwo+ICsKPiArCXJlbGVhc2VfZmly bXdhcmUoZncpOwo+ICsJZ3VjX2Z3LT5ndWNfZndfZmV0Y2hfc3RhdHVzID0gR1VDX0ZJUk1XQVJF X1NVQ0NFU1M7Cj4gKwlyZXR1cm47Cj4gKwo+ICtmYWlsOgo+ICsJRFJNX0RFQlVHX0RSSVZFUigi R3VDIGZ3IGZldGNoIHN0YXR1cyBGQUlMOyBlcnIgJWQsIGZ3ICVwLCBvYmogJXBcbiIsCj4gKwkJ ZXJyLCBmdywgZ3VjX2Z3LT5ndWNfZndfb2JqKTsKPiArCURSTV9FUlJPUigiRmFpbGVkIHRvIGZl dGNoIEd1QyBmaXJtd2FyZSBmcm9tICVzIChlcnJvciAlZClcbiIsCj4gKwkJICBndWNfZnctPmd1 Y19md19wYXRoLCBlcnIpOwo+ICsKPiArCW9iaiA9IGd1Y19mdy0+Z3VjX2Z3X29iajsKPiArCWlm IChvYmopCj4gKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7Cj4gKwln dWNfZnctPmd1Y19md19vYmogPSBOVUxMOwo+ICsKPiArCXJlbGVhc2VfZmlybXdhcmUoZncpOwkJ LyogT0sgZXZlbiBpZiBmdyBpcyBOVUxMICovCj4gKwlndWNfZnctPmd1Y19md19mZXRjaF9zdGF0 dXMgPSBHVUNfRklSTVdBUkVfRkFJTDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGludGVsX2d1Y191 Y29kZV9pbml0KCkgLSBkZWZpbmUgcGFyYW1ldGVycyBhbmQgZmV0Y2ggZmlybXdhcmUKPiArICog QGRldjoJZHJtIGRldmljZQo+ICsgKgo+ICsgKiBDYWxsZWQgZWFybHkgZHVyaW5nIGRyaXZlciBs b2FkLCBidXQgYWZ0ZXIgR0VNIGlzIGluaXRpYWxpc2VkLgo+ICsgKiBUaGUgZGV2aWNlIHN0cnVj dF9tdXRleCBtdXN0IGJlIGhlbGQgYnkgdGhlIGNhbGxlciwgYXMgd2UncmUKPiArICogZ29pbmcg dG8gYWxsb2NhdGUgYSBHRU0gb2JqZWN0IHRvIGhvbGQgdGhlIGZpcm13YXJlIGltYWdlLgo+ICsg Kgo+ICsgKiBUaGUgZmlybXdhcmUgd2lsbCBiZSB0cmFuc2ZlcnJlZCB0byB0aGUgR3VDJ3MgbWVt b3J5IGxhdGVyLAo+ICsgKiB3aGVuIGludGVsX2d1Y191Y29kZV9sb2FkKCkgaXMgY2FsbGVkLgo+ ICsgKi8KPiArdm9pZCBpbnRlbF9ndWNfdWNvZGVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9w cml2YXRlOwo+ICsJc3RydWN0IGludGVsX2d1Y19mdyAqZ3VjX2Z3ID0gJmRldl9wcml2LT5ndWMu Z3VjX2Z3Owo+ICsJY29uc3QgY2hhciAqZndfcGF0aDsKPiArCj4gKwlpZiAoIUhBU19HVUNfU0NI RUQoZGV2KSkKPiArCQlpOTE1LmVuYWJsZV9ndWNfc3VibWlzc2lvbiA9IGZhbHNlOwo+ICsKPiAr CWlmICghSEFTX0dVQ19VQ09ERShkZXYpKSB7Cj4gKwkJZndfcGF0aCA9IE5VTEw7Cj4gKwl9IGVs c2UgaWYgKElTX1NLWUxBS0UoZGV2KSkgewo+ICsJCWZ3X3BhdGggPSBJOTE1X1NLTF9HVUNfVUNP REU7Cj4gKwkJZ3VjX2Z3LT5ndWNfZndfbWFqb3Jfd2FudGVkID0gMzsKPiArCQlndWNfZnctPmd1 Y19md19taW5vcl93YW50ZWQgPSAwOwo+ICsJfSBlbHNlIHsKPiArCQlpOTE1LmVuYWJsZV9ndWNf c3VibWlzc2lvbiA9IGZhbHNlOwo+ICsJCWZ3X3BhdGggPSAiIjsJLyogdW5rbm93biBkZXZpY2Ug Ki8KPiArCX0KPiArCj4gKwlndWNfZnctPmd1Y19kZXYgPSBkZXY7Cj4gKwlndWNfZnctPmd1Y19m d19wYXRoID0gZndfcGF0aDsKPiArCWd1Y19mdy0+Z3VjX2Z3X2ZldGNoX3N0YXR1cyA9IEdVQ19G SVJNV0FSRV9OT05FOwo+ICsJZ3VjX2Z3LT5ndWNfZndfbG9hZF9zdGF0dXMgPSBHVUNfRklSTVdB UkVfTk9ORTsKPiArCj4gKwlpZiAoZndfcGF0aCA9PSBOVUxMKQo+ICsJCXJldHVybjsKPiArCj4g KwlpZiAoKmZ3X3BhdGggPT0gJ1wwJykgewo+ICsJCURSTV9FUlJPUigiTm8gR3VDIGZpcm13YXJl IGtub3duIGZvciB0aGlzIHBsYXRmb3JtXG4iKTsKPiArCQlndWNfZnctPmd1Y19md19mZXRjaF9z dGF0dXMgPSBHVUNfRklSTVdBUkVfRkFJTDsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJZ3Vj X2Z3LT5ndWNfZndfZmV0Y2hfc3RhdHVzID0gR1VDX0ZJUk1XQVJFX1BFTkRJTkc7Cj4gKwlEUk1f REVCVUdfRFJJVkVSKCJHdUMgZmlybXdhcmUgcGVuZGluZywgcGF0aCAlc1xuIiwgZndfcGF0aCk7 Cj4gKwlndWNfZndfZmV0Y2goZGV2LCBndWNfZncpOwo+ICsJLyogc3RhdHVzIG11c3Qgbm93IGJl IEZBSUwgb3IgU1VDQ0VTUyAqLwo+ICt9Cj4gKwo+ICsvKioKPiArICogaW50ZWxfZ3VjX3Vjb2Rl X2ZpbmkoKSAtIGNsZWFuIHVwIGFsbCBhbGxvY2F0ZWQgcmVzb3VyY2VzCj4gKyAqIEBkZXY6CWRy bSBkZXZpY2UKPiArICovCj4gK3ZvaWQgaW50ZWxfZ3VjX3Vjb2RlX2Zpbmkoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBpbnRlbF9ndWNfZncgKmd1Y19mdyA9ICZkZXZf cHJpdi0+Z3VjLmd1Y19mdzsKPiArCj4gKwlpZiAoZ3VjX2Z3LT5ndWNfZndfb2JqKQo+ICsJCWRy bV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZndWNfZnctPmd1Y19md19vYmotPmJhc2UpOwo+ICsJ Z3VjX2Z3LT5ndWNfZndfb2JqID0gTlVMTDsKPiArCj4gKwlndWNfZnctPmd1Y19md19mZXRjaF9z dGF0dXMgPSBHVUNfRklSTVdBUkVfTk9ORTsKPiArfQo+IC0tIAo+IDEuOS4xCj4gCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==