From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Luck, Tony" Date: Wed, 28 May 2003 20:35:53 +0000 Subject: [Linux-ia64] [PATCH] MCA recovery for TLB faults for 2.4 MIME-Version: 1 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C32558.BC0CA6F6" Message-Id: List-Id: To: linux-ia64@vger.kernel.org This is a multi-part message in MIME format. ------_=_NextPart_001_01C32558.BC0CA6F6 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable This patch is against a tree created by cloning Bjorn's BK tree on May 20, and applying his error logging patch (posted to ia64 list on May 8th ... since I'm sure he's going to include it as it is so good). The underlying algorithm is to save information about what each of the ITR/DTR registers is mapping, then at MCA time we can purge the whole TLB (TC and TR) and reload the TR registers before jumping to virtual mode. DTR[2] gets some special treatment as we didn't want to touch the context switch path to update the saved area on potentially every context switch, so it gets reconstructed from ar.k4. There is a major cleanup of the processor save/restore code in mca_asm.S (which apparently was written before silicon, it was using some out-of-date spec for control registers). There's a minor cleanup in the logging code to only print implemented registers (this just needs to be moved over to Bjorn's new "salinfo" tool when all the print code gets deleted from the kernel). -Tony Luck. With special thanks to Jenna Hall (who started work on this, oh so long ago) and Fenghua Yu (who ported to 2.4.21 and tidied up my messes). 2.5 version needs some more work to co-exist with the kernel relocation patch ------_=_NextPart_001_01C32558.BC0CA6F6 Content-Type: application/octet-stream; name="mca.patch" Content-Transfer-Encoding: base64 Content-Description: mca.patch Content-Disposition: attachment; filename="mca.patch" ZGlmZiAtTnVyIEEvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYyBCL2FyY2gvaWE2NC9rZXJuZWwvZWZp LmMKLS0tIEEvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYwlUdWUgTWF5IDI3IDE5OjA3OjQ0IDIwMDMK KysrIEIvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYwlUdWUgTWF5IDI3IDE5OjA4OjI0IDIwMDMKQEAg LTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxhc20va3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vcGd0 YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vbWNhLmg+ CiAKICNkZWZpbmUgRUZJX0RFQlVHCTAKIApAQCAtNDAyLDYgKzQwMyw5IEBACiAJaW50IHBhbF9j b2RlX2NvdW50ID0gMDsKIAl1NjQgbWFzaywgcHNyOwogCXU2NCB2YWRkcjsKKyNpZmRlZiBDT05G SUdfSUE2NF9NQ0EKKwlpbnQgY3B1OworI2VuZGlmCiAKIAllZmlfbWFwX3N0YXJ0ID0gX192YShp YTY0X2Jvb3RfcGFyYW0tPmVmaV9tZW1tYXApOwogCWVmaV9tYXBfZW5kICAgPSBlZmlfbWFwX3N0 YXJ0ICsgaWE2NF9ib290X3BhcmFtLT5lZmlfbWVtbWFwX3NpemU7CkBAIC00NTksNiArNDYzLDE4 IEBACiAJCQkgcHRlX3ZhbChta19wdGVfcGh5cyhtZC0+cGh5c19hZGRyLCBQQUdFX0tFUk5FTCkp LCBJQTY0X0dSQU5VTEVfU0hJRlQpOwogCQlpYTY0X3NldF9wc3IocHNyKTsJCS8qIHJlc3RvcmUg cHNyICovCiAJCWlhNjRfc3Jsel9pKCk7CisKKyNpZmRlZiBDT05GSUdfSUE2NF9NQ0EKKwkJY3B1 ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJCS8qIGluc2VydCB0aGlzIFRSIGludG8gb3VyIGxp c3QgZm9yIE1DQSByZWNvdmVyeSBwdXJwb3NlcyAqLworCQlpYTY0X2l0cl9saXN0KGNwdSwKKwkJ CSAgICAgIDB4MDEsCisJCQkgICAgICBJQTY0X1RSX1BBTENPREUsCisJCQkgICAgICB2YWRkciAm IG1hc2ssCisJCQkgICAgICBwdGVfdmFsKG1rX3B0ZV9waHlzKG1kLT5waHlzX2FkZHIsIFBBR0Vf S0VSTkVMKSksCisJCQkgICAgICBJQTY0X0dSQU5VTEVfU0hJRlQpOworI2VuZGlmCiAJfQogfQog CmRpZmYgLU51ciBBL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMgQi9hcmNoL2lhNjQva2VybmVsL21j YS5jCi0tLSBBL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMJVHVlIE1heSAyNyAxOTowNzo0NCAyMDAz CisrKyBCL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMJVHVlIE1heSAyNyAxOTowODoyNSAyMDAzCkBA IC04MCwxMSArODAsOCBAQAogdTY0CQkJCWlhNjRfbWNhX3N0YWNrZnJhbWVbMzJdOwogdTY0CQkJ CWlhNjRfbWNhX2JzcHN0b3JlWzEwMjRdOwogdTY0CQkJCWlhNjRfaW5pdF9zdGFja1tJTklUX1RB U0tfU0laRS84XSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDE2KSkpOwotdTY0CQkJCWlhNjRfbWNh X3NhbF9kYXRhX2FyZWFbMTM1Nl07Ci11NjQJCQkJaWE2NF90bGJfZnVuY3Rpb25hbDsKIHU2NAkJ CQlpYTY0X29zX21jYV9yZWNvdmVyeV9zdWNjZXNzZnVsOwotLyogVE9ETzogbmVlZCB0byBhc3Np Z24gbWluLXN0YXRlIHN0cnVjdHVyZSB0byBVQyBtZW1vcnkgKi8KLXU2NAkJCQlpYTY0X21jYV9t aW5fc3RhdGVfc2F2ZV9pbmZvW01JTl9TVEFURV9BUkVBX1NJWkVdIF9fYXR0cmlidXRlX18oKGFs aWduZWQoNTEyKSkpOwordTY0CQkJCWlhNjRfbWNhX3NlcmlhbGl6ZTsKIHN0YXRpYyB2b2lkCQkJ aWE2NF9tY2Ffd2FrZXVwX2lwaV93YWl0KHZvaWQpOwogc3RhdGljIHZvaWQJCQlpYTY0X21jYV93 YWtldXAoaW50IGNwdSk7CiBzdGF0aWMgdm9pZAkJCWlhNjRfbWNhX3dha2V1cF9hbGwodm9pZCk7 CkBAIC05Myw2ICs5MCwxMSBAQAogZXh0ZXJuIHZvaWQJCQlpYTY0X3NsYXZlX2luaXRfaGFuZGxl ciAodm9pZCk7CiBleHRlcm4gc3RydWN0IGh3X2ludGVycnVwdF90eXBlCWlycV90eXBlX2lvc2Fw aWNfbGV2ZWw7CiAKKy8qCisgKiBTYXZlZCBzdGF0ZSBvZiBUTEIgVFIgcmVnaXN0ZXJzIGZvciBt Y2EgcmVjb3ZlcnkKKyAqLworc3RydWN0IGlhNjRfa2VybmVsX3RyX2luZm8gaWE2NF9rZXJuZWxf dHJfbGlzdFtOUl9DUFVTXVtJQTY0X1RSX01BWFRSXTsKKwogc3RhdGljIHN0cnVjdCBpcnFhY3Rp b24gY21jaV9pcnFhY3Rpb24gPSB7CiAJLmhhbmRsZXIgPQlpYTY0X21jYV9jbWNfaW50X2hhbmRs ZXIsCiAJLmZsYWdzID0JU0FfSU5URVJSVVBULApAQCAtNDE1LDI2ICs0MTcsNiBAQAogI2VuZGlm IC8qIFBMQVRGT1JNX01DQV9IQU5ETEVSUyAqLwogCiAvKgotICogcm91dGluZSB0byBwcm9jZXNz IGFuZCBwcmVwYXJlIHRvIGR1bXAgbWluX3N0YXRlX3NhdmUKLSAqIGluZm9ybWF0aW9uIGZvciBk ZWJ1Z2dpbmcgcHVycG9zZXMuCi0gKi8KLXZvaWQKLWlhNjRfcHJvY2Vzc19taW5fc3RhdGVfc2F2 ZSAocGFsX21pbl9zdGF0ZV9hcmVhX3QgKnBtc3MpCi17Ci0JaW50IGksIG1heCA9IE1JTl9TVEFU RV9BUkVBX1NJWkU7Ci0JdTY0ICp0cG1zc19wdHIgPSAodTY0ICopcG1zczsKLQl1NjQgKnJldHVy bl9taW5fc3RhdGVfcHRyID0gaWE2NF9tY2FfbWluX3N0YXRlX3NhdmVfaW5mbzsKLQotCWZvciAo aT0wO2k8bWF4O2krKykgewotCi0JCS8qIGNvcHkgbWluLXN0YXRlIHJlZ2lzdGVyIGluZm8gZm9y IGV2ZW50dWFsIHJldHVybiB0byBQQUwgKi8KLQkJKnJldHVybl9taW5fc3RhdGVfcHRyKysgPSAq dHBtc3NfcHRyOwotCi0JCXRwbXNzX3B0cisrOyAgLyogc2tpcCB0byBuZXh0IGVudHJ5ICovCi0J fQotfQotCi0vKgogICogaWE2NF9tY2FfY21jX3ZlY3Rvcl9zZXR1cAogICoKICAqICBTZXR1cCB0 aGUgY29ycmVjdGVkIG1hY2hpbmUgY2hlY2sgdmVjdG9yIHJlZ2lzdGVyIGluIHRoZSBwcm9jZXNz b3IgYW5kCkBAIC02NjEsNyArNjQzLDcgQEAKIAkvKiBSZWdpc3RlciB0aGUgb3MgbWNhIGhhbmRs ZXIgd2l0aCBTQUwgKi8KIAlpZiAoKHJjID0gaWE2NF9zYWxfc2V0X3ZlY3RvcnMoU0FMX1ZFQ1RP Ul9PU19NQ0EsCiAJCQkJICAgICAgIGlhNjRfbWNfaW5mby5pbWlfbWNhX2hhbmRsZXIsCi0JCQkJ ICAgICAgIG1jYV9obGRscl9wdHItPmdwLAorCQkJCSAgICAgICBfX3BhKG1jYV9obGRscl9wdHIt PmdwKSwKIAkJCQkgICAgICAgaWE2NF9tY19pbmZvLmltaV9tY2FfaGFuZGxlcl9zaXplLAogCQkJ CSAgICAgICAwLCAwLCAwKSkpCiAJewpAQCAtNzg2LDcgKzc2OCw3IEBACiAJCQlpcnIgPSBpYTY0 X2dldF9pcnIzKCk7CiAJCQlicmVhazsKIAkJfQotCX0gd2hpbGUgKCEoaXJyICYgKDEgPDwgaXJy X2JpdCkpKSA7CisJfSB3aGlsZSAoIShpcnIgJiAoMVVMIDw8IGlycl9iaXQpKSkgOwogfQogCiAv KgpAQCAtOTExLDEzICs4OTMsMTQgQEAKIAogCS8qIENvbGQgQm9vdCBmb3IgdW5jb3JyZWN0YWJs ZSBNQ0EgKi8KIAlpYTY0X29zX3RvX3NhbF9oYW5kb2ZmX3N0YXRlLmltb3RzX29zX3N0YXR1cyA9 IElBNjRfTUNBX0NPTERfQk9PVDsKKwlpYTY0X29zX3RvX3NhbF9oYW5kb2ZmX3N0YXRlLmltb3Rz X29zX3N0YXR1cyA9IElBNjRfTUNBX0NPUlJFQ1RFRDsKIAogCS8qIERlZmF1bHQgPSB0ZWxsIFNB TCB0byByZXR1cm4gdG8gc2FtZSBjb250ZXh0ICovCiAJaWE2NF9vc190b19zYWxfaGFuZG9mZl9z dGF0ZS5pbW90c19jb250ZXh0ID0gSUE2NF9NQ0FfU0FNRV9DT05URVhUOwogCi0JLyogUmVnaXN0 ZXIgcG9pbnRlciB0byBuZXcgbWluIHN0YXRlIHZhbHVlcyAqLwogCWlhNjRfb3NfdG9fc2FsX2hh bmRvZmZfc3RhdGUuaW1vdHNfbmV3X21pbl9zdGF0ZSA9Ci0JCWlhNjRfbWNhX21pbl9zdGF0ZV9z YXZlX2luZm87CisJCWlhNjRfc2FsX3RvX29zX2hhbmRvZmZfc3RhdGUucGFsX21pbl9zdGF0ZTsK KwogfQogCiAvKgpAQCAtMTI0NCw4ICsxMjI3LDYgQEAKIAlwbG9nX3B0cj0oaWE2NF9lcnJfcmVj X3QgKilJQTY0X0xPR19DVVJSX0JVRkZFUihTQUxfSU5GT19UWVBFX0lOSVQpOwogCXByb2NfcHRy ID0gJnBsb2dfcHRyLT5wcm9jX2VycjsKIAotCWlhNjRfcHJvY2Vzc19taW5fc3RhdGVfc2F2ZSgm U0FMX0xQSV9QU0lfSU5GTyhwcm9jX3B0ciktPm1pbl9zdGF0ZV9hcmVhKTsKLQogCWluaXRfaGFu ZGxlcl9wbGF0Zm9ybShwcm9jX3B0ciwgcHQsIHN3KTsJLyogY2FsbCBwbGF0Zm9ybSBzcGVjaWZp YyByb3V0aW5lcyAqLwogfQogCkBAIC0xMjYyLDggKzEyNDMsOCBAQAogdm9pZAogaWE2NF9sb2df cHJ0X2d1aWQgKGVmaV9ndWlkX3QgKnBfZ3VpZCwgcHJmdW5jX3QgcHJmdW5jKQogewotCWNoYXIg b3V0WzQwXTsKLQlwcmludGsoS0VSTl9ERUJVRyAiR1VJRCA9ICVzXG4iLCBlZmlfZ3VpZF91bnBh cnNlKHBfZ3VpZCwgb3V0KSk7CisJLy9jaGFyIG91dFs0MF07CisJLy9wcmludGsoS0VSTl9ERUJV RyAiR1VJRCA9ICVzXG4iLCBlZmlfZ3VpZF91bnBhcnNlKHBfZ3VpZCwgb3V0KSk7CiB9CiAKIHN0 YXRpYyB2b2lkCkBAIC0xNDE1LDYgKzEzOTYsMTIgQEAKIAkJCWxoLT50aW1lc3RhbXAuc2xoX3Nl Y29uZCwgbGgtPnNldmVyaXR5KTsKIH0KIAorLyogQml0bWFza3Mgb2YgaW1wbGVtZW50ZWQgcmVn aXN0ZXJzICovCitzdGF0aWMgdTY0IGFyYml0c1syXSA9IHsgMHgxMTExN2YyZjAwZmZVTCwgMHg3 VUwgfTsKK3N0YXRpYyB1NjQgYnJiaXRzWzFdID0geyAweGZmVUwgfTsKK3N0YXRpYyB1NjQgY3Ji aXRzWzJdID0geyAweDNmYjAxMDdVTCwgMHgzMDdmZlVMIH07CitzdGF0aWMgdTY0IHJyYml0c1sx XSA9IHsgMHhmZlVMIH07CisKIC8qCiAgKiBpYTY0X2xvZ19wcm9jZXNzb3JfcmVnc19wcmludAog ICoJUHJpbnQgdGhlIGNvbnRlbnRzIG9mIHRoZSBzYXZlZCBwcm9jZXNzb3IgcmVnaXN0ZXIocykg aW4gdGhlIGZvcm1hdApAQCAtMTQzMCw2ICsxNDE3LDcgQEAKIHZvaWQKIGlhNjRfbG9nX3Byb2Nl c3Nvcl9yZWdzX3ByaW50KHU2NAkqcmVncywKIAkJCSAgICAgIGludAlyZWdfbnVtLAorCQkJICAg ICAgdTY0CSpyZWdfYml0cywKIAkJCSAgICAgIGNoYXIJKnJlZ19jbGFzcywKIAkJCSAgICAgIGNo YXIJKnJlZ19wcmVmaXgsCiAJCQkgICAgICBwcmZ1bmNfdAlwcmZ1bmMpCkBAIC0xNDM4LDcgKzE0 MjYsOCBAQAogCiAJcHJmdW5jKCIrJXMgUmVnaXN0ZXJzXG4iLCByZWdfY2xhc3MpOwogCWZvciAo aSA9IDA7IGkgPCByZWdfbnVtOyBpKyspCi0JCXByZnVuYygiKyAlc1slZF0gMHglbHhcbiIsIHJl Z19wcmVmaXgsIGksIHJlZ3NbaV0pOworCQlpZiAocmVnX2JpdHNbaS82NF0gJiAoMVVMIDw8IChp JTY0KSkpCisJCQlwcmZ1bmMoIisgJXNbJWRdIDB4JWx4XG4iLCByZWdfcHJlZml4LCBpLCByZWdz W2ldKTsKIH0KIAogLyoKQEAgLTIwNzEsMjcgKzIwNjAsMjQgQEAKIAlpZiAoc2xwaS0+dmFsaWQu cHNpX3N0YXRpY19zdHJ1Y3QpIHsKIAkJc3BzaSA9IChzYWxfcHJvY2Vzc29yX3N0YXRpY19pbmZv X3QgKilwX2RhdGE7CiAKLQkJLyogY29weSBpbnRlcnJ1cHRlZCBjb250ZXh0IFBBTCBtaW4tc3Rh dGUgaW5mbyAqLwotCQlpYTY0X3Byb2Nlc3NfbWluX3N0YXRlX3NhdmUoJnNwc2ktPm1pbl9zdGF0 ZV9hcmVhKTsKLQogCQkvKiBQcmludCBicmFuY2ggcmVnaXN0ZXIgY29udGVudHMgaWYgdmFsaWQg Ki8KIAkJaWYgKHNwc2ktPnZhbGlkLmJyKQotCQkJaWE2NF9sb2dfcHJvY2Vzc29yX3JlZ3NfcHJp bnQoc3BzaS0+YnIsIDgsICJCcmFuY2giLCAiYnIiLAorCQkJaWE2NF9sb2dfcHJvY2Vzc29yX3Jl Z3NfcHJpbnQoc3BzaS0+YnIsIDgsIGJyYml0cywgIkJyYW5jaCIsICJiciIsCiAJCQkJCQkgICAg ICBwcmZ1bmMpOwogCiAJCS8qIFByaW50IGNvbnRyb2wgcmVnaXN0ZXIgY29udGVudHMgaWYgdmFs aWQgKi8KIAkJaWYgKHNwc2ktPnZhbGlkLmNyKQotCQkJaWE2NF9sb2dfcHJvY2Vzc29yX3JlZ3Nf cHJpbnQoc3BzaS0+Y3IsIDEyOCwgIkNvbnRyb2wiLCAiY3IiLAorCQkJaWE2NF9sb2dfcHJvY2Vz c29yX3JlZ3NfcHJpbnQoc3BzaS0+Y3IsIDEyOCwgY3JiaXRzLCAiQ29udHJvbCIsICJjciIsCiAJ CQkJCQkgICAgICBwcmZ1bmMpOwogCiAJCS8qIFByaW50IGFwcGxpY2F0aW9uIHJlZ2lzdGVyIGNv bnRlbnRzIGlmIHZhbGlkICovCiAJCWlmIChzcHNpLT52YWxpZC5hcikKLQkJCWlhNjRfbG9nX3By b2Nlc3Nvcl9yZWdzX3ByaW50KHNwc2ktPmFyLCAxMjgsICJBcHBsaWNhdGlvbiIsCisJCQlpYTY0 X2xvZ19wcm9jZXNzb3JfcmVnc19wcmludChzcHNpLT5hciwgMTI4LCBhcmJpdHMsICJBcHBsaWNh dGlvbiIsCiAJCQkJCQkgICAgICAiYXIiLCBwcmZ1bmMpOwogCiAJCS8qIFByaW50IHJlZ2lvbiBy ZWdpc3RlciBjb250ZW50cyBpZiB2YWxpZCAqLwogCQlpZiAoc3BzaS0+dmFsaWQucnIpCi0JCQlp YTY0X2xvZ19wcm9jZXNzb3JfcmVnc19wcmludChzcHNpLT5yciwgOCwgIlJlZ2lvbiIsICJyciIs CisJCQlpYTY0X2xvZ19wcm9jZXNzb3JfcmVnc19wcmludChzcHNpLT5yciwgOCwgcnJiaXRzLCAi UmVnaW9uIiwgInJyIiwKIAkJCQkJCSAgICAgIHByZnVuYyk7CiAKIAkJLyogUHJpbnQgZmxvYXRp bmctcG9pbnQgcmVnaXN0ZXIgY29udGVudHMgaWYgdmFsaWQgKi8KQEAgLTIzMTksMyArMjMwNSwx MDcgQEAKIAl9CiAJcmV0dXJuIHBsYXRmb3JtX2VycjsKIH0KKworLyoKKyAqIFB1cmdlIGFsbCBl bnRyaWVzIGZyb20gdGhlIFRMQiAoVEMgYW5kIFRSKS4gIFRoZW4gcmVsb2FkCisgKiB0aGUgVFIg cmVnaXN0ZXJzIG5lZWRlZCBieSB0aGUga2VybmVsLgorICoKKyAqIFdBUk5JTkc6IFRoaXMgZnVu Y3Rpb24gZXhlY3V0ZXMgaW4gcGh5c2ljYWwgbW9kZS4gIFRoaXMgbWVhbnMKKyAqIHRoYXQgaXQg Y2FuJ3QgcmVhY2ggb3V0IGFuZCB1c2UgZnVuY3Rpb25zL2RhdGEgZnJvbSBlbHNld2hlcmUKKyAq IGluIHRoZSBrZXJuZWwgKHdpdGhvdXQganVtcGluZyB0aHJvdWdoIGhvb3BzIHRvIGdldCB0aGUg cGh5c2ljYWwKKyAqIGFkZHJlc3MgZmlyc3QpLgorICovCit2b2lkCitpYTY0X29zX21jYV90bGJf cHVyZ2VfYW5kX3JlbG9hZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgaSwgaiwgY291bnQwLCBj b3VudDEsIHN0cmlkZTAsIHN0cmlkZTEsIGFkZHI7CisJc3RydWN0IGNwdWluZm9faWE2NCAqbGNk OworCWludCBjcHU7CisJdW5zaWduZWQgbG9uZyBwdGU7CisJc3RydWN0IHRhc2tfc3RydWN0ICpw Y3VycmVudDsKKwlzdHJ1Y3QgaWE2NF9rZXJuZWxfdHJfaW5mbyAqdHJwOworCisJLyoKKwkgKiBX YW50IHRvIHVzZSB0aGlzOgorCSAqCXBjdXJyZW50ID0gKHN0cnVjdCB0YXNrX3N0cnVjdCAqKWlh NjRfZ2V0X2tyKElBNjRfS1JfQ1VSUkVOVCk7CisJICogQnV0LCB0aGUgY29tcGlsZXIgZG9lc24n dCBvcHRpbWl6ZSBhd2F5IHRoZSBzd2l0Y2gsIGFuZCBlbmRzIHVwCisJICogbGVhdmluZyBzb21l IHZpcnR1YWwgbWVtb3J5IGFjY2Vzc2VzLiBTYW1lIGZvciBhci5rNCBhY2Nlc3MgbGF0ZXIKKwkg KiBpbiB0aGlzIGZ1bmN0aW9uLgorCSAqLworCWFzbSB2b2xhdGlsZSAoIm1vdiAlMD1hci5rNiIg OiAiPXIiKHBjdXJyZW50KSk7CisJY3B1ID0gcGN1cnJlbnQtPnByb2Nlc3NvcjsKKworCXRycCA9 IChzdHJ1Y3QgaWE2NF9rZXJuZWxfdHJfaW5mbyAqKV9fcGEoJmlhNjRfa2VybmVsX3RyX2xpc3Rb Y3B1XVswXSk7CisKKwkvKiBjb21wdXRlIHBoeXNpY2FsIGFkZHJlc3Mgb2Ygb3VyIGxvY2FsX2Nw dV9kYXRhICovCisJbGNkID0gKHN0cnVjdCBjcHVpbmZvX2lhNjQgKikocHRlX3ZhbCh0cnBbSUE2 NF9UUl9QRVJDUFVfREFUQV0uZF9wdGUpICYgX1BGTl9NQVNLKTsKKwlhZGRyICAgID0gbGNkLT5w dGNlX2Jhc2U7CisJY291bnQwICA9IGxjZC0+cHRjZV9jb3VudFswXTsKKwljb3VudDEgID0gbGNk LT5wdGNlX2NvdW50WzFdOworCXN0cmlkZTAgPSBsY2QtPnB0Y2Vfc3RyaWRlWzBdOworCXN0cmlk ZTEgPSBsY2QtPnB0Y2Vfc3RyaWRlWzFdOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50MDsgKytp KSB7CisJCWZvciAoaiA9IDA7IGogPCBjb3VudDE7ICsraikgeworCQkJYXNtIHZvbGF0aWxlICgi cHRjLmUgJTAiIDo6ICJyIihhZGRyKSk7CisJCQlhZGRyICs9IHN0cmlkZTE7CisJCX0KKwkJYWRk ciArPSBzdHJpZGUwOworCX0KKwlpYTY0X3NybHpfaSgpOwkJCS8qIHNybHouaSBpbXBsaWVzIHNy bHouZCAqLworCisKKwkvKiBOb3cgcHVyZ2UgYWRkcmVzc2VzIGZvcm1lcmx5IG1hcHBlZCBieSBU UiByZWdpc3RlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgSUE2NF9UUl9NQVhUUjsgaSsrKSB7CisJ CS8qIElmIHRycFtpXSBjb250YWlucyBJVFIgZGF0YSwgcHVyZ2V0IGl0IGhlcmUuICovCisJCWlm ICh0cnBbaV0uaV92YWxpZD09MSkKKwkJeworCQkJYWRkcj10cnBbaV0uaV92bWFkZHI7CisJCQlp YTY0X3B0cigxLCBhZGRyLCB0cnBbaV0uaV9sb2dfcGdzaXplKTsKKwkJfQorCQkvKiBJZiB0cnBb aV0gY29udGFpbnMgRFRSIGRhdGEsIHB1cmdlIGl0IGhlcmUuICovCisJCWlmICh0cnBbaV0uZF92 YWxpZD09MSkKKwkJeworCQkJaWYgKGkgPT0gSUE2NF9UUl9DVVJSRU5UX1NUQUNLKSB7CisJCQkJ LyogdHJwW2ldIG9ubHkgY29udGFpbnMgRFRSIGZvciBJQTY0X1RSX0NVUlJFTlRfU1RBQ0sgKi8K KwkJCQkvKiBpYTY0X2dldF9rcihJQTY0X0tSX0NVUlJFTlRfU1RBQ0spICovCisJCQkJYXNtIHZv bGF0aWxlICgibW92ICUwPWFyLms0IiA6ICI9ciIoYWRkcikpOworCQkJCWFkZHIgPDw9IElBNjRf R1JBTlVMRV9TSElGVDsKKwkJCQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpX192YShhZGRyKTsKKwkJ CX0KKwkJCWVsc2UKKwkJCQlhZGRyPXRycFtpXS5kX3ZtYWRkcjsKKworCQkJaWE2NF9wdHIoMiwg YWRkciwgdHJwW2ldLmRfbG9nX3Bnc2l6ZSk7CisJCX0KKwl9CisKKwlpYTY0X3NybHpfaSgpOwkJ CS8qIHNybHouaSBpbXBsaWVzIHNybHouZCAqLworCisJLyogRmluYWxseSByZWxvYWQgdGhlIFRS IHJlZ2lzdGVycyAqLworCWZvciAoaSA9IDA7IGkgPCBJQTY0X1RSX01BWFRSOyBpKyspIHsKKwkJ LyogSWYgdHJwW2ldIGNvbnRhaW5zIElUUiBkYXRhLCBpbnNlcnQgaXQgdG8gSVRSLiAqLworCQlp ZiAodHJwW2ldLmlfdmFsaWQ9PTEpCisJCXsKKwkJCWFkZHIgPSB0cnBbaV0uaV92bWFkZHI7CisJ CQlwdGUgPSBwdGVfdmFsKHRycFtpXS5pX3B0ZSk7CisJCQlpYTY0X2l0cigxLCBpLCBhZGRyLCBw dGUsIHRycFtpXS5pX2xvZ19wZ3NpemUpOworCQl9CisJCS8qIElmIHRycFtpXSBjb250YWlucyBE VFIgZGF0YSwgaW5zZXJ0IGl0IHRvIERUUi4gKi8KKwkJaWYgKHRycFtpXS5kX3ZhbGlkPT0xKQor CQl7CisJCQlpZiAoaSA9PSBJQTY0X1RSX0NVUlJFTlRfU1RBQ0spIHsKKwkJCQkvKiBpYTY0X2dl dF9rcihJQTY0X0tSX0NVUlJFTlRfU1RBQ0spICovCisJCQkJYXNtIHZvbGF0aWxlICgibW92ICUw PWFyLms0IiA6ICI9ciIocHRlKSk7CisJCQkJcHRlIDw8PSBJQTY0X0dSQU5VTEVfU0hJRlQ7CisJ CQkJYWRkciA9ICh1NjQpX192YShwdGUpOworCQkJCXB0ZSA9IHB0ZV92YWwobWtfcHRlX3BoeXMo cHRlLCBQQUdFX0tFUk5FTCkpOworCQkJfQorCQkJZWxzZSB7CisJCQkJYWRkciA9IHRycFtpXS5k X3ZtYWRkcjsKKwkJCQlwdGUgPSBwdGVfdmFsKHRycFtpXS5kX3B0ZSk7CisJCQl9CisJCQlpYTY0 X2l0cigyLCBpLCBhZGRyLCBwdGUsIHRycFtpXS5kX2xvZ19wZ3NpemUpOworCQl9CisJfQorfQpk aWZmIC1OdXIgQS9hcmNoL2lhNjQva2VybmVsL21jYV9hc20uUyBCL2FyY2gvaWE2NC9rZXJuZWwv bWNhX2FzbS5TCi0tLSBBL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2FzbS5TCVR1ZSBNYXkgMjcgMTk6 MDc6NDQgMjAwMworKysgQi9hcmNoL2lhNjQva2VybmVsL21jYV9hc20uUwlUdWUgTWF5IDI3IDE5 OjA4OjI1IDIwMDMKQEAgLTEzLDYgKzEzLDkgQEAKIC8vCQkgICAyLiBSZXN0b3JlIGN1cnJlbnQg dGhyZWFkIHBvaW50ZXIgdG8ga3I2CiAvLwkJICAgMy4gTW92ZSBzdGFjayBwdHIgMTYgYnl0ZXMg dG8gY29uZm9ybSB0byBDIGNhbGxpbmcgY29udmVudGlvbgogLy8KKy8vIDAyLzEwLzAxIEouSGFs bCA8amVubmEucy5oYWxsQGludGVsLmNvbT4KKy8vCQkgICAxLiBBZGRlZCBUTEIgZXJyb3IgcmVj b3Zlcnk6ICBwdXJnZSBUQydzIGFuZCByZS1sb2FkIFRSJ3MKKy8vCiAjaW5jbHVkZSA8bGludXgv Y29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vYXNtbWFjcm8uaD4KQEAgLTIyLDIyICsyNSwxOCBA QAogI2luY2x1ZGUgPGFzbS9tY2EuaD4KIAogLyoKLSAqIFdoZW4gd2UgZ2V0IGFuIG1hY2hpbmUg Y2hlY2ssIHRoZSBrZXJuZWwgc3RhY2sgcG9pbnRlciBpcyBubyBsb25nZXIKKyAqIFdoZW4gd2Ug Z2V0IGEgbWFjaGluZSBjaGVjaywgdGhlIGtlcm5lbCBzdGFjayBwb2ludGVyIGlzIG5vIGxvbmdl cgogICogdmFsaWQsIHNvIHdlIG5lZWQgdG8gc2V0IGEgbmV3IHN0YWNrIHBvaW50ZXIuCiAgKi8K ICNkZWZpbmUJTUlOU1RBVEVfUEhZUwkvKiBNYWtlIHN1cmUgc3RhY2sgYWNjZXNzIGlzIHBoeXNp Y2FsIGZvciBNSU5TVEFURSAqLwogCiAvKgotICogTmVlZGVkIGZvciBpYTY0X3NhbCBjYWxsCi0g Ki8KLSNkZWZpbmUgU0FMX0dFVF9TVEFURV9JTkZPICAgICAgMHgwMTAwMDAwMQotCi0vKgogICog TmVlZGVkIGZvciByZXR1cm4gY29udGV4dCB0byBTQUwKICAqLwotI2RlZmluZSBJQTY0X01DQV9T QU1FX0NPTlRFWFQJMHgwCisjZGVmaW5lIElBNjRfTUNBX1NBTUVfQ09OVEVYVAkwCiAjZGVmaW5l IElBNjRfTUNBX0NPTERfQk9PVAktMgogCisKICNpbmNsdWRlICJtaW5zdGF0ZS5oIgogCiAvKgpA QCAtNTcsMTIgKzU2LDEyIEBACiAJc3Q4CVtfdG1wXT1yOSwweDA4OzsJCQlcCiAJc3Q4CVtfdG1w XT1yMTAsMHgwODs7CQkJXAogCXN0OAlbX3RtcF09cjExLDB4MDg7OwkJCVwKLQlzdDgJW190bXBd PXIxMiwweDA4CisJc3Q4CVtfdG1wXT1yMTIsMHgwODs7CQkJXAorCXN0OAlbX3RtcF09cjE3LDB4 MDg7OwkJCVwKKwlzdDgJW190bXBdPXIxOCwweDA4CiAKIC8qCiAgKiBPU19NQ0FfVE9fU0FMX0hB TkRPRkZfU1RBVEUgKFNBTCAzLjAgc3BlYykKLSAqIChwNikgaXMgZXhlY3V0ZWQgaWYgd2UgbmV2 ZXIgZW50ZXJlZCB2aXJ0dWFsIG1vZGUgKFRMQiBlcnJvcikKLSAqIChwNykgaXMgZXhlY3V0ZWQg aWYgd2UgZW50ZXJlZCB2aXJ0dWFsIG1vZGUgYXMgZXhwZWN0ZWQgKG5vcm1hbCBjYXNlKQogICoJ MS4gR1I4ID0gT1NfTUNBIHJldHVybiBzdGF0dXMKICAqCTIuIEdSOSA9IFNBTCBHUCAocGh5c2lj YWwpCiAgKgkzLiBHUjEwID0gMC8xIHJldHVybmluZyBzYW1lL25ldyBjb250ZXh0CkBAIC03MCwx OSArNjksMTQgQEAKICAqCXJldHVybnMgcHRyIHRvIFNBTCBydG4gc2F2ZSBsb2MgaW4gX3RtcAog ICovCiAjZGVmaW5lIE9TX01DQV9UT19TQUxfSEFORE9GRl9TVEFURV9SRVNUT1JFKF90bXApCVwK LShwNikJbW92bAlfdG1wPWlhNjRfc2FsX3RvX29zX2hhbmRvZmZfc3RhdGU7OwlcCi0ocDcpCW1v dmwJX3RtcD1pYTY0X29zX3RvX3NhbF9oYW5kb2ZmX3N0YXRlOzsJXAorCW1vdmwJX3RtcD1pYTY0 X29zX3RvX3NhbF9oYW5kb2ZmX3N0YXRlOzsJXAogCURBVEFfVkFfVE9fUEEoX3RtcCk7OwkJCQlc Ci0ocDYpCW1vdmwJcjg9SUE2NF9NQ0FfQ09MRF9CT09UOwkJCVwKLShwNikJbW92bAlyMTA9SUE2 NF9NQ0FfU0FNRV9DT05URVhUOwkJXAotKHA2KQlhZGQgICAgIF90bXA9MHgxOCxfdG1wOzsJCQlc Ci0ocDYpCWxkOAlyOT1bX3RtcF0sMHgxMDsJCQkJXAotKHA2KQltb3ZsCXIyMj1pYTY0X21jYV9t aW5fc3RhdGVfc2F2ZV9pbmZvOzsJXAotKHA3KQlsZDgJcjg9W190bXBdLDB4MDg7OwkJCVwKLShw NykJbGQ4CXI5PVtfdG1wXSwweDA4OzsJCQlcCi0ocDcpCWxkOCAgICAgcjEwPVtfdG1wXSwweDA4 OzsJCQlcCi0ocDcpCWxkOCAgICAgcjIyPVtfdG1wXSwweDA4OzsJCQlcCi0JREFUQV9WQV9UT19Q QShyMjIpCisJbGQ4CXI4PVtfdG1wXSwweDA4OzsJCQlcCisJbGQ4CXI5PVtfdG1wXSwweDA4OzsJ CQlcCisJbGQ4CXIxMD1bX3RtcF0sMHgwODs7CQkJXAorCWxkOAlyMjI9W190bXBdLDB4MDg7OwkJ CVwKKwlEQVRBX1ZBX1RPX1BBKHIyMik7OwkJCQlcCisJZGVwCXIyMj0tMSxyMjIsNjMsMQogCS8v IG5vdyBfdG1wIGlzIHBvaW50aW5nIHRvIFNBTCBydG4gc2F2ZSBsb2NhdGlvbgogCiAKQEAgLTk1 LDIxICs4OSwyMCBAQAogCS5nbG9iYWwJaWE2NF9tY2Ffc3RhY2tmcmFtZQogCS5nbG9iYWwJaWE2 NF9tY2FfYnNwc3RvcmUKIAkuZ2xvYmFsIGlhNjRfaW5pdF9zdGFjawotCS5nbG9iYWwgaWE2NF9t Y2Ffc2FsX2RhdGFfYXJlYQotCS5nbG9iYWwgaWE2NF90bGJfZnVuY3Rpb25hbAotCS5nbG9iYWwg aWE2NF9tY2FfbWluX3N0YXRlX3NhdmVfaW5mbwogCiAJLnRleHQKIAkuYWxpZ24gMTYKIAogaWE2 NF9vc19tY2FfZGlzcGF0Y2g6CiAKLSNpZiBkZWZpbmVkKE1DQV9URVNUKQotCS8vIFByZXRlbmQg dGhhdCB3ZSBhcmUgaW4gaW50ZXJydXB0IGNvbnRleHQKLQltb3YJCXIyPXBzcgotCWRlcAkJcjI9 MCwgcjIsIFBTUl9JQywgMjsKLQltb3YJCXBzci5sID0gcjIKLSNlbmRpZgkvKiAjaWYgZGVmaW5l ZChNQ0FfVEVTVCkgKi8KKwkvLyBTZXJpYWxpemUgYWxsIE1DQSBwcm9jZXNzaW5nCisJbW92bAly Mj1pYTY0X21jYV9zZXJpYWxpemUKKwltb3YJcjM9MTs7CisJREFUQV9WQV9UT19QQShyMik7Owor aWE2NF9vc19tY2Ffc3BpbjoKKwl4Y2hnOAlyND1bcjJdLHIzOzsKKwljbXAubmUJcDYscDA9cjQs cjAKKyhwNikJYnIgaWE2NF9vc19tY2Ffc3BpbgogCiAJLy8gU2F2ZSB0aGUgU0FMIHRvIE9TIE1D QSBoYW5kb2ZmIHN0YXRlIGFzIGRlZmluZWQKIAkvLyBieSBTQUwgU1BFQyAzLjAKQEAgLTEzOSwx NyArMTMyLDIwIEBACiAJCQkJCS8vIChDIGNhbGxpbmcgY29udmVudGlvbikKIAlEQVRBX1ZBX1RP X1BBKHIxMik7OwogCi0JLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBNQ0EgcmVzdWx0ZWQgZnJvbSBh IFRMQiBlcnJvcgotYmVnaW5fdGxiX2Vycm9yX2NoZWNrOgotICAgICAgICBiciAgICAgIGlhNjRf b3NfbWNhX3RsYl9lcnJvcl9jaGVjazs7CisJLy8gVW5jb25kaXRpb25hbGx5IHB1cmdlIGFuZCBy ZS1sb2FkIFRMQiB0byByZWNvdmVyIGFueSByZXNpZGVudCBlcnJvcnMKK2JlZ2luX3RsYl9wdXJn ZV9hbmRfcmVsb2FkOgorCW1vdmwJCXIyPWlhNjRfb3NfbWNhX3RsYl9wdXJnZV9hbmRfcmVsb2Fk OzsKKwlJTlNUX1ZBX1RPX1BBKHIyKTs7CQkvLyBmaW5kIHBoeXMgYWRkcmVzcyBvZiBmdW5jdGlv biBwb2ludGVyCisJbW92CQliNj1yMjs7CisJYnIuY2FsbC5zcHRrLm1hbnkgICAgYjA9YjY7Owog Ci1kb25lX3RsYl9lcnJvcl9jaGVjazoKK2RvbmVfdGxiX3B1cmdlX2FuZF9yZWxvYWQ6CiAKLSAg ICAgICAgLy8gSWYgVExCIGlzIGZ1bmN0aW9uYWwsIGVudGVyIHZpcnR1YWwgbW9kZSBmcm9tIHBo eXNpY2FsIG1vZGUKKyAgICAgICAgLy8gRW50ZXIgdmlydHVhbCBtb2RlIGZyb20gcGh5c2ljYWwg bW9kZQogCVZJUlRVQUxfTU9ERV9FTlRFUihyMiwgcjMsIGlhNjRfb3NfbWNhX3ZpcnR1YWxfYmVn aW4sIHI0KQogaWE2NF9vc19tY2FfdmlydHVhbF9iZWdpbjoKIAotCS8vIGNhbGwgb3VyIGhhbmRs ZXIKKwkvLyBDYWxsIHZpcnR1YWwgbW9kZSBoYW5kbGVyCiAJbW92bAkJcjI9aWE2NF9tY2FfdWNt Y19oYW5kbGVyOzsKIAltb3YJCWI2PXIyOzsKIAlici5jYWxsLnNwdGsubWFueSAgICBiMD1iNjs7 CkBAIC0xNTgsMTMgKzE1NCw2IEBACiAJUEhZU0lDQUxfTU9ERV9FTlRFUihyMiwgcjMsIGlhNjRf b3NfbWNhX3ZpcnR1YWxfZW5kLCByNCkKIGlhNjRfb3NfbWNhX3ZpcnR1YWxfZW5kOgogCi0jaWYg ZGVmaW5lZChNQ0FfVEVTVCkKLQkvLyBQcmV0ZW5kIHRoYXQgd2UgYXJlIGluIGludGVycnVwdCBj b250ZXh0Ci0JbW92CXIyPXBzcjs7Ci0JZGVwCXIyPTAsIHIyLCBQU1JfSUMsIDI7OwotCW1vdglw c3IubCA9IHIyOzsKLSNlbmRpZgkvKiAjaWYgZGVmaW5lZChNQ0FfVEVTVCkgKi8KLQogCS8vIHJl c3RvcmUgdGhlIG9yaWdpbmFsIHN0YWNrIGZyYW1lIGhlcmUKIAltb3ZsICAgIHIyPWlhNjRfbWNh X3N0YWNrZnJhbWUJLy8gcmVzdG9yZSBzdGFjayBmcmFtZSBmcm9tIG1lbW9yeSBhdCByMgogCTs7 CkBAIC0xODAsMTQgKzE2OSwxNiBAQAogCWJyCWlhNjRfb3NfbWNhX3Byb2Nfc3RhdGVfcmVzdG9y ZTs7CiAKIGlhNjRfb3NfbWNhX2RvbmVfcmVzdG9yZToKLQltb3ZsCXIzPWlhNjRfdGxiX2Z1bmN0 aW9uYWw7OwotCURBVEFfVkFfVE9fUEEocjMpOzsKLQlsZDgJcjM9W3IzXTs7Ci0JY21wLmVxCXA2 LHA3PXIwLHIzOzsKIAlPU19NQ0FfVE9fU0FMX0hBTkRPRkZfU1RBVEVfUkVTVE9SRShyMik7Owog CS8vIGJyYW5jaCBiYWNrIHRvIFNBTEVfQ0hFQ0sKIAlsZDgJCXIzPVtyMl07OwogCW1vdgkJYjA9 cjM7OwkJLy8gU0FMX0NIRUNLIHJldHVybiBhZGRyZXNzCisKKwkvLyByZWxlYXNlIGxvY2sKKwlt b3ZsCQlyMz1pYTY0X21jYV9zZXJpYWxpemU7OworCURBVEFfVkFfVE9fUEEocjMpOzsKKwlzdDgJ CVtyM109cjAKKwogCWJyCQliMAogCTs7CiBpYTY0X29zX21jYV9kaXNwYXRjaF9lbmQ6CkBAIC0z MTEsNDYgKzMwMiw0MyBAQAogCXN0OAkJW3IyXT1yMywxNjA7OyAgICAgICAgICAgICAgIC8vIDE2 MCBieXRlIHJlbWVudAogCiBTa2lwSW50clJlZ3M6Ci0Jc3Q4CQlbcjJdPXIwLDE2OCAgICAgICAg ICAgICAgICAgLy8gYW5vdGhlciAxNjggYnl0ZSAuCi0KLQltb3YJCXIzPWNyNjY7OyAgICAgICAg ICAgICAgICAgICAvLyBjci5saWQKLQlzdDgJCVtyMl09cjMsNDAgICAgICAgICAgICAgICAgICAv LyA0MCBieXRlIHJlbWVudAorCXN0OAkJW3IyXT1yMCwxNTI7OyAgICAgICAgICAgICAgIC8vIGFu b3RoZXIgMTUyIGJ5dGUgLgogCi0JbW92CQlyMz1jcjcxOzsgICAgICAgICAgICAgICAgICAgLy8g Y3IuaXZyCi0Jc3Q4CQlbcjJdPXIzLDgKKwlhZGQJCXI0PTgscjIgICAgICAgICAgICAgICAgICAg ICAvLyBkdXBsaWNhdGUgcjIgaW4gcjQKKwlhZGQJCXI2PTIqOCxyMiAgICAgICAgICAgICAgICAg ICAvLyBkdXBsaWNhdGUgcjIgaW4gcjYKIAotCW1vdgkJcjM9Y3I3Mjs7ICAgICAgICAgICAgICAg ICAgIC8vIGNyLnRwcgotCXN0OAkJW3IyXT1yMywyNCAgICAgICAgICAgICAgICAgIC8vIDI0IGJ5 dGUgaW5jcmVtZW50Ci0KLQltb3YJCXIzPXIwOzsgICAgICAgICAgICAgICAgICAgICAvLyBjci5l b2kgPT4gY3I3NQotCXN0OAkJW3IyXT1yMywxNjggICAgICAgICAgICAgICAgIC8vIDE2OCBieXRl IGluYy4KLQotCW1vdgkJcjM9cjA7OyAgICAgICAgICAgICAgICAgICAgIC8vIGNyLmlycjAgPT4g Y3I5NgotCXN0OAkJW3IyXT1yMywxNiAgICAgICAgICAgICAgIC8vIDE2IGJ5dGUgaW5jLgotCi0J bW92CQlyMz1yMDs7ICAgICAgICAgICAgICAgICAgICAgLy8gY3IuaXJyMSA9PiBjcjk4Ci0Jc3Q4 CQlbcjJdPXIzLDE2ICAgICAgICAgICAgICAgLy8gMTYgYnl0ZSBpbmMuCi0KLQltb3YJCXIzPXIw OzsgICAgICAgICAgICAgICAgICAgICAvLyBjci5pcnIyID0+IGNyMTAwCi0Jc3Q4CQlbcjJdPXIz LDE2ICAgICAgICAgICAgICAgLy8gMTYgYnl0ZSBpbmMKLQotCW1vdgkJcjM9cjA7OyAgICAgICAg ICAgICAgICAgICAgIC8vIGNyLmlycjMgPT4gY3IxMDAKLQlzdDgJCVtyMl09cjMsMTYgICAgICAg ICAgICAgICAvLyAxNmIgaW5jLgotCi0JbW92CQlyMz1yMDs7ICAgICAgICAgICAgICAgICAgICAg Ly8gY3IuaXR2ID0+IGNyMTE0Ci0Jc3Q4CQlbcjJdPXIzLDE2ICAgICAgICAgICAgICAgLy8gMTYg Ynl0ZSBpbmMuCisJbW92CQlyMz1jcjY0ICAgICAgICAgICAgICAgICAgICAgLy8gY3IubGlkCisv Lwltb3YJCXI1PWNyNjUgICAgICAgICAgICAgICAgICAgICAvLyBjci5pdnIsIGRvbid0IHJlYWQg aXQKKwltb3YJCXI3PWNyNjY7OyAgICAgICAgICAgICAgICAgICAvLyBjci50cHIKKwlzdDgJCVty Ml09cjMsMyo4CisJc3Q4CQlbcjRdPXI1LDMqOAorCXN0OAkJW3I2XT1yNywzKjg7OwogCi0JbW92 CQlyMz1yMDs7ICAgICAgICAgICAgICAgICAgICAgLy8gY3IucG12ID0+IGNyMTE2Ci0Jc3Q4CQlb cjJdPXIzLDgKKwltb3YJCXIzPXIwICAgICAgICAgICAgICAgICAgICAgICAvLyBjci5lb2kgPT4g Y3I2NworCW1vdgkJcjU9cjAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNyLmlycjAgPT4gY3I2 OAorCW1vdgkJcjc9cjA7OyAgICAgICAgICAgICAgICAgICAgIC8vIGNyLmlycjEgPT4gY3I2OQor CXN0OAkJW3IyXT1yMywzKjgKKwlzdDgJCVtyNF09cjUsMyo4CisJc3Q4CQlbcjZdPXI3LDMqODs7 CiAKLQltb3YJCXIzPXIwOzsgICAgICAgICAgICAgICAgICAgICAvLyBjci5scnIwID0+IGNyMTE3 Ci0Jc3Q4CQlbcjJdPXIzLDgKKwltb3YJCXIzPXIwICAgICAgICAgICAgICAgICAgICAgICAvLyBj ci5pcnIyID0+IGNyNzAKKwltb3YJCXI1PXIwICAgICAgICAgICAgICAgICAgICAgICAvLyBjci5p cnIzID0+IGNyNzEKKwltb3YJCXI3PWNyNzI7OyAgICAgICAgICAgICAgICAgICAvLyBjci5pdHYg PT4gY3I3MgorCXN0OAkJW3IyXT1yMywzKjgKKwlzdDgJCVtyNF09cjUsMyo4CisJc3Q4CQlbcjZd PXI3LDMqODs7CiAKLQltb3YJCXIzPXIwOzsgICAgICAgICAgICAgICAgICAgICAvLyBjci5scnIx ID0+IGNyMTE4Ci0Jc3Q4CQlbcjJdPXIzLDgKKwltb3YJCXIzPWNyNzMgICAgICAgICAgICAgICAg ICAgICAvLyBjci5wbXYgPT4gY3I3MworCW1vdgkJcjU9Y3I3NDs7ICAgICAgICAgICAgICAgICAg IC8vIGNyLmNtY3YgPT4gY3I3NAorCXN0OAkJW3IyXT1yMyw3KjgKKwlzdDgJCVtyNF09cjUsNyo4 OzsKKworCW1vdgkJcjM9cjAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNyLmxycjAgPT4gY3I4 MAorCW1vdgkJcjU9cjA7OyAgICAgICAgICAgICAgICAgICAgIC8vIGNyLmxycjEgPT4gY3I4MQor CXN0OAkJW3IyXT1yMywyMyo4CisJc3Q4CQlbcjRdPXI1LDIzKjg7OwogCi0JbW92CQlyMz1yMDs7 ICAgICAgICAgICAgICAgICAgICAgLy8gY3IuY21jdiA9PiBjcjExOQotCXN0OAkJW3IyXT1yMyw4 KjEwOzsKKwlhZGRzCQlyMj0yNSo4LHIyOzsKIAogY1NhdmVBUnM6CiAvLyBzYXZlIEFScwpAQCAt NDE3LDcgKzQwNSw4IEBACiAJbW92bAkJcjQ9MHgwMDs7CiAKIGNTdFJSOgotCW1vdgkJcjM9cnJb cjRdOzsKKwlkZXAuegkJcjU9cjQsNjEsMzs7CisJbW92CQlyMz1ycltyNV07OwogCXN0OAkJW3Iy XT1yMyw4CiAJYWRkCQlyND0xLHI0CiAJYnIuY2xvb3Auc3B0ay5mZXcJY1N0UlIKQEAgLTUyNCw3 ICs1MTMsNyBAQAogCWxkOAkJcjU9W3I0XSwzKjgKIAlsZDgJCXI3PVtyNl0sMyo4OzsKIAltb3YJ CWNyMTY9cjMgICAgICAgICAgICAgICAgICAgICAvLyBjci5pcHNyCi0JbW92CQljcjE3PXI1ICAg ICAgICAgICAgICAgICAgICAgLy8gY3IuaXNyIGlzIHJlYWQgb25seQorLy8JbW92CQljcjE3PXI1 ICAgICAgICAgICAgICAgICAgICAgLy8gY3IuaXNyIGlzIHJlYWQgb25seQogLy8gICAgICBtb3Yg ICAgIGNyMTg9cjc7OyAgICAgICAgICAgICAgICAgICAvLyBjci5pZGEgKHJlc2VydmVkIC0gZG9u J3QgcmVzdG9yZSkKIAogCWxkOAkJcjM9W3IyXSwzKjgKQEAgLTU0NSw0MiArNTM0LDQ1IEBACiAJ bW92CQljcjI1PXIzICAgICAgICAgICAgICAgICAgICAgLy8gY3IuaWhhCiAKIHJTa2lwSW50clJl Z3M6Ci0JbGQ4CQlyMz1bcjJdLDE2ODs7ICAgICAgICAgICAgICAgLy8gYW5vdGhlciAxNjggYnl0 ZSBpbmMuCi0KLQlsZDgJCXIzPVtyMl0sNDA7OyAgICAgICAgICAgICAgICAvLyA0MCBieXRlIGlu Y3JlbWVudAotCW1vdgkJY3I2Nj1yMyAgICAgICAgICAgICAgICAgICAgIC8vIGNyLmxpZAotCi0J bGQ4CQlyMz1bcjJdLDg7OwotLy8gICAgICBtb3YJCWNyNzE9cjMgICAgICAgICAgICAgICAgICAg ICAvLyBjci5pdnIgaXMgcmVhZCBvbmx5Ci0JbGQ4CQlyMz1bcjJdLDI0OzsgICAgICAgICAgICAg ICAgLy8gMjQgYnl0ZSBpbmNyZW1lbnQKLQltb3YJCWNyNzI9cjMgICAgICAgICAgICAgICAgICAg ICAvLyBjci50cHIKKwlsZDgJCXIzPVtyMl0sMTUyOzsgICAgICAgICAgICAgICAvLyBhbm90aGVy IDE1MiBieXRlIGluYy4KIAotCWxkOAkJcjM9W3IyXSwxNjg7OyAgICAgICAgICAgICAgIC8vIDE2 OCBieXRlIGluYy4KLS8vICAgICAgbW92CQljcjc1PXIzICAgICAgICAgICAgICAgICAgICAgLy8g Y3IuZW9pCisJYWRkCQlyND04LHIyICAgICAgICAgICAgICAgICAgICAgLy8gZHVwbGljYXRlIHIy IGluIHI0CisJYWRkCQlyNj0yKjgscjI7OyAgICAgICAgICAgICAgICAgLy8gZHVwbGljYXRlIHIy IGluIHI2CiAKLQlsZDgJCXIzPVtyMl0sMTY7OyAgICAgICAgICAgICAvLyAxNiBieXRlIGluYy4K LS8vICAgICAgbW92CQljcjk2PXIzICAgICAgICAgICAgICAgICAgICAgLy8gY3IuaXJyMCBpcyBy ZWFkIG9ubHkKKwlsZDgJCXIzPVtyMl0sOCozCisJbGQ4CQlyNT1bcjRdLDgqMworCWxkOAkJcjc9 W3I2XSw4KjM7OworCW1vdgkJY3I2ND1yMyAgICAgICAgICAgICAgICAgICAgIC8vIGNyLmxpZAor Ly8JbW92CQljcjY1PXI1ICAgICAgICAgICAgICAgICAgICAgLy8gY3IuaXZyIGlzIHJlYWQgb25s eQorCW1vdgkJY3I2Nj1yNzs7ICAgICAgICAgICAgICAgICAgIC8vIGNyLnRwcgorCisJbGQ4CQly Mz1bcjJdLDgqMworCWxkOAkJcjU9W3I0XSw4KjMKKwlsZDgJCXI3PVtyNl0sOCozOzsKKy8vCW1v dgkJY3I2Nz1yMyAgICAgICAgICAgICAgICAgICAgIC8vIGNyLmVvaQorLy8JbW92CQljcjY4PXI1 ICAgICAgICAgICAgICAgICAgICAgLy8gY3IuaXJyMCBpcyByZWFkIG9ubHkKKy8vCW1vdgkJY3I2 OT1yNzs7ICAgICAgICAgICAgICAgICAgIC8vIGNyLmlycjEgaXMgcmVhZCBvbmx5CisKKwlsZDgJ CXIzPVtyMl0sOCozCisJbGQ4CQlyNT1bcjRdLDgqMworCWxkOAkJcjc9W3I2XSw4KjM7OworLy8J bW92CQljcjcwPXIzICAgICAgICAgICAgICAgICAgICAgLy8gY3IuaXJyMiBpcyByZWFkIG9ubHkK Ky8vCW1vdgkJY3I3MT1yNSAgICAgICAgICAgICAgICAgICAgIC8vIGNyLmlycjMgaXMgcmVhZCBv bmx5CisJbW92CQljcjcyPXI3OzsgICAgICAgICAgICAgICAgICAgLy8gY3IuaXR2CisKKwlsZDgJ CXIzPVtyMl0sOCo3CisJbGQ4CQlyNT1bcjRdLDgqNzs7CisJbW92CQljcjczPXIzICAgICAgICAg ICAgICAgICAgICAgLy8gY3IucG12CisJbW92CQljcjc0PXI1OzsgICAgICAgICAgICAgICAgICAg Ly8gY3IuY21jdgorCisJbGQ4CQlyMz1bcjJdLDgqMjMKKwlsZDgJCXI1PVtyNF0sOCoyMzs7CisJ YWRkcwkJcjI9OCoyMyxyMgorCWFkZHMJCXI0PTgqMjMscjQ7OworLy8JbW92CQljcjgwPXIzICAg ICAgICAgICAgICAgICAgICAgLy8gY3IubHJyMAorLy8JbW92CQljcjgxPXI1ICAgICAgICAgICAg ICAgICAgICAgLy8gY3IubHJyMQogCi0JbGQ4CQlyMz1bcjJdLDE2OzsgICAgICAgICAgICAgLy8g MTYgYnl0ZSBpbmMuCi0vLyAgICAgIG1vdgkJY3I5OD1yMyAgICAgICAgICAgICAgICAgICAgIC8v IGNyLmlycjEgaXMgcmVhZCBvbmx5Ci0KLQlsZDgJCXIzPVtyMl0sMTY7OyAgICAgICAgICAgICAv LyAxNiBieXRlIGluYwotLy8gICAgICBtb3YJCWNyMTAwPXIzICAgICAgICAgICAgICAgICAgICAv LyBjci5pcnIyIGlzIHJlYWQgb25seQotCi0JbGQ4CQlyMz1bcjJdLDE2OzsgICAgICAgICAgICAg Ly8gMTZiIGluYy4KLS8vICAgICAgbW92CQljcjEwMj1yMyAgICAgICAgICAgICAgICAgICAgLy8g Y3IuaXJyMyBpcyByZWFkIG9ubHkKLQotCWxkOAkJcjM9W3IyXSwxNjs7ICAgICAgICAgICAgIC8v IDE2IGJ5dGUgaW5jLgotLy8gICAgICBtb3YJCWNyMTE0PXIzICAgICAgICAgICAgICAgICAgICAv LyBjci5pdHYKLQotCWxkOAkJcjM9W3IyXSw4OzsKLS8vICAgICAgbW92CQljcjExNj1yMyAgICAg ICAgICAgICAgICAgICAgLy8gY3IucG12Ci0JbGQ4CQlyMz1bcjJdLDg7OwotLy8gICAgICBtb3YJ CWNyMTE3PXIzICAgICAgICAgICAgICAgICAgICAvLyBjci5scnIwCi0JbGQ4CQlyMz1bcjJdLDg7 OwotLy8gICAgICBtb3YJCWNyMTE4PXIzICAgICAgICAgICAgICAgICAgICAvLyBjci5scnIxCi0J bGQ4CQlyMz1bcjJdLDgqMTA7OwotLy8gICAgICBtb3YJCWNyMTE5PXIzICAgICAgICAgICAgICAg ICAgICAvLyBjci5jbWN2CisJYWRkcwkJcjI9OCoyLHIyOzsKIAogcmVzdG9yZV9BUnM6CiAJYWRk CQlyND04LHIyICAgICAgICAgICAgICAgICAgLy8gZHVwbGljYXRlIHIyIGluIHI0CkBAIC02NDYs MTAgKzYzOCwxMSBAQAogcmVzdG9yZV9SUnM6CiAJbW92CQlyNT1hci5sYwogCW1vdgkJYXIubGM9 MHgwOC0xCi0JbW92bAkJcjQ9MHgwMAorCW1vdmwJCXI0PTB4MDA7OwogY1N0UlJyOgorCWRlcC56 CQlyNz1yNCw2MSwzCiAJbGQ4CQlyMz1bcjJdLDg7OwotLy8gICAgICBtb3YJCXJyW3I0XT1yMyAg ICAgICAgICAgICAgICAgICAvLyB3aGF0IGFyZSBpdHMgYWNjZXNzIHByZXZpbGVkZ2VzPworCW1v dgkJcnJbcjddPXIzICAgICAgICAgICAgICAgICAgIC8vIHdoYXQgYXJlIGl0cyBhY2Nlc3MgcHJl dmlsZWRnZXM/CiAJYWRkCQlyND0xLHI0CiAJYnIuY2xvb3Auc3B0ay5mZXcJY1N0UlJyCiAJOzsK QEAgLTY2MCw3OSArNjUzLDYgQEAKIAogLy9FbmRTdHViLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi0vLysrCi0v LyBOYW1lOgotLy8JaWE2NF9vc19tY2FfdGxiX2Vycm9yX2NoZWNrKCkKLS8vCi0vLyBTdHViIERl c2NyaXB0aW9uOgotLy8KLS8vCVRoaXMgc3R1YiBjaGVja3MgdG8gc2VlIGlmIHRoZSBNQ0EgcmVz dWx0ZWQgZnJvbSBhIFRMQiBlcnJvcgotLy8KLS8vLS0KLQotaWE2NF9vc19tY2FfdGxiX2Vycm9y X2NoZWNrOgotCi0JLy8gUmV0cmlldmUgc2FsIGRhdGEgc3RydWN0dXJlIGZvciB1bmNvcnJlY3Rl ZCBNQ0EKLQotCS8vIE1ha2UgdGhlIGlhNjRfc2FsX2dldF9zdGF0ZV9pbmZvKCkgY2FsbAotCW1v dmwJcjQ9aWE2NF9tY2Ffc2FsX2RhdGFfYXJlYTs7Ci0JbW92bAlyNz1pYTY0X3NhbDs7Ci0JbW92 CXI2PXIxCQkJLy8gc2F2ZSBncAotCURBVEFfVkFfVE9fUEEocjQpCQkvLyBjb252ZXJ0IHRvIHBo eXNpY2FsIGFkZHJlc3MKLQlEQVRBX1ZBX1RPX1BBKHI3KTs7CQkvLyBjb252ZXJ0IHRvIHBoeXNp Y2FsIGFkZHJlc3MKLQlsZDgJcjc9W3I3XQkJCS8vIGdldCBhZGRyIG9mIHBkZXNjIGZyb20gaWE2 NF9zYWwKLQltb3ZsCXIzPVNBTF9HRVRfU1RBVEVfSU5GTzs7Ci0JREFUQV9WQV9UT19QQShyNyk7 OwkJLy8gY29udmVydCB0byBwaHlzaWNhbCBhZGRyZXNzCi0JbGQ4CXI4PVtyN10sODs7CQkvLyBn ZXQgcGRlc2MgZnVuY3Rpb24gcG9pbnRlcgotCWRlcAlyOD0wLHI4LDYxLDM7OwkJLy8gY29udmVy dCBTQUwgVkEgdG8gUEEKLQlsZDgJcjE9W3I3XTs7CQkvLyBzZXQgbmV3IChpYTY0X3NhbCkgZ3AK LQlkZXAJcjE9MCxyMSw2MSwzOzsJCS8vIGNvbnZlcnQgU0FMIFZBIHRvIFBBCi0JbW92CWI2PXI4 Ci0KLQlhbGxvYwlyNT1hci5wZnMsOCwwLDgsMDs7CS8vIGFsbG9jYXRlIHN0YWNrIGZyYW1lIGZv ciBTQUwgY2FsbAotCW1vdglvdXQwPXIzCQkJLy8gd2hpY2ggU0FMIHByb2MgdG8gY2FsbAotCW1v dglvdXQxPXIwCQkJLy8gZXJyb3IgdHlwZSA9PSBNQ0EKLQltb3YJb3V0Mj1yMAkJCS8vIG51bGwg YXJnCi0JbW92CW91dDM9cjQJCQkvLyBkYXRhIGNvcHkgYXJlYQotCW1vdglvdXQ0PXIwCQkJLy8g bnVsbCBhcmcKLQltb3YJb3V0NT1yMAkJCS8vIG51bGwgYXJnCi0JbW92CW91dDY9cjAJCQkvLyBu dWxsIGFyZwotCW1vdglvdXQ3PXIwOzsJCS8vIG51bGwgYXJnCi0KLQlici5jYWxsLnNwdGsuZmV3 CWIwPWI2OzsKLQotCW1vdglyMT1yNgkJCS8vIHJlc3RvcmUgZ3AKLQltb3YJYXIucGZzPXI1OzsJ CS8vIHJlc3RvcmUgYXIucGZzCi0KLQltb3ZsCXI2PWlhNjRfdGxiX2Z1bmN0aW9uYWw7OwotCURB VEFfVkFfVE9fUEEocjYpCQkvLyBuZWVkZWQgbGF0ZXIKLQotCWNtcC5lcQlwNixwNz1yMCxyODs7 CQkvLyBjaGVjayBTQUwgY2FsbCByZXR1cm4gYWRkcmVzcwotKHA3KQlzdDgJW3I2XT1yMAkJCS8v IGNsZWFyIHRsYl9mdW5jdGlvbmFsIGZsYWcKLShwNykgICAgYnIJdGxiX2ZhaWx1cmUJCS8vIGVy cm9yOyByZXR1cm4gdG8gU0FMCi0KLQkvLyBleGFtaW5lIHByb2Nlc3NvciBlcnJvciBsb2cgZm9y IHR5cGUgb2YgZXJyb3IKLQlhZGQJcjQ9NDArMjQscjQ7OwkJLy8gcGFyc2UgcGFzdCByZWNvcmQg aGVhZGVyIChsZW5ndGg9NDApCi0JCQkJCS8vIGFuZCBzZWN0aW9uIGhlYWRlciAobGVuZ3RoPTI0 KQotCWxkNAlyND1bcjRdCQkJLy8gZ2V0IHZhbGlkIGZpZWxkIG9mIHByb2Nlc3NvciBsb2cKLQlt b3YJcjU9MHhmMDA7OwotCWFuZAlyNT1yNCxyNTs7CQkvLyByZWFkIGJpdHMgOC0xMSBvZiB2YWxp ZCBmaWVsZAotCQkJCQkvLyB0byBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBhIFRMQiBlcnJvcgotCW1v dmwJcjM9MHgxCi0JY21wLmVxCXA2LHA3PXIwLHI1OzsKLQkvLyBpZiBubyBUTEIgZmFpbHVyZSwg c2V0IHRsYl9mdW5jdGlvbmFsIGZsYWcKLShwNikJc3Q4CVtyNl09cjMKLQkvLyBlbHNlIGNsZWFy IGZsYWcKLShwNykJc3Q4CVtyNl09cjAKLQotCS8vIGlmIG5vIFRMQiBmYWlsdXJlLCBjb250aW51 ZSB3aXRoIG5vcm1hbCB2aXJ0dWFsIG1vZGUgbG9nZ2luZwotKHA2KSAgICBicglkb25lX3RsYl9l cnJvcl9jaGVjawotCS8vIGVsc2Ugbm8gcG9pbnQgaW4gZW50ZXJpbmcgdmlydHVhbCBtb2RlIGZv ciBsb2dnaW5nCi10bGJfZmFpbHVyZToKLQliciAgICAgIGlhNjRfb3NfbWNhX3ZpcnR1YWxfZW5k Ci0KLS8vRW5kU3R1Yi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQogCiAvLyBvaywgdGhlIGlzc3VlIGhlcmUgaXMg dGhhdCB3ZSBuZWVkIHRvIHNhdmUgc3RhdGUgaW5mb3JtYXRpb24gc28KIC8vIGl0IGNhbiBiZSB1 c2VhYmxlIGJ5IHRoZSBrZXJuZWwgZGVidWdnZXIgYW5kIHNob3cgcmVncyByb3V0aW5lcy4KZGlm ZiAtTnVyIEEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jIEIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1 cC5jCi0tLSBBL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwlUdWUgTWF5IDI3IDE5OjA3OjQ0IDIw MDMKKysrIEIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCVR1ZSBNYXkgMjcgMTk6MDg6MjUgMjAw MwpAQCAtMjkxLDYgKzI5MSwzNiBAQAogewogCWV4dGVybiB1bnNpZ25lZCBsb25nIGlhNjRfaW9i YXNlOwogCXVuc2lnbmVkIGxvbmcgcGh5c19pb2Jhc2U7CisJaW50CWNwdTsKKyNpZmRlZiBDT05G SUdfSUE2NF9NQ0EKKwlpbnQJaTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0lBNjRfTUNBCisJ LyoKKwkgKiBTYXZlIGluZm9ybWF0aW9uIGZvciBrZXJuZWwgVFIgdmFsdWUgKGxvYWRlZCBpbiBo ZWFkLlMpIGFuZAorCSAqIHBhcnRpYWwgaW5mb3JtYXRpb24gZm9yIHRoZSBzdGFjayBUUiB0b28u CisJICogRG8gdGhpcyBmb3IgYWxsIENQVSdzLCBzaW5jZSB0aGUga2VybmVsIFRSIHZhbHVlIGlz IHRoZQorCSAqIHNhbWUgZm9yIGVhY2guCisJICovCisJZm9yIChjcHUgPSAwOyBjcHUgPCBOUl9D UFVTOyBjcHUrKykgeworCQkvKiBTYXZlIElUUiAmIERUUiBkYXRhIGZvciBrZXJuZWwgY29kZS4g Ki8KKwkJaWE2NF9pdHJfbGlzdChjcHUsIAorCQkJIDB4MDEgfCAweDAyLAorCQkJIElBNjRfVFJf S0VSTkVMLAorCQkJIEtFUk5FTF9TVEFSVCwKKwkJCSAoMSA8PCBLRVJORUxfVFJfUEFHRV9TSElG VCkgfCBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMKSwKKwkJCSBLRVJORUxfVFJfUEFHRV9TSElGVCk7 CisKKwkJLyogc2F2ZSBwYXJ0aWFsIGluZm8gZm9yIHN0YWNrIFRSICovCisJCWlhNjRfaXRyX2xp c3QoY3B1LAorCQkJIDB4MDIsCisJCQkgSUE2NF9UUl9DVVJSRU5UX1NUQUNLLAorCQkJIDAsCisJ CQkgMCwKKwkJCSBJQTY0X0dSQU5VTEVfU0hJRlQpOworCX0KKyNlbmRpZgogCiAJdW53X2luaXQo KTsKIApAQCAtNTg5LDcgKzYxOSw2IEBACiAJbXlfY3B1X2RhdGEgPSBjcHVfZGF0YShzbXBfcHJv Y2Vzc29yX2lkKCkpOwogCW15X2NwdV9kYXRhLT5tbXVfZ2F0aGVycyA9ICZtbXVfZ2F0aGVyc1tz bXBfcHJvY2Vzc29yX2lkKCldOwogI2VuZGlmCi0KIAkvKgogCSAqIFdlIGNhbid0IHBhc3MgImxv Y2FsX2NwdV9kYXRhIiB0byBpZGVudGlmeV9jcHUoKSBiZWNhdXNlIHdlIGhhdmVuJ3QgY2FsbGVk CiAJICogaWE2NF9tbXVfaW5pdCgpIHlldC4gIEFuZCB3ZSBjYW4ndCBjYWxsIGlhNjRfbW11X2lu aXQoKSBmaXJzdCBiZWNhdXNlIGl0CmRpZmYgLU51ciBBL2FyY2gvaWE2NC9tbS9pbml0LmMgQi9h cmNoL2lhNjQvbW0vaW5pdC5jCi0tLSBBL2FyY2gvaWE2NC9tbS9pbml0LmMJVHVlIE1heSAyNyAx OTowNzo0NCAyMDAzCisrKyBCL2FyY2gvaWE2NC9tbS9pbml0LmMJVHVlIE1heSAyNyAxOTowODoz MyAyMDAzCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8YXNtL3NhbC5oPgogI2luY2x1ZGUg PGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9t Y2EuaD4KIAogLyogUmVmZXJlbmNlcyB0byBzZWN0aW9uIGJvdW5kYXJpZXM6ICovCiBleHRlcm4g Y2hhciBfc3RleHQsIF9ldGV4dCwgX2VkYXRhLCBfX2luaXRfYmVnaW4sIF9faW5pdF9lbmQ7CkBA IC0yODIsNiArMjgzLDEwIEBACiB7CiAJdW5zaWduZWQgbG9uZyBwc3IsIHJpZCwgcHRhLCBpbXBs X3ZhX2JpdHM7CiAJZXh0ZXJuIHZvaWQgX19pbml0IHRsYl9pbml0ICh2b2lkKTsKKyNpZmRlZiBD T05GSUdfSUE2NF9NQ0EKKwlpbnQgY3B1OworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfRElTQUJM RV9WSFBUCiAjCWRlZmluZSBWSFBUX0VOQUJMRV9CSVQJMAogI2Vsc2UKQEAgLTMwOSw2ICszMTQs MTcgQEAKIAlpYTY0X3NldF9wc3IocHNyKTsKIAlpYTY0X3NybHpfaSgpOwogCisjaWZkZWYJQ09O RklHX0lBNjRfTUNBCisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCS8qIGluc2VydCB0aGlz IFRSIGludG8gb3VyIGxpc3QgZm9yIE1DQSByZWNvdmVyeSBwdXJwb3NlcyAqLworCWlhNjRfaXRy X2xpc3QoY3B1LAorCQkgMHgwMiwgCisJCSBJQTY0X1RSX1BFUkNQVV9EQVRBLAorCQkgUEVSQ1BV X0FERFIsCisJCSBwdGVfdmFsKG1rX3B0ZV9waHlzKF9fcGEobXlfY3B1X2RhdGEpLCBQQUdFX0tF Uk5FTCkpLAorCQkgUEFHRV9TSElGVCk7CisjZW5kaWYKKwogCS8qCiAJICogQ2hlY2sgaWYgdGhl IHZpcnR1YWxseSBtYXBwZWQgbGluZWFyIHBhZ2UgdGFibGUgKFZNTFBUKSBvdmVybGFwcyB3aXRo IGEgbWFwcGVkCiAJICogYWRkcmVzcyBzcGFjZS4gIFRoZSBJQS02NCBhcmNoaXRlY3R1cmUgZ3Vh cmFudGVlcyB0aGF0IGF0IGxlYXN0IDUwIGJpdHMgb2YKZGlmZiAtTnVyIEEvaW5jbHVkZS9hc20t aWE2NC9rcmVncy5oIEIvaW5jbHVkZS9hc20taWE2NC9rcmVncy5oCi0tLSBBL2luY2x1ZGUvYXNt LWlhNjQva3JlZ3MuaAlUdWUgTWF5IDI3IDE5OjA4OjEwIDIwMDMKKysrIEIvaW5jbHVkZS9hc20t aWE2NC9rcmVncy5oCVR1ZSBNYXkgMjcgMTk6MTE6MDkgMjAwMwpAQCAtMzEsNiArMzEsOCBAQAog I2RlZmluZSBJQTY0X1RSX1BFUkNQVV9EQVRBCTEJLyogZHRyMTogcGVyY3B1IGRhdGEgKi8KICNk ZWZpbmUgSUE2NF9UUl9DVVJSRU5UX1NUQUNLCTIJLyogZHRyMjogbWFwcyBrZXJuZWwncyBtZW1v cnktICYgcmVnaXN0ZXItc3RhY2tzICovCiAKKyNkZWZpbmUgSUE2NF9UUl9NQVhUUgkJMwkvKiBt YXhpdW0gbnVtYmVyIG9mIFRSIHJlZ2lzdGVycy4qLworCiAvKiBQcm9jZXNzb3Igc3RhdHVzIHJl Z2lzdGVyIGJpdHM6ICovCiAjZGVmaW5lIElBNjRfUFNSX0JFX0JJVAkJMQogI2RlZmluZSBJQTY0 X1BTUl9VUF9CSVQJCTIKZGlmZiAtTnVyIEEvaW5jbHVkZS9hc20taWE2NC9tY2EuaCBCL2luY2x1 ZGUvYXNtLWlhNjQvbWNhLmgKLS0tIEEvaW5jbHVkZS9hc20taWE2NC9tY2EuaAlUdWUgTWF5IDI3 IDE5OjA4OjEwIDIwMDMKKysrIEIvaW5jbHVkZS9hc20taWE2NC9tY2EuaAlUdWUgTWF5IDI3IDE5 OjExOjEwIDIwMDMKQEAgLTUsNiArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNv biBHcmFwaGljcywgSW5jLgogICogQ29weXJpZ2h0IChDKSBWaWpheSBDaGFuZGVyICh2aWpheUBl bmdyLnNnaS5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIFNyaW5pdmFzYSBUaGlydW1hbGFjaGFyIChz cHJhc2FkQGVuZ3Iuc2dpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgSmVubmEgSGFsbCAoamVubmEu cy5oYWxsQGludGVsLmNvbSkKICAqLwogCiAjaWZuZGVmIF9BU01fSUE2NF9NQ0FfSApAQCAtMTUs NiArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgogI2luY2x1ZGUgPGFzbS9zYWwuaD4K ICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL21jYV9hc20uaD4KIAog LyogVGhlc2UgYXJlIHRoZSByZXR1cm4gY29kZXMgZnJvbSBhbGwgdGhlIElBNjRfTUNBIHNwZWNp ZmljIGludGVyZmFjZXMgKi8KIHR5cGVkZWYJaW50IGlhNjRfbWNhX3JldHVybl9jb2RlX3Q7CkBA IC01OCw2ICs2MCwxOCBAQAogCUlBNjRfTUNBX1JFTkRFWl9DSEVDS0lOX0RPTkUJPQkweDEKIH07 CiAKKy8qIHRoZSBmb2xsb3dpbmcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSB1c2VkIGZvciBUTEIgZXJy b3IgcmVjb3ZlcnkgcHVycG9zZXMgKi8KK2V4dGVybiBzdHJ1Y3QgaWE2NF9rZXJuZWxfdHJfaW5m byB7CisJdTMyCWlfdmFsaWQ7CS8qIDE9SVRSLCAwPXZvaWQgKi8KKwl1NjQJaV92bWFkZHI7CS8q IHZpcnR1YWwgYWRkcmVzcyBpbiBJVFIgKi8KKwlwdGVfdAlpX3B0ZTsJCS8qIHBoeXNpY2FsIGFk ZHJlc3MgJiBwZXJtaXNzaW9ucyBpbiBJVFIgKi8KKwl1NjQJaV9sb2dfcGdzaXplOwkvKiBwYWdl c2l6ZSA9IDIqKmxvZ19wYWdlc2l6ZSBpbiBJVFIgKi8KKwl1MzIJZF92YWxpZDsJLyogMT1EVFIs IDA9dm9pZCAqLworCXU2NAlkX3ZtYWRkcjsJLyogdmlydHVhbCBhZGRyZXNzIGluIERUUiAqLwor CXB0ZV90CWRfcHRlOwkJLyogcGh5c2ljYWwgYWRkcmVzcyAmIHBlcm1pc3Npb25zIGluIERUUiAq LworCXU2NAlkX2xvZ19wZ3NpemU7CS8qIHBhZ2VzaXplID0gMioqbG9nX3BhZ2VzaXplIGluIERU UiAqLworfSBpYTY0X2tlcm5lbF90cl9saXN0W05SX0NQVVNdW0lBNjRfVFJfTUFYVFJdOworCiAv KiBJbmZvcm1hdGlvbiBtYWludGFpbmVkIGJ5IHRoZSBNQyBpbmZyYXN0cnVjdHVyZSAqLwogdHlw ZWRlZiBzdHJ1Y3QgaWE2NF9tY19pbmZvX3MgewogCXU2NAkJaW1pX21jYV9oYW5kbGVyOwpAQCAt ODksNiArMTAzLDggQEAKIAl1NjQJCWltc3RvX3NhbF9jaGVja19yYTsJLyogUmV0dXJuIGFkZHJl c3MgaW4gU0FMX0NIRUNLIHdoaWxlIGdvaW5nCiAJCQkJCQkgKiBiYWNrIHRvIFNBTCBmcm9tIE9T IGFmdGVyIE1DQSBoYW5kbGluZy4KIAkJCQkJCSAqLworCXU2NAkJKnBhbF9taW5fc3RhdGU7CQkv KiBmcm9tIFBBTCBpbiByMTcgKi8KKwl1NjQJCXByb2Nfc3RhdGVfcGFyYW07CS8qIGZyb20gUEFM IGluIHIxOC4gU2VlIFNEViAyOjI2OCAxMS4zLjIuMSAqLwogfSBpYTY0X21jYV9zYWxfdG9fb3Nf c3RhdGVfdDsKIAogZW51bSB7CkBAIC0xMDMsNyArMTE5LDcgQEAKIAlJQTY0X01DQV9ORVdfQ09O VEVYVAk9CS0xCS8qIFNBTCB0byByZXR1cm4gdG8gbmV3IGNvbnRleHQgKi8KIH07CiAKLSNkZWZp bmUgTUlOX1NUQVRFX0FSRUFfU0laRSAgICAgNTcKKyNkZWZpbmUgTUlOX1NUQVRFX0FSRUFfU0la RSAgICAgNTgKIAogdHlwZWRlZiBzdHJ1Y3QgaWE2NF9tY2Ffb3NfdG9fc2FsX3N0YXRlX3Mgewog CXU2NAkJaW1vdHNfb3Nfc3RhdHVzOwkvKiAgIE9TIHN0YXR1cyB0byBTQUwgYXMgdG8gd2hhdCBo YXBwZW5lZApAQCAtMTM4LDYgKzE1NCwzMSBAQAogZXh0ZXJuIGludCAgaWE2NF9tY2FfY2hlY2tf ZXJyb3JzKHZvaWQpOwogZXh0ZXJuIHU2NCAgaWE2NF9sb2dfZ2V0KGludCwgcHJmdW5jX3QpOwog CisvKgorICogSW5zZXJ0IGEgdHJhbnNsYXRpb24gZW50cnkgaW50byBpYTY0X2tlcm5lbF90cl9s aXN0W11bXSBmb3IgTUNBIHJlY292ZXJhcnkgcHVycG9zZS4KKyAqLworc3RhdGljIHZvaWQKK2lh NjRfaXRyX2xpc3QgKGludCBjcHUsIF9fdTY0IHRhcmdldF9tYXNrLCBfX3U2NCB0cl9udW0sCisJ ICBfX3U2NCB2bWFkZHIsIF9fdTY0IHB0ZSwKKwkgIF9fdTY0IGxvZ19wYWdlX3NpemUpCit7CisJ aWYgKHRhcmdldF9tYXNrICYgMHgxKQorCXsKKwkJaWE2NF9rZXJuZWxfdHJfbGlzdFtjcHVdW3Ry X251bV0uaV92YWxpZD0xOworCQlwdGVfdmFsKGlhNjRfa2VybmVsX3RyX2xpc3RbY3B1XVt0cl9u dW1dLmlfcHRlKT1wdGU7CisJCWlhNjRfa2VybmVsX3RyX2xpc3RbY3B1XVt0cl9udW1dLmlfdm1h ZGRyPXZtYWRkcjsKKwkJaWE2NF9rZXJuZWxfdHJfbGlzdFtjcHVdW3RyX251bV0uaV9sb2dfcGdz aXplPWxvZ19wYWdlX3NpemU7CisJfQorCisJaWYgKHRhcmdldF9tYXNrICYgMHgyKQorCXsKKwkJ aWE2NF9rZXJuZWxfdHJfbGlzdFtjcHVdW3RyX251bV0uZF92YWxpZD0xOworCQlwdGVfdmFsKGlh NjRfa2VybmVsX3RyX2xpc3RbY3B1XVt0cl9udW1dLmRfcHRlKT1wdGU7CisJCWlhNjRfa2VybmVs X3RyX2xpc3RbY3B1XVt0cl9udW1dLmRfdm1hZGRyPXZtYWRkcjsKKwkJaWE2NF9rZXJuZWxfdHJf bGlzdFtjcHVdW3RyX251bV0uZF9sb2dfcGdzaXplPWxvZ19wYWdlX3NpemU7CisJfSAKK30KKwog I2RlZmluZSBQTEFURk9STV9DQUxMKGZuLCBhcmdzKQlwcmludGsoIlBsYXRmb3JtIGNhbGwgVEJE XG4iKQogCiAjZGVmaW5lIHBsYXRmb3JtX21lbV9kZXZfZXJyX3ByaW50IGlhNjRfbG9nX3BydF9v ZW1fZGF0YQo= ------_=_NextPart_001_01C32558.BC0CA6F6--