From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonas Lahtinen Subject: Re: [RFC 17/29] gvt: Xen hypervisor GVT-g MPT module Date: Thu, 28 Jan 2016 13:33:33 +0200 Message-ID: <1453980813.5004.18.camel@linux.intel.com> References: <1453976511-27322-1-git-send-email-zhi.a.wang@intel.com> <1453976511-27322-18-git-send-email-zhi.a.wang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id BBAAD6E397 for ; Thu, 28 Jan 2016 03:32:17 -0800 (PST) In-Reply-To: <1453976511-27322-18-git-send-email-zhi.a.wang@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Zhi Wang , intel-gfx@lists.freedesktop.org, igvt-g@lists.01.org Cc: daniel.vetter@ffwll.ch, david.j.cowperthwaite@intel.com List-Id: intel-gfx@lists.freedesktop.org SGksCgpTZWUgdGhlIGZpbGUgTUFJTlRBSU5FUlMgYW5kIGFkZCBDYzogbGluZXMgYWNjb3JkaW5n IHRvICJYRU4gSFlQRVJWSVNPUgpJTlRFUkZBQ0UiLiBBbHNvIEkgdGhpbmsgaXQnbGwgYmUgdXNl ZnVsIHRvIHNwbGl0IHRoZSBpOTE1IGNoYW5nZXMgdG8gYQpzZXBhcmF0ZSBwYXRjaCBuZXh0IGlu dCBoZSBzZXJpZXMgKGFzIHRoZSByZXZpZXdlciB3aWxsIGJlIGRpZmZlcmVudCkuCgpXZSB3aWxs IGhhdmUgdG8gd2FpdCBmb3IgWGVuIG1haW50YWluZXJzIHRvIHRha2UgYSBwb3NpdGlvbiBvbiB0 aGlzLiBJcwp0aGVyZSBLVk0gY291bnRlcnBhcnRzIGZvciB0aGlzIHN0dWZmIGluY29taW5nPwoK T24gdG8sIDIwMTYtMDEtMjggYXQgMTg6MjEgKzA4MDAsIFpoaSBXYW5nIHdyb3RlOgo+IFRoaXMg aXMgdGhlIHhlbiBoeXBlcnZpc29yIE1QVCBtb2R1bGUgd2hpY2ggbGV0IEdWVC1nIGJlIGFibGUg dG8gcnVuCj4gdW5kZXIKPiBYZW4gaHlwZXJ2aXNvci4KPiAKCkNjOsKgeGVuLWRldmVsQGxpc3Rz LnhlbnByb2plY3Qub3JnCi4uLmFuZCBzbyBvbi4uLgoKUmVnYXJkcywgSm9vbmFzCgo+IFNpZ25l ZC1vZmYtYnk6IFpoaSBXYW5nIDx6aGkuYS53YW5nQGludGVsLmNvbT4KPiAtLS0KPiDCoGFyY2gv eDg2L2luY2x1ZGUvYXNtL3hlbi9oeXBlcmNhbGwuaCB8wqDCoMKgwqA3ICsKPiDCoGFyY2gveDg2 L2luY2x1ZGUvYXNtL3hlbi9pbnRlcmZhY2UuaCB8wqDCoMKgwqAxICsKPiDCoGFyY2gveDg2L3hl bi9tbXUuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoDgzICsr Kwo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5jwqDCoMKgwqDCoMKgwqB8wqDCoMKg MTAgKwo+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5owqDCoMKgwqDCoMKgwqB8wqDC oMKgMTQgKwo+IMKgZHJpdmVycy94ZW4vS2NvbmZpZ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHzCoMKgwqDCoDUgKwo+IMKgZHJpdmVycy94ZW4vTWFrZWZpbGXCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoMKgNiArCj4gwqBkcml2ZXJzL3hlbi94ZW5n dC5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfCAxMTUzCj4gKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwo+IMKgaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2h2bS9o dm1fb3AuaMKgwqDCoHzCoMKgMTc3ICsrKysrLQo+IMKgaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2h2 bS9pb3JlcS5owqDCoMKgwqB8wqDCoDEzMiArKysrCj4gwqBpbmNsdWRlL3hlbi9pbnRlcmZhY2Uv bWVtb3J5LmjCoMKgwqDCoMKgwqDCoHzCoMKgwqAyOCArCj4gwqBpbmNsdWRlL3hlbi9pbnRlcmZh Y2UveGVuLmjCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMTA2ICsrKysKPiDCoGluY2x1ZGUveGVu L3hlbi1vcHMuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoMKgNSArCj4g wqAxMyBmaWxlcyBjaGFuZ2VkLCAxNzI2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiDC oGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3hlbi94ZW5ndC5jCj4gwqBjcmVhdGUgbW9kZSAx MDA2NDQgaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2h2bS9pb3JlcS5oCj4gCj4gZGlmZiAtLWdpdCBh L2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9oeXBlcmNhbGwuaAo+IGIvYXJjaC94ODYvaW5jbHVk ZS9hc20veGVuL2h5cGVyY2FsbC5oCj4gaW5kZXggM2JjZGNjOC4uYWVhOTdlMyAxMDA2NDQKPiAt LS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaHlwZXJjYWxsLmgKPiArKysgYi9hcmNoL3g4 Ni9pbmNsdWRlL2FzbS94ZW4vaHlwZXJjYWxsLmgKPiBAQCAtNDU5LDYgKzQ1OSwxMyBAQCBIWVBF UlZJU09SX2h2bV9vcChpbnQgb3AsIHZvaWQgKmFyZykKPiDCoH0KPiDCoAo+IMKgc3RhdGljIGlu bGluZSBpbnQKPiArSFlQRVJWSVNPUl9kb21jdGwoCj4gK8KgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg eGVuX2RvbWN0bCAqYXJnKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgwqByZXR1cm4gX2h5cGVyY2Fs bDEoaW50LCBkb21jdGwsIGFyZyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50Cj4gwqBI WVBFUlZJU09SX3RtZW1fb3AoCj4gwqAJc3RydWN0IHRtZW1fb3AgKm9wKQo+IMKgewo+IGRpZmYg LS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaW50ZXJmYWNlLmgKPiBiL2FyY2gveDg2 L2luY2x1ZGUvYXNtL3hlbi9pbnRlcmZhY2UuaAo+IGluZGV4IDZmZjQ5ODYuLmE0ZWUzZjQgMTAw NjQ0Cj4gLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2ludGVyZmFjZS5oCj4gKysrIGIv YXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2ludGVyZmFjZS5oCj4gQEAgLTg5LDYgKzg5LDcgQEAg dHlwZWRlZiBsb25nIHhlbl9sb25nX3Q7Cj4gwqAvKiBHdWVzdCBoYW5kbGVzIGZvciBwcmltaXRp dmUgQyB0eXBlcy4gKi8KPiDCoF9fREVGSU5FX0dVRVNUX0hBTkRMRSh1Y2hhciwgdW5zaWduZWQg Y2hhcik7Cj4gwqBfX0RFRklORV9HVUVTVF9IQU5ETEUodWludCzCoMKgdW5zaWduZWQgaW50KTsK PiArX19ERUZJTkVfR1VFU1RfSEFORExFKHVsb25nLMKgwqB1bnNpZ25lZCBsb25nKTsKPiDCoERF RklORV9HVUVTVF9IQU5ETEUoY2hhcik7Cj4gwqBERUZJTkVfR1VFU1RfSEFORExFKGludCk7Cj4g wqBERUZJTkVfR1VFU1RfSEFORExFKHZvaWQpOwo+IGRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4v bW11LmMgYi9hcmNoL3g4Ni94ZW4vbW11LmMKPiBpbmRleCBjOTEzY2E0Li5kYTk1ZDQ1IDEwMDY0 NAo+IC0tLSBhL2FyY2gveDg2L3hlbi9tbXUuYwo+ICsrKyBiL2FyY2gveDg2L3hlbi9tbXUuYwo+ IEBAIC0yOTMxLDMgKzI5MzEsODYgQEAgaW50IHhlbl91bm1hcF9kb21haW5fZ2ZuX3JhbmdlKHN0 cnVjdAo+IHZtX2FyZWFfc3RydWN0ICp2bWEsCj4gwqAjZW5kaWYKPiDCoH0KPiDCoEVYUE9SVF9T WU1CT0xfR1BMKHhlbl91bm1hcF9kb21haW5fZ2ZuX3JhbmdlKTsKPiArCj4gKy8qIE5vdGU6IGhl cmUgJ21mbicgaXMgYWN0dWFsbHkgZ2ZuISEhICovCj4gK3N0cnVjdCB2bV9zdHJ1Y3QgKiB4ZW5f cmVtYXBfZG9tYWluX21mbl9yYW5nZV9pbl9rZXJuZWwodW5zaWduZWQKPiBsb25nIG1mbiwKPiAr CQlpbnQgbnIsIHVuc2lnbmVkIGRvbWlkKQo+ICt7Cj4gKwlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVh Owo+ICsJc3RydWN0IHJlbWFwX2RhdGEgcm1kOwo+ICsJc3RydWN0IG1tdV91cGRhdGUgbW11X3Vw ZGF0ZVtSRU1BUF9CQVRDSF9TSVpFXTsKPiArCWludCBiYXRjaDsKPiArCXVuc2lnbmVkIGxvbmcg cmFuZ2UsIGFkZHI7Cj4gKwlwZ3Byb3RfdCBwcm90Owo+ICsJaW50IGVycjsKPiArCj4gKwlXQVJO X09OKGluX2ludGVycnVwdCgpIHx8IGlycXNfZGlzYWJsZWQoKSk7Cj4gKwo+ICsJYXJlYSA9IGFs bG9jX3ZtX2FyZWEobnIgPDwgUEFHRV9TSElGVCwgTlVMTCk7Cj4gKwlpZiAoIWFyZWEpCj4gKwkJ cmV0dXJuIE5VTEw7Cj4gKwo+ICsJYWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtPmFkZHI7Cj4g Kwo+ICsJcHJvdCA9IF9fcGdwcm90KHBncHJvdF92YWwoUEFHRV9LRVJORUwpKTsKPiArCj4gKwly bWQubWZuID0gJm1mbjsKPiArCXJtZC5wcm90ID0gcHJvdDsKPiArCj4gKwl3aGlsZSAobnIpIHsK PiArCQliYXRjaCA9IG1pbihSRU1BUF9CQVRDSF9TSVpFLCBucik7Cj4gKwkJcmFuZ2UgPSAodW5z aWduZWQgbG9uZyliYXRjaCA8PCBQQUdFX1NISUZUOwo+ICsKPiArCQlybWQubW11X3VwZGF0ZSA9 IG1tdV91cGRhdGU7Cj4gKwkJZXJyID0gYXBwbHlfdG9fcGFnZV9yYW5nZSgmaW5pdF9tbSwgYWRk ciwgcmFuZ2UsCj4gKwkJCQlyZW1hcF9hcmVhX21mbl9wdGVfZm4sICZybWQpOwo+ICsJCWlmIChl cnIgfHwgSFlQRVJWSVNPUl9tbXVfdXBkYXRlKG1tdV91cGRhdGUsIGJhdGNoLAo+IE5VTEwsIGRv bWlkKSA8IDApCj4gKwkJCWdvdG8gZXJyOwo+ICsKPiArCQluciAtPSBiYXRjaDsKPiArCQlhZGRy ICs9IHJhbmdlOwo+ICsJfQo+ICsKPiArCXhlbl9mbHVzaF90bGJfYWxsKCk7Cj4gKwlyZXR1cm4g YXJlYTsKPiArZXJyOgo+ICsJZnJlZV92bV9hcmVhKGFyZWEpOwo+ICsJeGVuX2ZsdXNoX3RsYl9h bGwoKTsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woeGVuX3JlbWFwX2Rv bWFpbl9tZm5fcmFuZ2VfaW5fa2VybmVsKTsKPiArCj4gK3ZvaWQgeGVuX3VubWFwX2RvbWFpbl9t Zm5fcmFuZ2VfaW5fa2VybmVsKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsCj4gaW50IG5yLAo+ICsJ CXVuc2lnbmVkIGRvbWlkKQo+ICt7Cj4gKwlzdHJ1Y3QgcmVtYXBfZGF0YSBybWQ7Cj4gKwlzdHJ1 Y3QgbW11X3VwZGF0ZSBtbXVfdXBkYXRlW1JFTUFQX0JBVENIX1NJWkVdOwo+ICsJaW50IGJhdGNo Owo+ICsJdW5zaWduZWQgbG9uZyByYW5nZSwgYWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtPmFk ZHI7Cj4gKyNkZWZpbmUgSU5WQUxJRF9NRk4gKH4wVUwpCj4gKwl1bnNpZ25lZCBsb25nIGludmFs aWRfbWZuID0gSU5WQUxJRF9NRk47Cj4gKwlpbnQgZXJyOwo+ICsKPiArCVdBUk5fT04oaW5faW50 ZXJydXB0KCkgfHwgaXJxc19kaXNhYmxlZCgpKTsKPiArCj4gKwlybWQubWZuID0gJmludmFsaWRf bWZuOwo+ICsJcm1kLnByb3QgPSBQQUdFX05PTkU7Cj4gKwo+ICsJd2hpbGUgKG5yKSB7Cj4gKwkJ YmF0Y2ggPSBtaW4oUkVNQVBfQkFUQ0hfU0laRSwgbnIpOwo+ICsJCXJhbmdlID0gKHVuc2lnbmVk IGxvbmcpYmF0Y2ggPDwgUEFHRV9TSElGVDsKPiArCj4gKwkJcm1kLm1tdV91cGRhdGUgPSBtbXVf dXBkYXRlOwo+ICsJCWVyciA9IGFwcGx5X3RvX3BhZ2VfcmFuZ2UoJmluaXRfbW0sIGFkZHIsIHJh bmdlLAo+ICsJCQkJcmVtYXBfYXJlYV9tZm5fcHRlX2ZuLCAmcm1kKTsKPiArCQlCVUdfT04oZXJy KTsKPiArCQlCVUdfT04oSFlQRVJWSVNPUl9tbXVfdXBkYXRlKG1tdV91cGRhdGUsIGJhdGNoLAo+ IE5VTEwsIGRvbWlkKSA8IDApOwo+ICsKPiArCQluciAtPSBiYXRjaDsKPiArCQlhZGRyICs9IHJh bmdlOwo+ICsJfQo+ICsKPiArCWZyZWVfdm1fYXJlYShhcmVhKTsKPiArCXhlbl9mbHVzaF90bGJf YWxsKCk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTF9HUEwoeGVuX3VubWFwX2RvbWFpbl9tZm5fcmFu Z2VfaW5fa2VybmVsKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2 dC5jCj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmMKPiBpbmRleCBhNzE4NzNjLi4y OGE1MWQ5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuYwo+IEBAIC0yMSwxMiArMjEsMTQgQEAK PiDCoCAqIFNPRlRXQVJFLgo+IMKgICovCj4gwqAKPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ Cj4gwqAjaW5jbHVkZSA8eGVuL3hlbi5oPgo+IMKgI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4K PiDCoAo+IMKgI2luY2x1ZGUgImd2dC5oIgo+IMKgCj4gwqBzdHJ1Y3QgZ3Z0X2hvc3QgZ3Z0X2hv c3Q7Cj4gK0VYUE9SVF9TWU1CT0woZ3Z0X2hvc3QpOwo+IMKgCj4gwqBleHRlcm4gc3RydWN0IGd2 dF9rZXJuZWxfZG0geGVuZ3Rfa2RtOwo+IMKgZXh0ZXJuIHN0cnVjdCBndnRfa2VybmVsX2RtIGt2 bWd0X2tkbTsKPiBAQCAtMzYsNiArMzgsMTMgQEAgc3RhdGljIHN0cnVjdCBndnRfaW9fZW11bGF0 aW9uX29wcwo+IGRlZmF1bHRfaW9fZW11bGF0aW9uX29wcyA9IHsKPiDCoAkuZW11bGF0ZV9tbWlv X3dyaXRlID0gZ3Z0X2VtdWxhdGVfbW1pb193cml0ZSwKPiDCoH07Cj4gwqAKPiArdW5zaWduZWQg aW50IHBhX3RvX21taW9fb2Zmc2V0KHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVpbnQ2NF90IHBhKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3Qg Z3Z0X21wdF9vcHMgZGVmYXVsdF9leHBvcnRfbXB0X29wcyA9IHsKPiArCS5wYV90b19tbWlvX29m ZnNldCA9IHBhX3RvX21taW9fb2Zmc2V0LAo+ICt9Owo+ICsKPiDCoHN0YXRpYyBjb25zdCBjaGFy ICpzdXBwb3J0ZWRfaHlwZXJ2aXNvcnNbXSA9IHsKPiDCoAlbR1ZUX0hZUEVSVklTT1JfVFlQRV9Y RU5dID0gIlhlbiBIeXBlcnZpc29yIiwKPiDCoAlbR1ZUX0hZUEVSVklTT1JfVFlQRV9LVk1dID0g IktWTSIsCj4gQEAgLTc4LDYgKzg3LDcgQEAgc3RhdGljIGJvb2wgZ3Z0X2luaXRfaG9zdCh2b2lk KQo+IMKgCQkJc3VwcG9ydGVkX2h5cGVydmlzb3JzW2hvc3QtCj4gPmh5cGVydmlzb3JfdHlwZV0p Owo+IMKgCj4gwqAJaG9zdC0+ZW11bGF0ZV9vcHMgPSAmZGVmYXVsdF9pb19lbXVsYXRpb25fb3Bz Owo+ICsJaG9zdC0+bXB0X29wcyA9ICZkZWZhdWx0X2V4cG9ydF9tcHRfb3BzOwo+IMKgCWlkcl9p bml0KCZob3N0LT5kZXZpY2VfaWRyKTsKPiDCoAltdXRleF9pbml0KCZob3N0LT5kZXZpY2VfaWRy X2xvY2spOwo+IMKgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQu aAo+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5oCj4gaW5kZXggZWI1ZmQ0Ny4uODNm OTBhMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgKPiBAQCAtNTgsNiArNTgsMTAgQEAgc3Ry dWN0IGd2dF9pb19lbXVsYXRpb25fb3BzIHsKPiDCoAlib29sICgqZW11bGF0ZV9jZmdfd3JpdGUp KHN0cnVjdCB2Z3RfZGV2aWNlICosIHVuc2lnbmVkIGludCwKPiB2b2lkICosIGludCk7Cj4gwqB9 Owo+IMKgCj4gK3N0cnVjdCBndnRfbXB0X29wcyB7Cj4gKwl1bnNpZ25lZCBpbnQgKCpwYV90b19t bWlvX29mZnNldCkoc3RydWN0IHZndF9kZXZpY2UgKiwgdTY0KTsKPiArfTsKPiArCj4gwqBzdHJ1 Y3QgZ3Z0X2hvc3Qgewo+IMKgCWJvb2wgaW5pdGlhbGl6ZWQ7Cj4gwqAJaW50IGh5cGVydmlzb3Jf dHlwZTsKPiBAQCAtNjUsNiArNjksNyBAQCBzdHJ1Y3QgZ3Z0X2hvc3Qgewo+IMKgCXN0cnVjdCBp ZHIgZGV2aWNlX2lkcjsKPiDCoAlzdHJ1Y3QgZ3Z0X2tlcm5lbF9kbSAqa2RtOwo+IMKgCXN0cnVj dCBndnRfaW9fZW11bGF0aW9uX29wcyAqZW11bGF0ZV9vcHM7Cj4gKwlzdHJ1Y3QgZ3Z0X21wdF9v cHMgKm1wdF9vcHM7Cj4gwqB9Owo+IMKgCj4gwqBleHRlcm4gc3RydWN0IGd2dF9ob3N0IGd2dF9o b3N0Owo+IEBAIC0xMjMsNiArMTI4LDkgQEAgc3RydWN0IHZndF9kZXZpY2Ugewo+IMKgCXN0cnVj dCBndnRfdmlydHVhbF9kZXZpY2Vfc3RhdGUgc3RhdGU7Cj4gwqAJc3RydWN0IGd2dF9zdGF0aXN0 aWNzIHN0YXQ7Cj4gwqAJc3RydWN0IGd2dF92Z3R0X2luZm8gZ3R0Owo+ICsJdm9pZCAqaHlwZXJ2 aXNvcl9kYXRhOwo+ICsJdW5zaWduZWQgbG9uZyBsb3dfbWVtX21heF9ncGZuOwo+ICsJYXRvbWlj X3QgY3Jhc2hpbmc7Cj4gwqB9Owo+IMKgCj4gwqBzdHJ1Y3QgZ3Z0X2dtX2FsbG9jYXRvciB7Cj4g QEAgLTQyMyw2ICs0MzEsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgZ3Z0X3BjaV9tbWlvX2lzX2Vu YWJsZWQoc3RydWN0Cj4gdmd0X2RldmljZSAqdmd0KQo+IMKgCQlfUkVHQklUX0NGR19DT01NQU5E X01FTU9SWTsKPiDCoH0KPiDCoAo+ICtzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGd2dF9tbWlvX2Jh cl9iYXNlKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqDCoGNo YXIgKmNmZ19zcGFjZSA9ICZ2Z3QtPnN0YXRlLmNmZy5zcGFjZVswXTsKPiArwqDCoMKgwqDCoMKg wqDCoHJldHVybiAqKHU2NCAqKShjZmdfc3BhY2UgKyBHVlRfUkVHX0NGR19TUEFDRV9CQVIwKTsK PiArfQo+ICsKPiDCoCNkZWZpbmUgX192cmVnKHZndCwgb2ZmKSAoKih1MzIqKSh2Z3QtPnN0YXRl Lm1taW8udnJlZyArIG9mZikpCj4gwqAjZGVmaW5lIF9fdnJlZzgodmd0LCBvZmYpICgqKHU4Kiko dmd0LT5zdGF0ZS5tbWlvLnZyZWcgKyBvZmYpKQo+IMKgI2RlZmluZSBfX3ZyZWcxNih2Z3QsIG9m ZikgKCoodTE2Kikodmd0LT5zdGF0ZS5tbWlvLnZyZWcgKyBvZmYpKQo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3hlbi9LY29uZmlnIGIvZHJpdmVycy94ZW4vS2NvbmZpZwo+IGluZGV4IDczNzA4YWMu LjllZTIwMzMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy94ZW4vS2NvbmZpZwo+ICsrKyBiL2RyaXZl cnMveGVuL0tjb25maWcKPiBAQCAtMjkxLDQgKzI5MSw5IEBAIGNvbmZpZyBYRU5fU1lNUwo+IMKg Y29uZmlnIFhFTl9IQVZFX1ZQTVUKPiDCoMKgwqDCoMKgwqDCoMKgYm9vbAo+IMKgCj4gK2NvbmZp ZyBYRU5HVAo+ICvCoMKgwqDCoMKgwqDCoMKgdHJpc3RhdGUgIlhlbiBEb20wIHN1cHBvcnQgZm9y IGk5MTUgZ3Z0IGRldmljZSBtb2RlbCIKPiArwqDCoMKgwqDCoMKgwqDCoGRlcGVuZHMgb24gWEVO X0RPTTAgJiYgSTkxNV9HVlQKPiArwqDCoMKgwqDCoMKgwqDCoGRlZmF1bHQgbQo+ICsKPiDCoGVu ZG1lbnUKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vTWFrZWZpbGUgYi9kcml2ZXJzL3hlbi9N YWtlZmlsZQo+IGluZGV4IDliN2EzNWMuLmZmNzVjMzYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy94 ZW4vTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL3hlbi9NYWtlZmlsZQo+IEBAIC05LDYgKzksMTAg QEAgQ0ZMQUdTX2ZlYXR1cmVzLm8JCQk6PQo+ICQobm9zdGFja3ApCj4gwqAKPiDCoENGTEFHU19l ZmkubwkJCQkrPSAtZnNob3J0LXdjaGFyCj4gwqAKPiArCj4gK0k5MTXCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA6PSBkcml2ZXJzL2dwdS9kcm0vaTkxNQo+ICtDRkxB R1NfeGVuZ3Qub8KgwqDCoMKgwqDCoMKgwqDCoMKgKz0gLVdhbGwgLVdlcnJvciAtSSQoSTkxNSkg LUkkKEk5MTUpL2d2dAo+ICsKPiDCoGRvbTAtJChDT05GSUdfUENJKSArPSBwY2kubwo+IMKgZG9t MC0kKENPTkZJR19VU0JfU1VQUE9SVCkgKz0gZGJncC5vCj4gwqBkb20wLSQoQ09ORklHX1hFTl9B Q1BJKSArPSBhY3BpLm8gJCh4ZW4tcGFkLXkpCj4gQEAgLTM2LDYgKzQwLDggQEAgb2JqLSQoQ09O RklHX1hFTl9BQ1BJX1BST0NFU1NPUikJKz0geGVuLQo+IGFjcGktcHJvY2Vzc29yLm8KPiDCoG9i ai0kKENPTkZJR19YRU5fRUZJKQkJCSs9IGVmaS5vCj4gwqBvYmotJChDT05GSUdfWEVOX1NDU0lf QkFDS0VORCkJCSs9IHhlbi1zY3NpYmFjay5vCj4gwqBvYmotJChDT05GSUdfWEVOX0FVVE9fWExB VEUpCQkrPSB4bGF0ZV9tbXUubwo+ICtvYmotJChDT05GSUdfWEVOR1QpwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKz0geGVuZ3Qubwo+ICsKPiDCoHhlbi1ldnRjaG4t eQkJCQk6PSBldnRjaG4ubwo+IMKgeGVuLWdudGRldi15CQkJCTo9IGdudGRldi5vCj4gwqB4ZW4t Z250YWxsb2MteQkJCQk6PSBnbnRhbGxvYy5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL3hl bmd0LmMgYi9kcml2ZXJzL3hlbi94ZW5ndC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwLi42YzYwMGFkYwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3hlbi94 ZW5ndC5jCj4gQEAgLTAsMCArMSwxMTUzIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodChjKSAyMDEx LTIwMTYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4gKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKPiBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIFZlcnNpb24gMiBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKPiBhcwo+ICsgKiBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gYnV0Cj4gKyAq IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiBTZWUgdGhlIEdOVQo+ICsgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4gKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIElu Yy4sIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtCj4gMTMw MSBVU0EuCj4gKyAqLwo+ICsKPiArLyoKPiArICogTk9URToKPiArICogVGhpcyBmaWxlIGNvbnRh aW5zIGh5cGVydmlzb3Igc3BlY2lmaWMgaW50ZXJhY3Rpb25zIHRvCj4gKyAqIGltcGxlbWVudCB0 aGUgY29uY2VwdCBvZiBtZWRpYXRlZCBwYXNzLXRocm91Z2ggZnJhbWV3b3JrLgo+ICsgKiBXaGF0 IHRoaXMgZmlsZSBwcm92aWRlcyBpcyBhY3R1YWxseSBhIGdlbmVyYWwgYWJzdHJhY3Rpb24KPiAr ICogb2YgaW4ta2VybmVsIGRldmljZSBtb2RlbCwgd2hpY2ggaXMgbm90IHZndCBzcGVjaWZpYy4K PiArICoKPiArICogTm93IHRlbXBvcmFyaWx5IGluIHZndCBjb2RlLiBsb25nLXRlcm0gdGhpcyBz aG91bGQgYmUKPiArICogaW4gaHlwZXJ2aXNvciAoeGVuL2t2bSkgc3BlY2lmaWMgZGlyZWN0b3J5 Cj4gKyAqLwo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9t bS5oPgo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2t0aHJl YWQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2ZyZWV6 ZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NjaGVk Lmg+Cj4gKwo+ICsjaW5jbHVkZSA8YXNtL3hlbi9oeXBlcmNhbGwuaD4KPiArI2luY2x1ZGUgPGFz bS94ZW4vcGFnZS5oPgo+ICsjaW5jbHVkZSA8eGVuL3hlbi1vcHMuaD4KPiArI2luY2x1ZGUgPHhl bi9ldmVudHMuaD4KPiArI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvaHZtL3BhcmFtcy5oPgo+ICsj aW5jbHVkZSA8eGVuL2ludGVyZmFjZS9odm0vaHZtX29wLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vaW50 ZXJmYWNlL2h2bS9pb3JlcS5oPgo+ICsjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9tZW1vcnkuaD4K PiArI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvcGxhdGZvcm0uaD4KPiArI2luY2x1ZGUgPHhlbi9p bnRlcmZhY2UvdmNwdS5oPgo+ICsKPiArI2luY2x1ZGUgImd2dC5oIgo+ICsKPiArTU9EVUxFX0FV VEhPUigiSW50ZWwgQ29ycG9yYXRpb24iKTsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJYZW5HVCBt ZWRpYXRlZCBwYXNzdGhyb3VnaCBkcml2ZXIiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+ ICtNT0RVTEVfVkVSU0lPTigiMC4xIik7Cj4gKwo+ICsjZGVmaW5lIE1BWF9IVk1fVkNQVVNfU1VQ UE9SVEVEIDEyOAo+ICtzdHJ1Y3QgZ3Z0X2h2bV9pbmZvIHsKPiArCS8qIGlvcGFnZV92bWEtPmFk ZHIgaXMganVzdCBpb3BhZ2UuIFdlIG5lZWQgaW9wYWdlX3ZtYSBvbiBWTQo+IGRlc3Ryb3kgKi8K PiArCXNoYXJlZF9pb3BhZ2VfdCAqaW9wYWdlOwo+ICsJc3RydWN0IHZtX3N0cnVjdCAqaW9wYWdl X3ZtYTsKPiArCWludCAqZXZ0Y2huX2lycTsgLyogdGhlIGV2ZW50IGNoYW5ubGUgaXJxcyB0byBo YW5kbGUgSFZNIGlvCj4gcmVxdWVzdAo+ICsJCQkJaW5kZXggaXMgdmNwdSBpZCAqLwo+ICsKPiAr CURFQ0xBUkVfQklUTUFQKGlvcmVxX3BlbmRpbmcsIE1BWF9IVk1fVkNQVVNfU1VQUE9SVEVEKTsK PiArCXdhaXRfcXVldWVfaGVhZF90IGlvX2V2ZW50X3dxOwo+ICsJc3RydWN0IHRhc2tfc3RydWN0 ICplbXVsYXRpb25fdGhyZWFkOwo+ICsKPiArCWludCBucl92Y3B1Owo+ICsKPiArCWlvc2Vydmlk X3QgaW9zcnZfaWQ7wqDCoMKgwqAvKiBpby1yZXF1ZXN0IHNlcnZlciBpZCAqLwo+ICsKPiArI2Rl ZmluZSBWTUVNXzFNQgkJKDFVTEwgPDwgMjApCS8qIHRoZSBzaXplIG9mCj4gdGhlIGZpcnN0IDFN QiAqLwo+ICsjZGVmaW5lIFZNRU1fQlVDS19TSElGVAkJMjAKPiArI2RlZmluZSBWTUVNX0JVQ0tf U0laRQkJKDFVTEwgPDwgVk1FTV9CVUNLX1NISUZUKQo+ICsjZGVmaW5lIFZNRU1fQlVDS19NQVNL CQkofihWTUVNX0JVQ0tfU0laRSAtIDEpKQo+ICsJdWludDY0X3Qgdm1lbV9zejsKPiArCS8qIGZv ciB0aGUgMXN0IDFNQiBtZW1vcnkgb2YgSFZNOiBlYWNoIHZtX3N0cnVjdCBtZWFucyBvbmUKPiA0 Sy1wYWdlICovCj4gKwlzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1lbV92bWFfbG93XzFtYjsKPiArCS8q IGZvciA+MU1CIG1lbW9yeSBvZiBIVk06IGVhY2ggdm1fc3RydWN0IG1lYW5zIDFNQiAqLwo+ICsJ c3RydWN0IHZtX3N0cnVjdCAqKnZtZW1fdm1hOwo+ICsJLyogZm9yID4xTUIgbWVtb3J5IG9mIEhW TTogZWFjaCB2bV9zdHJ1Y3QgbWVhbnMgNEtCICovCj4gKwlzdHJ1Y3Qgdm1fc3RydWN0ICoqdm1l bV92bWFfNGs7Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHhlbl9wYXVzZV9kb21haW4oaW50IHZt X2lkKTsKPiArc3RhdGljIGludCB4ZW5fc2h1dGRvd25fZG9tYWluKGludCB2bV9pZCk7Cj4gK3N0 YXRpYyB2b2lkICp4ZW5fZ3BhX3RvX3ZhKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHVuc2lnbmVk IGxvbmcKPiBncGEpOwo+ICsKPiArI2RlZmluZSBYRU5fQVNTRVJUX1ZNKHgsIHZndCkJCQkJCQo+ IAlcCj4gKwlkbyB7CQkJCQkJCQkKPiBcCj4gKwkJaWYgKCEoeCkpIHsJCQkJCQkKPiBcCj4gKwkJ CXByaW50aygiQXNzZXJ0IGF0ICVzIGxpbmUgJWRcbiIsCQkKPiBcCj4gKwkJCQlfX0ZJTEVfXywg X19MSU5FX18pOwkJCQo+IFwKPiArCQkJaWYgKGF0b21pY19jbXB4Y2hnKCYodmd0KS0+Y3Jhc2hp bmcsIDAsIDEpKQkKPiBcCj4gKwkJCQlicmVhazsJCQkJCj4gCVwKPiArCQkJZ3Z0X2VycigiS2ls bGluZyBWTSVkXG4iLCAodmd0KS0+dm1faWQpOwkKPiBcCj4gKwkJCWlmICgheGVuX3BhdXNlX2Rv bWFpbigodmd0LT52bV9pZCkpKQkJCj4gXAo+ICsJCQkJeGVuX3NodXRkb3duX2RvbWFpbigodmd0 LT52bV9pZCkpOwkKPiBcCj4gKwkJfQkJCQkJCQkKPiBcCj4gKwl9IHdoaWxlICgwKQo+ICsKPiAr LyogVHJhbnNsYXRlIGZyb20gVk0ncyBndWVzdCBwZm4gdG8gbWFjaGluZSBwZm4gKi8KPiArc3Rh dGljIHVuc2lnbmVkIGxvbmcgeGVuX2cybV9wZm4oaW50IHZtX2lkLCB1bnNpZ25lZCBsb25nIGdf cGZuKQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2dldF9tZm5fZnJvbV9wZm4gcGZuX2FyZzsKPiArCWlu dCByYzsKPiArCXVuc2lnbmVkIGxvbmcgcGZuX2xpc3RbMV07Cj4gKwo+ICsJcGZuX2xpc3RbMF0g PSBnX3BmbjsKPiArCj4gKwlzZXRfeGVuX2d1ZXN0X2hhbmRsZShwZm5fYXJnLnBmbl9saXN0LCBw Zm5fbGlzdCk7Cj4gKwlwZm5fYXJnLm5yX3BmbnMgPSAxOwo+ICsJcGZuX2FyZy5kb21pZCA9IHZt X2lkOwo+ICsKPiArCXJjID0gSFlQRVJWSVNPUl9tZW1vcnlfb3AoWEVOTUVNX2dldF9tZm5fZnJv bV9wZm4sCj4gJnBmbl9hcmcpOwo+ICsJaWYocmMgPCAwKXsKPiArCQlwcmludGsoImZhaWxlZCB0 byBnZXQgbWZuIGZvciBncGZuKDB4JWx4KVxuLAo+IGVycm5vPSVkXG4iLCBnX3BmbiwgcmMpOwo+ ICsJCXJldHVybiBJTlZBTElEX01GTjsKPiArCX0KPiArCj4gKwlyZXR1cm4gcGZuX2xpc3RbMF07 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgeGVuX2dldF9tYXhfZ3BmbihpbnQgdm1faWQpCj4gK3sK PiArCWRvbWlkX3QgZG9tX2lkID0gdm1faWQ7Cj4gKwlpbnQgbWF4X2dwZm4gPSBIWVBFUlZJU09S X21lbW9yeV9vcChYRU5NRU1fbWF4aW11bV9ncGZuLAo+ICZkb21faWQpOwo+ICsJQlVHX09OKG1h eF9ncGZuIDwgMCk7Cj4gKwlyZXR1cm4gbWF4X2dwZm47Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg eGVuX3BhdXNlX2RvbWFpbihpbnQgdm1faWQpCj4gK3sKPiArCWludCByYzsKPiArCXN0cnVjdCB4 ZW5fZG9tY3RsIGRvbWN0bDsKPiArCj4gKwlkb21jdGwuZG9tYWluID0gdm1faWQ7Cj4gKwlkb21j dGwuY21kID0gWEVOX0RPTUNUTF9wYXVzZWRvbWFpbjsKPiArCWRvbWN0bC5pbnRlcmZhY2VfdmVy c2lvbiA9IFhFTl9ET01DVExfSU5URVJGQUNFX1ZFUlNJT047Cj4gKwo+ICsJcmMgPSBIWVBFUlZJ U09SX2RvbWN0bCgmZG9tY3RsKTsKPiArCWlmIChyYyAhPSAwKQo+ICsJCXByaW50aygiSFlQRVJW SVNPUl9kb21jdGwgcGF1c2Vkb21haW4gZmFpbCB3aXRoCj4gJWQhXG4iLCByYyk7Cj4gKwo+ICsJ cmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHhlbl9zaHV0ZG93bl9kb21haW4oaW50 IHZtX2lkKQo+ICt7Cj4gKwlpbnQgcmM7Cj4gKwlzdHJ1Y3Qgc2NoZWRfcmVtb3RlX3NodXRkb3du IHI7Cj4gKwo+ICsJci5yZWFzb24gPSBTSFVURE9XTl9jcmFzaDsKPiArCXIuZG9tYWluX2lkID0g dm1faWQ7Cj4gKwlyYyA9IEhZUEVSVklTT1Jfc2NoZWRfb3AoU0NIRURPUF9yZW1vdGVfc2h1dGRv d24sICZyKTsKPiArCWlmIChyYyAhPSAwKQo+ICsJCXByaW50aygiSFlQRVJWSVNPUl9zY2hlZF9v cCBmYWlsZWQ6ICVkXG4iLCByYyk7Cj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgeGVuX2RvbWFpbl9pb21lbV9wZXJtKHVpbnQzMl90IGRvbWFpbl9pZCwgdWludDY0X3QKPiBm aXJzdF9tZm4sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgdWludDY0X3QgbnJfbWZucywgdWludDhfdAo+IGFsbG93X2FjY2Vz cykKPiArewo+ICsJc3RydWN0IHhlbl9kb21jdGwgYXJnOwo+ICsJaW50IHJjOwo+ICsKPiArCWFy Zy5kb21haW4gPSBkb21haW5faWQ7Cj4gKwlhcmcuY21kID0gWEVOX0RPTUNUTF9pb21lbV9wZXJt aXNzaW9uOwo+ICsJYXJnLmludGVyZmFjZV92ZXJzaW9uID0gWEVOX0RPTUNUTF9JTlRFUkZBQ0Vf VkVSU0lPTjsKPiArCWFyZy51LmlvbWVtX3Blcm0uZmlyc3RfbWZuID0gZmlyc3RfbWZuOwo+ICsJ YXJnLnUuaW9tZW1fcGVybS5ucl9tZm5zID0gbnJfbWZuczsKPiArCWFyZy51LmlvbWVtX3Blcm0u YWxsb3dfYWNjZXNzID0gYWxsb3dfYWNjZXNzOwo+ICsJcmMgPSBIWVBFUlZJU09SX2RvbWN0bCgm YXJnKTsKPiArCj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgeGVuX2h2bV9t ZW1vcnlfbWFwcGluZyhpbnQgdm1faWQsIHVpbnQ2NF90IGZpcnN0X2dmbiwKPiB1aW50NjRfdCBm aXJzdF9tZm4sCj4gKwkJCQnCoMKgdWludDMyX3QgbnJfbWZucywgdWludDMyX3QKPiBhZGRfbWFw cGluZykKPiArewo+ICsJc3RydWN0IHhlbl9kb21jdGwgYXJnOwo+ICsJaW50IHJjOwo+ICsKPiAr CWlmIChhZGRfbWFwcGluZykgewo+ICsJCXJjID0geGVuX2RvbWFpbl9pb21lbV9wZXJtKHZtX2lk LCBmaXJzdF9tZm4sCj4gbnJfbWZucywgMSk7Cj4gKwnCoMKgwqDCoMKgwqDCoMKgaWYgKHJjIDwg MCkgewo+ICsJCQlwcmludGsoS0VSTl9FUlIgInhlbl9kb21haW5faW9tZW1fcGVybQo+IGZhaWxl ZDogJWRcbiIsIHJjKTsKPiArCQkJcmV0dXJuIHJjOwo+ICsJCX0KPiArCX0KPiArCj4gKwlhcmcu ZG9tYWluID0gdm1faWQ7Cj4gKwlhcmcuY21kID0gWEVOX0RPTUNUTF9tZW1vcnlfbWFwcGluZzsK PiArCWFyZy5pbnRlcmZhY2VfdmVyc2lvbiA9IFhFTl9ET01DVExfSU5URVJGQUNFX1ZFUlNJT047 Cj4gKwlhcmcudS5tZW1vcnlfbWFwcGluZy5maXJzdF9nZm4gPSBmaXJzdF9nZm47Cj4gKwlhcmcu dS5tZW1vcnlfbWFwcGluZy5maXJzdF9tZm4gPSBmaXJzdF9tZm47Cj4gKwlhcmcudS5tZW1vcnlf bWFwcGluZy5ucl9tZm5zID0gbnJfbWZuczsKPiArCWFyZy51Lm1lbW9yeV9tYXBwaW5nLmFkZF9t YXBwaW5nID0gYWRkX21hcHBpbmc7Cj4gKwo+ICsJcmMgPSBIWVBFUlZJU09SX2RvbWN0bCgmYXJn KTsKPiArCWlmIChyYyA8IDApIHsKPiArCQlwcmludGsoS0VSTl9FUlIgIkhZUEVSVklTT1JfZG9t Y3RsIGZhaWxlZDogJWRcbiIsCj4gcmMpOwo+ICsJCXJldHVybiByYzsKPiArCX0KPiArCj4gKwlp ZiAoIWFkZF9tYXBwaW5nKSB7Cj4gKwkJcmMgPSB4ZW5fZG9tYWluX2lvbWVtX3Blcm0odm1faWQs IGZpcnN0X21mbiwKPiBucl9tZm5zLCAwKTsKPiArCcKgwqDCoMKgwqDCoMKgwqBpZiAocmMgPCAw KSB7Cj4gKwkJCXByaW50ayhLRVJOX0VSUiAieGVuX2RvbWFpbl9pb21lbV9wZXJtCj4gZmFpbGVk OiAlZFxuIiwgcmMpOwo+ICsJCQlyZXR1cm4gcmM7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVy biByYzsKPiArfQo+ICsKPiArc3RhdGljIGludCB4ZW5fbWFwX21mbl90b19ncGZuKGludCB2bV9p ZCwgdW5zaWduZWQgbG9uZyBncGZuLAo+ICsJdW5zaWduZWQgbG9uZyBtZm4sIGludCBuciwgaW50 IG1hcCwgZW51bSBtYXBfdHlwZSB0eXBlKQo+ICt7Cj4gKwlpbnQgcmM7Cj4gKwlyYyA9IHhlbl9o dm1fbWVtb3J5X21hcHBpbmcodm1faWQsIGdwZm4sIG1mbiwgbnIsCj4gKwkJCW1hcCA/IERQQ0lf QUREX01BUFBJTkcgOgo+IERQQ0lfUkVNT1ZFX01BUFBJTkcpOwo+ICsJaWYgKHJjICE9IDApCj4g KwkJcHJpbnRrKCJ4ZW5faHZtX21lbW9yeV9tYXBwaW5nIGZhaWxlZDogJWRcbiIsIHJjKTsKPiAr CXJldHVybiByYzsKPiArfQo+ICsKPiArc3RhdGljIGludCB4ZW5fZ2V0X25yX3ZjcHUoaW50IHZt X2lkKQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2RvbWN0bCBhcmc7Cj4gKwlpbnQgcmM7Cj4gKwo+ICsJ YXJnLmRvbWFpbiA9IHZtX2lkOwo+ICsJYXJnLmNtZCA9IFhFTl9ET01DVExfZ2V0ZG9tYWluaW5m bzsKPiArCWFyZy5pbnRlcmZhY2VfdmVyc2lvbiA9IFhFTl9ET01DVExfSU5URVJGQUNFX1ZFUlNJ T047Cj4gKwo+ICsJcmMgPSBIWVBFUlZJU09SX2RvbWN0bCgmYXJnKTsKPiArCWlmIChyYzwwKXsK PiArCQlwcmludGsoS0VSTl9FUlIgIkhZUEVSVklTT1JfZG9tY3RsIGZhaWwKPiByZXQ9JWRcbiIs cmMpOwo+ICsJCS8qIGFzc3VtZSBpdCBpcyBVUCAqLwo+ICsJCXJldHVybiAxOwo+ICsJfQo+ICsK PiArCXJldHVybiBhcmcudS5nZXRkb21haW5pbmZvLm1heF92Y3B1X2lkICsgMTsKPiArfQo+ICsK PiArc3RhdGljIGludCBodm1fY3JlYXRlX2lvcmVxdWVzdF9zZXJ2ZXIoc3RydWN0IHZndF9kZXZp Y2UgKnZndCkKPiArewo+ICsJc3RydWN0IGd2dF9odm1faW5mbyAqaW5mbyA9IHZndC0+aHlwZXJ2 aXNvcl9kYXRhOwo+ICsJc3RydWN0IHhlbl9odm1fY3JlYXRlX2lvcmVxX3NlcnZlciBhcmc7Cj4g KwlpbnQgcjsKPiArCj4gKwlhcmcuZG9taWQgPSB2Z3QtPnZtX2lkOwo+ICsJYXJnLmhhbmRsZV9i dWZpb3JlcSA9IDA7Cj4gKwlyID0gSFlQRVJWSVNPUl9odm1fb3AoSFZNT1BfY3JlYXRlX2lvcmVx X3NlcnZlciwgJmFyZyk7Cj4gKwlpZiAociA8IDApIHsKPiArCQlwcmludGsoS0VSTl9FUlIgIkNh bm5vdCBjcmVhdGUgaW8tcmVxdXNldCBzZXJ2ZXI6Cj4gJWQhXG4iLCByKTsKPiArCQlyZXR1cm4g cjsKPiArCX0KPiArCWluZm8tPmlvc3J2X2lkID0gYXJnLmlkOwo+ICsKPiArCXJldHVybiByOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGh2bV90b2dnbGVfaW9yZXF1ZXN0X3NlcnZlcihzdHJ1Y3Qg dmd0X2RldmljZSAqdmd0LCBib29sCj4gZW5hYmxlKQo+ICt7Cj4gKwlzdHJ1Y3QgZ3Z0X2h2bV9p bmZvICppbmZvID0gdmd0LT5oeXBlcnZpc29yX2RhdGE7Cj4gKwlzdHJ1Y3QgeGVuX2h2bV9zZXRf aW9yZXFfc2VydmVyX3N0YXRlIGFyZzsKPiArCWludCByOwo+ICsKPiArCWFyZy5kb21pZCA9IHZn dC0+dm1faWQ7Cj4gKwlhcmcuaWQgPSBpbmZvLT5pb3Nydl9pZDsKPiArCWFyZy5lbmFibGVkID0g ZW5hYmxlOwo+ICsJciA9IEhZUEVSVklTT1JfaHZtX29wKEhWTU9QX3NldF9pb3JlcV9zZXJ2ZXJf c3RhdGUsICZhcmcpOwo+ICsJaWYgKHIgPCAwKSB7Cj4gKwkJcHJpbnRrKEtFUk5fRVJSICJDYW5u b3QgJXMgaW8tcmVxdWVzdCBzZXJ2ZXI6Cj4gJWQhXG4iLAo+ICsJCQllbmFibGUgPyAiZW5hYmxl IiA6ICJkaXNiYWxlIizCoMKgcik7Cj4gKwkJcmV0dXJuIHI7Cj4gKwl9Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoHJldHVybiByOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGh2bV9nZXRfaW9yZXFfcGZu KHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHVpbnQ2NF90Cj4gKnZhbHVlKQo+ICt7Cj4gKwlzdHJ1 Y3QgZ3Z0X2h2bV9pbmZvICppbmZvID0gdmd0LT5oeXBlcnZpc29yX2RhdGE7Cj4gKwlzdHJ1Y3Qg eGVuX2h2bV9nZXRfaW9yZXFfc2VydmVyX2luZm8gYXJnOwo+ICsJaW50IHI7Cj4gKwo+ICsJYXJn LmRvbWlkID0gdmd0LT52bV9pZDsKPiArCWFyZy5pZCA9IGluZm8tPmlvc3J2X2lkOwo+ICsJciA9 IEhZUEVSVklTT1JfaHZtX29wKEhWTU9QX2dldF9pb3JlcV9zZXJ2ZXJfaW5mbywgJmFyZyk7Cj4g KwlpZiAociA8IDApIHsKPiArCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBnZXQgaW9yZXEgcGZu OiAlZCFcbiIsIHIpOwo+ICsJCXJldHVybiByOwo+ICsJfQo+ICsJKnZhbHVlID0gYXJnLmlvcmVx X3BmbjsKPiArCXJldHVybiByOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGh2bV9kZXN0cm95X2lv cmVxdWVzdF9zZXJ2ZXIoc3RydWN0IHZndF9kZXZpY2UgKnZndCkKPiArewo+ICsJc3RydWN0IGd2 dF9odm1faW5mbyAqaW5mbyA9IHZndC0+aHlwZXJ2aXNvcl9kYXRhOwo+ICsJc3RydWN0IHhlbl9o dm1fZGVzdHJveV9pb3JlcV9zZXJ2ZXIgYXJnOwo+ICsJaW50IHI7Cj4gKwo+ICsJYXJnLmRvbWlk ID0gdmd0LT52bV9pZDsKPiArCWFyZy5pZCA9IGluZm8tPmlvc3J2X2lkOwo+ICsJciA9IEhZUEVS VklTT1JfaHZtX29wKEhWTU9QX2Rlc3Ryb3lfaW9yZXFfc2VydmVyLCAmYXJnKTsKPiArCWlmIChy IDwgMCkgewo+ICsJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGRlc3Ryb3kgaW8tcmVxdWVzdAo+ IHNlcnZlciglZCk6ICVkIVxuIiwKPiArCQkJaW5mby0+aW9zcnZfaWQsIHIpOwo+ICsJCXJldHVy biByOwo+ICsJfQo+ICsJaW5mby0+aW9zcnZfaWQgPSAwOwo+ICsKPiArCXJldHVybiByOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGh2bV9tYXBfaW9fcmFuZ2VfdG9faW9yZXFfc2VydmVyKHN0cnVj dCB2Z3RfZGV2aWNlICp2Z3QsCj4gKwlpbnQgaXNfbW1pbywgdWludDY0X3Qgc3RhcnQsIHVpbnQ2 NF90IGVuZCwgaW50IG1hcCkKPiArewo+ICsJc3RydWN0IGd2dF9odm1faW5mbyAqaW5mbyA9IHZn dC0+aHlwZXJ2aXNvcl9kYXRhOwo+ICsJeGVuX2h2bV9pb19yYW5nZV90IGFyZzsKPiArCWludCBy YzsKPiArCj4gKwlhcmcuZG9taWQgPSB2Z3QtPnZtX2lkOwo+ICsJYXJnLmlkID0gaW5mby0+aW9z cnZfaWQ7Cj4gKwlhcmcudHlwZSA9IGlzX21taW8gPyBIVk1PUF9JT19SQU5HRV9NRU1PUlkgOgo+ IEhWTU9QX0lPX1JBTkdFX1BPUlQ7Cj4gKwlhcmcuc3RhcnQgPSBzdGFydDsKPiArCWFyZy5lbmQg PSBlbmQ7Cj4gKwo+ICsJaWYgKG1hcCkKPiArCQlyYyA9Cj4gSFlQRVJWSVNPUl9odm1fb3AoSFZN T1BfbWFwX2lvX3JhbmdlX3RvX2lvcmVxX3NlcnZlciwgJmFyZyk7Cj4gKwllbHNlCj4gKwkJcmMg PQo+IEhZUEVSVklTT1JfaHZtX29wKEhWTU9QX3VubWFwX2lvX3JhbmdlX2Zyb21faW9yZXFfc2Vy dmVyLCAmYXJnKTsKPiArCj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaHZt X21hcF9wY2lkZXZfdG9faW9yZXFfc2VydmVyKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsCj4gdWlu dDY0X3Qgc2JkZikKPiArewo+ICsJc3RydWN0IGd2dF9odm1faW5mbyAqaW5mbyA9IHZndC0+aHlw ZXJ2aXNvcl9kYXRhOwo+ICsJeGVuX2h2bV9pb19yYW5nZV90IGFyZzsKPiArCWludCByYzsKPiAr Cj4gKwlhcmcuZG9taWQgPSB2Z3QtPnZtX2lkOwo+ICsJYXJnLmlkID0gaW5mby0+aW9zcnZfaWQ7 Cj4gKwlhcmcudHlwZSA9IEhWTU9QX0lPX1JBTkdFX1BDSTsKPiArCWFyZy5zdGFydCA9IGFyZy5l bmQgPSBzYmRmOwo+ICsJcmMgPSBIWVBFUlZJU09SX2h2bV9vcChIVk1PUF9tYXBfaW9fcmFuZ2Vf dG9faW9yZXFfc2VydmVyLAo+ICZhcmcpOwo+ICsJaWYgKHJjIDwgMCkgewo+ICsJCXByaW50ayhL RVJOX0VSUiAiQ2Fubm90IG1hcCBwY2lfZGV2IHRvIGlvcmVxX3NlcnZlcjoKPiAlZCFcbiIsIHJj KTsKPiArCQlyZXR1cm4gcmM7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGh2bV9zZXRfbWVtX3R5cGUoc3RydWN0IHZndF9kZXZpY2UgKnZndCwKPiArCXVp bnQxNl90IG1lbV90eXBlLCB1aW50NjRfdCBmaXJzdF9wZm4sIHVpbnQ2NF90IG5yKQo+ICt7Cj4g Kwl4ZW5faHZtX3NldF9tZW1fdHlwZV90IGFyZ3M7Cj4gKwlpbnQgcmM7Cj4gKwo+ICsJYXJncy5k b21pZCA9IHZndC0+dm1faWQ7Cj4gKwlhcmdzLmh2bW1lbV90eXBlID0gbWVtX3R5cGU7Cj4gKwlh cmdzLmZpcnN0X3BmbiA9IGZpcnN0X3BmbjsKPiArCWFyZ3MubnIgPSAxOwo+ICsJcmMgPSBIWVBF UlZJU09SX2h2bV9vcChIVk1PUF9zZXRfbWVtX3R5cGUsICZhcmdzKTsKPiArCj4gKwlyZXR1cm4g cmM7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaHZtX3dwX3BhZ2VfdG9faW9yZXFfc2VydmVyKHN0 cnVjdCB2Z3RfZGV2aWNlICp2Z3QsCj4gdW5zaWduZWQgbG9uZyBwYWdlLCBpbnQgc2V0KQo+ICt7 Cj4gKwlpbnQgcmMgPSAwOwo+ICsJdWludDY0X3Qgc3RhcnQsIGVuZDsKPiArCXVpbnQxNl90IG1l bV90eXBlOwo+ICsKPiArCXN0YXJ0ID0gcGFnZSA8PCBQQUdFX1NISUZUOwo+ICsJZW5kID0gKChw YWdlICsgMSkgPDwgUEFHRV9TSElGVCkgLSAxOwo+ICsKPiArCXJjID0gaHZtX21hcF9pb19yYW5n ZV90b19pb3JlcV9zZXJ2ZXIodmd0LCAxLCBzdGFydCwgZW5kLAo+IHNldCk7Cj4gKwlpZiAocmMg PCAwKSB7Cj4gKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gJXMgcGFnZSAweCVseCB0bwo+ IGlvcmVxX3NlcnZlcjogJWQhXG4iLAo+ICsJCQlzZXQgPyAibWFwIjoidW5tYXAiLCBwYWdlICwg cmMpOwo+ICsJCXJldHVybiByYzsKPiArCX0KPiArCj4gKwltZW1fdHlwZSA9IHNldCA/IEhWTU1F TV9tbWlvX3dyaXRlX2RtIDogSFZNTUVNX3JhbV9ydzsKPiArCXJjID0gaHZtX3NldF9tZW1fdHlw ZSh2Z3QsIG1lbV90eXBlLCBwYWdlLCAxKTsKPiArCWlmIChyYyA8IDApIHsKPiArCQlwcmludGso S0VSTl9FUlIgIkZhaWxlZCB0byBzZXQgbWVtIHR5cGUgb2YgcGFnZQo+IDB4JWx4IHRvICVzIVxu IiwgcGFnZSwKPiArCQkJc2V0ID8KPiAiSFZNTUVNX21taW9fd3JpdGVfZG0iOiJIVk1NRU1fcmFt X3J3Iik7Cj4gKwkJcmV0dXJuIHJjOwo+ICsJfQo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IHhlbl9zZXRfdHJhcF9hcmVhKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsIHVpbnQ2 NF90IHN0YXJ0LAo+IHVpbnQ2NF90IGVuZCwgYm9vbCBtYXApCj4gK3sKPiArCWlmICghZ3Z0X3Bj aV9tbWlvX2lzX2VuYWJsZWQodmd0KSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlyZXR1cm4gaHZt X21hcF9pb19yYW5nZV90b19pb3JlcV9zZXJ2ZXIodmd0LCAxLCBzdGFydCwgZW5kLAo+IG1hcCk7 Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0ICp4ZW5fbWFwX2lvcGFnZShzdHJ1 Y3Qgdmd0X2RldmljZSAqdmd0KQo+ICt7Cj4gKwl1aW50NjRfdCBpb3JlcV9wZm47Cj4gKwlpbnQg cmM7Cj4gKwo+ICsJcmMgPSBodm1fY3JlYXRlX2lvcmVxdWVzdF9zZXJ2ZXIodmd0KTsKPiArCWlm IChyYyA8IDApCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwlyYyA9IGh2bV9nZXRfaW9yZXFfcGZuKHZn dCwgJmlvcmVxX3Bmbik7Cj4gKwlpZiAocmMgPCAwKSB7Cj4gKwkJaHZtX2Rlc3Ryb3lfaW9yZXF1 ZXN0X3NlcnZlcih2Z3QpOwo+ICsJCXJldHVybiBOVUxMOwo+ICsJfQo+ICsKPiArCXJldHVybiB4 ZW5fcmVtYXBfZG9tYWluX21mbl9yYW5nZV9pbl9rZXJuZWwoaW9yZXFfcGZuLCAxLAo+IHZndC0+ dm1faWQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCB4ZW5fc2V0X2d1ZXN0X3BhZ2Vfd3JpdGVw cm90ZWN0aW9uKHN0cnVjdCB2Z3RfZGV2aWNlCj4gKnZndCwKPiArCQlndWVzdF9wYWdlX3QgKmd1 ZXN0X3BhZ2UpCj4gK3sKPiArCWludCByOwo+ICsKPiArCWlmIChndWVzdF9wYWdlLT53cml0ZXBy b3RlY3Rpb24pCj4gKwkJcmV0dXJuIHRydWU7Cj4gKwo+ICsJciA9IGh2bV93cF9wYWdlX3RvX2lv cmVxX3NlcnZlcih2Z3QsIGd1ZXN0X3BhZ2UtPmdmbiwgMSk7Cj4gKwlpZiAocikgewo+ICsJCWd2 dF9lcnIoImZhaWwgdG8gc2V0IHdyaXRlIHByb3RlY3Rpb24uXG4iKTsKPiArCQlyZXR1cm4gZmFs c2U7Cj4gKwl9Cj4gKwo+ICsJZ3Vlc3RfcGFnZS0+d3JpdGVwcm90ZWN0aW9uID0gdHJ1ZTsKPiAr Cj4gKwlhdG9taWNfaW5jKCZ2Z3QtPmd0dC5uX3dyaXRlX3Byb3RlY3RlZF9ndWVzdF9wYWdlKTsK PiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgeGVuX2NsZWFyX2d1 ZXN0X3BhZ2Vfd3JpdGVwcm90ZWN0aW9uKHN0cnVjdCB2Z3RfZGV2aWNlCj4gKnZndCwKPiArCQln dWVzdF9wYWdlX3QgKmd1ZXN0X3BhZ2UpCj4gK3sKPiArCWludCByOwo+ICsKPiArCWlmICghZ3Vl c3RfcGFnZS0+d3JpdGVwcm90ZWN0aW9uKQo+ICsJCXJldHVybiB0cnVlOwo+ICsKPiArCXIgPSBo dm1fd3BfcGFnZV90b19pb3JlcV9zZXJ2ZXIodmd0LCBndWVzdF9wYWdlLT5nZm4sIDApOwo+ICsJ aWYgKHIpIHsKPiArCQlndnRfZXJyKCJmYWlsIHRvIGNsZWFyIHdyaXRlIHByb3RlY3Rpb24uXG4i KTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJZ3Vlc3RfcGFnZS0+d3JpdGVwcm90 ZWN0aW9uID0gZmFsc2U7Cj4gKwo+ICsJYXRvbWljX2RlYygmdmd0LT5ndHQubl93cml0ZV9wcm90 ZWN0ZWRfZ3Vlc3RfcGFnZSk7Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgeGVuX2RldGVjdF9ob3N0KHZvaWQpCj4gK3sKPiArCXJldHVybiB4ZW5faW5pdGlhbF9k b21haW4oKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB4ZW5fdmlydF90b19tZm4odm9pZCAqYWRk cikKPiArewo+ICsJcmV0dXJuIHZpcnRfdG9fbWZuKGFkZHIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCAqeGVuX21mbl90b192aXJ0KGludCBtZm4pCj4gK3sKPiArCXJldHVybiBtZm5fdG9fdmly dChtZm4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHhlbl9pbmplY3RfbXNpKGludCB2bV9pZCwg dTMyIGFkZHJfbG8sIHUxNiBkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuX2h2bV9pbmplY3RfbXNp IGluZm8gPSB7Cj4gKwkJLmRvbWlkCT0gdm1faWQsCj4gKwkJLmFkZHIJPSBhZGRyX2xvLCAvKiBv bmx5IGxvdyBhZGRyIHVzZWQgKi8KPiArCQkuZGF0YQk9IGRhdGEsCj4gKwl9Owo+ICsKPiArCXJl dHVybiBIWVBFUlZJU09SX2h2bV9vcChIVk1PUF9pbmplY3RfbXNpLCAmaW5mbyk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgdmd0X2h2bV92bWVtX2luaXQoc3RydWN0IHZndF9kZXZpY2UgKnZndCkK PiArewo+ICsJdW5zaWduZWQgbG9uZyBpLCBqLCBncGZuLCBjb3VudDsKPiArCXVuc2lnbmVkIGxv bmcgbnJfbG93XzFtYl9ia3QsIG5yX2hpZ2hfYmt0LCBucl9oaWdoXzRrX2JrdDsKPiArCXN0cnVj dCBndnRfaHZtX2luZm8gKmluZm8gPSB2Z3QtPmh5cGVydmlzb3JfZGF0YTsKPiArCj4gKwlpZiAo IXZndC0+dm1faWQpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJQVNTRVJUKGluZm8tPnZtZW1fdm1h ID09IE5VTEwgJiYgaW5mby0+dm1lbV92bWFfbG93XzFtYiA9PQo+IE5VTEwpOwo+ICsKPiArCWlu Zm8tPnZtZW1fc3ogPSB4ZW5fZ2V0X21heF9ncGZuKHZndC0+dm1faWQpICsgMTsKPiArCWluZm8t PnZtZW1fc3ogPDw9IFBBR0VfU0hJRlQ7Cj4gKwo+ICsJLyogd2FybiBvbiBub24tMU1CLWFsaWdu ZWQgbWVtb3J5IGxheW91dCBvZiBIVk0gKi8KPiArCWlmIChpbmZvLT52bWVtX3N6ICYgflZNRU1f QlVDS19NQVNLKQo+ICsJCWd2dF9lcnIoIlZNJWQ6IHZtZW1fc3o9MHglbGx4IVxuIiwgdmd0LT52 bV9pZCwgaW5mby0KPiA+dm1lbV9zeik7Cj4gKwo+ICsJbnJfbG93XzFtYl9ia3QgPSBWTUVNXzFN QiA+PiBQQUdFX1NISUZUOwo+ICsJbnJfaGlnaF9ia3QgPSAoaW5mby0+dm1lbV9zeiA+PiBWTUVN X0JVQ0tfU0hJRlQpOwo+ICsJbnJfaGlnaF80a19ia3QgPSAoaW5mby0+dm1lbV9zeiA+PiBQQUdF X1NISUZUKTsKPiArCj4gKwlpbmZvLT52bWVtX3ZtYV9sb3dfMW1iID0KPiArCQl2emFsbG9jKHNp emVvZigqaW5mby0+dm1lbV92bWEpICogbnJfbG93XzFtYl9ia3QpOwo+ICsJaW5mby0+dm1lbV92 bWEgPQo+ICsJCXZ6YWxsb2Moc2l6ZW9mKCppbmZvLT52bWVtX3ZtYSkgKiBucl9oaWdoX2JrdCk7 Cj4gKwlpbmZvLT52bWVtX3ZtYV80ayA9Cj4gKwkJdnphbGxvYyhzaXplb2YoKmluZm8tPnZtZW1f dm1hKSAqIG5yX2hpZ2hfNGtfYmt0KTsKPiArCj4gKwlpZiAoaW5mby0+dm1lbV92bWFfbG93XzFt YiA9PSBOVUxMIHx8IGluZm8tPnZtZW1fdm1hID09IE5VTEwKPiB8fAo+ICsJCWluZm8tPnZtZW1f dm1hXzRrID09IE5VTEwpIHsKPiArCQlndnRfZXJyKCJJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciB2 bWVtX3ZtYSwKPiB2bWVtX3N6PTB4JWxseFxuIiwKPiArCQkJCWluZm8tPnZtZW1fc3ogKTsKPiAr CQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwkvKiBtYXAgdGhlIGxvdyAxTUIgbWVtb3J5ICovCj4g Kwlmb3IgKGkgPSAwOyBpIDwgbnJfbG93XzFtYl9ia3Q7IGkrKykgewo+ICsJCWluZm8tPnZtZW1f dm1hX2xvd18xbWJbaV0gPQo+ICsJCQl4ZW5fcmVtYXBfZG9tYWluX21mbl9yYW5nZV9pbl9rZXJu ZWwoaSwgMSwKPiB2Z3QtPnZtX2lkKTsKPiArCj4gKwkJaWYgKGluZm8tPnZtZW1fdm1hX2xvd18x bWJbaV0gIT0gTlVMTCkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCS8qIERvbid0IHdhcm4gb24g WzB4YTAwMDAsIDB4MTAwMDAwKTogYSBrbm93biBub24tCj4gUkFNIGhvbGUgKi8KPiArCQlpZiAo aSA8ICgweGEwMDAwID4+IFBBR0VfU0hJRlQpKQo+ICsJCQlwcmludGsoS0VSTl9FUlIgIkdWVDog Vk0lZDogY2FuJ3QgbWFwIEdQRk4KPiAlbGQhXG4iLAo+ICsJCQkJdmd0LT52bV9pZCwgaSk7Cj4g Kwl9Cj4gKwo+ICsJcHJpbnRrKCJzdGFydCB2bWVtX21hcFxuIik7Cj4gKwljb3VudCA9IDA7Cj4g KwkvKiBtYXAgdGhlID4xTUIgbWVtb3J5ICovCj4gKwlmb3IgKGkgPSAxOyBpIDwgbnJfaGlnaF9i a3Q7IGkrKykgewo+ICsJCWdwZm4gPSBpIDw8IChWTUVNX0JVQ0tfU0hJRlQgLSBQQUdFX1NISUZU KTsKPiArCQlpbmZvLT52bWVtX3ZtYVtpXSA9Cj4geGVuX3JlbWFwX2RvbWFpbl9tZm5fcmFuZ2Vf aW5fa2VybmVsKAo+ICsJCQkJZ3BmbiwgVk1FTV9CVUNLX1NJWkUgPj4gUEFHRV9TSElGVCwKPiB2 Z3QtPnZtX2lkKTsKPiArCj4gKwkJaWYgKGluZm8tPnZtZW1fdm1hW2ldICE9IE5VTEwpCj4gKwkJ CWNvbnRpbnVlOwo+ICsKPiArCj4gKwkJLyogZm9yIDw0RyBHUEZOczogc2tpcCB0aGUgaG9sZSBh ZnRlcgo+IGxvd19tZW1fbWF4X2dwZm4gKi8KPiArCQlpZiAoZ3BmbiA8ICgxIDw8ICgzMiAtIFBB R0VfU0hJRlQpKSAmJgo+ICsJCQl2Z3QtPmxvd19tZW1fbWF4X2dwZm4gIT0gMCAmJgo+ICsJCQln cGZuID4gdmd0LT5sb3dfbWVtX21heF9ncGZuKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJZm9y IChqID0gZ3BmbjsKPiArCQnCoMKgwqDCoMKgaiA8ICgoaSArIDEpIDw8IChWTUVNX0JVQ0tfU0hJ RlQgLQo+IFBBR0VfU0hJRlQpKTsKPiArCQnCoMKgwqDCoMKgaisrKSB7Cj4gKwkJCWluZm8tPnZt ZW1fdm1hXzRrW2pdID0KPiB4ZW5fcmVtYXBfZG9tYWluX21mbl9yYW5nZV9pbl9rZXJuZWwoaiwg MSwgdmd0LT52bV9pZCk7Cj4gKwo+ICsJCQlpZiAoaW5mby0+dm1lbV92bWFfNGtbal0pIHsKPiAr CQkJCWNvdW50Kys7Cj4gKwkJCQlwcmludGsoS0VSTl9FUlIgIm1hcCA0ayBncGEKPiAoJWx4KVxu IiwgaiA8PCBQQUdFX1NISUZUKTsKPiArCQkJfQo+ICsJCX0KPiArCj4gKwkJLyogVG8gcmVkdWNl IHRoZSBudW1iZXIgb2YgZXJyIG1lc3NhZ2VzKHNvbWUgb2YKPiB0aGVtLCBkdWUgdG8KPiArCQnC oCogdGhlIE1NSU8gaG9sZSwgYXJlIHNwdXJpb3VzIGFuZCBoYXJtbGVzcykgd2Ugb25seQo+IHBy aW50IGEKPiArCQnCoCogbWVzc2FnZSBpZiBpdCdzIGF0IGV2ZXJ5IDY0TUIgYm91bmRhcnkgb3Ig PjRHQgo+IG1lbW9yeS4KPiArCQnCoCovCj4gKwkJaWYgKChpICUgNjQgPT0gMCkgfHwgKGkgPj0g KDFVTEwgPDwgKDMyIC0KPiBWTUVNX0JVQ0tfU0hJRlQpKSkpCj4gKwkJCXByaW50ayhLRVJOX0VS UiAiR1ZUOiBWTSVkOiBjYW4ndCBtYXAKPiAlbGRLQlxuIiwKPiArCQkJCXZndC0+dm1faWQsIGkp Owo+ICsJfQo+ICsJcHJpbnRrKCJlbmQgdm1lbV9tYXAgKCVsZCA0ayBtYXBwaW5ncylcbiIsIGNv dW50KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArZXJyOgo+ICsJdmZyZWUoaW5mby0+dm1lbV92bWEp Owo+ICsJdmZyZWUoaW5mby0+dm1lbV92bWFfbG93XzFtYik7Cj4gKwl2ZnJlZShpbmZvLT52bWVt X3ZtYV80ayk7Cj4gKwlpbmZvLT52bWVtX3ZtYSA9IGluZm8tPnZtZW1fdm1hX2xvd18xbWIgPSBp bmZvLT52bWVtX3ZtYV80awo+ID0gTlVMTDsKPiArCXJldHVybiAtRU5PTUVNOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCB2Z3Rfdm1lbV9kZXN0cm95KHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QpCj4g K3sKPiArCWludCBpLCBqOwo+ICsJdW5zaWduZWQgbG9uZyBucl9sb3dfMW1iX2JrdCwgbnJfaGln aF9ia3QsIG5yX2hpZ2hfYmt0XzRrOwo+ICsJc3RydWN0IGd2dF9odm1faW5mbyAqaW5mbyA9IHZn dC0+aHlwZXJ2aXNvcl9kYXRhOwo+ICsKPiArCWlmICh2Z3QtPnZtX2lkID09IDApCj4gKwkJcmV0 dXJuOwo+ICsKPiArCS8qCj4gKwnCoCogTWF5YmUgdGhlIFZNIGhhc24ndCBhY2Nlc3NlZCBHRU4g TU1JTyhlLmcuLCBzdGlsbCBpbiB0aGUKPiBsZWdhY3kgVkdBCj4gKwnCoCogbW9kZSksIHNvIG5v IG1hcHBpbmcgaXMgY3JlYXRlZCB5ZXQuCj4gKwnCoCovCj4gKwlpZiAoaW5mby0+dm1lbV92bWEg PT0gTlVMTCAmJiBpbmZvLT52bWVtX3ZtYV9sb3dfMW1iID09Cj4gTlVMTCkKPiArCQlyZXR1cm47 Cj4gKwo+ICsJQVNTRVJUKGluZm8tPnZtZW1fdm1hICE9IE5VTEwgJiYgaW5mby0+dm1lbV92bWFf bG93XzFtYiAhPQo+IE5VTEwpOwo+ICsKPiArCW5yX2xvd18xbWJfYmt0ID0gVk1FTV8xTUIgPj4g UEFHRV9TSElGVDsKPiArCW5yX2hpZ2hfYmt0ID0gKGluZm8tPnZtZW1fc3ogPj4gVk1FTV9CVUNL X1NISUZUKTsKPiArCW5yX2hpZ2hfYmt0XzRrID0gKGluZm8tPnZtZW1fc3ogPj4gUEFHRV9TSElG VCk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG5yX2xvd18xbWJfYmt0OyBpKyspIHsKPiArCQlp ZiAoaW5mby0+dm1lbV92bWFfbG93XzFtYltpXSA9PSBOVUxMKQo+ICsJCQljb250aW51ZTsKPiAr CQl4ZW5fdW5tYXBfZG9tYWluX21mbl9yYW5nZV9pbl9rZXJuZWwoaW5mby0KPiA+dm1lbV92bWFf bG93XzFtYltpXSwKPiArCQkJCTEsIHZndC0+dm1faWQpOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9 IDE7IGkgPCBucl9oaWdoX2JrdDsgaSsrKSB7Cj4gKwkJaWYgKGluZm8tPnZtZW1fdm1hW2ldID09 IE5VTEwpIHsKPiArCQkJZm9yIChqID0gKGkgPDwgKFZNRU1fQlVDS19TSElGVCAtCj4gUEFHRV9T SElGVCkpOwo+ICsJCQnCoMKgwqDCoMKgaiA8ICgoaSArIDEpIDw8IChWTUVNX0JVQ0tfU0hJRlQg LQo+IFBBR0VfU0hJRlQpKTsKPiArCQkJwqDCoMKgwqDCoGorKykgewo+ICsJCQkJaWYgKGluZm8t PnZtZW1fdm1hXzRrW2pdID09IE5VTEwpCj4gKwkJCQkJY29udGludWU7Cj4gKwkJCQl4ZW5fdW5t YXBfZG9tYWluX21mbl9yYW5nZV9pbl9rZXJuZWwKPiAoCj4gKwkJCQkJaW5mby0+dm1lbV92bWFf NGtbal0sIDEsCj4gdmd0LT52bV9pZCk7Cj4gKwkJCX0KPiArCQkJY29udGludWU7Cj4gKwkJfQo+ ICsJCXhlbl91bm1hcF9kb21haW5fbWZuX3JhbmdlX2luX2tlcm5lbCgKPiArCQkJaW5mby0+dm1l bV92bWFbaV0sIFZNRU1fQlVDS19TSVpFID4+Cj4gUEFHRV9TSElGVCwKPiArCQkJdmd0LT52bV9p ZCk7Cj4gKwl9Cj4gKwo+ICsJdmZyZWUoaW5mby0+dm1lbV92bWEpOwo+ICsJdmZyZWUoaW5mby0+ dm1lbV92bWFfbG93XzFtYik7Cj4gKwl2ZnJlZShpbmZvLT52bWVtX3ZtYV80ayk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgX2h2bV9tbWlvX2VtdWxhdGlvbihzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0 LCBzdHJ1Y3QgaW9yZXEKPiAqcmVxKQo+ICt7Cj4gKwlpbnQgaSwgc2lnbjsKPiArCXZvaWQgKmd2 YTsKPiArCXVuc2lnbmVkIGxvbmcgZ3BhOwo+ICsJdWludDY0X3QgYmFzZSA9IGd2dF9tbWlvX2Jh cl9iYXNlKHZndCk7Cj4gKwl1aW50NjRfdCB0bXA7Cj4gKwlpbnQgcHZpbmZvX3BhZ2U7Cj4gKwlz dHJ1Y3QgZ3Z0X2h2bV9pbmZvICppbmZvID0gdmd0LT5oeXBlcnZpc29yX2RhdGE7Cj4gKwo+ICsJ aWYgKGluZm8tPnZtZW1fdm1hID09IE5VTEwpIHsKPiArCQl0bXAgPSBndnRfaG9zdC5tcHRfb3Bz LT5wYV90b19tbWlvX29mZnNldCh2Z3QsIHJlcS0KPiA+YWRkcik7Cj4gKwkJcHZpbmZvX3BhZ2Ug PSAodG1wID49IFZHVF9QVklORk9fUEFHRQo+ICsJCQkJJiYgdG1wIDwgKFZHVF9QVklORk9fUEFH RSArCj4gVkdUX1BWSU5GT19TSVpFKSk7Cj4gKwkJLyoKPiArCQnCoCogaHZtbG9hZGVyIHdpbGwg cmVhZCBQVklORk8gdG8gaWRlbnRpZnkgaWYgSFZNIGlzCj4gaW4gR1ZUCj4gKwkJwqAqIG9yIFZU RC4gU28gd2UgZG9uJ3QgdHJpZ2dlciBIVk0gbWFwcGluZyBsb2dpYwo+IGhlcmUuCj4gKwkJwqAq Lwo+ICsJCWlmICghcHZpbmZvX3BhZ2UgJiYgdmd0X2h2bV92bWVtX2luaXQodmd0KSA8IDApIHsK PiArCQkJZ3Z0X2VycigiY2FuIG5vdCBtYXAgdGhlIG1lbW9yeSBvZgo+IFZNJWQhISFcbiIsIHZn dC0+dm1faWQpOwo+ICsJCQlYRU5fQVNTRVJUX1ZNKGluZm8tPnZtZW1fdm1hICE9IE5VTEwsIHZn dCk7Cj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCX0KPiArCj4gKwlzaWduID0gcmVx LT5kZiA/IC0xIDogMTsKPiArCj4gKwlpZiAocmVxLT5kaXIgPT0gSU9SRVFfUkVBRCkgewo+ICsJ CS8qIE1NSU8gUkVBRCAqLwo+ICsJCWlmICghcmVxLT5kYXRhX2lzX3B0cikgewo+ICsJCQlpZiAo cmVxLT5jb3VudCAhPSAxKQo+ICsJCQkJZ290byBlcnJfaW9yZXFfY291bnQ7Cj4gKwo+ICsJCQkv L3ZndF9kYmcoR1ZUX0RCR19HRU5FUklDLCJIVk1fTU1JT19yZWFkOgo+IHRhcmdldCByZWdpc3Rl ciAoJWx4KS5cbiIsCj4gKwkJCS8vCSh1bnNpZ25lZCBsb25nKXJlcS0+YWRkcik7Cj4gKwkJCWlm ICghZ3Z0X2hvc3QuZW11bGF0ZV9vcHMtCj4gPmVtdWxhdGVfbW1pb19yZWFkKHZndCwgcmVxLT5h ZGRyLCAmcmVxLT5kYXRhLCByZXEtPnNpemUpKQo+ICsJCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJ fQo+ICsJCWVsc2Ugewo+ICsJCQlpZiAoKHJlcS0+YWRkciArIHNpZ24gKiByZXEtPmNvdW50ICog cmVxLQo+ID5zaXplIDwgYmFzZSkKPiArCQkJwqDCoMKgfHwgKHJlcS0+YWRkciArIHNpZ24gKiBy ZXEtPmNvdW50ICogcmVxLQo+ID5zaXplID49Cj4gKwkJCQliYXNlICsgdmd0LT5zdGF0ZS5jZmcu YmFyX3NpemVbMF0pKQo+ICsJCQkJZ290byBlcnJfaW9yZXFfcmFuZ2U7Cj4gKwkJCS8vdmd0X2Ri ZyhHVlRfREJHX0dFTkVSSUMsIkhWTV9NTUlPX3JlYWQ6Cj4gcmVwICVkIHRhcmdldCBtZW1vcnkg JWx4LCBzbG93IVxuIiwKPiArCQkJLy8JcmVxLT5jb3VudCwgKHVuc2lnbmVkIGxvbmcpcmVxLQo+ ID5hZGRyKTsKPiArCj4gKwkJCWZvciAoaSA9IDA7IGkgPCByZXEtPmNvdW50OyBpKyspIHsKPiAr CQkJCWlmICghZ3Z0X2hvc3QuZW11bGF0ZV9vcHMtCj4gPmVtdWxhdGVfbW1pb19yZWFkKHZndCwg cmVxLT5hZGRyICsgc2lnbiAqIGkgKiByZXEtPnNpemUsCj4gKwkJCQkJJnRtcCwgcmVxLT5zaXpl KSkKPiArCQkJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQkJCWdwYSA9IHJlcS0+ZGF0YSArIHNpZ24g KiBpICogcmVxLQo+ID5zaXplOwo+ICsJCQkJaWYoIXZndC0+dm1faWQpCj4gKwkJCQkJZ3ZhID0g KGNoYXIKPiAqKXhlbl9tZm5fdG9fdmlydChncGEgPj4gUEFHRV9TSElGVCkgKyBvZmZzZXRfaW5f cGFnZShncGEpOwo+ICsJCQkJZWxzZQo+ICsJCQkJCWd2YSA9IHhlbl9ncGFfdG9fdmEodmd0LAo+ IGdwYSk7Cj4gKwkJCQlpZiAoZ3ZhKSB7Cj4gKwkJCQkJbWVtY3B5KGd2YSwgJnRtcCwgcmVxLQo+ ID5zaXplKTsKPiArCQkJCX0gZWxzZQo+ICsJCQkJCWd2dF9lcnIoIlZNICVkIGlzIHRyeWluZyB0 bwo+IHN0b3JlIG1taW8gZGF0YSBibG9jayB0byBpbnZhbGlkIGdwYTogMHglbHguXG4iLCB2Z3Qt PnZtX2lkLCBncGEpOwo+ICsJCQl9Cj4gKwkJfQo+ICsJfQo+ICsJZWxzZSB7IC8qIE1NSU8gV3Jp dGUgKi8KPiArCQlpZiAoIXJlcS0+ZGF0YV9pc19wdHIpIHsKPiArCQkJaWYgKHJlcS0+Y291bnQg IT0gMSkKPiArCQkJCWdvdG8gZXJyX2lvcmVxX2NvdW50Owo+ICsJCQkvL3ZndF9kYmcoR1ZUX0RC R19HRU5FUklDLCJIVk1fTU1JT193cml0ZToKPiB0YXJnZXQgcmVnaXN0ZXIgKCVseCkuXG4iLCAo dW5zaWduZWQgbG9uZylyZXEtPmFkZHIpOwo+ICsJCQlpZiAoIWd2dF9ob3N0LmVtdWxhdGVfb3Bz LQo+ID5lbXVsYXRlX21taW9fd3JpdGUodmd0LCByZXEtPmFkZHIsICZyZXEtPmRhdGEsIHJlcS0+ c2l6ZSkpCj4gKwkJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwkJZWxzZSB7Cj4gKwkJCWlm ICgocmVxLT5hZGRyICsgc2lnbiAqIHJlcS0+Y291bnQgKiByZXEtCj4gPnNpemUgPCBiYXNlKQo+ ICsJCQnCoMKgwqDCoHx8IChyZXEtPmFkZHIgKyBzaWduICogcmVxLT5jb3VudCAqIHJlcS0KPiA+ c2l6ZSA+PQo+ICsJCQkJYmFzZSArIHZndC0+c3RhdGUuY2ZnLmJhcl9zaXplWzBdKSkKPiArCQkJ CWdvdG8gZXJyX2lvcmVxX3JhbmdlOwo+ICsJCQkvL3ZndF9kYmcoR1ZUX0RCR19HRU5FUklDLCJI Vk1fTU1JT193cml0ZToKPiByZXAgJWQgdGFyZ2V0IG1lbW9yeSAlbHgsIHNsb3chXG4iLAo+ICsJ CQkvLwlyZXEtPmNvdW50LCAodW5zaWduZWQgbG9uZylyZXEtCj4gPmFkZHIpOwo+ICsKPiArCQkJ Zm9yIChpID0gMDsgaSA8IHJlcS0+Y291bnQ7IGkrKykgewo+ICsJCQkJZ3BhID0gcmVxLT5kYXRh ICsgc2lnbiAqIGkgKiByZXEtCj4gPnNpemU7Cj4gKwkJCQlpZighdmd0LT52bV9pZCkKPiArCQkJ CQlndmEgPSAoY2hhcgo+ICopeGVuX21mbl90b192aXJ0KGdwYSA+PiBQQUdFX1NISUZUKSArIG9m ZnNldF9pbl9wYWdlKGdwYSk7Cj4gKwkJCQllbHNlCj4gKwkJCQkJZ3ZhID0geGVuX2dwYV90b192 YSh2Z3QsCj4gZ3BhKTsKPiArCj4gKwkJCQlpZiAoZ3ZhICE9IE5VTEwpCj4gKwkJCQkJbWVtY3B5 KCZ0bXAsIGd2YSwgcmVxLQo+ID5zaXplKTsKPiArCQkJCWVsc2Ugewo+ICsJCQkJCXRtcCA9IDA7 Cj4gKwkJCQkJcHJpbnRrKEtFUk5fRVJSICJHVlQ6IGNhbgo+IG5vdCByZWFkIGdwYSA9IDB4JWx4 ISEhXG4iLCBncGEpOwo+ICsJCQkJfQo+ICsJCQkJaWYgKCFndnRfaG9zdC5lbXVsYXRlX29wcy0K PiA+ZW11bGF0ZV9tbWlvX3dyaXRlKHZndCwgcmVxLT5hZGRyICsgc2lnbiAqIGkgKiByZXEtPnNp emUsICZ0bXAsIHJlcS0KPiA+c2l6ZSkpCj4gKwkJCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJCX0K PiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfaW9yZXFfY291bnQ6Cj4g KwlndnRfZXJyKCJWTSglZCk6IFVuZXhwZWN0ZWQgJXMgcmVxdWVzdCBjb3VudCglZClcbiIsCj4g KwkJdmd0LT52bV9pZCwgcmVxLT5kaXIgPT0gSU9SRVFfUkVBRCA/ICJyZWFkIiA6Cj4gIndyaXRl IiwKPiArCQlyZXEtPmNvdW50KTsKPiArCXJldHVybiAtRUlOVkFMOwo+ICsKPiArZXJyX2lvcmVx X3JhbmdlOgo+ICsJZ3Z0X2VycigiVk0oJWQpOiBJbnZhbGlkICVzIHJlcXVlc3QgYWRkciBlbmQo JTAxNmxseClcbiIsCj4gKwkJdmd0LT52bV9pZCwgcmVxLT5kaXIgPT0gSU9SRVFfUkVBRCA/ICJy ZWFkIiA6Cj4gIndyaXRlIiwKPiArCQlyZXEtPmFkZHIgKyBzaWduICogcmVxLT5jb3VudCAqIHJl cS0+c2l6ZSk7Cj4gKwlyZXR1cm4gLUVSQU5HRTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgdmd0 X2h2bV93cml0ZV9jZmdfc3BhY2Uoc3RydWN0IHZndF9kZXZpY2UgKnZndCwKPiArCXVpbnQ2NF90 IGFkZHIsIHVuc2lnbmVkIGludCBieXRlcywgdW5zaWduZWQgbG9uZyB2YWwpCj4gK3sKPiArCS8q IExvdyAzMiBiaXQgb2YgYWRkciBpcyByZWFsIGFkZHJlc3MsIGhpZ2ggMzIgYml0IGlzIGJkZiAq Lwo+ICsJdW5zaWduZWQgaW50IHBvcnQgPSBhZGRyICYgMHhmZmZmZmZmZjsKPiArCj4gKwlBU1NF UlQoKChieXRlcyA9PSA0KSAmJiAoKHBvcnQgJiAzKSA9PSAwKSkgfHwKPiArCQkoKGJ5dGVzID09 IDIpICYmICgocG9ydCAmIDEpID09IDApKSB8fCAoYnl0ZXMgPT0KPiAxKSk7Cj4gKwlndnRfaG9z dC5lbXVsYXRlX29wcy0+ZW11bGF0ZV9jZmdfd3JpdGUodmd0LCBwb3J0LCAmdmFsLAo+IGJ5dGVz KTsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCB2Z3RfaHZtX3JlYWRf Y2ZnX3NwYWNlKHN0cnVjdCB2Z3RfZGV2aWNlICp2Z3QsCj4gKwl1aW50NjRfdCBhZGRyLCB1bnNp Z25lZCBpbnQgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgKnZhbCkKPiArewo+ICsJdW5zaWduZWQgbG9u ZyBkYXRhOwo+ICsJLyogTG93IDMyIGJpdCBvZiBhZGRyIGlzIHJlYWwgYWRkcmVzcywgaGlnaCAz MiBiaXQgaXMgYmRmICovCj4gKwl1bnNpZ25lZCBpbnQgcG9ydCA9IGFkZHIgJiAweGZmZmZmZmZm Owo+ICsKPiArCUFTU0VSVCAoKChieXRlcyA9PSA0KSAmJiAoKHBvcnQgJiAzKSA9PSAwKSkgfHwK PiArCQkoKGJ5dGVzID09IDIpICYmICgocG9ydCAmIDEpID09IDApKSB8fCAoYnl0ZXMgPT0KPiAx KSk7Cj4gKwlndnRfaG9zdC5lbXVsYXRlX29wcy0+ZW11bGF0ZV9jZmdfcmVhZCh2Z3QsIHBvcnQs ICZkYXRhLAo+IGJ5dGVzKTsKPiArCW1lbWNweSh2YWwsICZkYXRhLCBieXRlcyk7Cj4gKwlyZXR1 cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGludCBfaHZtX3Bpb19lbXVsYXRpb24oc3RydWN0 IHZndF9kZXZpY2UgKnZndCwgc3RydWN0IGlvcmVxCj4gKmlvcmVxKQo+ICt7Cj4gKwlpbnQgc2ln bjsKPiArCj4gKwlzaWduID0gaW9yZXEtPmRmID8gLTEgOiAxOwo+ICsKPiArCWlmIChpb3JlcS0+ ZGlyID09IElPUkVRX1JFQUQpIHsKPiArCQkvKiBQSU8gUkVBRCAqLwo+ICsJCWlmICghaW9yZXEt PmRhdGFfaXNfcHRyKSB7Cj4gKwkJCWlmKCF2Z3RfaHZtX3JlYWRfY2ZnX3NwYWNlKHZndCwKPiAr CQkJCWlvcmVxLT5hZGRyLAo+ICsJCQkJaW9yZXEtPnNpemUsCj4gKwkJCQkodW5zaWduZWQgbG9u ZyopJmlvcmVxLT5kYXRhKSkKPiArCQkJCXJldHVybiAtRUlOVkFMOwo+ICsJCX0gZWxzZSB7Cj4g KwkJCXByaW50ayhLRVJOX0VSUiAiR1ZUOiBfaHZtX3Bpb19lbXVsYXRpb24KPiByZWFkIGRhdGFf cHRyICVseFxuIiwKPiArCQkJKGxvbmcpaW9yZXEtPmRhdGEpOwo+ICsJCQlnb3RvIGVycl9kYXRh X3B0cjsKPiArCQl9Cj4gKwl9IGVsc2Ugewo+ICsJCS8qIFBJTyBXUklURSAqLwo+ICsJCWlmICgh aW9yZXEtPmRhdGFfaXNfcHRyKSB7Cj4gKwkJCWlmICghdmd0X2h2bV93cml0ZV9jZmdfc3BhY2Uo dmd0LAo+ICsJCQkJaW9yZXEtPmFkZHIsCj4gKwkJCQlpb3JlcS0+c2l6ZSwKPiArCQkJCSh1bnNp Z25lZCBsb25nKWlvcmVxLT5kYXRhKSkKPiArCQkJCXJldHVybiAtRUlOVkFMOwo+ICsJCX0gZWxz ZSB7Cj4gKwkJCXByaW50ayhLRVJOX0VSUiAiR1ZUOiBfaHZtX3Bpb19lbXVsYXRpb24KPiB3cml0 ZSBkYXRhX3B0ciAlbHhcbiIsCj4gKwkJCShsb25nKWlvcmVxLT5kYXRhKTsKPiArCQkJZ290byBl cnJfZGF0YV9wdHI7Cj4gKwkJfQo+ICsJfQo+ICsJcmV0dXJuIDA7Cj4gK2Vycl9kYXRhX3B0cjoK PiArCS8qIFRoZSBkYXRhIHBvaW50ZXIgb2YgZW11bGF0aW9uIGlzIGd1ZXN0IHBoeXNpY2FsIGFk ZHJlc3MKPiArCcKgKiBzbyBmYXIsIHdoaWNoIGdvZXMgdG8gUWVtdSBlbXVsYXRpb24sIGJ1dCBo YXJkIGZvcgo+ICsJwqAqIEdWVCBkcml2ZXIgd2hpY2ggZG9lc24ndCBrbm93IGdwbl8yX21mbiB0 cmFuc2xhdGlvbi4KPiArCcKgKiBXZSBtYXkgYXNrIGh5cGVydmlzb3IgdG8gdXNlIG1mbiBmb3Ig R1ZUIGRyaXZlci4KPiArCcKgKiBXZSBtYXJrIGl0IGFzIHVuc3VwcG9ydGVkIGluIGNhc2UgZ3Vl c3QgcmVhbGx5IGl0Lgo+ICsJwqAqLwo+ICsJZ3Z0X2VycigiVk0oJWQpOiBVbnN1cHBvcnRlZCAl cyBkYXRhX3B0ciglbHgpXG4iLAo+ICsJCXZndC0+dm1faWQsIGlvcmVxLT5kaXIgPT0gSU9SRVFf UkVBRCA/ICJyZWFkIiA6Cj4gIndyaXRlIiwKPiArCQkobG9uZylpb3JlcS0+ZGF0YSk7Cj4gKwly ZXR1cm4gLUVJTlZBTDsKPiArfQo+ICsKPiArI2RlZmluZSBQQ0lfQkRGMihiLGRmKcKgwqAoKCgo YikgJiAweGZmKSA8PCA4KSB8ICgoZGYpICYgMHhmZikpCj4gKwo+ICtzdGF0aWMgaW50IHZndF9o dm1fZG9faW9yZXEoc3RydWN0IHZndF9kZXZpY2UgKnZndCwgc3RydWN0IGlvcmVxCj4gKmlvcmVx KQo+ICt7Cj4gKwlzdHJ1Y3QgcGd0X2RldmljZSAqcGRldiA9IHZndC0+cGRldjsKPiArCXN0cnVj dCBwY2lfZGV2ICpwY2lfZGV2ID0gcGRldi0+ZGV2X3ByaXYtPmRldi0+cGRldjsKPiArCXVpbnQ2 NF90IGJkZiA9IFBDSV9CREYyKHBjaV9kZXYtPmJ1cy0+bnVtYmVyLCBwY2lfZGV2LQo+ID5kZXZm bik7Cj4gKwo+ICsJLyogV2hlbiB1c2luZyBpb3JlcS1zZXJ2ZXIsIHNvbWV0aW1lcyBhbiBldmVu dCBjaGFubmFsCj4gKwnCoCogbm90aWZpY2F0aW9uIGlzIHJlY2VpdmVkIHdpdGggaW52YWxpZCBp b3JlcS4gRG9uJ3QKPiArCcKgKiBrbm93IHRoZSByb290IGNhdXNlLiBQdXQgdGhlIHdvcmthcm91 bmQgaGVyZS4KPiArCcKgKi8KPiArCWlmIChpb3JlcS0+c3RhdGUgPT0gU1RBVEVfSU9SRVFfTk9O RSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpZiAoaW9yZXEtPnR5cGUgPT0gSU9SRVFfVFlQRV9J TlZBTElEQVRFKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXN3aXRjaCAoaW9yZXEtPnR5cGUpIHsK PiArCQljYXNlIElPUkVRX1RZUEVfUENJX0NPTkZJRzoKPiArCQkvKiBIaWdoIDMyIGJpdCBvZiBp b3JlcS0+YWRkciBpcyBiZGYgKi8KPiArCQlpZiAoKGlvcmVxLT5hZGRyID4+IDMyKSAhPSBiZGYp IHsKPiArCQkJcHJpbnRrKEtFUk5fRVJSICJHVlQ6IFVuZXhwZWN0ZWQgUENJIERldiAlbHgKPiBl bXVsYXRpb25cbiIsCj4gKwkJCQkodW5zaWduZWQgbG9uZykgKGlvcmVxLT5hZGRyPj4zMikpOwo+ ICsJCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJCX0gZWxzZQo+ICsJCQkJcmV0dXJuIF9odm1fcGlv X2VtdWxhdGlvbih2Z3QsCj4gaW9yZXEpOwo+ICsJCQlicmVhazsKPiArCQljYXNlIElPUkVRX1RZ UEVfQ09QWToJLyogTU1JTyAqLwo+ICsJCQlyZXR1cm4gX2h2bV9tbWlvX2VtdWxhdGlvbih2Z3Qs IGlvcmVxKTsKPiArCQkJYnJlYWs7Cj4gKwkJZGVmYXVsdDoKPiArCQkJcHJpbnRrKEtFUk5fRVJS ICJHVlQ6IFVua25vd24gaW9yZXEgdHlwZSAleAo+IGFkZHIgJWxseCBzaXplICV1IHN0YXRlICV1 XG4iLAo+ICsJCQkJaW9yZXEtPnR5cGUsIGlvcmVxLT5hZGRyLCBpb3JlcS0KPiA+c2l6ZSwgaW9y ZXEtPnN0YXRlKTsKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgaW9yZXEgKnZndF9nZXRfaHZtX2lvcmVxKHN0cnVj dCB2Z3RfZGV2aWNlICp2Z3QsIGludAo+IHZjcHUpCj4gK3sKPiArCXN0cnVjdCBndnRfaHZtX2lu Zm8gKmluZm8gPSB2Z3QtPmh5cGVydmlzb3JfZGF0YTsKPiArCXJldHVybiAmKGluZm8tPmlvcGFn ZS0+dmNwdV9pb3JlcVt2Y3B1XSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmd0X2VtdWxhdGlv bl90aHJlYWQodm9pZCAqcHJpdikKPiArewo+ICsJc3RydWN0IHZndF9kZXZpY2UgKnZndCA9IChz dHJ1Y3Qgdmd0X2RldmljZSAqKXByaXY7Cj4gKwlzdHJ1Y3QgZ3Z0X2h2bV9pbmZvICppbmZvID0g dmd0LT5oeXBlcnZpc29yX2RhdGE7Cj4gKwo+ICsJaW50IHZjcHU7Cj4gKwlpbnQgbnJfdmNwdXMg PSBpbmZvLT5ucl92Y3B1Owo+ICsKPiArCXN0cnVjdCBpb3JlcSAqaW9yZXE7Cj4gKwlpbnQgaXJx LCByZXQ7Cj4gKwo+ICsJZ3Z0X2luZm8oInN0YXJ0IGt0aHJlYWQgZm9yIFZNJWRcbiIsIHZndC0+ dm1faWQpOwo+ICsKPiArCUFTU0VSVChpbmZvLT5ucl92Y3B1IDw9IE1BWF9IVk1fVkNQVVNfU1VQ UE9SVEVEKTsKPiArCj4gKwlzZXRfZnJlZXphYmxlKCk7Cj4gKwl3aGlsZSAoMSkgewo+ICsJCXJl dCA9IHdhaXRfZXZlbnRfZnJlZXphYmxlKGluZm8tPmlvX2V2ZW50X3dxLAo+ICsJCQlrdGhyZWFk X3Nob3VsZF9zdG9wKCkgfHwKPiArCQkJYml0bWFwX3dlaWdodChpbmZvLT5pb3JlcV9wZW5kaW5n LAo+IG5yX3ZjcHVzKSk7Cj4gKwo+ICsJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCj4gKwkJ CXJldHVybiAwOwo+ICsKPiArCQlpZiAocmV0KQo+ICsJCQlndnRfZXJyKCJFbXVsYXRpb24gdGhy ZWFkKCVkKSB3YWtlbiB1cCIKPiArCQkJCcKgImJ5IHVuZXhwZWN0ZWQgc2lnbmFsIVxuIiwgdmd0 LQo+ID52bV9pZCk7Cj4gKwo+ICsJCWZvciAodmNwdSA9IDA7IHZjcHUgPCBucl92Y3B1czsgdmNw dSsrKSB7Cj4gKwkJCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KHZjcHUsIGluZm8tCj4gPmlvcmVx X3BlbmRpbmcpKQo+ICsJCQkJY29udGludWU7Cj4gKwo+ICsJCQlpb3JlcSA9IHZndF9nZXRfaHZt X2lvcmVxKHZndCwgdmNwdSk7Cj4gKwo+ICsJCQlpZiAodmd0X2h2bV9kb19pb3JlcSh2Z3QsIGlv cmVxKSkgewo+ICsJCQkJeGVuX3BhdXNlX2RvbWFpbih2Z3QtPnZtX2lkKTsKPiArCQkJCXhlbl9z aHV0ZG93bl9kb21haW4odmd0LT52bV9pZCk7Cj4gKwkJCX0KPiArCj4gKwkJCWlvcmVxLT5zdGF0 ZSA9IFNUQVRFX0lPUkVTUF9SRUFEWTsKPiArCj4gKwkJCWlycSA9IGluZm8tPmV2dGNobl9pcnFb dmNwdV07Cj4gKwkJCW5vdGlmeV9yZW1vdGVfdmlhX2lycShpcnEpOwo+ICsJCX0KPiArCX0KPiAr Cj4gKwlCVUcoKTsgLyogSXQncyBhY3R1YWxseSBpbXBvc3NpYmxlIHRvIHJlYWNoIGhlcmUgKi8K PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgdmd0X3JhaXNlX2Vt dWxhdGlvbl9yZXF1ZXN0KHN0cnVjdCB2Z3RfZGV2aWNlCj4gKnZndCwKPiArCWludCB2Y3B1KQo+ ICt7Cj4gKwlzdHJ1Y3QgZ3Z0X2h2bV9pbmZvICppbmZvID0gdmd0LT5oeXBlcnZpc29yX2RhdGE7 Cj4gKwlzZXRfYml0KHZjcHUsIGluZm8tPmlvcmVxX3BlbmRpbmcpOwo+ICsJaWYgKHdhaXRxdWV1 ZV9hY3RpdmUoJmluZm8tPmlvX2V2ZW50X3dxKSkKPiArCQl3YWtlX3VwKCZpbmZvLT5pb19ldmVu dF93cSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCB2Z3RfaHZtX2lvX3JlcV9oYW5k bGVyKGludCBpcnEsIHZvaWQqIGRldikKPiArewo+ICsJc3RydWN0IHZndF9kZXZpY2UgKnZndDsK PiArCXN0cnVjdCBndnRfaHZtX2luZm8gKmluZm87Cj4gKwlpbnQgdmNwdTsKPiArCj4gKwl2Z3Qg PSAoc3RydWN0IHZndF9kZXZpY2UgKilkZXY7Cj4gKwlpbmZvID0gdmd0LT5oeXBlcnZpc29yX2Rh dGE7Cj4gKwo+ICsJZm9yKHZjcHU9MDsgdmNwdSA8IGluZm8tPm5yX3ZjcHU7IHZjcHUrKyl7Cj4g KwkJaWYoaW5mby0+ZXZ0Y2huX2lycVt2Y3B1XSA9PSBpcnEpCj4gKwkJCWJyZWFrOwo+ICsJfQo+ ICsJaWYgKHZjcHUgPT0gaW5mby0+bnJfdmNwdSl7Cj4gKwkJLypvcHBzLCBpcnEgaXMgbm90IHRo ZSByZWdpc3RlcmVkIG9uZSovCj4gKwkJZ3Z0X2luZm8oIlJlY2VpdmVkIGEgSU9SRVEgdy9vIHZj cHUgdGFyZ2V0XG4iKTsKPiArCQlndnRfaW5mbygiUG9zc2libGUgYSBmYWxzZSByZXF1ZXN0IGZy b20gZXZlbnQKPiBiaW5kaW5nXG4iKTsKPiArCQlyZXR1cm4gSVJRX05PTkU7Cj4gKwl9Cj4gKwo+ ICsJdmd0X3JhaXNlX2VtdWxhdGlvbl9yZXF1ZXN0KHZndCwgdmNwdSk7Cj4gKwo+ICsJcmV0dXJu IElSUV9IQU5ETEVEOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB4ZW5faHZtX2V4aXQoc3RydWN0 IHZndF9kZXZpY2UgKnZndCkKPiArewo+ICsJc3RydWN0IGd2dF9odm1faW5mbyAqaW5mbzsKPiAr CWludCB2Y3B1Owo+ICsKPiArCWluZm8gPSB2Z3QtPmh5cGVydmlzb3JfZGF0YTsKPiArCj4gKwlp ZiAoaW5mbyA9PSBOVUxMKQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAoaW5mby0+ZW11bGF0aW9u X3RocmVhZCAhPSBOVUxMKQo+ICsJCWt0aHJlYWRfc3RvcChpbmZvLT5lbXVsYXRpb25fdGhyZWFk KTsKPiArCj4gKwlpZiAoIWluZm8tPm5yX3ZjcHUgfHwgaW5mby0+ZXZ0Y2huX2lycSA9PSBOVUxM KQo+ICsJCWdvdG8gb3V0MTsKPiArCj4gKwlpZiAoaW5mby0+aW9zcnZfaWQgIT0gMCkKPiArCQlo dm1fZGVzdHJveV9pb3JlcXVlc3Rfc2VydmVyKHZndCk7Cj4gKwo+ICsJZm9yICh2Y3B1ID0gMDsg dmNwdSA8IGluZm8tPm5yX3ZjcHU7IHZjcHUrKyl7Cj4gKwkJaWYoaW5mby0+ZXZ0Y2huX2lycVt2 Y3B1XSA+PSAwKQo+ICsJCQl1bmJpbmRfZnJvbV9pcnFoYW5kbGVyKGluZm8tCj4gPmV2dGNobl9p cnFbdmNwdV0sIHZndCk7Cj4gKwl9Cj4gKwo+ICsJaWYgKGluZm8tPmlvcGFnZV92bWEgIT0gTlVM TCkKPiArCQl4ZW5fdW5tYXBfZG9tYWluX21mbl9yYW5nZV9pbl9rZXJuZWwoaW5mby0KPiA+aW9w YWdlX3ZtYSwgMSwgdmd0LT52bV9pZCk7Cj4gKwo+ICsJa2ZyZWUoaW5mby0+ZXZ0Y2huX2lycSk7 Cj4gKwo+ICtvdXQxOgo+ICsJdmd0X3ZtZW1fZGVzdHJveSh2Z3QpOwo+ICsJa2ZyZWUoaW5mbyk7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgeGVuX2h2bV9pbml0KHN0cnVjdCB2Z3RfZGV2aWNlICp2 Z3QpCj4gK3sKPiArCXN0cnVjdCBndnRfaHZtX2luZm8gKmluZm87Cj4gKwlpbnQgdmNwdSwgaXJx LCByYyA9IDA7Cj4gKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDsKPiArCXN0cnVjdCBwZ3Rf ZGV2aWNlICpwZGV2ID0gdmd0LT5wZGV2Owo+ICsJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBw ZGV2LT5kZXZfcHJpdi0+ZGV2LT5wZGV2Owo+ICsKPiArCWluZm8gPSBremFsbG9jKHNpemVvZihz dHJ1Y3QgZ3Z0X2h2bV9pbmZvKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoaW5mbyA9PSBOVUxMKQo+ ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCXZndC0+aHlwZXJ2aXNvcl9kYXRhID0gaW5mbzsK PiArCj4gKwlpbmZvLT5pb3BhZ2Vfdm1hID0geGVuX21hcF9pb3BhZ2Uodmd0KTsKPiArCWlmIChp bmZvLT5pb3BhZ2Vfdm1hID09IE5VTEwpIHsKPiArCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0 byBtYXAgSFZNIEkvTyBwYWdlIGZvcgo+IFZNJWRcbiIsIHZndC0+dm1faWQpOwo+ICsJCXJjID0g LUVGQVVMVDsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCWluZm8tPmlvcGFnZSA9IGluZm8tPmlv cGFnZV92bWEtPmFkZHI7Cj4gKwo+ICsJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+aW9fZXZl bnRfd3EpOwo+ICsKPiArCWluZm8tPm5yX3ZjcHUgPSB4ZW5fZ2V0X25yX3ZjcHUodmd0LT52bV9p ZCk7Cj4gKwlBU1NFUlQoaW5mby0+bnJfdmNwdSA+IDApOwo+ICsJQVNTRVJUKGluZm8tPm5yX3Zj cHUgPD0gTUFYX0hWTV9WQ1BVU19TVVBQT1JURUQpOwo+ICsKPiArCWluZm8tPmV2dGNobl9pcnEg PSBrbWFsbG9jKGluZm8tPm5yX3ZjcHUgKiBzaXplb2YoaW50KSwKPiBHRlBfS0VSTkVMKTsKPiAr CWlmIChpbmZvLT5ldnRjaG5faXJxID09IE5VTEwpewo+ICsJCXJjID0gLUVOT01FTTsKPiArCQln b3RvIGVycjsKPiArCX0KPiArCWZvciggdmNwdSA9IDA7IHZjcHUgPCBpbmZvLT5ucl92Y3B1OyB2 Y3B1KysgKQo+ICsJCWluZm8tPmV2dGNobl9pcnFbdmNwdV0gPSAtMTsKPiArCj4gKwlyYyA9IGh2 bV9tYXBfcGNpZGV2X3RvX2lvcmVxX3NlcnZlcih2Z3QsIFBDSV9CREYyKHBjaV9kZXYtCj4gPmJ1 cy0+bnVtYmVyLCBwY2lfZGV2LT5kZXZmbikpOwo+ICsJaWYgKHJjIDwgMCkKPiArCQlnb3RvIGVy cjsKPiArCXJjID0gaHZtX3RvZ2dsZV9pb3JlcXVlc3Rfc2VydmVyKHZndCwgMSk7Cj4gKwlpZiAo cmMgPCAwKQo+ICsJCWdvdG8gZXJyOwo+ICsKPiArCWZvciAodmNwdSA9IDA7IHZjcHUgPCBpbmZv LT5ucl92Y3B1OyB2Y3B1Kyspewo+ICsJCWlycSA9IGJpbmRfaW50ZXJkb21haW5fZXZ0Y2huX3Rv X2lycWhhbmRsZXIoIHZndC0KPiA+dm1faWQsCj4gKwkJCQlpbmZvLT5pb3BhZ2UtCj4gPnZjcHVf aW9yZXFbdmNwdV0udnBfZXBvcnQsCj4gKwkJCQl2Z3RfaHZtX2lvX3JlcV9oYW5kbGVyLCAwLAo+ ICsJCQkJInZndCIsIHZndCApOwo+ICsJCWlmICggaXJxIDwgMCApewo+ICsJCQlyYyA9IGlycTsK PiArCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gYmluZCBldmVudAo+IGNoYW5ubGUgZm9y IHZndCBIVk0gSU8gaGFuZGxlciwgcmM9JWRcbiIsIHJjKTsKPiArCQkJZ290byBlcnI7Cj4gKwkJ fQo+ICsJCWluZm8tPmV2dGNobl9pcnFbdmNwdV0gPSBpcnE7Cj4gKwl9Cj4gKwo+ICsJdGhyZWFk ID0ga3RocmVhZF9ydW4odmd0X2VtdWxhdGlvbl90aHJlYWQsIHZndCwKPiArCQkJInZndF9lbXVs YXRpb246JWQiLCB2Z3QtPnZtX2lkKTsKPiArCWlmKElTX0VSUih0aHJlYWQpKQo+ICsJCWdvdG8g ZXJyOwo+ICsJaW5mby0+ZW11bGF0aW9uX3RocmVhZCA9IHRocmVhZDsKPiArCj4gKwlyZXR1cm4g MDsKPiArCj4gK2VycjoKPiArCXhlbl9odm1fZXhpdCh2Z3QpOwo+ICsJcmV0dXJuIHJjOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCAqeGVuX2dwYV90b192YShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0 LCB1bnNpZ25lZCBsb25nCj4gZ3BhKQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIGJ1Y2tfaW5kZXgs IGJ1Y2tfNGtfaW5kZXg7Cj4gKwlzdHJ1Y3QgZ3Z0X2h2bV9pbmZvICppbmZvID0gdmd0LT5oeXBl cnZpc29yX2RhdGE7Cj4gKwo+ICsJaWYgKCF2Z3QtPnZtX2lkKQo+ICsJCXJldHVybiAoY2hhciop eGVuX21mbl90b192aXJ0KGdwYT4+UEFHRV9TSElGVCkgKwo+IChncGEgJiAoUEFHRV9TSVpFLTEp KTsKPiArCS8qCj4gKwnCoCogQXQgdGhlIGJlZ2lubmluZyBvZiBfaHZtX21taW9fZW11bGF0aW9u KCksIHdlIGFscmVhZHkKPiBpbml0aWFsaXplCj4gKwnCoCogaW5mby0+dm1lbV92bWEgYW5kIGlu Zm8tPnZtZW1fdm1hX2xvd18xbWIuCj4gKwnCoCovCj4gKwlBU1NFUlQoaW5mby0+dm1lbV92bWEg IT0gTlVMTCAmJiBpbmZvLT52bWVtX3ZtYV9sb3dfMW1iICE9Cj4gTlVMTCk7Cj4gKwo+ICsJLyog aGFuZGxlIHRoZSBsb3cgMU1CIG1lbW9yeSAqLwo+ICsJaWYgKGdwYSA8IFZNRU1fMU1CKSB7Cj4g KwkJYnVja19pbmRleCA9IGdwYSA+PiBQQUdFX1NISUZUOwo+ICsJCWlmICghaW5mby0+dm1lbV92 bWFfbG93XzFtYltidWNrX2luZGV4XSkKPiArCQkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJCXJldHVy biAoY2hhciopKGluZm8tPnZtZW1fdm1hX2xvd18xbWJbYnVja19pbmRleF0tCj4gPmFkZHIpICsK PiArCQkJKGdwYSAmIH5QQUdFX01BU0spOwo+ICsKPiArCX0KPiArCj4gKwkvKiBoYW5kbGUgdGhl ID4xTUIgbWVtb3J5ICovCj4gKwlidWNrX2luZGV4ID0gZ3BhID4+IFZNRU1fQlVDS19TSElGVDsK PiArCj4gKwlpZiAoIWluZm8tPnZtZW1fdm1hW2J1Y2tfaW5kZXhdKSB7Cj4gKwkJYnVja180a19p bmRleCA9IGdwYSA+PiBQQUdFX1NISUZUOwo+ICsJCWlmICghaW5mby0+dm1lbV92bWFfNGtbYnVj a180a19pbmRleF0pIHsKPiArCQkJaWYgKGJ1Y2tfNGtfaW5kZXggPiB2Z3QtPmxvd19tZW1fbWF4 X2dwZm4pCj4gKwkJCQlndnRfZXJyKCJHVlQgZmFpbGVkIHRvIG1hcAo+IGdwYT0weCVseD9cbiIs IGdwYSk7Cj4gKwkJCXJldHVybiBOVUxMOwo+ICsJCX0KPiArCj4gKwkJcmV0dXJuIChjaGFyKiko aW5mby0+dm1lbV92bWFfNGtbYnVja180a19pbmRleF0tCj4gPmFkZHIpICsKPiArCQkJKGdwYSAm IH5QQUdFX01BU0spOwo+ICsJfQo+ICsKPiArCXJldHVybiAoY2hhciopKGluZm8tPnZtZW1fdm1h W2J1Y2tfaW5kZXhdLT5hZGRyKSArCj4gKwkJKGdwYSAmIChWTUVNX0JVQ0tfU0laRSAtMSkpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCB4ZW5fcmVhZF92YShzdHJ1Y3Qgdmd0X2RldmljZSAqdmd0 LCB2b2lkICp2YSwgdm9pZCAqdmFsLAo+ICsJCWludCBsZW4sIGludCBhdG9taWMpCj4gK3sKPiAr CW1lbWNweSh2YWwsIHZhLCBsZW4pOwo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtz dGF0aWMgYm9vbCB4ZW5fd3JpdGVfdmEoc3RydWN0IHZndF9kZXZpY2UgKnZndCwgdm9pZCAqdmEs IHZvaWQKPiAqdmFsLAo+ICsJCWludCBsZW4sIGludCBhdG9taWMpCj4gK3sKPiArCW1lbWNweSh2 YSwgdmFsLCBsZW4pOwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3Qg Z3Z0X2tlcm5lbF9kbSB4ZW5ndF9rZG0gPSB7Cj4gKwkubmFtZSA9ICJ4ZW5ndF9rZG0iLAo+ICsJ LmcybV9wZm4gPSB4ZW5fZzJtX3BmbiwKPiArCS5wYXVzZV9kb21haW4gPSB4ZW5fcGF1c2VfZG9t YWluLAo+ICsJLnNodXRkb3duX2RvbWFpbiA9IHhlbl9zaHV0ZG93bl9kb21haW4sCj4gKwkubWFw X21mbl90b19ncGZuID0geGVuX21hcF9tZm5fdG9fZ3BmbiwKPiArCS5zZXRfdHJhcF9hcmVhID0g eGVuX3NldF90cmFwX2FyZWEsCj4gKwkuc2V0X3dwX3BhZ2VzID0geGVuX3NldF9ndWVzdF9wYWdl X3dyaXRlcHJvdGVjdGlvbiwKPiArCS51bnNldF93cF9wYWdlcyA9IHhlbl9jbGVhcl9ndWVzdF9w YWdlX3dyaXRlcHJvdGVjdGlvbiwKPiArCS5kZXRlY3RfaG9zdCA9IHhlbl9kZXRlY3RfaG9zdCwK PiArCS5mcm9tX3ZpcnRfdG9fbWZuID0geGVuX3ZpcnRfdG9fbWZuLAo+ICsJLmZyb21fbWZuX3Rv X3ZpcnQgPSB4ZW5fbWZuX3RvX3ZpcnQsCj4gKwkuaW5qZWN0X21zaSA9IHhlbl9pbmplY3RfbXNp LAo+ICsJLmh2bV9pbml0ID0geGVuX2h2bV9pbml0LAo+ICsJLmh2bV9leGl0ID0geGVuX2h2bV9l eGl0LAo+ICsJLmdwYV90b192YSA9IHhlbl9ncGFfdG9fdmEsCj4gKwkucmVhZF92YSA9IHhlbl9y ZWFkX3ZhLAo+ICsJLndyaXRlX3ZhID0geGVuX3dyaXRlX3ZhLAo+ICt9Owo+ICtFWFBPUlRfU1lN Qk9MKHhlbmd0X2tkbSk7Cj4gKwo+ICtzdGF0aWMgaW50IF9faW5pdCB4ZW5ndF9pbml0KHZvaWQp Cj4gK3sKPiArwqDCoMKgwqDCoMKgwqBpZiAoIXhlbl9pbml0aWFsX2RvbWFpbigpKQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZBTDsKPiArwqDCoMKgwqDCoMKg wqBwcmludGsoS0VSTl9JTkZPICJ4ZW5ndDogbG9hZGVkXG4iKTsKPiArwqDCoMKgwqDCoMKgwqBy ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgX19leGl0IHhlbmd0X2V4aXQodm9pZCkK PiArewo+ICsJcHJpbnRrKEtFUk5fSU5GTyAieGVuZ3Q6IHVubG9hZGVkXG4iKTsKPiArfQo+ICsK PiArbW9kdWxlX2luaXQoeGVuZ3RfaW5pdCk7Cj4gK21vZHVsZV9leGl0KHhlbmd0X2V4aXQpOwo+ IGRpZmYgLS1naXQgYS9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaHZtL2h2bV9vcC5oCj4gYi9pbmNs dWRlL3hlbi9pbnRlcmZhY2UvaHZtL2h2bV9vcC5oCj4gaW5kZXggOTU2YTA0Ni4uMjA1NzdjYyAx MDA2NDQKPiAtLS0gYS9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaHZtL2h2bV9vcC5oCj4gKysrIGIv aW5jbHVkZS94ZW4vaW50ZXJmYWNlL2h2bS9odm1fb3AuaAo+IEBAIC0yMSw2ICsyMSw4IEBACj4g wqAjaWZuZGVmIF9fWEVOX1BVQkxJQ19IVk1fSFZNX09QX0hfXwo+IMKgI2RlZmluZSBfX1hFTl9Q VUJMSUNfSFZNX0hWTV9PUF9IX18KPiDCoAo+ICsjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9ldmVu dF9jaGFubmVsLmg+Cj4gKwo+IMKgLyogR2V0L3NldCBzdWJjb21tYW5kczogdGhlIHNlY29uZCBh cmd1bWVudCBvZiB0aGUgaHlwZXJjYWxsIGlzIGEKPiDCoCAqIHBvaW50ZXIgdG8gYSB4ZW5faHZt X3BhcmFtIHN0cnVjdC4gKi8KPiDCoCNkZWZpbmUgSFZNT1Bfc2V0X3BhcmFtwqDCoMKgwqDCoMKg wqDCoMKgwqDCoDAKPiBAQCAtNDIsMTIgKzQ0LDQxIEBAIHN0cnVjdCB4ZW5faHZtX3BhZ2V0YWJs ZV9keWluZyB7Cj4gwqB9Owo+IMKgdHlwZWRlZiBzdHJ1Y3QgeGVuX2h2bV9wYWdldGFibGVfZHlp bmcgeGVuX2h2bV9wYWdldGFibGVfZHlpbmdfdDsKPiDCoERFRklORV9HVUVTVF9IQU5ETEVfU1RS VUNUKHhlbl9odm1fcGFnZXRhYmxlX2R5aW5nX3QpOwo+IC3CoAo+ICsKPiArLyogTVNJIGluamVj dGlvbiBmb3IgZW11bGF0ZWQgZGV2aWNlcyAqLwo+ICsjZGVmaW5lIEhWTU9QX2luamVjdF9tc2nC oMKgwqDCoMKgwqDCoMKgwqAxNgo+ICtzdHJ1Y3QgeGVuX2h2bV9pbmplY3RfbXNpIHsKPiArwqDC oMKgwqAvKiBEb21haW4gdG8gYmUgaW5qZWN0ZWQgKi8KPiArwqDCoMKgwqBkb21pZF90wqDCoMKg ZG9taWQ7Cj4gK8KgwqDCoMKgLyogRGF0YSAtLSBsb3dlciAzMiBiaXRzICovCj4gK8KgwqDCoMKg dWludDMyX3TCoMKgZGF0YTsKPiArwqDCoMKgwqAvKiBBZGRyZXNzICgweGZlZXh4eHh4KSAqLwo+ ICvCoMKgwqDCoHVpbnQ2NF90wqDCoGFkZHI7Cj4gK307Cj4gK3R5cGVkZWYgc3RydWN0IHhlbl9o dm1faW5qZWN0X21zaSB4ZW5faHZtX2luamVjdF9tc2lfdDsKPiArREVGSU5FX0dVRVNUX0hBTkRM RV9TVFJVQ1QoeGVuX2h2bV9pbmplY3RfbXNpX3QpOwo+ICsKPiDCoGVudW0gaHZtbWVtX3R5cGVf dCB7Cj4gwqDCoMKgwqDCoEhWTU1FTV9yYW1fcncswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAv KiBOb3JtYWwgcmVhZC93cml0ZSBndWVzdCBSQU0gKi8KPiDCoMKgwqDCoMKgSFZNTUVNX3JhbV9y byzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIFJlYWQtb25seTsgd3JpdGVzIGFyZSBkaXNj YXJkZWQgKi8KPiDCoMKgwqDCoMKgSFZNTUVNX21taW9fZG0swqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgLyogUmVhZHMgYW5kIHdyaXRlIGdvIHRvIHRoZSBkZXZpY2UKPiBtb2RlbCAqLwo+ICvCoMKg wqDCoEhWTU1FTV9tbWlvX3dyaXRlX2RtwqDCoMKgwqDCoMKgwqAvKiBSZWFkLW9ubHk7IHdyaXRl cyBnbyB0byB0aGUgZGV2aWNlCj4gbW9kZWwgKi8KPiArfTsKPiArCj4gKyNkZWZpbmUgSFZNT1Bf c2V0X21lbV90eXBlwqDCoMKgwqA4Cj4gKy8qIE5vdGlmeSB0aGF0IGEgcmVnaW9uIG9mIG1lbW9y eSBpcyB0byBiZSB0cmVhdGVkIGluIGEgc3BlY2lmaWMKPiB3YXkuICovCj4gK3N0cnVjdCB4ZW5f aHZtX3NldF9tZW1fdHlwZSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqAvKiBEb21haW4gdG8gYmUgdXBk YXRlZC4gKi8KPiArwqDCoMKgwqDCoMKgwqDCoGRvbWlkX3QgZG9taWQ7Cj4gK8KgwqDCoMKgwqDC oMKgwqAvKiBNZW1vcnkgdHlwZSAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgdWludDE2X3QgaHZtbWVt X3R5cGU7Cj4gK8KgwqDCoMKgwqDCoMKgwqAvKiBOdW1iZXIgb2YgcGFnZXMuICovCj4gK8KgwqDC oMKgwqDCoMKgwqB1aW50MzJfdCBucjsKPiArwqDCoMKgwqDCoMKgwqDCoC8qIEZpcnN0IHBmbi4g Ki8KPiArwqDCoMKgwqDCoMKgwqDCoHVpbnQ2NF90IGZpcnN0X3BmbjsKPiDCoH07Cj4gK3R5cGVk ZWYgc3RydWN0IHhlbl9odm1fc2V0X21lbV90eXBlIHhlbl9odm1fc2V0X21lbV90eXBlX3Q7Cj4g K0RFRklORV9HVUVTVF9IQU5ETEVfU1RSVUNUKHhlbl9odm1fc2V0X21lbV90eXBlX3QpOwo+IMKg Cj4gwqAjZGVmaW5lIEhWTU9QX2dldF9tZW1fdHlwZcKgwqDCoMKgMTUKPiDCoC8qIFJldHVybiBo dm1tZW1fdHlwZV90IGZvciB0aGUgc3BlY2lmaWVkIHBmbi4gKi8KPiBAQCAtNjIsNCArOTMsMTQ4 IEBAIHN0cnVjdCB4ZW5faHZtX2dldF9tZW1fdHlwZSB7Cj4gwqB9Owo+IMKgREVGSU5FX0dVRVNU X0hBTkRMRV9TVFJVQ1QoeGVuX2h2bV9nZXRfbWVtX3R5cGUpOwo+IMKgCj4gKyNkZWZpbmUgSFZN T1Bfdmd0X3dwX3BhZ2VzwqDCoMKgwqDCoMKgwqDCoMKgMjfCoMKgLyogd3JpdGVwcm90ZWN0aW9u IHRvIGd1ZXN0Cj4gcGFnZXMgKi8KPiArI2RlZmluZSBNQVhfV1BfQkFUQ0hfUEFHRVPCoMKgwqDC oMKgwqDCoMKgwqAxMjgKPiArc3RydWN0IHhlbl9odm1fdmd0X3dwX3BhZ2VzIHsKPiArCXVpbnQx Nl90IGRvbWlkOwo+ICsJdWludDE2X3Qgc2V0O8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIDE6 IHNldCBXUCwgMDogcmVtb3ZlIFdQICovCj4gKwl1aW50MTZfdCBucl9wYWdlczsKPiArCXVuc2ln bmVkIGxvbmfCoMKgd3BfcGFnZXNbTUFYX1dQX0JBVENIX1BBR0VTXTsKPiArfTsKPiArdHlwZWRl ZiBzdHJ1Y3QgeGVuX2h2bV92Z3Rfd3BfcGFnZXMgeGVuX2h2bV92Z3Rfd3BfcGFnZXNfdDsKPiAr Cj4gKy8qCj4gKyAqIElPUkVRIFNlcnZlcnMKPiArICoKPiArICogVGhlIGludGVyZmFjZSBiZXR3 ZWVuIGFuIEkvTyBlbXVsYXRvciBhbiBYZW4gaXMgY2FsbGVkIGFuIElPUkVRCj4gU2VydmVyLgo+ ICsgKiBBIGRvbWFpbiBzdXBwb3J0cyBhIHNpbmdsZSAnbGVnYWN5JyBJT1JFUSBTZXJ2ZXIgd2hp Y2ggaXMKPiBpbnN0YW50aWF0ZWQgaWYKPiArICogcGFyYW1ldGVyLi4uCj4gKyAqCj4gKyAqIEhW TV9QQVJBTV9JT1JFUV9QRk4gaXMgcmVhZCAodG8gZ2V0IHRoZSBnbWZuIGNvbnRhaW5pbmcgdGhl Cj4gc3luY2hyb25vdXMKPiArICogaW9yZXEgc3RydWN0dXJlcyksIG9yLi4uCj4gKyAqIEhWTV9Q QVJBTV9CVUZJT1JFUV9QRk4gaXMgcmVhZCAodG8gZ2V0IHRoZSBnbWZuIGNvbnRhaW5pbmcgdGhl Cj4gYnVmZmVyZWQKPiArICogaW9yZXEgcmluZyksIG9yLi4uCj4gKyAqIEhWTV9QQVJBTV9CVUZJ T1JFUV9FVlRDSE4gaXMgcmVhZCAodG8gZ2V0IHRoZSBldmVudCBjaGFubmVsIHRoYXQKPiBYZW4g dXNlcwo+ICsgKiB0byByZXF1ZXN0IGJ1ZmZlcmVkIEkvTyBlbXVsYXRpb24pLgo+ICsgKgo+ICsg KiBUaGUgZm9sbG93aW5nIGh5cGVyY2FsbHMgZmFjaWxpdGF0ZSB0aGUgY3JlYXRpb24gb2YgSU9S RVEgU2VydmVycwo+IGZvcgo+ICsgKiAnc2Vjb25kYXJ5JyBlbXVsYXRvcnMgd2hpY2ggYXJlIGlu dm9rZWQgdG8gaW1wbGVtZW50IHBvcnQgSS9PLAo+IG1lbW9yeSwgb3IKPiArICogUENJIGNvbmZp ZyBzcGFjZSByYW5nZXMgd2hpY2ggdGhleSBleHBsaWNpdGx5IHJlZ2lzdGVyLgo+ICsgKi8KPiAr dHlwZWRlZiB1aW50MTZfdCBpb3NlcnZpZF90Owo+ICsKPiArLyoKPiArICogSFZNT1BfY3JlYXRl X2lvcmVxX3NlcnZlcjogSW5zdGFudGlhdGUgYSBuZXcgSU9SRVEgU2VydmVyIGZvciBhCj4gc2Vj b25kYXJ5Cj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBlbXVsYXRvciBzZXJ2aWNpbmcgZG9tYWluIDxkb21pZD4uCj4gKyAqCj4gKyAq IFRoZSA8aWQ+IGhhbmRlZCBiYWNrIGlzIHVuaXF1ZSBmb3IgPGRvbWlkPi4gSWYgPGhhbmRsZV9i dWZpb3JlcT4KPiBpcyB6ZXJvCj4gKyAqIHRoZSBidWZmZXJlZCBpb3JlcSByaW5nIHdpbGwgbm90 IGJlIGFsbG9jYXRlZCBhbmQgaGVuY2UgYWxsCj4gZW11bGF0aW9uCj4gKyAqIHJlcXVlc3RlcyB0 byB0aGlzIHNlcnZlciB3aWxsIGJlIHN5bmNocm9ub3VzLgo+ICsgKi8KPiArI2RlZmluZSBIVk1P UF9jcmVhdGVfaW9yZXFfc2VydmVyIDE3Cj4gK3N0cnVjdCB4ZW5faHZtX2NyZWF0ZV9pb3JlcV9z ZXJ2ZXIgewo+ICvCoMKgwqDCoGRvbWlkX3QgZG9taWQ7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8q IElOIC0gZG9tYWluIHRvIGJlIHNlcnZpY2VkICovCj4gK8KgwqDCoMKgdWludDhfdCBoYW5kbGVf YnVmaW9yZXE7IC8qIElOIC0gc2hvdWxkIHNlcnZlciBoYW5kbGUgYnVmZmVyZWQKPiBpb3JlcXMg Ki8KPiArwqDCoMKgwqBpb3NlcnZpZF90IGlkO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBPVVQg LSBzZXJ2ZXIgaWQgKi8KPiArfTsKPiArdHlwZWRlZiBzdHJ1Y3QgeGVuX2h2bV9jcmVhdGVfaW9y ZXFfc2VydmVyCj4geGVuX2h2bV9jcmVhdGVfaW9yZXFfc2VydmVyX3Q7Cj4gK0RFRklORV9HVUVT VF9IQU5ETEVfU1RSVUNUKHhlbl9odm1fY3JlYXRlX2lvcmVxX3NlcnZlcl90KTsKPiArCj4gKy8q Cj4gKyAqIEhWTU9QX2dldF9pb3JlcV9zZXJ2ZXJfaW5mbzogR2V0IGFsbCB0aGUgaW5mb3JtYXRp b24gbmVjZXNzYXJ5IHRvCj4gYWNjZXNzCj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgSU9SRVEgU2VydmVyIDxpZD4uCj4gKyAq Cj4gKyAqIFRoZSBlbXVsYXRvciBuZWVkcyB0byBtYXAgdGhlIHN5bmNocm9ub3VzIGlvcmVxIHN0 cnVjdHVyZXMgYW5kCj4gYnVmZmVyZWQKPiArICogaW9yZXEgcmluZyAoaWYgaXQgZXhpc3RzKSB0 aGF0IFhlbiB1c2VzIHRvIHJlcXVlc3QgZW11bGF0aW9uLgo+IFRoZXNlIGFyZQo+ICsgKiBob3N0 ZWQgaW4gZG9tYWluIDxkb21pZD4ncyBnbWZucyA8aW9yZXFfcGZuPiBhbmQgPGJ1ZmlvcmVxX3Bm bj4KPiArICogcmVzcGVjdGl2ZWx5LiBJbiBhZGRpdGlvbiwgaWYgdGhlIElPUkVRIFNlcnZlciBp cyBoYW5kbGluZwo+IGJ1ZmZlcmVkCj4gKyAqIGVtdWxhdGlvbiByZXF1ZXN0cywgdGhlIGVtdWxh dG9yIG5lZWRzIHRvIGJpbmQgdG8gZXZlbnQgY2hhbm5lbAo+ICsgKiA8YnVmaW9yZXFfcG9ydD4g dG8gbGlzdGVuIGZvciB0aGVtLiAoVGhlIGV2ZW50IGNoYW5uZWxzIHVzZWQgZm9yCj4gKyAqIHN5 bmNocm9ub3VzIGVtdWxhdGlvbiByZXF1ZXN0cyBhcmUgc3BlY2lmaWVkIGluIHRoZSBwZXItQ1BV IGlvcmVxCj4gKyAqIHN0cnVjdHVyZXMgaW4gPGlvcmVxX3Bmbj4pLgo+ICsgKiBJZiB0aGUgSU9S RVEgU2VydmVyIGlzIG5vdCBoYW5kbGluZyBidWZmZXJlZCBlbXVsYXRpb24gcmVxdWVzdHMKPiB0 aGVuIHRoZQo+ICsgKiB2YWx1ZXMgaGFuZGVkIGJhY2sgaW4gPGJ1ZmlvcmVxX3Bmbj4gYW5kIDxi dWZpb3JlcV9wb3J0PiB3aWxsCj4gYm90aCBiZSAwLgo+ICsgKi8KPiArI2RlZmluZSBIVk1PUF9n ZXRfaW9yZXFfc2VydmVyX2luZm8gMTgKPiArc3RydWN0IHhlbl9odm1fZ2V0X2lvcmVxX3NlcnZl cl9pbmZvIHsKPiArwqDCoMKgwqBkb21pZF90IGRvbWlkO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAvKiBJTiAtIGRvbWFpbiB0byBiZSBzZXJ2aWNlZCAqLwo+ICvCoMKgwqDCoGlv c2VydmlkX3QgaWQ7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIElOIC0gc2Vy dmVyIGlkICovCj4gK8KgwqDCoMKgZXZ0Y2huX3BvcnRfdCBidWZpb3JlcV9wb3J0O8KgwqDCoC8q IE9VVCAtIGJ1ZmZlcmVkIGlvcmVxIHBvcnQgKi8KPiArwqDCoMKgwqB1aW50NjRfdCBpb3JlcV9w Zm47wqDCoMKgwqAvKiBPVVQgLSBzeW5jIGlvcmVxIHBmbiAqLwo+ICvCoMKgwqDCoHVpbnQ2NF90 IGJ1ZmlvcmVxX3BmbjsgLyogT1VUIC0gYnVmZmVyZWQgaW9yZXEgcGZuICovCj4gK307Cj4gK3R5 cGVkZWYgc3RydWN0IHhlbl9odm1fZ2V0X2lvcmVxX3NlcnZlcl9pbmZvCj4geGVuX2h2bV9nZXRf aW9yZXFfc2VydmVyX2luZm9fdDsKPiArREVGSU5FX0dVRVNUX0hBTkRMRV9TVFJVQ1QoeGVuX2h2 bV9nZXRfaW9yZXFfc2VydmVyX2luZm9fdCk7Cj4gKwo+ICsvKgo+ICsgKiBIVk1fbWFwX2lvX3Jh bmdlX3RvX2lvcmVxX3NlcnZlcjogUmVnaXN0ZXIgYW4gSS9PIHJhbmdlIG9mIGRvbWFpbgo+IDxk b21pZD4KPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZm9yIGVtdWxhdGlvbiBieSB0aGUgY2xpZW50IG9mCj4g SU9SRVEKPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgU2VydmVyIDxpZD4KPiArICogSFZNX3VubWFwX2lvX3Jh bmdlX2Zyb21faW9yZXFfc2VydmVyOiBEZXJlZ2lzdGVyIGFuIEkvTyByYW5nZSBvZgo+IDxkb21p ZD4KPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmb3IgZW11bGF0aW9uIGJ5IHRoZSBjbGllbnQK PiBvZiBJT1JFUQo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFNlcnZlciA8aWQ+Cj4gKyAqCj4g KyAqIFRoZXJlIGFyZSB0aHJlZSB0eXBlcyBvZiBJL08gdGhhdCBjYW4gYmUgZW11bGF0ZWQ6IHBv cnQgSS9PLAo+IG1lbW9yeSBhY2Nlc3Nlcwo+ICsgKiBhbmQgUENJIGNvbmZpZyBzcGFjZSBhY2Nl c3Nlcy4gVGhlIDx0eXBlPiBmaWVsZCBkZW5vdGVzIHdoaWNoCj4gdHlwZSBvZiByYW5nZQo+ICsg KiB0aGUgPHN0YXJ0PiBhbmQgPGVuZD4gKGluY2x1c2l2ZSkgZmllbGRzIGFyZSBzcGVjaWZ5aW5n Lgo+ICsgKiBQQ0kgY29uZmlnIHNwYWNlIHJhbmdlcyBhcmUgc3BlY2lmaWVkIGJ5Cj4gc2VnbWVu dC9idXMvZGV2aWNlL2Z1bmN0aW9uIHZhbHVlcwo+ICsgKiB3aGljaCBzaG91bGQgYmUgZW5jb2Rl ZCB1c2luZyB0aGUgSFZNT1BfUENJX1NCREYgaGVscGVyIG1hY3JvCj4gYmVsb3cuCj4gKyAqCj4g KyAqIE5PVEU6IHVubGVzcyBhbiBlbXVsYXRpb24gcmVxdWVzdCBmYWxscyBlbnRpcmVseSB3aXRo aW4gYSByYW5nZQo+IG1hcHBlZAo+ICsgKiBieSBhIHNlY29uZGFyeSBlbXVsYXRvciwgaXQgd2ls bCBub3QgYmUgcGFzc2VkIHRvIHRoYXQgZW11bGF0b3IuCj4gKyAqLwo+ICsjZGVmaW5lIEhWTU9Q X21hcF9pb19yYW5nZV90b19pb3JlcV9zZXJ2ZXIgMTkKPiArI2RlZmluZSBIVk1PUF91bm1hcF9p b19yYW5nZV9mcm9tX2lvcmVxX3NlcnZlciAyMAo+ICtzdHJ1Y3QgeGVuX2h2bV9pb19yYW5nZSB7 Cj4gK8KgwqDCoMKgZG9taWRfdCBkb21pZDvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAv KiBJTiAtIGRvbWFpbiB0byBiZSBzZXJ2aWNlZCAqLwo+ICvCoMKgwqDCoGlvc2VydmlkX3QgaWQ7 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogSU4gLSBzZXJ2ZXIgaWQgKi8KPiArwqDC oMKgwqB1aW50MzJfdCB0eXBlO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIElOIC0g dHlwZSBvZiByYW5nZSAqLwo+ICsjIGRlZmluZSBIVk1PUF9JT19SQU5HRV9QT1JUwqDCoMKgMCAv KiBJL08gcG9ydCByYW5nZSAqLwo+ICsjIGRlZmluZSBIVk1PUF9JT19SQU5HRV9NRU1PUlkgMSAv KiBNTUlPIHJhbmdlICovCj4gKyMgZGVmaW5lIEhWTU9QX0lPX1JBTkdFX1BDScKgwqDCoMKgMiAv KiBQQ0kgc2VnbWVudC9idXMvZGV2L2Z1bmMgcmFuZ2UKPiAqLwo+ICvCoMKgwqDCoHVpbnQ2NF90 IHN0YXJ0LCBlbmQ7IC8qIElOIC0gaW5jbHVzaXZlIHN0YXJ0IGFuZCBlbmQgb2YgcmFuZ2UgKi8K PiArfTsKPiArdHlwZWRlZiBzdHJ1Y3QgeGVuX2h2bV9pb19yYW5nZSB4ZW5faHZtX2lvX3Jhbmdl X3Q7Cj4gK0RFRklORV9HVUVTVF9IQU5ETEVfU1RSVUNUKHhlbl9odm1faW9fcmFuZ2VfdCk7Cj4g Kwo+ICsjZGVmaW5lIEhWTU9QX1BDSV9TQkRGKHMsYixkLGYpwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoFwKPiArwqDCoMKgwqDCoMKgwqAoKCgocykgJiAweGZmZmYpIDw8IDE2KSB8 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gK8KgwqDCoMKgwqDCoMKg wqAoKChiKSAmIDB4ZmYpIDw8IDgpIHzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoFwKPiArwqDCoMKgwqDCoMKgwqDCoCgoKGQpICYgMHgxZikgPDwgMykgfMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ICvCoMKgwqDCoMKgwqDC oMKgKChmKSAmIDB4MDcpKQo+ICsKPiArLyoKPiArICogSFZNT1BfZGVzdHJveV9pb3JlcV9zZXJ2 ZXI6IERlc3Ryb3kgdGhlIElPUkVRIFNlcnZlciA8aWQ+Cj4gc2VydmljaW5nIGRvbWFpbgo+ICsg KsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqA8ZG9taWQ+Lgo+ICsgKgo+ICsgKiBBbnkgcmVnaXN0ZXJlZCBJL08gcmFuZ2VzIHdpbGwgYmUg YXV0b21hdGljYWxseSBkZXJlZ2lzdGVyZWQuCj4gKyAqLwo+ICsjZGVmaW5lIEhWTU9QX2Rlc3Ry b3lfaW9yZXFfc2VydmVyIDIxCj4gK3N0cnVjdCB4ZW5faHZtX2Rlc3Ryb3lfaW9yZXFfc2VydmVy IHsKPiArwqDCoMKgwqBkb21pZF90IGRvbWlkOyAvKiBJTiAtIGRvbWFpbiB0byBiZSBzZXJ2aWNl ZCAqLwo+ICvCoMKgwqDCoGlvc2VydmlkX3QgaWQ7IC8qIElOIC0gc2VydmVyIGlkICovCj4gK307 Cj4gK3R5cGVkZWYgc3RydWN0IHhlbl9odm1fZGVzdHJveV9pb3JlcV9zZXJ2ZXIKPiB4ZW5faHZt X2Rlc3Ryb3lfaW9yZXFfc2VydmVyX3Q7Cj4gK0RFRklORV9HVUVTVF9IQU5ETEVfU1RSVUNUKHhl bl9odm1fZGVzdHJveV9pb3JlcV9zZXJ2ZXJfdCk7Cj4gKwo+ICsKPiArLyoKPiArICogSFZNT1Bf c2V0X2lvcmVxX3NlcnZlcl9zdGF0ZTogRW5hYmxlIG9yIGRpc2FibGUgdGhlIElPUkVRIFNlcnZl cgo+IDxpZD4gc2VydmljaW5nCj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkb21haW4gPGRvbWlkPi4KPiArICoKPiArICog VGhlIElPUkVRIFNlcnZlciB3aWxsIG5vdCBiZSBwYXNzZWQgYW55IGVtdWxhdGlvbiByZXF1ZXN0 cyB1bnRpbAo+IGl0IGlzIGluIHRoZQo+ICsgKiBlbmFibGVkIHN0YXRlLgo+ICsgKiBOb3RlIHRo YXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBpb3JlcV9wZm4gYW5kIGJ1ZmlvcmVxX2ZuIChzZWUKPiAr ICogSFZNT1BfZ2V0X2lvcmVxX3NlcnZlcl9pbmZvKSBhcmUgbm90IG1lYW5pbmdmdWwgdW50aWwg dGhlIElPUkVRCj4gU2VydmVyIGlzIGluCj4gKyAqIHRoZSBlbmFibGVkIHN0YXRlLgo+ICsgKi8K PiArI2RlZmluZSBIVk1PUF9zZXRfaW9yZXFfc2VydmVyX3N0YXRlIDIyCj4gK3N0cnVjdCB4ZW5f aHZtX3NldF9pb3JlcV9zZXJ2ZXJfc3RhdGUgewo+ICvCoMKgwqDCoGRvbWlkX3QgZG9taWQ7wqDC oMKgLyogSU4gLSBkb21haW4gdG8gYmUgc2VydmljZWQgKi8KPiArwqDCoMKgwqBpb3NlcnZpZF90 IGlkO8KgwqDCoC8qIElOIC0gc2VydmVyIGlkICovCj4gK8KgwqDCoMKgdWludDhfdCBlbmFibGVk OyAvKiBJTiAtIGVuYWJsZWQ/ICovCj4gK307Cj4gK3R5cGVkZWYgc3RydWN0IHhlbl9odm1fc2V0 X2lvcmVxX3NlcnZlcl9zdGF0ZQo+IHhlbl9odm1fc2V0X2lvcmVxX3NlcnZlcl9zdGF0ZV90Owo+ ICtERUZJTkVfR1VFU1RfSEFORExFX1NUUlVDVCh4ZW5faHZtX3NldF9pb3JlcV9zZXJ2ZXJfc3Rh dGVfdCk7Cj4gKwo+IMKgI2VuZGlmIC8qIF9fWEVOX1BVQkxJQ19IVk1fSFZNX09QX0hfXyAqLwo+ IGRpZmYgLS1naXQgYS9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvaHZtL2lvcmVxLmgKPiBiL2luY2x1 ZGUveGVuL2ludGVyZmFjZS9odm0vaW9yZXEuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k ZXggMDAwMDAwMC4uNmJiZjRlNAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9pbmNsdWRlL3hlbi9p bnRlcmZhY2UvaHZtL2lvcmVxLmgKPiBAQCAtMCwwICsxLDEzMiBAQAo+ICsvKgo+ICsgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y Cj4gbW9kaWZ5IGl0Cj4gKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCj4gKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Cj4gV0lU SE9VVAo+ICsgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgo+IE1FUkNIQU5UQUJJTElUWSBvcgo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS7CoMKgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKPiBMaWNlbnNlIGZvcgo+ICsg KiBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4gYWxvbmcgd2l0aAo+ICsgKiB0 aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv biwKPiBJbmMuLAo+ICsgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B IDAyMTEwLTEzMDEgVVNBLgo+ICsgKi8KPiArI2lmbmRlZiBfSU9SRVFfSF8KPiArI2RlZmluZSBf SU9SRVFfSF8KPiArCj4gKyNkZWZpbmUgSU9SRVFfUkVBRMKgwqDCoMKgwqDCoDEKPiArI2RlZmlu ZSBJT1JFUV9XUklURcKgwqDCoMKgwqAwCj4gKwo+ICsjZGVmaW5lIFNUQVRFX0lPUkVRX05PTkXC oMKgwqDCoMKgwqDCoMKgMAo+ICsjZGVmaW5lIFNUQVRFX0lPUkVRX1JFQURZwqDCoMKgwqDCoMKg wqAxCj4gKyNkZWZpbmUgU1RBVEVfSU9SRVFfSU5QUk9DRVNTwqDCoMKgMgo+ICsjZGVmaW5lIFNU QVRFX0lPUkVTUF9SRUFEWcKgwqDCoMKgwqDCoDMKPiArCj4gKyNkZWZpbmUgSU9SRVFfVFlQRV9Q SU/CoMKgwqDCoMKgwqDCoMKgwqDCoDAgLyogcGlvICovCj4gKyNkZWZpbmUgSU9SRVFfVFlQRV9D T1BZwqDCoMKgwqDCoMKgwqDCoMKgMSAvKiBtbWlvIG9wcyAqLwo+ICsjZGVmaW5lIElPUkVRX1RZ UEVfUENJX0NPTkZJR8KgwqDCoDIKPiArI2RlZmluZSBJT1JFUV9UWVBFX1RJTUVPRkZTRVTCoMKg wqA3Cj4gKyNkZWZpbmUgSU9SRVFfVFlQRV9JTlZBTElEQVRFwqDCoMKgOCAvKiBtYXBjYWNoZSAq Lwo+ICsKPiArLyoKPiArICogVk1FeGl0IGRpc3BhdGNoZXIgc2hvdWxkIGNvb3BlcmF0ZSB3aXRo IGluc3RydWN0aW9uIGRlY29kZXIgdG8KPiArICogcHJlcGFyZSB0aGlzIHN0cnVjdHVyZSBhbmQg bm90aWZ5IHNlcnZpY2UgT1MgYW5kIERNIGJ5IHNlbmRpbmcKPiArICogdmlycQo+ICsgKi8KPiAr c3RydWN0IGlvcmVxIHsKPiArwqDCoMKgwqB1aW50NjRfdCBhZGRyO8KgwqDCoMKgwqDCoMKgwqDC oMKgLyogcGh5c2ljYWwgYWRkcmVzcyAqLwo+ICvCoMKgwqDCoHVpbnQ2NF90IGRhdGE7wqDCoMKg wqDCoMKgwqDCoMKgwqAvKiBkYXRhIChvciBwYWRkciBvZiBkYXRhKSAqLwo+ICvCoMKgwqDCoHVp bnQzMl90IGNvdW50O8KgwqDCoMKgwqDCoMKgwqDCoC8qIGZvciByZXAgcHJlZml4ZXMgKi8KPiAr wqDCoMKgwqB1aW50MzJfdCBzaXplO8KgwqDCoMKgwqDCoMKgwqDCoMKgLyogc2l6ZSBpbiBieXRl cyAqLwo+ICvCoMKgwqDCoHVpbnQzMl90IHZwX2Vwb3J0O8KgwqDCoMKgwqDCoC8qIGV2dGNobiBm b3Igbm90aWZpY2F0aW9ucyB0by9mcm9tCj4gZGV2aWNlIG1vZGVsICovCj4gK8KgwqDCoMKgdWlu dDE2X3QgX3BhZDA7Cj4gK8KgwqDCoMKgdWludDhfdCBzdGF0ZTo0Owo+ICvCoMKgwqDCoHVpbnQ4 X3QgZGF0YV9pc19wdHI6MTvCoMKgLyogaWYgMSwgZGF0YSBhYm92ZSBpcyB0aGUgZ3Vlc3QgcGFk ZHIKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCogb2YgdGhlIHJlYWwgZGF0YSB0byB1c2UuICovCj4gK8KgwqDCoMKgdWludDhfdCBk aXI6MTvCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIDE9cmVhZCwgMD13cml0ZSAqLwo+ICvCoMKgwqDC oHVpbnQ4X3QgZGY6MTsKPiArwqDCoMKgwqB1aW50OF90IF9wYWQxOjE7Cj4gK8KgwqDCoMKgdWlu dDhfdCB0eXBlO8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBJL08gdHlwZSAqLwo+ICt9Owo+ICt0 eXBlZGVmIHN0cnVjdCBpb3JlcSBpb3JlcV90Owo+ICsKPiArc3RydWN0IHNoYXJlZF9pb3BhZ2Ug ewo+ICvCoMKgwqDCoHN0cnVjdCBpb3JlcSB2Y3B1X2lvcmVxWzFdOwo+ICt9Owo+ICt0eXBlZGVm IHN0cnVjdCBzaGFyZWRfaW9wYWdlIHNoYXJlZF9pb3BhZ2VfdDsKPiArCj4gK3N0cnVjdCBidWZf aW9yZXEgewo+ICvCoMKgwqDCoHVpbnQ4X3TCoMKgdHlwZTvCoMKgwqAvKiBJL08gdHlwZcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqLwo+ICvCoMKgwqDCoHVpbnQ4X3TC oMKgcGFkOjE7Cj4gK8KgwqDCoMKgdWludDhfdMKgwqBkaXI6MTvCoMKgLyogMT1yZWFkLCAwPXdy aXRlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqLwo+ICvCoMKgwqDCoHVpbnQ4X3TCoMKgc2l6 ZToyOyAvKiAwPT4xLCAxPT4yLCAyPT40LCAzPT44LiBJZiA4LCB1c2UgdHdvCj4gYnVmX2lvcmVx cyAqLwo+ICvCoMKgwqDCoHVpbnQzMl90IGFkZHI6MjA7LyogcGh5c2ljYWwgYWRkcmVzc8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCovCj4gK8KgwqDCoMKgdWludDMyX3QgZGF0YTvCoMKgwqAvKiBk YXRhwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKi8KPiAr fTsKPiArdHlwZWRlZiBzdHJ1Y3QgYnVmX2lvcmVxIGJ1Zl9pb3JlcV90Owo+ICsKPiArI2RlZmlu ZSBJT1JFUV9CVUZGRVJfU0xPVF9OVU3CoMKgwqDCoMKgNTExIC8qIDggYnl0ZXMgZWFjaCwgcGx1 cyAyIDQtYnl0ZSAKPiBpbmRleGVzICovCj4gK3N0cnVjdCBidWZmZXJlZF9pb3BhZ2Ugewo+ICvC oMKgwqDCoHVuc2lnbmVkIGludCByZWFkX3BvaW50ZXI7Cj4gK8KgwqDCoMKgdW5zaWduZWQgaW50 IHdyaXRlX3BvaW50ZXI7Cj4gK8KgwqDCoMKgYnVmX2lvcmVxX3QgYnVmX2lvcmVxW0lPUkVRX0JV RkZFUl9TTE9UX05VTV07Cj4gK307IC8qIE5CLiBTaXplIG9mIHRoaXMgc3RydWN0dXJlIG11c3Qg YmUgbm8gZ3JlYXRlciB0aGFuIG9uZSBwYWdlLgo+ICovCj4gK3R5cGVkZWYgc3RydWN0IGJ1ZmZl cmVkX2lvcGFnZSBidWZmZXJlZF9pb3BhZ2VfdDsKPiArCj4gKyNpZiBkZWZpbmVkKF9faWE2NF9f KQo+ICtzdHJ1Y3QgcGlvX2J1ZmZlciB7Cj4gK8KgwqDCoMKgdWludDMyX3QgcGFnZV9vZmZzZXQ7 Cj4gK8KgwqDCoMKgdWludDMyX3QgcG9pbnRlcjsKPiArwqDCoMKgwqB1aW50MzJfdCBkYXRhX2Vu ZDsKPiArwqDCoMKgwqB1aW50MzJfdCBidWZfc2l6ZTsKPiArwqDCoMKgwqB2b2lkICpvcGFxdWU7 Cj4gK307Cj4gKwo+ICsjZGVmaW5lIFBJT19CVUZGRVJfSURFX1BSSU1BUlnCoMKgwqAwIC8qIEkv TyBwb3J0ID0gMHgxRjAgKi8KPiArI2RlZmluZSBQSU9fQlVGRkVSX0lERV9TRUNPTkRBUlkgMSAv KiBJL08gcG9ydCA9IDB4MTcwICovCj4gKyNkZWZpbmUgUElPX0JVRkZFUl9FTlRSWV9OVU3CoMKg wqDCoMKgMgo+ICtzdHJ1Y3QgYnVmZmVyZWRfcGlvcGFnZSB7Cj4gK8KgwqDCoMKgc3RydWN0IHBp b19idWZmZXIgcGlvW1BJT19CVUZGRVJfRU5UUllfTlVNXTsKPiArwqDCoMKgwqB1aW50OF90IGJ1 ZmZlclsxXTsKPiArfTsKPiArI2VuZGlmIC8qIGRlZmluZWQoX19pYTY0X18pICovCj4gKwo+ICsv Kgo+ICsgKiBBQ1BJIENvbnRyb2wvRXZlbnQgcmVnaXN0ZXIgbG9jYXRpb25zLiBMb2NhdGlvbiBp cyBjb250cm9sbGVkIGJ5Cj4gYQo+ICsgKiB2ZXJzaW9uIG51bWJlciBpbiBIVk1fUEFSQU1fQUNQ SV9JT1BPUlRTX0xPQ0FUSU9OLgo+ICsgKi8KPiArCj4gKy8qIFZlcnNpb24gMCAoZGVmYXVsdCk6 IFRyYWRpdGlvbmFsIFhlbiBsb2NhdGlvbnMuICovCj4gKyNkZWZpbmUgQUNQSV9QTTFBX0VWVF9C TEtfQUREUkVTU19WMCAweDFmNDAKPiArI2RlZmluZSBBQ1BJX1BNMUFfQ05UX0JMS19BRERSRVNT X1YwIChBQ1BJX1BNMUFfRVZUX0JMS19BRERSRVNTX1YwICsKPiAweDA0KQo+ICsjZGVmaW5lIEFD UElfUE1fVE1SX0JMS19BRERSRVNTX1YwwqDCoMKgKEFDUElfUE0xQV9FVlRfQkxLX0FERFJFU1Nf VjAgKwo+IDB4MDgpCj4gKyNkZWZpbmUgQUNQSV9HUEUwX0JMS19BRERSRVNTX1YwwqDCoMKgwqDC oChBQ1BJX1BNX1RNUl9CTEtfQUREUkVTU19WMCArCj4gMHgyMCkKPiArI2RlZmluZSBBQ1BJX0dQ RTBfQkxLX0xFTl9WMMKgwqDCoMKgwqDCoMKgwqDCoDB4MDgKPiArCj4gKy8qIFZlcnNpb24gMTog TG9jYXRpb25zIHByZWZlcnJlZCBieSBtb2Rlcm4gUWVtdS4gKi8KPiArI2RlZmluZSBBQ1BJX1BN MUFfRVZUX0JMS19BRERSRVNTX1YxIDB4YjAwMAo+ICsjZGVmaW5lIEFDUElfUE0xQV9DTlRfQkxL X0FERFJFU1NfVjEgKEFDUElfUE0xQV9FVlRfQkxLX0FERFJFU1NfVjEgKwo+IDB4MDQpCj4gKyNk ZWZpbmUgQUNQSV9QTV9UTVJfQkxLX0FERFJFU1NfVjHCoMKgwqAoQUNQSV9QTTFBX0VWVF9CTEtf QUREUkVTU19WMSArCj4gMHgwOCkKPiArI2RlZmluZSBBQ1BJX0dQRTBfQkxLX0FERFJFU1NfVjHC oMKgwqDCoMKgMHhhZmUwCj4gKyNkZWZpbmUgQUNQSV9HUEUwX0JMS19MRU5fVjHCoMKgwqDCoMKg wqDCoMKgwqAweDA0Cj4gKwo+ICsvKiBDb21wYXRpYmlsaXR5IGRlZmluaXRpb25zIGZvciB0aGUg ZGVmYXVsdCBsb2NhdGlvbiAodmVyc2lvbiAwKS4KPiAqLwo+ICsjZGVmaW5lIEFDUElfUE0xQV9F VlRfQkxLX0FERFJFU1PCoMKgwqDCoEFDUElfUE0xQV9FVlRfQkxLX0FERFJFU1NfVjAKPiArI2Rl ZmluZSBBQ1BJX1BNMUFfQ05UX0JMS19BRERSRVNTwqDCoMKgwqBBQ1BJX1BNMUFfQ05UX0JMS19B RERSRVNTX1YwCj4gKyNkZWZpbmUgQUNQSV9QTV9UTVJfQkxLX0FERFJFU1PCoMKgwqDCoMKgwqBB Q1BJX1BNX1RNUl9CTEtfQUREUkVTU19WMAo+ICsjZGVmaW5lIEFDUElfR1BFMF9CTEtfQUREUkVT U8KgwqDCoMKgwqDCoMKgwqBBQ1BJX0dQRTBfQkxLX0FERFJFU1NfVjAKPiArI2RlZmluZSBBQ1BJ X0dQRTBfQkxLX0xFTsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEFDUElfR1BFMF9CTEtfTEVOX1Yw Cj4gKwo+ICsKPiArI2VuZGlmIC8qIF9JT1JFUV9IXyAqLwo+ICsKPiArLyoKPiArICogTG9jYWwg dmFyaWFibGVzOgo+ICsgKiBtb2RlOiBDCj4gKyAqIGMtc2V0LXN0eWxlOiAiQlNEIgo+ICsgKiBj LWJhc2ljLW9mZnNldDogNAo+ICsgKiB0YWItd2lkdGg6IDQKPiArICogaW5kZW50LXRhYnMtbW9k ZTogbmlsCj4gKyAqIEVuZDoKPiArICovCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUveGVuL2ludGVy ZmFjZS9tZW1vcnkuaAo+IGIvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL21lbW9yeS5oCj4gaW5kZXgg MmVjZmU0Zi4uOTJmMThjNSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvbWVt b3J5LmgKPiArKysgYi9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvbWVtb3J5LmgKPiBAQCAtOSw2ICs5 LDcgQEAKPiDCoCNpZm5kZWYgX19YRU5fUFVCTElDX01FTU9SWV9IX18KPiDCoCNkZWZpbmUgX19Y RU5fUFVCTElDX01FTU9SWV9IX18KPiDCoAo+ICsjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9ldmVu dF9jaGFubmVsLmg+Cj4gwqAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KPiDCoAo+IMKgLyoK PiBAQCAtMTQxLDYgKzE0MiwxMSBAQCBzdHJ1Y3QgeGVuX21hY2hwaHlzX21mbl9saXN0IHsKPiDC oERFRklORV9HVUVTVF9IQU5ETEVfU1RSVUNUKHhlbl9tYWNocGh5c19tZm5fbGlzdCk7Cj4gwqAK PiDCoC8qCj4gKyAqIFJldHVybnMgdGhlIG1heGltdW0gR1BGTiBpbiB1c2UgYnkgdGhlIGd1ZXN0 LCBvciAtdmUgZXJyY29kZSBvbgo+IGZhaWx1cmUuCj4gKyAqLwo+ICsjZGVmaW5lIFhFTk1FTV9t YXhpbXVtX2dwZm7CoMKgwqDCoMKgwqDCoMKgwqAxNAo+ICsKPiArLyoKPiDCoCAqIFJldHVybnMg dGhlIGxvY2F0aW9uIGluIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBvZiB0aGUKPiBtYWNoaW5lX3Rv X3BoeXMKPiDCoCAqIG1hcHBpbmcgdGFibGUuIEFyY2hpdGVjdHVyZXMgd2hpY2ggZG8gbm90IGhh dmUgYSBtMnAgdGFibGUsIG9yCj4gd2hpY2ggZG8gbm90Cj4gwqAgKiBtYXAgaXQgYnkgZGVmYXVs dCBpbnRvIGd1ZXN0IGFkZHJlc3Mgc3BhY2UsIGRvIG5vdCBpbXBsZW1lbnQgdGhpcwo+IGNvbW1h bmQuCj4gQEAgLTI2Myw0ICsyNjksMjYgQEAgc3RydWN0IHhlbl9yZW1vdmVfZnJvbV9waHlzbWFw IHsKPiDCoH07Cj4gwqBERUZJTkVfR1VFU1RfSEFORExFX1NUUlVDVCh4ZW5fcmVtb3ZlX2Zyb21f cGh5c21hcCk7Cj4gwqAKPiArLyoKPiArICogVHJhbnNsYXRlIHRoZSBnaXZlbiBndWVzdCBQRk5z IHRvIE1GTnMKPiArICovCj4gKyNkZWZpbmUgWEVOTUVNX2dldF9tZm5fZnJvbV9wZm7CoMKgwqDC oDI1Cj4gK3N0cnVjdCB4ZW5fZ2V0X21mbl9mcm9tX3BmbiB7Cj4gK8KgwqDCoMKgLyoKPiArwqDC oMKgwqDCoCogUG9pbnRlciB0byBidWZmZXIgdG8gZmlsbCB3aXRoIGxpc3Qgb2YgcGZuLgo+ICvC oMKgwqDCoMKgKiBmb3IgSU4sIGl0IGNvbnRhaW5zIHRoZSBndWVzdCBQRk4gdGhhdCBuZWVkIHRv IHRyYW5zbGF0ZWQKPiArwqDCoMKgwqDCoCogZm9yIE9VVCwgaXQgY29udGFpbnMgdGhlIHRyYW5z bGF0ZWQgTUZOLiBvciBJTlZBTElEX01GTiBpZiBubwo+IHZhbGlkIHRyYW5zbGF0aW9uCj4gK8Kg wqDCoMKgwqAqLwo+ICvCoMKgwqDCoEdVRVNUX0hBTkRMRSh1bG9uZykgcGZuX2xpc3Q7Cj4gKwo+ ICvCoMKgwqDCoC8qCj4gK8KgwqDCoMKgwqAqIElOOiBTaXplIG9mIHRoZSBwZm5fYXJyYXkuCj4g K8KgwqDCoMKgwqAqLwo+ICvCoMKgwqDCoHVuc2lnbmVkIGludCBucl9wZm5zOwo+ICsKPiArwqDC oMKgwqAvKiBJTjogd2hpY2ggZG9tYWluICovCj4gK8KgwqDCoMKgZG9taWRfdCBkb21pZDsKPiAr fTsKPiArREVGSU5FX0dVRVNUX0hBTkRMRV9TVFJVQ1QoeGVuX2dldF9tZm5fZnJvbV9wZm4pOwo+ ICsKPiDCoCNlbmRpZiAvKiBfX1hFTl9QVUJMSUNfTUVNT1JZX0hfXyAqLwo+IGRpZmYgLS1naXQg YS9pbmNsdWRlL3hlbi9pbnRlcmZhY2UveGVuLmgKPiBiL2luY2x1ZGUveGVuL2ludGVyZmFjZS94 ZW4uaAo+IGluZGV4IDc4YTM4ZjEuLmM3ZTBmMzIgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS94ZW4v aW50ZXJmYWNlL3hlbi5oCj4gKysrIGIvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL3hlbi5oCj4gQEAg LTc1Niw2ICs3NTYsMTEyIEBAIHN0cnVjdCB0bWVtX29wIHsKPiDCoAo+IMKgREVGSU5FX0dVRVNU X0hBTkRMRSh1NjQpOwo+IMKgCj4gKy8qIFhFTl9ET01DVExfZ2V0ZG9tYWluaW5mbyAqLwo+ICtz dHJ1Y3QgeGVuX2RvbWN0bF9nZXRkb21haW5pbmZvIHsKPiArwqDCoMKgwqDCoMKgwqDCoC8qIE9V VCB2YXJpYWJsZXMuICovCj4gK8KgwqDCoMKgwqDCoMKgwqBkb21pZF90wqDCoGRvbWFpbjvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogQWxzbyBlY2hvZWQgaW4KPiBkb21jdGwuZG9tYWlu ICovCj4gK8KgwqDCoMKgwqDCoMKgwqAvKiBEb21haW4gaXMgc2NoZWR1bGVkIHRvIGRpZS4gKi8K PiArI2RlZmluZSBfWEVOX0RPTUlORl9keWluZ8KgwqDCoMKgwqAwCj4gKyNkZWZpbmUgWEVOX0RP TUlORl9keWluZ8KgwqDCoMKgwqDCoCgxVTw8X1hFTl9ET01JTkZfZHlpbmcpCj4gK8KgwqDCoMKg wqDCoMKgwqAvKiBEb21haW4gaXMgYW4gSFZNIGd1ZXN0IChhcyBvcHBvc2VkIHRvIGEgUFYgZ3Vl c3QpLiAqLwo+ICsjZGVmaW5lIF9YRU5fRE9NSU5GX2h2bV9ndWVzdCAxCj4gKyNkZWZpbmUgWEVO X0RPTUlORl9odm1fZ3Vlc3TCoMKgKDFVPDxfWEVOX0RPTUlORl9odm1fZ3Vlc3QpCj4gK8KgwqDC oMKgwqDCoMKgwqAvKiBUaGUgZ3Vlc3QgT1MgaGFzIHNodXQgZG93bi4gKi8KPiArI2RlZmluZSBf WEVOX0RPTUlORl9zaHV0ZG93bsKgwqAyCj4gKyNkZWZpbmUgWEVOX0RPTUlORl9zaHV0ZG93bsKg wqDCoCgxVTw8X1hFTl9ET01JTkZfc2h1dGRvd24pCj4gK8KgwqDCoMKgwqDCoMKgwqAvKiBDdXJy ZW50bHkgcGF1c2VkIGJ5IGNvbnRyb2wgc29mdHdhcmUuICovCj4gKyNkZWZpbmUgX1hFTl9ET01J TkZfcGF1c2VkwqDCoMKgwqAzCj4gKyNkZWZpbmUgWEVOX0RPTUlORl9wYXVzZWTCoMKgwqDCoMKg KDFVPDxfWEVOX0RPTUlORl9wYXVzZWQpCj4gK8KgwqDCoMKgwqDCoMKgwqAvKiBDdXJyZW50bHkg YmxvY2tlZCBwZW5kaW5nIGFuIGV2ZW50LsKgwqDCoMKgwqAqLwo+ICsjZGVmaW5lIF9YRU5fRE9N SU5GX2Jsb2NrZWTCoMKgwqA0Cj4gKyNkZWZpbmUgWEVOX0RPTUlORl9ibG9ja2VkwqDCoMKgwqAo MVU8PF9YRU5fRE9NSU5GX2Jsb2NrZWQpCj4gK8KgwqDCoMKgwqDCoMKgwqAvKiBEb21haW4gaXMg Y3VycmVudGx5IHJ1bm5pbmcuwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKi8KPiArI2RlZmluZSBf WEVOX0RPTUlORl9ydW5uaW5nwqDCoMKgNQo+ICsjZGVmaW5lIFhFTl9ET01JTkZfcnVubmluZ8Kg wqDCoMKgKDFVPDxfWEVOX0RPTUlORl9ydW5uaW5nKQo+ICvCoMKgwqDCoMKgwqDCoMKgLyogQmVp bmcgZGVidWdnZWQuwqDCoCovCj4gKyNkZWZpbmUgX1hFTl9ET01JTkZfZGVidWdnZWTCoMKgNgo+ ICsjZGVmaW5lIFhFTl9ET01JTkZfZGVidWdnZWTCoMKgwqAoMVU8PF9YRU5fRE9NSU5GX2RlYnVn Z2VkKQo+ICvCoMKgwqDCoMKgwqDCoMKgLyogWEVOX0RPTUlORl9zaHV0ZG93biBndWVzdC1zdXBw bGllZCBjb2RlLsKgwqAqLwo+ICsjZGVmaW5lIFhFTl9ET01JTkZfc2h1dGRvd25tYXNrIDI1NQo+ ICsjZGVmaW5lIFhFTl9ET01JTkZfc2h1dGRvd25zaGlmdCAxNgo+ICvCoMKgwqDCoMKgwqDCoMKg dWludDMyX3QgZmxhZ3M7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qIFhFTl9ET01JTkZf KiAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgYWxpZ25lZF91NjQgdG90X3BhZ2VzOwo+ICvCoMKgwqDC oMKgwqDCoMKgYWxpZ25lZF91NjQgbWF4X3BhZ2VzOwo+ICvCoMKgwqDCoMKgwqDCoMKgYWxpZ25l ZF91NjQgb3V0c3RhbmRpbmdfcGFnZXM7Cj4gK8KgwqDCoMKgwqDCoMKgwqBhbGlnbmVkX3U2NCBz aHJfcGFnZXM7Cj4gK8KgwqDCoMKgwqDCoMKgwqBhbGlnbmVkX3U2NCBwYWdlZF9wYWdlczsKPiAr wqDCoMKgwqDCoMKgwqDCoGFsaWduZWRfdTY0IHNoYXJlZF9pbmZvX2ZyYW1lOyAvKiBHTUZOIG9m IHNoYXJlZF9pbmZvIHN0cnVjdAo+ICovCj4gK8KgwqDCoMKgwqDCoMKgwqBhbGlnbmVkX3U2NCBj cHVfdGltZTsKPiArwqDCoMKgwqDCoMKgwqDCoHVpbnQzMl90IG5yX29ubGluZV92Y3B1czvCoMKg wqDCoC8qIE51bWJlciBvZiBWQ1BVcyBjdXJyZW50bHkKPiBvbmxpbmUuICovCj4gK8KgwqDCoMKg wqDCoMKgwqB1aW50MzJfdCBtYXhfdmNwdV9pZDvCoMKgwqDCoMKgwqDCoMKgLyogTWF4aW11bSBW Q1BVSUQgaW4gdXNlIGJ5Cj4gdGhpcyBkb21haW4uICovCj4gK8KgwqDCoMKgwqDCoMKgwqB1aW50 MzJfdCBzc2lkcmVmOwo+ICvCoMKgwqDCoMKgwqDCoMKgeGVuX2RvbWFpbl9oYW5kbGVfdCBoYW5k bGU7Cj4gK8KgwqDCoMKgwqDCoMKgwqB1aW50MzJfdCBjcHVwb29sOwo+ICt9Owo+ICtERUZJTkVf R1VFU1RfSEFORExFX1NUUlVDVCh4ZW5fZG9tY3RsX2dldGRvbWFpbmluZm8pOwo+ICsKPiArI2Rl ZmluZSBYRU5fRE9NQ1RMX0lOVEVSRkFDRV9WRVJTSU9OIDB4MDAwMDAwMGEKPiArI2RlZmluZSBY RU5fRE9NQ1RMX3BhdXNlZG9tYWluwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoDMKPiArI2RlZmluZSBYRU5fRE9NQ1RMX2dldGRvbWFpbmluZm/CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqA1Cj4gKyNkZWZpbmUgWEVOX0RPTUNUTF9tZW1vcnlfbWFwcGlu Z8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAzOQo+ICsjZGVmaW5lIFhFTl9ET01D VExfaW9tZW1fcGVybWlzc2lvbsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDIwCj4gKwo+ ICsKPiArI2RlZmluZSBYRU5fRE9NQ1RMX3ZndF9pb190cmFwwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoDcwMAo+ICsKPiArI2RlZmluZSBNQVhfVkdUX0lPX1RSQVBfSU5G TyA0Cj4gKwo+ICtzdHJ1Y3Qgdmd0X2lvX3RyYXBfaW5mbyB7Cj4gK8KgwqDCoMKgwqDCoMKgwqB1 aW50NjRfdCBzOwo+ICvCoMKgwqDCoMKgwqDCoMKgdWludDY0X3QgZTsKPiArfTsKPiArCj4gK3N0 cnVjdCB4ZW5fZG9tY3RsX3ZndF9pb190cmFwIHsKPiArwqDCoMKgwqDCoMKgwqDCoHVpbnQzMl90 IG5fcGlvOwo+ICvCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHZndF9pb190cmFwX2luZm8gcGlvW01B WF9WR1RfSU9fVFJBUF9JTkZPXTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqB1aW50MzJfdCBuX21t aW87Cj4gK8KgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgdmd0X2lvX3RyYXBfaW5mbyBtbWlvW01BWF9W R1RfSU9fVFJBUF9JTkZPXTsKPiArfTsKPiArCj4gKy8qIEJpbmQgbWFjaGluZSBJL08gYWRkcmVz cyByYW5nZSAtPiBIVk0gYWRkcmVzcyByYW5nZS4gKi8KPiArLyogWEVOX0RPTUNUTF9tZW1vcnlf bWFwcGluZyAqLwo+ICsjZGVmaW5lIERQQ0lfQUREX01BUFBJTkfCoMKgwqDCoMKgwqDCoMKgMQo+ ICsjZGVmaW5lIERQQ0lfUkVNT1ZFX01BUFBJTkfCoMKgwqDCoMKgMAo+ICtzdHJ1Y3QgeGVuX2Rv bWN0bF9tZW1vcnlfbWFwcGluZyB7Cj4gK8KgwqDCoMKgwqDCoMKgwqBhbGlnbmVkX3U2NCBmaXJz dF9nZm47IC8qIGZpcnN0IHBhZ2UgKGh2bSBndWVzdCBwaHlzIHBhZ2UpCj4gaW4gcmFuZ2UgKi8K PiArwqDCoMKgwqDCoMKgwqDCoGFsaWduZWRfdTY0IGZpcnN0X21mbjsgLyogZmlyc3QgcGFnZSAo bWFjaGluZSBwYWdlKSBpbgo+IHJhbmdlLiAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgYWxpZ25lZF91 NjQgbnJfbWZuczvCoMKgwqAvKiBudW1iZXIgb2YgcGFnZXMgaW4gcmFuZ2UgKD4wKSAqLwo+ICvC oMKgwqDCoMKgwqDCoMKgdWludDMyX3QgYWRkX21hcHBpbmc7wqDCoC8qIEFkZCBvciByZW1vdmUg bWFwcGluZyAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgdWludDMyX3QgcGFkZGluZzvCoMKgwqDCoMKg wqAvKiBwYWRkaW5nIGZvciA2NC1iaXQgYWxpZ25lZCBzdHJ1Y3QKPiAqLwo+ICt9Owo+ICt0eXBl ZGVmIHN0cnVjdCB4ZW5fZG9tY3RsX21lbW9yeV9tYXBwaW5nCj4geGVuX2RvbWN0bF9tZW1vcnlf bWFwcGluZ190Owo+ICtERUZJTkVfR1VFU1RfSEFORExFX1NUUlVDVCh4ZW5fZG9tY3RsX21lbW9y eV9tYXBwaW5nX3QpOwo+ICsKPiArLyogWEVOX0RPTUNUTF9pb21lbV9wZXJtaXNzaW9uICovCj4g K3N0cnVjdCB4ZW5fZG9tY3RsX2lvbWVtX3Blcm1pc3Npb24gewo+ICvCoMKgwqDCoGFsaWduZWRf dTY0IGZpcnN0X21mbjsvKiBmaXJzdCBwYWdlIChwaHlzaWNhbCBwYWdlIG51bWJlcikgaW4KPiBy YW5nZSAqLwo+ICvCoMKgwqDCoGFsaWduZWRfdTY0IG5yX21mbnM7wqDCoC8qIG51bWJlciBvZiBw YWdlcyBpbiByYW5nZSAoPjApICovCj4gK8KgwqDCoMKgdWludDhfdMKgwqBhbGxvd19hY2Nlc3M7 wqDCoMKgwqDCoC8qIGFsbG93ICghMCkgb3IgZGVueSAoMCkgYWNjZXNzIHRvCj4gcmFuZ2U/ICov Cj4gK307Cj4gK3R5cGVkZWYgc3RydWN0IHhlbl9kb21jdGxfaW9tZW1fcGVybWlzc2lvbgo+IHhl bl9kb21jdGxfaW9tZW1fcGVybWlzc2lvbl90Owo+ICtERUZJTkVfR1VFU1RfSEFORExFX1NUUlVD VCh4ZW5fZG9tY3RsX2lvbWVtX3Blcm1pc3Npb25fdCk7Cj4gKwo+ICtzdHJ1Y3QgeGVuX2RvbWN0 bCB7Cj4gK8KgwqDCoMKgwqDCoMKgwqB1aW50MzJfdCBjbWQ7Cj4gK8KgwqDCoMKgwqDCoMKgwqB1 aW50MzJfdCBpbnRlcmZhY2VfdmVyc2lvbjsgLyogWEVOX0RPTUNUTF9JTlRFUkZBQ0VfVkVSU0lP Tgo+ICovCj4gK8KgwqDCoMKgwqDCoMKgwqBkb21pZF90wqDCoGRvbWFpbjsKPiArwqDCoMKgwqDC oMKgwqDCoHVuaW9uIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qg eGVuX2RvbWN0bF9nZXRkb21haW5pbmZvwqDCoMKgwqDCoGdldGRvbWFpbmluZm87Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHhlbl9kb21jdGxfdmd0X2lvX3RyYXDC oMKgwqDCoMKgwqDCoHZndF9pb190cmFwOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHN0cnVjdCB4ZW5fZG9tY3RsX21lbW9yeV9tYXBwaW5nwqDCoMKgwqBtZW1vcnlfbWFwcGlu ZzsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgeGVuX2RvbWN0bF9p b21lbV9wZXJtaXNzaW9uwqDCoMKgwqDCoMKgaW9tZW1fcGVybTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB1aW50OF90wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBhZFsyNTZdOwo+ICvCoMKgwqDCoMKgwqDCoMKgfXU7 Cj4gK307Cj4gK0RFRklORV9HVUVTVF9IQU5ETEVfU1RSVUNUKHhlbl9kb21jdGwpOwo+ICsKPiAr Cj4gwqAjZWxzZSAvKiBfX0FTU0VNQkxZX18gKi8KPiDCoAo+IMKgLyogSW4gYXNzZW1ibHkgY29k ZSB3ZSBjYW5ub3QgdXNlIEMgbnVtZXJpYyBjb25zdGFudCBzdWZmaXhlcy4gKi8KPiBkaWZmIC0t Z2l0IGEvaW5jbHVkZS94ZW4veGVuLW9wcy5oIGIvaW5jbHVkZS94ZW4veGVuLW9wcy5oCj4gaW5k ZXggODZhYmUwNy4uZGRlOWViMCAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL3hlbi94ZW4tb3BzLmgK PiArKysgYi9pbmNsdWRlL3hlbi94ZW4tb3BzLmgKPiBAQCAtMTIzLDQgKzEyMyw5IEBAIHN0YXRp YyBpbmxpbmUgdm9pZAo+IHhlbl9wcmVlbXB0aWJsZV9oY2FsbF9lbmQodm9pZCkKPiDCoAo+IMKg I2VuZGlmIC8qIENPTkZJR19QUkVFTVBUICovCj4gwqAKPiArc3RydWN0IHZtX3N0cnVjdCAqIHhl bl9yZW1hcF9kb21haW5fbWZuX3JhbmdlX2luX2tlcm5lbCh1bnNpZ25lZAo+IGxvbmcgbWZuLAo+ ICvCoMKgwqDCoMKgwqDCoMKgaW50IG5yLCB1bnNpZ25lZCBkb21pZCk7Cj4gK3ZvaWQgeGVuX3Vu bWFwX2RvbWFpbl9tZm5fcmFuZ2VfaW5fa2VybmVsKHN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWEsCj4g aW50IG5yLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVuc2lnbmVkIGRvbWlk KTsKPiArCj4gwqAjZW5kaWYgLyogSU5DTFVERV9YRU5fT1BTX0ggKi8KLS0gCkpvb25hcyBMYWh0 aW5lbgpPcGVuIFNvdXJjZSBUZWNobm9sb2d5IENlbnRlcgpJbnRlbCBDb3Jwb3JhdGlvbgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK