From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jordan Crouse Subject: [PATCH 5/5] drm/msm: Add A6XX device support Date: Mon, 6 Aug 2018 11:33:24 -0600 Message-ID: <20180806173324.16074-6-jcrouse@codeaurora.org> References: <20180806173324.16074-1-jcrouse@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180806173324.16074-1-jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, hoegsberg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org QWRkIHN1cHBvcnQgZm9yIHRoZSBBNlhYIGZhbWlseSBvZiBBZHJlbm8gR1BVcy4gVGhlIGJpZ2dl c3QgYWRkaXRpb24KaXMgdGhlIEdNVSAoR3JhcGhpY3MgTWFuYWdlbWVudCBVbml0KSB3aGljaCB0 YWtlcyBvdmVyIG1vc3Qgb2YgdGhlCnBvd2VyIG1hbmFnZW1lbnQgb2YgdGhlIEdQVSBpdHNlbGYg YnV0IGluIGEgaXJvbmljIHR3aXN0IG9mIGZhdGUKbmVlZHMgYSBnb29kbHkgYW1vdW50IG9mIG1h bmFnZW1lbnQgaXRzZWxmLiBBZGQgc3VwcG9ydCBmb3IgdGhlCkE2WFggY29yZSBjb2RlLCB0aGUg R01VIGFuZCB0aGUgSEZJIChoYXJkd2FyZSBmaXJtd2FyZSBpbnRlcmZhY2UpCnF1ZXVlIHRoYXQg dGhlIENQVSB1c2VzIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIEdNVS4KClNpZ25lZC1vZmYtYnk6 IEpvcmRhbiBDcm91c2UgPGpjcm91c2VAY29kZWF1cm9yYS5vcmc+Ci0tLQogZHJpdmVycy9ncHUv ZHJtL21zbS9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAgMyArCiBkcml2ZXJzL2dwdS9kcm0v bXNtL2FkcmVuby9hNnh4X2dtdS5jICAgICAgfCAxMjA3ICsrKysrKysrKysrKysrKysrKysrCiBk cml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dtdS5oICAgICAgfCAgMTYyICsrKwogZHJp dmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHUuYyAgICAgIHwgIDgxOCArKysrKysrKysr KysrCiBkcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdS5oICAgICAgfCAgIDYwICsK IGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfaGZpLmMgICAgICB8ICA0MzUgKysrKysr KwogZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9oZmkuaCAgICAgIHwgIDEyNyArKwog ZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRyZW5vX2RldmljZS5jIHwgICAxMiArCiBkcml2 ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmggICAgfCAgICAzICsKIGRyaXZlcnMv Z3B1L2RybS9tc20vbXNtX2dwdS5jICAgICAgICAgICAgICB8ICAgIDIgKy0KIDEwIGZpbGVzIGNo YW5nZWQsIDI4MjggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ211LmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dtdS5oCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHUuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1LmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2hmaS5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9oZmkuaAoKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL01h a2VmaWxlCmluZGV4IDdjNzczZTAwMzY2My4uMjYxZmE3OWQ0NTZkIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vbXNtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vTWFrZWZp bGUKQEAgLTExLDYgKzExLDkgQEAgbXNtLXkgOj0gXAogCWFkcmVuby9hNXh4X2dwdS5vIFwKIAlh ZHJlbm8vYTV4eF9wb3dlci5vIFwKIAlhZHJlbm8vYTV4eF9wcmVlbXB0Lm8gXAorCWFkcmVuby9h Nnh4X2dwdS5vIFwKKwlhZHJlbm8vYTZ4eF9nbXUubyBcCisJYWRyZW5vL2E2eHhfaGZpLm8gXAog CWhkbWkvaGRtaS5vIFwKIAloZG1pL2hkbWlfYXVkaW8ubyBcCiAJaGRtaS9oZG1pX2JyaWRnZS5v IFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ211LmMgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dtdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uZmJiNTAxOTg2NzIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9nbXUuYwpAQCAtMCwwICsxLDEyMDcgQEAKKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKiBDb3B5cmlnaHQgKGMpIDIwMTct MjAxOCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKi8KKworI2lu Y2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgorI2luY2x1ZGUg PGxpbnV4L3BtX29wcC5oPgorI2luY2x1ZGUgPHNvYy9xY29tL2NtZC1kYi5oPgorCisjaW5jbHVk ZSAiYTZ4eF9ncHUuaCIKKyNpbmNsdWRlICJhNnh4X2dtdS54bWwuaCIKKworc3RhdGljIGlycXJl dHVybl90IGE2eHhfZ211X2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBhNnh4 X2dtdSAqZ211ID0gZGF0YTsKKwl1MzIgc3RhdHVzOworCisJc3RhdHVzID0gZ211X3JlYWQoZ211 LCBSRUdfQTZYWF9HTVVfQU9fSE9TVF9JTlRFUlJVUFRfU1RBVFVTKTsKKwlnbXVfd3JpdGUoZ211 LCBSRUdfQTZYWF9HTVVfQU9fSE9TVF9JTlRFUlJVUFRfQ0xSLCBzdGF0dXMpOworCisJaWYgKHN0 YXR1cyAmIEE2WFhfR01VX0FPX0hPU1RfSU5URVJSVVBUX1NUQVRVU19XRE9HX0JJVEUpIHsKKwkJ ZGV2X2Vycl9yYXRlbGltaXRlZChnbXUtPmRldiwgIkdNVSB3YXRjaGRvZyBleHBpcmVkXG4iKTsK KworCQkvKiBUZW1wb3JhcnkgdW50aWwgd2UgY2FuIHJlY292ZXIgc2FmZWx5ICovCisJCUJVRygp OworCX0KKworCWlmIChzdGF0dXMgJiAgQTZYWF9HTVVfQU9fSE9TVF9JTlRFUlJVUFRfU1RBVFVT X0hPU1RfQUhCX0JVU19FUlJPUikKKwkJZGV2X2Vycl9yYXRlbGltaXRlZChnbXUtPmRldiwgIkdN VSBBSEIgYnVzIGVycm9yXG4iKTsKKworCWlmIChzdGF0dXMgJiBBNlhYX0dNVV9BT19IT1NUX0lO VEVSUlVQVF9TVEFUVVNfRkVOQ0VfRVJSKQorCQlkZXZfZXJyX3JhdGVsaW1pdGVkKGdtdS0+ZGV2 LCAiR01VIGZlbmNlIGVycm9yOiAweCV4XG4iLAorCQkJZ211X3JlYWQoZ211LCBSRUdfQTZYWF9H TVVfQUhCX0ZFTkNFX1NUQVRVUykpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0 aWMgaXJxcmV0dXJuX3QgYTZ4eF9oZmlfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3Ry dWN0IGE2eHhfZ211ICpnbXUgPSBkYXRhOworCXUzMiBzdGF0dXM7CisKKwlzdGF0dXMgPSBnbXVf cmVhZChnbXUsIFJFR19BNlhYX0dNVV9HTVUySE9TVF9JTlRSX0lORk8pOworCWdtdV93cml0ZShn bXUsIFJFR19BNlhYX0dNVV9HTVUySE9TVF9JTlRSX0NMUiwgc3RhdHVzKTsKKworCWlmIChzdGF0 dXMgJiBBNlhYX0dNVV9HTVUySE9TVF9JTlRSX0lORk9fTVNHUSkKKwkJdGFza2xldF9zY2hlZHVs ZSgmZ211LT5oZmlfdGFza2xldCk7CisKKwlpZiAoc3RhdHVzICYgQTZYWF9HTVVfR01VMkhPU1Rf SU5UUl9JTkZPX0NNM19GQVVMVCkgeworCQlkZXZfZXJyX3JhdGVsaW1pdGVkKGdtdS0+ZGV2LCAi R01VIGZpcm13YXJlIGZhdWx0XG4iKTsKKworCQkvKiBUZW1wb3JhcnkgdW50aWwgd2UgY2FuIHJl Y292ZXIgc2FmZWx5ICovCisJCUJVRygpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30K KworLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBHWCByYWlsIGlzIHN0aWxsIHBvd2VyZWQgKi8KK3N0 YXRpYyBib29sIGE2eHhfZ211X2d4X2lzX29uKHN0cnVjdCBhNnh4X2dtdSAqZ211KQoreworCXUz MiB2YWwgPSBnbXVfcmVhZChnbXUsIFJFR19BNlhYX0dNVV9TUFRQUkFDX1BXUl9DTEtfU1RBVFVT KTsKKworCXJldHVybiAhKHZhbCAmCisJCShBNlhYX0dNVV9TUFRQUkFDX1BXUl9DTEtfU1RBVFVT X0dYX0hNX0dEU0NfUE9XRVJfT0ZGIHwKKwkJQTZYWF9HTVVfU1BUUFJBQ19QV1JfQ0xLX1NUQVRV U19HWF9ITV9DTEtfT0ZGKSk7Cit9CisKK3N0YXRpYyBpbnQgYTZ4eF9nbXVfc2V0X2ZyZXEoc3Ry dWN0IGE2eHhfZ211ICpnbXUsIGludCBpbmRleCkKK3sKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZY WF9HTVVfRENWU19BQ0tfT1BUSU9OLCAwKTsKKworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dN VV9EQ1ZTX1BFUkZfU0VUVElORywKKwkJKChpbmRleCA8PCAyNCkgJiAweGZmKSB8ICgzICYgMHhm KSk7CisKKwkvKgorCSAqIFNlbmQgYW4gaW52YWxpZCBpbmRleCBhcyBhIHZvdGUgZm9yIHRoZSBi dXMgYmFuZHdpZHRoIGFuZCBsZXQgdGhlCisJICogZmlybXdhcmUgZGVjaWRlIG9uIHRoZSByaWdo dCB2b3RlCisJICovCisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX0RDVlNfQldfU0VUVElO RywgMHhmZik7CisKKwkvKiBTZXQgYW5kIGNsZWFyIHRoZSBPT0IgZm9yIERDVlMgdG8gdHJpZ2dl ciB0aGUgR01VICovCisJYTZ4eF9nbXVfc2V0X29vYihnbXUsIEdNVV9PT0JfRENWU19TRVQpOwor CWE2eHhfZ211X2NsZWFyX29vYihnbXUsIEdNVV9PT0JfRENWU19TRVQpOworCisJcmV0dXJuIGdt dV9yZWFkKGdtdSwgUkVHX0E2WFhfR01VX0RDVlNfUkVUVVJOKTsKK30KKworc3RhdGljIGJvb2wg YTZ4eF9nbXVfY2hlY2tfaWRsZV9sZXZlbChzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSkKK3sKKwl1MzIg dmFsOworCWludCBsb2NhbCA9IGdtdS0+aWRsZV9sZXZlbDsKKworCS8qIFNQVFAgYW5kIElGUEMg Ym90aCByZXBvcnQgYXMgSUZQQyAqLworCWlmIChnbXUtPmlkbGVfbGV2ZWwgPT0gR01VX0lETEVf U1RBVEVfU1BUUCkKKwkJbG9jYWwgPSBHTVVfSURMRV9TVEFURV9JRlBDOworCisJdmFsID0gZ211 X3JlYWQoZ211LCBSRUdfQTZYWF9HUFVfR01VX0NYX0dNVV9SUE1IX1BPV0VSX1NUQVRFKTsKKwor CWlmICh2YWwgPT0gbG9jYWwpIHsKKwkJaWYgKGdtdS0+aWRsZV9sZXZlbCAhPSBHTVVfSURMRV9T VEFURV9JRlBDIHx8CisJCQkhYTZ4eF9nbXVfZ3hfaXNfb24oZ211KSkKKwkJCXJldHVybiB0cnVl OworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyogV2FpdCBmb3IgdGhlIEdNVSB0byBnZXQg dG8gaXRzIG1vc3QgaWRsZSBzdGF0ZSAqLworaW50IGE2eHhfZ211X3dhaXRfZm9yX2lkbGUoc3Ry dWN0IGE2eHhfZ3B1ICphNnh4X2dwdSkKK3sKKwlzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSA9ICZhNnh4 X2dwdS0+Z211OworCisJcmV0dXJuIHNwaW5fdW50aWwoYTZ4eF9nbXVfY2hlY2tfaWRsZV9sZXZl bChnbXUpKTsKK30KKworc3RhdGljIGludCBhNnh4X2dtdV9zdGFydChzdHJ1Y3QgYTZ4eF9nbXUg KmdtdSkKK3sKKwlpbnQgcmV0OworCXUzMiB2YWw7CisKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZY WF9HTVVfQ00zX1NZU1JFU0VULCAxKTsKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfQ00z X1NZU1JFU0VULCAwKTsKKworCXJldCA9IGdtdV9wb2xsX3RpbWVvdXQoZ211LCBSRUdfQTZYWF9H TVVfQ00zX0ZXX0lOSVRfUkVTVUxULCB2YWwsCisJCXZhbCA9PSAweGJhYmVmYWNlLCAxMDAsIDEw MDAwKTsKKworCWlmIChyZXQpCisJCWRldl9lcnIoZ211LT5kZXYsICJHTVUgZmlybXdhcmUgaW5p dGFsaXphdGlvbiB0aW1lZCBvdXRcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlu dCBhNnh4X2dtdV9oZmlfc3RhcnQoc3RydWN0IGE2eHhfZ211ICpnbXUpCit7CisJdTMyIHZhbDsK KwlpbnQgcmV0OworCisJZ211X3JtdyhnbXUsIFJFR19BNlhYX0dNVV9HTVUySE9TVF9JTlRSX01B U0ssCisJCUE2WFhfR01VX0dNVTJIT1NUX0lOVFJfSU5GT19NU0dRLCAwKTsKKworCWdtdV93cml0 ZShnbXUsIFJFR19BNlhYX0dNVV9IRklfQ1RSTF9JTklULCAxKTsKKworCXJldCA9IGdtdV9wb2xs X3RpbWVvdXQoZ211LCBSRUdfQTZYWF9HTVVfSEZJX0NUUkxfU1RBVFVTLCB2YWwsCisJCXZhbCAm IDEsIDEwMCwgMTAwMDApOworCWlmIChyZXQpCisJCWRldl9lcnIoZ211LT5kZXYsICJVbmFibGUg dG8gc3RhcnQgdGhlIEhGSSBxdWV1ZXNcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworLyogVHJp Z2dlciBhIE9PQiAob3V0IG9mIGJhbmQpIHJlcXVlc3QgdG8gdGhlIEdNVSAqLworaW50IGE2eHhf Z211X3NldF9vb2Ioc3RydWN0IGE2eHhfZ211ICpnbXUsIGVudW0gYTZ4eF9nbXVfb29iX3N0YXRl IHN0YXRlKQoreworCWludCByZXQ7CisJdTMyIHZhbDsKKwlpbnQgcmVxdWVzdCwgYWNrOworCWNv bnN0IGNoYXIgKm5hbWU7CisKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBHTVVfT09CX0dQVV9T RVQ6CisJCXJlcXVlc3QgPSBHTVVfT09CX0dQVV9TRVRfUkVRVUVTVDsKKwkJYWNrID0gR01VX09P Ql9HUFVfU0VUX0FDSzsKKwkJbmFtZSA9ICJHUFVfU0VUIjsKKwkJYnJlYWs7CisJY2FzZSBHTVVf T09CX0JPT1RfU0xVTUJFUjoKKwkJcmVxdWVzdCA9IEdNVV9PT0JfQk9PVF9TTFVNQkVSX1JFUVVF U1Q7CisJCWFjayA9IEdNVV9PT0JfQk9PVF9TTFVNQkVSX0FDSzsKKwkJbmFtZSA9ICJCT09UX1NM VU1CRVIiOworCQlicmVhazsKKwljYXNlIEdNVV9PT0JfRENWU19TRVQ6CisJCXJlcXVlc3QgPSBH TVVfT09CX0RDVlNfUkVRVUVTVDsKKwkJYWNrID0gR01VX09PQl9EQ1ZTX0FDSzsKKwkJbmFtZSA9 ICJHUFVfRENWUyI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0K KworCS8qIFRyaWdnZXIgdGhlIGVxdWVzdGVkIE9PQiBvcGVyYXRpb24gKi8KKwlnbXVfd3JpdGUo Z211LCBSRUdfQTZYWF9HTVVfSE9TVDJHTVVfSU5UUl9TRVQsIDEgPDwgcmVxdWVzdCk7CisKKwkv KiBXYWl0IGZvciB0aGUgYWNrbm93bGVkZ2UgaW50ZXJydXB0ICovCisJcmV0ID0gZ211X3BvbGxf dGltZW91dChnbXUsIFJFR19BNlhYX0dNVV9HTVUySE9TVF9JTlRSX0lORk8sIHZhbCwKKwkJdmFs ICYgKDEgPDwgYWNrKSwgMTAwLCAxMDAwMCk7CisKKwlpZiAocmV0KQorCQlkZXZfZXJyKGdtdS0+ ZGV2LAorCQkJIlRpbWVvdXQgd2FpdGluZyBmb3IgR01VIE9PQiBzZXQgJXM6IDB4JXhcbiIsCisJ CQkJbmFtZSwKKwkJCQlnbXVfcmVhZChnbXUsIFJFR19BNlhYX0dNVV9HTVUySE9TVF9JTlRSX0lO Rk8pKTsKKworCS8qIENsZWFyIHRoZSBhY2tub3dsZWRnZSBpbnRlcnJ1cHQgKi8KKwlnbXVfd3Jp dGUoZ211LCBSRUdfQTZYWF9HTVVfR01VMkhPU1RfSU5UUl9DTFIsIDEgPDwgYWNrKTsKKworCXJl dHVybiByZXQ7Cit9CisKKy8qIENsZWFyIGEgcGVuZGluZyBPT0Igc3RhdGUgaW4gdGhlIEdNVSAq Lwordm9pZCBhNnh4X2dtdV9jbGVhcl9vb2Ioc3RydWN0IGE2eHhfZ211ICpnbXUsIGVudW0gYTZ4 eF9nbXVfb29iX3N0YXRlIHN0YXRlKQoreworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIEdNVV9P T0JfR1BVX1NFVDoKKwkJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX0hPU1QyR01VX0lOVFJf U0VULAorCQkJMSA8PCBHTVVfT09CX0dQVV9TRVRfQ0xFQVIpOworCQlicmVhazsKKwljYXNlIEdN VV9PT0JfQk9PVF9TTFVNQkVSOgorCQlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfSE9TVDJH TVVfSU5UUl9TRVQsCisJCQkxIDw8IEdNVV9PT0JfQk9PVF9TTFVNQkVSX0NMRUFSKTsKKwkJYnJl YWs7CisJY2FzZSBHTVVfT09CX0RDVlNfU0VUOgorCQlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9H TVVfSE9TVDJHTVVfSU5UUl9TRVQsCisJCQkxIDw8IEdNVV9PT0JfRENWU19DTEVBUik7CisJCWJy ZWFrOworCX0KK30KKworLyogRW5hYmxlIENQVSBjb250cm9sIG9mIFNQVFAgcG93ZXIgcG93ZXIg Y29sbGFwc2UgKi8KK3N0YXRpYyBpbnQgYTZ4eF9zcHRwcmFjX2VuYWJsZShzdHJ1Y3QgYTZ4eF9n bXUgKmdtdSkKK3sKKwlpbnQgcmV0OworCXUzMiB2YWw7CisKKwlnbXVfd3JpdGUoZ211LCBSRUdf QTZYWF9HTVVfR1hfU1BUUFJBQ19QT1dFUl9DT05UUk9MLCAweDc3ODAwMCk7CisKKwlyZXQgPSBn bXVfcG9sbF90aW1lb3V0KGdtdSwgUkVHX0E2WFhfR01VX1NQVFBSQUNfUFdSX0NMS19TVEFUVVMs IHZhbCwKKwkJKHZhbCAmIDB4MzgpID09IDB4MjgsIDEsIDEwMCk7CisKKwlpZiAocmV0KSB7CisJ CWRldl9lcnIoZ211LT5kZXYsICJVbmFibGUgdG8gcG93ZXIgb24gU1BUUFJBQzogMHgleFxuIiwK KwkJCWdtdV9yZWFkKGdtdSwgUkVHX0E2WFhfR01VX1NQVFBSQUNfUFdSX0NMS19TVEFUVVMpKTsK Kwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogRGlzYWJsZSBDUFUgY29udHJvbCBvZiBTUFRQIHBv d2VyIHBvd2VyIGNvbGxhcHNlICovCitzdGF0aWMgdm9pZCBhNnh4X3NwdHByYWNfZGlzYWJsZShz dHJ1Y3QgYTZ4eF9nbXUgKmdtdSkKK3sKKwl1MzIgdmFsOworCWludCByZXQ7CisKKwkvKiBNYWtl IHN1cmUgcmV0ZW50aW9uIGlzIG9uICovCisJZ211X3JtdyhnbXUsIFJFR19BNlhYX0dQVV9DQ19H WF9HRFNDUiwgMCwgKDEgPDwgMTEpKTsKKworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9H WF9TUFRQUkFDX1BPV0VSX0NPTlRST0wsIDB4Nzc4MDAxKTsKKworCXJldCA9IGdtdV9wb2xsX3Rp bWVvdXQoZ211LCBSRUdfQTZYWF9HTVVfU1BUUFJBQ19QV1JfQ0xLX1NUQVRVUywgdmFsLAorCQko dmFsICYgMHgwNCksIDEwMCwgMTAwMDApOworCisJaWYgKHJldCkKKwkJZGV2X2VycihnbXUtPmRl diwgImZhaWxlZCB0byBwb3dlciBvZmYgU1BUUFJBQzogMHgleFxuIiwKKwkJCWdtdV9yZWFkKGdt dSwgUkVHX0E2WFhfR01VX1NQVFBSQUNfUFdSX0NMS19TVEFUVVMpKTsKK30KKworLyogTGV0IHRo ZSBHTVUga25vdyB3ZSBhcmUgc3RhcnRpbmcgYSBib290IHNlcXVlbmNlICovCitzdGF0aWMgaW50 IGE2eHhfZ211X2dmeF9yYWlsX29uKHN0cnVjdCBhNnh4X2dtdSAqZ211KQoreworCXUzMiB2b3Rl OworCisJLyogTGV0IHRoZSBHTVUga25vdyB3ZSBhcmUgZ2V0dGluZyByZWFkeSBmb3IgYm9vdCAq LworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9CT09UX1NMVU1CRVJfT1BUSU9OLCAwKTsK KworCS8qIENob29zZSB0aGUgImRlZmF1bHQiIHBvd2VyIGxldmVsIGFzIHRoZSBoaWdoZXN0IGF2 YWlsYWJsZSAqLworCXZvdGUgPSBnbXUtPmd4X2FyY192b3Rlc1tnbXUtPm5yX2dwdV9mcmVxcyAt IDFdOworCisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX0dYX1ZPVEVfSURYLCB2b3RlICYg MHhmZik7CisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX01YX1ZPVEVfSURYLCAodm90ZSA+ PiA4KSAmIDB4ZmYpOworCisJLyogTGV0IHRoZSBHTVUga25vdyB0aGUgYm9vdCBzZXF1ZW5jZSBo YXMgc3RhcnRlZCAqLworCXJldHVybiBhNnh4X2dtdV9zZXRfb29iKGdtdSwgR01VX09PQl9CT09U X1NMVU1CRVIpOworfQorCisvKiBMZXQgdGhlIEdNVSBrbm93IHRoYXQgd2UgYXJlIGFib3V0IHRv IGdvIGludG8gc2x1bWJlciAqLworc3RhdGljIGludCBhNnh4X2dtdV9ub3RpZnlfc2x1bWJlcihz dHJ1Y3QgYTZ4eF9nbXUgKmdtdSkKK3sKKwlpbnQgcmV0OworCisJLyogRGlzYWJsZSB0aGUgcG93 ZXIgY291bnRlciBzbyB0aGUgR01VIGlzbid0IGJ1c3kgKi8KKwlnbXVfd3JpdGUoZ211LCBSRUdf QTZYWF9HTVVfQ1hfR01VX1BPV0VSX0NPVU5URVJfRU5BQkxFLCAwKTsKKworCS8qIERpc2FibGUg U1BUUF9QQyBpZiB0aGUgQ1BVIGlzIHJlc3BvbnNpYmxlIGZvciBpdCAqLworCWlmIChnbXUtPmlk bGVfbGV2ZWwgPCBHTVVfSURMRV9TVEFURV9TUFRQKQorCQlhNnh4X3NwdHByYWNfZGlzYWJsZShn bXUpOworCisJLyogVGVsbCB0aGUgR01VIHRvIGdldCByZWFkeSB0byBzbHVtYmVyICovCisJZ211 X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX0JPT1RfU0xVTUJFUl9PUFRJT04sIDEpOworCisJcmV0 ID0gYTZ4eF9nbXVfc2V0X29vYihnbXUsIEdNVV9PT0JfQk9PVF9TTFVNQkVSKTsKKwlhNnh4X2dt dV9jbGVhcl9vb2IoZ211LCBHTVVfT09CX0JPT1RfU0xVTUJFUik7CisKKwlpZiAoIXJldCkgewor CQkvKiBDaGVjayB0byBzZWUgaWYgdGhlIEdNVSByZWFsbHkgZGlkIHNsdW1iZXIgKi8KKwkJaWYg KGdtdV9yZWFkKGdtdSwgUkVHX0E2WFhfR1BVX0dNVV9DWF9HTVVfUlBNSF9QT1dFUl9TVEFURSkK KwkJCSE9IDB4MGYpIHsKKwkJCWRldl9lcnIoZ211LT5kZXYsICJUaGUgR01VIGRpZCBub3QgZ28g aW50byBzbHVtYmVyXG4iKTsKKwkJCXJldCA9IC1FVElNRURPVVQ7CisJCX0KKwl9CisKKwkvKiBQ dXQgZmVuY2UgaW50byBhbGxvdyBtb2RlICovCisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01V X0FPX0FIQl9GRU5DRV9DVFJMLCAwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGE2 eHhfcnBtaF9zdGFydChzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSkKK3sKKwlpbnQgcmV0OworCXUzMiB2 YWw7CisKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfUlNDQ19DT05UUk9MX1JFUSwgMSA8 PCAxKTsKKwkvKiBXYWl0IGZvciB0aGUgcmVnaXN0ZXIgdG8gZmluaXNoIHBvc3RpbmcgKi8KKwl3 bWIoKTsKKworCXJldCA9IGdtdV9wb2xsX3RpbWVvdXQoZ211LCBSRUdfQTZYWF9HTVVfUlNDQ19D T05UUk9MX0FDSywgdmFsLAorCQl2YWwgJiAoMSA8PCAxKSwgMTAwLCAxMDAwMCk7CisJaWYgKHJl dCkgeworCQlkZXZfZXJyKGdtdS0+ZGV2LCAiVW5hYmxlIHRvIHBvd2VyIG9uIHRoZSBHUFUgUlND XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBnbXVfcG9sbF90aW1lb3V0KGdtdSwg UkVHX0E2WFhfUlNDQ19TRVFfQlVTWV9EUlYwLCB2YWwsCisJCSF2YWwsIDEwMCwgMTAwMDApOwor CisJaWYgKCFyZXQpIHsKKwkJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX1JTQ0NfQ09OVFJP TF9SRVEsIDApOworCisJCS8qIFJlLWVuYWJsZSB0aGUgcG93ZXIgY291bnRlciAqLworCQlnbXVf d3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfQ1hfR01VX1BPV0VSX0NPVU5URVJfRU5BQkxFLCAxKTsK KwkJcmV0dXJuIDA7CisJfQorCisJZGV2X2VycihnbXUtPmRldiwgIkdQVSBSU0Mgc2VxdWVuY2Ug c3R1Y2sgd2hpbGUgd2FraW5nIHVwIHRoZSBHUFVcbiIpOworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyB2b2lkIGE2eHhfcnBtaF9zdG9wKHN0cnVjdCBhNnh4X2dtdSAqZ211KQoreworCWludCBy ZXQ7CisJdTMyIHZhbDsKKworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9SU0NDX0NPTlRS T0xfUkVRLCAxKTsKKworCXJldCA9IGdtdV9wb2xsX3RpbWVvdXQoZ211LCBSRUdfQTZYWF9HUFVf UlNDQ19SU0NfU1RBVFVTMF9EUlYwLAorCQl2YWwsIHZhbCAmICgxIDw8IDE2KSwgMTAwLCAxMDAw MCk7CisJaWYgKHJldCkKKwkJZGV2X2VycihnbXUtPmRldiwgIlVuYWJsZSB0byBwb3dlciBvZmYg dGhlIEdQVSBSU0NcbiIpOworCisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX1JTQ0NfQ09O VFJPTF9SRVEsIDApOworfQorCitzdGF0aWMgdm9pZCBhNnh4X2dtdV9ycG1oX2luaXQoc3RydWN0 IGE2eHhfZ211ICpnbXUpCit7CisJLyogRGlzYWJsZSBTREUgY2xvY2sgZ2F0aW5nICovCisJZ211 X3dyaXRlKGdtdSwgUkVHX0E2WFhfR1BVX1JTQ0NfUlNDX1NUQVRVUzBfRFJWMCwgQklUKDI0KSk7 CisKKwkvKiBTZXR1cCBSU0MgUERDIGhhbmRzaGFrZSBmb3Igc2xlZXAgYW5kIHdha2V1cCAqLwor CWdtdV93cml0ZShnbXUsIFJFR19BNlhYX1JTQ0NfUERDX1NMQVZFX0lEX0RSVjAsIDEpOworCWdt dV93cml0ZShnbXUsIFJFR19BNlhYX1JTQ0NfSElEREVOX1RDU19DTUQwX0RBVEEsIDApOworCWdt dV93cml0ZShnbXUsIFJFR19BNlhYX1JTQ0NfSElEREVOX1RDU19DTUQwX0FERFIsIDApOworCWdt dV93cml0ZShnbXUsIFJFR19BNlhYX1JTQ0NfSElEREVOX1RDU19DTUQwX0RBVEEgKyAyLCAwKTsK KwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9SU0NDX0hJRERFTl9UQ1NfQ01EMF9BRERSICsgMiwg MCk7CisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfUlNDQ19ISURERU5fVENTX0NNRDBfREFUQSAr IDQsIDB4ODAwMDAwMDApOworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX1JTQ0NfSElEREVOX1RD U19DTUQwX0FERFIgKyA0LCAwKTsKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9SU0NDX09WRVJS SURFX1NUQVJUX0FERFIsIDApOworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX1JTQ0NfUERDX1NF UV9TVEFSVF9BRERSLCAweDQ1MjApOworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX1JTQ0NfUERD X01BVENIX1ZBTFVFX0xPLCAweDQ1MTApOworCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX1JTQ0Nf UERDX01BVENIX1ZBTFVFX0hJLCAweDQ1MTQpOworCisJLyogTG9hZCBSU0Mgc2VxdWVuY2VyIHVD b2RlIGZvciBzbGVlcCBhbmQgd2FrZXVwICovCisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfUlND Q19TRVFfTUVNXzBfRFJWMCwgMHhhN2E1MDZhMCk7CisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhf UlNDQ19TRVFfTUVNXzBfRFJWMCArIDEsIDB4YTFlNmE2ZTcpOworCWdtdV93cml0ZShnbXUsIFJF R19BNlhYX1JTQ0NfU0VRX01FTV8wX0RSVjAgKyAyLCAweGEyZTA4MWUxKTsKKwlnbXVfd3JpdGUo Z211LCBSRUdfQTZYWF9SU0NDX1NFUV9NRU1fMF9EUlYwICsgMywgMHhlOWE5ODJlMik7CisJZ211 X3dyaXRlKGdtdSwgUkVHX0E2WFhfUlNDQ19TRVFfTUVNXzBfRFJWMCArIDQsIDB4MDAyMGU4YTgp OworCisJLyogTG9hZCBQREMgc2VxdWVuY2VyIHVDb2RlIGZvciBwb3dlciB1cCBhbmQgcG93ZXIg ZG93biBzZXF1ZW5jZSAqLworCXBkY193cml0ZShnbXUsIFJFR19BNlhYX1BEQ19HUFVfU0VRX01F TV8wLCAweGZlYmVhMWUxKTsKKwlwZGNfd3JpdGUoZ211LCBSRUdfQTZYWF9QRENfR1BVX1NFUV9N RU1fMCArIDEsIDB4YTVhNGEzYTIpOworCXBkY193cml0ZShnbXUsIFJFR19BNlhYX1BEQ19HUFVf U0VRX01FTV8wICsgMiwgMHg4MzgyYTZlMCk7CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2WFhfUERD X0dQVV9TRVFfTUVNXzAgKyAzLCAweGJjZTNlMjg0KTsKKwlwZGNfd3JpdGUoZ211LCBSRUdfQTZY WF9QRENfR1BVX1NFUV9NRU1fMCArIDQsIDB4MDAyMDgxZmMpOworCisJLyogU2V0IFRDUyBjb21t YW5kcyB1c2VkIGJ5IFBEQyBzZXF1ZW5jZSBmb3IgbG93IHBvd2VyIG1vZGVzICovCisJcGRjX3dy aXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9UQ1MxX0NNRF9FTkFCTEVfQkFOSywgNyk7CisJcGRj X3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9UQ1MxX0NNRF9XQUlUX0ZPUl9DTVBMX0JBTkss IDApOworCXBkY193cml0ZShnbXUsIFJFR19BNlhYX1BEQ19HUFVfVENTMV9DT05UUk9MLCAwKTsK KwlwZGNfd3JpdGUoZ211LCBSRUdfQTZYWF9QRENfR1BVX1RDUzFfQ01EMF9NU0dJRCwgMHgxMDEw OCk7CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9UQ1MxX0NNRDBfQUREUiwgMHgz MDAxMCk7CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9UQ1MxX0NNRDBfREFUQSwg MSk7CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9UQ1MxX0NNRDBfTVNHSUQgKyA0 LCAweDEwMTA4KTsKKwlwZGNfd3JpdGUoZ211LCBSRUdfQTZYWF9QRENfR1BVX1RDUzFfQ01EMF9B RERSICsgNCwgMHgzMDAwMCk7CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9UQ1Mx X0NNRDBfREFUQSArIDQsIDB4MCk7CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9U Q1MxX0NNRDBfTVNHSUQgKyA4LCAweDEwMTA4KTsKKwlwZGNfd3JpdGUoZ211LCBSRUdfQTZYWF9Q RENfR1BVX1RDUzFfQ01EMF9BRERSICsgOCwgMHgzMDA4MCk7CisJcGRjX3dyaXRlKGdtdSwgUkVH X0E2WFhfUERDX0dQVV9UQ1MxX0NNRDBfREFUQSArIDgsIDB4MCk7CisJcGRjX3dyaXRlKGdtdSwg UkVHX0E2WFhfUERDX0dQVV9UQ1MzX0NNRF9FTkFCTEVfQkFOSywgNyk7CisJcGRjX3dyaXRlKGdt dSwgUkVHX0E2WFhfUERDX0dQVV9UQ1MzX0NNRF9XQUlUX0ZPUl9DTVBMX0JBTkssIDApOworCXBk Y193cml0ZShnbXUsIFJFR19BNlhYX1BEQ19HUFVfVENTM19DT05UUk9MLCAwKTsKKwlwZGNfd3Jp dGUoZ211LCBSRUdfQTZYWF9QRENfR1BVX1RDUzNfQ01EMF9NU0dJRCwgMHgxMDEwOCk7CisJcGRj X3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9UQ1MzX0NNRDBfQUREUiwgMHgzMDAxMCk7CisJ cGRjX3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9UQ1MzX0NNRDBfREFUQSwgMik7CisJcGRj X3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9UQ1MzX0NNRDBfTVNHSUQgKyA0LCAweDEwMTA4 KTsKKwlwZGNfd3JpdGUoZ211LCBSRUdfQTZYWF9QRENfR1BVX1RDUzNfQ01EMF9BRERSICsgNCwg MHgzMDAwMCk7CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9UQ1MzX0NNRDBfREFU QSArIDQsIDB4Myk7CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9UQ1MzX0NNRDBf TVNHSUQgKyA4LCAweDEwMTA4KTsKKwlwZGNfd3JpdGUoZ211LCBSRUdfQTZYWF9QRENfR1BVX1RD UzNfQ01EMF9BRERSICsgOCwgMHgzMDA4MCk7CisJcGRjX3dyaXRlKGdtdSwgUkVHX0E2WFhfUERD X0dQVV9UQ1MzX0NNRDBfREFUQSArIDgsIDB4Myk7CisKKwkvKiBTZXR1cCBHUFUgUERDICovCisJ cGRjX3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9TRVFfU1RBUlRfQUREUiwgMCk7CisJcGRj X3dyaXRlKGdtdSwgUkVHX0E2WFhfUERDX0dQVV9FTkFCTEVfUERDLCAweDgwMDAwMDAxKTsKKwor CS8qIGVuc3VyZSBubyB3cml0ZXMgaGFwcGVuIGJlZm9yZSB0aGUgdUNvZGUgaXMgZnVsbHkgd3Jp dHRlbiAqLworCXdtYigpOworfQorCisvKgorICogVGhlIGxvd2VzdCAxNiBiaXRzIG9mIHRoaXMg dmFsdWUgYXJlIHRoZSBudW1iZXIgb2YgWE8gY2xvY2sgY3ljbGVzIGZvciBtYWluCisgKiBoeXN0 ZXJlc2lzIHdoaWNoIGlzIHNldCBhdCAweDE2ODAgY3ljbGVzICgzMDAgdXMpLiAgVGhlIGhpZ2hl ciAxNiBiaXRzIGFyZQorICogZm9yIHRoZSBzaG9ydGVyIGh5c3RlcmVzaXMgdGhhdCBoYXBwZW5z IGFmdGVyIG1haW4gLSB0aGlzIGlzIDB4YSAoLjUgdXMpCisgKi8KKworI2RlZmluZSBHTVVfUFdS X0NPTF9IWVNUIDB4MDAwYTE2ODAKKworLyogU2V0IHVwIHRoZSBpZGxlIHN0YXRlIGZvciB0aGUg R01VICovCitzdGF0aWMgdm9pZCBhNnh4X2dtdV9wb3dlcl9jb25maWcoc3RydWN0IGE2eHhfZ211 ICpnbXUpCit7CisJLyogRGlzYWJsZSBHTVUgV0IvUkIgYnVmZmVyICovCisJZ211X3dyaXRlKGdt dSwgUkVHX0E2WFhfR01VX1NZU19CVVNfQ09ORklHLCAweDEpOworCisJZ211X3dyaXRlKGdtdSwg UkVHX0E2WFhfR01VX1BXUl9DT0xfSU5URVJfRlJBTUVfQ1RSTCwgMHg5YzQwNDAwKTsKKworCXN3 aXRjaCAoZ211LT5pZGxlX2xldmVsKSB7CisJY2FzZSBHTVVfSURMRV9TVEFURV9JRlBDOgorCQln bXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfUFdSX0NPTF9JTlRFUl9GUkFNRV9IWVNULAorCQkJ R01VX1BXUl9DT0xfSFlTVCk7CisJCWdtdV9ybXcoZ211LCBSRUdfQTZYWF9HTVVfUFdSX0NPTF9J TlRFUl9GUkFNRV9DVFJMLCAwLAorCQkJQTZYWF9HTVVfUFdSX0NPTF9JTlRFUl9GUkFNRV9DVFJM X0lGUENfRU5BQkxFIHwKKwkJCUE2WFhfR01VX1BXUl9DT0xfSU5URVJfRlJBTUVfQ1RSTF9ITV9Q T1dFUl9DT0xMQVBTRV9FTkFCTEUpOworCQkvKiBGYWxsIHRocm91Z2ggKi8KKwljYXNlIEdNVV9J RExFX1NUQVRFX1NQVFA6CisJCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9QV1JfQ09MX1NQ VFBSQUNfSFlTVCwKKwkJCUdNVV9QV1JfQ09MX0hZU1QpOworCQlnbXVfcm13KGdtdSwgUkVHX0E2 WFhfR01VX1BXUl9DT0xfSU5URVJfRlJBTUVfQ1RSTCwgMCwKKwkJCUE2WFhfR01VX1BXUl9DT0xf SU5URVJfRlJBTUVfQ1RSTF9JRlBDX0VOQUJMRSB8CisJCQlBNlhYX0dNVV9QV1JfQ09MX0lOVEVS X0ZSQU1FX0NUUkxfU1BUUFJBQ19QT1dFUl9DT05UUk9MX0VOQUJMRSk7CisJfQorCisJLyogRW5h YmxlIFJQTWggR1BVIGNsaWVudCAqLworCWdtdV9ybXcoZ211LCBSRUdfQTZYWF9HTVVfUlBNSF9D VFJMLCAwLAorCQlBNlhYX0dNVV9SUE1IX0NUUkxfUlBNSF9JTlRFUkZBQ0VfRU5BQkxFIHwKKwkJ QTZYWF9HTVVfUlBNSF9DVFJMX0xMQ19WT1RFX0VOQUJMRSB8CisJCUE2WFhfR01VX1JQTUhfQ1RS TF9ERFJfVk9URV9FTkFCTEUgfAorCQlBNlhYX0dNVV9SUE1IX0NUUkxfTVhfVk9URV9FTkFCTEUg fAorCQlBNlhYX0dNVV9SUE1IX0NUUkxfQ1hfVk9URV9FTkFCTEUgfAorCQlBNlhYX0dNVV9SUE1I X0NUUkxfR0ZYX1ZPVEVfRU5BQkxFKTsKK30KKworc3RhdGljIGludCBhNnh4X2dtdV9md19zdGFy dChzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSwgdW5zaWduZWQgaW50IHN0YXRlKQoreworCXN0YXRpYyBi b29sIHJwbWhfaW5pdDsKKwlzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1ID0gY29udGFpbmVyX29m KGdtdSwgc3RydWN0IGE2eHhfZ3B1LCBnbXUpOworCXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9f Z3B1ID0gJmE2eHhfZ3B1LT5iYXNlOworCWludCBpLCByZXQ7CisJdTMyIGNoaXBpZDsKKwl1MzIg KmltYWdlOworCisJaWYgKHN0YXRlID09IEdNVV9XQVJNX0JPT1QpIHsKKwkJcmV0ID0gYTZ4eF9y cG1oX3N0YXJ0KGdtdSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJ CWlmIChXQVJOKCFhZHJlbm9fZ3B1LT5md1tBRFJFTk9fRldfR01VXSwKKwkJCSJHTVUgZmlybXdh cmUgaXMgbm90IGxvYWRlZFxuIikpCisJCQlyZXR1cm4gLUVOT0VOVDsKKworCQkvKiBTYW5pdHkg Y2hlY2sgdGhlIHNpemUgb2YgdGhlIGZpcm13YXJlIHRoYXQgd2FzIGxvYWRlZCAqLworCQlpZiAo YWRyZW5vX2dwdS0+ZndbQURSRU5PX0ZXX0dNVV0tPnNpemUgPiAweDgwMDApIHsKKwkJCWRldl9l cnIoZ211LT5kZXYsCisJCQkJIkdNVSBmaXJtd2FyZSBpcyBiaWdnZXIgdGhhbiB0aGUgYXZhaWxh YmxlIHJlZ2lvblxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCS8qIFR1cm4gb24g cmVnaXN0ZXIgcmV0ZW50aW9uICovCisJCWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9HRU5F UkFMXzcsIDEpOworCisJCS8qIFdlIG9ubHkgbmVlZCB0byBsb2FkIHRoZSBSUE1oIG1pY3JvY29k ZSBvbmNlICovCisJCWlmICghcnBtaF9pbml0KSB7CisJCQlhNnh4X2dtdV9ycG1oX2luaXQoZ211 KTsKKwkJCXJwbWhfaW5pdCA9IHRydWU7CisJCX0gZWxzZSBpZiAoc3RhdGUgIT0gR01VX1JFU0VU KSB7CisJCQlyZXQgPSBhNnh4X3JwbWhfc3RhcnQoZ211KTsKKwkJCWlmIChyZXQpCisJCQkJcmV0 dXJuIHJldDsKKwkJfQorCisJCWltYWdlID0gKHUzMiAqKSBhZHJlbm9fZ3B1LT5md1tBRFJFTk9f RldfR01VXS0+ZGF0YTsKKworCQlmb3IgKGkgPSAwOyBpIDwgYWRyZW5vX2dwdS0+ZndbQURSRU5P X0ZXX0dNVV0tPnNpemUgPj4gMjsgaSsrKQorCQkJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01V X0NNM19JVENNX1NUQVJUICsgaSwKKwkJCQlpbWFnZVtpXSk7CisJfQorCisJZ211X3dyaXRlKGdt dSwgUkVHX0E2WFhfR01VX0NNM19GV19JTklUX1JFU1VMVCwgMCk7CisJZ211X3dyaXRlKGdtdSwg UkVHX0E2WFhfR01VX0NNM19CT09UX0NPTkZJRywgMHgwMik7CisKKwkvKiBXcml0ZSB0aGUgaW92 YSBvZiB0aGUgSEZJIHRhYmxlICovCisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX0hGSV9R VEJMX0FERFIsIGdtdS0+aGZpLT5pb3ZhKTsKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVf SEZJX1FUQkxfSU5GTywgMSk7CisKKwlnbXVfd3JpdGUoZ211LCBSRUdfQTZYWF9HTVVfQUhCX0ZF TkNFX1JBTkdFXzAsCisJCSgxIDw8IDMxKSB8ICgweGEgPDwgMTgpIHwgKDB4YTApKTsKKworCWNo aXBpZCA9IGFkcmVub19ncHUtPnJldi5jb3JlIDw8IDI0OworCWNoaXBpZCB8PSBhZHJlbm9fZ3B1 LT5yZXYubWFqb3IgPDwgMTY7CisJY2hpcGlkIHw9IGFkcmVub19ncHUtPnJldi5taW5vciA8PCAx MjsKKwljaGlwaWQgfD0gYWRyZW5vX2dwdS0+cmV2LnBhdGNoaWQgPDwgODsKKworCWdtdV93cml0 ZShnbXUsIFJFR19BNlhYX0dNVV9IRklfU0ZSX0FERFIsIGNoaXBpZCk7CisKKwkvKiBTZXQgdXAg dGhlIGxvd2VzdCBpZGxlIGxldmVsIG9uIHRoZSBHTVUgKi8KKwlhNnh4X2dtdV9wb3dlcl9jb25m aWcoZ211KTsKKworCXJldCA9IGE2eHhfZ211X3N0YXJ0KGdtdSk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCXJldCA9IGE2eHhfZ211X2dmeF9yYWlsX29uKGdtdSk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCS8qIEVuYWJsZSBTUFRQX1BDIGlmIHRoZSBDUFUgaXMgcmVzcG9u c2libGUgZm9yIGl0ICovCisJaWYgKGdtdS0+aWRsZV9sZXZlbCA8IEdNVV9JRExFX1NUQVRFX1NQ VFApIHsKKwkJcmV0ID0gYTZ4eF9zcHRwcmFjX2VuYWJsZShnbXUpOworCQlpZiAocmV0KQorCQkJ cmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBhNnh4X2dtdV9oZmlfc3RhcnQoZ211KTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogRklYTUU6IERvIHdlIG5lZWQgdGhpcyB3bWIoKSBo ZXJlPyAqLworCXdtYigpOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgQTZYWF9IRklfSVJR X01BU0sgXAorCShBNlhYX0dNVV9HTVUySE9TVF9JTlRSX0lORk9fTVNHUSB8IFwKKwkgQTZYWF9H TVVfR01VMkhPU1RfSU5UUl9JTkZPX0NNM19GQVVMVCkKKworI2RlZmluZSBBNlhYX0dNVV9JUlFf TUFTSyBcCisJKEE2WFhfR01VX0FPX0hPU1RfSU5URVJSVVBUX1NUQVRVU19XRE9HX0JJVEUgfCBc CisJIEE2WFhfR01VX0FPX0hPU1RfSU5URVJSVVBUX1NUQVRVU19IT1NUX0FIQl9CVVNfRVJST1Ig fCBcCisJIEE2WFhfR01VX0FPX0hPU1RfSU5URVJSVVBUX1NUQVRVU19GRU5DRV9FUlIpCisKK3N0 YXRpYyB2b2lkIGE2eHhfZ211X2lycV9lbmFibGUoc3RydWN0IGE2eHhfZ211ICpnbXUpCit7CisJ Z211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX0FPX0hPU1RfSU5URVJSVVBUX0NMUiwgfjApOwor CWdtdV93cml0ZShnbXUsIFJFR19BNlhYX0dNVV9HTVUySE9TVF9JTlRSX0NMUiwgfjApOworCisJ Z211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX0FPX0hPU1RfSU5URVJSVVBUX01BU0ssCisJCX5B NlhYX0dNVV9JUlFfTUFTSyk7CisJZ211X3dyaXRlKGdtdSwgUkVHX0E2WFhfR01VX0dNVTJIT1NU X0lOVFJfTUFTSywKKwkJfkE2WFhfSEZJX0lSUV9NQVNLKTsKKworCWVuYWJsZV9pcnEoZ211LT5n bXVfaXJxKTsKKwllbmFibGVfaXJxKGdtdS0+aGZpX2lycSk7Cit9CisKK3N0YXRpYyB2b2lkIGE2 eHhfZ211X2lycV9kaXNhYmxlKHN0cnVjdCBhNnh4X2dtdSAqZ211KQoreworCWRpc2FibGVfaXJx KGdtdS0+Z211X2lycSk7CisJZGlzYWJsZV9pcnEoZ211LT5oZmlfaXJxKTsKKworCWdtdV93cml0 ZShnbXUsIFJFR19BNlhYX0dNVV9BT19IT1NUX0lOVEVSUlVQVF9NQVNLLCB+MCk7CisJZ211X3dy aXRlKGdtdSwgUkVHX0E2WFhfR01VX0dNVTJIT1NUX0lOVFJfTUFTSywgfjApOworfQorCitpbnQg YTZ4eF9nbXVfcmVzZXQoc3RydWN0IGE2eHhfZ3B1ICphNnh4X2dwdSkKK3sKKwlzdHJ1Y3QgYTZ4 eF9nbXUgKmdtdSA9ICZhNnh4X2dwdS0+Z211OworCWludCByZXQ7CisJdTMyIHZhbDsKKworCS8q IEZsdXNoIGFsbCB0aGUgcXVldWVzICovCisJYTZ4eF9oZmlfc3RvcChnbXUpOworCisJLyogU3Rv cCB0aGUgaW50ZXJydXB0cyAqLworCWE2eHhfZ211X2lycV9kaXNhYmxlKGdtdSk7CisKKwkvKiBG b3JjZSBvZmYgU1BUUCBpbiBjYXNlIHRoZSBHTVUgaXMgbWFuYWdpbmcgaXQgKi8KKwlhNnh4X3Nw dHByYWNfZGlzYWJsZShnbXUpOworCisJLyogTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdXRzdGFu ZGluZyBSUE1oIHZvdGVzICovCisJZ211X3BvbGxfdGltZW91dChnbXUsIFJFR19BNlhYX1JTQ0Nf VENTMF9EUlYwX1NUQVRVUywgdmFsLAorCQkodmFsICYgMSksIDEwMCwgMTAwMDApOworCWdtdV9w b2xsX3RpbWVvdXQoZ211LCBSRUdfQTZYWF9SU0NDX1RDUzFfRFJWMF9TVEFUVVMsIHZhbCwKKwkJ KHZhbCAmIDEpLCAxMDAsIDEwMDAwKTsKKwlnbXVfcG9sbF90aW1lb3V0KGdtdSwgUkVHX0E2WFhf UlNDQ19UQ1MyX0RSVjBfU1RBVFVTLCB2YWwsCisJCSh2YWwgJiAxKSwgMTAwLCAxMDAwMCk7CisJ Z211X3BvbGxfdGltZW91dChnbXUsIFJFR19BNlhYX1JTQ0NfVENTM19EUlYwX1NUQVRVUywgdmFs LAorCQkodmFsICYgMSksIDEwMCwgMTAwMCk7CisKKwkvKiBGb3JjZSBvZmYgdGhlIEdYIEdTREMg Ki8KKwlyZWd1bGF0b3JfZm9yY2VfZGlzYWJsZShnbXUtPmd4KTsKKworCS8qIERpc2FibGUgdGhl IHJlc291cmNlcyAqLworCWNsa19idWxrX2Rpc2FibGVfdW5wcmVwYXJlKGdtdS0+bnJfY2xvY2tz LCBnbXUtPmNsb2Nrcyk7CisJcG1fcnVudGltZV9wdXRfc3luYyhnbXUtPmRldik7CisKKwkvKiBS ZS1lbmFibGUgdGhlIHJlc291cmNlcyAqLworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZ211LT5kZXYp OworCisJLyogVXNlIGEga25vd24gcmF0ZSB0byBicmluZyB1cCB0aGUgR01VICovCisJY2xrX3Nl dF9yYXRlKGdtdS0+Y29yZV9jbGssIDIwMDAwMDAwMCk7CisJcmV0ID0gY2xrX2J1bGtfcHJlcGFy ZV9lbmFibGUoZ211LT5ucl9jbG9ja3MsIGdtdS0+Y2xvY2tzKTsKKwlpZiAocmV0KQorCQlnb3Rv IG91dDsKKworCWE2eHhfZ211X2lycV9lbmFibGUoZ211KTsKKworCXJldCA9IGE2eHhfZ211X2Z3 X3N0YXJ0KGdtdSwgR01VX1JFU0VUKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gYTZ4eF9oZmlfc3Rh cnQoZ211LCBHTVVfQ09MRF9CT09UKTsKKworCS8qIFNldCB0aGUgR1BVIGJhY2sgdG8gdGhlIGhp Z2hlc3QgcG93ZXIgZnJlcXVlbmN5ICovCisJYTZ4eF9nbXVfc2V0X2ZyZXEoZ211LCBnbXUtPm5y X2dwdV9mcmVxcyAtIDEpOworCitvdXQ6CisJaWYgKHJldCkKKwkJYTZ4eF9nbXVfY2xlYXJfb29i KGdtdSwgR01VX09PQl9CT09UX1NMVU1CRVIpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGE2 eHhfZ211X3Jlc3VtZShzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1KQoreworCXN0cnVjdCBhNnh4 X2dtdSAqZ211ID0gJmE2eHhfZ3B1LT5nbXU7CisJaW50IHN0YXR1cywgcmV0OworCisJaWYgKFdB Uk4oIWdtdS0+bW1pbywgIlRoZSBHTVUgaXMgbm90IHNldCB1cCB5ZXRcbiIpKQorCQlyZXR1cm4g MDsKKworCS8qIFR1cm4gb24gdGhlIHJlc291cmNlcyAqLworCXBtX3J1bnRpbWVfZ2V0X3N5bmMo Z211LT5kZXYpOworCisJLyogVXNlIGEga25vd24gcmF0ZSB0byBicmluZyB1cCB0aGUgR01VICov CisJY2xrX3NldF9yYXRlKGdtdS0+Y29yZV9jbGssIDIwMDAwMDAwMCk7CisJcmV0ID0gY2xrX2J1 bGtfcHJlcGFyZV9lbmFibGUoZ211LT5ucl9jbG9ja3MsIGdtdS0+Y2xvY2tzKTsKKwlpZiAocmV0 KQorCQlnb3RvIG91dDsKKworCWE2eHhfZ211X2lycV9lbmFibGUoZ211KTsKKworCS8qIENoZWNr IHRvIHNlZSBpZiB3ZSBhcmUgZG9pbmcgYSBjb2xkIG9yIHdhcm0gYm9vdCAqLworCXN0YXR1cyA9 IGdtdV9yZWFkKGdtdSwgUkVHX0E2WFhfR01VX0dFTkVSQUxfNykgPT0gMSA/CisJCUdNVV9XQVJN X0JPT1QgOiBHTVVfQ09MRF9CT09UOworCisJcmV0ID0gYTZ4eF9nbXVfZndfc3RhcnQoZ211LCBz dGF0dXMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gYTZ4eF9oZmlfc3RhcnQo Z211LCBzdGF0dXMpOworCisJLyogU2V0IHRoZSBHUFUgdG8gdGhlIGhpZ2hlc3QgcG93ZXIgZnJl cXVlbmN5ICovCisJYTZ4eF9nbXVfc2V0X2ZyZXEoZ211LCBnbXUtPm5yX2dwdV9mcmVxcyAtIDEp OworCitvdXQ6CisJLyogTWFrZSBzdXJlIHRvIHR1cm4gb2ZmIHRoZSBib290IE9PQiByZXF1ZXN0 IG9uIGVycm9yICovCisJaWYgKHJldCkKKwkJYTZ4eF9nbXVfY2xlYXJfb29iKGdtdSwgR01VX09P Ql9CT09UX1NMVU1CRVIpOworCisJcmV0dXJuIHJldDsKK30KKworYm9vbCBhNnh4X2dtdV9pc2lk bGUoc3RydWN0IGE2eHhfZ211ICpnbXUpCit7CisJdTMyIHJlZzsKKworCWlmICghZ211LT5tbWlv KQorCQlyZXR1cm4gdHJ1ZTsKKworCXJlZyA9IGdtdV9yZWFkKGdtdSwgUkVHX0E2WFhfR1BVX0dN VV9BT19HUFVfQ1hfQlVTWV9TVEFUVVMpOworCisJaWYgKHJlZyAmICBBNlhYX0dQVV9HTVVfQU9f R1BVX0NYX0JVU1lfU1RBVFVTX0dQVUJVU1lJR05BSEIpCisJCXJldHVybiBmYWxzZTsKKworCXJl dHVybiB0cnVlOworfQorCitpbnQgYTZ4eF9nbXVfc3RvcChzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhf Z3B1KQoreworCXN0cnVjdCBhNnh4X2dtdSAqZ211ID0gJmE2eHhfZ3B1LT5nbXU7CisJdTMyIHZh bDsKKworCS8qCisJICogVGhlIEdNVSBtYXkgc3RpbGwgYmUgaW4gc2x1bWJlciB1bmxlc3MgdGhl IEdQVSBzdGFydGVkIHNvIGNoZWNrIGFuZAorCSAqIHNraXAgcHV0dGluZyBpdCBiYWNrIGludG8g c2x1bWJlciBpZiBzbworCSAqLworCXZhbCA9IGdtdV9yZWFkKGdtdSwgUkVHX0E2WFhfR1BVX0dN VV9DWF9HTVVfUlBNSF9QT1dFUl9TVEFURSk7CisKKwlpZiAodmFsICE9IDB4ZikgeworCQlpbnQg cmV0ID0gYTZ4eF9nbXVfd2FpdF9mb3JfaWRsZShhNnh4X2dwdSk7CisKKwkJLyogVGVtcG9yYXJ5 IHVudGlsIHdlIGNhbiByZWNvdmVyIHNhZmVseSAqLworCQlCVUdfT04ocmV0KTsKKworCQkvKiB0 ZWxsIHRoZSBHTVUgd2Ugd2FudCB0byBzbHVtYmVyICovCisJCWE2eHhfZ211X25vdGlmeV9zbHVt YmVyKGdtdSk7CisKKwkJcmV0ID0gZ211X3BvbGxfdGltZW91dChnbXUsCisJCQlSRUdfQTZYWF9H UFVfR01VX0FPX0dQVV9DWF9CVVNZX1NUQVRVUywgdmFsLAorCQkJISh2YWwgJiBBNlhYX0dQVV9H TVVfQU9fR1BVX0NYX0JVU1lfU1RBVFVTX0dQVUJVU1lJR05BSEIpLAorCQkJMTAwLCAxMDAwMCk7 CisKKwkJLyoKKwkJICogTGV0IHRoZSB1c2VyIGtub3cgd2UgZmFpbGVkIHRvIHNsdW1iZXIgYnV0 IGRvbid0IHdvcnJ5IHRvbworCQkgKiBtdWNoIGJlY2F1c2Ugd2UgYXJlIHBvd2VyaW5nIGRvd24g YW55d2F5CisJCSAqLworCisJCWlmIChyZXQpCisJCQlkZXZfZXJyKGdtdS0+ZGV2LAorCQkJCSJV bmFibGUgdG8gc2x1bWJlciBHTVU6IHN0YXR1cyA9IDAleC8wJXhcbiIsCisJCQkJZ211X3JlYWQo Z211LAorCQkJCQlSRUdfQTZYWF9HUFVfR01VX0FPX0dQVV9DWF9CVVNZX1NUQVRVUyksCisJCQkJ Z211X3JlYWQoZ211LAorCQkJCQlSRUdfQTZYWF9HUFVfR01VX0FPX0dQVV9DWF9CVVNZX1NUQVRV UzIpKTsKKwl9CisKKwkvKiBUdXJuIG9mZiBIRkkgKi8KKwlhNnh4X2hmaV9zdG9wKGdtdSk7CisK KwkvKiBTdG9wIHRoZSBpbnRlcnJ1cHRzIGFuZCBtYXNrIHRoZSBoYXJkd2FyZSAqLworCWE2eHhf Z211X2lycV9kaXNhYmxlKGdtdSk7CisKKwkvKiBUZWxsIFJQTWggdG8gcG93ZXIgb2ZmIHRoZSBH UFUgKi8KKwlhNnh4X3JwbWhfc3RvcChnbXUpOworCisJY2xrX2J1bGtfZGlzYWJsZV91bnByZXBh cmUoZ211LT5ucl9jbG9ja3MsIGdtdS0+Y2xvY2tzKTsKKworCXBtX3J1bnRpbWVfcHV0X3N5bmMo Z211LT5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhfZ211X21lbW9y eV9mcmVlKHN0cnVjdCBhNnh4X2dtdSAqZ211LCBzdHJ1Y3QgYTZ4eF9nbXVfYm8gKmJvKQorewor CWludCBjb3VudCwgaTsKKwl1NjQgaW92YTsKKworCWlmIChJU19FUlJfT1JfTlVMTChibykpCisJ CXJldHVybjsKKworCWNvdW50ID0gYm8tPnNpemUgPj4gUEFHRV9TSElGVDsKKwlpb3ZhID0gYm8t PmlvdmE7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgaW92YSArPSBQQUdFX1NJWkUp IHsKKwkJaW9tbXVfdW5tYXAoZ211LT5kb21haW4sIGlvdmEsIFBBR0VfU0laRSk7CisJCV9fZnJl ZV9wYWdlcyhiby0+cGFnZXNbaV0sIDApOworCX0KKworCWtmcmVlKGJvLT5wYWdlcyk7CisJa2Zy ZWUoYm8pOworfQorCitzdGF0aWMgc3RydWN0IGE2eHhfZ211X2JvICphNnh4X2dtdV9tZW1vcnlf YWxsb2Moc3RydWN0IGE2eHhfZ211ICpnbXUsCisJCXNpemVfdCBzaXplKQoreworCXN0cnVjdCBh Nnh4X2dtdV9ibyAqYm87CisJaW50IHJldCwgY291bnQsIGk7CisKKwlibyA9IGt6YWxsb2Moc2l6 ZW9mKCpibyksIEdGUF9LRVJORUwpOworCWlmICghYm8pCisJCXJldHVybiBFUlJfUFRSKC1FTk9N RU0pOworCisJYm8tPnNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCisJY291bnQgPSBiby0+c2l6 ZSA+PiBQQUdFX1NISUZUOworCisJYm8tPnBhZ2VzID0ga2NhbGxvYyhjb3VudCwgc2l6ZW9mKHN0 cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJvLT5wYWdlcykgeworCQlrZnJlZShi byk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBj b3VudDsgaSsrKSB7CisJCWJvLT5wYWdlc1tpXSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJ CWlmICghYm8tPnBhZ2VzW2ldKQorCQkJZ290byBlcnI7CisJfQorCisJYm8tPmlvdmEgPSBnbXUt PnVuY2FjaGVkX2lvdmFfYmFzZTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJ CXJldCA9IGlvbW11X21hcChnbXUtPmRvbWFpbiwKKwkJCWJvLT5pb3ZhICsgKFBBR0VfU0laRSAq IGkpLAorCQkJcGFnZV90b19waHlzKGJvLT5wYWdlc1tpXSksIFBBR0VfU0laRSwKKwkJCUlPTU1V X1JFQUQgfCBJT01NVV9XUklURSk7CisKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihnbXUtPmRl diwgIlVuYWJsZSB0byBtYXAgR01VIGJ1ZmZlciBvYmplY3RcbiIpOworCisJCQlmb3IgKGkgPSBp IC0gMSA7IGkgPj0gMDsgaS0tKQorCQkJCWlvbW11X3VubWFwKGdtdS0+ZG9tYWluLAorCQkJCQli by0+aW92YSArIChQQUdFX1NJWkUgKiBpKSwKKwkJCQkJUEFHRV9TSVpFKTsKKworCQkJZ290byBl cnI7CisJCX0KKwl9CisKKwliby0+dmlydCA9IHZtYXAoYm8tPnBhZ2VzLCBjb3VudCwgVk1fSU9S RU1BUCwKKwkJcGdwcm90X3dyaXRlY29tYmluZShQQUdFX0tFUk5FTCkpOworCWlmICghYm8tPnZp cnQpCisJCWdvdG8gZXJyOworCisJLyogQWxpZ24gZnV0dXJlIElPVkEgYWRkcmVzc2VzIG9uIDFN QiBib3VuZGFyaWVzICovCisJZ211LT51bmNhY2hlZF9pb3ZhX2Jhc2UgKz0gQUxJR04oc2l6ZSwg U1pfMU0pOworCisJcmV0dXJuIGJvOworCitlcnI6CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBp KyspIHsKKwkJaWYgKGJvLT5wYWdlc1tpXSkKKwkJCV9fZnJlZV9wYWdlcyhiby0+cGFnZXNbaV0s IDApOworCX0KKworCWtmcmVlKGJvLT5wYWdlcyk7CisJa2ZyZWUoYm8pOworCisJcmV0dXJuIEVS Ul9QVFIoLUVOT01FTSk7Cit9CisKK3N0YXRpYyBpbnQgYTZ4eF9nbXVfbWVtb3J5X3Byb2JlKHN0 cnVjdCBhNnh4X2dtdSAqZ211KQoreworCWludCByZXQ7CisKKwkvKgorCSAqIFRoZSBHTVUgYWRk cmVzcyBzcGFjZSBpcyBoYXJkY29kZWQgdG8gdHJlYXQgdGhlIHJhbmdlCisJICogMHg2MDAwMDAw MCAtIDB4ODAwMDAwMDAgYXMgdW4tY2FjaGVkIG1lbW9yeS4gQWxsIGJ1ZmZlcnMgc2hhcmVkCisJ ICogYmV0d2VlbiB0aGUgR01VIGFuZCB0aGUgQ1BVIHdpbGwgbGl2ZSBpbiB0aGlzIHNwYWNlCisJ ICovCisJZ211LT51bmNhY2hlZF9pb3ZhX2Jhc2UgPSAweDYwMDAwMDAwOworCisKKwlnbXUtPmRv bWFpbiA9IGlvbW11X2RvbWFpbl9hbGxvYygmcGxhdGZvcm1fYnVzX3R5cGUpOworCWlmICghZ211 LT5kb21haW4pCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gaW9tbXVfYXR0YWNoX2Rldmlj ZShnbXUtPmRvbWFpbiwgZ211LT5kZXYpOworCisJaWYgKHJldCkgeworCQlpb21tdV9kb21haW5f ZnJlZShnbXUtPmRvbWFpbik7CisJCWdtdS0+ZG9tYWluID0gTlVMTDsKKwl9CisKKwlyZXR1cm4g cmV0OworfQorCisvKiBHZXQgdGhlIGxpc3Qgb2YgUlBNaCB2b2x0YWdlIGxldmVscyBmcm9tIGNt ZC1kYiAqLworc3RhdGljIGludCBhNnh4X2dtdV9ycG1oX2FyY19jbWRzKGNvbnN0IGNoYXIgKmlk LCB2b2lkICp2YWxzLCBpbnQgc2l6ZSkKK3sKKwl1MzIgbGVuID0gY21kX2RiX3JlYWRfYXV4X2Rh dGFfbGVuKGlkKTsKKworCWlmICghbGVuKQorCQlyZXR1cm4gMDsKKworCWlmIChXQVJOX09OKGxl biA+IHNpemUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNtZF9kYl9yZWFkX2F1eF9kYXRhKGlk LCB2YWxzLCBsZW4pOworCisJLyoKKwkgKiBUaGUgZGF0YSBjb21lcyBiYWNrIGFzIGFuIGFycmF5 IG9mIHVuc2lnbmVkIHNob3J0cyBzbyBhZGp1c3QgdGhlCisJICogY291bnQgYWNjb3JkaW5nbHkK KwkgKi8KKwlyZXR1cm4gbGVuID4+IDE7Cit9CisKKy8qIFJldHVybiB0aGUgJ2FyYy1sZXZlbCcg Zm9yIHRoZSBnaXZlbiBmcmVxdWVuY3kgKi8KK3N0YXRpYyB1MzIgYTZ4eF9nbXVfZ2V0X2FyY19s ZXZlbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZnJlcSkKK3sKKwlzdHJ1Y3Qg ZGV2X3BtX29wcCAqb3BwOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJdTMyIHZhbCA9IDA7 CisKKwlpZiAoIWZyZXEpCisJCXJldHVybiAwOworCisJb3BwICA9IGRldl9wbV9vcHBfZmluZF9m cmVxX2V4YWN0KGRldiwgZnJlcSwgdHJ1ZSk7CisJaWYgKElTX0VSUihvcHApKQorCQlyZXR1cm4g MDsKKworCW5wID0gZGV2X3BtX29wcF9nZXRfb2Zfbm9kZShvcHApOworCisJaWYgKG5wKSB7CisJ CW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAicWNvbSxsZXZlbCIsICZ2YWwpOworCQlvZl9ub2Rl X3B1dChucCk7CisJfQorCisJZGV2X3BtX29wcF9wdXQob3BwKTsKKworCXJldHVybiB2YWw7Cit9 CisKK3N0YXRpYyBpbnQgYTZ4eF9nbXVfcnBtaF9hcmNfdm90ZXNfaW5pdChzdHJ1Y3QgZGV2aWNl ICpkZXYsIHUzMiAqdm90ZXMsCisJCXVuc2lnbmVkIGxvbmcgKmZyZXFzLCBpbnQgZnJlcXNfY291 bnQsCisJCXUxNiAqcHJpLCBpbnQgcHJpX2NvdW50LAorCQl1MTYgKnNlYywgaW50IHNlY19jb3Vu dCkKK3sKKwlpbnQgaSwgajsKKworCS8qIENvbnN0cnVjdCBhIHZvdGUgZm9yIGVhY2ggZnJlcXVl bmN5ICovCisJZm9yIChpID0gMDsgaSA8IGZyZXFzX2NvdW50OyBpKyspIHsKKwkJdTggcGluZGV4 ID0gMCwgc2luZGV4ID0gMDsKKwkJdTMyIGxldmVsID0gYTZ4eF9nbXVfZ2V0X2FyY19sZXZlbChk ZXYsIGZyZXFzW2ldKTsKKworCQkvKiBHZXQgdGhlIHByaW1hcnkgaW5kZXggdGhhdCBtYXRjaGVz IHRoZSBhcmMgbGV2ZWwgKi8KKwkJZm9yIChqID0gMDsgaiA8IHByaV9jb3VudDsgaisrKSB7CisJ CQlpZiAocHJpW2pdID49IGxldmVsKSB7CisJCQkJcGluZGV4ID0gajsKKwkJCQlicmVhazsKKwkJ CX0KKwkJfQorCisJCWlmIChqID09IHByaV9jb3VudCkgeworCQkJZGV2X2VycihkZXYsCisJCQkJ IkxldmVsICV1IG5vdCBmb3VuZCBpbiBpbiB0aGUgUlBNaCBsaXN0XG4iLAorCQkJCQlsZXZlbCk7 CisJCQlkZXZfZXJyKGRldiwgIkF2YWlsYWJsZSBsZXZlbHM6XG4iKTsKKwkJCWZvciAoaiA9IDA7 IGogPCBwcmlfY291bnQ7IGorKykKKwkJCQlkZXZfZXJyKGRldiwgIiAgJXVcbiIsIHByaVtqXSk7 CisKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJLyoKKwkJICogTG9vayBmb3IgYSBsZXZl bCBpbiBpbiB0aGUgc2Vjb25kYXJ5IGxpc3QgdGhhdCBtYXRjaGVzLiBJZgorCQkgKiBub3RoaW5n IGZpdHMsIHVzZSB0aGUgbWF4aW11bSBub24gemVybyB2b3RlCisJCSAqLworCisJCWZvciAoaiA9 IDA7IGogPCBzZWNfY291bnQ7IGorKykgeworCQkJaWYgKHNlY1tqXSA+PSBsZXZlbCkgeworCQkJ CXNpbmRleCA9IGo7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKHNlY1tqXSkgeworCQkJCXNp bmRleCA9IGo7CisJCQl9CisJCX0KKworCQkvKiBDb25zdHJ1Y3QgdGhlIHZvdGUgKi8KKwkJdm90 ZXNbaV0gPSAoKHByaVtwaW5kZXhdICYgMHhmZmZmKSA8PCAxNikgfAorCQkJKHNpbmRleCA8PCA4 KSB8IHBpbmRleDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBHTVUgdm90ZXMg d2l0aCB0aGUgUlBNaCBmb3IgaXRzZWxmIGFuZCBvbiBiZWhhbGYgb2YgdGhlIEdQVSBidXQgd2Ug bmVlZAorICogdG8gY29uc3RydWN0IHRoZSBsaXN0IG9mIHZvdGVzIG9uIHRoZSBDUFUgYW5kIHNl bmQgaXQgb3Zlci4gUXVlcnkgdGhlIFJQTWgKKyAqIHZvbHRhZ2UgbGV2ZWxzIGFuZCBidWlsZCB0 aGUgdm90ZXMKKyAqLworCitzdGF0aWMgaW50IGE2eHhfZ211X3JwbWhfdm90ZXNfaW5pdChzdHJ1 Y3QgYTZ4eF9nbXUgKmdtdSkKK3sKKwlzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1ID0gY29udGFp bmVyX29mKGdtdSwgc3RydWN0IGE2eHhfZ3B1LCBnbXUpOworCXN0cnVjdCBhZHJlbm9fZ3B1ICph ZHJlbm9fZ3B1ID0gJmE2eHhfZ3B1LT5iYXNlOworCXN0cnVjdCBtc21fZ3B1ICpncHUgPSAmYWRy ZW5vX2dwdS0+YmFzZTsKKworCXUxNiBneFsxNl0sIGN4WzE2XSwgbXhbMTZdOworCXUzMiBneGNv dW50LCBjeGNvdW50LCBteGNvdW50OworCWludCByZXQ7CisKKwkvKiBHZXQgdGhlIGxpc3Qgb2Yg YXZhaWxhYmxlIHZvbHRhZ2UgbGV2ZWxzIGZvciBlYWNoIGNvbXBvbmVudCAqLworCWd4Y291bnQg PSBhNnh4X2dtdV9ycG1oX2FyY19jbWRzKCJnZngubHZsIiwgZ3gsIHNpemVvZihneCkpOworCWN4 Y291bnQgPSBhNnh4X2dtdV9ycG1oX2FyY19jbWRzKCJjeC5sdmwiLCBjeCwgc2l6ZW9mKGN4KSk7 CisJbXhjb3VudCA9IGE2eHhfZ211X3JwbWhfYXJjX2NtZHMoIm14Lmx2bCIsIG14LCBzaXplb2Yo bXgpKTsKKworCS8qIEJ1aWxkIHRoZSBHWCB2b3RlcyAqLworCXJldCA9IGE2eHhfZ211X3JwbWhf YXJjX3ZvdGVzX2luaXQoJmdwdS0+cGRldi0+ZGV2LCBnbXUtPmd4X2FyY192b3RlcywKKwkJZ211 LT5ncHVfZnJlcXMsIGdtdS0+bnJfZ3B1X2ZyZXFzLAorCQlneCwgZ3hjb3VudCwgbXgsIG14Y291 bnQpOworCisJLyogQnVpbGQgdGhlIENYIHZvdGVzICovCisJcmV0IHw9IGE2eHhfZ211X3JwbWhf YXJjX3ZvdGVzX2luaXQoZ211LT5kZXYsIGdtdS0+Y3hfYXJjX3ZvdGVzLAorCQlnbXUtPmdtdV9m cmVxcywgZ211LT5ucl9nbXVfZnJlcXMsCisJCWN4LCBjeGNvdW50LCBteCwgbXhjb3VudCk7CisK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGE2eHhfZ211X2J1aWxkX2ZyZXFfdGFibGUo c3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nICpmcmVxcywKKwkJdTMyIHNpemUpCit7 CisJaW50IGNvdW50ID0gZGV2X3BtX29wcF9nZXRfb3BwX2NvdW50KGRldik7CisJc3RydWN0IGRl dl9wbV9vcHAgKm9wcDsKKwlpbnQgaSwgaW5kZXggPSAwOworCXVuc2lnbmVkIGxvbmcgZnJlcSA9 IDE7CisKKwkvKgorCSAqIFRoZSBPUFAgdGFibGUgZG9lc24ndCBjb250YWluIHRoZSAib2ZmIiBm cmVxdWVuY3kgbGV2ZWwgc28gd2UgbmVlZCB0bworCSAqIGFkZCAxIHRvIHRoZSB0YWJsZSBzaXpl IHRvIGFjY291bnQgZm9yIGl0CisJICovCisKKwlpZiAoV0FSTihjb3VudCArIDEgPiBzaXplLAor CQkiVGhlIEdNVSBmcmVxdWVuY3kgdGFibGUgaXMgYmVpbmcgdHJ1bmNhdGVkXG4iKSkKKwkJY291 bnQgPSBzaXplIC0gMTsKKworCS8qIFNldCB0aGUgIm9mZiIgZnJlcXVlbmN5ICovCisJZnJlcXNb aW5kZXgrK10gPSAwOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJb3BwID0g ZGV2X3BtX29wcF9maW5kX2ZyZXFfY2VpbChkZXYsICZmcmVxKTsKKwkJaWYgKElTX0VSUihvcHAp KQorCQkJYnJlYWs7CisKKwkJZGV2X3BtX29wcF9wdXQob3BwKTsKKwkJZnJlcXNbaW5kZXgrK10g PSBmcmVxKys7CisJfQorCisJcmV0dXJuIGluZGV4OworfQorCitzdGF0aWMgaW50IGE2eHhfZ211 X3B3cmxldmVsc19wcm9iZShzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSkKK3sKKwlzdHJ1Y3QgYTZ4eF9n cHUgKmE2eHhfZ3B1ID0gY29udGFpbmVyX29mKGdtdSwgc3RydWN0IGE2eHhfZ3B1LCBnbXUpOwor CXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gJmE2eHhfZ3B1LT5iYXNlOworCXN0cnVj dCBtc21fZ3B1ICpncHUgPSAmYWRyZW5vX2dwdS0+YmFzZTsKKworCWludCByZXQgPSAwOworCisJ LyoKKwkgKiBUaGUgR01VIGhhbmRsZXMgaXRzIG93biBmcmVxdWVuY3kgc3dpdGNoaW5nIHNvIGJ1 aWxkIGEgbGlzdCBvZgorCSAqIGF2YWlsYWJsZSBmcmVxdWVuY2llcyB0byBzZW5kIGR1cmluZyBp bml0YWxpemF0aW9uCisJICovCisJcmV0ID0gZGV2X3BtX29wcF9vZl9hZGRfdGFibGUoZ211LT5k ZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihnbXUtPmRldiwgIlVuYWJsZSB0byBzZXQgdGhl IE9QUCB0YWJsZSBmb3IgdGhlIEdNVVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZ211LT5u cl9nbXVfZnJlcXMgPSBhNnh4X2dtdV9idWlsZF9mcmVxX3RhYmxlKGdtdS0+ZGV2LAorCQlnbXUt PmdtdV9mcmVxcywgQVJSQVlfU0laRShnbXUtPmdtdV9mcmVxcykpOworCisJLyoKKwkgKiBUaGUg R01VIGFsc28gaGFuZGxlcyBHUFUgZnJlcXVlbmN5IHN3aXRjaGluZyBzbyBidWlsZCBhIGxpc3QK KwkgKiBmcm9tIHRoZSBHUFUgT1BQIHRhYmxlCisJICovCisJZ211LT5ucl9ncHVfZnJlcXMgPSBh Nnh4X2dtdV9idWlsZF9mcmVxX3RhYmxlKCZncHUtPnBkZXYtPmRldiwKKwkJZ211LT5ncHVfZnJl cXMsIEFSUkFZX1NJWkUoZ211LT5ncHVfZnJlcXMpKTsKKworCS8qIEJ1aWxkIHRoZSBsaXN0IG9m IFJQTWggdm90ZXMgdGhhdCB3ZSdsbCBzZW5kIHRvIHRoZSBHTVUgKi8KKwlyZXR1cm4gYTZ4eF9n bXVfcnBtaF92b3Rlc19pbml0KGdtdSk7Cit9CisKK3N0YXRpYyBpbnQgYTZ4eF9nbXVfY2xvY2tz X3Byb2JlKHN0cnVjdCBhNnh4X2dtdSAqZ211KQoreworCWludCByZXQgPSBtc21fY2xrX2J1bGtf Z2V0KGdtdS0+ZGV2LCAmZ211LT5jbG9ja3MpOworCisJaWYgKHJldCA8IDEpCisJCXJldHVybiBy ZXQ7CisKKwlnbXUtPm5yX2Nsb2NrcyA9IHJldDsKKworCWdtdS0+Y29yZV9jbGsgPSBtc21fY2xr X2J1bGtfZ2V0X2Nsb2NrKGdtdS0+Y2xvY2tzLAorCQlnbXUtPm5yX2Nsb2NrcywgImdtdSIpOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmE2eHhfZ211X2dldF9tbWlv KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCWNvbnN0IGNoYXIgKm5hbWUpCit7CisJ dm9pZCBfX2lvbWVtICpyZXQ7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSBwbGF0Zm9ybV9nZXRf cmVzb3VyY2VfYnluYW1lKHBkZXYsCisJCQlJT1JFU09VUkNFX01FTSwgbmFtZSk7CisKKwlpZiAo IXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZmluZCB0aGUgJXMgcmVn aXN0ZXJzXG4iLCBuYW1lKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJcmV0 ID0gZGV2bV9pb3JlbWFwKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVz KSk7CisJaWYgKCFyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIG1hcCB0 aGUgJXMgcmVnaXN0ZXJzXG4iLCBuYW1lKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJ fQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhNnh4X2dtdV9nZXRfaXJxKHN0cnVj dCBhNnh4X2dtdSAqZ211LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQljb25zdCBj aGFyICpuYW1lLCBpcnFfaGFuZGxlcl90IGhhbmRsZXIpCit7CisJaW50IGlycSwgcmV0OworCisJ aXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgbmFtZSk7CisKKwlyZXQgPSBkZXZt X3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGlycSwgaGFuZGxlciwgSVJRRl9UUklHR0VSX0hJR0gs CisJCW5hbWUsIGdtdSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFi bGUgdG8gZ2V0IGludGVycnVwdCAlc1xuIiwgbmFtZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJ ZGlzYWJsZV9pcnEoaXJxKTsKKworCXJldHVybiBpcnE7Cit9CisKK3ZvaWQgYTZ4eF9nbXVfcmVt b3ZlKHN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUpCit7CisJc3RydWN0IGE2eHhfZ211ICpnbXUg PSAmYTZ4eF9ncHUtPmdtdTsKKworCWlmIChJU19FUlJfT1JfTlVMTChnbXUtPm1taW8pKQorCQly ZXR1cm47CisKKwlwbV9ydW50aW1lX2Rpc2FibGUoZ211LT5kZXYpOworCWE2eHhfZ211X3N0b3Ao YTZ4eF9ncHUpOworCisJYTZ4eF9nbXVfaXJxX2Rpc2FibGUoZ211KTsKKwlhNnh4X2dtdV9tZW1v cnlfZnJlZShnbXUsIGdtdS0+aGZpKTsKKworCWlvbW11X2RldGFjaF9kZXZpY2UoZ211LT5kb21h aW4sIGdtdS0+ZGV2KTsKKworCWlvbW11X2RvbWFpbl9mcmVlKGdtdS0+ZG9tYWluKTsKK30KKwor aW50IGE2eHhfZ211X3Byb2JlKHN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUsIHN0cnVjdCBkZXZp Y2Vfbm9kZSAqbm9kZSkKK3sKKwlzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSA9ICZhNnh4X2dwdS0+Z211 OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2Rl KG5vZGUpOworCWludCByZXQ7CisKKwlpZiAoIXBkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJ Z211LT5kZXYgPSAmcGRldi0+ZGV2OworCisJb2ZfZG1hX2NvbmZpZ3VyZShnbXUtPmRldiwgbm9k ZSwgZmFsc2UpOworCisJLyogRm93IG5vdywgZG9uJ3QgZG8gYW55dGhpbmcgZmFuY3kgdW50aWwg d2UgZ2V0IG91ciBmZWV0IHVuZGVyIHVzICovCisJZ211LT5pZGxlX2xldmVsID0gR01VX0lETEVf U1RBVEVfQUNUSVZFOworCisJcG1fcnVudGltZV9lbmFibGUoZ211LT5kZXYpOworCWdtdS0+Z3gg PSBkZXZtX3JlZ3VsYXRvcl9nZXQoZ211LT5kZXYsICJ2ZGQiKTsKKworCS8qIEdldCB0aGUgbGlz dCBvZiBjbG9ja3MgKi8KKwlyZXQgPSBhNnh4X2dtdV9jbG9ja3NfcHJvYmUoZ211KTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogU2V0IHVwIHRoZSBJT01NVSBjb250ZXh0IGJhbmsg Ki8KKwlyZXQgPSBhNnh4X2dtdV9tZW1vcnlfcHJvYmUoZ211KTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBmb3IgdGhlIEhGSSBxdWV1ZXMgKi8K KwlnbXUtPmhmaSA9IGE2eHhfZ211X21lbW9yeV9hbGxvYyhnbXUsIFNaXzE2Syk7CisJaWYgKElT X0VSUihnbXUtPmhmaSkpCisJCWdvdG8gZXJyOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciB0 aGUgR01VIGRlYnVnIHJlZ2lvbiAqLworCWdtdS0+ZGVidWcgPSBhNnh4X2dtdV9tZW1vcnlfYWxs b2MoZ211LCBTWl8xNkspOworCWlmIChJU19FUlIoZ211LT5kZWJ1ZykpCisJCWdvdG8gZXJyOwor CisJLyogTWFwIHRoZSBHTVUgcmVnaXN0ZXJzICovCisJZ211LT5tbWlvID0gYTZ4eF9nbXVfZ2V0 X21taW8ocGRldiwgImdtdSIpOworCisJLyogTWFwIHRoZSBHUFUgcG93ZXIgZG9tYWluIGNvbnRy b2xsZXIgcmVnaXN0ZXJzICovCisJZ211LT5wZGNfbW1pbyA9IGE2eHhfZ211X2dldF9tbWlvKHBk ZXYsICJnbXVfcGRjIik7CisKKwlpZiAoSVNfRVJSKGdtdS0+bW1pbykgfHwgSVNfRVJSKGdtdS0+ cGRjX21taW8pKQorCQlnb3RvIGVycjsKKworCS8qIEdldCB0aGUgSEZJIGFuZCBHTVUgaW50ZXJy dXB0cyAqLworCWdtdS0+aGZpX2lycSA9IGE2eHhfZ211X2dldF9pcnEoZ211LCBwZGV2LCAiaGZp IiwgYTZ4eF9oZmlfaXJxKTsKKwlnbXUtPmdtdV9pcnEgPSBhNnh4X2dtdV9nZXRfaXJxKGdtdSwg cGRldiwgImdtdSIsIGE2eHhfZ211X2lycSk7CisKKwlpZiAoZ211LT5oZmlfaXJxIDwgMCB8fCBn bXUtPmdtdV9pcnEgPCAwKQorCQlnb3RvIGVycjsKKworCS8qIFNldCB1cCBhIHRhc2tsZXQgdG8g aGFuZGxlIEdNVSBIRkkgcmVzcG9uc2VzICovCisJdGFza2xldF9pbml0KCZnbXUtPmhmaV90YXNr bGV0LCBhNnh4X2hmaV90YXNrLCAodW5zaWduZWQgbG9uZykgZ211KTsKKworCS8qIEdldCB0aGUg cG93ZXIgbGV2ZWxzIGZvciB0aGUgR01VIGFuZCBHUFUgKi8KKwlhNnh4X2dtdV9wd3JsZXZlbHNf cHJvYmUoZ211KTsKKworCS8qIFNldCB1cCB0aGUgSEZJIHF1ZXVlcyAqLworCWE2eHhfaGZpX2lu aXQoZ211KTsKKworCXJldHVybiAwOworZXJyOgorCWE2eHhfZ211X21lbW9yeV9mcmVlKGdtdSwg Z211LT5oZmkpOworCisJaWYgKGdtdS0+ZG9tYWluKSB7CisJCWlvbW11X2RldGFjaF9kZXZpY2Uo Z211LT5kb21haW4sIGdtdS0+ZGV2KTsKKworCQlpb21tdV9kb21haW5fZnJlZShnbXUtPmRvbWFp bik7CisJfQorCisJcmV0dXJuIC1FTk9ERVY7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbXNtL2FkcmVuby9hNnh4X2dtdS5oIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4 eF9nbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmQ5YTM4NmMx ODc5OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhf Z211LmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wICovCisvKiBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCBy aWdodHMgcmVzZXJ2ZWQuICovCisKKyNpZm5kZWYgX0E2WFhfR01VX0hfCisjZGVmaW5lIF9BNlhY X0dNVV9IXworCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSAibXNtX2Ry di5oIgorI2luY2x1ZGUgImE2eHhfaGZpLmgiCisKK3N0cnVjdCBhNnh4X2dtdV9ibyB7CisJdm9p ZCAqdmlydDsKKwlzaXplX3Qgc2l6ZTsKKwl1NjQgaW92YTsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2Vz OworfTsKKworLyoKKyAqIFRoZXNlIGRlZmluZSB0aGUgZGlmZmVyZW50IEdNVSB3YWtlIHVwIG9w dGlvbnMgLSB0aGVzZSBkZWZpbmUgaG93IGJvdGggdGhlCisgKiBDUFUgYW5kIHRoZSBHTVUgYnJp bmcgdXAgdGhlIGhhcmR3YXJlCisgKi8KKworLyogVEhlIEdNVSBoYXMgYWxyZWFkeSBiZWVuIGJv b3RlZCBhbmQgdGhlIHJlbnRlbnRpb24gcmVnaXN0ZXJzIGFyZSBhY3RpdmUgKi8KKyNkZWZpbmUg R01VX1dBUk1fQk9PVCAwCisKKy8qIHRoZSBHTVUgaXMgY29taW5nIHVwIGZvciB0aGUgZmlyc3Qg dGltZSBvciBiYWNrIGZyb20gYSBwb3dlciBjb2xsYXBzZSAqLworI2RlZmluZSBHTVVfQ09MRF9C T09UIDEKKworLyogVGhlIEdNVSBpcyBiZWluZyBzb2Z0IHJlc2V0IGFmdGVyIGEgZmF1bHQgKi8K KyNkZWZpbmUgR01VX1JFU0VUIDIKKworLyoKKyAqIFRoZXNlIGRlZmluZSB0aGUgbGV2ZWwgb2Yg Y29udHJvbCB0aGF0IHRoZSBHTVUgaGFzIC0gdGhlIGhpZ2hlciB0aGUgbnVtYmVyCisgKiB0aGUg bW9yZSB0aGluZ3MgdGhhdCB0aGUgR01VIGhhcmR3YXJlIGNvbnRyb2xzIG9uIGl0cyBvd24uCisg Ki8KKworLyogVGhlIEdNVSBkb2VzIG5vdCBkbyBhbnkgaWRsZSBzdGF0ZSBtYW5hZ2VtZW50ICov CisjZGVmaW5lIEdNVV9JRExFX1NUQVRFX0FDVElWRSAwCisKKy8qIFRoZSBHTVUgbWFuYWdlcyBT UFRQIHBvd2VyIGNvbGxhcHNlICovCisjZGVmaW5lIEdNVV9JRExFX1NUQVRFX1NQVFAgMgorCisv KiBUaGUgR01VIGRvZXMgYXV0b21hdGljIElGUEMgKGludHJhLWZyYW1lIHBvd2VyIGNvbGxhcHNl KSAqLworI2RlZmluZSBHTVVfSURMRV9TVEFURV9JRlBDIDMKKworc3RydWN0IGE2eHhfZ211IHsK KwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwl2b2lkICogX19pb21lbSBtbWlvOworCXZvaWQgKiBf X2lvbWVtIHBkY19tbWlvOworCisJaW50IGhmaV9pcnE7CisJaW50IGdtdV9pcnE7CisKKwlzdHJ1 Y3QgcmVndWxhdG9yICpneDsKKworCXN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbjsKKwl1NjQg dW5jYWNoZWRfaW92YV9iYXNlOworCisJaW50IGlkbGVfbGV2ZWw7CisKKwlzdHJ1Y3QgYTZ4eF9n bXVfYm8gKmhmaTsKKwlzdHJ1Y3QgYTZ4eF9nbXVfYm8gKmRlYnVnOworCisJaW50IG5yX2Nsb2Nr czsKKwlzdHJ1Y3QgY2xrX2J1bGtfZGF0YSAqY2xvY2tzOworCXN0cnVjdCBjbGsgKmNvcmVfY2xr OworCisJaW50IG5yX2dwdV9mcmVxczsKKwl1bnNpZ25lZCBsb25nIGdwdV9mcmVxc1sxNl07CisJ dTMyIGd4X2FyY192b3Rlc1sxNl07CisKKwlpbnQgbnJfZ211X2ZyZXFzOworCXVuc2lnbmVkIGxv bmcgZ211X2ZyZXFzWzRdOworCXUzMiBjeF9hcmNfdm90ZXNbNF07CisKKwlzdHJ1Y3QgYTZ4eF9o ZmlfcXVldWUgcXVldWVzWzJdOworCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IGhmaV90YXNrbGV0 OworfTsKKworc3RhdGljIGlubGluZSB1MzIgZ211X3JlYWQoc3RydWN0IGE2eHhfZ211ICpnbXUs IHUzMiBvZmZzZXQpCit7CisJcmV0dXJuIG1zbV9yZWFkbChnbXUtPm1taW8gKyAob2Zmc2V0IDw8 IDIpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdtdV93cml0ZShzdHJ1Y3QgYTZ4eF9nbXUg KmdtdSwgdTMyIG9mZnNldCwgdTMyIHZhbHVlKQoreworCXJldHVybiBtc21fd3JpdGVsKHZhbHVl LCBnbXUtPm1taW8gKyAob2Zmc2V0IDw8IDIpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBk Y193cml0ZShzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSwgdTMyIG9mZnNldCwgdTMyIHZhbHVlKQorewor CXJldHVybiBtc21fd3JpdGVsKHZhbHVlLCBnbXUtPnBkY19tbWlvICsgKG9mZnNldCA8PCAyKSk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnbXVfcm13KHN0cnVjdCBhNnh4X2dtdSAqZ211LCB1 MzIgcmVnLCB1MzIgbWFzaywgdTMyIG9yKQoreworCXUzMiB2YWwgPSBnbXVfcmVhZChnbXUsIHJl Zyk7CisKKwl2YWwgJj0gfm1hc2s7CisKKwlnbXVfd3JpdGUoZ211LCByZWcsIHZhbCB8IG9yKTsK K30KKworI2RlZmluZSBnbXVfcG9sbF90aW1lb3V0KGdtdSwgYWRkciwgdmFsLCBjb25kLCBpbnRl cnZhbCwgdGltZW91dCkgXAorCXJlYWRsX3BvbGxfdGltZW91dCgoZ211KS0+bW1pbyArICgoYWRk cikgPDwgMiksIHZhbCwgY29uZCwgXAorCQlpbnRlcnZhbCwgdGltZW91dCkKKworLyoKKyAqIFRo ZXNlIGFyZSB0aGUgYXZhaWxhYmxlIE9PQiAob3V0IG9mIGJhbmQgcmVxdWVzdHMpIHRvIHRoZSBH TVUgd2hlcmUgIm91dCBvZgorICogYmFuZCIgbWVhbnMgdGhhdCB0aGUgQ1BVIHRhbGtzIHRvIHRo ZSBHTVUgZGlyZWN0bHkgYW5kIG5vdCB0aHJvdWdoIEhGSS4KKyAqIE5vcm1hbGx5IHRoaXMgd29y a3MgYnkgd3JpdGluZyBhIElUQ00vRFRDTSByZWdpc3RlciBhbmQgdGhlbiB0cmlnZ2VyaW5nIGEK KyAqIGludGVycnVwdCAodGhlICJyZXF1ZXN0IiBiaXQpIGFuZCB3YWl0aW5nIGZvciBhbiBhY2tu b3dsZWRnbWVudCAodGhlICJhY2siCisgKiBiaXQpLiBUaGUgc3RhdGUgaXMgY2xlYXJlZCBieSB3 cml0aW5nIHRoZSAiY2xlYXInIGJpdCB0byB0aGUgR01VIGludGVycnVwdC4KKyAqCisgKiBUaGVz ZSBhcmUgdXNlZCB0byBmb3JjZSB0aGUgR01VL0dQVSB0byBzdGF5IG9uIGR1cmluZyBhIGNyaXRp Y2FsIHNlcXVlbmNlIG9yCisgKiBmb3IgaGFyZHdhcmUgd29ya2Fyb3VuZHMuCisgKi8KKworZW51 bSBhNnh4X2dtdV9vb2Jfc3RhdGUgeworCUdNVV9PT0JfQk9PVF9TTFVNQkVSID0gMCwKKwlHTVVf T09CX0dQVV9TRVQsCisJR01VX09PQl9EQ1ZTX1NFVCwKK307CisKKy8qIFRoZXNlIGFyZSB0aGUg aW50ZXJydXB0IC8gYWNrIGJpdHMgZm9yIGVhY2ggT09CIHJlcXVlc3QgdGhhdCBhcmUgc2V0Cisg KiBpbiBhNnh4X2dtdV9zZXRfb29iIGFuZCBhNnh4X2NsZWFyX29vYgorICovCisKKy8qCisgKiBM ZXQgdGhlIEdNVSBrbm93IHRoYXQgYSBib290IG9yIHNsdW1iZXIgb3BlcmF0aW9uIGhhcyBzdGFy dGVkLiBUaGUgdmFsdWUgaW4KKyAqIFJFR19BNlhYX0dNVV9CT09UX1NMVU1CRVJfT1BUSU9OIGxl dHMgdGhlIEdNVSBrbm93IHdoaWNoIG9wZXJhdGlvbiB3ZSBhcmUKKyAqIGRvaW5nCisgKi8KKyNk ZWZpbmUgR01VX09PQl9CT09UX1NMVU1CRVJfUkVRVUVTVAkyMgorI2RlZmluZSBHTVVfT09CX0JP T1RfU0xVTUJFUl9BQ0sJMzAKKyNkZWZpbmUgR01VX09PQl9CT09UX1NMVU1CRVJfQ0xFQVIJMzAK KworLyoKKyAqIFNldCBhIG5ldyBwb3dlciBsZXZlbCBmb3IgdGhlIEdQVSB3aGVuIHRoZSBDUFUg aXMgZG9pbmcgZnJlcXVlbmN5IHNjYWxpbmcKKyAqLworI2RlZmluZSBHTVVfT09CX0RDVlNfUkVR VUVTVAkyMworI2RlZmluZSBHTVVfT09CX0RDVlNfQUNLCTMxCisjZGVmaW5lIEdNVV9PT0JfRENW U19DTEVBUgkzMQorCisvKgorICogTGV0IHRoZSBHTVUga25vdyB0byBub3QgdHVybiBvZmYgYW55 IEdQVSByZWdpc3RlcnMgd2hpbGUgdGhlIENQVSBpcyBpbiBhCisgKiBjcml0aWNhbCBzZWN0aW9u CisgKi8KKyNkZWZpbmUgR01VX09PQl9HUFVfU0VUX1JFUVVFU1QJMTYKKyNkZWZpbmUgR01VX09P Ql9HUFVfU0VUX0FDSwkyNAorI2RlZmluZSBHTVVfT09CX0dQVV9TRVRfQ0xFQVIJMjQKKworCit2 b2lkIGE2eHhfaGZpX2luaXQoc3RydWN0IGE2eHhfZ211ICpnbXUpOworaW50IGE2eHhfaGZpX3N0 YXJ0KHN0cnVjdCBhNnh4X2dtdSAqZ211LCBpbnQgYm9vdF9zdGF0ZSk7Cit2b2lkIGE2eHhfaGZp X3N0b3Aoc3RydWN0IGE2eHhfZ211ICpnbXUpOworCit2b2lkIGE2eHhfaGZpX3Rhc2sodW5zaWdu ZWQgbG9uZyBkYXRhKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNt L2FkcmVuby9hNnh4X2dwdS5jIGIvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9ncHUu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmM2MjlmNzQyYTFkMQot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1LmMK QEAgLTAsMCArMSw4MTggQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisv KiBDb3B5cmlnaHQgKGMpIDIwMTctMjAxOCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4gKi8KKworCisjaW5jbHVkZSAibXNtX2dlbS5oIgorI2luY2x1ZGUgIm1zbV9t bXUuaCIKKyNpbmNsdWRlICJhNnh4X2dwdS5oIgorI2luY2x1ZGUgImE2eHhfZ211LnhtbC5oIgor CitzdGF0aWMgaW5saW5lIGJvb2wgX2E2eHhfY2hlY2tfaWRsZShzdHJ1Y3QgbXNtX2dwdSAqZ3B1 KQoreworCXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRyZW5vX2dwdShncHUp OworCXN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUgPSB0b19hNnh4X2dwdShhZHJlbm9fZ3B1KTsK KworCS8qIENoZWNrIHRoYXQgdGhlIEdNVSBpcyBpZGxlICovCisJaWYgKCFhNnh4X2dtdV9pc2lk bGUoJmE2eHhfZ3B1LT5nbXUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBDaGVjayB0aGEgdGhl IENYIG1hc3RlciBpcyBpZGxlICovCisJaWYgKGdwdV9yZWFkKGdwdSwgUkVHX0E2WFhfUkJCTV9T VEFUVVMpICYKKwkJCX5BNlhYX1JCQk1fU1RBVFVTX0NQX0FIQl9CVVNZX0NYX01BU1RFUikKKwkJ cmV0dXJuIGZhbHNlOworCisJcmV0dXJuICEoZ3B1X3JlYWQoZ3B1LCBSRUdfQTZYWF9SQkJNX0lO VF8wX1NUQVRVUykgJgorCQlBNlhYX1JCQk1fSU5UXzBfTUFTS19SQkJNX0hBTkdfREVURUNUKTsK K30KKworYm9vbCBhNnh4X2lkbGUoc3RydWN0IG1zbV9ncHUgKmdwdSwgc3RydWN0IG1zbV9yaW5n YnVmZmVyICpyaW5nKQoreworCS8qIHdhaXQgZm9yIENQIHRvIGRyYWluIHJpbmdidWZmZXI6ICov CisJaWYgKCFhZHJlbm9faWRsZShncHUsIHJpbmcpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAo c3Bpbl91bnRpbChfYTZ4eF9jaGVja19pZGxlKGdwdSkpKSB7CisJCURSTV9FUlJPUigiJXM6ICVw czogdGltZW91dCB3YWl0aW5nIGZvciBHUFUgdG8gaWRsZTogc3RhdHVzICU4LjhYIGlycSAlOC44 WCBycHRyL3dwdHIgJWQvJWRcbiIsCisJCQlncHUtPm5hbWUsIF9fYnVpbHRpbl9yZXR1cm5fYWRk cmVzcygwKSwKKwkJCWdwdV9yZWFkKGdwdSwgUkVHX0E2WFhfUkJCTV9TVEFUVVMpLAorCQkJZ3B1 X3JlYWQoZ3B1LCBSRUdfQTZYWF9SQkJNX0lOVF8wX1NUQVRVUyksCisJCQlncHVfcmVhZChncHUs IFJFR19BNlhYX0NQX1JCX1JQVFIpLAorCQkJZ3B1X3JlYWQoZ3B1LCBSRUdfQTZYWF9DUF9SQl9X UFRSKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGlj IHZvaWQgYTZ4eF9mbHVzaChzdHJ1Y3QgbXNtX2dwdSAqZ3B1LCBzdHJ1Y3QgbXNtX3JpbmdidWZm ZXIgKnJpbmcpCit7CisJdWludDMyX3Qgd3B0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJ c3Bpbl9sb2NrX2lycXNhdmUoJnJpbmctPmxvY2ssIGZsYWdzKTsKKworCS8qIENvcHkgdGhlIHNo YWRvdyB0byB0aGUgYWN0dWFsIHJlZ2lzdGVyICovCisJcmluZy0+Y3VyID0gcmluZy0+bmV4dDsK KworCS8qIE1ha2Ugc3VyZSB0byB3cmFwIHdwdHIgaWYgd2UgbmVlZCB0byAqLworCXdwdHIgPSBn ZXRfd3B0cihyaW5nKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJpbmctPmxvY2ssIGZs YWdzKTsKKworCS8qIE1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHBvc3RlZCBiZWZvcmUgbWFraW5n IGEgZGVjaXNpb24gKi8KKwltYigpOworCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfUkJf V1BUUiwgd3B0cik7Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhfc3VibWl0KHN0cnVjdCBtc21fZ3B1 ICpncHUsIHN0cnVjdCBtc21fZ2VtX3N1Ym1pdCAqc3VibWl0LAorCXN0cnVjdCBtc21fZmlsZV9w cml2YXRlICpjdHgpCit7CisJc3RydWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGdwdS0+ZGV2 LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbXNtX3JpbmdidWZmZXIgKnJpbmcgPSBzdWJtaXQtPnJp bmc7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKiBJbnZhbGlkYXRlIENDVSBkZXB0aCBhbmQgY29s b3IgKi8KKwlPVVRfUEtUNyhyaW5nLCBDUF9FVkVOVF9XUklURSwgMSk7CisJT1VUX1JJTkcocmlu ZywgUENfQ0NVX0lOVkFMSURBVEVfREVQVEgpOworCisJT1VUX1BLVDcocmluZywgQ1BfRVZFTlRf V1JJVEUsIDEpOworCU9VVF9SSU5HKHJpbmcsIFBDX0NDVV9JTlZBTElEQVRFX0NPTE9SKTsKKwor CS8qIFN1Ym1pdCB0aGUgY29tbWFuZHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3VibWl0LT5ucl9j bWRzOyBpKyspIHsKKwkJc3dpdGNoIChzdWJtaXQtPmNtZFtpXS50eXBlKSB7CisJCWNhc2UgTVNN X1NVQk1JVF9DTURfSUJfVEFSR0VUX0JVRjoKKwkJCWJyZWFrOworCQljYXNlIE1TTV9TVUJNSVRf Q01EX0NUWF9SRVNUT1JFX0JVRjoKKwkJCWlmIChwcml2LT5sYXN0Y3R4ID09IGN0eCkKKwkJCQli cmVhazsKKwkJY2FzZSBNU01fU1VCTUlUX0NNRF9CVUY6CisJCQlPVVRfUEtUNyhyaW5nLCBDUF9J TkRJUkVDVF9CVUZGRVJfUEZFLCAzKTsKKwkJCU9VVF9SSU5HKHJpbmcsIGxvd2VyXzMyX2JpdHMo c3VibWl0LT5jbWRbaV0uaW92YSkpOworCQkJT1VUX1JJTkcocmluZywgdXBwZXJfMzJfYml0cyhz dWJtaXQtPmNtZFtpXS5pb3ZhKSk7CisJCQlPVVRfUklORyhyaW5nLCBzdWJtaXQtPmNtZFtpXS5z aXplKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogV3JpdGUgdGhlIGZlbmNlIHRvIHRoZSBz Y3JhdGNoIHJlZ2lzdGVyICovCisJT1VUX1BLVDQocmluZywgUkVHX0E2WFhfQ1BfU0NSQVRDSF9S RUcoMiksIDEpOworCU9VVF9SSU5HKHJpbmcsIHN1Ym1pdC0+c2Vxbm8pOworCisJLyoKKwkgKiBF eGVjdXRlIGEgQ0FDSEVfRkxVU0hfVFMgZXZlbnQuIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCB0aGUK KwkgKiB0aW1lc3RhbXAgaXMgd3JpdHRlbiB0byB0aGUgbWVtb3J5IGFuZCB0aGVuIHRyaWdnZXJz IHRoZSBpbnRlcnJ1cHQKKwkgKi8KKwlPVVRfUEtUNyhyaW5nLCBDUF9FVkVOVF9XUklURSwgNCk7 CisJT1VUX1JJTkcocmluZywgQ0FDSEVfRkxVU0hfVFMgfCAoMSA8PCAzMSkpOworCU9VVF9SSU5H KHJpbmcsIGxvd2VyXzMyX2JpdHMocmJtZW1wdHIocmluZywgZmVuY2UpKSk7CisJT1VUX1JJTkco cmluZywgdXBwZXJfMzJfYml0cyhyYm1lbXB0cihyaW5nLCBmZW5jZSkpKTsKKwlPVVRfUklORyhy aW5nLCBzdWJtaXQtPnNlcW5vKTsKKworCWE2eHhfZmx1c2goZ3B1LCByaW5nKTsKK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCB7CisJdTMyIG9mZnNldDsKKwl1MzIgdmFsdWU7Cit9IGE2eHhfaHdj Z1tdID0geworCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVExfU1AwLCAweDIyMjIyMjIyfSwKKwl7 UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMX1NQMSwgMHgyMjIyMjIyMn0sCisJe1JFR19BNlhYX1JC Qk1fQ0xPQ0tfQ05UTF9TUDIsIDB4MjIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NO VExfU1AzLCAweDIyMjIyMjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMMl9TUDAsIDB4 MDIwMjIyMjB9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVEwyX1NQMSwgMHgwMjAyMjIyMH0s CisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTDJfU1AyLCAweDAyMDIyMjIwfSwKKwl7UkVHX0E2 WFhfUkJCTV9DTE9DS19DTlRMMl9TUDMsIDB4MDIwMjIyMjB9LAorCXtSRUdfQTZYWF9SQkJNX0NM T0NLX0RFTEFZX1NQMCwgMHgwMDAwMDA4MH0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfREVMQVlf U1AxLCAweDAwMDAwMDgwfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWV9TUDIsIDB4MDAw MDAwODB9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0RFTEFZX1NQMywgMHgwMDAwMDA4MH0sCisJ e1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlTVF9TUDAsIDB4MDAwMGYzY2Z9LAorCXtSRUdfQTZYWF9S QkJNX0NMT0NLX0hZU1RfU1AxLCAweDAwMDBmM2NmfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19I WVNUX1NQMiwgMHgwMDAwZjNjZn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlTVF9TUDMsIDB4 MDAwMGYzY2Z9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVExfVFAwLCAweDAyMjIyMjIyfSwK Kwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMX1RQMSwgMHgwMjIyMjIyMn0sCisJe1JFR19BNlhY X1JCQk1fQ0xPQ0tfQ05UTF9UUDIsIDB4MDIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NL X0NOVExfVFAzLCAweDAyMjIyMjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMMl9UUDAs IDB4MjIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVEwyX1RQMSwgMHgyMjIyMjIy Mn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTDJfVFAyLCAweDIyMjIyMjIyfSwKKwl7UkVH X0E2WFhfUkJCTV9DTE9DS19DTlRMMl9UUDMsIDB4MjIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJN X0NMT0NLX0NOVEwzX1RQMCwgMHgyMjIyMjIyMn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05U TDNfVFAxLCAweDIyMjIyMjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMM19UUDIsIDB4 MjIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVEwzX1RQMywgMHgyMjIyMjIyMn0s CisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTDRfVFAwLCAweDAwMDIyMjIyfSwKKwl7UkVHX0E2 WFhfUkJCTV9DTE9DS19DTlRMNF9UUDEsIDB4MDAwMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NM T0NLX0NOVEw0X1RQMiwgMHgwMDAyMjIyMn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTDRf VFAzLCAweDAwMDIyMjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19IWVNUX1RQMCwgMHg3Nzc3 Nzc3N30sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlTVF9UUDEsIDB4Nzc3Nzc3Nzd9LAorCXtS RUdfQTZYWF9SQkJNX0NMT0NLX0hZU1RfVFAyLCAweDc3Nzc3Nzc3fSwKKwl7UkVHX0E2WFhfUkJC TV9DTE9DS19IWVNUX1RQMywgMHg3Nzc3Nzc3N30sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlT VDJfVFAwLCAweDc3Nzc3Nzc3fSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19IWVNUMl9UUDEsIDB4 Nzc3Nzc3Nzd9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0hZU1QyX1RQMiwgMHg3Nzc3Nzc3N30s CisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlTVDJfVFAzLCAweDc3Nzc3Nzc3fSwKKwl7UkVHX0E2 WFhfUkJCTV9DTE9DS19IWVNUM19UUDAsIDB4Nzc3Nzc3Nzd9LAorCXtSRUdfQTZYWF9SQkJNX0NM T0NLX0hZU1QzX1RQMSwgMHg3Nzc3Nzc3N30sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlTVDNf VFAyLCAweDc3Nzc3Nzc3fSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19IWVNUM19UUDMsIDB4Nzc3 Nzc3Nzd9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0hZU1Q0X1RQMCwgMHgwMDA3Nzc3N30sCisJ e1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlTVDRfVFAxLCAweDAwMDc3Nzc3fSwKKwl7UkVHX0E2WFhf UkJCTV9DTE9DS19IWVNUNF9UUDIsIDB4MDAwNzc3Nzd9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NL X0hZU1Q0X1RQMywgMHgwMDA3Nzc3N30sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfREVMQVlfVFAw LCAweDExMTExMTExfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWV9UUDEsIDB4MTExMTEx MTF9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0RFTEFZX1RQMiwgMHgxMTExMTExMX0sCisJe1JF R19BNlhYX1JCQk1fQ0xPQ0tfREVMQVlfVFAzLCAweDExMTExMTExfSwKKwl7UkVHX0E2WFhfUkJC TV9DTE9DS19ERUxBWTJfVFAwLCAweDExMTExMTExfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19E RUxBWTJfVFAxLCAweDExMTExMTExfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWTJfVFAy LCAweDExMTExMTExfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWTJfVFAzLCAweDExMTEx MTExfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWTNfVFAwLCAweDExMTExMTExfSwKKwl7 UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWTNfVFAxLCAweDExMTExMTExfSwKKwl7UkVHX0E2WFhf UkJCTV9DTE9DS19ERUxBWTNfVFAyLCAweDExMTExMTExfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9D S19ERUxBWTNfVFAzLCAweDExMTExMTExfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWTRf VFAwLCAweDAwMDExMTExfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWTRfVFAxLCAweDAw MDExMTExfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWTRfVFAyLCAweDAwMDExMTExfSwK Kwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWTRfVFAzLCAweDAwMDExMTExfSwKKwl7UkVHX0E2 WFhfUkJCTV9DTE9DS19DTlRMX1VDSEUsIDB4MjIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NM T0NLX0NOVEwyX1VDSEUsIDB4MjIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVEwz X1VDSEUsIDB4MjIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVEw0X1VDSEUsIDB4 MDAyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0hZU1RfVUNIRSwgMHgwMDAwMDAwNH0s CisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfREVMQVlfVUNIRSwgMHgwMDAwMDAwMn0sCisJe1JFR19B NlhYX1JCQk1fQ0xPQ0tfQ05UTF9SQjAsIDB4MjIyMjIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NM T0NLX0NOVExfUkIxLCAweDIyMjIyMjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMX1JC MiwgMHgyMjIyMjIyMn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTF9SQjMsIDB4MjIyMjIy MjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVEwyX1JCMCwgMHgwMDAwMjIyMn0sCisJe1JF R19BNlhYX1JCQk1fQ0xPQ0tfQ05UTDJfUkIxLCAweDAwMDAyMjIyfSwKKwl7UkVHX0E2WFhfUkJC TV9DTE9DS19DTlRMMl9SQjIsIDB4MDAwMDIyMjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NO VEwyX1JCMywgMHgwMDAwMjIyMn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfQ05UTF9DQ1UwLCAw eDAwMDAyMjIwfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMX0NDVTEsIDB4MDAwMDIyMjB9 LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVExfQ0NVMiwgMHgwMDAwMjIyMH0sCisJe1JFR19B NlhYX1JCQk1fQ0xPQ0tfQ05UTF9DQ1UzLCAweDAwMDAyMjIwfSwKKwl7UkVHX0E2WFhfUkJCTV9D TE9DS19IWVNUX1JCX0NDVTAsIDB4MDAwNDBmMDB9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0hZ U1RfUkJfQ0NVMSwgMHgwMDA0MGYwMH0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfSFlTVF9SQl9D Q1UyLCAweDAwMDQwZjAwfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19IWVNUX1JCX0NDVTMsIDB4 MDAwNDBmMDB9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVExfUkFDLCAweDA1MDIyMDIyfSwK Kwl7UkVHX0E2WFhfUkJCTV9DTE9DS19DTlRMMl9SQUMsIDB4MDAwMDU1NTV9LAorCXtSRUdfQTZY WF9SQkJNX0NMT0NLX0RFTEFZX1JBQywgMHgwMDAwMDAxMX0sCisJe1JFR19BNlhYX1JCQk1fQ0xP Q0tfSFlTVF9SQUMsIDB4MDA0NDUwNDR9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVExfVFNF X1JBU19SQkJNLCAweDA0MjIyMjIyfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19NT0RFX0dQQywg MHgwMDIyMjIyMn0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfTU9ERV9WRkQsIDB4MDAwMDIyMjJ9 LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0hZU1RfVFNFX1JBU19SQkJNLCAweDAwMDAwMDAwfSwK Kwl7UkVHX0E2WFhfUkJCTV9DTE9DS19IWVNUX0dQQywgMHgwNDEwNDAwNH0sCisJe1JFR19BNlhY X1JCQk1fQ0xPQ0tfSFlTVF9WRkQsIDB4MDAwMDAwMDB9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NL X0RFTEFZX0hMU1EsIDB4MDAwMDAwMDB9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0RFTEFZX1RT RV9SQVNfUkJCTSwgMHgwMDAwNDAwMH0sCisJe1JFR19BNlhYX1JCQk1fQ0xPQ0tfREVMQVlfR1BD LCAweDAwMDAwMjAwfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19ERUxBWV9WRkQsIDB4MDAwMDIy MjJ9LAorCXtSRUdfQTZYWF9SQkJNX0NMT0NLX0RFTEFZX0hMU1FfMiwgMHgwMDAwMDAwMn0sCisJ e1JFR19BNlhYX1JCQk1fQ0xPQ0tfTU9ERV9ITFNRLCAweDAwMDAyMjIyfSwKKwl7UkVHX0E2WFhf UkJCTV9DTE9DS19DTlRMX0dNVV9HWCwgMHgwMDAwMDIyMn0sCisJe1JFR19BNlhYX1JCQk1fQ0xP Q0tfREVMQVlfR01VX0dYLCAweDAwMDAwMTExfSwKKwl7UkVHX0E2WFhfUkJCTV9DTE9DS19IWVNU X0dNVV9HWCwgMHgwMDAwMDU1NX0KK307CisKK3N0YXRpYyB2b2lkIGE2eHhfc2V0X2h3Y2coc3Ry dWN0IG1zbV9ncHUgKmdwdSwgYm9vbCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgYWRyZW5vX2dwdSAqYWRy ZW5vX2dwdSA9IHRvX2FkcmVub19ncHUoZ3B1KTsKKwlzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1 ID0gdG9fYTZ4eF9ncHUoYWRyZW5vX2dwdSk7CisJc3RydWN0IGE2eHhfZ211ICpnbXUgPSAmYTZ4 eF9ncHUtPmdtdTsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgdmFsOworCisJdmFsID0gZ3B1X3Jl YWQoZ3B1LCBSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVEwpOworCisJLyogRG9uJ3QgcmUtcHJvZ3Jh bSB0aGUgcmVnaXN0ZXJzIGlmIHRoZXkgYXJlIGFscmVhZHkgY29ycmVjdCAqLworCWlmICgoIXN0 YXRlICYmICF2YWwpIHx8IChzdGF0ZSAmJiAodmFsID09IDB4OGFhOGFhMDIpKSkKKwkJcmV0dXJu OworCisJLyogRGlzYWJsZSBTUCBjbG9jayBiZWZvcmUgcHJvZ3JhbW1pbmcgSFdDRyByZWdpc3Rl cnMgKi8KKwlnbXVfcm13KGdtdSwgUkVHX0E2WFhfR1BVX0dNVV9HWF9TUFRQUkFDX0NMT0NLX0NP TlRST0wsIDEsIDApOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYTZ4eF9od2NnKTsg aSsrKQorCQlncHVfd3JpdGUoZ3B1LCBhNnh4X2h3Y2dbaV0ub2Zmc2V0LAorCQkJc3RhdGUgPyBh Nnh4X2h3Y2dbaV0udmFsdWUgOiAwKTsKKworCS8qIEVuYWJsZSBTUCBjbG9jayAqLworCWdtdV9y bXcoZ211LCBSRUdfQTZYWF9HUFVfR01VX0dYX1NQVFBSQUNfQ0xPQ0tfQ09OVFJPTCwgMCwgMSk7 CisKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9SQkJNX0NMT0NLX0NOVEwsIHN0YXRlID8gMHg4 YWE4YWEwMiA6IDApOworfQorCitzdGF0aWMgaW50IGE2eHhfY3BfaW5pdChzdHJ1Y3QgbXNtX2dw dSAqZ3B1KQoreworCXN0cnVjdCBtc21fcmluZ2J1ZmZlciAqcmluZyA9IGdwdS0+cmJbMF07CisK KwlPVVRfUEtUNyhyaW5nLCBDUF9NRV9JTklULCA4KTsKKworCU9VVF9SSU5HKHJpbmcsIDB4MDAw MDAwMmYpOworCisJLyogRW5hYmxlIG11bHRpcGxlIGhhcmR3YXJlIGNvbnRleHRzICovCisJT1VU X1JJTkcocmluZywgMHgwMDAwMDAwMyk7CisKKwkvKiBFbmFibGUgZXJyb3IgZGV0ZWN0aW9uICov CisJT1VUX1JJTkcocmluZywgMHgyMDAwMDAwMCk7CisKKwkvKiBEb24ndCBlbmFibGUgaGVhZGVy IGR1bXAgKi8KKwlPVVRfUklORyhyaW5nLCAweDAwMDAwMDAwKTsKKwlPVVRfUklORyhyaW5nLCAw eDAwMDAwMDAwKTsKKworCS8qIE5vIHdvcmthcm91bmRzIGVuYWJsZWQgKi8KKwlPVVRfUklORyhy aW5nLCAweDAwMDAwMDAwKTsKKworCS8qIFBhZCByZXN0IG9mIHRoZSBjbWRzIHdpdGggMCdzICov CisJT1VUX1JJTkcocmluZywgMHgwMDAwMDAwMCk7CisJT1VUX1JJTkcocmluZywgMHgwMDAwMDAw MCk7CisKKwlhNnh4X2ZsdXNoKGdwdSwgcmluZyk7CisJcmV0dXJuIGE2eHhfaWRsZShncHUsIHJp bmcpID8gMCA6IC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgYTZ4eF91Y29kZV9pbml0KHN0cnVj dCBtc21fZ3B1ICpncHUpCit7CisJc3RydWN0IGFkcmVub19ncHUgKmFkcmVub19ncHUgPSB0b19h ZHJlbm9fZ3B1KGdwdSk7CisJc3RydWN0IGE2eHhfZ3B1ICphNnh4X2dwdSA9IHRvX2E2eHhfZ3B1 KGFkcmVub19ncHUpOworCisJaWYgKCFhNnh4X2dwdS0+c3FlX2JvKSB7CisJCWE2eHhfZ3B1LT5z cWVfYm8gPSBhZHJlbm9fZndfY3JlYXRlX2JvKGdwdSwKKwkJCWFkcmVub19ncHUtPmZ3W0FEUkVO T19GV19TUUVdLCAmYTZ4eF9ncHUtPnNxZV9pb3ZhKTsKKworCQlpZiAoSVNfRVJSKGE2eHhfZ3B1 LT5zcWVfYm8pKSB7CisJCQlpbnQgcmV0ID0gUFRSX0VSUihhNnh4X2dwdS0+c3FlX2JvKTsKKwor CQkJYTZ4eF9ncHUtPnNxZV9ibyA9IE5VTEw7CisJCQlEUk1fREVWX0VSUk9SKCZncHUtPnBkZXYt PmRldiwKKwkJCQkiQ291bGQgbm90IGFsbG9jYXRlIFNRRSB1Y29kZTogJWRcbiIsIHJldCk7CisK KwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlncHVfd3JpdGU2NChncHUsIFJFR19BNlhYX0NQ X1NRRV9JTlNUUl9CQVNFX0xPLAorCQlSRUdfQTZYWF9DUF9TUUVfSU5TVFJfQkFTRV9ISSwgYTZ4 eF9ncHUtPnNxZV9pb3ZhKTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIEE2WFhfSU5UX01B U0sgKEE2WFhfUkJCTV9JTlRfMF9NQVNLX0NQX0FIQl9FUlJPUiB8IFwKKwkgIEE2WFhfUkJCTV9J TlRfMF9NQVNLX1JCQk1fQVRCX0FTWU5DRklGT19PVkVSRkxPVyB8IFwKKwkgIEE2WFhfUkJCTV9J TlRfMF9NQVNLX0NQX0hXX0VSUk9SIHwgXAorCSAgQTZYWF9SQkJNX0lOVF8wX01BU0tfQ1BfSUIy IHwgXAorCSAgQTZYWF9SQkJNX0lOVF8wX01BU0tfQ1BfSUIxIHwgXAorCSAgQTZYWF9SQkJNX0lO VF8wX01BU0tfQ1BfUkIgfCBcCisJICBBNlhYX1JCQk1fSU5UXzBfTUFTS19DUF9DQUNIRV9GTFVT SF9UUyB8IFwKKwkgIEE2WFhfUkJCTV9JTlRfMF9NQVNLX1JCQk1fQVRCX0JVU19PVkVSRkxPVyB8 IFwKKwkgIEE2WFhfUkJCTV9JTlRfMF9NQVNLX1JCQk1fSEFOR19ERVRFQ1QgfCBcCisJICBBNlhY X1JCQk1fSU5UXzBfTUFTS19VQ0hFX09PQl9BQ0NFU1MgfCBcCisJICBBNlhYX1JCQk1fSU5UXzBf TUFTS19VQ0hFX1RSQVBfSU5UUikKKworc3RhdGljIGludCBhNnh4X2h3X2luaXQoc3RydWN0IG1z bV9ncHUgKmdwdSkKK3sKKwlzdHJ1Y3QgYWRyZW5vX2dwdSAqYWRyZW5vX2dwdSA9IHRvX2FkcmVu b19ncHUoZ3B1KTsKKwlzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1ID0gdG9fYTZ4eF9ncHUoYWRy ZW5vX2dwdSk7CisJaW50IHJldDsKKworCS8qIE1ha2Ugc3VyZSB0aGUgR01VIGtlZXBzIHRoZSBH UFUgb24gd2hpbGUgd2Ugc2V0IGl0IHVwICovCisJYTZ4eF9nbXVfc2V0X29vYigmYTZ4eF9ncHUt PmdtdSwgR01VX09PQl9HUFVfU0VUKTsKKworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1JCQk1f U0VDVklEX1RTQl9DTlRMLCAwKTsKKworCS8qCisJICogRGlzYWJsZSB0aGUgdHJ1c3RlZCBtZW1v cnkgcmFuZ2UgLSB3ZSBkb24ndCBhY3R1YWxseSBzdXBwb3J0ZWQgc2VjdXJlCisJICogbWVtb3J5 IHJlbmRlcmluZyBhdCB0aGlzIHBvaW50IGluIHRpbWUgYW5kIHdlIGRvbid0IHdhbnQgdG8gYmxv Y2sgb2ZmCisJICogcGFydCBvZiB0aGUgdmlydHVhbCBtZW1vcnkgc3BhY2UuCisJICovCisJZ3B1 X3dyaXRlNjQoZ3B1LCBSRUdfQTZYWF9SQkJNX1NFQ1ZJRF9UU0JfVFJVU1RFRF9CQVNFX0xPLAor CQlSRUdfQTZYWF9SQkJNX1NFQ1ZJRF9UU0JfVFJVU1RFRF9CQVNFX0hJLCAweDAwMDAwMDAwKTsK KwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9SQkJNX1NFQ1ZJRF9UU0JfVFJVU1RFRF9TSVpFLCAw eDAwMDAwMDAwKTsKKworCS8qIGVuYWJsZSBoYXJkd2FyZSBjbG9ja2dhdGluZyAqLworCWE2eHhf c2V0X2h3Y2coZ3B1LCB0cnVlKTsKKworCS8qIFZCSUYgc3RhcnQgKi8KKwlncHVfd3JpdGUoZ3B1 LCBSRUdfQTZYWF9WQklGX0dBVEVfT0ZGX1dSUkVRX0VOLCAweDAwMDAwMDA5KTsKKwlncHVfd3Jp dGUoZ3B1LCBSRUdfQTZYWF9SQkJNX1ZCSUZfQ0xJRU5UX1FPU19DTlRMLCAweDMpOworCisJLyog TWFrZSBhbGwgYmxvY2tzIGNvbnRyaWJ1dGUgdG8gdGhlIEdQVSBCVVNZIHBlcmYgY291bnRlciAq LworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1JCQk1fUEVSRkNUUl9HUFVfQlVTWV9NQVNLRUQs IDB4ZmZmZmZmZmYpOworCisJLyogRGlzYWJsZSBMMiBieXBhc3MgaW4gdGhlIFVDSEUgKi8KKwln cHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9VQ0hFX1dSSVRFX1JBTkdFX01BWF9MTywgMHhmZmZmZmZj MCk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfVUNIRV9XUklURV9SQU5HRV9NQVhfSEksIDB4 MDAwMWZmZmYpOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1VDSEVfVFJBUF9CQVNFX0xPLCAw eGZmZmZmMDAwKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9VQ0hFX1RSQVBfQkFTRV9ISSwg MHgwMDAxZmZmZik7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfVUNIRV9XUklURV9USFJVX0JB U0VfTE8sIDB4ZmZmZmYwMDApOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1VDSEVfV1JJVEVf VEhSVV9CQVNFX0hJLCAweDAwMDFmZmZmKTsKKworCS8qIFNldCB0aGUgR01FTSBWQSByYW5nZSBb MHgxMDAwMDA6MHgxMDAwMDAgKyBncHUtPmdtZW0gLSAxXSAqLworCWdwdV93cml0ZTY0KGdwdSwg UkVHX0E2WFhfVUNIRV9HTUVNX1JBTkdFX01JTl9MTywKKwkJUkVHX0E2WFhfVUNIRV9HTUVNX1JB TkdFX01JTl9ISSwgMHgwMDEwMDAwMCk7CisKKwlncHVfd3JpdGU2NChncHUsIFJFR19BNlhYX1VD SEVfR01FTV9SQU5HRV9NQVhfTE8sCisJCVJFR19BNlhYX1VDSEVfR01FTV9SQU5HRV9NQVhfSEks CisJCTB4MDAxMDAwMDAgKyBhZHJlbm9fZ3B1LT5nbWVtIC0gMSk7CisKKwlncHVfd3JpdGUoZ3B1 LCBSRUdfQTZYWF9VQ0hFX0ZJTFRFUl9DTlRMLCAweDgwNCk7CisJZ3B1X3dyaXRlKGdwdSwgUkVH X0E2WFhfVUNIRV9DQUNIRV9XQVlTLCAweDQpOworCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhf Q1BfUk9RX1RIUkVTSE9MRFNfMiwgMHgwMTAwMDBjMCk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2 WFhfQ1BfUk9RX1RIUkVTSE9MRFNfMSwgMHg4MDQwMzYyYyk7CisKKwkvKiBTZXR0aW5nIHRoZSBt ZW0gcG9vbCBzaXplICovCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfTUVNX1BPT0xfU0la RSwgMTI4KTsKKworCS8qIFNldHRpbmcgdGhlIHByaW1GaWZvIHRocmVzaG9sZHMgZGVmYXVsdCB2 YWx1ZXMgKi8KKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9QQ19EQkdfRUNPX0NOVEwsICgweDMw MCA8PCAxMSkpOworCisJLyogU2V0IHRoZSBBSEIgZGVmYXVsdCBzbGF2ZSByZXNwb25zZSB0byAi RVJST1IiICovCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfQUhCX0NOVEwsIDB4MSk7CisK KwkvKiBUdXJuIG9uIHBlcmZvcm1hbmNlIGNvdW50ZXJzICovCisJZ3B1X3dyaXRlKGdwdSwgUkVH X0E2WFhfUkJCTV9QRVJGQ1RSX0NOVEwsIDB4MSk7CisKKwkvKiBTZWxlY3QgQ1AwIHRvIGFsd2F5 cyBjb3VudCBjeWNsZXMgKi8KKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QRVJGQ1RSX0NQ X1NFTF8wLCBQRVJGX0NQX0FMV0FZU19DT1VOVCk7CisKKwkvKiBGSVhNRTogbm90IHN1cmUgaWYg dGhpcyBzaG91bGQgbGl2ZSBoZXJlIG9yIGluIGE2eHhfZ211LmMgKi8KKwlnbXVfd3JpdGUoJmE2 eHhfZ3B1LT5nbXUsICBSRUdfQTZYWF9HUFVfR01VX0FPX0dQVV9DWF9CVVNZX01BU0ssCisJCTB4 ZmYwMDAwMDApOworCWdtdV9ybXcoJmE2eHhfZ3B1LT5nbXUsIFJFR19BNlhYX0dNVV9DWF9HTVVf UE9XRVJfQ09VTlRFUl9TRUxFQ1RfMCwKKwkJMHhmZiwgMHgyMCk7CisJZ211X3dyaXRlKCZhNnh4 X2dwdS0+Z211LCBSRUdfQTZYWF9HTVVfQ1hfR01VX1BPV0VSX0NPVU5URVJfRU5BQkxFLAorCQkw eDAxKTsKKworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1JCX05DX01PREVfQ05UTCwgMiA8PCAx KTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9UUEwxX05DX01PREVfQ05UTCwgMiA8PCAxKTsK KwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9TUF9OQ19NT0RFX0NOVEwsIDIgPDwgMSk7CisJZ3B1 X3dyaXRlKGdwdSwgUkVHX0E2WFhfVUNIRV9NT0RFX0NOVEwsIDIgPDwgMjEpOworCisJLyogRW5h YmxlIGZhdWx0IGRldGVjdGlvbiAqLworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1JCQk1fSU5U RVJGQUNFX0hBTkdfSU5UX0NOVEwsCisJCSgxIDw8IDMwKSB8IDB4MWZmZmZmKTsKKworCWdwdV93 cml0ZShncHUsIFJFR19BNlhYX1VDSEVfQ0xJRU5UX1BGLCAxKTsKKworCS8qIFByb3RlY3QgcmVn aXN0ZXJzIGZyb20gdGhlIENQICovCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfUFJPVEVD VF9DTlRMLCAweDAwMDAwMDAzKTsKKworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0NQX1BST1RF Q1QoMCksCisJCUE2WFhfUFJPVEVDVF9SRE9OTFkoMHg2MDAsIDB4NTEpKTsKKwlncHVfd3JpdGUo Z3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDEpLCBBNlhYX1BST1RFQ1RfUlcoMHhhZTUwLCAweDIp KTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDIpLCBBNlhYX1BST1RFQ1Rf UlcoMHg5NjI0LCAweDEzKSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfUFJPVEVDVCgz KSwgQTZYWF9QUk9URUNUX1JXKDB4ODYzMCwgMHg4KSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2 WFhfQ1BfUFJPVEVDVCg0KSwgQTZYWF9QUk9URUNUX1JXKDB4OWU3MCwgMHgxKSk7CisJZ3B1X3dy aXRlKGdwdSwgUkVHX0E2WFhfQ1BfUFJPVEVDVCg1KSwgQTZYWF9QUk9URUNUX1JXKDB4OWU3OCwg MHgxODcpKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDYpLCBBNlhYX1BS T1RFQ1RfUlcoMHhmMDAwLCAweDgxMCkpOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0NQX1BS T1RFQ1QoNyksCisJCUE2WFhfUFJPVEVDVF9SRE9OTFkoMHhmYzAwLCAweDMpKTsKKwlncHVfd3Jp dGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDgpLCBBNlhYX1BST1RFQ1RfUlcoMHg1MGUsIDB4 MCkpOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0NQX1BST1RFQ1QoOSksIEE2WFhfUFJPVEVD VF9SRE9OTFkoMHg1MGYsIDB4MCkpOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0NQX1BST1RF Q1QoMTApLCBBNlhYX1BST1RFQ1RfUlcoMHg1MTAsIDB4MCkpOworCWdwdV93cml0ZShncHUsIFJF R19BNlhYX0NQX1BST1RFQ1QoMTEpLAorCQlBNlhYX1BST1RFQ1RfUkRPTkxZKDB4MCwgMHg0Zjkp KTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDEyKSwKKwkJQTZYWF9QUk9U RUNUX1JET05MWSgweDUwMSwgMHhhKSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfUFJP VEVDVCgxMyksCisJCUE2WFhfUFJPVEVDVF9SRE9OTFkoMHg1MTEsIDB4NDQpKTsKKwlncHVfd3Jp dGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDE0KSwgQTZYWF9QUk9URUNUX1JXKDB4ZTAwLCAw eGUpKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDE1KSwgQTZYWF9QUk9U RUNUX1JXKDB4OGUwMCwgMHgwKSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfUFJPVEVD VCgxNiksIEE2WFhfUFJPVEVDVF9SVygweDhlNTAsIDB4ZikpOworCWdwdV93cml0ZShncHUsIFJF R19BNlhYX0NQX1BST1RFQ1QoMTcpLCBBNlhYX1BST1RFQ1RfUlcoMHhiZTAyLCAweDApKTsKKwln cHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDE4KSwKKwkJQTZYWF9QUk9URUNUX1JX KDB4YmUyMCwgMHgxMWYzKSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfUFJPVEVDVCgx OSksIEE2WFhfUFJPVEVDVF9SVygweDgwMCwgMHg4MikpOworCWdwdV93cml0ZShncHUsIFJFR19B NlhYX0NQX1BST1RFQ1QoMjApLCBBNlhYX1BST1RFQ1RfUlcoMHg4YTAsIDB4OCkpOworCWdwdV93 cml0ZShncHUsIFJFR19BNlhYX0NQX1BST1RFQ1QoMjEpLCBBNlhYX1BST1RFQ1RfUlcoMHg4YWIs IDB4MTkpKTsKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9DUF9QUk9URUNUKDIyKSwgQTZYWF9Q Uk9URUNUX1JXKDB4OTAwLCAweDRkKSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfUFJP VEVDVCgyMyksIEE2WFhfUFJPVEVDVF9SVygweDk4ZCwgMHg3NikpOworCWdwdV93cml0ZShncHUs IFJFR19BNlhYX0NQX1BST1RFQ1QoMjQpLAorCQkJQTZYWF9QUk9URUNUX1JET05MWSgweDhkMCwg MHgyMykpOworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX0NQX1BST1RFQ1QoMjUpLAorCQkJQTZY WF9QUk9URUNUX1JET05MWSgweDk4MCwgMHg0KSk7CisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhf Q1BfUFJPVEVDVCgyNiksIEE2WFhfUFJPVEVDVF9SVygweGE2MzAsIDB4MCkpOworCisJLyogRW5h YmxlIGludGVycnVwdHMgKi8KKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9SQkJNX0lOVF8wX01B U0ssIEE2WFhfSU5UX01BU0spOworCisJcmV0ID0gYWRyZW5vX2h3X2luaXQoZ3B1KTsKKwlpZiAo cmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IGE2eHhfdWNvZGVfaW5pdChncHUpOworCWlmIChy ZXQpCisJCWdvdG8gb3V0OworCisJLyogQWx3YXlzIGNvbWUgdXAgb24gcmIgMCAqLworCWE2eHhf Z3B1LT5jdXJfcmluZyA9IGdwdS0+cmJbMF07CisKKwkvKiBFbmFibGUgdGhlIFNRRV90byBzdGFy dCB0aGUgQ1AgZW5naW5lICovCisJZ3B1X3dyaXRlKGdwdSwgUkVHX0E2WFhfQ1BfU1FFX0NOVEws IDEpOworCisJcmV0ID0gYTZ4eF9jcF9pbml0KGdwdSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7 CisKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZYWF9SQkJNX1NFQ1ZJRF9UUlVTVF9DTlRMLCAweDAp OworCitvdXQ6CisJLyoKKwkgKiBUZWxsIHRoZSBHTVUgdGhhdCB3ZSBhcmUgZG9uZSB0b3VjaGlu ZyB0aGUgR1BVIGFuZCBpdCBjYW4gc3RhcnQgcG93ZXIKKwkgKiBtYW5hZ2VtZW50CisJICovCisJ YTZ4eF9nbXVfY2xlYXJfb29iKCZhNnh4X2dwdS0+Z211LCBHTVVfT09CX0dQVV9TRVQpOworCisJ LyogVGFrZSB0aGUgR01VIG91dCBvZiBpdHMgc3BlY2lhbCBib290IG1vZGUgKi8KKwlhNnh4X2dt dV9jbGVhcl9vb2IoJmE2eHhfZ3B1LT5nbXUsIEdNVV9PT0JfQk9PVF9TTFVNQkVSKTsKKworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhfZHVtcChzdHJ1Y3QgbXNtX2dwdSAqZ3B1 KQoreworCWRldl9pbmZvKCZncHUtPnBkZXYtPmRldiwgInN0YXR1czogICAlMDh4XG4iLAorCQkJ Z3B1X3JlYWQoZ3B1LCBSRUdfQTZYWF9SQkJNX1NUQVRVUykpOworCWFkcmVub19kdW1wKGdwdSk7 Cit9CisKKyNkZWZpbmUgVkJJRl9SRVNFVF9BQ0tfVElNRU9VVAkxMDAKKyNkZWZpbmUgVkJJRl9S RVNFVF9BQ0tfTUFTSwkweDAwZjAKKworc3RhdGljIHZvaWQgYTZ4eF9yZWNvdmVyKHN0cnVjdCBt c21fZ3B1ICpncHUpCit7CisJc3RydWN0IGFkcmVub19ncHUgKmFkcmVub19ncHUgPSB0b19hZHJl bm9fZ3B1KGdwdSk7CisJc3RydWN0IGE2eHhfZ3B1ICphNnh4X2dwdSA9IHRvX2E2eHhfZ3B1KGFk cmVub19ncHUpOworCWludCBpOworCisJYWRyZW5vX2R1bXBfaW5mbyhncHUpOworCisJZm9yIChp ID0gMDsgaSA8IDg7IGkrKykKKwkJZGV2X2luZm8oJmdwdS0+cGRldi0+ZGV2LCAiQ1BfU0NSQVRD SF9SRUclZDogJXVcbiIsIGksCisJCQlncHVfcmVhZChncHUsIFJFR19BNlhYX0NQX1NDUkFUQ0hf UkVHKGkpKSk7CisKKwlpZiAoaGFuZ19kZWJ1ZykKKwkJYTZ4eF9kdW1wKGdwdSk7CisKKwkvKgor CSAqIFR1cm4gb2ZmIGtlZXAgYWxpdmUgdGhhdCBtaWdodCBoYXZlIGJlZW4gZW5hYmxlZCBieSB0 aGUgaGFuZworCSAqIGludGVycnVwdAorCSAqLworCWdtdV93cml0ZSgmYTZ4eF9ncHUtPmdtdSwg UkVHX0E2WFhfR01VX0dNVV9QV1JfQ09MX0tFRVBBTElWRSwgMCk7CisKKwlncHUtPmZ1bmNzLT5w bV9zdXNwZW5kKGdwdSk7CisJZ3B1LT5mdW5jcy0+cG1fcmVzdW1lKGdwdSk7CisKKwltc21fZ3B1 X2h3X2luaXQoZ3B1KTsKK30KKworc3RhdGljIGludCBhNnh4X2ZhdWx0X2hhbmRsZXIodm9pZCAq YXJnLCB1bnNpZ25lZCBsb25nIGlvdmEsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgbXNtX2dwdSAq Z3B1ID0gYXJnOworCisJcHJfd2Fybl9yYXRlbGltaXRlZCgiKioqIGdwdSBmYXVsdDogaW92YT0l MDhseCwgZmxhZ3M9JWQgKCV1LCV1LCV1LCV1KVxuIiwKKwkJCWlvdmEsIGZsYWdzLAorCQkJZ3B1 X3JlYWQoZ3B1LCBSRUdfQTZYWF9DUF9TQ1JBVENIX1JFRyg0KSksCisJCQlncHVfcmVhZChncHUs IFJFR19BNlhYX0NQX1NDUkFUQ0hfUkVHKDUpKSwKKwkJCWdwdV9yZWFkKGdwdSwgUkVHX0E2WFhf Q1BfU0NSQVRDSF9SRUcoNikpLAorCQkJZ3B1X3JlYWQoZ3B1LCBSRUdfQTZYWF9DUF9TQ1JBVENI X1JFRyg3KSkpOworCisJcmV0dXJuIC1FRkFVTFQ7Cit9CisKK3N0YXRpYyB2b2lkIGE2eHhfY3Bf aHdfZXJyX2lycShzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQoreworCXUzMiBzdGF0dXMgPSBncHVfcmVh ZChncHUsIFJFR19BNlhYX0NQX0lOVEVSUlVQVF9TVEFUVVMpOworCisJaWYgKHN0YXR1cyAmIEE2 WFhfQ1BfSU5UX0NQX09QQ09ERV9FUlJPUikgeworCQl1MzIgdmFsOworCisJCWdwdV93cml0ZShn cHUsIFJFR19BNlhYX0NQX1NRRV9TVEFUX0FERFIsIDEpOworCQl2YWwgPSBncHVfcmVhZChncHUs IFJFR19BNlhYX0NQX1NRRV9TVEFUX0RBVEEpOworCQlkZXZfZXJyX3JhdGVsaW1pdGVkKCZncHUt PnBkZXYtPmRldiwKKwkJCSJDUCB8IG9wY29kZSBlcnJvciB8IHBvc3NpYmxlIG9wY29kZT0weCU4 LjhYXG4iLAorCQkJdmFsKTsKKwl9CisKKwlpZiAoc3RhdHVzICYgQTZYWF9DUF9JTlRfQ1BfVUNP REVfRVJST1IpCisJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoJmdwdS0+cGRldi0+ZGV2LAorCQkJIkNQ IHVjb2RlIGVycm9yIGludGVycnVwdFxuIik7CisKKwlpZiAoc3RhdHVzICYgQTZYWF9DUF9JTlRf Q1BfSFdfRkFVTFRfRVJST1IpCisJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoJmdwdS0+cGRldi0+ZGV2 LCAiQ1AgfCBIVyBmYXVsdCB8IHN0YXR1cz0weCU4LjhYXG4iLAorCQkJZ3B1X3JlYWQoZ3B1LCBS RUdfQTZYWF9DUF9IV19GQVVMVCkpOworCisJaWYgKHN0YXR1cyAmIEE2WFhfQ1BfSU5UX0NQX1JF R0lTVEVSX1BST1RFQ1RJT05fRVJST1IpIHsKKwkJdTMyIHZhbCA9IGdwdV9yZWFkKGdwdSwgUkVH X0E2WFhfQ1BfUFJPVEVDVF9TVEFUVVMpOworCisJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoJmdwdS0+ cGRldi0+ZGV2LAorCQkJIkNQIHwgcHJvdGVjdGVkIG1vZGUgZXJyb3IgfCAlcyB8IGFkZHI9MHgl OC44WCB8IHN0YXR1cz0weCU4LjhYXG4iLAorCQkJdmFsICYgKDEgPDwgMjApID8gIlJFQUQiIDog IldSSVRFIiwKKwkJCSh2YWwgJiAweDNmZmZmKSwgdmFsKTsKKwl9CisKKwlpZiAoc3RhdHVzICYg QTZYWF9DUF9JTlRfQ1BfQUhCX0VSUk9SKQorCQlkZXZfZXJyX3JhdGVsaW1pdGVkKCZncHUtPnBk ZXYtPmRldiwgIkNQIEFIQiBlcnJvciBpbnRlcnJ1cHRcbiIpOworCisJaWYgKHN0YXR1cyAmIEE2 WFhfQ1BfSU5UX0NQX1ZTRF9QQVJJVFlfRVJST1IpCisJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoJmdw dS0+cGRldi0+ZGV2LCAiQ1AgVlNEIGRlY29kZXIgcGFyaXR5IGVycm9yXG4iKTsKKworCWlmIChz dGF0dXMgJiBBNlhYX0NQX0lOVF9DUF9JTExFR0FMX0lOU1RSX0VSUk9SKQorCQlkZXZfZXJyX3Jh dGVsaW1pdGVkKCZncHUtPnBkZXYtPmRldiwgIkNQIGlsbGVnYWwgaW5zdHJ1Y3Rpb24gZXJyb3Jc biIpOworCit9CisKK3N0YXRpYyB2b2lkIGE2eHhfZmF1bHRfZGV0ZWN0X2lycShzdHJ1Y3QgbXNt X2dwdSAqZ3B1KQoreworCXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRyZW5v X2dwdShncHUpOworCXN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUgPSB0b19hNnh4X2dwdShhZHJl bm9fZ3B1KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZ3B1LT5kZXY7CisJc3RydWN0IG1z bV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG1zbV9yaW5n YnVmZmVyICpyaW5nID0gZ3B1LT5mdW5jcy0+YWN0aXZlX3JpbmcoZ3B1KTsKKworCS8qCisJICog Rm9yY2UgdGhlIEdQVSB0byBzdGF5IG9uIHVudGlsIGFmdGVyIHdlIGZpbmlzaAorCSAqIGNvbGxl Y3RpbmcgaW5mb3JtYXRpb24KKwkgKi8KKwlnbXVfd3JpdGUoJmE2eHhfZ3B1LT5nbXUsIFJFR19B NlhYX0dNVV9HTVVfUFdSX0NPTF9LRUVQQUxJVkUsIDEpOworCisJRFJNX0RFVl9FUlJPUigmZ3B1 LT5wZGV2LT5kZXYsCisJCSJncHUgZmF1bHQgcmluZyAlZCBmZW5jZSAleCBzdGF0dXMgJTguOFgg cmIgJTQuNHgvJTQuNHggaWIxICUxNi4xNmxsWC8lNC40eCBpYjIgJTE2LjE2bGxYLyU0LjR4XG4i LAorCQlyaW5nID8gcmluZy0+aWQgOiAtMSwgcmluZyA/IHJpbmctPnNlcW5vIDogMCwKKwkJZ3B1 X3JlYWQoZ3B1LCBSRUdfQTZYWF9SQkJNX1NUQVRVUyksCisJCWdwdV9yZWFkKGdwdSwgUkVHX0E2 WFhfQ1BfUkJfUlBUUiksCisJCWdwdV9yZWFkKGdwdSwgUkVHX0E2WFhfQ1BfUkJfV1BUUiksCisJ CWdwdV9yZWFkNjQoZ3B1LCBSRUdfQTZYWF9DUF9JQjFfQkFTRSwgUkVHX0E2WFhfQ1BfSUIxX0JB U0VfSEkpLAorCQlncHVfcmVhZChncHUsIFJFR19BNlhYX0NQX0lCMV9SRU1fU0laRSksCisJCWdw dV9yZWFkNjQoZ3B1LCBSRUdfQTZYWF9DUF9JQjJfQkFTRSwgUkVHX0E2WFhfQ1BfSUIyX0JBU0Vf SEkpLAorCQlncHVfcmVhZChncHUsIFJFR19BNlhYX0NQX0lCMl9SRU1fU0laRSkpOworCisJLyog VHVybiBvZmYgdGhlIGhhbmdjaGVjayB0aW1lciB0byBrZWVwIGl0IGZyb20gYm90aGVyaW5nIHVz ICovCisJZGVsX3RpbWVyKCZncHUtPmhhbmdjaGVja190aW1lcik7CisKKwlxdWV1ZV93b3JrKHBy aXYtPndxLCAmZ3B1LT5yZWNvdmVyX3dvcmspOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYTZ4 eF9pcnEoc3RydWN0IG1zbV9ncHUgKmdwdSkKK3sKKwl1MzIgc3RhdHVzID0gZ3B1X3JlYWQoZ3B1 LCBSRUdfQTZYWF9SQkJNX0lOVF8wX1NUQVRVUyk7CisKKwlncHVfd3JpdGUoZ3B1LCBSRUdfQTZY WF9SQkJNX0lOVF9DTEVBUl9DTUQsIHN0YXR1cyk7CisKKwlpZiAoc3RhdHVzICYgQTZYWF9SQkJN X0lOVF8wX01BU0tfUkJCTV9IQU5HX0RFVEVDVCkKKwkJYTZ4eF9mYXVsdF9kZXRlY3RfaXJxKGdw dSk7CisKKwlpZiAoc3RhdHVzICYgQTZYWF9SQkJNX0lOVF8wX01BU0tfQ1BfQUhCX0VSUk9SKQor CQlkZXZfZXJyX3JhdGVsaW1pdGVkKCZncHUtPnBkZXYtPmRldiwgIkNQIHwgQUhCIGJ1cyBlcnJv clxuIik7CisKKwlpZiAoc3RhdHVzICYgQTZYWF9SQkJNX0lOVF8wX01BU0tfQ1BfSFdfRVJST1Ip CisJCWE2eHhfY3BfaHdfZXJyX2lycShncHUpOworCisJaWYgKHN0YXR1cyAmIEE2WFhfUkJCTV9J TlRfMF9NQVNLX1JCQk1fQVRCX0FTWU5DRklGT19PVkVSRkxPVykKKwkJZGV2X2Vycl9yYXRlbGlt aXRlZCgmZ3B1LT5wZGV2LT5kZXYsICJSQkJNIHwgQVRCIEFTWU5DIG92ZXJmbG93XG4iKTsKKwor CWlmIChzdGF0dXMgJiBBNlhYX1JCQk1fSU5UXzBfTUFTS19SQkJNX0FUQl9CVVNfT1ZFUkZMT1cp CisJCWRldl9lcnJfcmF0ZWxpbWl0ZWQoJmdwdS0+cGRldi0+ZGV2LCAiUkJCTSB8IEFUQiBidXMg b3ZlcmZsb3dcbiIpOworCisJaWYgKHN0YXR1cyAmIEE2WFhfUkJCTV9JTlRfMF9NQVNLX1VDSEVf T09CX0FDQ0VTUykKKwkJZGV2X2Vycl9yYXRlbGltaXRlZCgmZ3B1LT5wZGV2LT5kZXYsICJVQ0hF IHwgT3V0IG9mIGJvdW5kcyBhY2Nlc3NcbiIpOworCisJaWYgKHN0YXR1cyAmIEE2WFhfUkJCTV9J TlRfMF9NQVNLX0NQX0NBQ0hFX0ZMVVNIX1RTKQorCQltc21fZ3B1X3JldGlyZShncHUpOworCisJ cmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgY29uc3QgdTMyIGE2eHhfcmVnaXN0ZXJf b2Zmc2V0c1tSRUdfQURSRU5PX1JFR0lTVEVSX01BWF0gPSB7CisJUkVHX0FEUkVOT19ERUZJTkUo UkVHX0FEUkVOT19DUF9SQl9CQVNFLCBSRUdfQTZYWF9DUF9SQl9CQVNFKSwKKwlSRUdfQURSRU5P X0RFRklORShSRUdfQURSRU5PX0NQX1JCX0JBU0VfSEksIFJFR19BNlhYX0NQX1JCX0JBU0VfSEkp LAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9fQ1BfUkJfUlBUUl9BRERSLAorCQlSRUdf QTZYWF9DUF9SQl9SUFRSX0FERFJfTE8pLAorCVJFR19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9f Q1BfUkJfUlBUUl9BRERSX0hJLAorCQlSRUdfQTZYWF9DUF9SQl9SUFRSX0FERFJfSEkpLAorCVJF R19BRFJFTk9fREVGSU5FKFJFR19BRFJFTk9fQ1BfUkJfUlBUUiwgUkVHX0E2WFhfQ1BfUkJfUlBU UiksCisJUkVHX0FEUkVOT19ERUZJTkUoUkVHX0FEUkVOT19DUF9SQl9XUFRSLCBSRUdfQTZYWF9D UF9SQl9XUFRSKSwKKwlSRUdfQURSRU5PX0RFRklORShSRUdfQURSRU5PX0NQX1JCX0NOVEwsIFJF R19BNlhYX0NQX1JCX0NOVEwpLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhNnh4X3JlZ2lzdGVy c1tdID0geworCTB4MDAwMCwgMHgwMDAyLCAweDAwMTAsIDB4MDAxMCwgMHgwMDEyLCAweDAwMTIs IDB4MDAxOCwgMHgwMDFiLAorCTB4MDAxZSwgMHgwMDMyLCAweDAwMzgsIDB4MDAzYywgMHgwMDQy LCAweDAwNDIsIDB4MDA0NCwgMHgwMDQ0LAorCTB4MDA0NywgMHgwMDQ3LCAweDAwNTYsIDB4MDA1 NiwgMHgwMGFkLCAweDAwYWUsIDB4MDBiMCwgMHgwMGZiLAorCTB4MDEwMCwgMHgwMTFkLCAweDAy MDAsIDB4MDIwZCwgMHgwMjEwLCAweDAyMTMsIDB4MDIxOCwgMHgwMjNkLAorCTB4MDQwMCwgMHgw NGY5LCAweDA1MDAsIDB4MDUwMCwgMHgwNTA1LCAweDA1MGIsIDB4MDUwZSwgMHgwNTExLAorCTB4 MDUzMywgMHgwNTMzLCAweDA1NDAsIDB4MDU1NSwgMHgwODAwLCAweDA4MDgsIDB4MDgxMCwgMHgw ODEzLAorCTB4MDgyMCwgMHgwODIxLCAweDA4MjMsIDB4MDgyNywgMHgwODMwLCAweDA4MzMsIDB4 MDg0MCwgMHgwODQzLAorCTB4MDg0ZiwgMHgwODZmLCAweDA4ODAsIDB4MDg4YSwgMHgwOGEwLCAw eDA4YWIsIDB4MDhjMCwgMHgwOGM0LAorCTB4MDhkMCwgMHgwOGRkLCAweDA4ZjAsIDB4MDhmMywg MHgwOTAwLCAweDA5MDMsIDB4MDkwOCwgMHgwOTExLAorCTB4MDkyOCwgMHgwOTNlLCAweDA5NDIs IDB4MDk0ZCwgMHgwOTgwLCAweDA5ODQsIDB4MDk4ZCwgMHgwOTk2LAorCTB4MDk5OCwgMHgwOTll LCAweDA5YTAsIDB4MDlhNiwgMHgwOWE4LCAweDA5YWUsIDB4MDliMCwgMHgwOWIxLAorCTB4MDlj MiwgMHgwOWM4LCAweDBhMDAsIDB4MGEwMywgMHgwYzAwLCAweDBjMDQsIDB4MGMwNiwgMHgwYzA2 LAorCTB4MGMxMCwgMHgwY2Q5LCAweDBlMDAsIDB4MGUwZSwgMHgwZTEwLCAweDBlMTMsIDB4MGUx NywgMHgwZTE5LAorCTB4MGUxYywgMHgwZTJiLCAweDBlMzAsIDB4MGUzMiwgMHgwZTM4LCAweDBl MzksIDB4ODYwMCwgMHg4NjAxLAorCTB4ODYxMCwgMHg4NjFiLCAweDg2MjAsIDB4ODYyMCwgMHg4 NjI4LCAweDg2MmIsIDB4ODYzMCwgMHg4NjM3LAorCTB4OGUwMSwgMHg4ZTAxLCAweDhlMDQsIDB4 OGUwNSwgMHg4ZTA3LCAweDhlMDgsIDB4OGUwYywgMHg4ZTBjLAorCTB4OGUxMCwgMHg4ZTFjLCAw eDhlMjAsIDB4OGUyNSwgMHg4ZTI4LCAweDhlMjgsIDB4OGUyYywgMHg4ZTJmLAorCTB4OGUzYiwg MHg4ZTNlLCAweDhlNDAsIDB4OGU0MywgMHg4ZTUwLCAweDhlNWUsIDB4OGU3MCwgMHg4ZTc3LAor CTB4OTYwMCwgMHg5NjA0LCAweDk2MjQsIDB4OTYzNywgMHg5ZTAwLCAweDllMDEsIDB4OWUwMywg MHg5ZTBlLAorCTB4OWUxMSwgMHg5ZTE2LCAweDllMTksIDB4OWUxOSwgMHg5ZTFjLCAweDllMWMs IDB4OWUyMCwgMHg5ZTIzLAorCTB4OWUzMCwgMHg5ZTMxLCAweDllMzQsIDB4OWUzNCwgMHg5ZTcw LCAweDllNzIsIDB4OWU3OCwgMHg5ZTc5LAorCTB4OWU4MCwgMHg5ZmZmLCAweGE2MDAsIDB4YTYw MSwgMHhhNjAzLCAweGE2MDMsIDB4YTYwYSwgMHhhNjBhLAorCTB4YTYxMCwgMHhhNjE3LCAweGE2 MzAsIDB4YTYzMCwKKwl+MAorfTsKKworc3RhdGljIGludCBhNnh4X3BtX3Jlc3VtZShzdHJ1Y3Qg bXNtX2dwdSAqZ3B1KQoreworCXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRy ZW5vX2dwdShncHUpOworCXN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUgPSB0b19hNnh4X2dwdShh ZHJlbm9fZ3B1KTsKKwlpbnQgcmV0OworCisJcmV0ID0gYTZ4eF9nbXVfcmVzdW1lKGE2eHhfZ3B1 KTsKKworCWdwdS0+bmVlZHNfaHdfaW5pdCA9IHRydWU7CisKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgaW50IGE2eHhfcG1fc3VzcGVuZChzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQoreworCXN0cnVj dCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRyZW5vX2dwdShncHUpOworCXN0cnVjdCBh Nnh4X2dwdSAqYTZ4eF9ncHUgPSB0b19hNnh4X2dwdShhZHJlbm9fZ3B1KTsKKworCS8qCisJICog TWFrZSBzdXJlIHRoZSBHTVUgaXMgaWRsZSBiZWZvcmUgY29udGludWluZyAoYmVjYXVzZSBzb21l IHRyYW5zaXRpb25zCisJICogbWF5IHVzZSBWQklGCisJICovCisJYTZ4eF9nbXVfd2FpdF9mb3Jf aWRsZShhNnh4X2dwdSk7CisKKwkvKiBDbGVhciB0aGUgVkJJRiBwaXBlIGJlZm9yZSBzaHV0dGlu ZyBkb3duICovCisJLyogRklYTUU6IFRoaXMgYWNjZXNzZXMgdGhlIEdQVSAtIGRvIHdlIG5lZWQg dG8gbWFrZSBzdXJlIGl0IGlzIG9uPyAqLworCWdwdV93cml0ZShncHUsIFJFR19BNlhYX1ZCSUZf WElOX0hBTFRfQ1RSTDAsIDB4Zik7CisJc3Bpbl91bnRpbCgoZ3B1X3JlYWQoZ3B1LCBSRUdfQTZY WF9WQklGX1hJTl9IQUxUX0NUUkwxKSAmIDB4ZikgPT0gMHhmKTsKKwlncHVfd3JpdGUoZ3B1LCBS RUdfQTZYWF9WQklGX1hJTl9IQUxUX0NUUkwwLCAwKTsKKworCXJldHVybiBhNnh4X2dtdV9zdG9w KGE2eHhfZ3B1KTsKK30KKworc3RhdGljIGludCBhNnh4X2dldF90aW1lc3RhbXAoc3RydWN0IG1z bV9ncHUgKmdwdSwgdWludDY0X3QgKnZhbHVlKQoreworCXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJl bm9fZ3B1ID0gdG9fYWRyZW5vX2dwdShncHUpOworCXN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUg PSB0b19hNnh4X2dwdShhZHJlbm9fZ3B1KTsKKworCS8qIEZvcmNlIHRoZSBHUFUgcG93ZXIgb24g c28gd2UgY2FuIHJlYWQgdGhpcyByZWdpc3RlciAqLworCWE2eHhfZ211X3NldF9vb2IoJmE2eHhf Z3B1LT5nbXUsIEdNVV9PT0JfR1BVX1NFVCk7CisKKwkqdmFsdWUgPSBncHVfcmVhZDY0KGdwdSwg UkVHX0E2WFhfUkJCTV9QRVJGQ1RSX0NQXzBfTE8sCisJCVJFR19BNlhYX1JCQk1fUEVSRkNUUl9D UF8wX0hJKTsKKworCWE2eHhfZ211X2NsZWFyX29vYigmYTZ4eF9ncHUtPmdtdSwgR01VX09PQl9H UFVfU0VUKTsKKwlyZXR1cm4gMDsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSB8 fCBkZWZpbmVkKENPTkZJR19ERVZfQ09SRURVTVApCitzdGF0aWMgdm9pZCBhNnh4X3Nob3coc3Ry dWN0IG1zbV9ncHUgKmdwdSwgc3RydWN0IG1zbV9ncHVfc3RhdGUgKnN0YXRlLAorCQlzdHJ1Y3Qg ZHJtX3ByaW50ZXIgKnApCit7CisJYWRyZW5vX3Nob3coZ3B1LCBzdGF0ZSwgcCk7Cit9CisjZW5k aWYKKworc3RhdGljIHN0cnVjdCBtc21fcmluZ2J1ZmZlciAqYTZ4eF9hY3RpdmVfcmluZyhzdHJ1 Y3QgbXNtX2dwdSAqZ3B1KQoreworCXN0cnVjdCBhZHJlbm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9f YWRyZW5vX2dwdShncHUpOworCXN0cnVjdCBhNnh4X2dwdSAqYTZ4eF9ncHUgPSB0b19hNnh4X2dw dShhZHJlbm9fZ3B1KTsKKworCXJldHVybiBhNnh4X2dwdS0+Y3VyX3Jpbmc7Cit9CisKK3N0YXRp YyB2b2lkIGE2eHhfZGVzdHJveShzdHJ1Y3QgbXNtX2dwdSAqZ3B1KQoreworCXN0cnVjdCBhZHJl bm9fZ3B1ICphZHJlbm9fZ3B1ID0gdG9fYWRyZW5vX2dwdShncHUpOworCXN0cnVjdCBhNnh4X2dw dSAqYTZ4eF9ncHUgPSB0b19hNnh4X2dwdShhZHJlbm9fZ3B1KTsKKworCWlmIChhNnh4X2dwdS0+ c3FlX2JvKSB7CisJCWlmIChhNnh4X2dwdS0+c3FlX2lvdmEpCisJCQltc21fZ2VtX3B1dF9pb3Zh KGE2eHhfZ3B1LT5zcWVfYm8sIGdwdS0+YXNwYWNlKTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZl cmVuY2VfdW5sb2NrZWQoYTZ4eF9ncHUtPnNxZV9ibyk7CisJfQorCisJYTZ4eF9nbXVfcmVtb3Zl KGE2eHhfZ3B1KTsKKworCWFkcmVub19ncHVfY2xlYW51cChhZHJlbm9fZ3B1KTsKKwlrZnJlZShh Nnh4X2dwdSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRyZW5vX2dwdV9mdW5jcyBmdW5j cyA9IHsKKwkuYmFzZSA9IHsKKwkJLmdldF9wYXJhbSA9IGFkcmVub19nZXRfcGFyYW0sCisJCS5o d19pbml0ID0gYTZ4eF9od19pbml0LAorCQkucG1fc3VzcGVuZCA9IGE2eHhfcG1fc3VzcGVuZCwK KwkJLnBtX3Jlc3VtZSA9IGE2eHhfcG1fcmVzdW1lLAorCQkucmVjb3ZlciA9IGE2eHhfcmVjb3Zl ciwKKwkJLnN1Ym1pdCA9IGE2eHhfc3VibWl0LAorCQkuZmx1c2ggPSBhNnh4X2ZsdXNoLAorCQku YWN0aXZlX3JpbmcgPSBhNnh4X2FjdGl2ZV9yaW5nLAorCQkuaXJxID0gYTZ4eF9pcnEsCisJCS5k ZXN0cm95ID0gYTZ4eF9kZXN0cm95LAorI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSB8fCBk ZWZpbmVkKENPTkZJR19ERVZfQ09SRURVTVApCisJCS5zaG93ID0gYTZ4eF9zaG93LAorI2VuZGlm CisJfSwKKwkuZ2V0X3RpbWVzdGFtcCA9IGE2eHhfZ2V0X3RpbWVzdGFtcCwKK307CisKK3N0cnVj dCBtc21fZ3B1ICphNnh4X2dwdV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3Ry dWN0IG1zbV9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldiA9IHByaXYtPmdwdV9wZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9k ZSAqbm9kZTsKKwlzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1OworCXN0cnVjdCBhZHJlbm9fZ3B1 ICphZHJlbm9fZ3B1OworCXN0cnVjdCBtc21fZ3B1ICpncHU7CisJaW50IHJldDsKKworCWE2eHhf Z3B1ID0ga3phbGxvYyhzaXplb2YoKmE2eHhfZ3B1KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhNnh4 X2dwdSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlhZHJlbm9fZ3B1ID0gJmE2eHhf Z3B1LT5iYXNlOworCWdwdSA9ICZhZHJlbm9fZ3B1LT5iYXNlOworCisJYWRyZW5vX2dwdS0+cmVn aXN0ZXJzID0gYTZ4eF9yZWdpc3RlcnM7CisJYWRyZW5vX2dwdS0+cmVnX29mZnNldHMgPSBhNnh4 X3JlZ2lzdGVyX29mZnNldHM7CisKKwlyZXQgPSBhZHJlbm9fZ3B1X2luaXQoZGV2LCBwZGV2LCBh ZHJlbm9fZ3B1LCAmZnVuY3MsIDEpOworCWlmIChyZXQpIHsKKwkJYTZ4eF9kZXN0cm95KCYoYTZ4 eF9ncHUtPmJhc2UuYmFzZSkpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCS8qIENo ZWNrIGlmIHRoZXJlIGlzIGEgR01VIHBoYW5kbGUgYW5kIHNldCBpdCB1cCAqLworCW5vZGUgPSBv Zl9wYXJzZV9waGFuZGxlKHBkZXYtPmRldi5vZl9ub2RlLCAiZ211IiwgMCk7CisKKwkvKiBGSVhN RTogSG93IGRvIHdlIGdyYWNlZnVsbHkgaGFuZGxlIHRoaXM/ICovCisJQlVHX09OKCFub2RlKTsK KworCXJldCA9IGE2eHhfZ211X3Byb2JlKGE2eHhfZ3B1LCBub2RlKTsKKwlpZiAocmV0KSB7CisJ CWE2eHhfZGVzdHJveSgmKGE2eHhfZ3B1LT5iYXNlLmJhc2UpKTsKKwkJcmV0dXJuIEVSUl9QVFIo cmV0KTsKKwl9CisKKwlpZiAoZ3B1LT5hc3BhY2UpCisJCW1zbV9tbXVfc2V0X2ZhdWx0X2hhbmRs ZXIoZ3B1LT5hc3BhY2UtPm1tdSwgZ3B1LAorCQkJCWE2eHhfZmF1bHRfaGFuZGxlcik7CisKKwly ZXR1cm4gZ3B1OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4 eF9ncHUuaCBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2E2eHhfZ3B1LmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kZDY5ZTViMGU2OTIKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2dwdS5oCkBAIC0wLDAgKzEs NjAgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKiBDb3B5cmln aHQgKGMpIDIwMTcgVGhlIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuICov CisKKyNpZm5kZWYgX19BNlhYX0dQVV9IX18KKyNkZWZpbmUgX19BNlhYX0dQVV9IX18KKworCisj aW5jbHVkZSAiYWRyZW5vX2dwdS5oIgorI2luY2x1ZGUgImE2eHgueG1sLmgiCisKKyNpbmNsdWRl ICJhNnh4X2dtdS5oIgorCitleHRlcm4gYm9vbCBoYW5nX2RlYnVnOworCitzdHJ1Y3QgYTZ4eF9n cHUgeworCXN0cnVjdCBhZHJlbm9fZ3B1IGJhc2U7CisKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg KnNxZV9ibzsKKwl1aW50NjRfdCBzcWVfaW92YTsKKworCXN0cnVjdCBtc21fcmluZ2J1ZmZlciAq Y3VyX3Jpbmc7CisKKwlzdHJ1Y3QgYTZ4eF9nbXUgZ211OworfTsKKworI2RlZmluZSB0b19hNnh4 X2dwdSh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGE2eHhfZ3B1LCBiYXNlKQorCisvKgorICog R2l2ZW4gYSByZWdpc3RlciBhbmQgYSBjb3VudCwgcmV0dXJuIGEgdmFsdWUgdG8gcHJvZ3JhbSBp bnRvCisgKiBSRUdfQ1BfUFJPVEVDVF9SRUcobikgLSB0aGlzIHdpbGwgYmxvY2sgYm90aCByZWFk cyBhbmQgd3JpdGVzIGZvciBfbGVuCisgKiByZWdpc3RlcnMgc3RhcnRpbmcgYXQgX3JlZy4KKyAq LworI2RlZmluZSBBNlhYX1BST1RFQ1RfUlcoX3JlZywgX2xlbikgXAorCSgoMSA8PCAzMSkgfCBc CisJKCgoX2xlbikgJiAweDNGRkYpIDw8IDE4KSB8ICgoX3JlZykgJiAweDNGRkZGKSkKKworLyoK KyAqIFNhbWUgYXMgYWJvdmUsIGJ1dCBhbGxvdyByZWFkcyBvdmVyIHRoZSByYW5nZS4gRm9yIGFy ZWFzIG9mIG1peGVkIHVzZSAoc3VjaAorICogYXMgcGVyZm9ybWFuY2UgY291bnRlcnMpIHRoaXMg YWxsb3dzIHVzIHRvIHByb3RlY3QgYSBtdWNoIGxhcmdlciByYW5nZSB3aXRoIGEKKyAqIHNpbmds ZSByZWdpc3RlcgorICovCisjZGVmaW5lIEE2WFhfUFJPVEVDVF9SRE9OTFkoX3JlZywgX2xlbikg XAorCSgoKChfbGVuKSAmIDB4M0ZGRikgPDwgMTgpIHwgKChfcmVnKSAmIDB4M0ZGRkYpKQorCisK K2ludCBhNnh4X2dtdV9yZXN1bWUoc3RydWN0IGE2eHhfZ3B1ICpncHUpOworaW50IGE2eHhfZ211 X3N0b3Aoc3RydWN0IGE2eHhfZ3B1ICpncHUpOworCitpbnQgYTZ4eF9nbXVfd2FpdF9mb3JfaWRs ZShzdHJ1Y3QgYTZ4eF9ncHUgKmdwdSk7CisKK2ludCBhNnh4X2dtdV9yZXNldChzdHJ1Y3QgYTZ4 eF9ncHUgKmE2eHhfZ3B1KTsKK2Jvb2wgYTZ4eF9nbXVfaXNpZGxlKHN0cnVjdCBhNnh4X2dtdSAq Z211KTsKKworaW50IGE2eHhfZ211X3NldF9vb2Ioc3RydWN0IGE2eHhfZ211ICpnbXUsIGVudW0g YTZ4eF9nbXVfb29iX3N0YXRlIHN0YXRlKTsKK3ZvaWQgYTZ4eF9nbXVfY2xlYXJfb29iKHN0cnVj dCBhNnh4X2dtdSAqZ211LCBlbnVtIGE2eHhfZ211X29vYl9zdGF0ZSBzdGF0ZSk7CisKK2ludCBh Nnh4X2dtdV9wcm9iZShzdHJ1Y3QgYTZ4eF9ncHUgKmE2eHhfZ3B1LCBzdHJ1Y3QgZGV2aWNlX25v ZGUgKm5vZGUpOwordm9pZCBhNnh4X2dtdV9yZW1vdmUoc3RydWN0IGE2eHhfZ3B1ICphNnh4X2dw dSk7CisKKyNlbmRpZiAvKiBfX0E2WFhfR1BVX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9oZmkuYyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5v L2E2eHhfaGZpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mMTll ZjRjYjZlYTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9h Nnh4X2hmaS5jCkBAIC0wLDAgKzEsNDM1IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMAorLyogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTggVGhlIExpbnV4IEZvdW5kYXRpb24u IEFsbCByaWdodHMgcmVzZXJ2ZWQuICovCisKKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+ CisjaW5jbHVkZSA8bGludXgvY2lyY19idWYuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisK KyNpbmNsdWRlICJhNnh4X2dtdS5oIgorI2luY2x1ZGUgImE2eHhfZ211LnhtbC5oIgorCisjZGVm aW5lIEhGSV9NU0dfSUQodmFsKSBbdmFsXSA9ICN2YWwKKworc3RhdGljIGNvbnN0IGNoYXIgKiBj b25zdCBhNnh4X2hmaV9tc2dfaWRbXSA9IHsKKwlIRklfTVNHX0lEKEhGSV9IMkZfTVNHX0lOSVQp LAorCUhGSV9NU0dfSUQoSEZJX0gyRl9NU0dfRldfVkVSU0lPTiksCisJSEZJX01TR19JRChIRklf SDJGX01TR19CV19UQUJMRSksCisJSEZJX01TR19JRChIRklfSDJGX01TR19QRVJGX1RBQkxFKSwK KwlIRklfTVNHX0lEKEhGSV9IMkZfTVNHX1RFU1QpLAorfTsKKworc3RhdGljIGludCBhNnh4X2hm aV9xdWV1ZV9yZWFkKHN0cnVjdCBhNnh4X2hmaV9xdWV1ZSAqcXVldWUsIHUzMiAqZGF0YSwKKwkJ dTMyIGR3b3JkcykKK3sKKwlzdHJ1Y3QgYTZ4eF9oZmlfcXVldWVfaGVhZGVyICpoZWFkZXIgPSBx dWV1ZS0+aGVhZGVyOworCXUzMiBpLCBoZHIsIGluZGV4ID0gaGVhZGVyLT5yZWFkX2luZGV4Owor CisJaWYgKGhlYWRlci0+cmVhZF9pbmRleCA9PSBoZWFkZXItPndyaXRlX2luZGV4KSB7CisJCWhl YWRlci0+cnhfcmVxdWVzdCA9IDE7CisJCXJldHVybiAwOworCX0KKworCWhkciA9IHF1ZXVlLT5k YXRhW2luZGV4XTsKKworCS8qCisJICogSWYgd2UgYXJlIHRvIGFzc3VtZSB0aGF0IHRoZSBHTVUg ZmlybXdhcmUgaXMgaW4gZmFjdCBhIHJhdGlvbmFsIGFjdG9yCisJICogYW5kIGlzIHByb2dyYW1t ZWQgdG8gbm90IHNlbmQgdXMgYSBsYXJnZXIgcmVzcG9uc2UgdGhhbiB3ZSBleHBlY3QKKwkgKiB0 aGVuIHdlIGNhbiBhbHNvIGFzc3VtZSB0aGF0IGlmIHRoZSBoZWFkZXIgc2l6ZSBpcyB1bmV4cGVj dGVkbHkgbGFyZ2UKKwkgKiB0aGF0IGl0IGlzIGR1ZSB0byBtZW1vcnkgY29ycnVwdGlvbiBhbmQv b3IgaGFyZHdhcmUgZmFpbHVyZS4gSW4gdGhpcworCSAqIGNhc2UgdGhlIG9ubHkgcmVhc29uYWJs ZSBjb3Vyc2Ugb2YgYWN0aW9uIGlzIHRvIEJVRygpIHRvIGhlbHAgaGFyZGVuCisJICogdGhlIGZh aWx1cmUuCisJICovCisKKwlCVUdfT04oSEZJX0hFQURFUl9TSVpFKGhkcikgPiBkd29yZHMpOwor CisJZm9yIChpID0gMDsgaSA8IEhGSV9IRUFERVJfU0laRShoZHIpOyBpKyspIHsKKwkJZGF0YVtp XSA9IHF1ZXVlLT5kYXRhW2luZGV4XTsKKwkJaW5kZXggPSAoaW5kZXggKyAxKSAlIGhlYWRlci0+ c2l6ZTsKKwl9CisKKwloZWFkZXItPnJlYWRfaW5kZXggPSBpbmRleDsKKwlyZXR1cm4gSEZJX0hF QURFUl9TSVpFKGhkcik7Cit9CisKK3N0YXRpYyBpbnQgYTZ4eF9oZmlfcXVldWVfd3JpdGUoc3Ry dWN0IGE2eHhfZ211ICpnbXUsCisJc3RydWN0IGE2eHhfaGZpX3F1ZXVlICpxdWV1ZSwgdTMyICpk YXRhLCB1MzIgZHdvcmRzKQoreworCXN0cnVjdCBhNnh4X2hmaV9xdWV1ZV9oZWFkZXIgKmhlYWRl ciA9IHF1ZXVlLT5oZWFkZXI7CisJdTMyIGksIHNwYWNlLCBpbmRleCA9IGhlYWRlci0+d3JpdGVf aW5kZXg7CisKKwlzcGluX2xvY2soJnF1ZXVlLT5sb2NrKTsKKworCXNwYWNlID0gQ0lSQ19TUEFD RShoZWFkZXItPndyaXRlX2luZGV4LCBoZWFkZXItPnJlYWRfaW5kZXgsCisJCWhlYWRlci0+c2l6 ZSk7CisJaWYgKHNwYWNlIDwgZHdvcmRzKSB7CisJCWhlYWRlci0+ZHJvcHBlZCsrOworCQlzcGlu X3VubG9jaygmcXVldWUtPmxvY2spOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisKKwlmb3IgKGkg PSAwOyBpIDwgZHdvcmRzOyBpKyspIHsKKwkJcXVldWUtPmRhdGFbaW5kZXhdID0gZGF0YVtpXTsK KwkJaW5kZXggPSAoaW5kZXggKyAxKSAlIGhlYWRlci0+c2l6ZTsKKwl9CisKKwloZWFkZXItPndy aXRlX2luZGV4ID0gaW5kZXg7CisJc3Bpbl91bmxvY2soJnF1ZXVlLT5sb2NrKTsKKworCWdtdV93 cml0ZShnbXUsIFJFR19BNlhYX0dNVV9IT1NUMkdNVV9JTlRSX1NFVCwgMHgwMSk7CisJcmV0dXJu IDA7Cit9CisKK3N0cnVjdCBhNnh4X2hmaV9yZXNwb25zZSB7CisJdTMyIGlkOworCXUzMiBzZXFu dW07CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRl OworCisJdTMyIGVycm9yOworCXUzMiBwYXlsb2FkWzE2XTsKK307CisKKy8qCisgKiBJbmNvbWlu ZyBIRkkgYWNrIG1lc3NhZ2VzIGNhbiBjb21lIGluIG91dCBvZiBvcmRlciBzbyB3ZSBuZWVkIHRv IHN0b3JlIGFsbAorICogdGhlIHBlbmRpbmcgbWVzc2FnZXMgb24gYSBsaXN0IHVudGlsIHRoZXkg YXJlIGhhbmRsZWQuCisgKi8KK3N0YXRpYyBzcGlubG9ja190IGhmaV9hY2tfbG9jayA9IF9fU1BJ Tl9MT0NLX1VOTE9DS0VEKG1lc3NhZ2VfbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKGhmaV9hY2tf bGlzdCk7CisKK3N0YXRpYyB2b2lkIGE2eHhfaGZpX2hhbmRsZV9hY2soc3RydWN0IGE2eHhfZ211 ICpnbXUsCisJCXN0cnVjdCBhNnh4X2hmaV9tc2dfcmVzcG9uc2UgKm1zZykKK3sKKwlzdHJ1Y3Qg YTZ4eF9oZmlfcmVzcG9uc2UgKnJlc3A7CisJdTMyIGlkLCBzZXFudW07CisKKwkvKiBtc2ctPnJl dF9oZWFkZXIgY29udGFpbnMgdGhlIGhlYWRlciBvZiB0aGUgbWVzc2FnZSBiZWluZyBhY2tlZCAq LworCWlkID0gSEZJX0hFQURFUl9JRChtc2ctPnJldF9oZWFkZXIpOworCXNlcW51bSA9IEhGSV9I RUFERVJfU0VRTlVNKG1zZy0+cmV0X2hlYWRlcik7CisKKwlzcGluX2xvY2soJmhmaV9hY2tfbG9j ayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXNwLCAmaGZpX2Fja19saXN0LCBub2RlKSB7CisJ CWlmIChyZXNwLT5pZCA9PSBpZCAmJiByZXNwLT5zZXFudW0gPT0gc2VxbnVtKSB7CisJCQlyZXNw LT5lcnJvciA9IG1zZy0+ZXJyb3I7CisJCQltZW1jcHkocmVzcC0+cGF5bG9hZCwgbXNnLT5wYXls b2FkLAorCQkJCXNpemVvZihyZXNwLT5wYXlsb2FkKSk7CisKKwkJCWNvbXBsZXRlKCZyZXNwLT5j b21wbGV0ZSk7CisJCQlzcGluX3VubG9jaygmaGZpX2Fja19sb2NrKTsKKwkJCXJldHVybjsKKwkJ fQorCX0KKwlzcGluX3VubG9jaygmaGZpX2Fja19sb2NrKTsKKworCWRldl9lcnIoZ211LT5kZXYs ICJOb2JvZHkgd2FzIHdhaXRpbmcgZm9yIEhGSSBtZXNzYWdlICVkXG4iLCBzZXFudW0pOworfQor CitzdGF0aWMgdm9pZCBhNnh4X2hmaV9oYW5kbGVfZXJyb3Ioc3RydWN0IGE2eHhfZ211ICpnbXUs CisJCXN0cnVjdCBhNnh4X2hmaV9tc2dfcmVzcG9uc2UgKm1zZykKK3sKKwlzdHJ1Y3QgYTZ4eF9o ZmlfbXNnX2Vycm9yICplcnJvciA9IChzdHJ1Y3QgYTZ4eF9oZmlfbXNnX2Vycm9yICopIG1zZzsK KworCWRldl9lcnIoZ211LT5kZXYsICJHTVUgZmlybXdhcmUgZXJyb3IgJWRcbiIsIGVycm9yLT5j b2RlKTsKK30KKwordm9pZCBhNnh4X2hmaV90YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlz dHJ1Y3QgYTZ4eF9nbXUgKmdtdSA9IChzdHJ1Y3QgYTZ4eF9nbXUgKikgZGF0YTsKKwlzdHJ1Y3Qg YTZ4eF9oZmlfcXVldWUgKnF1ZXVlID0gJmdtdS0+cXVldWVzW0hGSV9SRVNQT05TRV9RVUVVRV07 CisJc3RydWN0IGE2eHhfaGZpX21zZ19yZXNwb25zZSByZXNwOworCisJZm9yICg7OykgeworCQl1 MzIgaWQ7CisJCWludCByZXQgPSBhNnh4X2hmaV9xdWV1ZV9yZWFkKHF1ZXVlLCAodTMyICopICZy ZXNwLAorCQkJc2l6ZW9mKHJlc3ApID4+IDIpOworCisJCS8qIFJldHVybnMgdGhlIG51bWJlciBv ZiBieXRlcyBjb3BpZWQgb3IgbmVnYXRpdmUgb24gZXJyb3IgKi8KKwkJaWYgKHJldCA8PSAwKSB7 CisJCQlpZiAocmV0IDwgMCkKKwkJCQlkZXZfZXJyKGdtdS0+ZGV2LAorCQkJCQkiVW5hYmxlIHRv IHJlYWQgdGhlIEhGSSBtZXNzYWdlIHF1ZXVlXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWQg PSBIRklfSEVBREVSX0lEKHJlc3AuaGVhZGVyKTsKKworCQlpZiAoaWQgPT0gSEZJX0YySF9NU0df QUNLKQorCQkJYTZ4eF9oZmlfaGFuZGxlX2FjayhnbXUsICZyZXNwKTsKKwkJZWxzZSBpZiAoaWQg PT0gSEZJX0YySF9NU0dfRVJST1IpCisJCQlhNnh4X2hmaV9oYW5kbGVfZXJyb3IoZ211LCAmcmVz cCk7CisJfQorfQorCitzdGF0aWMgaW50IGE2eHhfaGZpX3NlbmRfbXNnKHN0cnVjdCBhNnh4X2dt dSAqZ211LCBpbnQgaWQsCisJCXZvaWQgKmRhdGEsIHUzMiBzaXplLCB1MzIgKnBheWxvYWQsIHUz MiBwYXlsb2FkX3NpemUpCit7CisJc3RydWN0IGE2eHhfaGZpX3F1ZXVlICpxdWV1ZSA9ICZnbXUt PnF1ZXVlc1tIRklfQ09NTUFORF9RVUVVRV07CisJc3RydWN0IGE2eHhfaGZpX3Jlc3BvbnNlIHJl c3AgPSB7IDAgfTsKKwlpbnQgcmV0LCBkd29yZHMgPSBzaXplID4+IDI7CisJdTMyIHNlcW51bTsK KworCXNlcW51bSA9IGF0b21pY19pbmNfcmV0dXJuKCZxdWV1ZS0+c2VxbnVtKSAlIDB4ZmZmOwor CisJLyogRmlyc3QgZHdvcmQgb2YgdGhlIG1lc3NhZ2UgaXMgdGhlIG1lc3NhZ2UgaGVhZGVyIC0g ZmlsbCBpdCBpbiAqLworCSooKHUzMiAqKSBkYXRhKSA9IChzZXFudW0gPDwgMjApIHwgKEhGSV9N U0dfQ01EIDw8IDE2KSB8CisJCShkd29yZHMgPDwgOCkgfCBpZDsKKworCWluaXRfY29tcGxldGlv bigmcmVzcC5jb21wbGV0ZSk7CisJcmVzcC5pZCA9IGlkOworCXJlc3Auc2VxbnVtID0gc2VxbnVt OworCisJc3Bpbl9sb2NrX2JoKCZoZmlfYWNrX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJnJlc3Au bm9kZSwgJmhmaV9hY2tfbGlzdCk7CisJc3Bpbl91bmxvY2tfYmgoJmhmaV9hY2tfbG9jayk7CisK KwlyZXQgPSBhNnh4X2hmaV9xdWV1ZV93cml0ZShnbXUsIHF1ZXVlLCBkYXRhLCBkd29yZHMpOwor CWlmIChyZXQpIHsKKwkJZGV2X2VycihnbXUtPmRldiwgIlVuYWJsZSB0byBzZW5kIG1lc3NhZ2Ug JXMgaWQgJWRcbiIsCisJCQlhNnh4X2hmaV9tc2dfaWRbaWRdLCBzZXFudW0pOworCQlnb3RvIG91 dDsKKwl9CisKKwkvKiBXYWl0IHVwIHRvIDUgc2Vjb25kcyBmb3IgdGhlIHJlc3BvbnNlICovCisJ cmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZyZXNwLmNvbXBsZXRlLAorCQltc2Vj c190b19qaWZmaWVzKDUwMDApKTsKKwlpZiAoIXJldCkgeworCQlkZXZfZXJyKGdtdS0+ZGV2LAor CQkJIk1lc3NhZ2UgJXMgaWQgJWQgdGltZWQgb3V0IHdhaXRpbmcgZm9yIHJlc3BvbnNlXG4iLAor CQkJYTZ4eF9oZmlfbXNnX2lkW2lkXSwgc2VxbnVtKTsKKwkJcmV0ID0gLUVUSU1FRE9VVDsKKwl9 IGVsc2UKKwkJcmV0ID0gMDsKKworb3V0OgorCXNwaW5fbG9ja19iaCgmaGZpX2Fja19sb2NrKTsK KwlsaXN0X2RlbCgmcmVzcC5ub2RlKTsKKwlzcGluX3VubG9ja19iaCgmaGZpX2Fja19sb2NrKTsK KworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAocmVzcC5lcnJvcikgeworCQlkZXZf ZXJyKGdtdS0+ZGV2LCAiTWVzc2FnZSAlcyBpZCAlZCByZXR1cm5lZCBlcnJvciAlZFxuIiwKKwkJ CWE2eHhfaGZpX21zZ19pZFtpZF0sIHNlcW51bSwgcmVzcC5lcnJvcik7CisJCXJldHVybiAtRUlO VkFMOworCX0KKworCWlmIChwYXlsb2FkICYmIHBheWxvYWRfc2l6ZSkgeworCQlpbnQgY29weSA9 IG1pbl90KHUzMiwgcGF5bG9hZF9zaXplLCBzaXplb2YocmVzcC5wYXlsb2FkKSk7CisKKwkJbWVt Y3B5KHBheWxvYWQsIHJlc3AucGF5bG9hZCwgY29weSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgYTZ4eF9oZmlfc2VuZF9nbXVfaW5pdChzdHJ1Y3QgYTZ4eF9nbXUgKmdtdSwg aW50IGJvb3Rfc3RhdGUpCit7CisJc3RydWN0IGE2eHhfaGZpX21zZ19nbXVfaW5pdF9jbWQgbXNn ID0geyAwIH07CisKKwltc2cuZGJnX2J1ZmZlcl9hZGRyID0gKHUzMikgZ211LT5kZWJ1Zy0+aW92 YTsKKwltc2cuZGJnX2J1ZmZlcl9zaXplID0gKHUzMikgZ211LT5kZWJ1Zy0+c2l6ZTsKKwltc2cu Ym9vdF9zdGF0ZSA9IGJvb3Rfc3RhdGU7CisKKwlyZXR1cm4gYTZ4eF9oZmlfc2VuZF9tc2coZ211 LCBIRklfSDJGX01TR19JTklULCAmbXNnLCBzaXplb2YobXNnKSwKKwkJTlVMTCwgMCk7Cit9CisK K3N0YXRpYyBpbnQgYTZ4eF9oZmlfZ2V0X2Z3X3ZlcnNpb24oc3RydWN0IGE2eHhfZ211ICpnbXUs IHUzMiAqdmVyc2lvbikKK3sKKwlzdHJ1Y3QgYTZ4eF9oZmlfbXNnX2Z3X3ZlcnNpb24gbXNnID0g eyAwIH07CisKKwkvKiBDdXJyZW50bHkgc3VwcG9ydGluZyB2ZXJzaW9uIDEuMSAqLworCW1zZy5z dXBwb3J0ZWRfdmVyc2lvbiA9ICgxIDw8IDI4KSB8ICgxIDw8IDE2KTsKKworCXJldHVybiBhNnh4 X2hmaV9zZW5kX21zZyhnbXUsIEhGSV9IMkZfTVNHX0ZXX1ZFUlNJT04sICZtc2csIHNpemVvZiht c2cpLAorCQl2ZXJzaW9uLCBzaXplb2YoKnZlcnNpb24pKTsKK30KKworc3RhdGljIGludCBhNnh4 X2hmaV9zZW5kX3BlcmZfdGFibGUoc3RydWN0IGE2eHhfZ211ICpnbXUpCit7CisJc3RydWN0IGE2 eHhfaGZpX21zZ19wZXJmX3RhYmxlIG1zZyA9IHsgMCB9OworCWludCBpOworCisJbXNnLm51bV9n cHVfbGV2ZWxzID0gZ211LT5ucl9ncHVfZnJlcXM7CisJbXNnLm51bV9nbXVfbGV2ZWxzID0gZ211 LT5ucl9nbXVfZnJlcXM7CisKKwlmb3IgKGkgPSAwOyBpIDwgZ211LT5ucl9ncHVfZnJlcXM7IGkr KykgeworCQltc2cuZ3hfdm90ZXNbaV0udm90ZSA9IGdtdS0+Z3hfYXJjX3ZvdGVzW2ldOworCQlt c2cuZ3hfdm90ZXNbaV0uZnJlcSA9IGdtdS0+Z3B1X2ZyZXFzW2ldIC8gMTAwMDsKKwl9CisKKwlm b3IgKGkgPSAwOyBpIDwgZ211LT5ucl9nbXVfZnJlcXM7IGkrKykgeworCQltc2cuY3hfdm90ZXNb aV0udm90ZSA9IGdtdS0+Y3hfYXJjX3ZvdGVzW2ldOworCQltc2cuY3hfdm90ZXNbaV0uZnJlcSA9 IGdtdS0+Z211X2ZyZXFzW2ldIC8gMTAwMDsKKwl9CisKKwlyZXR1cm4gYTZ4eF9oZmlfc2VuZF9t c2coZ211LCBIRklfSDJGX01TR19QRVJGX1RBQkxFLCAmbXNnLCBzaXplb2YobXNnKSwKKwkJTlVM TCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgYTZ4eF9oZmlfc2VuZF9id190YWJsZShzdHJ1Y3QgYTZ4 eF9nbXUgKmdtdSkKK3sKKwlzdHJ1Y3QgYTZ4eF9oZmlfbXNnX2J3X3RhYmxlIG1zZyA9IHsgMCB9 OworCisJLyoKKwkgKiBUaGUgc2RtODQ1IEdNVSBkb2Vzbid0IGRvIGJ1cyBmcmVxdWVuY3kgc2Nh bGluZyBvbiBpdHMgb3duIGJ1dCBpdAorCSAqIGRvZXMgbmVlZCBhdCBsZWFzdCBvbmUgZW50cnkg aW4gdGhlIGxpc3QgYmVjYXVzZSBpdCBtaWdodCBiZSBhY2Nlc3NlZAorCSAqIHdoZW4gdGhlIEdN VSBpcyBzaHV0dGluZyBkb3duLiBTZW5kIGEgc2luZ2xlICJvZmYiIGVudHJ5LgorCSAqLworCisJ bXNnLmJ3X2xldmVsX251bSA9IDE7CisKKwltc2cuZGRyX2NtZHNfbnVtID0gMzsKKwltc2cuZGRy X3dhaXRfYml0bWFzayA9IDB4MDc7CisKKwltc2cuZGRyX2NtZHNfYWRkcnNbMF0gPSAweDUwMDAw OworCW1zZy5kZHJfY21kc19hZGRyc1sxXSA9IDB4NTAwNWM7CisJbXNnLmRkcl9jbWRzX2FkZHJz WzJdID0gMHg1MDAwYzsKKworCW1zZy5kZHJfY21kc19kYXRhWzBdWzBdID0gIDB4NDAwMDAwMDA7 CisJbXNnLmRkcl9jbWRzX2RhdGFbMF1bMV0gPSAgMHg0MDAwMDAwMDsKKwltc2cuZGRyX2NtZHNf ZGF0YVswXVsyXSA9ICAweDQwMDAwMDAwOworCisJLyoKKwkgKiBUaGVzZSBhcmUgdGhlIENYIChD Tk9DKSB2b3Rlcy4gIFRoaXMgaXMgdXNlZCBidXQgdGhlIHZhbHVlcyBmb3IgdGhlCisJICogc2Rt ODQ1IEdNVSBhcmUga25vd24gYW5kIGZpeGVkIHNvIHdlIGNhbiBoYXJkIGNvZGUgdGhlbS4KKwkg Ki8KKworCW1zZy5jbm9jX2NtZHNfbnVtID0gMzsKKwltc2cuY25vY193YWl0X2JpdG1hc2sgPSAw eDA1OworCisJbXNnLmNub2NfY21kc19hZGRyc1swXSA9IDB4NTAwMzQ7CisJbXNnLmNub2NfY21k c19hZGRyc1sxXSA9IDB4NTAwN2M7CisJbXNnLmNub2NfY21kc19hZGRyc1syXSA9IDB4NTAwNGM7 CisKKwltc2cuY25vY19jbWRzX2RhdGFbMF1bMF0gPSAgMHg0MDAwMDAwMDsKKwltc2cuY25vY19j bWRzX2RhdGFbMF1bMV0gPSAgMHgwMDAwMDAwMDsKKwltc2cuY25vY19jbWRzX2RhdGFbMF1bMl0g PSAgMHg0MDAwMDAwMDsKKworCW1zZy5jbm9jX2NtZHNfZGF0YVsxXVswXSA9ICAweDYwMDAwMDAx OworCW1zZy5jbm9jX2NtZHNfZGF0YVsxXVsxXSA9ICAweDIwMDAwMDAxOworCW1zZy5jbm9jX2Nt ZHNfZGF0YVsxXVsyXSA9ICAweDYwMDAwMDAxOworCisJcmV0dXJuIGE2eHhfaGZpX3NlbmRfbXNn KGdtdSwgSEZJX0gyRl9NU0dfQldfVEFCTEUsICZtc2csIHNpemVvZihtc2cpLAorCQlOVUxMLCAw KTsKK30KKworc3RhdGljIGludCBhNnh4X2hmaV9zZW5kX3Rlc3Qoc3RydWN0IGE2eHhfZ211ICpn bXUpCit7CisJc3RydWN0IGE2eHhfaGZpX21zZ190ZXN0IG1zZyA9IHsgMCB9OworCisJcmV0dXJu IGE2eHhfaGZpX3NlbmRfbXNnKGdtdSwgSEZJX0gyRl9NU0dfVEVTVCwgJm1zZywgc2l6ZW9mKG1z ZyksCisJCU5VTEwsIDApOworfQorCitpbnQgYTZ4eF9oZmlfc3RhcnQoc3RydWN0IGE2eHhfZ211 ICpnbXUsIGludCBib290X3N0YXRlKQoreworCWludCByZXQ7CisKKwlyZXQgPSBhNnh4X2hmaV9z ZW5kX2dtdV9pbml0KGdtdSwgYm9vdF9zdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCXJldCA9IGE2eHhfaGZpX2dldF9md192ZXJzaW9uKGdtdSwgTlVMTCk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCS8qCisJICogV2UgaGF2ZSB0byBnZXQgZXhjaGFuZ2UgdmVyc2lv biBudW1iZXJzIHBlciB0aGUgc2VxdWVuY2UgYnV0IGF0IHRoaXMKKwkgKiBwb2ludCB0aCBrZXJu ZWwgZHJpdmVyIGRvZXNuJ3QgbmVlZCB0byBrbm93IHRoZSBleGFjdCB2ZXJzaW9uIG9mCisJICog dGhlIEdNVSBmaXJtd2FyZQorCSAqLworCisJcmV0ID0gYTZ4eF9oZmlfc2VuZF9wZXJmX3RhYmxl KGdtdSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGE2eHhfaGZpX3NlbmRf YndfdGFibGUoZ211KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBMZXQg dGhlIEdNVSBrbm93IHRoYXQgdGhlcmUgd29uJ3QgYmUgYW55IG1vcmUgSEZJIG1lc3NhZ2VzIHVu dGlsIG5leHQKKwkgKiBib290CisJICovCisJYTZ4eF9oZmlfc2VuZF90ZXN0KGdtdSk7CisKKwly ZXR1cm4gMDsKK30KKwordm9pZCBhNnh4X2hmaV9zdG9wKHN0cnVjdCBhNnh4X2dtdSAqZ211KQor eworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZ211LT5xdWV1ZXMpOyBp KyspIHsKKwkJc3RydWN0IGE2eHhfaGZpX3F1ZXVlICpxdWV1ZSA9ICZnbXUtPnF1ZXVlc1tpXTsK KworCQlpZiAoIXF1ZXVlLT5oZWFkZXIpCisJCQljb250aW51ZTsKKworCQlpZiAocXVldWUtPmhl YWRlci0+cmVhZF9pbmRleCAhPSBxdWV1ZS0+aGVhZGVyLT53cml0ZV9pbmRleCkKKwkJCWRldl9l cnIoZ211LT5kZXYsICJIRkkgcXVldWUgJWQgaXMgbm90IGVtcHR5XG4iLCBpKTsKKworCQlxdWV1 ZS0+aGVhZGVyLT5yZWFkX2luZGV4ID0gMDsKKwkJcXVldWUtPmhlYWRlci0+d3JpdGVfaW5kZXgg PSAwOworCX0KK30KKworc3RhdGljIHZvaWQgYTZ4eF9oZmlfcXVldWVfaW5pdChzdHJ1Y3QgYTZ4 eF9oZmlfcXVldWUgKnF1ZXVlLAorCQlzdHJ1Y3QgYTZ4eF9oZmlfcXVldWVfaGVhZGVyICpoZWFk ZXIsIHZvaWQgKnZpcnQsIHU2NCBpb3ZhLAorCQl1MzIgaWQpCit7CisJc3Bpbl9sb2NrX2luaXQo JnF1ZXVlLT5sb2NrKTsKKwlxdWV1ZS0+aGVhZGVyID0gaGVhZGVyOworCXF1ZXVlLT5kYXRhID0g dmlydDsKKwlhdG9taWNfc2V0KCZxdWV1ZS0+c2VxbnVtLCAwKTsKKworCS8qIFNldCB1cCB0aGUg c2hhcmVkIG1lbW9yeSBoZWFkZXIgKi8KKwloZWFkZXItPmlvdmEgPSBpb3ZhOworCWhlYWRlci0+ dHlwZSA9ICAxMCA8PCA4IHwgaWQ7CisJaGVhZGVyLT5zdGF0dXMgPSAxOworCWhlYWRlci0+c2l6 ZSA9IFNaXzRLID4+IDI7CisJaGVhZGVyLT5tc2dfc2l6ZSA9IDA7CisJaGVhZGVyLT5kcm9wcGVk ID0gMDsKKwloZWFkZXItPnJ4X3dhdGVybWFyayA9IDE7CisJaGVhZGVyLT50eF93YXRlcm1hcmsg PSAxOworCWhlYWRlci0+cnhfcmVxdWVzdCA9IDE7CisJaGVhZGVyLT50eF9yZXF1ZXN0ID0gMDsK KwloZWFkZXItPnJlYWRfaW5kZXggPSAwOworCWhlYWRlci0+d3JpdGVfaW5kZXggPSAwOworfQor Cit2b2lkIGE2eHhfaGZpX2luaXQoc3RydWN0IGE2eHhfZ211ICpnbXUpCit7CisJc3RydWN0IGE2 eHhfZ211X2JvICpoZmkgPSBnbXUtPmhmaTsKKwlzdHJ1Y3QgYTZ4eF9oZmlfcXVldWVfdGFibGVf aGVhZGVyICp0YWJsZSA9IGhmaS0+dmlydDsKKwlzdHJ1Y3QgYTZ4eF9oZmlfcXVldWVfaGVhZGVy ICpoZWFkZXJzID0gaGZpLT52aXJ0ICsgc2l6ZW9mKCp0YWJsZSk7CisJdTY0IG9mZnNldDsKKwlp bnQgdGFibGVfc2l6ZTsKKworCS8qCisJICogVGhlIHRhYmxlIHNpemUgaXMgdGhlIHNpemUgb2Yg dGhlIHRhYmxlIGhlYWRlciBwbHVzIGFsbCBvZiB0aGUgcXVldWUKKwkgKiBoZWFkZXJzCisJICov CisJdGFibGVfc2l6ZSA9IHNpemVvZigqdGFibGUpOworCXRhYmxlX3NpemUgKz0gKEFSUkFZX1NJ WkUoZ211LT5xdWV1ZXMpICoKKwkJc2l6ZW9mKHN0cnVjdCBhNnh4X2hmaV9xdWV1ZV9oZWFkZXIp KTsKKworCXRhYmxlLT52ZXJzaW9uID0gMDsKKwl0YWJsZS0+c2l6ZSA9IHRhYmxlX3NpemU7CisJ LyogRmlyc3QgcXVldWUgaGVhZGVyIGlzIGxvY2F0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHRh YmxlIGhlYWRlciAqLworCXRhYmxlLT5xaGRyMF9vZmZzZXQgPSBzaXplb2YoKnRhYmxlKSA+PiAy OworCXRhYmxlLT5xaGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGE2eHhfaGZpX3F1ZXVlX2hlYWRl cikgPj4gMjsKKwl0YWJsZS0+bnVtX3F1ZXVlcyA9IEFSUkFZX1NJWkUoZ211LT5xdWV1ZXMpOwor CXRhYmxlLT5hY3RpdmVfcXVldWVzID0gQVJSQVlfU0laRShnbXUtPnF1ZXVlcyk7CisKKwkvKiBD b21tYW5kIHF1ZXVlICovCisJb2Zmc2V0ID0gU1pfNEs7CisJYTZ4eF9oZmlfcXVldWVfaW5pdCgm Z211LT5xdWV1ZXNbMF0sICZoZWFkZXJzWzBdLCBoZmktPnZpcnQgKyBvZmZzZXQsCisJCWhmaS0+ aW92YSArIG9mZnNldCwgMCk7CisKKwkvKiBHTVUgcmVzcG9uc2UgcXVldWUgKi8KKwlvZmZzZXQg Kz0gU1pfNEs7CisJYTZ4eF9oZmlfcXVldWVfaW5pdCgmZ211LT5xdWV1ZXNbMV0sICZoZWFkZXJz WzFdLCBoZmktPnZpcnQgKyBvZmZzZXQsCisJCWhmaS0+aW92YSArIG9mZnNldCwgNCk7Cit9CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hNnh4X2hmaS5oIGIvZHJpdmVy cy9ncHUvZHJtL21zbS9hZHJlbm8vYTZ4eF9oZmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLjYwZDEzMTlmYTQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9tc20vYWRyZW5vL2E2eHhfaGZpLmgKQEAgLTAsMCArMSwxMjcgQEAKKy8qIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKiBDb3B5cmlnaHQgKGMpIDIwMTcgVGhl IExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuICovCisKKyNpZm5kZWYgX0E2 WFhfSEZJX0hfCisjZGVmaW5lIF9BNlhYX0hGSV9IXworCitzdHJ1Y3QgYTZ4eF9oZmlfcXVldWVf dGFibGVfaGVhZGVyIHsKKwl1MzIgdmVyc2lvbjsKKwl1MzIgc2l6ZTsJCS8qIFNpemUgb2YgdGhl IHF1ZXVlIHRhYmxlIGluIGR3b3JkcyAqLworCXUzMiBxaGRyMF9vZmZzZXQ7CS8qIE9mZnNldCBv ZiB0aGUgZmlyc3QgcXVldWUgaGVhZGVyICovCisJdTMyIHFoZHJfc2l6ZTsJCS8qIFNpemUgb2Yg dGhlIHF1ZXVlIGhlYWRlcnMgKi8KKwl1MzIgbnVtX3F1ZXVlczsJCS8qIE51bWJlciBvZiB0b3Rh bCBxdWV1ZXMgKi8KKwl1MzIgYWN0aXZlX3F1ZXVlczsJLyogTnVtYmVyIG9mIGFjdGl2ZSBxdWV1 ZXMgKi8KK307CisKK3N0cnVjdCBhNnh4X2hmaV9xdWV1ZV9oZWFkZXIgeworCXUzMiBzdGF0dXM7 CisJdTMyIGlvdmE7CisJdTMyIHR5cGU7CisJdTMyIHNpemU7CisJdTMyIG1zZ19zaXplOworCXUz MiBkcm9wcGVkOworCXUzMiByeF93YXRlcm1hcms7CisJdTMyIHR4X3dhdGVybWFyazsKKwl1MzIg cnhfcmVxdWVzdDsKKwl1MzIgdHhfcmVxdWVzdDsKKwl1MzIgcmVhZF9pbmRleDsKKwl1MzIgd3Jp dGVfaW5kZXg7Cit9OworCitzdHJ1Y3QgYTZ4eF9oZmlfcXVldWUgeworCXN0cnVjdCBhNnh4X2hm aV9xdWV1ZV9oZWFkZXIgKmhlYWRlcjsKKwlzcGlubG9ja190IGxvY2s7CisJdTMyICpkYXRhOwor CWF0b21pY190IHNlcW51bTsKK307CisKKy8qIFRoaXMgaXMgdGhlIG91dGdvaW5nIHF1ZXVlIHRv IHRoZSBHTVUgKi8KKyNkZWZpbmUgSEZJX0NPTU1BTkRfUVVFVUUgMAorCisvKiBUSGlzIGlzIHRo ZSBpbmNvbWluZyByZXNwb25zZSBxdWV1ZSBmcm9tIHRoZSBHTVUgKi8KKyNkZWZpbmUgSEZJX1JF U1BPTlNFX1FVRVVFIDEKKworI2RlZmluZSBIRklfSEVBREVSX0lEKG1zZykgKChtc2cpICYgMHhm ZikKKyNkZWZpbmUgSEZJX0hFQURFUl9TSVpFKG1zZykgKCgobXNnKSA+PiA4KSAmIDB4ZmYpCisj ZGVmaW5lIEhGSV9IRUFERVJfU0VRTlVNKG1zZykgKCgobXNnKSA+PiAyMCkgJiAweGZmZikKKwor LyogRklYTUU6IERvIHdlIG5lZWQgdGhpcyBvciBjYW4gd2UgdXNlIEFSUkFZX1NJWkU/ICovCisj ZGVmaW5lIEhGSV9SRVNQT05TRV9QQVlMT0FEX1NJWkUgMTYKKworLyogSEZJIG1lc3NhZ2UgdHlw ZXMgKi8KKworI2RlZmluZSBIRklfTVNHX0NNRCAwCisjZGVmaW5lIEhGSV9NU0dfQUNLIDIKKwor I2RlZmluZSBIRklfRjJIX01TR19BQ0sgMTI2CisKK3N0cnVjdCBhNnh4X2hmaV9tc2dfcmVzcG9u c2UgeworCXUzMiBoZWFkZXI7CisJdTMyIHJldF9oZWFkZXI7CisJdTMyIGVycm9yOworCXUzMiBw YXlsb2FkW0hGSV9SRVNQT05TRV9QQVlMT0FEX1NJWkVdOworfTsKKworI2RlZmluZSBIRklfRjJI X01TR19FUlJPUiAxMDAKKworc3RydWN0IGE2eHhfaGZpX21zZ19lcnJvciB7CisJdTMyIGhlYWRl cjsKKwl1MzIgY29kZTsKKwl1MzIgcGF5bG9hZFsyXTsKK307CisKKyNkZWZpbmUgSEZJX0gyRl9N U0dfSU5JVCAwCisKK3N0cnVjdCBhNnh4X2hmaV9tc2dfZ211X2luaXRfY21kIHsKKwl1MzIgaGVh ZGVyOworCXUzMiBzZWdfaWQ7CisJdTMyIGRiZ19idWZmZXJfYWRkcjsKKwl1MzIgZGJnX2J1ZmZl cl9zaXplOworCXUzMiBib290X3N0YXRlOworfTsKKworI2RlZmluZSBIRklfSDJGX01TR19GV19W RVJTSU9OIDEKKworc3RydWN0IGE2eHhfaGZpX21zZ19md192ZXJzaW9uIHsKKwl1MzIgaGVhZGVy OworCXUzMiBzdXBwb3J0ZWRfdmVyc2lvbjsKK307CisKKyNkZWZpbmUgSEZJX0gyRl9NU0dfUEVS Rl9UQUJMRSA0CisKK3N0cnVjdCBwZXJmX2xldmVsIHsKKwl1MzIgdm90ZTsKKwl1MzIgZnJlcTsK K307CisKK3N0cnVjdCBhNnh4X2hmaV9tc2dfcGVyZl90YWJsZSB7CisJdTMyIGhlYWRlcjsKKwl1 MzIgbnVtX2dwdV9sZXZlbHM7CisJdTMyIG51bV9nbXVfbGV2ZWxzOworCisJc3RydWN0IHBlcmZf bGV2ZWwgZ3hfdm90ZXNbMTZdOworCXN0cnVjdCBwZXJmX2xldmVsIGN4X3ZvdGVzWzRdOworfTsK KworI2RlZmluZSBIRklfSDJGX01TR19CV19UQUJMRSAzCisKK3N0cnVjdCBhNnh4X2hmaV9tc2df YndfdGFibGUgeworCXUzMiBoZWFkZXI7CisJdTMyIGJ3X2xldmVsX251bTsKKwl1MzIgY25vY19j bWRzX251bTsKKwl1MzIgZGRyX2NtZHNfbnVtOworCXUzMiBjbm9jX3dhaXRfYml0bWFzazsKKwl1 MzIgZGRyX3dhaXRfYml0bWFzazsKKwl1MzIgY25vY19jbWRzX2FkZHJzWzZdOworCXUzMiBjbm9j X2NtZHNfZGF0YVsyXVs2XTsKKwl1MzIgZGRyX2NtZHNfYWRkcnNbOF07CisJdTMyIGRkcl9jbWRz X2RhdGFbMTZdWzhdOworfTsKKworI2RlZmluZSBIRklfSDJGX01TR19URVNUIDUKKworc3RydWN0 IGE2eHhfaGZpX21zZ190ZXN0IHsKKwl1MzIgaGVhZGVyOworfTsKKworI2VuZGlmCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZGV2aWNlLmMgYi9kcml2ZXJz L2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZGV2aWNlLmMKaW5kZXggMzc3NDZmMWQ1NGNmLi43 ZDNlOWExMjlhYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20vYWRyZW5vL2FkcmVu b19kZXZpY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZGV2aWNl LmMKQEAgLTExMSw2ICsxMTEsMTYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhZHJlbm9faW5mbyBn cHVsaXN0W10gPSB7CiAJCQlBRFJFTk9fUVVJUktfRkFVTFRfREVURUNUX01BU0ssCiAJCS5pbml0 ID0gYTV4eF9ncHVfaW5pdCwKIAkJLnphcGZ3ID0gImE1MzBfemFwLm1kdCIsCisJfSwgeworCQku cmV2ID0gQURSRU5PX1JFVig2LCAzLCAwLCBBTllfSUQpLAorCQkucmV2biA9IDYzMCwKKwkJLm5h bWUgPSAiQTYzMCIsCisJCS5mdyA9IHsKKwkJCVtBRFJFTk9fRldfU1FFXSA9ICJhNjMwX3NxZS5m dyIsCisJCQlbQURSRU5PX0ZXX0dNVV0gPSAiYTYzMF9nbXUuYmluIiwKKwkJfSwKKwkJLmdtZW0g PSBTWl8xTSwKKwkJLmluaXQgPSBhNnh4X2dwdV9pbml0LAogCX0sCiB9OwogCkBAIC0xMjcsNiAr MTM3LDggQEAgTU9EVUxFX0ZJUk1XQVJFKCJxY29tL2E1MzBfemFwLm1kdCIpOwogTU9EVUxFX0ZJ Uk1XQVJFKCJxY29tL2E1MzBfemFwLmIwMCIpOwogTU9EVUxFX0ZJUk1XQVJFKCJxY29tL2E1MzBf emFwLmIwMSIpOwogTU9EVUxFX0ZJUk1XQVJFKCJxY29tL2E1MzBfemFwLmIwMiIpOworTU9EVUxF X0ZJUk1XQVJFKCJxY29tL2E2MzBfc3FlLmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoInFjb20vYTYz MF9nbXUuYmluIik7CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBfcmV2X21hdGNoKHVpbnQ4X3QgZW50 cnksIHVpbnQ4X3QgaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVu by9hZHJlbm9fZ3B1LmggYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2FkcmVuby9hZHJlbm9fZ3B1LmgK aW5kZXggZDM5MWZmMzc3NjEyLi5kZTZlNmVlNDJmYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9tc20vYWRyZW5vL2FkcmVub19ncHUuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Fk cmVuby9hZHJlbm9fZ3B1LmgKQEAgLTUwLDcgKzUwLDkgQEAgZW51bSBhZHJlbm9fcmVncyB7CiAK IGVudW0gewogCUFEUkVOT19GV19QTTQgPSAwLAorCUFEUkVOT19GV19TUUUgPSAwLCAvKiBhNnh4 ICovCiAJQURSRU5PX0ZXX1BGUCA9IDEsCisJQURSRU5PX0ZXX0dNVSA9IDEsIC8qIGE2eHggKi8K IAlBRFJFTk9fRldfR1BNVSA9IDIsCiAJQURSRU5PX0ZXX01BWCwKIH07CkBAIC0zMzUsNiArMzM3 LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkcmVub19ncHVfd3JpdGUoc3RydWN0IGFkcmVub19n cHUgKmdwdSwKIHN0cnVjdCBtc21fZ3B1ICphM3h4X2dwdV9pbml0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpOwogc3RydWN0IG1zbV9ncHUgKmE0eHhfZ3B1X2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldik7CiBzdHJ1Y3QgbXNtX2dwdSAqYTV4eF9ncHVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KTsKK3N0cnVjdCBtc21fZ3B1ICphNnh4X2dwdV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWRyZW5vX2dwdV93cml0ZTY0KHN0cnVjdCBhZHJl bm9fZ3B1ICpncHUsCiAJCWVudW0gYWRyZW5vX3JlZ3MgbG8sIGVudW0gYWRyZW5vX3JlZ3MgaGks IHU2NCBkYXRhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ3B1LmMgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL21zbV9ncHUuYwppbmRleCBjYTM2ODQ5MGIzZWUuLjVlODA4Y2Zl YzM0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ3B1LmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL21zbS9tc21fZ3B1LmMKQEAgLTg4LDcgKzg4LDcgQEAgc3RhdGljIHN0cnVj dCBkZXZmcmVxX2Rldl9wcm9maWxlIG1zbV9kZXZmcmVxX3Byb2ZpbGUgPSB7CiBzdGF0aWMgdm9p ZCBtc21fZGV2ZnJlcV9pbml0KHN0cnVjdCBtc21fZ3B1ICpncHUpCiB7CiAJLyogV2UgbmVlZCB0 YXJnZXQgc3VwcG9ydCB0byBkbyBkZXZmcmVxICovCi0JaWYgKCFncHUtPmZ1bmNzLT5ncHVfYnVz eSkKKwlpZiAoIWdwdS0+ZnVuY3MtPmdwdV9idXN5IHx8ICFncHUtPmNvcmVfY2xrKQogCQlyZXR1 cm47CiAKIAltc21fZGV2ZnJlcV9wcm9maWxlLmluaXRpYWxfZnJlcSA9IGdwdS0+ZmFzdF9yYXRl OwotLSAKMi4xOC4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJl bm8K