From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sharat Masetty Subject: Re: [PATCH 06/10] drm/msm/gpu: Capture the GPU state on a GPU hang Date: Wed, 23 May 2018 17:01:03 +0530 Message-ID: References: <20180417224441.32355-1-jcrouse@codeaurora.org> <20180417224441.32355-7-jcrouse@codeaurora.org> <389bc572-8445-dd6e-9c16-2a27600b0243@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <389bc572-8445-dd6e-9c16-2a27600b0243-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Jordan Crouse , freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org CgpPbiA1LzIzLzIwMTggNDo1MCBQTSwgU2hhcmF0IE1hc2V0dHkgd3JvdGU6Cj4gCj4gCj4gT24g NC8xOC8yMDE4IDQ6MTQgQU0sIEpvcmRhbiBDcm91c2Ugd3JvdGU6Cj4+IENhcHR1cmUgdGhlIEdQ VSBzdGF0ZSBvbiBhIEdQVSBoYW5nIGFuZCBzdG9yZSBpdCBmb3IgbGF0ZXIgcGxheWJhY2sKPj4g dmlhIHRoZSBkZXZjb3JlZHVtcCBmYWNpbGl0eS4gT25seSBvbmUgY3Jhc2ggc3RhdGUgaXMgc3Rv cmVkIGF0IGEKPj4gdGltZSBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBmaXJzdCBoYW5nIGlz IHVzdWFsbHkgdGhlIG1vc3QKPj4gaW50ZXJlc3RpbmcuIFRoZSBleGlzdGluZyBjcmFzaCBzdGF0 ZSBjYW4gYmUgY2xlYXJlZCBhZnRlciBjYXB0dXJpbmcKPj4gaXQgYW5kIHRoZW4gYSBuZXcgb25l IHdpbGwgYmUgY2FwdHVyZWQgb24gdGhlIG5leHQgaGFuZy4KPj4KPj4gU2lnbmVkLW9mZi1ieTog Sm9yZGFuIENyb3VzZSA8amNyb3VzZUBjb2RlYXVyb3JhLm9yZz4KPj4gLS0tCj4+IMKgIGRyaXZl cnMvZ3B1L2RybS9tc20vS2NvbmZpZ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMSArCj4+ IMKgIGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2EzeHhfZ3B1LmPCoMKgIHzCoCAyICstCj4+ IMKgIGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E0eHhfZ3B1LmPCoMKgIHzCoCAyICstCj4+ IMKgIGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E1eHhfZ3B1LmPCoMKgIHzCoCA0ICstCj4+ IMKgIGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuYyB8IDM2ICsrKysrKyst LS0tCj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuaCB8wqAgNCAr LQo+PiDCoCBkcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9kZWJ1Z2ZzLmPCoMKgwqDCoMKgwqAgfMKg IDUgKy0KPj4gwqAgZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ3B1LmPCoMKgwqDCoMKgwqDCoMKg wqDCoCB8IDgzICsrKysrKysrKysrKysrKysrKysrKysrKy0KPj4gwqAgZHJpdmVycy9ncHUvZHJt L21zbS9tc21fZ3B1LmjCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDM4ICsrKysrKysrKystCj4+IMKg IDkgZmlsZXMgY2hhbmdlZCwgMTUzIGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQo+Pgo+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9LY29uZmlnIGIvZHJpdmVycy9ncHUv ZHJtL21zbS9LY29uZmlnCj4+IGluZGV4IDM4Y2JkZTk3MWI0OC4uODQzYTlkNDBjMDVlIDEwMDY0 NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL0tjb25maWcKPj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL21zbS9LY29uZmlnCj4+IEBAIC0xMiw2ICsxMiw3IEBAIGNvbmZpZyBEUk1fTVNNCj4+ IMKgwqDCoMKgwqAgc2VsZWN0IFNITUVNCj4+IMKgwqDCoMKgwqAgc2VsZWN0IFRNUEZTCj4+IMKg wqDCoMKgwqAgc2VsZWN0IFFDT01fU0NNCj4+ICvCoMKgwqAgc2VsZWN0IFdBTlRfREVWX0NPUkVE VU1QCj4+IMKgwqDCoMKgwqAgc2VsZWN0IFNORF9TT0NfSERNSV9DT0RFQyBpZiBTTkRfU09DCj4+ IMKgwqDCoMKgwqAgc2VsZWN0IFNZTkNfRklMRQo+PiDCoMKgwqDCoMKgIHNlbGVjdCBQTV9PUFAK Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2EzeHhfZ3B1LmMgCj4+ IGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTN4eF9ncHUuYwo+PiBpbmRleCA0Y2ZmZWMy YjZhZGMuLmZjNTAyZTQxMjEzMiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9h ZHJlbm8vYTN4eF9ncHUuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hM3h4 X2dwdS5jCj4+IEBAIC00NTQsNyArNDU0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhZHJlbm9f Z3B1X2Z1bmNzIGZ1bmNzID0gewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgLmFjdGl2ZV9yaW5nID0g YWRyZW5vX2FjdGl2ZV9yaW5nLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgLmlycSA9IGEzeHhfaXJx LAo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgLmRlc3Ryb3kgPSBhM3h4X2Rlc3Ryb3ksCj4+IC0jaWZk ZWYgQ09ORklHX0RFQlVHX0ZTCj4+ICsjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpIHx8IGRl ZmluZWQoQ09ORklHX0RFVl9DT1JFRFVNUCkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIC5zaG93ID0g YWRyZW5vX3Nob3csCj4+IMKgICNlbmRpZgo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgLmdwdV9zdGF0 ZV9nZXQgPSBhM3h4X2dwdV9zdGF0ZV9nZXQsCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2FkcmVuby9hNHh4X2dwdS5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5v L2E0eHhfZ3B1LmMKPj4gaW5kZXggOTVmMDhjMjJlOGQ3Li44MTI5Y2YwMzdkYjEgMTAwNjQ0Cj4+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E0eHhfZ3B1LmMKPj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTR4eF9ncHUuYwo+PiBAQCAtNTQwLDcgKzU0MCw3IEBA IHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRyZW5vX2dwdV9mdW5jcyBmdW5jcyA9IHsKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIC5hY3RpdmVfcmluZyA9IGFkcmVub19hY3RpdmVfcmluZywKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIC5pcnEgPSBhNHh4X2lycSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIC5kZXN0 cm95ID0gYTR4eF9kZXN0cm95LAo+PiAtI2lmZGVmIENPTkZJR19ERUJVR19GUwo+PiArI2lmIGRl ZmluZWQoQ09ORklHX0RFQlVHX0ZTKSB8fCBkZWZpbmVkKENPTkZJR19ERVZfQ09SRURVTVApCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCAuc2hvdyA9IGFkcmVub19zaG93LAo+PiDCoCAjZW5kaWYKPj4g wqDCoMKgwqDCoMKgwqDCoMKgIC5ncHVfc3RhdGVfZ2V0ID0gYTR4eF9ncHVfc3RhdGVfZ2V0LAo+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTV4eF9ncHUuYyAKPj4g Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNXh4X2dwdS5jCj4+IGluZGV4IGIwOTEwYmJl NTE5MC4uODM2YTFkZjFmMjU3IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Fk cmVuby9hNXh4X2dwdS5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E1eHhf Z3B1LmMKPj4gQEAgLTEyNDMsOCArMTI0MywxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFkcmVu b19ncHVfZnVuY3MgZnVuY3MgPSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAuYWN0aXZlX3Jpbmcg PSBhNXh4X2FjdGl2ZV9yaW5nLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgLmlycSA9IGE1eHhfaXJx LAo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgLmRlc3Ryb3kgPSBhNXh4X2Rlc3Ryb3ksCj4+IC0jaWZk ZWYgQ09ORklHX0RFQlVHX0ZTCj4+ICsjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpIHx8IGRl ZmluZWQoQ09ORklHX0RFVl9DT1JFRFVNUCkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIC5zaG93ID0g YWRyZW5vX3Nob3csCj4+ICsjZW5kaWYKPj4gKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIC5kZWJ1Z2ZzX2luaXQgPSBhNXh4X2RlYnVnZnNfaW5pdCwK Pj4gwqAgI2VuZGlmCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAuZ3B1X2J1c3kgPSBhNXh4X2dwdV9i dXN5LAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dw dS5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuYwo+PiBpbmRl eCA1MjJkNDdhYzM2ZTEuLmQ0NmFlMmVkZTYxNiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21zbS9hZHJlbm8vYWRyZW5vX2dwdS5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20v YWRyZW5vL2FkcmVub19ncHUuYwo+PiBAQCAtMzc4LDYgKzM3OCw4IEBAIHN0cnVjdCBtc21fZ3B1 X3N0YXRlICphZHJlbm9fZ3B1X3N0YXRlX2dldChzdHJ1Y3QgCj4+IG1zbV9ncHUgKmdwdSkKPj4g wqDCoMKgwqDCoCBpZiAoIXN0YXRlKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7Cj4+ICvCoMKgwqAga3JlZl9pbml0KCZzdGF0ZS0+cmVmKTsKPj4gKwo+PiDC oMKgwqDCoMKgIGRvX2dldHRpbWVvZmRheSgmc3RhdGUtPnRpbWUpOwo+PiDCoMKgwqDCoMKgIGZv ciAoaSA9IDA7IGkgPCBncHUtPm5yX3JpbmdzOyBpKyspIHsKPj4gQEAgLTQxMywxOCArNDE1LDI4 IEBAIHN0cnVjdCBtc21fZ3B1X3N0YXRlIAo+PiAqYWRyZW5vX2dwdV9zdGF0ZV9nZXQoc3RydWN0 IG1zbV9ncHUgKmdwdSkKPj4gwqDCoMKgwqDCoCByZXR1cm4gc3RhdGU7Cj4+IMKgIH0KPj4gLXZv aWQgYWRyZW5vX2dwdV9zdGF0ZV9wdXQoc3RydWN0IG1zbV9ncHVfc3RhdGUgKnN0YXRlKQo+PiAr c3RhdGljIHZvaWQgYWRyZW5vX2dwdV9zdGF0ZV9kZXN0cm95KHN0cnVjdCBrcmVmICprcmVmKQo+ PiDCoCB7Cj4+IC3CoMKgwqAgaWYgKElTX0VSUl9PUl9OVUxMKHN0YXRlKSkKPj4gLcKgwqDCoMKg wqDCoMKgIHJldHVybjsKPj4gK8KgwqDCoCBzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqc3RhdGUgPSBj b250YWluZXJfb2Yoa3JlZiwKPj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBtc21fZ3B1X3N0YXRl LCByZWYpOwo+PiArwqDCoMKgIGtmcmVlKHN0YXRlLT5jb21tKTsKPj4gK8KgwqDCoCBrZnJlZShz dGF0ZS0+Y21kKTsKPj4gwqDCoMKgwqDCoCBrZnJlZShzdGF0ZS0+cmVnaXN0ZXJzKTsKPj4gwqDC oMKgwqDCoCBrZnJlZShzdGF0ZSk7Cj4+IMKgIH0KPj4gLSNpZmRlZiBDT05GSUdfREVCVUdfRlMK Pj4gK2ludCBhZHJlbm9fZ3B1X3N0YXRlX3B1dChzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqc3RhdGUp Cj4+ICt7Cj4+ICvCoMKgwqAgaWYgKElTX0VSUl9PUl9OVUxMKHN0YXRlKSkKPj4gK8KgwqDCoMKg wqDCoMKgIHJldHVybiAxOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIGtyZWZfcHV0KCZzdGF0ZS0+ cmVmLCBhZHJlbm9fZ3B1X3N0YXRlX2Rlc3Ryb3kpOwo+PiArfQo+PiArCj4+ICsjaWYgZGVmaW5l ZChDT05GSUdfREVCVUdfRlMpIHx8IGRlZmluZWQoQ09ORklHX0RFVl9DT1JFRFVNUCkKPj4gwqAg dm9pZCBhZHJlbm9fc2hvdyhzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1Y3QgbXNtX2dwdV9zdGF0 ZSAqc3RhdGUsCj4+IC3CoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCj4+ICvCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX3ByaW50ZXIgKnApCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBz dHJ1Y3QgYWRyZW5vX2dwdSAqYWRyZW5vX2dwdSA9IHRvX2FkcmVub19ncHUoZ3B1KTsKPj4gwqDC oMKgwqDCoCBpbnQgaTsKPj4gQEAgLTQzMiwyMyArNDQ0LDIzIEBAIHZvaWQgYWRyZW5vX3Nob3co c3RydWN0IG1zbV9ncHUgKmdwdSwgc3RydWN0IAo+PiBtc21fZ3B1X3N0YXRlICpzdGF0ZSwKPj4g wqDCoMKgwqDCoCBpZiAoSVNfRVJSX09SX05VTEwoc3RhdGUpKQo+PiDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0dXJuOwo+PiAtwqDCoMKgIHNlcV9wcmludGYobSwgInN0YXR1czrCoMKgICUwOHhcbiIs IHN0YXRlLT5yYmJtX3N0YXR1cyk7Cj4+IC3CoMKgwqAgc2VxX3ByaW50ZihtLCAicmV2aXNpb246 ICVkICglZC4lZC4lZC4lZClcbiIsCj4+ICvCoMKgwqAgZHJtX3ByaW50ZihwLCAic3RhdHVzOsKg wqAgJTA4eFxuIiwgc3RhdGUtPnJiYm1fc3RhdHVzKTsKPj4gK8KgwqDCoCBkcm1fcHJpbnRmKHAs ICJyZXZpc2lvbjogJWQgKCVkLiVkLiVkLiVkKVxuIiwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgYWRyZW5vX2dwdS0+aW5mby0+cmV2biwgYWRyZW5vX2dwdS0+cmV2LmNvcmUsCj4+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFkcmVub19ncHUtPnJldi5tYWpvciwgYWRyZW5vX2dw dS0+cmV2Lm1pbm9yLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhZHJlbm9fZ3B1LT5y ZXYucGF0Y2hpZCk7Cj4+IMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IGdwdS0+bnJfcmluZ3M7 IGkrKykgewo+PiAtwqDCoMKgwqDCoMKgwqAgc2VxX3ByaW50ZihtLCAicmIgJWQ6IGZlbmNlOsKg wqDCoCAlZC8lZFxuIiwgaSwKPj4gK8KgwqDCoMKgwqDCoMKgIGRybV9wcmludGYocCwgInJiICVk OiBmZW5jZTrCoMKgwqAgJWQvJWRcbiIsIGksCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0YXRlLT5yaW5nW2ldLmZlbmNlLCBzdGF0ZS0+cmluZ1tpXS5zZXFubyk7Cj4+IC3CoMKgwqDC oMKgwqDCoCBzZXFfcHJpbnRmKG0sICLCoMKgwqDCoMKgIHJwdHI6wqDCoMKgwqAgJWRcbiIsIHN0 YXRlLT5yaW5nW2ldLnJwdHIpOwo+PiAtwqDCoMKgwqDCoMKgwqAgc2VxX3ByaW50ZihtLCAicmIg d3B0cjrCoCAlZFxuIiwgc3RhdGUtPnJpbmdbaV0ud3B0cik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBk cm1fcHJpbnRmKHAsICLCoMKgwqDCoMKgIHJwdHI6wqDCoMKgwqAgJWRcbiIsIHN0YXRlLT5yaW5n W2ldLnJwdHIpOwo+PiArwqDCoMKgwqDCoMKgwqAgZHJtX3ByaW50ZihwLCAicmIgd3B0cjrCoCAl ZFxuIiwgc3RhdGUtPnJpbmdbaV0ud3B0cik7Cj4+IMKgwqDCoMKgwqAgfQo+PiAtwqDCoMKgIHNl cV9wcmludGYobSwgIklPOnJlZ2lvbiAlcyAwMDAwMDAwMCAwMDAyMDAwMFxuIiwgZ3B1LT5uYW1l KTsKPj4gK8KgwqDCoCBkcm1fcHJpbnRmKHAsICJJTzpyZWdpb24gJXMgMDAwMDAwMDAgMDAwMjAw MDBcbiIsIGdwdS0+bmFtZSk7Cj4+IMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IHN0YXRlLT5u cl9yZWdpc3RlcnM7IGkrKykgewo+PiAtwqDCoMKgwqDCoMKgwqAgc2VxX3ByaW50ZihtLCAiSU86 UiAlMDh4ICUwOHhcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoCBkcm1fcHJpbnRmKHAsICJJTzpSICUw OHggJTA4eFxuIiwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RhdGUtPnJlZ2lzdGVy c1tpICogMl0gPDwgMiwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RhdGUtPnJlZ2lz dGVyc1soaSAqIDIpICsgMV0pOwo+PiDCoMKgwqDCoMKgIH0KPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuaCAKPj4gYi9kcml2ZXJzL2dwdS9kcm0v bXNtL2FkcmVuby9hZHJlbm9fZ3B1LmgKPj4gaW5kZXggODE1YWU5OGM3ZmQxLi4wNzdiZjExNDlj MGIgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUu aAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmgKPj4gQEAg LTIxNiw3ICsyMTYsNyBAQCB2b2lkIGFkcmVub19mbHVzaChzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCBz dHJ1Y3QgCj4+IG1zbV9yaW5nYnVmZmVyICpyaW5nKTsKPj4gwqAgYm9vbCBhZHJlbm9faWRsZShz dHJ1Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1Y3QgbXNtX3JpbmdidWZmZXIgKnJpbmcpOwo+PiDCoCAj aWZkZWYgQ09ORklHX0RFQlVHX0ZTCj4+IMKgIHZvaWQgYWRyZW5vX3Nob3coc3RydWN0IG1zbV9n cHUgKmdwdSwgc3RydWN0IG1zbV9ncHVfc3RhdGUgKnN0YXRlLAo+PiAtwqDCoMKgwqDCoMKgwqAg c3RydWN0IHNlcV9maWxlICptKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fcHJpbnRl ciAqcCk7Cj4+IMKgICNlbmRpZgo+PiDCoCB2b2lkIGFkcmVub19kdW1wX2luZm8oc3RydWN0IG1z bV9ncHUgKmdwdSk7Cj4+IMKgIHZvaWQgYWRyZW5vX2R1bXAoc3RydWN0IG1zbV9ncHUgKmdwdSk7 Cj4+IEBAIC0yMjksNyArMjI5LDcgQEAgaW50IGFkcmVub19ncHVfaW5pdChzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtLCBzdHJ1Y3QgCj4+IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPj4gwqAgdm9pZCBh ZHJlbm9fZ3B1X2NsZWFudXAoc3RydWN0IGFkcmVub19ncHUgKmdwdSk7Cj4+IMKgIHN0cnVjdCBt c21fZ3B1X3N0YXRlICphZHJlbm9fZ3B1X3N0YXRlX2dldChzdHJ1Y3QgbXNtX2dwdSAqZ3B1KTsK Pj4gLXZvaWQgYWRyZW5vX2dwdV9zdGF0ZV9wdXQoc3RydWN0IG1zbV9ncHVfc3RhdGUgKnN0YXRl KTsKPj4gK2ludCBhZHJlbm9fZ3B1X3N0YXRlX3B1dChzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqc3Rh dGUpOwo+PiDCoCAvKiByaW5nYnVmZmVyIGhlbHBlcnMgKHRoZSBwYXJ0cyB0aGF0IGFyZSBhZHJl bm8gc3BlY2lmaWMpICovCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9k ZWJ1Z2ZzLmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZGVidWdmcy5jCj4+IGluZGV4 IGVhMjBlYjBhZDc0Ny4uOWFlOWUwYTEyYjNhIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vbXNtL21zbV9kZWJ1Z2ZzLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZGVi dWdmcy5jCj4+IEBAIC0yOSw2ICsyOSw3IEBAIHN0cnVjdCBtc21fZ3B1X3Nob3dfcHJpdiB7Cj4+ IMKgIHN0YXRpYyBpbnQgbXNtX2dwdV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJn KQo+PiDCoCB7Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9wcmludGVyIHAgPSBkcm1fc2VxX2ZpbGVf cHJpbnRlcihtKTsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgbXNtX2dwdV9zaG93X3ByaXYgKnNob3df cHJpdiA9IG0tPnByaXZhdGU7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAq cHJpdiA9IHNob3dfcHJpdi0+ZGV2LT5kZXZfcHJpdmF0ZTsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3Qg bXNtX2dwdSAqZ3B1ID0gcHJpdi0+Z3B1Owo+PiBAQCAtMzgsOCArMzksOCBAQCBzdGF0aWMgaW50 IG1zbV9ncHVfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZykKPj4gwqDCoMKgwqDC oCBpZiAocmV0KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4gLcKgwqDCoCBz ZXFfcHJpbnRmKG0sICIlcyBTdGF0dXM6XG4iLCBncHUtPm5hbWUpOwo+PiAtwqDCoMKgIGdwdS0+ ZnVuY3MtPnNob3coZ3B1LCBzaG93X3ByaXYtPnN0YXRlLCBtKTsKPj4gK8KgwqDCoCBkcm1fcHJp bnRmKCZwLCAiJXMgU3RhdHVzOlxuIiwgZ3B1LT5uYW1lKTsKPj4gK8KgwqDCoCBncHUtPmZ1bmNz LT5zaG93KGdwdSwgc2hvd19wcml2LT5zdGF0ZSwgJnApOwo+PiDCoMKgwqDCoMKgIG11dGV4X3Vu bG9jaygmc2hvd19wcml2LT5kZXYtPnN0cnVjdF9tdXRleCk7Cj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL21zbV9ncHUuYyAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9n cHUuYwo+PiBpbmRleCAyY2EzNTQwNDcyNTAuLmYzNmI0MTVlMTIzYiAxMDA2NDQKPj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ3B1LmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21z bS9tc21fZ3B1LmMKPj4gQEAgLTIwLDEwICsyMCwxMSBAQAo+PiDCoCAjaW5jbHVkZSAibXNtX21t dS5oIgo+PiDCoCAjaW5jbHVkZSAibXNtX2ZlbmNlLmgiCj4+ICsjaW5jbHVkZSA8Z2VuZXJhdGVk L3V0c3JlbGVhc2UuaD4KPj4gwqAgI2luY2x1ZGUgPGxpbnV4L3N0cmluZ19oZWxwZXJzLmg+Cj4+ IMKgICNpbmNsdWRlIDxsaW51eC9wbV9vcHAuaD4KPj4gwqAgI2luY2x1ZGUgPGxpbnV4L2RldmZy ZXEuaD4KPj4gLQo+PiArI2luY2x1ZGUgPGxpbnV4L2RldmNvcmVkdW1wLmg+Cj4+IMKgIC8qCj4+ IMKgwqAgKiBQb3dlciBNYW5hZ2VtZW50Ogo+PiBAQCAtMjczLDYgKzI3NCw4MyBAQCBpbnQgbXNt X2dwdV9od19pbml0KHN0cnVjdCBtc21fZ3B1ICpncHUpCj4+IMKgwqDCoMKgwqAgcmV0dXJuIHJl dDsKPj4gwqAgfQo+PiArI2lmZGVmIENPTkZJR19ERVZfQ09SRURVTVAKPj4gK3N0YXRpYyBzc2l6 ZV90IG1zbV9ncHVfZGV2Y29yZWR1bXBfcmVhZChjaGFyICpidWZmZXIsIGxvZmZfdCBvZmZzZXQs Cj4+ICvCoMKgwqDCoMKgwqDCoCBzaXplX3QgY291bnQsIHZvaWQgKmRhdGEsIHNpemVfdCBkYXRh bGVuKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBtc21fZ3B1ICpncHUgPSBkYXRhOwo+PiArwqDC oMKgIHN0cnVjdCBkcm1fcHJpbnRfaXRlcmF0b3IgaXRlcjsKPj4gK8KgwqDCoCBzdHJ1Y3QgZHJt X3ByaW50ZXIgcDsKPj4gK8KgwqDCoCBzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqc3RhdGU7Cj4+ICsK Pj4gK8KgwqDCoCBzdGF0ZSA9IG1zbV9ncHVfY3Jhc2hzdGF0ZV9nZXQoZ3B1KTsKPj4gK8KgwqDC oCBpZiAoIXN0YXRlKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+ICsKPj4gK8KgwqDC oCBpdGVyLmRhdGEgPSBidWZmZXI7Cj4+ICvCoMKgwqAgaXRlci5vZmZzZXQgPSAwOwo+PiArwqDC oMKgIGl0ZXIuc3RhcnQgPSBvZmZzZXQ7Cj4+ICvCoMKgwqAgaXRlci5yZW1haW4gPSBjb3VudDsK PiAKPiBJIHRoaW5rIEkgdW5kZXJzdG9vZCBob3cgdGhpcyB3b3Jrcy4gU28gdGhpcyByZWFkIGNv dWxkIGdldCBjYWxsZWQgbWFueSAKPiB0aW1lcyBiZWZvcmUgd2UgYXJlIGRvbmUgcmVhZGluZyBh bmQgZXZlcnkgdGltZSB3ZSBzdGFydCBmcm9tIHNjcmF0Y2guCj4gV2h5IGRvbid0IHdlIGNvcHkg ZXZlcnl0aGluZyB0byBhIGJ1ZmZlciBiZWZvcmUgaGFuZChyaWdodCB3aGVuIHdlIAo+IGNhcHR1 cmUgdGhlIGNyYXNoIHN0YXRlKSBhbmQgdGhlbiB1c2UgdGhlIGJ1ZmZlciBoZXJlIGZvciBjb3B5 aW5nIHRvIHRoZSAKPiB1c2VyPyBXZSBkbyBnZXQgdGhlIG9mZnNldCB0byB0aGUgYnVmZmVyIGFz IGlucHV0LiBUaGlzIHdpbGwgcHJvYmFibHkgCj4gc2F2ZSB1cyBmcm9tIHN0YXJ0aW5nIGZyb20g dGhlIGZpcnN0IHByaW50IGV2ZXJ5IHRpbWU/CgphaCEgbmV2ZXIgbWluZC4gSSBjaGVja2VkIHRo ZSBwcmludGVyIGNvZGUsIGFuZCB0aGlzIHNob3VsZCBiZSBva2F5LCBJIAp0aGluay4KCj4+ICsK Pj4gK8KgwqDCoCBwID0gZHJtX2NvcmVkdW1wX3ByaW50ZXIoJml0ZXIpOwo+PiArCj4+ICvCoMKg wqAgZHJtX3ByaW50ZigmcCwgIi0tLVxuIik7Cj4+ICvCoMKgwqAgZHJtX3ByaW50ZigmcCwgImtl cm5lbDogIiBVVFNfUkVMRUFTRSAiXG4iKTsKPj4gK8KgwqDCoCBkcm1fcHJpbnRmKCZwLCAibW9k dWxlOiAiIEtCVUlMRF9NT0ROQU1FICJcbiIpOwo+PiArwqDCoMKgIGRybV9wcmludGYoJnAsICJ0 aW1lOiAlbGQuJWxkXG4iLAo+PiArwqDCoMKgwqDCoMKgwqAgc3RhdGUtPnRpbWUudHZfc2VjLCBz dGF0ZS0+dGltZS50dl91c2VjKTsKPj4gK8KgwqDCoCBpZiAoc3RhdGUtPmNvbW0pCj4+ICvCoMKg wqDCoMKgwqDCoCBkcm1fcHJpbnRmKCZwLCAiY29tbTogJXNcbiIsIHN0YXRlLT5jb21tKTsKPj4g K8KgwqDCoCBpZiAoc3RhdGUtPmNtZCkKPj4gK8KgwqDCoMKgwqDCoMKgIGRybV9wcmludGYoJnAs ICJjbWRsaW5lOiAlc1xuIiwgc3RhdGUtPmNtZCk7Cj4+ICsKPj4gK8KgwqDCoCBncHUtPmZ1bmNz LT5zaG93KGdwdSwgc3RhdGUsICZwKTsKPj4gKwo+PiArwqDCoMKgIG1zbV9ncHVfY3Jhc2hzdGF0 ZV9wdXQoZ3B1KTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiBjb3VudCAtIGl0ZXIucmVtYWluOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBtc21fZ3B1X2RldmNvcmVkdW1wX2ZyZWUodm9pZCAq ZGF0YSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgbXNtX2dwdSAqZ3B1ID0gZGF0YTsKPj4gKwo+ PiArwqDCoMKgIG1zbV9ncHVfY3Jhc2hzdGF0ZV9wdXQoZ3B1KTsKPj4gK30KPj4gKwo+PiArc3Rh dGljIHZvaWQgbXNtX2dwdV9jcmFzaHN0YXRlX2NhcHR1cmUoc3RydWN0IG1zbV9ncHUgKmdwdSwg Y2hhciAqY29tbSwKPj4gK8KgwqDCoMKgwqDCoMKgIGNoYXIgKmNtZCkKPj4gK3sKPj4gK8KgwqDC oCBzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqc3RhdGU7Cj4+ICsKPj4gK8KgwqDCoCAvKiBPbmx5IHNh dmUgb25lIGNyYXNoIHN0YXRlIGF0IGEgYSB0aW1lICovCj4gcmVtb3ZlIGV4dHJhICdhJwo+PiAr wqDCoMKgIGlmIChncHUtPmNyYXNoc3RhdGUpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+ ICsKPj4gK8KgwqDCoCBzdGF0ZSA9IGdwdS0+ZnVuY3MtPmdwdV9zdGF0ZV9nZXQoZ3B1KTsKPiBH UFUgbWlnaHQgZW50ZXIgc2x1bWJlciBieSB0aGlzIHRpbWUsIHNvIHdlIG1heSBoYXZlIHRvIGdl dC9wdXQgc3luYyBydW4gCj4gdGltZSBwbSBvcHMgaGVyZT8KPj4gK8KgwqDCoCBpZiAoSVNfRVJS X09SX05VTEwoc3RhdGUpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiArCj4+ICvCoMKg wqAgLyogRmlsbCBpbiB0aGUgYWRkaXRpb25hbCBjcmFzaCBzdGF0ZSBpbmZvcm1hdGlvbiAqLwo+ PiArwqDCoMKgIHN0YXRlLT5jb21tID0ga3N0cmR1cChjb21tLCBHRlBfS0VSTkVMKTsKPj4gK8Kg wqDCoCBzdGF0ZS0+Y21kID0ga3N0cmR1cChjbWQsIEdGUF9LRVJORUwpOwo+PiArCj4+ICvCoMKg wqAga3JlZl9pbml0KCZzdGF0ZS0+cmVmKTsKPiBUaGlzIGlzIG5vdCBuZWVkZWQsIGFkcmVub19n cHVfc3RhdGVfZ2V0KCkgdGFrZXMgY2FyZSBvZiB0aGlzCj4+ICsKPj4gK8KgwqDCoCAvKiBTZXQg dGhlIGFjdGl2ZSBjcmFzaCBzdGF0ZSB0byBiZSBkdW1wZWQgb24gZmFpbHVyZSAqLwo+PiArwqDC oMKgIGdwdS0+Y3Jhc2hzdGF0ZSA9IHN0YXRlOwo+PiArCj4+ICvCoMKgwqAgLyogRklYTUU6IFJl bGVhc2UgdGhlIGNyYXNoc3RhdGUgaWYgdGhpcyBlcnJvcnMgb3V0PyAqLwo+PiArwqDCoMKgIGRl dl9jb3JlZHVtcG0oZ3B1LT5kZXYtPmRldiwgVEhJU19NT0RVTEUsIGdwdSwgMCwgR0ZQX0tFUk5F TCwKPj4gK8KgwqDCoMKgwqDCoMKgIG1zbV9ncHVfZGV2Y29yZWR1bXBfcmVhZCwgbXNtX2dwdV9k ZXZjb3JlZHVtcF9mcmVlKTsKPj4gK30KPj4gKyNlbHNlCj4+ICtzdGF0aWMgdm9pZCBtc21fZ3B1 X2NyYXNoc3RhdGVfY2FwdHVyZShzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCBjaGFyICpjb21tLAo+PiAr wqDCoMKgwqDCoMKgwqAgY2hhciAqY21kKQo+PiArewo+PiArfQo+PiArI2VuZGlmCj4+ICsKPj4g wqAgLyoKPj4gwqDCoCAqIEhhbmdjaGVjayBkZXRlY3Rpb24gZm9yIGxvY2tlZCBncHU6Cj4+IMKg wqAgKi8KPj4gQEAgLTM1Niw2ICs0MzQsOSBAQCBzdGF0aWMgdm9pZCByZWNvdmVyX3dvcmtlcihz dHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1z bV9yZF9kdW1wX3N1Ym1pdChwcml2LT5oYW5ncmQsIHN1Ym1pdCwgTlVMTCk7Cj4+IMKgwqDCoMKg wqAgfQo+PiArwqDCoMKgIC8qIFJlY29yZCB0aGUgY3Jhc2ggc3RhdGUgKi8KPj4gK8KgwqDCoCBt c21fZ3B1X2NyYXNoc3RhdGVfY2FwdHVyZShncHUsIGNvbW0sIGNtZCk7Cj4+ICsKPj4gwqDCoMKg wqDCoCBrZnJlZShjbWQpOwo+PiDCoMKgwqDCoMKgIGtmcmVlKGNvbW0pOwo+PiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ3B1LmggCj4+IGIvZHJpdmVycy9ncHUvZHJtL21z bS9tc21fZ3B1LmgKPj4gaW5kZXggNDcwZjNiYjVmODM0Li5lNjVmNTA3OTU0YzAgMTAwNjQ0Cj4+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dwdS5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9tc20vbXNtX2dwdS5oCj4+IEBAIC02NiwxMyArNjYsMTMgQEAgc3RydWN0IG1zbV9ncHVf ZnVuY3Mgewo+PiDCoCAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCj4+IMKgwqDCoMKgwqAgLyogc2hv dyBHUFUgc3RhdHVzIGluIGRlYnVnZnM6ICovCj4+IMKgwqDCoMKgwqAgdm9pZCAoKnNob3cpKHN0 cnVjdCBtc21fZ3B1ICpncHUsIHN0cnVjdCBtc21fZ3B1X3N0YXRlICpzdGF0ZSwKPj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHNlcV9maWxlICptKTsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgc3RydWN0IGRybV9wcmludGVyICpwKTsKPj4gwqDCoMKgwqDCoCAvKiBmb3IgZ2Vu ZXJhdGlvbiBzcGVjaWZpYyBkZWJ1Z2ZzOiAqLwo+PiDCoMKgwqDCoMKgIGludCAoKmRlYnVnZnNf aW5pdCkoc3RydWN0IG1zbV9ncHUgKmdwdSwgc3RydWN0IGRybV9taW5vciAqbWlub3IpOwo+PiDC oCAjZW5kaWYKPj4gwqDCoMKgwqDCoCBpbnQgKCpncHVfYnVzeSkoc3RydWN0IG1zbV9ncHUgKmdw dSwgdWludDY0X3QgKnZhbHVlKTsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAq KCpncHVfc3RhdGVfZ2V0KShzdHJ1Y3QgbXNtX2dwdSAqZ3B1KTsKPj4gLcKgwqDCoCB2b2lkICgq Z3B1X3N0YXRlX3B1dCkoc3RydWN0IG1zbV9ncHVfc3RhdGUgKnN0YXRlKTsKPj4gK8KgwqDCoCBp bnQgKCpncHVfc3RhdGVfcHV0KShzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSAqc3RhdGUpOwo+PiDCoCB9 Owo+PiDCoCBzdHJ1Y3QgbXNtX2dwdSB7Cj4+IEBAIC0xMzMsNiArMTMzLDggQEAgc3RydWN0IG1z bV9ncHUgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgdTY0IGJ1c3lfY3ljbGVzOwo+PiDCoMKgwqDC oMKgwqDCoMKgwqAga3RpbWVfdCB0aW1lOwo+PiDCoMKgwqDCoMKgIH0gZGV2ZnJlcTsKPj4gKwo+ PiArwqDCoMKgIHN0cnVjdCBtc21fZ3B1X3N0YXRlICpjcmFzaHN0YXRlOwo+PiDCoCB9Owo+PiDC oCAvKiBJdCB0dXJucyBvdXQgdGhhdCBhbGwgdGFyZ2V0cyB1c2UgdGhlIHNhbWUgcmluZ2J1ZmZl ciBzaXplICovCj4+IEBAIC0xODAsNiArMTgyLDcgQEAgc3RydWN0IG1zbV9ncHVfc3VibWl0cXVl dWUgewo+PiDCoCB9Owo+PiDCoCBzdHJ1Y3QgbXNtX2dwdV9zdGF0ZSB7Cj4+ICvCoMKgwqAgc3Ry dWN0IGtyZWYgcmVmOwo+PiDCoMKgwqDCoMKgIHN0cnVjdCB0aW1ldmFsIHRpbWU7Cj4+IMKgwqDC oMKgwqAgc3RydWN0IHsKPj4gQEAgLTE5Myw2ICsxOTYsOSBAQCBzdHJ1Y3QgbXNtX2dwdV9zdGF0 ZSB7Cj4+IMKgwqDCoMKgwqAgdTMyICpyZWdpc3RlcnM7Cj4+IMKgwqDCoMKgwqAgdTMyIHJiYm1f c3RhdHVzOwo+PiArCj4+ICvCoMKgwqAgY2hhciAqY29tbTsKPj4gK8KgwqDCoCBjaGFyICpjbWQ7 Cj4+IMKgIH07Cj4+IMKgIHN0YXRpYyBpbmxpbmUgdm9pZCBncHVfd3JpdGUoc3RydWN0IG1zbV9n cHUgKmdwdSwgdTMyIHJlZywgdTMyIGRhdGEpCj4+IEBAIC0yNzQsNCArMjgwLDMyIEBAIHN0YXRp YyBpbmxpbmUgdm9pZCBtc21fc3VibWl0cXVldWVfcHV0KHN0cnVjdCAKPj4gbXNtX2dwdV9zdWJt aXRxdWV1ZSAqcXVldWUpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBrcmVmX3B1dCgmcXVldWUtPnJl ZiwgbXNtX3N1Ym1pdHF1ZXVlX2Rlc3Ryb3kpOwo+PiDCoCB9Cj4+ICtzdGF0aWMgaW5saW5lIHN0 cnVjdCBtc21fZ3B1X3N0YXRlICptc21fZ3B1X2NyYXNoc3RhdGVfZ2V0KHN0cnVjdCAKPj4gbXNt X2dwdSAqZ3B1KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBtc21fZ3B1X3N0YXRlICpzdGF0ZSA9 IE5VTEw7Cj4+ICsKPj4gK8KgwqDCoCBtdXRleF9sb2NrKCZncHUtPmRldi0+c3RydWN0X211dGV4 KTsKPj4gKwo+PiArwqDCoMKgIGlmIChncHUtPmNyYXNoc3RhdGUpIHsKPj4gK8KgwqDCoMKgwqDC oMKgIGtyZWZfZ2V0KCZncHUtPmNyYXNoc3RhdGUtPnJlZik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBz dGF0ZSA9IGdwdS0+Y3Jhc2hzdGF0ZTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBtdXRl eF91bmxvY2soJmdwdS0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJu IHN0YXRlOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHZvaWQgbXNtX2dwdV9jcmFzaHN0 YXRlX3B1dChzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQo+PiArewo+PiArwqDCoMKgIG11dGV4X2xvY2so JmdwdS0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+PiArCj4+ICvCoMKgwqAgaWYgKGdwdS0+Y3Jhc2hz dGF0ZSkgewo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGdwdS0+ZnVuY3MtPmdwdV9zdGF0ZV9wdXQo Z3B1LT5jcmFzaHN0YXRlKSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ3B1LT5jcmFzaHN0 YXRlID0gTlVMTDsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBtdXRleF91bmxvY2soJmdw dS0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+PiArfQo+PiArCj4+IMKgICNlbmRpZiAvKiBfX01TTV9H UFVfSF9fICovCj4+Cj4gCgotLSAKVGhlIFF1YWxjb21tIElubm92YXRpb24gQ2VudGVyLCBJbmMu IGlzIGEgbWVtYmVyIG9mIHRoZSBDb2RlIEF1cm9yYSBGb3J1bSwKTGludXggRm91bmRhdGlvbiBD b2xsYWJvcmF0aXZlIFByb2plY3QKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v ZnJlZWRyZW5vCg==