From mboxrd@z Thu Jan 1 00:00:00 1970 From: jitao shi Subject: Re: [PATCH v7 2/2] drm/bridge: Add I2C based driver for ps8640 bridge Date: Thu, 14 Jan 2016 17:44:57 +0800 Message-ID: <1452764697.18004.8.camel@mszsdhlt06> References: <1452651494-16806-1-git-send-email-jitao.shi@mediatek.com> <1452651494-16806-2-git-send-email-jitao.shi@mediatek.com> <5695F88E.9040808@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <5695F88E.9040808@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Archit Taneja Cc: Mark Rutland , stonea168@163.com, dri-devel@lists.freedesktop.org, Ajay Kumar , Vincent Palatin , cawa.cheng@mediatek.com, Russell King , Thierry Reding , devicetree@vger.kernel.org, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, yingjoe.chen@mediatek.com, Matthias Brugger , eddie.huang@mediatek.com, linux-arm-kernel@lists.infradead.org, Rahul Sharma , srv_heupstream@mediatek.com, linux-kernel@vger.kernel.org, Sascha Hauer , Kumar Gala , Andy Yan List-Id: devicetree@vger.kernel.org SGkgQXJjaGl0LAoKCk9uIFdlZCwgMjAxNi0wMS0xMyBhdCAxMjo0MSArMDUzMCwgQXJjaGl0IFRh bmVqYSB3cm90ZToKPiBIaSBKaXRhbywKPiAKPiBPbiAwMS8xMy8yMDE2IDA3OjQ4IEFNLCBKaXRh byBTaGkgd3JvdGU6Cj4gPiBUaGlzIHBhdGNoIGFkZHMgZHJtX2JyaWRnZSBkcml2ZXIgZm9yIHBh cmFkZSBEU0kgdG8gZURQIGJyaWRnZSBjaGlwLgo+ID4KPiA+IFNpZ25lZC1vZmYtYnk6IEppdGFv IFNoaSA8aml0YW8uc2hpQG1lZGlhdGVrLmNvbT4KPiA+IC0tLQo+ID4gQ2hhbmdlcyBzaW5jZSB2 NjoKPiA+ICAgLSBBZGQgcHM4NjQwIGZpcm13YXJlIHVwZGF0ZSBmdW5jdGlvbgo+ID4gICAtIENo YW5nZSBpMmMgdG8gaTJjX3RyYW5zZmVyIGZyb20gaTJjX21hc3Rlcl9yZWN2L2kyY19tYXN0ZXJf c2VuZAo+ID4gICAtIEFkZCBjb21tZW50cyBmb3IgZWFjaCBwYWdlIGNsaWVudAo+IAo+IEknZCBj b21tZW50ZWQgb24gdGhlIHY2IHBhdGNoIHNldCBoZXJlOgo+IAo+IGh0dHBzOi8vbGttbC5vcmcv bGttbC8yMDE1LzEyLzE1LzYyCj4gCj4gSSB3YW50ZWQgdG8ga25vdyBob3cgdGhlIGJyaWRnZSBk cml2ZXIgd2FzIHRyYW5zZmVycmluZyBwYXJhbWV0ZXJzCj4gdG8gdGhlIGRzaSBob3N0LiBJcyB0 aGF0IHNvbWV0aGluZyB0aGF0IHlvdSBhcmUgaGFyZGNvZGluZyBvbiBib3RoCj4gdGhlIGRzaSBo b3N0IGFuZCBwczg2NDAgZHJpdmVycyBmb3Igbm93Pwo+IAo+IE15IGludGVudGlvbiBvZiBhc2tp bmcgdGhpcyBpcyB0byBrbm93IGlmIHRoZXJlIGFyZSBvdGhlciB1c2Vycwo+IHRoYXQgY2FuIHRh a2UgYWR2YW50YWdlIG9mIHRoaXMgcGF0Y2ggc2V0Ogo+IAo+IGh0dHBzOi8vbGttbC5vcmcvbGtt bC8yMDE1LzEyLzEwLzI4Mwo+IAo+IFRoYW5rcywKPiBBcmNoaXQKPiAKClRoYW5rcyBmb3IgeW91 IGNvbW1lbnRzLgoKVGhpcyBwYXRjaHNldHMgaXMgdW5kZXIgdGVzdCwgaXQgd2lsbCBjb3dvcmsg d2l0aCBvdGhlciBwZW9wbGUgYW5kIHdpaWwKdGFrZSBtb3JlIHRpbWUuIEl0IHdpbGwgYmUgaW5j bHVkZSB0aGUgbmV4dC4KCj4gPiAtLS0KPiA+ICAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29u ZmlnICAgICAgICAgfCAgIDEwICsKPiA+ICAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmls ZSAgICAgICAgfCAgICAxICsKPiA+ICAgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUtcHM4 NjQwLmMgfCAxMTA2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiAgIDMgZmls ZXMgY2hhbmdlZCwgMTExNyBpbnNlcnRpb25zKCspCj4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhcmFkZS1wczg2NDAuYwo+ID4KPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L0tjb25maWcKPiA+IGluZGV4IDZkZGRkMzkuLmRjZmRiYzkgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvS2NvbmZpZwo+ID4gQEAgLTQxLDQgKzQxLDE0IEBAIGNvbmZpZyBEUk1fUEFSQURFX1BTODYy Mgo+ID4gICAJLS0taGVscC0tLQo+ID4gICAJICBQYXJhZGUgZURQLUxWRFMgYnJpZGdlIGNoaXAg ZHJpdmVyLgo+ID4KPiA+ICtjb25maWcgRFJNX1BBUkFERV9QUzg2NDAKPiA+ICsJdHJpc3RhdGUg IlBhcmFkZSBQUzg2NDAgTUlQSSBEU0kgdG8gZURQIENvbnZlcnRlciIKPiA+ICsJZGVwZW5kcyBv biBPRgo+ID4gKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKPiA+ICsJc2VsZWN0IERSTV9QQU5FTAo+ ID4gKwktLS1oZWxwLS0tCj4gPiArCSAgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIFBT ODY0MCBmb3IgZGlzcGxheQo+ID4gKwkgIFRoZSBQUzg2NDAgaXMgYSBoaWdoLXBlcmZvcm1hbmNl IGFuZCBsb3ctcG93ZXIKPiA+ICsJICBNSVBJIERTSSB0byBlRFAgY29udmVydGVyCj4gPiArCj4g PiAgIGVuZG1lbnUKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2Vm aWxlIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQo+ID4gaW5kZXggZDRlMjhiZS4u MjcyZTNjMDEgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxl Cj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCj4gPiBAQCAtNCwzICs0 LDQgQEAgb2JqLSQoQ09ORklHX0RSTV9EV19IRE1JKSArPSBkd19oZG1pLm8KPiA+ICAgb2JqLSQo Q09ORklHX0RSTV9EV19IRE1JX0FIQl9BVURJTykgKz0gZHdfaGRtaS1haGItYXVkaW8ubwo+ID4g ICBvYmotJChDT05GSUdfRFJNX05YUF9QVE4zNDYwKSArPSBueHAtcHRuMzQ2MC5vCj4gPiAgIG9i ai0kKENPTkZJR19EUk1fUEFSQURFX1BTODYyMikgKz0gcGFyYWRlLXBzODYyMi5vCj4gPiArb2Jq LSQoQ09ORklHX0RSTV9QQVJBREVfUFM4NjQwKSArPSBwYXJhZGUtcHM4NjQwLm8KPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3BhcmFkZS1wczg2NDAuYyBiL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvcGFyYWRlLXBzODY0MC5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ ID4gaW5kZXggMDAwMDAwMC4uYTE4ZDhlOQo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9wYXJhZGUtcHM4NjQwLmMKPiA+IEBAIC0wLDAgKzEsMTEwNiBA QAo+ID4gKy8qCj4gPiArICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVrIEluYy4KPiA+ICsg Kgo+ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKPiA+ICsgKiBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ ID4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCj4gPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ID4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCj4gPiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgPGxpbnV4 L2RlbGF5Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+ID4gKyNpbmNsdWRlIDxsaW51 eC9maXJtd2FyZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Cj4gPiArI2luY2x1ZGUg PGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvaTJjLmg+Cj4gPiAr I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+ID4g KyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBo Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgo+ID4gKyNpbmNs dWRlIDxhc20vdW5hbGlnbmVkLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fcGFuZWwuaD4KPiA+ ICsKPiA+ICsjaW5jbHVkZSA8ZHJtUC5oPgo+ID4gKyNpbmNsdWRlIDxkcm1fY3J0Y19oZWxwZXIu aD4KPiA+ICsjaW5jbHVkZSA8ZHJtX2NydGMuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtX2F0b21pY19o ZWxwZXIuaD4KPiA+ICsKPiA+ICsjZGVmaW5lIFBBR0UyX1NQSV9DRkczCQkweDgyCj4gPiArI2Rl ZmluZSBJMkNfVE9fU1BJX1JFU0VUCTB4MjAKPiA+ICsjZGVmaW5lIFBBR0UyX1JPTUFERF9CWVRF MQkweDhlCj4gPiArI2RlZmluZSBQQUdFMl9ST01BRERfQllURTIJMHg4Zgo+ID4gKyNkZWZpbmUg UEFHRTJfU1dTUElfV0RBVEEJMHg5MAo+ID4gKyNkZWZpbmUgUEFHRTJfU1dTUElfUkRBVEEJMHg5 MQo+ID4gKyNkZWZpbmUgUEFHRTJfU1dTUElfTEVOCQkweDkyCj4gPiArI2RlZmluZSBQQUdFMl9T V1NQSV9DVEwJCTB4OTMKPiA+ICsjZGVmaW5lIFRSSUdHRVJfTk9fUkVBREJBQ0sJMHgwNQo+ID4g KyNkZWZpbmUgVFJJR0dFUl9SRUFEQkFDSwkweDAxCj4gPiArI2RlZmluZSBQQUdFMl9TUElfU1RB VFVTCTB4OWUKPiA+ICsjZGVmaW5lIFBBR0UyX0dQSU9fTAkJMHhhNgo+ID4gKyNkZWZpbmUgUEFH RTJfR1BJT19ICQkweGE3Cj4gPiArI2RlZmluZSBQU19HUElPOQkJQklUKDEpCj4gPiArI2RlZmlu ZSBQQUdFMl9JUk9NX0NUUkwJCTB4YjAKPiA+ICsjZGVmaW5lIElST01fRU5BQkxFCQkweGMwCj4g PiArI2RlZmluZSBJUk9NX0RJU0FCTEUJCTB4ODAKPiA+ICsjZGVmaW5lIFBBR0UyX1NXX1JFU1QJ CTB4YmMKPiA+ICsjZGVmaW5lIFBBR0UyX0VOQ1RMU1BJX1dSCTB4ZGEKPiA+ICsjZGVmaW5lIFBB R0UyX0kyQ19CWVBBU1MJMHhlYQo+ID4gKyNkZWZpbmUgSTJDX0JZUEFTU19FTgkJMHhkMAo+ID4g Kwo+ID4gKyNkZWZpbmUgUEFHRTNfU0VUX0FERAkJMHhmZQo+ID4gKyNkZWZpbmUgUEFHRTNfU0VU X1ZBTAkJMHhmZgo+ID4gKyNkZWZpbmUgVkRPX0NUTF9BREQJCTB4MTMKPiA+ICsjZGVmaW5lIFZE T19ESVMJCQkweDE4Cj4gPiArI2RlZmluZSBWRE9fRU4JCQkweDFjCj4gPiArCj4gPiArI2RlZmlu ZSBQQUdFNF9SRVZfTAkJMHhmMAo+ID4gKyNkZWZpbmUgUEFHRTRfUkVWX0gJCTB4ZjEKPiA+ICsj ZGVmaW5lIFBBR0U0X0NISVBfTAkJMHhmMgo+ID4gKyNkZWZpbmUgUEFHRTRfQ0hJUF9ICQkweGYz Cj4gPiArCj4gPiArLyogRmlybXdhcmUgKi8KPiA+ICsjZGVmaW5lIFNQSV9NQVhfUkVUUllfQ05U CTgKPiA+ICsjZGVmaW5lIFBTX0ZXX05BTUUJCSJwczg2NHhfZncuYmluIgo+ID4gKwo+ID4gKyNk ZWZpbmUgRldfQ0hJUF9JRF9PRkZTRVQJCTAKPiA+ICsjZGVmaW5lIEZXX1ZFUlNJT05fT0ZGU0VU CQkyCj4gPiArCj4gPiArI2RlZmluZSBicmlkZ2VfdG9fcHM4NjQwKGUpCWNvbnRhaW5lcl9vZihl LCBzdHJ1Y3QgcHM4NjQwLCBicmlkZ2UpCj4gPiArI2RlZmluZSBjb25uZWN0b3JfdG9fcHM4NjQw KGUpCWNvbnRhaW5lcl9vZihlLCBzdHJ1Y3QgcHM4NjQwLCBjb25uZWN0b3IpCj4gPiArCj4gPiAr c3RydWN0IHBzODY0MF9pbmZvIHsKPiA+ICsJdTggZmFtaWx5X2lkOwo+ID4gKwl1OCB2YXJpYW50 X2lkOwo+ID4gKwl1MTYgdmVyc2lvbjsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0cnVjdCBwczg2NDAg ewo+ID4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBjb25uZWN0b3I7Cj4gPiArCXN0cnVjdCBkcm1f YnJpZGdlIGJyaWRnZTsKPiA+ICsJc3RydWN0IGkyY19jbGllbnQgKnBhZ2VbOF07Cj4gPiArCXN0 cnVjdCBwczg2NDBfZHJpdmVyX2RhdGEgKmRyaXZlcl9kYXRhOwo+ID4gKwlzdHJ1Y3QgcmVndWxh dG9yICpwd3JfMXYyX3N1cHBseTsKPiA+ICsJc3RydWN0IHJlZ3VsYXRvciAqcHdyXzN2M19zdXBw bHk7Cj4gPiArCXN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsOwo+ID4gKwlzdHJ1Y3QgZ3Bpb19kZXNj ICpncGlvX3JzdF9uOwo+ID4gKwlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvX3NscF9uOwo+ID4gKwlz dHJ1Y3QgZ3Bpb19kZXNjICpncGlvX21vZGVfc2VsX247Cj4gPiArCWJvb2wgZW5hYmxlZDsKPiA+ ICsKPiA+ICsJLyogZmlybXdhcmUgZmlsZSBuYW1lICovCj4gPiArCWJvb2wgaW5fZndfdXBkYXRl Owo+ID4gKwljaGFyICpmd19maWxlOwo+ID4gKwlzdHJ1Y3QgcHM4NjQwX2luZm8gaW5mbzsKPiA+ ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCB1OCBlbmNfY3RybF9jb2RlWzZdID0gezB4YWEs IDB4NTUsIDB4NTAsIDB4NDEsIDB4NTIsIDB4NDR9Owo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgcHM4 NjQwX3JlZ3Ioc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCAqZGF0YSwKPiA+ ICsJCSAgICAgICB1MTYgZGF0YV9sZW4pCj4gPiArewo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4g KwlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7Cj4gPiArCQl7Cj4gPiArCQkgLmFkZHIgPSBjbGll bnQtPmFkZHIsCj4gPiArCQkgLmZsYWdzID0gMCwKPiA+ICsJCSAubGVuID0gMSwKPiA+ICsJCSAu YnVmID0gJnJlZywKPiA+ICsJCSB9LAo+ID4gKwkJewo+ID4gKwkJIC5hZGRyID0gY2xpZW50LT5h ZGRyLAo+ID4gKwkJIC5mbGFncyA9IEkyQ19NX1JELAo+ID4gKwkJIC5sZW4gPSBkYXRhX2xlbiwK PiA+ICsJCSAuYnVmID0gZGF0YSwKPiA+ICsJCSB9Cj4gPiArCX07Cj4gPiArCj4gPiArCXJldCA9 IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIDIpOwo+ID4gKwo+ID4gKwlpZiAo cmV0ID09IDIpCj4gPiArCQlyZXR1cm4gMDsKPiA+ICsJaWYgKHJldCA8IDApCj4gPiArCQlyZXR1 cm4gcmV0Owo+ID4gKwllbHNlCj4gPiArCQlyZXR1cm4gLUVJTzsKPiA+ICt9Cj4gPiArCj4gPiAr c3RhdGljIGludCBwczg2NDBfcmVndyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcs ICBjb25zdCB1OCAqZGF0YSwKPiA+ICsJCSAgICAgICB1MTYgZGF0YV9sZW4pCj4gPiArewo+ID4g KwlpbnQgcmV0LCBpOwo+ID4gKwlzdHJ1Y3QgaTJjX21zZyBtc2c7Cj4gPiArCXU4ICpidWY7Cj4g PiArCj4gPiArCWJ1ZiA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsIGRhdGFfbGVuICsgMSwg R0ZQX0tFUk5FTCk7Cj4gPiArCS8qIGkyYyBwYWdlIHNpemUgaXMgMjU2IGJ5dGVzLCBzbyBsaW1p dCB0aGUgZGF0YV9sZW4gMjU2ICovCj4gPiArCWlmIChkYXRhX2xlbiA+IDI1Nikgewo+ID4gKwkJ ZGV2X2VycigmY2xpZW50LT5kZXYsICJkYXRhX2xlbiBtdXN0IHVuZGVyIDI1NjogbGVuID0gJWRc biIsCj4gPiArCQkJZGF0YV9sZW4pOwo+ID4gKwkJcmV0dXJuIC1FSU87Cj4gPiArCX0KPiA+ICsJ Zm9yIChpID0gMDsgaSA8IGRhdGFfbGVuICsgMTsgaSsrKQo+ID4gKwkJYnVmW2ldID0gKGkgPT0g MCkgPyByZWcgOiBkYXRhW2kgLSAxXTsKPiA+ICsKPiA+ICsJbXNnLmFkZHIgPSBjbGllbnQtPmFk ZHI7Cj4gPiArCW1zZy5mbGFncyA9IDA7Cj4gPiArCW1zZy5sZW4gPSBkYXRhX2xlbiArIDE7Cj4g PiArCW1zZy5idWYgPSBidWY7Cj4gPiArCj4gPiArCXJldCA9IGkyY190cmFuc2ZlcihjbGllbnQt PmFkYXB0ZXIsICZtc2csIDEpOwo+ID4gKwlpZiAocmV0ID09IDEpCj4gPiArCQlyZXR1cm4gMDsK PiA+ICsJaWYgKHJldCA8IDApCj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwllbHNlCj4gPiArCQly ZXR1cm4gLUVJTzsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBwczg2NDBfcmVnd19ieXRl KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgIHU4IGRhdGEpCj4gPiArewo+ID4g KwlpbnQgcmV0Owo+ID4gKwlzdHJ1Y3QgaTJjX21zZyBtc2c7Cj4gPiArCXU4IGJ1ZltdID0ge3Jl ZywgZGF0YX07Cj4gPiArCj4gPiArCW1zZy5hZGRyID0gY2xpZW50LT5hZGRyOwo+ID4gKwltc2cu ZmxhZ3MgPSAwOwo+ID4gKwltc2cubGVuID0gc2l6ZW9mKGJ1Zik7Cj4gPiArCW1zZy5idWYgPSBi dWY7Cj4gPiArCj4gPiArCXJldCA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsICZtc2cs IDEpOwo+ID4gKwlpZiAocmV0ID09IDEpCj4gPiArCQlyZXR1cm4gMDsKPiA+ICsJaWYgKHJldCA8 IDApCj4gPiArCQlyZXR1cm4gcmV0Owo+ID4gKwllbHNlCj4gPiArCQlyZXR1cm4gLUVJTzsKPiA+ ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBwczg2NDBfY2hlY2tfdmFsaWRfaWQoc3RydWN0IHBz ODY0MCAqcHNfYnJpZGdlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9 IHBzX2JyaWRnZS0+cGFnZVs0XTsKPiA+ICsJdTggY2hpcF9pZFs0XTsKPiA+ICsKPiA+ICsJcHM4 NjQwX3JlZ3IoY2xpZW50LCBQQUdFNF9SRVZfTCwgY2hpcF9pZCwgNCk7Cj4gPiArCj4gPiArCWlm ICgoY2hpcF9pZFswXSA9PSAweDAwKSAmJiAoY2hpcF9pZFsxXSA9PSAweDBhKSAmJgo+ID4gKwkg ICAgKGNoaXBfaWRbMl0gPT0gMHgwMCkgJiYgKGNoaXBfaWRbM10gPT0gMHgzMCkpCj4gPiArCQly ZXR1cm4gMDsKPiA+ICsKPiA+ICsJcmV0dXJuIC1FTk9ERVY7Cj4gPiArfQo+ID4gKwo+ID4gK3N0 YXRpYyB2b2lkIHBzODY0MF9zaG93X21jdV9md192ZXJzaW9uKHN0cnVjdCBwczg2NDAgKnBzX2Jy aWRnZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBwc19icmlkZ2Ut PnBhZ2VbNV07Cj4gPiArCXU4IGZ3X3ZlclsyXTsKPiA+ICsKPiA+ICsJcHM4NjQwX3JlZ3IoY2xp ZW50LCAweDQsIGZ3X3ZlciwgMik7Cj4gPiArCXBzX2JyaWRnZS0+aW5mby52ZXJzaW9uID0gKGZ3 X3ZlclswXSA8PCA4KSB8IGZ3X3ZlclsxXTsKPiA+ICsKPiA+ICsJRFJNX0lORk9fT05DRSgicHM4 NjQwIHJvbSBmdyB2ZXJzaW9uICVkLiVkXG4iLCBmd192ZXJbMF0sIGZ3X3ZlclsxXSk7Cj4gPiAr fQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgcHM4NjQwX2JkZ19lbmFibGUoc3RydWN0IHBzODY0MCAq cHNfYnJpZGdlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHBzX2Jy aWRnZS0+cGFnZVszXTsKPiA+ICsJaW50IHJldDsKPiA+ICsJdTggdmRvX2N0cmxbMl0gPSB7VkRP X0NUTF9BREQsIFZET19FTn07Cj4gPiArCj4gPiArCXJldCA9IHBzODY0MF9jaGVja192YWxpZF9p ZChwc19icmlkZ2UpOwo+ID4gKwlpZiAocmV0KSB7Cj4gPiArCQlEUk1fRVJST1IoInBzODY0MCBu b3QgdmFsaWQ6ICVkXG4iLCByZXQpOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ ID4gKwlyZXQgPSBwczg2NDBfcmVndyhjbGllbnQsIFBBR0UzX1NFVF9BREQsIHZkb19jdHJsLCAy KTsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGJvb2wgcHM4NjQw X2luX2Jvb3Rsb2FkZXIoc3RydWN0IHBzODY0MCAqcHNfYnJpZGdlKQo+ID4gK3sKPiA+ICsJcmV0 dXJuIHBzX2JyaWRnZS0+aW5fZndfdXBkYXRlOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9p ZCBwczg2NDBfcHJlcGFyZShzdHJ1Y3QgcHM4NjQwICpwc19icmlkZ2UpCj4gPiArewo+ID4gKwlz dHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gcHNfYnJpZGdlLT5wYWdlWzJdOwo+ID4gKwlpbnQg ZXJyLCByZXRyeV9jbnQgPSAwOwo+ID4gKwl1OCBzZXRfdmRvX2RvbmU7Cj4gPiArCj4gPiArCWlm IChwczg2NDBfaW5fYm9vdGxvYWRlcihwc19icmlkZ2UpKQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ ID4gKwlpZiAocHNfYnJpZGdlLT5lbmFibGVkKQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwll cnIgPSBkcm1fcGFuZWxfcHJlcGFyZShwc19icmlkZ2UtPnBhbmVsKTsKPiA+ICsJaWYgKGVyciA8 IDApIHsKPiA+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIHByZXBhcmUgcGFuZWw6ICVkXG4iLCBl cnIpOwo+ID4gKwkJcmV0dXJuOwo+ID4gKwl9Cj4gPiArCj4gPiArCS8qIGRlbGF5IGZvciBwb3dl ciBzdGFibGUgKi8KPiA+ICsJdXNsZWVwX3JhbmdlKDUwMCwgNzAwKTsKPiA+ICsKPiA+ICsJZXJy ID0gcmVndWxhdG9yX2VuYWJsZShwc19icmlkZ2UtPnB3cl8xdjJfc3VwcGx5KTsKPiA+ICsJaWYg KGVyciA8IDApIHsKPiA+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGVuYWJsZSB2ZGQxMi1zdXBw bHk6ICVkXG4iLCBlcnIpOwo+ID4gKwkJZ290byBlcnJfcGFuZWxfdW5wcmVwYXJlOwo+ID4gKwl9 Cj4gPiArCj4gPiArCWVyciA9IHJlZ3VsYXRvcl9lbmFibGUocHNfYnJpZGdlLT5wd3JfM3YzX3N1 cHBseSk7Cj4gPiArCWlmIChlcnIgPCAwKSB7Cj4gPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBl bmFibGUgdmRkMzMtc3VwcGx5OiAlZFxuIiwgZXJyKTsKPiA+ICsJCWdvdG8gZXJyX3JlZ3VsYXRv cl8xdjJfZGlzYWJsZTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlncGlvZF9zZXRfdmFsdWUocHNfYnJp ZGdlLT5ncGlvX3NscF9uLCAxKTsKPiA+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKHBzX2JyaWRnZS0+Z3Bp b19yc3RfbiwgMCk7Cj4gPiArCXVzbGVlcF9yYW5nZSg1MDAsIDcwMCk7Cj4gPiArCWdwaW9kX3Nl dF92YWx1ZShwc19icmlkZ2UtPmdwaW9fcnN0X24sIDEpOwo+ID4gKwo+ID4gKwkvKiB3YWl0IGZv ciB0aGUgcHM4NjQwIGVtYmVkIG1jdSByZWFkeQo+ID4gKwkgICogZmlyc3Qgd2FpdCAyMDBtcyBh bmQgdGhlbiBjaGVjayB0aGUgbWN1IHJlYWR5IGZsYWcgZXZlcnkgMjBtcwo+ID4gKwkqLwo+ID4g Kwltc2xlZXAoMjAwKTsKPiA+ICsJZG8gewo+ID4gKwkJZXJyID0gcHM4NjQwX3JlZ3IoY2xpZW50 LCBQQUdFMl9HUElPX0gsICZzZXRfdmRvX2RvbmUsIDEpOwo+ID4gKwkJaWYgKGVyciA8IDApIHsK PiA+ICsJCQlEUk1fRVJST1IoImZhaWxlZCByZWFkIFBBR0UyX0dQSU9fSDogJWRcbiIsIGVycik7 Cj4gPiArCQkJZ290byBlcnJfcmVndWxhdG9yXzF2Ml9kaXNhYmxlOwo+ID4gKwkJfQo+ID4gKwkJ bXNsZWVwKDIwKTsKPiA+ICsJfSB3aGlsZSAoKHJldHJ5X2NudCsrIDwgMTApICYmICgoc2V0X3Zk b19kb25lICYgUFNfR1BJTzkpICE9IFBTX0dQSU85KSk7Cj4gPiArCj4gPiArCXBzODY0MF9zaG93 X21jdV9md192ZXJzaW9uKHBzX2JyaWRnZSk7Cj4gPiArCXBzODY0MF9yZWd3X2J5dGUoY2xpZW50 LCBQQUdFMl9JMkNfQllQQVNTLCBJMkNfQllQQVNTX0VOKTsKPiA+ICsJcHNfYnJpZGdlLT5lbmFi bGVkID0gdHJ1ZTsKPiA+ICsKPiA+ICsJcmV0dXJuOwo+ID4gKwo+ID4gK2Vycl9yZWd1bGF0b3Jf MXYyX2Rpc2FibGU6Cj4gPiArCXJlZ3VsYXRvcl9kaXNhYmxlKHBzX2JyaWRnZS0+cHdyXzF2Ml9z dXBwbHkpOwo+ID4gK2Vycl9wYW5lbF91bnByZXBhcmU6Cj4gPiArCWRybV9wYW5lbF91bnByZXBh cmUocHNfYnJpZGdlLT5wYW5lbCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHBzODY0 MF9wcmVfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4gPiArewo+ID4gKwlzdHJ1 Y3QgcHM4NjQwICpwc19icmlkZ2UgPSBicmlkZ2VfdG9fcHM4NjQwKGJyaWRnZSk7Cj4gPiArCj4g PiArCXBzODY0MF9wcmVwYXJlKHBzX2JyaWRnZSk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2 b2lkIHBzODY0MF9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiA+ICt7Cj4gPiAr CXN0cnVjdCBwczg2NDAgKnBzX2JyaWRnZSA9IGJyaWRnZV90b19wczg2NDAoYnJpZGdlKTsKPiA+ ICsJaW50IGVycjsKPiA+ICsKPiA+ICsJZXJyID0gcHM4NjQwX2JkZ19lbmFibGUocHNfYnJpZGdl KTsKPiA+ICsJaWYgKGVycikKPiA+ICsJCURSTV9FUlJPUigiZmFpbGVkIHRvIGVuYWJsZSB1bm11 dGV2aWRlbzogJWRcbiIsIGVycik7Cj4gPiArCj4gPiArCWVyciA9IGRybV9wYW5lbF9lbmFibGUo cHNfYnJpZGdlLT5wYW5lbCk7Cj4gPiArCWlmIChlcnIgPCAwKQo+ID4gKwkJRFJNX0VSUk9SKCJm YWlsZWQgdG8gZW5hYmxlIHBhbmVsOiAlZFxuIiwgZXJyKTsKPiA+ICt9Cj4gPiArCj4gPiArc3Rh dGljIHZvaWQgcHM4NjQwX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiA+ICt7 Cj4gPiArCXN0cnVjdCBwczg2NDAgKnBzX2JyaWRnZSA9IGJyaWRnZV90b19wczg2NDAoYnJpZGdl KTsKPiA+ICsJaW50IGVycjsKPiA+ICsKPiA+ICsJaWYgKHBzODY0MF9pbl9ib290bG9hZGVyKHBz X2JyaWRnZSkpCj4gPiArCQlyZXR1cm47Cj4gPiArCj4gPiArCWlmICghcHNfYnJpZGdlLT5lbmFi bGVkKQo+ID4gKwkJcmV0dXJuOwo+ID4gKwo+ID4gKwlwc19icmlkZ2UtPmVuYWJsZWQgPSBmYWxz ZTsKPiA+ICsKPiA+ICsJZXJyID0gZHJtX3BhbmVsX2Rpc2FibGUocHNfYnJpZGdlLT5wYW5lbCk7 Cj4gPiArCWlmIChlcnIgPCAwKQo+ID4gKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZGlzYWJsZSBw YW5lbDogJWRcbiIsIGVycik7Cj4gPiArCj4gPiArCWdwaW9kX3NldF92YWx1ZShwc19icmlkZ2Ut PmdwaW9fcnN0X24sIDApOwo+ID4gKwlncGlvZF9zZXRfdmFsdWUocHNfYnJpZGdlLT5ncGlvX3Ns cF9uLCAwKTsKPiA+ICsJcmVndWxhdG9yX2Rpc2FibGUocHNfYnJpZGdlLT5wd3JfM3YzX3N1cHBs eSk7Cj4gPiArCXJlZ3VsYXRvcl9kaXNhYmxlKHBzX2JyaWRnZS0+cHdyXzF2Ml9zdXBwbHkpOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBwczg2NDBfcG9zdF9kaXNhYmxlKHN0cnVjdCBk cm1fYnJpZGdlICpicmlkZ2UpCj4gPiArewo+ID4gKwlzdHJ1Y3QgcHM4NjQwICpwc19icmlkZ2Ug PSBicmlkZ2VfdG9fcHM4NjQwKGJyaWRnZSk7Cj4gPiArCWludCBlcnI7Cj4gPiArCj4gPiArCWVy ciA9IGRybV9wYW5lbF91bnByZXBhcmUocHNfYnJpZGdlLT5wYW5lbCk7Cj4gPiArCWlmIChlcnIp Cj4gPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byB1bnByZXBhcmUgcGFuZWw6ICVkXG4iLCBlcnIp Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHBzODY0MF9nZXRfbW9kZXMoc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiA+ICt7Cj4gPiArCXN0cnVjdCBwczg2NDAgKnBzX2Jy aWRnZSA9IGNvbm5lY3Rvcl90b19wczg2NDAoY29ubmVjdG9yKTsKPiA+ICsKPiA+ICsJcHM4NjQw X3ByZXBhcmUocHNfYnJpZGdlKTsKPiA+ICsKPiA+ICsJcmV0dXJuIGRybV9wYW5lbF9nZXRfbW9k ZXMocHNfYnJpZGdlLT5wYW5lbCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgZHJt X2VuY29kZXIgKnBzODY0MF9iZXN0X2VuY29kZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvcikKPiA+ICt7Cj4gPiArCXN0cnVjdCBwczg2NDAgKnBzX2JyaWRnZTsKPiA+ICsKPiA+ICsJ cHNfYnJpZGdlID0gY29ubmVjdG9yX3RvX3BzODY0MChjb25uZWN0b3IpOwo+ID4gKwlyZXR1cm4g cHNfYnJpZGdlLT5icmlkZ2UuZW5jb2RlcjsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyBwczg2NDBfY29ubmVjdG9yX2hlbHBl cl9mdW5jcyA9IHsKPiA+ICsJLmdldF9tb2RlcyA9IHBzODY0MF9nZXRfbW9kZXMsCj4gPiArCS5i ZXN0X2VuY29kZXIgPSBwczg2NDBfYmVzdF9lbmNvZGVyLAo+ID4gK307Cj4gPiArCj4gPiArc3Rh dGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgcHM4NjQwX2RldGVjdChzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yLAo+ID4gKwkJCQkJICAgICAgIGJvb2wgZm9yY2UpCj4gPiArewo+ ID4gKwlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyB2b2lkIHBzODY0MF9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yKQo+ID4gK3sKPiA+ICsJZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKGNvbm5l Y3Rvcik7Cj4gPiArCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwo+ID4gK30KPiA+ ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgcHM4NjQwX2Nv bm5lY3Rvcl9mdW5jcyA9IHsKPiA+ICsJLmRwbXMgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0 b3JfZHBtcywKPiA+ICsJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25u ZWN0b3JfbW9kZXMsCj4gPiArCS5kZXRlY3QgPSBwczg2NDBfZGV0ZWN0LAo+ID4gKwkuZGVzdHJv eSA9IHBzODY0MF9jb25uZWN0b3JfZGVzdHJveSwKPiA+ICsJLnJlc2V0ID0gZHJtX2F0b21pY19o ZWxwZXJfY29ubmVjdG9yX3Jlc2V0LAo+ID4gKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRy bV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCj4gPiArCS5hdG9taWNf ZGVzdHJveV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRl LAo+ID4gK307Cj4gPiArCj4gPiAraW50IHBzODY0MF9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2UpCj4gPiArewo+ID4gKwlzdHJ1Y3QgcHM4NjQwICpwc19icmlkZ2UgPSBi cmlkZ2VfdG9fcHM4NjQwKGJyaWRnZSk7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCWlmICgh YnJpZGdlLT5lbmNvZGVyKSB7Cj4gPiArCQlEUk1fRVJST1IoIlBhcmVudCBlbmNvZGVyIG9iamVj dCBub3QgZm91bmQiKTsKPiA+ICsJCXJldHVybiAtRU5PREVWOwo+ID4gKwl9Cj4gPiArCj4gPiAr CXJldCA9IGRybV9jb25uZWN0b3JfaW5pdChicmlkZ2UtPmRldiwgJnBzX2JyaWRnZS0+Y29ubmVj dG9yLAo+ID4gKwkJCQkgJnBzODY0MF9jb25uZWN0b3JfZnVuY3MsCj4gPiArCQkJCSBEUk1fTU9E RV9DT05ORUNUT1JfZURQKTsKPiA+ICsKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJRFJNX0VSUk9S KCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb25uZWN0b3Igd2l0aCBkcm06ICVkXG4iLCByZXQpOwo+ ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlkcm1fY29ubmVjdG9yX2hlbHBl cl9hZGQoJnBzX2JyaWRnZS0+Y29ubmVjdG9yLAo+ID4gKwkJCQkgJnBzODY0MF9jb25uZWN0b3Jf aGVscGVyX2Z1bmNzKTsKPiA+ICsJZHJtX2Nvbm5lY3Rvcl9yZWdpc3RlcigmcHNfYnJpZGdlLT5j b25uZWN0b3IpOwo+ID4gKwo+ID4gKwlwc19icmlkZ2UtPmNvbm5lY3Rvci5kcG1zID0gRFJNX01P REVfRFBNU19PTjsKPiA+ICsJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZwc19i cmlkZ2UtPmNvbm5lY3RvciwKPiA+ICsJCQkJCSAgYnJpZGdlLT5lbmNvZGVyKTsKPiA+ICsKPiA+ ICsJaWYgKHBzX2JyaWRnZS0+cGFuZWwpCj4gPiArCQlkcm1fcGFuZWxfYXR0YWNoKHBzX2JyaWRn ZS0+cGFuZWwsICZwc19icmlkZ2UtPmNvbm5lY3Rvcik7Cj4gPiArCj4gPiArCXJldHVybiByZXQ7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBib29sIHBzODY0MF9icmlkZ2VfbW9kZV9maXh1cChz dHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ID4gKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlLAo+ID4gKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICphZGp1c3RlZF9tb2RlKQo+ID4gK3sKPiA+ICsJcmV0dXJuIHRydWU7Cj4gPiArfQo+ID4gKwo+ ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyBwczg2NDBfYnJpZGdlX2Z1 bmNzID0gewo+ID4gKwkuYXR0YWNoID0gcHM4NjQwX2JyaWRnZV9hdHRhY2gsCj4gPiArCS5tb2Rl X2ZpeHVwID0gcHM4NjQwX2JyaWRnZV9tb2RlX2ZpeHVwLAo+ID4gKwkuZGlzYWJsZSA9IHBzODY0 MF9kaXNhYmxlLAo+ID4gKwkucG9zdF9kaXNhYmxlID0gcHM4NjQwX3Bvc3RfZGlzYWJsZSwKPiA+ ICsJLnByZV9lbmFibGUgPSBwczg2NDBfcHJlX2VuYWJsZSwKPiA+ICsJLmVuYWJsZSA9IHBzODY0 MF9lbmFibGUsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgc3NpemVfdCBwczg2NDBfZndfZmls ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+ICsJCQkJICAgc3RydWN0IGRldmljZV9hdHRy aWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKPiA+ICt7Cj4gPiArCXN0cnVjdCBwczg2NDAgKnBzX2Jy aWRnZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ID4gKwo+ID4gKwlyZXR1cm4gc2NucHJpbnRm KGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIHBzX2JyaWRnZS0+ZndfZmlsZSk7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQgcHM4NjQwX3VwZGF0ZV9maWxlX25hbWUoc3RydWN0IGRldmljZSAq ZGV2LCBjaGFyICoqZmlsZV9uYW1lLAo+ID4gKwkJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVf dCBjb3VudCkKPiA+ICt7Cj4gPiArCWNoYXIgKm5ld19maWxlX25hbWU7Cj4gPiArCj4gPiArCS8q IFNpbXBsZSBzYW5pdHkgY2hlY2sgKi8KPiA+ICsJaWYgKGNvdW50ID4gNjQpIHsKPiA+ICsJCWRl dl93YXJuKGRldiwgIkZpbGUgbmFtZSB0b28gbG9uZ1xuIik7Cj4gPiArCQlyZXR1cm4gLUVJTlZB TDsKPiA+ICsJfQo+ID4gKwo+ID4gKwluZXdfZmlsZV9uYW1lID0gZGV2bV9rbWFsbG9jKGRldiwg Y291bnQgKyAxLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFuZXdfZmlsZV9uYW1lKQo+ID4gKwkJ cmV0dXJuIC1FTk9NRU07Cj4gPiArCj4gPiArCW1lbWNweShuZXdfZmlsZV9uYW1lLCBidWYsIGNv dW50ICsgMSk7Cj4gPiArCj4gPiArCS8qIEVjaG8gaW50byB0aGUgc3lzZnMgZW50cnkgbWF5IGFw cGVuZCBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgYnVmICovCj4gPiArCWlmIChuZXdfZmlsZV9uYW1l W2NvdW50IC0gMV0gPT0gJ1xuJykKPiA+ICsJCWNvdW50LS07Cj4gPiArCj4gPiArCW5ld19maWxl X25hbWVbY291bnRdID0gJ1wwJzsKPiA+ICsKPiA+ICsJaWYgKCpmaWxlX25hbWUpCj4gPiArCQlk ZXZtX2tmcmVlKGRldiwgKmZpbGVfbmFtZSk7Cj4gPiArCj4gPiArCSpmaWxlX25hbWUgPSBuZXdf ZmlsZV9uYW1lOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGlj IHNzaXplX3QgcHM4NjQwX2Z3X2ZpbGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAo+ID4gKwkJ CQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4gPiArCQkJCSAgICBjb25zdCBj aGFyICpidWYsIHNpemVfdCBjb3VudCkKPiA+ICt7Cj4gPiArCXN0cnVjdCBwczg2NDAgKnBzX2Jy aWRnZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwly ZXQgPSBwczg2NDBfdXBkYXRlX2ZpbGVfbmFtZShkZXYsICZwc19icmlkZ2UtPmZ3X2ZpbGUsIGJ1 ZiwgY291bnQpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsKPiA+ICsJ cmV0dXJuIGNvdW50Owo+ID4gK30KPiA+ICsKPiA+ICsvKiBGaXJtd2FyZSBWZXJzaW9uIGlzIHJl dHVybmVkIGFzIE1ham9yLk1pbm9yLkJ1aWxkICovCj4gPiArc3RhdGljIHNzaXplX3QgcHM4NjQw X2Z3X3ZlcnNpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gPiArCQkJCSAgICAgIHN0cnVj dCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4gPiArewo+ID4gKwlzdHJ1Y3Qg cHM4NjQwICpwc19icmlkZ2UgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiA+ICsJc3RydWN0IHBz ODY0MF9pbmZvICppbmZvID0gJnBzX2JyaWRnZS0+aW5mbzsKPiA+ICsKPiA+ICsJcmV0dXJuIHNj bnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1LiV1XG4iLCBpbmZvLT52ZXJzaW9uID4+IDgsCj4g PiArCQkJIGluZm8tPnZlcnNpb24gJiAweGZmKTsKPiA+ICt9Cj4gPiArCj4gPiArLyogSGFyZHdh cmUgVmVyc2lvbiBpcyByZXR1cm5lZCBhcyBGYW1pbHlJRC5WYXJpYW50SUQgKi8KPiA+ICtzdGF0 aWMgc3NpemVfdCBwczg2NDBfaHdfdmVyc2lvbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+ ICsJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKPiA+ ICt7Cj4gPiArCXN0cnVjdCBwczg2NDAgKnBzX2JyaWRnZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp Owo+ID4gKwlzdHJ1Y3QgcHM4NjQwX2luZm8gKmluZm8gPSAmcHNfYnJpZGdlLT5pbmZvOwo+ID4g Kwo+ID4gKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAicHMldS4ldVxuIiwgaW5m by0+ZmFtaWx5X2lkLAo+ID4gKwkJCSBpbmZvLT52YXJpYW50X2lkKTsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIGludCBwczg2NDBfc3BpX3NlbmRfY21kKHN0cnVjdCBwczg2NDAgKnBzX2JyaWRn ZSwgdTggKmNtZCwgdTggY21kX2xlbikKPiA+ICt7Cj4gPiArCXN0cnVjdCBpMmNfY2xpZW50ICpj bGllbnQgPSBwc19icmlkZ2UtPnBhZ2VbMl07Cj4gPiArCXU4IGk7Cj4gPiArCWludCByZXQ7Cj4g PiArCj4gPiArCXJldCA9IHBzODY0MF9yZWd3X2J5dGUoY2xpZW50LCBQQUdFMl9JUk9NX0NUUkws IElST01fRU5BQkxFKTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCWdvdG8gZXJyOwo+ID4gKwo+ID4g KwkvKiB3cml0ZSBjb21tYW5kIGluIHdyaXRlIHBvcnQgKi8KPiA+ICsJZm9yIChpID0gMDsgaSA8 IGNtZF9sZW47IGkrKykgewo+ID4gKwkJcmV0ID0gcHM4NjQwX3JlZ3dfYnl0ZShjbGllbnQsIFBB R0UyX1NXU1BJX1dEQVRBLCBjbWRbaV0pOwo+ID4gKwkJaWYgKHJldCkKPiA+ICsJCQlnb3RvIGVy cjsKPiA+ICsJfQo+ID4gKwkvKgljb21tYW5kIGxlbmd0aCAqLwo+ID4gKwlyZXQgPSBwczg2NDBf cmVnd19ieXRlKGNsaWVudCwgUEFHRTJfU1dTUElfTEVOLCBjbWRfbGVuIC0gMSk7Cj4gPiArCWlm IChyZXQpCj4gPiArCQlnb3RvIGVycjsKPiA+ICsJLyoJdHJpZ2dlciByZWFkICovCj4gPiArCXJl dCA9IHBzODY0MF9yZWd3X2J5dGUoY2xpZW50LCBQQUdFMl9TV1NQSV9DVEwsIFRSSUdHRVJfTk9f UkVBREJBQ0spOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJZ290byBlcnI7Cj4gPiArCj4gPiArCXJl dCA9IHBzODY0MF9yZWd3X2J5dGUoY2xpZW50LCBQQUdFMl9JUk9NX0NUUkwsIElST01fRElTQUJM RSk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlnb3RvIGVycjsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7 Cj4gPiArCj4gPiArZXJyOgo+ID4gKwlkZXZfZXJyKCZjbGllbnQtPmRldiwgInNlbmQgY29tbWFu ZCBlcnI6ICVkXG4iLCByZXQpOwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgaW50IHBzODY0MF93YWl0X3NwaV9yZWFkeShzdHJ1Y3QgcHM4NjQwICpwc19icmlkZ2Up Cj4gPiArewo+ID4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gcHNfYnJpZGdlLT5wYWdl WzJdOwo+ID4gKwl1OCBzcGlfcmR5X3N0LCByZXRyeV9jbnQgPSAwOwo+ID4gKwo+ID4gKwlkbyB7 Cj4gPiArCQlwczg2NDBfcmVncihjbGllbnQsIFBBR0UyX1NQSV9TVEFUVVMsICZzcGlfcmR5X3N0 LCAxKTsKPiA+ICsJCW1zbGVlcCgyMCk7Cj4gPiArCQlpZiAoKHJldHJ5X2NudCA9PSBTUElfTUFY X1JFVFJZX0NOVCkgJiYKPiA+ICsJCSAgICAoKHNwaV9yZHlfc3QgJiAweDBjKSAhPSAweDBjKSkg ewo+ID4gKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAid2FpdCBzcGkgcmVhZHkgdGltZW91dFxu Iik7Cj4gPiArCQkJcmV0dXJuIC1FQlVTWTsKPiA+ICsJCX0KPiA+ICsJfSB3aGlsZSAoKHJldHJ5 X2NudCsrIDwgU1BJX01BWF9SRVRSWV9DTlQpICYmCj4gPiArCQkgKHNwaV9yZHlfc3QgJiAweDBj KSA9PSAweDBjKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRp YyBpbnQgcHM4NjQwX3dhaXRfc3BpX25vYnVzeShzdHJ1Y3QgcHM4NjQwICpwc19icmlkZ2UpCj4g PiArewo+ID4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gcHNfYnJpZGdlLT5wYWdlWzJd Owo+ID4gKwl1OCBzcGlfc3RhdHVzLCByZXRyeV9jbnQgPSAwOwo+ID4gKwlpbnQgcmV0Owo+ID4g Kwo+ID4gKwlkbyB7Cj4gPiArCQkvKiAgMHgwNSBSRFNSOyBSZWFkLVN0YXR1cy1SZWdpc3RlciAq Lwo+ID4gKwkJcmV0ID0gcHM4NjQwX3JlZ3dfYnl0ZShjbGllbnQsIFBBR0UyX1NXU1BJX1dEQVRB LCAweDA1KTsKPiA+ICsJCWlmIChyZXQpCj4gPiArCQkJZ290byBlcnJfc2VuZF9jbWRfZXhpdDsK PiA+ICsKPiA+ICsJCS8qICBjb21tYW5kIGxlbmd0aCAqLwo+ID4gKwkJcmV0ID0gcHM4NjQwX3Jl Z3dfYnl0ZShjbGllbnQsIFBBR0UyX1NXU1BJX0xFTiwgMHgwMCk7Cj4gPiArCQlpZiAocmV0KQo+ ID4gKwkJCWdvdG8gZXJyX3NlbmRfY21kX2V4aXQ7Cj4gPiArCj4gPiArCQkvKiAgdHJpZ2dlciBy ZWFkICovCj4gPiArCQlyZXQgPSBwczg2NDBfcmVnd19ieXRlKGNsaWVudCwgUEFHRTJfU1dTUElf Q1RMLAo+ID4gKwkJCQkgICAgICAgVFJJR0dFUl9SRUFEQkFDSyk7Cj4gPiArCQlpZiAocmV0KQo+ ID4gKwkJCWdvdG8gZXJyX3NlbmRfY21kX2V4aXQ7Cj4gPiArCj4gPiArCQkvKiBkZWxheSBmb3Ig Y21kIHNlbmQgKi8KPiA+ICsJCXVzbGVlcF9yYW5nZSgxMDAsIDMwMCk7Cj4gPiArCQkvKiB3YWl0 IGZvciBTUEkgUk9NIHVudGlsIG5vdCBidXN5ICovCj4gPiArCQlyZXQgPSBwczg2NDBfcmVncihj bGllbnQsIFBBR0UyX1NXU1BJX1JEQVRBLCAmc3BpX3N0YXR1cywgMSk7Cj4gPiArCQlpZiAocmV0 KQo+ID4gKwkJCWdvdG8gZXJyX3NlbmRfY21kX2V4aXQ7Cj4gPiArCX0gd2hpbGUgKChyZXRyeV9j bnQrKyA8IFNQSV9NQVhfUkVUUllfQ05UKSAmJgo+ID4gKwkJIChzcGlfc3RhdHVzICYgMHgwYykg PT0gMHgwYyk7Cj4gPiArCj4gPiArCWlmICgocmV0cnlfY250ID4gU1BJX01BWF9SRVRSWV9DTlQp ICYmIChzcGlfc3RhdHVzICYgMHgwYykgIT0gMHgwYykgewo+ID4gKwkJcmV0ID0gLUVCVVNZOwo+ ID4gKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJ3YWl0IHNwaSBubyBidXN5IHRpbWVvdXQ6ICVk XG4iLCByZXQpOwo+ID4gKwkJZ290byBlcnJfdGltZW91dDsKPiA+ICsJfQo+ID4gKwo+ID4gKwly ZXR1cm4gMDsKPiA+ICsKPiA+ICtlcnJfc2VuZF9jbWRfZXhpdDoKPiA+ICsJZGV2X2VycigmY2xp ZW50LT5kZXYsICJzZW5kIGNvbW1hbmQgZXJyOiAlZFxuIiwgcmV0KTsKPiA+ICsKPiA+ICtlcnJf dGltZW91dDoKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBw czg2NDBfd2FpdF9yb21faWRsZShzdHJ1Y3QgcHM4NjQwICpwc19icmlkZ2UpCj4gPiArewo+ID4g KwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gcHNfYnJpZGdlLT5wYWdlWzBdOwo+ID4gKwlp bnQgcmV0Owo+ID4gKwo+ID4gKwlyZXQgPSBwczg2NDBfcmVnd19ieXRlKGNsaWVudCwgUEFHRTJf SVJPTV9DVFJMLCBJUk9NX0VOQUJMRSk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlnb3RvIGV4aXQ7 Cj4gPiArCj4gPiArCXJldCA9IHBzODY0MF93YWl0X3NwaV9yZWFkeShwc19icmlkZ2UpOwo+ID4g KwlpZiAocmV0KQo+ID4gKwkJZ290byBleGl0Owo+ID4gKwo+ID4gKwlyZXQgPSBwczg2NDBfd2Fp dF9zcGlfbm9idXN5KHBzX2JyaWRnZSk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlnb3RvIGV4aXQ7 Cj4gPiArCj4gPiArCXJldCA9IHBzODY0MF9yZWd3X2J5dGUoY2xpZW50LCBQQUdFMl9JUk9NX0NU UkwsIElST01fRElTQUJMRSk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlnb3RvIGV4aXQ7Cj4gPiAr Cj4gPiArZXhpdDoKPiA+ICsJaWYgKHJldCkKPiA+ICsJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAi d2FpdCBwczg2NDAgcm9tIGlkbGUgZmFpbDogJWRcbiIsIHJldCk7Cj4gPiArCj4gPiArCXJldHVy biByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgcHM4NjQwX3NwaV9kbF9tb2RlKHN0 cnVjdCBwczg2NDAgKnBzX2JyaWRnZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBpMmNfY2xpZW50ICpj bGllbnQgPSBwc19icmlkZ2UtPnBhZ2VbMl07Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCS8q IHN3aXRjaCBwczg2NDAgbW9kZSB0byBzcGkgZGwgbW9kZSAqLwo+ID4gKwlncGlvZF9zZXRfdmFs dWUocHNfYnJpZGdlLT5ncGlvX21vZGVfc2VsX24sIDApOwo+ID4gKwo+ID4gKwkvKiByZXNldCBz cGkgaW50ZXJmYWNlICovCj4gPiArCXJldCA9IHBzODY0MF9yZWd3X2J5dGUoY2xpZW50LCBQQUdF Ml9TV19SRVNULCAweGMwKTsKPiA+ICsJaWYgKHJldCkKPiA+ICsJCWdvdG8gZXhpdDsKPiA+ICsK PiA+ICsJcmV0ID0gcHM4NjQwX3JlZ3dfYnl0ZShjbGllbnQsIFBBR0UyX1NXX1JFU1QsIDB4NDAp Owo+ID4gKwlpZiAocmV0KQo+ID4gKwkJZ290byBleGl0Owo+ID4gKwo+ID4gK2V4aXQ6Cj4gPiAr CWlmIChyZXQpCj4gPiArCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWwgcmVzZXQgc3BpIGlu dGVyZmFjZTogJWRcbiIsIHJldCk7Cj4gPiArCj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQgcHM4NjQwX3JvbV9wcmVwYXJlKHN0cnVjdCBwczg2NDAgKnBzX2Jy aWRnZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBwc19icmlkZ2Ut PnBhZ2VbMl07Cj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKPiA+ICsJ dTggaSwgY21kWzJdOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwkvKglFbmFibGUtV3JpdGUt U3RhdHVzLVJlZ2lzdGVyICovCj4gPiArCWNtZFswXSA9IDB4MDY7Cj4gPiArCXJldCA9IHBzODY0 MF9zcGlfc2VuZF9jbWQocHNfYnJpZGdlLCBjbWQsIDEpOwo+ID4gKwlpZiAocmV0KSB7Cj4gPiAr CQlkZXZfZXJyKGRldiwgImZhaWxlZCBlbmFibGUtd3JpdGUtc3RhdHVzLXJlZ2lzdGVyOiAlZFxu IiwgcmV0KTsKPiA+ICsJCXJldHVybiByZXQ7Cj4gPiArCX0KPiA+ICsKPiA+ICsJLyogZGlzYWJs ZSBhbGwgcHJvdGVjdGlvbiAqLwo+ID4gKwljbWRbMF0gPSAweDAxOwo+ID4gKwljbWRbMV0gPSAw eDAwOwo+ID4gKwlyZXQgPSBwczg2NDBfc3BpX3NlbmRfY21kKHBzX2JyaWRnZSwgY21kLCAyKTsK PiA+ICsJaWYgKHJldCkgewo+ID4gKwkJZGV2X2VycihkZXYsICJmYWlsIGRpc2FibGUgYWxsIHBy b3RlY3Rpb246ICVkXG4iLCByZXQpOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ ID4gKwkvKiB3YWl0IGZvciBTUEkgbW9kdWxlIHJlYWR5ICovCj4gPiArCXJldCA9IHBzODY0MF93 YWl0X3JvbV9pZGxlKHBzX2JyaWRnZSk7Cj4gPiArCWlmIChyZXQpIHsKPiA+ICsJCWRldl9lcnIo ZGV2LCAiZmFpbCB3YWl0IHJvbSBpZGxlOiAlZFxuIiwgcmV0KTsKPiA+ICsJCXJldHVybiByZXQ7 Cj4gPiArCX0KPiA+ICsKPiA+ICsJcHM4NjQwX3JlZ3dfYnl0ZShjbGllbnQsIFBBR0UyX0lST01f Q1RSTCwgSVJPTV9FTkFCTEUpOwo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQo+ID4gKwkJ cHM4NjQwX3JlZ3dfYnl0ZShjbGllbnQsIFBBR0UyX0VOQ1RMU1BJX1dSLCBlbmNfY3RybF9jb2Rl W2ldKTsKPiA+ICsJcHM4NjQwX3JlZ3dfYnl0ZShjbGllbnQsIFBBR0UyX0lST01fQ1RSTCwgSVJP TV9ESVNBQkxFKTsKPiA+ICsKPiA+ICsJLyoJRW5hYmxlLVdyaXRlLVN0YXR1cy1SZWdpc3RlciAq Lwo+ID4gKwljbWRbMF0gPSAweDA2Owo+ID4gKwlyZXQgPSBwczg2NDBfc3BpX3NlbmRfY21kKHBz X2JyaWRnZSwgY21kLCAxKTsKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJZGV2X2VycihkZXYsICJm YWlsIGVuYWJsZS13cml0ZS1zdGF0dXMtcmVnaXN0ZXI6ICVkXG4iLCByZXQpOwo+ID4gKwkJcmV0 dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwkvKiBjaGlwIGVyYXNlIGNvbW1hbmQgKi8KPiA+ ICsJY21kWzBdID0gMHhjNzsKPiA+ICsJcmV0ID0gcHM4NjQwX3NwaV9zZW5kX2NtZChwc19icmlk Z2UsIGNtZCwgMSk7Cj4gPiArCWlmIChyZXQpIHsKPiA+ICsJCWRldl9lcnIoZGV2LCAiZmFpbCBk aXNhYmxlIGFsbCBwcm90ZWN0aW9uOiAlZFxuIiwgcmV0KTsKPiA+ICsJCXJldHVybiByZXQ7Cj4g PiArCX0KPiA+ICsKPiA+ICsJcmV0ID0gcHM4NjQwX3dhaXRfcm9tX2lkbGUocHNfYnJpZGdlKTsK PiA+ICsJaWYgKHJldCkgewo+ID4gKwkJZGV2X2VycihkZXYsICJmYWlsIHdhaXQgcm9tIGlkbGU6 ICVkXG4iLCByZXQpOwo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1 cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBwczg2NDBfdmFsaWRhdGVfZmlybXdh cmUoc3RydWN0IHBzODY0MCAqcHNfYnJpZGdlLAo+ID4gKwkJCQkgICAgY29uc3Qgc3RydWN0IGZp cm13YXJlICpmdykKPiA+ICt7Cj4gPiArCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBwc19i cmlkZ2UtPnBhZ2VbMF07Cj4gPiArCXN0cnVjdCBwczg2NDBfaW5mbyAqaW5mbyA9ICZwc19icmlk Z2UtPmluZm87Cj4gPiArCXUxNiBmd19jaGlwX2lkLCBmd192ZXJzaW9uX2lkOwo+ID4gKwo+ID4g KwkvKgo+ID4gKwkgKiBHZXQgdGhlIGNoaXBfaWQgZnJvbSB0aGUgZmlybXdhcmUuIE1ha2Ugc3Vy ZSB0aGF0IGl0IGlzIHRoZQo+ID4gKwkgKiByaWdodCBjb250cm9sbGVyIHRvIGRvIHRoZSBmaXJt d2FyZSBhbmQgY29uZmlnIHVwZGF0ZS4KPiA+ICsJICovCj4gPiArCWZ3X2NoaXBfaWQgPSBnZXRf dW5hbGlnbmVkX2xlMTYoZnctPmRhdGEgKyBGV19DSElQX0lEX09GRlNFVCk7Cj4gPiArCj4gPiAr CWlmIChmd19jaGlwX2lkICE9IDB4ODY0MCkgewo+ID4gKwkJZGV2X2VycigmY2xpZW50LT5kZXYs Cj4gPiArCQkJImNoaXAgaWQgbWlzbWF0Y2g6IGZ3IDB4JXggdnMuIGNoaXAgMHg4NjQwXG4iLAo+ ID4gKwkJCWZ3X2NoaXBfaWQpOwo+ID4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gPiArCX0KPiA+ICsK PiA+ICsJZndfdmVyc2lvbl9pZCA9IGdldF91bmFsaWduZWRfbGUxNihmdy0+ZGF0YSArIEZXX1ZF UlNJT05fT0ZGU0VUKTsKPiA+ICsKPiA+ICsJaWYgKGZ3X2NoaXBfaWQgIT0gaW5mby0+dmVyc2lv bikgewo+ID4gKwkJZGV2X2VycigmY2xpZW50LT5kZXYsCj4gPiArCQkJImZ3IHZlcnNpb24gbWlz bWF0Y2g6IGZ3ICVkLiVkIHZzLiBjaGlwICVkLiVkXG4iLAo+ID4gKwkJCWZ3X3ZlcnNpb25faWQg Pj4gOCwgZndfdmVyc2lvbl9pZCAmIDB4ZmYsCj4gPiArCQkJaW5mby0+dmVyc2lvbiA+PiA4LCBp bmZvLT52ZXJzaW9uICYgMHhmZik7Cj4gPiArCQlyZXR1cm4gLUVOT0RFVjsKPiA+ICsJfQo+ID4g Kwo+ID4gKwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBwczg2NDBfd3Jp dGVfcm9tKHN0cnVjdCBwczg2NDAgKnBzX2JyaWRnZSwgY29uc3Qgc3RydWN0IGZpcm13YXJlICpm dykKPiA+ICt7Cj4gPiArCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBwc19icmlkZ2UtPnBh Z2VbMF07Cj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKPiA+ICsJc3Ry dWN0IGkyY19jbGllbnQgKmNsaWVudDIgPSBwc19icmlkZ2UtPnBhZ2VbMl07Cj4gPiArCXN0cnVj dCBpMmNfY2xpZW50ICpjbGllbnQ3ID0gcHNfYnJpZGdlLT5wYWdlWzddOwo+ID4gKwl1bnNpZ25l ZCBpbnQgcG9zID0gMDsKPiA+ICsJdTggcHJvZ3Jlc3NfY250LCByb21fcGFnZV9pZFsyXTsKPiA+ ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJcHM4NjQwX3JlZ3dfYnl0ZShjbGllbnQyLCBQQUdFMl9T UElfQ0ZHMywgSTJDX1RPX1NQSV9SRVNFVCk7Cj4gPiArCW1zbGVlcCgxMDApOwo+ID4gKwlwczg2 NDBfcmVnd19ieXRlKGNsaWVudDIsIFBBR0UyX1NQSV9DRkczLCAweDAwKTsKPiA+ICsKPiA+ICsJ d2hpbGUgKHBvcyA8IGZ3LT5zaXplKSB7Cj4gPiArCQlyb21fcGFnZV9pZFswXSA9IChwb3MgPj4g OCkgJiAweEZGOwo+ID4gKwkJcm9tX3BhZ2VfaWRbMV0gPSAocG9zID4+IDE2KSAmIDB4RkY7Cj4g PiArCQlyZXQgPSBwczg2NDBfcmVndyhjbGllbnQyLCBQQUdFMl9ST01BRERfQllURTEsIHJvbV9w YWdlX2lkLCAyKTsKPiA+ICsJCWlmIChyZXQpCj4gPiArCQkJZ290byBlcnJvcjsKPiA+ICsJCXJl dCA9IHBzODY0MF9yZWd3KGNsaWVudDcsIDAsIGZ3LT5kYXRhICsgcG9zLCAyNTYpOwo+ID4gKwkJ aWYgKHJldCkKPiA+ICsJCQlnb3RvIGVycm9yOwo+ID4gKwo+ID4gKwkJcG9zICs9IDI1NjsKPiA+ ICsJCWlmIChwcm9ncmVzc19jbnQgIT0gKHBvcyAqIDEwMCkgLyBmdy0+c2l6ZSkgewo+ID4gKwkJ CXByb2dyZXNzX2NudCA9IChwb3MgKiAxMDApIC8gZnctPnNpemU7Cj4gPiArCQkJZGV2X2luZm8o ZGV2LCAiZncgdXBkYXRlIHByb2dyZXNzIHBlcmNlbnQgJWRcbiIsCj4gPiArCQkJCSBwcm9ncmVz c19jbnQpOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCXJldHVybiAwOwo+ID4gKwo+ID4gK2Vycm9y Ogo+ID4gKwlkZXZfZXJyKGRldiwgImZhaWxlZCB3cml0ZSBleHRlbmFsIGZsYXNoLCAlZFxuIiwg cmV0KTsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBwczg2 NDBfc3BpX25vcm1hbF9tb2RlKHN0cnVjdCBwczg2NDAgKnBzX2JyaWRnZSkKPiA+ICt7Cj4gPiAr CXU4IGNtZFsyXTsKPiA+ICsJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHBzX2JyaWRnZS0+ cGFnZVsyXTsKPiA+ICsKPiA+ICsJLyogIEVuYWJsZS1Xcml0ZS1TdGF0dXMtUmVnaXN0ZXIgKi8K PiA+ICsJY21kWzBdID0gMHgwNjsKPiA+ICsJcHM4NjQwX3NwaV9zZW5kX2NtZChwc19icmlkZ2Us IGNtZCwgMSk7Cj4gPiArCj4gPiArCS8qIHByb3RlY3QgQlBML0JQMC9CUDEgKi8KPiA+ICsJY21k WzBdID0gMHgwMTsKPiA+ICsJY21kWzFdID0gMHg4YzsKPiA+ICsJcHM4NjQwX3NwaV9zZW5kX2Nt ZChwc19icmlkZ2UsIGNtZCwgMik7Cj4gPiArCj4gPiArCS8qIHdhaXQgZm9yIFNQSSByb20gcmVh ZHkgKi8KPiA+ICsJcHM4NjQwX3dhaXRfcm9tX2lkbGUocHNfYnJpZGdlKTsKPiA+ICsKPiA+ICsg ICAgIC8qIGRpc2FibGUgUFM4NjQwIG1hcHBpbmcgZnVuY3Rpb24gKi8KPiA+ICsJcHM4NjQwX3Jl Z3dfYnl0ZShjbGllbnQsIFBBR0UyX0VOQ1RMU1BJX1dSLCAweDAwKTsKPiA+ICsKPiA+ICsJZ3Bp b2Rfc2V0X3ZhbHVlKHBzX2JyaWRnZS0+Z3Bpb19tb2RlX3NlbF9uLCAxKTsKPiA+ICsJcmV0dXJu IDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgcHM4NjQwX2VudGVyX2JsKHN0cnVjdCBw czg2NDAgKnBzX2JyaWRnZSkKPiA+ICt7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCXJldCA9 IHBzODY0MF9zcGlfZGxfbW9kZShwc19icmlkZ2UpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJcmV0 dXJuIHJldDsKPiA+ICsKPiA+ICsJcHNfYnJpZGdlLT5pbl9md191cGRhdGUgPSB0cnVlOwo+ID4g KwlyZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgcHM4NjQwX2V4aXRfYmwo c3RydWN0IHBzODY0MCAqcHNfYnJpZGdlLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQo+ID4g K3sKPiA+ICsJcHNfYnJpZGdlLT5pbl9md191cGRhdGUgPSBmYWxzZTsKPiA+ICsJcHM4NjQwX3Nw aV9ub3JtYWxfbW9kZShwc19icmlkZ2UpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHBz ODY0MF9sb2FkX2Z3KHN0cnVjdCBwczg2NDAgKnBzX2JyaWRnZSwgY29uc3Qgc3RydWN0IGZpcm13 YXJlICpmdykKPiA+ICt7Cj4gPiArCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBwc19icmlk Z2UtPnBhZ2VbMF07Cj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKPiA+ ICsJaW50IHJldDsKPiA+ICsJYm9vbCBwczg2NDBfc3RhdHVzX2JhY2t1cCA9IHBzX2JyaWRnZS0+ ZW5hYmxlZDsKPiA+ICsKPiA+ICsJaWYgKCFwczg2NDBfaW5fYm9vdGxvYWRlcihwc19icmlkZ2Up KSB7Cj4gPiArCQlpZiAoIXBzODY0MF9zdGF0dXNfYmFja3VwKQo+ID4gKwkJCXBzODY0MF9wcmVw YXJlKHBzX2JyaWRnZSk7Cj4gPiArCj4gPiArCQlyZXQgPSBwczg2NDBfZW50ZXJfYmwocHNfYnJp ZGdlKTsKPiA+ICsJCWlmIChyZXQpCj4gPiArCQkJZ290byBleGl0Owo+ID4gKwl9Cj4gPiArCj4g PiArCXJldCA9IHBzODY0MF92YWxpZGF0ZV9maXJtd2FyZShwc19icmlkZ2UsIGZ3KTsKPiA+ICsJ aWYgKHJldCkKPiA+ICsJCWdvdG8gZXhpdDsKPiA+ICsKPiA+ICsJcmV0ID0gcHM4NjQwX3JvbV9w cmVwYXJlKHBzX2JyaWRnZSk7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlnb3RvIGV4aXQ7Cj4gPiAr Cj4gPiArCXJldCA9IHBzODY0MF93cml0ZV9yb20ocHNfYnJpZGdlLCBmdyk7Cj4gPiArCj4gPiAr ZXhpdDoKPiA+ICsJaWYgKHJldCkKPiA+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGxvYWQg ZmlybXdhcmUsICVkXG4iLCByZXQpOwo+ID4gKwo+ID4gKwlwczg2NDBfZXhpdF9ibChwc19icmlk Z2UsIGZ3KTsKPiA+ICsJaWYgKCFwczg2NDBfc3RhdHVzX2JhY2t1cCkKPiA+ICsJCXBzODY0MF9k aXNhYmxlKCZwc19icmlkZ2UtPmJyaWRnZSk7Cj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBzc2l6ZV90IHBzODY0MF91cGRhdGVfZndfc3RvcmUoc3RydWN0IGRldmlj ZSAqZGV2LAo+ID4gKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPiA+ ICsJCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCj4gPiArewo+ID4gKwlz dHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwo+ID4gKwlzdHJ1 Y3QgcHM4NjQwICpwc19icmlkZ2UgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKPiA+ICsJ Y29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKPiA+ICsJaW50IGVycm9yOwo+ID4gKwo+ID4gKwll cnJvciA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBwc19icmlkZ2UtPmZ3X2ZpbGUsIGRldik7Cj4g PiArCWlmIChlcnJvcikgewo+ID4gKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gb3BlbiBmaXJt d2FyZSAlczogJWRcbiIsCj4gPiArCQkJcHNfYnJpZGdlLT5md19maWxlLCBlcnJvcik7Cj4gPiAr CQlyZXR1cm4gZXJyb3I7Cj4gPiArCX0KPiA+ICsKPiA+ICsJZXJyb3IgPSBwczg2NDBfbG9hZF9m dyhwc19icmlkZ2UsIGZ3KTsKPiA+ICsJaWYgKGVycm9yKQo+ID4gKwkJZGV2X2VycihkZXYsICJU aGUgZmlybXdhcmUgdXBkYXRlIGZhaWxlZCglZClcbiIsIGVycm9yKTsKPiA+ICsJZWxzZQo+ID4g KwkJZGV2X2luZm8oZGV2LCAiVGhlIGZpcm13YXJlIHVwZGF0ZSBzdWNjZWVkZWRcbiIpOwo+ID4g Kwo+ID4gKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKPiA+ICsJcmV0dXJuIGVycm9yID8gZXJyb3Ig OiBjb3VudDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIERFVklDRV9BVFRSKGZ3X2ZpbGUsIFNf SVJVR08gfCBTX0lXVVNSLCBwczg2NDBfZndfZmlsZV9zaG93LAo+ID4gKwkJICAgcHM4NjQwX2Z3 X2ZpbGVfc3RvcmUpOwo+ID4gK3N0YXRpYyBERVZJQ0VfQVRUUihmd192ZXJzaW9uLCBTX0lSVUdP LCBwczg2NDBfZndfdmVyc2lvbl9zaG93LCBOVUxMKTsKPiA+ICtzdGF0aWMgREVWSUNFX0FUVFIo aHdfdmVyc2lvbiwgU19JUlVHTywgcHM4NjQwX2h3X3ZlcnNpb25fc2hvdywgTlVMTCk7Cj4gPiAr c3RhdGljIERFVklDRV9BVFRSKHVwZGF0ZV9mdywgU19JV1VTUiwgTlVMTCwgcHM4NjQwX3VwZGF0 ZV9md19zdG9yZSk7Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBzODY0MF9h dHRyc1tdID0gewo+ID4gKwkmZGV2X2F0dHJfZndfZmlsZS5hdHRyLAo+ID4gKwkmZGV2X2F0dHJf ZndfdmVyc2lvbi5hdHRyLAo+ID4gKwkmZGV2X2F0dHJfaHdfdmVyc2lvbi5hdHRyLAo+ID4gKwkm ZGV2X2F0dHJfdXBkYXRlX2Z3LmF0dHIsCj4gPiArCU5VTEwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBzODY0MF9hdHRyX2dyb3VwID0gewo+ ID4gKwkuYXR0cnMgPSBwczg2NDBfYXR0cnMsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgdm9p ZCBwczg2NDBfcmVtb3ZlX3N5c2ZzX2dyb3VwKHZvaWQgKmRhdGEpCj4gPiArewo+ID4gKwlzdHJ1 Y3QgcHM4NjQwICpwc19icmlkZ2UgPSBkYXRhOwo+ID4gKwo+ID4gKwlzeXNmc19yZW1vdmVfZ3Jv dXAoJnBzX2JyaWRnZS0+cGFnZVswXS0+ZGV2LmtvYmosICZwczg2NDBfYXR0cl9ncm91cCk7Cj4g PiArfQo+ID4gKwo+ID4gKy8qIGZvciBmaXJld2FyZSB1cGRhdGUgZW5kICovCj4gPiArCj4gPiAr c3RhdGljIGludCBwczg2NDBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKPiA+ICsJ CQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7Cj4gPiArCXN0cnVjdCBwczg2NDAgKnBzX2JyaWRnZTsK PiA+ICsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKPiA+ICsJc3RydWN0 IGRldmljZV9ub2RlICpwb3J0LCAqb3V0X2VwOwo+ID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBh bmVsX25vZGUgPSBOVUxMOwo+ID4gKwlpbnQgaSwgcmV0Owo+ID4gKwo+ID4gKwlwc19icmlkZ2Ug PSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBzX2JyaWRnZSksIEdGUF9LRVJORUwpOwo+ID4g KwlpZiAoIXBzX2JyaWRnZSkgewo+ID4gKwkJcmV0ID0gLUVOT01FTTsKPiA+ICsJCWdvdG8gZXhp dDsKPiA+ICsJfQo+ID4gKwkvKiBwb3J0QDEgaXMgcHM4NjQwIG91dHB1dCBwb3J0ICovCj4gPiAr CXBvcnQgPSBvZl9ncmFwaF9nZXRfcG9ydF9ieV9pZChucCwgMSk7Cj4gPiArCWlmIChwb3J0KSB7 Cj4gPiArCQlvdXRfZXAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShwb3J0LCAiZW5kcG9pbnQiKTsK PiA+ICsJCW9mX25vZGVfcHV0KHBvcnQpOwo+ID4gKwkJaWYgKG91dF9lcCkgewo+ID4gKwkJCXBh bmVsX25vZGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KG91dF9lcCk7Cj4gPiAr CQkJb2Zfbm9kZV9wdXQob3V0X2VwKTsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwlpZiAocGFuZWxf bm9kZSkgewo+ID4gKwkJcHNfYnJpZGdlLT5wYW5lbCA9IG9mX2RybV9maW5kX3BhbmVsKHBhbmVs X25vZGUpOwo+ID4gKwkJb2Zfbm9kZV9wdXQocGFuZWxfbm9kZSk7Cj4gPiArCQlpZiAoIXBzX2Jy aWRnZS0+cGFuZWwpIHsKPiA+ICsJCQlyZXQgPSAtRVBST0JFX0RFRkVSOwo+ID4gKwkJCWdvdG8g ZXhpdDsKPiA+ICsJCX0KPiA+ICsJfQo+ID4gKwo+ID4gKwlwc19icmlkZ2UtPnB3cl8zdjNfc3Vw cGx5ID0gZGV2bV9yZWd1bGF0b3JfZ2V0KGRldiwgInZkZDMzIik7Cj4gPiArCWlmIChJU19FUlIo cHNfYnJpZGdlLT5wd3JfM3YzX3N1cHBseSkpIHsKPiA+ICsJCXJldCA9IFBUUl9FUlIocHNfYnJp ZGdlLT5wd3JfM3YzX3N1cHBseSk7Cj4gPiArCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgdmRk MzMgc3VwcGx5OiAlZFxuIiwgcmV0KTsKPiA+ICsJCWdvdG8gZXhpdDsKPiA+ICsJfQo+ID4gKwo+ ID4gKwlwc19icmlkZ2UtPnB3cl8xdjJfc3VwcGx5ID0gZGV2bV9yZWd1bGF0b3JfZ2V0KGRldiwg InZkZDEyIik7Cj4gPiArCWlmIChJU19FUlIocHNfYnJpZGdlLT5wd3JfMXYyX3N1cHBseSkpIHsK PiA+ICsJCXJldCA9IFBUUl9FUlIocHNfYnJpZGdlLT5wd3JfMXYyX3N1cHBseSk7Cj4gPiArCQlk ZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgdmRkMTIgc3VwcGx5OiAlZFxuIiwgcmV0KTsKPiA+ICsJ CWdvdG8gZXhpdDsKPiA+ICsJfQo+ID4gKwo+ID4gKwlwc19icmlkZ2UtPmdwaW9fbW9kZV9zZWxf biA9IGRldm1fZ3Bpb2RfZ2V0KCZjbGllbnQtPmRldiwgIm1vZGUtc2VsIiwKPiA+ICsJCQkJCQkg ICAgR1BJT0RfT1VUX0hJR0gpOwo+ID4gKwlpZiAoSVNfRVJSKHBzX2JyaWRnZS0+Z3Bpb19tb2Rl X3NlbF9uKSkgewo+ID4gKwkJcmV0ID0gUFRSX0VSUihwc19icmlkZ2UtPmdwaW9fbW9kZV9zZWxf bik7Cj4gPiArCQlkZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgZ3Bpb19tb2RlX3NlbF9uICVkXG4i LCByZXQpOwo+ID4gKwkJZ290byBleGl0Owo+ID4gKwl9Cj4gPiArCj4gPiArCXBzX2JyaWRnZS0+ Z3Bpb19zbHBfbiA9IGRldm1fZ3Bpb2RfZ2V0KCZjbGllbnQtPmRldiwgInNsZWVwIiwKPiA+ICsJ CQkJCSAgICAgICBHUElPRF9PVVRfSElHSCk7Cj4gPiArCWlmIChJU19FUlIocHNfYnJpZGdlLT5n cGlvX3NscF9uKSkgewo+ID4gKwkJcmV0ID0gUFRSX0VSUihwc19icmlkZ2UtPmdwaW9fc2xwX24p Owo+ID4gKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IGdwaW9fc2xwX246ICVkXG4iLCByZXQp Owo+ID4gKwkJZ290byBleGl0Owo+ID4gKwl9Cj4gPiArCj4gPiArCXBzX2JyaWRnZS0+Z3Bpb19y c3RfbiA9IGRldm1fZ3Bpb2RfZ2V0KCZjbGllbnQtPmRldiwgInJlc2V0IiwKPiA+ICsJCQkJCSAg ICAgICBHUElPRF9PVVRfSElHSCk7Cj4gPiArCWlmIChJU19FUlIocHNfYnJpZGdlLT5ncGlvX3Jz dF9uKSkgewo+ID4gKwkJcmV0ID0gUFRSX0VSUihwc19icmlkZ2UtPmdwaW9fcnN0X24pOwo+ID4g KwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IGdwaW9fcnN0X246ICVkXG4iLCByZXQpOwo+ID4g KwkJZ290byBleGl0Owo+ID4gKwl9Cj4gPiArCj4gPiArCXBzX2JyaWRnZS0+YnJpZGdlLmZ1bmNz ID0gJnBzODY0MF9icmlkZ2VfZnVuY3M7Cj4gPiArCXBzX2JyaWRnZS0+YnJpZGdlLm9mX25vZGUg PSBkZXYtPm9mX25vZGU7Cj4gPiArCXJldCA9IGRybV9icmlkZ2VfYWRkKCZwc19icmlkZ2UtPmJy aWRnZSk7Cj4gPiArCWlmIChyZXQpIHsKPiA+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFk ZCBicmlkZ2U6ICVkXG4iLCByZXQpOwo+ID4gKwkJZ290byBleGl0Owo+ID4gKwl9Cj4gPiArCj4g PiArCXJldCA9IHBzODY0MF91cGRhdGVfZmlsZV9uYW1lKCZjbGllbnQtPmRldiwgJnBzX2JyaWRn ZS0+ZndfZmlsZSwKPiA+ICsJCQkJICAgICAgUFNfRldfTkFNRSwgc3RybGVuKFBTX0ZXX05BTUUp KTsKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gdXBkYXRl IGZpbGUgbmFtZTogJWRcbiIsIHJldCk7Cj4gPiArCQlnb3RvIGV4aXQ7Cj4gPiArCX0KPiA+ICsK PiA+ICsJcHNfYnJpZGdlLT5wYWdlWzBdID0gY2xpZW50Owo+ID4gKwo+ID4gKwkvKiBwczg2NDAg dXNlcyBtdWx0aXBsZSBhZGRyZXNzZXMsIHVzZSBkdW1teSBkZXZpY2VzIGZvciB0aGVtCj4gPiAr CSAgKiBwYWdlWzBdOiBmb3IgRFAgY29udHJvbAo+ID4gKwkgICogcGFnZVsxXTogZm9yIFZJREVP IEJyaWRnZQo+ID4gKwkgICogcGFnZVsyXTogZm9yIGNvbnRyb2wgdG9wCj4gPiArCSAgKiBwYWdl WzNdOiBmb3IgRFNJIExpbmsgQ29udHJvbDEKPiA+ICsJICAqIHBhZ2VbNF06IGZvciBNSVBJIFBo eQo+ID4gKwkgICogcGFnZVs1XTogZm9yIFZQTEwKPiA+ICsJICAqIHBhZ2VbNl06IGZvciBEU0kg TGluayBDb250cm9sMgo+ID4gKwkgICogcGFnZVs3XTogZm9yIHNwaSByb20gbWFwcGluZwo+ID4g KwkqLwo+ID4gKwlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKSB7Cj4gPiArCQlwc19icmlkZ2UtPnBh Z2VbaV0gPSBpMmNfbmV3X2R1bW15KGNsaWVudC0+YWRhcHRlciwKPiA+ICsJCQkJCQkgICBjbGll bnQtPmFkZHIgKyBpKTsKPiA+ICsJCWlmICghcHNfYnJpZGdlLT5wYWdlW2ldKSB7Cj4gPiArCQkJ ZGV2X2VycihkZXYsICJmYWlsZWQgaTJjIGR1bW15IGRldmljZSwgYWRkcmVzcyUwMnhcbiIsCj4g PiArCQkJCWNsaWVudC0+YWRkciArIGkpOwo+ID4gKwkJCXJldCA9IC1FQlVTWTsKPiA+ICsJCQln b3RvIGV4aXRfZHVtbXk7Cj4gPiArCQl9Cj4gPiArCX0KPiA+ICsJaTJjX3NldF9jbGllbnRkYXRh KGNsaWVudCwgcHNfYnJpZGdlKTsKPiA+ICsKPiA+ICsJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3Vw KCZjbGllbnQtPmRldi5rb2JqLCAmcHM4NjQwX2F0dHJfZ3JvdXApOwo+ID4gKwlpZiAocmV0KSB7 Cj4gPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZW50cmllczogJWRc biIsIHJldCk7Cj4gPiArCQlnb3RvIGV4aXRfZHVtbXk7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0 ID0gZGV2bV9hZGRfYWN0aW9uKGRldiwgcHM4NjQwX3JlbW92ZV9zeXNmc19ncm91cCwgcHNfYnJp ZGdlKTsKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJcHM4NjQwX3JlbW92ZV9zeXNmc19ncm91cChw c19icmlkZ2UpOwo+ID4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWRkIHN5c2ZzIGNsZWFu dXAgYWN0aW9uOiAlZFxuIiwgcmV0KTsKPiA+ICsJCWdvdG8gZXhpdF9kdW1teTsKPiA+ICsJfQo+ ID4gKwlyZXR1cm4gMDsKPiA+ICsKPiA+ICtleGl0X2R1bW15Ogo+ID4gKwlmb3IgKGkgPSAxOyBp IDwgODsgaSsrKQo+ID4gKwkJaWYgKHBzX2JyaWRnZS0+cGFnZVtpXSkKPiA+ICsJCQlpMmNfdW5y ZWdpc3Rlcl9kZXZpY2UocHNfYnJpZGdlLT5wYWdlW2ldKTsKPiA+ICsKPiA+ICtleGl0Ogo+ID4g KwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHBzODY0MF9yZW1vdmUo c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKPiA+ICt7Cj4gPiArCXN0cnVjdCBwczg2NDAgKnBz X2JyaWRnZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwo+ID4gKwlpbnQgaTsKPiA+ICsK PiA+ICsJZm9yIChpID0gMTsgaSA8IDg7IGkrKykKPiA+ICsJCWlmIChwc19icmlkZ2UtPnBhZ2Vb aV0pCj4gPiArCQkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKHBzX2JyaWRnZS0+cGFnZVtpXSk7Cj4g PiArCj4gPiArCWRybV9icmlkZ2VfcmVtb3ZlKCZwc19icmlkZ2UtPmJyaWRnZSk7Cj4gPiArCj4g PiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19k ZXZpY2VfaWQgcHM4NjQwX2kyY190YWJsZVtdID0gewo+ID4gKwl7InBhcmFkZSxwczg2NDAiLCAw fSwKPiA+ICsJe30sCj4gPiArfTsKPiA+ICtNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgcHM4NjQw X2kyY190YWJsZSk7Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQg cHM4NjQwX21hdGNoW10gPSB7Cj4gPiArCXsgLmNvbXBhdGlibGUgPSAicGFyYWRlLHBzODY0MCIg fSwKPiA+ICsJe30sCj4gPiArfTsKPiA+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBwczg2NDBf bWF0Y2gpOwo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBwczg2NDBfZHJpdmVy ID0gewo+ID4gKwkuaWRfdGFibGUgPSBwczg2NDBfaTJjX3RhYmxlLAo+ID4gKwkucHJvYmUgPSBw czg2NDBfcHJvYmUsCj4gPiArCS5yZW1vdmUgPSBwczg2NDBfcmVtb3ZlLAo+ID4gKwkuZHJpdmVy ID0gewo+ID4gKwkJLm5hbWUgPSAicGFyYWRlLHBzODY0MCIsCj4gPiArCQkub2ZfbWF0Y2hfdGFi bGUgPSBwczg2NDBfbWF0Y2gsCj4gPiArCX0sCj4gPiArfTsKPiA+ICttb2R1bGVfaTJjX2RyaXZl cihwczg2NDBfZHJpdmVyKTsKPiA+ICsKPiA+ICtNT0RVTEVfQVVUSE9SKCJKaXRhbyBTaGkgPGpp dGFvLnNoaUBtZWRpYXRlay5jb20+Iik7Cj4gPiArTU9EVUxFX0FVVEhPUigiQ0sgSHUgPGNrLmh1 QG1lZGlhdGVrLmNvbT4iKTsKPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlBBUkFERSBwczg2NDAg RFNJLWVEUCBjb252ZXJ0ZXIgZHJpdmVyIik7Cj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIp Owo+ID4KPiAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=