ZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IGQ3OWU3NWQuLjQ1ZDY1YzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtMTU0OSwxMCArMTU0OSwxMiBAQAogCSAgb3B0aW9uIGFsb25lIQogCiAJY29uZmlnIFZNU1BMSVRfM0cKKwkJZGVwZW5kcyBvbiAhQ09NQ0VSVE9fSFdfS0VSTkVMX1BBR0VUQUJMRQogCQlib29sICIzRy8xRyB1c2VyL2tlcm5lbCBzcGxpdCIKIAljb25maWcgVk1TUExJVF8yRwogCQlib29sICIyRy8yRyB1c2VyL2tlcm5lbCBzcGxpdCIKIAljb25maWcgVk1TUExJVF8xRworCQlkZXBlbmRzIG9uICFDT01DRVJUT19IV19LRVJORUxfUEFHRVRBQkxFCiAJCWJvb2wgIjFHLzNHIHVzZXIva2VybmVsIHNwbGl0IgogZW5kY2hvaWNlCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9naWMuYyBiL2FyY2gvYXJtL2NvbW1vbi9naWMuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGMxMzNmYmEuLjM5OTMwMmUKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2dpYy5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9naWMuYwpAQCAtNDksNyArNDksNiBAQAogCiAvKiBBZGRyZXNzIG9mIEdJQyAwIENQVSBpbnRlcmZhY2UgKi8KIHZvaWQgX19pb21lbSAqZ2ljX2NwdV9iYXNlX2FkZHIgX19yZWFkX21vc3RseTsKLQogLyoKICAqIFN1cHBvcnRlZCBhcmNoIHNwZWNpZmljIEdJQyBpcnEgZXh0ZW5zaW9uLgogICogRGVmYXVsdCBtYWtlIHRoZW0gTlVMTC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYzJrYXNpY19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Mya2FzaWNfZGVmY29uZmlnCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYzJrZXZtX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYzJrZXZtX2RlZmNvbmZpZwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2Mya2x2X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYzJrbHZfZGVmY29uZmlnCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYzJrcnRzbV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Mya3J0c21fZGVmY29uZmlnCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXRvbWljLmgKaW5kZXggODY5NzZkMC4uMjkzZmFiZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXRvbWljLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTI5LDYgKzI5LDI3IEBACiAKICNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNgogCisjaWZkZWYgQ09ORklHX0NPTUNFUlRPX1pPTkVfRE1BX05DTkIKKworaW50IGNvbWNlcnRvX2F0b21pY19hZGQoaW50IGksIGF0b21pY190ICp2KTsKK2ludCBjb21jZXJ0b19hdG9taWNfY21weGNoZyhhdG9taWNfdCAqdiwgaW50IG9sZCwgaW50IG5ldyk7Cit2b2lkIGNvbWNlcnRvX2F0b21pY19jbGVhcl9tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyAqYWRkcik7CisKKworc3RydWN0IHZpcnR1YWxfem9uZSB7CisJdm9pZCAqc3RhcnQ7CisJdm9pZCAqZW5kOworfTsKKworZXh0ZXJuIHN0cnVjdCB2aXJ0dWFsX3pvbmUgYXJtX2RtYV96b25lOworCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfZG1hX3pvbmVfdmlydHVhbF9hZGRyZXNzKHZvaWQgKmFkZHIpCit7CisJcmV0dXJuICgoYWRkciA8IGFybV9kbWFfem9uZS5lbmQpICYmIChhZGRyID49IGFybV9kbWFfem9uZS5zdGFydCkpOworfQorCisjZW5kaWYKKwogLyoKICAqIEFSTXY2IFVQIGFuZCBTTVAgc2FmZSBhdG9taWMgb3BzLiAgV2UgdXNlIGxvYWQgZXhjbHVzaXZlIGFuZAogICogc3RvcmUgZXhjbHVzaXZlIHRvIGVuc3VyZSB0aGF0IHRoZXNlIGFyZSBhdG9taWMuICBXZSBtYXkgbG9vcApAQCAtMzksNiArNjAsMTMgQEAKIAl1bnNpZ25lZCBsb25nIHRtcDsKIAlpbnQgcmVzdWx0OwogCisjaWZkZWYgQ09ORklHX0NPTUNFUlRPX1pPTkVfRE1BX05DTkIKKwlpZiAodW5saWtlbHkoaXNfZG1hX3pvbmVfdmlydHVhbF9hZGRyZXNzKHYpKSkgeworCQljb21jZXJ0b19hdG9taWNfYWRkKGksIHYpOworCQlyZXR1cm47CisJfQorI2VuZGlmCisKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiQCBhdG9taWNfYWRkXG4iCiAiMToJbGRyZXgJJTAsIFslM11cbiIKICIJYWRkCSUwLCAlMCwgJTRcbiIKQEAgLTU1LDYgKzgzLDExIEBACiAJdW5zaWduZWQgbG9uZyB0bXA7CiAJaW50IHJlc3VsdDsKIAorI2lmZGVmIENPTkZJR19DT01DRVJUT19aT05FX0RNQV9OQ05CCisJaWYgKHVubGlrZWx5KGlzX2RtYV96b25lX3ZpcnR1YWxfYWRkcmVzcyh2KSkpCisJCXJldHVybiBjb21jZXJ0b19hdG9taWNfYWRkKGksIHYpOworI2VuZGlmCisKIAlzbXBfbWIoKTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pY19hZGRfcmV0dXJuXG4iCkBAIC03Nyw2ICsxMTAsMTMgQEAKIAl1bnNpZ25lZCBsb25nIHRtcDsKIAlpbnQgcmVzdWx0OwogCisjaWZkZWYgQ09ORklHX0NPTUNFUlRPX1pPTkVfRE1BX05DTkIKKwlpZiAodW5saWtlbHkoaXNfZG1hX3pvbmVfdmlydHVhbF9hZGRyZXNzKHYpKSkgeworCQljb21jZXJ0b19hdG9taWNfYWRkKC1pLCB2KTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIkAgYXRvbWljX3N1YlxuIgogIjE6CWxkcmV4CSUwLCBbJTNdXG4iCiAiCXN1YgklMCwgJTAsICU0XG4iCkBAIC05Myw2ICsxMzMsMTEgQEAKIAl1bnNpZ25lZCBsb25nIHRtcDsKIAlpbnQgcmVzdWx0OwogCisjaWZkZWYgQ09ORklHX0NPTUNFUlRPX1pPTkVfRE1BX05DTkIKKwlpZiAodW5saWtlbHkoaXNfZG1hX3pvbmVfdmlydHVhbF9hZGRyZXNzKHYpKSkKKwkJcmV0dXJuIGNvbWNlcnRvX2F0b21pY19hZGQoLWksIHYpOworI2VuZGlmCisKIAlzbXBfbWIoKTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pY19zdWJfcmV0dXJuXG4iCkBAIC0xMTQsNiArMTU5LDExIEBACiB7CiAJdW5zaWduZWQgbG9uZyBvbGR2YWwsIHJlczsKIAorI2lmZGVmIENPTkZJR19DT01DRVJUT19aT05FX0RNQV9OQ05CCisJaWYgKHVubGlrZWx5KGlzX2RtYV96b25lX3ZpcnR1YWxfYWRkcmVzcyhwdHIpKSkKKwkJcmV0dXJuIGNvbWNlcnRvX2F0b21pY19jbXB4Y2hnKHB0ciwgb2xkLCBuZXcpOworI2VuZGlmCisKIAlzbXBfbWIoKTsKIAogCWRvIHsKQEAgLTEzNiw2ICsxODYsMTMgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHRtcCwgdG1wMjsKIAorI2lmZGVmIENPTkZJR19DT01DRVJUT19aT05FX0RNQV9OQ05CCisJaWYgKHVubGlrZWx5KGlzX2RtYV96b25lX3ZpcnR1YWxfYWRkcmVzcyhhZGRyKSkpIHsKKwkJYXRvbWljX2NsZWFyX21hc2sobWFzaywgYWRkcik7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKwogCV9fYXNtX18gX192b2xhdGlsZV9fKCJAIGF0b21pY19jbGVhcl9tYXNrXG4iCiAiMToJbGRyZXgJJTAsIFslM11cbiIKICIJYmljCSUwLCAlMCwgJTRcbiIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VudHJ5LW1hY3JvLW11bHRpLlMgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbnRyeS1tYWNyby1tdWx0aS5TCmluZGV4IDg4ZDYxODEuLmY2NTQ2YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VudHJ5LW1hY3JvLW11bHRpLlMKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZW50cnktbWFjcm8tbXVsdGkuUwpAQCAtNCw4ICs0LDggQEAKICAqIEludGVycnVwdCBoYW5kbGluZy4gIFByZXNlcnZlcyByNywgcjgsIHI5CiAgKi8KIAkubWFjcm8JYXJjaF9pcnFfaGFuZGxlcl9kZWZhdWx0Ci0JZ2V0X2lycW5yX3ByZWFtYmxlIHI2LCBscgotMToJZ2V0X2lycW5yX2FuZF9iYXNlIHIwLCByMiwgcjYsIGxyCisJZ2V0X2lycW5yX3ByZWFtYmxlIHI2LCByMywgbHIKKzE6CWdldF9pcnFucl9hbmRfYmFzZSByMCwgcjIsIHI2LCByMywgbHIKIAltb3ZuZQlyMSwgc3AKIAlACiAJQCByb3V0aW5lIGNhbGxlZCB3aXRoIHIwID0gaXJxIG51bWJlciwgcjEgPSBzdHJ1Y3QgcHRfcmVncyAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCmluZGV4IGJiYWU5MTkuLmFjOWZhOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCkBAIC0xMyw3ICsxMyw3IEBACiAgKiAweGZmZmUwMDAwIGFuZCAweGZmZmVmZmZmLgogICovCiAKLSNkZWZpbmUgRklYQUREUl9TVEFSVAkJMHhmZmYwMDAwMFVMCisjZGVmaW5lIEZJWEFERFJfU1RBUlQJCTB4ZmZmMzAwMDBVTAogI2RlZmluZSBGSVhBRERSX1RPUAkJMHhmZmZlMDAwMFVMCiAjZGVmaW5lIEZJWEFERFJfU0laRQkJKEZJWEFERFJfVE9QIC0gRklYQUREUl9TVEFSVCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS1wcm9jLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLXByb2MuaAppbmRleCBlMmJlN2YxLi42ZTk0ODI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLXByb2MuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLXByb2MuaApAQCAtMjU2LDYgKzI1Niw3IEBACiAjZGVmaW5lIGNwdV9kY2FjaGVfY2xlYW5fYXJlYQkJX19nbHVlKENQVV9OQU1FLF9kY2FjaGVfY2xlYW5fYXJlYSkKICNkZWZpbmUgY3B1X2RvX3N3aXRjaF9tbQkJX19nbHVlKENQVV9OQU1FLF9zd2l0Y2hfbW0pCiAjZGVmaW5lIGNwdV9zZXRfcHRlX2V4dAkJCV9fZ2x1ZShDUFVfTkFNRSxfc2V0X3B0ZV9leHQpCisjZGVmaW5lIGNwdV91bmNhY2hlX3B0ZV9leHQJCV9fZ2x1ZShDUFVfTkFNRSxfdW5jYWNoZV9wdGVfZXh0KQogI2RlZmluZSBjcHVfc3VzcGVuZF9zaXplCQlfX2dsdWUoQ1BVX05BTUUsX3N1c3BlbmRfc2l6ZSkKICNkZWZpbmUgY3B1X2RvX3N1c3BlbmQJCQlfX2dsdWUoQ1BVX05BTUUsX2RvX3N1c3BlbmQpCiAjZGVmaW5lIGNwdV9kb19yZXN1bWUJCQlfX2dsdWUoQ1BVX05BTUUsX2RvX3Jlc3VtZSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmRpcnEuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmRpcnEuaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9lbnRyeS1tYWNyby1naWMuUyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2VudHJ5LW1hY3JvLWdpYy5TCmluZGV4IGM1YmE5OGEuLjU2ZGFhMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2VudHJ5LW1hY3JvLWdpYy5TCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2VudHJ5LW1hY3JvLWdpYy5TCkBAIC0xMSw3ICsxMSw3IEBACiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dpYy5oPgogCiAjaWZuZGVmIEhBVkVfR0VUX0lSUU5SX1BSRUFNQkxFCi0JLm1hY3JvCWdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJLm1hY3JvCWdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgcGVuZGluZ19pbnRyLCB0bXAKIAlsZHIJXGJhc2UsID1naWNfY3B1X2Jhc2VfYWRkcgogCWxkcglcYmFzZSwgW1xiYXNlXQogCS5lbmRtCkBAIC0zMiw3ICszMiw3IEBACiAgKiB2YWxpZCByYW5nZSBmb3IgYW4gSVJRICgzMC0xMDIwIGluY2x1c2l2ZSkuCiAgKi8KIAotCS5tYWNybyAgZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisJLm1hY3JvICBnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCBwZW5kaW5nX2ludHIsIHRtcAogCiAjaWZkZWYgQ09ORklHX0NPTUNFUlRPX01TUAogCWxkciAgICAgXGlycXN0YXQsIFtcYmFzZSwgI0dJQ19DUFVfSElHSFBSSV0KQEAgLTUzLDggKzUzLDMxIEBACiAJbGRyICAgICBcaXJxc3RhdCwgW1xiYXNlLCAjR0lDX0NQVV9JTlRBQ0tdCiAJLyogYml0cyAxMi0xMCA9IHNyYyBDUFUsIDktMCA9IGludCAjICovCiAKLQlsZHIJXHRtcCwgPTEwMjEKIAliaWMgICAgIFxpcnFuciwgXGlycXN0YXQsICMweDFjMDAKKwkKKyNpZmRlZiBDT05GSUdfQ09NQ0VSVE9fTVNQCisJY21wICAgICBcaXJxbnIsICMzMworCXN0cmVxCVxpcnFzdGF0LCBbXGJhc2UsICNHSUNfQ1BVX0VPSV0KKwlsZHJlcQlcdG1wLCA9MHgyCS8vMiBvbiBiaXQxCisJbGRyZXEJXHBlbmRpbmdfaW50ciwgPUNPTUNFUlRPX0RJU1RSX0lOVF9TRVRfUEVORElOR19PRkZTRVRfNAorCXN0cmVxCVx0bXAsIFtccGVuZGluZ19pbnRyXQorCWJlcQkxMDAyZgorCisJY21wbmUgICBcaXJxbnIsICM2NgorCXN0cmVxCVxpcnFzdGF0LCBbXGJhc2UsICNHSUNfQ1BVX0VPSV0KKwlsZHJlcQlcdG1wLCA9MHg0CS8vNCBvbiBiaXQgMgorCWxkcmVxCVxwZW5kaW5nX2ludHIsID1DT01DRVJUT19ESVNUUl9JTlRfU0VUX1BFTkRJTkdfT0ZGU0VUXzgKKwlzdHJlcQlcdG1wLCBbXHBlbmRpbmdfaW50cl0KKwliZXEJMTAwMmYKKworCWNtcG5lICAgXGlycW5yLCAjODcKKwlzdHJlcQlcaXJxc3RhdCwgW1xiYXNlLCAjR0lDX0NQVV9FT0ldCisJbGRyZXEJXHRtcCwgPTB4ODAwMDAwCS8vMHg4MDAwMDAgb24gYml0IDIzCisJbGRyZXEJXHBlbmRpbmdfaW50ciwgPUNPTUNFUlRPX0RJU1RSX0lOVF9TRVRfUEVORElOR19PRkZTRVRfOAorCXN0cmVxCVx0bXAsIFtccGVuZGluZ19pbnRyXQorCWJlcQkxMDAyZgorI2VuZGlmIC8qIENPTkZJR19DT01DRVJUT19NU1AgKi8KKwlsZHIJXHRtcCwgPTEwMjEKIAljbXAgICAgIFxpcnFuciwgIzE1CiAJY21wY2MJXGlycW5yLCBcaXJxbnIKIAljbXBuZQlcaXJxbnIsIFx0bXAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2dpYy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvZ2ljLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbG9jYWx0aW1lci5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbG9jYWx0aW1lci5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA4YjkzYzAyLi5lZjMzM2RiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yNTAsNiArMjUwLDcgQEAKICNkZWZpbmUgbWtfcHRlKHBhZ2UscHJvdCkJcGZuX3B0ZShwYWdlX3RvX3BmbihwYWdlKSwgcHJvdCkKIAogI2RlZmluZSBzZXRfcHRlX2V4dChwdGVwLHB0ZSxleHQpIGNwdV9zZXRfcHRlX2V4dChwdGVwLHB0ZV92YWwocHRlKSxleHQpCisjZGVmaW5lIHVuY2FjaGVfcHRlX2V4dChwdGVwKSBjcHVfdW5jYWNoZV9wdGVfZXh0KHB0ZXApCiAjZGVmaW5lIHB0ZV9jbGVhcihtbSxhZGRyLHB0ZXApCWRvIHtfX3N5bmNfb3V0ZXJfY2FjaGUocHRlcCwgX19wdGUoMCkpOyBzZXRfcHRlX2V4dChwdGVwLCBfX3B0ZSgwKSwgMCk7IH0gd2hpbGUgKDApCiAKICNpZiAhZGVmaW5lZChDT05GSUdfTDJYMF9JTlNUUlVDVElPTl9PTkxZKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvYy1mbnMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Byb2MtZm5zLmgKaW5kZXggYjljOTExYy4uYmJiMWQ5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvYy1mbnMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jLWZucy5oCkBAIC04MCw2ICs4MCw3IEBACiBleHRlcm4gdm9pZCBjcHVfZGNhY2hlX2NsZWFuX2FyZWEodm9pZCAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgY3B1X2RvX3N3aXRjaF9tbSh1bnNpZ25lZCBsb25nIHBnZF9waHlzLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiBleHRlcm4gdm9pZCBjcHVfc2V0X3B0ZV9leHQocHRlX3QgKnB0ZXAsIHB0ZXZhbF90IHB0ZSwgdW5zaWduZWQgaW50IGV4dCk7CitleHRlcm4gdm9pZCBjcHVfdW5jYWNoZV9wdGVfZXh0KHB0ZV90ICpwdGVwKTsKIGV4dGVybiB2b2lkIGNwdV9yZXNldCh1bnNpZ25lZCBsb25nIGFkZHIpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CiAKIC8qIFRoZXNlIHRocmVlIGFyZSBwcml2YXRlIHRvIGFyY2gvYXJtL2tlcm5lbC9zdXNwZW5kLmMgKi8KQEAgLTkyLDYgKzkzLDcgQEAKICNkZWZpbmUgY3B1X2RvX2lkbGUJCQlwcm9jZXNzb3IuX2RvX2lkbGUKICNkZWZpbmUgY3B1X2RjYWNoZV9jbGVhbl9hcmVhCQlwcm9jZXNzb3IuZGNhY2hlX2NsZWFuX2FyZWEKICNkZWZpbmUgY3B1X3NldF9wdGVfZXh0CQkJcHJvY2Vzc29yLnNldF9wdGVfZXh0CisjZGVmaW5lIGNwdV91bmNhY2hlX3B0ZV9leHQJCXByb2Nlc3Nvci51bmNhY2hlX3B0ZV9leHQKICNkZWZpbmUgY3B1X2RvX3N3aXRjaF9tbQkJcHJvY2Vzc29yLnN3aXRjaF9tbQogCiAvKiBUaGVzZSB0aHJlZSBhcmUgcHJpdmF0ZSB0byBhcmNoL2FybS9rZXJuZWwvc3VzcGVuZC5jICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zbXBfdHdkLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zbXBfdHdkLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NtcC5jIGIvYXJjaC9hcm0va2VybmVsL3NtcC5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMgYi9hcmNoL2FybS9rZXJuZWwvc21wX3R3ZC5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9NYWtlZmlsZSBiL2FyY2gvYXJtL2xpYi9NYWtlZmlsZQppbmRleCBjZjczYTdmLi43YzY5ZGViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbGliL01ha2VmaWxlCkBAIC00Miw2ICs0Miw3IEBACiAKIGxpYi0kKENPTkZJR19BUkNIX1JQQykJCSs9IGVjYXJkLm8gaW8tYWNvcm4ubyBmbG9wcHlkbWEubwogbGliLSQoQ09ORklHX0FSQ0hfU0hBUkspCSs9IGlvLXNoYXJrLm8KK2xpYi0kKENPTkZJR19DT01DRVJUT19aT05FX0RNQV9OQ05CKSArPSBhdG9taWMubwogCiAkKG9iaikvY3N1bXBhcnRpYWxjb3B5Lm86CSQob2JqKS9jc3VtcGFydGlhbGNvcHlnZW5lcmljLlMKICQob2JqKS9jc3VtcGFydGlhbGNvcHl1c2VyLm86CSQob2JqKS9jc3VtcGFydGlhbGNvcHlnZW5lcmljLlMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9hdG9taWMuYyBiL2FyY2gvYXJtL2xpYi9hdG9taWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDYwZDAwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbGliL2F0b21pYy5jCkBAIC0wLDAgKzEsNDggQEAKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soYXRvbWljX2xvY2spOworCitzdHJ1Y3QgdmlydHVhbF96b25lIGFybV9kbWFfem9uZTsgLyogaW5pdGlhbGl6ZWQgaW4gYXJjaC9hcm0vbW0vbW11LmM6Om1hcF9sb3dtZW0oKSAqLworRVhQT1JUX1NZTUJPTChhcm1fZG1hX3pvbmUpOworCitpbnQgY29tY2VydG9fYXRvbWljX2FkZChpbnQgaSwgYXRvbWljX3QgKnYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzdWx0OworCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhdG9taWNfbG9jaywgZmxhZ3MpOworCXYtPmNvdW50ZXIgKz0gaTsKKwlyZXN1bHQgPSB2LT5jb3VudGVyOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdG9taWNfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0woY29tY2VydG9fYXRvbWljX2FkZCk7CisKK2ludCBjb21jZXJ0b19hdG9taWNfY21weGNoZyhhdG9taWNfdCAqdiwgaW50IG9sZCwgaW50IG5ldykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXN1bHQ7CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmF0b21pY19sb2NrLCBmbGFncyk7CisJcmVzdWx0ID0gdi0+Y291bnRlcjsKKwlpZiAobGlrZWx5KHJlc3VsdCA9PSBvbGQpKQorCQl2LT5jb3VudGVyID0gbmV3OworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdG9taWNfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0woY29tY2VydG9fYXRvbWljX2NtcHhjaGcpOworCit2b2lkIGNvbWNlcnRvX2F0b21pY19jbGVhcl9tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhdG9taWNfbG9jaywgZmxhZ3MpOworCSphZGRyICY9IH5tYXNrOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdG9taWNfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChjb21jZXJ0b19hdG9taWNfY2xlYXJfbWFzayk7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY29tY2VydG8vS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtY29tY2VydG8vS2NvbmZpZwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGM3NmRmZjQuLjA3NWZiODYKLS0tIGEvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtY29tY2VydG8vS2NvbmZpZwpAQCAtNzksNiArNzksMzAgQEAKIAkgIFNheSBZIGlmIHlvdSBpbnRlbmQgdG8gdXNlIHRoZSBDb21jZXJ0byBURE0gYW5kIGJlIGFibGUgdG8gY2hhbmdlCiAJICBkaWZmZXJlbnQgcGFyYW1ldGVycyB0aHJvdWdoIHN5c2ZzLgogCitjb25maWcgQ09NQ0VSVE9fQ1NZU19UUElfQ0xPQ0sKKyAgICAgICAgYm9vbCAiQ29tY2VydG8gZGV2aWNlIFRQSSBhbmQgQ1NZUyBjbG9jayBjb250cm9sICIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBTYXkgWSBpZiB5b3UgaW50ZW5kIHRvIHVzZSB0aGUgQ29tY2VydG8gVFBJIChDb3J0ZXggQTkgSlRBRyBpbnRlcmZhY2UpIGFuZCBDU1lTIGNsb2NrIChDb3J0ZXggQTkgQ29yZVNpZ2h0IG1vZHVsZSkuCisKK2NvbmZpZyBDT01DRVJUT19QQ0lFX09DQ19DTE9DSworICAgICAgICBib29sICJDb21jZXJ0byBkZXZpY2UgUENJRSBPQ0MgY2xvY2sgY29udHJvbCAiCisJZGVmYXVsdCBuCisJaGVscAorCSAgU2F5IFkgaWYgeW91IGludGVuZCB0byB1c2UgdGhlIENvbWNlcnRvIFBDSUUgT0NDIGNsb2NrLgorCitjb25maWcgQ09NQ0VSVE9fU0FUQV9PQ0NfQ0xPQ0sKKyAgICAgICAgYm9vbCAiQ29tY2VydG8gZGV2aWNlIFNBVEEgT0NDIGNsb2NrIGNvbnRyb2wgIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFNheSBZIGlmIHlvdSBpbnRlbmQgdG8gdXNlIHRoZSBDb21jZXJ0byBTQVRBIE9DQyBjbG9jay4KKworY29uZmlnIENPTUNFUlRPX1NHTUlJX09DQ19DTE9DSworICAgICAgICBib29sICJDb21jZXJ0byBkZXZpY2UgU0dNSUkgT0NDIGNsb2NrIGNvbnRyb2wgIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFNheSBZIGlmIHlvdSBpbnRlbmQgdG8gdXNlIHRoZSBDb21jZXJ0byBTR01JSSBPQ0MgY2xvY2suCisKIGNvbmZpZyBDT01DRVJUT19NRU1CVUYKIAlib29sICJDb21jZXJ0byBtZW1vcnkgYnVmZmVyIGRyaXZlciIKIAlkZWZhdWx0IG4KQEAgLTE4MSw2ICsyMDUsMTEgQEAKIAlzZWxlY3QgWk9ORV9ETUEKIAlkZWZhdWx0IG4KIAorY29uZmlnIENPTUNFUlRPX0NVU1RPTV9TS0JfTEFZT1VUCisJYm9vbCAiTWluZHNwZWVkIGN1c3RvbWl6ZWQgc2tiIGxheW91dCwgdG8gcmVkdWNlIE5DTkIgYWNjZXNzIG92ZXJoZWFkLCB3aGVuIE5DTkIgYnVmZmVyIGlzIHVzZWQgaW4gc2tiIgorCWRlcGVuZHMgb24gQ09NQ0VSVE9fWk9ORV9ETUFfTkNOQgorCWRlZmF1bHQgbgorCiBjb25maWcgRFNQR19ERUNUX0NTUwogCWJvb2wgIkRTUEcgREVDVCBDU1MiCiAJZGVmYXVsdCBuCkBAIC0yMTgsNSArMjQ3LDM3IEBACiAJaGVscAogCSAgQ29tcGlsZSB0aGUga2VybmVsIHdpdGggLU8zIGluc3RlYWQgb2YgLU8yIG9wdGlvbi4gUmVzdWx0aW5nIGtlcm5lbCBjYW4gYmUgYSBiaXQgZmFzdGVyLCBidXQKIAkgIGl0IHdpbGwgYWxzbyBiZSBiaWdnZXIuCisKK2NvbmZpZyBDT01DRVJUT19IV19LRVJORUxfUEFHRVRBQkxFCisJYm9vbCAiVXNlIHRoZSAybmQgSFcgcGFnZSB0YWJsZSBmb3Iga2VybmVsIG1lbW9yeSBzcGFjZSIKKwlzZWxlY3QgVk1TUExJVF8yRworCWRlZmF1bHQgbgorCWhlbHAKKwkgIEJ5IGRlZmF1bHQsIExpbnV4IHVzZXMgb25seSBvbmUgcGFnZSB0YWJsZSBhdCBhIHRpbWUsIGFuZCBzd2l0Y2hlcyBwYWdlIHRhYmxlcyB3aGVuIHN3aXRjaGluZworCSAgYmV0d2VlbiBwcm9jZXNzZXMuIFNheSBZIHRvIGVuYWJsZSB0aGUgMm5kIGhhcmR3YXJlIHBhZ2UgdGFibGUsIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBtYXAga2VybmVsCisJICBhZGRyZXNzZXMuCisJICBOb3RlIHRoYXQgYmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBBUk0gTU1VIGRldGVybWluZXMgd2hpY2ggcGFnZSB0YWJsZSB0byB1c2UsIHRoaXMgb3B0aW9uIGNhbgorCSAgb25seSBiZSBlbmFibGVkIHdpdGggYSAyRy8yRyB1c2Vyc3BhY2Uva2VybmVsIG1lbW9yeSBzcGxpdC4KKworY29uZmlnIENPTUNFUlRPX1VOQ0FDSEVEX0RNQQorCWJvb2wgIk1ha2UgcGFnZXMgdW5jYWNoZWFibGUgd2hlbiBkb2luZyBETUEgb3BlcmF0aW9ucyIKKwlkZXBlbmRzIG9uIENPTUNFUlRPX0hXX0tFUk5FTF9QQUdFVEFCTEUKKwlkZWZhdWx0IG4KKwloZWxwCisJICBXaGVuIHRyYW5zZmVycmluZyBvd25lcnNoaXAgb2YgYSBwYWdlIHRvIGEgZGV2aWNlIHRocm91Z2ggdGhlIERNQSBBUEksIG1ha2UgdGhlIHBhZ2UgdW5jYWNoZWFibGUKKwkgIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHRyYW5zZmVyLiBUaGlzIG1ha2VzIHRoZSAybmQgY2FjaGUgaW52YWxpZGF0ZSAodGhhdCB3YXMgbmVlZGVkIGJlY2F1c2UKKwkgIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzcGVjdWxhdGl2ZSBhY2Nlc3NlcyBieSB0aGUgQTkgY29yZXMpIHVubmVjZXNzYXJ5LCB3aGljaCBjYW4gaW5jcmVhc2UKKwkgIHBlcmZvcm1hbmNlIGR1cmluZyBoZWF2eSBJTyB3b3JrbG9hZHMuIFRoZSBwYWdlIHRhYmxlcyB3aWxsIGJlIG1vcmUgY29tcGxleCB0aG91Z2gsIHJlc3VsdGluZyBpbgorCSAgbW9yZSBUTEIgbWlzc2VzIHdoZW4gYSBETUEgdHJhbnNmZXIgaXMgZ29pbmcgb24uCisKK2NvbmZpZyBDT01DRVJUT19TUExJQ0VfUkVBRF9OT0NPTlRJRworCWJvb2wgIlVzZSBmaW5kX2dldF9wYWdlcyBpbiBzcGxpY2UgcmVhZCBjb2RlIgorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoZSBzcGxpY2UgcmVhZCBjb2RlIG5vcm1hbGx5IGNhbGxzIGZpbmRfZ2V0X3BhZ2VzX2NvbnRpZyB0byByZXRyaWV2ZSBwYWdlcyBtYXBwaW5nIHRoZSByZXF1ZXN0ZWQKKwkgIHBvcnRpb24gb2YgdGhlIGZpbGUgdG8gcmVhZC4gSG93ZXZlciwgdXNpbmcgZmluZF9nZXRfcGFnZXMgd29ya3MganVzdCBhcyB3ZWxsLCBhcyB0aGUgc3BsaWNlIGNvZGUKKwkgIGlzIGFibGUgdG8gaGFuZGxlIGJvdGggc2l0dWF0aW9ucy4KKwkgIFNheSBZIHRvIHVzZSBmaW5kX2dldF9wYWdlcyBpbnN0ZWFkIG9mIGZpbmRfZ2V0X3BhZ2VzX2NvbnRpZywgd2hpY2ggc2VlbXMgdG8geWllbGQgYSBzaWduaWZpY2FudAorCSAgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgaW4gU2FtYmEgcmVhZCB0ZXN0cy4KIGVuZG1lbnUKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9NYWtlZmlsZQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDY2NWU3MjkuLmQ2MTBjMDIKLS0tIGEvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL01ha2VmaWxlCkBAIC0xMCw2ICsxMCw3IEBACiBvYmotIDo9CiAKIG9iai0kKENPTkZJR19BUkNIX004NlhYWCkgCQkgICAgCSs9IGNvbWNlcnRvLTIwMDAubworb2JqLSQoQ09ORklHX0FSQ0hfTTg2WFhYKSAJCSAgICAJKz0gY29tY2VydG8tdndkLm8KIAogb2JqLSQoQ09ORklHX0FSQ0hfTTg2WFhYKSAgICAgICAgICAgICAgIAkrPSBzZXJkZXMtYzIwMDAubwogCkBAIC0yNCw0ICsyNSw1IEBACiBvYmotJChDT05GSUdfQzJLX0FTSUMpIAkJCQkrPSBib2FyZC1jMmthc2ljLm8KIG9iai0kKENPTkZJR19TTVApCQkJCSs9IHBsYXRzbXAubyBoZWFkc21wLm8KIG9iai0kKENPTkZJR19DT01DRVJUT19NU1ApCQkJKz0gbXNwLwotb2JqLSQoQ09ORklHX0hPVFBMVUdfQ1BVKSAgICAgICAgICAgICAgIAkrPSBob3RwbHVnLm8KK29iai0kKENPTkZJR19IT1RQTFVHX0NQVSkJCQkrPSBob3RwbHVnLm8KK29iai0kKENPTkZJR19DT01DRVJUT19DU1lTX1RQSV9DTE9DSykJCSs9IGNvbWNlcnRvLXRwaWNzeXMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9ib2FyZC1jMmthc2ljLmMgYi9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2JvYXJkLWMya2FzaWMuYwppbmRleCAwYjczMjlkLi41ZTZkNzI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2JvYXJkLWMya2FzaWMuYworKysgYi9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2JvYXJkLWMya2FzaWMuYwpAQCAtMjQyLDExICsyNDIsMjIgQEAKIAlpbnQgZHVtbXk7CiB9OwogCitzdHJ1Y3Qgc3BpX2NvbnRyb2xsZXJfZGF0YSB7CisgICAgICAgIHU4IHBvbGxfbW9kZTsgICAvKiAwIGZvciBjb250b2xsZXIgcG9sbGluZyBtb2RlICovCisgICAgICAgIHU4IHR5cGU7ICAgICAgICAvKiBTUEkvU1NQL01pY3J3aXJlICovCisgICAgICAgIHU4IGVuYWJsZV9kbWE7CisgICAgICAgIHZvaWQgKCpjc19jb250cm9sKSh1MzIgY29tbWFuZCk7Cit9OworCiBzdHJ1Y3Qgc3BpX3BsYXRmb3JtX2RhdGEgc3BpX3BkYXRhID0gewogCS50eXBlID0gMCwKIAkuZHVtbXkgPSAwLAogfTsKIAorc3RydWN0IHNwaV9jb250cm9sbGVyX2RhdGEgc3BpX2N0cmxfZGF0YSA9ICB7CisgICAgICAgIC5wb2xsX21vZGUgPSAxLAorfTsKKwogc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBjb21jZXJ0b19zcGlfYm9hcmRfaW5mb1tdID0gewogCXsKIAkJLyogRklYTUU6IGZvciBjaGlwc2VsZWN0LTAgKi8KQEAgLTI1Nyw2ICsyNjgsNyBAQAogCQkuaXJxID0gLTEsCiAJCS5tb2RlID0gU1BJX01PREVfMywKIAkJLnBsYXRmb3JtX2RhdGEgPSAmc3BpX3BkYXRhLAorICAgICAgICAgICAgICAgIC5jb250cm9sbGVyX2RhdGEgPSAmc3BpX2N0cmxfZGF0YSwKIAl9LAogCiAJewpAQCAtMjY4LDYgKzI4MCw3IEBACiAJCS5pcnEgPSAtMSwKIAkJLm1vZGUgPSBTUElfTU9ERV8zLAogCQkucGxhdGZvcm1fZGF0YSA9ICZzcGlfcGRhdGEsCisgICAgICAgICAgICAgICAgLmNvbnRyb2xsZXJfZGF0YSA9ICZzcGlfY3RybF9kYXRhLAogCX0sCiAKIAl7CkBAIC0yNzgsNiArMjkxLDcgQEAKIAkJLmlycSA9IC0xLAogCQkubW9kZSA9IFNQSV9NT0RFXzMsCiAJCS5wbGF0Zm9ybV9kYXRhID0gJnNwaV9wZGF0YSwKKyAgICAgICAgICAgICAgICAuY29udHJvbGxlcl9kYXRhID0gJnNwaV9jdHJsX2RhdGEsCiAJfSwKIAogCXsKQEAgLTI4OCw2ICszMDIsNyBAQAogCQkuaXJxID0gLTEsCiAJCS5tb2RlID0gU1BJX01PREVfMywKIAkJLnBsYXRmb3JtX2RhdGEgPSAmc3BpX3BkYXRhLAorICAgICAgICAgICAgICAgIC5jb250cm9sbGVyX2RhdGEgPSAmc3BpX2N0cmxfZGF0YSwKIAl9LAogCiB9OwpAQCAtMzg5LDYgKzQwNCw0NyBAQAogfTsKICNlbmRpZgogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgV2F0Y2hkb2cKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpZmRlZiBDT05GSUdfTVBDT1JFX1dBVENIRE9HCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNvbWNlcnRvX2E5d2RfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBDT01DRVJUT19UV0RfQkFTRSwKKwkJLmVuZAk9IENPTUNFUlRPX1RXRF9CQVNFICsgMHhGRiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lCT0gIm1wY29yZV93ZHQiLAorCQkuc3RhcnQJPSBJUlFfTE9DQUxXRE9HLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY29tY2VydG9fYTl3ZCA9IHsKKwkubmFtZQkJPSAibXBjb3JlX3dkdCIsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShjb21jZXJ0b19hOXdkX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gY29tY2VydG9fYTl3ZF9yZXNvdXJjZXMsCit9OworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ09NQ0VSVE9fV0FUQ0hET0cKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY29tY2VydG9fd2R0X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gQ09NQ0VSVE9fQVBCX1RJTUVSX0JBU0UgKyAweEQwLAorCQkuZW5kCT0gQ09NQ0VSVE9fQVBCX1RJTUVSX0JBU0UgKyAweEQ4LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY29tY2VydG9fd2R0ID0geworICAgICAgICAubmFtZSAgID0gImNvbWNlcnRvX3dkdCIsCisgICAgICAgIC5pZCAgICAgPSAtMSwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGNvbWNlcnRvX3dkdF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IGNvbWNlcnRvX3dkdF9yZXNvdXJjZXMsCit9OworI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT19FTFBfU1VQUE9SVCkKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02MDUsNiArNjYxLDE1IEBACiAjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fSTJDX1NVUFBPUlQpCiAJCSZjb21jZXJ0b19pMmMsCiAjZW5kaWYKKworI2lmIGRlZmluZWQgKENPTkZJR19NUENPUkVfV0FUQ0hET0cpCisJCSZjb21jZXJ0b19hOXdkLAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT19XQVRDSERPRykKKwkJJmNvbWNlcnRvX3dkdCwKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfU1BJX01TUERfSElHSF9TUEVFRCkgfHwgZGVmaW5lZChDT05GSUdfU1BJMl9NU1BEX0hJR0hfU1BFRUQpCiAJCSZjb21jZXJ0b19mYXN0X3NwaSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9ib2FyZC1jMmtldm0uYyBiL2FyY2gvYXJtL21hY2gtY29tY2VydG8vYm9hcmQtYzJrZXZtLmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA1Nzk2ZGIxLi43Mjc3ZDkyCi0tLSBhL2FyY2gvYXJtL21hY2gtY29tY2VydG8vYm9hcmQtYzJrZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9ib2FyZC1jMmtldm0uYwpAQCAtMjMxLDIxICsyMzEsMzMgQEAKIAlpbnQgZHVtbXk7CiB9OwogCitzdHJ1Y3Qgc3BpX2NvbnRyb2xsZXJfZGF0YSB7CisgICAgICAgIHU4IHBvbGxfbW9kZTsgICAvKiAwIGZvciBjb250b2xsZXIgcG9sbGluZyBtb2RlICovCisgICAgICAgIHU4IHR5cGU7ICAgICAgICAvKiBTUEkvU1NQL01pY3J3aXJlICovCisgICAgICAgIHU4IGVuYWJsZV9kbWE7CisgICAgICAgIHZvaWQgKCpjc19jb250cm9sKSh1MzIgY29tbWFuZCk7Cit9OworCiBzdHJ1Y3Qgc3BpX3BsYXRmb3JtX2RhdGEgc3BpX3BkYXRhID0gewogCS50eXBlID0gMCwKIAkuZHVtbXkgPSAwLAogfTsKIAorc3RydWN0IHNwaV9jb250cm9sbGVyX2RhdGEgc3BpX2N0cmxfZGF0YSA9ICB7CisgICAgICAgIC5wb2xsX21vZGUgPSAxLAorfTsKKwogc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBjb21jZXJ0b19zcGlfYm9hcmRfaW5mb1tdID0gewogCXsKIAkJLyogRklYTUU6IGZvciBjaGlwc2VsZWN0LTAgKi8KLQkJLm1vZGFsaWFzID0gImNvbWNlcnRvX3NwaTEiLAorCQkubW9kYWxpYXMgPSAiczI1ZmwyNTZzMCIsCiAJCS5jaGlwX3NlbGVjdCA9IDAsCiAJCS5tYXhfc3BlZWRfaHogPSA0KjEwMDAqMTAwMCwKIAkJLmJ1c19udW0gPSAwLAogCQkuaXJxID0gLTEsCiAJCS5tb2RlID0gU1BJX01PREVfMywKIAkJLnBsYXRmb3JtX2RhdGEgPSAmc3BpX3BkYXRhLAorICAgICAgICAgICAgICAgIC5jb250cm9sbGVyX2RhdGEgPSAmc3BpX2N0cmxfZGF0YSwKIAl9LAogCiAJewpAQCAtMjU3LDYgKzI2OSw3IEBACiAJCS5pcnEgPSAtMSwKIAkJLm1vZGUgPSBTUElfTU9ERV8zLAogCQkucGxhdGZvcm1fZGF0YSA9ICZzcGlfcGRhdGEsCisgICAgICAgICAgICAgICAgLmNvbnRyb2xsZXJfZGF0YSA9ICZzcGlfY3RybF9kYXRhLAogCX0sCiAKIAl7CkBAIC0yNjcsNiArMjgwLDcgQEAKIAkJLmlycSA9IC0xLAogCQkubW9kZSA9IFNQSV9NT0RFXzMsCiAJCS5wbGF0Zm9ybV9kYXRhID0gJnNwaV9wZGF0YSwKKyAgICAgICAgICAgICAgICAuY29udHJvbGxlcl9kYXRhID0gJnNwaV9jdHJsX2RhdGEsCiAJfSwKIAogCXsKQEAgLTI3Nyw2ICsyOTEsNyBAQAogCQkuaXJxID0gLTEsCiAJCS5tb2RlID0gU1BJX01PREVfMywKIAkJLnBsYXRmb3JtX2RhdGEgPSAmc3BpX3BkYXRhLAorICAgICAgICAgICAgICAgIC5jb250cm9sbGVyX2RhdGEgPSAmc3BpX2N0cmxfZGF0YSwKIAl9LAogCiB9OwpAQCAtMzc4LDYgKzM5Myw0NyBAQAogfTsKICNlbmRpZgogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKiAgV2F0Y2hkb2cKKyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpZmRlZiBDT05GSUdfTVBDT1JFX1dBVENIRE9HCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNvbWNlcnRvX2E5d2RfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBDT01DRVJUT19UV0RfQkFTRSwKKwkJLmVuZAk9IENPTUNFUlRPX1RXRF9CQVNFICsgMHhGRiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5uYW1lCT0gIm1wY29yZV93ZHQiLAorCQkuc3RhcnQJPSBJUlFfTE9DQUxXRE9HLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY29tY2VydG9fYTl3ZCA9IHsKKwkubmFtZQkJPSAibXBjb3JlX3dkdCIsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShjb21jZXJ0b19hOXdkX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gY29tY2VydG9fYTl3ZF9yZXNvdXJjZXMsCit9OworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ09NQ0VSVE9fV0FUQ0hET0cKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY29tY2VydG9fd2R0X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gQ09NQ0VSVE9fQVBCX1RJTUVSX0JBU0UgKyAweEQwLAorCQkuZW5kCT0gQ09NQ0VSVE9fQVBCX1RJTUVSX0JBU0UgKyAweEQ4LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY29tY2VydG9fd2R0ID0geworICAgICAgICAubmFtZSAgID0gImNvbWNlcnRvX3dkdCIsCisgICAgICAgIC5pZCAgICAgPSAtMSwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGNvbWNlcnRvX3dkdF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IGNvbWNlcnRvX3dkdF9yZXNvdXJjZXMsCit9OworI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT19FTFBfU1VQUE9SVCkKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01NTQsNiArNjEwLDE1IEBACiAjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fSTJDX1NVUFBPUlQpCiAJCSZjb21jZXJ0b19pMmMsCiAjZW5kaWYKKworI2lmIGRlZmluZWQgKENPTkZJR19NUENPUkVfV0FUQ0hET0cpCisJCSZjb21jZXJ0b19hOXdkLAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT19XQVRDSERPRykKKwkJJmNvbWNlcnRvX3dkdCwKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfU1BJX01TUERfSElHSF9TUEVFRCkgfHwgZGVmaW5lZChDT05GSUdfU1BJMl9NU1BEX0hJR0hfU1BFRUQpCiAJCSZjb21jZXJ0b19mYXN0X3NwaSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9ib2FyZC1jMmtydHNtLmMgYi9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2JvYXJkLWMya3J0c20uYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2Nsb2NrLmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBmNzEzMmFmLi43ZWY3OWE5Ci0tLSBhL2FyY2gvYXJtL21hY2gtY29tY2VydG8vY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2Nsb2NrLmMKQEAgLTMxMCw3ICszMTAsNyBAQAogLyoKICAqIEdldCB0aGUgcmVmZXJlbmNlIGNsb2NrIGFmdGVyIHJlYWRpbmcgYm9vdHN0cmFwCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIEhBTF9nZXRfcmVmX2NsayAodm9pZCkKK3Vuc2lnbmVkIGxvbmcgSEFMX2dldF9yZWZfY2xrICh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgY2xvY2tfZnJlcSA9IDA7CiAJdW5zaWduZWQgaW50IGJvb3Rfc3RyYXAsIHRtcDsKQEAgLTMzNSw2ICszMzUsNyBAQAogCiAJcmV0dXJuIGNsb2NrX2ZyZXE7CiB9CitFWFBPUlRfU1lNQk9MKEhBTF9nZXRfcmVmX2Nsayk7CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIEhBTF9nZXRfcGxsX2ZyZXEoaW50IHBsbF9ubykKIHsKQEAgLTUxNiwxMjMgKzUxNywyNSBAQAogCXJldHVybiBjbGtfb3V0OwogfQogCi0vKiBBbGwgZ2V0IHJhdGUgQVBJcyBjYWxsYmFja3MgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIEhBTF9nZXRfYXJtX2NsayhzdHJ1Y3QgY2xrICpjbGspCisvKiBHZXQgcmF0ZSBBUEkgY2FsbGJhY2sgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIEhBTF9nZXRfY2xrKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlyZXR1cm4gSEFMX2dldF9jbGtfZnJlcShjbGstPmNsa2dlbl9yZWcsIGNsay0+ZGl2X3JlZyk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIEhBTF9nZXRfYXhpX2NsayhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIEhBTF9nZXRfY2xrX2ZyZXEoY2xrLT5jbGtnZW5fcmVnLCBjbGstPmRpdl9yZWcpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBIQUxfZ2V0X2Rkcl9jbGsoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBIQUxfZ2V0X2Nsa19mcmVxKGNsay0+Y2xrZ2VuX3JlZywgY2xrLT5kaXZfcmVnKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgSEFMX2dldF9pcHNlY19lYXBlX2NsayhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIEhBTF9nZXRfY2xrX2ZyZXEoY2xrLT5jbGtnZW5fcmVnLCBjbGstPmRpdl9yZWcpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyAgSEFMX2dldF9pcHNlY19zcGFjY19jbGsoc3RydWN0IGNsayAqY2xrKQorLyogR2V0IHJhdGUgQVBJIGNhbGxiYWNrIGZvciB0aG9zZSBjbG9ja3MgaGF2aW5nIFBhcmVudCAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgSEFMX2dldF9wYXJlbnRfY2xrKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKIH0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgIEhBTF9nZXRfZHBpX2NpZV9jbGsoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyAgSEFMX2dldF9kcGlfZGVjb21wX2NsayhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nICBIQUxfZ2V0X2dlbXR4X2NsayhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIEhBTF9nZXRfY2xrX2ZyZXEoY2xrLT5jbGtnZW5fcmVnLCBjbGstPmRpdl9yZWcpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBIQUxfZ2V0X2hmZV9jb3JlX2NsayhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIEhBTF9nZXRfY2xrX2ZyZXEoY2xrLT5jbGtnZW5fcmVnLCBjbGstPmRpdl9yZWcpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBIQUxfZ2V0X3NwaV9pMmNfY2xrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgSEFMX2dldF9zYXRhX29vYl9jbGsoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBIQUxfZ2V0X2Nsa19mcmVxKGNsay0+Y2xrZ2VuX3JlZywgY2xrLT5kaXZfcmVnKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgSEFMX2dldF9zYXRhX3BtdV9jbGsoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBIQUxfZ2V0X2Nsa19mcmVxKGNsay0+Y2xrZ2VuX3JlZywgY2xrLT5kaXZfcmVnKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgSEFMX2dldF9leHRfcGh5X2NsayhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIEhBTF9nZXRfY2xrX2ZyZXEoY2xrLT5jbGtnZW5fcmVnLCBjbGstPmRpdl9yZWcpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyAgSEFMX2dldF90ZG1OVEdfY2xrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gSEFMX2dldF9jbGtfZnJlcShjbGstPmNsa2dlbl9yZWcsIGNsay0+ZGl2X3JlZyk7Ci19Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBIQUxfZ2V0X2wyY2NfY2xrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gSEFMX2dldF9jbGtfZnJlcShjbGstPmNsa2dlbl9yZWcsIGNsay0+ZGl2X3JlZyk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIEhBTF9nZXRfdWFydF9jbGsoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyAgSEFMX2dldF9kdXNfY2xrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgIEhBTF9nZXRfcGNpZTBfY2xrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgIEhBTF9nZXRfcGNpZTFfY2xrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgIEhBTF9nZXRfdXNiMF9jbGsoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyAgSEFMX2dldF91c2IxX2NsayhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nICBIQUxfZ2V0X3NhdGFfY2xrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLX0KLQorLyogU3BlY2lmaWMgR2V0IHJhdGUgQVBJIGNhbGxiYWNrIGZvciBhcm0gcGVyaXBoZXJhbHMgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nICBIQUxfZ2V0X2FybV9wZXJpX2NsayhzdHJ1Y3QgY2xrICpjbGspCiB7CiAJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkvNCA7CiB9CiAKLS8qIEFsbCBzZXQgcmF0ZSBBUElzIGNhbGxiYWNrcyAqLwotc3RhdGljIGludCBIQUxfc2V0X2dlbXR4X2NsayhzdHJ1Y3QgY2xrICpjbGssdW5zaWduZWQgbG9uZyByYXRlKQorLyogU2V0IHJhdGUgQVBJcyBjYWxsYmFja3MgKi8KK3N0YXRpYyBpbnQgSEFMX3NldF9jbGsoc3RydWN0IGNsayAqY2xrLHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAlzdHJ1Y3QgY2xrICpjbGtfcGFyZW50OwogCS8qIEdldCB0aGUgcGFyZW50IGNsb2NrICovCkBAIC02NDcsMTI2ICs1NTAsNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBIQUxfc2V0X2FybV9jbGsoc3RydWN0IGNsayAqY2xrLHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQlzdHJ1Y3QgY2xrICpjbGtfcGFyZW50OwotCS8qIEdldCB0aGUgcGFyZW50IGNsb2NrICovCi0JY2xrX3BhcmVudD1jbGtfZ2V0X3BhcmVudChjbGspOwotCWlmICggY2xrX3BhcmVudCAmJiByYXRlIDw9IGNsa19wYXJlbnQtPnJhdGUgKXsKLQkJLyogU2V0IHRoZSBkaXZpZGVyIHZhbHVlIHRvIHJlZyAqLwotCQlIQUxfc2V0X2Nsa19kaXZpZGVyKHJhdGUsY2xrLT5jbGtnZW5fcmVnLGNsay0+ZGl2X3JlZyk7Ci0JCS8qIFNldCB0aGUgcmF0ZSB2YWx1ZSB0byBjbGsgc3RydWN0dXJlICovCi0JCWNsay0+cmF0ZT1yYXRlOwotCQlyZXR1cm4gMDsKLQl9ZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGludCBIQUxfc2V0X2wyY2NfY2xrKHN0cnVjdCBjbGsgKmNsayx1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0Jc3RydWN0IGNsayAqY2xrX3BhcmVudDsKLQkvKiBHZXQgdGhlIHBhcmVudCBjbG9jayAqLwotCWNsa19wYXJlbnQ9Y2xrX2dldF9wYXJlbnQoY2xrKTsKLQlpZiAoIGNsa19wYXJlbnQgJiYgcmF0ZSA8PSBjbGtfcGFyZW50LT5yYXRlICl7Ci0JCS8qIFNldCB0aGUgZGl2aWRlciB2YWx1ZSB0byByZWcgKi8KLQkJSEFMX3NldF9jbGtfZGl2aWRlcihyYXRlLGNsay0+Y2xrZ2VuX3JlZyxjbGstPmRpdl9yZWcpOwotCQkvKiBTZXQgdGhlIHJhdGUgdmFsdWUgdG8gY2xrIHN0cnVjdHVyZSAqLwotCQljbGstPnJhdGU9cmF0ZTsKLQkJcmV0dXJuIDA7Ci0JfWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgSEFMX3NldF9heGlfY2xrKHN0cnVjdCBjbGsgKmNsayx1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0Jc3RydWN0IGNsayAqY2xrX3BhcmVudDsKLQkvKiBHZXQgdGhlIHBhcmVudCBjbG9jayAqLwotCWNsa19wYXJlbnQ9Y2xrX2dldF9wYXJlbnQoY2xrKTsKLQlpZiAoIGNsa19wYXJlbnQgJiYgcmF0ZSA8PSBjbGtfcGFyZW50LT5yYXRlICl7Ci0JCS8qIFNldCB0aGUgZGl2aWRlciB2YWx1ZSB0byByZWcgKi8KLQkJSEFMX3NldF9jbGtfZGl2aWRlcihyYXRlLGNsay0+Y2xrZ2VuX3JlZyxjbGstPmRpdl9yZWcpOwotCQkvKiBTZXQgdGhlIHJhdGUgdmFsdWUgdG8gY2xrIHN0cnVjdHVyZSAqLwotCQljbGstPnJhdGU9cmF0ZTsKLQkJcmV0dXJuIDA7Ci0JfWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgSEFMX3NldF9oZmVfY29yZV9jbGsoc3RydWN0IGNsayAqY2xrLHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQlzdHJ1Y3QgY2xrICpjbGtfcGFyZW50OwotCS8qIEdldCB0aGUgcGFyZW50IGNsb2NrICovCi0JY2xrX3BhcmVudD1jbGtfZ2V0X3BhcmVudChjbGspOwotCWlmICggY2xrX3BhcmVudCAmJiByYXRlIDw9IGNsa19wYXJlbnQtPnJhdGUgKXsKLQkJLyogU2V0IHRoZSBkaXZpZGVyIHZhbHVlIHRvIHJlZyAqLwotCQlIQUxfc2V0X2Nsa19kaXZpZGVyKHJhdGUsY2xrLT5jbGtnZW5fcmVnLGNsay0+ZGl2X3JlZyk7Ci0JCS8qIFNldCB0aGUgcmF0ZSB2YWx1ZSB0byBjbGsgc3RydWN0dXJlICovCi0JCWNsay0+cmF0ZT1yYXRlOwotCQlyZXR1cm4gMDsKLQl9ZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGludCBIQUxfc2V0X3RkbU5UR19jbGsoc3RydWN0IGNsayAqY2xrLHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQlzdHJ1Y3QgY2xrICpjbGtfcGFyZW50OwotCS8qIEdldCB0aGUgcGFyZW50IGNsb2NrICovCi0JY2xrX3BhcmVudD1jbGtfZ2V0X3BhcmVudChjbGspOwotCWlmICggY2xrX3BhcmVudCAmJiByYXRlIDw9IGNsa19wYXJlbnQtPnJhdGUgKXsKLQkJLyogU2V0IHRoZSBkaXZpZGVyIHZhbHVlIHRvIHJlZyAqLwotCQlIQUxfc2V0X2Nsa19kaXZpZGVyKHJhdGUsY2xrLT5jbGtnZW5fcmVnLGNsay0+ZGl2X3JlZyk7Ci0JCS8qIFNldCB0aGUgcmF0ZSB2YWx1ZSB0byBjbGsgc3RydWN0dXJlICovCi0JCWNsay0+cmF0ZT1yYXRlOwotCQlyZXR1cm4gMDsKLQl9ZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGludCBIQUxfc2V0X3NhdGFfb29iX2NsayhzdHJ1Y3QgY2xrICpjbGssdW5zaWduZWQgbG9uZyByYXRlKQotewotCXN0cnVjdCBjbGsgKmNsa19wYXJlbnQ7Ci0JLyogR2V0IHRoZSBwYXJlbnQgY2xvY2sgKi8KLQljbGtfcGFyZW50PWNsa19nZXRfcGFyZW50KGNsayk7Ci0JaWYgKCBjbGtfcGFyZW50ICYmIHJhdGUgPD0gY2xrX3BhcmVudC0+cmF0ZSApewotCQkvKiBTZXQgdGhlIGRpdmlkZXIgdmFsdWUgdG8gcmVnICovCi0JCUhBTF9zZXRfY2xrX2RpdmlkZXIocmF0ZSxjbGstPmNsa2dlbl9yZWcsY2xrLT5kaXZfcmVnKTsKLQkJLyogU2V0IHRoZSByYXRlIHZhbHVlIHRvIGNsayBzdHJ1Y3R1cmUgKi8KLQkJY2xrLT5yYXRlPXJhdGU7Ci0JCXJldHVybiAwOwotCX1lbHNlCi0JCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IEhBTF9zZXRfc2F0YV9wbXVfY2xrKHN0cnVjdCBjbGsgKmNsayx1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0Jc3RydWN0IGNsayAqY2xrX3BhcmVudDsKLQkvKiBHZXQgdGhlIHBhcmVudCBjbG9jayAqLwotCWNsa19wYXJlbnQ9Y2xrX2dldF9wYXJlbnQoY2xrKTsKLQlpZiAoIGNsa19wYXJlbnQgJiYgcmF0ZSA8PSBjbGtfcGFyZW50LT5yYXRlICl7Ci0JCS8qIFNldCB0aGUgZGl2aWRlciB2YWx1ZSB0byByZWcgKi8KLQkJSEFMX3NldF9jbGtfZGl2aWRlcihyYXRlLGNsay0+Y2xrZ2VuX3JlZyxjbGstPmRpdl9yZWcpOwotCQkvKiBTZXQgdGhlIHJhdGUgdmFsdWUgdG8gY2xrIHN0cnVjdHVyZSAqLwotCQljbGstPnJhdGU9cmF0ZTsKLQkJcmV0dXJuIDA7Ci0JfWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgSEFMX3NldF9leHRfcGh5X2NsayhzdHJ1Y3QgY2xrICpjbGssdW5zaWduZWQgbG9uZyByYXRlKQotewotCXN0cnVjdCBjbGsgKmNsa19wYXJlbnQ7Ci0JLyogR2V0IHRoZSBwYXJlbnQgY2xvY2sgKi8KLQljbGtfcGFyZW50PWNsa19nZXRfcGFyZW50KGNsayk7Ci0JaWYgKCBjbGtfcGFyZW50ICYmIHJhdGUgPD0gY2xrX3BhcmVudC0+cmF0ZSApewotCQkvKiBTZXQgdGhlIGRpdmlkZXIgdmFsdWUgdG8gcmVnICovCi0JCUhBTF9zZXRfY2xrX2RpdmlkZXIocmF0ZSxjbGstPmNsa2dlbl9yZWcsY2xrLT5kaXZfcmVnKTsKLQkJLyogU2V0IHRoZSByYXRlIHZhbHVlIHRvIGNsayBzdHJ1Y3R1cmUgKi8KLQkJY2xrLT5yYXRlPXJhdGU7Ci0JCXJldHVybiAwOwotCX1lbHNlCi0JCXJldHVybiAtRUlOVkFMOwotfQotCiAvKiBJbml0aXphdGlvbiBvZiBjbGsgc3RydWN0dXJlIGZvciBpbmRpdmlkdWFsIGRldmljZSAqLwogCiBzdGF0aWMgc3RydWN0IGNsayBjbGtfcGxsMCA9IHsKQEAgLTc5Myw4ICs1NzYsOCBAQAogCS5jbGtnZW5fcmVnICA9IEdFTVRYX0NMS19DTlRSTCwKIAkuZGl2X3JlZyAgICAgPSBHRU1UWF9DTEtfRElWX0NOVFJMLAogCS5lbmFibGVfbWFzayA9IENMS19ET01BSU5fTUFTSywKLQkuZ2V0X3JhdGUgICAgPSBIQUxfZ2V0X2dlbXR4X2NsaywKLQkuc2V0X3JhdGUgICAgPSBIQUxfc2V0X2dlbXR4X2NsaywKKwkuZ2V0X3JhdGUgICAgPSBIQUxfZ2V0X2NsaywKKwkuc2V0X3JhdGUgICAgPSBIQUxfc2V0X2NsaywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRkcl9jbGsgPSB7CkBAIC04MDMsNyArNTg2LDcgQEAKIAkuY2xrZ2VuX3JlZyAgPSBERFJfQ0xLX0NOVFJMLAogCS5kaXZfcmVnICAgICA9IEREUl9DTEtfRElWX0NOVFJMLAogCS5lbmFibGVfbWFzayA9IENMS19ET01BSU5fTUFTSywKLQkuZ2V0X3JhdGUgICAgPSBIQUxfZ2V0X2Rkcl9jbGssCisJLmdldF9yYXRlICAgID0gSEFMX2dldF9jbGssCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBhcm1fY2xrID0gewpAQCAtODEyLDggKzU5NSw4IEBACiAJLmNsa2dlbl9yZWcgID0gQTlEUF9DTEtfQ05UUkwsCiAJLmRpdl9yZWcgICAgID0gQTlEUF9DTEtfRElWX0NOVFJMLAogCS5lbmFibGVfbWFzayA9IENMS19ET01BSU5fTUFTSywKLQkuZ2V0X3JhdGUgICAgPSBIQUxfZ2V0X2FybV9jbGssCi0JLnNldF9yYXRlICAgID0gSEFMX3NldF9hcm1fY2xrLAorCS5nZXRfcmF0ZSAgICA9IEhBTF9nZXRfY2xrLAorCS5zZXRfcmF0ZSAgICA9IEhBTF9zZXRfY2xrLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbDJjY19jbGsgPSB7CkBAIC04MjIsOCArNjA1LDggQEAKIAkuY2xrZ2VuX3JlZyAgPSBMMkNDX0NMS19DTlRSTCwKIAkuZGl2X3JlZyAgICAgPSBMMkNDX0NMS19ESVZfQ05UUkwsCiAJLmVuYWJsZV9tYXNrID0gQ0xLX0RPTUFJTl9NQVNLLAotCS5nZXRfcmF0ZSAgICA9IEhBTF9nZXRfbDJjY19jbGssCi0JLnNldF9yYXRlICAgID0gSEFMX3NldF9sMmNjX2NsaywKKwkuZ2V0X3JhdGUgICAgPSBIQUxfZ2V0X2NsaywKKwkuc2V0X3JhdGUgICAgPSBIQUxfc2V0X2NsaywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGF4aV9jbGsgPSB7CkBAIC04MzIsOCArNjE1LDggQEAKIAkuY2xrZ2VuX3JlZyAgPSBBWElfQ0xLX0NOVFJMXzAsCiAJLmRpdl9yZWcgICAgID0gQVhJX0NMS19ESVZfQ05UUkwsCiAJLmVuYWJsZV9tYXNrID0gQ0xLX0RPTUFJTl9NQVNLLAotCS5nZXRfcmF0ZSAgICA9IEhBTF9nZXRfYXhpX2NsaywKLQkuc2V0X3JhdGUgICAgPSBIQUxfc2V0X2F4aV9jbGssCisJLmdldF9yYXRlICAgID0gSEFMX2dldF9jbGssCisJLnNldF9yYXRlICAgID0gSEFMX3NldF9jbGssCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0X2NsayA9IHsgLyogTGVnYWN5IFVBUlQgKi8KQEAgLTg0MSw3ICs2MjQsNyBAQAogCS5uYW1lICAgICAgICA9ICJ1YXJ0IiwKIAkuZW5hYmxlX3JlZyAgPSBBWElfQ0xLX0NOVFJMXzEsCiAJLmVuYWJsZV9tYXNrID0gQ0xLX0RPTUFJTl9VQVJUX01BU0ssCi0JLmdldF9yYXRlICAgID0gSEFMX2dldF91YXJ0X2NsaywKKwkuZ2V0X3JhdGUgICAgPSBIQUxfZ2V0X3BhcmVudF9jbGssCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBpcHNlY19lYXBlX2NsayA9IHsKQEAgLTg1MCw3ICs2MzMsNyBAQAogCS5jbGtnZW5fcmVnICA9IElQU0VDX0NMS19DTlRSTCwKIAkuZGl2X3JlZyAgICAgPSBJUFNFQ19DTEtfRElWX0NOVFJMLAogCS5lbmFibGVfbWFzayA9IENMS19ET01BSU5fTUFTSywKLQkuZ2V0X3JhdGUgICAgPSBIQUxfZ2V0X2lwc2VjX2VhcGVfY2xrLAorCS5nZXRfcmF0ZSAgICA9IEhBTF9nZXRfY2xrLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgaXBzZWNfc3BhY2NfY2xrID0geyAgICAgICAvKiBJUFNFQyBzcGFjYyBjbG9jayBmb3IgRWxsaXB0aWMgRVBOMTgwMiovCkBAIC04NTgsNyArNjQxLDcgQEAKIAkubmFtZSAgICAgICAgPSAiaXBzZWNfc3BhY2MiLAogCS5lbmFibGVfcmVnICA9IEFYSV9DTEtfQ05UUkxfMSwKIAkuZW5hYmxlX21hc2sgPSBDTEtfRE9NQUlOX0lQU0VDX1NQQUNDX01BU0ssCi0JLmdldF9yYXRlICAgID0gSEFMX2dldF9pcHNlY19zcGFjY19jbGssCisJLmdldF9yYXRlICAgID0gSEFMX2dldF9wYXJlbnRfY2xrLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBpX2NpZV9jbGsgPSB7ICAgICAgIC8qIERQSSBjaWUgY2xvY2sqLwpAQCAtODY2LDcgKzY0OSw3IEBACiAJLm5hbWUgICAgICAgID0gImRwaV9jaWUiLAogCS5lbmFibGVfcmVnICA9IEFYSV9DTEtfQ05UUkxfMCwKIAkuZW5hYmxlX21hc2sgPSBDTEtfRE9NQUlOX0RQSV9DSUVfTUFTSywKLQkuZ2V0X3JhdGUgICAgPSBIQUxfZ2V0X2RwaV9jaWVfY2xrLAorCS5nZXRfcmF0ZSAgICA9IEhBTF9nZXRfcGFyZW50X2NsaywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwaV9kZWNvbXBfY2xrID0geyAgICAgICAvKiBEUEkgZGVjb21wIGNsb2NrKi8KQEAgLTg3NCw3ICs2NTcsNyBAQAogCS5uYW1lICAgICAgICA9ICJkcGlfZGVjb21wIiwKIAkuZW5hYmxlX3JlZyAgPSBBWElfQ0xLX0NOVFJMXzAsCiAJLmVuYWJsZV9tYXNrID0gQ0xLX0RPTUFJTl9EUElfREVDT01QX01BU0ssCi0JLmdldF9yYXRlICAgID0gSEFMX2dldF9kcGlfZGVjb21wX2NsaywKKwkuZ2V0X3JhdGUgICAgPSBIQUxfZ2V0X3BhcmVudF9jbGssCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBEVVNfY2xrID0geyAvKiBETUEsRkFTVC1VQVJUIGFuZCBTTUkgY2xvY2sgKi8KQEAgLTg4Miw3ICs2NjUsNyBAQAogCS5uYW1lICAgICAgICA9ICJEVVMiLAogCS5lbmFibGVfcmVnICA9IEFYSV9DTEtfQ05UUkxfMSwKIAkuZW5hYmxlX21hc2sgPSBDTEtfRE9NQUlOX0RVU19NQVNLLAotCS5nZXRfcmF0ZSAgICA9IEhBTF9nZXRfZHVzX2NsaywKKwkuZ2V0X3JhdGUgICAgPSBIQUxfZ2V0X3BhcmVudF9jbGssCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBhcm1fcGVyaV9jbGsgPSB7CkBAIC04OTksOCArNjgyLDggQEAKIAkuY2xrZ2VuX3JlZyAgPSBQRkVfQ0xLX0NOVFJMLAogCS5kaXZfcmVnICAgICA9IFBGRV9DTEtfRElWX0NOVFJMLAogCS5lbmFibGVfbWFzayA9IENMS19ET01BSU5fTUFTSywKLQkuZ2V0X3JhdGUgICAgPSBIQUxfZ2V0X2hmZV9jb3JlX2NsaywKLQkuc2V0X3JhdGUgICAgPSBIQUxfc2V0X2hmZV9jb3JlX2NsaywKKwkuZ2V0X3JhdGUgICAgPSBIQUxfZ2V0X2NsaywKKwkuc2V0X3JhdGUgICAgPSBIQUxfc2V0X2NsaywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNwaV9pMmNfY2xrID0gewpAQCAtOTA4LDcgKzY5MSw3IEBACiAJLm5hbWUgICAgICAgID0gInNwaV9pMmMiLAogCS5lbmFibGVfcmVnICA9IEFYSV9DTEtfQ05UUkxfMSwKIAkuZW5hYmxlX21hc2sgPSBDTEtfRE9NQUlOX1NQSV9JMkNfTUFTSywKLQkuZ2V0X3JhdGUgICAgPSBIQUxfZ2V0X3NwaV9pMmNfY2xrLAorCS5nZXRfcmF0ZSAgICA9IEhBTF9nZXRfcGFyZW50X2NsaywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHRkbU5UR19jbGsgPSB7CkBAIC05MTcsOCArNzAwLDggQEAKIAkuY2xrZ2VuX3JlZyAgPSBURE1OVEdfUkVGX0NMS19DTlRSTCwKIAkuZGl2X3JlZyAgICAgPSBURE1OVEdfUkVGX0NMS19ESVZfQ05UUkwsCiAJLmVuYWJsZV9tYXNrID0gQ0xLX0RPTUFJTl9NQVNLLAotCS5nZXRfcmF0ZSAgICA9IEhBTF9nZXRfdGRtTlRHX2NsaywKLQkuc2V0X3JhdGUgICAgPSBIQUxfc2V0X3RkbU5UR19jbGssCisJLmdldF9yYXRlICAgID0gSEFMX2dldF9jbGssCisJLnNldF9yYXRlICAgID0gSEFMX3NldF9jbGssCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBwY2llMF9jbGsgPSB7CkBAIC05MjYsNyArNzA5LDcgQEAKIAkubmFtZSAgICAgICAgPSAicGNpZTAiLAogCS5lbmFibGVfcmVnICA9IEFYSV9DTEtfQ05UUkxfMiwKIAkuZW5hYmxlX21hc2sgPSBDTEtfRE9NQUlOX1BDSUUwX01BU0ssCi0JLmdldF9yYXRlICAgID0gSEFMX2dldF9wY2llMF9jbGssCisJLmdldF9yYXRlICAgID0gSEFMX2dldF9wYXJlbnRfY2xrLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgcGNpZTFfY2xrID0gewpAQCAtOTM0LDcgKzcxNyw3IEBACiAJLm5hbWUgICAgICAgID0gInBjaWUxIiwKIAkuZW5hYmxlX3JlZyAgPSBBWElfQ0xLX0NOVFJMXzIsCiAJLmVuYWJsZV9tYXNrID0gQ0xLX0RPTUFJTl9QQ0lFMV9NQVNLLAotCS5nZXRfcmF0ZSAgICA9IEhBTF9nZXRfcGNpZTFfY2xrLAorCS5nZXRfcmF0ZSAgICA9IEhBTF9nZXRfcGFyZW50X2NsaywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYjBfY2xrID0gewpAQCAtOTQyLDcgKzcyNSw3IEBACiAJLm5hbWUgICAgICAgID0gInVzYjAiLAogCS5lbmFibGVfcmVnICA9IEFYSV9DTEtfQ05UUkxfMiwKIAkuZW5hYmxlX21hc2sgPSBDTEtfRE9NQUlOX1VTQjBfTUFTSywKLQkuZ2V0X3JhdGUgICAgPSBIQUxfZ2V0X3VzYjBfY2xrLAorCS5nZXRfcmF0ZSAgICA9IEhBTF9nZXRfcGFyZW50X2NsaywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYjFfY2xrID0gewpAQCAtOTUwLDcgKzczMyw3IEBACiAJLm5hbWUgICAgICAgID0gInVzYjEiLAogCS5lbmFibGVfcmVnICA9IEFYSV9DTEtfQ05UUkxfMiwKIAkuZW5hYmxlX21hc2sgPSBDTEtfRE9NQUlOX1VTQjFfTUFTSywKLQkuZ2V0X3JhdGUgICAgPSBIQUxfZ2V0X3VzYjFfY2xrLAorCS5nZXRfcmF0ZSAgICA9IEhBTF9nZXRfcGFyZW50X2NsaywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNhdGFfY2xrID0geyAgICAgICAgICAgIC8qIFNBVEEgQVhJIGNsb2NrICovCkBAIC05NTgsNyArNzQxLDcgQEAKIAkubmFtZSAgICAgICAgPSAic2F0YSIsCiAJLmVuYWJsZV9yZWcgID0gQVhJX0NMS19DTlRSTF8yLAogCS5lbmFibGVfbWFzayA9IENMS19ET01BSU5fU0FUQV9NQVNLLAotCS5nZXRfcmF0ZSAgICA9IEhBTF9nZXRfc2F0YV9jbGssCisJLmdldF9yYXRlICAgID0gSEFMX2dldF9wYXJlbnRfY2xrLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNhdGFfb29iX2NsayA9IHsKIAkubmFtZSAgICAgICAgPSAic2F0YV9vb2IiLAkgIC8qIFNBVEEgUE1VIGFsaXZlIGNsb2NrICovCkBAIC05NjYsOCArNzQ5LDggQEAKIAkuY2xrZ2VuX3JlZyAgPSBTQVRBX09PQl9DTEtfQ05UUkwsCiAJLmRpdl9yZWcgICAgID0gU0FUQV9PT0JfQ0xLX0RJVl9DTlRSTCwKIAkuZW5hYmxlX21hc2sgPSBDTEtfRE9NQUlOX01BU0ssCi0JLmdldF9yYXRlICAgID0gSEFMX2dldF9zYXRhX29vYl9jbGssCi0JLnNldF9yYXRlICAgID0gSEFMX3NldF9zYXRhX29vYl9jbGssCisJLmdldF9yYXRlICAgID0gSEFMX2dldF9jbGssCisJLnNldF9yYXRlICAgID0gSEFMX3NldF9jbGssCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzYXRhX3BtdV9jbGsgPSB7CkBAIC05NzYsNDAgKzc1OSw5OSBAQAogCS5jbGtnZW5fcmVnICA9IFNBVEFfUE1VX0NMS19DTlRSTCwKIAkuZGl2X3JlZyAgICAgPSBTQVRBX1BNVV9DTEtfRElWX0NOVFJMLAogCS5lbmFibGVfbWFzayA9IENMS19ET01BSU5fTUFTSywKLQkuZ2V0X3JhdGUgICAgPSBIQUxfZ2V0X3NhdGFfcG11X2NsaywKLQkuc2V0X3JhdGUgICAgPSBIQUxfc2V0X3NhdGFfcG11X2NsaywKKwkuZ2V0X3JhdGUgICAgPSBIQUxfZ2V0X2NsaywKKwkuc2V0X3JhdGUgICAgPSBIQUxfc2V0X2NsaywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGV4dF9waHkwX2NsayA9IHsKIAkubmFtZQkgICAgID0gImV4dF9waHkwIiwKLSAgICAgICAgLmVuYWJsZV9yZWcgID0gRVhUUEhZMF9DTEtfQ05UUkwsCi0gICAgICAgIC5jbGtnZW5fcmVnICA9IEVYVFBIWTBfQ0xLX0NOVFJMLAorCS5lbmFibGVfcmVnICA9IEVYVFBIWTBfQ0xLX0NOVFJMLAorCS5jbGtnZW5fcmVnICA9IEVYVFBIWTBfQ0xLX0NOVFJMLAogCS5kaXZfcmVnICAgICA9IEVYVFBIWTBfQ0xLX0RJVl9DTlRSTCwKIAkuZW5hYmxlX21hc2sgPSBDTEtfRE9NQUlOX01BU0ssCi0JLmdldF9yYXRlICAgID0gSEFMX2dldF9leHRfcGh5X2NsaywKLQkuc2V0X3JhdGUgICAgPSBIQUxfc2V0X2V4dF9waHlfY2xrLAorCS5nZXRfcmF0ZSAgICA9IEhBTF9nZXRfY2xrLAorCS5zZXRfcmF0ZSAgICA9IEhBTF9zZXRfY2xrLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZXh0X3BoeTFfY2xrID0gewogCS5uYW1lCSAgICAgPSAiZXh0X3BoeTEiLAotICAgICAgICAuZW5hYmxlX3JlZyAgPSBFWFRQSFkxX0NMS19DTlRSTCwKLSAgICAgICAgLmNsa2dlbl9yZWcgID0gRVhUUEhZMV9DTEtfQ05UUkwsCisJLmVuYWJsZV9yZWcgID0gRVhUUEhZMV9DTEtfQ05UUkwsCisJLmNsa2dlbl9yZWcgID0gRVhUUEhZMV9DTEtfQ05UUkwsCiAJLmRpdl9yZWcgICAgID0gRVhUUEhZMV9DTEtfRElWX0NOVFJMLAogCS5lbmFibGVfbWFzayA9IENMS19ET01BSU5fTUFTSywKLQkuZ2V0X3JhdGUgICAgPSBIQUxfZ2V0X2V4dF9waHlfY2xrLAotCS5zZXRfcmF0ZSAgICA9IEhBTF9zZXRfZXh0X3BoeV9jbGssCisJLmdldF9yYXRlICAgID0gSEFMX2dldF9jbGssCisJLnNldF9yYXRlICAgID0gSEFMX3NldF9jbGssCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBleHRfcGh5Ml9jbGsgPSB7CiAJLm5hbWUJICAgICA9ICJleHRfcGh5MiIsCi0gICAgICAgIC5lbmFibGVfcmVnICA9IEVYVFBIWTJfQ0xLX0NOVFJMLAotICAgICAgICAuY2xrZ2VuX3JlZyAgPSBFWFRQSFkyX0NMS19DTlRSTCwKKwkuZW5hYmxlX3JlZyAgPSBFWFRQSFkyX0NMS19DTlRSTCwKKwkuY2xrZ2VuX3JlZyAgPSBFWFRQSFkyX0NMS19DTlRSTCwKIAkuZGl2X3JlZyAgICAgPSBFWFRQSFkyX0NMS19ESVZfQ05UUkwsCiAJLmVuYWJsZV9tYXNrID0gQ0xLX0RPTUFJTl9NQVNLLAotCS5nZXRfcmF0ZSAgICA9IEhBTF9nZXRfZXh0X3BoeV9jbGssCi0JLnNldF9yYXRlICAgID0gSEFMX3NldF9leHRfcGh5X2NsaywKKwkuZ2V0X3JhdGUgICAgPSBIQUxfZ2V0X2NsaywKKwkuc2V0X3JhdGUgICAgPSBIQUxfc2V0X2NsaywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRwaV9jbGsgPSB7CisJLm5hbWUJICAgICA9ICJ0cGkiLAorCS5lbmFibGVfcmVnICA9IFRQSV9DTEtfQ05UUkwsCisJLmNsa2dlbl9yZWcgID0gVFBJX0NMS19DTlRSTCwKKwkuZGl2X3JlZyAgICAgPSBUUElfQ0xLX0RJVl9DTlRSTCwKKwkuZW5hYmxlX21hc2sgPSBDTEtfRE9NQUlOX01BU0ssCisJLmdldF9yYXRlICAgID0gSEFMX2dldF9jbGssCisJLnNldF9yYXRlICAgID0gSEFMX3NldF9jbGssCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjc3lzX2NsayA9IHsKKwkubmFtZQkgICAgID0gImNzeXMiLAorCS5lbmFibGVfcmVnICA9IENTWVNfQ0xLX0NOVFJMLAorCS5jbGtnZW5fcmVnICA9IENTWVNfQ0xLX0NOVFJMLAorCS5kaXZfcmVnICAgICA9IENTWVNfQ0xLX0RJVl9DTlRSTCwKKwkuZW5hYmxlX21hc2sgPSBDTEtfRE9NQUlOX01BU0ssCisJLmdldF9yYXRlICAgID0gSEFMX2dldF9jbGssCisJLnNldF9yYXRlICAgID0gSEFMX3NldF9jbGssCit9OworCitzdGF0aWMgc3RydWN0IGNsayB0c3VudGdfY2xrID0geworCS5uYW1lCSAgICAgPSAidHN1bnRnIiwKKwkuZW5hYmxlX3JlZyAgPSBUU1VOVEdfUkVGX0NMS19DTlRSTCwKKwkuY2xrZ2VuX3JlZyAgPSBUU1VOVEdfUkVGX0NMS19DTlRSTCwKKwkuZGl2X3JlZyAgICAgPSBUU1VOVEdfUkVGX0NMS19ESVZfQ05UUkwsCisJLmVuYWJsZV9tYXNrID0gQ0xLX0RPTUFJTl9NQVNLLAorCS5nZXRfcmF0ZSAgICA9IEhBTF9nZXRfY2xrLAorCS5zZXRfcmF0ZSAgICA9IEhBTF9zZXRfY2xrLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2F0YV9vY2NfY2xrID0geworCS5uYW1lCSAgICAgPSAic2F0YV9vY2MiLAorCS5lbmFibGVfcmVnICA9IFNBVEFfT0NDX0NMS19DTlRSTCwKKwkuY2xrZ2VuX3JlZyAgPSBTQVRBX09DQ19DTEtfQ05UUkwsCisJLmRpdl9yZWcgICAgID0gU0FUQV9PQ0NfQ0xLX0RJVl9DTlRSTCwKKwkuZW5hYmxlX21hc2sgPSBDTEtfRE9NQUlOX01BU0ssCisJLmdldF9yYXRlICAgID0gSEFMX2dldF9jbGssCisJLnNldF9yYXRlICAgID0gSEFMX3NldF9jbGssCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwY2llX29jY19jbGsgPSB7CisJLm5hbWUJICAgICA9ICJwY2llX29jYyIsCisJLmVuYWJsZV9yZWcgID0gUENJRV9PQ0NfQ0xLX0NOVFJMLAorCS5jbGtnZW5fcmVnICA9IFBDSUVfT0NDX0NMS19DTlRSTCwKKwkuZGl2X3JlZyAgICAgPSBQQ0lFX09DQ19DTEtfRElWX0NOVFJMLAorCS5lbmFibGVfbWFzayA9IENMS19ET01BSU5fTUFTSywKKwkuZ2V0X3JhdGUgICAgPSBIQUxfZ2V0X2NsaywKKwkuc2V0X3JhdGUgICAgPSBIQUxfc2V0X2NsaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNnbWlpX29jY19jbGsgPSB7CisJLm5hbWUJICAgICA9ICJzZ21paV9vY2MiLAorCS5lbmFibGVfcmVnICA9IFNHTUlJX09DQ19DTEtfQ05UUkwsCisJLmNsa2dlbl9yZWcgID0gU0dNSUlfT0NDX0NMS19DTlRSTCwKKwkuZGl2X3JlZyAgICAgPSBTR01JSV9PQ0NfQ0xLX0RJVl9DTlRSTCwKKwkuZW5hYmxlX21hc2sgPSBDTEtfRE9NQUlOX01BU0ssCisJLmdldF9yYXRlICAgID0gSEFMX2dldF9jbGssCisJLnNldF9yYXRlICAgID0gSEFMX3NldF9jbGssCit9OwogCiAvKiBUaGVzZSBjbG9ja3MgYXJlIHZpc2libGUgb3V0c2lkZSB0aGlzIG1vZHVsZQogICogYW5kIGNhbiBiZSBpbml0aWFsaXplZCAsIHRoaXMgbGlzdCBjb3VsZCBiZSBleHBhbmRlZApAQCAtMTA0NSw2ICs4ODcsMTIgQEAKIAkmZXh0X3BoeTBfY2xrLAogCSZleHRfcGh5MV9jbGssCiAJJmV4dF9waHkyX2NsaywKKwkmdHBpX2NsaywKKwkmY3N5c19jbGssCisJJnRzdW50Z19jbGssCisJJnNhdGFfb2NjX2NsaywKKwkmcGNpZV9vY2NfY2xrLAorCSZzZ21paV9vY2NfY2xrLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGMya19jbGtzcmVnW10gPSB7CkBAIC0xMDc3LDYgKzkyNSwxMiBAQAogCXsgLmNsayA9ICZleHRfcGh5MF9jbGssICAgICAuY29uX2lkID0gImV4dF9waHkwIn0sCiAJeyAuY2xrID0gJmV4dF9waHkxX2NsaywgICAgIC5jb25faWQgPSAiZXh0X3BoeTEifSwKIAl7IC5jbGsgPSAmZXh0X3BoeTJfY2xrLCAgICAgLmNvbl9pZCA9ICJleHRfcGh5MiJ9LAorCXsgLmNsayA9ICZ0cGlfY2xrLCAgICAgCSAgICAuY29uX2lkID0gInRwaSJ9LAorCXsgLmNsayA9ICZjc3lzX2NsaywgICAgICAgICAuY29uX2lkID0gImNzeXMifSwKKwl7IC5jbGsgPSAmdHN1bnRnX2NsaywgICAgICAgLmNvbl9pZCA9ICJ0c3VudGcifSwKKwl7IC5jbGsgPSAmc2F0YV9vY2NfY2xrLCAgICAgLmNvbl9pZCA9ICJzYXRhX29jYyJ9LAorCXsgLmNsayA9ICZwY2llX29jY19jbGssICAgICAuY29uX2lkID0gInBjaWVfb2NjIn0sCisJeyAuY2xrID0gJnNnbWlpX29jY19jbGssICAgIC5jb25faWQgPSAic2dtaWlfb2NjIn0sCiB9OwogCiAvKiBJbml0aWxpemUgYWxsIHRoZSBhdmFpbGFibGUgY2xvY2tzICovCkBAIC0xMTUwLDEzICsxMDA0LDE3IEBACiAJCWlmIChjbGstPnVzZWNvdW50ID4gMCkKIAkJCWNvbnRpbnVlOwogCi0JCS8qIEZJWE1FIEN1cnJlbnRseSBXZSBBcmUgT25seSBEaXNhYmxpbmcgVGhlIEVYVCBQSFkwLzEvMiAKLQkJICogQ2xvY2sgRm9yIE5vIEhhcm0uCisJCS8qIEZJWE1FIEN1cnJlbnRseSB0aGVyZSBpcyBubyBjbG9jayBGVyBzdXBwb3J0IGZvciB0aGUKKyAgICAgICAgICAgICAgICAgKiBmb2xsb3dpbmcgY2xvY2tzIGluIGNvcnJlc3BvbmRpbmcgZHJpdmVyIC4gU28gc2tpcHBpbmcgdGhlc2UKKwkJICogY2xvY2tzIGZyb20gYnkgZGVmYXVsdCBkaXNhYmxlIHN0YXRlLgorICAgICAgICAgICAgICAgICAqIEFsbCBvdGhlciB1bnVzZWQgY2xvY2tzIHdpbGwgYmUgZGlzYWJsZWQuCiAgICAgICAgICAgICAgICAgKi8KLQkJaWYgKCAhc3RyY21wKGNsay0+bmFtZSwgImV4dF9waHkwIikgfHwgIXN0cmNtcChjbGstPm5hbWUsICJleHRfcGh5MSIpCi0JCQkJCQkgICB8fCAhc3RyY21wKGNsay0+bmFtZSwgImV4dF9waHkyIikgKSAKKwkJaWYgKCBzdHJjbXAoY2xrLT5uYW1lLCAiaGZlX2NvcmUiKSAmJgorCQkJCXN0cmNtcChjbGstPm5hbWUsICJpcHNlY19lYXBlIikgJiYKKwkJCQlzdHJjbXAoY2xrLT5uYW1lLCAicGxsMyIpICYmCisJCQkJc3RyY21wKGNsay0+bmFtZSwgImFybV9wZXJpIikgKQogCQl7Ci0JCQlwcl9kZWJ1ZygiQ2xvY2tzOiBkaXNhYmxlZCB1bnVzZWQgJXNcbiIsIGNsay0+bmFtZSk7CisJCQlwcl9pbmZvKCJDbG9ja3M6IGRpc2FibGVkIHVudXNlZCAlc1xuIiwgY2xrLT5uYW1lKTsKIAkJCV9fY2xrX2Rpc2FibGVfdW51c2VkKGNsayk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2NvbWNlcnRvLTIwMDAuYyBiL2FyY2gvYXJtL21hY2gtY29tY2VydG8vY29tY2VydG8tMjAwMC5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggODU1ODljZC4uMmY3MzZkOQotLS0gYS9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2NvbWNlcnRvLTIwMDAuYworKysgYi9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2NvbWNlcnRvLTIwMDAuYwpAQCAtMzYsNiArMzYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KIApAQCAtMzQ0LDIyICszNDYsNiBAQAogCWludCBpOwogI2VuZGlmCiAKLQlzdHJ1Y3QgY2xrICpsMmNjX2NsazsKLQotCS8qIEdldCB0aGUgTDJDQyBjbG9jayAqLwotCWwyY2NfY2xrID0gY2xrX2dldChOVUxMLCJsMmNjIik7Ci0JaWYgKElTX0VSUihsMmNjX2NsaykpIHsKLQkJcHJfZXJyKCIlczogVW5hYmxlIHRvIG9idGFpbiBMMkNDIGNsb2NrOiAlbGRcbiIsX19mdW5jX18sUFRSX0VSUihsMmNjX2NsaykpOwotCQkvKiBMMkNDIGluaXRpbGl6YXRpb24gY2Fubm90IHByb2NlZWQgZnJvbSBoZXJlICovCi0JCUJVRygpOwotCX0KLQotCS8qIEVuYWJsZSB0aGUgTDJDQyBjbGsgICovCi0JaWYgKGNsa19lbmFibGUobDJjY19jbGspKXsKLQkJcHJfZXJyKCIlczogVW5hYmxlIHRvIGVuYWJsZSBMMkNDIGNsb2NrOlxuIixfX2Z1bmNfXyk7Ci0JCS8qIEwyQ0MgaW5pdGlsaXphdGlvbiBjYW5ub3QgcHJvY2VlZCBmcm9tIGhlcmUgKi8KLQkJQlVHKCk7Ci0JfQogCiAJbDJjYWNoZV9iYXNlID0gKHZvaWQgKilDT01DRVJUT19MMzEwX1ZBRERSOwogCUJVR19PTighbDJjYWNoZV9iYXNlKTsKQEAgLTM2NywxMSArMzUzLDIxIEBACiAJLyogU2V0IExhdGVuY3kgb2YgTDJDQyB0byBtaW5pbXVtIChpLmUuIDEgY3ljbGUpICovCiAJbDJ4MF9sYXRlbmN5KDEsIDEsIDEsIDEsIDEsIDEpOwogCisJLyogU2V0IEwyIGFkZHJlc3MgZmlsdGVyaW5nLCB1c2UgTDJDQyBNMSBwb3J0IGZvciBERFIgYWNjZXNzZXMgKi8KKwl3cml0ZWwoMHg4MDAwMDAwMCwgbDJjYWNoZV9iYXNlICsgTDJYMF9BRERSX0ZJTFRFUl9FTkQpOworCXdyaXRlbCgweDAwMDAwMDAwIHwgTDJYMF9BRERSX0ZJTFRFUl9FTiwgbDJjYWNoZV9iYXNlICsgTDJYMF9BRERSX0ZJTFRFUl9TVEFSVCk7CisKIAlhc3NvY2lhdGl2aXR5ID0gKENPTUNFUlRPX0wyQ0NfQVNTT0NJQVRJVklUWV84V0FZIDw8IENPTUNFUlRPX0wyQ0NfQVNTT0NJQVRJVklUWV9TSElGVCkgJiBDT01DRVJUT19MMkNDX0FTU09DSUFUSVZJVFlfTUFTSzsKIAl3YXlzaXplID0gKENPTUNFUlRPX0wyQ0NfQVNTT0NJQVRJVklUWV8zMktCIDw8IENPTUNFUlRPX0wyQ0NfV0FZU0laRV9TSElGVCkgJiBDT01DRVJUT19MMkNDX1dBWVNJWkVfTUFTSzsKIAlhdXhfdmFsID0gYXNzb2NpYXRpdml0eSB8IHdheXNpemU7CiAJYXV4X21hc2sgPSAoQ09NQ0VSVE9fTDJDQ19BU1NPQ0lBVElWSVRZX01BU0sgfCBDT01DRVJUT19MMkNDX1dBWVNJWkVfTUFTSyk7CiAKKwkvKiBTaGFyZWFibGUgYXR0cmlidXRlIG92ZXJyaWRlIGVuYWJsZSAqLworCS8qIFRoaXMgcHJldmVudHMgdGhlIGNhY2hlIGZyb20gY2hhbmdpbmcgIm5vcm1hbCBtZW1vcnkvbm9uLWNhY2hlYWJsZSIgYWNjZXNzZXMgdG8KKwkibm9ybWFsIG1lbW9yeS9jYWNoZWFibGUvd3JpdGV0aHJvdWdoIG5vIHJlYWQvd3JpdGUgYWxsb2NhdGUiKi8KKwlhdXhfdmFsIHw9ICgxIDw8IDIyKTsKKwlhdXhfbWFzayB8PSAoMSA8PCAyMik7CisKIAkvKiBXcml0ZSBhbGxvY2F0ZSBvdmVycmlkZSwgbm8gd3JpdGUgYWxsb2NhdGUgKi8KIAlhdXhfdmFsIHw9ICgxIDw8IDIzKTsKIAlhdXhfbWFzayB8PSAoMyA8PCAyMyk7CkBAIC00MzAsMTAgKzQyNiwzMCBAQAogCiBzdGF0aWMgaW50IGNvbWNlcnRvX2FoY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgX19pb21lbSAqbW1pbykKIHsKKwlzdHJ1Y3Qgc2VyZGVzX3JlZ3NfcyAqcF9zYXRhX3BoeV9yZWdfZmlsZTsKKwlpbnQgc2VyZGVzX3JlZ3Nfc2l6ZTsKICAgICAgICAgdTMyIHZhbDsKLSAgICAgICAgdmFsID0gcmVhZGwoQ09NQ0VSVE9fR1BJT19TWVNURU1fQ09ORklHKTsKKwlpbnQgcmVmX2Nsa18yNDsKIAotIAkvL0JyaW5nIFNBVEEgUE1VIGFuZCBPT0Igb3V0IG9mIHJlc2V0CisJdmFsID0gcmVhZGwoQ09NQ0VSVE9fR1BJT19TWVNURU1fQ09ORklHKTsKKwlyZWZfY2xrXzI0ID0gdmFsICYgKEJJVF81X01TS3xCSVRfN19NU0spOworCisJaWYocmVmX2Nsa18yNCkKKwl7CisJCXBfc2F0YV9waHlfcmVnX2ZpbGUgPSAmc2F0YV9waHlfcmVnX2ZpbGVfMjRbMF07CisJCXNlcmRlc19yZWdzX3NpemUgPSBzaXplb2Yoc2F0YV9waHlfcmVnX2ZpbGVfMjQpOworCQlwcmludGsoS0VSTl9JTkZPICJTQVRBIFNlcmRlczogMjRNaHogcmVmIGNsa1xuIik7CisJfQorCWVsc2UKKwl7CisJCXBfc2F0YV9waHlfcmVnX2ZpbGUgPSAmc2F0YV9waHlfcmVnX2ZpbGVfNDhbMF07CisJCXNlcmRlc19yZWdzX3NpemUgPSBzaXplb2Yoc2F0YV9waHlfcmVnX2ZpbGVfNDgpOworCQlwcmludGsoS0VSTl9JTkZPICJTQVRBIFNlcmRlczogNDhNaHogcmVmIGNsa1xuIik7CisJfQorCisJLy9UYWtlIFNBVEEgQVhJIGRvbWFpbiBvdXQgb2YgcmVzZXQKKwljMjAwMF9ibG9ja19yZXNldChDT01QT05FTlRfQVhJX1NBVEEsMCk7CisJLy9CcmluZyBTQVRBIFBNVSBhbmQgT09CIG91dCBvZiByZXNldAogCWMyMDAwX2Jsb2NrX3Jlc2V0KENPTVBPTkVOVF9TQVRBX1BNVSwwKTsKIAljMjAwMF9ibG9ja19yZXNldChDT01QT05FTlRfU0FUQV9PT0IsMCk7CiAKQEAgLTQ0Nyw4ICs0NjMsOCBAQAogCQkJYzIwMDBfYmxvY2tfcmVzZXQoQ09NUE9ORU5UX1NFUkRFU19TQVRBMCwwKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VyZGVzIEluaXRpYWxpemF0aW9uLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHNlcmRlc19waHlfaW5pdChTRVJERVNfUEhZMSwgIHNhdGEwX3BoeV9yZWdfZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzYXRhMF9waHlfcmVnX2ZpbGUpIC8gc2l6ZW9mKHNlcmRlc19yZWdzX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHNlcmRlc19waHlfaW5pdChTRVJERVNfUEhZMSwgIHBfc2F0YV9waHlfcmVnX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJkZXNfcmVnc19zaXplIC8gc2l6ZW9mKHNlcmRlc19yZWdzX3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RfREVWX1RZUEVfU0FUQSkgKQogICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBzZXJkZXMxICEhXG4iLCBfX2Z1bmNfXyk7CkBAIC00NjUsOCArNDgxLDggQEAKIAkJCWMyMDAwX2Jsb2NrX3Jlc2V0KENPTVBPTkVOVF9TRVJERVNfU0FUQTEsMCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNlcmRlcyBJbml0aWFsaXphdGlvbi4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBzZXJkZXNfcGh5X2luaXQoU0VSREVTX1BIWTIsICBzYXRhMF9waHlfcmVnX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2F0YTBfcGh5X3JlZ19maWxlKSAvIHNpemVvZihzZXJkZXNfcmVnc190KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBzZXJkZXNfcGh5X2luaXQoU0VSREVTX1BIWTIsICBwX3NhdGFfcGh5X3JlZ19maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyZGVzX3JlZ3Nfc2l6ZSAvIHNpemVvZihzZXJkZXNfcmVnc190KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNEX0RFVl9UWVBFX1NBVEEpICkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGluaXRpYWxpemUgc2VyZGVzMiAhIVxuIiwgX19mdW5jX18pOwpAQCAtNDgwLDYgKzQ5NiwyNCBAQAogfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT19VQVJUMF9TVVBQT1JUKSB8fCBkZWZpbmVkKENPTkZJR19DT01DRVJUT19VQVJUMV9TVVBQT1JUKQorI2RlZmluZSBVQVJUX0RXQ19VU1IJMHgxRgorc3RhdGljIGludCBmYXN0dWFydF9oYW5kbGVfaXJxKHN0cnVjdCB1YXJ0X3BvcnQgKnApCit7CisJdW5zaWduZWQgaW50IGlpciA9IHAtPnNlcmlhbF9pbihwLCBVQVJUX0lJUik7CisJdW5zaWduZWQgaW50IGR1bW15OworCWlmIChzZXJpYWw4MjUwX2hhbmRsZV9pcnEocCwgaWlyKSkgeworCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKChpaXIgJiBVQVJUX0lJUl9CVVNZKSA9PSBVQVJUX0lJUl9CVVNZKSB7CisJCS8qIENsZWFyIHRoZSBVU1IgKi8KKwkJZHVtbXkgPSBwLT5zZXJpYWxfaW4ocCwgVUFSVF9EV0NfVVNSKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjb21jZXJ0b19wbXVfcmVzb3VyY2VzW10gPSB7CiAJewogCQkuc3RhcnQJPSBJUlFfQTlfUE1VMCwKQEAgLTUxMCw2ICs1NDQsNyBAQAogICAgICAgICAgICAgICAgIC5tYXBiYXNlICAgICAgICA9IENPTUNFUlRPX0FYSV9VQVJUMV9CQVNFLAogCQkubWVtYmFzZQk9ICh2b2lkICopQ09NQ0VSVE9fQVhJX1VBUlQxX1ZBRERSLAogICAgICAgICAgICAgICAgIC5pcnEgICAgICAgICAgICA9IElSUV9VQVJUMSwKKwkJLmhhbmRsZV9pcnEJPSBmYXN0dWFydF9oYW5kbGVfaXJxLAogICAgICAgICAgICAgICAgIC5mbGFncyAgICAgICAgICA9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCB8IFVQRl9JT1JFTUFQLAogICAgICAgICAgICAgICAgIC5pb3R5cGUgICAgICAgICA9IFVQSU9fTUVNLAogICAgICAgICAgICAgICAgIC5yZWdzaGlmdCAgICAgICA9IDIsCkBAIC01MjAsNiArNTU1LDcgQEAKICAgICAgICAgICAgICAgICAubWFwYmFzZSAgICAgICAgPSBDT01DRVJUT19BWElfVUFSVDBfQkFTRSwKICAgICAgICAgICAgICAgICAubWVtYmFzZSAgICAgICAgPSAodm9pZCAqKUNPTUNFUlRPX0FYSV9VQVJUMF9WQUREUiwKICAgICAgICAgICAgICAgICAuaXJxICAgICAgICAgICAgPSBJUlFfVUFSVDAsCisJCS5oYW5kbGVfaXJxCT0gZmFzdHVhcnRfaGFuZGxlX2lycSwKICAgICAgICAgICAgICAgICAuZmxhZ3MgICAgICAgICAgPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QgfCBVUEZfSU9SRU1BUCwKICAgICAgICAgICAgICAgICAuaW90eXBlICAgICAgICAgPSBVUElPX01FTSwKICAgICAgICAgICAgICAgICAucmVnc2hpZnQgICAgICAgPSAyLApAQCAtNzQ3LDYgKzc4MywxNiBAQAogfTsKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fQ1NZU19UUElfQ0xPQ0spIAorc3RydWN0IHBsYXRmb3JtX2RldmljZSBjb21jZXJ0b19kZXZpY2VfdHBpX2NzeXNfY2xrID0geworCS5uYW1lCQk9ICJ0cGlfY3N5cyIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0gIHsKKwkJLnBsYXRmb3JtX2RhdGEJCT0gTlVMTCwKKwl9LAorfTsKKyNlbmRpZgorCiBpbnQgdXNiM19jbGtfaW50ZXJuYWwgPSAxOwogc3RhdGljIGludCBfX2luaXQgZ2V0X3VzYjNfY2xrX21vZGUoY2hhciAqc3RyKQogewpAQCAtODU3LDExICs5MDMsMTQgQEAKIAkmY29tY2VydG9fZGV2aWNlX2VwYXZpc19jaWUsCiAJJmNvbWNlcnRvX2RldmljZV9lcGF2aXNfZGVjb21wLAogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fQ1NZU19UUElfQ0xPQ0spCisJJmNvbWNlcnRvX2RldmljZV90cGlfY3N5c19jbGssCisjZW5kaWYKIH07CiAKIHZvaWQgX19pbml0IGRldmljZV9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IGNsayAqYXhpX2NsaywqZGRyX2NsaywqYXJtX2NsazsKKwlzdHJ1Y3QgY2xrICpheGlfY2xrLCpkZHJfY2xrLCphcm1fY2xrLCpsMmNjX2NsazsKIAlIQUxfY2xrX2Rpdl9iYWNrdXBfcmVsb2NhdGVfdGFibGUgKCk7CiAJc3lzdGVtX3JldiA9IChyZWFkbChDT01DRVJUT19HUElPX0RFVklDRV9JRF9SRUcpID4+IDI0KSAmIDB4ZjsKIApAQCAtOTE2LDYgKzk2NSwyMSBAQAogCQkvKiBTeXN0ZW0gY2Fubm90IHByb2NlZWQgZnJvbSBoZXJlICovCiAJCUJVRygpOwogCX0KKworCS8qIEdldCB0aGUgTDJDQyBjbG9jayAqLworCWwyY2NfY2xrID0gY2xrX2dldChOVUxMLCJsMmNjIik7CisJaWYgKElTX0VSUihsMmNjX2NsaykpIHsKKwkJcHJfZXJyKCIlczogVW5hYmxlIHRvIG9idGFpbiBMMkNDIGNsb2NrOiAlbGRcbiIsX19mdW5jX18sUFRSX0VSUihsMmNjX2NsaykpOworCQkvKiBMMkNDIGluaXRpbGl6YXRpb24gY2Fubm90IHByb2NlZWQgZnJvbSBoZXJlICovCisJCUJVRygpOworCX0KKworCS8qIEVuYWJsZSB0aGUgTDJDQyBjbGsgICovCisJaWYgKGNsa19lbmFibGUobDJjY19jbGspKXsKKwkJcHJfZXJyKCIlczogVW5hYmxlIHRvIGVuYWJsZSBMMkNDIGNsb2NrOlxuIixfX2Z1bmNfXyk7CisJCS8qIEwyQ0MgaW5pdGlsaXphdGlvbiBjYW5ub3QgcHJvY2VlZCBmcm9tIGhlcmUgKi8KKwkJQlVHKCk7CisJfQogCQogI2lmZGVmIENPTkZJR19DQUNIRV9MMlgwCiAJY29tY2VydG9fbDJjY19pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2NvbWNlcnRvLXRwaWNzeXMuYyBiL2FyY2gvYXJtL21hY2gtY29tY2VydG8vY29tY2VydG8tdHBpY3N5cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMWU0ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2NvbWNlcnRvLXRwaWNzeXMuYwpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2NvbWNlcnRvLXRwaWNzeXMuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK3N0cnVjdCBjbGsgKmNsa190cGksKmNsa19jc3lzOworCitzdGF0aWMgaW50IHRwaV9jc3lzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGVycj0wOworCS8qIEdldCB0aGUgcmVmcmVuY2UgdG8gVFBJIGNsayBzdHJ1Y3R1cmUgKi8KKwljbGtfdHBpID0gY2xrX2dldChOVUxMLCJ0cGkiKTsKKworCS8qIEVycm9yIEhhbmRsaW5nICwgaWYgbm8gVFBJIGNsb2NrIHJlZmVyZW5jZTogcmV0dXJuIGVycm9yICovCisJaWYgKElTX0VSUihjbGtfdHBpKSkgeworCQlwcl9lcnIoIiVzOiBVbmFibGUgdG8gb2J0YWluICBjbG9jazogJWxkXG4iLF9fZnVuY19fLFBUUl9FUlIoY2xrX3RwaSkpOworCQllcnIgPSBQVFJfRVJSKGNsa190cGkpOworCQlnb3RvIGVycl90cGlfZ2V0OworCX0KKworCS8qIEVuYWJsZSB0aGUgVFBJIGNsb2NrICxyZXF1aXJlZCBmb3IgY29ydGV4IEE5IEpUQUcgKi8KKwllcnIgPSBjbGtfZW5hYmxlKGNsa190cGkpOworCWlmIChlcnIpeworCQlwcl9lcnIoIiVzOiBUUEkgY2xvY2sgZmFpbGVkIHRvIGVuYWJsZTpcbiIsX19mdW5jX18pOworCQlnb3RvIGVycl90cGlfZW5hYmxlOworCX0KKworCS8qIEdldCB0aGUgQ1NZUyBjbGsgc3RydWN0dXJlICxyZXF1aXJlZCBvZnIgY29ydGV4IEE5IGNvcmVzaWdodCovCisJY2xrX2NzeXMgPSBjbGtfZ2V0KE5VTEwsImNzeXMiKTsKKworCS8qIEVycm9yIEhhbmRsaW5nICwgaWYgbm8gQ1NZUyBjbG9jayByZWZlcmVuY2U6IHJldHVybiBlcnJvciAKKwkgKiBEaXNhYmxlIHRoZSBUUEkgY2xvY2sgZW5hYmxlZCBiZWZvcmUuIAorCSAqLworCWlmIChJU19FUlIoY2xrX2NzeXMpKSB7CisJCXByX2VycigiJXM6IFVuYWJsZSB0byBvYnRhaW4gIGNsb2NrOiAlbGRcbiIsX19mdW5jX18sUFRSX0VSUihjbGtfY3N5cykpOworCQllcnIgPSBQVFJfRVJSKGNsa19jc3lzKTsKKyAJCWdvdG8gZXJyX2NzeXNfZ2V0OworCX0KKworCS8qRW5hYmxlIHRoZSAgQ1NZUyBjbG9jayAqLworCWVyciA9IGNsa19lbmFibGUoY2xrX2NzeXMpOworCWlmIChlcnIpeworCQlwcl9lcnIoIiVzOiBDU1lTIGNsb2NrIGZhaWxlZCB0byBlbmFibGU6XG4iLF9fZnVuY19fKTsKKwkJLyogRGlzYWJsZSB0aGUgQ1NZUyhBOSBjb3Jlc2lnaHQgY2xvY2sgYWxzbyAqLyAKKwkJZ290byBlcnJfY3N5c19lbmFibGU7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9jc3lzX2VuYWJsZToKKwljbGtfcHV0KGNsa19jc3lzKTsKK2Vycl9jc3lzX2dldDoKKwljbGtfZGlzYWJsZShjbGtfdHBpKTsKK2Vycl90cGlfZW5hYmxlOgorCWNsa19wdXQoY2xrX3RwaSk7CitlcnJfdHBpX2dldDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHRwaV9jc3lzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCisJLyogRGlzYWJsZSB0aGUgVFBJL0NTWVMgY2xvY2sgKi8KKwljbGtfZGlzYWJsZShjbGtfdHBpKTsKKwljbGtfcHV0KGNsa190cGkpOworCisJY2xrX2Rpc2FibGUoY2xrX2NzeXMpOworCWNsa19wdXQoY2xrX2NzeXMpOworCisJcmV0dXJuIDA7Cit9CisJCisKKy8qIFN0cnVjdHVyZSBmb3IgRGV2aWNlIERyaXZlciAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdHBpX2NzeXNfcGxhdGZvcm1fZHJpdmVyID0geworCS5wcm9iZSA9IHRwaV9jc3lzX3Byb2JlLAorCS5yZW1vdmUgPSB0cGlfY3N5c19yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidHBpX2NzeXMiLAorCX0sCQorfTsKKworc3RhdGljIGludCBjb21jZXJ0b190cGlfY3N5c19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdHBpX2NzeXNfcGxhdGZvcm1fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgY29tY2VydG9fdHBpX2NzeXNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0cGlfY3N5c19wbGF0Zm9ybV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChjb21jZXJ0b190cGlfY3N5c19pbml0KTsKK21vZHVsZV9leGl0KGNvbWNlcnRvX3RwaV9jc3lzX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWNlcnRvIFRQSS9DU1lTIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2NvbWNlcnRvLXZ3ZC5jIGIvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9jb21jZXJ0by12d2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTQzMWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9jb21jZXJ0by12d2QuYwpAQCAtMCwwICsxLDU1IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtY29tY2VydG8vY29tY2VydG8tdndkLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDExIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworCitzdGF0aWMgaW50IGNvbWNlcnRvX3dpZmlfcnhfZHVtbXlfaGRscihpbnQgKCpoZGxyKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSk7CitzdGF0aWMgaW50ICgqdndkX3J4X2hkbHIpKHN0cnVjdCBza19idWZmICopID0gY29tY2VydG9fd2lmaV9yeF9kdW1teV9oZGxyOworCitzdGF0aWMgaW50IGNvbWNlcnRvX3dpZmlfcnhfZHVtbXlfaGRscihpbnQgKCpoZGxyKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSkKK3sKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBjb21jZXJ0b193aWZpX3J4X2Zhc3RwYXRoX3JlZ2lzdGVyKGludCAoKmhkbHIpKHN0cnVjdCBza19idWZmICpza2IpKQoreworCXByaW50ayhLRVJOX0lORk8gIiVzOiVkIFZXRCBUeCBmdW5jdGlvbiByZWdpc3RlcmVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18gKTsKKwl2d2RfcnhfaGRsciA9IGhkbHI7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjb21jZXJ0b193aWZpX3J4X2Zhc3RwYXRoX3VucmVnaXN0ZXIodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICIlczolZCBWV0QgVHggZnVuY3Rpb24gdW5yZWdpc3RlcmVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18gKTsKKwl2d2RfcnhfaGRsciA9IGNvbWNlcnRvX3dpZmlfcnhfZHVtbXlfaGRscjsKKworCXJldHVybjsKK30KKworaW50IGNvbWNlcnRvX3dpZmlfcnhfZmFzdHBhdGgoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gdndkX3J4X2hkbHIoc2tiKTsKKworfQorCitFWFBPUlRfU1lNQk9MKGNvbWNlcnRvX3dpZmlfcnhfZmFzdHBhdGhfcmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTChjb21jZXJ0b193aWZpX3J4X2Zhc3RwYXRoX3VucmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTChjb21jZXJ0b193aWZpX3J4X2Zhc3RwYXRoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY29tY2VydG8vZG1hLmMgYi9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2RtYS5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY29tY2VydG8vaGVhZHNtcC5TIGIvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9oZWFkc21wLlMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9ob3RwbHVnLmMgYi9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2hvdHBsdWcuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2luY2x1ZGUvbWFjaC9jMmtfZG1hLmggYi9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2luY2x1ZGUvbWFjaC9jMmtfZG1hLmgKaW5kZXggNzY1YWIwYi4uYjFkZDE4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9pbmNsdWRlL21hY2gvYzJrX2RtYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtY29tY2VydG8vaW5jbHVkZS9tYWNoL2Mya19kbWEuaApAQCAtOTcsNiArOTcsNyBAQAogc3RydWN0IGNvbWNlcnRvX2RtYV9idWYgewogCWRtYV9hZGRyX3QgcGh5c19hZGRyOwogCXVuc2lnbmVkIGludCBsZW47CisJdW5zaWduZWQgaW50IHNwbGl0OwogfTsKIAogc3RydWN0IGNvbWNlcnRvX2RtYV9zZyB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2luY2x1ZGUvbWFjaC9jb21jZXJ0by0yMDAwLmggYi9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2luY2x1ZGUvbWFjaC9jb21jZXJ0by0yMDAwLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA4ZGM0ODMwLi40YTI3ZDA0Ci0tLSBhL2FyY2gvYXJtL21hY2gtY29tY2VydG8vaW5jbHVkZS9tYWNoL2NvbWNlcnRvLTIwMDAuaAorKysgYi9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2luY2x1ZGUvbWFjaC9jb21jZXJ0by0yMDAwLmgKQEAgLTE1NSw2ICsxNTUsMTAgQEAKICNkZWZpbmUgQ09NQ0VSVE9fR0lDX0RJU1RfVkFERFIJCQkoQ09NQ0VSVE9fU0NVX1ZBRERSICsgMHgxMDAwKQogI2RlZmluZSBDT01DRVJUT19MMzEwX1ZBRERSCQkJCShDT01DRVJUT19TQ1VfVkFERFIgKyAweDEwMDAwKQogCisjZGVmaW5lIENPTUNFUlRPX0RJU1RSX0lOVF9TRVRfUEVORElORyAgICAgICAgICAgICAgICAgICAoQ09NQ0VSVE9fR0lDX0RJU1RfVkFERFIgKyAweDIwMCkKKyNkZWZpbmUgQ09NQ0VSVE9fRElTVFJfSU5UX1NFVF9QRU5ESU5HX09GRlNFVF80ICAgICAgICAgIChDT01DRVJUT19ESVNUUl9JTlRfU0VUX1BFTkRJTkcgKyAweDQpCisjZGVmaW5lIENPTUNFUlRPX0RJU1RSX0lOVF9TRVRfUEVORElOR19PRkZTRVRfOCAgICAgICAgICAoQ09NQ0VSVE9fRElTVFJfSU5UX1NFVF9QRU5ESU5HICsgMHg4KQorCiAjZGVmaW5lIElSQU1fTUVNT1JZX1ZBRERSCQkJMHhmMDgwMDAwMAogI2RlZmluZSBDT01DRVJUT19BUEJfVkFERFIJCQkJMHhmMDkwMDAwMAkvKiBWQSBvZiBJTyBvbiBBUEIgYnVzICovCiAjZGVmaW5lIENPTUNFUlRPX0FQQl9TSVpFCQkJCTB4MDBDMDAwMDAJCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2luY2x1ZGUvbWFjaC9jb21jZXJ0by0yMDAwL2Nsay1yc3QuaCBiL2FyY2gvYXJtL21hY2gtY29tY2VydG8vaW5jbHVkZS9tYWNoL2NvbWNlcnRvLTIwMDAvY2xrLXJzdC5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMWQ5YTY5Yi4uNjMxZWE5OAotLS0gYS9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2luY2x1ZGUvbWFjaC9jb21jZXJ0by0yMDAwL2Nsay1yc3QuaAorKysgYi9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2luY2x1ZGUvbWFjaC9jb21jZXJ0by0yMDAwL2Nsay1yc3QuaApAQCAtOTcsNiArOTcsMTIgQEAKICNkZWZpbmUgU0FUQV9PT0JfQ0xLX0NOVFJMIAkJQVBCX1ZBRERSKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MTcwKQogI2RlZmluZSBTQVRBX09PQl9DTEtfRElWX0NOVFJMIAkJQVBCX1ZBRERSKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MTc0KQogI2RlZmluZSBTQVRBX09PQl9SRVNFVCAJCQlBUEJfVkFERFIoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgxNzgpCisjZGVmaW5lIFNBVEFfT0NDX0NMS19DTlRSTAkJQVBCX1ZBRERSKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MTgwKQorI2RlZmluZSBTQVRBX09DQ19DTEtfRElWX0NOVFJMCQlBUEJfVkFERFIoQ09NQ0VSVE9fQVBCX0NMS19CQVNFICsgMHgxODQpCisjZGVmaW5lIFNBVEFfT0NDX1JFU0VUCQkJQVBCX1ZBRERSKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MTg4KQorI2RlZmluZSBQQ0lFX09DQ19DTEtfQ05UUkwJCUFQQl9WQUREUihDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDE5MCkKKyNkZWZpbmUgUENJRV9PQ0NfQ0xLX0RJVl9DTlRSTAkJQVBCX1ZBRERSKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MTk0KQorI2RlZmluZSBQQ0lFX09DQ19SRVNFVAkJCUFQQl9WQUREUihDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDE5OCkKICNkZWZpbmUgU0dNSUlfT0NDX0NMS19DTlRSTCAJCUFQQl9WQUREUihDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDFBMCkKICNkZWZpbmUgU0dNSUlfT0NDX0NMS19ESVZfQ05UUkwgCUFQQl9WQUREUihDT01DRVJUT19BUEJfQ0xLX0JBU0UgKyAweDFBNCkKICNkZWZpbmUgU0dNSUlfT0NDX1JFU0VUIAkJQVBCX1ZBRERSKENPTUNFUlRPX0FQQl9DTEtfQkFTRSArIDB4MUE4KQpAQCAtMTQyLDYgKzE0OCwyMiBAQAogI2RlZmluZSBQTEwyCQkJCTIKICNkZWZpbmUgUExMMwkJCQkzCiAKKy8qIERldmljZSBSZXNldCBDb250cm9sIFJlZ2lzdGVyIChERVZJQ0VfUlNUX0NOVFJMKSovCisKKyNkZWZpbmUgQ0xLX0RJVl9SRVNUQVJUICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgV0RfU1RBVFVTX0NMUiAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgQVhJX1dEX1JTVF9FTiAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgREVCVUdfUlNUICAgICAgICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgQ0xLUlNUX1NDTFJfUlNUICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgRlVOQ19TQ0xSX1JTVCAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgR0xCX1NDTFJfUlNUICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgUFdSX09OX1NPRlRfUlNUICAgICAgICAgKDEgPDwgMCkKKworLyogR2VuZXJhbCBEZXZpY2UgQ29uZmlndXJhdGlvbiBTdGF0dXMgUmVnaXN0ZXIgKEdOUkxfREVWSUNFX1NUQVRVUykgKi8KKyNkZWZpbmUgQ1BVMV9XRF9SU1RfQUNUSVZBVEVEICAgKDEgPDwgMikKKyNkZWZpbmUgQ1BVMF9XRF9SU1RfQUNUSVZBVEVEICAgKDEgPDwgMSkKKyNkZWZpbmUgQVhJX1dEX1JTVF9BQ1RJVkFURUQgICAgKDEgPDwgMCkKKwogLyogQ2xvY2sgQ29udHJvbCBSZWdpc3RlciAqLwogI2RlZmluZSBDTE9DS19ET01BSU5fRU5BQkxFCQkxCiAjZGVmaW5lIENMT0NLX0RPTUFJTl9FTkFCTEVfU0hJRlQJMApAQCAtMjIzLDYgKzI0NSw3IEBACiAKIC8qIEZ1bmN0aW9uIERlY2xhcmF0aW9uICovCiBleHRlcm4gdm9pZCBIQUxfY2xrX2Rpdl9iYWNrdXBfcmVsb2NhdGVfdGFibGUgKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgSEFMX2dldF9yZWZfY2xrICh2b2lkKTsKICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY29tY2VydG8vaW5jbHVkZS9tYWNoL2NvbWNlcnRvLTIwMDAvZXhwLWJ1cy5oIGIvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9pbmNsdWRlL21hY2gvY29tY2VydG8tMjAwMC9leHAtYnVzLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9pbmNsdWRlL21hY2gvY29tY2VydG8tMjAwMC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2luY2x1ZGUvbWFjaC9jb21jZXJ0by0yMDAwL2dwaW8uaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2luY2x1ZGUvbWFjaC9jb21jZXJ0by0yMDAwL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtY29tY2VydG8vaW5jbHVkZS9tYWNoL2NvbWNlcnRvLTIwMDAvaXJxcy5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY29tY2VydG8vaW5jbHVkZS9tYWNoL2NvbWNlcnRvLTIwMDAvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2luY2x1ZGUvbWFjaC9jb21jZXJ0by0yMDAwL21lbW9yeS5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY29tY2VydG8vaW5jbHVkZS9tYWNoL2NvbWNlcnRvLTIwMDAvcGNpZS5oIGIvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9pbmNsdWRlL21hY2gvY29tY2VydG8tMjAwMC9wY2llLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAyM2Y2NGU2Li4wMTk1OTZhCi0tLSBhL2FyY2gvYXJtL21hY2gtY29tY2VydG8vaW5jbHVkZS9tYWNoL2NvbWNlcnRvLTIwMDAvcGNpZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtY29tY2VydG8vaW5jbHVkZS9tYWNoL2NvbWNlcnRvLTIwMDAvcGNpZS5oCkBAIC02MCw5ICs2MCwxMSBAQAogI2RlZmluZSAJQ0ZHNV9BUFBfSU5JVF9SU1QJMHgwMQogI2RlZmluZSAJQ0ZHNV9MVFNTTV9FTkFCTEUJMHgwMgogI2RlZmluZSAJQ0ZHNV9BUFBfUkRZX0wyMwkweDA0CisjZGVmaW5lIAlDRkc1X0xJTktfRE9XTl9SU1QJMHgyMDAKIAogCiAvKiBTVFMwIFJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIAlTVFMwX0xJTktfUkVRX1JTVF9OT1QJMHgwMDAxCiAjZGVmaW5lIAlTVFMwX1hNTEhfTElOS19VUAkweDgwMDAKICNkZWZpbmUgCVNUUzBfUkRMSF9MSU5LX1VQCTB4MTAwMDAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9pbmNsdWRlL21hY2gvY29tY2VydG8tY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2luY2x1ZGUvbWFjaC9jb21jZXJ0by1jb21tb24uaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtY29tY2VydG8vaW5jbHVkZS9tYWNoL21lbW9yeS5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY29tY2VydG8vaW5jbHVkZS9tYWNoL3BjaWUtYzIwMDAuaCBiL2FyY2gvYXJtL21hY2gtY29tY2VydG8vaW5jbHVkZS9tYWNoL3BjaWUtYzIwMDAuaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDY1MzQwYzIuLjkxMTBkNGYKLS0tIGEvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9pbmNsdWRlL21hY2gvcGNpZS1jMjAwMC5oCisrKyBiL2FyY2gvYXJtL21hY2gtY29tY2VydG8vaW5jbHVkZS9tYWNoL3BjaWUtYzIwMDAuaApAQCAtMjksNiArMjksNyBAQAogc3RydWN0IHBjaWVfcG9ydCB7CiAJdTgJCQlwb3J0OwogCXU4CQkJcm9vdF9idXNfbnI7CisJdTE2CQkJcmVzZXQ7CiAJdW5zaWduZWQgbG9uZwkJYmFzZTsKIAl1bnNpZ25lZCBsb25nCQlyZW1vdGVfbWVtX2Jhc2VhZGRyOwogCXVuc2lnbmVkIGxvbmcJCWFwcF9iYXNlOwpAQCAtNTYsMTIgKzU3LDE3IEBACiAJc3RydWN0IHBjaWVfYXBwX3JlZwkqYXBwX3JlZ3M7CiAJc3RydWN0IHJlc291cmNlCQlyZXNbMl07CiAJc3RydWN0IGNsawkJKnJlZl9jbG9jazsKKyNpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT19QQ0lFX09DQ19DTE9DSykKKwlzdHJ1Y3QgY2xrICAgICAgICAgICAgICAqb2NjX2Nsb2NrOworI2VuZGlmCiB9OwogCiAjZGVmaW5lIFBDSUVfUE9SVF9NT0RFX05PTkUgCS0xCiAjZGVmaW5lIFBDSUVfUE9SVF9NT0RFX0VQIAlDRkcwX0RFVl9UWVBFX0VQCiAjZGVmaW5lIFBDSUVfUE9SVF9NT0RFX1JDIAlDRkcwX0RFVl9UWVBFX1JDCiAKKy8qIFBDSWUgUE0gcmVsYXRlZCBkZWZpbmVzICovCisjZGVmaW5lIFBDSV9DQVBfUE0gMHg0MAogCiAKIC8qIFRoZSBmb2xsb3dpbmcgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgYXJlIGFzIHBlciAiRFdDX3JlZ3NfcmV2MDQuZG9jIiBkb2N1bWVudCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9pbmNsdWRlL21hY2gvcmVzZXQuaCBiL2FyY2gvYXJtL21hY2gtY29tY2VydG8vaW5jbHVkZS9tYWNoL3Jlc2V0LmgKaW5kZXggZjcxYzNkNi4uZmQ5YzczYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9pbmNsdWRlL21hY2gvcmVzZXQuaAorKysgYi9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2luY2x1ZGUvbWFjaC9yZXNldC5oCkBAIC0xMDYsNiArMTA2LDcgQEAKIAlDT01QT05FTlRfVERNTlRHLAogfUMyMDAwX1JFU0VUX0NPTVBPTkVOVDsKIAorZXh0ZXJuIHZvaWQgY29tY2VydG9fcnN0X2NudHJsX3NldCh1bnNpZ25lZCBpbnQgZGV2X3JzdF9jbnRybF9iaXQpOwogZXh0ZXJuIHZvaWQgYzIwMDBfYmxvY2tfcmVzZXQoaW50IGJsb2NrLGludCBzdGF0ZSk7CiBleHRlcm4gdm9pZCByZXNldF9pbml0KHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL2luY2x1ZGUvbWFjaC9zZXJkZXMtYzIwMDAuaCBiL2FyY2gvYXJtL21hY2gtY29tY2VydG8vaW5jbHVkZS9tYWNoL3NlcmRlcy1jMjAwMC5oCmluZGV4IGQ5NDQxYTYuLjEyMWFmODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtY29tY2VydG8vaW5jbHVkZS9tYWNoL3NlcmRlcy1jMjAwMC5oCisrKyBiL2FyY2gvYXJtL21hY2gtY29tY2VydG8vaW5jbHVkZS9tYWNoL3NlcmRlcy1jMjAwMC5oCkBAIC0yOCw5ICsyOCw2IEBACiAvKiBTRVItREVTIEFkZHJlc3Mgc3BhY2UgKi8KIAogCi0jZGVmaW5lIFNBVEFfU0VSREVTXzQ4TUhaIDEKLQotCiB0eXBlZGVmIHN0cnVjdCBzZXJkZXNfcmVnc19zCiB7CiAgIHVuc2lnbmVkIHNob3J0IG9mc3Q7CkBAIC00MSw5ICszOCw5IEBACiB2b2lkIHNlcmRlc19waHlfcmVzZXQoaW50IHBoeV9udW0pOwogCiAgLyogIEluaXRpYWxpemUgdmFsdWVzIG9mIHRoZSBTbm93YnVzaCBQSFkgKFNlcmRlczEpIGZvciBTQVRBMCAqLwotI2lmZGVmIFNBVEFfU0VSREVTXzQ4TUhaCi0vKiAyNE1IeiBpbnRlcm5hbCByZWYgY2xvY2sgY29uZmlndXJhdGlvbiAqLwotc3RhdGljIHN0cnVjdCBzZXJkZXNfcmVnc19zIHNhdGEwX3BoeV9yZWdfZmlsZVtdID0KKworLyogNDhNSHogaW50ZXJuYWwgcmVmIGNsb2NrIGNvbmZpZ3VyYXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3Qgc2VyZGVzX3JlZ3NfcyBzYXRhX3BoeV9yZWdfZmlsZV80OFtdID0KICAgICAgICAgewogICAgICAgICAgIHsgMHgwMDAgPDwgMiwgMHgwNn0sCiAgICAgICAgICAgeyAweDAwMSA8PCAyLCAweDAwfSwKQEAgLTM2NCw3ICszNjEsMzMyIEBACiAgICAgICAgICAgeyAweEE5NiA8PCAyLCAweGY4fSwKICAgICAgICAgICB7IDB4MDAwIDw8IDIsIDB4MDd9CiAgICAgICAgIH07Ci0jZWxzZQorCisvKiAyNE1IeiBpbnRlcm5hbCByZWYgY2xvY2sgY29uZmlndXJhdGlvbiAqLworc3RhdGljIHN0cnVjdCBzZXJkZXNfcmVnc19zIHNhdGFfcGh5X3JlZ19maWxlXzI0W10gPQorICAgICAgICB7CisgICAgICAgICAgeyAweDAwMCA8PCAyLCAweDA2fSwKKyAgICAgICAgICB7IDB4MDAxIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwMDIgPDwgMiwgMHg4OH0sCisgICAgICAgICAgeyAweDAwMyA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDA0IDw8IDIsIDB4N2J9LAorICAgICAgICAgIHsgMHgwMDUgPDwgMiwgMHhjOX0sCisgICAgICAgICAgeyAweDAwNiA8PCAyLCAweDAzfSwKKyAgICAgICAgICB7IDB4MDA3IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwMDggPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDAwOSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDBBIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwMEIgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDAwQyA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDBEIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwMEUgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDAwRiA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDEwIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwMTEgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDAxMiA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDEzIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwMTQgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDAxNSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDE2IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwMTcgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDAxOCA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDE5IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwMUEgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDAxQiA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDFDIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwMUQgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDAxRSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDFGIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwMjAgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDAyMSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDIyIDw8IDIsIDB4YTB9LAorICAgICAgICAgIHsgMHgwMjMgPDwgMiwgMHg1NH0sCisgICAgICAgICAgeyAweDAyNCA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDI1IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwMjYgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDAyNyA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDI4IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwMjkgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDAyQSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDJCIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwMkMgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDAyRCA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDJFIDw8IDIsIDB4MDR9LAorICAgICAgICAgIHsgMHgwMkYgPDwgMiwgMHg1MH0sCisgICAgICAgICAgeyAweDAzMCA8PCAyLCAweDcwfSwKKyAgICAgICAgICB7IDB4MDMxIDw8IDIsIDB4MDJ9LAorICAgICAgICAgIHsgMHgwMzIgPDwgMiwgMHgyNX0sCisgICAgICAgICAgeyAweDAzMyA8PCAyLCAweDQwfSwKKyAgICAgICAgICB7IDB4MDM0IDw8IDIsIDB4MDF9LAorICAgICAgICAgIHsgMHgwMzUgPDwgMiwgMHg0MH0sCisgICAgICAgICAgeyAweDAzNiA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDM3IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwMzggPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDAzOSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDNBIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwM0IgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDAzQyA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDNEIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwM0UgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDAzRiA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDQwIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwNDEgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDA0MiA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDQzIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwNDQgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDA0NSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDQ2IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwNDcgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDA0OCA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDQ5IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwNEEgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDA0QiA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDRDIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwNEQgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDA0RSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDRGIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwNTAgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDA1MSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDUyIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwNTMgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDA1NCA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDU1IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwNTYgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDA1NyA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDU4IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwNTkgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDA1QSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDVCIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwNUMgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDA1RCA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDVFIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwNUYgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDA2MCA8PCAyLCAweDAwfSwKKyAgICAgICAgICAvL3sgMHgwNjEgPDwgMiwgMHgyZX0sIC8vZm9yIFJldi1BMCBkZXZpY2UKKyAgICAgICAgICB7IDB4MDYxIDw8IDIsIDB4MmV9LCAvL2ZvciBSZXYtQTEgZGV2aWNlCisgICAgICAgICAgeyAweDA2MiA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDYzIDw8IDIsIDB4NWV9LAorICAgICAgICAgIHsgMHgwNjQgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDA2NSA8PCAyLCAweDQyfSwKKyAgICAgICAgICB7IDB4MDY2IDw8IDIsIDB4ZDF9LAorICAgICAgICAgIHsgMHgwNjcgPDwgMiwgMHgyMH0sCisgICAgICAgICAgeyAweDA2OCA8PCAyLCAweDI4fSwKKyAgICAgICAgICB7IDB4MDY5IDw8IDIsIDB4Nzh9LAorICAgICAgICAgIHsgMHgwNkEgPDwgMiwgMHgyY30sCisgICAgICAgICAgeyAweDA2QiA8PCAyLCAweGI5fSwKKyAgICAgICAgICB7IDB4MDZDIDw8IDIsIDB4NWV9LAorICAgICAgICAgIHsgMHgwNkQgPDwgMiwgMHgwM30sCisgICAgICAgICAgeyAweDA2RSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDZGIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgwNzAgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDA3MSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MDcyIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgyMDAgPDwgMiwgMHgwMn0sCisgICAgICAgICAgeyAweDIwMSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MjAyIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgyMDMgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDIwNCA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MjA1IDw8IDIsIDB4MTB9LAorICAgICAgICAgIHsgMHgyMDYgPDwgMiwgMHg4NH0sCisgICAgICAgICAgeyAweDIwNyA8PCAyLCAweDNjfSwgCisgICAgICAgICAgeyAweDIwOCA8PCAyLCAweGUwfSwKKyAgICAgICAgICB7IDB4MjEwIDw8IDIsIDB4MjN9LAorICAgICAgICAgIHsgMHgyMTEgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDIxMiA8PCAyLCAweDQwfSwKKyAgICAgICAgICB7IDB4MjEzIDw8IDIsIDB4MDV9LAorICAgICAgICAgIHsgMHgyMTQgPDwgMiwgMHhkMH0sLyogKi8KKyAgICAgICAgICB7IDB4MjE1IDw8IDIsIDB4MTd9LAorICAgICAgICAgIHsgMHgyMTYgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDIxNyA8PCAyLCAweDY4fSwKKyAgICAgICAgICB7IDB4MjE4IDw8IDIsIDB4ZjJ9LAorICAgICAgICAgIHsgMHgyMTkgPDwgMiwgMHgxZX0sCisgICAgICAgICAgeyAweDIxQSA8PCAyLCAweDE4fSwKKyAgICAgICAgICB7IDB4MjFCIDw8IDIsIDB4MGR9LAorICAgICAgICAgIHsgMHgyMUMgPDwgMiwgMHgwY30sCisgICAgICAgICAgeyAweDIxRCA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MjFFIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgyMUYgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDIyMCA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MjIxIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgyMjIgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDIyMyA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MjI0IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgyMjUgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDIyNiA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MjI3IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgyMjggPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDIyOSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MjJBIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgyMkIgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDIyQyA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MjJEIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgyMkUgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDIyRiA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MjMwIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgyMzEgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDIzMiA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MjMzIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgyMzQgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDIzNSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MjM2IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgyMzcgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDIzOCA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MjM5IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgyM0EgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDIzQiA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MjNDIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgyM0QgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDIzRSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MjNGIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgyNDAgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDI0MSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MjQyIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgyNDMgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDI0NCA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MjQ1IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgyNDYgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDI0NyA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MjQ4IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgyNDkgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDI0QSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MjRCIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgyNEMgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDI0RCA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4MjRFIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHgyNEYgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweDI1MCA8PCAyLCAweDYwfSwKKyAgICAgICAgICB7IDB4MjUxIDw8IDIsIDB4MGZ9LAorICAgICAgICAgIHsgMHhBMDAgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEEwMSA8PCAyLCAweDIwfSwKKyAgICAgICAgICB7IDB4QTAyIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBMDMgPDwgMiwgMHg0MH0sCisgICAgICAgICAgeyAweEEwNCA8PCAyLCAweDI0fSwKKyAgICAgICAgICB7IDB4QTA1IDw8IDIsIDB4YWV9LAorICAgICAgICAgIHsgMHhBMDYgPDwgMiwgMHgxOX0sCisgICAgICAgICAgeyAweEEwNyA8PCAyLCAweDQ5fSwKKyAgICAgICAgICB7IDB4QTA4IDw8IDIsIDB4MDR9LAorICAgICAgICAgIHsgMHhBMDkgPDwgMiwgMHg4M30sCisgICAgICAgICAgeyAweEEwQSA8PCAyLCAweDRifSwKKyAgICAgICAgICB7IDB4QTBCIDw8IDIsIDB4YzV9LAorICAgICAgICAgIHsgMHhBMEMgPDwgMiwgMHgwMX0sCisgICAgICAgICAgeyAweEEwRCA8PCAyLCAweDAzfSwKKyAgICAgICAgICB7IDB4QTBFIDw8IDIsIDB4Mjh9LAorICAgICAgICAgIHsgMHhBMEYgPDwgMiwgMHg5OH0sCisgICAgICAgICAgeyAweEExMCA8PCAyLCAweDE5fSwKKyAgICAgICAgICB7IDB4QTExIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBMTIgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEExMyA8PCAyLCAweDgwfSwKKyAgICAgICAgICB7IDB4QTE0IDw8IDIsIDB4ZjB9LAorICAgICAgICAgIHsgMHhBMTUgPDwgMiwgMHhkMH0sCisgICAgICAgICAgeyAweEExNiA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTE3IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBMzAgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEEzMSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTMyIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBMzMgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEEzNCA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTM1IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBMzYgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEEzNyA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTM4IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBMzkgPDwgMiwgMHhhMH0sCisgICAgICAgICAgeyAweEEzQSA8PCAyLCAweGEwfSwKKyAgICAgICAgICB7IDB4QTNCIDw8IDIsIDB4YTB9LAorICAgICAgICAgIHsgMHhBM0MgPDwgMiwgMHhhMH0sCisgICAgICAgICAgeyAweEEzRCA8PCAyLCAweGEwfSwKKyAgICAgICAgICB7IDB4QTNFIDw8IDIsIDB4YTB9LAorICAgICAgICAgIHsgMHhBM0YgPDwgMiwgMHg1NH0sCisgICAgICAgICAgeyAweEE0MCA8PCAyLCAweDYyfSwKKyAgICAgICAgICB7IDB4QTQxIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBNDIgPDwgMiwgMHg4MH0sCisgICAgICAgICAgeyAweEE0MyA8PCAyLCAweDU4fSwKKyAgICAgICAgICB7IDB4QTQ0IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBNDUgPDwgMiwgMHg0NH0sCisgICAgICAgICAgeyAweEE0NiA8PCAyLCAweDVjfSwKKyAgICAgICAgICB7IDB4QTQ3IDw8IDIsIDB4ODZ9LAorICAgICAgICAgIHsgMHhBNDggPDwgMiwgMHg4ZH0sCisgICAgICAgICAgeyAweEE0OSA8PCAyLCAweGQwfSwKKyAgICAgICAgICB7IDB4QTRBIDw8IDIsIDB4MDl9LAorICAgICAgICAgIHsgMHhBNEIgPDwgMiwgMHg5MH0sCisgICAgICAgICAgeyAweEE0QyA8PCAyLCAweDA3fSwKKyAgICAgICAgICB7IDB4QTREIDw8IDIsIDB4NDB9LAorICAgICAgICAgIHsgMHhBNEUgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEE0RiA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTUwIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBNTEgPDwgMiwgMHgyMH0sCisgICAgICAgICAgeyAweEE1MiA8PCAyLCAweDMyfSwKKyAgICAgICAgICB7IDB4QTUzIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBNTQgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEE1NSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTU2IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBNTcgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEE1OCA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTU5IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBNUEgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEE1QiA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTVDIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBNUQgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEE1RSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTVGIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBNjAgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEE2MSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTYyIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBNjMgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEE2NCA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTY1IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBNjYgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEE2NyA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTY4IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBNjkgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEE2QSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTZCIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBNkMgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEE2RCA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTZFIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBNkYgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEE3MCA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTcxIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBNzIgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEE3MyA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTc0IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBNzUgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEE3NiA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTc3IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBNzggPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEE3OSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTdBIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBN0IgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEE3QyA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTdEIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBN0UgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEE3RiA8PCAyLCAweGQ4fSwKKyAgICAgICAgICB7IDB4QTgwIDw8IDIsIDB4MWF9LAorICAgICAgICAgIHsgMHhBODEgPDwgMiwgMHhmZn0sCisgICAgICAgICAgeyAweEE4MiA8PCAyLCAweDExfSwKKyAgICAgICAgICB7IDB4QTgzIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBODQgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEE4NSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTg2IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBODcgPDwgMiwgMHhmMH0sCisgICAgICAgICAgeyAweEE4OCA8PCAyLCAweGZmfSwKKyAgICAgICAgICB7IDB4QTg5IDw8IDIsIDB4ZmZ9LAorICAgICAgICAgIHsgMHhBOEEgPDwgMiwgMHhmZn0sCisgICAgICAgICAgeyAweEE4QiA8PCAyLCAweGZmfSwKKyAgICAgICAgICB7IDB4QThDIDw8IDIsIDB4MWN9LAorICAgICAgICAgIHsgMHhBOEQgPDwgMiwgMHhjMn0sCisgICAgICAgICAgeyAweEE4RSA8PCAyLCAweGMzfSwKKyAgICAgICAgICB7IDB4QThGIDw8IDIsIDB4M2Z9LAorICAgICAgICAgIHsgMHhBOTAgPDwgMiwgMHgwYX0sCisgICAgICAgICAgeyAweEE5MSA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTkyIDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBOTMgPDwgMiwgMHgwMH0sCisgICAgICAgICAgeyAweEE5NCA8PCAyLCAweDAwfSwKKyAgICAgICAgICB7IDB4QTk1IDw8IDIsIDB4MDB9LAorICAgICAgICAgIHsgMHhBOTYgPDwgMiwgMHhmOH0sCisgICAgICAgICAgeyAweDAwMCA8PCAyLCAweDA3fQorICAgICAgICB9OworCisjaWYgMAogLyogVGhpcyBpcyA2ME1oeiBleHRlcm5hbCByZWYgY2xvY2sgY29uZmlndXJhdGlvbiB3aGljaCBpcyBub3QgdXNlZCBvbiB0aGUgYm9hcmQgY3VycmVudGx5ICovCiBzdGF0aWMgc3RydWN0IHNlcmRlc19yZWdzX3Mgc2F0YTBfcGh5X3JlZ19maWxlW10gPQogCXsKQEAgLTY5Niw3ICsxMDE4LDcgQEAKIAkgIC8qIENvbW1vbiBDTVUgYmxvY2sgKi8KICAgCSAgeyAweDAwMCA8PCAyLCAweDA2fSwKICAgCSAgeyAweDAwMSA8PCAyLCAweDAwfSwKLSAgCSAgeyAweDAwMiA8PCAyLCAweDg5fSwgLy8KKyAgCSAgeyAweDAwMiA8PCAyLCAweDA5fSwgLy8KICAJICB7IDB4MDAzIDw8IDIsIDB4MDB9LAogIAkgIHsgMHgwMDQgPDwgMiwgMHg2MH0sIC8vCiAgCSAgeyAweDAwNSA8PCAyLCAweDA5fSwgLy8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY29tY2VydG8vaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggNTJhYWI3Zi4uMTUwYjQ2YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTIyLDYgKzIyLDggQEAKIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2lvLmg+CisjaW5jbHVkZSA8bWFjaC9jb21jZXJ0by0yMDAwL2Nsay1yc3QuaD4KKyNpbmNsdWRlIDxtYWNoL3Jlc2V0Lmg+CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKIHsKQEAgLTM0LDcgKzM2LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7Ci0JIF9fcmF3X3dyaXRlbCgweDEsREVWSUNFX1JTVF9DTlRSTCk7CisJY29tY2VydG9fcnN0X2NudHJsX3NldChQV1JfT05fU09GVF9SU1QpOwogfQogCiAjZW5kaWYgLyogX19BU01fQVJDSF9TWVNURU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtY29tY2VydG8vaW5jbHVkZS9tYWNoL3RpbWV4LmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY29tY2VydG8vcGNpZS1jMjAwMC5jIGIvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9wY2llLWMyMDAwLmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA2NDllZDlkLi5jNjU3MjQ5Ci0tLSBhL2FyY2gvYXJtL21hY2gtY29tY2VydG8vcGNpZS1jMjAwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtY29tY2VydG8vcGNpZS1jMjAwMC5jCkBAIC0zOSwxNCArMzksMTMgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLSNpbmNsdWRlIDxtYWNoL2NvbWNlcnRvLTIwMDAuaD4KICNpbmNsdWRlIDxtYWNoL3BjaWUtYzIwMDAuaD4KICNpbmNsdWRlIDxtYWNoL3NlcmRlcy1jMjAwMC5oPgogI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLQogLy8jZGVmaW5lIENPTUNFUlRPX1BDSUVfREVCVUcKIAogI2lmZGVmIENPTkZJR19QQ0lfTVNJCkBAIC0yMTEsMTUgKzIxMCwxMiBAQAogCiAJZG8gewogCQlpZiAocmVhZGwoIHBwLT52YV9hcHBfYmFzZSArIHBwLT5hcHBfcmVncy0+c3RzMCApICYgU1RTMF9SRExIX0xJTktfVVApIHsKLS8vCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6JWQgTGluayB1cCBzdWNjZXNzIFxuIixfX2Z1bmNfXywgX19MSU5FX18pOwogCQkJcmV0dXJuIDE7CiAJCX0KIAogCQljb25kX3Jlc2NoZWQoKTsKIAl9IHdoaWxlICghdGltZV9hZnRlcl9lcShqaWZmaWVzLCBkZWFkbGluZSkpOwogCi0vLwlwcmludGsoS0VSTl9FUlIgIiVzOiVkIExpbmsgdXAgZmFpbGVkIFxuIixfX2Z1bmNfXywgX19MSU5FX18pOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY2MCw3ICs2NTYsNyBAQAogCX0KIAogCWlmIChzdGF0dXMpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6VW5oYW5kbGVkIGludGVycnVwdFxuIiwgX19mdW5jX18pOworCQlwcmludGsoS0VSTl9JTkZPICIlczpVbmhhbmRsZWQgaW50ZXJydXB0ICV4XG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAkJLyogRklYTUU6IEhQLCBBRVIsIFBNRSBpbnRlcnJ1cHRzIG5lZWQgdG8gYmUgaGFuZGxlZCAqLwogCQl3cml0ZWxfcmVsYXhlZChzdGF0dXMsIChwcC0+dmFfYXBwX2Jhc2UgKyBhcHBfcmVnLT5pbnRyX3N0cykpOwogCX0KQEAgLTc3Nyw4ICs3NzMsOCBAQAogCiAJLyogRklYTUUgQWRkZWQgZm9yIGRlYnVnaW5nICovCiAJd3JpdGVsKHJlYWRsKHBwLT52YV9hcHBfYmFzZSArIGFwcF9yZWctPmludHJfZW4pICYKLQkJCShJTlRSX0NUUkxfQUVSIHwgIElOVFJfQ1RSTF9QTUUgfAotCQkJIElOVFJfQ1RSTF9IUCAgfCAgSU5UUl9DVFJMX0xJTktfQVVUT19CVyApLAorCQkJfihJTlRSX0NUUkxfQUVSIHwgIElOVFJfQ1RSTF9QTUUgfAorIAkJCSBJTlRSX0NUUkxfSFAgIHwgIElOVFJfQ1RSTF9MSU5LX0FVVE9fQlcgKSwKIAkJCXBwLT52YV9hcHBfYmFzZSArIGFwcF9yZWctPmludHJfZW4gKTsKIAogCkBAIC0xMjA0LDEwICsxMjAwLDIzIEBACiAJCWdvdG8gZXJyMjsKIAl9CiAKKwkvKiBFbmFibGUgdGhlIFBDSUVfT0NDIGNsb2NrICovCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fUENJRV9PQ0NfQ0xPQ0spCisJcHAtPm9jY19jbG9jayA9IGNsa19nZXQoTlVMTCwicGNpZV9vY2MiKTsKKwlpZiAoSVNfRVJSKHBwLT5vY2NfY2xvY2spKSB7CisJCXByX2VycigiJXM6IFVuYWJsZSB0byBvYnRhaW4gcGNpZV9vY2MgY2xvY2s6ICVsZFxuIiwgX19mdW5jX18sIFBUUl9FUlIocHAtPm9jY19jbG9jaykpOworCQlnb3RvIGVycl9vY2NfY2xvY2s7CisJfQorI2VuZGlmCiAJcGNpZV9wb3J0X3NldF9tb2RlKG5yLCBtb2RlKTsKIAkKIAlyZXR1cm4gMDsKIAorI2lmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPX1BDSUVfT0NDX0NMT0NLKQorZXJyX29jY19jbG9jazoKKwljbGtfcHV0KHBwLT5vY2NfY2xvY2spOworI2VuZGlmCisKIGVycjI6CiAJaW91bm1hcChwcC0+dmFfY2ZnMV9iYXNlKTsKIGVycjE6CkBAIC0xMjE3LDMwICsxMjI2LDI4OSBAQAogCiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19DMktfRVZNKSB8fCBkZWZpbmVkKENPTkZJR19DMktfQVNJQykKKyNkZWZpbmUgUENJRV9ERVZfRVhUX1JFU0VUX0RFQVNTRVJUKF9pZCkgXAorCXdyaXRlbChyZWFkbChDT01DRVJUT19HUElPX09VVFBVVF9SRUcpICYgfihHUElPX1BJTl8yNyksIENPTUNFUlRPX0dQSU9fT1VUUFVUX1JFRyk7CisKKyNkZWZpbmUgUENJRV9ERVZfRVhUX1JFU0VUX0FTU0VSVChfaWQpIFwKKwl3cml0ZWwocmVhZGwoQ09NQ0VSVE9fR1BJT19PVVRQVVRfUkVHKSB8IChHUElPX1BJTl8yNyksIENPTUNFUlRPX0dQSU9fT1VUUFVUX1JFRyk7CisjZWxzZQorLyogQm9hcmQgc3BlY2lmaWMgKi8KKyNkZWZpbmUgUENJRV9ERVZfRVhUX1JFU0VUX0RFQVNTRVJUKF9pZCkKKyNkZWZpbmUgUENJRV9ERVZfRVhUX1JFU0VUX0FTU0VSVChfaWQpCisjZW5kaWYKKworc3RhdGljIGludCBjb21jZXJ0b19wY2llX2RldmljZV9yZXNldChzdHJ1Y3QgcGNpZV9wb3J0ICpwcCkKK3sKKwlpbnQgaWk7CisJc3RydWN0IHBjaWVfcG9ydCAqbF9wcCA9IHBwOworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gTlVMTDsKKworCXByaW50ayhLRVJOX0lORk8gIkVOVEVSOiBCcmluZ2luZyBQQ0llJWQgZGV2aWNlIHJlc2V0XG4iLCBwcC0+cG9ydCk7CisJaWYgKCFwcC0+bGlua19zdGF0ZSkKKwkJcmV0dXJuIC0xOworCisJLyogT24gQzJLRVZNIGFuZCBBU0lDIHNhbWUgcmVzZXQgaXMgY29ubmVjdGVkIHRvIFBDSWUwLzEuCisgICAgICAgICAqIFNvLCBkZXZpY2UgbWlnaHQgaGF2ZSBrZXB0IGluIHJlc2V0LCB1c2luZyBvdGhlciBQQ0llIGhvc3QuCisJICovCisJaWYgKCFjb21jZXJ0b19wY2llX2xpbmtfdXAocHApKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzIDogRGV2aWNlIGlzIGFscmVhZHkgbGluayBkb3duIHN0YXRlXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAwOworCX0KKworCisJLypGSVhNRSA6IEJlbG93IGNvZGUgbWlnaHQgYmUgcmVxdWlyZWQgaWYgd2Ugd2FudCB0byByZXNldCBwY2llIGRldmljZSwgd2l0aG91dAorICAgICAgICAgKiAgICAgICAgaW52b2tpbmcgcGNpZSBkZXZpY2Ugc3VwZW5kLiBJZiB3ZSBpbnZva2UgcGNpZSBkZXZpY2Ugc3VzcGVuZCBpdCB3aWxsCisJICoJICB0YWtlIGNhcmUgb2Ygc2F2aW5nIHBjaWUgY29uZmlnIHNwYWNlLgorICAgICAgICAgKi8KKyNpZiAwCisJLyogTm93IHNhdmUgdGhlIFBDSWUgZGV2aWNlIGNvbmZpZ3VyYXRpb24gc3BhY2UuKi8KKwl3aGlsZSgocGNpX2RldiA9IHBjaV9nZXRfc3Vic3lzKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9kZXYpKSkgeworCQlpZiAocHAtPnJvb3RfYnVzX25yID09IHBjaV9kZXYtPmJ1cy0+bnVtYmVyKSB7CisJCQlwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKKwkJfQorCX0KKworCS8qIE9uIEMyS0VWTS9BU0lDLCBzaW5jZSBzYW1lIEdQSU8yNyBpcyB1c2VkIHRvIHJlc2V0IFBDSWUwL1BDSWUxIGRldmljZXMsCisJICogc2F2ZSBjb25maWd1cmF0aW9uIG9mIGRldmljZXMgb24gb3RoZXIgUENJZSBhbHNvLgorCSAqIFRoaXMgbWF5IG5vdCBiZSBhcHBsaWNhYmxlIGZvciBvdGhlciBjdXRvbWVyIGJvYXJkcy4KKwkgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19DMktfRVZNKSB8fCBkZWZpbmVkKENPTkZJR19DMktfQVNJQykKKwlsX3BwID0gJnBjaWVfcG9ydFshcHAtPnBvcnRdOworCXBjaV9kZXYgPSBOVUxMOworCisJaWYgKGxfcHAtPmxpbmtfc3RhdGUpIHsKKwkJd2hpbGUoKHBjaV9kZXYgPSBwY2lfZ2V0X3N1YnN5cyhQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lfZGV2KSkpIHsKKwkJCWlmIChsX3BwLT5yb290X2J1c19uciA9PSBwY2lfZGV2LT5idXMtPm51bWJlcikgeworCQkJCXBjaV9zYXZlX3N0YXRlKHBjaV9kZXYpOworCQkJfQorCQl9CisJfQorI2VuZGlmCisjZW5kaWYKKworCS8qKioqKioqKioqKioqKiBSZWFkeSB0byBpc3N1ZSByZXN0ICoqKioqKioqKioqKioqKioqLworCS8qIERlLWFzc2VydCBleHRlcm5hbCByZXNldCAoR1BJTy0yNykgKi8KKwlQQ0lFX0RFVl9FWFRfUkVTRVRfREVBU1NFUlQocHAtPnBvcnQpOworCXByaW50ayhLRVJOX0lORk8gIkVYSVQ6IEJyaW5naW5nIFBDSWUlZCBkZXZpY2UgcmVzZXRcbiIsIHBwLT5wb3J0KTsKKworCXJldHVybiAwOworCit9CisKKworc3RhdGljIGludCBjb21jZXJ0b19wY2llX2RldmljZV9yZXNldF9leGl0KHN0cnVjdCBwY2llX3BvcnQgKnBwKQoreworCXVuc2lnbmVkIGludCB2YWw7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisKKwlwcmludGsoS0VSTl9JTkZPICJFTlRFUjogQnJpbmdpbmcgUENJZSVkIGRldmljZSBvdXQtb2YtcmVzZXRcbiIsIHBwLT5wb3J0KTsKKworCWlmICghcHAtPmxpbmtfc3RhdGUgJiYgcHAtPnJlc2V0KQorCQlyZXR1cm4gLTE7CisKKwkvKiBQdWxsIHVwIGV4dGVybmFsIHJlc2V0ICovCisJLyogYXNzZXJ0IGV4dGVybmFsIHJlc2V0IChHUElPLTI3KSAqLworCVBDSUVfREVWX0VYVF9SRVNFVF9BU1NFUlQocHAtPnBvcnQpOworCisJdWRlbGF5KDEwMDApOworCXVkZWxheSgxMDAwKTsKKwl1ZGVsYXkoMTAwMCk7CisJdWRlbGF5KDEwMDApOworCXVkZWxheSgxMDAwKTsKKwl1ZGVsYXkoMTAwMCk7CisJdWRlbGF5KDEwMDApOworCisJLyogUmVzdG9yZSB0aGUgUkMgY29uZmlndXJhdGlvbiAqLworCWNvbWNlcnRvX2RiaV9yZWFkX3JlZyhwcCwgUENJRV9BRkwwTDFfUkVHLCA0LCAmdmFsKTsKKwl2YWwgJj0gfigweDAwRkZGRjAwKTsKKwl2YWwgfD0gMHgwMEYxRjEwMDsKKwljb21jZXJ0b19kYmlfd3JpdGVfcmVnKHBwLCBQQ0lFX0FGTDBMMV9SRUcsIDQsIHZhbCk7CisKKwlpZihwY2llX2dlbjFfb25seSkKKwl7CisJCWNvbWNlcnRvX2RiaV93cml0ZV9yZWcocHAsIFBDSUVfTENOVDJfUkVHLCA0LCAweDEpOworCQljb21jZXJ0b19kYmlfd3JpdGVfcmVnKHBwLCBQQ0lFX0xDQVBfUkVHLCA0LCAweDEpOworCX0KKwllbHNlCisJeworCQljb21jZXJ0b19kYmlfcmVhZF9yZWcocHAsIFBDSUVfRzJDVFJMX1JFRywgNCwgJnZhbCk7CisJCXZhbCAmPSB+KDB4RkYpOworCQl2YWwgfD0gMHhGMTsKKwkJY29tY2VydG9fZGJpX3dyaXRlX3JlZyhwcCwgUENJRV9HMkNUUkxfUkVHLCA0LCB2YWwpOworCX0KKworCS8vIGluc3RydWN0IHBjaWUgdG8gc3dpdGNoIHRvIGdlbjIgYWZ0ZXIgaW5pdAorCWNvbWNlcnRvX2RiaV9yZWFkX3JlZyhwcCwgUENJRV9HMkNUUkxfUkVHLCA0LCAmdmFsKTsKKwl2YWwgfD0gKDEgPDwgMTcpOworCWNvbWNlcnRvX2RiaV93cml0ZV9yZWcocHAsIFBDSUVfRzJDVFJMX1JFRywgNCwgdmFsKTsKKworCS8qc2V0dXAgaUFUVSBmb3Igb3V0Ym91bmQgdHJhbnNsYXRpb24gKi8KKwlQQ0lFX1NFVFVQX2lBVFVfT0JfRU5UUlkoIHBwLCBpQVRVX0VOVFJZX01FTSwgaUFUVV9HRVRfTUVNX0JBU0UocHAtPnJlbW90ZV9tZW1fYmFzZWFkZHIpLAorCQkJaUFUVV9NRU1fU0laRSAtIDEsIDAsIDAsIHBwLT5yZW1vdGVfbWVtX2Jhc2VhZGRyICk7CisJUENJRV9TRVRVUF9pQVRVX09CX0VOVFJZKCBwcCwgaUFUVV9FTlRSWV9JTywgaUFUVV9HRVRfSU9fQkFTRShwcC0+cmVtb3RlX21lbV9iYXNlYWRkciksCisJCQlpQVRVX0lPX1NJWkUgLSAxLCAoQVhJX09QX1RZUEVfSU9fUkRSVyAmIGlBVFVfQ1RSTDFfVFlQRV9NQVNLKSwKKwkJCTAsIGlBVFVfR0VUX0lPX0JBU0UocHAtPnJlbW90ZV9tZW1fYmFzZWFkZHIpICk7CisJUENJRV9TRVRVUF9pQVRVX09CX0VOVFJZKCBwcCwgaUFUVV9FTlRSWV9NU0csIGlBVFVfR0VUX01TR19CQVNFKHBwLT5yZW1vdGVfbWVtX2Jhc2VhZGRyKSwKKwkJCWlBVFVfTVNHX1NJWkUgLSAxLCAoQVhJX09QX1RZUEVfTVNHX1JFUSAmIGlBVFVfQ1RSTDFfVFlQRV9NQVNLKSwKKwkJCTAsIGlBVFVfR0VUX01TR19CQVNFKHBwLT5yZW1vdGVfbWVtX2Jhc2VhZGRyKSApOworCVBDSUVfU0VUVVBfaUFUVV9JQl9FTlRSWSggcHAsIDAsIDAsCisJCQlJTkJPVU5EX0FERFJfTUFTSywgMCwgMCwgQ09NQ0VSVE9fQVhJX0REUl9CQVNFKTsKKworCWNvbWNlcnRvX2RiaV93cml0ZV9yZWcocHAsIFBDSUVfTVNJX0FERFJfTE8sIDQsIHBwLT5tc2lfbWJveF9oYW5kbGUpOworCWNvbWNlcnRvX2RiaV93cml0ZV9yZWcocHAsIFBDSUVfTVNJX0FERFJfSEksIDQsIDApOworCisJd3JpdGVsX3JlbGF4ZWQoMHg3LCBwcC0+dmFfYXBwX2Jhc2UgKyBwcC0+YXBwX3JlZ3MtPmNmZzUpOworCisJLyogR2VuZXJpYyBQQ0llIHVuaXQgc2V0dXAuKi8KKworCS8qIEVuYWJsZSBvd24gQk1FLiBJdCBpcyBuZWNlc3NhcnkgdG8gZW5hYmxlIG93biBCTUUgdG8gZG8gYQorCSAqIG1lbW9yeSB0cmFuc2FjdGlvbiBvbiBhIGRvd25zdHJlYW0gZGV2aWNlCisJICovCisJY29tY2VydG9fZGJpX3JlYWRfcmVnKHBwLCBQQ0lfQ09NTUFORCwgMiwgJnZhbCk7CisJdmFsIHw9IChQQ0lfQ09NTUFORF9JTyB8IFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUgorCQkJfCBQQ0lfQ09NTUFORF9QQVJJVFkgfCBQQ0lfQ09NTUFORF9TRVJSKTsKKwljb21jZXJ0b19kYmlfd3JpdGVfcmVnKHBwLCBQQ0lfQ09NTUFORCwgMiwgdmFsKTsKKworCXBwLT5jZmcwX3ByZXZfdGFkZHIgPSAweGZmZmZmZmZmOworCXBwLT5jZmcxX3ByZXZfdGFkZHIgPSAweGZmZmZmZmZmOworCisJLy91ZGVsYXkoMTAwMCk7CisKKwlpZihjb21jZXJ0b19wY2llX2xpbmtfdXAocHApKSB7CisJcHJpbnRrKEtFUk5fSU5GTyAiIEJyaW5naW5nIFBDSWUlZCBkZXZpY2Ugb3V0LW9mLXJlc2V0IDogTGluayBVcFxuIiwgcHAtPnBvcnQpOworCS8qRklYTUUgOiBCZWxvdyBjb2RlIG1pZ2h0IGJlIHJlcXVpcmVkIGlmIHdlIHdhbnQgdG8gYnJpbmcgcGNpZSBkZXZpY2Ugb3V0LW9mLXJlc2V0LAorICAgICAgICAgKgkgIHdpdGhvdXQgaW52b2tpbmcgcGNpZSBkZXZpY2Ugc3VwZW5kLiBJZiB3ZSBpbnZva2UgcGNpZSBkZXZpY2UgcmVzdW1lIGl0IHdpbGwKKwkgKgkgIHRha2UgY2FyZSBvZiByZXN0b3JpbmcsIHNhdmVkIHBjaWUgY29uZmlnIHNwYWNlLgorICAgICAgICAgKi8KKyNpZiAwCisJCXBjaV9kZXYgPSBOVUxMOworCQl3aGlsZSgocGNpX2RldiA9IHBjaV9nZXRfc3Vic3lzKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9kZXYpKSkgeworCQkJaWYgKHBwLT5yb290X2J1c19uciA9PSBwY2lfZGV2LT5idXMtPm51bWJlcikgeworCQkJCXBjaV9yZXN0b3JlX3N0YXRlKHBjaV9kZXYpOworCQkJfQorCQl9CisjZW5kaWYKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJFWElUOiBCcmluZ2luZyBQQ0llJWQgZGV2aWNlIG91dC1vZi1yZXNldFxuIiwgcHAtPnBvcnQpOworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBzc2l6ZV90IGNvbWNlcnRvX3BjaWVfc2hvd19yZXNldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworICAgICAgICBzdHJ1Y3QgcGNpZV9wb3J0ICpwcCA9ICZwY2llX3BvcnRbcGRldi0+aWRdOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHBwLT5yZXNldCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNvbWNlcnRvX3BjaWVfc2V0X3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKyAgICAgICAgc3RydWN0IHBjaWVfcG9ydCAqcHAgPSAmcGNpZV9wb3J0W3BkZXYtPmlkXTsKKwlpbnQgcmVzZXQgPSAwOworCisJaWYgKCFwY2llX3BvcnRfaXNfaG9zdChwZGV2LT5pZCkgfHwgICEocHAtPmxpbmtfc3RhdGUpKQorCQkJcmV0dXJuIGNvdW50OworCisJc3NjYW5mKGJ1ZiwgIiVkIiwgJnJlc2V0KTsKKworCXJlc2V0ID0gcmVzZXQgPyAxOjA7CisKKwlpZiAocHAtPnJlc2V0ID09IHJlc2V0KSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBBbHJlYWR5IGluIHNhbWUgc3RhdGVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIGNvdW50OworCX0KKworCisJaWYgKHJlc2V0KSB7CisJCXByaW50ayhLRVJOX0lORk8gIkVOVEVSIDogUHV0dGluZyBQQ0llJWQgZGV2aWNlIGludG8gcmVzZXRcbiIsIHBkZXYtPmlkKTsKKworCQlpZiAoIWNvbWNlcnRvX3BjaWVfZGV2aWNlX3Jlc2V0KHBwKSkgeworCQkJaW50IGlpID0gMTA7CisKKwkJCS8qIFdhaXQgZm9yIGxpbmtfcmVxX3JzdF9ub3QsIHRvIGJlIGRlLWFzc2V0ZWQgKi8KKwkJCXdoaWxlIChpaS0tKSB7CisKKwkJCQlpZiAoIShyZWFkbCggcHAtPnZhX2FwcF9iYXNlICsgcHAtPmFwcF9yZWdzLT5zdHMwICkgJiBTVFMwX0xJTktfUkVRX1JTVF9OT1QpKSB7CisJCQkJCXByaW50ayhLRVJOX0lORk8gIiVzIDogKFBDSWUlZCkgbGlua19yZXFfcnN0X25vdCBpcyBkZS1hc3NldGVkXG4iLCBfX2Z1bmNfXywgcHAtPnBvcnQpOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQl1ZGVsYXkoMTAwMCk7CisJCQl9CisKKwkJCWlmIChpaSA9PSAxMCkgCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgOiAoUENJZSVkKSBsaW5rX3JlcV9yc3Rfbm90IGlzIG5vdCBkZS1hc3NldGVkIFxuIiwgX19mdW5jX18sIHBwLT5wb3J0KTsKKworCQkJcHAtPnJlc2V0ID0gMTsKKwkJCS8qIERpc2FibGUgTFRTU00gYW5kIGluaXRpYXRlIGxpbmtkb3duIHJlc2V0ICovCisJCQl3cml0ZWwoKHJlYWRsKHBwLT52YV9hcHBfYmFzZSArIHBwLT5hcHBfcmVncy0+Y2ZnNSkgJgorCQkJCQkJfihDRkc1X0xUU1NNX0VOQUJMRSkpIHwgQ0ZHNV9MSU5LX0RPV05fUlNULAorCQkJCQkJIHBwLT52YV9hcHBfYmFzZSArIHBwLT5hcHBfcmVncy0+Y2ZnNSk7CisJCQl1ZGVsYXkoMTAwMCk7CisJCX0KKworCQlwcmludGsoS0VSTl9JTkZPICJFWElUIDogUHV0dGluZyBQQ0llJWQgZGV2aWNlIGludG8gcmVzZXRcbiIsIHBkZXYtPmlkKTsKKwl9CisJZWxzZSB7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRU5URVI6IEJyaW5naW5nIFBDSWUlZCBkZXZpY2Ugb3V0b2YgcmVzZXRcbiIsIHBkZXYtPmlkKTsKKworCQlpZiAoIWNvbWNlcnRvX3BjaWVfZGV2aWNlX3Jlc2V0X2V4aXQocHApKSB7CisJCQlwcC0+cmVzZXQgPSAwOworCQl9CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoZGV2aWNlX3Jlc2V0LCAwNjQ0LCBjb21jZXJ0b19wY2llX3Nob3dfcmVzZXQsIGNvbWNlcnRvX3BjaWVfc2V0X3Jlc2V0KTsKKwogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBjb21jZXJ0b19wY2llX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogeworCXVuc2lnbmVkIGludCB2YWwsIGk7CiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogcGNpZSBkZXZpY2UgJXAgKGlkID0gJWQpOiBzdGF0ZSAlZFxuIiwgCiAJCV9fZnVuY19fLCBwZGV2LCBwZGV2LT5pZCwgc3RhdGUuZXZlbnQpOwogCi0JaWYgKHBjaWVfcG9ydFtwZGV2LT5pZF0ucG9ydF9tb2RlICE9IFBDSUVfUE9SVF9NT0RFX05PTkUpCi0JCWNsa19kaXNhYmxlKHBjaWVfcG9ydFtwZGV2LT5pZF0ucmVmX2Nsb2NrKTsKLQkKKwlpZiAocGNpZV9wb3J0W3BkZXYtPmlkXS5wb3J0X21vZGUgIT0gUENJRV9QT1JUX01PREVfTk9ORSkgeworCQlpZiAoY29tY2VydG9fcGNpZV9saW5rX3VwKCZwY2llX3BvcnRbcGRldi0+aWRdKSl7CisKKwkJICAgIC8qIEVuYWJsZSBQTUUgdG8gcm9vdCBQb3J0ICovCisJCSAgICBjb21jZXJ0b19kYmlfcmVhZF9yZWcoJnBjaWVfcG9ydFtwZGV2LT5pZF0sIChQQ0lfQ0FQX1BNICsgUENJX1BNX0NUUkwpLCA0LCAmdmFsKTsKKwkJICAgIGNvbWNlcnRvX2RiaV93cml0ZV9yZWcoJnBjaWVfcG9ydFtwZGV2LT5pZF0sIChQQ0lfQ0FQX1BNICsgUENJX1BNX0NUUkwpLCA0LCB2YWwgfCBQQ0lfUE1fQ1RSTF9TVEFURV9NQVNLKTsKKworCQkJLyogUmVxdWlyZWQgUE0gRGVsYXkgKi8KKwkJICAgIGZvciAoaSA9IDAgOyBpIDwgNDAgOyBpKyspCisJCQkgICAgdWRlbGF5KDUwMCk7CisJICAgIH0KKwl9CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjb21jZXJ0b19wY2llX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCWludCByYzsKLQkKKwl1bnNpZ25lZCBpbnQgdmFsLCBpOworCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBjaWUgZGV2aWNlICVwIChpZCA9ICVkKVxuIiwgCiAJCV9fZnVuY19fLCBwZGV2LCBwZGV2LT5pZCk7Ci0JCi0JaWYocGNpZV9wb3J0W3BkZXYtPmlkXS5wb3J0X21vZGUgIT0gUENJRV9QT1JUX01PREVfTk9ORSkgewkKLQkJcmMgPSBjbGtfZW5hYmxlKHBjaWVfcG9ydFtwZGV2LT5pZF0ucmVmX2Nsb2NrKTsKLQkJaWYgKHJjKQotCQkJcHJfZXJyKCIlczogUENJZSVkIGNsb2NrIGVuYWJsZSBmYWlsZWRcbiIsIF9fZnVuY19fLCBwZGV2LT5pZCk7CisKKwlpZihwY2llX3BvcnRbcGRldi0+aWRdLnBvcnRfbW9kZSAhPSBQQ0lFX1BPUlRfTU9ERV9OT05FKSB7CisJCWlmIChjb21jZXJ0b19wY2llX2xpbmtfdXAoJnBjaWVfcG9ydFtwZGV2LT5pZF0pKXsKKworCQkgICAgLyogUHV0IEluIEQwIFN0YXRlICovCisJCSAgICBjb21jZXJ0b19kYmlfcmVhZF9yZWcoJnBjaWVfcG9ydFtwZGV2LT5pZF0sIChQQ0lfQ0FQX1BNICsgUENJX1BNX0NUUkwpLCA0LCAmdmFsKTsKKwkJICAgIGNvbWNlcnRvX2RiaV93cml0ZV9yZWcoJnBjaWVfcG9ydFtwZGV2LT5pZF0sIChQQ0lfQ0FQX1BNICsgUENJX1BNX0NUUkwpLCA0LCB2YWwgJiAoflBDSV9QTV9DVFJMX1NUQVRFX01BU0spKTsKKworCQkJLyogUmVxdWlyZWQgUE0gRGVsYXkgKi8KKwkJICAgIGZvciAoaSA9IDAgOyBpIDwgNDAgOyBpKyspCisJCQkgICAgdWRlbGF5KDUwMCk7CisJICAgIH0KIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTEzMjcsNiArMTU5NSwxNSBAQAogCQlwcl9lcnIoIiVzOiBQQ0llJWQgY2xvY2sgZW5hYmxlIGZhaWxlZFxuIiwgX19mdW5jX18sIG5yKTsKIAkJZ290byBlcnIxOwogCX0KKwkKKwkvKiBFbmFibGUgdGhlIFBDSUVfT0NDIGNsb2NrICovCQorI2lmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPX1BDSUVfT0NDX0NMT0NLKQorCXJjID0gIGNsa19lbmFibGUocHAtPm9jY19jbG9jayk7CisJaWYgKHJjKXsKKwkJcHJfZXJyKCIlczogUENJZV9vY2MgY2xvY2sgZW5hYmxlIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlnb3RvIGVycl9vY2NfY2xvY2s7CisJfQorI2VuZGlmCiAKIAkvKiBTZXJkZXMgSW5pdGlhbGl6YXRpb24uICovCiAJaWYoIHNlcmRlc19waHlfaW5pdChuciwgIHBfcGNpZV9waHlfcmVnX2ZpbGUsCkBAIC0xMzM1LDcgKzE2MTIsNyBAQAogCXsKIAkJcHAtPnBvcnRfbW9kZSA9IFBDSUVfUE9SVF9NT0RFX05PTkU7CiAJCXByX2VycigiJXM6IEZhaWxlZCB0byBpbml0aWFsaXplIHNlcmRlcyAoJWQpXG4iLCBfX2Z1bmNfXywgbnIgKTsKLQkJZ290byBlcnIwOworCQlnb3RvIGVycl9waHlfbGluazsKIAl9CiAKIAltZGVsYXkoMSk7IC8vQWZ0ZXIgQ01VIGxvY2tzIHdhaXQgZm9yIHNvbWV0aW1lCkBAIC0xMzU4LDEzICsxNjM1LDIwIEBACiAJaWYoIXBwLT5saW5rX3N0YXRlKQogCXsKIAkJaWZfZXJyID0gMDsKLQkJZ290byBlcnIwOworCQlnb3RvIGVycl9waHlfbGluazsKIAl9CiAKIAlyZXR1cm4gMDsKIAotZXJyMDoKK2Vycl9waHlfbGluazoKIAljbGtfZGlzYWJsZShwcC0+cmVmX2Nsb2NrKTsKKwljbGtfcHV0KHBwLT5yZWZfY2xvY2spOworI2lmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPX1BDSUVfT0NDX0NMT0NLKQorZXJyX29jY19jbG9jazoKKwljbGtfZGlzYWJsZShwcC0+b2NjX2Nsb2NrKTsKKwljbGtfcHV0KHBwLT5vY2NfY2xvY2spOworI2VuZGlmCisKIGVycjE6CiAJLy9QdXQgYWxsIHRvIHJlc2V0CiAJYzIwMDBfYmxvY2tfcmVzZXQoYXhpX3BjaWVfY29tcG9uZW50LDEpOwpAQCAtMTQwNCwyMiArMTY4OCwyNiBAQAogCX0KIAllbHNlCiAJewotCQlpbnQgcmVmX2Nsa18yNDsKLQotICAgICAgICAgICAgICAgIHJlZl9jbGtfMjQgPSAocmVhZGwoQ09NQ0VSVE9fR1BJT19TWVNURU1fQ09ORklHKSAmIChCSVRfNV9NU0t8QklUXzdfTVNLKSk7Ci0KLSAgICAgICAgICAgICAgICBpZihyZWZfY2xrXzI0KQorCQlpZihIQUxfZ2V0X3JlZl9jbGsoKSA9PSBSRUZfQ0xLXzI0TUhaKQogCQl7CiAgICAgICAgICAgICAgICAgICAgICAgICBwX3BjaWVfcGh5X3JlZ19maWxlID0gJnBjaWVfcGh5X3JlZ19maWxlXzI0WzBdOwogCQkJc2VyZGVzX3JlZ3Nfc2l6ZSA9IHNpemVvZihwY2llX3BoeV9yZWdfZmlsZV8yNCk7CisJCQlwcmludGsoS0VSTl9JTkZPICJQQ0llOiBSZWYgY2xrIDI0TWh6XG4iKTsKIAkJfQogICAgICAgICAgICAgICAgIGVsc2UKIAkJewogICAgICAgICAgICAgICAgICAgICAgICAgcF9wY2llX3BoeV9yZWdfZmlsZSA9ICZwY2llX3BoeV9yZWdfZmlsZV80OFswXTsKIAkJCXNlcmRlc19yZWdzX3NpemUgPSBzaXplb2YocGNpZV9waHlfcmVnX2ZpbGVfNDgpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiUENJZTogUmVmIGNsayA0OE1oelxuIik7CiAJCX0KICAgICAgICAgfQogCisJaWYgKHN5c3RlbV9yZXYgPT0gMSkgeworCQlwcmludGsoS0VSTl9JTkZPICJQQ0llOiBEZXRlY3RlZCBDMksgUmV2QTEgZGV2aWNlIHNlcmRlcyBjbGsgZGV2aWRlciBvbGQ6bmV3PSV4OiV4XG4iLAorCQkJCXBfcGNpZV9waHlfcmVnX2ZpbGVbMHg2MV0udmFsLCAweDA2KTsKKwkJcF9wY2llX3BoeV9yZWdfZmlsZVsweDYxXS52YWwgPSAweDY7CisJfQorCiAJZm9yKHBvbGFyaXR5ID0gMCA7IHBvbGFyaXR5IDwgcG9sYXJpdHlfbWF4OyBwb2xhcml0eSsrKQogCXsKIApAQCAtMTQ1NCw2ICsxNzQyLDcgQEAKIH0KIAogCisKIHN0YXRpYyBpbnQgX19pbml0IGNvbWNlcnRvX3BjaWVfaW5pdCh2b2lkKQogewogICAgICAgICBzdHJ1Y3QgcGNpZV9wb3J0ICpwcDsKQEAgLTE0NjEsMTAgKzE3NTAsMTEgQEAKIAlpbnQgbnVtX3BjaWVfcG9ydCA9IDE7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOwogCisKICAgICAgICAgcHAgPSAmcGNpZV9wb3J0WzBdOwogCWNvbWNlcnRvX3BjaWVfYnNwX2luaXQocHAsIDApOwogCi0gICAgICAgIGlmICggKE5VTV9QQ0lFX1BPUlRTID09IDIpICAmJgorCWlmICggKE5VTV9QQ0lFX1BPUlRTID09IDIpICAmJgogICAgICAgICAgICAgICAgICAgICAgICAgIShyZWFkbChDT01DRVJUT19HUElPX1NZU1RFTV9DT05GSUcpICYgQk9PVF9TRVJERVMxX0NORl9TQVRBMCkgKQogICAgICAgICB7CiAgICAgICAgICAgICAgICAgbnVtX3BjaWVfcG9ydCA9IDI7CkBAIC0xNTAwLDkgKzE3OTAsMTYgQEAKICNpZmRlZiBDT05GSUdfUE0KIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBjaWVfcHdyMCk7CiAKLQlpZihudW1fcGNpZV9wb3J0ID4gMSkKKwlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKCZwY2llX3B3cjAuZGV2LCAmZGV2X2F0dHJfZGV2aWNlX3Jlc2V0KSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5hYmxlIHRvIGNyZWF0ZSBwY2llMCByZXNldCBzeXNmcyBlbnRyeVxuIiwgX19mdW5jX18pOworCisJaWYobnVtX3BjaWVfcG9ydCA+IDEpIHsKIAkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY2llX3B3cjEpOwogCisJCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUoJnBjaWVfcHdyMS5kZXYsICZkZXZfYXR0cl9kZXZpY2VfcmVzZXQpKQorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5hYmxlIHRvIGNyZWF0ZSBwY2llMSByZXNldCBzeXNmcyBlbnRyeVxuIiwgX19mdW5jX18pOworCX0KKwogCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmY29tY2VydG9fcGNpZV9kcml2ZXIpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY29tY2VydG8vcGxhdHNtcC5jIGIvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9wbGF0c21wLmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9yZXNldC5jIGIvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9yZXNldC5jCmluZGV4IDAxNzM4NjcuLjUwNTEzNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtY29tY2VydG8vcmVzZXQuYworKysgYi9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL3Jlc2V0LmMKQEAgLTIzLDE2ICsyMywyOCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxtYWNoL3Jlc2V0Lmg+IAorI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiBzdGF0aWMgY2hhciBpMmNzcGlfc3RhdGVbMl0sZHVzX3N0YXRlWzNdOwogc3BpbmxvY2tfdCByZXNldF9sb2NrOwogCi0vKiBAIGludCBibG9jayA6IElkIG9mIGRldmljZSBibG9jayB0byBiZSBwdXQgaW4gcmVzZXQgCi0gKiBAIGludCBzdGF0ZSA6IFN0YXRlIHZhbHVlIDAtPk9VVC1PRi1SRVNFVCAsIDEtPlJFU0VULiAKLSAqIEFQSSBmb3IgYmxvY2sgcmVzZXQgdG8gYWxsIHRoZSBkZXZpY2UgYmxvY2tzIAorCit2b2lkIGNvbWNlcnRvX3JzdF9jbnRybF9zZXQodW5zaWduZWQgaW50IGRldl9yc3RfY250cmxfYml0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnJlc2V0X2xvY2ssIGZsYWdzKTsKKworCV9fcmF3X3dyaXRlbCgoZGV2X3JzdF9jbnRybF9iaXQgfCBfX3Jhd19yZWFkbChERVZJQ0VfUlNUX0NOVFJMKSksIERFVklDRV9SU1RfQ05UUkwpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmVzZXRfbG9jayxmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGNvbWNlcnRvX3JzdF9jbnRybF9zZXQpOworCisvKiBAIGludCBibG9jayA6IElkIG9mIGRldmljZSBibG9jayB0byBiZSBwdXQgaW4gcmVzZXQKKyAqIEAgaW50IHN0YXRlIDogU3RhdGUgdmFsdWUgMC0+T1VULU9GLVJFU0VUICwgMS0+UkVTRVQuCisgKiBBUEkgZm9yIGJsb2NrIHJlc2V0IHRvIGFsbCB0aGUgZGV2aWNlIGJsb2NrcwogICogYXZhaWxhYmxlIGZvciBDMjAwMCBkZXZpY2VzLgogICovCiB2b2lkIGMyMDAwX2Jsb2NrX3Jlc2V0KGludCBibG9jayxpbnQgc3RhdGUpCkBAIC0zNjAsMTQgKzM3MiwxNCBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQgOgogCQkJYnJlYWs7Ci0JfQkKKwl9CiB9CiBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZXNldF9sb2NrLGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woYzIwMDBfYmxvY2tfcmVzZXQpOwogCiB2b2lkIHJlc2V0X2luaXQodm9pZCl7Ci0JCisKIAkvKkluaXRpbGl6ZSB0aGUgRFVTICxzZXJkZTAvMS8yIGFuZCBJMkNTUEkgZGVwZW5kYW5jeSB2YWx1ZXMgKi8KIAlpMmNzcGlfc3RhdGVbMF09aTJjc3BpX3N0YXRlWzFdPWR1c19zdGF0ZVswXT1kdXNfc3RhdGVbMV09ZHVzX3N0YXRlWzJdPTA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtY29tY2VydG8vc3lzZnN0ZG0uYyBiL2FyY2gvYXJtL21hY2gtY29tY2VydG8vc3lzZnN0ZG0uYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGZhN2Q3NzYuLjFlMTJkNTkKLS0tIGEvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by9zeXNmc3RkbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtY29tY2VydG8vc3lzZnN0ZG0uYwpAQCAtMTc5LDYgKzE3OSw3IEBACiAKIAljbGNfZGF0YSA9IGNsY19kYXRhICogZnJlcV9zZXQgKyB0ZG1udGdfcmVmX2NsayAvIDI7IC8qIHdpdGggcm91bmRpbmcgdG8gbmVhcmVzdCBpbnRlZ2VyICovCiAJY2xjX2RhdGEgKj0gY29tY2VydG9fYmxvY2tfY2xrX2RpdltibG9ja19zZWxlY3RlZF07CisJZG9fZGl2KGNsY19kYXRhLCB0ZG1udGdfcmVmX2Nsayk7CiAKIAlpZiAoY2xjX2RhdGEgJiB+MHgzRkZGRkZGRikgewogCQkvKiB1bmFjY291bnRlZCBiaXRzIGRhbmdlcm91cyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jb21jZXJ0by90aW1lLmMgYi9hcmNoL2FybS9tYWNoLWNvbWNlcnRvL3RpbWUuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9LY29uZmlnIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDA3NDcxMDIuLmNhOTc2NGUKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC03NTcsOCArNzU3LDE1IEBACiAJYm9vbCAiRGlzYWJsZSBzcGVjdWxhdGl2ZSBhY2Nlc3NlcyIKIAlkZXBlbmRzIG9uIENQVV9WNyAmJiBBUkNIX0NPTUNFUlRPCiAJaGVscAotCSAgRGlzYWJsZSBzcGVjdWxhdGl2ZSBhY2Nlc3NlcyBmb3IgdGhlIHByb2Nlc3Nvci4gVGhpcyByZWR1Y2VzIG92ZXJoZWFkIG9mIGNhY2hlIG1haW50ZW5hbmNlIGZvcgotCSAgRE1BIG1hcHBlZCBtZW1vcnkgem9uZXMgYnV0IG1heSByZWR1Y2Ugb3ZlcmFsbCBzeXN0ZW0gbWVtb3J5IHBlcmZvcm1hbmNlLiBJZiB1bnN1cmUsIHNheSBOLgorCSAgRGlzYWJsZSBzcGVjdWxhdGl2ZSBhY2Nlc3NlcyBmb3IgdGhlIHByb2Nlc3Nvci4gVGhpcyBtYXkgcmVkdWNlIG92ZXJhbGwgc3lzdGVtIG1lbW9yeSBwZXJmb3JtYW5jZSBidXQKKwkgIGNhbiBhbGxvdyBvdGhlciwgcG90ZW50aWFsbHkgdW5zYWZlLCBvcHRpbWl6YXRpb25zIChzZWUgYmVsb3cpLiBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgQ1BVX0RNQV9QQVJUSUFMX0lOVkFMSURBVEVTCisJYm9vbCAiRG8gcGFydGlhbCBpbnZhbGlkYXRlcyBpbiB0aGUgRE1BIG1hbmFnZW1lbnQgZnVuY3Rpb25zIgorCWRlcGVuZHMgb24gQ1BVX1Y3ICYmIEFSQ0hfQ09NQ0VSVE8gJiYgQ1BVX1NQRUNVTEFUSVZFX0FDQ0VTU19ESVNBQkxFRAorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gcmVkdWNlIHRoZSBvdmVyaGVhZCBvZiBjYWNoZSBtYWludGVuYW5jZSBmb3IgRE1BIG1hcHBlZCBtZW1vcnkgem9uZXMuIAorCSAgV0FSTklORzogVU5TQUZFLCB0aGlzIG1heSBsZWFkIHRvIHJhbmRvbSBtZW1vcnkgY29ycnVwdGlvbi4gSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIENQVV9CUFJFRElDVF9ESVNBQkxFCiAJYm9vbCAiRGlzYWJsZSBicmFuY2ggcHJlZGljdGlvbiIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMgYi9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCmluZGV4IGVjZjUzMWQuLmM4OTMwMWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKKysrIGIvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYwpAQCAtMjgsMTEgKzI4LDc5IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogCiAjaW5jbHVkZSAibW0uaCIKKyNpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT19VTkNBQ0hFRF9ETUEpCisjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjZW5kaWYKIAogI2lmZGVmIENPTkZJR19DT01DRVJUT19aT05FX0RNQV9OQ05CCiBleHRlcm4gdW5zaWduZWQgbG9uZyBhcm1fZG1hX3pvbmVfc2l6ZTsKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fVU5DQUNIRURfRE1BKQorc3RhdGljIHBnZF90ICpzaGFkb3dfcGdfZGlyOworc3RhdGljIHUxNiAqc2hhZG93X3BtZF9jb3VudDsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9zaGFkb3dfcGFnZV90YWJsZSh2b2lkKQoreworCXBtZF90ICpwbWQsICpzaGFkb3dfcG1kOworCXB0ZV90ICpzaGFkb3dfcHRlLCAqcHRlcDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBhZGRyLCBlbmQsIHBmbjsKKwljb25zdCBzdHJ1Y3QgbWVtX3R5cGUgKm10OworCWludCBjb3VudDsKKworCXNoYWRvd19wZ19kaXIgPSAocGdkX3QgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwgfCBHRlBfQVRPTUlDLCBnZXRfb3JkZXIoMTYzODQpKTsKKwlpZiAoIXNoYWRvd19wZ19kaXIpCisJCXJldHVybiAtRU5PTUVNOworCXNoYWRvd19wbWRfY291bnQgPSAodTE2ICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMIHwgR0ZQX0FUT01JQywgZ2V0X29yZGVyKHNpemVvZih1MTYpICogUFRSU19QRVJfUEdEKSk7CisJaWYgKCFzaGFkb3dfcG1kX2NvdW50KQorCQlnb3RvIGVycjE7CisKKwltZW1zZXQoc2hhZG93X3BnX2RpciwgMCwgMTYzODQpOworCW1lbXNldChzaGFkb3dfcG1kX2NvdW50LCAwLCBzaXplb2YodTE2KSAqIFBUUlNfUEVSX1BHRCk7CisKKwltdCA9IGdldF9tZW1fdHlwZShNVF9NRU1PUlkpOworCXN0YXJ0ID0gMDsKKwljb3VudCA9IDA7CisJZG8geworCQlwbWQgPSBwbWRfb2ZmX2soKHVuc2lnbmVkIGxvbmcpIHN0YXJ0KTsKKwkJaWYgKCFwbWRfbm9uZSgqcG1kKSkgeworCQkJaWYgKHBtZF9iYWQoKnBtZCkgJiYgKChwbWRfdmFsKCpwbWQpICYgflNFQ1RJT05fTUFTSykgPT0gbXQtPnByb3Rfc2VjdCkpIHsgIC8vIE9ubHkgZG8gaXQgZm9yIE1UX01FTU9SWSBhcmVhcworCQkJCXNoYWRvd19wbWQgPSAocG1kX3QgKilzaGFkb3dfcGdfZGlyICsgKHBtZCAtIHBtZF9vZmZfaygwKSk7CisJCQkJYWRkciA9ICh1bnNpZ25lZCBsb25nKXN0YXJ0ICYgUE1EX01BU0s7CisJCQkJZW5kID0gYWRkciArIFBNRF9TSVpFOworCisJCQkJc2hhZG93X3B0ZSA9IChwdGVfdCAqKV9fZ2V0X2ZyZWVfcGFnZShQR0FMTE9DX0dGUCB8IEdGUF9BVE9NSUMpOworCQkJCWlmICghc2hhZG93X3B0ZSkKKwkJCQkJZ290byBlcnIyOworCQkJCXBmbiA9IF9fcGh5c190b19wZm4ocG1kX3ZhbCgqcG1kKSAmIFBNRF9NQVNLKTsKKwkJCQlwdGVwID0gc2hhZG93X3B0ZTsKKwkJCQlkbyB7CisJCQkJCXNldF9wdGVfZXh0KHB0ZXAsIHBmbl9wdGUocGZuLCBfX3BncHJvdChtdC0+cHJvdF9wdGUpKSwgMCk7CisJCQkJCXBmbisrOworCQkJCX0gd2hpbGUgKHB0ZXArKywgYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTsKKwkJCQlfX3BtZF9wb3B1bGF0ZShzaGFkb3dfcG1kLCBfX3BhKHNoYWRvd19wdGUpLCBtdC0+cHJvdF9sMSk7CisJCQl9IGVsc2UgeworCQkJCS8vIE1hcmsgdGhlIHNoYWRvdyBpbiB1c2UsIHNvIHdlIG5ldmVyIHJlcGxhY2UgdGhlIGFscmVhZHkgZXhpc3RpbmcgMm5kLWxldmVsCisJCQkJc2hhZG93X3BtZF9jb3VudFtwZ2RfaW5kZXgoc3RhcnQpXSsrOworCQkJfQorCQl9CisJfSB3aGlsZSAoY291bnQrKywgc3RhcnQgKz0gUE1EX1NJWkUsIGNvdW50IDwgUFRSU19QRVJfUEdEKTsKKworCXJldHVybiAwOworCitlcnIyOgorCV9fZnJlZV9wYWdlcygoc3RydWN0IHBhZ2UgKilzaGFkb3dfcG1kX2NvdW50LCBnZXRfb3JkZXIoc2l6ZW9mKHUxNikgKiBQVFJTX1BFUl9QR0QpKTsKKwlzaGFkb3dfcG1kX2NvdW50ID0gTlVMTDsKKwkvL1RPRE86IGZyZWUgYWxyZWFkeSBhbGxvY2F0ZWQgc2hhZG93X3B0ZSB0YWJsZXMKK2VycjE6CisJX19mcmVlX3BhZ2VzKChzdHJ1Y3QgcGFnZSAqKXNoYWRvd19wZ19kaXIsIGdldF9vcmRlcigxNjM4NCkpOworCXJldHVybiAtRU5PTUVNOworfQorY29yZV9pbml0Y2FsbChpbml0X3NoYWRvd19wYWdlX3RhYmxlKTsKKyNlbmRpZgorCiBzdGF0aWMgdTY0IGdldF9jb2hlcmVudF9kbWFfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJdTY0IG1hc2sgPSAodTY0KWFybV9kbWFfbGltaXQ7CkBAIC00NjAsMTMgKzUyOCwyMTEgQEAKIH0KIEVYUE9SVF9TWU1CT0woZG1hX2ZyZWVfY29oZXJlbnQpOwogCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fVU5DQUNIRURfRE1BKQorc3RhdGljIGlubGluZSB2b2lkIHNoYWRvd19wbWRfaW5jKGNvbnN0IHZvaWQgKmthZGRyLCBpbnQgaW5jcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmluaXRfbW0ucGFnZV90YWJsZV9sb2NrLCBmbGFncyk7CisJc2hhZG93X3BtZF9jb3VudFtwZ2RfaW5kZXgoKHVuc2lnbmVkIGxvbmcpIGthZGRyKV0gKz0gaW5jcjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbml0X21tLnBhZ2VfdGFibGVfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV9wbWRfZmFzdChwbWRfdCAqcG1kcGQsIHBtZF90ICpwbWRwcykKK3sKKyNpZiAhZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fNjRLX1BBR0VTKQorCXBtZHBkWzBdID0gcG1kcHNbMF07CisJcG1kcGRbMV0gPSBwbWRwc1sxXTsKKyNlbHNlCisJaW50IGk7CisJZm9yKGkgPSAwOyBpIDwgTElOS0VEX1BNRFM7IGkrKykKKwkJcG1kcGRbaV0gPSBwbWRwc1tpXTsKKyNlbmRpZgorfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RtYWNfbWFwX2FyZWEoY29uc3Qgdm9pZCAqa2FkZHIsIHNpemVfdCBzaXplLAorCWludCBkaXIpCit7CisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fVU5DQUNIRURfRE1BKQorCXBtZF90ICpwbWQsICpzaGFkb3dfcG1kOworCXB0ZV90ICpwdGU7CisJY29uc3Qgdm9pZCAqa2FkZHJfcGFnZTsKKwljb25zdCBzdHJ1Y3QgbWVtX3R5cGUgKm10OworCXVuc2lnbmVkIGludCBucl9wYWdlcywgbnJfcGFnZXNfcG1kOworCisJaWYgKCFzaGFkb3dfcG1kX2NvdW50KQorCQlnb3RvIG9wOworCisJLy8gRm9yIG5vdywgYmUgc2FmZSBhbmQgb25seSB1bmNhY2hlIGZ1bGwgcGFnZXMgc28gd2UgZG9uJ3QgaGF2ZSB0byBoYW5kbGUKKwkvLyB0aGUgY2FzZSBvZiBwYWdlcyBiZWluZyBETUEtbWFwcGVkIG11bHRpcGxlIHRpbWVzCisJaWYgKChkaXIgPT0gRE1BX0ZST01fREVWSUNFKSAmJiAoKCgodW5zaWduZWQgbG9uZykga2FkZHJ8c2l6ZSkgJiB+UEFHRV9NQVNLKSA9PSAwKSkgeworCQltdCA9IGdldF9tZW1fdHlwZShNVF9NRU1PUllfTk9OQ0FDSEVEKTsKKwkJa2FkZHJfcGFnZSA9IGthZGRyOworCQlwbWQgPSBwbWRfb2ZmX2soKHVuc2lnbmVkIGxvbmcpIGthZGRyX3BhZ2UpOworCQlzaGFkb3dfcG1kID0gKHBtZF90ICopc2hhZG93X3BnX2RpciArIChwbWQgLSBwbWRfb2ZmX2soMCkpOworCQlucl9wYWdlcyA9IF9fcGh5c190b19wZm4oc2l6ZSk7CisKKwkJaWYgKG5yX3BhZ2VzID09IDEpIHsgLy8gT3B0aW1pemUgZm9yIHRoZSBjb21tb24gY2FzZQorCQkJc2hhZG93X3BtZF9pbmMoa2FkZHJfcGFnZSwgMSk7CisJCQlpZiAocG1kX2JhZCgqcG1kKSkgeyAvL05vIDJuZC1sZXZlbCBwYWdlIHRhYmxlLCByZXRyaWV2ZSBpdCBmcm9tIHRoZSBzaGFkb3dzCisJCQkJLy8gU21hbGwgcmFjZSBjb25kaXRpb24gaGVyZSwgYnV0IGF0IHdvcnN0IHdlJ2xsIGVuZCB1cCBjb3B5aW5nIHRoZSBzaGFkb3dfcG1kIHRvIHRoZSBhY3R1YWwgcG1kIHR3aWNlLgorCQkJCS8vIEZvciBub3csIG1hcCB0aGUgd2hvbGUgUE1ELiBUT0RPOiB0cnkgYW5kIG1hcCBvbmx5IDEgc2VjdGlvbiAoMU1CKS4KKwkJCQljb3B5X3BtZF9mYXN0KHBtZCwgc2hhZG93X3BtZCk7CisJCQl9CisKKwkJCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgKGludCkga2FkZHJfcGFnZSk7CisJCQl1bmNhY2hlX3B0ZV9leHQocHRlKTsKKwkJCWZsdXNoX3RsYl9rZXJuZWxfcGFnZSgodW5zaWduZWQgbG9uZykga2FkZHJfcGFnZSk7CisJCQlnb3RvIG9wOworCQl9CisKKwkJbnJfcGFnZXNfcG1kID0gX19waHlzX3RvX3BmbihQTURfU0laRSAtICgodW5zaWduZWQgbG9uZykga2FkZHJfcGFnZSAmIH5QTURfTUFTSykpOworCisJCXdoaWxlIChucl9wYWdlcykgeworCisJCQlucl9wYWdlc19wbWQgPSBtaW4obnJfcGFnZXMsIG5yX3BhZ2VzX3BtZCk7CisJCQlucl9wYWdlcyAtPSBucl9wYWdlc19wbWQ7CisKKwkJCXNoYWRvd19wbWRfaW5jKGthZGRyX3BhZ2UsIG5yX3BhZ2VzX3BtZCk7CisKKwkJCWlmIChwbWRfYmFkKCpwbWQpKSB7IC8vTm8gMm5kLWxldmVsIHBhZ2UgdGFibGUsIHJldHJpZXZlIGl0IGZyb20gdGhlIHNoYWRvd3MKKwkJCQkvLyBTbWFsbCByYWNlIGNvbmRpdGlvbiBoZXJlLCBidXQgYXQgd29yc3Qgd2UnbGwgZW5kIHVwIGNvcHlpbmcgdGhlIHNoYWRvd19wbWQgdG8gdGhlIGFjdHVhbCBwbWQgdHdpY2UuCisJCQkJLy8gRm9yIG5vdywgbWFwIHRoZSB3aG9sZSBQTUQuIFRPRE86IHRyeSBhbmQgbWFwIG9ubHkgMSBzZWN0aW9uICgxTUIpLgorCQkJCWNvcHlfcG1kX2Zhc3QocG1kLCBzaGFkb3dfcG1kKTsKKwkJCX0KKworCQkJcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCAoaW50KSBrYWRkcl9wYWdlKTsKKwkJCXdoaWxlIChucl9wYWdlc19wbWQpIHsKKwkJCQl1bmNhY2hlX3B0ZV9leHQocHRlKTsKKwkJCQlmbHVzaF90bGJfa2VybmVsX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGthZGRyX3BhZ2UpOworCQkJCXB0ZSsrOworCQkJCWthZGRyX3BhZ2UgKz0gUEFHRV9TSVpFOworCQkJCW5yX3BhZ2VzX3BtZC0tOworCQkJfQorCisJCQlucl9wYWdlc19wbWQgPSBQVFJTX1BFUl9QVEU7CisjaWYgIWRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzY0S19QQUdFUykKKwkJCXBtZCArPSAyOworCQkJc2hhZG93X3BtZCArPSAyOworI2Vsc2UKKwkJCXBtZCArPSBMSU5LRURfUE1EUzsKKwkJCXNoYWRvd19wbWQgKz0gTElOS0VEX1BNRFM7CisjZW5kaWYKKwkJfQorCX0KKwlvcDoKKyNlbmRpZgorCWRtYWNfbWFwX2FyZWEoa2FkZHIsIHNpemUsIGRpcik7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2RtYWNfdW5tYXBfYXJlYShjb25zdCB2b2lkICprYWRkciwgc2l6ZV90IHNpemUsCiAJaW50IGRpcikKIHsKLSNpZiAhZGVmaW5lZChDT05GSUdfQ1BVX1NQRUNVTEFUSVZFX0FDQ0VTU19ESVNBQkxFRCkKKyNpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT19VTkNBQ0hFRF9ETUEpCisJcG1kX3QgKnBtZDsKKwlwdGVfdCAqcHRlOworCWNvbnN0IHN0cnVjdCBtZW1fdHlwZSAqbXQ7CisJdW5zaWduZWQgbG9uZyBwYTsKKwljb25zdCB2b2lkICprYWRkcl9wYWdlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IG5yX3BhZ2VzLCBucl9wYWdlc19wbWQsIHBhZ2VfY291bnQ7CisKKwlpZiAoIXNoYWRvd19wbWRfY291bnQpCisJCWdvdG8gb3A7CisKKwlpZiAoKGRpciA9PSBETUFfRlJPTV9ERVZJQ0UpICYmICgoKCh1bnNpZ25lZCBsb25nKSBrYWRkcnxzaXplKSAmIH5QQUdFX01BU0spID09IDApKSB7CisJCW10ID0gZ2V0X21lbV90eXBlKE1UX01FTU9SWSk7CisJCWthZGRyX3BhZ2UgPSBrYWRkcjsKKworCQlwbWQgPSBwbWRfb2ZmX2soKHVuc2lnbmVkIGxvbmcpIGthZGRyX3BhZ2UpOworCQlwYSA9IF9fdmlydF90b19waHlzKCh1bnNpZ25lZCBsb25nKWthZGRyX3BhZ2UgJiBQTURfTUFTSyk7CisKKwkJbnJfcGFnZXMgPSBfX3BoeXNfdG9fcGZuKHNpemUpOworCisJCWlmIChucl9wYWdlcyA9PSAxKSB7IC8vIE9wdGltaXplIGZvciB0aGUgY29tbW9uIGNhc2UKKwkJCWlmIChwbWRfYmFkKCpwbWQpKSAvLyBObyAybmQtbGV2ZWwgcGFnZSB0YWJsZSwgc28gcGFnZSB3YXMgbmV2ZXIgbWFkZSBub24tY2FjaGVhYmxlLgorCQkJCWdvdG8gb3A7CisJCQlwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIChpbnQpIGthZGRyX3BhZ2UpOworCQkJc2V0X3B0ZV9leHQocHRlLCAqcHRlLCAwKTsKKworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmluaXRfbW0ucGFnZV90YWJsZV9sb2NrLCBmbGFncyk7CisJCQlzaGFkb3dfcG1kX2NvdW50W3BnZF9pbmRleCgodW5zaWduZWQgbG9uZykga2FkZHJfcGFnZSldLS07CisJCQlpZiAoc2hhZG93X3BtZF9jb3VudFtwZ2RfaW5kZXgoKHVuc2lnbmVkIGxvbmcpIGthZGRyX3BhZ2UpXSA9PSAwKSB7CisjaWYgIWRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzY0S19QQUdFUykKKwkJCQkqcG1kID0gX19wbWQocGEgfCBtdC0+cHJvdF9zZWN0KTsKKwkJCQlwbWQrKzsKKwkJCQlwYSArPSBTRUNUSU9OX1NJWkU7CisJCQkJKnBtZCA9IF9fcG1kKHBhIHwgbXQtPnByb3Rfc2VjdCk7CisjZWxzZQorCQkJCXBtZF90ICpvcmlnX3BtZCA9IHBtZDsKKwkJCQl3aGlsZSAocG1kIDwgKG9yaWdfcG1kICsgTElOS0VEX1BNRFMpKSB7CisJCQkJCSpwbWQgPSBfX3BtZChwYSB8IG10LT5wcm90X3NlY3QpOworCQkJCQlwYSArPSBTRUNUSU9OX1NJWkU7CisJCQkJCXBtZCsrOworCQkJCX0KKyNlbmRpZgorCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5pdF9tbS5wYWdlX3RhYmxlX2xvY2ssIGZsYWdzKTsKKworCQkJZmx1c2hfdGxiX2tlcm5lbF9wYWdlKCh1bnNpZ25lZCBsb25nKSBrYWRkcl9wYWdlKTsKKwkJCXJldHVybjsKKwkJfQorCisJCW5yX3BhZ2VzX3BtZCA9IF9fcGh5c190b19wZm4oUE1EX1NJWkUgLSAoKHVuc2lnbmVkIGxvbmcpIGthZGRyX3BhZ2UgJiB+UE1EX01BU0spKTsKKworCQl3aGlsZSAobnJfcGFnZXMpIHsKKwkJCWlmIChwbWRfYmFkKCpwbWQpKSAvLyBObyAybmQtbGV2ZWwgcGFnZSB0YWJsZSwgc28gcGFnZSB3YXMgbmV2ZXIgbWFkZSBub24tY2FjaGVhYmxlLgorCQkJCWdvdG8gb3A7CisJCQlucl9wYWdlc19wbWQgPSBtaW4obnJfcGFnZXMsIG5yX3BhZ2VzX3BtZCk7CisJCQlucl9wYWdlcyAtPSBucl9wYWdlc19wbWQ7CisKKwkJCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgKGludCkga2FkZHJfcGFnZSk7CisJCQlwYWdlX2NvdW50ID0gbnJfcGFnZXNfcG1kOworCQkJd2hpbGUgKHBhZ2VfY291bnQpIHsKKwkJCQlzZXRfcHRlX2V4dChwdGUsICpwdGUsIDApOworCQkJCXB0ZSsrOworCQkJCXBhZ2VfY291bnQtLTsKKwkJCX0KKworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmluaXRfbW0ucGFnZV90YWJsZV9sb2NrLCBmbGFncyk7CisJCQlzaGFkb3dfcG1kX2NvdW50W3BnZF9pbmRleCgodW5zaWduZWQgbG9uZykga2FkZHJfcGFnZSldIC09IG5yX3BhZ2VzX3BtZDsKKwkJCWlmIChzaGFkb3dfcG1kX2NvdW50W3BnZF9pbmRleCgodW5zaWduZWQgbG9uZykga2FkZHJfcGFnZSldID09IDApIHsKKyNpZiAhZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fNjRLX1BBR0VTKQorCQkJCSpwbWQgPSBfX3BtZChwYSB8IG10LT5wcm90X3NlY3QpOworCQkJCXBtZCsrOworCQkJCXBhICs9IFNFQ1RJT05fU0laRTsKKwkJCQkqcG1kID0gX19wbWQocGEgfCBtdC0+cHJvdF9zZWN0KTsKKwkJCQlwbWQrKzsKKwkJCQlwYSArPSBTRUNUSU9OX1NJWkU7CisjZWxzZQorCQkJCXBtZF90ICpvcmlnX3BtZCA9IHBtZDsKKwkJCQl3aGlsZSAocG1kIDwgKG9yaWdfcG1kICsgTElOS0VEX1BNRFMpKSB7CisJCQkJCSpwbWQgPSBfX3BtZChwYSB8IG10LT5wcm90X3NlY3QpOworCQkJCQlwbWQrKzsKKwkJCQkJcGEgKz0gU0VDVElPTl9TSVpFOworCQkJCX0KKyNlbmRpZgorCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5pdF9tbS5wYWdlX3RhYmxlX2xvY2ssIGZsYWdzKTsKKworCQkJd2hpbGUgKG5yX3BhZ2VzX3BtZCkgeworCQkJCWZsdXNoX3RsYl9rZXJuZWxfcGFnZSgodW5zaWduZWQgbG9uZykga2FkZHJfcGFnZSk7CisJCQkJa2FkZHJfcGFnZSArPSBQQUdFX1NJWkU7CisJCQkJbnJfcGFnZXNfcG1kLS07CisJCQl9CisKKwkJCW5yX3BhZ2VzX3BtZCA9IFBUUlNfUEVSX1BURTsKKwkJfQorCisJCXJldHVybjsKKwl9CisJb3A6CisjZW5kaWYKKyNpZiAhZGVmaW5lZChDT05GSUdfQ1BVX0RNQV9QQVJUSUFMX0lOVkFMSURBVEVTKQogCWRtYWNfdW5tYXBfYXJlYShrYWRkciwgc2l6ZSwgZGlyKTsKICNlbHNlCi0Jc2l6ZV90IHNpemVfaW52ID0gbWluKChzaXplX3QpIDMyLCBzaXplKTsKKwlzaXplX3Qgc2l6ZV9pbnYgPSBtaW5fdChzaXplX3QsIDMyLCBzaXplKTsKIAogCWRtYWNfdW5tYXBfYXJlYShrYWRkciwgc2l6ZV9pbnYsIGRpcik7CiAJZG1hY191bm1hcF9hcmVhKGthZGRyICsgc2l6ZSAtIHNpemVfaW52LCBzaXplX2ludiwgZGlyKTsKQEAgLTQ4NywxMSArNzUzLDE0IEBACiAJQlVHX09OKCF2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpIHx8ICF2aXJ0X2FkZHJfdmFsaWQoa2FkZHIgKyBzaXplIC0gMSkpOwogCiAjaWZkZWYgQ09ORklHX0NPTUNFUlRPX1pPTkVfRE1BX05DTkIKLQlpZiAoKHBhZGRyICsgc2l6ZSkgPD0gYXJtX2RtYV96b25lX3NpemUpCi0JCXJldHVybjsKLSNlbmRpZgorCWlmICgocGFkZHIgKyBzaXplKSA8PSBhcm1fZG1hX3pvbmVfc2l6ZSkgeworCQlpZiAoZGlyICE9IERNQV9GUk9NX0RFVklDRSkKKwkJCXdtYigpOwogCi0JZG1hY19tYXBfYXJlYShrYWRkciwgc2l6ZSwgZGlyKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCV9fZG1hY19tYXBfYXJlYShrYWRkciwgc2l6ZSwgZGlyKTsKIAogI2lmICFkZWZpbmVkKENPTkZJR19MMlgwX0lOU1RSVUNUSU9OX09OTFkpCiAJaWYgKGRpciA9PSBETUFfRlJPTV9ERVZJQ0UpIHsKQEAgLTUxOSwxMCArNzg4LDEwIEBACiAjaWYgIWRlZmluZWQoQ09ORklHX0wyWDBfSU5TVFJVQ1RJT05fT05MWSkKIAkvKiBkb24ndCBib3RoZXIgaW52YWxpZGF0aW5nIGlmIERNQSB0byBkZXZpY2UgKi8KIAlpZiAoZGlyICE9IERNQV9UT19ERVZJQ0UpIHsKLSNpZiAhZGVmaW5lZChDT05GSUdfQ1BVX1NQRUNVTEFUSVZFX0FDQ0VTU19ESVNBQkxFRCkKKyNpZiAhZGVmaW5lZChDT05GSUdfQ1BVX0RNQV9QQVJUSUFMX0lOVkFMSURBVEVTKQogCQlvdXRlcl9pbnZfcmFuZ2UocGFkZHIsIHBhZGRyICsgc2l6ZSk7CiAjZWxzZQotCQlzaXplX3Qgc2l6ZV9pbnYgPSBtaW4oMzIsIHNpemUpOworCQlzaXplX3Qgc2l6ZV9pbnYgPSBtaW5fdChzaXplX3QsIDMyLCBzaXplKTsKIAogCQlvdXRlcl9pbnZfcmFuZ2UocGFkZHIsIHBhZGRyICsgc2l6ZV9pbnYpOwogCQlvdXRlcl9pbnZfcmFuZ2UocGFkZHIgKyBzaXplIC0gc2l6ZV9pbnYsIHBhZGRyICsgc2l6ZSk7CkBAIC01NzIsNiArODQxLDcgQEAKIAkJCXZhZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0OwogCQkJb3AodmFkZHIsIGxlbiwgZGlyKTsKIAkJfQorCiAJCW9mZnNldCA9IDA7CiAJCXBhZ2UrKzsKIAkJbGVmdCAtPSBsZW47CkBAIC01ODQsMTEgKzg1NCwxNSBAQAogCXVuc2lnbmVkIGxvbmcgcGFkZHIgPSBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmY7CiAKICNpZmRlZiBDT05GSUdfQ09NQ0VSVE9fWk9ORV9ETUFfTkNOQgotCWlmICgocGFkZHIgKyBzaXplKSA8PSBhcm1fZG1hX3pvbmVfc2l6ZSkKKwlpZiAoKHBhZGRyICsgc2l6ZSkgPD0gYXJtX2RtYV96b25lX3NpemUpIHsKKwkJaWYgKGRpciAhPSBETUFfRlJPTV9ERVZJQ0UpCisJCQl3bWIoKTsKKwogCQlyZXR1cm47CisJfQogI2VuZGlmCiAKLQlkbWFfY2FjaGVfbWFpbnRfcGFnZShwYWdlLCBvZmYsIHNpemUsIGRpciwgZG1hY19tYXBfYXJlYSk7CisJZG1hX2NhY2hlX21haW50X3BhZ2UocGFnZSwgb2ZmLCBzaXplLCBkaXIsIF9fZG1hY19tYXBfYXJlYSk7CiAKICNpZiAhZGVmaW5lZChDT05GSUdfTDJYMF9JTlNUUlVDVElPTl9PTkxZKQogCWlmIChkaXIgPT0gRE1BX0ZST01fREVWSUNFKSB7CkBAIC02MTQsMTAgKzg4OCwxMCBAQAogI2lmICFkZWZpbmVkKENPTkZJR19MMlgwX0lOU1RSVUNUSU9OX09OTFkpCiAJLyogZG9uJ3QgYm90aGVyIGludmFsaWRhdGluZyBpZiBETUEgdG8gZGV2aWNlICovCiAJaWYgKGRpciAhPSBETUFfVE9fREVWSUNFKSB7Ci0jaWYgIWRlZmluZWQoQ09ORklHX0NQVV9TUEVDVUxBVElWRV9BQ0NFU1NfRElTQUJMRUQpCisjaWYgIWRlZmluZWQoQ09ORklHX0NQVV9ETUFfUEFSVElBTF9JTlZBTElEQVRFUykKIAkJb3V0ZXJfaW52X3JhbmdlKHBhZGRyLCBwYWRkciArIHNpemUpOwogI2Vsc2UKLQkJc2l6ZV90IHNpemVfaW52ID0gbWluKDMyLCBzaXplKTsKKwkJc2l6ZV90IHNpemVfaW52ID0gbWluX3Qoc2l6ZV90LCAzMiwgc2l6ZSk7CiAKIAkJb3V0ZXJfaW52X3JhbmdlKHBhZGRyLCBwYWRkciArIHNpemVfaW52KTsKIAkJb3V0ZXJfaW52X3JhbmdlKHBhZGRyICsgc2l6ZSAtIHNpemVfaW52LCBwYWRkciArIHNpemUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmx1c2guYyBiL2FyY2gvYXJtL21tL2ZsdXNoLmMKaW5kZXggM2MxZDA3NC4uOTRlNzM5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZmx1c2guYworKysgYi9hcmNoL2FybS9tbS9mbHVzaC5jCkBAIC0yNDEsNiArMjQxLDEyIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBzeW5jX291dGVyX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXVuc2lnbmVkIGxvbmcgcGh5cyA9IHBhZ2VfdG9fcGh5cyhwYWdlKTsKKworCW91dGVyX2ZsdXNoX3JhbmdlKHBoeXMsIHBoeXMgKyBQQUdFX1NJWkUpOworfQogI2VuZGlmCiAKICNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNgpAQCAtMzE0LDYgKzMyMCwxMCBAQAogCQkJX19mbHVzaF9kY2FjaGVfYWxpYXNlcyhtYXBwaW5nLCBwYWdlKTsKIAkJZWxzZSBpZiAobWFwcGluZykKIAkJCV9fZmx1c2hfaWNhY2hlX2FsbCgpOworCisjaWYgZGVmaW5lZChDT05GSUdfTDJYMF9JTlNUUlVDVElPTl9PTkxZKQorCQlzeW5jX291dGVyX2NhY2hlKHBhZ2UpOworI2VuZGlmCiAJCXNldF9iaXQoUEdfZGNhY2hlX2NsZWFuLCAmcGFnZS0+ZmxhZ3MpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2luaXQuYyBiL2FyY2gvYXJtL21tL2luaXQuYwppbmRleCBjMTQzZmNjLi5mMzYyY2Y4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9pbml0LmMKKysrIGIvYXJjaC9hcm0vbW0vaW5pdC5jCkBAIC00MjcsOSArNDI3LDE1IEBACiAKIAlmb3IgKDsgcGZuIDwgZW5kOyBwZm4rKykgewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7CisjaWYgZGVmaW5lZChDT05GSUdfTDJYMF9JTlNUUlVDVElPTl9PTkxZKQorCQl1bnNpZ25lZCBsb25nIHBoeXMgPSBwYWdlX3RvX3BoeXMocGFnZSk7CisjZW5kaWYKIAkJQ2xlYXJQYWdlUmVzZXJ2ZWQocGFnZSk7CiAJCWluaXRfcGFnZV9jb3VudChwYWdlKTsKIAkJX19mcmVlX3BhZ2UocGFnZSk7CisjaWYgZGVmaW5lZChDT05GSUdfTDJYMF9JTlNUUlVDVElPTl9PTkxZKQorCQlvdXRlcl9mbHVzaF9yYW5nZShwaHlzLCBwaHlzICsgUEFHRV9TSVpFKTsKKyNlbmRpZgogCQlwYWdlcysrOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbW11LmMgYi9hcmNoL2FybS9tbS9tbXUuYwppbmRleCBkNmY3MGEyLi5mNDUyYmRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9tbXUuYworKysgYi9hcmNoL2FybS9tbS9tbXUuYwpAQCAtMTA0NSwxMSArMTA0NSwxOSBAQAogCQkJbWFwLnBmbiA9IF9fcGh5c190b19wZm4oc3RhcnQpOwogCQkJbWFwLnZpcnR1YWwgPSBfX3BoeXNfdG9fdmlydChzdGFydCk7CiAJCQltYXAubGVuZ3RoID0gbGVuZ3RoX25jbmJfbm93OwotCQkJbWFwLnR5cGUgPSBNVF9NU1BfTkNOQjsKKwkJCW1hcC50eXBlID0gTVRfTUVNT1JZX05PTkNBQ0hFRDsKKwogCQkJcHJpbnRrKCJDb21jZXJ0bzogem9uZV9kbWEgbWFwcGluZyBzaXplPSVseCB0eXBlPSVseFxuIiwgKHVuc2lnbmVkIGxvbmcpIG1hcC5sZW5ndGgsICh1bnNpZ25lZCBsb25nKSBtYXAudHlwZSk7CisKKwkJCWlmICghYXJtX2RtYV96b25lLnN0YXJ0KQorCQkJCWFybV9kbWFfem9uZS5zdGFydCA9IF9fcGh5c190b192aXJ0KHN0YXJ0KTsKKwogCQkJY3JlYXRlX21hcHBpbmcoJm1hcCk7CiAJCQlzdGFydCArPSBsZW5ndGhfbmNuYl9ub3c7CiAJCQlsZW5ndGhfbmNuYiAtPSBsZW5ndGhfbmNuYl9ub3c7CisKKwkJCWFybV9kbWFfem9uZS5lbmQgPSBfX3BoeXNfdG9fdmlydChzdGFydCk7CisKIAkJCWlmIChzdGFydCA9PSBlbmQpCiAJCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtdjcuUyBiL2FyY2gvYXJtL21tL3Byb2MtdjcuUwppbmRleCBiMTZmZmIxLi41ZjNiZDliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXY3LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCkBAIC0yMDEsNiArMjAxLDQxIEBACiAJbW92CXBjLCBscgogRU5EUFJPQyhjcHVfdjdfc2V0X3B0ZV9leHQpCiAKKy8qIE1ha2UgdGhlIG1lbW9yeSB1bmNhY2hlZCwgYnV0IGtlZXAgTGludXggc2V0dGluZ3MgYXMgaXMgc28gbWVtb3J5IG1heSBiZQorICogcmVzZXQgdG8gb3JpZ2luYWwgYXR0cmlidXRlcyBsYXRlciBvbi4KKyAqLworRU5UUlkoY3B1X3Y3X3VuY2FjaGVfcHRlX2V4dCkKKyNpZmRlZiBDT05GSUdfTU1VCisjaWYgIWRlZmluZWQoQ09ORklHX0NPTUNFUlRPXzY0S19QQUdFUykKKyBBUk0oCWxkcglyMywgW3IwLCAjMjA0OF0hICkKKyBUSFVNQigJYWRkCXIwLCByMCwgIzIwNDggKQorIFRIVU1CKCBsZHIgcjMsIFtyMF0gKQorCQliaWMgcjMsIHIzLCAjMHg0OAkJQCBjbGVhciBURVhbMF0sQyBiaXRzIChzZWUgYmVsb3cpCisJCW9yciByMywgcjMsICMweDQgIAkJQCBzZXQgQiBiaXQgKHNlZSBiZWxvdykKKyBBUk0oCXN0cglyMywgW3IwLCAjMjA0OF0hICkKKyBUSFVNQigJc3RyCXIzLCBbcjBdICkKKyAjZWxzZQorCWxkciByMSwgPTMyNzY4CQlAIFBURV9IV1RBQkxFX09GRgorCWFkZCByMSwgcjEsIHIwCisJbGRyIHIzLCBbcjFdCisJYWRkIHIyLCByMSwgIzY0CQlAIDE2KjQgYnl0ZXMKK0FSTSgJYmljIHIzLCByMywgIzB4MTAwOCApIAlAIGNsZWFyIFRFWFswXSxDIGJpdHMgKHNlZSBiZWxvdykKK1RIVU1CKAliaWMgcjMsIHIzLCAjMHg4ICkKK1RIVU1CKAliaWMgcjMsIHIzLCAjMHgxMDAwICkKKwlvcnIgcjMsIHIzLCAjMHg0CQkJQCBzZXQgQiBiaXQgKHNlZSBiZWxvdykKKyAxOgorCXN1YiByMiwgcjIsICM0CisJc3RyCXIzLCBbcjJdIQorCWNtcCByMSwgcjIKKwlibG8gMWIKKyAjZW5kaWYKKworCisjZW5kaWYKKwltb3YJcGMsIGxyCitFTkRQUk9DKGNwdV92N191bmNhY2hlX3B0ZV9leHQpCisKKwogCXN0cmluZwljcHVfdjdfbmFtZSwgIkFSTXY3IFByb2Nlc3NvciIKIAkuYWxpZ24KIApAQCAtMjY3LDYgKzMwMiw5IEBACiAJQUxUX1VQKG9ycglyMSwgcjEsICNUVEJfRkxBR1NfVVApCiAJbWNyCXAxNSwgMCwgcjEsIGMyLCBjMCwgMAlAIFRUQiAwCiAJbWNyCXAxNSwgMCwgcjcsIGMyLCBjMCwgMQlAIFRUQiAxCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fSFdfS0VSTkVMX1BBR0VUQUJMRSkKKwltb3YgaXAsICMxCQkJCQkJQCBzZXQgVFRCUkNSLk4gdG8gMSwgc28gdGhhdCBhZGRyZXNzZXMgYWJvdmUgMkdCIHdpbGwgdXNlIFRUQjEKKyNlbmRpZgogCW1jcglwMTUsIDAsIGlwLCBjMiwgYzAsIDIJQCBUVEIgY29udHJvbCByZWdpc3RlcgogCW1yYwlwMTUsIDAsIHI0LCBjMSwgYzAsIDEJQCBSZWFkIEF1eGlsaWFyeSBjb250cm9sIHJlZ2lzdGVyCiAJdGVxCXI0LCByOQkJCUAgSXMgaXQgYWxyZWFkeSBzZXQ/CkBAIC0zOTgsNiArNDM2LDkgQEAKIAlkc2IKICNpZmRlZiBDT05GSUdfTU1VCiAJbWNyCXAxNSwgMCwgcjEwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICsgRCBUTEJzCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fSFdfS0VSTkVMX1BBR0VUQUJMRSkKKwltb3YgcjEwLCAjMQkJCQkJCUAgc2V0IFRUQlJDUi5OIHRvIDEsIHNvIHRoYXQgYWRkcmVzc2VzIGFib3ZlIDJHQiB3aWxsIHVzZSBUVEIxCisjZW5kaWYKIAltY3IJcDE1LCAwLCByMTAsIGMyLCBjMCwgMgkJQCBUVEIgY29udHJvbCByZWdpc3RlcgogCUFMVF9TTVAob3JyCXI0LCByNCwgI1RUQl9GTEFHU19TTVApCiAJQUxUX1VQKG9ycglyNCwgcjQsICNUVEJfRkxBR1NfVVApCmRpZmYgLS1naXQgYS9jcnlwdG8vb2NmL0NvbmZpZy5pbiBiL2NyeXB0by9vY2YvQ29uZmlnLmluCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2NyeXB0by9vY2YvS2NvbmZpZyBiL2NyeXB0by9vY2YvS2NvbmZpZwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9jcnlwdG8vb2NmL01ha2VmaWxlIGIvY3J5cHRvL29jZi9NYWtlZmlsZQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9jcnlwdG8vb2NmL2NyaW92LmMgYi9jcnlwdG8vb2NmL2NyaW92LmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvY3J5cHRvL29jZi9jcnlwdG8uYyBiL2NyeXB0by9vY2YvY3J5cHRvLmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvY3J5cHRvL29jZi9jcnlwdG9kZXYuYyBiL2NyeXB0by9vY2YvY3J5cHRvZGV2LmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvY3J5cHRvL29jZi9jcnlwdG9kZXYuaCBiL2NyeXB0by9vY2YvY3J5cHRvZGV2LmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvY3J5cHRvL29jZi9jcnlwdG9zb2Z0LmMgYi9jcnlwdG8vb2NmL2NyeXB0b3NvZnQuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9jcnlwdG8vb2NmL29jZi1iZW5jaC5jIGIvY3J5cHRvL29jZi9vY2YtYmVuY2guYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9jcnlwdG8vb2NmL29jZi1jb21wYXQuaCBiL2NyeXB0by9vY2Yvb2NmLWNvbXBhdC5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2NyeXB0by9vY2YvcmFuZG9tLmMgYi9jcnlwdG8vb2NmL3JhbmRvbS5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2NyeXB0by9vY2Yvcm5kdGVzdC5jIGIvY3J5cHRvL29jZi9ybmR0ZXN0LmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvY3J5cHRvL29jZi9ybmR0ZXN0LmggYi9jcnlwdG8vb2NmL3JuZHRlc3QuaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9jcnlwdG8vb2NmL3Vpby5oIGIvY3J5cHRvL29jZi91aW8uaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9NYWtlZmlsZQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpX3BsYXRmb3JtLmMgYi9kcml2ZXJzL2F0YS9haGNpX3BsYXRmb3JtLmMKaW5kZXggYzBlZjM0Ni4uMWZhYjUxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaV9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYXRhL2FoY2lfcGxhdGZvcm0uYwpAQCAtMzAsNiArMzAsOSBAQAogc3RhdGljIHN0cnVjdCBjbGsgKnNhdGFfb29iX2NsazsgLyogQ29yZSBjbG9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgKnNhdGFfcG11X2NsazsgLyogUE1VIGFsaXZlIGNsb2NrICovCiBzdGF0aWMgc3RydWN0IGNsayAqc2F0YV9jbGs7CS8qIFNhdGEgQVhJIHJlZiBjbG9jayAqLworI2lmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPX1NBVEFfT0NDX0NMT0NLKQorc3RhdGljIHN0cnVjdCBjbGsgKnNhdGFfb2NjX2NsazsgLyogc2F0YSBPQ0MgY2xvY2sgKi8KKyNlbmRpZgogI2VuZGlmIAogCiBlbnVtIGFoY2lfdHlwZSB7CkBAIC0xNzAsNyArMTczLDIwIEBACiAJCXByX2VycigiJXM6IFNBVEFfUE1VIGNsb2NrIGVuYWJsZSBmYWlsZWQgXG4iLF9fZnVuY19fKTsKIAkJcmV0dXJuIHJjOwogCX0KLQorI2lmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPX1NBVEFfT0NDX0NMT0NLKQorCXNhdGFfb2NjX2NsayA9IGNsa19nZXQoTlVMTCwic2F0YV9vY2MiKTsKKwkvKiBFcnJvciBIYW5kbGluZyAsIGlmIG5vIHNhdGEgb2NjIGNsb2NrIHJlZmVyZW5jZTogcmV0dXJuIGVycm9yICovCisJaWYgKElTX0VSUihzYXRhX29jY19jbGspKSB7CisJCXByX2VycigiJXM6IFVuYWJsZSB0byBvYnRhaW4gc2F0YSBvY2MgY2xvY2s6ICVsZFxuIixfX2Z1bmNfXyxQVFJfRVJSKHNhdGFfb2NjX2NsaykpOworCQlyZXR1cm4gUFRSX0VSUihzYXRhX29jY19jbGspOworIAl9CisJLypFbmFibGUgdGhlIHNhdGFfb2NjIGNsb2NrcyBoZXJlICovCisgICAgICAgIHJjID0gY2xrX2VuYWJsZShzYXRhX29jY19jbGspOworCWlmIChyYyl7CisJCXByX2VycigiJXM6IHNhdGEgb2NjIGNsb2NrIGVuYWJsZSBmYWlsZWQgXG4iLF9fZnVuY19fKTsKKwkJcmV0dXJuIHJjOworCX0KKyNlbmRpZgogCS8qIFNldCB0aGUgU0FUQSBQTVUgY2xvY2sgdG8gMzAgTUhaIGFuZCBPT0IgY2xvY2sgdG8gMTI1TUhaICovCiAJY2xrX3NldF9yYXRlKHNhdGFfb29iX2NsaywxMjUwMDAwMDApOwogCWNsa19zZXRfcmF0ZShzYXRhX3BtdV9jbGssMzAwMDAwMDApOwpAQCAtMzExLDcgKzMyNywxMCBAQAogCWNsa19wdXQoc2F0YV9vb2JfY2xrKTsKIAljbGtfZGlzYWJsZShzYXRhX3BtdV9jbGspOwogCWNsa19wdXQoc2F0YV9wbXVfY2xrKTsKLQorI2lmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPX1NBVEFfT0NDX0NMT0NLKQorCWNsa19kaXNhYmxlKHNhdGFfb2NjX2Nsayk7CisJY2xrX3B1dChzYXRhX29jY19jbGspOworI2VuZGlmCiAJLypQdXR0aW5nICBTQVRBIGluIHJlc2V0IHN0YXRlIAogCSAqIFNhdGEgYXhpIGNsb2NrIGRvbWFpbiBpbiByZXNldCBzdGF0ZQogCSAqIFNlcmRlcyAxLzIgaW4gcmVzZXQgc3RhdGUsIHRoaXMgZGVwZW5kcyB1cG9uIFBDSUUxIGFuZCBTR01JSSAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jcHUuYyBiL2RyaXZlcnMvYmFzZS9jcHUuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9jMmtfZG1hLmMgYi9kcml2ZXJzL2RtYS9jMmtfZG1hLmMKaW5kZXggMDY0NTEyNi4uZGRlMDg2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvYzJrX2RtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2Mya19kbWEuYwpAQCAtMTY0LDYgKzE2NCw3IEBACiAKIAkJcGh5c19hZGRyID0gZG1hX2FjcF9tYXBfcGFnZShzZywgcGFnZSwgb2Zmc2V0LCBsZW4sIERNQV9UT19ERVZJQ0UsIHVzZV9hY3ApOwogCisJCXNnLT5pbl9iZGVzY1tzZy0+aW5wdXRfaWR4XS5zcGxpdCA9IDA7CiAJCXNnLT5pbl9iZGVzY1tzZy0+aW5wdXRfaWR4XS5waHlzX2FkZHIgPSBwaHlzX2FkZHI7CiAJCXNnLT5pbl9iZGVzY1tzZy0+aW5wdXRfaWR4XS5sZW4gPSBsZW47CiAJCXNnLT5pbnB1dF9pZHgrKzsKQEAgLTE3Niw5ICsxNzcsMTEgQEAKIAogCQlwaHlzX2FkZHIgPSBkbWFfYWNwX21hcF9wYWdlKHNnLCBwYWdlLCBvZmZzZXQsIGxlbiwgRE1BX1RPX0RFVklDRSwgdXNlX2FjcCk7CiAKKwkJc2ctPmluX2JkZXNjW3NnLT5pbnB1dF9pZHhdLnNwbGl0ID0gMTsKIAkJc2ctPmluX2JkZXNjW3NnLT5pbnB1dF9pZHhdLnBoeXNfYWRkciA9IHBoeXNfYWRkcjsKIAkJc2ctPmluX2JkZXNjW3NnLT5pbnB1dF9pZHhdLmxlbiA9IE1ETUFfU1BMSVRfQlVGX1NJWkU7CiAJCXNnLT5pbnB1dF9pZHgrKzsKKwkJc2ctPmluX2JkZXNjW3NnLT5pbnB1dF9pZHhdLnNwbGl0ID0gMDsKIAkJc2ctPmluX2JkZXNjW3NnLT5pbnB1dF9pZHhdLnBoeXNfYWRkciA9IHBoeXNfYWRkciArIE1ETUFfU1BMSVRfQlVGX1NJWkU7CiAJCXNnLT5pbl9iZGVzY1tzZy0+aW5wdXRfaWR4XS5sZW4gPSBNRE1BX1NQTElUX0JVRl9TSVpFOwogCQlzZy0+aW5wdXRfaWR4Kys7CkBAIC0yMDMsNiArMjA2LDcgQEAKIAogCQlwaHlzX2FkZHIgPSBkbWFfYWNwX21hcF9wYWdlKHNnLCBwYWdlLCBvZmZzZXQsIGxlbiwgRE1BX0ZST01fREVWSUNFLCB1c2VfYWNwKTsKIAorCQlzZy0+b3V0X2JkZXNjW3NnLT5vdXRwdXRfaWR4XS5zcGxpdCA9IDA7CiAJCXNnLT5vdXRfYmRlc2Nbc2ctPm91dHB1dF9pZHhdLnBoeXNfYWRkciA9IHBoeXNfYWRkcjsKIAkJc2ctPm91dF9iZGVzY1tzZy0+b3V0cHV0X2lkeF0ubGVuID0gbGVuOwogCQlzZy0+b3V0cHV0X2lkeCsrOwpAQCAtMjE1LDkgKzIxOSwxMSBAQAogCiAJCXBoeXNfYWRkciA9IGRtYV9hY3BfbWFwX3BhZ2Uoc2csIHBhZ2UsIG9mZnNldCwgbGVuLCBETUFfRlJPTV9ERVZJQ0UsIHVzZV9hY3ApOwogCisJCXNnLT5vdXRfYmRlc2Nbc2ctPm91dHB1dF9pZHhdLnNwbGl0ID0gMTsKIAkJc2ctPm91dF9iZGVzY1tzZy0+b3V0cHV0X2lkeF0ucGh5c19hZGRyID0gcGh5c19hZGRyOwogCQlzZy0+b3V0X2JkZXNjW3NnLT5vdXRwdXRfaWR4XS5sZW4gPSBNRE1BX1NQTElUX0JVRl9TSVpFOwogCQlzZy0+b3V0cHV0X2lkeCsrOworCQlzZy0+b3V0X2JkZXNjW3NnLT5vdXRwdXRfaWR4XS5zcGxpdCA9IDA7CiAJCXNnLT5vdXRfYmRlc2Nbc2ctPm91dHB1dF9pZHhdLnBoeXNfYWRkciA9IHBoeXNfYWRkciArIE1ETUFfU1BMSVRfQlVGX1NJWkU7CiAJCXNnLT5vdXRfYmRlc2Nbc2ctPm91dHB1dF9pZHhdLmxlbiA9IE1ETUFfU1BMSVRfQlVGX1NJWkU7CiAJCXNnLT5vdXRwdXRfaWR4Kys7CkBAIC0yODMsMTAgKzI4OSwxNSBAQAogCXJlbWFpbmluZyA9IGxlbjsKIAlpID0gMDsKIAl3aGlsZSAocmVtYWluaW5nID4gc2ctPmluX2JkZXNjW2ldLmxlbikgewotCQlpZiAoc2ctPmluX2JkZXNjW2ldLnBoeXNfYWRkciA8IENPTUNFUlRPX0FYSV9BQ1BfQkFTRSkKLQkJCWRtYV91bm1hcF9wYWdlKE5VTEwsIHNnLT5pbl9iZGVzY1tpXS5waHlzX2FkZHIsIHNnLT5pbl9iZGVzY1tpXS5sZW4sIERNQV9UT19ERVZJQ0UpOwotCi0JCXJlbWFpbmluZyAtPSBzZy0+aW5fYmRlc2NbaV0ubGVuOworCQlpZiAoc2ctPmluX2JkZXNjW2ldLnNwbGl0KSB7CisJCQlzZy0+aW5fYmRlc2NbaSsxXS5waHlzX2FkZHIgPSBzZy0+aW5fYmRlc2NbaV0ucGh5c19hZGRyOworCQkJc2ctPmluX2JkZXNjW2krMV0ubGVuICs9IHNnLT5pbl9iZGVzY1tpXS5sZW47CisJCX0KKwkJZWxzZSB7CisJCQlpZiAoc2ctPmluX2JkZXNjW2ldLnBoeXNfYWRkciA8IENPTUNFUlRPX0FYSV9BQ1BfQkFTRSkKKwkJCQlkbWFfdW5tYXBfcGFnZShOVUxMLCBzZy0+aW5fYmRlc2NbaV0ucGh5c19hZGRyLCBzZy0+aW5fYmRlc2NbaV0ubGVuLCBETUFfVE9fREVWSUNFKTsKKwkJCXJlbWFpbmluZyAtPSBzZy0+aW5fYmRlc2NbaV0ubGVuOworCQl9CiAJCWkrKzsKIAl9CiAKQEAgLTI5NiwxMCArMzA3LDE1IEBACiAJcmVtYWluaW5nID0gbGVuOwogCWkgPSAwOwogCXdoaWxlIChyZW1haW5pbmcgPiBzZy0+b3V0X2JkZXNjW2ldLmxlbikgewotCQlpZiAoc2ctPm91dF9iZGVzY1tpXS5waHlzX2FkZHIgPCBDT01DRVJUT19BWElfQUNQX0JBU0UpCi0JCQlkbWFfdW5tYXBfcGFnZShOVUxMLCBzZy0+b3V0X2JkZXNjW2ldLnBoeXNfYWRkciwgc2ctPm91dF9iZGVzY1tpXS5sZW4sIERNQV9GUk9NX0RFVklDRSk7Ci0KLQkJcmVtYWluaW5nIC09IHNnLT5vdXRfYmRlc2NbaV0ubGVuOworCQlpZiAoc2ctPm91dF9iZGVzY1tpXS5zcGxpdCkgeworCQkJc2ctPm91dF9iZGVzY1tpKzFdLnBoeXNfYWRkciA9IHNnLT5vdXRfYmRlc2NbaV0ucGh5c19hZGRyOworCQkJc2ctPm91dF9iZGVzY1tpKzFdLmxlbiArPSBzZy0+b3V0X2JkZXNjW2ldLmxlbjsKKwkJfQorCQllbHNlIHsKKwkJCWlmIChzZy0+b3V0X2JkZXNjW2ldLnBoeXNfYWRkciA8IENPTUNFUlRPX0FYSV9BQ1BfQkFTRSkKKwkJCQlkbWFfdW5tYXBfcGFnZShOVUxMLCBzZy0+b3V0X2JkZXNjW2ldLnBoeXNfYWRkciwgc2ctPm91dF9iZGVzY1tpXS5sZW4sIERNQV9GUk9NX0RFVklDRSk7CisJCQlyZW1haW5pbmcgLT0gc2ctPm91dF9iZGVzY1tpXS5sZW47CisJCX0KIAkJaSsrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnCmluZGV4IDI4M2Q4ODcuLmI2ZDdlOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL0tjb25maWcKQEAgLTk4LDcgKzk4LDcgQEAKIGNvbmZpZyBNMjVQWFhfVVNFX0ZBU1RfUkVBRAogCWJvb2wgIlVzZSBGQVNUX1JFQUQgT1BDb2RlIGFsbG93aW5nIFNQSSBDTEsgPD0gNTBNSHoiCiAJZGVwZW5kcyBvbiBNVERfTTI1UDgwCi0JZGVmYXVsdCB5CisJZGVmYXVsdCBuCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBGQVNUX1JFQUQgYWNjZXNzIHN1cHBvcnRlZCBieSBTVCBNMjVQeHguCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCmluZGV4IDlmOTk4MmYuLjA1MDZkMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvZmxhc2guaD4KIAorCiAvKiBGbGFzaCBvcGNvZGVzLiAqLwogI2RlZmluZQlPUENPREVfV1JFTgkJMHgwNgkvKiBXcml0ZSBlbmFibGUgKi8KICNkZWZpbmUJT1BDT0RFX1JEU1IJCTB4MDUJLyogUmVhZCBzdGF0dXMgcmVnaXN0ZXIgKi8KQEAgLTEwMCw2ICsxMDEsNTQgQEAKIAlyZXR1cm4gY29udGFpbmVyX29mKG10ZCwgc3RydWN0IG0yNXAsIG10ZCk7CiB9CiAKKworaW50IG0yNXA4MF93cml0ZV90aGVuX3JlYWQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKKwkJY29uc3Qgdm9pZCAqdHhidWYsIHVuc2lnbmVkIG5fdHgsCisJCXZvaWQgKnJ4YnVmLCB1bnNpZ25lZCBuX3J4KQoreworCXN0YXRpYyBERUZJTkVfTVVURVgobTI1cDgwX2xvY2spOworCWludAkJCXN0YXR1czsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UJbWVzc2FnZTsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyCXhbMl07CisJdTgJCQkqbG9jYWxfYnVmOworCXVfY2hhciByeF9kYXRhWzhdOworCWludCBsZW5fdG9fdHggPSAwOworCWludCBsZW5fdHhfdG90YWwgPSAwOworCWludCBsZW5fdHhfZG9uZSA9IDA7CisKKwkvKiBVc2UgcHJlYWxsb2NhdGVkIERNQS1zYWZlIGJ1ZmZlci4gIFdlIGNhbid0IGF2b2lkIGNvcHlpbmcgaGVyZSwKKwkgKiAoYXMgYSBwdXJlIGNvbnZlbmllbmNlIHRoaW5nKSwgYnV0IHdlIGNhbiBrZWVwIGhlYXAgY29zdHMKKwkgKiBvdXQgb2YgdGhlIGhvdCBwYXRoIC4uLgorCSAqLworCWlmICgobl90eCArIG5fcngpID4gOCkKKwl7CisJCXByaW50ayhLRVJOX0VSUiAiIyMjIyMgJXM6IHNpemUgZ3JlYXRlciB0aGFuIDggIyMjIyMjIyMjXG4iLF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3BpX21lc3NhZ2VfaW5pdCgmbWVzc2FnZSk7CisJbWVtc2V0KHgsIDAsIHNpemVvZiB4KTsKKworCWxlbl90b190eCA9IG5fdHggKyBuX3J4OworCisJeFswXS5sZW4gPSBsZW5fdG9fdHg7CisJeFswXS50eF9idWYgPSB0eGJ1ZjsKKwl4WzBdLnJ4X2J1ZiA9ICZyeF9kYXRhWzBdOworCisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnhbMF0sICZtZXNzYWdlKTsKKworCW11dGV4X2xvY2soJm0yNXA4MF9sb2NrKTsKKworCS8qIGRvIHRoZSBpL28gKi8KKwlzdGF0dXMgPSBzcGlfc3luYyhzcGksICZtZXNzYWdlKTsKKwlpZiAoc3RhdHVzID09IDApCisJCW1lbWNweShyeGJ1ZiwgcnhfZGF0YSArIG5fdHgsIG5fcngpOworCisJbXV0ZXhfdW5sb2NrKCZtMjVwODBfbG9jayk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKQEAgLTExNyw3ICsxNjYsNyBAQAogCXU4IGNvZGUgPSBPUENPREVfUkRTUjsKIAl1OCB2YWw7CiAKLQlyZXR2YWwgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKGZsYXNoLT5zcGksICZjb2RlLCAxLCAmdmFsLCAxKTsKKwlyZXR2YWwgPSBtMjVwODBfd3JpdGVfdGhlbl9yZWFkKGZsYXNoLT5zcGksICZjb2RlLCAxLCAmdmFsLCAxKTsKIAogCWlmIChyZXR2YWwgPCAwKSB7CiAJCWRldl9lcnIoJmZsYXNoLT5zcGktPmRldiwgImVycm9yICVkIHJlYWRpbmcgU1JcbiIsCkBAIC0xNDgsNyArMTk3LDcgQEAKIHsKIAl1OAljb2RlID0gT1BDT0RFX1dSRU47CiAKLQlyZXR1cm4gc3BpX3dyaXRlX3RoZW5fcmVhZChmbGFzaC0+c3BpLCAmY29kZSwgMSwgTlVMTCwgMCk7CisJcmV0dXJuIG0yNXA4MF93cml0ZV90aGVuX3JlYWQoZmxhc2gtPnNwaSwgJmNvZGUsIDEsIE5VTEwsIDApOwogfQogCiAvKgpAQCAtMTU4LDcgKzIwNyw3IEBACiB7CiAJdTgJY29kZSA9IE9QQ09ERV9XUkRJOwogCi0JcmV0dXJuIHNwaV93cml0ZV90aGVuX3JlYWQoZmxhc2gtPnNwaSwgJmNvZGUsIDEsIE5VTEwsIDApOworCXJldHVybiBtMjVwODBfd3JpdGVfdGhlbl9yZWFkKGZsYXNoLT5zcGksICZjb2RlLCAxLCBOVUxMLCAwKTsKIH0KIAogLyoKQEAgLTI0OSw4ICsyOTgsOCBAQAogICovCiBzdGF0aWMgaW50IGVyYXNlX3NlY3RvcihzdHJ1Y3QgbTI1cCAqZmxhc2gsIHUzMiBvZmZzZXQpCiB7Ci0JcHJfZGVidWcoIiVzOiAlcyAlZEtpQiBhdCAweCUwOHhcbiIsIGRldl9uYW1lKCZmbGFzaC0+c3BpLT5kZXYpLAotCQkJX19mdW5jX18sIGZsYXNoLT5tdGQuZXJhc2VzaXplIC8gMTAyNCwgb2Zmc2V0KTsKKwlwcl9kZWJ1ZygiJXM6ICVzICVkS2lCIGF0IDB4JTA4eCBjbWRzeiAlZFxuIiwgZGV2X25hbWUoJmZsYXNoLT5zcGktPmRldiksCisJCQlfX2Z1bmNfXywgZmxhc2gtPm10ZC5lcmFzZXNpemUgLyAxMDI0LCBvZmZzZXQsIG0yNXBfY21kc3ooZmxhc2gpKTsKIAogCS8qIFdhaXQgdW50aWwgZmluaXNoZWQgcHJldmlvdXMgd3JpdGUgY29tbWFuZC4gKi8KIAlpZiAod2FpdF90aWxsX3JlYWR5KGZsYXNoKSkKQEAgLTMzOSw2ICszODgsNyBAQAogICogUmVhZCBhbiBhZGRyZXNzIHJhbmdlIGZyb20gdGhlIGZsYXNoIGNoaXAuICBUaGUgYWRkcmVzcyByYW5nZQogICogbWF5IGJlIGFueSBzaXplIHByb3ZpZGVkIGl0IGlzIHdpdGhpbiB0aGUgcGh5c2ljYWwgYm91bmRhcmllcy4KICAqLworI2lmIDAKIHN0YXRpYyBpbnQgbTI1cDgwX3JlYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAogCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKIHsKQEAgLTM3MSw2ICs0MjEsOCBAQAogCXRbMV0ubGVuID0gbGVuOwogCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzFdLCAmbSk7CiAKKwlwcl9kZWJ1ZygiJXM6IHRbMF0ubGVuIDB4JXggdFsxXS5sZW4gMHgleFxuIixfX2Z1bmNfXywgdFswXS5sZW4sIHRbMV0ubGVuKTsKKwogCS8qIEJ5dGUgY291bnQgc3RhcnRzIGF0IHplcm8uICovCiAJKnJldGxlbiA9IDA7CiAKQEAgLTQwMCwxNCArNDUyLDk1IEBACiAKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZgorCitzdGF0aWMgaW50IG0yNXA4MF9yZWFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKKwlzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCit7CisJc3RydWN0IG0yNXAgKmZsYXNoID0gbXRkX3RvX20yNXAobXRkKTsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHRbMl07CisJc3RydWN0IHNwaV9tZXNzYWdlIG07CisJaW50IGxlbl90b190eCA9IDA7CisJaW50IGxlbl90eF90b3RhbCA9IDA7CisJaW50IGxlbl90eF9kb25lID0gMDsKKwlpbnQgaTsKKwl1X2NoYXIgcnhfZGF0YVs4XTsKKwlpbnQgY21kX3NpemUgPSBtMjVwX2NtZHN6KGZsYXNoKTsKKwlpbnQgbWF4X2RhdGFfbGVuID0gOCAtIG0yNXBfY21kc3ooZmxhc2gpOworCisJcHJfZGVidWcoIiVzOiAlcyBmcm9tIDB4JTA4eCxsZW4gJXpkXG4iLCBkZXZfbmFtZSgmZmxhc2gtPnNwaS0+ZGV2KSwKKwkJCV9fZnVuY19fLCAodTMyKWZyb20sIGxlbik7CisKKwkvKiBzYW5pdHkgY2hlY2tzICovCisJaWYgKCFsZW4pCisJCXJldHVybiAwOworCisJaWYgKGZyb20gKyBsZW4gPiBmbGFzaC0+bXRkLnNpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJd2hpbGUobGVuX3R4X2RvbmUgPCBsZW4pCisJeworCisJCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCQltZW1zZXQodCwgMCwgKHNpemVvZiB0KSk7CisKKwkJaWYoKGxlbiAtIGxlbl90eF9kb25lKSA8IG1heF9kYXRhX2xlbikKKwkJCWxlbl90b190eCA9IGxlbiAtIGxlbl90eF9kb25lOworCQllbHNlCisJCQlsZW5fdG9fdHggPSBtYXhfZGF0YV9sZW47CisJCS8qIE5PVEU6CisJCSAqIE9QQ09ERV9GQVNUX1JFQUQgKGlmIGF2YWlsYWJsZSkgaXMgZmFzdGVyLgorCQkgKiBTaG91bGQgYWRkIDEgYnl0ZSBEVU1NWV9CWVRFLgorCQkgKi8KKwkJdFswXS50eF9idWYgPSBmbGFzaC0+Y29tbWFuZDsKKwkJdFswXS5yeF9idWYgPSAmcnhfZGF0YVswXSA7CisJCXRbMF0ubGVuID0gY21kX3NpemUgKyBsZW5fdG9fdHg7CisJCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzBdLCAmbSk7CisKKworCQkvKiBCeXRlIGNvdW50IHN0YXJ0cyBhdCB6ZXJvLiAqLworCQkqcmV0bGVuID0gMDsKKworCQltdXRleF9sb2NrKCZmbGFzaC0+bG9jayk7CisKKwkJLyogV2FpdCB0aWxsIHByZXZpb3VzIHdyaXRlL2VyYXNlIGlzIGRvbmUuICovCisJCWlmICh3YWl0X3RpbGxfcmVhZHkoZmxhc2gpKSB7CisJCQkvKiBSRVZJU0lUIHN0YXR1cyByZXR1cm4/PyAqLworCQkJbXV0ZXhfdW5sb2NrKCZmbGFzaC0+bG9jayk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCS8qIEZJWE1FIHN3aXRjaCB0byBPUENPREVfRkFTVF9SRUFELiAgSXQncyByZXF1aXJlZCBmb3IgaGlnaGVyCisJCSAqIGNsb2NrczsgYW5kIGF0IHRoaXMgd3JpdGluZywgZXZlcnkgY2hpcCB0aGlzIGRyaXZlciBoYW5kbGVzCisJCSAqIHN1cHBvcnRzIHRoYXQgb3Bjb2RlLgorCQkgKi8KKworCQkvKiBTZXQgdXAgdGhlIHdyaXRlIGRhdGEgYnVmZmVyLiAqLworCQlmbGFzaC0+Y29tbWFuZFswXSA9IE9QQ09ERV9SRUFEOworCQltMjVwX2FkZHIyY21kKGZsYXNoLCBmcm9tICsgbGVuX3R4X2RvbmUsIGZsYXNoLT5jb21tYW5kKTsKKworCQlzcGlfc3luYyhmbGFzaC0+c3BpLCAmbSk7CisKKwkJbWVtY3B5KGJ1ZiArIGxlbl90eF9kb25lLCAmcnhfZGF0YVtjbWRfc2l6ZV0sIGxlbl90b190eCk7CisKKwkJbGVuX3R4X2RvbmUgKz0gbGVuX3RvX3R4Oy8vdmFsaWQgZGF0YSB3aGljaCB3aWxsIGJlIHJlYWQgb3V0IG9mIDggYnl0ZXMKKworCQltdXRleF91bmxvY2soJmZsYXNoLT5sb2NrKTsKKwl9CisKKwkqcmV0bGVuID0gbGVuX3R4X2RvbmU7CisKKwlyZXR1cm4gMDsKK30KIAogLyoKICAqIFdyaXRlIGFuIGFkZHJlc3MgcmFuZ2UgdG8gdGhlIGZsYXNoIGNoaXAuICBEYXRhIG11c3QgYmUgd3JpdHRlbiBpbgogICogRkxBU0hfUEFHRVNJWkUgY2h1bmtzLiAgVGhlIGFkZHJlc3MgcmFuZ2UgbWF5IGJlIGFueSBzaXplIHByb3ZpZGVkCiAgKiBpdCBpcyB3aXRoaW4gdGhlIHBoeXNpY2FsIGJvdW5kYXJpZXMuCiAgKi8KKyNpZiAwCiBzdGF0aWMgaW50IG0yNXA4MF93cml0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAotCXNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1ZikKKwkJc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQogewogCXN0cnVjdCBtMjVwICpmbGFzaCA9IG10ZF90b19tMjVwKG10ZCk7CiAJdTMyIHBhZ2Vfb2Zmc2V0LCBwYWdlX3NpemU7CkBAIC00OTYsNiArNjI5LDc4IEBACiAKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZgorCitzdGF0aWMgaW50IG0yNXA4MF93cml0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAorCQlzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpCit7CisJc3RydWN0IG0yNXAgKmZsYXNoID0gbXRkX3RvX20yNXAobXRkKTsKKwl1MzIgcGFnZV9vZmZzZXQsIHBhZ2Vfc2l6ZTsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHRbMl07CisJc3RydWN0IHNwaV9tZXNzYWdlIG07CisJdV9jaGFyIHR4X2J1Zls4XTsKKwlpbnQgbGVuX3RvX3R4ID0gMDsKKwlpbnQgbGVuX3R4X3RvdGFsID0gMDsKKwlpbnQgbGVuX3R4X2RvbmUgPSAwOworCWludCBjbWRfc2l6ZSA9IG0yNXBfY21kc3ooZmxhc2gpOworCWludCBtYXhfZGF0YV9sZW4gPSA4IC0gbTI1cF9jbWRzeihmbGFzaCk7CisKKwlwcl9kZWJ1ZygiJXM6ICVzIHRvIDB4JTA4eCwgbGVuICV6ZFxuIiwgZGV2X25hbWUoJmZsYXNoLT5zcGktPmRldiksCisJCQlfX2Z1bmNfXywgKHUzMil0bywgbGVuKTsKKworCSpyZXRsZW4gPSAwOworCisJLyogc2FuaXR5IGNoZWNrcyAqLworCWlmICghbGVuKQorCQlyZXR1cm4oMCk7CisKKwlpZiAodG8gKyBsZW4gPiBmbGFzaC0+bXRkLnNpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZmxhc2gtPmxvY2spOworCisJd2hpbGUobGVuX3R4X2RvbmUgPCBsZW4pCisJeworCisJCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCQltZW1zZXQodCwgMCwgKHNpemVvZiB0KSk7CisKKwkJaWYoKGxlbiAtIGxlbl90eF9kb25lKSA8IG1heF9kYXRhX2xlbikKKwkJCWxlbl90b190eCA9IGxlbiAtIGxlbl90eF9kb25lOworCQllbHNlCisJCQlsZW5fdG9fdHggPSBtYXhfZGF0YV9sZW47CisKKwkJLyogU2V0IHVwIHRoZSBvcGNvZGUgaW4gdGhlIHdyaXRlIGJ1ZmZlci4gKi8KKwkJZmxhc2gtPmNvbW1hbmRbMF0gPSBPUENPREVfUFA7CisJCW0yNXBfYWRkcjJjbWQoZmxhc2gsIHRvICsgbGVuX3R4X2RvbmUsIGZsYXNoLT5jb21tYW5kKTsKKwkJbWVtY3B5KCZ0eF9idWZbMF0sIGZsYXNoLT5jb21tYW5kLCBjbWRfc2l6ZSk7CisJCW1lbWNweSgmdHhfYnVmW2NtZF9zaXplXSwgYnVmICsgbGVuX3R4X2RvbmUsIGxlbl90b190eCk7CisKKwkJdFswXS50eF9idWYgPSAmdHhfYnVmWzBdOworCQl0WzBdLmxlbiA9IGNtZF9zaXplICsgbGVuX3RvX3R4OworCisJCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzBdLCAmbSk7CisKKwkJLyogV2FpdCB1bnRpbCBmaW5pc2hlZCBwcmV2aW91cyB3cml0ZSBjb21tYW5kLiAqLworCQlpZiAod2FpdF90aWxsX3JlYWR5KGZsYXNoKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZmbGFzaC0+bG9jayk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCXdyaXRlX2VuYWJsZShmbGFzaCk7CisKKwkJc3BpX3N5bmMoZmxhc2gtPnNwaSwgJm0pOworCisJCWxlbl90eF9kb25lICs9IGxlbl90b190eDsvL3ZhbGlkIGRhdGEgd2hpY2ggc2VudCBvdXQgb2YgOCBieXRlcworCX0KKworCSpyZXRsZW4gPSBsZW5fdHhfZG9uZTsKKworCW11dGV4X3VubG9jaygmZmxhc2gtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKIAogc3RhdGljIGludCBzc3Rfd3JpdGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKIAkJc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQpAQCAtNzgzLDcgKzk4OCw3IEBACiAJICogc3RyaW5nIGZvciBhZnRlciB2ZW5kb3Itc3BlY2lmaWMgZGF0YSwgYWZ0ZXIgdGhlIHRocmVlIGJ5dGVzCiAJICogd2UgdXNlIGhlcmUuICBTdXBwb3J0aW5nIHNvbWUgY2hpcHMgbWlnaHQgcmVxdWlyZSB1c2luZyBpdC4KIAkgKi8KLQl0bXAgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgJmNvZGUsIDEsIGlkLCA1KTsKKwl0bXAgPSBtMjVwODBfd3JpdGVfdGhlbl9yZWFkKHNwaSwgJmNvZGUsIDEsIGlkLCA1KTsKIAlpZiAodG1wIDwgMCkgewogCQlwcl9kZWJ1ZygiJXM6IGVycm9yICVkIHJlYWRpbmcgSkVERUMgSURcbiIsCiAJCQkJZGV2X25hbWUoJnNwaS0+ZGV2KSwgdG1wKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvY29tY2VydG8tbm9yLmMgYi9kcml2ZXJzL210ZC9tYXBzL2NvbWNlcnRvLW5vci5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZ2VuZXJpYy5jIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMKaW5kZXggMTQxNjRjNC4uZjAzNTI4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwL3BwcF9nZW5lcmljLmMKQEAgLTI4NzQsNiArMjg3NCw4IEBACiAKIAl3cml0ZV91bmxvY2tfYmgoJnBjaC0+dXBsKTsKIAorLypXZSBuZWVkIHRvIHJldmlzaXQgYmVsb3cgY2hhbmdlcyB3aGVuIFBQUG9FIGF1dG9tb2RlIGlzIGludHJvZHVjZWQgdG8gQzJLKi8KKyNpZiAwCiAjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fRlApCiAJaWYgKChwcHAtPmRldikgJiYgKCFwcHAtPmNsb3NpbmcpKSB7CiAJCXJ0bmxfbG9jaygpOwpAQCAtMjg4MSw2ICsyODgzLDcgQEAKIAkJcnRubF91bmxvY2soKTsKIAl9CiAjZW5kaWYKKyNlbmRpZgogCiAJcmV0ID0gMDsKICBvdXQ6CkBAIC0yOTA5LDYgKzI5MTIsOCBAQAogCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcHAtPmZpbGUucndhaXQpOwogCQlwcHBfdW5sb2NrKHBwcCk7CiAKKy8qV2UgbmVlZCB0byByZXZpc2l0IGJlbG93IGNoYW5nZXMgd2hlbiBQUFBvRSBhdXRvbW9kZSBpcyBpbnRyb2R1Y2VkIHRvIEMySyovCisjaWYgMAogI2lmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPX0ZQKQogCQlpZiAoKHBwcC0+ZGV2KSAmJiAoIXBwcC0+Y2xvc2luZykpIHsKIAkJCXJ0bmxfbG9jaygpOwpAQCAtMjkxNiw2ICsyOTIxLDcgQEAKIAkJCXJ0bmxfdW5sb2NrKCk7CiAJCX0KICNlbmRpZgorI2VuZGlmCiAKIAkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnBwcC0+ZmlsZS5yZWZjbnQpKQogCQkJcHBwX2Rlc3Ryb3lfaW50ZXJmYWNlKHBwcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKaW5kZXggYjg3M2I1ZC4uMjg2NDc4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwpAQCAtNDksNiArNDksMTQgQEAKIAogI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJIjIyLUF1Zy0yMDA1IgogCisjaWZkZWYgQ09ORklHX0FSQ0hfTTg2WFhYCisvKiAKKyAqIFdlIGFsbGxvY2F0ZSBleHRyYSA2NCBCeXRlcyB0byByZXNlcnZlIGhlYWRyb29tIGluIHRoZSBza19idWZmIAorICogVG8gYmUgdXNlZCBieSBGYXN0IFBhdGggKEhlYWQgUm9vbSBtdXN0IGJlIDQgQnl0ZSBhbGlnbmVkIAorICogYmVjYXVzZSBVU0IgMi4wIGNvbnRyb2xsZXIgZG9lc24ndCBzdXBwb3J0IDIgYnl0ZSBhbGlnbm1lbnQKKyAqLworI2RlZmluZSBDMktfVVNCTkVUX1NLQl9IRUFEUk9PTV9GQVNUX1BBVEggNjQKKyNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0zNDQsMTMgKzM1MiwyNiBAQAogCXVuc2lnbmVkIGxvbmcJCWxvY2tmbGFnczsKIAlzaXplX3QJCQlzaXplID0gZGV2LT5yeF91cmJfc2l6ZTsKIAorI2lmZGVmIENPTkZJR19BUkNIX004NlhYWAorICAgIC8qIAorICAgICAqIFdlIGFsbGxvY2F0ZSBleHRyYSA2NCBCeXRlcyB0byByZXNlcnZlIGhlYWRyb29tIGluIHRoZSBza19idWZmIAorICAgICAqIFRvIGJlIHVzZWQgYnkgRmFzdCBQYXRoIChIZWFkIFJvb20gbXVzdCBiZSA0IEJ5dGUgYWxpZ25lZCAKKyAgICAgKiBiZWNhdXNlIFVTQiAyLjAgY29udHJvbGxlciBkb2Vzbid0IHN1cHBvcnQgMiBieXRlIGFsaWdubWVudAorICAgICAqLworCWlmICgoc2tiID0gYWxsb2Nfc2tiIChzaXplICsgQzJLX1VTQk5FVF9TS0JfSEVBRFJPT01fRkFTVF9QQVRILCBmbGFncykpID09IE5VTEwpIHsKKyNlbHNlCiAJaWYgKChza2IgPSBhbGxvY19za2IgKHNpemUgKyBORVRfSVBfQUxJR04sIGZsYWdzKSkgPT0gTlVMTCkgeworI2VuZGlmICAgICAgICAKIAkJbmV0aWZfZGJnKGRldiwgcnhfZXJyLCBkZXYtPm5ldCwgIm5vIHJ4IHNrYlxuIik7CiAJCXVzYm5ldF9kZWZlcl9rZXZlbnQgKGRldiwgRVZFTlRfUlhfTUVNT1JZKTsKIAkJdXNiX2ZyZWVfdXJiICh1cmIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisjaWZkZWYgQ09ORklHX0FSQ0hfTTg2WFhYCisJc2tiX3Jlc2VydmUgKHNrYiwgQzJLX1VTQk5FVF9TS0JfSEVBRFJPT01fRkFTVF9QQVRIKTsKKyNlbHNlCiAJc2tiX3Jlc2VydmUgKHNrYiwgTkVUX0lQX0FMSUdOKTsKKyNlbmRpZiAgICAgICAgCiAKIAllbnRyeSA9IChzdHJ1Y3Qgc2tiX2RhdGEgKikgc2tiLT5jYjsKIAllbnRyeS0+dXJiID0gdXJiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvS2NvbmZpZyBiL2RyaXZlcnMvc3BpL0tjb25maWcKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvTWFrZWZpbGUgYi9kcml2ZXJzL3NwaS9NYWtlZmlsZQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDhlNTVmNzcuLjQxYzY1MzAKLS0tIGEvZHJpdmVycy9zcGkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zcGkvTWFrZWZpbGUKQEAgLTMzLDExICszMywxMiBAQAogaWZlcSAoJChDT05GSUdfU1BJX01TUERfTE9XX1NQRUVEKSx5KQogICAgIFNQSV9NU1BEPXkKIGVuZGlmCi1vYmotJChTUElfTVNQRCkJCQkJKz0gc3BpLWMyMDAwLWRtYS5vCi1vYmotJChTUElfTVNQRCkJCQkJKz0gc3BpLWMyMDAwLm8KKyNvYmotJChTUElfTVNQRCkJCQkJKz0gc3BpLWMyMDAwLWRtYS5vCisjb2JqLSQoU1BJX01TUEQpCQkJCSs9IHNwaS1jMjAwMC5vCiAKIG9iai0kKENPTkZJR19TUElfREFWSU5DSSkJCSs9IHNwaS1kYXZpbmNpLm8KLW9iai0kKENPTkZJR19TUElfREVTSUdOV0FSRSkJCSs9IHNwaS1kdy5vCitvYmotJChDT05GSUdfU1BJX0RFU0lHTldBUkUpCQkrPSBkZXNpZ253YXJlX3NwaS5vCisjb2JqLSQoQ09ORklHX1NQSV9ERVNJR05XQVJFKQkJKz0gc3BpLWR3Lm8KIG9iai0kKENPTkZJR19TUElfRFdfTU1JTykJCSs9IHNwaS1kdy1tbWlvLm8KIG9iai0kKENPTkZJR19TUElfRFdfUENJKQkJKz0gc3BpLWR3LW1pZHBjaS5vCiBzcGktZHctbWlkcGNpLW9ianMJCQk6PSBzcGktZHctcGNpLm8gc3BpLWR3LW1pZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9kZXNpZ253YXJlX3NwaS5jIGIvZHJpdmVycy9zcGkvZGVzaWdud2FyZV9zcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjY2YzFmZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3BpL2Rlc2lnbndhcmVfc3BpLmMKQEAgLTAsMCArMSw3OTQgQEAKKy8qCisgKiBkZXNpZ253YXJlX3NwaS5jCisgKgorICogU3lub3BzeXMgRGVzaWduV2FyZSBBTUJBIFNQSSBjb250cm9sbGVyIGRyaXZlciAobWFzdGVyIG1vZGUgb25seSkKKyAqCisgKiBBdXRob3I6IEJhcnVjaCBTaWFjaCwgVGsgT3BlbiBTeXN0ZW1zCisgKgliYXJ1Y2gtTnN3VHU5UzFXM1A2Z2JQdkVnbXcyd0AuLi5vcmcKKyAqCisgKiBCYXNlIG9uIHRoZSBYaWxpbnggU1BJIGNvbnRyb2xsZXIgZHJpdmVyIGJ5IE1vbnRhVmlzdGEKKyAqCisgKiAyMDAyLTIwMDcgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQKKyAqICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICoKKyAqIDIwMDgsIDIwMDkgKGMpIFByb3ZpZ2VudCBMdGQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvZGVzaWdud2FyZS5oPgorCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaC9yZXNldC5oPgorCisjZGVmaW5lIERFU0lHTldBUkVfU1BJX05BTUUgImNvbWNlcnRvX3NwaSIKKworLyogUmVnaXN0ZXIgZGVmaW5pdGlvbnMgYXMgcGVyICJEZXNpZ25XYXJlIERXX2FwYl9zc2kgRGF0YWJvb2siLCBDYXB0dXJlIDYuICovCisKKyNkZWZpbmUgRFdTUElfQ1RSTFIwICAgICAgICAweDAwCisjZGVmaW5lIERXU1BJX0NUUkxSMSAgICAgICAgMHgwNAorI2RlZmluZSBEV1NQSV9TU0lFTlIgICAgICAgIDB4MDgKKyNkZWZpbmUgRFdTUElfTVdDUiAgICAgICAgICAweDBDCisjZGVmaW5lIERXU1BJX1NFUiAgICAgICAgICAgMHgxMAorI2RlZmluZSBEV1NQSV9CQVVEUiAgICAgICAgIDB4MTQKKyNkZWZpbmUgRFdTUElfVFhGVExSICAgICAgICAweDE4CisjZGVmaW5lIERXU1BJX1JYRlRMUiAgICAgICAgMHgxQworI2RlZmluZSBEV1NQSV9UWEZMUiAgICAgICAgIDB4MjAKKyNkZWZpbmUgRFdTUElfUlhGTFIgICAgICAgICAweDI0CisjZGVmaW5lIERXU1BJX1NSICAgICAgICAgICAgMHgyOAorI2RlZmluZSBEV1NQSV9JTVIgICAgICAgICAgIDB4MkMKKyNkZWZpbmUgRFdTUElfSVNSICAgICAgICAgICAweDMwCisjZGVmaW5lIERXU1BJX1JJU1IgICAgICAgICAgMHgzNAorI2RlZmluZSBEV1NQSV9UWE9JQ1IgICAgICAgIDB4MzgKKyNkZWZpbmUgRFdTUElfUlhPSUNSICAgICAgICAweDNDCisjZGVmaW5lIERXU1BJX1JYVUlDUiAgICAgICAgMHg0MAorI2RlZmluZSBEV1NQSV9JQ1IgICAgICAgICAgIDB4NDQKKyNkZWZpbmUgRFdTUElfRE1BQ1IgICAgICAgICAweDRDCisjZGVmaW5lIERXU1BJX0RNQVRETFIgICAgICAgMHg1MAorI2RlZmluZSBEV1NQSV9ETUFSRExSICAgICAgIDB4NTQKKyNkZWZpbmUgRFdTUElfSURSICAgICAgICAgICAweDU4CisjZGVmaW5lIERXU1BJX1NTSV9DT01QX1ZFUlNJT04gMHg1QworI2RlZmluZSBEV1NQSV9EUiAgICAgICAgICAgIDB4NjAKKworI2RlZmluZSBEV1NQSV9DVFJMUjBfREZTX01BU0sJMHgwMDBmCisjZGVmaW5lIERXU1BJX0NUUkxSMF9TQ1BPTAkweDAwODAKKyNkZWZpbmUgRFdTUElfQ1RSTFIwX1NDUEgJMHgwMDQwCisjZGVmaW5lIERXU1BJX0NUUkxSMF9UTU9EX01BU0sJMHgwMzAwCisKKyNkZWZpbmUgRFdTUElfU1JfQlVTWV9NQVNLCTB4MDEKKyNkZWZpbmUgRFdTUElfU1JfVEZORl9NQVNLCTB4MDIKKyNkZWZpbmUgRFdTUElfU1JfVEZFX01BU0sJMHgwNAorI2RlZmluZSBEV1NQSV9TUl9SRk5FX01BU0sJMHgwOAorI2RlZmluZSBEV1NQSV9TUl9SRkZfTUFTSwkweDEwCisKKyNkZWZpbmUgRFdTUElfSVNSX1RYRUlTX01BU0sJMHgwMQorI2RlZmluZSBEV1NQSV9JU1JfUlhGSVNfTUFTSwkweDEwCisKKyNkZWZpbmUgRFdTUElfSU1SX1RYRUlNX01BU0sJMHgwMQorI2RlZmluZSBEV1NQSV9JTVJfUlhGSU1fTUFTSwkweDEwCisKK3N0cnVjdCBkZXNpZ253YXJlX3NwaSB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7CisJc3RydWN0IHdvcmtfc3RydWN0ICAgd29yazsKKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBwdW1wX3RyYW5zZmVyczsKKworCXN0cnVjdCBtdXRleCAgICAgICAgIGxvY2s7IC8qIGxvY2sgdGhpcyBzdHJ1Y3QgZXhjZXB0IGZyb20gcXVldWUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICAgICBxdWV1ZTsgLyogc3BpX21lc3NhZ2UgcXVldWUgKi8KKwlzcGlubG9ja190ICAgICAgICAgICBxbG9jazsgLyogbG9jayB0aGUgcXVldWUgKi8KKworCXZvaWQgX19pb21lbQkqcmVnczsJLyogdmlydC4gYWRkcmVzcyBvZiB0aGUgY29udHJvbCByZWdpc3RlcnMgKi8KKwl1bnNpZ25lZCBpbnQgc3NpX2NsazsJLyogY2xvY2sgaW4gSHogKi8KKwl1bnNpZ25lZCBpbnQgdHhfZmlmb19kZXB0aDsgLyogYnl0ZXMgaW4gVFggRklGTyAqLworCXVuc2lnbmVkIGludCByeF9maWZvX2RlcHRoOyAvKiBieXRlcyBpbiBSWCBGSUZPICovCisKKwl1MzIJCWlycTsKKworCXU4IGJpdHNfcGVyX3dvcmQ7CS8qIGN1cnJlbnQgZGF0YSBmcmFtZSBzaXplICovCisJc3RydWN0IHNwaV90cmFuc2ZlciAqdHhfdDsgLyogY3VycmVudCB0eCB0cmFuc2ZlciAqLworCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnJ4X3Q7IC8qIGN1cnJlbnQgcnggdHJhbnNmZXIgKi8KKwljb25zdCB1OCAqdHhfcHRyOyAgICAgICAvKiBjdXJyZW50IHR4IGJ1ZmZlciAqLworCXU4ICpyeF9wdHI7ICAgICAgICAgICAgIC8qIGN1cnJlbnQgcnggYnVmZmVyICovCisJaW50IHJlbWFpbmluZ190eF9ieXRlczsJLyogYnl0ZXMgbGVmdCB0byB0eCBpbiB0aGUgY3VycmVudCB0cmFuc2ZlciAqLworCWludCByZW1haW5pbmdfcnhfYnl0ZXM7CS8qIGJ5dGVzIGxlZnQgdG8gcnggaW4gdGhlIGN1cnJlbnQgdHJhbnNmZXIgKi8KKwlpbnQgc3RhdHVzOyAgICAgICAgICAgICAvKiBzdGF0dXMgb2YgdGhlIGN1cnJlbnQgc3BpX3RyYW5zZmVyICovCisKKwlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOyAvKiBzaWduYWwgdGhlIGVuZCBvZiB0eCBmb3IgY3VycmVudCBzZXF1ZW5jZSAqLworCisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsgLyogY3VycmVudCBzcGkgc2xhdmUgZGV2aWNlICovCisJc3RydWN0IGNsawkqY2xrX3NwaTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0cmFuc2ZlcnNfbGlzdDsgLyogaGVhZCBvZiB0aGUgY3VycmVudCBzZXF1ZW5jZSAqLworCXVuc2lnbmVkIGludCB0eF9jb3VudCwgcnhfY291bnQ7IC8qIGJ5dGVzIGluIHRoZSBjdXJyZW50IHNlcXVlbmNlICovCit9OworCitzdGF0aWMgdm9pZCBkd3NwaV9pbml0X2h3KHN0cnVjdCBkZXNpZ253YXJlX3NwaSAqZHdzcGkpCit7CisJdTE2IGN0cmxyMDsKKworCS8qIERpc2FibGUgdGhlIFNQSSBtYXN0ZXIgKi8KKwl3cml0ZWwoMCwgZHdzcGktPnJlZ3MgKyBEV1NQSV9TU0lFTlIpOworCS8qIERpc2FibGUgYWxsIHRoZSBpbnRlcnJ1cHRzIGp1c3QgaW4gY2FzZSAqLworCXdyaXRlbCgwLCBkd3NwaS0+cmVncyArIERXU1BJX0lNUik7CisJLyogU2V0IFRYIGVtcHR5IElSUSB0aHJlc2hvbGQgKi8KKwl3cml0ZXcoZHdzcGktPnR4X2ZpZm9fZGVwdGggLyAyLCBkd3NwaS0+cmVncyArIERXU1BJX1RYRlRMUik7CisKKyAgICAvKiBTZXQgdHJhbnNtaXQgJiByZWNlaXZlIG1vZGUgKi8KKwljdHJscjAgPSByZWFkdyhkd3NwaS0+cmVncyArIERXU1BJX0NUUkxSMCk7CisgICAgY3RybHIwICY9IH5EV1NQSV9DVFJMUjBfVE1PRF9NQVNLOworCXdyaXRldyhjdHJscjAsIGR3c3BpLT5yZWdzICsgRFdTUElfQ1RSTFIwKTsKK30KKworc3RhdGljIHZvaWQgZHdzcGlfYmF1ZGNmZyhzdHJ1Y3QgZGVzaWdud2FyZV9zcGkgKmR3c3BpLCB1MzIgc3BlZWRfaHopCit7CisJdTE2IGRpdiA9IChzcGVlZF9oeikgPyBkd3NwaS0+c3NpX2Nsay9zcGVlZF9oeiA6IDB4ZmZmZjsKKworCXdyaXRldyhkaXYsIGR3c3BpLT5yZWdzICsgRFdTUElfQkFVRFIpOworfQorCitzdGF0aWMgdm9pZCBkd3NwaV9lbmFibGUoc3RydWN0IGRlc2lnbndhcmVfc3BpICpkd3NwaSwgaW50IG9uKQoreworCXdyaXRlbChvbiA/IDEgOiAwLCBkd3NwaS0+cmVncyArIERXU1BJX1NTSUVOUik7Cit9CisKK3N0YXRpYyB2b2lkIGRlc2lnbndhcmVfc3BpX2NoaXBzZWxlY3Qoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgaW50IG9uKQoreworCXN0cnVjdCBkZXNpZ253YXJlX3NwaSAqZHdzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKyNpZiAwCisJbG9uZyBncGlvID0gKGxvbmcpIHNwaS0+Y29udHJvbGxlcl9kYXRhOworCXVuc2lnbmVkIGFjdGl2ZSA9IHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIOworI2VuZGlmCisJLyoKKwkgKiBOb3RlLCB0aGUgU1BJIGNvbnRyb2xsZXIgbXVzdCBoYXZlIGJlZW4gZW5hYmxlZCBhdCB0aGlzIHBvaW50LCBpLmUuCisJICogU1NJRU5SID09IDEKKwkgKi8KKworCWlmIChvbikgeworCSNpZiAwCisKKwkJLyogVHVybiB0aGUgYWN0dWFsIGNoaXAgc2VsZWN0IG9uIGZvciBHUElPIGNoaXAgc2VsZWN0cyAqLworCQlpZiAoZ3BpbyA+PSAwKQorCQkJZ3Bpb19zZXRfdmFsdWUoZ3BpbywgYWN0aXZlKTsKKwkjZW5kaWYKKwkJLyogQWN0aXZhdGUgc2xhdmUgb24gdGhlIFNQSSBjb250cm9sbGVyICovCisJCXdyaXRlbCgxIDw8IHNwaS0+Y2hpcF9zZWxlY3QsIGR3c3BpLT5yZWdzICsgRFdTUElfU0VSKTsKKwl9IGVsc2UgeworCQkvKiBEZXNlbGVjdCB0aGUgc2xhdmUgb24gdGhlIFNQSSBidXMgKi8KKwkJd3JpdGVsKDAsIGR3c3BpLT5yZWdzICsgRFdTUElfU0VSKTsKKwkjaWYgMAorCQlpZiAoZ3BpbyA+PSAwKQorCQkJZ3Bpb19zZXRfdmFsdWUoZ3BpbywgIWFjdGl2ZSk7CisJI2VuZGlmCisJfQorfQorCitzdGF0aWMgaW50IGRlc2lnbndhcmVfc3BpX3NldHVwX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCit7CisJdTggYml0c19wZXJfd29yZDsKKwl1MzIgaHo7CisJc3RydWN0IGRlc2lnbndhcmVfc3BpICpkd3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXUxNiBjdHJscjAgPSByZWFkdyhkd3NwaS0+cmVncyArIERXU1BJX0NUUkxSMCk7CisKKwliaXRzX3Blcl93b3JkID0gKHQpID8gdC0+Yml0c19wZXJfd29yZCA6IHNwaS0+Yml0c19wZXJfd29yZDsKKwloeiA9ICh0KSA/IHQtPnNwZWVkX2h6IDogc3BpLT5tYXhfc3BlZWRfaHo7CisKKwlpZiAoYml0c19wZXJfd29yZCA8IDQgfHwgYml0c19wZXJfd29yZCA+IDE2KSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiJXMsIHVuc3VwcG9ydGVkIGJpdHNfcGVyX3dvcmQ9JWRcbiIsCisJCQlfX2Z1bmNfXywgYml0c19wZXJfd29yZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSB7CisJCWN0cmxyMCAmPSB+RFdTUElfQ1RSTFIwX0RGU19NQVNLOworCQljdHJscjAgfD0gYml0c19wZXJfd29yZCAtIDE7CisKKwkJZHdzcGktPmJpdHNfcGVyX3dvcmQgPSBiaXRzX3Blcl93b3JkOworCX0KKworCS8qIFNldCB0aGUgU1BJIGNsb2NrIHBoYXNlIGFuZCBwb2xhcml0eSAqLworCWlmIChzcGktPm1vZGUgJiBTUElfQ1BIQSkKKwkJY3RybHIwIHw9IERXU1BJX0NUUkxSMF9TQ1BIOworCWVsc2UKKwkJY3RybHIwICY9IH5EV1NQSV9DVFJMUjBfU0NQSDsKKwlpZiAoc3BpLT5tb2RlICYgU1BJX0NQT0wpCisJCWN0cmxyMCB8PSBEV1NQSV9DVFJMUjBfU0NQT0w7CisJZWxzZQorCQljdHJscjAgJj0gfkRXU1BJX0NUUkxSMF9TQ1BPTDsKKworCXdyaXRldyhjdHJscjAsIGR3c3BpLT5yZWdzICsgRFdTUElfQ1RSTFIwKTsKKworCS8qIHNldCBzcGVlZCAqLworCWR3c3BpX2JhdWRjZmcoZHdzcGksIGh6KTsKKworCXJldHVybiAwOworfQorCisvKiB0aGUgc3BpLT5tb2RlIGJpdHMgY3VycmVudGx5IHVuZGVyc3Rvb2QgYnkgdGhpcyBkcml2ZXI6ICovCisjZGVmaW5lIE1PREVCSVRTIChTUElfQ1BPTCB8IFNQSV9DUEhBKQorCitzdGF0aWMgaW50IGRlc2lnbndhcmVfc3BpX3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGRlc2lnbndhcmVfc3BpICpkd3NwaTsKKwlpbnQgcmV0dmFsOworCisJZHdzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKworCWlmICghc3BpLT5iaXRzX3Blcl93b3JkKQorCQlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OworCisJaWYgKHNwaS0+bW9kZSAmIH5NT0RFQklUUykgeworCQlkZXZfZXJyKCZzcGktPmRldiwgIiVzLCBTUCB1bnN1cHBvcnRlZCBtb2RlIGJpdHMgJXhcbiIsCisJCQlfX2Z1bmNfXywgc3BpLT5tb2RlICYgfk1PREVCSVRTKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHNwaS0+Y2hpcF9zZWxlY3QgPiBzcGktPm1hc3Rlci0+bnVtX2NoaXBzZWxlY3QpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsCisJCQkJInNldHVwOiBpbnZhbGlkIGNoaXBzZWxlY3QgJXUgKCV1IGRlZmluZWQpXG4iLAorCQkJCXNwaS0+Y2hpcF9zZWxlY3QsIHNwaS0+bWFzdGVyLT5udW1fY2hpcHNlbGVjdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHZhbCA9IGRlc2lnbndhcmVfc3BpX3NldHVwX3RyYW5zZmVyKHNwaSwgTlVMTCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkZXZfZGJnKCZzcGktPmRldiwgIiVzLCBtb2RlICVkLCAldSBiaXRzL3csICV1IG5zZWMvYml0XG4iLAorCQlfX2Z1bmNfXywgc3BpLT5tb2RlICYgTU9ERUJJVFMsIHNwaS0+Yml0c19wZXJfd29yZCwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGVzaWdud2FyZV9zcGlfZG9fdHgoc3RydWN0IGRlc2lnbndhcmVfc3BpICpkd3NwaSkKK3sKKwl1OCBzcjsKKwlpbnQgYnl0ZXNfdG9fdHggPSBkd3NwaS0+cmVtYWluaW5nX3R4X2J5dGVzOworCXU4IHZhbGlkX3R4X2ZpZm9fYnl0ZXMgPSByZWFkYihkd3NwaS0+cmVncyArIERXU1BJX1RYRkxSKTsKKwl1OCB2YWxpZF9yeF9maWZvX2J5dGVzID0gcmVhZGIoZHdzcGktPnJlZ3MgKyBEV1NQSV9SWEZMUik7CisJaW50IHR4X2xpbWl0ID0gbWluKGR3c3BpLT50eF9maWZvX2RlcHRoIC0gdmFsaWRfdHhfZmlmb19ieXRlcyxcCisJCQlkd3NwaS0+cnhfZmlmb19kZXB0aCAtIHZhbGlkX3J4X2ZpZm9fYnl0ZXMpOworCisJLyogRmlsbCB0aGUgVHggRklGTyB3aXRoIGFzIG1hbnkgYnl0ZXMgYXMgcG9zc2libGUgKi8KKwlzciA9IHJlYWRiKGR3c3BpLT5yZWdzICsgRFdTUElfU1IpOworCXdoaWxlICgoc3IgJiBEV1NQSV9TUl9URk5GX01BU0spICYmIGR3c3BpLT5yZW1haW5pbmdfdHhfYnl0ZXMgPiAwKSB7CisJCWlmIChkd3NwaS0+Yml0c19wZXJfd29yZCA8PSA4KSB7CisJCQl1OCBkciA9IChkd3NwaS0+dHhfcHRyKSA/ICpkd3NwaS0+dHhfcHRyKysgOiAwOworCisJCQl3cml0ZWIoZHIsIGR3c3BpLT5yZWdzICsgRFdTUElfRFIpOworCQkJZHdzcGktPnJlbWFpbmluZ190eF9ieXRlcy0tOworCQl9IGVsc2UgeworCQkJdTE2IGRyID0gKGR3c3BpLT50eF9wdHIpID8gKih1MTYgKikgZHdzcGktPnR4X3B0ciA6IDA7CisKKwkJCWR3c3BpLT50eF9wdHIgKz0gMjsKKwkJCXdyaXRldyhkciwgZHdzcGktPnJlZ3MgKyBEV1NQSV9EUik7CisJCQlkd3NwaS0+cmVtYWluaW5nX3R4X2J5dGVzIC09IDI7CisJCX0KKwkJaWYgKC0tdHhfbGltaXQgPD0gMCkKKwkJCWJyZWFrOworCQlzciA9IHJlYWRiKGR3c3BpLT5yZWdzICsgRFdTUElfU1IpOworCX0KKworCWR3c3BpLT50eF9jb3VudCArPSBieXRlc190b190eCAtIGR3c3BpLT5yZW1haW5pbmdfdHhfYnl0ZXM7Cit9CisKKy8qIFJldHVybiAxIHdoZW4gZG9uZSwgMCBvdGhlcndpc2UgKi8KK3N0YXRpYyBpbnQgZGVzaWdud2FyZV9zcGlfZmlsbF90eF9maWZvKHN0cnVjdCBkZXNpZ253YXJlX3NwaSAqZHdzcGkpCit7CisJdW5zaWduZWQgY3NfY2hhbmdlID0gMDsKKwl1bnNpZ25lZCBpbnQgc2VyOworCisJc2VyID0gcmVhZHcoZHdzcGktPnJlZ3MgKyBEV1NQSV9TRVIpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKGR3c3BpLT50eF90LCBkd3NwaS0+dHJhbnNmZXJzX2xpc3QsCisJCXRyYW5zZmVyX2xpc3QpIHsKKwkJaWYgKGR3c3BpLT5yZW1haW5pbmdfdHhfYnl0ZXMgPT0gMCkgeworCQkJLyogSW5pdGlhbGl6ZSBuZXcgc3BpX3RyYW5zZmVyICovCisJCQlkd3NwaS0+dHhfcHRyID0gZHdzcGktPnR4X3QtPnR4X2J1ZjsKKwkJCWR3c3BpLT5yZW1haW5pbmdfdHhfYnl0ZXMgPSBkd3NwaS0+dHhfdC0+bGVuOworCQkJZHdzcGktPnN0YXR1cyA9IDA7CisKKwkJCS8qIGNhbid0IGNoYW5nZSBzcGVlZCBvciBiaXRzIGluIHRoZSBtaWRkbGUgb2YgYQorCQkJICogbWVzc2FnZS4gbXVzdCBkaXNhYmxlIHRoZSBjb250cm9sbGVyIGZvciB0aGlzLgorCQkJICovCisJCQlpZiAoZHdzcGktPnR4X3QtPnNwZWVkX2h6CisJCQkJCXx8IGR3c3BpLT50eF90LT5iaXRzX3Blcl93b3JkKSB7CisJCQkJZHdzcGktPnN0YXR1cyA9IC1FTk9QUk9UT09QVDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKCFkd3NwaS0+dHhfdC0+dHhfYnVmICYmICFkd3NwaS0+dHhfdC0+cnhfYnVmCisJCQkJCSYmIGR3c3BpLT50eF90LT5sZW4pIHsKKwkJCQlkd3NwaS0+c3RhdHVzID0gLUVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKGNzX2NoYW5nZSkKKwkJCQlicmVhazsKKwkJfQorCisJCWRlc2lnbndhcmVfc3BpX2RvX3R4KGR3c3BpKTsKKworCQkvKiBEb24ndCBhZHZhbmNlIGR3c3BpLT50eF90LCB3ZSdsbCBnZXQgYmFjayB0byB0aGlzCisJCSAqIHNwaV90cmFuc2ZlciBsYXRlcgorCQkgKi8KKwkJaWYgKGR3c3BpLT5yZW1haW5pbmdfdHhfYnl0ZXMgPiAwKQorCQl7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWNzX2NoYW5nZSA9IGR3c3BpLT50eF90LT5jc19jaGFuZ2U7CisJfQorCisJY29tcGxldGUoJmR3c3BpLT5kb25lKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgZGVzaWdud2FyZV9zcGlfZG9fcngoc3RydWN0IGRlc2lnbndhcmVfc3BpICpkd3NwaSkKK3sKKwl1OCBzcjsKKwlpbnQgYnl0ZXNfdG9fcnggPSBkd3NwaS0+cmVtYWluaW5nX3J4X2J5dGVzOworCisJc3IgPSByZWFkYihkd3NwaS0+cmVncyArIERXU1BJX1NSKTsKKworCWlmIChzciAmIERXU1BJX1NSX1JGRl9NQVNLKSB7CisJI2lmIDAKKwkJZGV2X2Vycihkd3NwaS0+ZGV2LCAiJXM6IFJYIEZJRk8gb3ZlcmZsb3dcbiIsIF9fZnVuY19fKTsKKwkJZHdzcGktPnN0YXR1cyA9IC1FSU87CisJI2VuZGlmCisJfQorCisJLyogUmVhZCBhcyBsb25nIGFzIFJYIEZJRk8gaXMgbm90IGVtcHR5ICovCisJd2hpbGUgKChzciAmIERXU1BJX1NSX1JGTkVfTUFTSykgIT0gMAorCQkJJiYgZHdzcGktPnJlbWFpbmluZ19yeF9ieXRlcyA+IDApIHsKKwkJaW50IHJ4X2xldmVsID0gcmVhZGwoZHdzcGktPnJlZ3MgKyBEV1NQSV9SWEZMUik7CisKKwkJd2hpbGUgKHJ4X2xldmVsLS0gJiYgZHdzcGktPnJlbWFpbmluZ19yeF9ieXRlcyA+IDApIHsKKwkJCWlmIChkd3NwaS0+Yml0c19wZXJfd29yZCA8PSA4KSB7CisJCQkJdTggZGF0YTsKKworCQkJCWRhdGEgPSByZWFkYihkd3NwaS0+cmVncyArIERXU1BJX0RSKTsKKwkJCQlkd3NwaS0+cmVtYWluaW5nX3J4X2J5dGVzLS07CisJCQkJaWYgKGR3c3BpLT5yeF9wdHIpCisJCQkJCSpkd3NwaS0+cnhfcHRyKysgPSBkYXRhOworCQkJfSBlbHNlIHsKKwkJCQl1MTYgZGF0YTsKKworCQkJCWRhdGEgPSByZWFkdyhkd3NwaS0+cmVncyArIERXU1BJX0RSKTsKKwkJCQlkd3NwaS0+cmVtYWluaW5nX3J4X2J5dGVzIC09IDI7CisJCQkJaWYgKGR3c3BpLT5yeF9wdHIpIHsKKwkJCQkJKih1MTYgKikgZHdzcGktPnJ4X3B0ciA9IGRhdGE7CisJCQkJCWR3c3BpLT5yeF9wdHIgKz0gMjsKKwkJCQl9CisJCQl9CisJCX0KKwkJc3IgPSByZWFkYihkd3NwaS0+cmVncyArIERXU1BJX1NSKTsKKwl9CisKKwlkd3NwaS0+cnhfY291bnQgKz0gKGJ5dGVzX3RvX3J4IC0gZHdzcGktPnJlbWFpbmluZ19yeF9ieXRlcyk7Cit9CisKKy8qIHJldHVybiAxIGlmIGNzX2NoYW5nZSBpcyB0cnVlLCAwIG90aGVyd2lzZSAqLworc3RhdGljIGludCBkZXNpZ253YXJlX3NwaV9yZWFkX3J4X2ZpZm8oc3RydWN0IGRlc2lnbndhcmVfc3BpICpkd3NwaSkKK3sKKwl1bnNpZ25lZCBjc19jaGFuZ2UgPSAwOworCXVuc2lnbmVkIGludCBzZXI7CisKKwlzZXIgPSByZWFkdyhkd3NwaS0+cmVncyArIERXU1BJX1NFUik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20oZHdzcGktPnJ4X3QsIGR3c3BpLT50cmFuc2ZlcnNfbGlzdCwKKwkJCXRyYW5zZmVyX2xpc3QpIHsKKwkJaWYgKGR3c3BpLT5yZW1haW5pbmdfcnhfYnl0ZXMgPT0gMCkgeworCQkJZHdzcGktPnJ4X3B0ciA9IGR3c3BpLT5yeF90LT5yeF9idWY7CisJCQlkd3NwaS0+cmVtYWluaW5nX3J4X2J5dGVzID0gZHdzcGktPnJ4X3QtPmxlbjsKKworCQkJaWYgKGNzX2NoYW5nZSkKKwkJCQlyZXR1cm4gMTsKKwkJfQorCisJCWRlc2lnbndhcmVfc3BpX2RvX3J4KGR3c3BpKTsKKworCQkvKiBUaGUgcnggYnVmZmVyIGlzIGZpbGxpbmcgdXAgd2l0aCBtb3JlIGJ5dGVzLiBEb24ndCBhZHZhbmNlCisJCSAqIGR3c3BpLT5yeF90LCBhcyB3ZSBoYXZlIG1vcmUgYnl0ZXMgdG8gcmVhZCBpbiB0aGlzCisJCSAqIHNwaV90cmFuc2Zlci4KKwkJICovCisJCWlmIChkd3NwaS0+cmVtYWluaW5nX3J4X2J5dGVzID4gMCkKKwkJCXJldHVybiAwOworCisJCWNzX2NoYW5nZSA9IGR3c3BpLT5yeF90LT5jc19jaGFuZ2U7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGludGVyYXRlIHRocm91Z2ggdGhlIGxpc3Qgb2Ygc3BpX3RyYW5zZmVyIGVsZW1lbnRzLgorICogc3RvcCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0IG9yIHdoZW4gdC0+Y3NfY2hhbmdlIGlzIHRydWUuCisgKi8KK3N0YXRpYyB2b2lkIGRlc2lnbndhcmVfc3BpX2RvX3RyYW5zZmVycyhzdHJ1Y3QgZGVzaWdud2FyZV9zcGkgKmR3c3BpKQoreworCWludCB0eF9kb25lLCBjc19jaGFuZ2U7CisKKwlpbml0X2NvbXBsZXRpb24oJmR3c3BpLT5kb25lKTsKKworCS8qIHRyYW5zZmVyIGtpY2tvZmYgKi8KKwl0eF9kb25lID0gZGVzaWdud2FyZV9zcGlfZmlsbF90eF9maWZvKGR3c3BpKTsKKwlkZXNpZ253YXJlX3NwaV9jaGlwc2VsZWN0KGR3c3BpLT5zcGksIDEpOworCisJaWYgKCF0eF9kb25lKSB7CisJCS8qIEVuYWJsZSB0aGUgdHJhbnNtaXQgZW1wdHkgaW50ZXJydXB0LCB3aGljaCB3ZSB1c2UgdG8KKwkJICogZGV0ZXJtaW5lIHByb2dyZXNzIG9uIHRoZSB0cmFuc21pc3Npb24gaW4gY2FzZSB3ZSdyZQorCQkgKiBub3QgZG9uZSB5ZXQuCisJCSAqLworCQl3cml0ZWIoRFdTUElfSU1SX1RYRUlNX01BU0ssIGR3c3BpLT5yZWdzICsgRFdTUElfSU1SKTsKKworCQkvKiB3YWl0IGZvciB0eCBjb21wbGV0aW9uICovCisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmR3c3BpLT5kb25lKTsKKwl9CisKKwkvKiBUaGlzIGRlbGF5IHNob3VsZCBiZSBnb29kIGVub3VnaCBmb3IgMTAwS0h6IHNwaSB0cmFuc2ZlcnMuIFNsb3dlcgorCSAqIHRyYW5zZmVycyBtYXkgbmVlZCBhIGxvbmdlciBkZWxheS4KKwkgKi8KKwl1ZGVsYXkoMTApOworCisJLyogZ2V0IHJlbWFpbmluZyByeCBieXRlcyAqLworICAgIGRvIHsKKwkJY3NfY2hhbmdlID0gZGVzaWdud2FyZV9zcGlfcmVhZF9yeF9maWZvKGR3c3BpKTsKKwl9IHdoaWxlIChyZWFkYihkd3NwaS0+cmVncyArIERXU1BJX1NSKSAmCisJCQkoRFdTUElfU1JfQlVTWV9NQVNLIHwgRFdTUElfU1JfUkZORV9NQVNLKSk7CisKKwkvKiB0cmFuc2FjdGlvbiBpcyBkb25lICovCisJZGVzaWdud2FyZV9zcGlfY2hpcHNlbGVjdChkd3NwaS0+c3BpLCAwKTsKKworCWlmIChkd3NwaS0+c3RhdHVzIDwgMCkKKwkJcmV0dXJuOworCisJaWYgKCFjc19jaGFuZ2UgJiYgKGR3c3BpLT5yZW1haW5pbmdfcnhfYnl0ZXMgPiAwIHx8CisJCQlkd3NwaS0+cmVtYWluaW5nX3R4X2J5dGVzID4gMCkpIHsKKwkjaWYgMAorCQlkZXZfZXJyKGR3c3BpLT5kZXYsICIlczogcmVtYWluaW5nX3J4X2J5dGVzID0gJWQsICIKKwkJCQkicmVtYWluaW5nX3R4X2J5dGVzID0gJWRcbiIsCisJCQkJX19mdW5jX18sICBkd3NwaS0+cmVtYWluaW5nX3J4X2J5dGVzLAorCQkJCWR3c3BpLT5yZW1haW5pbmdfdHhfYnl0ZXMpOworCSNlbmRpZgorCQlkd3NwaS0+c3RhdHVzID0gLUVJTzsKKyAgICB9CisKKwlpZiAoZHdzcGktPnJ4X2NvdW50ICE9IGR3c3BpLT50eF9jb3VudCkgeworCSNpZiAwCisJCWRldl9lcnIoZHdzcGktPmRldiwgIiVzOiByeF9jb3VudCA9PSAlZCwgdHhfY291bnQgPT0gJWRcbiIsCisJCQkJX19mdW5jX18sIGR3c3BpLT5yeF9jb3VudCwgZHdzcGktPnR4X2NvdW50KTsKKwkjZW5kaWYKKwkJZHdzcGktPnN0YXR1cyA9IC1FSU87CisgICAgfQorfQorCitzdGF0aWMgaW50IGRlc2lnbndhcmVfc3BpX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCXN0cnVjdCBzcGlfbWVzc2FnZSAqbWVzZykKK3sKKwlzdHJ1Y3QgZGVzaWdud2FyZV9zcGkgKmR3c3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisKKwltZXNnLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwltZXNnLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CisKKwkvKiB3ZSBjYW4ndCBibG9jayBoZXJlLCBzbyB3ZSB1c2UgYSBzcGlubG9jaworCSAqIGhlcmUgaW5zdGVhZCBvZiB0aGUgZ2xvYmFsIG11dGV4CisJICovCisJc3Bpbl9sb2NrKCZkd3NwaS0+cWxvY2spOworCWxpc3RfYWRkX3RhaWwoJm1lc2ctPnF1ZXVlLCAmZHdzcGktPnF1ZXVlKTsKKwlxdWV1ZV93b3JrKGR3c3BpLT53b3JrcXVldWUsICZkd3NwaS0+d29yayk7CisJc3Bpbl91bmxvY2soJmR3c3BpLT5xbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGVzaWdud2FyZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZGVzaWdud2FyZV9zcGkgKmR3c3BpID0gY29udGFpbmVyX29mKHdvcmssCisJCQlzdHJ1Y3QgZGVzaWdud2FyZV9zcGksIHdvcmspOworCisJbXV0ZXhfbG9jaygmZHdzcGktPmxvY2spOworCXNwaW5fbG9jaygmZHdzcGktPnFsb2NrKTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmZHdzcGktPnF1ZXVlKSkgeworCQlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm07CisKKwkJbSA9IGNvbnRhaW5lcl9vZihkd3NwaS0+cXVldWUubmV4dCwgc3RydWN0IHNwaV9tZXNzYWdlLCBxdWV1ZSk7CisJCWxpc3RfZGVsX2luaXQoJm0tPnF1ZXVlKTsKKwkJc3Bpbl91bmxvY2soJmR3c3BpLT5xbG9jayk7CisKKwkJZHdzcGktPnNwaSA9IG0tPnNwaTsKKwkJZHdzcGktPnR4X3QgPSBkd3NwaS0+cnhfdCA9CisJCQlsaXN0X2ZpcnN0X2VudHJ5KCZtLT50cmFuc2ZlcnMsIHN0cnVjdCBzcGlfdHJhbnNmZXIsCisJCQkJCXRyYW5zZmVyX2xpc3QpOworCisJCS8qCisJCSAqIEludGVyYXRlIHRocm91Z2ggZ3JvdXBzIG9mIHNwaV90cmFuc2ZlciBzdHJ1Y3RzCisJCSAqIHRoYXQgYXJlIHNlcGFyYXRlZCBieSBjc19jaGFuZ2UgYmVpbmcgdHJ1ZQorCQkgKi8KKwkJZHdzcGktPnRyYW5zZmVyc19saXN0ID0gJm0tPnRyYW5zZmVyczsKKwkJZG8geworCQkJZHdzcGktPnJlbWFpbmluZ190eF9ieXRlcyA9CisJCQkJZHdzcGktPnJlbWFpbmluZ19yeF9ieXRlcyA9IDA7CisJCQlkd3NwaS0+dHhfY291bnQgPSBkd3NwaS0+cnhfY291bnQgPSAwOworCQkJZGVzaWdud2FyZV9zcGlfc2V0dXBfdHJhbnNmZXIobS0+c3BpLCBOVUxMKTsKKwkJCWR3c3BpX2VuYWJsZShkd3NwaSwgMSk7CisJCQlkZXNpZ253YXJlX3NwaV9kb190cmFuc2ZlcnMoZHdzcGkpOworCQkJZHdzcGlfZW5hYmxlKGR3c3BpLCAwKTsKKwkJCWlmIChkd3NwaS0+c3RhdHVzIDwgMCkKKwkJCQlicmVhazsKKwkJCW0tPmFjdHVhbF9sZW5ndGggKz0KKwkJCQlkd3NwaS0+dHhfY291bnQ7IC8qIHNhbWUgYXMgcnhfY291bnQgKi8KKwkJfSB3aGlsZSAoJmR3c3BpLT50eF90LT50cmFuc2Zlcl9saXN0ICE9ICZtLT50cmFuc2ZlcnMpOworCisJCW0tPnN0YXR1cyA9IGR3c3BpLT5zdGF0dXM7CisJCW0tPmNvbXBsZXRlKG0tPmNvbnRleHQpOworCisJCXNwaW5fbG9jaygmZHdzcGktPnFsb2NrKTsKKwl9CisJc3Bpbl91bmxvY2soJmR3c3BpLT5xbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkd3NwaS0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGRlc2lnbndhcmVfcHVtcF90cmFuc2ZlcnModW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBkZXNpZ253YXJlX3NwaSAqZHdzcGkgPSAoc3RydWN0IGRlc2lnbndhcmVfc3BpICopIGRhdGE7CisKKwlkZXNpZ253YXJlX3NwaV9yZWFkX3J4X2ZpZm8oZHdzcGkpOworCWlmICghZGVzaWdud2FyZV9zcGlfZmlsbF90eF9maWZvKGR3c3BpKSkKKwkJLyogcmVlbmFibGUgdGhlIGludGVycnVwdCAqLworCQl3cml0ZWIoRFdTUElfSU1SX1RYRUlNX01BU0ssIGR3c3BpLT5yZWdzICsgRFdTUElfSU1SKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGRlc2lnbndhcmVfc3BpX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGRlc2lnbndhcmVfc3BpICpkd3NwaSA9IGRldl9pZDsKKworCXRhc2tsZXRfc2NoZWR1bGUoJmR3c3BpLT5wdW1wX3RyYW5zZmVycyk7CisJLyogZGlzYWJsZSB0aGUgaW50ZXJydXB0IGZvciBub3cgKi8KKwl3cml0ZWIoMCwgZHdzcGktPnJlZ3MgKyBEV1NQSV9JTVIpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBkZXNpZ253YXJlX3NwaV9jbGVhbnVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGRlc2lnbndhcmVfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCXN0cnVjdCBkZXNpZ253YXJlX3NwaSAqZHdzcGk7CisJLy9zdHJ1Y3QgZGVzaWdud2FyZV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3Qgc3BpX2NvbnRyb2xsZXJfcGRhdGEgKnBkYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcjsKKwlzdHJ1Y3QgY2xrICpjbGtfc3BpOworCisJcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmIChwZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAibm8gZGV2aWNlIGRhdGEgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisgICAgICAgIGlmKG1lbWNtcChwZGF0YS0+Y2xrX25hbWUsICJEVVMiLCAzKSkKKyAgICAgICAgICAgICAgICBjMjAwMF9ibG9ja19yZXNldChDT01QT05FTlRfQVhJX0xFR0FDWV9TUEksIDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYzIwMDBfYmxvY2tfcmVzZXQoQ09NUE9ORU5UX0FYSV9GQVNUX1NQSSwgMCk7CisKKwljbGtfc3BpID0gY2xrX2dldChOVUxMLHBkYXRhLT5jbGtfbmFtZSk7CisJaWYgKElTX0VSUihjbGtfc3BpKSkgeworCQlyZXQgPSBQVFJfRVJSKGNsa19zcGkpOworCQlwcl9lcnIoIiVzOlVuYWJsZSB0byBvYnRhaW4gc3BpIGNsb2NrOiAlZFxuIixcCisJCQkJX19mdW5jX18sIHJldCk7CisJCWdvdG8gZXJyX2NsazsKKwl9CisKKwljbGtfZW5hYmxlKGNsa19zcGkpOworCisJcHJpbnRrICgiJXM6SW5pdGlhbGl6aW5nIFNQSSBDb250cm9sbGVyIDogVXNpbmcgZG1hPSVkIENMSyglcyk9JWxkIEh6XG4iLCBfX2Z1bmNfXywgXAorCQkJcGRhdGEtPnVzZV9kbWEsIHBkYXRhLT5jbGtfbmFtZSwgY2xrX2dldF9yYXRlKGNsa19zcGkpKTsKKworCS8qIEdldCByZXNvdXJjZXMobWVtb3J5LCBJUlEpIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlICovCisJbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcigmZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgZGVzaWdud2FyZV9zcGkpKTsKKwlpZiAobWFzdGVyID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfbm9tZW07CisJfQorCisJbWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfQ1BPTCB8IFNQSV9DUEhBOworCW1hc3Rlci0+YnVzX251bSA9IHBkYXRhLT5idXNfbnVtOworCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBwZGF0YS0+bnVtX2NoaXBzZWxlY3RzOworCW1hc3Rlci0+c2V0dXAgPSBkZXNpZ253YXJlX3NwaV9zZXR1cDsKKwltYXN0ZXItPnRyYW5zZmVyID0gZGVzaWdud2FyZV9zcGlfdHJhbnNmZXI7CisJbWFzdGVyLT5jbGVhbnVwID0gZGVzaWdud2FyZV9zcGlfY2xlYW51cDsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIG1hc3Rlcik7CisKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBwdXRfbWFzdGVyOworCX0KKworCWR3c3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCWR3c3BpLT5jbGtfc3BpID0gY2xrX3NwaTsKKwlkd3NwaS0+c3NpX2NsayA9IGNsa19nZXRfcmF0ZShkd3NwaS0+Y2xrX3NwaSk7CisJLy9kd3NwaS0+c3NpX2NsayA9IHBkYXRhLT5tYXhfZnJlcTsKKwlkd3NwaS0+dHhfZmlmb19kZXB0aCA9IFRYX0ZJRk9fREVQVEg7CisJZHdzcGktPnJ4X2ZpZm9fZGVwdGggPSBSWF9GSUZPX0RFUFRIOworI2lmIDAKKwlkd3NwaS0+dHhfZmlmb19kZXB0aCA9IHBkYXRhLT50eF9maWZvX2RlcHRoOworCWR3c3BpLT5yeF9maWZvX2RlcHRoID0gcGRhdGEtPnJ4X2ZpZm9fZGVwdGg7CisjZW5kaWYKKwlkd3NwaS0+ZGV2ID0gJmRldi0+ZGV2OworCXNwaW5fbG9ja19pbml0KCZkd3NwaS0+cWxvY2spOworCW11dGV4X2luaXQoJmR3c3BpLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmZHdzcGktPnF1ZXVlKTsKKwlJTklUX1dPUksoJmR3c3BpLT53b3JrLCBkZXNpZ253YXJlX3dvcmspOworCWR3c3BpLT53b3JrcXVldWUgPQorCQljcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShkZXZfbmFtZShtYXN0ZXItPmRldi5wYXJlbnQpKTsKKwkKKwlpZiAoZHdzcGktPndvcmtxdWV1ZSA9PSBOVUxMKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBwdXRfbWFzdGVyOworCX0KKwl0YXNrbGV0X2luaXQoJmR3c3BpLT5wdW1wX3RyYW5zZmVycywgZGVzaWdud2FyZV9wdW1wX3RyYW5zZmVycywKKwkJCSh1bnNpZ25lZCBsb25nKSBkd3NwaSk7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwKKwkJCXItPmVuZCAtIHItPnN0YXJ0ICsgMSwgREVTSUdOV0FSRV9TUElfTkFNRSkpIHsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGRlc3Ryb3lfd3E7CisJfQorCisJZHdzcGktPnJlZ3MgPSBpb3JlbWFwKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEpOworCWlmIChkd3NwaS0+cmVncyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZGVzdHJveV93cTsKKwl9CisKKwlkd3NwaS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOworCWlmIChkd3NwaS0+aXJxIDwgMCkgeworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gdW5tYXBfaW87CisJfQorCisJLyogU1BJIGNvbnRyb2xsZXIgaW5pdGlhbGl6YXRpb25zICovCisJZHdzcGlfaW5pdF9odyhkd3NwaSk7CisKKwkvKiBSZWdpc3RlciBmb3IgU1BJIEludGVycnVwdCAqLworCXJldCA9IHJlcXVlc3RfaXJxKGR3c3BpLT5pcnEsIGRlc2lnbndhcmVfc3BpX2lycSwgMCwKKwkJCURFU0lHTldBUkVfU1BJX05BTUUsIGR3c3BpKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gdW5tYXBfaW87CisKKwlyZXQgPSBzcGlfcmVnaXN0ZXJfbWFzdGVyKG1hc3Rlcik7CisgICAgaWYgKHJldCA8IDApCisJCWdvdG8gZnJlZV9pcnE7CisKKwlkZXZfaW5mbygmZGV2LT5kZXYsICJhdCAweCUwOFggbWFwcGVkIHRvIDB4JTA4WCwgaXJxPSVkXG4iLAorCQkJci0+c3RhcnQsICh1MzIpZHdzcGktPnJlZ3MsIGR3c3BpLT5pcnEpOworCisJcmV0dXJuIHJldDsKKworZnJlZV9pcnE6CisJZnJlZV9pcnEoZHdzcGktPmlycSwgZHdzcGkpOwordW5tYXBfaW86CisJaW91bm1hcChkd3NwaS0+cmVncyk7CitkZXN0cm95X3dxOgorCWRlc3Ryb3lfd29ya3F1ZXVlKGR3c3BpLT53b3JrcXVldWUpOworcHV0X21hc3RlcjoKKwlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworZXJyX25vbWVtOgorCWNsa19kaXNhYmxlKGNsa19zcGkpOworCWNsa19wdXQoY2xrX3NwaSk7CitlcnJfY2xrOgorICAgICAgICBpZihtZW1jbXAocGRhdGEtPmNsa19uYW1lLCAiRFVTIiwgMykpCisgICAgICAgICAgICAgICAgYzIwMDBfYmxvY2tfcmVzZXQoQ09NUE9ORU5UX0FYSV9MRUdBQ1lfU1BJLCAxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGMyMDAwX2Jsb2NrX3Jlc2V0KENPTVBPTkVOVF9BWElfRkFTVF9TUEksIDEpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZGVzaWdud2FyZV9zcGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGVzaWdud2FyZV9zcGkgKmR3c3BpOworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IHNwaV9jb250cm9sbGVyX3BkYXRhICpwZGF0YTsKKworCW1hc3RlciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJZHdzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwlmcmVlX2lycShkd3NwaS0+aXJxLCBkd3NwaSk7CisJaW91bm1hcChkd3NwaS0+cmVncyk7CisJZGVzdHJveV93b3JrcXVldWUoZHdzcGktPndvcmtxdWV1ZSk7CisJdGFza2xldF9raWxsKCZkd3NwaS0+cHVtcF90cmFuc2ZlcnMpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgMCk7CisJc3BpX21hc3Rlcl9wdXQobWFzdGVyKTsKKwljbGtfZGlzYWJsZShkd3NwaS0+Y2xrX3NwaSk7CisJY2xrX3B1dChkd3NwaS0+Y2xrX3NwaSk7CisKKyAgICAgICAgcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworICAgICAgICBpZighcGRhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKG1lbWNtcChwZGF0YS0+Y2xrX25hbWUsICJEVVMiLCAzKSkKKyAgICAgICAgICAgICAgICBjMjAwMF9ibG9ja19yZXNldChDT01QT05FTlRfQVhJX0xFR0FDWV9TUEksIDEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYzIwMDBfYmxvY2tfcmVzZXQoQ09NUE9ORU5UX0FYSV9GQVNUX1NQSSwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmIENPTkZJR19QTQorc3RhdGljIGludCBkZXNpZ253YXJlX3NwaV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgZGVzaWdud2FyZV9zcGkgKmR3c3BpOworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisKKwltYXN0ZXIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlkd3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKworICAgICAgICAvKiBEaXNhYmxlIHRoZSBTUEkgbWFzdGVyICovCisgICAgICAgIHdyaXRlbCgwLCBkd3NwaS0+cmVncyArIERXU1BJX1NTSUVOUik7CisKKyAgICAgICAgY2xrX2Rpc2FibGUoZHdzcGktPmNsa19zcGkpOworCisgICAgICAgIHJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQgZGVzaWdud2FyZV9zcGlfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRlc2lnbndhcmVfc3BpICpkd3NwaTsKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCisJbWFzdGVyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJZHdzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKyAgICAgICAgY2xrX2VuYWJsZShkd3NwaS0+Y2xrX3NwaSk7CisJZHdzcGlfaW5pdF9odyhkd3NwaSk7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyogd29yayB3aXRoIGhvdHBsdWcgYW5kIGNvbGRwbHVnICovCitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgREVTSUdOV0FSRV9TUElfTkFNRSk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRlc2lnbndhcmVfc3BpX2RyaXZlciA9IHsKKwkucHJvYmUgID0gZGVzaWdud2FyZV9zcGlfcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGRlc2lnbndhcmVfc3BpX3JlbW92ZSksCisjaWYgQ09ORklHX1BNCisgICAgICAgIC5zdXNwZW5kICAgICAgICA9IGRlc2lnbndhcmVfc3BpX3N1c3BlbmQsCisgICAgICAgIC5yZXN1bWUgICAgICAgICA9IGRlc2lnbndhcmVfc3BpX3Jlc3VtZSwKKyNlbmRpZgorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gREVTSUdOV0FSRV9TUElfTkFNRSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRlc2lnbndhcmVfc3BpX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZkZXNpZ253YXJlX3NwaV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoZGVzaWdud2FyZV9zcGlfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkZXNpZ253YXJlX3NwaV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRlc2lnbndhcmVfc3BpX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChkZXNpZ253YXJlX3NwaV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQmFydWNoIFNpYWNoIDxiYXJ1Y2gtTnN3VHU5UzFXM1A2Z2JQdkVnbXcyd0AuLi5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlN5bm9wc3lzIERlc2lnbldhcmUgU1BJIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkyL0tjb25maWcgYi9kcml2ZXJzL3NwaTIvS2NvbmZpZwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaTIvTWFrZWZpbGUgYi9kcml2ZXJzL3NwaTIvTWFrZWZpbGUKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkyL2J1c3Nlcy9LY29uZmlnIGIvZHJpdmVycy9zcGkyL2J1c3Nlcy9LY29uZmlnCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpMi9idXNzZXMvTWFrZWZpbGUgYi9kcml2ZXJzL3NwaTIvYnVzc2VzL01ha2VmaWxlCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpMi9idXNzZXMvY29tY2VydG9fc3BpLmMgYi9kcml2ZXJzL3NwaTIvYnVzc2VzL2NvbWNlcnRvX3NwaS5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggYjUyZGZlNy4uMDE3Y2Q2ZAotLS0gYS9kcml2ZXJzL3NwaTIvYnVzc2VzL2NvbWNlcnRvX3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpMi9idXNzZXMvY29tY2VydG9fc3BpLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICAqCiAgKgogICovCi1zdGF0aWMgaW50IGRvX3dyaXRlX3JlYWRfdHJhbnNmZXI4KHN0cnVjdCBjb21jZXJ0b19zcGkgKnNwaSwgdTggKndidWYsIHVuc2lnbmVkIGludCAqd2xlbiwgdTggKnJidWYsIHVuc2lnbmVkIGludCAqcmxlbikKK3N0YXRpYyBpbnQgZG9fd3JpdGVfcmVhZF90cmFuc2Zlcjgoc3RydWN0IGNvbWNlcnRvX3NwaSAqc3BpLCB1OCAqd2J1ZiwgdW5zaWduZWQgaW50ICp3bGVuLCB1OCAqcmJ1ZiwgdW5zaWduZWQgaW50ICpybGVuLCB1MzIgc2VyX3JlZykKIHsKIAl1bnNpZ25lZCBpbnQgbGVuX25vdzsKIAlpbnQgcmMgPSAwOwpAQCAtNTQsNiArNTQsNyBAQAogCXUzMiBkciA9IHNwaS0+bWVtYmFzZSArIENPTUNFUlRPX1NQSV9EUjsKIAl1MzIgdHhmbHIgPSBzcGktPm1lbWJhc2UgKyBDT01DRVJUT19TUElfVFhGTFI7CiAJdTMyIHJ4ZmxyID0gc3BpLT5tZW1iYXNlICsgQ09NQ0VSVE9fU1BJX1JYRkxSOworCWludCBzZXJfZG9uZSA9IDA7CiAKIC8vCXByaW50ayhLRVJOX0lORk8gImRvX3dyaXRlX3JlYWRfdHJhbnNmZXIoJSNseCwgJSNseCwgJWQsICUjbHgsICVkKVxuIiwgKHVuc2lnbmVkIGxvbmcpc3BpLAogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpd2J1ZiwgKndsZW4sCkBAIC03MCw2ICs3MSwxMCBAQAogCQl3aGlsZSAobGVuX25vdy0tKQogCQkJX19yYXdfd3JpdGV3KGNwdV90b19sZTE2KCh1MTYpICp3YnVmKyspLCBkcik7CiAKKwkJaWYgKCFzZXJfZG9uZSl7CisJCQlfX3Jhd193cml0ZWwoc2VyX3JlZywgc3BpLT5tZW1iYXNlICsgQ09NQ0VSVE9fU1BJX1NFUik7CisJCQlzZXJfZG9uZSA9IDE7CisJCX0KIAogCQlsZW5fbm93ID0gX19yYXdfcmVhZGwocnhmbHIpOwogCQlpZiAobGVuX25vdyA+IHJ0bXApCkBAIC05Miw5ICs5Nyw4IEBACiAvKioKICAqIGRvX3dyaXRlX3JlYWRfdHJhbnNmZXIxNiAtCiAgKgotICoKICAqLwotc3RhdGljIGludCBkb193cml0ZV9yZWFkX3RyYW5zZmVyMTYoc3RydWN0IGNvbWNlcnRvX3NwaSAqc3BpLCB1MTYgKndidWYsIHVuc2lnbmVkIGludCAqd2xlbiwgdTE2ICpyYnVmLCB1bnNpZ25lZCBpbnQgKnJsZW4pCitzdGF0aWMgaW50IGRvX3dyaXRlX3JlYWRfdHJhbnNmZXIxNihzdHJ1Y3QgY29tY2VydG9fc3BpICpzcGksIHUxNiAqd2J1ZiwgdW5zaWduZWQgaW50ICp3bGVuLCB1MTYgKnJidWYsIHVuc2lnbmVkIGludCAqcmxlbiwgdTMyIHNlcl9yZWcpCiB7CiAJdW5zaWduZWQgaW50IGxlbl9ub3c7CiAJaW50IHJjID0gMDsKQEAgLTEwMyw2ICsxMDcsNyBAQAogCXUzMiBkciA9IHNwaS0+bWVtYmFzZSArIENPTUNFUlRPX1NQSV9EUjsKIAl1MzIgdHhmbHIgPSBzcGktPm1lbWJhc2UgKyBDT01DRVJUT19TUElfVFhGTFI7CiAJdTMyIHJ4ZmxyID0gc3BpLT5tZW1iYXNlICsgQ09NQ0VSVE9fU1BJX1JYRkxSOworCWludCBzZXJfZG9uZSA9IDA7CiAKIC8vCXByaW50ayhLRVJOX0lORk8gImRvX3dyaXRlX3JlYWRfdHJhbnNmZXIoJSNseCwgJSNseCwgJWQsICUjbHgsICVkKVxuIiwgKHVuc2lnbmVkIGxvbmcpc3BpCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyl3YnVmLCAqd2xlbiwKQEAgLTEzOCw2ICsxNDMsMTEgQEAKIAkJCQlfX3Jhd193cml0ZXcoMCwgZHIpOwogCQl9CiAKKwkJaWYgKCFzZXJfZG9uZSl7CisJCQlfX3Jhd193cml0ZWwoc2VyX3JlZywgc3BpLT5tZW1iYXNlICsgQ09NQ0VSVE9fU1BJX1NFUik7CisJCQlzZXJfZG9uZSA9IDE7CisJCX0KKwogCQlsZW5fbm93ID0gX19yYXdfcmVhZGwocnhmbHIpOwogCQlpZiAocnRtcCkgewogCQkJaWYgKGxlbl9ub3cgPiBydG1wKQpAQCAtMTcyLDEzICsxODIsMTQgQEAKICAqCiAgKgogICovCi1zdGF0aWMgaW50IGRvX3dyaXRlX29ubHlfdHJhbnNmZXI4KHN0cnVjdCBjb21jZXJ0b19zcGkgKnNwaSwgdTggKmJ1ZiwgdW5zaWduZWQgaW50ICpsZW4pCitzdGF0aWMgaW50IGRvX3dyaXRlX29ubHlfdHJhbnNmZXI4KHN0cnVjdCBjb21jZXJ0b19zcGkgKnNwaSwgdTggKmJ1ZiwgdW5zaWduZWQgaW50ICpsZW4sIHUzMiBzZXJfcmVnKQogewogCXVuc2lnbmVkIGludCBsZW5fbm93OwogCWludCByYyA9IDA7CiAJdW5zaWduZWQgaW50IHRtcCA9ICpsZW47CiAJdTMyIGRyID0gc3BpLT5tZW1iYXNlICsgQ09NQ0VSVE9fU1BJX0RSOwogCXUzMiB0eGZsciA9IHNwaS0+bWVtYmFzZSArIENPTUNFUlRPX1NQSV9UWEZMUjsKKwlpbnQgc2VyX2RvbmUgPSAwOwogCiAvLwlwcmludGsoS0VSTl9JTkZPICJkb193cml0ZV9vbmx5X3RyYW5zZmVyOCglI2x4LCAlI2x4LCAlZClcbiIsICh1bnNpZ25lZCBsb25nKXNwaSwgKHVuc2lnbmVkIGxvbmcpYnVmLCAqbGVuKTsKIApAQCAtMTkxLDYgKzIwMiwxMiBAQAogCiAJCXdoaWxlIChsZW5fbm93LS0pCiAJCQlfX3Jhd193cml0ZXcoY3B1X3RvX2xlMTYoKHUxNikgKmJ1ZisrKSwgZHIpOworCisJCWlmICghc2VyX2RvbmUpCisJCXsKKwkJCV9fcmF3X3dyaXRlbChzZXJfcmVnLCBzcGktPm1lbWJhc2UgKyBDT01DRVJUT19TUElfU0VSKTsKKwkJCXNlcl9kb25lID0gMTsKKwkJfQogCX0KIAogCSpsZW4gLT0gdG1wOwpAQCAtMzQ0LDE0ICszNjEsMTQgQEAKIAogCQlfX3Jhd193cml0ZWwoY3RybHIwLCBzcGktPm1lbWJhc2UgKyBDT01DRVJUT19TUElfQ1RSTFIwKTsKIAkJX19yYXdfd3JpdGVsKGJhdWRyLCBzcGktPm1lbWJhc2UgKyBDT01DRVJUT19TUElfQkFVRFIpOwotCQlfX3Jhd193cml0ZWwoc2VyLCBzcGktPm1lbWJhc2UgKyBDT01DRVJUT19TUElfU0VSKTsKKwkJLy9fX3Jhd193cml0ZWwoc2VyLCBzcGktPm1lbWJhc2UgKyBDT01DRVJUT19TUElfU0VSKTsKIAkJX19yYXdfd3JpdGVsKDgsIHNwaS0+bWVtYmFzZSArIENPTUNFUlRPX1NQSV9SWEZUTFIpOwogCQlfX3Jhd193cml0ZWwoMCwgc3BpLT5tZW1iYXNlICsgQ09NQ0VSVE9fU1BJX1RYRlRMUik7CiAJCV9fcmF3X3dyaXRlbCgwLCBzcGktPm1lbWJhc2UgKyBDT01DRVJUT19TUElfSU1SKTsKIAkJX19yYXdfd3JpdGVsKDEsIHNwaS0+bWVtYmFzZSArIENPTUNFUlRPX1NQSV9TU0lFTlIpOwogCiAJCWlmICh0cmFuc2Zlci0+ZnMgPD0gOCkKLQkJCXJjID0gZG9fd3JpdGVfb25seV90cmFuc2Zlcjgoc3BpLCB0cmFuc2Zlci0+d2J1ZiwgJnRyYW5zZmVyLT53bGVuKTsKKwkJCXJjID0gZG9fd3JpdGVfb25seV90cmFuc2Zlcjgoc3BpLCB0cmFuc2Zlci0+d2J1ZiwgJnRyYW5zZmVyLT53bGVuLCBzZXIpOwogCQllbHNlCiAJCQlyYyA9IGRvX3dyaXRlX29ubHlfdHJhbnNmZXIxNihzcGksICh1MTYgKikgdHJhbnNmZXItPndidWYsICZ0cmFuc2Zlci0+d2xlbik7CiAKQEAgLTM4MiwyNyArMzk5LDI4IEBACiAKIAkJX19yYXdfd3JpdGVsKGN0cmxyMCwgc3BpLT5tZW1iYXNlICsgQ09NQ0VSVE9fU1BJX0NUUkxSMCk7CiAJCV9fcmF3X3dyaXRlbChiYXVkciwgc3BpLT5tZW1iYXNlICsgQ09NQ0VSVE9fU1BJX0JBVURSKTsKLQkJX19yYXdfd3JpdGVsKHNlciwgc3BpLT5tZW1iYXNlICsgQ09NQ0VSVE9fU1BJX1NFUik7CisJLy8JX19yYXdfd3JpdGVsKHNlciwgc3BpLT5tZW1iYXNlICsgQ09NQ0VSVE9fU1BJX1NFUik7CiAJCV9fcmF3X3dyaXRlbCg4LCBzcGktPm1lbWJhc2UgKyBDT01DRVJUT19TUElfUlhGVExSKTsKIAkJX19yYXdfd3JpdGVsKDAsIHNwaS0+bWVtYmFzZSArIENPTUNFUlRPX1NQSV9UWEZUTFIpOwogCQlfX3Jhd193cml0ZWwoMCwgc3BpLT5tZW1iYXNlICsgQ09NQ0VSVE9fU1BJX0lNUik7CiAJCV9fcmF3X3dyaXRlbCgxLCBzcGktPm1lbWJhc2UgKyBDT01DRVJUT19TUElfU1NJRU5SKTsKIAogCQlpZiAodHJhbnNmZXItPmZzIDw9IDgpCi0JCQlyYyA9IGRvX3dyaXRlX3JlYWRfdHJhbnNmZXI4KHNwaSwgdHJhbnNmZXItPndidWYsICZ0cmFuc2Zlci0+d2xlbiwgdHJhbnNmZXItPnJidWYsICZ0cmFuc2Zlci0+cmxlbik7CisJCXJjID0gZG9fd3JpdGVfcmVhZF90cmFuc2Zlcjgoc3BpLCB0cmFuc2Zlci0+d2J1ZiwgJnRyYW5zZmVyLT53bGVuLCB0cmFuc2Zlci0+cmJ1ZiwgJnRyYW5zZmVyLT5ybGVuLCBzZXIpOwogCQllbHNlCi0JCQlyYyA9IGRvX3dyaXRlX3JlYWRfdHJhbnNmZXIxNihzcGksICh1MTYgKikgdHJhbnNmZXItPndidWYsICZ0cmFuc2Zlci0+d2xlbiwgKHUxNiAqKSB0cmFuc2Zlci0+cmJ1ZiwgJnRyYW5zZmVyLT5ybGVuKTsKKwkJcmMgPSBkb193cml0ZV9yZWFkX3RyYW5zZmVyMTYoc3BpLCAodTE2ICopIHRyYW5zZmVyLT53YnVmLCAmdHJhbnNmZXItPndsZW4sICh1MTYgKikgdHJhbnNmZXItPnJidWYsICZ0cmFuc2Zlci0+cmxlbiwgc2VyKTsKIAogCQlicmVhazsKIAl9CiAKIAlpZiAoY29uZmlnLT5iYV9kZWxheSkgeworCQl1ZGVsYXkoY29uZmlnLT5iYV9kZWxheSk7CiAJICAgICAgICAvKiBtYWtlIHN1cmUgdGhpcyB0cmFuc2FjdGlvbiBpcyBmaW5pc2hlZCAqLwogICAgICAgICAJd2hpbGUgKF9fcmF3X3JlYWRsKHNwaS0+bWVtYmFzZSArIENPTUNFUlRPX1NQSV9TUikgJiBCVVNZKSA7Ci0KLQkJdWRlbGF5KGNvbmZpZy0+YmFfZGVsYXkpOwogCX0KIAorCV9fcmF3X3dyaXRlbCgwLCBzcGktPm1lbWJhc2UgKyBDT01DRVJUT19TUElfU0VSKTsKKwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkyL2J1c3Nlcy9jb21jZXJ0b19zcGkuaCBiL2RyaXZlcnMvc3BpMi9idXNzZXMvY29tY2VydG9fc3BpLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkyL3NwaS1jb3JlLmMgYi9kcml2ZXJzL3NwaTIvc3BpLWNvcmUuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9LY29uZmlnIGIvZHJpdmVycy90dHkvS2NvbmZpZwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC5jIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9LY29uZmlnIGIvZHJpdmVycy91c2IvS2NvbmZpZwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL01ha2VmaWxlCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvS2NvbmZpZwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2Nfb3RnL01ha2VmaWxlIGIvZHJpdmVycy91c2IvZHdjX290Zy9NYWtlZmlsZQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19jYy5jIGIvZHJpdmVycy91c2IvZHdjX290Zy9kd2NfY2MuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19jYy5oIGIvZHJpdmVycy91c2IvZHdjX290Zy9kd2NfY2MuaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19jZmlfY29tbW9uLmggYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19jZmlfY29tbW9uLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2NfY29tbW9uX2Zic2QuYyBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX2NvbW1vbl9mYnNkLmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2NfY29tbW9uX2xpbnV4LmMgYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19jb21tb25fbGludXguYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19jb21tb25fbmJzZC5jIGIvZHJpdmVycy91c2IvZHdjX290Zy9kd2NfY29tbW9uX25ic2QuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19jcnlwdG8uYyBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX2NyeXB0by5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX2NyeXB0by5oIGIvZHJpdmVycy91c2IvZHdjX290Zy9kd2NfY3J5cHRvLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2NfZGguYyBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX2RoLmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2NfZGguaCBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX2RoLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2NfbGlzdC5oIGIvZHJpdmVycy91c2IvZHdjX290Zy9kd2NfbGlzdC5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX21lbS5jIGIvZHJpdmVycy91c2IvZHdjX290Zy9kd2NfbWVtLmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2NfbW9kcG93LmMgYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19tb2Rwb3cuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19tb2Rwb3cuaCBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX21vZHBvdy5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX25vdGlmaWVyLmMgYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19ub3RpZmllci5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX25vdGlmaWVyLmggYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19ub3RpZmllci5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX29zLmggYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vcy5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19hZHAuYyBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19hZHAuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGQxNTgyZDkuLjA4Nzc0NzIKLS0tIGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX2FkcC5jCisrKyBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19hZHAuYwpAQCAtMSw4ICsxLDggQEAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiAkRmlsZTogLy9kd2gvdXNiX2lpcC9kZXYvc29mdHdhcmUvb3RnL2xpbnV4L2RyaXZlcnMvZHdjX290Z19hZHAuYyAkCi0gKiAkUmV2aXNpb246ICM5ICQKLSAqICREYXRlOiAyMDExLzA1LzE3ICQKLSAqICRDaGFuZ2U6IDE3NzQxMTAgJAorICogJFJldmlzaW9uOiAjMTIgJAorICogJERhdGU6IDIwMTEvMTAvMjYgJAorICogJENoYW5nZTogMTg3MzAyOCAkCiAgKgogICogU3lub3BzeXMgSFMgT1RHIExpbnV4IFNvZnR3YXJlIERyaXZlciBhbmQgZG9jdW1lbnRhdGlvbiAoaGVyZWluYWZ0ZXIsCiAgKiAiU29mdHdhcmUiKSBpcyBhbiBVbnN1cHBvcnRlZCBwcm9wcmlldGFyeSB3b3JrIG9mIFN5bm9wc3lzLCBJbmMuIHVubGVzcwpAQCAtMTA2LDcgKzEwNiw3IEBACiB7CiAJZHdjX290Z19jb3JlX2lmX3QgKmNvcmVfaWYgPSAoZHdjX290Z19jb3JlX2lmX3QgKikgcHRyOwogCWNvcmVfaWYtPmFkcC5zZW5zZV90aW1lcl9zdGFydGVkID0gMDsKLQorCURXQ19QUklOVEYoIkFEUCBTRU5TRSBUSU1FT1VUXG4iKTsKIAlpZiAoY29yZV9pZi0+YWRwX2VuYWJsZSkgewogCQlkd2Nfb3RnX2FkcF9zZW5zZV9zdG9wKGNvcmVfaWYpOwogCQlkd2Nfb3RnX2FkcF9wcm9iZV9zdGFydChjb3JlX2lmKTsKQEAgLTE1NCw2ICsxNTQsNyBAQAogCQl9IGVsc2UgewogCQkJLyogRW5hYmxlIFBvd2VyIERvd24gTG9naWMgKi8KIAkJCWdwd3Jkbi5iLnBtdWludHNlbCA9IDE7CisJCQlncHdyZG4uYi5wbXVhY3R2ID0gMTsKIAkJCURXQ19NT0RJRllfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmdwd3JkbiwgMCwgZ3B3cmRuLmQzMik7CiAJCX0KIApAQCAtMTkwLDcgKzE5MSw3IEBACiAJewogCQlEV0NfUFJJTlRGKCJTQ0hFRFVMSU5HIFZCVVNPTiBUSU1FUlxuIik7CiAJCS8qIDEuMSBzZWNzICsgNjBtcyBuZWNlc3NhcnkgZm9yIGNpbF9oY2Rfc3RhcnQqLwotCQlEV0NfVElNRVJfU0NIRURVTEUoY29yZV9pZi0+YWRwLnZidXNvbl90aW1lciwgMjAwMCk7CisJCURXQ19USU1FUl9TQ0hFRFVMRShjb3JlX2lmLT5hZHAudmJ1c29uX3RpbWVyLCAxMTYwKTsKIAl9IGVsc2UgewogCQlEV0NfV0FSTigiVkJVU09OX1RJTUVSID0gJXBcbiIsY29yZV9pZi0+YWRwLnZidXNvbl90aW1lcik7CiAJfQpAQCAtMzAxLDYgKzMwMiw3IEBACiAJYWRwY3RsX2RhdGFfdCBhZHBjdGxfaW50ID0gey5kMzIgPSAwLCAuYi5hZHBfcHJiX2ludCA9IDEsCiAJCQkJCQkJCS5iLmFkcF9zbnNfaW50ID0gMSwgYi5hZHBfdG1vdXRfaW50fTsKICNlbmRpZgorCWR3Y19vdGdfZGlzYWJsZV9nbG9iYWxfaW50ZXJydXB0cyhjb3JlX2lmKTsKIAlEV0NfUFJJTlRGKCJBRFAgUHJvYmUgU3RhcnRcbiIpOwogCWNvcmVfaWYtPmFkcC5wcm9iZV9lbmFibGVkID0gMTsKIApAQCAtMzE1LDExICszMTcsMTMgQEAKIAlncHdyZG4uZDMyID0gRFdDX1JFQURfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmdwd3Jkbik7CiAKIAkvKiBJbiBIb3N0IG1vZGUgdW5tYXNrIFNSUCBkZXRlY3RlZCBpbnRlcnJ1cHQgKi8KKwlncHdyZG4uZDMyID0gMDsKKwlncHdyZG4uYi5zdHNfY2huZ2ludF9tc2sgPSAxOwogCWlmICghZ3B3cmRuLmIuaWRzdHMpIHsKLQkJZ3B3cmRuLmQzMiA9IDA7CiAJCWdwd3Jkbi5iLnNycF9kZXRfbXNrID0gMTsKLQkJRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z3B3cmRuLCAwLCBncHdyZG4uZDMyKTsKIAl9CisJRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z3B3cmRuLCAwLCBncHdyZG4uZDMyKTsKKwogCWFkcGN0bC5iLmFkcF90bW91dF9pbnRfbXNrID0gMTsKIAlhZHBjdGwuYi5hZHBfcHJiX2ludF9tc2sgPSAxOwogCWFkcGN0bC5iLnByYl9kc2NoZyA9IDE7CkBAIC0zMzQsOCArMzM4LDggQEAKIH0KIAogLyoqCi0gKiBTdGFydHMgdGhlIEFEUCBTZW5zZSB0aW1lciB0byBkZXRlY3QgaWYgQURQIFNlbnNlIGludGVycnVwdCBpcyBub3QgYXNzZXJ0ZWQgd2l0aGluCi0gKiAzIHNlY29uZHMuCisgKiBTdGFydHMgdGhlIEFEUCBTZW5zZSB0aW1lciB0byBkZXRlY3QgaWYgQURQIFNlbnNlIGludGVycnVwdCBpcyBub3QgYXNzZXJ0ZWQgCisgKiB3aXRoaW4gMyBzZWNvbmRzLgogICoKICAqIEBwYXJhbSBjb3JlX2lmIHRoZSBwb2ludGVyIHRvIGNvcmVfaWYgc3RydWN1cmUuCiAgKi8KQEAgLTM5MiwxOCArMzk2LDE1IEBACiAJYWRwY3RsX2RhdGFfdCBhZHBjdGw7CiAJRFdDX1BSSU5URigiU3RvcCBBRFAgcHJvYmVcbiIpOwogCWNvcmVfaWYtPmFkcC5wcm9iZV9lbmFibGVkID0gMDsKLQlhZHBjdGwuYi5hZHByZXMgPSAxOworCWNvcmVfaWYtPmFkcC5wcm9iZV9jb3VudGVyID0gMDsKKwlhZHBjdGwuZDMyID0gZHdjX290Z19hZHBfcmVhZF9yZWcoY29yZV9pZik7CisKKwlhZHBjdGwuYi5hZHBlbiA9IDA7CisJYWRwY3RsLmIuYWRwX3ByYl9pbnQgPSAxOworCWFkcGN0bC5iLmFkcF90bW91dF9pbnQgPSAxOworCWFkcGN0bC5iLmFkcF9zbnNfaW50ID0gMTsKIAlkd2Nfb3RnX2FkcF93cml0ZV9yZWcoY29yZV9pZiwgYWRwY3RsLmQzMik7CiAKLQkvKiogdG9kbzogY2hlY2sgaWYgQURQIGlzIG5lZWRlZCB0byBiZSByZXNldCAqLwotCXdoaWxlIChhZHBjdGwuYi5hZHByZXMpIHsKLQkJYWRwY3RsLmQzMiA9IGR3Y19vdGdfYWRwX3JlYWRfcmVnKGNvcmVfaWYpOwotCX0KLQotCWR3Y19vdGdfYWRwX3dyaXRlX3JlZyhjb3JlX2lmLCAwKTsKLQotCWR3Y19vdGdfZW5hYmxlX2dsb2JhbF9pbnRlcnJ1cHRzKGNvcmVfaWYpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQyMCwxMCArNDIxLDkgQEAKIAogCWFkcGN0bC5kMzIgPSBkd2Nfb3RnX2FkcF9yZWFkX3JlZ19maWx0ZXIoY29yZV9pZik7CiAJYWRwY3RsLmIuZW5hc25zID0gMDsKKwlhZHBjdGwuYi5hZHBfc25zX2ludCA9IDE7CiAJZHdjX290Z19hZHBfd3JpdGVfcmVnKGNvcmVfaWYsIGFkcGN0bC5kMzIpOwogCi0JZHdjX290Z19lbmFibGVfZ2xvYmFsX2ludGVycnVwdHMoY29yZV9pZik7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDM4LDcgKzQzOCw4IEBACiB7CiAJaHBydDBfZGF0YV90IGhwcnQwID0gey5kMzIgPSAwIH07CiAJaHBydDAuZDMyID0gZHdjX290Z19yZWFkX2hwcnQwKGNvcmVfaWYpOwotCQorCURXQ19QUklOVEYoIlR1cm4gb24gVkJVUyBmb3IgMS4xcywgcG9ydCBwb3dlciBpcyAlZFxuIiwgaHBydDAuYi5wcnRwd3IpOworCiAJaWYgKGhwcnQwLmIucHJ0cHdyID09IDApIHsKIAkJaHBydDAuYi5wcnRwd3IgPSAxOwogCQkvL0RXQ19XUklURV9SRUczMihjb3JlX2lmLT5ob3N0X2lmLT5ocHJ0MCwgaHBydDAuZDMyKTsKQEAgLTQ1MiwxOCArNDUzLDIzIEBACiAgKiB0byBwZXJmb3JtIGluaXRpYWwgYWN0aW9ucyBmb3IgQURQCiAgKgogICogQHBhcmFtIGNvcmVfaWYgdGhlIHBvaW50ZXIgdG8gY29yZV9pZiBzdHJ1Y3R1cmUuCisgKiBAcGFyYW0gaXNfaG9zdCAtIGZsYWcgZm9yIGN1cnJlbnQgbW9kZSBvZiBvcGVyYXRpb24gZWl0aGVyIGZyb20gR0lOVFNUUyBvciBHUFdSRE4KICAqLwotdm9pZCBkd2Nfb3RnX2FkcF9zdGFydChkd2Nfb3RnX2NvcmVfaWZfdCAqIGNvcmVfaWYpCit2b2lkIGR3Y19vdGdfYWRwX3N0YXJ0KGR3Y19vdGdfY29yZV9pZl90ICogY29yZV9pZiwgdWludDhfdCBpc19ob3N0KQogewogCWdwd3Jkbl9kYXRhX3QgZ3B3cmRuOwogCiAJRFdDX1BSSU5URigiQURQIEluaXRpYWwgU3RhcnRcbiIpOwogCWNvcmVfaWYtPmFkcC5hZHBfc3RhcnRlZCA9IDE7Ci0JCi0JaWYgKCFkd2Nfb3RnX2lzX2RldmljZV9tb2RlKGNvcmVfaWYpKSB7CQorCisJRFdDX1dSSVRFX1JFRzMyKCZjb3JlX2lmLT5jb3JlX2dsb2JhbF9yZWdzLT5naW50c3RzLCAweEZGRkZGRkZGKTsKKwlkd2Nfb3RnX2Rpc2FibGVfZ2xvYmFsX2ludGVycnVwdHMoY29yZV9pZik7CisJaWYgKGlzX2hvc3QpIHsKKwkJRFdDX1BSSU5URigiSE9TVCBNT0RFXG4iKTsKIAkJLyogRW5hYmxlIFBvd2VyIERvd24gTG9naWMgSW50ZXJydXB0Ki8KIAkJZ3B3cmRuLmQzMiA9IDA7CiAJCWdwd3Jkbi5iLnBtdWludHNlbCA9IDE7CisJCWdwd3Jkbi5iLnBtdWFjdHYgPSAxOwogCQlEV0NfTU9ESUZZX1JFRzMyKCZjb3JlX2lmLT5jb3JlX2dsb2JhbF9yZWdzLT5ncHdyZG4sIDAsIGdwd3Jkbi5kMzIpOwogCQkvKiBJbml0aWFsaXplIGZpcnN0IEFEUCBwcm9iZSB0byBvYnRhaW4gUmFtcCBUaW1lIHZhbHVlICovCiAJCWNvcmVfaWYtPmFkcC5pbml0aWFsX3Byb2JlID0gMTsKQEAgLTQ3MSwxMSArNDc3LDEzIEBACiAJfSBlbHNlIHsKIAkJZ290Z2N0bF9kYXRhX3QgZ290Z2N0bDsKIAkJZ290Z2N0bC5kMzIgPSBEV0NfUkVBRF9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z290Z2N0bCk7CisJCURXQ19QUklOVEYoIkRFVklDRSBNT0RFXG4iKTsKIAkJaWYgKGdvdGdjdGwuYi5ic2VzdmxkID09IDApIHsKIAkJCS8qIEVuYWJsZSBQb3dlciBEb3duIExvZ2ljIEludGVycnVwdCovCiAJCQlncHdyZG4uZDMyID0gMDsKIAkJCURXQ19QUklOVEYoIlZCVVMgaXMgbm90IHZhbGlkIC0gc3RhcnQgQURQIHByb2JlXG4iKTsKIAkJCWdwd3Jkbi5iLnBtdWludHNlbCA9IDE7CisJCQlncHdyZG4uYi5wbXVhY3R2ID0gMTsKIAkJCURXQ19NT0RJRllfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmdwd3JkbiwgMCwgZ3B3cmRuLmQzMik7CiAJCQljb3JlX2lmLT5hZHAuaW5pdGlhbF9wcm9iZSA9IDE7CiAJCQlkd2Nfb3RnX2FkcF9wcm9iZV9zdGFydChjb3JlX2lmKTsKQEAgLTUwMSw2ICs1MDksOCBAQAogCWNvcmVfaWYtPmFkcC5zZW5zZV9lbmFibGVkID0gMDsKIAljb3JlX2lmLT5hZHAuc2Vuc2VfdGltZXJfc3RhcnRlZCA9IDA7CiAJY29yZV9pZi0+YWRwLnZidXNvbl90aW1lcl9zdGFydGVkID0gMDsKKwljb3JlX2lmLT5hZHAucHJvYmVfY291bnRlciA9IDA7CisJY29yZV9pZi0+YWRwLmdwd3JkbiA9IDA7CiAJY29yZV9pZi0+YWRwLmF0dGFjaGVkID0gRFdDX09UR19BRFBfVU5LT1dOOwogCS8qIEluaXRpYWxpemUgdGltZXJzICovCiAJY29yZV9pZi0+YWRwLnNlbnNlX3RpbWVyID0KQEAgLTUxNSw2ICs1MjUsMTkgQEAKIAogdm9pZCBkd2Nfb3RnX2FkcF9yZW1vdmUoZHdjX290Z19jb3JlX2lmX3QgKiBjb3JlX2lmKQogeworCWdwd3Jkbl9kYXRhX3QgZ3B3cmRuID0geyAuZDMyID0gMCB9OworCWdwd3Jkbi5iLnBtdWludHNlbCA9IDE7CisJZ3B3cmRuLmIucG11YWN0diA9IDE7CisJRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z3B3cmRuLCBncHdyZG4uZDMyLCAwKTsKKworCWlmIChjb3JlX2lmLT5hZHAucHJvYmVfZW5hYmxlZCkJCQorCQlkd2Nfb3RnX2FkcF9wcm9iZV9zdG9wKGNvcmVfaWYpOworCWlmIChjb3JlX2lmLT5hZHAuc2Vuc2VfZW5hYmxlZCkJCQorCQlkd2Nfb3RnX2FkcF9zZW5zZV9zdG9wKGNvcmVfaWYpOworCWlmIChjb3JlX2lmLT5hZHAuc2Vuc2VfdGltZXJfc3RhcnRlZCkJCQorCQlEV0NfVElNRVJfQ0FOQ0VMKGNvcmVfaWYtPmFkcC5zZW5zZV90aW1lcik7CisJaWYgKGNvcmVfaWYtPmFkcC52YnVzb25fdGltZXJfc3RhcnRlZCkJCQorCQlEV0NfVElNRVJfQ0FOQ0VMKGNvcmVfaWYtPmFkcC52YnVzb25fdGltZXIpOwogCURXQ19USU1FUl9GUkVFKGNvcmVfaWYtPmFkcC5zZW5zZV90aW1lcik7CiAJRFdDX1RJTUVSX0ZSRUUoY29yZV9pZi0+YWRwLnZidXNvbl90aW1lcik7CiB9CkBAIC01NDQsOCArNTY3LDEyIEBACiAgKi8KIHN0YXRpYyB1aW50MzJfdCBjb21wYXJlX3RpbWVyX3ZhbHVlcyhkd2Nfb3RnX2NvcmVfaWZfdCAqIGNvcmVfaWYpCiB7Ci0JaWYgKGNvcmVfaWYtPmFkcC5wcm9iZV90aW1lcl92YWx1ZXNbMF0gPT0KLQkgICAgY29yZV9pZi0+YWRwLnByb2JlX3RpbWVyX3ZhbHVlc1sxXSkgeworCXVpbnQzMl90IGRpZmY7CisJaWYgKGNvcmVfaWYtPmFkcC5wcm9iZV90aW1lcl92YWx1ZXNbMF0+PWNvcmVfaWYtPmFkcC5wcm9iZV90aW1lcl92YWx1ZXNbMV0pCisJCQlkaWZmID0gY29yZV9pZi0+YWRwLnByb2JlX3RpbWVyX3ZhbHVlc1swXS1jb3JlX2lmLT5hZHAucHJvYmVfdGltZXJfdmFsdWVzWzFdOworCWVsc2UKKwkJCWRpZmYgPSBjb3JlX2lmLT5hZHAucHJvYmVfdGltZXJfdmFsdWVzWzFdLWNvcmVfaWYtPmFkcC5wcm9iZV90aW1lcl92YWx1ZXNbMF07ICAgCQorCWlmKGRpZmYgPCAyKSB7CiAJCXJldHVybiAwOwogCX0gZWxzZSB7CiAJCXJldHVybiAxOwpAQCAtNTU5LDE5ICs1ODYsMjUgQEAKIAkJCQkJCSB1aW50MzJfdCB2YWwpCiB7CiAJYWRwY3RsX2RhdGFfdCBhZHBjdGwgPSB7LmQzMiA9IDAgfTsKLQlncHdyZG5fZGF0YV90IGdwd3JkbjsKKwlncHdyZG5fZGF0YV90IGdwd3JkbiwgdGVtcDsKIAlhZHBjdGwuZDMyID0gdmFsOwogCisJdGVtcC5kMzIgPSBEV0NfUkVBRF9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z3B3cmRuKTsKKwljb3JlX2lmLT5hZHAucHJvYmVfY291bnRlcisrOworCWNvcmVfaWYtPmFkcC5ncHdyZG4gPSBEV0NfUkVBRF9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z3B3cmRuKTsKKwlpZiAoYWRwY3RsLmIucnRpbSA9PSAwICYmICF0ZW1wLmIuaWRzdHMpeworCQlEV0NfUFJJTlRGKCJSVElNIHZhbHVlIGlzIDBcbiIpOwkKKwkJZ290byBleGl0OworCX0KIAlpZiAoc2V0X3RpbWVyX3ZhbHVlKGNvcmVfaWYsIGFkcGN0bC5iLnJ0aW0pICYmCiAJICAgIGNvcmVfaWYtPmFkcC5pbml0aWFsX3Byb2JlKSB7Ci0JCWdwd3Jkbl9kYXRhX3QgdGVtcDsKIAkJY29yZV9pZi0+YWRwLmluaXRpYWxfcHJvYmUgPSAwOwogCQlkd2Nfb3RnX2FkcF9wcm9iZV9zdG9wKGNvcmVfaWYpOwotCQl0ZW1wLmQzMiA9IERXQ19SRUFEX1JFRzMyKCZjb3JlX2lmLT5jb3JlX2dsb2JhbF9yZWdzLT5ncHdyZG4pOwotCiAJCWdwd3Jkbi5kMzIgPSAwOworCQlncHdyZG4uYi5wbXVhY3R2ID0gMTsKIAkJZ3B3cmRuLmIucG11aW50c2VsID0gMTsKIAkJRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z3B3cmRuLCBncHdyZG4uZDMyLCAwKTsKKwkJRFdDX1dSSVRFX1JFRzMyKCZjb3JlX2lmLT5jb3JlX2dsb2JhbF9yZWdzLT5naW50c3RzLCAweEZGRkZGRkZGKTsKIAogCQkvKiBjaGVjayB3aGljaCB2YWx1ZSBpcyBmb3IgZGV2aWNlIG1vZGUgYW5kIHdoaWNoIGZvciBIb3N0IG1vZGUgKi8KIAkJaWYgKCF0ZW1wLmIuaWRzdHMpIHsJLyogY29uc2lkZXJlZCBob3N0IG1vZGUgdmFsdWUgaXMgMCAqLwpAQCAtNTg4LDE4ICs2MjEsMTQgQEAKIAkJCS8qCiAJCQkgKiBJbml0aWF0ZSBTUlAgYWZ0ZXIgaW5pdGlhbCBBRFAgcHJvYmUuCiAJCQkgKi8KLQkJCWNvcmVfaWYtPm9wX3N0YXRlID0gQl9QRVJJUEhFUkFMOwotCQkJZHdjX290Z19jb3JlX2luaXQoY29yZV9pZik7CiAJCQlkd2Nfb3RnX2VuYWJsZV9nbG9iYWxfaW50ZXJydXB0cyhjb3JlX2lmKTsKLQkJCWNpbF9wY2Rfc3RhcnQoY29yZV9pZik7CiAJCQlkd2Nfb3RnX2luaXRpYXRlX3NycChjb3JlX2lmKTsKIAkJfQotCX0gZWxzZSB7CisJfSBlbHNlIGlmIChjb3JlX2lmLT5hZHAucHJvYmVfY291bnRlciA+IDIpewogCQlncHdyZG4uZDMyID0gRFdDX1JFQURfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmdwd3Jkbik7Ci0JCWR3Y19vdGdfZHVtcF9nbG9iYWxfcmVnaXN0ZXJzKGNvcmVfaWYpOwotCQlkd2Nfb3RnX2R1bXBfaG9zdF9yZWdpc3RlcnMoY29yZV9pZik7CiAJCWlmIChjb21wYXJlX3RpbWVyX3ZhbHVlcyhjb3JlX2lmKSkgewotCQkvL2NvcmVfaWYtPmFkcC5hdHRhY2hlZCA9IERXQ19PVEdfQURQX0FUVEFDSEVEOworCQkJRFdDX1BSSU5URigiRGlmZmVyZW5jZSBpbiB0aW1lciB2YWx1ZXMgISEhIFxuIik7CisvLyAgICAgICAgICAgICAgICAgICAgICBjb3JlX2lmLT5hZHAuYXR0YWNoZWQgPSBEV0NfT1RHX0FEUF9BVFRBQ0hFRDsKIAkJCWR3Y19vdGdfYWRwX3Byb2JlX3N0b3AoY29yZV9pZik7CiAKIAkJCS8qIFBvd2VyIG9uIHRoZSBjb3JlICovCkBAIC02MTAsMTAgKzYzOSwxMSBAQAogCQkJfQogCiAJCQkvKiBjaGVjayB3aGljaCB2YWx1ZSBpcyBmb3IgZGV2aWNlIG1vZGUgYW5kIHdoaWNoIGZvciBIb3N0IG1vZGUgKi8KLQkJCWlmICghZ3B3cmRuLmIuaWRzdHMpIHsJLyogY29uc2lkZXJlZCBob3N0IG1vZGUgdmFsdWUgaXMgMCAqLworCQkJaWYgKCF0ZW1wLmIuaWRzdHMpIHsJLyogY29uc2lkZXJlZCBob3N0IG1vZGUgdmFsdWUgaXMgMCAqLwogCQkJCS8qIERpc2FibGUgSW50ZXJydXB0IGZyb20gUG93ZXIgRG93biBMb2dpYyAqLwogCQkJCWdwd3Jkbi5kMzIgPSAwOwogCQkJCWdwd3Jkbi5iLnBtdWludHNlbCA9IDE7CisJCQkJZ3B3cmRuLmIucG11YWN0diA9IDE7CiAJCQkJRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+CiAJCQkJCQkgZ3B3cmRuLCBncHdyZG4uZDMyLCAwKTsKIApAQCAtNjI1LDYgKzY1NSw3IEBACiAJCQkJZHdjX290Z19lbmFibGVfZ2xvYmFsX2ludGVycnVwdHMoY29yZV9pZik7CiAJCQkJY2lsX2hjZF9zdGFydChjb3JlX2lmKTsKIAkJCX0gZWxzZSB7CisJCQkJZ290Z2N0bF9kYXRhX3QgZ290Z2N0bDsKIAkJCQkvKiBNYXNrIFNSUCBkZXRlY3RlZCBpbnRlcnJ1cHQgZnJvbSBQb3dlciBEb3duIExvZ2ljICovCiAJCQkJZ3B3cmRuLmQzMiA9IDA7CiAJCQkJZ3B3cmRuLmIuc3JwX2RldF9tc2sgPSAxOwpAQCAtNjMzLDYgKzY2NCw3IEBACiAKIAkJCQkvKiBEaXNhYmxlIFBvd2VyIERvd24gTG9naWMgKi8KIAkJCQlncHdyZG4uZDMyID0gMDsKKwkJCQlncHdyZG4uYi5wbXVpbnRzZWwgPSAxOwogCQkJCWdwd3Jkbi5iLnBtdWFjdHYgPSAxOwogCQkJCURXQ19NT0RJRllfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPgogCQkJCQkJIGdwd3JkbiwgZ3B3cmRuLmQzMiwgMCk7CkBAIC02NDUsNyArNjc3LDggQEAKIAkJCQlkd2Nfb3RnX2VuYWJsZV9nbG9iYWxfaW50ZXJydXB0cyhjb3JlX2lmKTsKIAkJCQljaWxfcGNkX3N0YXJ0KGNvcmVfaWYpOwogCi0JCQkJaWYgKCFncHdyZG4uYi5ic2Vzc3ZsZCkgeworCQkJCWdvdGdjdGwuZDMyID0gRFdDX1JFQURfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmdvdGdjdGwpOworCQkJCWlmICghZ290Z2N0bC5iLmJzZXN2bGQpIHsKIAkJCQkJZHdjX290Z19pbml0aWF0ZV9zcnAoY29yZV9pZik7CiAJCQkJfQogCQkJfQpAQCAtNjcyLDYgKzcwNSwxMiBAQAogCQkJfQogCQl9CiAJfQorZXhpdDoKKwkvKiBDbGVhciBpbnRlcnJ1cHQgKi8KKwlhZHBjdGwuZDMyID0gZHdjX290Z19hZHBfcmVhZF9yZWcoY29yZV9pZik7CisJYWRwY3RsLmIuYWRwX3ByYl9pbnQgPSAxOworCWR3Y19vdGdfYWRwX3dyaXRlX3JlZyhjb3JlX2lmLCBhZHBjdGwuZDMyKTsKKwogCXJldHVybiAwOwogfQogCkBAIC02ODAsMTEgKzcxOSwxNyBAQAogICovCiBzdGF0aWMgaW50MzJfdCBkd2Nfb3RnX2FkcF9oYW5kbGVfc25zX2ludHIoZHdjX290Z19jb3JlX2lmX3QgKiBjb3JlX2lmKQogeworCWFkcGN0bF9kYXRhX3QgYWRwY3RsOwogCS8qIFN0b3AgQURQIFNlbnNlIHRpbWVyICovCiAJRFdDX1RJTUVSX0NBTkNFTChjb3JlX2lmLT5hZHAuc2Vuc2VfdGltZXIpOwogCiAJLyogUmVzdGFydCBBRFAgU2Vuc2UgdGltZXIgKi8KIAlkd2Nfb3RnX2FkcF9zZW5zZV90aW1lcl9zdGFydChjb3JlX2lmKTsKKwkKKwkvKiBDbGVhciBpbnRlcnJ1cHQgKi8KKwlhZHBjdGwuZDMyID0gZHdjX290Z19hZHBfcmVhZF9yZWcoY29yZV9pZik7CisJYWRwY3RsLmIuYWRwX3Nuc19pbnQgPSAxOworCWR3Y19vdGdfYWRwX3dyaXRlX3JlZyhjb3JlX2lmLCBhZHBjdGwuZDMyKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjk5LDYgKzc0NCwxMSBAQAogCWFkcGN0bC5kMzIgPSB2YWw7CiAJc2V0X3RpbWVyX3ZhbHVlKGNvcmVfaWYsIGFkcGN0bC5iLnJ0aW0pOwogCQorCS8qIENsZWFyIGludGVycnVwdCAqLworCWFkcGN0bC5kMzIgPSBkd2Nfb3RnX2FkcF9yZWFkX3JlZyhjb3JlX2lmKTsKKwlhZHBjdGwuYi5hZHBfdG1vdXRfaW50ID0gMTsKKwlkd2Nfb3RnX2FkcF93cml0ZV9yZWcoY29yZV9pZiwgYWRwY3RsLmQzMik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzEyLDE1ICs3NjIsMTQgQEAKIAlhZHBjdGxfZGF0YV90IGFkcGN0bCA9IHsuZDMyID0gMH07CiAKIAlhZHBjdGwuZDMyID0gZHdjX290Z19hZHBfcmVhZF9yZWcoY29yZV9pZik7CisJRFdDX1BSSU5URigiQURQQ1RMID0gJTA4eFxuIixhZHBjdGwuZDMyKTsKIAogCWlmIChhZHBjdGwuYi5hZHBfc25zX2ludCAmIGFkcGN0bC5iLmFkcF9zbnNfaW50X21zaykgewogCQlEV0NfUFJJTlRGKCJBRFAgU2Vuc2UgaW50ZXJydXB0XG4iKTsKLQkJYWRwY3RsLmIuYWRwX3Nuc19pbnQgPSAxOwogCQlyZXR2YWwgfD0gZHdjX290Z19hZHBfaGFuZGxlX3Nuc19pbnRyKGNvcmVfaWYpOwogCX0KIAlpZiAoYWRwY3RsLmIuYWRwX3Rtb3V0X2ludCAmIGFkcGN0bC5iLmFkcF90bW91dF9pbnRfbXNrKSB7CiAJCURXQ19QUklOVEYoIkFEUCB0aW1lb3V0IGludGVycnVwdFxuIik7Ci0JCWFkcGN0bC5iLmFkcF90bW91dF9pbnQgPSAxOwogCQlyZXR2YWwgfD0gZHdjX290Z19hZHBfaGFuZGxlX3ByYl90bW91dF9pbnRyKGNvcmVfaWYsIGFkcGN0bC5kMzIpOwogCX0KIAlpZiAoYWRwY3RsLmIuYWRwX3ByYl9pbnQgJiBhZHBjdGwuYi5hZHBfcHJiX2ludF9tc2spIHsKQEAgLTcyOSw3ICs3NzgsOSBAQAogCQlyZXR2YWwgfD0gZHdjX290Z19hZHBfaGFuZGxlX3ByYl9pbnRyKGNvcmVfaWYsIGFkcGN0bC5kMzIpOwogCX0KIAotCWR3Y19vdGdfYWRwX21vZGlmeV9yZWcoY29yZV9pZiwgYWRwY3RsLmQzMiwgMCk7CisvLwlkd2Nfb3RnX2FkcF9tb2RpZnlfcmVnKGNvcmVfaWYsIGFkcGN0bC5kMzIsIDApOworCS8vZHdjX290Z19hZHBfd3JpdGVfcmVnKGNvcmVfaWYsIGFkcGN0bC5kMzIpOworCURXQ19QUklOVEYoIlJFVFVSTiBGUk9NIEFEUCBJU1JcbiIpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTc0MCwxNSArNzkxLDE1IEBACiAgKi8KIGludDMyX3QgZHdjX290Z19hZHBfaGFuZGxlX3NycF9pbnRyKGR3Y19vdGdfY29yZV9pZl90ICogY29yZV9pZikKIHsKLQlocHJ0MF9kYXRhX3QgaHBydDA7Ci0JZ3B3cmRuX2RhdGFfdCBncHdyZG47CiAKICNpZm5kZWYgRFdDX0hPU1RfT05MWQorCWhwcnQwX2RhdGFfdCBocHJ0MDsKKwlncHdyZG5fZGF0YV90IGdwd3JkbjsKIAlEV0NfREVCVUdQTChEQkdfQU5ZLCAiKysgUG93ZXIgRG93biBMb2dpYyBTZXNzaW9uIFJlcXVlc3QgSW50ZXJydXB0KytcbiIpOwogCiAJZ3B3cmRuLmQzMiA9IERXQ19SRUFEX1JFRzMyKCZjb3JlX2lmLT5jb3JlX2dsb2JhbF9yZWdzLT5ncHdyZG4pOwogCS8qIGNoZWNrIHdoaWNoIHZhbHVlIGlzIGZvciBkZXZpY2UgbW9kZSBhbmQgd2hpY2ggZm9yIEhvc3QgbW9kZSAqLwotCWlmIChncHdyZG4uYi5pZHN0cykgewkvKiBjb25zaWRlcmVkIGhvc3QgbW9kZSB2YWx1ZSBpcyAxICovCisJaWYgKCFncHdyZG4uYi5pZHN0cykgewkvKiBjb25zaWRlcmVkIGhvc3QgbW9kZSB2YWx1ZSBpcyAwICovCiAJCURXQ19QUklOVEYoIlNSUDogSG9zdCBtb2RlXG4iKTsKIAogCQlpZiAoY29yZV9pZi0+YWRwX2VuYWJsZSkgewpAQCAtNzc2LDcgKzgyNyw3IEBACiAJCSAqIGlmIGNvbm5lY3QgZG9lcyBub3Qgb2NjdXIgd2l0aGluIDEwIHNlY29uZHMuICovCiAJCWNpbF9oY2Rfc2Vzc2lvbl9zdGFydChjb3JlX2lmKTsKIAl9IGVsc2UgewotCQlEV0NfUFJJTlRGKCJTUlA6IERldmljZSBtb2RlXG4iKTsKKwkJRFdDX1BSSU5URigiU1JQOiBEZXZpY2UgbW9kZSAlc1xuIiwgX19GVU5DVElPTl9fKTsKIAkJaWYgKGNvcmVfaWYtPmFkcF9lbmFibGUpIHsKIAkJCWR3Y19vdGdfYWRwX3Byb2JlX3N0b3AoY29yZV9pZik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19hZHAuaCBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19hZHAuaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGFiMzZmM2EuLmQ4YzNmODUKLS0tIGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX2FkcC5oCisrKyBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19hZHAuaApAQCAtMSw4ICsxLDggQEAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiAkRmlsZTogLy9kd2gvdXNiX2lpcC9kZXYvc29mdHdhcmUvb3RnL2xpbnV4L2RyaXZlcnMvZHdjX290Z19hZHAuaCAkCi0gKiAkUmV2aXNpb246ICM2ICQKLSAqICREYXRlOiAyMDExLzA1LzE3ICQKLSAqICRDaGFuZ2U6IDE3NzQxMTAgJAorICogJFJldmlzaW9uOiAjNyAkCisgKiAkRGF0ZTogMjAxMS8xMC8yNCAkCisgKiAkQ2hhbmdlOiAxODcxMTU5ICQKICAqCiAgKiBTeW5vcHN5cyBIUyBPVEcgTGludXggU29mdHdhcmUgRHJpdmVyIGFuZCBkb2N1bWVudGF0aW9uIChoZXJlaW5hZnRlciwKICAqICJTb2Z0d2FyZSIpIGlzIGFuIFVuc3VwcG9ydGVkIHByb3ByaWV0YXJ5IHdvcmsgb2YgU3lub3BzeXMsIEluYy4gdW5sZXNzCkBAIC01Nyw2ICs1Nyw4IEBACiAJZHdjX3RpbWVyX3QgKnZidXNvbl90aW1lcjsKIAl1aW50MzJfdCB2YnVzb25fdGltZXJfc3RhcnRlZDsKIAl1aW50MzJfdCBhdHRhY2hlZDsKKwl1aW50MzJfdCBwcm9iZV9jb3VudGVyOworCXVpbnQzMl90IGdwd3JkbjsKIH0gZHdjX290Z19hZHBfdDsKIAogLyoqCkBAIC02OSw3ICs3MSw3IEBACiBleHRlcm4gdWludDMyX3QgZHdjX290Z19hZHBfc2Vuc2Vfc3RhcnQoZHdjX290Z19jb3JlX2lmX3QgKiBjb3JlX2lmKTsKIGV4dGVybiB1aW50MzJfdCBkd2Nfb3RnX2FkcF9wcm9iZV9zdG9wKGR3Y19vdGdfY29yZV9pZl90ICogY29yZV9pZik7CiBleHRlcm4gdWludDMyX3QgZHdjX290Z19hZHBfc2Vuc2Vfc3RvcChkd2Nfb3RnX2NvcmVfaWZfdCAqIGNvcmVfaWYpOwotZXh0ZXJuIHZvaWQgZHdjX290Z19hZHBfc3RhcnQoZHdjX290Z19jb3JlX2lmX3QgKiBjb3JlX2lmKTsKK2V4dGVybiB2b2lkIGR3Y19vdGdfYWRwX3N0YXJ0KGR3Y19vdGdfY29yZV9pZl90ICogY29yZV9pZiwgdWludDhfdCBpc19ob3N0KTsKIGV4dGVybiB2b2lkIGR3Y19vdGdfYWRwX2luaXQoZHdjX290Z19jb3JlX2lmX3QgKiBjb3JlX2lmKTsKIGV4dGVybiB2b2lkIGR3Y19vdGdfYWRwX3JlbW92ZShkd2Nfb3RnX2NvcmVfaWZfdCAqIGNvcmVfaWYpOwogZXh0ZXJuIGludDMyX3QgZHdjX290Z19hZHBfaGFuZGxlX2ludHIoZHdjX290Z19jb3JlX2lmX3QgKiBjb3JlX2lmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19hdHRyLmMgYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfYXR0ci5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNGMzOGRhODEuLjE3YjBjMjMKLS0tIGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX2F0dHIuYworKysgYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfYXR0ci5jCkBAIC0yMTQsMjggKzIxNCwyOCBAQAogCiAgPHRyPgogIDx0ZD4gcmVtX3dha2V1cF9wd3JkbiA8L3RkPgotIDx0ZD4gT24gcmVhZCwgc2hvd3MgdGhlIHN0YXR1cyBjb3JlIC0gaGliZXJuYXRlZCBvciBub3QuIE9uIHdyaXRlLCBpbml0aWF0ZXMgCisgPHRkPiBPbiByZWFkLCBzaG93cyB0aGUgc3RhdHVzIGNvcmUgLSBoaWJlcm5hdGVkIG9yIG5vdC4gT24gd3JpdGUsIGluaXRpYXRlcwogIGEgcmVtb3RlIHdha2V1cCBvZiB0aGUgZGV2aWNlIGZyb20gSGliZXJuYXRpb24uIDwvdGQ+CiAgPHRkPiBSZWFkL1dyaXRlPC90ZD4KICA8L3RyPgogCiAgPHRyPgogIDx0ZD4gbW9kZV9jaF90aW1fZW4gPC90ZD4KLSA8dGQ+IFRoaXMgYml0IGlzIHVzZWQgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIGhvc3QgY29yZSB0byB3YWl0IGZvciAyMDAgUEhZIAorIDx0ZD4gVGhpcyBiaXQgaXMgdXNlZCB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgaG9zdCBjb3JlIHRvIHdhaXQgZm9yIDIwMCBQSFkKICBjbG9jayBjeWNsZXMgYXQgdGhlIGVuZCBvZiBSZXN1bWUgdG8gY2hhbmdlIHRoZSBvcG1vZGUgc2lnbmFsIHRvIHRoZSBQSFkgdG8gMDAKICBhZnRlciBTdXNwZW5kIG9yIExQTS4gPC90ZD4KICA8dGQ+IFJlYWQvV3JpdGU8L3RkPgogIDwvdHI+Ci0gCisKICA8dHI+CiAgPHRkPiBmcl9pbnRlcnZhbCA8L3RkPgotIDx0ZD4gT24gcmVhZCwgc2hvd3MgdGhlIHZhbHVlIG9mIEhGSVIgRnJhbWUgSW50ZXJ2YWwuIE9uIHdyaXRlLCBkeW5hbWljYWxseSAKKyA8dGQ+IE9uIHJlYWQsIHNob3dzIHRoZSB2YWx1ZSBvZiBIRklSIEZyYW1lIEludGVydmFsLiBPbiB3cml0ZSwgZHluYW1pY2FsbHkKICByZWxvYWQgSEZJUiByZWdpc3RlciBkdXJpbmcgcnVudGltZS4gVGhlIGFwcGxpY2F0aW9uIGNhbiB3cml0ZSBhIHZhbHVlIHRvIHRoaXMKLSByZWdpc3RlciBvbmx5IGFmdGVyIHRoZSBQb3J0IEVuYWJsZSBiaXQgb2YgdGhlIEhvc3QgUG9ydCBDb250cm9sIGFuZCBTdGF0dXMgCisgcmVnaXN0ZXIgb25seSBhZnRlciB0aGUgUG9ydCBFbmFibGUgYml0IG9mIHRoZSBIb3N0IFBvcnQgQ29udHJvbCBhbmQgU3RhdHVzCiAgcmVnaXN0ZXIgKEhQUlQuUHJ0RW5hUG9ydCkgaGFzIGJlZW4gc2V0IDwvdGQ+CiAgPHRkPiBSZWFkL1dyaXRlPC90ZD4KICA8L3RyPgotIAorCiAgPHRyPgogIDx0ZD4gZGlzY29ubmVjdF91cyA8L3RkPgogIDx0ZD4gT24gcmVhZCwgc2hvd3MgdGhlIHN0YXR1cyBvZiBkaXNjb25uZWN0X2RldmljZV91cy4gT24gd3JpdGUsIHNldHMgZGlzY29ubmVjdF91cwpAQCAtMzY1LDcgKzM2NSw3IEBACiAjZGVmaW5lIERXQ19PVEdfREVWSUNFX0FUVFJfQklURklFTERfU0hPVyhfb3RnX2F0dHJfbmFtZV8sX3N0cmluZ18pIFwKIHN0YXRpYyBzc2l6ZV90IF9vdGdfYXR0cl9uYW1lXyMjX3Nob3cgKHN0cnVjdCBkZXZpY2UgKl9kZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKIHsgXAotCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CQlcCisJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfcGxhdGRhdGEoX2Rldik7CQlcCiAJdWludDMyX3QgdmFsOyBcCiAJdmFsID0gZHdjX290Z19nZXRfIyNfb3RnX2F0dHJfbmFtZV8gKG90Z19kZXYtPmNvcmVfaWYpOyBcCiAJcmV0dXJuIHNwcmludGYgKGJ1ZiwgIiVzID0gMHgleFxuIiwgX3N0cmluZ18sIHZhbCk7IFwKQEAgLTM3NCw3ICszNzQsNyBAQAogc3RhdGljIHNzaXplX3QgX290Z19hdHRyX25hbWVfIyNfc3RvcmUgKHN0cnVjdCBkZXZpY2UgKl9kZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCiAJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KSBcCiB7IFwKLQlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOyBcCisJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfcGxhdGRhdGEoX2Rldik7IFwKIAl1aW50MzJfdCBzZXQgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDE2KTsgXAogCWR3Y19vdGdfc2V0XyMjX290Z19hdHRyX25hbWVfKG90Z19kZXYtPmNvcmVfaWYsIHNldCk7XAogCXJldHVybiBjb3VudDsgXApAQCAtNDI4LDcgKzQyOCw3IEBACiAjZGVmaW5lIERXQ19PVEdfREVWSUNFX0FUVFJfUkVHX1NIT1coX290Z19hdHRyX25hbWVfLF9zdHJpbmdfKSBcCiBzdGF0aWMgc3NpemVfdCBfb3RnX2F0dHJfbmFtZV8jI19zaG93IChzdHJ1Y3QgZGV2aWNlICpfZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKSBcCiB7IFwKLQlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOyBcCisJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfcGxhdGRhdGEoX2Rldik7IFwKIAl1aW50MzJfdCB2YWw7IFwKIAl2YWwgPSBkd2Nfb3RnX2dldF8jI19vdGdfYXR0cl9uYW1lXyAob3RnX2Rldi0+Y29yZV9pZik7IFwKIAlyZXR1cm4gc3ByaW50ZiAoYnVmLCAiJXMgPSAweCUwOHhcbiIsIF9zdHJpbmdfLCB2YWwpOyBcCkBAIC00MzcsNyArNDM3LDcgQEAKIHN0YXRpYyBzc2l6ZV90IF9vdGdfYXR0cl9uYW1lXyMjX3N0b3JlIChzdHJ1Y3QgZGV2aWNlICpfZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgXAogCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkgXAogeyBcCi0JZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsgXAorCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X3BsYXRkYXRhKF9kZXYpOyBcCiAJdWludDMyX3QgdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxNik7IFwKIAlkd2Nfb3RnX3NldF8jI19vdGdfYXR0cl9uYW1lXyAob3RnX2Rldi0+Y29yZV9pZiwgdmFsKTsgXAogCXJldHVybiBjb3VudDsgXApAQCAtNDc3LDcgKzQ3Nyw3IEBACiAjZWxpZiBkZWZpbmVkKFBDSV9JTlRFUkZBQ0UpCiAJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKICNlbHNlCi0JZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9wbGF0ZGF0YShfZGV2KTsKICNlbmRpZgogCiAJcmV0dXJuIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKCIweEZGRkZGRkZGXG4iKSArIDEsICIweCUwOHhcbiIsCkBAIC00OTcsNyArNDk3LDcgQEAKICNlbGlmIGRlZmluZWQoUENJX0lOVEVSRkFDRSkKIAlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOwogI2Vsc2UKLQlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X3BsYXRkYXRhKF9kZXYpOwogI2VuZGlmCiAKIAl1aW50MzJfdCBvZmZzZXQgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDE2KTsKQEAgLTUwNiw3ICs1MDYsNyBAQAogI2VsaWYgIGRlZmluZWQoUENJX0lOVEVSRkFDRSkKIAlpZiAob2Zmc2V0IDwgMHgwMDA0MDAwMCkgewogI2Vsc2UKLQlpZiAob2Zmc2V0IDwgMHgwMDA0MDAwMCkgewkJCisJaWYgKG9mZnNldCA8IDB4MDAwNDAwMDApIHsKICNlbmRpZgogCQlvdGdfZGV2LT5vc19kZXAucmVnX29mZnNldCA9IG9mZnNldDsKIAl9IGVsc2UgewpAQCAtNTMxLDcgKzUzMSw3IEBACiAjZWxpZiBkZWZpbmVkKFBDSV9JTlRFUkZBQ0UpCiAJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKICNlbHNlCi0JZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9wbGF0ZGF0YShfZGV2KTsKICNlbmRpZgogCiAJdWludDMyX3QgdmFsOwpAQCAtNTY3LDcgKzU2Nyw3IEBACiAjZWxpZiBkZWZpbmVkKFBDSV9JTlRFUkZBQ0UpCiAJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKICNlbHNlCi0JZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9wbGF0ZGF0YShfZGV2KTsKICNlbmRpZgogCiAJdm9sYXRpbGUgdWludDMyX3QgKmFkZHI7CkBAIC02NDQsNyArNjQ0LDcgQEAKICNlbGlmIGRlZmluZWQoUENJX0lOVEVSRkFDRSkKIAlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOwogI2Vsc2UKLQlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X3BsYXRkYXRhKF9kZXYpOwogI2VuZGlmCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiSHN0TmVnU2NzID0gMHgleFxuIiwKIAkJICAgICAgIGR3Y19vdGdfZ2V0X2hucHN0YXR1cyhvdGdfZGV2LT5jb3JlX2lmKSk7CkBAIC02NjMsNyArNjYzLDcgQEAKICNlbGlmIGRlZmluZWQoUENJX0lOVEVSRkFDRSkKIAlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOwogI2Vsc2UKLQlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X3BsYXRkYXRhKF9kZXYpOwogI2VuZGlmCiAJdWludDMyX3QgaW4gPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDE2KTsKIAlkd2Nfb3RnX3NldF9obnByZXEob3RnX2Rldi0+Y29yZV9pZiwgaW4pOwpAQCAtNjg4LDcgKzY4OCw3IEBACiAjZWxpZiBkZWZpbmVkKFBDSV9JTlRFUkZBQ0UpCiAJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKICNlbHNlCi0JZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9wbGF0ZGF0YShfZGV2KTsKICNlbmRpZgogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIlNlc1JlcVNjcyA9IDB4JXhcbiIsCiAJCSAgICAgICBkd2Nfb3RnX2dldF9zcnBzdGF0dXMob3RnX2Rldi0+Y29yZV9pZikpOwpAQCAtNzExLDcgKzcxMSw3IEBACiAjZWxpZiBkZWZpbmVkKFBDSV9JTlRFUkZBQ0UpCiAJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKICNlbHNlCi0JZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9wbGF0ZGF0YShfZGV2KTsKICNlbmRpZgogCWR3Y19vdGdfcGNkX2luaXRpYXRlX3NycChvdGdfZGV2LT5wY2QpOwogI2VuZGlmCkBAIC03MzUsNyArNzM1LDcgQEAKICNlbGlmIGRlZmluZWQoUENJX0lOVEVSRkFDRSkKIAlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOwogI2Vsc2UKLQlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X3BsYXRkYXRhKF9kZXYpOwogI2VuZGlmCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiQnVzIFBvd2VyID0gMHgleFxuIiwKIAkJICAgICAgIGR3Y19vdGdfZ2V0X3BydHBvd2VyKG90Z19kZXYtPmNvcmVfaWYpKTsKQEAgLTc1NCw3ICs3NTQsNyBAQAogI2VsaWYgZGVmaW5lZChQQ0lfSU5URVJGQUNFKQogCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CiAjZWxzZQotCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfcGxhdGRhdGEoX2Rldik7CiAjZW5kaWYKIAl1aW50MzJfdCBvbiA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTYpOwogCWR3Y19vdGdfc2V0X3BydHBvd2VyKG90Z19kZXYtPmNvcmVfaWYsIG9uKTsKQEAgLTc3OCw3ICs3NzgsNyBAQAogI2VsaWYgZGVmaW5lZChQQ0lfSU5URVJGQUNFKQogCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CiAjZWxzZQotCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfcGxhdGRhdGEoX2Rldik7CiAjZW5kaWYKIAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIkJ1cyBTdXNwZW5kID0gMHgleFxuIiwKQEAgLTc5OCw3ICs3OTgsNyBAQAogI2VsaWYgZGVmaW5lZChQQ0lfSU5URVJGQUNFKQogCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CiAjZWxzZQotCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfcGxhdGRhdGEoX2Rldik7CiAjZW5kaWYKIAogCXVpbnQzMl90IGluID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxNik7CkBAIC04MjAsNyArODIwLDcgQEAKICNlbGlmIGRlZmluZWQoUENJX0lOVEVSRkFDRSkKIAlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOwogI2Vsc2UKLQlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X3BsYXRkYXRhKF9kZXYpOwogI2VuZGlmCiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICJNb2RlIENoYW5nZSBSZWFkeSBUaW1lciBFbmFibGUgPSAweCV4XG4iLApAQCAtODQwLDcgKzg0MCw3IEBACiAjZWxpZiBkZWZpbmVkKFBDSV9JTlRFUkZBQ0UpCiAJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKICNlbHNlCi0JZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9wbGF0ZGF0YShfZGV2KTsKICNlbmRpZgogCiAJdWludDMyX3QgaW4gPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDE2KTsKQEAgLTg2Miw3ICs4NjIsNyBAQAogI2VsaWYgZGVmaW5lZChQQ0lfSU5URVJGQUNFKQogCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CiAjZWxzZQotCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfcGxhdGRhdGEoX2Rldik7CiAjZW5kaWYKIAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIkZyYW1lIEludGVydmFsID0gMHgleFxuIiwKQEAgLTg4Miw3ICs4ODIsNyBAQAogI2VsaWYgZGVmaW5lZChQQ0lfSU5URVJGQUNFKQogCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CiAjZWxzZQotCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfcGxhdGRhdGEoX2Rldik7CiAjZW5kaWYKIAogCXVpbnQzMl90IGluID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CkBAIC05MDUsNyArOTA1LDcgQEAKICNlbGlmIGRlZmluZWQoUENJX0lOVEVSRkFDRSkKIAlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOwogI2Vsc2UKLQlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X3BsYXRkYXRhKF9kZXYpOwogI2VuZGlmCiAKIAlyZXR1cm4gc3ByaW50ZihidWYsCkBAIC05MzUsNyArOTM1LDcgQEAKICNlbGlmIGRlZmluZWQoUENJX0lOVEVSRkFDRSkKIAlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOwogI2Vsc2UKLQlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X3BsYXRkYXRhKF9kZXYpOwogI2VuZGlmCiAKIAl1aW50MzJfdCB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDE2KTsKQEAgLTk1Myw3ICs5NTMsNyBAQAogCSAgICByZW1vdGVfd2FrZXVwX3N0b3JlKTsKIAogLyoqCi0gKiBTaG93IHRoZSB3aGV0aGVyIGNvcmUgaXMgaGliZXJuYXRlZCBvciBub3QuIAkJCQkJCisgKiBTaG93IHRoZSB3aGV0aGVyIGNvcmUgaXMgaGliZXJuYXRlZCBvciBub3QuCiAgKi8KIHN0YXRpYyBzc2l6ZV90IHJlbV93YWtldXBfcHdyZG5fc2hvdyhzdHJ1Y3QgZGV2aWNlICpfZGV2LAogCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTk2NSw3ICs5NjUsNyBAQAogI2VsaWYgZGVmaW5lZChQQ0lfSU5URVJGQUNFKQogCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CiAjZWxzZQotCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfcGxhdGRhdGEoX2Rldik7CiAjZW5kaWYKIAlpZiAoZHdjX290Z19nZXRfY29yZV9zdGF0ZShvdGdfZGV2LT5jb3JlX2lmKSkgewogCQlEV0NfUFJJTlRGKCJDb3JlIGlzIGluIGhpYmVybmF0aW9uXG4iKTsKQEAgLTk5Myw3ICs5OTMsNyBAQAogI2VsaWYgZGVmaW5lZChQQ0lfSU5URVJGQUNFKQogCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CiAjZWxzZQotCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfcGxhdGRhdGEoX2Rldik7CiAjZW5kaWYKIAlkd2Nfb3RnX2RldmljZV9oaWJlcm5hdGlvbl9yZXN0b3JlKG90Z19kZXYtPmNvcmVfaWYsIDEsIDApOwogI2VuZGlmCkBAIC0xMDE1LDcgKzEwMTUsNyBAQAogI2VsaWYgZGVmaW5lZChQQ0lfSU5URVJGQUNFKQogCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CiAjZWxzZQotCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfcGxhdGRhdGEoX2Rldik7CiAjZW5kaWYKIAl1aW50MzJfdCB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDE2KTsKIAlEV0NfUFJJTlRGKCJUaGUgUGFzc2VkIHZhbHVlIGlzICUwNHhcbiIsIHZhbCk7CkBAIC0xMDQxLDcgKzEwNDEsNyBAQAogI2VsaWYgZGVmaW5lZChQQ0lfSU5URVJGQUNFKQogCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CiAjZWxzZQotCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfcGxhdGRhdGEoX2Rldik7CiAjZW5kaWYKIAogCWR3Y19vdGdfZHVtcF9nbG9iYWxfcmVnaXN0ZXJzKG90Z19kZXYtPmNvcmVfaWYpOwpAQCAtMTA2OSw3ICsxMDY5LDcgQEAKICNlbGlmIGRlZmluZWQoUENJX0lOVEVSRkFDRSkKIAlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOwogI2Vsc2UKLQlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X3BsYXRkYXRhKF9kZXYpOwogI2VuZGlmCiAKIAlkd2Nfb3RnX2R1bXBfc3ByYW0ob3RnX2Rldi0+Y29yZV9pZik7CkBAIC0xMDkyLDcgKzEwOTIsNyBAQAogI2VsaWYgZGVmaW5lZChQQ0lfSU5URVJGQUNFKQogCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CiAjZWxzZQotCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfcGxhdGRhdGEoX2Rldik7CiAjZW5kaWYKIAogCWR3Y19vdGdfaGNkX2R1bXBfc3RhdGUob3RnX2Rldi0+aGNkKTsKQEAgLTExMTcsNyArMTExNyw3IEBACiAjZWxpZiBkZWZpbmVkKFBDSV9JTlRFUkZBQ0UpCiAJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKICNlbHNlCi0JZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9wbGF0ZGF0YShfZGV2KTsKICNlbmRpZgogCiAJZHdjX290Z19oY2RfZHVtcF9mcnJlbShvdGdfZGV2LT5oY2QpOwpAQCAtMTE0Miw3ICsxMTQyLDcgQEAKICNlbGlmIGRlZmluZWQoUENJX0lOVEVSRkFDRSkKIAlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOwogI2Vsc2UKLQlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXZfZ2V0X3BsYXRkYXRhKF9kZXYpOwogI2VuZGlmCiAKIAlpbnQgaTsKQEAgLTExNzYsNyArMTE3Niw3IEBACiAjZWxpZiBkZWZpbmVkKFBDSV9JTlRFUkZBQ0UpCiAJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKICNlbHNlCi0JZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9wbGF0ZGF0YShfZGV2KTsKICNlbmRpZgogCiAKQEAgLTEyMTQsNyArMTIxNCw3IEBACiAjZWxpZiBkZWZpbmVkKFBDSV9JTlRFUkZBQ0UpCiAJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKICNlbHNlCi0JZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9wbGF0ZGF0YShfZGV2KTsKICNlbmRpZgogCiAKQEAgLTEyNDEsNyArMTI0MSw3IEBACiAjZWxpZiBkZWZpbmVkKFBDSV9JTlRFUkZBQ0UpCiAJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKICNlbHNlCi0JZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9wbGF0ZGF0YShfZGV2KTsKICNlbmRpZgogCiAKQEAgLTEyNzMsNyArMTI3Myw3IEBACiAjZWxpZiBkZWZpbmVkKFBDSV9JTlRFUkZBQ0UpCiAJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKICNlbHNlCi0JZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9wbGF0ZGF0YShfZGV2KTsKICNlbmRpZgogCiAKQEAgLTEyOTQsNyArMTI5NCw3IEBACiAjZWxpZiBkZWZpbmVkKFBDSV9JTlRFUkZBQ0UpCiAJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKICNlbHNlCi0JZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gZGV2X2dldF9wbGF0ZGF0YShfZGV2KTsKICNlbmRpZgogCiAKQEAgLTEzMjYsNyArMTMyNiw3IEBACiAJCQkJc3RydWN0IGxtX2RldmljZSAqZGV2CiAjZWxpZiAgZGVmaW5lZChQQ0lfSU5URVJGQUNFKQogCQkJCXN0cnVjdCBwY2lfZGV2ICpkZXYKLSNlbHNlIAorI2Vsc2UKIC8vCQkJCXN0cnVjdCBkZXZpY2UgKmRldgogCQkJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldgogI2VuZGlmCkBAIC0xMzg0LDcgKzEzODQsNyBAQAogCQkJCXN0cnVjdCBsbV9kZXZpY2UgKmRldgogI2VsaWYgIGRlZmluZWQoUENJX0lOVEVSRkFDRSkKIAkJCQlzdHJ1Y3QgcGNpX2RldiAqZGV2Ci0jZWxzZSAKKyNlbHNlCiAJCQkJLy9zdHJ1Y3QgZGV2aWNlICpkZXYKIAkJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX2F0dHIuaCBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19hdHRyLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBmOWQ2YzU1Li45NDc5ZTZjCi0tLSBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19hdHRyLmgKKysrIGIvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX2F0dHIuaApAQCAtNzMsNyArNzMsNiBAQAogI2VsaWYgIFBDSV9JTlRFUkZBQ0UKIAkJCQlzdHJ1Y3QgcGNpX2RldiAqZGV2CiAjZWxzZQkJCQkKLQkJCQkvL3N0cnVjdCBkZXZpY2UgKmRldgogCQkJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldgogI2VuZGlmCiAgICAgKTsKQEAgLTg0LDcgKzgzLDYgQEAKICNlbGlmICBQQ0lfSU5URVJGQUNFCiAJCQkJc3RydWN0IHBjaV9kZXYgKmRldgogI2Vsc2UJCQkJCi0JCQkJLy9zdHJ1Y3QgZGV2aWNlICpkZXYKIAkJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYKICNlbmRpZgogICAgICk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfY2ZpLmMgYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfY2ZpLmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBhOTg3OGQ2Li45YzZmZTE1Ci0tLSBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19jZmkuYworKysgYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfY2ZpLmMKQEAgLTE1NjgsNyArMTU2OCw3IEBACiAJCS8qIE5vbi1wZXJpb2RpYyBUeCBGSUZPICovCiAJCW5wdHhmc3pfYmFrID0gRFdDX1JFQURfUkVHMzIoJmdsb2JhbF9yZWdzLT5nbnB0eGZzaXopOwogCQlucHR4Zmlmb3NpemUuYi5kZXB0aCA9IHBhcmFtcy0+ZGV2X25wZXJpb190eF9maWZvX3NpemU7Ci0JCXN0YXJ0X2FkZHJlc3MgPSBwYXJhbXMtPmRldl9yeF9maWZvX3NpemU7CisJCXN0YXJ0X2FkZHJlc3MgPSAweDQwMDsKIAkJbnB0eGZpZm9zaXplLmIuc3RhcnRhZGRyID0gc3RhcnRfYWRkcmVzczsKIAogCQlEV0NfV1JJVEVfUkVHMzIoJmdsb2JhbF9yZWdzLT5nbnB0eGZzaXosIG5wdHhmaWZvc2l6ZS5kMzIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX2NmaS5oIGIvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX2NmaS5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19jaWwuYyBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19jaWwuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDU1MmMwMDMuLmMxMDkxN2IKLS0tIGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX2NpbC5jCisrKyBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19jaWwuYwpAQCAtMSw4ICsxLDggQEAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiAkRmlsZTogLy9kd2gvdXNiX2lpcC9kZXYvc29mdHdhcmUvb3RnL2xpbnV4L2RyaXZlcnMvZHdjX290Z19jaWwuYyAkCi0gKiAkUmV2aXNpb246ICMxODIgJAotICogJERhdGU6IDIwMTEvMDUvMTcgJAotICogJENoYW5nZTogMTc3NDExMCAkCisgKiAkUmV2aXNpb246ICMxODkgJAorICogJERhdGU6IDIwMTEvMTAvMjQgJAorICogJENoYW5nZTogMTg3MTE2MCAkCiAgKgogICogU3lub3BzeXMgSFMgT1RHIExpbnV4IFNvZnR3YXJlIERyaXZlciBhbmQgZG9jdW1lbnRhdGlvbiAoaGVyZWluYWZ0ZXIsCiAgKiAiU29mdHdhcmUiKSBpcyBhbiBVbnN1cHBvcnRlZCBwcm9wcmlldGFyeSB3b3JrIG9mIFN5bm9wc3lzLCBJbmMuIHVubGVzcwpAQCAtNTEsNyArNTEsNyBAQAogICoKICAqIFRoZSBDb3JlIEludGVyZmFjZSBMYXllciBoYXMgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHM6CiAgKiAtIFByb3ZpZGVzIGJhc2ljIGNvbnRyb2xsZXIgb3BlcmF0aW9ucy4KLSAqIC0gTWluaW1hbCB1c2Ugb2YgT1Mgc2VydmljZXMuIAorICogLSBNaW5pbWFsIHVzZSBvZiBPUyBzZXJ2aWNlcy4KICAqIC0gVGhlIE9TIHNlcnZpY2VzIHVzZWQgd2lsbCBiZSBhYnN0cmFjdGVkIGJ5IHVzaW5nIGlubGluZSBmdW5jdGlvbnMKICAqCSBvciBtYWNyb3MuCiAgKgpAQCAtMTg4LDEzICsxODgsMTMgQEAKIAkJZ3VzYmNmZy5kMzIgPSAgRFdDX1JFQURfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmd1c2JjZmcpOwogCQlndXNiY2ZnLmIuZm9yY2VfaG9zdF9tb2RlID0gMTsKIAkJRFdDX1dSSVRFX1JFRzMyKCZjb3JlX2lmLT5jb3JlX2dsb2JhbF9yZWdzLT5ndXNiY2ZnLCBndXNiY2ZnLmQzMik7Ci0JCWR3Y19tZGVsYXkoMTAwKTsgCisJCWR3Y19tZGVsYXkoMTAwKTsKIAkJY29yZV9pZi0+aHB0eGZzaXouZDMyID0KIAkJRFdDX1JFQURfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmhwdHhmc2l6KTsKIAkJZ3VzYmNmZy5kMzIgPSAgRFdDX1JFQURfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmd1c2JjZmcpOwogCQlndXNiY2ZnLmIuZm9yY2VfaG9zdF9tb2RlID0gMDsKIAkJRFdDX1dSSVRFX1JFRzMyKCZjb3JlX2lmLT5jb3JlX2dsb2JhbF9yZWdzLT5ndXNiY2ZnLCBndXNiY2ZnLmQzMik7Ci0JCWR3Y19tZGVsYXkoMTAwKTsgCisJCWR3Y19tZGVsYXkoMTAwKTsKIAl9CiAKIAlEV0NfREVCVUdQTChEQkdfQ0lMViwgImh3Y2ZnMT0lMDh4XG4iLCBjb3JlX2lmLT5od2NmZzEuZDMyKTsKQEAgLTI3MSw3ICsyNzEsNyBAQAogCiAJLyoqIEFEUCBpbml0aWFsaXphdGlvbiAqLwogCWR3Y19vdGdfYWRwX2luaXQoY29yZV9pZik7Ci0JCisKIAlyZXR1cm4gY29yZV9pZjsKIH0KIApAQCAtMjk5LDcgKzI5OSw3IEBACiAJCURXQ19GUkVFKGNvcmVfaWYtPmhvc3RfaWYpOwogCX0KIAotCS8qKiBSZW1vdmUgQURQIFRpbWVycyAgKi8KKwkvKiogUmVtb3ZlIEFEUCBTdHVmZiAgKi8KIAlkd2Nfb3RnX2FkcF9yZW1vdmUoY29yZV9pZik7CiAJaWYgKGNvcmVfaWYtPmNvcmVfcGFyYW1zKSB7CiAJCURXQ19GUkVFKGNvcmVfaWYtPmNvcmVfcGFyYW1zKTsKQEAgLTQ2Niw4ICs0NjYsOCBAQAogCiAJaWYgKGNvcmVfaWYtPmhpYmVybmF0aW9uX3N1c3BlbmQgPT0gMCkgewogCQkvKgotCQkgKiBXYWl0IEZvciBSZXN0b3JlX2RvbmUgSW50ZXJydXB0LiBUaGlzIG1lY2hhbmlzbSBvZiBwb2xsaW5nIHRoZSBpbnRlcnJ1cHQKLQkJICogaXMgaW50cm9kdWNlZCB0byBhdm9pZCBhbnkgcG9zc2libGUgcmFjZSBjb25kaXRpb25zCisJCSAqIFdhaXQgRm9yIFJlc3RvcmVfZG9uZSBJbnRlcnJ1cHQuIFRoaXMgbWVjaGFuaXNtIG9mIHBvbGxpbmcgdGhlCisJCSAqIGludGVycnVwdCBpcyBpbnRyb2R1Y2VkIHRvIGF2b2lkIGFueSBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMKIAkJICovCiAJCWRvIHsKIAkJCWdpbnRzdHNfZGF0YV90IGdpbnRzdHM7CkBAIC02MzIsNyArNjMyLDcgQEAKIAkJCQlnaW50c3RzLmQzMiA9IDA7CiAJCQkJZ2ludHN0cy5iLnJlc3RvcmVkb25lID0gMTsKICAgICAgICAgIAkJRFdDX1dSSVRFX1JFRzMyKCZjb3JlX2lmLT5jb3JlX2dsb2JhbF9yZWdzLT5naW50c3RzLCBnaW50c3RzLmQzMik7Ci0JCQkJRFdDX0RFQlVHUEwoREJHX0hDRCwiUmVzdG9yZSBEb25lIEludGVycnVwdCBzZWVuXG4iKTsJCisJCQkJRFdDX0RFQlVHUEwoREJHX0hDRCwiUmVzdG9yZSBEb25lIEludGVycnVwdCBzZWVuXG4iKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWR3Y191ZGVsYXkoMTApOwpAQCAtODMzLDExICs4MzMsNiBAQAogCQkgICAgRFdDX1JFQURfUkVHMzIoJmNvcmVfaWYtPmRldl9pZi0+aW5fZXBfcmVnc1tpXS0+ZGllcGRtYSk7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IGNvcmVfaWYtPmRldl9pZi0+bnVtX291dF9lcHM7ICsraSkgewotCQlkci0+ZG9lcGZuW2ldID0KLQkJICAgIERXQ19SRUFEX1JFRzMyKCZjb3JlX2lmLT5kZXZfaWYtPm91dF9lcF9yZWdzW2ldLT5kb2VwZm4pOwotCX0KLQogCURXQ19ERUJVR1BMKERCR19BTlksCiAJCSAgICAiPT09PT09PT09PT09PUJhY2tpbmcgSG9zdCByZWdpc3RlcnM9PT09PT09PT09PT09PVxuIik7CiAJRFdDX0RFQlVHUEwoREJHX0FOWSwgIkJhY2tlZCB1cCBkY2ZnICAgICAgICAgICAgPSAlMDh4XG4iLCBkci0+ZGNmZyk7CkBAIC05MTAsNyArOTA1LDcgQEAKIAlpZiAoIWdyKSB7CiAJCXJldHVybiAtRFdDX0VfSU5WQUxJRDsKIAl9Ci0gICAKKwogCURXQ19XUklURV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z290Z2N0bCwgZ3ItPmdvdGdjdGxfbG9jYWwpOwogCURXQ19XUklURV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z2ludG1zaywgZ3ItPmdpbnRtc2tfbG9jYWwpOwogCURXQ19XUklURV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z3VzYmNmZywgZ3ItPmd1c2JjZmdfbG9jYWwpOwpAQCAtOTQ5LDcgKzk0NCw3IEBACiAJewogCQlEV0NfV1JJVEVfUkVHMzIoJmNvcmVfaWYtPmRldl9pZi0+ZGV2X2dsb2JhbF9yZWdzLT5kY3RsLCBkci0+ZGN0bCk7CiAJfQotCQorCiAJRFdDX1dSSVRFX1JFRzMyKCZjb3JlX2lmLT5kZXZfaWYtPmRldl9nbG9iYWxfcmVncy0+ZGFpbnRtc2ssIGRyLT5kYWludG1zayk7CiAJRFdDX1dSSVRFX1JFRzMyKCZjb3JlX2lmLT5kZXZfaWYtPmRldl9nbG9iYWxfcmVncy0+ZGllcG1zaywgZHItPmRpZXBtc2spOwogCURXQ19XUklURV9SRUczMigmY29yZV9pZi0+ZGV2X2lmLT5kZXZfZ2xvYmFsX3JlZ3MtPmRvZXBtc2ssIGRyLT5kb2VwbXNrKTsKQEAgLTk1OSwxMCArOTU0LDYgQEAKIAkJRFdDX1dSSVRFX1JFRzMyKCZjb3JlX2lmLT5kZXZfaWYtPmluX2VwX3JlZ3NbaV0tPmRpZXB0c2l6LCBkci0+ZGllcHRzaXpbaV0pOwogCQlEV0NfV1JJVEVfUkVHMzIoJmNvcmVfaWYtPmRldl9pZi0+aW5fZXBfcmVnc1tpXS0+ZGllcGRtYSwgZHItPmRpZXBkbWFbaV0pOwogCX0KLQkKLQlmb3IgKGkgPSAwOyBpIDwgY29yZV9pZi0+ZGV2X2lmLT5udW1fb3V0X2VwczsgKytpKSB7Ci0JCURXQ19XUklURV9SRUczMigmY29yZV9pZi0+ZGV2X2lmLT5vdXRfZXBfcmVnc1tpXS0+ZG9lcGZuLCBkci0+ZG9lcGZuW2ldKTsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzODgsNyArMTM3OSw3IEBACiAKIAljYXNlIERXQ19JTlRfRE1BX0FSQ0g6CiAJCURXQ19ERUJVR1BMKERCR19DSUwsICJJbnRlcm5hbCBETUEgTW9kZVxuIik7Ci0JCS8qIE9sZCB2YWx1ZSB3YXMgRFdDX0dBSEJDRkdfSU5UX0RNQV9CVVJTVF9JTkNSIC0gZG9uZSBmb3IgCisJCS8qIE9sZCB2YWx1ZSB3YXMgRFdDX0dBSEJDRkdfSU5UX0RNQV9CVVJTVF9JTkNSIC0gZG9uZSBmb3IKIAkJICBIb3N0IG1vZGUgSVNPQyBpbiBpc3N1ZSBmaXggLSB2YWhyYW1hICovCiAJCWFoYmNmZy5iLmhidXJzdGxlbiA9IERXQ19HQUhCQ0ZHX0lOVF9ETUFfQlVSU1RfSU5DUjQ7CiAJCWNvcmVfaWYtPmRtYV9lbmFibGUgPSAoY29yZV9pZi0+Y29yZV9wYXJhbXMtPmRtYV9lbmFibGUgIT0gMCk7CkBAIC0xNDA5LDYgKzE0MDAsMTAgQEAKIAkJY29yZV9pZi0+ZG1hX2Rlc2NfZW5hYmxlID0gMDsKIAl9CiAKKwlpZiAoY29yZV9pZi0+Y29yZV9wYXJhbXMtPmFoYl9zaW5nbGUpIHsKKwkJYWhiY2ZnLmIuYWhic2luZ2xlID0gMTsKKwl9CisKIAlhaGJjZmcuYi5kbWFlbmFibGUgPSBjb3JlX2lmLT5kbWFfZW5hYmxlOwogCURXQ19XUklURV9SRUczMigmZ2xvYmFsX3JlZ3MtPmdhaGJjZmcsIGFoYmNmZy5kMzIpOwogCkBAIC0xNTA0LDcgKzE0OTksNyBAQAogCQlEV0NfUFJJTlRGKCJPVEcgVkVSIFBBUkFNOiAlZCwgT1RHIFZFUiBGTEFHOiAlZFxuIiwKIAkJCSAgIGNvcmVfaWYtPmNvcmVfcGFyYW1zLT5vdGdfdmVyLCBjb3JlX2lmLT5vdGdfdmVyKTsKIAl9Ci0JCisKIAogCS8qIEVuYWJsZSBjb21tb24gaW50ZXJydXB0cyAqLwogCWR3Y19vdGdfZW5hYmxlX2NvbW1vbl9pbnRlcnJ1cHRzKGNvcmVfaWYpOwpAQCAtMTU2MSw2ICsxNTU2LDkgQEAKIAkJaW50cl9tYXNrLmIuZXBtaXNtYXRjaCA9IDE7CiAJfQogCisJLy9pbnRyX21hc2suYi5pbmNvbXBsaXNvb3V0ID0gMTsKKwlpbnRyX21hc2suYi5pbmNvbXBsaXNvaW4gPSAxOworCiAvKiBFbmFibGUgdGhlIGlnbm9yZSBmcmFtZSBudW1iZXIgZm9yIElTT0MgeGZlcnMgLSBNQVMgKi8KIC8qIERpc2FibGUgdG8gc3VwcG9ydCBoaWdoIGJhbmR3aXRoIElTT0MgdHJhbnNmZXJzIC0gbWFudWt6ICovCiAjaWYgMApAQCAtMTY0Nyw5ICsxNjQ1LDE2IEBACiAJZGNmZy5iLnBlcmZyaW50ID0gRFdDX0RDRkdfRlJBTUVfSU5URVJWQUxfODA7CiAJLyogRW5hYmxlIERldmljZSBPVVQgTkFLIGluIGNhc2Ugb2YgRERNQSBtb2RlKi8KIAlpZiAoY29yZV9pZi0+Y29yZV9wYXJhbXMtPmRldl9vdXRfbmFrKSB7Ci0JCWRjZmcuYi5lbmRldm91dG5hayA9IDE7CQkKKwkJZGNmZy5iLmVuZGV2b3V0bmFrID0gMTsKIAl9CiAKKwlpZiAoY29yZV9pZi0+Y29yZV9wYXJhbXMtPmNvbnRfb25fYm5hKSB7CisJCWRjdGxfZGF0YV90IGRjdGwgPSB7LmQzMiA9IDAgfTsKKwkJZGN0bC5iLmVuY29udG9uYm5hID0gMTsKKwkJRFdDX01PRElGWV9SRUczMigmZGV2X2lmLT5kZXZfZ2xvYmFsX3JlZ3MtPmRjdGwsIDAsIGRjdGwuZDMyKTsKKwl9CisKKwogCURXQ19XUklURV9SRUczMigmZGV2X2lmLT5kZXZfZ2xvYmFsX3JlZ3MtPmRjZmcsIGRjZmcuZDMyKTsKIAogCS8qIENvbmZpZ3VyZSBkYXRhIEZJRk8gc2l6ZXMgKi8KQEAgLTE2ODcsNyArMTY5Miw3IEBACiAJCQkJICAgIERXQ19SRUFEX1JFRzMyKCZnbG9iYWxfcmVncy0+Z25wdHhmc2l6KSk7CiAKIAkJCW5wdHhmaWZvc2l6ZS5iLmRlcHRoID0gcGFyYW1zLT5kZXZfbnBlcmlvX3R4X2ZpZm9fc2l6ZTsKLQkJCW5wdHhmaWZvc2l6ZS5iLnN0YXJ0YWRkciA9IHBhcmFtcy0+ZGV2X3J4X2ZpZm9fc2l6ZTsKKwkJCW5wdHhmaWZvc2l6ZS5iLnN0YXJ0YWRkciA9IDB4NDAwOwogCiAJCQlEV0NfV1JJVEVfUkVHMzIoJmdsb2JhbF9yZWdzLT5nbnB0eGZzaXosCiAJCQkJCW5wdHhmaWZvc2l6ZS5kMzIpOwpAQCAtMTczOSw3ICsxNzQ0LDcgQEAKIAkJCSAgICBwYXJhbXMtPmRldl9ucGVyaW9fdHhfZmlmb19zaXplOwogI2VuZGlmCiAJCQlucHR4Zmlmb3NpemUuYi5kZXB0aCA9IHBhcmFtcy0+ZGV2X25wZXJpb190eF9maWZvX3NpemU7Ci0JCQlucHR4Zmlmb3NpemUuYi5zdGFydGFkZHIgPSBwYXJhbXMtPmRldl9yeF9maWZvX3NpemU7CisJCQlucHR4Zmlmb3NpemUuYi5zdGFydGFkZHIgPSAweDQwMDsKIAogCQkJRFdDX1dSSVRFX1JFRzMyKCZnbG9iYWxfcmVncy0+Z25wdHhmc2l6LAogCQkJCQlucHR4Zmlmb3NpemUuZDMyKTsKQEAgLTE4MDQsMjUgKzE4MDksMjUgQEAKIAkJZm9yIChpID0gMDsgaTw9IGNvcmVfaWYtPmRldl9pZi0+bnVtX2luX2VwczsgKytpKSB7CiAJCQljb3JlX2lmLT5uZXh0ZXBfc2VxW2ldID0gMHhmZjsJLy8gMHhmZiAtIEVQIG5vdCBhY3RpdmUKIAkJfQotCQljb3JlX2lmLT5uZXh0ZXBfc2VxWzBdID0gMDsJCisJCWNvcmVfaWYtPm5leHRlcF9zZXFbMF0gPSAwOwogCQljb3JlX2lmLT5maXJzdF9pbl9uZXh0ZXBfc2VxID0gMDsKIAkJZGllcGN0bC5kMzIgPSBEV0NfUkVBRF9SRUczMigmZGV2X2lmLT5pbl9lcF9yZWdzWzBdLT5kaWVwY3RsKTsKIAkJZGllcGN0bC5iLm5leHRlcCA9IDA7CiAJCURXQ19XUklURV9SRUczMigmZGV2X2lmLT5pbl9lcF9yZWdzWzBdLT5kaWVwY3RsLCBkaWVwY3RsLmQzMik7Ci0JCQorCiAJCS8qIFVwZGF0ZSBJTiBFbmRwb2ludCBNaXNtYXRjaCBDb3VudCBieSBhY3RpdmUgSU4gTlAgRVAgY291bnQgKyAxICovCiAJCWRjZmcuZDMyID0gRFdDX1JFQURfUkVHMzIoJmRldl9pZi0+ZGV2X2dsb2JhbF9yZWdzLT5kY2ZnKTsKIAkJZGNmZy5iLmVwbXNjbnQgPSAyOwogCQlEV0NfV1JJVEVfUkVHMzIoJmRldl9pZi0+ZGV2X2dsb2JhbF9yZWdzLT5kY2ZnLCBkY2ZnLmQzMik7CiAKLQkJRFdDX0RFQlVHUEwoREJHX0NJTFYsIiVzIGZpcnN0X2luX25leHRlcF9zZXE9ICUyZDsgbmV4dGVwX3NlcVtdOlxuIiwgCisJCURXQ19ERUJVR1BMKERCR19DSUxWLCIlcyBmaXJzdF9pbl9uZXh0ZXBfc2VxPSAlMmQ7IG5leHRlcF9zZXFbXTpcbiIsCiAJCQlfX2Z1bmNfXywgY29yZV9pZi0+Zmlyc3RfaW5fbmV4dGVwX3NlcSk7CiAJCWZvciAoaT0wOyBpIDw9IGNvcmVfaWYtPmRldl9pZi0+bnVtX2luX2VwczsgaSsrKSB7CiAJCQlEV0NfREVCVUdQTChEQkdfQ0lMViwgIiUyZCAiLCBjb3JlX2lmLT5uZXh0ZXBfc2VxW2ldKTsKIAkJfQogCQlEV0NfREVCVUdQTChEQkdfQ0lMViwiXG4iKTsKIAl9Ci0JCisKIAkvKiBDbGVhciBhbGwgcGVuZGluZyBEZXZpY2UgSW50ZXJydXB0cyAqLwogCS8qKiBAdG9kbyAtIGlmIHRoZSBjb25kaXRpb24gbmVlZGVkIHRvIGJlIGNoZWNrZWQKIAkgKiAgb3IgaW4gYW55IGNhc2UgYWxsIHBlbmRpbmcgaW50ZXJydXRwcyBzaG91bGQgYmUgY2xlYXJlZD8KQEAgLTE5MzMsNiArMTkzOCwxMyBAQAogCQlkY3RsLmIubmFrb25iYmxlID0gMTsKIAkJRFdDX01PRElGWV9SRUczMigmZGV2X2lmLT5kZXZfZ2xvYmFsX3JlZ3MtPmRjdGwsIDAsIGRjdGwuZDMyKTsKIAl9CisKKwlpZiAoY29yZV9pZi0+c25wc2lkID49IE9UR19DT1JFX1JFVl8yXzk0YSkgeworCQlkY3RsX2RhdGFfdCBkY3RsID0gey5kMzIgPSAwIH07CisJCWRjdGwuZDMyID0gRFdDX1JFQURfUkVHMzIoJmRldl9pZi0+ZGV2X2dsb2JhbF9yZWdzLT5kY3RsKTsKKwkJZGN0bC5iLnNmdGRpc2NvbiA9IDA7CisJCURXQ19XUklURV9SRUczMigmZGV2X2lmLT5kZXZfZ2xvYmFsX3JlZ3MtPmRjdGwsIGRjdGwuZDMyKTsKKwl9CiB9CiAKIC8qKgpAQCAtMTk2MSw5ICsxOTczLDYgQEAKIAkgKiBpbnRlcnJ1cHRzLgogCSAqLwogCi0JLyogRG8gbm90IG5lZWQgc29mIGludGVycnVwdCBmb3IgRGVzY3JpcHRvciBETUEgKi8KLQlpZiAoIWNvcmVfaWYtPmRtYV9kZXNjX2VuYWJsZSkKLQkJaW50cl9tYXNrLmIuc29maW50ciA9IDE7CiAJaW50cl9tYXNrLmIuZGlzY29ubmVjdCA9IDE7CiAJaW50cl9tYXNrLmIucG9ydGludHIgPSAxOwogCWludHJfbWFzay5iLmhjaW50ciA9IDE7CkBAIC0yMDQwLDcgKzIwNDksNyBAQAogCX0KIAogCS8qIFRoaXMgYml0IGFsbG93cyBkeW5hbWljIHJlbG9hZGluZyBvZiB0aGUgSEZJUiByZWdpc3RlcgotCSAqIGR1cmluZyBydW50aW1lLiBUaGlzIGJpdCBuZWVkcyB0byBiZSBwcm9ncmFtbWVkIGR1cmluZyAKKwkgKiBkdXJpbmcgcnVudGltZS4gVGhpcyBiaXQgbmVlZHMgdG8gYmUgcHJvZ3JhbW1lZCBkdXJpbmcKIAkgKiBpbml0aWFsIGNvbmZpZ3VyYXRpb24gYW5kIGl0cyB2YWx1ZSBtdXN0IG5vdCBiZSBjaGFuZ2VkCiAJICogZHVyaW5nIHJ1bnRpbWUuKi8KIAlpZiAoY29yZV9pZi0+Y29yZV9wYXJhbXMtPnJlbG9hZF9jdGwgPT0gMSkgewpAQCAtMjA5Nyw3ICsyMTA2LDggQEAKIAkJRFdDX0RFQlVHUEwoREJHX0NJTCwgImluaXRpYWwgZ25wdHhmc2l6PSUwOHhcbiIsCiAJCQkgICAgRFdDX1JFQURfUkVHMzIoJmdsb2JhbF9yZWdzLT5nbnB0eGZzaXopKTsKIAkJbnB0eGZpZm9zaXplLmIuZGVwdGggPSBwYXJhbXMtPmhvc3RfbnBlcmlvX3R4X2ZpZm9fc2l6ZTsKLQkJbnB0eGZpZm9zaXplLmIuc3RhcnRhZGRyID0gcGFyYW1zLT5ob3N0X3J4X2ZpZm9fc2l6ZTsKKwkJbnB0eGZpZm9zaXplLmIuc3RhcnRhZGRyID0gMHg0MDA7CisKIAkJRFdDX1dSSVRFX1JFRzMyKCZnbG9iYWxfcmVncy0+Z25wdHhmc2l6LCBucHR4Zmlmb3NpemUuZDMyKTsKIAkJRFdDX0RFQlVHUEwoREJHX0NJTCwgIm5ldyBnbnB0eGZzaXo9JTA4eFxuIiwKIAkJCSAgICBEV0NfUkVBRF9SRUczMigmZ2xvYmFsX3JlZ3MtPmducHR4ZnNpeikpOwpAQCAtMjEwNiwxMiArMjExNiwxMSBAQAogCQlEV0NfREVCVUdQTChEQkdfQ0lMLCAiaW5pdGlhbCBocHR4ZnNpej0lMDh4XG4iLAogCQkJICAgIERXQ19SRUFEX1JFRzMyKCZnbG9iYWxfcmVncy0+aHB0eGZzaXopKTsKIAkJcHR4Zmlmb3NpemUuYi5kZXB0aCA9IHBhcmFtcy0+aG9zdF9wZXJpb190eF9maWZvX3NpemU7Ci0JCXB0eGZpZm9zaXplLmIuc3RhcnRhZGRyID0KLQkJICAgIG5wdHhmaWZvc2l6ZS5iLnN0YXJ0YWRkciArIG5wdHhmaWZvc2l6ZS5iLmRlcHRoOworCQlwdHhmaWZvc2l6ZS5iLnN0YXJ0YWRkciA9IDB4QzAwOwogCQlEV0NfV1JJVEVfUkVHMzIoJmdsb2JhbF9yZWdzLT5ocHR4ZnNpeiwgcHR4Zmlmb3NpemUuZDMyKTsKIAkJRFdDX0RFQlVHUEwoREJHX0NJTCwgIm5ldyBocHR4ZnNpej0lMDh4XG4iLAogCQkJICAgIERXQ19SRUFEX1JFRzMyKCZnbG9iYWxfcmVncy0+aHB0eGZzaXopKTsKLQkJCisKIAkJaWYgKGNvcmVfaWYtPmVuX211bHRpcGxlX3R4X2ZpZm8pIHsKIAkJCS8qIEdsb2JhbCBERklGT0NGRyBjYWxjdWxhdGlvbiBmb3IgSG9zdCBtb2RlIC0gaW5jbHVkZSBSeEZJRk8sIE5QVFhGSUZPIGFuZCBIUFRYRklGTyAqLwogCQkJZ2RmaWZvY2ZnLmQzMiA9IERXQ19SRUFEX1JFRzMyKCZnbG9iYWxfcmVncy0+Z2RmaWZvY2ZnKTsKQEAgLTI0NjAsNyArMjQ2OSw3IEBACiAJaGNjaGFyLmQzMiA9IERXQ19SRUFEX1JFRzMyKCZoY19yZWdzLT5oY2NoYXIpOwogCiAJLyogTm8gbmVlZCB0byBzZXQgdGhlIGJpdCBpbiBERE1BIGZvciBkaXNhYmxpbmcgdGhlIGNoYW5uZWwgKi8KLQkvL1RPRE8gY2hlY2sgaXQgZXZlcnl3aGVyZSBjaGFubmVsIGlzIGRpc2FibGVkICAgICAgICAgIAorCS8vVE9ETyBjaGVjayBpdCBldmVyeXdoZXJlIGNoYW5uZWwgaXMgZGlzYWJsZWQKIAlpZiAoIWNvcmVfaWYtPmNvcmVfcGFyYW1zLT5kbWFfZGVzY19lbmFibGUpCiAJCWhjY2hhci5iLmNoZW4gPSAxOwogCWhjY2hhci5iLmNoZGlzID0gMTsKQEAgLTMwODQsOSArMzA5Myw5IEBACiB9CiAKIC8qKgotICogQ2FsY3VsYXRlcyBhbmQgZ2V0cyB0aGUgZnJhbWUgSW50ZXJ2YWwgdmFsdWUgb2YgSEZJUiByZWdpc3RlciBhY2NvcmRpbmcgUEhZIAorICogQ2FsY3VsYXRlcyBhbmQgZ2V0cyB0aGUgZnJhbWUgSW50ZXJ2YWwgdmFsdWUgb2YgSEZJUiByZWdpc3RlciBhY2NvcmRpbmcgUEhZCiAgKiB0eXBlIGFuZCBzcGVlZC5UaGUgYXBwbGljYXRpb24gY2FuIG1vZGlmeSBhIHZhbHVlIG9mIEhGSVIgcmVnaXN0ZXIgb25seSBhZnRlcgotICogdGhlIFBvcnQgRW5hYmxlIGJpdCBvZiB0aGUgSG9zdCBQb3J0IENvbnRyb2wgYW5kIFN0YXR1cyByZWdpc3RlciAKKyAqIHRoZSBQb3J0IEVuYWJsZSBiaXQgb2YgdGhlIEhvc3QgUG9ydCBDb250cm9sIGFuZCBTdGF0dXMgcmVnaXN0ZXIKICAqIChIUFJULlBydEVuYVBvcnQpIGhhcyBiZWVuIHNldC4KICovCiAKQEAgLTMyNDksMTQgKzMyNTgsMTQgQEAKIAkJCQlpZiAoY29yZV9pZi0+bmV4dGVwX3NlcVtpXSA9PSBjb3JlX2lmLT5maXJzdF9pbl9uZXh0ZXBfc2VxKQogCQkJCWJyZWFrOwogCQkJfQotCQkJY29yZV9pZi0+bmV4dGVwX3NlcVtpXSA9IGVwLT5udW07CQorCQkJY29yZV9pZi0+bmV4dGVwX3NlcVtpXSA9IGVwLT5udW07CiAJCQljb3JlX2lmLT5uZXh0ZXBfc2VxW2VwLT5udW1dID0gY29yZV9pZi0+Zmlyc3RfaW5fbmV4dGVwX3NlcTsKIAkJCWRlcGN0bC5iLm5leHRlcCA9IGNvcmVfaWYtPm5leHRlcF9zZXFbZXAtPm51bV07CiAJCQlkY2ZnLmQzMiA9IERXQ19SRUFEX1JFRzMyKCZkZXZfaWYtPmRldl9nbG9iYWxfcmVncy0+ZGNmZyk7CiAJCQlkY2ZnLmIuZXBtc2NudCsrOwogCQkJRFdDX1dSSVRFX1JFRzMyKCZkZXZfaWYtPmRldl9nbG9iYWxfcmVncy0+ZGNmZywgZGNmZy5kMzIpOwogCi0JCQlEV0NfREVCVUdQTChEQkdfUENEViwiJXMgZmlyc3RfaW5fbmV4dGVwX3NlcT0gJTJkOyBuZXh0ZXBfc2VxW106XG4iLCAKKwkJCURXQ19ERUJVR1BMKERCR19QQ0RWLCIlcyBmaXJzdF9pbl9uZXh0ZXBfc2VxPSAlMmQ7IG5leHRlcF9zZXFbXTpcbiIsCiAJCQkJX19mdW5jX18sIGNvcmVfaWYtPmZpcnN0X2luX25leHRlcF9zZXEpOwogCQkJZm9yIChpPTA7IGkgPD0gY29yZV9pZi0+ZGV2X2lmLT5udW1faW5fZXBzOyBpKyspIHsKIAkJCQlEV0NfREVCVUdQTChEQkdfUENEViwgIiUyZFxuIiwgY29yZV9pZi0+bmV4dGVwX3NlcVtpXSk7CkBAIC0zMjc5LDE0ICszMjg4LDIwIEBACiAJCQlkaWVwbXNrLmIuYWhiZXJyID0gMTsKIAkJCWRpZXBtc2suYi5pbnRrbmVwbWlzID0gMTsKIAkJCWlmICghY29yZV9pZi0+ZW5fbXVsdGlwbGVfdHhfZmlmbyAmJiBjb3JlX2lmLT5kbWFfZW5hYmxlKQotCQkJCWRpZXBtc2suYi5pbnRrbmVwbWlzID0gMDsgCisJCQkJZGllcG1zay5iLmludGtuZXBtaXMgPSAwOwogCQkJZGllcG1zay5iLnR4Zmlmb3VuZHJuID0gMTsJLy8/Pz8/PworCQkJaWYgKGVwLT50eXBlID09IERXQ19PVEdfRVBfVFlQRV9JU09DKSB7CisJCQkJZGllcG1zay5iLm5hayA9IDE7CisJCQl9CisKKworCiAvKgogCQkJaWYgKGNvcmVfaWYtPmRtYV9kZXNjX2VuYWJsZSkgewogCQkJCWRpZXBtc2suYi5ibmEgPSAxOwogCQkJfQogKi8KLS8qCQkJCisvKgogCQkJaWYgKGNvcmVfaWYtPmRtYV9lbmFibGUpIHsKIAkJCQlkb2VwbXNrLmIubmFrID0gMTsKIAkJCX0KQEAgLTMyOTksMTQgKzMzMTQsMTYgQEAKIAkJCWRvZXBtc2suYi54ZmVyY29tcGwgPSAxOwogCQkJZG9lcG1zay5iLmFoYmVyciA9IDE7CiAJCQlkb2VwbXNrLmIuZXBkaXNhYmxlZCA9IDE7CisJCQlpZiAoZXAtPnR5cGUgPT0gRFdDX09UR19FUF9UWVBFX0lTT0MpCisJCQkJZG9lcG1zay5iLm91dHRrbmVwZGlzID0gMTsKIAotLyoJCQkKKy8qCiAKIAkJCWlmIChjb3JlX2lmLT5kbWFfZGVzY19lbmFibGUpIHsKIAkJCQlkb2VwbXNrLmIuYm5hID0gMTsKIAkJCX0KICovCi0vKgkJCQorLyoKIAkJCWRvZXBtc2suYi5iYWJibGUgPSAxOwogCQkJZG9lcG1zay5iLm55ZXQgPSAxOwogCQkJZG9lcG1zay5iLm5hayA9IDE7CkBAIC0zMzE3LDYgKzMzMzQsMTggQEAKIAkJRFdDX01PRElGWV9SRUczMigmZGV2X2lmLT5kZXZfZ2xvYmFsX3JlZ3MtPmRlYWNoaW50bXNrLAogCQkJCSAwLCBkYWludG1zay5kMzIpOwogCX0gZWxzZSB7CisJCWlmIChlcC0+dHlwZSA9PSBEV0NfT1RHX0VQX1RZUEVfSVNPQykgeworCQkJaWYgKGVwLT5pc19pbikKKwkJCXsKKwkJCQlkaWVwbXNrX2RhdGFfdCBkaWVwbXNrID0gey5kMzIgPSAwIH07CisJCQkJZGllcG1zay5iLm5hayA9IDE7CisJCQkJRFdDX01PRElGWV9SRUczMigmZGV2X2lmLT5kZXZfZ2xvYmFsX3JlZ3MtPmRpZXBtc2ssIDAsIGRpZXBtc2suZDMyKTsKKwkJCX0gZWxzZSB7CisJCQkJZG9lcG1za19kYXRhX3QgZG9lcG1zayA9IHsuZDMyID0gMCB9OworCQkJCWRvZXBtc2suYi5vdXR0a25lcGRpcyA9IDE7CisJCQkJRFdDX01PRElGWV9SRUczMigmZGV2X2lmLT5kZXZfZ2xvYmFsX3JlZ3MtPmRvZXBtc2ssIDAsIGRvZXBtc2suZDMyKTsKKwkJCX0KKwkJfQogCQlEV0NfTU9ESUZZX1JFRzMyKCZkZXZfaWYtPmRldl9nbG9iYWxfcmVncy0+ZGFpbnRtc2ssCiAJCQkJIDAsIGRhaW50bXNrLmQzMik7CiAJfQpAQCAtMzM0Myw3ICszMzcyLDcgQEAKIAl2b2xhdGlsZSB1aW50MzJfdCAqYWRkcjsKIAlkYWludF9kYXRhX3QgZGFpbnRtc2sgPSB7LmQzMiA9IDAgfTsKIAlkY2ZnX2RhdGFfdCBkY2ZnOwotCXVpbnQ4X3QgaTsKKwl1aW50OF90IGkgPSAwOwogCiAjaWZkZWYgRFdDX1VURV9QRVJfSU8KIAllcC0+eGlzb19mcmFtZV9udW0gPSAweEZGRkZGRkZGOwpAQCAtMzM2MywxNCArMzM5MiwxNCBAQAogCWRlcGN0bC5kMzIgPSBEV0NfUkVBRF9SRUczMihhZGRyKTsKIAogCWRlcGN0bC5iLnVzYmFjdGVwID0gMDsKLQkKKwogCS8qIFVwZGF0ZSBuZXh0ZXBfc2VxIGFycmF5IGFuZCBFUE1TQ05UIGluIERDRkcqLwogCWlmICghKGRlcGN0bC5iLmVwdHlwZSAmIDEpICYmIGVwLT5pc19pbiA9PSAxKSB7CS8vIE5QIEVQIElOCiAJCWZvciAoaSA9IDA7IGkgPD0gY29yZV9pZi0+ZGV2X2lmLT5udW1faW5fZXBzOyBpKyspIHsKIAkJCWlmIChjb3JlX2lmLT5uZXh0ZXBfc2VxW2ldID09IGVwLT5udW0pCiAJCQlicmVhazsKIAkJfQotCQljb3JlX2lmLT5uZXh0ZXBfc2VxW2ldID0gY29yZV9pZi0+bmV4dGVwX3NlcVtlcC0+bnVtXTsJCisJCWNvcmVfaWYtPm5leHRlcF9zZXFbaV0gPSBjb3JlX2lmLT5uZXh0ZXBfc2VxW2VwLT5udW1dOwogCQlpZiAoY29yZV9pZi0+Zmlyc3RfaW5fbmV4dGVwX3NlcSA9PSBlcC0+bnVtKQogCQkJY29yZV9pZi0+Zmlyc3RfaW5fbmV4dGVwX3NlcSA9IGk7CiAJCWNvcmVfaWYtPm5leHRlcF9zZXFbZXAtPm51bV0gPSAweGZmOwpAQCAtMzM3OSwxMyArMzQwOCwxMyBAQAogCQlkY2ZnLmIuZXBtc2NudC0tOwogCQlEV0NfV1JJVEVfUkVHMzIoJmNvcmVfaWYtPmRldl9pZi0+ZGV2X2dsb2JhbF9yZWdzLT5kY2ZnLCBkY2ZnLmQzMik7CiAKLQkJCURXQ19ERUJVR1BMKERCR19QQ0RWLCIlcyBmaXJzdF9pbl9uZXh0ZXBfc2VxPSAlMmQ7IG5leHRlcF9zZXFbXTpcbiIsIAorCQkJRFdDX0RFQlVHUEwoREJHX1BDRFYsIiVzIGZpcnN0X2luX25leHRlcF9zZXE9ICUyZDsgbmV4dGVwX3NlcVtdOlxuIiwKIAkJCQlfX2Z1bmNfXywgY29yZV9pZi0+Zmlyc3RfaW5fbmV4dGVwX3NlcSk7CiAJCQlmb3IgKGk9MDsgaSA8PSBjb3JlX2lmLT5kZXZfaWYtPm51bV9pbl9lcHM7IGkrKykgewogCQkJCURXQ19ERUJVR1BMKERCR19QQ0RWLCAiJTJkXG4iLCBjb3JlX2lmLT5uZXh0ZXBfc2VxW2ldKTsKIAkJCX0KIAl9Ci0JCQorCiAJaWYgKGVwLT5pc19pbiA9PSAxKQogCQlkZXBjdGwuYi50eGZudW0gPSAwOwogCkBAIC0zMzkzLDYgKzM0MjIsNzAgQEAKIAkJZGVwY3RsLmIuZXBkaXMgPSAxOwogCiAJRFdDX1dSSVRFX1JFRzMyKGFkZHIsIGRlcGN0bC5kMzIpOworCWRlcGN0bC5kMzIgPSBEV0NfUkVBRF9SRUczMihhZGRyKTsKKwlpZiAoY29yZV9pZi0+ZG1hX2VuYWJsZSAmJiBlcC0+dHlwZSA9PSBEV0NfT1RHX0VQX1RZUEVfSVNPQyAmJiBkZXBjdGwuYi5lcGVuYSkKKwl7CisJCWRlcGN0bF9kYXRhX3QgZGVwY3RsID0gey5kMzIgPSAwfTsKKwkJaWYgKGVwLT5pc19pbikKKwkJeworCQkJZGllcGludF9kYXRhX3QgZGllcGludCA9IHsuZDMyID0gMH07CisKKwkJCWRlcGN0bC5iLnNuYWsgPSAxOworCQkJRFdDX1dSSVRFX1JFRzMyKCZjb3JlX2lmLT5kZXZfaWYtPmluX2VwX3JlZ3NbZXAtPm51bV0tPmRpZXBjdGwsIGRlcGN0bC5kMzIpOworCQkJZG8KKwkJCXsKKwkJCQlkd2NfdWRlbGF5KDEwKTsKKwkJCQlkaWVwaW50LmQzMiA9IERXQ19SRUFEX1JFRzMyKCZjb3JlX2lmLT5kZXZfaWYtPgorCQkJCQkJCQkJCQlpbl9lcF9yZWdzW2VwLT5udW1dLT5kaWVwaW50KTsKKwkJCX0gd2hpbGUgKCFkaWVwaW50LmIuaW5lcG5ha2VmZik7CisJCQlkaWVwaW50LmIuaW5lcG5ha2VmZiA9IDE7CisJCQlEV0NfV1JJVEVfUkVHMzIoJmNvcmVfaWYtPmRldl9pZi0+CisJCQkJCQkJaW5fZXBfcmVnc1tlcC0+bnVtXS0+ZGllcGludCwgZGllcGludC5kMzIpOworCQkJZGVwY3RsLmQzMiA9IDA7CisJCQlkZXBjdGwuYi5lcGRpcyA9IDE7CisJCQlEV0NfV1JJVEVfUkVHMzIoJmNvcmVfaWYtPmRldl9pZi0+aW5fZXBfcmVnc1tlcC0+bnVtXS0+ZGllcGN0bCwgZGVwY3RsLmQzMik7CisJCQlkbworCQkJeworCQkJCWR3Y191ZGVsYXkoMTApOworCQkJCWRpZXBpbnQuZDMyID0gRFdDX1JFQURfUkVHMzIoJmNvcmVfaWYtPmRldl9pZi0+CisJCQkJCQkJCQkJCWluX2VwX3JlZ3NbZXAtPm51bV0tPmRpZXBpbnQpOworCQkJfSB3aGlsZSAoIWRpZXBpbnQuYi5lcGRpc2FibGVkKTsKKwkJCWRpZXBpbnQuYi5lcGRpc2FibGVkID0gMTsKKwkJCURXQ19XUklURV9SRUczMigmY29yZV9pZi0+ZGV2X2lmLT5pbl9lcF9yZWdzW2VwLT5udW1dLT5kaWVwaW50LCBkaWVwaW50LmQzMik7CisJCX0gZWxzZSB7CisJCQlkY3RsX2RhdGFfdCBkY3RsID0gey5kMzIgPSAwfTsKKwkJCWdpbnRtc2tfZGF0YV90IGdpbnRzdHMgPSB7LmQzMiA9IDB9OworCQkJZG9lcGludF9kYXRhX3QgZG9lcGludCA9IHsuZDMyID0gMH07CisJCQlkY3RsLmIuc2dvdXRuYWsgPSAxOworCQkJRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+ZGV2X2lmLT5kZXZfZ2xvYmFsX3JlZ3MtPmRjdGwsIDAsIGRjdGwuZDMyKTsKKwkJCWRvCisJCQl7CisJCQkJZHdjX3VkZWxheSgxMCk7CisJCQkJZ2ludHN0cy5kMzIgPSBEV0NfUkVBRF9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z2ludHN0cyk7CisJCQl9IHdoaWxlICghZ2ludHN0cy5iLmdvdXRuYWtlZmYpOworCQkJZ2ludHN0cy5kMzIgPSAwOworCQkJZ2ludHN0cy5iLmdvdXRuYWtlZmYgPSAxOworCQkJRFdDX1dSSVRFX1JFRzMyKCZjb3JlX2lmLT5jb3JlX2dsb2JhbF9yZWdzLT5naW50c3RzLCBnaW50c3RzLmQzMik7CisKKwkJCWRlcGN0bC5kMzIgPSAwOworCQkJZGVwY3RsLmIuZXBkaXMgPSAxOworCQkJZGVwY3RsLmIuc25hayA9IDE7CisJCQlEV0NfV1JJVEVfUkVHMzIoJmNvcmVfaWYtPmRldl9pZi0+b3V0X2VwX3JlZ3NbZXAtPm51bV0tPmRvZXBjdGwsIGRlcGN0bC5kMzIpOworCQkJZG8KKwkJCXsKKwkJCQlkd2NfdWRlbGF5KDEwKTsKKwkJCQlkb2VwaW50LmQzMiA9IERXQ19SRUFEX1JFRzMyKCZjb3JlX2lmLT5kZXZfaWYtPgorCQkJCQkJCQkJCQlvdXRfZXBfcmVnc1tlcC0+bnVtXS0+ZG9lcGludCk7CisJCQl9IHdoaWxlICghZG9lcGludC5iLmVwZGlzYWJsZWQpOworCisJCQlkb2VwaW50LmIuZXBkaXNhYmxlZCA9IDE7CisJCQlEV0NfV1JJVEVfUkVHMzIoJmNvcmVfaWYtPmRldl9pZi0+b3V0X2VwX3JlZ3NbZXAtPm51bV0tPmRvZXBpbnQsIGRvZXBpbnQuZDMyKTsKKworCQkJZGN0bC5kMzIgPSAwOworCQkJZGN0bC5iLmNnb3V0bmFrID0gMTsKKwkJCURXQ19NT0RJRllfUkVHMzIoJmNvcmVfaWYtPmRldl9pZi0+ZGV2X2dsb2JhbF9yZWdzLT5kY3RsLCAwLCBkY3RsLmQzMik7CisJCX0KKwl9CiAKIAkvKiBEaXNhYmxlIHRoZSBJbnRlcnJ1cHQgZm9yIHRoaXMgRVAgKi8KIAlpZiAoY29yZV9pZi0+bXVsdGlwcm9jX2ludF9lbmFibGUpIHsKQEAgLTM0MjUsMjggKzM1MTgsNTIgQEAKIAl1aW50MzJfdCBvZmZzZXQ7CiAJdWludDMyX3QgeGZlcl9lc3Q7CiAJaW50IGk7CisJdW5zaWduZWQgbWF4eGZlcl9sb2NhbCwgdG90YWxfbGVuOwogCi0JZXAtPmRlc2NfY250ID0gKGVwLT50b3RhbF9sZW4gLyBlcC0+bWF4eGZlcikgKwotCSAgICAoKGVwLT50b3RhbF9sZW4gJSBlcC0+bWF4eGZlcikgPyAxIDogMCk7CisJaWYgKCFlcC0+aXNfaW4gJiYgZXAtPnR5cGUgPT0gRFdDX09UR19FUF9UWVBFX0lOVFIgJiYKKwkJCQkJKGVwLT5tYXhwYWNrZXQlNCkpIHsKKwkJbWF4eGZlcl9sb2NhbCA9IGVwLT5tYXhwYWNrZXQ7CisJCXRvdGFsX2xlbiA9IGVwLT54ZmVyX2xlbjsKKwl9IGVsc2UgeworCQltYXh4ZmVyX2xvY2FsID0gZXAtPm1heHhmZXI7CisJCXRvdGFsX2xlbiA9IGVwLT50b3RhbF9sZW47CisJfQorCisJZXAtPmRlc2NfY250ID0gKHRvdGFsX2xlbiAvIG1heHhmZXJfbG9jYWwpICsKKyAgICAgICAgICAgICgodG90YWxfbGVuICUgbWF4eGZlcl9sb2NhbCkgPyAxIDogMCk7CisKIAlpZiAoIWVwLT5kZXNjX2NudCkKIAkJZXAtPmRlc2NfY250ID0gMTsKIAorCWlmIChlcC0+ZGVzY19jbnQgPiBNQVhfRE1BX0RFU0NfQ05UKQorCQllcC0+ZGVzY19jbnQgPSBNQVhfRE1BX0RFU0NfQ05UOworCiAJZG1hX2Rlc2MgPSBlcC0+ZGVzY19hZGRyOwotCXhmZXJfZXN0ID0gZXAtPnRvdGFsX2xlbjsKKwlpZiAobWF4eGZlcl9sb2NhbCA9PSBlcC0+bWF4cGFja2V0KSB7CisJCWlmICgodG90YWxfbGVuICUgbWF4eGZlcl9sb2NhbCkgJiYKKwkJCQkodG90YWxfbGVuL21heHhmZXJfbG9jYWwgPCBNQVhfRE1BX0RFU0NfQ05UKSkgeworCQkJeGZlcl9lc3QgPSAoZXAtPmRlc2NfY250IC0gMSkgKiBtYXh4ZmVyX2xvY2FsICsKKwkJCQkJKHRvdGFsX2xlbiAlIG1heHhmZXJfbG9jYWwpOworCQl9IGVsc2UKKwkJCXhmZXJfZXN0ID0gZXAtPmRlc2NfY250ICogbWF4eGZlcl9sb2NhbDsKKwl9CisJZWxzZQorCQl4ZmVyX2VzdCA9IHRvdGFsX2xlbjsKIAlvZmZzZXQgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBlcC0+ZGVzY19jbnQ7ICsraSkgewogCQkvKiogRE1BIERlc2NyaXB0b3IgU2V0dXAgKi8KLQkJaWYgKHhmZXJfZXN0ID4gZXAtPm1heHhmZXIpIHsKKwkJaWYgKHhmZXJfZXN0ID4gbWF4eGZlcl9sb2NhbCkgewogCQkJZG1hX2Rlc2MtPnN0YXR1cy5iLmJzID0gQlNfSE9TVF9CVVNZOwogCQkJZG1hX2Rlc2MtPnN0YXR1cy5iLmwgPSAwOwogCQkJZG1hX2Rlc2MtPnN0YXR1cy5iLmlvYyA9IDA7CiAJCQlkbWFfZGVzYy0+c3RhdHVzLmIuc3AgPSAwOwotCQkJZG1hX2Rlc2MtPnN0YXR1cy5iLmJ5dGVzID0gZXAtPm1heHhmZXI7CisJCQlkbWFfZGVzYy0+c3RhdHVzLmIuYnl0ZXMgPSBtYXh4ZmVyX2xvY2FsOwogCQkJZG1hX2Rlc2MtPmJ1ZiA9IGVwLT5kbWFfYWRkciArIG9mZnNldDsKKwkJCWRtYV9kZXNjLT5zdGF0dXMuYi5zdHMgPSAwOwogCQkJZG1hX2Rlc2MtPnN0YXR1cy5iLmJzID0gQlNfSE9TVF9SRUFEWTsKIAotCQkJeGZlcl9lc3QgLT0gZXAtPm1heHhmZXI7Ci0JCQlvZmZzZXQgKz0gZXAtPm1heHhmZXI7CisJCQl4ZmVyX2VzdCAtPSBtYXh4ZmVyX2xvY2FsOworCQkJb2Zmc2V0ICs9IG1heHhmZXJfbG9jYWw7CiAJCX0gZWxzZSB7CiAJCQlkbWFfZGVzYy0+c3RhdHVzLmIuYnMgPSBCU19IT1NUX0JVU1k7CiAJCQlkbWFfZGVzYy0+c3RhdHVzLmIubCA9IDE7CkBAIC0zNDU4LDE3ICszNTc1LDczIEBACiAJCQkJCQkJICAgIHNlbnRfemxwKSA/IDEgOiAwKTsKIAkJCQlkbWFfZGVzYy0+c3RhdHVzLmIuYnl0ZXMgPSB4ZmVyX2VzdDsKIAkJCX0gZWxzZSB7Ci0JCQkJZG1hX2Rlc2MtPnN0YXR1cy5iLmJ5dGVzID0KLQkJCQkgICAgeGZlcl9lc3QgKyAoKDQgLSAoeGZlcl9lc3QgJiAweDMpKSAmIDB4Myk7CisJCQkJaWYgKG1heHhmZXJfbG9jYWwgPT0gZXAtPm1heHBhY2tldCkKKwkJCQkJZG1hX2Rlc2MtPnN0YXR1cy5iLmJ5dGVzID0geGZlcl9lc3Q7CisJCQkJZWxzZQorCQkJCQlkbWFfZGVzYy0+c3RhdHVzLmIuYnl0ZXMgPQorCQkJCSAgICAJCXhmZXJfZXN0ICsgKCg0IC0gKHhmZXJfZXN0ICYgMHgzKSkgJiAweDMpOwogCQkJfQogCiAJCQlkbWFfZGVzYy0+YnVmID0gZXAtPmRtYV9hZGRyICsgb2Zmc2V0OworCQkJZG1hX2Rlc2MtPnN0YXR1cy5iLnN0cyA9IDA7CiAJCQlkbWFfZGVzYy0+c3RhdHVzLmIuYnMgPSBCU19IT1NUX1JFQURZOwogCQl9CiAJCWRtYV9kZXNjKys7CiAJfQogfQorLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRvIHdyaXRlIElTT0MgZGF0YSBpbnRvIGFwcHJvcHJpYXRlIGRlZGljYXRlZAorICogcGVyaW9kaWMgRklGTy4KKyAqLworc3RhdGljIGludDMyX3Qgd3JpdGVfaXNvY190eF9maWZvKGR3Y19vdGdfY29yZV9pZl90ICogY29yZV9pZiwgZHdjX2VwX3QgKiBkd2NfZXApCit7CisJZHdjX290Z19kZXZfaWZfdCAqZGV2X2lmID0gY29yZV9pZi0+ZGV2X2lmOworCWR3Y19vdGdfZGV2X2luX2VwX3JlZ3NfdCAqZXBfcmVnczsKKwlkdHhmc3RzX2RhdGFfdCB0eHN0YXR1cyA9IHsuZDMyID0gMCB9OworCXVpbnQzMl90IGxlbiA9IDA7CisJaW50IGVwbnVtID0gZHdjX2VwLT5udW07CisJaW50IGR3b3JkczsKIAorCURXQ19ERUJVR1BMKERCR19QQ0QsICJEZWRpY2F0ZWQgVHhGaWZvIEVtcHR5OiAlZCBcbiIsIGVwbnVtKTsKKworCWVwX3JlZ3MgPSBjb3JlX2lmLT5kZXZfaWYtPmluX2VwX3JlZ3NbZXBudW1dOworCisJbGVuID0gZHdjX2VwLT54ZmVyX2xlbiAtIGR3Y19lcC0+eGZlcl9jb3VudDsKKworCWlmIChsZW4gPiBkd2NfZXAtPm1heHBhY2tldCkgeworCQlsZW4gPSBkd2NfZXAtPm1heHBhY2tldDsKKwl9CisKKwlkd29yZHMgPSAobGVuICsgMykgLyA0OworCisJLyogV2hpbGUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHF1ZXVlIGFuZCBzcGFjZSBpbiB0aGUgRklGTyBhbmQKKwkgKiBNb3JlIGRhdGEgdG8gdHJhbmZlciwgV3JpdGUgcGFja2V0cyB0byB0aGUgVHggRklGTyAqLworCXR4c3RhdHVzLmQzMiA9IERXQ19SRUFEX1JFRzMyKCZkZXZfaWYtPmluX2VwX3JlZ3NbZXBudW1dLT5kdHhmc3RzKTsKKwlEV0NfREVCVUdQTChEQkdfUENEViwgImI0IGR0eGZzdHNbJWRdPTB4JTA4eFxuIiwgZXBudW0sIHR4c3RhdHVzLmQzMik7CisKKwl3aGlsZSAodHhzdGF0dXMuYi50eGZzcGNhdmFpbCA+IGR3b3JkcyAmJgorCSAgICAgICBkd2NfZXAtPnhmZXJfY291bnQgPCBkd2NfZXAtPnhmZXJfbGVuICYmCisJICAgICAgIGR3Y19lcC0+eGZlcl9sZW4gIT0gMCkgeworCQkvKiBXcml0ZSB0aGUgRklGTyAqLworCQlkd2Nfb3RnX2VwX3dyaXRlX3BhY2tldChjb3JlX2lmLCBkd2NfZXAsIDApOworCisJCWxlbiA9IGR3Y19lcC0+eGZlcl9sZW4gLSBkd2NfZXAtPnhmZXJfY291bnQ7CisJCWlmIChsZW4gPiBkd2NfZXAtPm1heHBhY2tldCkgeworCQkJbGVuID0gZHdjX2VwLT5tYXhwYWNrZXQ7CisJCX0KKworCQlkd29yZHMgPSAobGVuICsgMykgLyA0OworCQl0eHN0YXR1cy5kMzIgPQorCQkgICAgRFdDX1JFQURfUkVHMzIoJmRldl9pZi0+aW5fZXBfcmVnc1tlcG51bV0tPmR0eGZzdHMpOworCQlEV0NfREVCVUdQTChEQkdfUENEViwgImR0eGZzdHNbJWRdPTB4JTA4eFxuIiwgZXBudW0sCisJCQkgICAgdHhzdGF0dXMuZDMyKTsKKwl9CisKKwlEV0NfREVCVUdQTChEQkdfUENEViwgImI0IGR0eGZzdHNbJWRdPTB4JTA4eFxuIiwgZXBudW0sCisJCSAgICBEV0NfUkVBRF9SRUczMigmZGV2X2lmLT5pbl9lcF9yZWdzW2VwbnVtXS0+ZHR4ZnN0cykpOworCisJcmV0dXJuIDE7Cit9CiAvKioKICAqIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgc2V0dXAgZm9yIGEgZGF0YSB0cmFuc2ZlciBmb3IgYW4gRVAgYW5kCiAgKiBzdGFydHMgdGhlIHRyYW5zZmVyLiBGb3IgYW4gSU4gdHJhbnNmZXIsIHRoZSBwYWNrZXRzIHdpbGwgYmUKQEAgLTM1MTMsOCArMzY4NiwxMyBAQAogCQlkZXBjdGwuZDMyID0gRFdDX1JFQURfUkVHMzIoJihpbl9yZWdzLT5kaWVwY3RsKSk7CiAJCWRlcHRzaXouZDMyID0gRFdDX1JFQURfUkVHMzIoJihpbl9yZWdzLT5kaWVwdHNpeikpOwogCi0JCWVwLT54ZmVyX2xlbiArPSAoZXAtPm1heHhmZXIgPCAoZXAtPnRvdGFsX2xlbiAtIGVwLT54ZmVyX2xlbikpID8KLQkJICAgIGVwLT5tYXh4ZmVyIDogKGVwLT50b3RhbF9sZW4gLSBlcC0+eGZlcl9sZW4pOworCQlpZiAoZXAtPm1heHBhY2tldCA+IGVwLT5tYXh4ZmVyIC8gTUFYX1BLVF9DTlQpCisJCQllcC0+eGZlcl9sZW4gKz0gKGVwLT5tYXh4ZmVyIDwgKGVwLT50b3RhbF9sZW4gLSBlcC0+eGZlcl9sZW4pKSA/CisJCSAgICAJCWVwLT5tYXh4ZmVyIDogKGVwLT50b3RhbF9sZW4gLSBlcC0+eGZlcl9sZW4pOworCQllbHNlCisJCQllcC0+eGZlcl9sZW4gKz0gKE1BWF9QS1RfQ05UICogZXAtPm1heHBhY2tldCA8IChlcC0+dG90YWxfbGVuIC0gZXAtPnhmZXJfbGVuKSkgPworCQkJCSBNQVhfUEtUX0NOVCAqIGVwLT5tYXhwYWNrZXQgOiAoZXAtPnRvdGFsX2xlbiAtIGVwLT54ZmVyX2xlbik7CisKIAogCQkvKiBaZXJvIExlbmd0aCBQYWNrZXQ/ICovCiAJCWlmICgoZXAtPnhmZXJfbGVuIC0gZXAtPnhmZXJfY291bnQpID09IDApIHsKQEAgLTM1MjQsMTggKzM3MDIsMjUgQEAKIAkJCS8qIFByb2dyYW0gdGhlIHRyYW5zZmVyIHNpemUgYW5kIHBhY2tldCBjb3VudAogCQkJICogICAgICBhcyBmb2xsb3dzOiB4ZmVyc2l6ZSA9IE4gKiBtYXhwYWNrZXQgKwogCQkJICogICAgICBzaG9ydF9wYWNrZXQgcGt0Y250ID0gTiArIChzaG9ydF9wYWNrZXQKLQkJCSAqICAgICAgZXhpc3QgPyAxIDogMCkgCisJCQkgKiAgICAgIGV4aXN0ID8gMSA6IDApCiAJCQkgKi8KIAkJCWRlcHRzaXouYi54ZmVyc2l6ZSA9IGVwLT54ZmVyX2xlbiAtIGVwLT54ZmVyX2NvdW50OwogCQkJZGVwdHNpei5iLnBrdGNudCA9CiAJCQkgICAgKGVwLT54ZmVyX2xlbiAtIGVwLT54ZmVyX2NvdW50IC0gMSArCiAJCQkgICAgIGVwLT5tYXhwYWNrZXQpIC8gZXAtPm1heHBhY2tldDsKKwkJCWlmIChkZXB0c2l6LmIucGt0Y250ID4gTUFYX1BLVF9DTlQpIHsKKwkJCQlkZXB0c2l6LmIucGt0Y250ID0gTUFYX1BLVF9DTlQ7CisJCQkJZGVwdHNpei5iLnhmZXJzaXplID0gZGVwdHNpei5iLnBrdGNudCAqIGVwLT5tYXhwYWNrZXQ7CisJCQl9CisJCQlpZiAoZXAtPnR5cGUgPT0gRFdDX09UR19FUF9UWVBFX0lTT0MpCisJCQkJZGVwdHNpei5iLm1jID0gZGVwdHNpei5iLnBrdGNudDsKIAkJfQogCiAJCS8qIFdyaXRlIHRoZSBETUEgcmVnaXN0ZXIgKi8KIAkJaWYgKGNvcmVfaWYtPmRtYV9lbmFibGUpIHsKIAkJCWlmIChjb3JlX2lmLT5kbWFfZGVzY19lbmFibGUgPT0gMCkgewotCQkJCWRlcHRzaXouYi5tYyA9IDE7CisJCQkJaWYgKGVwLT50eXBlICE9IERXQ19PVEdfRVBfVFlQRV9JU09DKQorCQkJCQlkZXB0c2l6LmIubWMgPSAxOwogCQkJCURXQ19XUklURV9SRUczMigmaW5fcmVncy0+ZGllcHRzaXosCiAJCQkJCQlkZXB0c2l6LmQzMik7CiAJCQkJRFdDX1dSSVRFX1JFRzMyKCYoaW5fcmVncy0+ZGllcGRtYSksCkBAIC0zNTgwLDEwICszNzY1LDMzIEBACiAKIAkJCQkJfQogCQkJCX0KKwkJCX0gIGVsc2UgeworCQkJCQkgd3JpdGVfaXNvY190eF9maWZvKGNvcmVfaWYsIGVwKTsKIAkJCX0KIAkJfQogCQlpZiAoIWNvcmVfaWYtPmNvcmVfcGFyYW1zLT5lbl9tdWx0aXBsZV90eF9maWZvICYmIGNvcmVfaWYtPmRtYV9lbmFibGUpCiAJCQlkZXBjdGwuYi5uZXh0ZXAgPSBjb3JlX2lmLT5uZXh0ZXBfc2VxW2VwLT5udW1dOworCisJCWlmIChlcC0+dHlwZSA9PSBEV0NfT1RHX0VQX1RZUEVfSVNPQykKKwkJeworCQkJZHN0c19kYXRhX3QgZHN0cyA9IHsuZDMyID0gMH07CisJCQlpZiAoZXAtPmJJbnRlcnZhbCA9PSAxKSB7CisJCQkJZHN0cy5kMzIgPQorCQkJCQlEV0NfUkVBRF9SRUczMigmY29yZV9pZi0+ZGV2X2lmLT5kZXZfZ2xvYmFsX3JlZ3MtPmRzdHMpOworCQkJCWVwLT5mcmFtZV9udW0gPSBkc3RzLmIuc29mZm4gKyBlcC0+YkludGVydmFsOworCQkJCWlmIChlcC0+ZnJhbWVfbnVtID4gMHgzRkZGKQorCQkJCXsKKwkJCQkJZXAtPmZybV9vdmVycnVuID0gMTsKKwkJCQkJZXAtPmZyYW1lX251bSAmPSAweDNGRkY7CisJCQkJfSBlbHNlCisJCQkJCWVwLT5mcm1fb3ZlcnJ1biA9IDA7CisJCQkJaWYgKGVwLT5mcmFtZV9udW0gJiAweDEpIHsKKwkJCQkJZGVwY3RsLmIuc2V0ZDFwaWQgPSAxOworCQkJCX0gZWxzZSB7CisJCQkJCWRlcGN0bC5iLnNldGQwcGlkID0gMTsKKwkJCQl9CisJCQl9CisJCX0KIAkJLyogRVAgZW5hYmxlLCBJTiBkYXRhIGluIEZJRk8gKi8KIAkJZGVwY3RsLmIuY25hayA9IDE7CiAJCWRlcGN0bC5iLmVwZW5hID0gMTsKQEAgLTM1OTcsMTIgKzM4MDUsMTggQEAKIAkJZGVwY3RsLmQzMiA9IERXQ19SRUFEX1JFRzMyKCYob3V0X3JlZ3MtPmRvZXBjdGwpKTsKIAkJZGVwdHNpei5kMzIgPSBEV0NfUkVBRF9SRUczMigmKG91dF9yZWdzLT5kb2VwdHNpeikpOwogCi0JCWVwLT54ZmVyX2xlbiArPSAoZXAtPm1heHhmZXIgPCAoZXAtPnRvdGFsX2xlbiAtIGVwLT54ZmVyX2xlbikpID8KLQkJICAgIGVwLT5tYXh4ZmVyIDogKGVwLT50b3RhbF9sZW4gLSBlcC0+eGZlcl9sZW4pOworCQlpZiAoIWNvcmVfaWYtPmRtYV9kZXNjX2VuYWJsZSkgeworCQkJaWYgKGVwLT5tYXhwYWNrZXQgPiBlcC0+bWF4eGZlciAvIE1BWF9QS1RfQ05UKQorCQkJCWVwLT54ZmVyX2xlbiArPSAoZXAtPm1heHhmZXIgPCAoZXAtPnRvdGFsX2xlbiAtIGVwLT54ZmVyX2xlbikpID8KKyAgICAgICAgICAgICAgICAgICAgICAgIAllcC0+bWF4eGZlciA6IChlcC0+dG90YWxfbGVuIC0gZXAtPnhmZXJfbGVuKTsKKyAgICAgICAgICAgICAgICBlbHNlCisJCQkJCWVwLT54ZmVyX2xlbiArPSAoTUFYX1BLVF9DTlQgKiBlcC0+bWF4cGFja2V0IDwgKGVwLT50b3RhbF9sZW4KKwkJCQkJLSBlcC0+eGZlcl9sZW4pKSA/IE1BWF9QS1RfQ05UICogZXAtPm1heHBhY2tldCA6IChlcC0+dG90YWxfbGVuIC0gZXAtPnhmZXJfbGVuKTsKKwkJfQogCiAJCS8qIFByb2dyYW0gdGhlIHRyYW5zZmVyIHNpemUgYW5kIHBhY2tldCBjb3VudCBhcyBmb2xsb3dzOgogCQkgKgotCQkgKiAgICAgIHBrdGNudCA9IE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCQkgKiAgICAgIHBrdGNudCA9IE4KIAkJICogICAgICB4ZmVyc2l6ZSA9IE4gKiBtYXhwYWNrZXQKIAkJICovCiAJCWlmICgoZXAtPnhmZXJfbGVuIC0gZXAtPnhmZXJfY291bnQpID09IDApIHsKQEAgLTM2MTMsOCArMzgyNywxMyBAQAogCQkJZGVwdHNpei5iLnBrdGNudCA9CiAJCQkgICAgKGVwLT54ZmVyX2xlbiAtIGVwLT54ZmVyX2NvdW50ICsKIAkJCSAgICAgKGVwLT5tYXhwYWNrZXQgLSAxKSkgLyBlcC0+bWF4cGFja2V0OwotCQkJZXAtPnhmZXJfbGVuID0KLQkJCSAgICBkZXB0c2l6LmIucGt0Y250ICogZXAtPm1heHBhY2tldCArIGVwLT54ZmVyX2NvdW50OworCQkJaWYgKGRlcHRzaXouYi5wa3RjbnQgPiBNQVhfUEtUX0NOVCkgeworCQkJCWRlcHRzaXouYi5wa3RjbnQgPSBNQVhfUEtUX0NOVDsKKwkJCX0KKwkJCWlmICghY29yZV9pZi0+ZG1hX2Rlc2NfZW5hYmxlKSB7CisJCQkJZXAtPnhmZXJfbGVuID0KKwkJCSAgICAJCWRlcHRzaXouYi5wa3RjbnQgKiBlcC0+bWF4cGFja2V0ICsgZXAtPnhmZXJfY291bnQ7CisJCQl9CiAJCQlkZXB0c2l6LmIueGZlcnNpemUgPSBlcC0+eGZlcl9sZW4gLSBlcC0+eGZlcl9jb3VudDsKIAkJfQogCkBAIC0zNjM2LDcgKzM4NTUsOSBAQAogCQkJCQkJCWVwLT5kZXNjc19kbWFfYWRkcik7CiAJCQkJfSBlbHNlIHsKICNlbmRpZgotCisJCQkJCS8qKiBUaGlzIGlzIHVzZWQgZm9yIGludGVycnVwdCBvdXQgdHJhbnNmZXJzKi8KKwkJCQkJaWYgKCFlcC0+eGZlcl9sZW4pCisJCQkJCQllcC0+eGZlcl9sZW4gPSBlcC0+dG90YWxfbGVuOwogCQkJCQlpbml0X2RtYV9kZXNjX2NoYWluKGNvcmVfaWYsIGVwKTsKIAogCQkJCQlpZiAoY29yZV9pZi0+Y29yZV9wYXJhbXMtPmRldl9vdXRfbmFrKSB7CkBAIC0zNjQ3LDcgKzM4NjgsNyBAQAogCQkJCQkJCS8qIFJlbWVtYmVyIGluaXRpYWwgdmFsdWUgb2YgZG9lcHRzaXogKi8KIAkJCQkJCQljb3JlX2lmLT5zdGFydF9kb2VwdHNpel92YWxbZXAtPm51bV0gPSBkZXB0c2l6LmQzMjsKIAkJCQkJCQlEV0NfV1JJVEVfUkVHMzIoJm91dF9yZWdzLT5kb2VwdHNpeiwKLQkJCQkJCQkJZGVwdHNpei5kMzIpOwkJCQkJCQkJCQkJCQkKKwkJCQkJCQkJZGVwdHNpei5kMzIpOwogCQkJCQkJfQogCQkJCQl9CiAJCQkJLyoqIERPRVBETUFuIFJlZ2lzdGVyIHdyaXRlICovCkBAIC0zNjYxLDYgKzM4ODIsMjggQEAKIAkJCURXQ19XUklURV9SRUczMigmb3V0X3JlZ3MtPmRvZXB0c2l6LCBkZXB0c2l6LmQzMik7CiAJCX0KIAorCQlpZiAoZXAtPnR5cGUgPT0gRFdDX09UR19FUF9UWVBFX0lTT0MpCisJCXsKKwkJCWRzdHNfZGF0YV90IGRzdHMgPSB7LmQzMiA9IDB9OworCQkJaWYgKGVwLT5iSW50ZXJ2YWwgPT0gMSkgeworCQkJCWRzdHMuZDMyID0KKwkJCQkJRFdDX1JFQURfUkVHMzIoJmNvcmVfaWYtPmRldl9pZi0+ZGV2X2dsb2JhbF9yZWdzLT5kc3RzKTsKKwkJCQllcC0+ZnJhbWVfbnVtID0gZHN0cy5iLnNvZmZuICsgZXAtPmJJbnRlcnZhbDsKKwkJCQlpZiAoZXAtPmZyYW1lX251bSA+IDB4M0ZGRikKKwkJCQl7CisJCQkJCWVwLT5mcm1fb3ZlcnJ1biA9IDE7CisJCQkJCWVwLT5mcmFtZV9udW0gJj0gMHgzRkZGOworCQkJCX0gZWxzZQorCQkJCQllcC0+ZnJtX292ZXJydW4gPSAwOworCisJCQkJaWYgKGVwLT5mcmFtZV9udW0gJiAweDEpIHsKKwkJCQkJZGVwY3RsLmIuc2V0ZDFwaWQgPSAxOworCQkJCX0gZWxzZSB7CisJCQkJCWRlcGN0bC5iLnNldGQwcGlkID0gMTsKKwkJCQl9CisJCQl9CisJCX0KKwogCQkvKiBFUCBlbmFibGUgKi8KIAkJZGVwY3RsLmIuY25hayA9IDE7CiAJCWRlcGN0bC5iLmVwZW5hID0gMTsKQEAgLTM2NzcsOSArMzkyMCw5IEBACiAJCQkJCSAgIGNvcmVfZ2xvYmFsX3JlZ3MtPmdpbnRtc2spKTsKIAogCi0JCS8qIFRpbWVyIGlzIHNjaGVkdWxpbmcgb25seSBmb3Igb3V0IGJ1bGsgdHJhbnNmZXJzIGZvciAKLQkJICogIkRldmljZSBERE1BIE9VVCBOQUsgRW5oYW5jZW1lbnQiIGZlYXR1cmUgdG8gaW5mb3JtIHVzZXIgCi0JCSAqIGFib3V0IHJlY2VpdmVkIGRhdGEgcGF5bG9hZCBpbiBjYXNlIG9mIHRpbWVvdXQgCisJCS8qIFRpbWVyIGlzIHNjaGVkdWxpbmcgb25seSBmb3Igb3V0IGJ1bGsgdHJhbnNmZXJzIGZvcgorCQkgKiAiRGV2aWNlIERETUEgT1VUIE5BSyBFbmhhbmNlbWVudCIgZmVhdHVyZSB0byBpbmZvcm0gdXNlcgorCQkgKiBhYm91dCByZWNlaXZlZCBkYXRhIHBheWxvYWQgaW4gY2FzZSBvZiB0aW1lb3V0CiAJCSAqLwogCQlpZiAoY29yZV9pZi0+Y29yZV9wYXJhbXMtPmRldl9vdXRfbmFrKSB7CiAJCQlpZiAoZXAtPnR5cGUgPT0gRFdDX09UR19FUF9UWVBFX0JVTEspIHsKQEAgLTM4NTYsNyArNDA5OSw3IEBACiAJCQkvKiBQcm9ncmFtIHRoZSB0cmFuc2ZlciBzaXplIGFuZCBwYWNrZXQgY291bnQKIAkJCSAqICAgICAgYXMgZm9sbG93czogeGZlcnNpemUgPSBOICogbWF4cGFja2V0ICsKIAkJCSAqICAgICAgc2hvcnRfcGFja2V0IHBrdGNudCA9IE4gKyAoc2hvcnRfcGFja2V0Ci0JCQkgKiAgICAgIGV4aXN0ID8gMSA6IDApIAorCQkJICogICAgICBleGlzdCA/IDEgOiAwKQogCQkJICovCiAJCQlpZiAoZXAtPnhmZXJfbGVuID4gZXAtPm1heHBhY2tldCkgewogCQkJCWVwLT54ZmVyX2xlbiA9IGVwLT5tYXhwYWNrZXQ7CkBAIC0zODkxLDYgKzQxMzQsNyBAQAogCQkJCSAgICAoZXAtPnhmZXJfbGVuID09IGVwLT5tYXhwYWNrZXQpID8gMCA6IDE7CiAJCQkJZG1hX2Rlc2MtPnN0YXR1cy5iLmJ5dGVzID0gZXAtPnhmZXJfbGVuOwogCQkJCWRtYV9kZXNjLT5idWYgPSBlcC0+ZG1hX2FkZHI7CisJCQkJZG1hX2Rlc2MtPnN0YXR1cy5iLnN0cyA9IDA7CiAJCQkJZG1hX2Rlc2MtPnN0YXR1cy5iLmJzID0gQlNfSE9TVF9SRUFEWTsKIAogCQkJCS8qKiBESUVQRE1BMCBSZWdpc3RlciB3cml0ZSAqLwpAQCAtMzk2NCw2ICs0MjA4LDcgQEAKIAkJCQlkbWFfZGVzYy0+c3RhdHVzLmIuaW9jID0gMTsKIAkJCQlkbWFfZGVzYy0+c3RhdHVzLmIuYnl0ZXMgPSBlcC0+bWF4cGFja2V0OwogCQkJCWRtYV9kZXNjLT5idWYgPSBlcC0+ZG1hX2FkZHI7CisJCQkJZG1hX2Rlc2MtPnN0YXR1cy5iLnN0cyA9IDA7CiAJCQkJZG1hX2Rlc2MtPnN0YXR1cy5iLmJzID0gQlNfSE9TVF9SRUFEWTsKIAogCQkJCS8qKiBET0VQRE1BMCBSZWdpc3RlciB3cml0ZSAqLwpAQCAtNDAxNCw3ICs0MjU5LDcgQEAKIAkJLyogUHJvZ3JhbSB0aGUgdHJhbnNmZXIgc2l6ZSBhbmQgcGFja2V0IGNvdW50CiAJCSAqICAgICAgYXMgZm9sbG93czogeGZlcnNpemUgPSBOICogbWF4cGFja2V0ICsKIAkJICogICAgICBzaG9ydF9wYWNrZXQgcGt0Y250ID0gTiArIChzaG9ydF9wYWNrZXQKLQkJICogICAgICBleGlzdCA/IDEgOiAwKSAKKwkJICogICAgICBleGlzdCA/IDEgOiAwKQogCQkgKi8KIAogCQlpZiAoY29yZV9pZi0+ZG1hX2Rlc2NfZW5hYmxlID09IDApIHsKQEAgLTQwNDUsNiArNDI5MCw3IEBACiAJCQkgICAgKGVwLT54ZmVyX2xlbiA9PSBlcC0+bWF4cGFja2V0KSA/IDAgOiAxOwogCQkJZG1hX2Rlc2MtPnN0YXR1cy5iLmJ5dGVzID0gZXAtPnhmZXJfbGVuOwogCQkJZG1hX2Rlc2MtPmJ1ZiA9IGVwLT5kbWFfYWRkcjsKKwkJCWRtYV9kZXNjLT5zdGF0dXMuYi5zdHMgPSAwOwogCQkJZG1hX2Rlc2MtPnN0YXR1cy5iLmJzID0gQlNfSE9TVF9SRUFEWTsKIAogCQkJLyoqIERJRVBETUEwIFJlZ2lzdGVyIHdyaXRlICovCkBAIC00MTAzLDcgKzQzNDksNyBAQAogCQkvKiBQcm9ncmFtIHRoZSB0cmFuc2ZlciBzaXplIGFuZCBwYWNrZXQgY291bnQKIAkJICogICAgICBhcyBmb2xsb3dzOiB4ZmVyc2l6ZSA9IE4gKiBtYXhwYWNrZXQgKwogCQkgKiAgICAgIHNob3J0X3BhY2tldCBwa3RjbnQgPSBOICsgKHNob3J0X3BhY2tldAotCQkgKiAgICAgIGV4aXN0ID8gMSA6IDApIAorCQkgKiAgICAgIGV4aXN0ID8gMSA6IDApCiAJCSAqLwogCQlkZXB0c2l6LmIueGZlcnNpemUgPSBlcC0+bWF4cGFja2V0OwogCQlkZXB0c2l6LmIucGt0Y250ID0gMTsKQEAgLTQxMTksNiArNDM2NSw3IEBACiAJCQlkbWFfZGVzYy0+c3RhdHVzLmIuaW9jID0gMTsKIAkJCWRtYV9kZXNjLT5zdGF0dXMuYi5ieXRlcyA9IGVwLT5tYXhwYWNrZXQ7CiAJCQlkbWFfZGVzYy0+YnVmID0gZXAtPmRtYV9hZGRyOworCQkJZG1hX2Rlc2MtPnN0YXR1cy5iLnN0cyA9IDA7CiAJCQlkbWFfZGVzYy0+c3RhdHVzLmIuYnMgPSBCU19IT1NUX1JFQURZOwogCiAJCQkvKiogRE9FUERNQTAgUmVnaXN0ZXIgd3JpdGUgKi8KQEAgLTQ0ODMsOSArNDczMCw2IEBACiAJCWFkZHIgPSAmY29yZV9pZi0+ZGV2X2lmLT5vdXRfZXBfcmVnc1tpXS0+ZG9lcGN0bDsKIAkJRFdDX1BSSU5URigiRE9FUENUTAkgQDB4JTA4bFggOiAweCUwOFhcbiIsCiAJCQkgICAodW5zaWduZWQgbG9uZylhZGRyLCBEV0NfUkVBRF9SRUczMihhZGRyKSk7Ci0JCWFkZHIgPSAmY29yZV9pZi0+ZGV2X2lmLT5vdXRfZXBfcmVnc1tpXS0+ZG9lcGZuOwotCQlEV0NfUFJJTlRGKCJET0VQRk4JIEAweCUwOGxYIDogMHglMDhYXG4iLAotCQkJICAgKHVuc2lnbmVkIGxvbmcpYWRkciwgRFdDX1JFQURfUkVHMzIoYWRkcikpOwogCQlhZGRyID0gJmNvcmVfaWYtPmRldl9pZi0+b3V0X2VwX3JlZ3NbaV0tPmRvZXBpbnQ7CiAJCURXQ19QUklOVEYoIkRPRVBJTlQJIEAweCUwOGxYIDogMHglMDhYXG4iLAogCQkJICAgKHVuc2lnbmVkIGxvbmcpYWRkciwgRFdDX1JFQURfUkVHMzIoYWRkcikpOwpAQCAtNDY4NCw3ICs0OTI4LDcgQEAKIAkJICAgRFdDX1JFQURfUkVHMzIoYWRkcikpOwogCWFkZHIgPSAmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+YWRwY3RsOwogCURXQ19QUklOVEYoIkFEUENUTAkgQDB4JTA4bFggOiAweCUwOFhcbiIsICh1bnNpZ25lZCBsb25nKWFkZHIsCi0JCSAgIERXQ19SRUFEX1JFRzMyKGFkZHIpKTsKKwkJICAgZHdjX290Z19hZHBfcmVhZF9yZWcoY29yZV9pZikpOwogCWFkZHIgPSAmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+aHB0eGZzaXo7CiAJRFdDX1BSSU5URigiSFBUWEZTSVoJIEAweCUwOGxYIDogMHglMDhYXG4iLCAodW5zaWduZWQgbG9uZylhZGRyLAogCQkgICBEV0NfUkVBRF9SRUczMihhZGRyKSk7CkBAIC00OTM3LDcgKzUxODEsNyBAQAogCQkvKiBQcm9ncmFtIHRoZSB0cmFuc2ZlciBzaXplIGFuZCBwYWNrZXQgY291bnQKIAkJICogICAgICBhcyBmb2xsb3dzOiB4ZmVyc2l6ZSA9IE4gKiBtYXhwYWNrZXQgKwogCQkgKiAgICAgIHNob3J0X3BhY2tldCBwa3RjbnQgPSBOICsgKHNob3J0X3BhY2tldAotCQkgKiAgICAgIGV4aXN0ID8gMSA6IDApIAorCQkgKiAgICAgIGV4aXN0ID8gMSA6IDApCiAJCSAqLwogCQlkZXB0c2l6LmIueGZlcnNpemUgPSBlcC0+eGZlcl9sZW47CiAJCWRlcHRzaXouYi5wa3RjbnQgPQpAQCAtNTA5Niw2ICs1MzQwLDggQEAKIAlkd2Nfb3RnX3NldF9wYXJhbV9wb3dlcl9kb3duKGNvcmVfaWYsIGR3Y19wYXJhbV9wb3dlcl9kb3duX2RlZmF1bHQpOwogCWR3Y19vdGdfc2V0X3BhcmFtX3JlbG9hZF9jdGwoY29yZV9pZiwgZHdjX3BhcmFtX3JlbG9hZF9jdGxfZGVmYXVsdCk7CiAJZHdjX290Z19zZXRfcGFyYW1fZGV2X291dF9uYWsoY29yZV9pZiwgZHdjX3BhcmFtX2Rldl9vdXRfbmFrX2RlZmF1bHQpOworCWR3Y19vdGdfc2V0X3BhcmFtX2NvbnRfb25fYm5hKGNvcmVfaWYsIGR3Y19wYXJhbV9jb250X29uX2JuYV9kZWZhdWx0KTsKKwlkd2Nfb3RnX3NldF9wYXJhbV9haGJfc2luZ2xlKGNvcmVfaWYsIGR3Y19wYXJhbV9haGJfc2luZ2xlX2RlZmF1bHQpOwogCWR3Y19vdGdfc2V0X3BhcmFtX290Z192ZXIoY29yZV9pZiwgZHdjX3BhcmFtX290Z192ZXJfZGVmYXVsdCk7CiAJZHdjX290Z19zZXRfcGFyYW1fYWRwX2VuYWJsZShjb3JlX2lmLCBkd2NfcGFyYW1fYWRwX2VuYWJsZV9kZWZhdWx0KTsKIAlyZXR1cm4gMDsKQEAgLTYxMTcsNyArNjM2Myw4IEBACiAJfQogCWNvcmVfaWYtPmNvcmVfcGFyYW1zLT5hZHBfc3VwcF9lbmFibGUgPSB2YWw7CiAJLypTZXQgT1RHIHZlcnNpb24gMi4wIGluIGNhc2Ugb2YgZW5hYmxpbmcgQURQKi8KLQlkd2Nfb3RnX3NldF9wYXJhbV9vdGdfdmVyKGNvcmVfaWYsIDEpOworCWlmICh2YWwpCisJCWR3Y19vdGdfc2V0X3BhcmFtX290Z192ZXIoY29yZV9pZiwgMSk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtNjI4OSw2ICs2NTM2LDY5IEBACiAJcmV0dXJuIGNvcmVfaWYtPmNvcmVfcGFyYW1zLT5kZXZfb3V0X25hazsKIH0KIAoraW50IGR3Y19vdGdfc2V0X3BhcmFtX2NvbnRfb25fYm5hKGR3Y19vdGdfY29yZV9pZl90ICogY29yZV9pZiwgaW50MzJfdCB2YWwpCit7CisJaW50IHJldHZhbCA9IDA7CisJaW50IHZhbGlkID0gMTsKKworCWlmIChEV0NfT1RHX1BBUkFNX1RFU1QodmFsLCAwLCAxKSkgeworCQlEV0NfV0FSTigiYCVkJyBpbnZhbGlkIGZvciBwYXJhbWV0ZXIgYGNvbnRfb25fYm5hJ1xuIiwgdmFsKTsKKwkJRFdDX1dBUk4oImNvbnRfb25fYm5hIG11c3QgYmUgMCBvciAxXG4iKTsKKwkJcmV0dXJuIC1EV0NfRV9JTlZBTElEOworCX0KKworCWlmICgodmFsID09IDEpICYmICgoY29yZV9pZi0+c25wc2lkIDwgT1RHX0NPUkVfUkVWXzJfOTRhKSB8fAorCQkhKGNvcmVfaWYtPmNvcmVfcGFyYW1zLT5kbWFfZGVzY19lbmFibGUpKSkgeworCQkJdmFsaWQgPSAwOworCX0KKwlpZiAodmFsaWQgPT0gMCkgeworCQlpZiAoZHdjX290Z19wYXJhbV9pbml0aWFsaXplZChjb3JlX2lmLT5jb3JlX3BhcmFtcy0+Y29udF9vbl9ibmEpKSB7CisJCQlEV0NfRVJST1IoIiVkIGludmFsaWQgZm9yIHBhcmFtZXRlciBjb250X29uX2JuYS4iCisJCQkJIkNoZWNrIEhXIGNvbmZpZ3VyYXRpb24uXG4iLCB2YWwpOworCQl9CisJCXJldHZhbCA9IC1EV0NfRV9JTlZBTElEOworCQl2YWwgPSAwOworCX0KKwljb3JlX2lmLT5jb3JlX3BhcmFtcy0+Y29udF9vbl9ibmEgPSB2YWw7CisJcmV0dXJuIHJldHZhbDsKK30KKworaW50MzJfdCBkd2Nfb3RnX2dldF9wYXJhbV9jb250X29uX2JuYShkd2Nfb3RnX2NvcmVfaWZfdCAqIGNvcmVfaWYpCit7CisJcmV0dXJuIGNvcmVfaWYtPmNvcmVfcGFyYW1zLT5jb250X29uX2JuYTsKK30KKworaW50IGR3Y19vdGdfc2V0X3BhcmFtX2FoYl9zaW5nbGUoZHdjX290Z19jb3JlX2lmX3QgKiBjb3JlX2lmLCBpbnQzMl90IHZhbCkKK3sKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgdmFsaWQgPSAxOworCisJaWYgKERXQ19PVEdfUEFSQU1fVEVTVCh2YWwsIDAsIDEpKSB7CisJCURXQ19XQVJOKCJgJWQnIGludmFsaWQgZm9yIHBhcmFtZXRlciBgYWhiX3NpbmdsZSdcbiIsIHZhbCk7CisJCURXQ19XQVJOKCJhaGJfc2luZ2xlIG11c3QgYmUgMCBvciAxXG4iKTsKKwkJcmV0dXJuIC1EV0NfRV9JTlZBTElEOworCX0KKworCWlmICgodmFsID09IDEpICYmIChjb3JlX2lmLT5zbnBzaWQgPCBPVEdfQ09SRV9SRVZfMl85NGEpKSB7CisJCQl2YWxpZCA9IDA7CisJfQorCWlmICh2YWxpZCA9PSAwKSB7CisJCWlmIChkd2Nfb3RnX3BhcmFtX2luaXRpYWxpemVkKGNvcmVfaWYtPmNvcmVfcGFyYW1zLT5haGJfc2luZ2xlKSkgeworCQkJRFdDX0VSUk9SKCIlZCBpbnZhbGlkIGZvciBwYXJhbWV0ZXIgYWhiX3NpbmdsZS4iCisJCQkJIkNoZWNrIEhXIGNvbmZpZ3VyYXRpb24uXG4iLCB2YWwpOworCQl9CisJCXJldHZhbCA9IC1EV0NfRV9JTlZBTElEOworCQl2YWwgPSAwOworCX0KKwljb3JlX2lmLT5jb3JlX3BhcmFtcy0+YWhiX3NpbmdsZSA9IHZhbDsKKwlyZXR1cm4gcmV0dmFsOworfQorCitpbnQzMl90IGR3Y19vdGdfZ2V0X3BhcmFtX2FoYl9zaW5nbGUoZHdjX290Z19jb3JlX2lmX3QgKiBjb3JlX2lmKQoreworCXJldHVybiBjb3JlX2lmLT5jb3JlX3BhcmFtcy0+YWhiX3NpbmdsZTsKK30KKwogaW50IGR3Y19vdGdfc2V0X3BhcmFtX290Z192ZXIoZHdjX290Z19jb3JlX2lmX3QgKiBjb3JlX2lmLCBpbnQzMl90IHZhbCkKIHsKIAlpbnQgcmV0dmFsID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19jaWwuaCBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19jaWwuaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGVmZGEzNjQuLjk5NTc4NjEKLS0tIGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX2NpbC5oCisrKyBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19jaWwuaApAQCAtMSw4ICsxLDggQEAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiAkRmlsZTogLy9kd2gvdXNiX2lpcC9kZXYvc29mdHdhcmUvb3RnL2xpbnV4L2RyaXZlcnMvZHdjX290Z19jaWwuaCAkCi0gKiAkUmV2aXNpb246ICMxMTggJAotICogJERhdGU6IDIwMTEvMDUvMTcgJAotICogJENoYW5nZTogMTc3NDExMCAkCisgKiAkUmV2aXNpb246ICMxMjIgJAorICogJERhdGU6IDIwMTEvMTAvMjQgJAorICogJENoYW5nZTogMTg3MTE2MCAkCiAgKgogICogU3lub3BzeXMgSFMgT1RHIExpbnV4IFNvZnR3YXJlIERyaXZlciBhbmQgZG9jdW1lbnRhdGlvbiAoaGVyZWluYWZ0ZXIsCiAgKiAiU29mdHdhcmUiKSBpcyBhbiBVbnN1cHBvcnRlZCBwcm9wcmlldGFyeSB3b3JrIG9mIFN5bm9wc3lzLCBJbmMuIHVubGVzcwpAQCAtNzMsNiArNzMsNyBAQAogI2RlZmluZSBPVEdfQ09SRV9SRVZfMl85MWEJMHg0RjU0MjkxQQogI2RlZmluZSBPVEdfQ09SRV9SRVZfMl85MmEJMHg0RjU0MjkyQQogI2RlZmluZSBPVEdfQ09SRV9SRVZfMl85M2EJMHg0RjU0MjkzQQorI2RlZmluZSBPVEdfQ09SRV9SRVZfMl85NGEJMHg0RjU0Mjk0QQogCiAvKioKICAqIEluZm9ybWF0aW9uIGZvciBlYWNoIElTT0MgcGFja2V0LgpAQCAtOTcsOCArOTgsOCBAQAogCXVuc2lnbmVkIGFjdGl2ZToxOwogCiAJLyoqCi0JICpQZXJpb2RpYyBUeCBGSUZPICMgZm9yIElOIEVQcyBGb3IgSU5UUiBFUCBzZXQgdG8gMCB0byB1c2Ugbm9uLXBlcmlvZGljIFR4IEZJRk8KLQkgKiBJZiBkZWRpY2F0ZWQgVHggRklGT3MgYXJlIGVuYWJsZWQgZm9yIGFsbCBJTiBFcHMgLSBUeCBGSUZPICMgRk9SIElOIEVQcyovCisJICogUGVyaW9kaWMgVHggRklGTyAjIGZvciBJTiBFUHMgRm9yIElOVFIgRVAgc2V0IHRvIDAgdG8gdXNlIG5vbi1wZXJpb2RpYworCSAqIFR4IEZJRk8uIElmIGRlZGljYXRlZCBUeCBGSUZPcyBhcmUgZW5hYmxlZCBUeCBGSUZPICMgRk9SIElOIEVQcyovCiAJdW5zaWduZWQgdHhfZmlmb19udW06NDsKIAkvKiogRVAgdHlwZTogMCAtIENvbnRyb2wsIDEgLSBJU09DLAkgMiAtIEJVTEssCTMgLSBJTlRSICovCiAJdW5zaWduZWQgdHlwZToyOwpAQCAtMTYwLDkgKzE2MSwxOCBAQAogCXVpbnQzMl90IGNmaV9yZXFfbGVuOwogI2VuZGlmCQkJCS8vRFdDX1VURV9DRkkKIAorLyoqIE1heCBETUEgRGVzY3JpcHRvciBjb3VudCBmb3IgYW55IEVQICovCisjZGVmaW5lIE1BWF9ETUFfREVTQ19DTlQgMjU2CiAJLyoqIEFsbG9jYXRlZCBETUEgRGVzYyBjb3VudCAqLwogCXVpbnQzMl90IGRlc2NfY250OwogCisJLyoqIGJJbnRlcnZhbCAqLworCXVpbnQzMl90IGJJbnRlcnZhbDsKKwkvKiogTmV4dCBmcmFtZSBudW0gdG8gc2V0dXAgbmV4dCBJU09DIHRyYW5zZmVyICovCisJdWludDMyX3QgZnJhbWVfbnVtOworCS8qKiBJbmRpY2F0ZXMgU09GIG51bWJlciBvdmVycnVuIGluIERTVFMgKi8KKwl1aW50OF90IGZybV9vdmVycnVuOworCiAjaWZkZWYgRFdDX1VURV9QRVJfSU8KIAkvKiogTmV4dCBmcmFtZSBudW0gZm9yIHdoaWNoIHdpbGwgYmUgc2V0dXAgRE1BIERlc2MgKi8KIAl1aW50MzJfdCB4aXNvX2ZyYW1lX251bTsKQEAgLTIwMSw4ICsyMTEsNiBAQAogCS8qKiBGcmFtZSBudW1iZXIgb2YgcGF0dGVybiBkYXRhICovCiAJdWludDMyX3Qgc3luY19mcmFtZTsKIAotCS8qKiBiSW50ZXJ2YWwgKi8KLQl1aW50MzJfdCBiSW50ZXJ2YWw7CiAJLyoqIElTTyBQYWNrZXQgbnVtYmVyIHBlciBmcmFtZSAqLwogCXVpbnQzMl90IHBrdF9wZXJfZnJtOwogCS8qKiBOZXh0IGZyYW1lIG51bSBmb3Igd2hpY2ggd2lsbCBiZSBzZXR1cCBETUEgRGVzYyAqLwpAQCAtNDMzLDkgKzQ0MSw5IEBACiAJaW50MzJfdCBkbWFfZW5hYmxlOwogCiAJLyoqCi0JICogV2hlbiBETUEgbW9kZSBpcyBlbmFibGVkIHNwZWNpZmllcyB3aGV0aGVyIHRvIHVzZSBhZGRyZXNzIERNQSBvciBETUEgRGVzY3JpdG9yIG1vZGUgZm9yIGFjY2Vzc2luZyB0aGUgZGF0YQotCSAqIEZJRk9zIGluIGRldmljZSBtb2RlLiBUaGUgZHJpdmVyIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3QgdGhlIHZhbHVlIGZvciB0aGlzCi0JICogcGFyYW1ldGVyIGlmIG5vbmUgaXMgc3BlY2lmaWVkLgorCSAqIFdoZW4gRE1BIG1vZGUgaXMgZW5hYmxlZCBzcGVjaWZpZXMgd2hldGhlciB0byB1c2UgYWRkcmVzcyBETUEgb3IgRE1BCisJICogRGVzY3JpcHRvciBtb2RlIGZvciBhY2Nlc3NpbmcgdGhlIGRhdGEgRklGT3MgaW4gZGV2aWNlIG1vZGUuIFRoZSBkcml2ZXIKKwkgKiB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHRoZSB2YWx1ZSBmb3IgdGhpcyBpZiBub25lIGlzIHNwZWNpZmllZC4KIAkgKiAwIC0gYWRkcmVzcyBETUEKIAkgKiAxIC0gRE1BIERlc2NyaXB0b3IoZGVmYXVsdCwgaWYgYXZhaWxhYmxlKQogCSAqLwpAQCAtNjc0LDEyICs2ODIsMjggQEAKIAkgKi8KIAlpbnQzMl90IHJlbG9hZF9jdGw7CiAKLQkvKiogRENGRzogRW5hYmxlIGRldmljZSBPdXQgTkFLIAorCS8qKiBEQ0ZHOiBFbmFibGUgZGV2aWNlIE91dCBOQUsKIAkgKiAwIC0gVGhlIGNvcmUgZG9lcyBub3Qgc2V0IE5BSyBhZnRlciBCdWxrIE91dCB0cmFuc2ZlciBjb21wbGV0ZS4KIAkgKiAxIC0gVGhlIGNvcmUgc2V0cyBOQUsgYWZ0ZXIgQnVsayBPVVQgdHJhbnNmZXIgY29tcGxldGUuCiAJICovCiAJaW50MzJfdCBkZXZfb3V0X25hazsKIAorCS8qKiBEQ0ZHOiBFbmFibGUgQ29udGludWUgb24gQk5BCisJICogQWZ0ZXIgcmVjZWl2aW5nIEJOQSBpbnRlcnJ1cHQgdGhlIGNvcmUgZGlzYWJsZXMgdGhlIGVuZHBvaW50LHdoZW4gdGhlCisJICogZW5kcG9pbnQgaXMgcmUtZW5hYmxlZCBieSB0aGUgYXBwbGljYXRpb24gdGhlIGNvcmUgc3RhcnRzIHByb2Nlc3NpbmcKKwkgKiAwIC0gZnJvbSB0aGUgRE9FUERNQSBkZXNjcmlwdG9yCisJICogMSAtIGZyb20gdGhlIGRlc2NyaXB0b3Igd2hpY2ggcmVjZWl2ZWQgdGhlIEJOQS4KKwkgKi8KKwlpbnQzMl90IGNvbnRfb25fYm5hOworCisJLyoqIEdBSEJDRkc6IEFIQiBTaW5nbGUgU3VwcG9ydAorCSAqIFRoaXMgYml0IHdoZW4gcHJvZ3JhbW1lZCBzdXBwb3J0cyBTSU5HTEUgdHJhbnNmZXJzIGZvciByZW1haW5kZXIKKwkgKiBkYXRhIGluIGEgdHJhbnNmZXIgZm9yIERNQSBtb2RlIG9mIG9wZXJhdGlvbi4KKwkgKiAwIC0gaW4gdGhpcyBjYXNlIHRoZSByZW1haW5kZXIgZGF0YSB3aWxsIGJlIHNlbnQgdXNpbmcgSU5DUiBidXJzdCBzaXplLgorCSAqIDEgLSBpbiB0aGlzIGNhc2UgdGhlIHJlbWFpbmRlciBkYXRhIHdpbGwgYmUgc2VudCB1c2luZyBTSU5HTEUgYnVyc3Qgc2l6ZS4KKwkgKi8KKwlpbnQzMl90IGFoYl9zaW5nbGU7CisKIAkvKiogQ29yZSBQb3dlciBkb3duIG1vZGUKIAkgKiAwIC0gTm8gUG93ZXIgRG93biBpcyBlbmFibGVkCiAJICogMSAtIFJlc2VydmVkCkBAIC03NTcsNyArNzgxLDYgQEAKIAl1aW50MzJfdCBkaWVwY3RsW01BWF9FUFNfQ0hBTk5FTFNdOwogCXVpbnQzMl90IGRpZXB0c2l6W01BWF9FUFNfQ0hBTk5FTFNdOwogCXVpbnQzMl90IGRpZXBkbWFbTUFYX0VQU19DSEFOTkVMU107Ci0JdWludDMyX3QgZG9lcGZuW01BWF9FUFNfQ0hBTk5FTFNdOwogfTsKIC8qKgogICogVGhlIDxjb2RlPmR3Y19vdGdfY29yZV9pZjwvY29kZT4gc3RydWN0dXJlIGNvbnRhaW5zIGluZm9ybWF0aW9uIG5lZWRlZCB0byBtYW5hZ2UKQEAgLTk1MiwxMyArOTc1LDE2IEBACiAJICogYWxzbyB1c2VkIGFzIGNvdW50ZXIgb2YgZGlzYWJsZWQgTlAgSU4gRVAncyAqLwogCXVpbnQ4X3Qgc3RhcnRfcHJlZGljdDsKIAotCS8qKiBOZXh0RXAgc2VxdWVuY2UsIGluY2x1ZGluZyBFUDA6IG5leHRlcF9zZXFbXSA9IEVQIGlmIG5vbi1wZXJpb2RpYyBhbmQgCisJLyoqIE5leHRFcCBzZXF1ZW5jZSwgaW5jbHVkaW5nIEVQMDogbmV4dGVwX3NlcVtdID0gRVAgaWYgbm9uLXBlcmlvZGljIGFuZAogCSAqIGFjdGl2ZSwgMHhmZiBvdGhlcndpc2UgKi8KIAl1aW50OF90IG5leHRlcF9zZXFbTUFYX0VQU19DSEFOTkVMU107CiAKIAkvKiogSW5kZXggb2YgZmlzcnQgRVAgaW4gbmV4dGVwX3NlcSBhcnJheSB3aGljaCBzaG91bGQgYmUgcmUtZW5hYmxlZCAqKi8KIAl1aW50OF90IGZpcnN0X2luX25leHRlcF9zZXE7CiAKKwkvKiogRnJhbWUgbnVtYmVyIHdoaWxlIGVudGVyaW5nIHRvIElTUiAtIG5lZWRlZCBmb3IgSVNPQ3MgKiovCisJdWludDMyX3QgZnJhbWVfbnVtOworCiB9OwogCiAjaWZkZWYgREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19jaWxfaW50ci5jIGIvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX2NpbF9pbnRyLmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA4MTMyMDNlLi5lZGM1YzkyCi0tLSBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19jaWxfaW50ci5jCisrKyBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19jaWxfaW50ci5jCkBAIC0xLDggKzEsOCBAQAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqICRGaWxlOiAvL2R3aC91c2JfaWlwL2Rldi9zb2Z0d2FyZS9vdGcvbGludXgvZHJpdmVycy9kd2Nfb3RnX2NpbF9pbnRyLmMgJAotICogJFJldmlzaW9uOiAjMjkgJAotICogJERhdGU6IDIwMTEvMDUvMTcgJAotICogJENoYW5nZTogMTc3NDExMCAkCisgKiAkUmV2aXNpb246ICMzMSAkCisgKiAkRGF0ZTogMjAxMS8xMC8yNCAkCisgKiAkQ2hhbmdlOiAxODcxMjg2ICQKICAqCiAgKiBTeW5vcHN5cyBIUyBPVEcgTGludXggU29mdHdhcmUgRHJpdmVyIGFuZCBkb2N1bWVudGF0aW9uIChoZXJlaW5hZnRlciwKICAqICJTb2Z0d2FyZSIpIGlzIGFuIFVuc3VwcG9ydGVkIHByb3ByaWV0YXJ5IHdvcmsgb2YgU3lub3BzeXMsIEluYy4gdW5sZXNzCkBAIC00Miw2ICs0Miw5IEBACiAjaW5jbHVkZSAiZHdjX29zLmgiCiAjaW5jbHVkZSAiZHdjX290Z19yZWdzLmgiCiAjaW5jbHVkZSAiZHdjX290Z19jaWwuaCIKKyNpbmNsdWRlICJkd2Nfb3RnX2RyaXZlci5oIgorI2luY2x1ZGUgImR3Y19vdGdfcGNkLmgiCisjaW5jbHVkZSAiZHdjX290Z19oY2QuaCIKIAogI2lmZGVmIERFQlVHCiBpbmxpbmUgY29uc3QgY2hhciAqb3Bfc3RhdGVfc3RyKGR3Y19vdGdfY29yZV9pZl90ICogY29yZV9pZikKQEAgLTEyNyw2ICsxMzAsNyBAQAogCQkJCX0KIAogCQkJCWdwd3Jkbi5kMzIgPSAwOworCQkJCWdwd3Jkbi5iLnBtdWludHNlbCA9IDE7CiAJCQkJZ3B3cmRuLmIucG11YWN0diA9IDE7CiAJCQkJRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+CiAJCQkJCQkgZ3B3cmRuLCAwLCBncHdyZG4uZDMyKTsKQEAgLTMzMSwxMiArMzM1LDE0IEBACiAJRFdDX0RFQlVHUEwoREJHX0NJTCwKIAkJICAgICIgKytDb25uZWN0b3IgSUQgU3RhdHVzIENoYW5nZSBJbnRlcnJ1cHQrKyAgKCVzKVxuIiwKIAkJICAgIChkd2Nfb3RnX2lzX2hvc3RfbW9kZShjb3JlX2lmKSA/ICJIb3N0IiA6ICJEZXZpY2UiKSk7CisJCisJRFdDX1NQSU5VTkxPQ0soY29yZV9pZi0+bG9jayk7CiAKIAkvKgogCSAqIE5lZWQgdG8gc2NoZWR1bGUgYSB3b3JrLCBhcyB0aGVyZSBhcmUgcG9zc2libGUgREVMQVkgZnVuY3Rpb24gY2FsbHMKIAkgKiBSZWxlYXNlIGxvY2sgYmVmb3JlIHNjaGVkdWxpbmcgd29ya3EgYXMgaXQgaG9sZHMgc3BpbmxvY2sgZHVyaW5nIHNjaGVkdWxpbmcKIAkgKi8KLQlEV0NfU1BJTlVOTE9DSyhjb3JlX2lmLT5sb2NrKTsKKwogCURXQ19XT1JLUV9TQ0hFRFVMRShjb3JlX2lmLT53cV9vdGcsIHdfY29ubl9pZF9zdGF0dXNfY2hhbmdlLAogCQkJICAgY29yZV9pZiwgImNvbm5lY3Rpb24gaWQgc3RhdHVzIGNoYW5nZSIpOwogCURXQ19TUElOTE9DSyhjb3JlX2lmLT5sb2NrKTsKQEAgLTM1OSw3ICszNjUsNiBAQAogICovCiBpbnQzMl90IGR3Y19vdGdfaGFuZGxlX3Nlc3Npb25fcmVxX2ludHIoZHdjX290Z19jb3JlX2lmX3QgKiBjb3JlX2lmKQogewotCWhwcnQwX2RhdGFfdCBocHJ0MDsKIAlnaW50c3RzX2RhdGFfdCBnaW50c3RzOwogCiAjaWZuZGVmIERXQ19IT1NUX09OTFkKQEAgLTM2OCw2ICszNzMsNyBAQAogCWlmIChkd2Nfb3RnX2lzX2RldmljZV9tb2RlKGNvcmVfaWYpKSB7CiAJCURXQ19QUklOVEYoIlNSUDogRGV2aWNlIG1vZGVcbiIpOwogCX0gZWxzZSB7CisJCWhwcnQwX2RhdGFfdCBocHJ0MDsKIAkJRFdDX1BSSU5URigiU1JQOiBIb3N0IG1vZGVcbiIpOwogCiAJCS8qIFR1cm4gb24gdGhlIHBvcnQgcG93ZXIgYml0LiAqLwpAQCAtNTk3LDczICs2MDMsMTE5IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQzMl90IGR3Y19vdGdfaGFuZGxlX3B3cmRuX2lkc3RzX2NoYW5nZShkd2Nfb3RnX2NvcmVfaWZfdCAqIGNvcmVfaWYpCitzdGF0aWMgaW50MzJfdCBkd2Nfb3RnX2hhbmRsZV9wd3Jkbl9pZHN0c19jaGFuZ2UoZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldikKIHsKIAlncHdyZG5fZGF0YV90IGdwd3JkbiA9IHsuZDMyID0gMCB9OwogCWdwd3Jkbl9kYXRhX3QgZ3B3cmRuX3RlbXAgPSB7LmQzMiA9IDAgfTsKLQotCWlmICghY29yZV9pZi0+aGliZXJuYXRpb25fc3VzcGVuZCkgewotCQlEV0NfUFJJTlRGKCJBbHJlYWR5IGV4aXRlZCBmcm9tIEhpYmVybmF0aW9uXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQorCWR3Y19vdGdfY29yZV9pZl90ICpjb3JlX2lmID0gb3RnX2Rldi0+Y29yZV9pZjsKIAogCURXQ19ERUJVR1BMKERCR19BTlksICIlcyBjYWxsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJZ3B3cmRuX3RlbXAuZDMyID0gRFdDX1JFQURfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmdwd3Jkbik7Ci0KLQkvKiBTd2l0Y2ggb24gdGhlIHZvbHRhZ2UgdG8gdGhlIGNvcmUgKi8KLQlncHdyZG4uYi5wd3JkbnN3dGNoID0gMTsKLQlEV0NfTU9ESUZZX1JFRzMyKCZjb3JlX2lmLT5jb3JlX2dsb2JhbF9yZWdzLT5ncHdyZG4sIGdwd3Jkbi5kMzIsIDApOwotCWR3Y191ZGVsYXkoMTApOwotCi0JLyogUmVzZXQgdGhlIGNvcmUgKi8KLQlncHdyZG4uZDMyID0gMDsKLQlncHdyZG4uYi5wd3JkbnJzdG4gPSAxOwotCURXQ19NT0RJRllfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmdwd3JkbiwgZ3B3cmRuLmQzMiwgMCk7Ci0JZHdjX3VkZWxheSgxMCk7Ci0KLQkvKiBEaXNhYmxlIHBvd2VyIGNsYW1wcyAqLwotCWdwd3Jkbi5kMzIgPSAwOwotCWdwd3Jkbi5iLnB3cmRuY2xtcCA9IDE7Ci0JRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z3B3cmRuLCBncHdyZG4uZDMyLCAwKTsKLQotCS8qIFJlbW92ZSByZXNldCB0aGUgY29yZSBzaWduYWwgKi8KLQlncHdyZG4uZDMyID0gMDsKLQlncHdyZG4uYi5wd3JkbnJzdG4gPSAxOwotCURXQ19NT0RJRllfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmdwd3JkbiwgMCwgZ3B3cmRuLmQzMik7Ci0JZHdjX3VkZWxheSgxMCk7Ci0KLQkvKiBEaXNhYmxlIFBNVSBpbnRlcnJ1cHQgKi8KLQlncHdyZG4uZDMyID0gMDsKLQlncHdyZG4uYi5wbXVpbnRzZWwgPSAxOwotCURXQ19NT0RJRllfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmdwd3JkbiwgZ3B3cmRuLmQzMiwgMCk7Ci0KLQkvKkluZGljYXRlcyB0aGF0IHdlIGFyZSBleGl0aW5nIGZyb20gaGliZXJuYXRpb24gKi8KLQljb3JlX2lmLT5oaWJlcm5hdGlvbl9zdXNwZW5kID0gMDsKLQotCS8qIERpc2FibGUgUE1VICovCi0JZ3B3cmRuLmQzMiA9IDA7Ci0JZ3B3cmRuLmIucG11YWN0diA9IDE7Ci0JRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z3B3cmRuLCBncHdyZG4uZDMyLCAwKTsKLQlkd2NfdWRlbGF5KDEwKTsKLQotCWdwd3Jkbi5kMzIgPSBjb3JlX2lmLT5ncl9iYWNrdXAtPmdwd3Jkbl9sb2NhbDsKLQlpZiAoZ3B3cmRuLmIuZGlzX3ZidXMgPT0gMSkgewotCQlncHdyZG4uZDMyID0gMDsKLQkJZ3B3cmRuLmIuZGlzX3ZidXMgPSAxOworCWlmIChjb3JlX2lmLT5wb3dlcl9kb3duID09IDIpCisJewkJCisJCWlmICghY29yZV9pZi0+aGliZXJuYXRpb25fc3VzcGVuZCkgeworCQkJRFdDX1BSSU5URigiQWxyZWFkeSBleGl0ZWQgZnJvbSBIaWJlcm5hdGlvblxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlEV0NfREVCVUdQTChEQkdfQU5ZLCAiRXhpdCBmcm9tIGhpYmVybmF0aW9uIG9uIElEIHN0cyBjaGFuZ2VcbiIpOworCQkvKiBTd2l0Y2ggb24gdGhlIHZvbHRhZ2UgdG8gdGhlIGNvcmUgKi8KKwkJZ3B3cmRuLmIucHdyZG5zd3RjaCA9IDE7CiAJCURXQ19NT0RJRllfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmdwd3JkbiwgZ3B3cmRuLmQzMiwgMCk7CisJCWR3Y191ZGVsYXkoMTApOworCisJCS8qIFJlc2V0IHRoZSBjb3JlICovCisJCWdwd3Jkbi5kMzIgPSAwOworCQlncHdyZG4uYi5wd3JkbnJzdG4gPSAxOworCQlEV0NfTU9ESUZZX1JFRzMyKCZjb3JlX2lmLT5jb3JlX2dsb2JhbF9yZWdzLT5ncHdyZG4sIGdwd3Jkbi5kMzIsIDApOworCQlkd2NfdWRlbGF5KDEwKTsKKworCQkvKiBEaXNhYmxlIHBvd2VyIGNsYW1wcyAqLworCQlncHdyZG4uZDMyID0gMDsKKwkJZ3B3cmRuLmIucHdyZG5jbG1wID0gMTsKKwkJRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z3B3cmRuLCBncHdyZG4uZDMyLCAwKTsKKworCQkvKiBSZW1vdmUgcmVzZXQgdGhlIGNvcmUgc2lnbmFsICovCisJCWdwd3Jkbi5kMzIgPSAwOworCQlncHdyZG4uYi5wd3JkbnJzdG4gPSAxOworCQlEV0NfTU9ESUZZX1JFRzMyKCZjb3JlX2lmLT5jb3JlX2dsb2JhbF9yZWdzLT5ncHdyZG4sIDAsIGdwd3Jkbi5kMzIpOworCQlkd2NfdWRlbGF5KDEwKTsKKworCQkvKiBEaXNhYmxlIFBNVSBpbnRlcnJ1cHQgKi8KKwkJZ3B3cmRuLmQzMiA9IDA7CisJCWdwd3Jkbi5iLnBtdWludHNlbCA9IDE7CisJCURXQ19NT0RJRllfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmdwd3JkbiwgZ3B3cmRuLmQzMiwgMCk7CisKKwkJLypJbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgZXhpdGluZyBmcm9tIGhpYmVybmF0aW9uICovCisJCWNvcmVfaWYtPmhpYmVybmF0aW9uX3N1c3BlbmQgPSAwOworCisJCS8qIERpc2FibGUgUE1VICovCisJCWdwd3Jkbi5kMzIgPSAwOworCQlncHdyZG4uYi5wbXVhY3R2ID0gMTsKKwkJRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z3B3cmRuLCBncHdyZG4uZDMyLCAwKTsKKwkJZHdjX3VkZWxheSgxMCk7CisKKwkJZ3B3cmRuLmQzMiA9IGNvcmVfaWYtPmdyX2JhY2t1cC0+Z3B3cmRuX2xvY2FsOworCQlpZiAoZ3B3cmRuLmIuZGlzX3ZidXMgPT0gMSkgeworCQkJZ3B3cmRuLmQzMiA9IDA7CisJCQlncHdyZG4uYi5kaXNfdmJ1cyA9IDE7CisJCQlEV0NfTU9ESUZZX1JFRzMyKCZjb3JlX2lmLT5jb3JlX2dsb2JhbF9yZWdzLT5ncHdyZG4sIGdwd3Jkbi5kMzIsIDApOworCQl9CisKKwkJaWYgKGdwd3Jkbl90ZW1wLmIuaWRzdHMpIHsKKwkJCWNvcmVfaWYtPm9wX3N0YXRlID0gQl9QRVJJUEhFUkFMOworCQkJZHdjX290Z19jb3JlX2luaXQoY29yZV9pZik7CisJCQlkd2Nfb3RnX2VuYWJsZV9nbG9iYWxfaW50ZXJydXB0cyhjb3JlX2lmKTsKKwkJCWNpbF9wY2Rfc3RhcnQoY29yZV9pZik7CisJCX0gZWxzZSB7CisJCQljb3JlX2lmLT5vcF9zdGF0ZSA9IEFfSE9TVDsKKwkJCWR3Y19vdGdfY29yZV9pbml0KGNvcmVfaWYpOworCQkJZHdjX290Z19lbmFibGVfZ2xvYmFsX2ludGVycnVwdHMoY29yZV9pZik7CisJCQljaWxfaGNkX3N0YXJ0KGNvcmVfaWYpOworCQl9CiAJfQogCi0JaWYgKGdwd3Jkbl90ZW1wLmIuaWRzdHMpIHsKLQkJY29yZV9pZi0+b3Bfc3RhdGUgPSBCX1BFUklQSEVSQUw7Ci0JCWR3Y19vdGdfY29yZV9pbml0KGNvcmVfaWYpOwotCQlkd2Nfb3RnX2VuYWJsZV9nbG9iYWxfaW50ZXJydXB0cyhjb3JlX2lmKTsKLQkJY2lsX3BjZF9zdGFydChjb3JlX2lmKTsKLQl9IGVsc2UgewotCQljb3JlX2lmLT5vcF9zdGF0ZSA9IEFfSE9TVDsKLQkJZHdjX290Z19jb3JlX2luaXQoY29yZV9pZik7Ci0JCWR3Y19vdGdfZW5hYmxlX2dsb2JhbF9pbnRlcnJ1cHRzKGNvcmVfaWYpOwotCQljaWxfaGNkX3N0YXJ0KGNvcmVfaWYpOworCWlmIChjb3JlX2lmLT5hZHBfZW5hYmxlKQorCXsKKwkJdWludDhfdCBpc19ob3N0ID0gMDsKKwkJRFdDX1NQSU5VTkxPQ0soY29yZV9pZi0+bG9jayk7CisJCS8qIENoYW5nZSB0aGUgY29yZV9pZidzIGxvY2sgdG8gaGNkL3BjZCBsb2NrIGRlcGVuZCBvbiBtb2RlPyAqLworI2lmbmRlZiBEV0NfSE9TVF9PTkxZCQkKKwkJaWYgKGdwd3Jkbl90ZW1wLmIuaWRzdHMpCisJCQljb3JlX2lmLT5sb2NrID0gb3RnX2Rldi0+cGNkLT5sb2NrOworI2VuZGlmCisjaWZuZGVmIERXQ19ERVZJQ0VfT05MWQorCQlpZiAoIWdwd3Jkbl90ZW1wLmIuaWRzdHMpIHsKKwkJCQljb3JlX2lmLT5sb2NrID0gb3RnX2Rldi0+aGNkLT5sb2NrOwkKKwkJCQlpc19ob3N0ID0gMTsKKwkJfQorI2VuZGlmCisJCURXQ19QUklOVEYoIlJFU1RBUlQgQURQXG4iKTsKKwkJaWYgKGNvcmVfaWYtPmFkcC5wcm9iZV9lbmFibGVkKQkJCisJCQlkd2Nfb3RnX2FkcF9wcm9iZV9zdG9wKGNvcmVfaWYpOworCQlpZiAoY29yZV9pZi0+YWRwLnNlbnNlX2VuYWJsZWQpCQkKKwkJCWR3Y19vdGdfYWRwX3NlbnNlX3N0b3AoY29yZV9pZik7CisJCWlmIChjb3JlX2lmLT5hZHAuc2Vuc2VfdGltZXJfc3RhcnRlZCkJCQorCQkJRFdDX1RJTUVSX0NBTkNFTChjb3JlX2lmLT5hZHAuc2Vuc2VfdGltZXIpOworCQlpZiAoY29yZV9pZi0+YWRwLnZidXNvbl90aW1lcl9zdGFydGVkKQkJCisJCQlEV0NfVElNRVJfQ0FOQ0VMKGNvcmVfaWYtPmFkcC52YnVzb25fdGltZXIpOworCQljb3JlX2lmLT5hZHAucHJvYmVfdGltZXJfdmFsdWVzWzBdID0gLTE7CisJCWNvcmVfaWYtPmFkcC5wcm9iZV90aW1lcl92YWx1ZXNbMV0gPSAtMTsKKwkJY29yZV9pZi0+YWRwLnNlbnNlX3RpbWVyX3N0YXJ0ZWQgPSAwOworCQljb3JlX2lmLT5hZHAudmJ1c29uX3RpbWVyX3N0YXJ0ZWQgPSAwOworCQljb3JlX2lmLT5hZHAucHJvYmVfY291bnRlciA9IDA7CisJCWNvcmVfaWYtPmFkcC5ncHdyZG4gPSAwOworCQkKKwkJLyogRGlzYWJsZSBQTVUgYW5kIHJlc3RhcnQgQURQICovCisJCWdwd3Jkbl90ZW1wLmQzMiA9IDA7CisJCWdwd3Jkbl90ZW1wLmIucG11YWN0diA9IDE7CisJCWdwd3Jkbl90ZW1wLmIucG11aW50c2VsID0gMTsKKwkJRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z3B3cmRuLCBncHdyZG4uZDMyLCAwKTsKKwkJRFdDX1BSSU5URigiQ2hlY2sgcG9pbnQgMVxuIik7CisJCWR3Y19tZGVsYXkoMTEwKTsKKwkJZHdjX290Z19hZHBfc3RhcnQoY29yZV9pZiwgaXNfaG9zdCk7CisJCURXQ19TUElOTE9DSyhjb3JlX2lmLT5sb2NrKTsKIAl9CisJCiAKIAlyZXR1cm4gMTsKIH0KQEAgLTY3NSw3MCArNzI3LDcyIEBACiAJRFdDX0RFQlVHUEwoREJHX0FOWSwgIiVzIGNhbGxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAogCWdwd3Jkbi5kMzIgPSBEV0NfUkVBRF9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z3B3cmRuKTsKLQlpZiAoIWNvcmVfaWYtPmhpYmVybmF0aW9uX3N1c3BlbmQpIHsKLQkJRFdDX1BSSU5URigiQWxyZWFkeSBleGl0ZWQgZnJvbSBIaWJlcm5hdGlvblxuIik7Ci0JCXJldHVybiAxOwotCX0KKwlpZiAoY29yZV9pZi0+cG93ZXJfZG93biA9PSAyKSB7CisJCWlmICghY29yZV9pZi0+aGliZXJuYXRpb25fc3VzcGVuZCkgeworCQkJRFdDX1BSSU5URigiQWxyZWFkeSBleGl0ZWQgZnJvbSBIaWJlcm5hdGlvblxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQogCi0JaWYgKChvdGdfY2FwX3BhcmFtICE9IERXQ19PVEdfQ0FQX1BBUkFNX0hOUF9TUlBfQ0FQQUJMRSB8fAotCSAgICAgb3RnX2NhcF9wYXJhbSAhPSBEV0NfT1RHX0NBUF9QQVJBTV9TUlBfT05MWV9DQVBBQkxFKSAmJgotCSAgICBncHdyZG4uYi5ic2Vzc3ZsZCA9PSAwKSB7Ci0JCS8qIFNhdmUgZ3B3cmRuIHJlZ2lzdGVyIGZvciBmdXJ0aGVyIHVzYWdlIGlmIHN0c2NobmcgaW50ZXJydXB0ICovCi0JCWNvcmVfaWYtPmdyX2JhY2t1cC0+Z3B3cmRuX2xvY2FsID0KLQkJICAgIERXQ19SRUFEX1JFRzMyKCZjb3JlX2lmLT5jb3JlX2dsb2JhbF9yZWdzLT5ncHdyZG4pOwotCQkvKkV4aXQgZnJvbSBJU1IgYW5kIHdhaXQgZm9yIHN0c2NobmcgaW50ZXJydXB0IHdpdGggYnNlc3N2bGQgPSAxICovCi0JCXJldHVybiAxOwotCX0KKwkJaWYgKChvdGdfY2FwX3BhcmFtICE9IERXQ19PVEdfQ0FQX1BBUkFNX0hOUF9TUlBfQ0FQQUJMRSB8fAorCQkJIG90Z19jYXBfcGFyYW0gIT0gRFdDX09UR19DQVBfUEFSQU1fU1JQX09OTFlfQ0FQQUJMRSkgJiYKKwkJCWdwd3Jkbi5iLmJzZXNzdmxkID09IDApIHsKKwkJCS8qIFNhdmUgZ3B3cmRuIHJlZ2lzdGVyIGZvciBmdXJ0aGVyIHVzYWdlIGlmIHN0c2NobmcgaW50ZXJydXB0ICovCisJCQljb3JlX2lmLT5ncl9iYWNrdXAtPmdwd3Jkbl9sb2NhbCA9CisJCQkJRFdDX1JFQURfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmdwd3Jkbik7CisJCQkvKkV4aXQgZnJvbSBJU1IgYW5kIHdhaXQgZm9yIHN0c2NobmcgaW50ZXJydXB0IHdpdGggYnNlc3N2bGQgPSAxICovCisJCQlyZXR1cm4gMTsKKwkJfQogCi0JLyogU3dpdGNoIG9uIHRoZSB2b2x0YWdlIHRvIHRoZSBjb3JlICovCi0JZ3B3cmRuLmQzMiA9IDA7Ci0JZ3B3cmRuLmIucHdyZG5zd3RjaCA9IDE7Ci0JRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z3B3cmRuLCBncHdyZG4uZDMyLCAwKTsKLQlkd2NfdWRlbGF5KDEwKTsKKwkJLyogU3dpdGNoIG9uIHRoZSB2b2x0YWdlIHRvIHRoZSBjb3JlICovCisJCWdwd3Jkbi5kMzIgPSAwOworCQlncHdyZG4uYi5wd3JkbnN3dGNoID0gMTsKKwkJRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z3B3cmRuLCBncHdyZG4uZDMyLCAwKTsKKwkJZHdjX3VkZWxheSgxMCk7CiAKLQkvKiBSZXNldCB0aGUgY29yZSAqLwotCWdwd3Jkbi5kMzIgPSAwOwotCWdwd3Jkbi5iLnB3cmRucnN0biA9IDE7Ci0JRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z3B3cmRuLCBncHdyZG4uZDMyLCAwKTsKLQlkd2NfdWRlbGF5KDEwKTsKKwkJLyogUmVzZXQgdGhlIGNvcmUgKi8KKwkJZ3B3cmRuLmQzMiA9IDA7CisJCWdwd3Jkbi5iLnB3cmRucnN0biA9IDE7CisJCURXQ19NT0RJRllfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmdwd3JkbiwgZ3B3cmRuLmQzMiwgMCk7CisJCWR3Y191ZGVsYXkoMTApOwogCi0JLyogRGlzYWJsZSBwb3dlciBjbGFtcHMgKi8KLQlncHdyZG4uZDMyID0gMDsKLQlncHdyZG4uYi5wd3JkbmNsbXAgPSAxOwotCURXQ19NT0RJRllfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmdwd3JkbiwgZ3B3cmRuLmQzMiwgMCk7CisJCS8qIERpc2FibGUgcG93ZXIgY2xhbXBzICovCisJCWdwd3Jkbi5kMzIgPSAwOworCQlncHdyZG4uYi5wd3JkbmNsbXAgPSAxOworCQlEV0NfTU9ESUZZX1JFRzMyKCZjb3JlX2lmLT5jb3JlX2dsb2JhbF9yZWdzLT5ncHdyZG4sIGdwd3Jkbi5kMzIsIDApOwogCi0JLyogUmVtb3ZlIHJlc2V0IHRoZSBjb3JlIHNpZ25hbCAqLwotCWdwd3Jkbi5kMzIgPSAwOwotCWdwd3Jkbi5iLnB3cmRucnN0biA9IDE7Ci0JRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z3B3cmRuLCAwLCBncHdyZG4uZDMyKTsKLQlkd2NfdWRlbGF5KDEwKTsKKwkJLyogUmVtb3ZlIHJlc2V0IHRoZSBjb3JlIHNpZ25hbCAqLworCQlncHdyZG4uZDMyID0gMDsKKwkJZ3B3cmRuLmIucHdyZG5yc3RuID0gMTsKKwkJRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z3B3cmRuLCAwLCBncHdyZG4uZDMyKTsKKwkJZHdjX3VkZWxheSgxMCk7CiAKLQkvKiBEaXNhYmxlIFBNVSBpbnRlcnJ1cHQgKi8KLQlncHdyZG4uZDMyID0gMDsKLQlncHdyZG4uYi5wbXVpbnRzZWwgPSAxOwotCURXQ19NT0RJRllfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmdwd3JkbiwgZ3B3cmRuLmQzMiwgMCk7Ci0JZHdjX3VkZWxheSgxMCk7CisJCS8qIERpc2FibGUgUE1VIGludGVycnVwdCAqLworCQlncHdyZG4uZDMyID0gMDsKKwkJZ3B3cmRuLmIucG11aW50c2VsID0gMTsKKwkJRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z3B3cmRuLCBncHdyZG4uZDMyLCAwKTsKKwkJZHdjX3VkZWxheSgxMCk7CiAKLQkvKkluZGljYXRlcyB0aGF0IHdlIGFyZSBleGl0aW5nIGZyb20gaGliZXJuYXRpb24gKi8KLQljb3JlX2lmLT5oaWJlcm5hdGlvbl9zdXNwZW5kID0gMDsKKwkJLypJbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgZXhpdGluZyBmcm9tIGhpYmVybmF0aW9uICovCisJCWNvcmVfaWYtPmhpYmVybmF0aW9uX3N1c3BlbmQgPSAwOwogCi0JLyogRGlzYWJsZSBQTVUgKi8KLQlncHdyZG4uZDMyID0gMDsKLQlncHdyZG4uYi5wbXVhY3R2ID0gMTsKLQlEV0NfTU9ESUZZX1JFRzMyKCZjb3JlX2lmLT5jb3JlX2dsb2JhbF9yZWdzLT5ncHdyZG4sIGdwd3Jkbi5kMzIsIDApOwotCWR3Y191ZGVsYXkoMTApOworCQkvKiBEaXNhYmxlIFBNVSAqLworCQlncHdyZG4uZDMyID0gMDsKKwkJZ3B3cmRuLmIucG11YWN0diA9IDE7CisJCURXQ19NT0RJRllfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmdwd3JkbiwgZ3B3cmRuLmQzMiwgMCk7CisJCWR3Y191ZGVsYXkoMTApOwogCi0JY29yZV9pZi0+b3Bfc3RhdGUgPSBCX1BFUklQSEVSQUw7Ci0JZHdjX290Z19jb3JlX2luaXQoY29yZV9pZik7Ci0JZHdjX290Z19lbmFibGVfZ2xvYmFsX2ludGVycnVwdHMoY29yZV9pZik7Ci0JY2lsX3BjZF9zdGFydChjb3JlX2lmKTsKKwkJY29yZV9pZi0+b3Bfc3RhdGUgPSBCX1BFUklQSEVSQUw7CisJCWR3Y19vdGdfY29yZV9pbml0KGNvcmVfaWYpOworCQlkd2Nfb3RnX2VuYWJsZV9nbG9iYWxfaW50ZXJydXB0cyhjb3JlX2lmKTsKKwkJY2lsX3BjZF9zdGFydChjb3JlX2lmKTsKIAotCWlmIChvdGdfY2FwX3BhcmFtID09IERXQ19PVEdfQ0FQX1BBUkFNX0hOUF9TUlBfQ0FQQUJMRSB8fAotCSAgICBvdGdfY2FwX3BhcmFtID09IERXQ19PVEdfQ0FQX1BBUkFNX1NSUF9PTkxZX0NBUEFCTEUpIHsKLQkJLyoKLQkJICogSW5pdGlhdGUgU1JQIGFmdGVyIGluaXRpYWwgQURQIHByb2JlLgotCQkgKi8KLQkJZHdjX290Z19pbml0aWF0ZV9zcnAoY29yZV9pZik7CQorCQlpZiAob3RnX2NhcF9wYXJhbSA9PSBEV0NfT1RHX0NBUF9QQVJBTV9ITlBfU1JQX0NBUEFCTEUgfHwKKwkJCW90Z19jYXBfcGFyYW0gPT0gRFdDX09UR19DQVBfUEFSQU1fU1JQX09OTFlfQ0FQQUJMRSkgeworCQkJLyoKKwkJCSAqIEluaXRpYXRlIFNSUCBhZnRlciBpbml0aWFsIEFEUCBwcm9iZS4KKwkJCSAqLworCQkJZHdjX290Z19pbml0aWF0ZV9zcnAoY29yZV9pZik7CQorCQl9CiAJfQogCiAJcmV0dXJuIDE7CkBAIC03NDcsMjQgKzgwMSwzMCBAQAogICogVGhpcyBpbnRlcnJ1cHQgaW5kaWNhdGVzIHRoYXQgdGhlIFdha2V1cCBMb2dpYyBoYXMgZGV0ZWN0ZWQgYQogICogc3RhdHVzIGNoYW5nZSBlaXRoZXIgb24gSURESUcgb3IgQlNlc3NWbGQuCiAgKi8KLXN0YXRpYyB1aW50MzJfdCBkd2Nfb3RnX2hhbmRsZV9wd3Jkbl9zdHNjaG5nX2ludHIoZHdjX290Z19jb3JlX2lmX3QgKiBjb3JlX2lmKQorc3RhdGljIHVpbnQzMl90IGR3Y19vdGdfaGFuZGxlX3B3cmRuX3N0c2NobmdfaW50cihkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2KQogewogCWludCByZXR2YWw7CiAJZ3B3cmRuX2RhdGFfdCBncHdyZG4gPSB7LmQzMiA9IDAgfTsKIAlncHdyZG5fZGF0YV90IGdwd3Jkbl90ZW1wID0gey5kMzIgPSAwIH07CisJZHdjX290Z19jb3JlX2lmX3QgKmNvcmVfaWYgPSBvdGdfZGV2LT5jb3JlX2lmOwogCiAJRFdDX1BSSU5URigiJXMgY2FsbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQorCWlmIChjb3JlX2lmLT5wb3dlcl9kb3duID09IDIpIHsKKwkJaWYgKGNvcmVfaWYtPmhpYmVybmF0aW9uX3N1c3BlbmQgPD0gMCkgeworCQkJRFdDX1BSSU5URigiQWxyZWFkeSBleGl0ZWQgZnJvbSBIaWJlcm5hdGlvblxuIik7CisJCQlyZXR1cm4gMTsKKwkJfSBlbHNlCisJCQlncHdyZG5fdGVtcC5kMzIgPSBjb3JlX2lmLT5ncl9iYWNrdXAtPmdwd3Jkbl9sb2NhbDsKIAotCWlmICghY29yZV9pZi0+aGliZXJuYXRpb25fc3VzcGVuZCkgewotCQlEV0NfUFJJTlRGKCJBbHJlYWR5IGV4aXRlZCBmcm9tIEhpYmVybmF0aW9uXG4iKTsKLQkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJZ3B3cmRuX3RlbXAuZDMyID0gY29yZV9pZi0+YWRwLmdwd3JkbjsKIAl9CiAKIAlncHdyZG4uZDMyID0gRFdDX1JFQURfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmdwd3Jkbik7Ci0JZ3B3cmRuX3RlbXAuZDMyID0gY29yZV9pZi0+Z3JfYmFja3VwLT5ncHdyZG5fbG9jYWw7Ci0KKwkKIAlpZiAoZ3B3cmRuLmIuaWRzdHMgXiBncHdyZG5fdGVtcC5iLmlkc3RzKSB7Ci0JCXJldHZhbCA9IGR3Y19vdGdfaGFuZGxlX3B3cmRuX2lkc3RzX2NoYW5nZShjb3JlX2lmKTsKKwkJcmV0dmFsID0gZHdjX290Z19oYW5kbGVfcHdyZG5faWRzdHNfY2hhbmdlKG90Z19kZXYpOwogCX0gZWxzZSBpZiAoZ3B3cmRuLmIuYnNlc3N2bGQgXiBncHdyZG5fdGVtcC5iLmJzZXNzdmxkKSB7CiAJCXJldHZhbCA9IGR3Y19vdGdfaGFuZGxlX3B3cmRuX3Nlc3Npb25fY2hhbmdlKGNvcmVfaWYpOwogCX0KQEAgLTkxMywxNiArOTczLDEzIEBACiAJCQkvKiBBLUNhYmxlIHN0aWxsIGNvbm5lY3RlZCBidXQgZGV2aWNlIGRpc2Nvbm5lY3RlZC4gKi8KIAkJCWNpbF9oY2RfZGlzY29ubmVjdChjb3JlX2lmKTsKIAkJCWlmIChjb3JlX2lmLT5hZHBfZW5hYmxlKSB7Ci0JCQkJZ3B3cmRuX2RhdGFfdCBncHdyZG47Ci0JCQkJLyogUG93ZXIgb2ZmIHRoZSBjb3JlICovCi0JCQkJaWYgKGNvcmVfaWYtPnBvd2VyX2Rvd24gPT0gMikgewotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIEVuYWJsZSBQb3dlciBEb3duIExvZ2ljICovCi0JCQkJCWdwd3Jkbi5iLnBtdWFjdHYgPSAxOwotCQkJCQlEV0NfTU9ESUZZX1JFRzMyKCZjb3JlX2lmLT4KLQkJCQkJCQkgY29yZV9nbG9iYWxfcmVncy0+Ci0JCQkJCQkJIGdwd3JkbiwgMCwgZ3B3cmRuLmQzMik7Ci0JCQkJfQorCQkJCWdwd3Jkbl9kYXRhX3QgZ3B3cmRuID0geyAuZDMyID0gMCB9OworCQkJCWNpbF9oY2Rfc3RvcChjb3JlX2lmKTsKKwkJCQkvKiBFbmFibGUgUG93ZXIgRG93biBMb2dpYyAqLworCQkJCWdwd3Jkbi5iLnBtdWludHNlbCA9IDE7CisJCQkJZ3B3cmRuLmIucG11YWN0diA9IDE7CisJCQkJRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z3B3cmRuLCAwLCBncHdyZG4uZDMyKTsKKwkJCQlkd2Nfb3RnX2FkcF9wcm9iZV9zdGFydChjb3JlX2lmKTsKIAogCQkJCS8qIFBvd2VyIG9mZiB0aGUgY29yZSAqLwogCQkJCWlmIChjb3JlX2lmLT5wb3dlcl9kb3duID09IDIpIHsKQEAgLTkzMiwyMCArOTg5LDYgQEAKIAkJCQkJCQkgY29yZV9nbG9iYWxfcmVncy0+CiAJCQkJCQkJIGdwd3JkbiwgZ3B3cmRuLmQzMiwgMCk7CiAJCQkJfQotCi0JCQkJLyogRW5hYmxlIFBvd2VyIERvd24gTG9naWMgKi8KLQkJCQlncHdyZG4uZDMyID0gMDsKLQkJCQlncHdyZG4uYi5wbXVhY3R2ID0gMTsKLQkJCQlEV0NfTU9ESUZZX1JFRzMyKCZjb3JlX2lmLT5jb3JlX2dsb2JhbF9yZWdzLT4KLQkJCQkJCSBncHdyZG4sIDAsIGdwd3Jkbi5kMzIpOwotCi0JCQkJLyogVW5tYXNrIFNSUCBkZXRlY3RlZCBpbnRlcnJ1cHQgZnJvbSBQb3dlciBEb3duIExvZ2ljICovCi0JCQkJZ3B3cmRuLmQzMiA9IDA7Ci0JCQkJZ3B3cmRuLmIuc3JwX2RldF9tc2sgPSAxOwotCQkJCURXQ19NT0RJRllfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPgotCQkJCQkJIGdwd3JkbiwgMCwgZ3B3cmRuLmQzMik7Ci0KLQkJCQlkd2Nfb3RnX2FkcF9wcm9iZV9zdGFydChjb3JlX2lmKTsKIAkJCX0KIAkJfQogCX0KQEAgLTExNjcsNiArMTIxMCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgZHdjX290Z19yZWFkX2NvbW1vbl9pbnRyKGR3Y19vdGdfY29yZV9pZl90ICogY29yZV9pZikKIHsKKwlnYWhiY2ZnX2RhdGFfdCBnYWhiY2ZnID0gey5kMzIgPSAwIH07CiAJZ2ludHN0c19kYXRhX3QgZ2ludHN0czsKIAlnaW50bXNrX2RhdGFfdCBnaW50bXNrOwogCWdpbnRtc2tfZGF0YV90IGdpbnRtc2tfY29tbW9uID0gey5kMzIgPSAwIH07CkBAIC0xMTg4LDYgKzEyMzIsNyBAQAogCiAJZ2ludHN0cy5kMzIgPSBEV0NfUkVBRF9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z2ludHN0cyk7CiAJZ2ludG1zay5kMzIgPSBEV0NfUkVBRF9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z2ludG1zayk7CisJZ2FoYmNmZy5kMzIgPSBEV0NfUkVBRF9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z2FoYmNmZyk7CiAKICNpZmRlZiBERUJVRwogCS8qIGlmIGFueSBjb21tb24gaW50ZXJydXB0cyBzZXQgKi8KQEAgLTExOTYsOCArMTI0MSwxMCBAQAogCQkJICAgIGdpbnRzdHMuZDMyLCBnaW50bXNrLmQzMik7CiAJfQogI2VuZGlmCi0KLQlyZXR1cm4gKChnaW50c3RzLmQzMiAmIGdpbnRtc2suZDMyKSAmIGdpbnRtc2tfY29tbW9uLmQzMik7CisJaWYgKGdhaGJjZmcuYi5nbGJsaW50cm1zaykJCisJCXJldHVybiAoKGdpbnRzdHMuZDMyICYgZ2ludG1zay5kMzIpICYgZ2ludG1za19jb21tb24uZDMyKTsKKwllbHNlCisJCXJldHVybiAwOwogCiB9CiAKQEAgLTEyMjUsMTMgKzEyNzIsMTcgQEAKICAqIC0gQURQIFRyYW5zYWN0aW9uIFJlY2VpdmVkIEludGVycnVwdAogICoKICAqLwotaW50MzJfdCBkd2Nfb3RnX2hhbmRsZV9jb21tb25faW50cihkd2Nfb3RnX2NvcmVfaWZfdCAqIGNvcmVfaWYpCitpbnQzMl90IGR3Y19vdGdfaGFuZGxlX2NvbW1vbl9pbnRyKHZvaWQgKmRldikKIHsKIAlpbnQgcmV0dmFsID0gMDsKIAlnaW50c3RzX2RhdGFfdCBnaW50c3RzOwogCWdwd3Jkbl9kYXRhX3QgZ3B3cmRuID0gey5kMzIgPSAwIH07CisJZHdjX290Z19kZXZpY2VfdCAqb3RnX2RldiA9IGRldjsKKwlkd2Nfb3RnX2NvcmVfaWZfdCAqY29yZV9pZiA9IG90Z19kZXYtPmNvcmVfaWY7CiAJZ3B3cmRuLmQzMiA9IERXQ19SRUFEX1JFRzMyKCZjb3JlX2lmLT5jb3JlX2dsb2JhbF9yZWdzLT5ncHdyZG4pOwotCisJaWYgKGR3Y19vdGdfaXNfZGV2aWNlX21vZGUoY29yZV9pZikpCisJCWNvcmVfaWYtPmZyYW1lX251bSA9IGR3Y19vdGdfZ2V0X2ZyYW1lX251bWJlcihjb3JlX2lmKTsKKwkJCiAJaWYgKGNvcmVfaWYtPmxvY2spCiAJCURXQ19TUElOTE9DSyhjb3JlX2lmLT5sb2NrKTsKIApAQCAtMTMxOCwxMiArMTM2OSw2IEBACiAJCQlkd2Nfb3RnX2hhbmRsZV9wd3Jkbl9zcnBfaW50cihjb3JlX2lmKTsKIAkJCXJldHZhbCB8PSAxOwogCQl9Ci0JCWlmIChncHdyZG4uYi5zdHNfY2huZ2ludCAmJiBncHdyZG4uYi5zdHNfY2huZ2ludF9tc2spIHsKLQkJCUNMRUFSX0dQV1JETl9JTlRSKGNvcmVfaWYsIHN0c19jaG5naW50KTsKLQkJCWR3Y19vdGdfaGFuZGxlX3B3cmRuX3N0c2NobmdfaW50cihjb3JlX2lmKTsKLQotCQkJcmV0dmFsIHw9IDE7Ci0JCX0KIAl9CiAJLyogSGFuZGxlIEFEUCBpbnRlcnJ1cHQgaGVyZSAqLwogCWlmIChncHdyZG4uYi5hZHBfaW50KSB7CkBAIC0xMzMyLDYgKzEzNzcsMTMgQEAKIAkJZHdjX290Z19hZHBfaGFuZGxlX2ludHIoY29yZV9pZik7CiAJCXJldHZhbCB8PSAxOwogCX0KKwlpZiAoZ3B3cmRuLmIuc3RzX2NobmdpbnQgJiYgZ3B3cmRuLmIuc3RzX2NobmdpbnRfbXNrKSB7CisJCURXQ19QUklOVEYoIlNUUyBDSE5HIGludGVycnVwdCBhc3NlcnRlZFxuIik7CisJCUNMRUFSX0dQV1JETl9JTlRSKGNvcmVfaWYsIHN0c19jaG5naW50KTsKKwkJZHdjX290Z19oYW5kbGVfcHdyZG5fc3RzY2huZ19pbnRyKG90Z19kZXYpOworCisJCXJldHZhbCB8PSAxOworCX0KIAlpZiAoY29yZV9pZi0+bG9jaykKIAkJRFdDX1NQSU5VTkxPQ0soY29yZV9pZi0+bG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19jb3JlX2lmLmggYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfY29yZV9pZi5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNWUxMmJmMC4uMzBmNTJmZQotLS0gYS9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfY29yZV9pZi5oCisrKyBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19jb3JlX2lmLmgKQEAgLTEsOCArMSw4IEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogJEZpbGU6IC8vZHdoL3VzYl9paXAvZGV2L3NvZnR3YXJlL290Zy9saW51eC9kcml2ZXJzL2R3Y19vdGdfY29yZV9pZi5oICQKLSAqICRSZXZpc2lvbjogIzEwICQKLSAqICREYXRlOiAyMDExLzA1LzE3ICQKLSAqICRDaGFuZ2U6IDE3NzQxMTAgJAorICogJFJldmlzaW9uOiAjMTIgJAorICogJERhdGU6IDIwMTEvMTAvMjQgJAorICogJENoYW5nZTogMTg3MTE1OSAkCiAgKgogICogU3lub3BzeXMgSFMgT1RHIExpbnV4IFNvZnR3YXJlIERyaXZlciBhbmQgZG9jdW1lbnRhdGlvbiAoaGVyZWluYWZ0ZXIsCiAgKiAiU29mdHdhcmUiKSBpcyBhbiBVbnN1cHBvcnRlZCBwcm9wcmlldGFyeSB3b3JrIG9mIFN5bm9wc3lzLCBJbmMuIHVubGVzcwpAQCAtNjMsNyArNjMsNyBAQAogZXh0ZXJuIHVpbnQ4X3QgZHdjX290Z19pc19kbWFfZW5hYmxlKGR3Y19vdGdfY29yZV9pZl90ICogY29yZV9pZik7CiAKIC8qKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb24gZXZlcnkgaGFyZHdhcmUgaW50ZXJydXB0LiAqLwotZXh0ZXJuIGludDMyX3QgZHdjX290Z19oYW5kbGVfY29tbW9uX2ludHIoZHdjX290Z19jb3JlX2lmX3QgKiBfY29yZV9pZik7CitleHRlcm4gaW50MzJfdCBkd2Nfb3RnX2hhbmRsZV9jb21tb25faW50cih2b2lkICpvdGdfZGV2KTsKIAogLyoqIEBuYW1lIE9URyBDb3JlIFBhcmFtZXRlcnMgKi8KIC8qKiBAeyAqLwpAQCAtMTA5LDggKzEwOSw3IEBACiBleHRlcm4gaW50IGR3Y19vdGdfc2V0X3BhcmFtX2RtYV9kZXNjX2VuYWJsZShkd2Nfb3RnX2NvcmVfaWZfdCAqIGNvcmVfaWYsCiAJCQkJCSAgICAgaW50MzJfdCB2YWwpOwogZXh0ZXJuIGludDMyX3QgZHdjX290Z19nZXRfcGFyYW1fZG1hX2Rlc2NfZW5hYmxlKGR3Y19vdGdfY29yZV9pZl90ICogY29yZV9pZik7Ci0vLyNkZWZpbmUgZHdjX3BhcmFtX2RtYV9kZXNjX2VuYWJsZV9kZWZhdWx0IDEKLSNkZWZpbmUgZHdjX3BhcmFtX2RtYV9kZXNjX2VuYWJsZV9kZWZhdWx0IDAgLy8gVEVTVAorI2RlZmluZSBkd2NfcGFyYW1fZG1hX2Rlc2NfZW5hYmxlX2RlZmF1bHQgMAogCiAvKiogVGhlIERNQSBCdXJzdCBzaXplIChhcHBsaWNhYmxlIG9ubHkgZm9yIEV4dGVybmFsIERNQQogICogTW9kZSkuIDEsIDQsIDggMTYsIDMyLCA2NCwgMTI4LCAyNTYgKGRlZmF1bHQgMzIpCkBAIC0yMTgsNyArMjE3LDggQEAKIGV4dGVybiBpbnQgZHdjX290Z19zZXRfcGFyYW1faG9zdF9yeF9maWZvX3NpemUoZHdjX290Z19jb3JlX2lmX3QgKiBjb3JlX2lmLAogCQkJCQkgICAgICAgaW50MzJfdCB2YWwpOwogZXh0ZXJuIGludDMyX3QgZHdjX290Z19nZXRfcGFyYW1faG9zdF9yeF9maWZvX3NpemUoZHdjX290Z19jb3JlX2lmX3QgKiBjb3JlX2lmKTsKLSNkZWZpbmUgZHdjX3BhcmFtX2hvc3RfcnhfZmlmb19zaXplX2RlZmF1bHQgMTAyNAorI2RlZmluZSBkd2NfcGFyYW1faG9zdF9yeF9maWZvX3NpemVfZGVmYXVsdCA3NzYKKwogCiAvKiogTnVtYmVyIG9mIDQtYnl0ZSB3b3JkcyBpbiB0aGUgbm9uLXBlcmlvZGljIFR4IEZJRk8gaW4gaG9zdCBtb2RlCiAgKiB3aGVuIER5bmFtaWMgRklGTyBzaXppbmcgaXMgZW5hYmxlZCBpbiB0aGUgY29yZS4KQEAgLTIyOCw3ICsyMjgsNyBAQAogCQkJCQkJICAgICAgY29yZV9pZiwgaW50MzJfdCB2YWwpOwogZXh0ZXJuIGludDMyX3QgZHdjX290Z19nZXRfcGFyYW1faG9zdF9ucGVyaW9fdHhfZmlmb19zaXplKGR3Y19vdGdfY29yZV9pZl90ICoKIAkJCQkJCQkgIGNvcmVfaWYpOwotI2RlZmluZSBkd2NfcGFyYW1faG9zdF9ucGVyaW9fdHhfZmlmb19zaXplX2RlZmF1bHQgMTAyNAorI2RlZmluZSBkd2NfcGFyYW1faG9zdF9ucGVyaW9fdHhfZmlmb19zaXplX2RlZmF1bHQgNTEyCiAKIC8qKiBOdW1iZXIgb2YgNC1ieXRlIHdvcmRzIGluIHRoZSBob3N0IHBlcmlvZGljIFR4IEZJRk8gd2hlbiBkeW5hbWljCiAgKiBGSUZPIHNpemluZyBpcyBlbmFibGVkLgpAQCAtMjM4LDcgKzIzOCw3IEBACiAJCQkJCQkgICAgIGNvcmVfaWYsIGludDMyX3QgdmFsKTsKIGV4dGVybiBpbnQzMl90IGR3Y19vdGdfZ2V0X3BhcmFtX2hvc3RfcGVyaW9fdHhfZmlmb19zaXplKGR3Y19vdGdfY29yZV9pZl90ICoKIAkJCQkJCQkgY29yZV9pZik7Ci0jZGVmaW5lIGR3Y19wYXJhbV9ob3N0X3BlcmlvX3R4X2ZpZm9fc2l6ZV9kZWZhdWx0IDEwMjQKKyNkZWZpbmUgZHdjX3BhcmFtX2hvc3RfcGVyaW9fdHhfZmlmb19zaXplX2RlZmF1bHQgNzY4CiAKIC8qKiBUaGUgbWF4aW11bSB0cmFuc2ZlciBzaXplIHN1cHBvcnRlZCBpbiBieXRlcy4KICAqIDIwNDcgdG8gNjUsNTM1ICAoZGVmYXVsdCA2NSw1MzUpCkBAIC0yNjMsOCArMjYzLDcgQEAKIGV4dGVybiBpbnQgZHdjX290Z19zZXRfcGFyYW1faG9zdF9jaGFubmVscyhkd2Nfb3RnX2NvcmVfaWZfdCAqIGNvcmVfaWYsCiAJCQkJCSAgIGludDMyX3QgdmFsKTsKIGV4dGVybiBpbnQzMl90IGR3Y19vdGdfZ2V0X3BhcmFtX2hvc3RfY2hhbm5lbHMoZHdjX290Z19jb3JlX2lmX3QgKiBjb3JlX2lmKTsKLS8vI2RlZmluZSBkd2NfcGFyYW1faG9zdF9jaGFubmVsc19kZWZhdWx0IDEyCi0jZGVmaW5lIGR3Y19wYXJhbV9ob3N0X2NoYW5uZWxzX2RlZmF1bHQgMTMKKyNkZWZpbmUgZHdjX3BhcmFtX2hvc3RfY2hhbm5lbHNfZGVmYXVsdCAxNAogCiAvKiogVGhlIG51bWJlciBvZiBlbmRwb2ludHMgaW4gYWRkaXRpb24gdG8gRVAwIGF2YWlsYWJsZSBmb3IgZGV2aWNlCiAgKiBtb2RlIG9wZXJhdGlvbnMuCkBAIC0yNzUsNyArMjc0LDcgQEAKIGV4dGVybiBpbnQgZHdjX290Z19zZXRfcGFyYW1fZGV2X2VuZHBvaW50cyhkd2Nfb3RnX2NvcmVfaWZfdCAqIGNvcmVfaWYsCiAJCQkJCSAgIGludDMyX3QgdmFsKTsKIGV4dGVybiBpbnQzMl90IGR3Y19vdGdfZ2V0X3BhcmFtX2Rldl9lbmRwb2ludHMoZHdjX290Z19jb3JlX2lmX3QgKiBjb3JlX2lmKTsKLSNkZWZpbmUgZHdjX3BhcmFtX2Rldl9lbmRwb2ludHNfZGVmYXVsdCA2CisjZGVmaW5lIGR3Y19wYXJhbV9kZXZfZW5kcG9pbnRzX2RlZmF1bHQgNwogCiAvKioKICAqIFNwZWNpZmllcyB0aGUgdHlwZSBvZiBQSFkgaW50ZXJmYWNlIHRvIHVzZS4gQnkgZGVmYXVsdCwgdGhlIGRyaXZlcgpAQCAtMzc1LDcgKzM3NCw2IEBACiBleHRlcm4gaW50MzJfdCBkd2Nfb3RnX2dldF9wYXJhbV9kZXZfdHhfZmlmb19zaXplKGR3Y19vdGdfY29yZV9pZl90ICogY29yZV9pZiwKIAkJCQkJCSAgaW50IGZpZm9fbnVtKTsKICNkZWZpbmUgZHdjX3BhcmFtX2Rldl90eF9maWZvX3NpemVfZGVmYXVsdCA3NjgKLS8vI2RlZmluZSBkd2NfcGFyYW1fZGV2X3R4X2ZpZm9fc2l6ZV9kZWZhdWx0IDI1NiAvL1RyeSB0aGlzCiAKIC8qKiBUaHJlc2hvbGRpbmcgZW5hYmxlIGZsYWctCiAgKiBiaXQgMCAtIGVuYWJsZSBub24tSVNPIFR4IHRocmVzaG9sZGluZwpAQCAtNDYzLDkgKzQ2MSwxOSBAQAogZXh0ZXJuIGludDMyX3QgZHdjX290Z19nZXRfcGFyYW1fZGV2X291dF9uYWsoZHdjX290Z19jb3JlX2lmX3QgKiBjb3JlX2lmKTsKICNkZWZpbmUgZHdjX3BhcmFtX2Rldl9vdXRfbmFrX2RlZmF1bHQgMAogCitleHRlcm4gaW50IGR3Y19vdGdfc2V0X3BhcmFtX2NvbnRfb25fYm5hKGR3Y19vdGdfY29yZV9pZl90ICogY29yZV9pZiwKKwkJCQkJCQkJCQkgaW50MzJfdCB2YWwpOworZXh0ZXJuIGludDMyX3QgZHdjX290Z19nZXRfcGFyYW1fY29udF9vbl9ibmEoZHdjX290Z19jb3JlX2lmX3QgKiBjb3JlX2lmKTsKKyNkZWZpbmUgZHdjX3BhcmFtX2NvbnRfb25fYm5hX2RlZmF1bHQgMAorCitleHRlcm4gaW50IGR3Y19vdGdfc2V0X3BhcmFtX2FoYl9zaW5nbGUoZHdjX290Z19jb3JlX2lmX3QgKiBjb3JlX2lmLAorCQkJCQkJCQkJCSBpbnQzMl90IHZhbCk7CitleHRlcm4gaW50MzJfdCBkd2Nfb3RnX2dldF9wYXJhbV9haGJfc2luZ2xlKGR3Y19vdGdfY29yZV9pZl90ICogY29yZV9pZik7CisjZGVmaW5lIGR3Y19wYXJhbV9haGJfc2luZ2xlX2RlZmF1bHQgMAorCiBleHRlcm4gaW50IGR3Y19vdGdfc2V0X3BhcmFtX290Z192ZXIoZHdjX290Z19jb3JlX2lmX3QgKiBjb3JlX2lmLCBpbnQzMl90IHZhbCk7CiBleHRlcm4gaW50MzJfdCBkd2Nfb3RnX2dldF9wYXJhbV9vdGdfdmVyKGR3Y19vdGdfY29yZV9pZl90ICogY29yZV9pZik7Ci0jZGVmaW5lIGR3Y19wYXJhbV9vdGdfdmVyX2RlZmF1bHQgMQorI2RlZmluZSBkd2NfcGFyYW1fb3RnX3Zlcl9kZWZhdWx0IDAKIAogLyoqIEB9ICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19kYmcuaCBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19kYmcuaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfZHJpdmVyLmMgYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfZHJpdmVyLmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBjOGYwYzA3Li43MTdkYTBiCi0tLSBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19kcml2ZXIuYworKysgYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfZHJpdmVyLmMKQEAgLTEsOCArMSw4IEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogJEZpbGU6IC8vZHdoL3VzYl9paXAvZGV2L3NvZnR3YXJlL290Zy9saW51eC9kcml2ZXJzL2R3Y19vdGdfZHJpdmVyLmMgJAotICogJFJldmlzaW9uOiAjODkgJAotICogJERhdGU6IDIwMTEvMDUvMTcgJAotICogJENoYW5nZTogMTc3NDExMCAkCisgKiAkUmV2aXNpb246ICM5MSAkCisgKiAkRGF0ZTogMjAxMS8xMC8yNCAkCisgKiAkQ2hhbmdlOiAxODcxMTU5ICQKICAqCiAgKiBTeW5vcHN5cyBIUyBPVEcgTGludXggU29mdHdhcmUgRHJpdmVyIGFuZCBkb2N1bWVudGF0aW9uIChoZXJlaW5hZnRlciwKICAqICJTb2Z0d2FyZSIpIGlzIGFuIFVuc3VwcG9ydGVkIHByb3ByaWV0YXJ5IHdvcmsgb2YgU3lub3BzeXMsIEluYy4gdW5sZXNzCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSAiZHdjX290Z19wY2RfaWYuaCIKICNpbmNsdWRlICJkd2Nfb3RnX2hjZF9pZi5oIgogI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIApAQCAtNjYsNyArNjcsOCBAQAogZXh0ZXJuIHZvaWQgZHdjX290Z19ob3N0X3BvcnRfc3VzcGVuZChzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKIGV4dGVybiB2b2lkIGR3Y19vdGdfaG9zdF9wb3J0X3Jlc3VtZShzdHJ1Y3QgdXNiX2hjZCAqaGNkKTsKIAotI2RlZmluZSBEV0NfRFJJVkVSX1ZFUlNJT04JIjIuOTNhIDE1LU1BWS0yMDExIgorCisjZGVmaW5lIERXQ19EUklWRVJfVkVSU0lPTgkiMi45NGEgMjctT0NULTIwMTEiCiAjZGVmaW5lIERXQ19EUklWRVJfREVTQwkJIkhTIE9URyBVU0IgQ29udHJvbGxlciBkcml2ZXIiCiAKIHN0YXRpYyBjb25zdCBjaGFyIGR3Y19kcml2ZXJfbmFtZVtdID0gImR3Y19vdGciOwpAQCAtOTYsNyArOTgsNyBAQAogI2VsaWYgIGRlZmluZWQoUENJX0lOVEVSRkFDRSkKIAkJCSAgICAgc3RydWN0IHBjaV9kZXYgKl9kZXYKICNlbHNlCi0JCQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX2RldgorCQkJCSBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfZGV2CiAjZW5kaWYKICAgICApOwogCkBAIC0xMDYsMTEgKzEwOCwxMSBAQAogI2VsaWYgIGRlZmluZWQoUENJX0lOVEVSRkFDRSkKIAkJCSAgICAgIHN0cnVjdCBwY2lfZGV2ICpfZGV2CiAjZWxzZQotCQkJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9kZXYKKwkJCQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX2RldgogI2VuZGlmCiAgICAgKTsKIAotZXh0ZXJuIHZvaWQgZHdjX290Z19hZHBfc3RhcnQoZHdjX290Z19jb3JlX2lmX3QgKiBjb3JlX2lmKTsKK2V4dGVybiB2b2lkIGR3Y19vdGdfYWRwX3N0YXJ0KGR3Y19vdGdfY29yZV9pZl90ICogY29yZV9pZiwgdWludDhfdCBpc19ob3N0KTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIEVuY2Fwc3VsYXRlIHRoZSBtb2R1bGUgcGFyYW1ldGVyIHNldHRpbmdzICovCkBAIC0xNTYsNiArMTU4LDggQEAKIAlpbnQzMl90IHBvd2VyX2Rvd247CiAJaW50MzJfdCByZWxvYWRfY3RsOwogCWludDMyX3QgZGV2X291dF9uYWs7CisJaW50MzJfdCBjb250X29uX2JuYTsKKwlpbnQzMl90IGFoYl9zaW5nbGU7CiAJaW50MzJfdCBvdGdfdmVyOwogCWludDMyX3QgYWRwX2VuYWJsZTsKIH07CkBAIC0yMzcsNiArMjQxLDggQEAKIAkucG93ZXJfZG93biA9IC0xLAogCS5yZWxvYWRfY3RsID0gLTEsCiAJLmRldl9vdXRfbmFrID0gLTEsCisJLmNvbnRfb25fYm5hID0gLTEsCisJLmFoYl9zaW5nbGUgPSAtMSwKIAkub3RnX3ZlciA9IC0xLAogCS5hZHBfZW5hYmxlID0gLTEsCiB9OwpAQCAtNDQxLDcgKzQ0Nyw4IEBACiAJCQkJCQkJICBkd2Nfb3RnX21vZHVsZV9wYXJhbXMuCiAJCQkJCQkJICBlbl9tdWx0aXBsZV90eF9maWZvKTsKIAl9Ci0JZm9yIChpID0gMDsgaSA8IDE1OyBpKyspIHsKKworCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKIAkJaWYgKGR3Y19vdGdfbW9kdWxlX3BhcmFtcy5kZXZfcGVyaW9fdHhfZmlmb19zaXplW2ldICE9IC0xKSB7CiAJCQlyZXR2YWwgKz0KIAkJCSAgICBkd2Nfb3RnX3NldF9wYXJhbV9kZXZfcGVyaW9fdHhfZmlmb19zaXplKGNvcmVfaWYsCkBAIC00NTEsNyArNDU4LDcgQEAKIAkJfQogCX0KIAotCWZvciAoaSA9IDA7IGkgPCAxNTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewogCQlpZiAoZHdjX290Z19tb2R1bGVfcGFyYW1zLmRldl90eF9maWZvX3NpemVbaV0gIT0gLTEpIHsKIAkJCXJldHZhbCArPSBkd2Nfb3RnX3NldF9wYXJhbV9kZXZfdHhfZmlmb19zaXplKGNvcmVfaWYsCiAJCQkJCQkJCSAgICAgZHdjX290Z19tb2R1bGVfcGFyYW1zLgpAQCAtNTIxLDYgKzUyOCwxOCBAQAogCQkJZHdjX290Z19tb2R1bGVfcGFyYW1zLmRldl9vdXRfbmFrKTsKIAl9CiAKKwlpZiAoZHdjX290Z19tb2R1bGVfcGFyYW1zLmNvbnRfb25fYm5hICE9IC0xKSB7CisJCXJldHZhbCArPQorCQkJZHdjX290Z19zZXRfcGFyYW1fY29udF9vbl9ibmEoY29yZV9pZiwKKwkJCWR3Y19vdGdfbW9kdWxlX3BhcmFtcy5jb250X29uX2JuYSk7CisJfQorCisJaWYgKGR3Y19vdGdfbW9kdWxlX3BhcmFtcy5haGJfc2luZ2xlICE9IC0xKSB7CisJCXJldHZhbCArPQorCQkJZHdjX290Z19zZXRfcGFyYW1fYWhiX3NpbmdsZShjb3JlX2lmLAorCQkJZHdjX290Z19tb2R1bGVfcGFyYW1zLmFoYl9zaW5nbGUpOworCX0KKwogCWlmIChkd2Nfb3RnX21vZHVsZV9wYXJhbXMub3RnX3ZlciAhPSAtMSkgewogCQlyZXR2YWwgKz0KIAkJICAgIGR3Y19vdGdfc2V0X3BhcmFtX290Z192ZXIoY29yZV9pZiwKQEAgLTU1NSw3ICs1NzQsMTAgQEAKIAkJICogQml0WzE3OjE2XTp1c2IwX3JlZmNsa2RpdiAtIFJlZmVyZW5jZSBDbG9jayBGcmVxdWVuY3kgU2VsZWN0LCA0OCBNSHoKIAkJICogQml0WzIxOjIwXTp1c2IwX3JlZmNsa3NlbCAtIFRoZSBYTyBibG9jayB1c2VzIGFuIGV4dGVybmFsLCAyLjUgViBjbG9jayBzdXBwbGllZCBvbiB0aGUgWE8gcGluLgogCQkgKi8KLQkJd3JpdGVsKDB4MDAyMjAwMDAsIENPTUNFUlRPX1VTQjBfUEhZX0NUUkxfUkVHMCk7CisJCWlmKEhBTF9nZXRfcmVmX2NsaygpID09IFJFRl9DTEtfMjRNSFopCisJCQl3cml0ZWwoMHgwMDIxMDAwMCwgQ09NQ0VSVE9fVVNCMF9QSFlfQ1RSTF9SRUcwKTsgIC8vMjRNSHogcmVmIGNsaworCQllbHNlCisJCQl3cml0ZWwoMHgwMDIyMDAwMCwgQ09NQ0VSVE9fVVNCMF9QSFlfQ1RSTF9SRUcwKTsgIC8vNDhNSHogcmVmIGNsawogCiAJCS8qIFByb2dyYW1taW5nIHRoZSBJRFNFTCB2YWx1ZXMgdG8gVVNCIDIuMCBDb250cm9sbGVyIEAgRFdDX0NGR19SRUdGIHJlZ2lzdGVyICovCiAJCS8qIENvbmZpZ3VyaW5nIHRoZSB1c2IyIGNvbnRyb2xsZXIgdG8gc2VsZWN0IHRoZSBJRCB2YWx1ZSBmcm9tIHJlZ2lzdGVyICovCkBAIC02NDMsMTAgKzY2NSw5IEBACiAgKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCBkd2Nfb3RnX2NvbW1vbl9pcnEoaW50IGlycSwgdm9pZCAqZGV2KQogewotCWR3Y19vdGdfZGV2aWNlX3QgKm90Z19kZXYgPSBkZXY7CiAJaW50MzJfdCByZXR2YWwgPSBJUlFfTk9ORTsKIAotCXJldHZhbCA9IGR3Y19vdGdfaGFuZGxlX2NvbW1vbl9pbnRyKG90Z19kZXYtPmNvcmVfaWYpOworCXJldHZhbCA9IGR3Y19vdGdfaGFuZGxlX2NvbW1vbl9pbnRyKGRldik7CiAJaWYgKHJldHZhbCAhPSAwKSB7CiAJCVMzQzI0MTBYX0NMRUFSX0VJTlRQRU5EKCk7CiAJfQpAQCAtNjY4LDkgKzY4OSw4IEBACiAjZWxpZiBkZWZpbmVkKFBDSV9JTlRFUkZBQ0UpCiAJCQkJCSBzdHJ1Y3QgcGNpX2RldiAqX2RldgogI2Vsc2UKLQkJCQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX2RldgorCQkJCQkgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX2RldgogI2VuZGlmCi0KICAgICApCiB7CiAjaWZkZWYgTE1fSU5URVJGQUNFCkBAIC03MjUsMTEgKzc0NSw4IEBACiAJLyoKIAkgKiBSZW1vdmUgdGhlIGRldmljZSBhdHRyaWJ1dGVzCiAJICovCi0jaWYgMQogCWR3Y19vdGdfYXR0cl9yZW1vdmUoX2Rldik7Ci0jZWxzZQotCWR3Y19vdGdfYXR0cl9yZW1vdmUob3RnX2Rldi0+b3NfZGVwLnBhcmVudCk7Ci0jZW5kaWYKKwogCS8qCiAJICogUmV0dXJuIHRoZSBtZW1vcnkuCiAJICovCkBAIC03NTMsNyArNzcwLDYgQEAKICNlbHNlCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoX2RldiwgMCk7CiAjZW5kaWYKLQogfQogCiAvKioKQEAgLTc5Niw3ICs4MTIsNiBAQAogCX0KIAlkZXZfZGJnKCZfZGV2LT5kZXYsICJzdGFydD0weCUwOHhcbiIsICh1bnNpZ25lZClwY2lfcmVzb3VyY2Vfc3RhcnQoX2RldiwwKSk7CiAJLyogb3RoZXIgc3R1ZmYgbmVlZGVkIGFzIHdlbGw/ICovCi0KICNlbHNlCiAJZGV2X2RiZygmX2Rldi0+ZGV2LCAic3RhcnQ9MHglMDh4XG4iLCAodW5zaWduZWQpX2Rldi0+cmVzb3VyY2UtPnN0YXJ0KTsKICNlbmRpZgpAQCAtODExLDcgKzgyNiw2IEBACiAJbWVtc2V0KGR3Y19vdGdfZGV2aWNlLCAwLCBzaXplb2YoKmR3Y19vdGdfZGV2aWNlKSk7CiAJZHdjX290Z19kZXZpY2UtPm9zX2RlcC5yZWdfb2Zmc2V0ID0gMHhGRkZGRkZGRjsKIAotCiAJLyogUGxhdGZvcm0gU3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8KIAljb21jZXJ0b19zdGFydF9kd2Nfb3RnKCk7CiAKQEAgLTg5MywxNCArOTA3LDEzIEBACiAJLyoKIAkgKiBSZXRyaWV2ZSB0aGUgbWVtb3J5IGFuZCBJUlEgcmVzb3VyY2VzLgogCSAqLwotCWR3Y19vdGdfZGV2aWNlLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKF9kZXYsIDApOworCSBkd2Nfb3RnX2RldmljZS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShfZGV2LCAwKTsKIAlpZiAoZHdjX290Z19kZXZpY2UtPmlycSA8PSAwKSB7CiAJCWRldl9lcnIoJl9kZXYtPmRldiwgIm5vIGRldmljZSBpcnFcbiIpOwogCQlyZXR2YWwgPSAtRUlOVkFMOwogCQlnb3RvIGZhaWw7CiAJfQogCi0KIAkvKgogCSAqIEluaXRpYWxpemUgZHJpdmVyIGRhdGEgdG8gcG9pbnQgdG8gdGhlIGdsb2JhbCBEV0Nfb3RnCiAJICogRGV2aWNlIHN0cnVjdHVyZS4KQEAgLTkwOSw2ICs5MjIsNyBAQAogCWxtX3NldF9kcnZkYXRhKF9kZXYsIGR3Y19vdGdfZGV2aWNlKTsKICNlbHNlCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoX2RldiwgZHdjX290Z19kZXZpY2UpOworCV9kZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gKHZvaWQgKikgZHdjX290Z19kZXZpY2U7CiAjZW5kaWYKIAlkZXZfZGJnKCZfZGV2LT5kZXYsICJkd2Nfb3RnX2RldmljZT0weCVwXG4iLCBkd2Nfb3RnX2RldmljZSk7CiAKQEAgLTk0NCw3ICs5NTgsNiBAQAogCS8qCiAJICogQ3JlYXRlIERldmljZSBBdHRyaWJ1dGVzIGluIHN5c2ZzCiAJICovCi0JLy9kd2Nfb3RnX2F0dHJfY3JlYXRlKCZfZGV2LT5kZXYpOwogCWR3Y19vdGdfYXR0cl9jcmVhdGUoX2Rldik7CiAKIAkvKgpAQCAtOTcyLDkgKzk4NSw2IEBACiAKICNpZmRlZiBMTV9JTlRFUkZBQ0UKIAlzZXRfaXJxX3R5cGUoX2Rldi0+aXJxLCBJUlFUX0xPVyk7Ci0jZWxzZQotCS8qIEZJWE1FIDogTWFrYXJhbmQgLSBOZWVkIHRvIGNoZWNrIGFib3V0IGl0ICovCi0JLy9zZXRfaXJxX3R5cGUoZHdjX290Z19kZXZpY2UtPmlycSwgSVJRVF9MT1cpOwogI2VuZGlmCiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSBEV0Nfb3RnIGNvcmUuCkBAIC0xMDE2LDcgKzEwMjYsOCBAQAogCWlmICghZHdjX290Z19nZXRfcGFyYW1fYWRwX2VuYWJsZShkd2Nfb3RnX2RldmljZS0+Y29yZV9pZikpCiAJCWR3Y19vdGdfZW5hYmxlX2dsb2JhbF9pbnRlcnJ1cHRzKGR3Y19vdGdfZGV2aWNlLT5jb3JlX2lmKTsKIAllbHNlCi0JCWR3Y19vdGdfYWRwX3N0YXJ0KGR3Y19vdGdfZGV2aWNlLT5jb3JlX2lmKTsKKwkJZHdjX290Z19hZHBfc3RhcnQoZHdjX290Z19kZXZpY2UtPmNvcmVfaWYsCisJCQkJCQkJZHdjX290Z19pc19ob3N0X21vZGUoZHdjX290Z19kZXZpY2UtPmNvcmVfaWYpKTsKIAogCXJldHVybiAwOwogCkBAIC0xNDgwLDYgKzE0OTEsMTAgQEAKIE1PRFVMRV9QQVJNX0RFU0MocmVsb2FkX2N0bCwgIkhGSVIgUmVsb2FkIENvbnRyb2wiKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChkZXZfb3V0X25haywgZHdjX290Z19tb2R1bGVfcGFyYW1zLmRldl9vdXRfbmFrLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZXZfb3V0X25haywgIkVuYWJsZSBEZXZpY2UgT1VUIE5BSyIpOworbW9kdWxlX3BhcmFtX25hbWVkKGNvbnRfb25fYm5hLCBkd2Nfb3RnX21vZHVsZV9wYXJhbXMuY29udF9vbl9ibmEsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGNvbnRfb25fYm5hLCAiRW5hYmxlIEVuYWJsZSBDb250aW51ZSBvbiBCTkEiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChhaGJfc2luZ2xlLCBkd2Nfb3RnX21vZHVsZV9wYXJhbXMuYWhiX3NpbmdsZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYWhiX3NpbmdsZSwgIkVuYWJsZSBBSEIgU2luZ2xlIFN1cHBvcnQiKTsKIG1vZHVsZV9wYXJhbV9uYW1lZChhZHBfZW5hYmxlLCBkd2Nfb3RnX21vZHVsZV9wYXJhbXMuYWRwX2VuYWJsZSwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYWRwX2VuYWJsZSwgIkFEUCBFbmFibGUgMD1BRFAgRGlzYWJsZWQgMT1BRFAgRW5hYmxlZCIpOwogbW9kdWxlX3BhcmFtX25hbWVkKG90Z192ZXIsIGR3Y19vdGdfbW9kdWxlX3BhcmFtcy5vdGdfdmVyLCBpbnQsIDA0NDQpOwpAQCAtMTgwNCw2ICsxODE5LDI0IEBACiAgLSAxOiBUaGUgY29yZSBzZXRzIE5BSyBhZnRlciBCdWxrIE9VVCB0cmFuc2ZlciBjb21wbGV0ZQogIDwvdGQ+PC90cj4KIAorIDx0cj4KKyA8dGQ+Y29udF9vbl9ibmE8L3RkPgorIDx0ZD5TcGVjaWZpZXMgd2hldGhlciBFbmFibGUgQ29udGludWUgb24gQk5BIGVuYWJsZWQgb3Igbm8uCisgQWZ0ZXIgcmVjZWl2aW5nIEJOQSBpbnRlcnJ1cHQgdGhlIGNvcmUgZGlzYWJsZXMgdGhlIGVuZHBvaW50LHdoZW4gdGhlCisgZW5kcG9pbnQgaXMgcmUtZW5hYmxlZCBieSB0aGUgYXBwbGljYXRpb24gdGhlCisgLSAwOiBDb3JlIHN0YXJ0cyBwcm9jZXNzaW5nIGZyb20gdGhlIERPRVBETUEgZGVzY3JpcHRvciAoZGVmYXVsdCkKKyAtIDE6IENvcmUgc3RhcnRzIHByb2Nlc3NpbmcgZnJvbSB0aGUgZGVzY3JpcHRvciB3aGljaCByZWNlaXZlZCB0aGUgQk5BLgorIFRoaXMgcGFyYW1ldGVyIGlzIHZhbGlkIG9ubHkgd2hlbiBPVEdfRU5fREVTQ19ETUEgPT0gMZJiMS4KKyA8L3RkPjwvdHI+CisKKyA8dHI+CisgPHRkPmFoYl9zaW5nbGU8L3RkPgorIDx0ZD5UaGlzIGJpdCB3aGVuIHByb2dyYW1tZWQgc3VwcG9ydHMgU0lOR0xFIHRyYW5zZmVycyBmb3IgcmVtYWluZGVyIGRhdGEKKyBpbiBhIHRyYW5zZmVyIGZvciBETUEgbW9kZSBvZiBvcGVyYXRpb24uCisgLSAwOiBUaGUgcmVtYWluZGVyIGRhdGEgd2lsbCBiZSBzZW50IHVzaW5nIElOQ1IgYnVyc3Qgc2l6ZSAoZGVmYXVsdCkKKyAtIDE6IFRoZSByZW1haW5kZXIgZGF0YSB3aWxsIGJlIHNlbnQgdXNpbmcgU0lOR0xFIGJ1cnN0IHNpemUuCisgPC90ZD48L3RyPgorCiA8dHI+CiAgPHRkPmFkcF9lbmFibGU8L3RkPgogIDx0ZD5TcGVjaWZpZXMgd2hldGhlciBBRFAgZmVhdHVyZSBpcyBlbmFibGVkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX2RyaXZlci5oIGIvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX2RyaXZlci5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19oY2QuYyBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19oY2QuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDdmMTE3YTkuLmQ0OWY0NzUKLS0tIGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19oY2QuYwpAQCAtMSw4ICsxLDggQEAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiAkRmlsZTogLy9kd2gvdXNiX2lpcC9kZXYvc29mdHdhcmUvb3RnL2xpbnV4L2RyaXZlcnMvZHdjX290Z19oY2QuYyAkCi0gKiAkUmV2aXNpb246ICMxMDIgJAotICogJERhdGU6IDIwMTEvMDUvMTcgJAotICogJENoYW5nZTogMTc3NDExMCAkCisgKiAkUmV2aXNpb246ICMxMDQgJAorICogJERhdGU6IDIwMTEvMTAvMjQgJAorICogJENoYW5nZTogMTg3MTE1OSAkCiAgKgogICogU3lub3BzeXMgSFMgT1RHIExpbnV4IFNvZnR3YXJlIERyaXZlciBhbmQgZG9jdW1lbnRhdGlvbiAoaGVyZWluYWZ0ZXIsCiAgKiAiU29mdHdhcmUiKSBpcyBhbiBVbnN1cHBvcnRlZCBwcm9wcmlldGFyeSB3b3JrIG9mIFN5bm9wc3lzLCBJbmMuIHVubGVzcwpAQCAtNDQ3LDYgKzQ0Nyw3IEBACiAJZHdjX2lycWZsYWdzX3QgZmxhZ3M7CiAJaW50IHJldHZhbCA9IDA7CiAJZHdjX290Z19xdGRfdCAqcXRkOworCWdpbnRtc2tfZGF0YV90IGludHJfbWFzayA9IHsuZDMyID0gMCB9OwogCiAJaWYgKCFoY2QtPmZsYWdzLmIucG9ydF9jb25uZWN0X3N0YXR1cykgewogCQkvKiBObyBsb25nZXIgY29ubmVjdGVkLiAqLwpAQCAtNDY5LDEyICs0NzAsMTIgQEAKIAl9IGVsc2UgewogCQlxdGQtPnFoID0gKmVwX2hhbmRsZTsKIAl9Ci0KLQlpZiAoaGNkLT5jb3JlX2lmLT5kbWFfZGVzY19lbmFibGUgJiYgcmV0dmFsID09IDApIHsKKwlpbnRyX21hc2suZDMyID0gRFdDX1JFQURfUkVHMzIoJmhjZC0+Y29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z2ludG1zayk7CisJaWYgKCFpbnRyX21hc2suYi5zb2ZpbnRyICYmIHJldHZhbCA9PSAwKSB7CiAJCWR3Y19vdGdfdHJhbnNhY3Rpb25fdHlwZV9lIHRyX3R5cGU7CiAJCWlmICgocXRkLT5xaC0+ZXBfdHlwZSA9PSBVRV9CVUxLKQogCQkgICAgJiYgIShxdGQtPnVyYi0+ZmxhZ3MgJiBVUkJfR0lWRUJBQ0tfQVNBUCkpIHsKLQkJCS8qIERvIG5vdCBzY2hlZHVsZSBTRyB0cmFuc2NhdGlvbnMgdW50aWwgcXRkIGhhcyBVUkJfR0lWRUJBQ0tfQVNBUCBzZXQgKi8KKwkJCS8qIERvIG5vdCBzY2hlZHVsZSBTRyB0cmFuc2FjdGlvbnMgdW50aWwgcXRkIGhhcyBVUkJfR0lWRUJBQ0tfQVNBUCBzZXQgKi8KIAkJCXJldHVybiAwOwogCQl9CiAJCURXQ19TUElOTE9DS19JUlFTQVZFKGhjZC0+bG9jaywgJmZsYWdzKTsKQEAgLTg3MCw2ICs4NzEsNyBAQAogCWhjZC0+b3RnX3BvcnQgPSAxOwogCWhjZC0+ZnJhbWVfbGlzdCA9IE5VTEw7CiAJaGNkLT5mcmFtZV9saXN0X2RtYSA9IDA7CisJaGNkLT5wZXJpb2RpY19xaF9jb3VudCA9IDA7CiBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTI0NTksNiArMjQ2MSw3IEBACiAJCQl9CiAKIAkJCS8qKiBAdG9kbyAtIGNoZWNrIGhvdyBzdyBjYW4gd2FpdCBmb3IgMSBzZWMgdG8gY2hlY2sgYXNlc3ZsZD8/PyAqLworI2lmIDAgLy92YWhyYW1hICEhISEhISEhISEhISEhISEhIQogCQkJaWYgKGNvcmVfaWYtPmFkcF9lbmFibGUpIHsKIAkJCQlnb3RnY3RsX2RhdGFfdCBnb3RnY3RsID0gey5kMzIgPSAwIH07CiAJCQkJZ3B3cmRuX2RhdGFfdCBncHdyZG47CkBAIC0yNDg1LDYgKzI0ODgsNyBAQAogCiAJCQkJZHdjX290Z19hZHBfcHJvYmVfc3RhcnQoY29yZV9pZik7CiAJCQl9CisjZW5kaWYKIAkJCWJyZWFrOwogCQljYXNlIFVIRl9QT1JUX1BPV0VSOgogCQkJRFdDX0RFQlVHUEwoREJHX0hDRCwgIkRXQyBPVEcgSENEIEhVQiBDT05UUk9MIC0gIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX2hjZC5oIGIvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX2hjZC5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggYTQ2OGRmNS4uNThhMTI5MwotLS0gYS9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfaGNkLmgKKysrIGIvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX2hjZC5oCkBAIC0xLDggKzEsOCBAQAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqICRGaWxlOiAvL2R3aC91c2JfaWlwL2Rldi9zb2Z0d2FyZS9vdGcvbGludXgvZHJpdmVycy9kd2Nfb3RnX2hjZC5oICQKLSAqICRSZXZpc2lvbjogIzU3ICQKLSAqICREYXRlOiAyMDEwLzExLzI5ICQKLSAqICRDaGFuZ2U6IDE2MzYwMzMgJAorICogJFJldmlzaW9uOiAjNTggJAorICogJERhdGU6IDIwMTEvMDkvMTUgJAorICogJENoYW5nZTogMTg0NjY0NyAkCiAgKgogICogU3lub3BzeXMgSFMgT1RHIExpbnV4IFNvZnR3YXJlIERyaXZlciBhbmQgZG9jdW1lbnRhdGlvbiAoaGVyZWluYWZ0ZXIsCiAgKiAiU29mdHdhcmUiKSBpcyBhbiBVbnN1cHBvcnRlZCBwcm9wcmlldGFyeSB3b3JrIG9mIFN5bm9wc3lzLCBJbmMuIHVubGVzcwpAQCAtNDczLDYgKzQ3MywxMSBAQAogCXVpbnQxNl90IGZyYW1lX251bWJlcjsKIAogCS8qKgorCSAqIENvdW50IG9mIHBlcmlvZGljIFFIcywgaWYgdXNpbmcgc2V2ZXJhbCBlcHMuIEZvciBTT0YgZW5hYmxlL2Rpc2FibGUuCisJICovCisJdWludDE2X3QgcGVyaW9kaWNfcWhfY291bnQ7CisKKwkvKioKIAkgKiBGcmVlIGhvc3QgY2hhbm5lbHMgaW4gdGhlIGNvbnRyb2xsZXIuIFRoaXMgaXMgYSBsaXN0IG9mCiAJICogZHdjX2hjX3QgaXRlbXMuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfaGNkX2RkbWEuYyBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19oY2RfZGRtYS5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggOGMzYWM1Mi4uNjkxMWUwNAotLS0gYS9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfaGNkX2RkbWEuYworKysgYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfaGNkX2RkbWEuYwpAQCAtMSw4ICsxLDggQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqICRGaWxlOiAvL2R3aC91c2JfaWlwL2Rldi9zb2Z0d2FyZS9vdGcvbGludXgvZHJpdmVycy9kd2Nfb3RnX2hjZF9kZG1hLmMgJAotICogJFJldmlzaW9uOiAjOCAkCi0gKiAkRGF0ZTogMjAxMC8xMS8yOSAkCi0gKiAkQ2hhbmdlOiAxNjM2MDMzICQKKyAqICRSZXZpc2lvbjogIzEwICQKKyAqICREYXRlOiAyMDExLzEwLzIwICQKKyAqICRDaGFuZ2U6IDE4Njk0NjQgJAogICoKICAqIFN5bm9wc3lzIEhTIE9URyBMaW51eCBTb2Z0d2FyZSBEcml2ZXIgYW5kIGRvY3VtZW50YXRpb24gKGhlcmVpbmFmdGVyLAogICogIlNvZnR3YXJlIikgaXMgYW4gVW5zdXBwb3J0ZWQgcHJvcHJpZXRhcnkgd29yayBvZiBTeW5vcHN5cywgSW5jLiB1bmxlc3MKQEAgLTUyMyw2ICs1MjMsNyBAQAogCQkJCXFoLT5uX2J5dGVzW2lkeF0gPSBmcmFtZV9kZXNjLT5sZW5ndGg7CiAJCQlkbWFfZGVzYy0+c3RhdHVzLmJfaXNvYy5uX2J5dGVzID0gcWgtPm5fYnl0ZXNbaWR4XTsKIAkJCWRtYV9kZXNjLT5zdGF0dXMuYl9pc29jLmEgPSAxOworCQkJZG1hX2Rlc2MtPnN0YXR1cy5iX2lzb2Muc3RzID0gMDsKIAogCQkJZG1hX2Rlc2MtPmJ1ZiA9IHF0ZC0+dXJiLT5kbWEgKyBmcmFtZV9kZXNjLT5vZmZzZXQ7CiAKQEAgLTY0MCw2ICs2NDEsNyBAQAogCQkJCWRtYV9kZXNjLT5zdGF0dXMuYi5zdXAgPSAxOwkvKiBTZXR1cCBQYWNrZXQgKi8KIAogCQkJZG1hX2Rlc2MtPnN0YXR1cy5iLmEgPSAxOwkvKiBBY3RpdmUgZGVzY3JpcHRvciAqLworCQkJZG1hX2Rlc2MtPnN0YXR1cy5iLnN0cyA9IDA7CiAKIAkJCWRtYV9kZXNjLT5idWYgPQogCQkJICAgICgodW5zaWduZWQgbG9uZyloYy0+eGZlcl9idWZmICYgMHhmZmZmZmZmZik7CkBAIC02NjMsNiArNjY1LDkgQEAKIAogCQlxdGQtPmluX3Byb2Nlc3MgPSAxOwogCisJCWlmIChxaC0+ZXBfdHlwZSA9PSBVRV9DT05UUk9MKQorCQkJYnJlYWs7CisKIAkJaWYgKG5fZGVzYyA9PSBNQVhfRE1BX0RFU0NfTlVNX0dFTkVSSUMpCiAJCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfaGNkX2lmLmggYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfaGNkX2lmLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBkMTc1NjFmLi5iM2RjODA2Ci0tLSBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19oY2RfaWYuaAorKysgYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfaGNkX2lmLmgKQEAgLTEsOCArMSw4IEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogJEZpbGU6IC8vZHdoL3VzYl9paXAvZGV2L3NvZnR3YXJlL290Zy9saW51eC9kcml2ZXJzL2R3Y19vdGdfaGNkX2lmLmggJAotICogJFJldmlzaW9uOiAjMTEgJAotICogJERhdGU6IDIwMTEvMDUvMTcgJAotICogJENoYW5nZTogMTc3NDExMCAkCisgKiAkUmV2aXNpb246ICMxMiAkCisgKiAkRGF0ZTogMjAxMS8xMC8yNiAkCisgKiAkQ2hhbmdlOiAxODczMDI4ICQKICAqCiAgKiBTeW5vcHN5cyBIUyBPVEcgTGludXggU29mdHdhcmUgRHJpdmVyIGFuZCBkb2N1bWVudGF0aW9uIChoZXJlaW5hZnRlciwKICAqICJTb2Z0d2FyZSIpIGlzIGFuIFVuc3VwcG9ydGVkIHByb3ByaWV0YXJ5IHdvcmsgb2YgU3lub3BzeXMsIEluYy4gdW5sZXNzCkBAIC0xNzcsNyArMTc3LDcgQEAKIC8qKgogICogUmV0dXJucyBPVEcgdmVyc2lvbiAtIGVpdGhlciAxLjMgb3IgMi4wLgogICoKLSAqIEBwYXJhbSBoY2QgVGhlIEhDRAorICogQHBhcmFtIGNvcmVfaWYgVGhlIGNvcmVfaWYgc3RydWN0dXJlIHBvaW50ZXIKICAqLwogZXh0ZXJuIHVpbnQxNl90IGR3Y19vdGdfZ2V0X290Z192ZXJzaW9uKGR3Y19vdGdfY29yZV9pZl90ICogY29yZV9pZik7CiAKQEAgLTMzMiw2ICszMzIsNyBAQAogICogQHBhcmFtIGR3Y19vdGdfaGNkIFRoZSBIQ0QKICAqIEBwYXJhbSBkd2Nfb3RnX3VyYiBEV0NfT1RHIFVSQgogICogQHBhcmFtIGVwX2hhbmRsZSBPdXQgcGFyYW1ldGVyIGZvciByZXR1cm5pbmcgZW5kcG9pbnQgaGFuZGxlCisgKiBAcGFyYW0gYXRvbWljX2FsbG9jIEZsYWcgdG8gZG8gYXRvbWljIGFsbG9jYXRpb24gaWYgbmVlZGVkCiAgKgogICogUmV0dXJucyAtRFdDX0VfTk9fREVWSUNFIGlmIG5vIGRldmljZSBpcyBjb25uZWN0ZWQuCiAgKiBSZXR1cm5zIC1EV0NfRV9OT19NRU1PUlkgaWYgdGhlcmUgaXMgbm8gZW5vdWdoIG1lbW9yeS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19oY2RfaW50ci5jIGIvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX2hjZF9pbnRyLmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA1NDUzNTAwLi5kMTQ1ZmEwCi0tLSBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19oY2RfaW50ci5jCisrKyBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19oY2RfaW50ci5jCkBAIC0xLDggKzEsOCBAQAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqICRGaWxlOiAvL2R3aC91c2JfaWlwL2Rldi9zb2Z0d2FyZS9vdGcvbGludXgvZHJpdmVycy9kd2Nfb3RnX2hjZF9pbnRyLmMgJAotICogJFJldmlzaW9uOiAjODcgJAotICogJERhdGU6IDIwMTEvMDUvMTcgJAotICogJENoYW5nZTogMTc3NDExMCAkCisgKiAkUmV2aXNpb246ICM4OSAkCisgKiAkRGF0ZTogMjAxMS8xMC8yMCAkCisgKiAkQ2hhbmdlOiAxODY5NDg3ICQKICAqCiAgKiBTeW5vcHN5cyBIUyBPVEcgTGludXggU29mdHdhcmUgRHJpdmVyIGFuZCBkb2N1bWVudGF0aW9uIChoZXJlaW5hZnRlciwKICAqICJTb2Z0d2FyZSIpIGlzIGFuIFVuc3VwcG9ydGVkIHByb3ByaWV0YXJ5IHdvcmsgb2YgU3lub3BzeXMsIEluYy4gdW5sZXNzCkBAIC0zMzEsNyArMzMxLDcgQEAKIAogCWlmIChocHJ0MC5iLnBydGNvbm5kZXQpIHsKIAkJLyoqIEB0b2RvIC0gY2hlY2sgaWYgc3RlcHMgcGVyZm9ybWVkIGluICdlbHNlJyBibG9jayBzaG91bGQgYmUgcGVyZnJvbWVkIHJlZ2FyZGxlcyBhZHAgKi8KLQkJaWYgKGR3Y19vdGdfaGNkLT5jb3JlX2lmLT5hZHBfZW5hYmxlICYmIAkKKwkJaWYgKGR3Y19vdGdfaGNkLT5jb3JlX2lmLT5hZHBfZW5hYmxlICYmCiAJCQkJZHdjX290Z19oY2QtPmNvcmVfaWYtPmFkcC52YnVzb25fdGltZXJfc3RhcnRlZCA9PSAxKSB7CiAJCQlEV0NfUFJJTlRGKCJQT1JUIENPTk5FQ1QgREVURUNURUQgLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAJCQlEV0NfVElNRVJfQ0FOQ0VMKGR3Y19vdGdfaGNkLT5jb3JlX2lmLT5hZHAudmJ1c29uX3RpbWVyKTsKQEAgLTM0NSwxMyArMzQ1LDEzIEBACiAJCQlkd2Nfb3RnX2VuYWJsZV9nbG9iYWxfaW50ZXJydXB0cyhkd2Nfb3RnX2hjZC0+Y29yZV9pZik7CiAJCQljaWxfaGNkX3N0YXJ0KGR3Y19vdGdfaGNkLT5jb3JlX2lmKTsqLwogCQl9IGVsc2UgewotCQkKKwogCQkJRFdDX0RFQlVHUEwoREJHX0hDRCwgIi0tUG9ydCBJbnRlcnJ1cHQgSFBSVDA9MHglMDh4ICIKIAkJCQkgICAgIlBvcnQgQ29ubmVjdCBEZXRlY3RlZC0tXG4iLCBocHJ0MC5kMzIpOwogCQkJZHdjX290Z19oY2QtPmZsYWdzLmIucG9ydF9jb25uZWN0X3N0YXR1c19jaGFuZ2UgPSAxOwogCQkJZHdjX290Z19oY2QtPmZsYWdzLmIucG9ydF9jb25uZWN0X3N0YXR1cyA9IDE7CiAJCQlocHJ0MF9tb2RpZnkuYi5wcnRjb25uZGV0ID0gMTsKLQkKKwogCQkJLyogQi1EZXZpY2UgaGFzIGNvbm5lY3RlZCwgRGVsZXRlIHRoZSBjb25uZWN0aW9uIHRpbWVyLiAqLwogCQkJRFdDX1RJTUVSX0NBTkNFTChkd2Nfb3RnX2hjZC0+Y29ubl90aW1lcik7CiAJCX0KQEAgLTM3NSw3ICszNzUsNyBAQAogCQkJICAgIGR3Y19vdGdfaGNkLT5jb3JlX2lmLT5jb3JlX2dsb2JhbF9yZWdzOwogCQkJZHdjX290Z19ob3N0X2lmX3QgKmhvc3RfaWYgPQogCQkJICAgIGR3Y19vdGdfaGNkLT5jb3JlX2lmLT5ob3N0X2lmOwotCQkJICAgIAorCiAJCQkvKiBFdmVyeSB0aW1lIHdoZW4gcG9ydCBlbmFibGVzIGNhbGN1bGF0ZQogCQkJICogSEZJUi5GckludGVydmFsCiAJCQkgKi8KQEAgLTYwMyw3ICs2MDMsNyBAQAogCQl4ZmVyX2RvbmUgPSAxOwogCQl1cmItPnN0YXR1cyA9IDA7CiAJfQotCQorCiAjaWZkZWYgREVCVUcKIAl7CiAJCWhjdHNpel9kYXRhX3QgaGN0c2l6OwpAQCAtNjg0LDcgKzY4NCw3IEBACiAJCQlkd2NfbWVtY3B5KHVyYi0+YnVmICsgZnJhbWVfZGVzYy0+b2Zmc2V0ICsgcXRkLT5pc29jX3NwbGl0X29mZnNldCwKIAkJCQkgICBoYy0+cWgtPmR3X2FsaWduX2J1ZiwgZnJhbWVfZGVzYy0+YWN0dWFsX2xlbmd0aCk7CiAJCX0KLQkJCisKIAkJYnJlYWs7CiAJY2FzZSBEV0NfT1RHX0hDX1hGRVJfRlJBTUVfT1ZFUlJVTjoKIAkJdXJiLT5lcnJvcl9jb3VudCsrOwpAQCAtODIxLDYgKzgyMSwxNCBAQAogCWNhc2UgRFdDX09UR19IQ19YRkVSX05PX0hBTFRfU1RBVFVTOgogCQlmcmVlX3F0ZCA9IDA7CiAJCWJyZWFrOworCWNhc2UgRFdDX09UR19IQ19YRkVSX1BFUklPRElDX0lOQ09NUExFVEU6CisJCURXQ19ERUJVR1BMKERCR19IQ0RWLAorCQkJIiAgQ29tcGxldGUgVVJCIHdpdGggSS9PIGVycm9yXG4iKTsKKwkJZnJlZV9xdGQgPSAxOworCQlxdGQtPnVyYi0+c3RhdHVzID0gLURXQ19FX0lPOworCQloY2QtPmZvcHMtPmNvbXBsZXRlKGhjZCwgcXRkLT51cmItPnByaXYsCisJCQlxdGQtPnVyYiwgLURXQ19FX0lPKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZnJlZV9xdGQgPSAwOwogCQlicmVhazsKQEAgLTExMzMsMTYgKzExNDEsMjIgQEAKIAkJYnJlYWs7CiAJY2FzZSBVRV9JTlRFUlJVUFQ6CiAJCURXQ19ERUJVR1BMKERCR19IQ0RWLCAiICBJbnRlcnJ1cHQgdHJhbnNmZXIgY29tcGxldGVcbiIpOwotCQl1cGRhdGVfdXJiX3N0YXRlX3hmZXJfY29tcChoYywgaGNfcmVncywgdXJiLCBxdGQpOworCQl1cmJfeGZlcl9kb25lID0KKwkJCXVwZGF0ZV91cmJfc3RhdGVfeGZlcl9jb21wKGhjLCBoY19yZWdzLCB1cmIsIHF0ZCk7CiAKIAkJLyoKIAkJICogSW50ZXJydXB0IFVSQiBpcyBkb25lIG9uIHRoZSBmaXJzdCB0cmFuc2ZlciBjb21wbGV0ZQogCQkgKiBpbnRlcnJ1cHQuCiAJCSAqLwotCQloY2QtPmZvcHMtPmNvbXBsZXRlKGhjZCwgdXJiLT5wcml2LCB1cmIsIHVyYi0+c3RhdHVzKTsKKwkJaWYgKHVyYl94ZmVyX2RvbmUpIHsKKwkJCQloY2QtPmZvcHMtPmNvbXBsZXRlKGhjZCwgdXJiLT5wcml2LCB1cmIsIHVyYi0+c3RhdHVzKTsKKwkJCQloYWx0X3N0YXR1cyA9IERXQ19PVEdfSENfWEZFUl9VUkJfQ09NUExFVEU7CisJCX0gZWxzZSB7CisJCQkJaGFsdF9zdGF0dXMgPSBEV0NfT1RHX0hDX1hGRVJfQ09NUExFVEU7CisJCX0KKwogCQlkd2Nfb3RnX2hjZF9zYXZlX2RhdGFfdG9nZ2xlKGhjLCBoY19yZWdzLCBxdGQpOwotCQljb21wbGV0ZV9wZXJpb2RpY194ZmVyKGhjZCwgaGMsIGhjX3JlZ3MsIHF0ZCwKLQkJCQkgICAgICAgRFdDX09UR19IQ19YRkVSX1VSQl9DT01QTEVURSk7CisJCWNvbXBsZXRlX3BlcmlvZGljX3hmZXIoaGNkLCBoYywgaGNfcmVncywgcXRkLCBoYWx0X3N0YXR1cyk7CiAJCWJyZWFrOwogCWNhc2UgVUVfSVNPQ0hST05PVVM6CiAJCURXQ19ERUJVR1BMKERCR19IQ0RWLCAiICBJc29jaHJvbm91cyB0cmFuc2ZlciBjb21wbGV0ZVxuIik7CkBAIC0xNDQ1LDEzICsxNDU5LDEzIEBACiAJCQlxdGQtPmlzb2Nfc3BsaXRfb2Zmc2V0ID0gMDsKIAkJCWlmICgrK3F0ZC0+aXNvY19mcmFtZV9pbmRleCA9PSBxdGQtPnVyYi0+cGFja2V0X2NvdW50KSB7CiAJCQkJaGNkLT5mb3BzLT5jb21wbGV0ZShoY2QsIHF0ZC0+dXJiLT5wcml2LCBxdGQtPnVyYiwgMCk7Ci0JCQkJcmVsZWFzZV9jaGFubmVsKGhjZCwgaGMsIHF0ZCwgRFdDX09UR19IQ19YRkVSX1VSQl9DT01QTEVURSk7CQorCQkJCXJlbGVhc2VfY2hhbm5lbChoY2QsIGhjLCBxdGQsIERXQ19PVEdfSENfWEZFUl9VUkJfQ09NUExFVEUpOwogCQkJfQogCQkJZWxzZQotCQkJCXJlbGVhc2VfY2hhbm5lbChoY2QsIGhjLCBxdGQsIERXQ19PVEdfSENfWEZFUl9OT19IQUxUX1NUQVRVUyk7CQorCQkJCXJlbGVhc2VfY2hhbm5lbChoY2QsIGhjLCBxdGQsIERXQ19PVEdfSENfWEZFUl9OT19IQUxUX1NUQVRVUyk7CiAJCQlnb3RvIGhhbmRsZV9ueWV0X2RvbmU7CiAJCX0KLQkJCisKIAkJaWYgKGhjLT5lcF90eXBlID09IERXQ19PVEdfRVBfVFlQRV9JTlRSIHx8CiAJCSAgICBoYy0+ZXBfdHlwZSA9PSBEV0NfT1RHX0VQX1RZUEVfSVNPQykgewogCQkJaW50IGZybnVtID0gZHdjX290Z19oY2RfZ2V0X2ZyYW1lX251bWJlcihoY2QpOwpAQCAtMTY1Myw2ICsxNjY3LDE1IEBACiAJCWdvdG8gaGFuZGxlX3hhY3RlcnJfZG9uZTsKIAl9CiAKKwlpZiAocXRkID09IE5VTEwpCisJCWdvdG8gaGFuZGxlX3hhY3RlcnJfZG9uZTsKKworCWlmKHF0ZC0+dXJiID09IE5VTEwpCisJCWdvdG8gaGFuZGxlX3hhY3RlcnJfZG9uZTsKKworCWlmICgmcXRkLT51cmItPnBpcGVfaW5mbyA9PSBOVUxMKQorCQlnb3RvIGhhbmRsZV94YWN0ZXJyX2RvbmU7CisKIAlzd2l0Y2ggKGR3Y19vdGdfaGNkX2dldF9waXBlX3R5cGUoJnF0ZC0+dXJiLT5waXBlX2luZm8pKSB7CiAJY2FzZSBVRV9DT05UUk9MOgogCWNhc2UgVUVfQlVMSzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19oY2RfbGludXguYyBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19oY2RfbGludXguYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDlhNmU1ZjAuLjYzOTMyMWMKLS0tIGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX2hjZF9saW51eC5jCisrKyBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19oY2RfbGludXguYwpAQCAtMSw4ICsxLDggQEAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiAkRmlsZTogLy9kd2gvdXNiX2lpcC9kZXYvc29mdHdhcmUvb3RnL2xpbnV4L2RyaXZlcnMvZHdjX290Z19oY2RfbGludXguYyAkCi0gKiAkUmV2aXNpb246ICMxOCAkCi0gKiAkRGF0ZTogMjAxMS8wNS8xNyAkCi0gKiAkQ2hhbmdlOiAxNzc0MTI2ICQKKyAqICRSZXZpc2lvbjogIzIwICQKKyAqICREYXRlOiAyMDExLzEwLzI2ICQKKyAqICRDaGFuZ2U6IDE4NzI5ODEgJAogICoKICAqIFN5bm9wc3lzIEhTIE9URyBMaW51eCBTb2Z0d2FyZSBEcml2ZXIgYW5kIGRvY3VtZW50YXRpb24gKGhlcmVpbmFmdGVyLAogICogIlNvZnR3YXJlIikgaXMgYW4gVW5zdXBwb3J0ZWQgcHJvcHJpZXRhcnkgd29yayBvZiBTeW5vcHN5cywgSW5jLiB1bmxlc3MKQEAgLTUxLDggKzUxLDExIEBACiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotLy8jaW5jbHVkZSA8Li4vZHJpdmVycy91c2IvY29yZS9oY2QuaD4KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMzUpCisjaW5jbHVkZSA8Li4vZHJpdmVycy91c2IvY29yZS9oY2QuaD4KKyNlbHNlCiAjaW5jbHVkZSA8bGludXgvdXNiL2hjZC5oPgorI2VuZGlmCiAKICNpbmNsdWRlICJkd2Nfb3RnX2hjZF9pZi5oIgogI2luY2x1ZGUgImR3Y19vdGdfZGJnLmgiCkBAIC02NSw3ICs2OCw2IEBACiAjZGVmaW5lIGR3Y19lcF9hZGRyX3RvX2VuZHBvaW50KF9iRW5kcG9pbnRBZGRyZXNzXykgKChfYkVuZHBvaW50QWRkcmVzc18gJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spIHwgXAogCQkJCQkJICAgICAoKF9iRW5kcG9pbnRBZGRyZXNzXyAmIFVTQl9ESVJfSU4pICE9IDApIDw8IDQpCiAKLS8vc3RhdGljIGNvbnN0IGNoYXIgZHdjX290Z19oY2RfbmFtZVtdID0gImR3Y19vdGdfaGNkIjsKIHN0YXRpYyBjb25zdCBjaGFyIGR3Y19vdGdfaGNkX25hbWVbXSA9ICJkd2Nfb3RnIjsKIAogLyoqIEBuYW1lIExpbnV4IEhDIERyaXZlciBBUEkgRnVuY3Rpb25zICovCkBAIC0xMTAsMTAgKzExMiwxMCBAQAogCiAJLmZsYWdzID0gSENEX01FTU9SWSB8IEhDRF9VU0IyLAogCi0JLy8ucmVzZXQgPSAgICAgICAgICAgICAgCisJLy8ucmVzZXQgPQogCS5zdGFydCA9IGhjZF9zdGFydCwKLQkvLy5zdXNwZW5kID0gICAgICAgICAgICAKLQkvLy5yZXN1bWUgPSAgICAgICAgICAgICAKKwkvLy5zdXNwZW5kID0KKwkvLy5yZXN1bWUgPQogCS5zdG9wID0gaGNkX3N0b3AsCiAKIAkudXJiX2VucXVldWUgPSB1cmJfZW5xdWV1ZSwKQEAgLTEyNiw4ICsxMjgsOCBAQAogCiAJLmh1Yl9zdGF0dXNfZGF0YSA9IGh1Yl9zdGF0dXNfZGF0YSwKIAkuaHViX2NvbnRyb2wgPSBodWJfY29udHJvbCwKLQkvLy5idXNfc3VzcGVuZCA9ICAgICAgICAgICAgICAgIAotCS8vLmJ1c19yZXN1bWUgPSAgICAgICAgIAorCS8vLmJ1c19zdXNwZW5kID0KKwkvLy5idXNfcmVzdW1lID0KIH07CiAKIC8qKiBHZXRzIHRoZSBkd2Nfb3RnX2hjZCBmcm9tIGEgc3RydWN0IHVzYl9oY2QgKi8KQEAgLTMzNyw3ICszMzksNyBAQAogCWR3Y19vdGdfaG9zdF9pZl90IGhvc3RfaWY7CiAJaHBydDBfZGF0YV90IGhwcnQ7CiAKLQlob3N0X2lmLmhwcnQwID0gaGNkLT5yZWdzICsgRFdDX09UR19IT1NUX1BPUlRfUkVHU19PRkZTRVQ7CQorCWhvc3RfaWYuaHBydDAgPSBoY2QtPnJlZ3MgKyBEV0NfT1RHX0hPU1RfUE9SVF9SRUdTX09GRlNFVDsKIAogCWhwcnQuZDMyPSBEV0NfUkVBRF9SRUczMihob3N0X2lmLmhwcnQwKTsKIAlocHJ0LmIucHJ0c3VzcCA9IDE7CkBAIC0zNTMsNyArMzU1LDcgQEAKIAlkd2Nfb3RnX2hvc3RfaWZfdCBob3N0X2lmOwogCWhwcnQwX2RhdGFfdCBocHJ0OwogCi0JaG9zdF9pZi5ocHJ0MCA9IGhjZC0+cmVncyArIERXQ19PVEdfSE9TVF9QT1JUX1JFR1NfT0ZGU0VUOwkKKwlob3N0X2lmLmhwcnQwID0gaGNkLT5yZWdzICsgRFdDX09UR19IT1NUX1BPUlRfUkVHU19PRkZTRVQ7CiAKIAlocHJ0LmQzMj0gRFdDX1JFQURfUkVHMzIoaG9zdF9pZi5ocHJ0MCk7CiAJaHBydC5iLnBydHN1c3AgPSAwOwpAQCAtMzcyLDEwICszNzQsOSBAQAogCQkgICAgc3RydWN0IGxtX2RldmljZSAqX2RldgogI2VsaWYgIGRlZmluZWQoUENJX0lOVEVSRkFDRSkKIAkJICAgIHN0cnVjdCBwY2lfZGV2ICpfZGV2Ci0jZWxzZSAKKyNlbHNlCiAJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfZGV2CiAjZW5kaWYKLQogICAgICkKIHsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gTlVMTDsKQEAgLTQ0Niw4ICs0NDcsMTAgQEAKIAogCW90Z19kZXYtPmhjZC0+b3RnX2RldiA9IG90Z19kZXY7CiAJaGNkLT5zZWxmLm90Z19wb3J0ID0gZHdjX290Z19oY2Rfb3RnX3BvcnQoZHdjX290Z19oY2QpOwotCS8vaGNkLT5zZWxmLm90Z192ZXJzaW9uID0gZHdjX290Z19nZXRfb3RnX3ZlcnNpb24ob3RnX2Rldi0+Y29yZV9pZik7Ci0KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDMzKSAvL2Rvbid0IHN1cHBvcnQgZm9yIExNKHdpdGggMi42LjIwLjEga2VybmVsKQorCS8qIERvbid0IHN1cHBvcnQgU0cgbGlzdCBhdCB0aGlzIHBvaW50ICovCisJaGNkLT5zZWxmLnNnX3RhYmxlc2l6ZSA9IDA7CisjZW5kaWYKIAkvKgogCSAqIEZpbmlzaCBnZW5lcmljIEhDRCBpbml0aWFsaXphdGlvbiBhbmQgc3RhcnQgdGhlIEhDRC4gVGhpcyBmdW5jdGlvbgogCSAqIGFsbG9jYXRlcyB0aGUgRE1BIGJ1ZmZlciBwb29sLCByZWdpc3RlcnMgdGhlIFVTQiBidXMsIHJlcXVlc3RzIHRoZQpAQCAtNDc2LDEwICs0NzksOSBAQAogCQkgICAgICAgc3RydWN0IGxtX2RldmljZSAqX2RldgogI2VsaWYgIGRlZmluZWQoUENJX0lOVEVSRkFDRSkKIAkJICAgICAgIHN0cnVjdCBwY2lfZGV2ICpfZGV2Ci0jZWxzZSAKKyNlbHNlCiAJCQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX2RldgogI2VuZGlmCi0KICAgICApCiB7CiAjaWZkZWYgTE1fSU5URVJGQUNFCkBAIC00OTAsNyArNDkyLDYgQEAKIAlkd2Nfb3RnX2RldmljZV90ICpvdGdfZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoX2Rldik7CiAjZW5kaWYKIAotCiAJZHdjX290Z19oY2RfdCAqZHdjX290Z19oY2Q7CiAJc3RydWN0IHVzYl9oY2QgKmhjZDsKIApAQCAtNjYzLDE1ICs2NjQsNiBAQAogCQlicmVhazsKIAljYXNlIFBJUEVfQlVMSzoKIAkJZXBfdHlwZSA9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEs7Ci0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDMxKQotLyogRklYTUUgOiBNYWthcmFuZCAtIE5lZWQgdG8gY29tbWVudCB0aGlzIHdhcm5pbmcgKi8KLSNpZiAwCi0JCWlmICh1cmItPnNnKSB7Ci0JCQlEV0NfV0FSTigiU0cgTElTVCByZWNlaXZlZCAtIHdlIGRvbid0IHN1cHBvcnQgaXRcbiIpOwotCQl9Ci0jZW5kaWYJCQotI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgUElQRV9JTlRFUlJVUFQ6CiAJCWVwX3R5cGUgPSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ7CkBAIC03OTYsNyArNzg4LDcgQEAKIH0KIAogI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMzApCi0vKiBSZXNldHMgZW5kcG9pbnQgc3BlY2lmaWMgcGFyYW1ldGVyIHZhbHVlcywgaW4gY3VycmVudCB2ZXJzaW9uIHVzZWQgdG8gcmVzZXQgCisvKiBSZXNldHMgZW5kcG9pbnQgc3BlY2lmaWMgcGFyYW1ldGVyIHZhbHVlcywgaW4gY3VycmVudCB2ZXJzaW9uIHVzZWQgdG8gcmVzZXQKICAqIHRoZSBkYXRhIHRvZ2dsZShhcyBhIFdBKS4gVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb20gdXNiX2NsZWFyX2hhbHQgcm91dGluZSAqLwogc3RhdGljIHZvaWQgZW5kcG9pbnRfcmVzZXQoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCkKIHsKQEAgLTgxNSw3ICs4MDcsNyBAQAogI2VuZGlmCiAKIAlpZiAoX2RldikKLQkJdWRldiA9IHRvX3VzYl9kZXZpY2UoX2Rldik7IC8vIHVkZXYgPSB0b191c2JfZGV2aWNlKCZfZGV2LT5kZXYpOworCQl1ZGV2ID0gdG9fdXNiX2RldmljZShfZGV2KTsKIAllbHNlCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX2hjZF9xdWV1ZS5jIGIvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX2hjZF9xdWV1ZS5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMDMxOGI5OC4uOTAzYTkwMgotLS0gYS9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfaGNkX3F1ZXVlLmMKKysrIGIvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX2hjZF9xdWV1ZS5jCkBAIC0xLDggKzEsOCBAQAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqICRGaWxlOiAvL2R3aC91c2JfaWlwL2Rldi9zb2Z0d2FyZS9vdGcvbGludXgvZHJpdmVycy9kd2Nfb3RnX2hjZF9xdWV1ZS5jICQKLSAqICRSZXZpc2lvbjogIzQyICQKLSAqICREYXRlOiAyMDEwLzExLzI5ICQKLSAqICRDaGFuZ2U6IDE2MzYwMzMgJAorICogJFJldmlzaW9uOiAjNDQgJAorICogJERhdGU6IDIwMTEvMTAvMjYgJAorICogJENoYW5nZTogMTg3MzAyOCAkCiAgKgogICogU3lub3BzeXMgSFMgT1RHIExpbnV4IFNvZnR3YXJlIERyaXZlciBhbmQgZG9jdW1lbnRhdGlvbiAoaGVyZWluYWZ0ZXIsCiAgKiAiU29mdHdhcmUiKSBpcyBhbiBVbnN1cHBvcnRlZCBwcm9wcmlldGFyeSB3b3JrIG9mIFN5bm9wc3lzLCBJbmMuIHVubGVzcwpAQCAtMjg0LDYgKzI4NCw3IEBACiAgKiBAcGFyYW0gaGNkIFRoZSBIQ0Qgc3RhdGUgc3RydWN0dXJlIGZvciB0aGUgRFdDIE9URyBjb250cm9sbGVyLgogICogQHBhcmFtIHVyYiBIb2xkcyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRldmljZS9lbmRwb2ludCB0aGF0IHdlIG5lZWQKICAqIAkgICAgICB0byBpbml0aWFsaXplIHRoZSBRSC4KKyAqIEBwYXJhbSBhdG9taWNfYWxsb2MgRmxhZyB0byBkbyBhdG9taWMgYWxsb2NhdGlvbiBpZiBuZWVkZWQKICAqCiAgKiBAcmV0dXJuIFJldHVybnMgcG9pbnRlciB0byB0aGUgbmV3bHkgYWxsb2NhdGVkIFFILCBvciBOVUxMIG9uIGVycm9yLiAqLwogZHdjX290Z19xaF90ICpkd2Nfb3RnX2hjZF9xaF9jcmVhdGUoZHdjX290Z19oY2RfdCAqIGhjZCwKQEAgLTQ2Nyw2ICs0NjgsNyBAQAogaW50IGR3Y19vdGdfaGNkX3FoX2FkZChkd2Nfb3RnX2hjZF90ICogaGNkLCBkd2Nfb3RnX3FoX3QgKiBxaCkKIHsKIAlpbnQgc3RhdHVzID0gMDsKKwlnaW50bXNrX2RhdGFfdCBpbnRyX21hc2sgPSB7LmQzMiA9IDAgfTsKIAogCWlmICghRFdDX0xJU1RfRU1QVFkoJnFoLT5xaF9saXN0X2VudHJ5KSkgewogCQkvKiBRSCBhbHJlYWR5IGluIGEgc2NoZWR1bGUuICovCkBAIC00ODAsNiArNDgyLDEyIEBACiAJCQkJICAgICAmcWgtPnFoX2xpc3RfZW50cnkpOwogCX0gZWxzZSB7CiAJCXN0YXR1cyA9IHNjaGVkdWxlX3BlcmlvZGljKGhjZCwgcWgpOworCQlpZiAoICFoY2QtPnBlcmlvZGljX3FoX2NvdW50ICkgeworCQkJaW50cl9tYXNrLmIuc29maW50ciA9IDE7CisJCQlEV0NfTU9ESUZZX1JFRzMyKCZoY2QtPmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmdpbnRtc2ssCisJCQkJCQkJCWludHJfbWFzay5kMzIsIGludHJfbWFzay5kMzIpOworCQl9CisJCWhjZC0+cGVyaW9kaWNfcWhfY291bnQrKzsKIAl9CiAKIAlyZXR1cm4gc3RhdHVzOwpAQCAtNTEwLDYgKzUxOCw4IEBACiAgKiBAcGFyYW0gcWggUUggdG8gcmVtb3ZlIGZyb20gc2NoZWR1bGUuICovCiB2b2lkIGR3Y19vdGdfaGNkX3FoX3JlbW92ZShkd2Nfb3RnX2hjZF90ICogaGNkLCBkd2Nfb3RnX3FoX3QgKiBxaCkKIHsKKwlnaW50bXNrX2RhdGFfdCBpbnRyX21hc2sgPSB7LmQzMiA9IDAgfTsKKwogCWlmIChEV0NfTElTVF9FTVBUWSgmcWgtPnFoX2xpc3RfZW50cnkpKSB7CiAJCS8qIFFIIGlzIG5vdCBpbiBhIHNjaGVkdWxlLiAqLwogCQlyZXR1cm47CkBAIC01MjMsNiArNTMzLDEyIEBACiAJCURXQ19MSVNUX1JFTU9WRV9JTklUKCZxaC0+cWhfbGlzdF9lbnRyeSk7CiAJfSBlbHNlIHsKIAkJZGVzY2hlZHVsZV9wZXJpb2RpYyhoY2QsIHFoKTsKKwkJaGNkLT5wZXJpb2RpY19xaF9jb3VudC0tOworCQlpZiggIWhjZC0+cGVyaW9kaWNfcWhfY291bnQgKSB7CisJCQlpbnRyX21hc2suYi5zb2ZpbnRyID0gMTsKKwkJCQlEV0NfTU9ESUZZX1JFRzMyKCZoY2QtPmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmdpbnRtc2ssCisJCQkJCQkJCQlpbnRyX21hc2suZDMyLCAwKTsKKwkJfQogCX0KIH0KIApAQCAtNjE2LDYgKzYzMiw3IEBACiAgKgogICogQHBhcmFtIHVyYiBUaGUgVVJCIHRvIGNyZWF0ZSBhIFFURCBmcm9tLiAgRWFjaCBVUkItUVREIHBhaXIgd2lsbCBlbmQgdXAKICAqIAkgICAgICBwb2ludGluZyB0byBlYWNoIG90aGVyIHNvIGVhY2ggcGFpciBzaG91bGQgaGF2ZSBhIHVuaXF1ZSBjb3JyZWxhdGlvbi4KKyAqIEBwYXJhbSBhdG9taWNfYWxsb2MgRmxhZyB0byBkbyBhdG9taWMgYWxsb2MgaWYgbmVlZGVkCiAgKgogICogQHJldHVybiBSZXR1cm5zIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGFsbG9jYXRlZCBRVEQsIG9yIE5VTEwgb24gZXJyb3IuICovCiBkd2Nfb3RnX3F0ZF90ICpkd2Nfb3RnX2hjZF9xdGRfY3JlYXRlKGR3Y19vdGdfaGNkX3VyYl90ICogdXJiLCBpbnQgYXRvbWljX2FsbG9jKQpAQCAtNjcwLDYgKzY4Nyw3IEBACiAgKiBAcGFyYW1baW5dIHF0ZCBUaGUgUVREIHRvIGFkZAogICogQHBhcmFtW2luXSBoY2QgVGhlIERXQyBIQ0Qgc3RydWN0dXJlCiAgKiBAcGFyYW1bb3V0XSBxaCBvdXQgcGFyYW1ldGVyIHRvIHJldHVybiBxdWV1ZSBoZWFkCisgKiBAcGFyYW0gYXRvbWljX2FsbG9jIEZsYWcgdG8gZG8gYXRvbWljIGFsbG9jIGlmIG5lZWRlZAogICoKICAqIEByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX29zX2RlcC5oIGIvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX29zX2RlcC5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggODFlNzY1NTMuLjFmOGRiNzMKLS0tIGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX29zX2RlcC5oCisrKyBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19vc19kZXAuaApAQCAtNjksNyArNjksNiBAQAogIyBpbmNsdWRlIDxhc20vcGFyYW0uaD4KICMgaW5jbHVkZSA8YXNtL2lvLmg+CiAjIGluY2x1ZGUgPG1hY2gvaXJxcy5oPgotLy8jIGluY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtaXJxLmg+CiAjZW5kaWYKIAogLyoqIFRoZSBPUyBwYWdlIHNpemUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19wY2QuYyBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19wY2QuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDhkMjQyNDkuLmU2NzkyZTkKLS0tIGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX3BjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19wY2QuYwpAQCAtMSw4ICsxLDggQEAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiAkRmlsZTogLy9kd2gvdXNiX2lpcC9kZXYvc29mdHdhcmUvb3RnL2xpbnV4L2RyaXZlcnMvZHdjX290Z19wY2QuYyAkCi0gKiAkUmV2aXNpb246ICM5NyAkCi0gKiAkRGF0ZTogMjAxMS8wNS8xNyAkCi0gKiAkQ2hhbmdlOiAxNzc0MTEwICQKKyAqICRSZXZpc2lvbjogIzk5ICQKKyAqICREYXRlOiAyMDExLzEwLzI0ICQKKyAqICRDaGFuZ2U6IDE4NzExNjAgJAogICoKICAqIFN5bm9wc3lzIEhTIE9URyBMaW51eCBTb2Z0d2FyZSBEcml2ZXIgYW5kIGRvY3VtZW50YXRpb24gKGhlcmVpbmFmdGVyLAogICogIlNvZnR3YXJlIikgaXMgYW4gVW5zdXBwb3J0ZWQgcHJvcHJpZXRhcnkgd29yayBvZiBTeW5vcHN5cywgSW5jLiB1bmxlc3MKQEAgLTgyLDggKzgyLDggQEAKIAkJCSAgaW50MzJfdCBzdGF0dXMpCiB7CiAJdW5zaWduZWQgc3RvcHBlZCA9IGVwLT5zdG9wcGVkOwotCi0JRFdDX0RFQlVHUEwoREJHX1BDRFYsICIlcyglcClcbiIsIF9fZnVuY19fLCBlcCk7CisJCisJRFdDX0RFQlVHUEwoREJHX1BDRFYsICIlcyhlcCAlcCByZXEgJXApXG4iLCBfX2Z1bmNfXywgZXAsIHJlcSk7CiAJRFdDX0NJUkNMRVFfUkVNT1ZFX0lOSVQoJmVwLT5xdWV1ZSwgcmVxLCBxdWV1ZV9lbnRyeSk7CiAKIAkvKiBkb24ndCBtb2RpZnkgcXVldWUgaGVhZHMgZHVyaW5nIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KQEAgLTEwMDYsNiArMTAwNiwzMSBAQAogCWdvdGdjdGwuZDMyID0gRFdDX1JFQURfUkVHMzIoYWRkcik7CiAKIAljb3JlX2lmLT5zcnBfdGltZXJfc3RhcnRlZCA9IDA7CisJCisJaWYgKGNvcmVfaWYtPmFkcF9lbmFibGUpIHsKKwkJaWYgKGdvdGdjdGwuYi5ic2VzdmxkID09IDApIHsKKwkJCWdwd3Jkbl9kYXRhX3QgZ3B3cmRuID0gey5kMzIgPSAwIH07CisJCQlEV0NfUFJJTlRGKCJTUlAgVGltZW91dCBCU0VTU1ZMRCA9IDBcbiIpOworCQkJLyogUG93ZXIgb2ZmIHRoZSBjb3JlICovCisJCQlpZiAoY29yZV9pZi0+cG93ZXJfZG93biA9PSAyKSB7CisJCQkJZ3B3cmRuLmIucHdyZG5zd3RjaCA9IDE7CisJCQkJRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+CisJCQkJCWdwd3JkbiwgZ3B3cmRuLmQzMiwgMCk7CisJCQl9CisKKwkJCWdwd3Jkbi5kMzIgPSAwOworCQkJZ3B3cmRuLmIucG11aW50c2VsID0gMTsKKwkJCWdwd3Jkbi5iLnBtdWFjdHYgPSAxOworCQkJRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Z3B3cmRuLCAwLCBncHdyZG4uZDMyKTsKKwkJCWR3Y19vdGdfYWRwX3Byb2JlX3N0YXJ0KGNvcmVfaWYpOworCQl9IGVsc2UgeworCQkJRFdDX1BSSU5URigiU1JQIFRpbWVvdXQgQlNFU1NWTEQgPSAxXG4iKTsKKwkJCWNvcmVfaWYtPm9wX3N0YXRlID0gQl9QRVJJUEhFUkFMOworCQkJZHdjX290Z19jb3JlX2luaXQoY29yZV9pZik7CisJCQlkd2Nfb3RnX2VuYWJsZV9nbG9iYWxfaW50ZXJydXB0cyhjb3JlX2lmKTsKKwkJCWNpbF9wY2Rfc3RhcnQoY29yZV9pZik7CisJCX0KKwl9CiAKIAlpZiAoKGNvcmVfaWYtPmNvcmVfcGFyYW1zLT5waHlfdHlwZSA9PSBEV0NfUEhZX1RZUEVfUEFSQU1fRlMpICYmCiAJICAgIChjb3JlX2lmLT5jb3JlX3BhcmFtcy0+aTJjX2VuYWJsZSkpIHsKQEAgLTEwMzcsMzAgKzEwNjIsNiBAQAogCX0gZWxzZSB7CiAJCURXQ19QUklOVEYoIiBTUlAgR09UR0NUTD0lMHhcbiIsIGdvdGdjdGwuZDMyKTsKIAl9Ci0KLQlpZiAoY29yZV9pZi0+YWRwX2VuYWJsZSkgewotCQlpZiAoZ290Z2N0bC5iLmJzZXN2bGQgPT0gMCkgewotCQkJZ3B3cmRuX2RhdGFfdCBncHdyZG4gPSB7LmQzMiA9IDAgfTsKLQotCQkJLyogUG93ZXIgb2ZmIHRoZSBjb3JlICovCi0JCQlpZiAoY29yZV9pZi0+cG93ZXJfZG93biA9PSAyKSB7Ci0JCQkJZ3B3cmRuLmIucHdyZG5zd3RjaCA9IDE7Ci0JCQkJRFdDX01PRElGWV9SRUczMigmY29yZV9pZi0+Y29yZV9nbG9iYWxfcmVncy0+Ci0JCQkJCQkgZ3B3cmRuLCBncHdyZG4uZDMyLCAwKTsKLQkJCX0KLQotCQkJZ3B3cmRuLmQzMiA9IDA7Ci0JCQlncHdyZG4uYi5wbXVhY3R2ID0gMTsKLQkJCURXQ19NT0RJRllfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmdwd3JkbiwgMCwgZ3B3cmRuLmQzMik7Ci0JCQkJCQkKLQkJCWR3Y19vdGdfYWRwX3Byb2JlX3N0YXJ0KGNvcmVfaWYpOwotCQl9IGVsc2UgewotCQkJY29yZV9pZi0+b3Bfc3RhdGUgPSBCX1BFUklQSEVSQUw7Ci0JCQlkd2Nfb3RnX2NvcmVfaW5pdChjb3JlX2lmKTsKLQkJCWR3Y19vdGdfZW5hYmxlX2dsb2JhbF9pbnRlcnJ1cHRzKGNvcmVfaWYpOwotCQkJY2lsX3BjZF9zdGFydChjb3JlX2lmKTsKLQkJfQotCX0KIH0KIAogLyoqCkBAIC0xMTMyLDYgKzExMzMsNyBAQAogCXBjZC0+Y29yZV9pZiA9IGNvcmVfaWY7CiAKIAlkZXZfaWYgPSBjb3JlX2lmLT5kZXZfaWY7CisJZGV2X2lmLT5pc29jX2VwID0gTlVMTDsKIAogCWlmIChjb3JlX2lmLT5od2NmZzQuYi5kZWRfZmlmb19lbikgewogCQlEV0NfUFJJTlRGKCJEZWRpY2F0ZWQgVHggRklGT3MgbW9kZVxuIik7CkBAIC0xNTk0LDYgKzE1OTYsMTAgQEAKICNpZmRlZiBEV0NfVVRFX1BFUl9JTwogCWVwLT5kd2NfZXAueGlzb19iSW50ZXJ2YWwgPSAxIDw8IChlcC0+ZGVzYy0+YkludGVydmFsIC0gMSk7CiAjZW5kaWYKKwlpZiAoZXAtPmR3Y19lcC50eXBlID09IERXQ19PVEdfRVBfVFlQRV9JU09DKSB7CisJCWVwLT5kd2NfZXAuYkludGVydmFsID0gMSA8PCAoZXAtPmRlc2MtPmJJbnRlcnZhbCAtIDEpOworCQllcC0+ZHdjX2VwLmZyYW1lX251bSA9IDB4RkZGRkZGRkY7CisJfQkgCQogCiAJZHdjX290Z19lcF9hY3RpdmF0ZShHRVRfQ09SRV9JRihwY2QpLCAmZXAtPmR3Y19lcCk7CiAKQEAgLTE3MjAsNyArMTcyNiw3IEBACiAJZHdjZXAgPSAmZXAtPmR3Y19lcDsKIAogCWlmIChkd2NlcC0+eGlzb19hY3RpdmVfeGZlcnMgPiAwKSB7Ci0jaWYgMAkJCQkvL0Rpc2FibGUgdGhpcyB0byBkZWNyZWFzZSBzL3cgb3ZlcmhlYWQgdGhhdCBpcyBjcnVjaWFsIGZvciBJc29jIHRyYW5zZmVycworI2lmIDAJLy9EaXNhYmxlIHRoaXMgdG8gZGVjcmVhc2Ugcy93IG92ZXJoZWFkIHRoYXQgaXMgY3J1Y2lhbCBmb3IgSXNvYyB0cmFuc2ZlcnMKIAkJRFdDX1dBUk4oIlRoZXJlIGFyZSBjdXJyZW50bHkgYWN0aXZlIHRyYW5zZmVycyBmb3IgRVAlZCBcCiAJCQkJKGFjdGl2ZT0lZDsgcXVldWVkPSVkKSIsIGR3Y2VwLT5udW0sIGR3Y2VwLT54aXNvX2FjdGl2ZV94ZmVycywgCiAJCQkJZHdjZXAtPnhpc29fcXVldWVkX3hmZXJzKTsKQEAgLTIxMDcsMTAgKzIxMTMsMzggQEAKIAlyZXEtPmxlbmd0aCA9IGJ1ZmxlbjsKIAlyZXEtPnNlbnRfemxwID0gemVybzsKIAlyZXEtPnByaXYgPSByZXFfaGFuZGxlOwotCisJcmVxLT5kd19hbGlnbl9idWYgPSBOVUxMOworCWlmICgoZG1hX2J1ZiAmIDB4MykgJiYgR0VUX0NPUkVfSUYocGNkKS0+ZG1hX2VuYWJsZQorCQkJJiYgIUdFVF9DT1JFX0lGKHBjZCktPmRtYV9kZXNjX2VuYWJsZSkKKwkJcmVxLT5kd19hbGlnbl9idWYgPSBEV0NfRE1BX0FMTE9DKGJ1ZmxlbiwKKwkJCQkgJnJlcS0+ZHdfYWxpZ25fYnVmX2RtYSk7CiAJRFdDX1NQSU5MT0NLX0lSUVNBVkUocGNkLT5sb2NrLCAmZmxhZ3MpOwogCiAJLyoKKwkgKiBBZnRlciBhZGRpbmcgcmVxdWVzdCB0byB0aGUgcXVldWUgZm9yIElOIElTT0Mgd2FpdCBmb3IgSW4gVG9rZW4gUmVjZWl2ZWQKKwkgKiB3aGVuIFRYIEZJRk8gaXMgZW1wdHkgaW50ZXJydXB0IGFuZCBmb3IgT1VUIElTT0Mgd2FpdCBmb3IgT1VUIFRva2VuIAorCSAqIFJlY2VpdmVkIHdoZW4gRVAgaXMgZGlzYWJsZWQgaW50ZXJydXB0IHRvIG9idGFpbiBzdGFydGluZyBtaWNyb2ZyYW1lCisJICogKG9kZC9ldmVuKSBzdGFydCB0cmFuc2ZlcgorCSAqLworCWlmIChlcC0+ZHdjX2VwLnR5cGUgPT0gRFdDX09UR19FUF9UWVBFX0lTT0MpCisJeworCQlpZiAocmVxICE9IDApIHsKKwkJCWRlcGN0bF9kYXRhX3QgZGVwY3RsID0gey5kMzIgPSBEV0NfUkVBRF9SRUczMigmcGNkLT5jb3JlX2lmLT5kZXZfaWYtPmluX2VwX3JlZ3NbZXAtPmR3Y19lcC5udW1dLT5kaWVwY3RsKX07CisJCQkrK3BjZC0+cmVxdWVzdF9wZW5kaW5nOworCisJCQlEV0NfQ0lSQ0xFUV9JTlNFUlRfVEFJTCgmZXAtPnF1ZXVlLCByZXEsIHF1ZXVlX2VudHJ5KTsKKwkJCWlmIChlcC0+ZHdjX2VwLmlzX2luKQorCQkJeworCQkJCWRlcGN0bC5iLmNuYWsgPSAxOworCQkJCURXQ19XUklURV9SRUczMigmcGNkLT5jb3JlX2lmLT5kZXZfaWYtPmluX2VwX3JlZ3NbZXAtPmR3Y19lcC5udW1dLT5kaWVwY3RsLCBkZXBjdGwuZDMyKTsKKwkJCX0KKwkJCQorCQkJRFdDX1NQSU5VTkxPQ0tfSVJRUkVTVE9SRShwY2QtPmxvY2ssIGZsYWdzKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKgogCSAqIEZvciBFUDAgSU4gd2l0aG91dCBwcmVtYXR1cmUgc3RhdHVzLCB6bHAgaXMgcmVxdWlyZWQ/CiAJICovCiAJaWYgKGVwLT5kd2NfZXAubnVtID09IDAgJiYgZXAtPmR3Y19lcC5pc19pbikgewpAQCAtMjE4Nyw5ICsyMjIxLDE3IEBACiAJCQkJICAgIGNvcmVfcGFyYW1zLT5tYXhfdHJhbnNmZXJfc2l6ZTsKIAogCQkJCS8qIFNldHVwIGFuZCBzdGFydCB0aGUgVHJhbnNmZXIgKi8KLQkJCQllcC0+ZHdjX2VwLmRtYV9hZGRyID0gZG1hX2J1ZjsKLQkJCQllcC0+ZHdjX2VwLnN0YXJ0X3hmZXJfYnVmZiA9IGJ1ZjsKLQkJCQllcC0+ZHdjX2VwLnhmZXJfYnVmZiA9IGJ1ZjsKKwkJCQlpZiAocmVxLT5kd19hbGlnbl9idWYpeworCQkJCQlpZiAoZXAtPmR3Y19lcC5pc19pbikKKwkJCQkJCWR3Y19tZW1jcHkocmVxLT5kd19hbGlnbl9idWYsIGJ1ZiwgYnVmbGVuKTsKKwkJCQkJZXAtPmR3Y19lcC5kbWFfYWRkciA9IHJlcS0+ZHdfYWxpZ25fYnVmX2RtYTsKKwkJCQkJZXAtPmR3Y19lcC5zdGFydF94ZmVyX2J1ZmYgPSByZXEtPmR3X2FsaWduX2J1ZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcC0+ZHdjX2VwLnhmZXJfYnVmZiA9IHJlcS0+ZHdfYWxpZ25fYnVmOworCQkJCX0gZWxzZSB7CisJCQkJCWVwLT5kd2NfZXAuZG1hX2FkZHIgPSBkbWFfYnVmOworCQkJCQllcC0+ZHdjX2VwLnN0YXJ0X3hmZXJfYnVmZiA9IGJ1ZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcC0+ZHdjX2VwLnhmZXJfYnVmZiA9IGJ1ZjsJCisJCQkJfQogCQkJCWVwLT5kd2NfZXAueGZlcl9sZW4gPSAwOwogCQkJCWVwLT5kd2NfZXAueGZlcl9jb3VudCA9IDA7CiAJCQkJZXAtPmR3Y19lcC5zZW50X3pscCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfcGNkLmggYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfcGNkLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBkZDU2ZTk4Li40YjJkZGU5Ci0tLSBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19wY2QuaAorKysgYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfcGNkLmgKQEAgLTEsOCArMSw4IEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogJEZpbGU6IC8vZHdoL3VzYl9paXAvZGV2L3NvZnR3YXJlL290Zy9saW51eC9kcml2ZXJzL2R3Y19vdGdfcGNkLmggJAotICogJFJldmlzaW9uOiAjNDQgJAotICogJERhdGU6IDIwMTAvMTEvMjkgJAotICogJENoYW5nZTogMTYzNjAzMyAkCisgKiAkUmV2aXNpb246ICM0NiAkCisgKiAkRGF0ZTogMjAxMS8xMC8yMCAkCisgKiAkQ2hhbmdlOiAxODcwMTI0ICQKICAqCiAgKiBTeW5vcHN5cyBIUyBPVEcgTGludXggU29mdHdhcmUgRHJpdmVyIGFuZCBkb2N1bWVudGF0aW9uIChoZXJlaW5hZnRlciwKICAqICJTb2Z0d2FyZSIpIGlzIGFuIFVuc3VwcG9ydGVkIHByb3ByaWV0YXJ5IHdvcmsgb2YgU3lub3BzeXMsIEluYy4gdW5sZXNzCkBAIC02MSw5ICs2MSw2IEBACiAvKiogTWF4IFRyYW5zZmVyIHNpemUgZm9yIGFueSBFUCAqLwogI2RlZmluZSBERE1BX01BWF9UUkFOU0ZFUl9TSVpFIDY1NTM1CiAKLS8qKiBNYXggRE1BIERlc2NyaXB0b3IgY291bnQgZm9yIGFueSBFUCAqLwotI2RlZmluZSBNQVhfRE1BX0RFU0NfQ05UIDI1NgotCiAvKioKICAqIEdldCB0aGUgcG9pbnRlciB0byB0aGUgY29yZV9pZiBmcm9tIHRoZSBwY2QgcG9pbnRlci4KICAqLwpAQCAtMTM2LDYgKzEzMywxMiBAQAogCXVpbnQzMl90IGxlbmd0aDsKIAl1aW50MzJfdCBhY3R1YWw7CiAJdW5zaWduZWQgc2VudF96bHA6MTsKKyAgICAvKioKKyAgICAgKiBVc2VkIGluc3RlYWQgb2Ygb3JpZ2luYWwgYnVmZmVyIGlmCisgICAgICogaXQocGh5c2ljYWwgYWRkcmVzcykgaXMgbm90IGR3b3JkLWFsaWduZWQuCisgICAgICoqLworICAgICB1aW50OF90ICpkd19hbGlnbl9idWY7CisgICAgIGR3Y19kbWFfdCBkd19hbGlnbl9idWZfZG1hOwogCiAJIERXQ19DSVJDTEVRX0VOVFJZKGR3Y19vdGdfcGNkX3JlcXVlc3QpIHF1ZXVlX2VudHJ5OwogI2lmZGVmIERXQ19VVEVfUEVSX0lPCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfcGNkX2lmLmggYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfcGNkX2lmLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBmYmI3MGRmLi42MjgzODY3Ci0tLSBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19wY2RfaWYuaAorKysgYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfcGNkX2lmLmgKQEAgLTEsOCArMSw4IEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogJEZpbGU6IC8vZHdoL3VzYl9paXAvZGV2L3NvZnR3YXJlL290Zy9saW51eC9kcml2ZXJzL2R3Y19vdGdfcGNkX2lmLmggJAotICogJFJldmlzaW9uOiAjMTAgJAotICogJERhdGU6IDIwMTAvMTEvMDQgJAotICogJENoYW5nZTogMTYyMTcyOCAkCisgKiAkUmV2aXNpb246ICMxMSAkCisgKiAkRGF0ZTogMjAxMS8xMC8yNiAkCisgKiAkQ2hhbmdlOiAxODczMDI4ICQKICAqCiAgKiBTeW5vcHN5cyBIUyBPVEcgTGludXggU29mdHdhcmUgRHJpdmVyIGFuZCBkb2N1bWVudGF0aW9uIChoZXJlaW5hZnRlciwKICAqICJTb2Z0d2FyZSIpIGlzIGFuIFVuc3VwcG9ydGVkIHByb3ByaWV0YXJ5IHdvcmsgb2YgU3lub3BzeXMsIEluYy4gdW5sZXNzCkBAIC0xNjgsMTUgKzE2OCwxNSBAQAogICoKICAqIEBwYXJhbSBwY2QgVGhlIFBDRAogICogQHBhcmFtIGVwX2Rlc2MgRW5kcG9pbnQgZGVzY3JpcHRvcgotICogQHBhcmFtIGVwX2hhbmRsZSBIYW5kbGUgb24gZW5kcG9pbnQsIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGlkZW50aWZ5IGVuZHBvaW50LgorICogQHBhcmFtIHVzYl9lcCBIYW5kbGUgb24gZW5kcG9pbnQsIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGlkZW50aWZ5IGVuZHBvaW50LgogICovCiBleHRlcm4gaW50IGR3Y19vdGdfcGNkX2VwX2VuYWJsZShkd2Nfb3RnX3BjZF90ICogcGNkLAotCQkJCSBjb25zdCB1aW50OF90ICogZXBfZGVzYywgdm9pZCAqZXBfaGFuZGxlKTsKKwkJCQkgY29uc3QgdWludDhfdCAqIGVwX2Rlc2MsIHZvaWQgKnVzYl9lcCk7CiAKIC8qKiBEaXNhYmxlIHRoZSBlbmRwb2ludCByZWZlcmVuY2VkIGJ5IGVwX2hhbmRsZS4KICAqCiAgKiBSZXR1cm5zIC1EV0NfRV9JTlZBTElEIGlmIGludmFsaWQgcGFyYW1ldGVycyB3ZXJlIHBhc3NlZC4KLSAqIFJldHVybnMgLURXQ19FX1NIVVRET1dOIGlmIGFueSBvdGhlciBlcnJvciBvY3VycmVkLgorICogUmV0dXJucyAtRFdDX0VfU0hVVERPV04gaWYgYW55IG90aGVyIGVycm9yIG9jY3VycmVkLgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuICovCiBleHRlcm4gaW50IGR3Y19vdGdfcGNkX2VwX2Rpc2FibGUoZHdjX290Z19wY2RfdCAqIHBjZCwgdm9pZCAqZXBfaGFuZGxlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX3BjZF9pbnRyLmMgYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfcGNkX2ludHIuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGIxMWI1ODkuLjMyMjg2ZmQKLS0tIGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX3BjZF9pbnRyLmMKKysrIGIvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX3BjZF9pbnRyLmMKQEAgLTEsOCArMSw4IEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogJEZpbGU6IC8vZHdoL3VzYl9paXAvZGV2L3NvZnR3YXJlL290Zy9saW51eC9kcml2ZXJzL2R3Y19vdGdfcGNkX2ludHIuYyAkCi0gKiAkUmV2aXNpb246ICMxMDggJAotICogJERhdGU6IDIwMTEvMDUvMTcgJAotICogJENoYW5nZTogMTc3NDExMCAkCisgKiAkUmV2aXNpb246ICMxMTMgJAorICogJERhdGU6IDIwMTEvMTAvMjQgJAorICogJENoYW5nZTogMTg3MTE2MCAkCiAgKgogICogU3lub3BzeXMgSFMgT1RHIExpbnV4IFNvZnR3YXJlIERyaXZlciBhbmQgZG9jdW1lbnRhdGlvbiAoaGVyZWluYWZ0ZXIsCiAgKiAiU29mdHdhcmUiKSBpcyBhbiBVbnN1cHBvcnRlZCBwcm9wcmlldGFyeSB3b3JrIG9mIFN5bm9wc3lzLCBJbmMuIHVubGVzcwpAQCAtMjM4LDkgKzIzOCwxNSBAQAogCQl9IGVsc2UgewogI2VuZGlmCiAJCQkvKiBTZXR1cCBhbmQgc3RhcnQgdGhlIFRyYW5zZmVyICovCi0JCQllcC0+ZHdjX2VwLmRtYV9hZGRyID0gcmVxLT5kbWE7Ci0JCQllcC0+ZHdjX2VwLnN0YXJ0X3hmZXJfYnVmZiA9IHJlcS0+YnVmOwotCQkJZXAtPmR3Y19lcC54ZmVyX2J1ZmYgPSByZXEtPmJ1ZjsKKwkJCWlmIChyZXEtPmR3X2FsaWduX2J1ZikgeworCQkJCWVwLT5kd2NfZXAuZG1hX2FkZHIgPSByZXEtPmR3X2FsaWduX2J1Zl9kbWE7CisJCQkJZXAtPmR3Y19lcC5zdGFydF94ZmVyX2J1ZmYgPSByZXEtPmR3X2FsaWduX2J1ZjsKKwkJCQllcC0+ZHdjX2VwLnhmZXJfYnVmZiA9IHJlcS0+ZHdfYWxpZ25fYnVmOworCQkJfSBlbHNlIHsKKwkJCQllcC0+ZHdjX2VwLmRtYV9hZGRyID0gcmVxLT5kbWE7CisJCQkJZXAtPmR3Y19lcC5zdGFydF94ZmVyX2J1ZmYgPSByZXEtPmJ1ZjsKKwkJCQllcC0+ZHdjX2VwLnhmZXJfYnVmZiA9IHJlcS0+YnVmOworCQkJfQogCQkJZXAtPmR3Y19lcC5zZW50X3pscCA9IDA7CiAJCQllcC0+ZHdjX2VwLnRvdGFsX2xlbiA9IHJlcS0+bGVuZ3RoOwogCQkJZXAtPmR3Y19lcC54ZmVyX2xlbiA9IDA7CkBAIC0yNzksNiArMjg1LDkgQEAKIAkJfQogI2VuZGlmCiAJCWR3Y19vdGdfZXBfc3RhcnRfdHJhbnNmZXIoR0VUX0NPUkVfSUYoZXAtPnBjZCksICZlcC0+ZHdjX2VwKTsKKwl9IGVsc2UgaWYgKGVwLT5kd2NfZXAudHlwZSA9PSBEV0NfT1RHX0VQX1RZUEVfSVNPQykgeworCQlEV0NfUFJJTlRGKCJUaGVyZSBhcmUgbm8gbW9yZSBJU09DIHJlcXVlc3RzIFxuIik7CisJCWVwLT5kd2NfZXAuZnJhbWVfbnVtID0gMHhGRkZGRkZGRjsKIAl9CiB9CiAKQEAgLTc1OCw2ICs3NjcsNyBAQAogCQkJZG1hX2Rlc2MtPnN0YXR1cy5iLmlvYyA9IDE7CiAJCQlkbWFfZGVzYy0+c3RhdHVzLmIuYnl0ZXMgPSBwY2QtPmVwMC5kd2NfZXAubWF4cGFja2V0OwogCQkJZG1hX2Rlc2MtPmJ1ZiA9IHBjZC0+c2V0dXBfcGt0X2RtYV9oYW5kbGU7CisJCQlkbWFfZGVzYy0+c3RhdHVzLmIuc3RzID0gMDsKIAkJCWRtYV9kZXNjLT5zdGF0dXMuYi5icyA9IEJTX0hPU1RfUkVBRFk7CiAKIAkJCS8qKiBET0VQRE1BMCBSZWdpc3RlciB3cml0ZSAqLwpAQCAtOTA4LDcgKzkxOCw3IEBACiAKIAkJaWYgKGNvcmVfaWYtPmRtYV9kZXNjX2VuYWJsZSkgewogCQkJZG9lcG1zay5iLnN0c3Boc2VyY3ZkID0gMTsKLQkJCS8vZG9lcG1zay5iLmJuYSA9IDE7CisJCQlkb2VwbXNrLmIuYm5hID0gMTsKIAkJfQogLyoJCQogCQlkb2VwbXNrLmIuYmFiYmxlID0gMTsKQEAgLTk1Myw3ICs5NjMsNyBAQAogCiAJCWlmIChjb3JlX2lmLT5kbWFfZGVzY19lbmFibGUpIHsKIAkJCWRvZXBtc2suYi5zdHNwaHNlcmN2ZCA9IDE7Ci0JCQkvL2RvZXBtc2suYi5ibmEgPSAxOworCQkJZG9lcG1zay5iLmJuYSA9IDE7CiAJCX0KIAkJRFdDX1dSSVRFX1JFRzMyKCZkZXZfaWYtPmRldl9nbG9iYWxfcmVncy0+ZG9lcG1zaywgZG9lcG1zay5kMzIpOwogCkBAIC0xMjAwLDggKzEyMTAsOCBAQAogCQl9IGVsc2UgewogCQkJRFdDX1BSSU5URigiZ2ludHN0cy5iLmdpbm5ha2VmZiA9IDEhIGRjdGwuYi5zZ25waW5uYWsgbm90IHNldFxuIik7CiAJCX0KLQkJLyogRGlzYWJsaW5nIG9mIGFsbCBFUCdzIHdpbGwgYmUgZG9uZSBpbiBkd2Nfb3RnX3BjZF9oYW5kbGVfaW5fbmFrX2VmZmVjdGl2ZSgpIGhhbmRsZXIgKi8KLQkJLyogYWZ0ZXIgR2xvYmFsIElOIE5BSyBFZmZlY3RpdmUgaW50ZXJydXB0IHdpbGwgYmUgYXNzZXJ0ZWQgKi8KKwkJLyogRGlzYWJsaW5nIG9mIGFsbCBFUCdzIHdpbGwgYmUgZG9uZSBpbiBkd2Nfb3RnX3BjZF9oYW5kbGVfaW5fbmFrX2VmZmVjdGl2ZSgpCisJCSAqIGhhbmRsZXIgYWZ0ZXIgR2xvYmFsIElOIE5BSyBFZmZlY3RpdmUgaW50ZXJydXB0IHdpbGwgYmUgYXNzZXJ0ZWQgKi8KIAl9CiAJLyogQ2xlYXIgaW50ZXJydXB0ICovCiAJZ2ludHN0cy5kMzIgPSAwOwpAQCAtMTQ2OCw3ICsxNDc4LDggQEAKIAkJaWYoVUdFVFcoY3RybC53SW5kZXgpID09IDB4RjAwMCkgeyAvKiBPVEcgU3RhdHVzIHNlbGVjdG9yICovCiAJCQlEV0NfUFJJTlRGKCJ3SW5kZXggLSAlZFxuIiwgVUdFVFcoY3RybC53SW5kZXgpKTsKIAkJCURXQ19QUklOVEYoIk9URyBWRVJTSU9OIC0gJWRcbiIsIGNvcmVfaWYtPm90Z192ZXIpOwotCQkJRFdDX1BSSU5URigiT1RHIENBUCAtICVkLCAlZFxuIiwgY29yZV9pZi0+Y29yZV9wYXJhbXMtPm90Z19jYXAsIERXQ19PVEdfQ0FQX1BBUkFNX0hOUF9TUlBfQ0FQQUJMRSk7CisJCQlEV0NfUFJJTlRGKCJPVEcgQ0FQIC0gJWQsICVkXG4iLCBjb3JlX2lmLT5jb3JlX3BhcmFtcy0+b3RnX2NhcCwKKwkJCQkJCURXQ19PVEdfQ0FQX1BBUkFNX0hOUF9TUlBfQ0FQQUJMRSk7CiAJCQlpZihjb3JlX2lmLT5vdGdfdmVyID09IDEgJiYgCiAJCQljb3JlX2lmLT5jb3JlX3BhcmFtcy0+b3RnX2NhcCA9PSBEV0NfT1RHX0NBUF9QQVJBTV9ITlBfU1JQX0NBUEFCTEUpIHsKIAkJCQl1aW50OF90ICpvdGdzdHMgPSAodWludDhfdCopcGNkLT5zdGF0dXNfYnVmOwpAQCAtMTc5NSw3ICsxODA2LDggQEAKICNpZmRlZiBEV0NfVVRFX0NGSQogCQlEV0NfTUVNQ1BZKCZjZmlfcmVxLCAmY3RybCwgc2l6ZW9mKHVzYl9kZXZpY2VfcmVxdWVzdF90KSk7CiAKLQkJLy9wcmludGsoS0VSTl9BTEVSVCAiQ0ZJOiByZXFfdHlwZT0weCUwMng7IHJlcT0weCUwMnhcbiIsIGN0cmwuYlJlcXVlc3RUeXBlLCBjdHJsLmJSZXF1ZXN0KTsKKwkJLy9wcmludGsoS0VSTl9BTEVSVCAiQ0ZJOiByZXFfdHlwZT0weCUwMng7IHJlcT0weCUwMnhcbiIsIAorCQkJCWN0cmwuYlJlcXVlc3RUeXBlLCBjdHJsLmJSZXF1ZXN0KTsKIAkJaWYgKFVUX0dFVF9UWVBFKGNmaV9yZXEuYlJlcXVlc3RUeXBlKSA9PSBVVF9WRU5ET1IpIHsKIAkJCWlmIChjZmlfcmVxLmJSZXF1ZXN0ID4gMHhCMCAmJiBjZmlfcmVxLmJSZXF1ZXN0IDwgMHhCRikgewogCQkJCXJldHZhbCA9IGNmaV9zZXR1cChwY2QsICZjZmlfcmVxKTsKQEAgLTIxMzUsMTggKzIxNDcsMTggQEAKIAkJCQkJfSBlbHNlIGlmIChlcC0+ZHdjX2VwLnNlbnRfemxwKSB7CiAJCQkJCQkvKiAgICAgCiAJCQkJCQkgKiBUaGlzIGZyYWdtZW50IG9mIGNvZGUgc2hvdWxkIGluaXRpYXRlIDAKLQkJCQkJCSAqIGxlbmd0aCB0cmFzZmVyIGluIGNhc2UgaWYgaXQgaXMgcXVldWVkCi0JCQkJCQkgKiBhIHRyYXNmZXIgd2l0aCBzaXplIGRpdmlzaWJsZSB0byBFUHMgbWF4CisJCQkJCQkgKiBsZW5ndGggdHJhbnNmZXIgaW4gY2FzZSBpZiBpdCBpcyBxdWV1ZWQKKwkJCQkJCSAqIGEgdHJhbnNmZXIgd2l0aCBzaXplIGRpdmlzaWJsZSB0byBFUHMgbWF4CiAJCQkJCQkgKiBwYWNrZXQgc2l6ZSBhbmQgd2l0aCB1c2JfcmVxdWVzdCB6ZXJvIGZpZWxkCiAJCQkJCQkgKiBpcyBzZXQsIHdoaWNoIG1lYW5zIHRoYXQgYWZ0ZXIgZGF0YSBpcyB0cmFuc2ZlcmVkLAogCQkJCQkJICogaXQgaXMgYWxzbyBzaG91bGQgYmUgdHJhbnNmZXJlZAogCQkJCQkJICogYSAwIGxlbmd0aCBwYWNrZXQgYXQgdGhlIGVuZC4gRm9yIFNsYXZlIGFuZAogCQkJCQkJICogQnVmZmVyIERNQSBtb2RlcyBpbiB0aGlzIGNhc2UgU1cgaGFzCiAJCQkJCQkgKiB0byBpbml0aWF0ZSAyIHRyYW5zZmVycyBvbmUgd2l0aCB0cmFuc2ZlciBzaXplLAotCQkJCQkJICogYW5kIHRoZSBzZWNvbmQgd2l0aCAwIHNpemUuIEZvciBEZXNyaXB0b3IKKwkJCQkJCSAqIGFuZCB0aGUgc2Vjb25kIHdpdGggMCBzaXplLiBGb3IgRGVzY3JpcHRvcgogCQkJCQkJICogRE1BIG1vZGUgU1cgaXMgYWJsZSB0byBpbml0aWF0ZSBhIHRyYW5zZmVyLAogCQkJCQkJICogd2hpY2ggd2lsbCBoYW5kbGUgYWxsIHRoZSBwYWNrZXRzIGluY2x1ZGluZwotCQkJCQkJICogdGhlIGxhc3QgIDAgbGVndGguCisJCQkJCQkgKiB0aGUgbGFzdCAgMCBsZW5ndGguCiAJCQkJCQkgKi8KIAkJCQkJCWVwLT5kd2NfZXAuc2VudF96bHAgPSAwOwogCQkJCQkJZHdjX290Z19lcF9zdGFydF96bF90cmFuc2ZlcgpAQCAtMjE1NSwxMiArMjE2NywyNCBAQAogCQkJCQkJaXNfbGFzdCA9IDE7CiAJCQkJCX0KIAkJCQl9IGVsc2UgewotCQkJCQlEV0NfV0FSTgotCQkJCQkgICAgKCJJbmNvbXBsZXRlIHRyYW5zZmVyICglZCAtICVzIFtzaXo9JWQgcGt0PSVkXSlcbiIsCi0JCQkJCSAgICAgZXAtPmR3Y19lcC5udW0sCi0JCQkJCSAgICAgKGVwLT5kd2NfZXAuaXNfaW4gPyAiSU4iIDogIk9VVCIpLAotCQkJCQkgICAgIGRlcHRzaXouYi54ZmVyc2l6ZSwKLQkJCQkJICAgICBkZXB0c2l6LmIucGt0Y250KTsKKwkJCQkJaWYoZXAtPmR3Y19lcC50eXBlID09IERXQ19PVEdfRVBfVFlQRV9JU09DKQorCQkJCQl7CisJCQkJCQlyZXEtPmFjdHVhbCA9IDA7CisJCQkJCQlkd2Nfb3RnX3JlcXVlc3RfZG9uZShlcCwgcmVxLCAwKTsKKworCQkJCQkJZXAtPmR3Y19lcC5zdGFydF94ZmVyX2J1ZmYgPSAwOworCQkJCQkJZXAtPmR3Y19lcC54ZmVyX2J1ZmYgPSAwOworCQkJCQkJZXAtPmR3Y19lcC54ZmVyX2xlbiA9IDA7CisKKwkJCQkJCS8qIElmIHRoZXJlIGlzIGEgcmVxdWVzdCBpbiB0aGUgcXVldWUgc3RhcnQgaXQuICovCisJCQkJCQlzdGFydF9uZXh0X3JlcXVlc3QoZXApOworCQkJCQl9IGVsc2UKKwkJCQkJCURXQ19XQVJOCisJCQkJCQkoIkluY29tcGxldGUgdHJhbnNmZXIgKCVkIC0gJXMgW3Npej0lZCBwa3Q9JWRdKVxuIiwKKwkJCQkJCWVwLT5kd2NfZXAubnVtLAorCQkJCQkJKGVwLT5kd2NfZXAuaXNfaW4gPyAiSU4iIDogIk9VVCIpLAorCQkJCQkJZGVwdHNpei5iLnhmZXJzaXplLAorCQkJCQkJZGVwdHNpei5iLnBrdGNudCk7CiAJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQlkbWFfZGVzYyA9IGVwLT5kd2NfZXAuZGVzY19hZGRyOwpAQCAtMjI3NSwxMCArMjI5OSwzMiBAQAogI2lmZGVmIERXQ19VVEVfQ0ZJCiAJCQkJfQogI2VuZGlmCi0JCQkJZXAtPmR3Y19lcC54ZmVyX2NvdW50ID0gZXAtPmR3Y19lcC50b3RhbF9sZW4KLQkJCQkgICAgLSBieXRlX2NvdW50ICsKLQkJCQkgICAgKCg0IC0gKGVwLT5kd2NfZXAudG90YWxfbGVuICYgMHgzKSkgJiAweDMpOwotCQkJCWlzX2xhc3QgPSAxOworCQkJCS8qIENoZWNraW5nIGZvciBpbnRlcnJ1cHQgT3V0IHRyYW5zZmVycyB3aXRoIG5vdCAKKwkJCQkgKiBkd29yZCBhbGlnbmVkIG1wcyBzaXplcyAKKwkJCQkgKi8KKwkJCQlpZiAoZXAtPmR3Y19lcC50eXBlID09IERXQ19PVEdfRVBfVFlQRV9JTlRSICYmCisJCQkJCQkJKGVwLT5kd2NfZXAubWF4cGFja2V0JTQpKSB7CisJCQkJCWVwLT5kd2NfZXAueGZlcl9jb3VudCA9IGVwLT5kd2NfZXAudG90YWxfbGVuIC0gYnl0ZV9jb3VudDsKKwkJCQkJaWYgKChlcC0+ZHdjX2VwLnhmZXJfbGVuICUgZXAtPmR3Y19lcC5tYXhwYWNrZXQpICYmCisJCQkJCQkoZXAtPmR3Y19lcC54ZmVyX2xlbi9lcC0+ZHdjX2VwLm1heHBhY2tldCA8IE1BWF9ETUFfREVTQ19DTlQpKQorCQkJCQkJZXAtPmR3Y19lcC54ZmVyX2xlbiAtPQorCQkJCQkJCShlcC0+ZHdjX2VwLmRlc2NfY250IC0gMSkgKiBlcC0+ZHdjX2VwLm1heHBhY2tldCArCisJCQkJCQkJCQllcC0+ZHdjX2VwLnhmZXJfbGVuICUgZXAtPmR3Y19lcC5tYXhwYWNrZXQ7CisJCQkJCWVsc2UJCQkJCQkKKwkJCQkJCWVwLT5kd2NfZXAueGZlcl9sZW4gLT0KKwkJCQkJCQkJCWVwLT5kd2NfZXAuZGVzY19jbnQgKiBlcC0+ZHdjX2VwLm1heHBhY2tldDsKKwkJCQkJaWYgKGVwLT5kd2NfZXAueGZlcl9sZW4gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCWR3Y19vdGdfZXBfc3RhcnRfdHJhbnNmZXIoY29yZV9pZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcC0+ZHdjX2VwKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWlzX2xhc3QgPSAxOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJZXAtPmR3Y19lcC54ZmVyX2NvdW50ID0gZXAtPmR3Y19lcC50b3RhbF9sZW4KKwkJCQkJCS0gYnl0ZV9jb3VudCArCisJCQkJCQkoKDQgLSAoZXAtPmR3Y19lcC50b3RhbF9sZW4gJiAweDMpKSAmIDB4Myk7CisJCQkJCWlzX2xhc3QgPSAxOworCQkJCX0JCiAJCQl9IGVsc2UgewogCQkJCWRlcHRzaXouZDMyID0gMDsKIAkJCQlkZXB0c2l6LmQzMiA9CkBAIC0yMzI5LDE4ICsyMzc1LDE4IEBACiAJCQl9IGVsc2UgaWYgKGVwLT5kd2NfZXAuc2VudF96bHApIHsKIAkJCQkvKiAgICAgCiAJCQkJICogVGhpcyBmcmFnbWVudCBvZiBjb2RlIHNob3VsZCBpbml0aWF0ZSAwCi0JCQkJICogbGVuZ3RoIHRyYXNmZXIgaW4gY2FzZSBpZiBpdCBpcyBxdWV1ZWQKLQkJCQkgKiBhIHRyYXNmZXIgd2l0aCBzaXplIGRpdmlzaWJsZSB0byBFUHMgbWF4CisJCQkJICogbGVuZ3RoIHRyYW5zZmVyIGluIGNhc2UgaWYgaXQgaXMgcXVldWVkCisJCQkJICogYSB0cmFuc2ZlciB3aXRoIHNpemUgZGl2aXNpYmxlIHRvIEVQcyBtYXgKIAkJCQkgKiBwYWNrZXQgc2l6ZSBhbmQgd2l0aCB1c2JfcmVxdWVzdCB6ZXJvIGZpZWxkCiAJCQkJICogaXMgc2V0LCB3aGljaCBtZWFucyB0aGF0IGFmdGVyIGRhdGEgaXMgdHJhbnNmZXJlZCwKIAkJCQkgKiBpdCBpcyBhbHNvIHNob3VsZCBiZSB0cmFuc2ZlcmVkCiAJCQkJICogYSAwIGxlbmd0aCBwYWNrZXQgYXQgdGhlIGVuZC4gRm9yIFNsYXZlIGFuZAogCQkJCSAqIEJ1ZmZlciBETUEgbW9kZXMgaW4gdGhpcyBjYXNlIFNXIGhhcwogCQkJCSAqIHRvIGluaXRpYXRlIDIgdHJhbnNmZXJzIG9uZSB3aXRoIHRyYW5zZmVyIHNpemUsCi0JCQkJICogYW5kIHRoZSBzZWNvbmQgd2l0aCAwIHNpemUuIEZvciBEZXNyaXB0b3IKKwkJCQkgKiBhbmQgdGhlIHNlY29uZCB3aXRoIDAgc2l6ZS4gRm9yIERlc2NyaXB0b3IKIAkJCQkgKiBETUEgbW9kZSBTVyBpcyBhYmxlIHRvIGluaXRpYXRlIGEgdHJhbnNmZXIsCiAJCQkJICogd2hpY2ggd2lsbCBoYW5kbGUgYWxsIHRoZSBwYWNrZXRzIGluY2x1ZGluZwotCQkJCSAqIHRoZSBsYXN0ICAwIGxlZ3RoLgorCQkJCSAqIHRoZSBsYXN0ICAwIGxlbmd0aC4KIAkJCQkgKi8KIAkJCQllcC0+ZHdjX2VwLnNlbnRfemxwID0gMDsKIAkJCQlkd2Nfb3RnX2VwX3N0YXJ0X3psX3RyYW5zZmVyKGNvcmVfaWYsCkBAIC0yMzY5LDYgKzI0MTUsMTMgQEAKICNpZmRlZiBEV0NfVVRFX0NGSQogCQl9CiAjZW5kaWYKKwkJaWYgKHJlcS0+ZHdfYWxpZ25fYnVmKSB7CisJCQlpZiAoIWVwLT5kd2NfZXAuaXNfaW4pIHsKKwkJCQlkd2NfbWVtY3B5KHJlcS0+YnVmLCByZXEtPmR3X2FsaWduX2J1ZiwgcmVxLT5sZW5ndGgpOyAKKwkJCX0KKwkJCURXQ19ETUFfRlJFRShyZXEtPmxlbmd0aCwgcmVxLT5kd19hbGlnbl9idWYsCisJCQkJICAgICByZXEtPmR3X2FsaWduX2J1Zl9kbWEpOworCQl9CiAKIAkJZHdjX290Z19yZXF1ZXN0X2RvbmUoZXAsIHJlcSwgMCk7CiAKQEAgLTMwMDksMTQgKzMwNjIsMjcgQEAKIAlkd2Nfb3RnX3BjZF90ICpwY2QgPSBlcC0+cGNkOwogCWR3Y19vdGdfZGV2X2RtYV9kZXNjX3QgKmRtYV9kZXNjOwogCWRldl9kbWFfZGVzY19zdHNfdCBzdHMgPSB7LmQzMiA9IDAgfTsKLQlpbnQgaTsKKwlkd2Nfb3RnX2NvcmVfaWZfdCAqY29yZV9pZiA9IGVwLT5wY2QtPmNvcmVfaWY7CisJaW50IGksIHN0YXJ0OwogCiAJaWYgKCFkd2NfZXAtPmRlc2NfY250KQogCQlEV0NfV0FSTigiRGVzY3JpcHRvciBjb3VudCA9ICVkXG4iLCBkd2NfZXAtPmRlc2NfY250KTsKIAotCWRtYV9kZXNjID0gZHdjX2VwLT5kZXNjX2FkZHI7CisJaWYgKGNvcmVfaWYtPmNvcmVfcGFyYW1zLT5jb250X29uX2JuYSAmJiAhZHdjX2VwLT5pc19pbgorCQkJCQkJCSYmIGR3Y19lcC0+dHlwZSAhPSBEV0NfT1RHX0VQX1RZUEVfQ09OVFJPTCkgeworCQl1aW50MzJfdCBkb2VwZG1hOworCQlkd2Nfb3RnX2Rldl9vdXRfZXBfcmVnc190ICpvdXRfcmVncyA9CisJCQljb3JlX2lmLT5kZXZfaWYtPm91dF9lcF9yZWdzW2R3Y19lcC0+bnVtXTsKKwkJZG9lcGRtYSA9IERXQ19SRUFEX1JFRzMyKCYob3V0X3JlZ3MtPmRvZXBkbWEpKTsKKwkJc3RhcnQgPSAoZG9lcGRtYSAtIGR3Y19lcC0+ZG1hX2Rlc2NfYWRkcikvc2l6ZW9mKGR3Y19vdGdfZGV2X2RtYV9kZXNjX3QpOworCQlkbWFfZGVzYyA9ICYoZHdjX2VwLT5kZXNjX2FkZHJbc3RhcnRdKTsKKwl9IGVsc2UgeworCQlzdGFydCA9IDA7CisJCWRtYV9kZXNjID0gZHdjX2VwLT5kZXNjX2FkZHI7CisJfQorCQogCi0JZm9yIChpID0gMDsgaSA8IGR3Y19lcC0+ZGVzY19jbnQ7ICsraSwgKytkbWFfZGVzYykgeworCWZvciAoaSA9IHN0YXJ0OyBpIDwgZHdjX2VwLT5kZXNjX2NudDsgKytpLCArK2RtYV9kZXNjKSB7CiAJCXN0cy5kMzIgPSBkbWFfZGVzYy0+c3RhdHVzLmQzMjsKIAkJc3RzLmIuYnMgPSBCU19IT1NUX1JFQURZOwogCQlkbWFfZGVzYy0+c3RhdHVzLmQzMiA9IHN0cy5kMzI7CkBAIC0zMDMxLDYgKzMwOTcsNyBAQAogCQkgICAgJkdFVF9DT1JFX0lGKHBjZCktPmRldl9pZi0+aW5fZXBfcmVnc1tkd2NfZXAtPm51bV0tPmRpZXBjdGw7CiAJfQogCWRlcGN0bC5iLmVwZW5hID0gMTsKKwlkZXBjdGwuYi5jbmFrID0gMTsKIAlEV0NfTU9ESUZZX1JFRzMyKGFkZHIsIDAsIGRlcGN0bC5kMzIpOwogfQogCkBAIC0zNDE5LDYgKzM0ODYsNyBAQAogCiAJaWYgKGR3Y19lcC0+dHlwZSA9PSBEV0NfT1RHX0VQX1RZUEVfSVNPQykgewogCQlkd2Nfb3RnX2ZsdXNoX3R4X2ZpZm8oY29yZV9pZiwgZHdjX2VwLT50eF9maWZvX251bSk7CisJCWNvbXBsZXRlX2VwKGVwKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzQzMCw4ICszNDk4LDcgQEAKIAlEV0NfREVCVUdQTChEQkdfQU5ZLCAicGt0Y250PSVkIHNpemU9JWRcbiIsCiAJCSAgICBkaWVwdHNpei5iLnBrdGNudCwgZGllcHRzaXouYi54ZmVyc2l6ZSk7CiAJCi0JaWYgKChjb3JlX2lmLT5zdGFydF9wcmVkaWN0ID09IDApIHx8IChkZXBjdGwuYi5lcHR5cGUgJiAxKSkgewkvLyBvciBQZXJpb2RpYyBFUAotCisJaWYgKChjb3JlX2lmLT5zdGFydF9wcmVkaWN0ID09IDApIHx8IChkZXBjdGwuYi5lcHR5cGUgJiAxKSkgeyAKIAkJaWYgKGVwLT5zdG9wcGVkKSB7CiAJCQlpZiAoY29yZV9pZi0+ZW5fbXVsdGlwbGVfdHhfZmlmbykKIAkJCQkvKiBGbHVzaCB0aGUgVHggRklGTyAqLwpAQCAtMzQ4NiwxMiArMzU1MywxMyBAQAogCQkJCQl4ZmVyX3NpemUgPSBlcC0+ZHdjX2VwLm1heHhmZXI7CiAJCQkJZGVwY3RsLmQzMiA9IERXQ19SRUFEX1JFRzMyKCZkZXZfaWYtPmluX2VwX3JlZ3NbaV0tPmRpZXBjdGwpOwogCQkJCWlmIChkaWVwdHNpei5iLnBrdGNudCAhPSAwKSB7Ci0JCQkJCWlmICh4ZmVyX3NpemUgPT0gMCkgeyAvLyB6bHAKKwkJCQkJaWYgKHhmZXJfc2l6ZSA9PSAwKSB7CiAJCQkJCQlyZW1haW5fdG9fdHJhbnNmZXIgPSAwOwogCQkJCQl9IGVsc2UgewotCQkJCQkJaWYgKCh4ZmVyX3NpemUgJSBlcC0+ZHdjX2VwLm1heHBhY2tldCkgPT0gMCkgewkvLyBsYXN0IHBhY2tldCBub3Qgc2hvcnQKLQkJCQkJCQlyZW1haW5fdG9fdHJhbnNmZXIgPSBkaWVwdHNpei5iLnBrdGNudCAqIGVwLT5kd2NfZXAubWF4cGFja2V0OwotCQkJCQkJfSBlbHNlIHsJLy8gbGFzdCBwYWNrZXQgaXMgc2hvcnQKKwkJCQkJCWlmICgoeGZlcl9zaXplICUgZXAtPmR3Y19lcC5tYXhwYWNrZXQpID09IDApIHsKKwkJCQkJCQlyZW1haW5fdG9fdHJhbnNmZXIgPSAKKwkJCQkJCQkJZGllcHRzaXouYi5wa3RjbnQgKiBlcC0+ZHdjX2VwLm1heHBhY2tldDsKKwkJCQkJCX0gZWxzZSB7CiAJCQkJCQkJcmVtYWluX3RvX3RyYW5zZmVyID0gKChkaWVwdHNpei5iLnBrdGNudCAtMSkgKiBlcC0+ZHdjX2VwLm1heHBhY2tldCkgCiAJCQkJCQkJCSsgKHhmZXJfc2l6ZSAlIGVwLT5kd2NfZXAubWF4cGFja2V0KTsKIAkJCQkJCX0KQEAgLTM4MDYsNyArMzg3NCwxOSBAQAogCQkJCX0KICNlbmRpZiAvKiBEV0NfVVRFX1BFUl9JTyAqLwogCQkJCWVsc2UgeworCQkJCQlpZiAoZHdjX2VwLT50eXBlID09IERXQ19PVEdfRVBfVFlQRV9JU09DICYmIAorCQkJCQkJCWR3Y19lcC0+YkludGVydmFsID4gMSkgeworCQkJCQkJZHdjX2VwLT5mcmFtZV9udW0gKz0gZHdjX2VwLT5iSW50ZXJ2YWw7CisJCQkJCQlpZiAoZHdjX2VwLT5mcmFtZV9udW0gPiAweDNGRkYpCisJCQkJCQl7CisJCQkJCQkJZHdjX2VwLT5mcm1fb3ZlcnJ1biA9IDE7CisJCQkJCQkJZHdjX2VwLT5mcmFtZV9udW0gJj0gMHgzRkZGOworCQkJCQkJfSBlbHNlIAorCQkJCQkJCWR3Y19lcC0+ZnJtX292ZXJydW4gPSAwOworCQkJCQl9CiAJCQkJCWNvbXBsZXRlX2VwKGVwKTsKKwkJCQkJaWYoZGllcGludC5iLm5haykKKwkJCQkJCUNMRUFSX0lOX0VQX0lOVFIoY29yZV9pZiwgZXBudW0sIG5hayk7CiAJCQkJfQogCQkJfQogCQkJLyogRW5kcG9pbnQgZGlzYWJsZSAgICAgICovCkBAIC0zOTMxLDcgKzQwMTEsMzUgQEAKIAkJCWlmIChkaWVwaW50LmIubmFrKSB7CiAJCQkJRFdDX0RFQlVHUEwoREJHX0FOWSwgIkVQJWQgSU4gTkFLIEludGVycnVwdFxuIiwKIAkJCQkJICAgIGVwbnVtKTsKLQkJCQloYW5kbGVfaW5fZXBfbmFrX2ludHIocGNkLCBlcG51bSk7CisJCQkJaWYgKGVwLT5kd2NfZXAudHlwZSA9PSBEV0NfT1RHX0VQX1RZUEVfSVNPQykKKwkJCQl7CisJCQkJCWRlcGN0bF9kYXRhX3QgZGVwY3RsOworCQkJCQlpZiAoZXAtPmR3Y19lcC5mcmFtZV9udW0gPT0gMHhGRkZGRkZGRikgCisJCQkJCXsKKwkJCQkJCWVwLT5kd2NfZXAuZnJhbWVfbnVtID0gY29yZV9pZi0+ZnJhbWVfbnVtOworCQkJCQkJaWYgKGVwLT5kd2NfZXAuYkludGVydmFsID4gMSkgCisJCQkJCQl7CisJCQkJCQkJZGVwY3RsLmQzMiA9IDA7CisJCQkJCQkJZGVwY3RsLmQzMiA9IERXQ19SRUFEX1JFRzMyKCZkZXZfaWYtPmluX2VwX3JlZ3NbZXBudW1dLT5kaWVwY3RsKTsKKwkJCQkJCQlpZiAoZXAtPmR3Y19lcC5mcmFtZV9udW0gJiAweDEpIHsKKwkJCQkJCQkJZGVwY3RsLmIuc2V0ZDFwaWQgPSAxOworCQkJCQkJCQlkZXBjdGwuYi5zZXRkMHBpZCA9IDA7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJZGVwY3RsLmIuc2V0ZDBwaWQgPSAxOworCQkJCQkJCQlkZXBjdGwuYi5zZXRkMXBpZCA9IDA7CisJCQkJCQkJfQorCQkJCQkJCURXQ19XUklURV9SRUczMigmZGV2X2lmLT5pbl9lcF9yZWdzW2VwbnVtXS0+ZGllcGN0bCwgZGVwY3RsLmQzMik7CisJCQkJCQl9CisJCQkJCQlzdGFydF9uZXh0X3JlcXVlc3QoZXApOworCQkJCQl9CisJCQkJCWVwLT5kd2NfZXAuZnJhbWVfbnVtICs9IGVwLT5kd2NfZXAuYkludGVydmFsOworCQkJCQlpZiAoZHdjX2VwLT5mcmFtZV9udW0gPiAweDNGRkYpCisJCQkJCXsKKwkJCQkJCWR3Y19lcC0+ZnJtX292ZXJydW4gPSAxOworCQkJCQkJZHdjX2VwLT5mcmFtZV9udW0gJj0gMHgzRkZGOworCQkJCQl9IGVsc2UgCisJCQkJCQlkd2NfZXAtPmZybV9vdmVycnVuID0gMDsKKwkJCQl9CiAKIAkJCQlDTEVBUl9JTl9FUF9JTlRSKGNvcmVfaWYsIGVwbnVtLCBuYWspOwogCQkJfQpAQCAtNDA3OSw3ICs0MTg3LDM0IEBACiAJCQkJCQljb21wbGV0ZV9lcChlcCk7CiAJCQkJCX0KIAkJCQl9Ci0JCQkJCisJCQkJaWYgKGVwLT5kd2NfZXAudHlwZSA9PSBEV0NfT1RHX0VQX1RZUEVfSVNPQykKKwkJCQl7CisJCQkJCWRjdGxfZGF0YV90IGRjdGw7CisJCQkJCWdpbnRtc2tfZGF0YV90IGludHJfbWFzayA9IHsuZDMyID0gMH07CisJCQkJCWR3Y19vdGdfcGNkX3JlcXVlc3RfdCAqcmVxID0gMDsKKworCQkJCQlkY3RsLmQzMiA9IERXQ19SRUFEX1JFRzMyKCZjb3JlX2lmLT5kZXZfaWYtPgorCQkJCQkJZGV2X2dsb2JhbF9yZWdzLT5kY3RsKTsKKwkJCQkJZGN0bC5iLmNnb3V0bmFrID0gMTsKKwkJCQkJRFdDX1dSSVRFX1JFRzMyKCZjb3JlX2lmLT5kZXZfaWYtPmRldl9nbG9iYWxfcmVncy0+ZGN0bCwKKwkJCQkJCWRjdGwuZDMyKTsKKworCQkJCQlpbnRyX21hc2suZDMyID0gMDsKKwkJCQkJaW50cl9tYXNrLmIuaW5jb21wbGlzb291dCA9IDE7CSAgIAorCisJCQkJCS8qIEdldCBhbnkgcGVuZGluZyByZXF1ZXN0cyAqLworCQkJCQlpZiAoIURXQ19DSVJDTEVRX0VNUFRZKCZlcC0+cXVldWUpKSB7CisJCQkJCQlyZXEgPSBEV0NfQ0lSQ0xFUV9GSVJTVCgmZXAtPnF1ZXVlKTsKKwkJCQkJCWlmICghcmVxKSB7CisJCQkJCQkJRFdDX1BSSU5URigiY29tcGxldGVfZXAgMHglcCwgcmVxID0gTlVMTCFcbiIsIGVwKTsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJZHdjX290Z19yZXF1ZXN0X2RvbmUoZXAsIHJlcSwgMCk7CisJCQkJCQkJc3RhcnRfbmV4dF9yZXF1ZXN0KGVwKTsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJCQkJCURXQ19QUklOVEYoImNvbXBsZXRlX2VwIDB4JXAsIGVwLT5xdWV1ZSBlbXB0eSFcbiIsIGVwKTsKKwkJCQkJfQorCQkJCX0KIAkJCX0KIAkJCS8qIEFIQiBFcnJvciAqLwogCQkJaWYgKGRvZXBpbnQuYi5haGJlcnIpIHsKQEAgLTQxMzQsNiArNDI2OSwzNyBAQAogCiAJCQkJQ0xFQVJfT1VUX0VQX0lOVFIoY29yZV9pZiwgZXBudW0sIGJhYmJsZSk7CiAJCQl9CisJCQlpZiAoZG9lcGludC5iLm91dHRrbmVwZGlzKQorCQkJeworCQkJCURXQ19ERUJVR1BMKERCR19BTlksICJFUCVkIE9VVCBUb2tlbiByZWNlaXZlZCB3aGVuIEVQIGlzIFwKKwkJCQkJZGlzYWJsZWRcbiIsZXBudW0pOworCQkJCWlmIChlcC0+ZHdjX2VwLnR5cGUgPT0gRFdDX09UR19FUF9UWVBFX0lTT0MpCisJCQkJeworCQkJCQlkb2VwbXNrX2RhdGFfdCBkb2VwbXNrID0gey5kMzIgPSAwfTsKKwkJCQkJZXAtPmR3Y19lcC5mcmFtZV9udW0gPSBjb3JlX2lmLT5mcmFtZV9udW07CisJCQkJCWlmIChlcC0+ZHdjX2VwLmJJbnRlcnZhbCA+IDEpIAorCQkJCQl7CisJCQkJCQlkZXBjdGxfZGF0YV90IGRlcGN0bDsKKwkJCQkJCWRlcGN0bC5kMzIgPSBEV0NfUkVBRF9SRUczMigmY29yZV9pZi0+ZGV2X2lmLT4KKwkJCQkJCQkJCQkJCQlvdXRfZXBfcmVnc1tlcG51bV0tPmRvZXBjdGwpOworCQkJCQkJaWYgKGVwLT5kd2NfZXAuZnJhbWVfbnVtICYgMHgxKSB7CisJCQkJCQkJZGVwY3RsLmIuc2V0ZDFwaWQgPSAxOworCQkJCQkJCWRlcGN0bC5iLnNldGQwcGlkID0gMDsKKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJZGVwY3RsLmIuc2V0ZDBwaWQgPSAxOworCQkJCQkJCWRlcGN0bC5iLnNldGQxcGlkID0gMDsKKwkJCQkJCX0KKwkJCQkJCURXQ19XUklURV9SRUczMigmY29yZV9pZi0+ZGV2X2lmLT4KKwkJCQkJCQkJCQlvdXRfZXBfcmVnc1tlcG51bV0tPmRvZXBjdGwsIGRlcGN0bC5kMzIpOworCQkJCQl9CisJCQkJCXN0YXJ0X25leHRfcmVxdWVzdChlcCk7CisJCQkJCWRvZXBtc2suYi5vdXR0a25lcGRpcyA9IDE7CisJCQkJCURXQ19NT0RJRllfUkVHMzIoJmNvcmVfaWYtPmRldl9pZi0+ZGV2X2dsb2JhbF9yZWdzLT5kb2VwbXNrLCAKKwkJCQkJCQkJIGRvZXBtc2suZDMyLCAwKTsKKwkJCQl9CisJCQkJQ0xFQVJfT1VUX0VQX0lOVFIoY29yZV9pZiwgZXBudW0sIG91dHRrbmVwZGlzKTsKKwkJCX0KKwkJCQogCQkJLyogTkFLIEludGVycnV0cCAqLwogCQkJaWYgKGRvZXBpbnQuYi5uYWspIHsKIAkJCQlEV0NfREVCVUdQTChEQkdfQU5ZLCAiRVAlZCBPVVQgTkFLXG4iLCBlcG51bSk7CkBAIC00MTU4LDcgKzQzMjQsMTUgQEAKIAogI3VuZGVmIENMRUFSX09VVF9FUF9JTlRSCiB9Ci0KK3N0YXRpYyBpbnQgZHJvcF90cmFuc2Zlcih1aW50MzJfdCB0cmd0X2ZyLCB1aW50MzJfdCBjdXJyX2ZyLCB1aW50OF90IGZybV9vdmVycnVuKQoreworCWludCByZXR2YWwgPSAwOworCWlmKCFmcm1fb3ZlcnJ1biAmJiBjdXJyX2ZyID49IHRyZ3RfZnIpIAorCQlyZXR2YWwgPSAxOworCWVsc2UgaWYgKGZybV9vdmVycnVuICYmIChjdXJyX2ZyID49IHRyZ3RfZnIgJiYgKChjdXJyX2ZyIC0gdHJndF9mcikgPCAweDNGRkYvMikpKQorCQlyZXR2YWwgPSAxOworCXJldHVybiByZXR2YWw7Cit9CiAvKioKICAqIEluY29tcGxldGUgSVNPIElOIFRyYW5zZmVyIEludGVycnVwdC4KICAqIFRoaXMgaW50ZXJydXB0IGluZGljYXRlcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIG9jY3VycmVkCkBAIC00MjI3LDEzICs0NDAxLDM0IEBACiAJfQogCiAjZWxzZQotCWdpbnRtc2tfZGF0YV90IGludHJfbWFzayA9IHsuZDMyID0gMCB9OwotCURXQ19QUklOVEYoIklOVEVSUlVQVCBIYW5kbGVyIG5vdCBpbXBsZW1lbnRlZCBmb3IgJXNcbiIsCi0JCSAgICJJTiBJU09DIEluY29tcGxldGUiKTsKKwlkZXBjdGxfZGF0YV90IGRlcGN0bCA9IHsuZDMyID0gMCB9OworCWR3Y19lcF90ICpkd2NfZXA7CisJZHdjX290Z19kZXZfaWZfdCAqZGV2X2lmOworCWludCBpOworCWRldl9pZiA9IEdFVF9DT1JFX0lGKHBjZCktPmRldl9pZjsKIAotCWludHJfbWFzay5iLmluY29tcGxpc29pbiA9IDE7CisJRFdDX0RFQlVHUEwoREJHX1BDRCwiSW5jb21wbGV0ZSBJU08gSU4gXG4iKTsKKwkKKwlmb3IgKGkgPSAxOyBpIDw9IGRldl9pZi0+bnVtX2luX2VwczsgKytpKSB7CisJCWR3Y19lcCA9ICZwY2QtPmluX2VwW2ktMV0uZHdjX2VwOworCQlkZXBjdGwuZDMyID0KKwkJCURXQ19SRUFEX1JFRzMyKCZkZXZfaWYtPmluX2VwX3JlZ3NbaV0tPmRpZXBjdGwpOworCQlpZiAoZGVwY3RsLmIuZXBlbmEgJiYgZHdjX2VwLT50eXBlID09IERXQ19PVEdfRVBfVFlQRV9JU09DKSB7CisJCQlpZiAoZHJvcF90cmFuc2Zlcihkd2NfZXAtPmZyYW1lX251bSwgR0VUX0NPUkVfSUYocGNkKS0+ZnJhbWVfbnVtLCAKKwkJCQkJCQlkd2NfZXAtPmZybV9vdmVycnVuKSkKKwkJCXsKKwkJCQlkZXBjdGwuZDMyID0KKwkJCQkJRFdDX1JFQURfUkVHMzIoJmRldl9pZi0+aW5fZXBfcmVnc1tpXS0+ZGllcGN0bCk7CisJCQkJZGVwY3RsLmIuc25hayA9IDE7CisJCQkJZGVwY3RsLmIuZXBkaXMgPSAxOworCQkJCURXQ19NT0RJRllfUkVHMzIoJmRldl9pZi0+aW5fZXBfcmVnc1tpXS0+ZGllcGN0bCwgZGVwY3RsLmQzMiwgZGVwY3RsLmQzMik7CisJCQl9CisJCX0KKwl9CisKKwkvKmludHJfbWFzay5iLmluY29tcGxpc29pbiA9IDE7CiAJRFdDX01PRElGWV9SRUczMigmR0VUX0NPUkVfSUYocGNkKS0+Y29yZV9nbG9iYWxfcmVncy0+Z2ludG1zaywKLQkJCSBpbnRyX21hc2suZDMyLCAwKTsKKwkJCSBpbnRyX21hc2suZDMyLCAwKTsJICovCiAjZW5kaWYJCQkJLy9EV0NfRU5fSVNPQwogCiAJLyogQ2xlYXIgaW50ZXJydXB0ICovCkBAIC00MzIwLDE0ICs0NTE1LDQ5IEBACiAjZWxzZQogCS8qKiBAdG9kbyBpbXBsZW1lbnQgSVNSICovCiAJZ2ludG1za19kYXRhX3QgaW50cl9tYXNrID0gey5kMzIgPSAwIH07CisJZHdjX290Z19jb3JlX2lmX3QgKmNvcmVfaWY7CisJZGVwdHNpel9kYXRhX3QgZGVwdHNpeiA9IHsuZDMyID0gMCB9OworCWRlcGN0bF9kYXRhX3QgZGVwY3RsID0gey5kMzIgPSAwIH07CisJZGN0bF9kYXRhX3QgZGN0bCA9IHsuZDMyID0gMCB9OworCWR3Y19lcF90ICpkd2NfZXAgPSBOVUxMOworCWludCBpOworCWNvcmVfaWYgPSBHRVRfQ09SRV9JRihwY2QpOwogCi0JRFdDX1BSSU5URigiSU5URVJSVVBUIEhhbmRsZXIgbm90IGltcGxlbWVudGVkIGZvciAlc1xuIiwKLQkJICAgIk9VVCBJU09DIEluY29tcGxldGUiKTsKKwlmb3IgKGkgPSAwOyBpIDwgY29yZV9pZi0+ZGV2X2lmLT5udW1fb3V0X2VwczsgKytpKSB7CisJCWR3Y19lcCA9ICZwY2QtPm91dF9lcFtpXS5kd2NfZXA7CisJCWRlcGN0bC5kMzIgPQorCQkJRFdDX1JFQURfUkVHMzIoJmNvcmVfaWYtPmRldl9pZi0+b3V0X2VwX3JlZ3NbZHdjX2VwLT5udW1dLT5kb2VwY3RsKTsKKwkJaWYgKGRlcGN0bC5iLmVwZW5hICYmIGRlcGN0bC5iLmRwaWQgPT0gKGNvcmVfaWYtPmZyYW1lX251bSAmIDB4MSkpIHsKKwkJCWNvcmVfaWYtPmRldl9pZi0+aXNvY19lcCA9IGR3Y19lcDsJCisJCQlkZXB0c2l6LmQzMiA9CisJCQkJCURXQ19SRUFEX1JFRzMyKCZjb3JlX2lmLT5kZXZfaWYtPm91dF9lcF9yZWdzW2R3Y19lcC0+bnVtXS0+ZG9lcHRzaXopOworCQkJCWJyZWFrOworCQl9CisJfQorCWRjdGwuZDMyID0gRFdDX1JFQURfUkVHMzIoJmNvcmVfaWYtPmRldl9pZi0+ZGV2X2dsb2JhbF9yZWdzLT5kY3RsKTsKKwlnaW50c3RzLmQzMiA9IERXQ19SRUFEX1JFRzMyKCZjb3JlX2lmLT5jb3JlX2dsb2JhbF9yZWdzLT5naW50c3RzKTsKKwlpbnRyX21hc2suZDMyID0gRFdDX1JFQURfUkVHMzIoJmNvcmVfaWYtPmNvcmVfZ2xvYmFsX3JlZ3MtPmdpbnRtc2spOwogCisJaWYgKCFpbnRyX21hc2suYi5nb3V0bmFrZWZmKSB7CisJCS8qIFVubWFzayBpdCAqLworCQlpbnRyX21hc2suYi5nb3V0bmFrZWZmID0gMTsKKwkJRFdDX1dSSVRFX1JFRzMyKCZjb3JlX2lmLT5jb3JlX2dsb2JhbF9yZWdzLT5naW50bXNrLCBpbnRyX21hc2suZDMyKTsKKyAJfQorCWlmICghZ2ludHN0cy5iLmdvdXRuYWtlZmYpIHsKKwkJZGN0bC5iLnNnb3V0bmFrID0gMTsKKwl9CisJRFdDX1dSSVRFX1JFRzMyKCZjb3JlX2lmLT5kZXZfaWYtPmRldl9nbG9iYWxfcmVncy0+ZGN0bCwgZGN0bC5kMzIpOworCisJZGVwY3RsLmQzMiA9IERXQ19SRUFEX1JFRzMyKCZjb3JlX2lmLT5kZXZfaWYtPm91dF9lcF9yZWdzW2R3Y19lcC0+bnVtXS0+ZG9lcGN0bCk7CisJaWYgKGRlcGN0bC5iLmVwZW5hKSB7CisJCWRlcGN0bC5iLmVwZGlzID0gMTsKKwkJZGVwY3RsLmIuc25hayA9IDE7CisJfQorCURXQ19XUklURV9SRUczMigmY29yZV9pZi0+ZGV2X2lmLT5vdXRfZXBfcmVnc1tkd2NfZXAtPm51bV0tPmRvZXBjdGwsIGRlcGN0bC5kMzIpOworCisJaW50cl9tYXNrLmQzMiA9IDA7CiAJaW50cl9tYXNrLmIuaW5jb21wbGlzb291dCA9IDE7Ci0JRFdDX01PRElGWV9SRUczMigmR0VUX0NPUkVfSUYocGNkKS0+Y29yZV9nbG9iYWxfcmVncy0+Z2ludG1zaywKLQkJCSBpbnRyX21hc2suZDMyLCAwKTsKLQorCQkKICNlbmRpZiAvKiBEV0NfRU5fSVNPQyAqLwogCiAJLyogQ2xlYXIgaW50ZXJydXB0ICovCkBAIC00MzU3LDcgKzQ1ODcsNyBAQAogCS8qIERpc2FibGUgYWxsIGFjdGl2ZSBJTiBFUHMgKi8KIAlmb3IgKGkgPSAwOyBpIDw9IGRldl9pZi0+bnVtX2luX2VwczsgaSsrKSB7CiAJCWRpZXBjdGwuZDMyID0gRFdDX1JFQURfUkVHMzIoJmRldl9pZi0+aW5fZXBfcmVnc1tpXS0+ZGllcGN0bCk7Ci0JCWlmICghKGRpZXBjdGwuYi5lcHR5cGUgJiAxKSAmJiBkaWVwY3RsLmIuZXBlbmEpIHsJLy8gTlAgSU4gZW5hYmxlZCBFUCdzIG9ubHkKKwkJaWYgKCEoZGllcGN0bC5iLmVwdHlwZSAmIDEpICYmIGRpZXBjdGwuYi5lcGVuYSkgewogCQkJaWYgKGNvcmVfaWYtPnN0YXJ0X3ByZWRpY3QgPiAwKQogCQkJCWNvcmVfaWYtPnN0YXJ0X3ByZWRpY3QrKzsKIAkJCWRpZXBjdGwuYi5lcGRpcyA9IDE7CkBAIC00NDA2LDkgKzQ2MzYsMTkgQEAKIAkJZm9yIChpID0gMDsgaSA8PSBkZXZfaWYtPm51bV9vdXRfZXBzOyBpKyspIHsKIAkJCWlmICggcGNkLT5jb3JlX2lmLT5lcF94ZmVyX2luZm9baV0uc3RhdGUgPT0gMiApCiAJCQkJYnJlYWs7Ci0JCX0gCQkKKwkJfQorCQlpZiAoaSA+IGRldl9pZi0+bnVtX291dF9lcHMpIHsKKwkJCWRjdGxfZGF0YV90IGRjdGw7CisJCQlkY3RsLmQzMiA9IERXQ19SRUFEX1JFRzMyKCZkZXZfaWYtPgorCQkJCWRldl9nbG9iYWxfcmVncy0+ZGN0bCk7CisJCQlkY3RsLmIuY2dvdXRuYWsgPSAxOworCQkJRFdDX1dSSVRFX1JFRzMyKCZkZXZfaWYtPmRldl9nbG9iYWxfcmVncy0+ZGN0bCwKKwkJCQlkY3RsLmQzMik7CisJCQlnb3RvIG91dDsKKwkJfQorCiAJCS8qIERpc2FibGUgdGhlIGVuZHBvaW50ICovCi0JCWRvZXBjdGwuZDMyID0gRFdDX1JFQURfUkVHMzIoJnBjZC0+Y29yZV9pZi0+ZGV2X2lmLT4KKwkJZG9lcGN0bC5kMzIgPSBEV0NfUkVBRF9SRUczMigmZGV2X2lmLT4KIAkJCQkJCQkJCQlvdXRfZXBfcmVnc1tpXS0+ZG9lcGN0bCk7CiAJCWlmIChkb2VwY3RsLmIuZXBlbmEpIHsKIAkJCWRvZXBjdGwuYi5lcGRpcyA9IDE7CkBAIC00NDE3LDEwICs0NjU3LDI3IEBACiAJCURXQ19XUklURV9SRUczMigmZGV2X2lmLT5vdXRfZXBfcmVnc1tpXS0+ZG9lcGN0bCwgZG9lcGN0bC5kMzIpOwogCQlyZXR1cm4gMTsKIAl9CisJLyogV2UgY29tZSBoZXJlIGZyb20gSW5jb21wbGV0ZSBJU08gT1VUIGhhbmRsZXIgKi8KKwlpZihkZXZfaWYtPmlzb2NfZXApCisJeworCQlkd2NfZXBfdCAqZHdjX2VwID0gKGR3Y19lcF90ICopZGV2X2lmLT5pc29jX2VwOworCQl1aW50MzJfdCBlcG51bSA9IGR3Y19lcC0+bnVtOworCQlkb2VwaW50X2RhdGFfdCBkb2VwaW50OworCQlkb2VwaW50LmQzMiA9IERXQ19SRUFEX1JFRzMyKCZkZXZfaWYtPm91dF9lcF9yZWdzW2R3Y19lcC0+bnVtXS0+ZG9lcGludCk7CisJCWRldl9pZi0+aXNvY19lcCA9IE5VTEw7CisJCWRvZXBjdGwuZDMyID0gRFdDX1JFQURfUkVHMzIoJmRldl9pZi0+b3V0X2VwX3JlZ3NbZXBudW1dLT5kb2VwY3RsKTsKKwkJRFdDX1BSSU5URigiQmVmb3JlIGRpc2FibGUgRE9FUENUTCA9ICUwOHhcbiIsIGRvZXBjdGwuZDMyKTsKKwkJaWYgKGRvZXBjdGwuYi5lcGVuYSkgeworCQkJZG9lcGN0bC5iLmVwZGlzID0gMTsKKwkJCWRvZXBjdGwuYi5zbmFrID0gMTsKKwkJfQorCQlEV0NfV1JJVEVfUkVHMzIoJmRldl9pZi0+b3V0X2VwX3JlZ3NbZXBudW1dLT5kb2VwY3RsLCBkb2VwY3RsLmQzMik7CisJCXJldHVybiAxOworCX0gZWxzZQorCQlEV0NfUFJJTlRGKCJJTlRFUlJVUFQgSGFuZGxlciBub3QgaW1wbGVtZW50ZWQgZm9yICVzXG4iLAorCQkJICAgIkdsb2JhbCBPVVQgTkFLIEVmZmVjdGl2ZVxuIik7CiAJCi0JRFdDX1BSSU5URigiSU5URVJSVVBUIEhhbmRsZXIgbm90IGltcGxlbWVudGVkIGZvciAlc1xuIiwKLQkJICAgIkdsb2JhbCBJTiBOQUsgRWZmZWN0aXZlXG4iKTsKLQkKK291dDoKIAkvKiBDbGVhciBpbnRlcnJ1cHQgKi8KIAlnaW50c3RzLmQzMiA9IDA7CiAJZ2ludHN0cy5iLmdvdXRuYWtlZmYgPSAxOwpAQCAtNDUzOCw3ICs0Nzk1LDcgQEAKIAkJCSAgICBkd2Nfb3RnX3BjZF9oYW5kbGVfaW5jb21wbGV0ZV9pc29jX291dF9pbnRyKHBjZCk7CiAJCX0KIAotCQkvKiBJbiBNUEkgbW9kZSBEZSB2aWNlIEVuZHBvaW50cyBpbnR0ZXJydXB0cyBhcmUgYXNzZXJ0ZWQKKwkJLyogSW4gTVBJIG1vZGUgRGV2aWNlIEVuZHBvaW50cyBpbnRlcnJ1cHRzIGFyZSBhc3NlcnRlZAogCQkgKiB3aXRob3V0IHNldHRpbmcgb3V0ZXBpbnRyIGFuZCBpbmVwaW50IGJpdHMgc2V0LCBzbyB0aGVzZQogCQkgKiBJbnRlcnJ1cHQgaGFuZGxlcnMgYXJlIGNhbGxlZCB3aXRob3V0IGNoZWNraW5nIHRoZXNlIGJpdC1maWVsZHMKIAkJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfcGNkX2xpbnV4LmMgYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfcGNkX2xpbnV4LmMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBmNDAzZjU4Li4zODdkNzI1Ci0tLSBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19wY2RfbGludXguYworKysgYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2R3Y19vdGdfcGNkX2xpbnV4LmMKQEAgLTEsOCArMSw4IEBACiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgKiAkRmlsZTogLy9kd2gvdXNiX2lpcC9kZXYvc29mdHdhcmUvb3RnL2xpbnV4L2RyaXZlcnMvZHdjX290Z19wY2RfbGludXguYyAkCi0gICogJFJldmlzaW9uOiAjMTcgJAotICAqICREYXRlOiAyMDExLzA1LzE3ICQKLSAgKiAkQ2hhbmdlOiAxNzc0MTEwICQKKyAgKiAkUmV2aXNpb246ICMxOSAkCisgICogJERhdGU6IDIwMTEvMTAvMjYgJAorICAqICRDaGFuZ2U6IDE4NzMwMjggJAogICAqCiAgICogU3lub3BzeXMgSFMgT1RHIExpbnV4IFNvZnR3YXJlIERyaXZlciBhbmQgZG9jdW1lbnRhdGlvbiAoaGVyZWluYWZ0ZXIsCiAgICogIlNvZnR3YXJlIikgaXMgYW4gVW5zdXBwb3J0ZWQgcHJvcHJpZXRhcnkgd29yayBvZiBTeW5vcHN5cywgSW5jLiB1bmxlc3MKQEAgLTM2MSw3ICszNjEsNyBAQAogCWlmIChHRVRfQ09SRV9JRihwY2QpLT5kbWFfZW5hYmxlKSB7CiAJCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBnYWRnZXRfd3JhcHBlci0+cGNkLT5vdGdfZGV2LT5vc19kZXAucGNpZGV2OwogCQlpZiAodXNiX3JlcS0+bGVuZ3RoICE9IDAgJiYgdXNiX3JlcS0+ZG1hID09IERXQ19ETUFfQUREUl9JTlZBTElEKSB7Ci0JCQlkbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKGRldiwgdXNiX3JlcS0+YnVmLCB1c2JfcmVxLT5sZW5ndGgsIAorCQkJZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShkZXYsIHVzYl9yZXEtPmJ1ZiwgdXNiX3JlcS0+bGVuZ3RoLAogCQkJCQllcC0+ZHdjX2VwLmlzX2luID8gUENJX0RNQV9UT0RFVklDRSA6IFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCX0KIAl9CkBAIC0xMTQzLDEwICsxMTQzLDkgQEAKIAlzdHJ1Y3QgbG1fZGV2aWNlICpfZGV2CiAjZWxpZiAgZGVmaW5lZChQQ0lfSU5URVJGQUNFKQogCXN0cnVjdCBwY2lfZGV2ICpfZGV2Ci0jZWxzZSAKKyNlbHNlCiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX2RldgogI2VuZGlmCi0KICAgICApCiB7CiAjaWZkZWYgTE1fSU5URVJGQUNFCkBAIC0xMjI5LDggKzEyMjgsMTQgQEAKICAqIHRoZW4gYSBob3N0IG1heSBjb25uZWN0IGFnYWluLCBvciB0aGUgZHJpdmVyIG1pZ2h0IGdldCB1bmJvdW5kLgogICoKICAqIEBwYXJhbSBkcml2ZXIgVGhlIGRyaXZlciBiZWluZyByZWdpc3RlcmVkCisgKiBAcGFyYW0gYmluZCBUaGUgYmluZCBmdW5jdGlvbiBvZiBnYWRnZXQgZHJpdmVyCiAgKi8KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMzcpCiBpbnQgdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpCisjZWxzZQoraW50IHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyLAorCQlpbnQgKCpiaW5kKShzdHJ1Y3QgdXNiX2dhZGdldCAqKSkKKyNlbmRpZgogewogCWludCByZXR2YWw7CiAKQEAgLTEyMzgsNyArMTI0MywxMSBAQAogCQkgICAgZHJpdmVyLT5kcml2ZXIubmFtZSk7CiAKIAlpZiAoIWRyaXZlciB8fCBkcml2ZXItPnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOIHx8CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDM3KQogCSAgICAhZHJpdmVyLT5iaW5kIHx8CisjZWxzZQorCQkhYmluZCB8fAorI2VuZGlmCiAJICAgICFkcml2ZXItPnVuYmluZCB8fCAhZHJpdmVyLT5kaXNjb25uZWN0IHx8ICFkcml2ZXItPnNldHVwKSB7CiAJCURXQ19ERUJVR1BMKERCR19QQ0RWLCAiRUlOVkFMXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMjU3LDcgKzEyNjYsMTEgQEAKIAlnYWRnZXRfd3JhcHBlci0+Z2FkZ2V0LmRldi5kcml2ZXIgPSAmZHJpdmVyLT5kcml2ZXI7CiAKIAlEV0NfREVCVUdQTChEQkdfUENELCAiYmluZCB0byBkcml2ZXIgJXNcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwzNykKIAlyZXR2YWwgPSBkcml2ZXItPmJpbmQoJmdhZGdldF93cmFwcGVyLT5nYWRnZXQpOworI2Vsc2UKKwlyZXR2YWwgPSBiaW5kKCZnYWRnZXRfd3JhcHBlci0+Z2FkZ2V0KTsKKyNlbmRpZgogCWlmIChyZXR2YWwpIHsKIAkJRFdDX0VSUk9SKCJiaW5kIHRvIGRyaXZlciAlcyAtLT4gZXJyb3IgJWRcbiIsCiAJCQkgIGRyaXZlci0+ZHJpdmVyLm5hbWUsIHJldHZhbCk7CkBAIC0xMjY5LDggKzEyODIsMTEgQEAKIAkJICAgIGRyaXZlci0+ZHJpdmVyLm5hbWUpOwogCXJldHVybiAwOwogfQotCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDM3KQogRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcik7CisjZWxzZQorRVhQT1JUX1NZTUJPTCh1c2JfZ2FkZ2V0X3Byb2JlX2RyaXZlcik7CisjZW5kaWYKIAogLyoqCiAgKiBUaGlzIGZ1bmN0aW9uIHVucmVnaXN0ZXJzIGEgZ2FkZ2V0IGRyaXZlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX3JlZ3MuaCBiL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19yZWdzLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA4MzI5OGExLi44ZGM2NDhiCi0tLSBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvZHdjX290Z19yZWdzLmgKKysrIGIvZHJpdmVycy91c2IvZHdjX290Zy9kd2Nfb3RnX3JlZ3MuaApAQCAtMSw4ICsxLDggQEAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiAkRmlsZTogLy9kd2gvdXNiX2lpcC9kZXYvc29mdHdhcmUvb3RnL2xpbnV4L2RyaXZlcnMvZHdjX290Z19yZWdzLmggJAotICogJFJldmlzaW9uOiAjOTMgJAotICogJERhdGU6IDIwMTEvMDUvMTcgJAotICogJENoYW5nZTogMTc3NDExMCAkCisgKiAkUmV2aXNpb246ICM5NyAkCisgKiAkRGF0ZTogMjAxMS8xMC8yNCAkCisgKiAkQ2hhbmdlOiAxODcxMTYwICQKICAqCiAgKiBTeW5vcHN5cyBIUyBPVEcgTGludXggU29mdHdhcmUgRHJpdmVyIGFuZCBkb2N1bWVudGF0aW9uIChoZXJlaW5hZnRlciwKICAqICJTb2Z0d2FyZSIpIGlzIGFuIFVuc3VwcG9ydGVkIHByb3ByaWV0YXJ5IHdvcmsgb2YgU3lub3BzeXMsIEluYy4gdW5sZXNzCkBAIC0yNTQsNyArMjU0LDggQEAKIAkJdW5zaWduZWQgcmVzZXJ2ZWQ5XzIwOjEyOwogCQl1bnNpZ25lZCByZW1tZW1zdXBwOjE7CiAJCXVuc2lnbmVkIG5vdGlhbGxkbWF3cml0OjE7Ci0JCXVuc2lnbmVkIHJlc2VydmVkMjNfMzE6OTsKKwkJdW5zaWduZWQgYWhic2luZ2xlOjE7CisJCXVuc2lnbmVkIHJlc2VydmVkMjRfMzE6ODsKIAl9IGI7CiB9IGdhaGJjZmdfZGF0YV90OwogCkBAIC01NjUsOCArNTY2LDggQEAKIAogLyoqCiAgKiBUaGlzIHVuaW9uIHJlcHJlc2VudHMgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIEZJRk8gU2l6ZSBSZWdpc3RlcnMgKEhQVFhGU0laLAotICogR05QVFhGU0laLCBEUFRYRlNJWm4sIERJRVBUWEZuKS4gUmVhZCB0aGUgcmVnaXN0ZXIgaW50byB0aGUgPGk+ZDMyPC9pPiBlbGVtZW50IHRoZW4KLSAqIHJlYWQgb3V0IHRoZSBiaXRzIHVzaW5nIHRoZSA8aT5iPC9pPml0IGVsZW1lbnRzLgorICogR05QVFhGU0laLCBEUFRYRlNJWm4sIERJRVBUWEZuKS4gUmVhZCB0aGUgcmVnaXN0ZXIgaW50byB0aGUgPGk+ZDMyPC9pPiBlbGVtZW50IAorICogdGhlbiByZWFkIG91dCB0aGUgYml0cyB1c2luZyB0aGUgPGk+YjwvaT5pdCBlbGVtZW50cy4KICAqLwogdHlwZWRlZiB1bmlvbiBmaWZvc2l6ZV9kYXRhIHsKIAkvKiogcmF3IHJlZ2lzdGVyIGRhdGEgKi8KQEAgLTk4NCw4ICs5ODUsOCBAQAogCQkgKiAgMidiMTEgIC0gIFJlc2VydmVkCiAJCSAqLwogCQl1bnNpZ25lZCBwcmJfcGVyOjI7Ci0JCS8qKiBUaGVzZSBiaXRzIGNhcHR1cmUgdGhlIGxhdGVzdCB0aW1lIGl0IHRvb2sgZm9yIFZCVVMgdG8gcmFtcCBmcm9tIFZBRFBfU0lOSwotCQkgKiAgdG8gVkFEUF9QUkIuICBUaGUgYml0cyBhcmUgZGVmaW5lZCBpbiB1bml0cyBvZiAzMiBrSHogY2xvY2sgY3ljbGVzIGFzIGZvbGxvd3M6CisJCS8qKiBUaGVzZSBiaXRzIGNhcHR1cmUgdGhlIGxhdGVzdCB0aW1lIGl0IHRvb2sgZm9yIFZCVVMgdG8gcmFtcCBmcm9tIAorCQkgKiAgVkFEUF9TSU5LIHRvIFZBRFBfUFJCLiAKIAkJICogIDB4MDAwICAtICAxIGN5Y2xlcwogCQkgKiAgMHgwMDEgIC0gIDIgY3ljbGVzCiAJCSAqICAweDAwMiAgLSAgMyBjeWNsZXMKQEAgLTExOTUsNyArMTE5Niw2IEBACiAJCXVuc2lnbmVkIHNnb3V0bmFrOjE7CiAJCS8qKiBDbGVhciBHbG9iYWwgT1VUIE5BSyAqLwogCQl1bnNpZ25lZCBjZ291dG5hazoxOwotCiAJCS8qKiBQb3dlci1PbiBQcm9ncmFtbWluZyBEb25lICovCiAJCXVuc2lnbmVkIHB3cm9ucHJnZG9uZToxOwogCQkvKiogUmVzZXJ2ZWQgKi8KQEAgLTEyMDYsOCArMTIwNiwxMCBAQAogCQl1bnNpZ25lZCBpZnJtbnVtOjE7CiAJCS8qKiBOQUsgb24gQmFiYmxlICovCiAJCXVuc2lnbmVkIG5ha29uYmJsZToxOworCQkvKiogRW5hYmxlIENvbnRpbnVlIG9uIEJOQSAqLworCQl1bnNpZ25lZCBlbmNvbnRvbmJuYToxOwogCi0JCXVuc2lnbmVkIHJlc2VydmVkMTdfMzE6MTU7CisJCXVuc2lnbmVkIHJlc2VydmVkMThfMzE6MTQ7CiAJfSBiOwogfSBkY3RsX2RhdGFfdDsKIApAQCAtMTQ5Niw5ICsxNDk4LDggQEAKIAkvKiogRGV2aWNlIE9VVCBFbmRwb2ludCBDb250cm9sIFJlZ2lzdGVyLiA8aT5PZmZzZXQ6QjAwaCArCiAJICogKGVwX251bSAqIDIwaCkgKyAwMGg8L2k+ICovCiAJdm9sYXRpbGUgdWludDMyX3QgZG9lcGN0bDsKLQkvKiogRGV2aWNlIE9VVCBFbmRwb2ludCBGcmFtZSBudW1iZXIgUmVnaXN0ZXIuCTxpPk9mZnNldDoKLQkgKiBCMDBoICsgKGVwX251bSAqIDIwaCkgKyAwNGg8L2k+ICovCi0Jdm9sYXRpbGUgdWludDMyX3QgZG9lcGZuOworCS8qKiBSZXNlcnZlZC4gPGk+T2Zmc2V0OkIwMGggKyAoZXBfbnVtICogMjBoKSArIDA0aDwvaT4gKi8KKwl1aW50MzJfdCByZXNlcnZlZDA0OwogCS8qKiBEZXZpY2UgT1VUIEVuZHBvaW50IEludGVycnVwdCBSZWdpc3Rlci4gPGk+T2Zmc2V0OkIwMGggKwogCSAqIChlcF9udW0gKiAyMGgpICsgMDhoPC9pPiAqLwogCXZvbGF0aWxlIHVpbnQzMl90IGRvZXBpbnQ7CkBAIC0xNjI4LDYgKzE2MjksOCBAQAogCXN0cnVjdCB7CiAJCS8qKiBUcmFuc2ZlciBzaXplICovCiAJCXVuc2lnbmVkIHhmZXJzaXplOjE5OworLyoqIE1heCBwYWNrZXQgY291bnQgZm9yIEVQIChwb3coMiwxMCktMSkgKi8KKyNkZWZpbmUgTUFYX1BLVF9DTlQgMTAyMwogCQkvKiogUGFja2V0IENvdW50ICovCiAJCXVuc2lnbmVkIHBrdGNudDoxMDsKIAkJLyoqIE11bHRpIENvdW50IC0gUGVyaW9kaWMgSU4gZW5kcG9pbnRzICovCkBAIC0xNjkxLDggKzE2OTQsOSBAQAogCXN0cnVjdCB7CiAJCS8qKiBSZWNlaXZlZCBudW1iZXIgb2YgYnl0ZXMgKi8KIAkJdW5zaWduZWQgYnl0ZXM6MTY7Ci0KLQkJdW5zaWduZWQgcmVzZXJ2ZWQxNl8yMjo3OworCQkvKiogTkFLIGJpdCAtIG9ubHkgZm9yIE9VVCBFUHMgKi8KKwkJdW5zaWduZWQgbmFrOjE7CisJCXVuc2lnbmVkIHJlc2VydmVkMTdfMjI6NjsKIAkJLyoqIE11bHRpcGxlIFRyYW5zZmVyIC0gb25seSBmb3IgT1VUIEVQcyAqLwogCQl1bnNpZ25lZCBtdHJmOjE7CiAJCS8qKiBTZXR1cCBQYWNrZXQgcmVjZWl2ZWQgLSBvbmx5IGZvciBPVVQgRVBzICovCkBAIC0xODM0LDYgKzE4MzgsOCBAQAogCiAJLyoqIFNldHVwIFBhY2tldCBEZXRlY3RlZCAtIGlmIHNldCBjbGVhciBOQUsgd2hlbiBxdWV1ZWluZyAqLwogCXVpbnQzMl90IHNwZDsKKwkvKiogSXNvYyBlcCBwb2ludGVyIG9uIHdoaWNoIGluY29tcGxldGUgaGFwcGVucyAqLworCXZvaWQgKmlzb2NfZXA7CiAKIH0gZHdjX290Z19kZXZfaWZfdDsKIApAQCAtMjQ1Niw5ICsyNDYyLDkgQEAKIH0gcGNnY2N0bF9kYXRhX3Q7CiAKIC8qKgotICogVGhpcyB1bmlvbiByZXByZXNlbnRzIHRoZSBiaXQgZmllbGRzIGluIHRoZSBHbG9iYWwgRGF0YSBGSUZPIFNvZnR3YXJlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIuCi0gKiBSZWFkIHRoZSByZWdpc3RlciBpbnRvIHRoZSA8aT5kMzI8L2k+IG1lbWJlciB0aGVuIHNldC9jbGVhciB0aGUKLSAqIGJpdHMgdXNpbmcgdGhlIDxpPmI8L2k+aXQgZWxlbWVudHMuCisgKiBUaGlzIHVuaW9uIHJlcHJlc2VudHMgdGhlIGJpdCBmaWVsZHMgaW4gdGhlIEdsb2JhbCBEYXRhIEZJRk8gU29mdHdhcmUKKyAqIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIuIFJlYWQgdGhlIHJlZ2lzdGVyIGludG8gdGhlIDxpPmQzMjwvaT4gbWVtYmVyIHRoZW4KKyAqIHNldC9jbGVhciB0aGUgYml0cyB1c2luZyB0aGUgPGk+YjwvaT5pdCBlbGVtZW50cy4KICAqLwogdHlwZWRlZiB1bmlvbiBnZGZpZm9jZmdfZGF0YSB7CiAJLyogcmF3IHJlZ2lzdGVyIGRhdGEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvbGludXgvZHdjX290Z19wbGF0LmggYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL2xpbnV4L2R3Y19vdGdfcGxhdC5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3Y19vdGcvdXNiLmggYi9kcml2ZXJzL3VzYi9kd2Nfb3RnL3VzYi5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1jb21jZXJ0bzIwMDAuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1jb21jZXJ0bzIwMDAuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDA4MDc4YTIuLmVjNzY1ZjAKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWNvbWNlcnRvMjAwMC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1jb21jZXJ0bzIwMDAuYwpAQCAtMTAsMTMgKzEwLDExIEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgInhoY2kuaCIKIAotI2luY2x1ZGUgPG1hY2gvY29tY2VydG8tMjAwMC5oPgotI2luY2x1ZGUgPG1hY2gvY29tY2VydG8tMjAwMC9jbGstcnN0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bWFjaC9yZXNldC5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogZXh0ZXJuIGludCB1c2IzX2Nsa19pbnRlcm5hbDsKLQogLyogVVNCIDMuMCBjbG9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgKnVzYjNfY2xrOwogCkBAIC0xMDcsMjAgKzEwNSwyNyBAQAogCiBzdGF0aWMgdm9pZCBjb21jZXJ0b191c2IzX3BoeV9pbml0KHZvaWQpCiB7CisJdTMyIHZhbDsKKwogICAgICAgICB3cml0ZWwoMHgwMEUwMDA4MCwgVVNCM19QSFlfQkFTRSArIDB4MTApOwogCiAJLy9Db25maWd1cmF0aW9uIGZvciBpbnRlcm5hbCBjbG9jawogCWlmKHVzYjNfY2xrX2ludGVybmFsKQogCXsKLQkJd3JpdGVsKDB4NDIwRTgyQTksIFVTQjNfUEhZX0JBU0UgKyAweDIwKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiVVNCMy4wIGNsb2NrIHNlbGVjdGVkOiBpbnRlcm5hbFxuIiwgX19mdW5jX18pOworCisJCWlmKEhBTF9nZXRfcmVmX2NsaygpID09IFJFRl9DTEtfMjRNSFopCisJCQl2YWwgPSAweDQyMEU4MkE4OworCQllbHNlCisJCQl2YWwgPSAweDQyMEU4MkE5OwogCX0KIAllbHNlCiAJewotCQl3cml0ZWwoMHg0MjA5OTI3QSwgVVNCM19QSFlfQkFTRSArIDB4MjApOworCQl2YWwgPSAweDQyMDk5MjdBOwogCQlwcmludGsoS0VSTl9JTkZPICJVU0IzLjAgY2xvY2sgc2VsZWN0ZWQ6IGV4dGVybmFsXG4iLCBfX2Z1bmNfXyk7CiAJfQogCisJd3JpdGVsKHZhbCwgVVNCM19QSFlfQkFTRSArIDB4MjApOwogICAgICAgICB3cml0ZWwoMHg2OUMzNEY1MywgVVNCM19QSFlfQkFTRSArIDB4MjQpOwogICAgICAgICB3cml0ZWwoMHgwMDA1RDgxNSwgVVNCM19QSFlfQkFTRSArIDB4MjgpOwogICAgICAgICB3cml0ZWwoMHgwMDAwMDgwMSwgVVNCM19QSFlfQkFTRSArIDB4MkMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWNvbWNlcnRvMjAwMC5oIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWNvbWNlcnRvMjAwMC5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wbGF0LmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGxhdC5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwppbmRleCA3OWZkNjA2Li5hZDc4MThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCkBAIC0zNDMsNiArMzQzLDE3IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpbXgyX3dkdC4KIAorY29uZmlnIENPTUNFUlRPX1dBVENIRE9HCisJdHJpc3RhdGUgIkNvbWNlcnRvIFdhdGNoZG9nIgorCWRlcGVuZHMgb24gQVJDSF9DT01DRVJUTworCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgd2F0Y2hkb2cgdGltZXIgaW4KKwkgIENvbWNlcnRvIGRldmljZS4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGJlIGJ1aWx0IGFzIGEgbW9kdWxlIGJ5IGNob29zaW5nIE0uCisJICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNvbWNlcnRvX3dkdAorCisKICMgQVZSMzIgQXJjaGl0ZWN0dXJlCiAKIGNvbmZpZyBBVDMyQVA3MDBYX1dEVApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZSBiL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKaW5kZXggZmU4OTNlOS4uMGZmYmI5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCkBAIC01Myw2ICs1Myw3IEBACiBvYmotJChDT05GSUdfTlVDOTAwX1dBVENIRE9HKSArPSBudWM5MDBfd2R0Lm8KIG9iai0kKENPTkZJR19UUzcyWFhfV0FUQ0hET0cpICs9IHRzNzJ4eF93ZHQubwogb2JqLSQoQ09ORklHX0lNWDJfV0RUKSArPSBpbXgyX3dkdC5vCitvYmotJChDT05GSUdfQ09NQ0VSVE9fV0FUQ0hET0cpICs9IGNvbWNlcnRvX3dkdC5vCiAKICMgQVZSMzIgQXJjaGl0ZWN0dXJlCiBvYmotJChDT05GSUdfQVQzMkFQNzAwWF9XRFQpICs9IGF0MzJhcDcwMHhfd2R0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvY29tY2VydG9fd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2NvbWNlcnRvX3dkdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4OWFlYjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3dhdGNoZG9nL2NvbWNlcnRvX3dkdC5jCkBAIC0wLDAgKzEsNDA2IEBACisvKgorICogIGRyaXZlcnMvY2hhci93YXRjaGRvZy9jb21jZXJ0b193ZHQuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSwyMDEzIE1pbmRzcGVlZCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3dkdC5oPgorI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KKworI2RlZmluZSBXRFRfTkFNRQkJCQkJImNvbWNlcnRvX3dkdCIKKyNkZWZpbmUgV0RUX0RFRkFVTFRfVElNRU9VVAkJCQk1CisjZGVmaW5lIFdEVF9NQVhfVElNRU9VVAkJCQkJKDB4ZmZmZmZmZmYgLyBDT01DRVJUT19BSEJDTEspCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIENPTUNFUlRPX0FIQkNMSzsKK3N0YXRpYyBpbnQgd2RfaGVhcnRiZWF0ID0gV0RUX0RFRkFVTFRfVElNRU9VVDsKK3N0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfYXhpOworCittb2R1bGVfcGFyYW0od2RfaGVhcnRiZWF0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh3ZF9oZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gKGRlZmF1bHQ9Il9fTU9EVUxFX1NUUklORyhXRFRfREVGQVVMVF9USU1FT1VUKSAiKSIpOworCisjaWZkZWYgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCittb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOworI2VuZGlmCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNvbWNlcnRvX3dkdF9idXN5Oworc3RhdGljIGNoYXIgZXhwZWN0X2Nsb3NlOworc3RhdGljIHNwaW5sb2NrX3Qgd2R0X2xvY2s7CisKKy8qCisgKiBJbmZvcm0gd2hldGhlciB0aGUgYm9vdCB3YXMgY2F1c2VkIGJ5IEFYSSB3YXRjaGRvZyBvciBub3QuCisgKiBJZiB0aGUgYm9vdCB3YXMgY2F1c2VkIGJ5IEFYSSBXRFQsIHRoZSBXRCBzdGF0dXMgaXMgY2xlYXJlZCBmcm9tCisgKiByZXNldCBjb250cm9sIHJlZ2lzdGVyLgorICovCitzdGF0aWMgaW50IGNvbWNlcnRvX3dkdF9yc3Rfc3RhdHVzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ3ZHRfbG9jaywgZmxhZ3MpOworCisJaWYoX19yYXdfcmVhZGwoR05STF9ERVZJQ0VfU1RBVFVTKSAmIEFYSV9XRF9SU1RfQUNUSVZBVEVEKSB7CisJCV9fcmF3X3dyaXRlbChXRF9TVEFUVVNfQ0xSIHwgX19yYXdfcmVhZGwoREVWSUNFX1JTVF9DTlRSTCksIERFVklDRV9SU1RfQ05UUkwpOworCQlyZXQgPSAxOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndkdF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU2V0IGEgbmV3IGhlYXJ0YmVhdCB2YWx1ZSBmb3IgdGhlIHdhdGNoZG9nIGRldmljZS4gSWYgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcworICogaW5jb3JyZWN0IHdlIGtlZXAgdGhlIG9sZCB2YWx1ZSBhbmQgcmV0dXJuIC1FSU5WQUwuIElmIHN1Y2Nlc3NmdWxsIHdlIHJldHVybiAwLgorICovCitzdGF0aWMgaW50IGNvbWNlcnRvX3dkdF9zZXRfaGVhcnRiZWF0KGludCB0KQoreworCWlmICh0IDwgMSB8fCB0ID4gV0RUX01BWF9USU1FT1VUKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdkX2hlYXJ0YmVhdCA9IHQ7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXcml0ZSB3ZF9oZWFydGJlYXQgdG8gaGlnaCBib3VuZCByZWdpc3Rlci4KKyAqLworc3RhdGljIHZvaWQgY29tY2VydG9fd2R0X3NldF90aW1lb3V0KHZvaWQpCit7CisJX19yYXdfd3JpdGVsKHdkX2hlYXJ0YmVhdCAqIENPTUNFUlRPX0FIQkNMSywgQ09NQ0VSVE9fVElNRVJfV0RUX0hJR0hfQk9VTkQpOworfQorCisvKgorICogRGlzYWJsZSB0aGUgd2F0Y2hkb2cuCisgKi8KK3N0YXRpYyB2b2lkIGNvbWNlcnRvX3dkdF9zdG9wKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgd2R0X2NvbnRyb2w7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2R0X2xvY2ssIGZsYWdzKTsKKworCXdkdF9jb250cm9sID0gX19yYXdfcmVhZGwoQ09NQ0VSVE9fVElNRVJfV0RUX0NPTlRST0wpOworCisJX19yYXdfd3JpdGVsKHdkdF9jb250cm9sICYgfkNPTUNFUlRPX1RJTUVSX1dEVF9DT05UUk9MX1RJTUVSX0VOQUJMRSwgQ09NQ0VSVE9fVElNRVJfV0RUX0NPTlRST0wpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2R0X2xvY2ssIGZsYWdzKTsKKworCWNvbWNlcnRvX3dkdF9zZXRfdGltZW91dCgpOworfQorCisvKgorICogRW5hYmxlIHRoZSB3YXRjaGRvZy4KKyAqLworc3RhdGljIHZvaWQgY29tY2VydG9fd2R0X3N0YXJ0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgd2R0X2NvbnRyb2w7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2R0X2xvY2ssIGZsYWdzKTsKKworCXdkdF9jb250cm9sID0gX19yYXdfcmVhZGwoQ09NQ0VSVE9fVElNRVJfV0RUX0NPTlRST0wpOworCisJX19yYXdfd3JpdGVsKHdkdF9jb250cm9sIHwgQ09NQ0VSVE9fVElNRVJfV0RUX0NPTlRST0xfVElNRVJfRU5BQkxFLCBDT01DRVJUT19USU1FUl9XRFRfQ09OVFJPTCk7CisKKwljb21jZXJ0b19yc3RfY250cmxfc2V0KEFYSV9XRF9SU1RfRU4pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2R0X2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIERpc2FibGUgV0RUIGFuZDoKKyAqIC0gc2V0IG1heC4gcG9zc2libGUgdGltZW91dCB0byBhdm9pZCByZXNldCwgaXQgY2FuIG9jY3VyCisgKiBzaW5jZSBjdXJyZW50IGNvdW50ZXIgdmFsdWUgY291bGQgYmUgYmlnZ2VyIHRoZW4KKyAqIGhpZ2ggYm91bmQgb25lIGF0IHRoZSBtb21lbnQKKyAqIEZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGF0IHN0YXJ0ICh3aGlsZSBjb25maWd1cmF0aW9uKSwKKyAqIGFuZCBpdCdzIHNhZmUgbm90IHRvIGRpc2FibGUvZW5hYmxlIElSUXMuCisgKi8KK3N0YXRpYyB2b2lkIGNvbWNlcnRvX3dkdF9jb25maWcodm9pZCkKK3sKKwljb21jZXJ0b193ZHRfc3RvcCgpOworCisJX19yYXdfd3JpdGVsKH4wLCBDT01DRVJUT19USU1FUl9XRFRfSElHSF9CT1VORCk7CQkJLyogd3JpdGUgbWF4IHRpbW91dCAqLworfQorCisvKgorICogV2F0Y2hkb2cgZGV2aWNlIGlzIG9wZW5lZCwgYW5kIHdhdGNoZG9nIHN0YXJ0cyBydW5uaW5nLgorICovCitzdGF0aWMgaW50IGNvbWNlcnRvX3dkdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZjb21jZXJ0b193ZHRfYnVzeSkpCisJCXJldHVybiAtRUJVU1k7CisKKwljb21jZXJ0b193ZHRfc2V0X3RpbWVvdXQoKTsKKwljb21jZXJ0b193ZHRfc3RhcnQoKTsKKworCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKK30KKworLyoKKyAqIFJlbGVhc2UgdGhlIHdhdGNoZG9nIGRldmljZS4KKyAqIElmIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBOT1QgZGVmaW5lZCBhbmQgZXhwZWN0X2Nsb3NlID09IDQyCisgKiBpLmUuIG1hZ2ljIGNoYXIgJ1YnIGhhcyBiZWVuIHBhc3NlZCB3aGlsZSB3cml0ZSgpIHRoZW4gdGhlIHdhdGNoZG9nCisgKiBpcyBhbHNvIGRpc2FibGVkLgorICovCitzdGF0aWMgaW50IGNvbWNlcnRvX3dkdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmIChleHBlY3RfY2xvc2UgPT0gNDIpIHsKKwkJY29tY2VydG9fd2R0X3N0b3AoKTsJLyogZGlzYWJsZSB0aGUgd2F0Y2hkb2cgd2hlbiBmaWxlIGlzIGNsb3NlZCAqLworCQljbGVhcl9iaXQoMCwgJmNvbWNlcnRvX3dkdF9idXN5KTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9DUklUICIlczogY2xvc2VkIHVuZXhwZWN0ZWRseS4gV0RUIHdpbGwgbm90IHN0b3AhXG4iLCBXRFRfTkFNRSk7CisJfQorCisJZXhwZWN0X2Nsb3NlID0gMDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhhbmRsZSBjb21tYW5kcyBmcm9tIHVzZXItc3BhY2UuCisgKi8KK3N0YXRpYyBsb25nIGNvbWNlcnRvX3dkdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdWludCBjbWQsIHVsb25nIGFyZykKK3sKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlpbnQgX191c2VyICpwID0gYXJncDsKKwlpbnQgbmV3X3ZhbHVlOworCWludCBlcnI7CisJc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGNvbWNlcnRvX3dkdF9pbmZvID0geworCQkub3B0aW9ucyA9IAlXRElPRl9TRVRUSU1FT1VUIHwKKwkJCQlXRElPRl9NQUdJQ0NMT1NFIHwKKwkJCQlXRElPRl9LRUVQQUxJVkVQSU5HLAorCQkuZmlybXdhcmVfdmVyc2lvbiA9IDEsCisJfTsKKworCXN3aXRjaChjbWQpIHsKKwljYXNlIFdESU9DX0tFRVBBTElWRToKKwkJY29tY2VydG9fd2R0X3NldF90aW1lb3V0KCk7CisJCWJyZWFrOworCisJY2FzZSBXRElPQ19HRVRTVVBQT1JUOgorCQlzdHJuY3B5KGNvbWNlcnRvX3dkdF9pbmZvLmlkZW50aXR5LCBXRFRfTkFNRSwgc2l6ZW9mKGNvbWNlcnRvX3dkdF9pbmZvLmlkZW50aXR5KSk7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmNvbWNlcnRvX3dkdF9pbmZvLCBzaXplb2YoY29tY2VydG9fd2R0X2luZm8pKSAhPSAwKSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJZ290byBlcnI7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX1NFVFRJTUVPVVQ6CisJCWlmIChnZXRfdXNlcihuZXdfdmFsdWUsIHApKSB7CisJCQllcnIgPSAtRUZBVUxUOworCQkJZ290byBlcnI7CisJCX0KKworCQlpZiAoY29tY2VydG9fd2R0X3NldF9oZWFydGJlYXQobmV3X3ZhbHVlKSkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJY29tY2VydG9fd2R0X3NldF90aW1lb3V0KCk7CisKKwkJcmV0dXJuIHB1dF91c2VyKHdkX2hlYXJ0YmVhdCwgcCk7CisJCWJyZWFrOworCisJY2FzZSBXRElPQ19HRVRUSU1FT1VUOgorCQlyZXR1cm4gcHV0X3VzZXIod2RfaGVhcnRiZWF0LCBwKTsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX0dFVFNUQVRVUzoKKwkJcmV0dXJuIHB1dF91c2VyKDAsIHApOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKKwkJcmV0dXJuIHB1dF91c2VyKGNvbWNlcnRvX3dkdF9yc3Rfc3RhdHVzKCksIHApOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfU0VUT1BUSU9OUzoKKwkJaWYgKGdldF91c2VyKG5ld192YWx1ZSwgcCkpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCWlmIChuZXdfdmFsdWUgJiBXRElPU19ESVNBQkxFQ0FSRCkKKwkJCWNvbWNlcnRvX3dkdF9zdG9wKCk7CisKKwkJaWYgKG5ld192YWx1ZSAmIFdESU9TX0VOQUJMRUNBUkQpCisJCQljb21jZXJ0b193ZHRfc3RhcnQoKTsKKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FTk9JT0NUTENNRDsKKwkJZ290byBlcnI7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworCitlcnI6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFBhdCB0aGUgd2F0Y2hkb2cgd2hlbmV2ZXIgZGV2aWNlIGlzIHdyaXR0ZW4gdG8uCisgKi8KK3N0YXRpYyBzc2l6ZV90IGNvbWNlcnRvX3dkdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCit7CisJaWYgKGxlbikgeworCQlpZiAoIW5vd2F5b3V0KSB7CisJCQlzaXplX3QgaTsKKwkJCWNoYXIgYzsKKworCQkJLyogaW4gY2FzZSBpdCB3YXMgc2V0IGxvbmcgYWdvICovCisJCQlleHBlY3RfY2xvc2UgPSAwOworCisJCQlmb3IgKGkgPSAwOyBpICE9IGxlbjsgaSsrKSB7CisJCQkJaWYgKGdldF91c2VyKGMsIGJ1ZiArIGkpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJCWlmIChjID09ICdWJykKKwkJCQkJZXhwZWN0X2Nsb3NlID0gNDI7CisJCQl9CisJCX0KKworCQljb21jZXJ0b193ZHRfc2V0X3RpbWVvdXQoKTsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjb21jZXJ0b193ZHRfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmxsc2VlawkJPSBub19sbHNlZWssCisJLnVubG9ja2VkX2lvY3RsCT0gY29tY2VydG9fd2R0X2lvY3RsLAorCS5vcGVuCQk9IGNvbWNlcnRvX3dkdF9vcGVuLAorCS5yZWxlYXNlCT0gY29tY2VydG9fd2R0X3JlbGVhc2UsCisJLndyaXRlCQk9IGNvbWNlcnRvX3dkdF93cml0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBjb21jZXJ0b193ZHRfbWlzY2RldiA9IHsKKwkubWlub3IJCT0gV0FUQ0hET0dfTUlOT1IsCisJLm5hbWUJCT0gV0RUX05BTUUsCisJLmZvcHMJCT0gJmNvbWNlcnRvX3dkdF9mb3BzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY29tY2VydG9fd2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJlczsKKworCWlmIChjb21jZXJ0b193ZHRfbWlzY2Rldi5wYXJlbnQpCisJCXJldHVybiAtRUJVU1k7CisKKwljbGtfYXhpID0gY2xrX2dldChOVUxMLCAiYXhpIik7CisKKwlpZiAoSVNfRVJSKGNsa19heGkpKXsKKwkJcHJfZXJyKCIlczogVW5hYmxlIHRvIG9idGFpbiBheGkgY2xvY2s6ICVsZFxuIixfX2Z1bmNfXyxQVFJfRVJSKGNsa19heGkpKTsKKwkJLyogU3lzdGVtIGNhbm5vdCBwcm9jZWVkIGZyb20gaGVyZSAqLworCQlCVUcoKTsKKwl9CisKKwlyZXMgPSBjbGtfZW5hYmxlKGNsa19heGkpOworCWlmIChyZXMpeworCQlwcl9lcnIoIiVzOiBheGkgY2xvY2sgZmFpbGVkIHRvIGVuYWJsZTpcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnJfY2xrOworCX0KKworCUNPTUNFUlRPX0FIQkNMSyA9IGNsa19nZXRfcmF0ZShjbGtfYXhpKTsKKworCWNvbWNlcnRvX3dkdF9taXNjZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJY29tY2VydG9fd2R0X2NvbmZpZygpOworCisJcmVzID0gbWlzY19yZWdpc3RlcigmY29tY2VydG9fd2R0X21pc2NkZXYpOworCWlmIChyZXMpCisJCWdvdG8gZXJyX21pc2M7CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogc3VwcG9ydCByZWdpc3RlcmVkXG4iLCBXRFRfTkFNRSk7CisKKyAgICAgICAgLyogY2hlY2sgdGhhdCB0aGUgaGVhcnRiZWF0IHZhbHVlIGlzIHdpdGhpbiByYW5nZTsgaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCisgICAgICAgIGlmIChjb21jZXJ0b193ZHRfc2V0X2hlYXJ0YmVhdCh3ZF9oZWFydGJlYXQpKSB7CisgICAgICAgICAgICAgICAgY29tY2VydG9fd2R0X3NldF9oZWFydGJlYXQoV0RUX0RFRkFVTFRfVElNRU9VVCk7CisKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogd2RfaGVhcnRiZWF0IHZhbHVlIGlzIG91dCBvZiByYW5nZTogMS4uJWx1LCB1c2luZyAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFdEVF9OQU1FLCBXRFRfTUFYX1RJTUVPVVQsIFdEVF9ERUZBVUxUX1RJTUVPVVQpOworICAgICAgICB9CisKKwlyZXR1cm4gMDsKKworZXJyX21pc2M6CisJY2xrX2Rpc2FibGUoY2xrX2F4aSk7CitlcnJfY2xrOgorCWNsa19wdXQoY2xrX2F4aSk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBjb21jZXJ0b193ZHRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJlczsKKworCisJY2xrX2Rpc2FibGUoY2xrX2F4aSk7CisJY2xrX3B1dChjbGtfYXhpKTsKKwlyZXMgPSBtaXNjX2RlcmVnaXN0ZXIoJmNvbWNlcnRvX3dkdF9taXNjZGV2KTsKKwlpZiAoIXJlcykKKwkJY29tY2VydG9fd2R0X21pc2NkZXYucGFyZW50ID0gTlVMTDsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNvbWNlcnRvX3dkdF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IGNvbWNlcnRvX3dkdF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKGNvbWNlcnRvX3dkdF9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IFdEVF9OQU1FLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgY29tY2VydG9fd2R0X2luaXQodm9pZCkKK3sKKyAgICAgICAgc3Bpbl9sb2NrX2luaXQoJndkdF9sb2NrKTsKKworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmNvbWNlcnRvX3dkdF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY29tY2VydG9fd2R0X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmY29tY2VydG9fd2R0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGNvbWNlcnRvX3dkdF9pbml0KTsKK21vZHVsZV9leGl0KGNvbWNlcnRvX3dkdF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiTWluZHNwZWVkIFRlY2hub2xvZ2llcywgSW5jLiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJXYXRjaGRvZyBkcml2ZXIgZm9yIENvbWNlcnRvIDIwMDAgZGV2aWNlcyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTX01JU0NERVYoV0FUQ0hET0dfTUlOT1IpOwpkaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuYwppbmRleCBlZDE5NGYwLi5mODg5OWJkIDEwMDY0NAotLS0gYS9mcy9zcGxpY2UuYworKysgYi9mcy9zcGxpY2UuYwpAQCAtMzM2LDcgKzMzNiwxMSBAQAogCS8qCiAJICogTG9va3VwIHRoZSAoaG9wZWZ1bGx5KSBmdWxsIHJhbmdlIG9mIHBhZ2VzIHdlIG5lZWQuCiAJICovCisjaWZkZWYgQ09ORklHX0NPTUNFUlRPX1NQTElDRV9SRUFEX05PQ09OVElHCisJc3BkLm5yX3BhZ2VzID0gZmluZF9nZXRfcGFnZXMobWFwcGluZywgaW5kZXgsIG5yX3BhZ2VzLCBzcGQucGFnZXMpOworI2Vsc2UKIAlzcGQubnJfcGFnZXMgPSBmaW5kX2dldF9wYWdlc19jb250aWcobWFwcGluZywgaW5kZXgsIG5yX3BhZ2VzLCBzcGQucGFnZXMpOworI2VuZGlmCiAJaW5kZXggKz0gc3BkLm5yX3BhZ2VzOwogCiAJLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaCBiL2luY2x1ZGUvbGludXgvYmFja2luZy1kZXYuaAppbmRleCBiMTAzOGJkLi5hMTY1YWI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JhY2tpbmctZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9iYWNraW5nLWRldi5oCkBAIC0xMDgsNiArMTA4LDEwIEBACiAJc3RydWN0IGRlbnRyeSAqZGVidWdfZGlyOwogCXN0cnVjdCBkZW50cnkgKmRlYnVnX3N0YXRzOwogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9NODZYWFgKKwl1bnNpZ25lZCBpbnQgY3B1MF9iaW5kOworI2VuZGlmCiB9OwogCiBpbnQgYmRpX2luaXQoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3R1bm5lbC5oIGIvaW5jbHVkZS9saW51eC9pZl90dW5uZWwuaAppbmRleCAxNmI5MmQwLi45NDUzZWMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3R1bm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfdHVubmVsLmgKQEAgLTIxLDYgKzIxLDEwIEBACiAjZGVmaW5lIFNJT0NBREQ2UkQgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyA5KQogI2RlZmluZSBTSU9DREVMNlJEICAgICAgKFNJT0NERVZQUklWQVRFICsgMTApCiAjZGVmaW5lIFNJT0NDSEc2UkQgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyAxMSkKKyNkZWZpbmUgU0lPQ0dFVDRSRCAgICAgIChTSU9DREVWUFJJVkFURSArIDEyKSAgCisjZGVmaW5lIFNJT0NBREQ0UkQgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyAxMykgCisjZGVmaW5lIFNJT0NERUw0UkQgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyAxNCkKKyNkZWZpbmUgU0lPQ0NIRzRSRCAgICAgIChTSU9DREVWUFJJVkFURSArIDE1KQogCiAjZGVmaW5lIEdSRV9DU1VNCV9fY3B1X3RvX2JlMTYoMHg4MDAwKQogI2RlZmluZSBHUkVfUk9VVElORwlfX2NwdV90b19iZTE2KDB4NDAwMCkKQEAgLTYzLDYgKzY3LDIwIEBACiAJX191MTYJCQlyZWxheV9wcmVmaXhsZW47CiB9OwogCisvKiBpcDYgdG5sIDRyZCBwYXJtIC1zdGFydCAgKi8gCitzdHJ1Y3QgaXA2X3RubF80cmQgeworICAgICAgIF9fYmUzMiAgICAgICAgICAgICAgICAgIHByZWZpeDsKKyAgICAgICBzdHJ1Y3QgaW42X2FkZHIgICAgICAgICByZWxheV9wcmVmaXg7CisgICAgICAgc3RydWN0IGluNl9hZGRyICAgICAgICAgcmVsYXlfc3VmZml4OworICAgICAgIF9fdTE2ICAgICAgICAgICAgICAgICAgIHByZWZpeGxlbjsKKyAgICAgICBfX3UxNiAgICAgICAgICAgICAgICAgICByZWxheV9wcmVmaXhsZW47CisgICAgICAgX191MTYgICAgICAgICAgICAgICAgICAgcmVsYXlfc3VmZml4bGVuOworICAgICAgIF9fdTE2ICAgICAgICAgICAgICAgICAgIHBzaWRfb2Zmc2V0bGVuOworICAgICAgIF9fdTE2ICAgICAgICAgICAgICAgICAgIGVhYml0X2xlbjsKKyAgICAgICBfX3UxNiAgICAgICAgICAgICAgICAgICBlbnRyeV9udW07Cit9OworLyogaXA2IHRubCA0cmQgcGFybSAtZW5kICAqLyAKKwogZW51bSB7CiAJSUZMQV9HUkVfVU5TUEVDLAogCUlGTEFfR1JFX0xJTkssCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwNl90dW5uZWwuaCBiL2luY2x1ZGUvbGludXgvaXA2X3R1bm5lbC5oCmluZGV4IDU5NzBkYWY5Li41NTRlMjRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lwNl90dW5uZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwNl90dW5uZWwuaApAQCAtMzIsNCArMzIsNTAgQEAKIH07CiAKIAorc3RydWN0IGlwNl80cmRfbWFwX21zZyB7CisgICAgICAgX191MzIgcmVzZXQ7CisgICAgICAgX191MzIgaWZpbmRleDsKKyAgICAgICBfX2JlMzIgcHJlZml4OworICAgICAgIF9fdTE2IHByZWZpeGxlbjsKKyAgICAgICBzdHJ1Y3QgaW42X2FkZHIgcmVsYXlfcHJlZml4OworICAgICAgIHN0cnVjdCBpbjZfYWRkciByZWxheV9zdWZmaXg7CisgICAgICAgX191MTYgcmVsYXlfcHJlZml4bGVuOworICAgICAgIF9fdTE2IHJlbGF5X3N1ZmZpeGxlbjsKKyAgICAgICBfX3UxNiBwc2lkX29mZnNldGxlbjsKKyAgICAgICBfX3UxNiBlYWJpdF9sZW47CisgICAgICAgX191MTYgZW50cnlfbnVtOworfTsKKworc3RydWN0IGlwNl90bmxfNHJkX21hcF9ydWxlIHsKKyAgICAgICBfX2JlMzIgcHJlZml4OworICAgICAgIF9fdTE2IHByZWZpeGxlbjsKKyAgICAgICBzdHJ1Y3QgaW42X2FkZHIgcmVsYXlfcHJlZml4OworICAgICAgIHN0cnVjdCBpbjZfYWRkciByZWxheV9zdWZmaXg7CisgICAgICAgX191MTYgcmVsYXlfcHJlZml4bGVuOworICAgICAgIF9fdTE2IHJlbGF5X3N1ZmZpeGxlbjsKKyAgICAgICBfX3UxNiBwc2lkX29mZnNldGxlbjsKKyAgICAgICBfX3UxNiBlYWJpdF9sZW47CisgICAgICAgX191MTYgZW50cnlfbnVtOworICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbXJfbGlzdDsKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCitzdHJ1Y3QgaXA2X3RubF80cmRfcGFybSB7CisgICAgICAgX19iZTMyIHByZWZpeDsKKyAgICAgICBzdHJ1Y3QgaW42X2FkZHIgcmVsYXlfcHJlZml4OworICAgICAgIHN0cnVjdCBpbjZfYWRkciByZWxheV9zdWZmaXg7CisgICAgICAgX191MTYgcHJlZml4bGVuOworICAgICAgIF9fdTE2IHJlbGF5X3ByZWZpeGxlbjsKKyAgICAgICBfX3UxNiByZWxheV9zdWZmaXhsZW47CisgICAgICAgX19iZTMyIGxhZGRyNDsKKyAgICAgICBfX3UxNiBwb3J0X3NldF9pZDsKKyAgICAgICBfX3UxNiBwb3J0X3NldF9pZF9sZW47CisgICAgICAgX191MTYgcHNpZF9vZmZzZXRsZW47CisgICAgICAgX191MTYgZWFiaXRfbGVuOworCisgICAgICAgc3RydWN0IGxpc3RfaGVhZCBtYXBfbGlzdDsKKyAgICAgICByd2xvY2tfdCBtYXBfbG9jazsKK307CisjZW5kaWYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCBhZTQ1MWY4Li4zZmE5M2IxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTIwNDgsNiArMjA0OCw5IEBACiBleHRlcm4gaW50CQluZXRpZl9yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQJCW5ldGlmX3J4X25pKHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludAkJbmV0aWZfcmVjZWl2ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7CisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9DT01DRVJUTykKK2V4dGVybiBpbnQgICAgICAgICAgICAgIGNhcHR1cmVfcmVjZWl2ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7CisjZW5kaWYKIGV4dGVybiBncm9fcmVzdWx0X3QJZGV2X2dyb19yZWNlaXZlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gZ3JvX3Jlc3VsdF90CW5hcGlfc2tiX2ZpbmlzaChncm9fcmVzdWx0X3QgcmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL0tidWlsZCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL0tidWlsZAppbmRleCBhMWI0MTBjLi5lOTFjMTE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvS2J1aWxkCkBAIC00NSw2ICs0NSw3IEBACiBoZWFkZXIteSArPSB4dF9oZWxwZXIuaAogaGVhZGVyLXkgKz0geHRfaXByYW5nZS5oCiBoZWFkZXIteSArPSB4dF9pcHZzLmgKK2hlYWRlci15ICs9IHh0X2xheWVyNy5oCiBoZWFkZXIteSArPSB4dF9sZW5ndGguaAogaGVhZGVyLXkgKz0geHRfbGltaXQuaAogaGVhZGVyLXkgKz0geHRfbWFjLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaAppbmRleCBlYWVlYTNmLi4zY2ExZjQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oCkBAIC04OCw5ICs4OCwxMSBAQAogCUlQU19QRVJNQU5FTlRfQklUID0gMTMsCiAJSVBTX1BFUk1BTkVOVCA9ICgxIDw8IElQU19QRVJNQU5FTlRfQklUKSwKIAorI2lmZGVmIENPTkZJR19DT01DRVJUT19GUAogCS8qIENvbm5lY3Rpb24gaXMgYXNzdXJlZCBieSBEUEkgYXBwbGljYXRpb24gKi8KIAlJUFNfRFBJX0FMTE9XRURfQklUID0gMTQsCiAJSVBTX0RQSV9BTExPV0VEID0gKDEgPDwgSVBTX0RQSV9BTExPV0VEX0JJVCksCisjZW5kaWYKIH07CiAKIC8qIENvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnQgdHlwZXMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvbmZfbmF0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L25mX25hdC5oCmluZGV4IDdhODYxZDAuLmE3Mjc1YjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvbmZfbmF0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9uZl9uYXQuaApAQCAtNyw2ICs3LDcgQEAKICNkZWZpbmUgSVBfTkFUX1JBTkdFX1BST1RPX1NQRUNJRklFRCAyCiAjZGVmaW5lIElQX05BVF9SQU5HRV9QUk9UT19SQU5ET00gNAogI2RlZmluZSBJUF9OQVRfUkFOR0VfUEVSU0lTVEVOVCA4CisjZGVmaW5lIElQX05BVF9SQU5HRV80UkRfTkFQVCAxNgogCiAvKiBUaGUgcHJvdG9jb2wtc3BlY2lmaWMgbWFuaXB1bGFibGUgcGFydHMgb2YgdGhlIHR1cGxlLiAqLwogdW5pb24gbmZfY29ubnRyYWNrX21hbl9wcm90byB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L0tidWlsZCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvS2J1aWxkCmluZGV4IGJkMDk1YmMuLmI4OGMwMDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvS2J1aWxkCkBAIC0xLDYgKzEsNyBAQAogaGVhZGVyLXkgKz0gaXA2X3RhYmxlcy5oCiBoZWFkZXIteSArPSBpcDZ0X0hMLmgKIGhlYWRlci15ICs9IGlwNnRfTE9HLmgKK2hlYWRlci15ICs9IGlwNnRfTlBULmgKIGhlYWRlci15ICs9IGlwNnRfUkVKRUNULmgKIGhlYWRlci15ICs9IGlwNnRfYWguaAogaGVhZGVyLXkgKz0gaXA2dF9mcmFnLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9OUFQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9OUFQuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNzYzMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X05QVC5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZm5kZWYgX19ORVRGSUxURVJfSVA2VF9OUFQKKyNkZWZpbmUgX19ORVRGSUxURVJfSVA2VF9OUFQKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisKK3N0cnVjdCBpcDZ0X25wdF90Z2luZm8geworCXVuaW9uIG5mX2luZXRfYWRkcglzcmNfcGZ4OworCXVuaW9uIG5mX2luZXRfYWRkcglkc3RfcGZ4OworCV9fdTgJCQlzcmNfcGZ4X2xlbjsKKwlfX3U4CQkJZHN0X3BmeF9sZW47CisJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBrZXJuZWwgKi8KKwlfX3N1bTE2CQkJYWRqdXN0bWVudDsKK307CisKKyNlbmRpZiAvKiBfX05FVEZJTFRFUl9JUDZUX05QVCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKaW5kZXggNTExZmQ0My4uODBhMGUyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCkBAIC0xMTksNyArMTE5LDEyIEBACiAjZGVmaW5lIFJUTV9HRVREQ0IgUlRNX0dFVERDQgogCVJUTV9TRVREQ0IsCiAjZGVmaW5lIFJUTV9TRVREQ0IgUlRNX1NFVERDQgotCisgICAgICAgUlRNX05FVzRSRCA9IDgwLAorI2RlZmluZSBSVE1fTkVXNFJEICAgICAgUlRNX05FVzRSRAorICAgICAgIFJUTV9ERUw0UkQsCisjZGVmaW5lIFJUTV9ERUw0UkQgICAgICBSVE1fREVMNFJECisgICAgICAgUlRNX0dFVDRSRCwKKyNkZWZpbmUgUlRNX0dFVDRSRCAgICAgIFJUTV9HRVQ0UkQKIAlfX1JUTV9NQVgsCiAjZGVmaW5lIFJUTV9NQVgJCSgoKF9fUlRNX01BWCArIDMpICYgfjMpIC0gMSkKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCAxNzBhMmY5Li45NjM0ODI2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC00NzEsNiArNDcxLDExIEBACiAJc2tfYnVmZl9kYXRhX3QJCWVuZDsKIAl1bnNpZ25lZCBjaGFyCQkqaGVhZCwKIAkJCQkqZGF0YTsKKyNpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT19DVVNUT01fU0tCX0xBWU9VVCkKKwl1bnNpZ25lZCBjaGFyIAkJKm1zcGRfZGF0YTsKKwlfX3UzMiAJCQltc3BkX2xlbjsKKwlfX3UzMiAJCQltc3BkX29mc3Q7CisjZW5kaWYKIAl1bnNpZ25lZCBpbnQJCXRydWVzaXplOwogCWF0b21pY190CQl1c2VyczsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9kZXNpZ253YXJlLmggYi9pbmNsdWRlL2xpbnV4L3NwaS9kZXNpZ253YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MwMzM1YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL2Rlc2lnbndhcmUuaApAQCAtMCwwICsxLDE1IEBACisvKgorICogZGVzaWdud2FyZS5oIC0gcGxhdGZvcm0gZ2x1ZSBmb3IgdGhlIFN5bm9wc3lzIERlc2lnbldhcmUgU1BJIGNvbnRyb2xsZXIKKyAqLworCisjZGVmaW5lICAgICAgICBDTEtfTkFNRSAgICAgICAxMAorI2RlZmluZSAgICAgICAgVFhfRklGT19ERVBUSCAgOAorI2RlZmluZSAgICAgICAgUlhfRklGT19ERVBUSCAgOAorCitzdHJ1Y3Qgc3BpX2NvbnRyb2xsZXJfcGRhdGEgeworCWludCB1c2VfZG1hOworCWludCBudW1fY2hpcHNlbGVjdHM7CisJaW50IGJ1c19udW07CisJdTMyIG1heF9mcmVxOworCWNoYXIgY2xrX25hbWVbQ0xLX05BTUVdOworfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpMi9zcGkuaCBiL2luY2x1ZGUvbGludXgvc3BpMi9zcGkuaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcC5oIGIvaW5jbHVkZS9uZXQvaXAuaAppbmRleCBlY2EwZWY3Li42NjE2YmE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcC5oCisrKyBiL2luY2x1ZGUvbmV0L2lwLmgKQEAgLTQwOCw2ICs0MDgsNyBAQAogCUlQX0RFRlJBR19WU19GV0QsCiAJSVBfREVGUkFHX0FGX1BBQ0tFVCwKIAlJUF9ERUZSQUdfTUFDVkxBTiwKKwlJUF9ERUZSQUdfSVA2X1ROTF80UkQgLyogVXNlZCB0byBzdXBwb3J0IFBvc3QgRnJhZ21lbnRhdGlvbiBmb3IgNG82IHR1bm5lbHMgKi8KIH07CiAKIGludCBpcF9kZWZyYWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHVzZXIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oIGIvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oCmluZGV4IDUwMGU0NDkuLjY4MjA1ZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaAorKysgYi9pbmNsdWRlL25ldC9pcDZfdHVubmVsLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19JTkVUNl9JUFNFQ19PRkZMT0FEKQogCXUzMiBnZW5pZDsKICNlbmRpZgorICAgICAgIHN0cnVjdCBpcDZfdG5sXzRyZF9wYXJtIGlwNHJkOyAvKiA0cmQgcGFyYW1ldGVycyBmb3IgdGhlIHR1bm5lbCAqLyAKIH07CiAKIC8qIFR1bm5lbCBlbmNhcHN1bGF0aW9uIGxpbWl0IGRlc3RpbmF0aW9uIHN1Yi1vcHRpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3VkcC5oIGIvaW5jbHVkZS9uZXQvdWRwLmgKaW5kZXggM2IyODVmNC4uMDA5YzZiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdWRwLmgKKysrIGIvaW5jbHVkZS9uZXQvdWRwLmgKQEAgLTE5MSw2ICsxOTEsOSBAQAogZXh0ZXJuIGludCB1ZHBfbGliX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkJICAgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbiwKIAkJCSAgICAgIGludCAoKnB1c2hfcGVuZGluZ19mcmFtZXMpKHN0cnVjdCBzb2NrICopKTsKK2V4dGVybiBpbnQgCXVkcDZfbGliX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJCSAgIGNoYXIgX191c2VyICpvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4sCisJCQkJICAgaW50ICgqcHVzaF9wZW5kaW5nX2ZyYW1lcykoc3RydWN0IHNvY2sgKikpOwogZXh0ZXJuIHN0cnVjdCBzb2NrICp1ZHA0X2xpYl9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgc2FkZHIsIF9fYmUxNiBzcG9ydCwKIAkJCQkgICAgX19iZTMyIGRhZGRyLCBfX2JlMTYgZHBvcnQsCiAJCQkJICAgIGludCBkaWYpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oCmluZGV4IDAxN2ExY2IuLmFkZDkxYzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3hmcm0uaAorKysgYi9pbmNsdWRlL25ldC94ZnJtLmgKQEAgLTE1MTYsNiArMTUxNiwxMCBAQAogZXh0ZXJuIGludCB4ZnJtNF90dW5uZWxfZGVyZWdpc3RlcihzdHJ1Y3QgeGZybV90dW5uZWwgKmhhbmRsZXIsIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7CiBleHRlcm4gaW50IHhmcm02X2V4dHJhY3RfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludCB4ZnJtNl9leHRyYWN0X2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKy8qIE5BVC1UIGNoYW5nZXMgU3RhcnQgKi8KK2V4dGVybiBpbnQgeGZybTZfcmN2X2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpLAorCQkJICAgaW50IGVuY2FwX3R5cGUpOworLyogTkFULVQgY2hhbmdlcyBFbmQgKi8KIGV4dGVybiBpbnQgeGZybTZfcmN2X3NwaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSk7CiBleHRlcm4gaW50IHhmcm02X3RyYW5zcG9ydF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGFzeW5jKTsKIGV4dGVybiBpbnQgeGZybTZfcmN2KHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTUzNCwxMiArMTUzOCwyMSBAQAogCiAjaWZkZWYgQ09ORklHX1hGUk0KIGV4dGVybiBpbnQgeGZybTRfdWRwX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCB4ZnJtNl91ZHBfZW5jYXBfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IHhmcm1fdXNlcl9wb2xpY3koc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgdTggX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IHhmcm1fdXNlcl9wb2xpY3koc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgdTggX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCiB7CiAgCXJldHVybiAtRU5PUFJPVE9PUFQ7CiB9IAorLyogTkFULVQgY2hhbmdlcyBTdGFydCAqLworc3RhdGljIGlubGluZSBpbnQgeGZybTZfdWRwX2VuY2FwX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCit7CisJLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gMDsKK30KKy8qIE5BVC1UIGNoYW5nZXMgRW5kICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IHhmcm00X3VkcF9lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpkaWZmIC0tZ2l0IGEvbW0vYmFja2luZy1kZXYuYyBiL21tL2JhY2tpbmctZGV2LmMKaW5kZXggMmI0OWRkMi4uMDQ2Mjg5MSAxMDA2NDQKLS0tIGEvbW0vYmFja2luZy1kZXYuYworKysgYi9tbS9iYWNraW5nLWRldi5jCkBAIC0yMjUsMTIgKzIyNSw0MCBAQAogfQogQkRJX1NIT1cobWF4X3JhdGlvLCBiZGktPm1heF9yYXRpbykKIAorI2lmZGVmIENPTkZJR19BUkNIX004NlhYWAorc3RhdGljIHNzaXplX3QgY3B1MF9iaW5kX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBpbnQgZmxhZzsKKworCWZsYWcgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKwlpZiAoZmxhZykKKwkJYmRpLT5jcHUwX2JpbmQgPSAxOworCWVsc2UKKwkJYmRpLT5jcHUwX2JpbmQgPSAwOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBjcHUwX2JpbmRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqcGFnZSkKK3sKKwlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gc25wcmludGYocGFnZSwgUEFHRV9TSVpFLTEsICIlZFxuIiwgYmRpLT5jcHUwX2JpbmQpOworfQorI2VuZGlmIC8qIENPTkZJR19BUkNIX004NlhYWCAqLworCiAjZGVmaW5lIF9fQVRUUl9SVyhhdHRyKSBfX0FUVFIoYXR0ciwgMDY0NCwgYXR0ciMjX3Nob3csIGF0dHIjI19zdG9yZSkKIAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGJkaV9kZXZfYXR0cnNbXSA9IHsKIAlfX0FUVFJfUlcocmVhZF9haGVhZF9rYiksCiAJX19BVFRSX1JXKG1pbl9yYXRpbyksCiAJX19BVFRSX1JXKG1heF9yYXRpbyksCisjaWZkZWYgQ09ORklHX0FSQ0hfTTg2WFhYCisJX19BVFRSX1JXKGNwdTBfYmluZCksCisjZW5kaWYKIAlfX0FUVFJfTlVMTCwKIH07CiAKQEAgLTQ3OCw2ICs1MDYsMTAgQEAKIAkJCQl3cml0ZWJhY2tfaW5vZGVzX3diKCZiZGktPndiLCAxMDI0LAogCQkJCQkJICAgIFdCX1JFQVNPTl9GT1JLRVJfVEhSRUFEKTsKIAkJCX0gZWxzZSB7CisjaWZkZWYgQ09ORklHX0FSQ0hfTTg2WFhYCisJCQkJaWYgKGJkaS0+Y3B1MF9iaW5kKQorCQkJCQlrdGhyZWFkX2JpbmQodGFzaywgMCk7CisjZW5kaWYKIAkJCQkvKgogCQkJCSAqIFRoZSBzcGlubG9jayBtYWtlcyBzdXJlIHdlIGRvIG5vdCBsb3NlCiAJCQkJICogd2FrZS11cHMgd2hlbiByYWNpbmcgd2l0aCAnYmRpX3F1ZXVlX3dvcmsoKScuCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDU3Mzg2NTQuLjAzMDg2MDEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC0zMzY3LDYgKzMzNjcsNTIgQEAKIH0KIEVYUE9SVF9TWU1CT0wobmV0aWZfcmVjZWl2ZV9za2IpOwogCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9DT01DRVJUTykKK2ludCBjYXB0dXJlX3JlY2VpdmVfc2tiKHN0cnVjdCBza19idWZmICpza2IpCit7CisgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpudWxsX29yX29yaWcgPSBOVUxMOworICAgICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCAqcHRfcHJldjsKKyAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2OworICAgICAgICBpbnQgcmV0ID0gTkVUX1JYX0RST1A7CisKKwlpZiAoIW5ldGRldl90c3RhbXBfcHJlcXVldWUpCisJCW5ldF90aW1lc3RhbXBfY2hlY2soc2tiKTsKKworICAgICAgICBpZiAoIXNrYi0+c2tiX2lpZikKKyAgICAgICAgICAgICAgICBza2ItPnNrYl9paWYgPSBza2ItPmRldi0+aWZpbmRleDsKKworICAgICAgICBza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKKyAgICAgICAgc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKKwlza2JfcmVzZXRfbWFjX2xlbihza2IpOworCisgICAgICAgIHB0X3ByZXYgPSBOVUxMOworICAgICAgICBvcmlnX2RldiA9IHNrYi0+ZGV2OworCisgICAgICAgIHJjdV9yZWFkX2xvY2soKTsKKyAgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHR5cGUsICZwdHlwZV9hbGwsIGxpc3QpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXB0eXBlLT5kZXYgfHwgcHR5cGUtPmRldiA9PSBza2ItPmRldikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB0X3ByZXYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGRlbGl2ZXJfc2tiKHNrYiwgcHRfcHJldiwgb3JpZ19kZXYpOworICAgICAgICAgICAgICAgICAgICAgICAgcHRfcHJldiA9IHB0eXBlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChwdF9wcmV2KSB7CisgICAgICAgICAgICAgICAgcmV0ID0gcHRfcHJldi0+ZnVuYyhza2IsIHNrYi0+ZGV2LCBwdF9wcmV2LCBvcmlnX2Rldik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAga2ZyZWVfc2tiKHNrYik7CisgICAgICAgICAgICAgICAgLyogSmFtYWwsIG5vdyB5b3Ugd2lsbCBub3QgYWJsZSB0byBlc2NhcGUgZXhwbGFpbmluZworICAgICAgICAgICAgICAgICAqIG1lIGhvdyB5b3Ugd2VyZSBnb2luZyB0byB1c2UgdGhpcy4gOi0pCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgcmV0ID0gTkVUX1JYX0RST1A7CisgICAgICAgIH0KKyAgICAgICAgcmN1X3JlYWRfdW5sb2NrKCk7CisgICAgICAgIHJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0woY2FwdHVyZV9yZWNlaXZlX3NrYik7CisjZW5kaWYKKwogLyogTmV0d29yayBkZXZpY2UgaXMgZ29pbmcgYXdheSwgZmx1c2ggYW55IHBhY2tldHMgc3RpbGwgcGVuZGluZwogICogQ2FsbGVkIHdpdGggaXJxcyBkaXNhYmxlZC4KICAqLwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmxvdy5jIGIvbmV0L2NvcmUvZmxvdy5jCmluZGV4IGYwZWI0ZjguLjkyODcwNjcgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Zsb3cuYworKysgYi9uZXQvY29yZS9mbG93LmMKQEAgLTM5LDYgKzM5LDEwIEBACiAJdTMyCQkJCWdlbmlkOwogCXN0cnVjdCBmbG93aQkJCWtleTsKIAlzdHJ1Y3QgZmxvd19jYWNoZV9vYmplY3QJKm9iamVjdDsKKyNpZiBkZWZpbmVkKENPTkZJR19JTkVUX0lQU0VDX09GRkxPQUQpIHx8IGRlZmluZWQoQ09ORklHX0lORVQ2X0lQU0VDX09GRkxPQUQpCisJdTgJCQkJZmxhZ3M7CisJI2RlZmluZSBGTE9XX0NBQ0hFX0ZMQUdfSVBTRUNfT0ZGTE9BRCAweDAxCisjZW5kaWYKIH07CiAKIHN0cnVjdCBmbG93X2NhY2hlX3BlcmNwdSB7CkBAIC03NSw2ICs3OSwxMCBAQAogI2RlZmluZSBmbG93X2NhY2hlX2hhc2hfc2l6ZShjYWNoZSkJKDEgPDwgKGNhY2hlKS0+aGFzaF9zaGlmdCkKICNkZWZpbmUgRkxPV19IQVNIX1JORF9QRVJJT0QJCSgxMCAqIDYwICogSFopCiAKKyNpZiBkZWZpbmVkKENPTkZJR19JTkVUX0lQU0VDX09GRkxPQUQpIHx8IGRlZmluZWQoQ09ORklHX0lORVQ2X0lQU0VDX09GRkxPQUQpCitleHRlcm4gaW50IGlwc2VjX25sa2V5X2Zsb3dfcmVtb3ZlKHN0cnVjdCBmbG93aSAqZmwsIHUxNiBmYW1pbHksIHUxNiBkaXIpOworI2VuZGlmCisKIHN0YXRpYyB2b2lkIGZsb3dfY2FjaGVfbmV3X2hhc2hybmQodW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGZsb3dfY2FjaGUgKmZjID0gKHZvaWQgKikgYXJnOwpAQCAtMTEzLDggKzEyMSwxNCBAQAogCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmZmxvd19jYWNoZV9nY19saXN0LCAmZ2NfbGlzdCk7CiAJc3Bpbl91bmxvY2tfYmgoJmZsb3dfY2FjaGVfZ2NfbG9jayk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmNlLCBuLCAmZ2NfbGlzdCwgdS5nY19saXN0KQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmY2UsIG4sICZnY19saXN0LCB1LmdjX2xpc3QpIHsKKyNpZiBkZWZpbmVkKENPTkZJR19JTkVUX0lQU0VDX09GRkxPQUQpIHx8IGRlZmluZWQoQ09ORklHX0lORVQ2X0lQU0VDX09GRkxPQUQpCisJCS8qY2FsbCBubF9rZXlfZmxvd19yZW1vdmUqLworCQlpZiAoZmNlLT5mbGFncyAmIEZMT1dfQ0FDSEVfRkxBR19JUFNFQ19PRkZMT0FEKQorCQkJaXBzZWNfbmxrZXlfZmxvd19yZW1vdmUoJmZjZS0+a2V5LCBmY2UtPmZhbWlseSwgZmNlLT5kaXIpOworI2VuZGlmCiAJCWZsb3dfZW50cnlfa2lsbChmY2UpOworCX0KIH0KIHN0YXRpYyBERUNMQVJFX1dPUksoZmxvd19jYWNoZV9nY193b3JrLCBmbG93X2NhY2hlX2djX3Rhc2spOwogCkBAIC0yOTgsOCArMzEyLDEwIEBACiAJCWlmICghSVNfRVJSKGZsbykpIHsKIAkJCWZsZS0+b2JqZWN0ID0gZmxvOwogI2lmIGRlZmluZWQoQ09ORklHX0lORVRfSVBTRUNfT0ZGTE9BRCkgfHwgZGVmaW5lZChDT05GSUdfSU5FVDZfSVBTRUNfT0ZGTE9BRCkKLQkJCWlmIChuZXdfZmxvdykKKwkJCWlmIChuZXdfZmxvdykgewogCQkJCSpuZXdfZmxvdyA9IDE7CisJCQkJZmxlLT5mbGFncyB8PSBGTE9XX0NBQ0hFX0ZMQUdfSVBTRUNfT0ZGTE9BRDsKKwkJCX0KICNlbmRpZgogCQl9CiAJCWVsc2UKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKaW5kZXggN2FhZmFlZC4uZmJhNThiOCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMKKysrIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKQEAgLTExMzgsNiArMTEzOCwxMCBAQAogCQkJCQkJIG5laWdoLT5wYXJtcy0+cmVhY2hhYmxlX3RpbWUgOgogCQkJCQkJIDApKSk7CiAJCW5laWdoLT5udWRfc3RhdGUgPSBuZXc7CisjaWZkZWYgQ09ORklHX0NPTUNFUlRPX0ZQCisJCWlmICgob2xkICYgKE5VRF9TVEFMRSB8IE5VRF9ERUxBWSB8IE5VRF9QUk9CRSkpICYmIChuZXcgJiBOVURfUkVBQ0hBQkxFKSkKKwkJCW5vdGlmeSA9IDE7CisjZW5kaWYKIAl9CiAKIAlpZiAobGxhZGRyICE9IG5laWdoLT5oYSkgewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2tidWZmLmMgYi9uZXQvY29yZS9za2J1ZmYuYwppbmRleCBlYmE3YmFhLi5mMmFkYjIwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9za2J1ZmYuYworKysgYi9uZXQvY29yZS9za2J1ZmYuYwpAQCAtMjE4LDYgKzIxOCwxMCBAQAogCXNrYi0+bWFjX2hlYWRlciA9IH4wVTsKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fQ1VTVE9NX1NLQl9MQVlPVVQpCisJc2tiLT5tc3BkX2RhdGEgPSBOVUxMOworCXNrYi0+bXNwZF9sZW4gPSAwOworI2VuZGlmCiAJLyogbWFrZSBzdXJlIHdlIGluaXRpYWxpemUgc2hpbmZvIHNlcXVlbnRpYWxseSAqLwogCXNoaW5mbyA9IHNrYl9zaGluZm8oc2tiKTsKIAltZW1zZXQoc2hpbmZvLCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvLCBkYXRhcmVmKSk7CkBAIC0zMDMsNiArMzA3LDExIEBACiAJc2tiLT5tYWNfaGVhZGVyID0gfjBVOwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT19DVVNUT01fU0tCX0xBWU9VVCkKKwlza2ItPm1zcGRfZGF0YSA9IE5VTEw7CisJc2tiLT5tc3BkX2xlbiA9IDA7CisjZW5kaWYKKwogCS8qIG1ha2Ugc3VyZSB3ZSBpbml0aWFsaXplIHNoaW5mbyBzZXF1ZW50aWFsbHkgKi8KIAlzaGluZm8gPSBza2Jfc2hpbmZvKHNrYik7CiAJbWVtc2V0KHNoaW5mbywgMCwgb2Zmc2V0b2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbywgZGF0YXJlZikpOwpAQCAtNDM4LDYgKzQ0NywxMyBAQAogCQkJc2tiX2Ryb3BfZnJhZ2xpc3Qoc2tiKTsKIAogCQlrZnJlZShza2ItPmhlYWQpOworCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fQ1VTVE9NX1NLQl9MQVlPVVQpCisJCWlmIChza2ItPm1zcGRfZGF0YSkgeworCQkJa2ZyZWUoc2tiLT5tc3BkX2RhdGEpOworCQkJc2tiLT5tc3BkX2RhdGEgPSBOVUxMOworCQl9CisjZW5kaWYKIAl9CiB9CiAKQEAgLTU3OSw2ICs1OTUsOSBAQAogewogCXN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbzsKIAorI2lmIGRlZmluZWQoQ09ORklHX0NPTUNFUlRPX0NVU1RPTV9TS0JfTEFZT1VUKQorCVdBUk5fT04oc2tiLT5tc3BkX2xlbik7CisjZW5kaWYKIAlza2JfcmVsZWFzZV9oZWFkX3N0YXRlKHNrYik7CiAKIAlzaGluZm8gPSBza2Jfc2hpbmZvKHNrYik7CkBAIC02ODYsNiArNzA1LDEyIEBACiAJQyh0cnVlc2l6ZSk7CiAJYXRvbWljX3NldCgmbi0+dXNlcnMsIDEpOwogCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fQ1VTVE9NX1NLQl9MQVlPVVQpCisJQyhtc3BkX2RhdGEpOworCUMobXNwZF9sZW4pOworCUMobXNwZF9vZnN0KTsKKyNlbmRpZgorCiAJYXRvbWljX2luYygmKHNrYl9zaGluZm8oc2tiKS0+ZGF0YXJlZikpOwogCXNrYi0+Y2xvbmVkID0gMTsKIApAQCAtODU5LDYgKzg4NCw5IEBACiAJdW5zaWduZWQgaW50IHNpemUgPSAoc2tiX2VuZF9wb2ludGVyKHNrYikgLSBza2ItPmhlYWQpICsgc2tiLT5kYXRhX2xlbjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbiA9IGFsbG9jX3NrYihzaXplLCBnZnBfbWFzayk7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19DT01DRVJUT19DVVNUT01fU0tCX0xBWU9VVCkKKwlXQVJOX09OKHNrYi0+bXNwZF9sZW4pOworI2VuZGlmCiAJaWYgKCFuKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtODkzLDYgKzkyMSwxMCBAQAogCXVuc2lnbmVkIGludCBzaXplID0gc2tiX2VuZF9wb2ludGVyKHNrYikgLSBza2ItPmhlYWQ7CiAJc3RydWN0IHNrX2J1ZmYgKm4gPSBhbGxvY19za2Ioc2l6ZSwgZ2ZwX21hc2spOwogCisjaWYgZGVmaW5lZChDT05GSUdfQ09NQ0VSVE9fQ1VTVE9NX1NLQl9MQVlPVVQpCisJV0FSTl9PTihza2ItPm1zcGRfbGVuKTsKKyNlbmRpZgorCiAJaWYgKCFuKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMgYi9uZXQvaXB2NC9pcF9vdXRwdXQuYwppbmRleCAwYmM5NWYzLi5mZWRmMDUzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC9pcF9vdXRwdXQuYwpAQCAtMjM4LDcgKzIzOCwxMyBAQAogCQlyZXR1cm4gZHN0X291dHB1dChza2IpOwogCX0KICNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfSU5FVF9JUFNFQ19PRkZMT0FEKQorCWlmICgoc2tiLT5pcHNlY19vZmZsb2FkID09IDApICYmCisJCXNrYi0+bGVuID4gaXBfc2tiX2RzdF9tdHUoc2tiKSAmJiAhc2tiX2lzX2dzbyhza2IpKQorI2Vsc2UKIAlpZiAoc2tiLT5sZW4gPiBpcF9za2JfZHN0X210dShza2IpICYmICFza2JfaXNfZ3NvKHNrYikpCisjZW5kaWYKIAkJcmV0dXJuIGlwX2ZyYWdtZW50KHNrYiwgaXBfZmluaXNoX291dHB1dDIpOwogCWVsc2UKIAkJcmV0dXJuIGlwX2ZpbmlzaF9vdXRwdXQyKHNrYik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX2NvbW1vbi5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9wcm90b19jb21tb24uYwppbmRleCBhM2Q5OTc2Li45ODZhMjk4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3Byb3RvX2NvbW1vbi5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHJvdG9fY29tbW9uLmMKQEAgLTgzLDE0ICs4MywxMjMgQEAKIAllbHNlCiAJCW9mZiA9ICpyb3ZlcjsKIAotCWZvciAoaSA9IDA7IDsgKytvZmYpIHsKLQkJKnBvcnRwdHIgPSBodG9ucyhtaW4gKyBvZmYgJSByYW5nZV9zaXplKTsKLQkJaWYgKCsraSAhPSByYW5nZV9zaXplICYmIG5mX25hdF91c2VkX3R1cGxlKHR1cGxlLCBjdCkpCi0JCQljb250aW51ZTsKLQkJaWYgKCEocmFuZ2UtPmZsYWdzICYgSVBfTkFUX1JBTkdFX1BST1RPX1JBTkRPTSkpCi0JCQkqcm92ZXIgPSBvZmY7Ci0JCXJldHVybjsKLQl9CisgICAgICAgLyogNHJkIHNwZWNpZmljIHJhbmdlIE5BUFQgLSBzdGFydCAqLworICAgICAgIGlmICgocmFuZ2UtPmZsYWdzICYgSVBfTkFUX1JBTkdFXzRSRF9OQVBUKSAmJiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9TUkMpKXsKKyAgICAgICAgICAgICAgIF9fYmUxNiBmaXhfcG9ydDsKKyAgICAgICAgICAgICAgIF9fYmUxNiBwb3J0X21pbiwgcG9ydF9tYXg7CisgICAgICAgICAgICAgICB1X2ludDE2X3QgcG9ydF9zZXRfaWQ7CisgICAgICAgICAgICAgICB1X2ludDE2X3QgbWJpdGxlbiAgID0gMCA7CisgICAgICAgICAgICAgICB1X2ludDE2X3Qgb2Zmc2V0bGVuID0gMCA7CisgICAgICAgICAgICAgICB1X2ludDE2X3QgcHNpZGxlbiAgID0gMCA7CisgICAgICAgICAgICAgICB1X2ludDE2X3QgcmFuZ2VfdG90YWxfc2l6ZSA9IDAgOworICAgICAgICAgICAgICAgdV9pbnQxNl90IG9mZnNldF80cmQ7CisgICAgICAgICAgICAgICB1X2ludDE2X3Qgb19zdGF0ZTsKKyAgICAgICAgICAgICAgIHVfaW50MTZfdCBtX3N0YXRlOworCisgICAgICAgICAgICAgICB1X2ludDE2X3Qgb2Zmc2V0X21pbjsKKyAgICAgICAgICAgICAgIHVfaW50MTZfdCBvZmZzZXRfbWF4OworICAgICAgICAgICAgICAgdV9pbnQxNl90IG9mZnNldF9jbnQ7CisgICAgICAgICAgICAgICB1X2ludDE2X3QgbWJpdF9jbnQ7CisKKyAgICAgICAgICAgICAgICMgZGVmaW5lIE1BWEJJVExFTiAxNgorICAgICAgICAgICAgICAgcG9ydF9taW4gPSBudG9ocyhyYW5nZS0+bWluLmFsbCk7CisgICAgICAgICAgICAgICBwb3J0X21heCA9IG50b2hzKHJhbmdlLT5tYXguYWxsKTsKKworICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgTUFYQklUTEVOOyBpKyspeworICAgICAgICAgICAgICAgICAgICAgICBpZiggKChwb3J0X21pbiA+PiBpKSAmIDB4MDAwMSkgPT0gKChwb3J0X21heCA+PiBpKSAmIDB4MDAwMSkgKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2lkbGVuKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgIGVsc2V7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJpdGxlbisrOworICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgIGZvciggOyBpIDwgTUFYQklUTEVOOyBpKyspeworICAgICAgICAgICAgICAgICAgICAgICBpZiggKChwb3J0X21pbiA+PiBpKSAmIDB4MDAwMSkgPT0gKChwb3J0X21heCA+PiBpKSAmIDB4MDAwMSkgKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2lkbGVuKys7CisgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgZWxzZXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICBvZmZzZXRsZW4gPSBNQVhCSVRMRU4gLSBwc2lkbGVuIC0gbWJpdGxlbjsKKworICAgICAgICAgICAgICAgaWYoKHBzaWRsZW4gPT0gMCkgfHwgKG1iaXRsZW4gPT0gMCkpeworICAgICAgICAgICAgICAgICAgICAgICAvKiBFUlJPUiAqLworICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICI0cmQgcGFyYW1ldGVyIElOVkFMSUQiKTsKKyAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgcG9ydF9zZXRfaWQgPSAocG9ydF9taW4gJiBwb3J0X21heCkgPj4gbWJpdGxlbjsKKworICAgICAgICAgICAgICAgaWYoIG9mZnNldGxlbiApeworICAgICAgICAgICAgICAgICAgICAgICBpZihwb3J0X21pbiA8IDQwOTYpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG9mZnNldGxlbiA+IDQpeworCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldF9taW4gPSAweDEwMDAgPj4gKHBzaWRsZW4gKyBtYml0bGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldF9tYXggPSAoMSA8PCBvZmZzZXRsZW4pIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldF9jbnQgPSBvZmZzZXRfbWF4IC0gb2Zmc2V0X21pbiArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYml0X2NudCA9IDEgPDwgbWJpdGxlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlX3RvdGFsX3NpemUgPSBvZmZzZXRfY250ICogbWJpdF9jbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2V7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRfbWluID0gMHgwMDAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0X2NudCA9ICgxIDw8IG9mZnNldGxlbikgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJpdF9jbnQgPSAxIDw8IG1iaXRsZW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZV90b3RhbF9zaXplID0gb2Zmc2V0X2NudCAqIG1iaXRfY250OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICBlbHNleworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldF9taW4gPSAweDAwMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0X2NudCA9IDEgPDwgb2Zmc2V0bGVuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iaXRfY250ID0gMSA8PCBtYml0bGVuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlX3RvdGFsX3NpemUgPSBvZmZzZXRfY250ICogbWJpdF9jbnQ7CisgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGVsc2V7CisgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldF9taW4gPSAwOworICAgICAgICAgICAgICAgICAgICAgICByYW5nZV90b3RhbF9zaXplID0gKCAxIDw8IG1iaXRsZW4gKSA7CisgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IDsgKytvZmYpIHsKKworICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRfNHJkID0gb2ZmICUgcmFuZ2VfdG90YWxfc2l6ZSA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBtYml0bGVuICE9IDAgKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvX3N0YXRlID0gb2Zmc2V0XzRyZCAvICggMSA8PCBtYml0bGVuICkgOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBvZmZzZXRfNHJkICUgKCAxIDw8IG1iaXRsZW4gKSA7CisgICAgICAgICAgICAgICAgICAgICAgIH1lbHNleworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9fc3RhdGUgPSBvZmZzZXRfNHJkIC8gKCAxIDw8IG1iaXRsZW4gKSA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IDAgOworICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgZml4X3BvcnQgPSAoKCBvZmZzZXRfbWluICsgb19zdGF0ZSApIDw8ICggbWJpdGxlbiArIHBzaWRsZW4gKSk7CisgICAgICAgICAgICAgICAgICAgICAgIGZpeF9wb3J0IHw9ICggcG9ydF9zZXRfaWQgPDwgbWJpdGxlbiApOworICAgICAgICAgICAgICAgICAgICAgICBmaXhfcG9ydCB8PSBtX3N0YXRlOworCisgICAgICAgICAgICAgICAgICAgICAgICpwb3J0cHRyID0gaHRvbnMoZml4X3BvcnQpOworCisgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKytpICE9IHJhbmdlX3RvdGFsX3NpemUpICYmIG5mX25hdF91c2VkX3R1cGxlKHR1cGxlLCBjdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgLy9wcmludGsoS0VSTl9JTkZPICJmaXhfcG9ydCA9ICVkICIsZml4X3BvcnQpOworICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gOworICAgICAgICAgICAgICAgfQorICAgICAgIH0gLyogNHJkIHNwZWNpZmljIHJhbmdlIE5BUFQgLSBlbmQgKi8KKyAgICAgICBlbHNleworCisJICAgICAgIGZvciAoaSA9IDA7IDsgKytvZmYpIHsKKwkJICAgICAgICpwb3J0cHRyID0gaHRvbnMobWluICsgb2ZmICUgcmFuZ2Vfc2l6ZSk7CisJCSAgICAgICBpZiAoKytpICE9IHJhbmdlX3NpemUgJiYgbmZfbmF0X3VzZWRfdHVwbGUodHVwbGUsIGN0KSkKKwkJCSAgICAgICBjb250aW51ZTsKKwkJICAgICAgIGlmICghKHJhbmdlLT5mbGFncyAmIElQX05BVF9SQU5HRV9QUk9UT19SQU5ET00pKQorCQkJICAgICAgICpyb3ZlciA9IG9mZjsKKwkJICAgICAgIHJldHVybjsKKwkgICAgICAgfQorICAgICAgIH0KIAlyZXR1cm47CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfcHJvdG9fdW5pcXVlX3R1cGxlKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDYuYyBiL25ldC9pcHY2L2VzcDYuYwppbmRleCA2NWRkNTQzLi4wYjllMTQ4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9lc3A2LmMKKysrIGIvbmV0L2lwdjYvZXNwNi5jCkBAIC0xMzgsMTEgKzEzOCwyNiBAQAogCWtmcmVlKEVTUF9TS0JfQ0Ioc2tiKS0+dG1wKTsKIAl4ZnJtX291dHB1dF9yZXN1bWUoc2tiLCBlcnIpOwogfQorc3RhdGljIHZvaWQgdWRwX3Y2X3NlbmRfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaXB2NmhkciAqaXB2Nmg9aXB2Nl9oZHIoc2tiKTsKKwlzdHJ1Y3QgdWRwaGRyICp1aD11ZHBfaGRyKHNrYik7CisJdWgtPmNoZWNrID0gfmNzdW1faXB2Nl9tYWdpYygmaXB2NmgtPnNhZGRyLCAmaXB2NmgtPmRhZGRyLCBza2ItPmxlbiwKKwkJCUlQUFJPVE9fVURQLCAwKTsKKwlza2ItPmNzdW1fc3RhcnQgPSBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpIC0gc2tiLT5oZWFkOworCXNrYi0+Y3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjayk7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9QQVJUSUFMOworCisJaWYgKHVoLT5jaGVjayA9PSAwKQorCQl1aC0+Y2hlY2sgPSBDU1VNX01BTkdMRURfMDsKKworfQogCiBzdGF0aWMgaW50IGVzcDZfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCBlcnI7CiAJc3RydWN0IGlwX2VzcF9oZHIgKmVzcGg7CisJc3RydWN0IHVkcGhkciAqdWg9TlVMTDsKIAlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmFlYWQ7CiAJc3RydWN0IGFlYWRfZ2l2Y3J5cHRfcmVxdWVzdCAqcmVxOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CkBAIC0yMjgsMTMgKzI0Myw0NiBAQAogCWVzcGggPSBpcF9lc3BfaGRyKHNrYik7CiAJKnNrYl9tYWNfaGVhZGVyKHNrYikgPSBJUFBST1RPX0VTUDsKIAorCS8qIE5BVC1UIGNoYW5nZXMgU3RhcnQgKi8KKwkvKiB0aGlzIGlzIG5vbi1OVUxMIG9ubHkgd2l0aCBVRFAgRW5jYXBzdWxhdGlvbiAqLworCWlmICh4LT5lbmNhcCkgeworCQlzdHJ1Y3QgeGZybV9lbmNhcF90bXBsICplbmNhcCA9IHgtPmVuY2FwOworCQlfX2JlMzIgKnVkcGRhdGEzMjsKKwkJX19iZTE2IHNwb3J0LCBkcG9ydDsKKwkJaW50IGVuY2FwX3R5cGU7CisJCXNwaW5fbG9ja19iaCgmeC0+bG9jayk7CisJCXNwb3J0ID0gZW5jYXAtPmVuY2FwX3Nwb3J0OworCQlkcG9ydCA9IGVuY2FwLT5lbmNhcF9kcG9ydDsKKwkJZW5jYXBfdHlwZSA9IGVuY2FwLT5lbmNhcF90eXBlOworCQlzcGluX3VubG9ja19iaCgmeC0+bG9jayk7CisJCXVoID0gKHN0cnVjdCB1ZHBoZHIgKillc3BoOworCQl1aC0+c291cmNlID0gc3BvcnQ7CisJCXVoLT5kZXN0ID0gZHBvcnQ7CisJCXVoLT5sZW4gPSBodG9ucyhza2ItPmxlbiAtIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikpOworCQl1aC0+Y2hlY2sgPSAwOworCisJCXN3aXRjaCAoZW5jYXBfdHlwZSkgeworCQkJZGVmYXVsdDoKKwkJCWNhc2UgVURQX0VOQ0FQX0VTUElOVURQOgorCQkJCWVzcGggPSAoc3RydWN0IGlwX2VzcF9oZHIgKikodWggKyAxKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVURQX0VOQ0FQX0VTUElOVURQX05PTl9JS0U6CisJCQkJdWRwZGF0YTMyID0gKF9fYmUzMiAqKSh1aCArIDEpOworCQkJCXVkcGRhdGEzMlswXSA9IHVkcGRhdGEzMlsxXSA9IDA7CisJCQkJZXNwaCA9IChzdHJ1Y3QgaXBfZXNwX2hkciAqKSh1ZHBkYXRhMzIgKyAyKTsKKwkJCQlicmVhazsKKwkJfQorCQkqc2tiX21hY19oZWFkZXIoc2tiKSA9IElQUFJPVE9fVURQOworCX0KKworCiAJZXNwaC0+c3BpID0geC0+aWQuc3BpOwogCWVzcGgtPnNlcV9ubyA9IGh0b25sKFhGUk1fU0tCX0NCKHNrYiktPnNlcS5vdXRwdXQubG93KTsKIAogCXNnX2luaXRfdGFibGUoc2csIG5mcmFncyk7CiAJc2tiX3RvX3NndmVjKHNrYiwgc2csCi0JCSAgICAgZXNwaC0+ZW5jX2RhdGEgKyBjcnlwdG9fYWVhZF9pdnNpemUoYWVhZCkgLSBza2ItPmRhdGEsCi0JCSAgICAgY2xlbiArIGFsZW4pOworCQkJZXNwaC0+ZW5jX2RhdGEgKyBjcnlwdG9fYWVhZF9pdnNpemUoYWVhZCkgLSBza2ItPmRhdGEsCisJCQljbGVuICsgYWxlbik7CiAKIAlpZiAoKHgtPnByb3BzLmZsYWdzICYgWEZSTV9TVEFURV9FU04pKSB7CiAJCXNnX2luaXRfdGFibGUoYXNnLCAzKTsKQEAgLTI0OSw3ICsyOTcsNyBAQAogCWFlYWRfZ2l2Y3J5cHRfc2V0X2NyeXB0KHJlcSwgc2csIHNnLCBjbGVuLCBpdik7CiAJYWVhZF9naXZjcnlwdF9zZXRfYXNzb2MocmVxLCBhc2csIGFzc29jbGVuKTsKIAlhZWFkX2dpdmNyeXB0X3NldF9naXYocmVxLCBlc3BoLT5lbmNfZGF0YSwKLQkJCSAgICAgIFhGUk1fU0tCX0NCKHNrYiktPnNlcS5vdXRwdXQubG93KTsKKwkJCVhGUk1fU0tCX0NCKHNrYiktPnNlcS5vdXRwdXQubG93KTsKIAogCUVTUF9TS0JfQ0Ioc2tiKS0+dG1wID0gdG1wOwogCWVyciA9IGNyeXB0b19hZWFkX2dpdmVuY3J5cHQocmVxKTsKQEAgLTI1OSw2ICszMDcsMTMgQEAKIAlpZiAoZXJyID09IC1FQlVTWSkKIAkJZXJyID0gTkVUX1hNSVRfRFJPUDsKIAorCisJLyogTkFULVQgY2hhbmdlcyBTdGFydCAqLworCWlmICh4LT5lbmNhcCkgeworCQl1ZHBfdjZfc2VuZF9jaGVjayhza2IpOworCX0KKwkvKiBOQVQtVCBjaGFuZ2VzIEVuZCAqLworCiAJa2ZyZWUodG1wKTsKIAogZXJyb3I6CkBAIC0yNjcsNiArMzIyLDcgQEAKIAogc3RhdGljIGludCBlc3BfaW5wdXRfZG9uZTIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVycikKIHsKKwlzdHJ1Y3QgaXB2NmhkciAqaXB2Nmg7CiAJc3RydWN0IHhmcm1fc3RhdGUgKnggPSB4ZnJtX2lucHV0X3N0YXRlKHNrYik7CiAJc3RydWN0IGVzcF9kYXRhICplc3AgPSB4LT5kYXRhOwogCXN0cnVjdCBjcnlwdG9fYWVhZCAqYWVhZCA9IGVzcC0+YWVhZDsKQEAgLTI4OSwxMSArMzQ1LDQ4IEBACiAJcGFkbGVuID0gbmV4dGhkclswXTsKIAlpZiAocGFkbGVuICsgMiArIGFsZW4gPj0gZWxlbikgewogCQlMSU1JVF9ORVRERUJVRyhLRVJOX1dBUk5JTkcgImlwc2VjIGVzcCBwYWNrZXQgaXMgZ2FyYmFnZSAiCi0JCQkgICAgICAgInBhZGxlbj0lZCwgZWxlbj0lZFxuIiwgcGFkbGVuICsgMiwgZWxlbiAtIGFsZW4pOworCQkJCSJwYWRsZW49JWQsIGVsZW49JWRcbiIsIHBhZGxlbiArIDIsIGVsZW4gLSBhbGVuKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJLyogLi4uIGNoZWNrIHBhZGRpbmcgYml0cyBoZXJlLiBTaWxseS4gOi0pICovCisJLyogTkFULVQgY2hhbmdlcyBTdGFydCAqLworCWlwdjZoID0gaXB2Nl9oZHIoc2tiKTsKKwlpZiAoeC0+ZW5jYXApIHsKKwkJc3RydWN0IHhmcm1fZW5jYXBfdG1wbCAqZW5jYXAgPSB4LT5lbmNhcDsKKwkJc3RydWN0IHVkcGhkciAqdWggPSAodm9pZCAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIGhkcl9sZW4pOworCisJCS8qIDEpIGlmIHRoZSBOQVQtVCBwZWVyJ3MgSVAgb3IgcG9ydCBjaGFuZ2VkIHRoZW4KKwkJICogICAgYWR2ZXJ0aXplIHRoZSBjaGFuZ2UgdG8gdGhlIGtleWluZyBkYWVtb24uCisJCSAqICAgIFRoaXMgaXMgYW4gaW5ib3VuZCBTQSwgc28ganVzdCBjb21wYXJlCisJCSAqICAgIFNSQyBwb3J0cy4KKwkJICovCisJCWlmIChtZW1jbXAoJmlwdjZoLT5zYWRkciwgeC0+cHJvcHMuc2FkZHIuYTYgLHNpemVvZihpcHY2aC0+c2FkZHIpKSB8fAorCQkJCXVoLT5zb3VyY2UgIT0gZW5jYXAtPmVuY2FwX3Nwb3J0KSB7CisJCQl4ZnJtX2FkZHJlc3NfdCBpcGFkZHI7CisJCQltZW1jcHkoaXBhZGRyLmE2LCAmaXB2NmgtPnNhZGRyLCBzaXplb2YoaXBhZGRyLmE2KSk7CisJCQlrbV9uZXdfbWFwcGluZyh4LCAmaXBhZGRyLCB1aC0+c291cmNlKTsKKwkJCS8qIFhYWDogcGVyaGFwcyBhZGQgYW4gZXh0cmEKKwkJCSAqIHBvbGljeSBjaGVjayBoZXJlLCB0byBzZWUKKwkJCSAqIGlmIHdlIHNob3VsZCBhbGxvdyBvcgorCQkJICogcmVqZWN0IGEgcGFja2V0IGZyb20gYQorCQkJICogZGlmZmVyZW50IHNvdXJjZQorCQkJICogYWRkcmVzcy9wb3J0LgorCQkJICovCisJCX0KKworCQkvKgorCQkgKiAyKSBpZ25vcmUgVURQL1RDUCBjaGVja3N1bXMgaW4gY2FzZQorCQkgKiAgICBvZiBOQVQtVCBpbiBUcmFuc3BvcnQgTW9kZSwgb3IKKwkJICogICAgcGVyZm9ybSBvdGhlciBwb3N0LXByb2Nlc3NpbmcgZml4ZXMKKwkJICogICAgYXMgcGVyIGRyYWZ0LWlldGYtaXBzZWMtdWRwLWVuY2Fwcy0wNiwKKwkJICogICAgc2VjdGlvbiAzLjEuMgorCQkgKi8KKwkJaWYgKHgtPnByb3BzLm1vZGUgPT0gWEZSTV9NT0RFX1RSQU5TUE9SVCB8fCB4LT5wcm9wcy5tb2RlID09IFhGUk1fTU9ERV9CRUVUKSAKKwkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisKKwl9CisJLypOQVQtVCBjaGFuZ2VzIEVuZCovCiAKIAlwc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIGFsZW4gLSBwYWRsZW4gLSAyKTsKIAlfX3NrYl9wdWxsKHNrYiwgaGxlbik7CkBAIC01NzcsOCArNjcwLDggQEAKIAl1MzIgYWxpZ247CiAJaW50IGVycjsKIAotCWlmICh4LT5lbmNhcCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJLy9pZiAoeC0+ZW5jYXApCisJLy8JcmV0dXJuIC1FSU5WQUw7CiAKIAllc3AgPSBremFsbG9jKHNpemVvZigqZXNwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVzcCA9PSBOVUxMKQpAQCAtNjE1LDYgKzcwOCwyMiBAQAogCQlnb3RvIGVycm9yOwogCX0KIAorCS8qIE5BVC1UICBjaGFuZ2VzIFN0YXJ0ICovCisJaWYgKHgtPmVuY2FwKSB7CisJCXN0cnVjdCB4ZnJtX2VuY2FwX3RtcGwgKmVuY2FwID0geC0+ZW5jYXA7CisJCXN3aXRjaCAoZW5jYXAtPmVuY2FwX3R5cGUpIHsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXJyb3I7CisJCWNhc2UgVURQX0VOQ0FQX0VTUElOVURQOgorCQkJeC0+cHJvcHMuaGVhZGVyX2xlbiArPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7CisJCQlicmVhazsKKwkJY2FzZSBVRFBfRU5DQVBfRVNQSU5VRFBfTk9OX0lLRToKKwkJCXgtPnByb3BzLmhlYWRlcl9sZW4gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICsgMiAqIHNpemVvZih1MzIpICogNDsKKwkJCWJyZWFrOworCQl9CisJfQorCS8qIE5BVC1UIGNoYW5nZXMgRW5kICovCisKIAlhbGlnbiA9IEFMSUdOKGNyeXB0b19hZWFkX2Jsb2Nrc2l6ZShhZWFkKSwgNCk7CiAJaWYgKGVzcC0+cGFkbGVuKQogCQlhbGlnbiA9IG1heF90KHUzMiwgYWxpZ24sIGVzcC0+cGFkbGVuKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwppbmRleCBkMTlmNDk5Li5kMGNmNWI1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcm91dGUuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTc0LDYgKzc1LDEwIEBACiAJCSAgICAgKGFkZHIpLT5zNl9hZGRyMzJbMl0gXiAoYWRkciktPnM2X2FkZHIzMlszXSkgJiBcCiAJCSAgICAoSEFTSF9TSVpFIC0gMSkpCiAKKworI2RlZmluZSBmb3JfZWFjaF9pcDZfdHVubmVsX3JjdShzdGFydCkgXAorCWZvciAodCA9IHJjdV9kZXJlZmVyZW5jZShzdGFydCk7IHQ7IHQgPSByY3VfZGVyZWZlcmVuY2UodC0+bmV4dCkpCisKIHN0YXRpYyBpbnQgaXA2X3RubF9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGlwNl90bmxfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCkBAIC0xMTksNiArMTI0LDU1MCBAQAogICogTG9ja2luZyA6IGhhc2ggdGFibGVzIGFyZSBwcm90ZWN0ZWQgYnkgUkNVIGFuZCBSVE5MCiAgKi8KIAorc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptcl9rbWVtIF9fcmVhZF9tb3N0bHk7CitpbnQgbXJfa21lbV9hbGxvY2VkID0gMDsKKworc3RhdGljIGlubGluZSBzaXplX3QgIGlwNl80cmRfbmxtc2dfc2l6ZSh2b2lkKQoreworCXJldHVybiBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGlwNl80cmRfbWFwX21zZykpOworfQorCitzdGF0aWMgaW50IGlwNl80cmRfZmlsbF9ub2RlKCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXA2X3RubF80cmRfbWFwX3J1bGUgKm1yLAorCQkJdTMyIHBpZCwgdTMyIHNlcSxpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgcmVzZXQsIHVuc2lnbmVkIGludCBpZmluZGV4KQoreworCXN0cnVjdCBpcDZfNHJkX21hcF9tc2cgKm1yX21zZzsKKwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKKworCW5saCA9IG5sbXNnX3B1dChza2IsIHBpZCAsIHNlcSwgdHlwZSwgc2l6ZW9mKCptcl9tc2cpLCBmbGFncyk7CisJaWYgKG5saCA9PSBOVUxMKQorCQlyZXR1cm4gLUVNU0dTSVpFOworCisJbXJfbXNnID0gbmxtc2dfZGF0YShubGgpOworCWlmKHJlc2V0KQorCXsKKwkJbWVtc2V0KG1yX21zZywwLHNpemVvZigqbXJfbXNnKSk7CisJCW1yX21zZy0+cmVzZXQgPSAxOworCQltcl9tc2ctPmlmaW5kZXggPSBpZmluZGV4OworCQkKKwl9CisJZWxzZQorCXsKKwkJLy8JbWVtY3B5KG1yX21zZyxtciwgc2l6ZW9mKCptcl9tc2cpKTsKKwkJbWVtc2V0KG1yX21zZywwLHNpemVvZigqbXJfbXNnKSk7CisJCW1yX21zZy0+cHJlZml4ID0gbXItPnByZWZpeDsKKwkJbXJfbXNnLT5wcmVmaXhsZW4gPSBtci0+cHJlZml4bGVuIDsKKwkJaXB2Nl9hZGRyX2NvcHkoJm1yX21zZy0+cmVsYXlfcHJlZml4LCAmbXItPnJlbGF5X3ByZWZpeCk7CisJCWlwdjZfYWRkcl9jb3B5KCZtcl9tc2ctPnJlbGF5X3N1ZmZpeCwgJm1yLT5yZWxheV9zdWZmaXgpOworCQltcl9tc2ctPnJlbGF5X3ByZWZpeGxlbiA9IG1yLT5yZWxheV9wcmVmaXhsZW4gOworCQltcl9tc2ctPnJlbGF5X3N1ZmZpeGxlbiA9IG1yLT5yZWxheV9zdWZmaXhsZW4gOworCQltcl9tc2ctPnBzaWRfb2Zmc2V0bGVuID0gbXItPnBzaWRfb2Zmc2V0bGVuIDsKKwkJbXJfbXNnLT5lYWJpdF9sZW4gPSBtci0+ZWFiaXRfbGVuIDsKKwkJbXJfbXNnLT5lbnRyeV9udW0gPSBtci0+ZW50cnlfbnVtIDsKKwkJbXJfbXNnLT5pZmluZGV4ID0gaWZpbmRleDsKKwl9CisJcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisKK30KKworCitzdGF0aWMgaW50IGluZXQ2X2R1bXA0cmRfbXJ1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQoreworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOworCXVuc2lnbmVkIGludCBoLCBzX2g7CisJaW50IHNfaWR4LCBzX2lwX2lkeDsKKwlpbnQgaWR4LCBpcF9pZHg7CisJc3RydWN0IGlwNl90bmxfNHJkX21hcF9ydWxlICptciA7CisJaW50IGVyciA9IDA7CisKKworCXN0cnVjdCBpcDZfdG5sICp0OworCXN0cnVjdCBpcDZfdG5sX25ldCAqaXA2biA9IG5ldF9nZW5lcmljKG5ldCwgaXA2X3RubF9uZXRfaWQpOworCisJc19oID0gY2ItPmFyZ3NbMF07CisJc19pZHggPSBpZHggPSBjYi0+YXJnc1sxXTsKKwlzX2lwX2lkeCA9IGlwX2lkeCA9IGNiLT5hcmdzWzJdOworCisJZm9yIChoID0gc19oOyBoIDwgSEFTSF9TSVpFIDsgaCsrLCBzX2lkeCA9IDApIHsKKwkJaWR4ID0gMDsKKwkJZm9yX2VhY2hfaXA2X3R1bm5lbF9yY3UoaXA2bi0+dG5sc19yX2xbaF0pCisJCXsKKwkJCWlmIChpZHggPCBzX2lkeCkKKwkJCQlnb3RvIGNvbnRfdHVubmVsOworCQkJaWYgKGlkeCA+IHNfaWR4KQorCQkJCXNfaXBfaWR4ID0gMDsKKwkJCWlwX2lkeCA9IDA7CisJCQlyZWFkX2xvY2soJnQtPmlwNHJkLm1hcF9sb2NrKTsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkgKG1yLCAmdC0+aXA0cmQubWFwX2xpc3QsIG1yX2xpc3QpeworCQkJCWlmIChpcF9pZHggPCBzX2lwX2lkeCkKKwkJCQkJZ290byBjb250X21yOworCQkJCWVyciA9IGlwNl80cmRfZmlsbF9ub2RlKHNrYiwgbXIsTkVUTElOS19DQihjYi0+c2tiKS5waWQsCisJCQkJCQljYi0+bmxoLT5ubG1zZ19zZXEsUlRNX05FVzRSRCwgTkxNX0ZfTVVMVEkgLCAwLCB0LT5kZXYtPmlmaW5kZXgpOworCQkJCWlmIChlcnIgPCAwKSB7CisJCQkJCVdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7CisJCQkJCWtmcmVlX3NrYihza2IpOworCQkJCQlyZWFkX3VubG9jaygmdC0+aXA0cmQubWFwX2xvY2spOworCQkJCQlnb3RvIG91dDsKKwkJCQl9Citjb250X21yOgorCQkJCWlwX2lkeCsrOworCQkJfQorCQkJcmVhZF91bmxvY2soJnQtPmlwNHJkLm1hcF9sb2NrKTsKK2NvbnRfdHVubmVsOgorCQkJaWR4Kys7CQorCQl9CisJfQorb3V0OgorCWNiLT5hcmdzWzBdID0gaDsKKwljYi0+YXJnc1sxXSA9IGlkeDsKKwljYi0+YXJnc1syXSA9IGlwX2lkeDsKKwkKKwlyZXR1cm4gc2tiLT5sZW47Cit9CisKKwordm9pZCBpcDZfNHJkX25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBpcDZfdG5sXzRyZF9tYXBfcnVsZSAqbXIgLHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCByZXNldCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKKwlpbnQgZXJyOworCisJZXJyID0gLUVOT0JVRlM7CisKKwlza2IgPSBubG1zZ19uZXcoaXA2XzRyZF9ubG1zZ19zaXplKCksIGdmcF9hbnkoKSk7CisJaWYgKHNrYiA9PSBOVUxMKQorCQlnb3RvIGVycm91dDsKKworCWVyciA9IGlwNl80cmRfZmlsbF9ub2RlKHNrYiwgbXIsMCwwLGV2ZW50LCAgMCwgcmVzZXQsIGRldi0+aWZpbmRleCk7CisJaWYgKGVyciA8IDApIHsKKwkJLyogLUVNU0dTSVpFIGltcGxpZXMgQlVHIGluIHJ0Nl9ubG1zZ19zaXplKCkgKi8KKwkJV0FSTl9PTihlcnIgPT0gLUVNU0dTSVpFKTsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCWdvdG8gZXJyb3V0OworCX0KKwlydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9JUFY2X0lGQUREUiwKKwkJICAgIE5VTEwsIGdmcF9hbnkoKSk7CisJcmV0dXJuOworZXJyb3V0OgorCWlmIChlcnIgPCAwKQorCQlydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfSUZBRERSLCBlcnIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2lwNl90bmxfNHJkX21yX2Rlc3Ryb3koY2hhciAqZiwgc3RydWN0IGlwNl90bmxfNHJkX21hcF9ydWxlICptcikKK3sKKwlsaXN0X2RlbCgmbXItPm1yX2xpc3QpOworCWttZW1fY2FjaGVfZnJlZShtcl9rbWVtLCBtcik7CisJLS1tcl9rbWVtX2FsbG9jZWQ7Cit9CisKK3N0YXRpYyBpbnQKK2lwNl90bmxfNHJkX21yX2NyZWF0ZShzdHJ1Y3QgaXA2X3RubF80cmQgKmlwNHJkLCBzdHJ1Y3QgaXA2X3RubF80cmRfcGFybSAqcGFybSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaXA2X3RubF80cmRfbWFwX3J1bGUgKm1yIDsKKwlpbnQgZXJyID0gMDsKKworICAgICAgIHdyaXRlX2xvY2tfYmgoJnBhcm0tPm1hcF9sb2NrKTsKKyAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5IChtciwgJnBhcm0tPm1hcF9saXN0LCBtcl9saXN0KXsKKyAgICAgICAgICAgICAgIGlmKCBtci0+ZW50cnlfbnVtID09IGlwNHJkLT5lbnRyeV9udW0gKXsKKyAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgImlwNl90bmxfNHJkX21yX2NyZWF0ZTogbWFwIHJ1bGUgZm91bmQgdXBkYXRlIik7CisgICAgICAgICAgICAgICAgICAgICAgIG1yLT5wcmVmaXggPSBpcDRyZC0+cHJlZml4IDsKKyAgICAgICAgICAgICAgICAgICAgICAgaXB2Nl9hZGRyX2NvcHkoJm1yLT5yZWxheV9wcmVmaXgsICZpcDRyZC0+cmVsYXlfcHJlZml4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgaXB2Nl9hZGRyX2NvcHkoJm1yLT5yZWxheV9zdWZmaXgsICZpcDRyZC0+cmVsYXlfc3VmZml4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgbXItPnByZWZpeGxlbiA9IGlwNHJkLT5wcmVmaXhsZW4gOworICAgICAgICAgICAgICAgICAgICAgICBtci0+cmVsYXlfcHJlZml4bGVuID0gaXA0cmQtPnJlbGF5X3ByZWZpeGxlbiA7CisgICAgICAgICAgICAgICAgICAgICAgIG1yLT5yZWxheV9zdWZmaXhsZW4gPSBpcDRyZC0+cmVsYXlfc3VmZml4bGVuIDsKKyAgICAgICAgICAgICAgICAgICAgICAgbXItPnBzaWRfb2Zmc2V0bGVuID0gaXA0cmQtPnBzaWRfb2Zmc2V0bGVuIDsKKyAgICAgICAgICAgICAgICAgICAgICAgbXItPmVhYml0X2xlbiA9IGlwNHJkLT5lYWJpdF9sZW4gOworICAgICAgICAgICAgICAgICAgICAgICBtci0+ZW50cnlfbnVtID0gaXA0cmQtPmVudHJ5X251bSA7CisgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICAgICAgICAgfQorICAgICAgIH0KKworICAgICAgIG1yID0ga21lbV9jYWNoZV9hbGxvYyhtcl9rbWVtLCBHRlBfS0VSTkVMKTsKKworICAgICAgIGlmICghbXIpIHsKKyAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gImlwNl90bmxfNHJkX21yX2NyZWF0ZToga21lbV9jYWNoZV9hbGxvYyBmYWlsIik7CisgICAgICAgICAgICAgICBlcnIgPSAtMSA7CisgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICB9CisKKyAgICAgICBtci0+cHJlZml4ID0gaXA0cmQtPnByZWZpeCA7CisgICAgICAgaXB2Nl9hZGRyX2NvcHkoJm1yLT5yZWxheV9wcmVmaXgsICZpcDRyZC0+cmVsYXlfcHJlZml4KTsKKyAgICAgICBpcHY2X2FkZHJfY29weSgmbXItPnJlbGF5X3N1ZmZpeCwgJmlwNHJkLT5yZWxheV9zdWZmaXgpOworICAgICAgIG1yLT5wcmVmaXhsZW4gPSBpcDRyZC0+cHJlZml4bGVuIDsKKyAgICAgICBtci0+cmVsYXlfcHJlZml4bGVuID0gaXA0cmQtPnJlbGF5X3ByZWZpeGxlbiA7CisgICAgICAgbXItPnJlbGF5X3N1ZmZpeGxlbiA9IGlwNHJkLT5yZWxheV9zdWZmaXhsZW4gOworICAgICAgIG1yLT5wc2lkX29mZnNldGxlbiA9IGlwNHJkLT5wc2lkX29mZnNldGxlbiA7CisgICAgICAgbXItPmVhYml0X2xlbiA9IGlwNHJkLT5lYWJpdF9sZW4gOworICAgICAgIG1yLT5lbnRyeV9udW0gPSBpcDRyZC0+ZW50cnlfbnVtIDsKKworICAgICAgICsrbXJfa21lbV9hbGxvY2VkOworICAgICAgIGxpc3RfYWRkX3RhaWwoJm1yLT5tcl9saXN0LCAmcGFybS0+bWFwX2xpc3QpOworCitvdXQ6CisJaXA2XzRyZF9ub3RpZnkoUlRNX05FVzRSRCxtciwgZGV2LDApOyAvKiBtb2RpZmllZCBieSBNU1BEICovCisJd3JpdGVfdW5sb2NrX2JoKCZwYXJtLT5tYXBfbG9jayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQKK2lwNl90bmxfNHJkX21yX2RlbGV0ZV9hbGwoc3RydWN0IGlwNl90bmxfNHJkX3Bhcm0gKnBhcm0sIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlwNl90bmxfNHJkX21hcF9ydWxlICptciwgKm1yX3J1bGU7CisKKwl3cml0ZV9sb2NrX2JoKCZwYXJtLT5tYXBfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlIChtciwgbXJfcnVsZSwgJnBhcm0tPm1hcF9saXN0LCBtcl9saXN0KXsKKwkJaXA2X3RubF80cmRfbXJfZGVzdHJveSgiYWxsIiwgbXIpOworCX0KKwlpcDZfNHJkX25vdGlmeShSVE1fREVMNFJELG1yLCBkZXYgLDEpOworCXdyaXRlX3VubG9ja19iaCgmcGFybS0+bWFwX2xvY2spOworCit9CisKK3N0YXRpYyBpbnQKK2lwNl90bmxfNHJkX21yX2RlbGV0ZShfX3UxNiBlbnRyeV9udW0gLCBzdHJ1Y3QgaXA2X3RubF80cmRfcGFybSAqcGFybSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaXA2X3RubF80cmRfbWFwX3J1bGUgKm1yLCAqbXJfcnVsZTsKKwlpbnQgZXJyID0gLTEgOworCisJd3JpdGVfbG9ja19iaCgmcGFybS0+bWFwX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSAobXIsIG1yX3J1bGUsICZwYXJtLT5tYXBfbGlzdCwgbXJfbGlzdCl7CisJCWlmKCBtci0+ZW50cnlfbnVtID09IGVudHJ5X251bSApeworCQkJcHJpbnRrKEtFUk5fREVCVUcgImlwNl90bmxfNHJkX21yX2RlbGV0ZTogbWFwIHJ1bGUgZm91bmQgZGVsZXRlIik7CisJCQlpcDZfdG5sXzRyZF9tcl9kZXN0cm95KCJvbmUiLCBtcik7CisJCQllcnIgPSAwIDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlwNl80cmRfbm90aWZ5KFJUTV9ERUw0UkQsbXIsZGV2LDApOworCXdyaXRlX3VubG9ja19iaCgmcGFybS0+bWFwX2xvY2spOworCXJldHVybiBlcnIgOworfQorCitzdGF0aWMgdm9pZAoraXA2X3RubF80cmRfbXJfc2hvdyhzdHJ1Y3QgaXA2X3RubF80cmRfcGFybSAqcGFybSkKK3sKKwlzdHJ1Y3QgaXA2X3RubF80cmRfbWFwX3J1bGUgKm1yOworCisgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIi0tIDRyZCBtYXBwaW5nIHJ1bGUgbGlzdFxuIik7CisgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIi0tIGVudHJ5IG51bSA9ICVkIFxuIixtcl9rbWVtX2FsbG9jZWQpOworCisJcmVhZF9sb2NrKCZwYXJtLT5tYXBfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShtciwgJnBhcm0tPm1hcF9saXN0LCBtcl9saXN0KXsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiUwM2QgOiAlMDNkLiUwM2QuJTAzZC4lMDNkLyUwMmQgJTAyeCUwMng6JTAyeCUwMng6JTAyeCUwMng6JTAyeCUwMng6JTAyeCUwMng6JTAyeCUwMng6JTAyeCUwMng6JTAyeCUwMngvJTAzZCAlMDJ4JTAyeDolMDJ4JTAyeDolMDJ4JTAyeDolMDJ4JTAyeDolMDJ4JTAyeDolMDJ4JTAyeDolMDJ4JTAyeDolMDJ4JTAyeC8lMDNkIGVhYml0OiUwM2Qgb2Zmc2V0OiUwM2QgXG4iLAorCQkJbXItPmVudHJ5X251bSwKKwkJCShudG9obChtci0+cHJlZml4KSA+PiAyNCkgJiAweGZmLAorCQkJKG50b2hsKG1yLT5wcmVmaXgpID4+IDE2KSAmIDB4ZmYsCisJCQkobnRvaGwobXItPnByZWZpeCkgPj4gIDgpICYgMHhmZiwKKwkJCW50b2hsKG1yLT5wcmVmaXgpICYgMHhmZiwKKwkJCW1yLT5wcmVmaXhsZW4sCisJCQltci0+cmVsYXlfcHJlZml4LnM2X2FkZHJbMF0sCisJCQltci0+cmVsYXlfcHJlZml4LnM2X2FkZHJbMV0sCisJCQltci0+cmVsYXlfcHJlZml4LnM2X2FkZHJbMl0sCisJCQltci0+cmVsYXlfcHJlZml4LnM2X2FkZHJbM10sCisJCQltci0+cmVsYXlfcHJlZml4LnM2X2FkZHJbNF0sCisJCQltci0+cmVsYXlfcHJlZml4LnM2X2FkZHJbNV0sCisJCQltci0+cmVsYXlfcHJlZml4LnM2X2FkZHJbNl0sCisJCQltci0+cmVsYXlfcHJlZml4LnM2X2FkZHJbN10sCisJCQltci0+cmVsYXlfcHJlZml4LnM2X2FkZHJbOF0sCisJCQltci0+cmVsYXlfcHJlZml4LnM2X2FkZHJbOV0sCisJCQltci0+cmVsYXlfcHJlZml4LnM2X2FkZHJbMTBdLAorCQkJbXItPnJlbGF5X3ByZWZpeC5zNl9hZGRyWzExXSwKKwkJCW1yLT5yZWxheV9wcmVmaXguczZfYWRkclsxMl0sCisJCQltci0+cmVsYXlfcHJlZml4LnM2X2FkZHJbMTNdLAorCQkJbXItPnJlbGF5X3ByZWZpeC5zNl9hZGRyWzE0XSwKKwkJCW1yLT5yZWxheV9wcmVmaXguczZfYWRkclsxNV0sCisJCQltci0+cmVsYXlfcHJlZml4bGVuLAorCQkJbXItPnJlbGF5X3N1ZmZpeC5zNl9hZGRyWzBdLAorCQkJbXItPnJlbGF5X3N1ZmZpeC5zNl9hZGRyWzFdLAorCQkJbXItPnJlbGF5X3N1ZmZpeC5zNl9hZGRyWzJdLAorCQkJbXItPnJlbGF5X3N1ZmZpeC5zNl9hZGRyWzNdLAorCQkJbXItPnJlbGF5X3N1ZmZpeC5zNl9hZGRyWzRdLAorCQkJbXItPnJlbGF5X3N1ZmZpeC5zNl9hZGRyWzVdLAorCQkJbXItPnJlbGF5X3N1ZmZpeC5zNl9hZGRyWzZdLAorCQkJbXItPnJlbGF5X3N1ZmZpeC5zNl9hZGRyWzddLAorCQkJbXItPnJlbGF5X3N1ZmZpeC5zNl9hZGRyWzhdLAorCQkJbXItPnJlbGF5X3N1ZmZpeC5zNl9hZGRyWzldLAorCQkJbXItPnJlbGF5X3N1ZmZpeC5zNl9hZGRyWzEwXSwKKwkJCW1yLT5yZWxheV9zdWZmaXguczZfYWRkclsxMV0sCisJCQltci0+cmVsYXlfc3VmZml4LnM2X2FkZHJbMTJdLAorCQkJbXItPnJlbGF5X3N1ZmZpeC5zNl9hZGRyWzEzXSwKKwkJCW1yLT5yZWxheV9zdWZmaXguczZfYWRkclsxNF0sCisJCQltci0+cmVsYXlfc3VmZml4LnM2X2FkZHJbMTVdLAorCQkJbXItPnJlbGF5X3N1ZmZpeGxlbiwKKwkJCW1yLT5lYWJpdF9sZW4sCisJCQltci0+cHNpZF9vZmZzZXRsZW4gKTsKKwl9CisJcmVhZF91bmxvY2soJnBhcm0tPm1hcF9sb2NrKTsKK30KKworc3RhdGljIGludAoraXA2X3RubF80cmRfbW9kaWZ5X2RhZGRyKHN0cnVjdCBpbjZfYWRkciAqZGFkZHI2LCBfX2JlMzIgZGFkZHI0LCBfX2JlMTYgZHBvcnQ0LAorCQlzdHJ1Y3QgaXA2X3RubF80cmRfbWFwX3J1bGUgKm1yKQoreworICAgICAgIGludCBpLCBwYncwLCBwYmkwLCBwYmkxOworICAgICAgIF9fdTMyIGRhZGRyWzRdOworICAgICAgIF9fdTMyIHBvcnRfc2V0X2lkID0gMDsKKyAgICAgICBfX3UzMiBtYXNrOworICAgICAgIF9fdTMyIGRhID0gbnRvaGwoZGFkZHI0KTsKKyAgICAgICBfX3UxNiBkcCA9IG50b2hzKGRwb3J0NCk7CisgICAgICAgX191MzIgZGlhZGRyWzRdOworICAgICAgIGludCBwb3J0X3NldF9pZF9sZW4gPSAoIG1yLT5lYWJpdF9sZW4gKSAtICggMzIgLSBtci0+cHJlZml4bGVuICkgOworCisgICAgICAgaWYgKCBwb3J0X3NldF9pZF9sZW4gPCAwKSB7CisgICAgICAgICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiaXA2X3RubF80cmRfbW9kaWZ5X2RhZGRyOiBQU0lEIGxlbmd0aCBFUlJPUiAlZFxuIiwgcG9ydF9zZXRfaWRfbGVuKTsKKyAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICB9CisKKyAgICAgICBpZiAoIHBvcnRfc2V0X2lkX2xlbiA+IDApIHsKKyAgICAgICAgICAgICAgIG1hc2sgPSAweGZmZmZmZmZmID4+ICgzMiAtIHBvcnRfc2V0X2lkX2xlbik7CisgICAgICAgICAgICAgICBwb3J0X3NldF9pZCA9ICggZHAgPj4gKDE2IC0gbXItPnBzaWRfb2Zmc2V0bGVuIC0gcG9ydF9zZXRfaWRfbGVuICkgJiBtYXNrICkgOworICAgICAgIH0KKworICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgICAgICAgICBkYWRkcltpXSA9IG50b2hsKG1yLT5yZWxheV9wcmVmaXguczZfYWRkcjMyW2ldKQorICAgICAgICAgICAgICAgICAgICAgICB8IG50b2hsKG1yLT5yZWxheV9zdWZmaXguczZfYWRkcjMyW2ldKTsKKworICAgICAgIGlmKCBtci0+cHJlZml4bGVuIDwgMzIgKSB7CisgICAgICAgICAgICAgICBwYncwID0gbXItPnJlbGF5X3ByZWZpeGxlbiA+PiA1OworICAgICAgICAgICAgICAgcGJpMCA9IG1yLT5yZWxheV9wcmVmaXhsZW4gJiAweDFmOworICAgICAgICAgICAgICAgZGFkZHJbcGJ3MF0gfD0gKGRhIDw8IG1yLT5wcmVmaXhsZW4pID4+IHBiaTA7CisgICAgICAgICAgICAgICBwYmkxID0gcGJpMCAtIG1yLT5wcmVmaXhsZW47CisgICAgICAgICAgICAgICBpZiAocGJpMSA+IDApCisgICAgICAgICAgICAgICAgICAgICAgIGRhZGRyW3BidzArMV0gfD0gZGEgPDwgKDMyIC0gcGJpMSk7CisJfQorICAgICAgIGlmICggcG9ydF9zZXRfaWRfbGVuID4gMCkgeworCSAgICAgICBwYncwID0gKG1yLT5yZWxheV9wcmVmaXhsZW4gKyAzMiAtIG1yLT5wcmVmaXhsZW4pID4+IDU7CisJICAgICAgIHBiaTAgPSAobXItPnJlbGF5X3ByZWZpeGxlbiArIDMyIC0gbXItPnByZWZpeGxlbikgJiAweDFmOworCSAgICAgICBkYWRkcltwYncwXSB8PSAocG9ydF9zZXRfaWQgPDwgKDMyIC0gcG9ydF9zZXRfaWRfbGVuKSkgPj4gcGJpMDsKKwkgICAgICAgcGJpMSA9IHBiaTAgLSAoMzIgLSBwb3J0X3NldF9pZF9sZW4pOworCSAgICAgICBpZiAocGJpMSA+IDApCisJCSAgICAgICBkYWRkcltwYncwKzFdIHw9IHBvcnRfc2V0X2lkIDw8ICgzMiAtIHBiaTEpOworICAgICAgIH0KKworICAgICAgIG1lbXNldChkaWFkZHIsIDAsIHNpemVvZihkaWFkZHIpKTsKKworICAgICAgIGRpYWRkclsyXSA9ICggZGEgPj4gOCApIDsKKyAgICAgICBkaWFkZHJbM10gPSAoIGRhIDw8IDI0ICkgOworICAgICAgIGRpYWRkclszXSB8PSAoIHBvcnRfc2V0X2lkIDw8IDggKSA7CisKKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICAgICAgICAgZGFkZHJbaV0gPSBkYWRkcltpXSB8IGRpYWRkcltpXSA7CisKKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICAgICAgICAgZGFkZHI2LT5zNl9hZGRyMzJbaV0gPSBodG9ubChkYWRkcltpXSk7CisKKyAgICAgICAvKiBEQkcgKi8KKyAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiaXA2X3RubF80cmRfbW9kaWZ5X2RhZGRyOiAlMDh4ICUwOHggJTA4eCAlMDh4ICBQU0lEOiUwNHhcbiIsCisgICAgICAgICAgICAgICBkYWRkclswXSwgZGFkZHJbMV0sIGRhZGRyWzJdLCBkYWRkclszXSwgcG9ydF9zZXRfaWQpOworCisgICAgICAgcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXA2X3RubF80cmRfcmN2X2hlbHBlciAtIAorICogICBAc2tiOiByZWNlaXZlZCBzb2NrZXQgYnVmZmVyCisgKiAgIEB0OiB0dW5uZWwgZGV2aWNlCisgKiovCisKK3N0YXRpYyBpbnQKK2lwNl90bmxfNHJkX3Jjdl9oZWxwZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwNl90bmwgKnQpCit7CisgICAgICAgaW50IGVyciA9IDA7CisgICAgICAgc3RydWN0IGlwaGRyICppcGg7CisKKyAgICAgICBpcGggPSBpcF9oZHIoc2tiKTsKKworICAgICAgIHN3aXRjaCAoaXBoLT5wcm90b2NvbCkgeworICAgICAgIGNhc2UgSVBQUk9UT19UQ1A6CisgICAgICAgY2FzZSBJUFBST1RPX1VEUDoKKyAgICAgICBjYXNlIElQUFJPVE9fSUNNUDoKKyAgICAgICBjYXNlIElQUFJPVE9fR1JFOgorICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgIGVyciA9IC0xOworICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgfQorCisgICAgICAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludAoraXA2X3RubF80cmRfeG1pdF9oZWxwZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpNiAqZmw2LAorCQlzdHJ1Y3QgaXA2X3RubCAqdCkKK3sKKyAgICAgICBpbnQgZXJyID0gMDsKKyAgICAgICBzdHJ1Y3QgaXBoZHIgKmlwaCwgKmljbXBpcGg7CisgICAgICAgX19iZTE2ICAqaWRwOworICAgICAgIHN0cnVjdCB0Y3BoZHIgKnRjcGgsICppY21wdGNwaDsKKyAgICAgICBzdHJ1Y3QgdWRwaGRyICp1ZHBoLCAqaWNtcHVkcGg7CisgICAgICAgc3RydWN0IGljbXBoZHIgKmljbXBoOworICAgICAgIHN0cnVjdCBncmVfaGRyICpncmVoOworICAgICAgIF9fdTMyIG1hc2s7CisgICAgICAgX19iZTE2ICpzcG9ydHAgPSBOVUxMOworICAgICAgIF9fYmUzMiBkYWRkcjsKKyAgICAgICBfX2JlMTYgZHBvcnQ7CisgICAgICAgdTggKnB0cjsKKyAgICAgICBpbnQgbm9fZHN0X2NoZyA9IDA7CisgICAgICAgc3RydWN0IGlwNl90bmxfNHJkX21hcF9ydWxlICptciwqbXJfdG1wOworICAgICAgIGludCBtcl9wcmVmaXhsZW4gOworICAgICAgIGludCBjb3VudCA7CisKKyAgICAgICBpcGggPSBpcF9oZHIoc2tiKTsKKworICAgICAgIGRhZGRyID0gaXBoLT5kYWRkcjsKKyAgICAgICBpZHAgPSAmaXBoLT5pZDsKKworICAgICAgIHB0ciA9ICh1OCAqKWlwaDsKKyAgICAgICBwdHIgKz0gaXBoLT5paGwgKiA0OworICAgICAgIHN3aXRjaCAoaXBoLT5wcm90b2NvbCkgeworICAgICAgIGNhc2UgSVBQUk9UT19UQ1A6CisgICAgICAgICAgICAgICB0Y3BoID0gKHN0cnVjdCB0Y3BoZHIgKilwdHI7CisgICAgICAgICAgICAgICBzcG9ydHAgPSAmdGNwaC0+c291cmNlOworICAgICAgICAgICAgICAgZHBvcnQgPSB0Y3BoLT5kZXN0OworICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgY2FzZSBJUFBST1RPX1VEUDoKKyAgICAgICAgICAgICAgIHVkcGggPSAoc3RydWN0IHVkcGhkciAqKXB0cjsKKyAgICAgICAgICAgICAgIHNwb3J0cCA9ICZ1ZHBoLT5zb3VyY2U7CisgICAgICAgICAgICAgICBkcG9ydCA9IHVkcGgtPmRlc3Q7CisgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICBjYXNlIElQUFJPVE9fSUNNUDoKKyAgICAgICAgICAgICAgIGljbXBoID0gKHN0cnVjdCBpY21waGRyICopcHRyOworICAgICAgICAgICAgICAgc3dpdGNoIChpY21waC0+dHlwZSkgeworICAgICAgICAgICAgICAgY2FzZSBJQ01QX0RFU1RfVU5SRUFDSDoKKyAgICAgICAgICAgICAgIGNhc2UgSUNNUF9TT1VSQ0VfUVVFTkNIOgorICAgICAgICAgICAgICAgY2FzZSBJQ01QX1JFRElSRUNUOgorICAgICAgICAgICAgICAgY2FzZSBJQ01QX1RJTUVfRVhDRUVERUQ6CisgICAgICAgICAgICAgICBjYXNlIElDTVBfUEFSQU1FVEVSUFJPQjoKKyAgICAgICAgICAgICAgICAgICAgICAgcHRyID0gKHU4ICopaWNtcGg7CisgICAgICAgICAgICAgICAgICAgICAgIHB0ciArPSBzaXplb2Yoc3RydWN0IGljbXBoZHIpOworICAgICAgICAgICAgICAgICAgICAgICBpY21waXBoID0gKHN0cnVjdCBpcGhkciopcHRyOworICAgICAgICAgICAgICAgICAgICAgICBpZiAobnRvaHMoaXBoLT50b3RfbGVuKSA8IGljbXBpcGgtPmlobCAqIDQgKyAxMikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgIGRhZGRyID0gaWNtcGlwaC0+c2FkZHI7CisgICAgICAgICAgICAgICAgICAgICAgIHB0ciArPSBpY21waXBoLT5paGwgKiA0OworICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGljbXBpcGgtPnByb3RvY29sKSB7CisgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSVBQUk9UT19UQ1A6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNtcHRjcGggPSAoc3RydWN0IHRjcGhkciAqKXB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcG9ydHAgPSAmaWNtcHRjcGgtPmRlc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHBvcnQgPSBpY21wdGNwaC0+c291cmNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICBjYXNlIElQUFJPVE9fVURQOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljbXB1ZHBoID0gKHN0cnVjdCB1ZHBoZHIgKilwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BvcnRwID0gJmljbXB1ZHBoLT5kZXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRwb3J0ID0gaWNtcHVkcGgtPnNvdXJjZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgIG5vX2RzdF9jaGcgPSAxOworICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgSVBQUk9UT19HUkU6CisgICAgICAgICAgICAgICBncmVoID0gKHN0cnVjdCBncmVfaGRyICopcHRyOworICAgICAgICAgICAgICAgaWYoZ3JlaC0+cHJvdG9jb2wgIT0gR1JFX1BST1RPQ09MX1BQVFApeworICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBub19kc3RfY2hnID0gMTsKKyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICBlcnIgPSAtMTsKKyAgICAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgIH0KKworICAgICAgIGlmICggbm9fZHN0X2NoZyA9PSAwICl7CisKKyAgICAgICAgICAgICAgIGNvdW50ID0gMDsKKyAgICAgICAgICAgICAgIG1yX3ByZWZpeGxlbiA9IDA7CisKKyAgICAgICAgICAgICAgIHJlYWRfbG9jaygmdC0+aXA0cmQubWFwX2xvY2spOworICAgICAgICAgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSAobXIsICZ0LT5pcDRyZC5tYXBfbGlzdCwgbXJfbGlzdCl7CisgICAgICAgICAgICAgICAgICAgICAgIG1hc2sgPSAweGZmZmZmZmZmIDw8ICgzMiAtIG1yLT5wcmVmaXhsZW4pIDsKKyAgICAgICAgICAgICAgICAgICAgICAgaWYoIChodG9ubChkYWRkcikgJiBtYXNrICkgPT0gaHRvbmwoIG1yLT5wcmVmaXgpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggbXItPnByZWZpeGxlbiA+PSBtcl9wcmVmaXhsZW4gKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1yX3ByZWZpeGxlbiA9IG1yLT5wcmVmaXhsZW4gOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXJfdG1wID0gbXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICBpZiAoY291bnQpeworICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBpcDZfdG5sXzRyZF9tb2RpZnlfZGFkZHIoJmZsNi0+ZGFkZHIsIGRhZGRyLCBkcG9ydCwgbXJfdG1wICk7CisgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF91bmxvY2soJnQtPmlwNHJkLm1hcF9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICByZWFkX3VubG9jaygmdC0+aXA0cmQubWFwX2xvY2spOworCisgICAgICAgICAgICAgICBpZihzcG9ydHAgJiYgaWRwKXsKKyAgICAgICAgICAgICAgICAgICAgICAgKmlkcD0qc3BvcnRwOworICAgICAgICAgICAgICAgfQorICAgICAgIH0KKworICAgICAgIGlwaC0+Y2hlY2sgPSAwOworICAgICAgIGlwaC0+Y2hlY2sgPSBpcF9mYXN0X2NzdW0oKHVuc2lnbmVkIGNoYXIgKilpcGgsIGlwaC0+aWhsKTsKKworICAgICAgIC8qIFhYWDogKi8KKyAgICAgICBza2ItPmxvY2FsX2RmID0gMTsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogaXA2X3RubF80cmRfdXBkYXRlX3Bhcm1zIC0gdXBkYXRlIDRyZCBwYXJhbWV0ZXJzCisgKiAgIEB0OiB0dW5uZWwgdG8gYmUgdXBkYXRlZAorICoKKyAqIERlc2NyaXB0aW9uOgorICogICBpcDZfdG5sXzRyZF91cGRhdGVfcGFybXMoKSB1cGRhdGVzIDRyZCBwYXJhbWV0ZXJzCisgKiovCitzdGF0aWMgdm9pZAoraXA2X3RubF80cmRfdXBkYXRlX3Bhcm1zKHN0cnVjdCBpcDZfdG5sICp0KQoreworCWludCBwYncwLCBwYmkwLCBwYmkxOworCV9fdTMyIGQ7CisKKwl0LT5pcDRyZC5wb3J0X3NldF9pZF9sZW4gPSB0LT5pcDRyZC5yZWxheV9zdWZmaXhsZW4KKwkJCQktIHQtPmlwNHJkLnJlbGF5X3ByZWZpeGxlbgorCQkJCS0gKDMyIC0gdC0+aXA0cmQucHJlZml4bGVuKTsKKwlwYncwID0gKHQtPmlwNHJkLnJlbGF5X3N1ZmZpeGxlbiAtIHQtPmlwNHJkLnBvcnRfc2V0X2lkX2xlbikgPj4gNTsKKwlwYmkwID0gKHQtPmlwNHJkLnJlbGF5X3N1ZmZpeGxlbiAtIHQtPmlwNHJkLnBvcnRfc2V0X2lkX2xlbikgJiAweDFmOworCWQgPSAobnRvaGwodC0+cGFybXMubGFkZHIuczZfYWRkcjMyW3BidzBdKSA8PCBwYmkwKQorCQk+PiAoMzIgLSB0LT5pcDRyZC5wb3J0X3NldF9pZF9sZW4pOworCXBiaTEgPSBwYmkwIC0gKDMyIC0gdC0+aXA0cmQucG9ydF9zZXRfaWRfbGVuKTsKKworCWlmIChwYmkxID4gMCkKKwkJZCB8PSBudG9obCh0LT5wYXJtcy5sYWRkci5zNl9hZGRyMzJbcGJ3MCsxXSkgPj4gKDMyIC0gcGJpMSk7CisJdC0+aXA0cmQucG9ydF9zZXRfaWQgPSBkOworCisJLyogbG9jYWwgdjQgYWRkcmVzcyAqLworCXQtPmlwNHJkLmxhZGRyNCA9IHQtPmlwNHJkLnByZWZpeDsKKwlwYncwID0gdC0+aXA0cmQucmVsYXlfcHJlZml4bGVuID4+IDU7CisJcGJpMCA9IHQtPmlwNHJkLnJlbGF5X3ByZWZpeGxlbiAmIDB4MWY7CisJZCA9IChudG9obCh0LT5wYXJtcy5sYWRkci5zNl9hZGRyMzJbcGJ3MF0pIDw8IHBiaTApCisJCT4+IHQtPmlwNHJkLnByZWZpeGxlbjsKKwlwYmkxID0gcGJpMCAtIHQtPmlwNHJkLnByZWZpeGxlbjsKKwlpZiAocGJpMSA+IDApCisJCWQgfD0gbnRvaGwodC0+cGFybXMubGFkZHIuczZfYWRkcjMyW3BidzArMV0pID4+ICgzMiAtIHBiaTEpOworCXQtPmlwNHJkLmxhZGRyNCB8PSBodG9ubChkKTsKKwlpZiAodC0+aXA0cmQucG9ydF9zZXRfaWRfbGVuIDwgMCkgeworCQlkID0gbnRvaGwodC0+aXA0cmQubGFkZHI0KTsKKwkJZCAmPSAweGZmZmZmZmZmIDw8IC10LT5pcDRyZC5wb3J0X3NldF9pZF9sZW47CisJCXQtPmlwNHJkLmxhZGRyNCA9IGh0b25sKGQpOworCX0KKworfQorCisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRzdF9lbnRyeSAqaXA2X3RubF9kc3RfY2hlY2soc3RydWN0IGlwNl90bmwgKnQpCiB7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gdC0+ZHN0X2NhY2hlOwpAQCAtMTU4LDIyICs3MDcsMjYgQEAKICAqICAgZWxzZSAlTlVMTAogICoqLwogCi0jZGVmaW5lIGZvcl9lYWNoX2lwNl90dW5uZWxfcmN1KHN0YXJ0KSBcCi0JZm9yICh0ID0gcmN1X2RlcmVmZXJlbmNlKHN0YXJ0KTsgdDsgdCA9IHJjdV9kZXJlZmVyZW5jZSh0LT5uZXh0KSkKIAogc3RhdGljIHN0cnVjdCBpcDZfdG5sICoKIGlwNl90bmxfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpyZW1vdGUsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqbG9jYWwpCiB7Ci0JdW5zaWduZWQgaW50IGgwID0gSEFTSChyZW1vdGUpOwotCXVuc2lnbmVkIGludCBoMSA9IEhBU0gobG9jYWwpOworLy8JdW5zaWduZWQgaW50IGgwID0gSEFTSChyZW1vdGUpOyAvKiA0cmQgc3VwcG9ydCwgcmVtb3RlIGNvdWxkIGJlIGFueSwgc28gaGFzaGluZyB0byBiZSBkb25lIG9ubHkgYmFzZWQgb24gbG9jYWwgYWRkcmVzcyAqLworCXVuc2lnbmVkIGludCBoMSA9IEhBU0gobG9jYWwpOyAKIAlzdHJ1Y3QgaXA2X3RubCAqdDsKIAlzdHJ1Y3QgaXA2X3RubF9uZXQgKmlwNm4gPSBuZXRfZ2VuZXJpYyhuZXQsIGlwNl90bmxfbmV0X2lkKTsKIAotCWZvcl9lYWNoX2lwNl90dW5uZWxfcmN1KGlwNm4tPnRubHNfcl9sW2gwIF4gaDFdKSB7CisJZm9yX2VhY2hfaXA2X3R1bm5lbF9yY3UoaXA2bi0+dG5sc19yX2xbaDFdKSB7CiAJCWlmIChpcHY2X2FkZHJfZXF1YWwobG9jYWwsICZ0LT5wYXJtcy5sYWRkcikgJiYKIAkJICAgIGlwdjZfYWRkcl9lcXVhbChyZW1vdGUsICZ0LT5wYXJtcy5yYWRkcikgJiYKIAkJICAgICh0LT5kZXYtPmZsYWdzICYgSUZGX1VQKSkKIAkJCXJldHVybiB0OworICAgICAgICAgICAgICAgIGlmICh0LT5pcDRyZC5wcmVmaXggJiYKKyAgICAgICAgICAgICAgICAgICBpcHY2X2FkZHJfZXF1YWwobG9jYWwsICZ0LT5wYXJtcy5sYWRkcikgJiYKKyAgICAgICAgICAgICAgICAvKiBpcHY2X3ByZWZpeF9lcXVhbChyZW1vdGUsICZ0LT5pcDRyZC5yZWxheV9wcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgIHQtPmlwNHJkLnJlbGF5X3ByZWZpeGxlbikgJiYgNFJEIEQgICovCisgICAgICAgICAgICAgICAgICAgKHQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApKQorICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdDsKIAl9CiAJdCA9IHJjdV9kZXJlZmVyZW5jZShpcDZuLT50bmxzX3djWzBdKTsKIAlpZiAodCAmJiAodC0+ZGV2LT5mbGFncyAmIElGRl9VUCkpCkBAIC0xOTYsMTQgKzc0OSwxNCBAQAogc3RhdGljIHN0cnVjdCBpcDZfdG5sIF9fcmN1ICoqCiBpcDZfdG5sX2J1Y2tldChzdHJ1Y3QgaXA2X3RubF9uZXQgKmlwNm4sIGNvbnN0IHN0cnVjdCBpcDZfdG5sX3Bhcm0gKnApCiB7Ci0JY29uc3Qgc3RydWN0IGluNl9hZGRyICpyZW1vdGUgPSAmcC0+cmFkZHI7CisvLwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnJlbW90ZSA9ICZwLT5yYWRkcjsKIAljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmxvY2FsID0gJnAtPmxhZGRyOwogCXVuc2lnbmVkIGggPSAwOwogCWludCBwcmlvID0gMDsKIAotCWlmICghaXB2Nl9hZGRyX2FueShyZW1vdGUpIHx8ICFpcHY2X2FkZHJfYW55KGxvY2FsKSkgeworCWlmICghaXB2Nl9hZGRyX2FueShsb2NhbCkpIHsgICAgICAvKiA0cmQgc3VwcG9ydCwgc2luY2UgcmVtb3RlIGFkZHJlc3MgY291bGQgYmUgYW55IGFkZHJlc3MsIHJlZnJhaW4gZnJvbSBjaGVja2luZyBiYXNlZCBvbiByZW1vdGUgKi8gCiAJCXByaW8gPSAxOwotCQloID0gSEFTSChyZW1vdGUpIF4gSEFTSChsb2NhbCk7CisJCWggPSBIQVNIKGxvY2FsKTsJCiAJfQogCXJldHVybiAmaXA2bi0+dG5sc1twcmlvXVtoXTsKIH0KQEAgLTI5MSw2ICs4NDQsOSBAQAogCiAJc3RyY3B5KHQtPnBhcm1zLm5hbWUsIGRldi0+bmFtZSk7CiAKKwlyd2xvY2tfaW5pdCgmdC0+aXA0cmQubWFwX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZ0LT5pcDRyZC5tYXBfbGlzdCk7IAorCiAJZGV2X2hvbGQoZGV2KTsKIAlpcDZfdG5sX2xpbmsoaXA2biwgdCk7CiAJcmV0dXJuIHQ7CkBAIC03NjYsNiArMTMyMiwxMCBAQAogCQlfX3NrYl90dW5uZWxfcngoc2tiLCB0LT5kZXYpOwogCiAJCWRzY3BfZWNuX2RlY2Fwc3VsYXRlKHQsIGlwdjZoLCBza2IpOworICAgICAgICAgICAgICAgIGlmIChpcDZfdG5sXzRyZF9yY3ZfaGVscGVyKHNrYiwgdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjdV9yZWFkX3VubG9jaygpOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkaXNjYXJkOworICAgICAgICAgICAgICAgIH0KIAogCQluZXRpZl9yeChza2IpOwogCkBAIC04OTgsNiArMTQ1OCw3IEBACiAJdTggcHJvdG87CiAJaW50IGVyciA9IC0xOwogCWludCBwa3RfbGVuOworCV9fdTggaG9wX2xpbWl0OyAgICAKIAogCWlmICghZmw2LT5mbG93aTZfbWFyaykKIAkJZHN0ID0gaXA2X3RubF9kc3RfY2hlY2sodCk7CkBAIC05MzQsMTAgKzE0OTUsMjEgQEAKIAkJbXR1ID0gSVBWNl9NSU5fTVRVOwogCWlmIChza2JfZHN0KHNrYikpCiAJCXNrYl9kc3Qoc2tiKS0+b3BzLT51cGRhdGVfcG10dShza2JfZHN0KHNrYiksIG10dSk7Ci0JaWYgKHNrYi0+bGVuID4gbXR1KSB7Ci0JCSpwbXR1ID0gbXR1OwotCQllcnIgPSAtRU1TR1NJWkU7Ci0JCWdvdG8gdHhfZXJyX2RzdF9yZWxlYXNlOworICAgICAgICBpZiAoIXQtPmlwNHJkLnByZWZpeCkgeyAgIC8qIDRyZCBzdXBwb3J0IHJlcXVpcmVzIFBvc3QgRnJhZ21lbnRhdGlvbiwgc28gc2tiLT5sZW4gY291bGQgYmUgZ3JlYXRlciB0aGFuIE1UVSAqLyAKKyAgICAgICAgICAgICAgICBpZiAoc2tiLT5sZW4gPiBtdHUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwbXR1ID0gbXR1OworICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gLUVNU0dTSVpFOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byB0eF9lcnJfZHN0X3JlbGVhc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgIAorCisJaWYgKHQtPmlwNHJkLnByZWZpeCkgeworCQlzdHJ1Y3QgaXBoZHIgKmlwaDsKKwkJaXBoID0gaXBfaGRyKHNrYik7CisJCWhvcF9saW1pdCA9IGlwaC0+dHRsOworCX0KKwllbHNlIHsKKwkJaG9wX2xpbWl0ID0gdC0+cGFybXMuaG9wX2xpbWl0OwogCX0KIAogCS8qCkBAIC05NzcsNyArMTU0OSw3IEBACiAJKihfX2JlMzIqKWlwdjZoID0gZmw2LT5mbG93bGFiZWwgfCBodG9ubCgweDYwMDAwMDAwKTsKIAlkc2ZpZWxkID0gSU5FVF9FQ05fZW5jYXBzdWxhdGUoMCwgZHNmaWVsZCk7CiAJaXB2Nl9jaGFuZ2VfZHNmaWVsZChpcHY2aCwgfklORVRfRUNOX01BU0ssIGRzZmllbGQpOwotCWlwdjZoLT5ob3BfbGltaXQgPSB0LT5wYXJtcy5ob3BfbGltaXQ7CisJaXB2NmgtPmhvcF9saW1pdCA9IGhvcF9saW1pdDsgICAgCiAJaXB2NmgtPm5leHRoZHIgPSBwcm90bzsKIAlpcHY2X2FkZHJfY29weSgmaXB2NmgtPnNhZGRyLCAmZmw2LT5zYWRkcik7CiAJaXB2Nl9hZGRyX2NvcHkoJmlwdjZoLT5kYWRkciwgJmZsNi0+ZGFkZHIpOwpAQCAtMTAzNCw2ICsxNjA2LDEwIEBACiAJaWYgKHQtPnBhcm1zLmZsYWdzICYgSVA2X1ROTF9GX1VTRV9PUklHX0ZXTUFSSykKIAkJZmw2LmZsb3dpNl9tYXJrID0gc2tiLT5tYXJrOwogCisKKyAgICAgICAgaWYgKHQtPmlwNHJkLnByZWZpeCAmJiBpcDZfdG5sXzRyZF94bWl0X2hlbHBlcihza2IsICZmbDYsIHQpKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKwogCWVyciA9IGlwNl90bmxfeG1pdDIoc2tiLCBkZXYsIGRzZmllbGQsICZmbDYsIGVuY2FwX2xpbWl0LCAmbXR1KTsKIAlpZiAoZXJyICE9IDApIHsKIAkJLyogWFhYOiBzZW5kIElDTVAgZXJyb3IgZXZlbiBpZiBERiBpcyBub3Qgc2V0LiAqLwpAQCAtMTEwNSw2ICsxNjgxLDggQEAKIAogCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewogCWNhc2UgaHRvbnMoRVRIX1BfSVApOgorICAgICAgICAgICAgICAgIGlmICh0LT5pcDRyZC5wcmVmaXggJiYgaXBfZGVmcmFnKHNrYiwgSVBfREVGUkFHX0lQNl9UTkxfNFJEKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBORVRERVZfVFhfT0s7CiAJCXJldCA9IGlwNGlwNl90bmxfeG1pdChza2IsIGRldik7CiAJCWJyZWFrOwogCWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6CkBAIC0xMTQzLDYgKzE3MjEsMTEgQEAKIAkJaWYgKHJ0eXBlJklQVjZfQUREUl9VTklDQVNUKQogCQkJcC0+ZmxhZ3MgfD0gSVA2X1ROTF9GX0NBUF9SQ1Y7CiAJfQorCisgICAgICAgIGlmICh0LT5pcDRyZC5wcmVmaXgpIHsKKyAgICAgICAgICAgICAgICBwLT5mbGFncyB8PSBJUDZfVE5MX0ZfQ0FQX1hNSVQ7CisgICAgICAgICAgICAgICAgcC0+ZmxhZ3MgfD0gSVA2X1ROTF9GX0NBUF9SQ1Y7CisgICAgICAgIH0KIH0KIAogc3RhdGljIHZvaWQgaXA2X3RubF9saW5rX2NvbmZpZyhzdHJ1Y3QgaXA2X3RubCAqdCkKQEAgLTEyMjAsNiArMTgwMyw3IEBACiAJdC0+cGFybXMuZmxvd2luZm8gPSBwLT5mbG93aW5mbzsKIAl0LT5wYXJtcy5saW5rID0gcC0+bGluazsKIAl0LT5wYXJtcy5wcm90byA9IHAtPnByb3RvOworICAgICAgICBpcDZfdG5sXzRyZF91cGRhdGVfcGFybXModCk7ICAgICAgICAKIAlpcDZfdG5sX2RzdF9yZXNldCh0KTsKIAlpcDZfdG5sX2xpbmtfY29uZmlnKHQpOwogCXJldHVybiAwOwpAQCAtMTI2MSw2ICsxODQ1LDggQEAKIAlzdHJ1Y3QgaXA2X3RubCAqdCA9IE5VTEw7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCXN0cnVjdCBpcDZfdG5sX25ldCAqaXA2biA9IG5ldF9nZW5lcmljKG5ldCwgaXA2X3RubF9uZXRfaWQpOworICAgICAgICBzdHJ1Y3QgaXA2X3RubF80cmQgaXA0cmQsICppcDRyZHA7ICAKKyAgICAgICAgc3RydWN0IGlwNl90bmxfNHJkX21hcF9ydWxlICptcjsgICAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTSU9DR0VUVFVOTkVMOgpAQCAtMTMzNCw5ICsxOTIwLDExNSBAQAogCQllcnIgPSAwOwogCQl1bnJlZ2lzdGVyX25ldGRldmljZShkZXYpOwogCQlicmVhazsKKwljYXNlIFNJT0NBREQ0UkQ6CisJY2FzZSBTSU9DREVMNFJEOgorCQllcnIgPSAtRVBFUk07CisJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJCWdvdG8gZG9uZTsKKworCQllcnIgPSAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJmlwNHJkLCBpZnItPmlmcl9pZnJ1LmlmcnVfZGF0YSwgc2l6ZW9mKGlwNHJkKSkpCisJCQlnb3RvIGRvbmU7CisKKwkJdCA9IG5ldGRldl9wcml2KGRldik7CisKKwkJaWYgKGNtZCA9PSBTSU9DQURENFJEKSB7CisKKwkJCV9fYmUzMiBwcmVmaXg7CisJCQlzdHJ1Y3QgaW42X2FkZHIgcmVsYXlfcHJlZml4LCByZWxheV9zdWZmaXg7CisKKwkJCWVyciA9IC1FSU5WQUw7CisKKwkJCWlmIChpcDRyZC5yZWxheV9zdWZmaXhsZW4gPiA2NCkKKwkJCQlnb3RvIGRvbmU7CisKKwkJCWlmIChpcDRyZC5yZWxheV9zdWZmaXhsZW4gPD0gaXA0cmQucmVsYXlfcHJlZml4bGVuKQorCQkJCWdvdG8gZG9uZTsKKworCQkJcHJlZml4ID0gaXA0cmQucHJlZml4ICYgaHRvbmwoMHhmZmZmZmZmZlVMIDw8ICgzMiAtIGlwNHJkLnByZWZpeGxlbikpOworCQkJaWYgKHByZWZpeCAhPSBpcDRyZC5wcmVmaXgpCisJCQkJZ290byBkb25lOworCisJCQlpcHY2X2FkZHJfcHJlZml4KCZyZWxheV9wcmVmaXgsICZpcDRyZC5yZWxheV9wcmVmaXgsIGlwNHJkLnJlbGF5X3ByZWZpeGxlbik7CisJCQlpZiAoIWlwdjZfYWRkcl9lcXVhbCgmcmVsYXlfcHJlZml4LCAmaXA0cmQucmVsYXlfcHJlZml4KSkKKwkJCQlnb3RvIGRvbmU7CisKKwkJCWlwdjZfYWRkcl9wcmVmaXgoJnJlbGF5X3N1ZmZpeCwgJmlwNHJkLnJlbGF5X3N1ZmZpeCwgaXA0cmQucmVsYXlfc3VmZml4bGVuKTsKKwkJCWlmICghaXB2Nl9hZGRyX2VxdWFsKCZyZWxheV9zdWZmaXgsICZpcDRyZC5yZWxheV9zdWZmaXgpKQorCQkJCWdvdG8gZG9uZTsKKworCisJCQllcnIgPSBpcDZfdG5sXzRyZF9tcl9jcmVhdGUoJmlwNHJkLCAmdC0+aXA0cmQsIHQtPmRldik7IC8qIG1vZGlmaWVkIGJ5IE1TUEQgKi8KKworCQkJaWYgKCBpcDRyZC5lbnRyeV9udW0gPT0gMCApeworCisJCQkJdC0+aXA0cmQucHJlZml4ID0gcHJlZml4OworCQkJCWlwdjZfYWRkcl9jb3B5KCZ0LT5pcDRyZC5yZWxheV9wcmVmaXgsICZyZWxheV9wcmVmaXgpOworCQkJCWlwdjZfYWRkcl9jb3B5KCZ0LT5pcDRyZC5yZWxheV9zdWZmaXgsICZyZWxheV9zdWZmaXgpOworCQkJCXQtPmlwNHJkLnByZWZpeGxlbiA9IGlwNHJkLnByZWZpeGxlbjsKKwkJCQl0LT5pcDRyZC5yZWxheV9wcmVmaXhsZW4gPSBpcDRyZC5yZWxheV9wcmVmaXhsZW47CisJCQkJdC0+aXA0cmQucmVsYXlfc3VmZml4bGVuID0gaXA0cmQucmVsYXlfc3VmZml4bGVuOworCQkJCXQtPmlwNHJkLnBzaWRfb2Zmc2V0bGVuID0gaXA0cmQucHNpZF9vZmZzZXRsZW47CisKKwkJCQlpcDZfdG5sXzRyZF91cGRhdGVfcGFybXModCk7CisJCQkJaXA2X3RubF9kc3RfcmVzZXQodCk7CisJCQkJaXA2X3RubF9saW5rX2NvbmZpZyh0KTsKKwkJCX0KKwkJCS8qIERCRyAqLworCQkJaXA2X3RubF80cmRfbXJfc2hvdygmdC0+aXA0cmQpOworCQl9ZWxzZSBpZihjbWQgPT0gU0lPQ0RFTDRSRCl7CisJCQlpZiAoIGlwNHJkLmVudHJ5X251bSA9PSAwICl7CisJCQkJaXA2X3RubF80cmRfbXJfZGVsZXRlX2FsbCgmdC0+aXA0cmQsIHQtPmRldik7CisJCQkJdC0+aXA0cmQucHJlZml4ID0gMDsKKwkJCQltZW1zZXQoJnQtPmlwNHJkLnJlbGF5X3ByZWZpeCwgMCwgc2l6ZW9mKHQtPmlwNHJkLnJlbGF5X3ByZWZpeCkpOworCQkJCW1lbXNldCgmdC0+aXA0cmQucmVsYXlfc3VmZml4LCAwLCBzaXplb2YodC0+aXA0cmQucmVsYXlfc3VmZml4KSk7CisJCQkJdC0+aXA0cmQucHJlZml4bGVuID0gMDsKKwkJCQl0LT5pcDRyZC5yZWxheV9wcmVmaXhsZW4gPSAwOworCQkJCXQtPmlwNHJkLnJlbGF5X3N1ZmZpeGxlbiA9IDA7CisJCQkJdC0+aXA0cmQucHNpZF9vZmZzZXRsZW4gPSAwOworCQkJCXQtPmlwNHJkLmxhZGRyNCA9IDA7CisJCQkJdC0+aXA0cmQucG9ydF9zZXRfaWQgPSB0LT5pcDRyZC5wb3J0X3NldF9pZF9sZW4gPSAwOworCisJCQkJaXA2X3RubF9kc3RfcmVzZXQodCk7CisJCQkJaXA2X3RubF9saW5rX2NvbmZpZyh0KTsKKwkJCX1lbHNleworCQkJCWVyciA9IGlwNl90bmxfNHJkX21yX2RlbGV0ZSggaXA0cmQuZW50cnlfbnVtICwgJnQtPmlwNHJkLCB0LT5kZXYpOyAgLyogbW9kaWZpZWQgYnkgTVNQRCAqLworCQkJfQorCQkJLyogREJHICovCisJCQlpcDZfdG5sXzRyZF9tcl9zaG93KCZ0LT5pcDRyZCk7CisJCX1lbHNleworCQkJcHJpbnRrKEtFUk5fRVJSICI9PT0gaW9jdGxfY21kIDB4JXggXG4iLGNtZCApOworCQl9CisJCWVyciA9IDA7CisJCWJyZWFrOworICAgICAgICBjYXNlIFNJT0NHRVQ0UkQ6CisgICAgICAgICAgICAgICAgdCA9IG5ldGRldl9wcml2KGRldik7CisgICAgICAgICAgICAgICAgaXA0cmRwID0gKHN0cnVjdCBpcDZfdG5sXzRyICopaWZyLT5pZnJfaWZydS5pZnJ1X2RhdGE7CisgCisgICAgICAgICAgICAgICAgcmVhZF9sb2NrKCZ0LT5pcDRyZC5tYXBfbG9jayk7CisgICAgICAgICAgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSAobXIsICZ0LT5pcDRyZC5tYXBfbGlzdCwgbXJfbGlzdCl7CisgICAgICAgICAgICAgICAgICAgICAgICBpcHY2X2FkZHJfY29weSgmaXA0cmQucmVsYXlfcHJlZml4LCAmbXItPnJlbGF5X3ByZWZpeCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpcHY2X2FkZHJfY29weSgmaXA0cmQucmVsYXlfc3VmZml4LCAmbXItPnJlbGF5X3N1ZmZpeCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpcDRyZC5wcmVmaXggPSBtci0+cHJlZml4OworICAgICAgICAgICAgICAgICAgICAgICAgaXA0cmQucmVsYXlfcHJlZml4bGVuID0gbXItPnJlbGF5X3ByZWZpeGxlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlwNHJkLnJlbGF5X3N1ZmZpeGxlbiA9IG1yLT5yZWxheV9zdWZmaXhsZW47CisgICAgICAgICAgICAgICAgICAgICAgICBpcDRyZC5wcmVmaXhsZW4gPSBtci0+cHJlZml4bGVuOworICAgICAgICAgICAgICAgICAgICAgICAgaXA0cmQuZWFiaXRfbGVuID0gbXItPmVhYml0X2xlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlwNHJkLnBzaWRfb2Zmc2V0bGVuID0gbXItPnBzaWRfb2Zmc2V0bGVuOworICAgICAgICAgICAgICAgICAgICAgICAgaXA0cmQuZW50cnlfbnVtID0gbXItPmVudHJ5X251bTsKKyAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIoaXA0cmRwLCAmaXA0cmQsIHNpemVvZihpcDRyZCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfdW5sb2NrKCZ0LT5pcDRyZC5tYXBfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IC1FRkFVTFQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpcDRyZHArKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVhZF91bmxvY2soJnQtPmlwNHJkLm1hcF9sb2NrKTsKKyAgICAgICAgICAgICAgICBicmVhazsKIAlkZWZhdWx0OgogCQllcnIgPSAtRUlOVkFMOwogCX0KK2RvbmU6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTU0NSwxMiArMjIzNywyMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpcDZfdHVubmVsX2luaXQodm9pZCkKIHsKLQlpbnQgIGVycjsKKyAgICAgICAgaW50IGVyciA9IDA7ICAgICAgICAgICAgICAgIAorIAorICAgICAgICBtcl9rbWVtID0ga21lbV9jYWNoZV9jcmVhdGUoImlwNl90bmxfNHJkX21hcF9ydWxlIiwKKyAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGlwNl90bmxfNHJkX21hcF9ydWxlKSwgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLAorICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICBpZiAoIW1yX2ttZW0pCisJeworCQllcnI9IC1FTk9NRU07IAorICAgICAgICAgICAgICAgIGdvdG8gb3V0X3Blcm5ldDsKKwl9CiAKIAllcnIgPSByZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKCZpcDZfdG5sX25ldF9vcHMpOwogCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dF9wZXJuZXQ7CisJCWdvdG8gb3V0X2ttZW07CiAKKwkKIAllcnIgPSB4ZnJtNl90dW5uZWxfcmVnaXN0ZXIoJmlwNGlwNl9oYW5kbGVyLCBBRl9JTkVUKTsKIAlpZiAoZXJyIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgImlwNl90dW5uZWwgaW5pdDogY2FuJ3QgcmVnaXN0ZXIgaXA0aXA2XG4iKTsKQEAgLTE1NjMsMTIgKzIyNjUsMTggQEAKIAkJZ290byBvdXRfaXA2aXA2OwogCX0KIAorICAgICAgICBlcnIgPV9fcnRubF9yZWdpc3RlcihQRl9VTlNQRUMsIFJUTV9HRVQ0UkQsIE5VTEwgLCBpbmV0Nl9kdW1wNHJkX21ydWxlLCBOVUxMKTsKKyAgICAgICAgaWYoZXJyIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIG91dF9pcDZpcDY7CisKIAlyZXR1cm4gMDsKIAogb3V0X2lwNmlwNjoKIAl4ZnJtNl90dW5uZWxfZGVyZWdpc3RlcigmaXA0aXA2X2hhbmRsZXIsIEFGX0lORVQpOwogb3V0X2lwNGlwNjoKIAl1bnJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJmlwNl90bmxfbmV0X29wcyk7CitvdXRfa21lbToKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobXJfa21lbSk7CiBvdXRfcGVybmV0OgogCXJldHVybiBlcnI7CiB9CkBAIC0xNTg1LDcgKzIyOTMsMTIgQEAKIAlpZiAoeGZybTZfdHVubmVsX2RlcmVnaXN0ZXIoJmlwNmlwNl9oYW5kbGVyLCBBRl9JTkVUNikpCiAJCXByaW50ayhLRVJOX0lORk8gImlwNl90dW5uZWwgY2xvc2U6IGNhbid0IGRlcmVnaXN0ZXIgaXA2aXA2XG4iKTsKIAorICAgICAgICBrbWVtX2NhY2hlX2Rlc3Ryb3kobXJfa21lbSk7ICAgICAKKyAKIAl1bnJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJmlwNl90bmxfbmV0X29wcyk7CisKKyAgICAgICAgcnRubF91bnJlZ2lzdGVyKFBGX1VOU1BFQywgUlRNX0dFVDRSRCk7CisgCiB9CiAKIG1vZHVsZV9pbml0KGlwNl90dW5uZWxfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnCmluZGV4IGY3OTJiMzQuLjk1ZDY1MWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnCkBAIC0yMDUsNiArMjA1LDE0IEBACiAgICAgICAgIAogICAgICAgICAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIElQNl9ORl9UQVJHRVRfTlBUCisJdHJpc3RhdGUgIk5QVCAoTmV0d29yayBQcmVmaXggdHJhbnNsYXRpb24pIHRhcmdldCBzdXBwb3J0IgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGBTTlBUJyBhbmQgYEROUFQnIHRhcmdldCwgd2hpY2ggcGVyZm9ybQorCSAgc3RhdGVsZXNzIElQdjYtdG8tSVB2NiBOZXR3b3JrIFByZWZpeCBUcmFuc2xhdGlvbiBwZXIgUkZDIDYyOTYuCisKKwkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgorCiBlbmRpZiAjIElQNl9ORl9JUFRBQkxFUwogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUKaW5kZXggYWJmZWU5MS4uOTFiMDgwNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZQpAQCAtMzEsNCArMzEsNSBAQAogCiAjIHRhcmdldHMKIG9iai0kKENPTkZJR19JUDZfTkZfVEFSR0VUX0xPRykgKz0gaXA2dF9MT0cubworb2JqLSQoQ09ORklHX0lQNl9ORl9UQVJHRVRfTlBUKSArPSBpcDZ0X05QVC5vCiBvYmotJChDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1QpICs9IGlwNnRfUkVKRUNULm8KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTlBULmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJiYjgzNgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X05QVC5jCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDExLCAyMDEyIFBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpbmNsdWRlIDxuZXQvaXB2Ni5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9OUFQuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorCitzdGF0aWMgaW50IGlwNnRfbnB0X2NoZWNrZW50cnkoY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCit7CisJc3RydWN0IGlwNnRfbnB0X3RnaW5mbyAqbnB0ID0gcGFyLT50YXJnaW5mbzsKKwlfX3dzdW0gc3JjX3N1bSA9IDAsIGRzdF9zdW0gPSAwOworCXN0cnVjdCBpbjZfYWRkciBwZng7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAobnB0LT5zcmNfcGZ4X2xlbiA+IDY0IHx8IG5wdC0+ZHN0X3BmeF9sZW4gPiA2NCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBFbnN1cmUgdGhhdCBMU0Igb2YgcHJlZml4IGlzIHplcm8gKi8KKwlpcHY2X2FkZHJfcHJlZml4KCZwZngsICZucHQtPnNyY19wZnguaW42LCBucHQtPnNyY19wZnhfbGVuKTsKKwlpZiAoIWlwdjZfYWRkcl9lcXVhbCgmcGZ4LCAmbnB0LT5zcmNfcGZ4LmluNikpCisJCXJldHVybiAtRUlOVkFMOworCWlwdjZfYWRkcl9wcmVmaXgoJnBmeCwgJm5wdC0+ZHN0X3BmeC5pbjYsIG5wdC0+ZHN0X3BmeF9sZW4pOworCWlmICghaXB2Nl9hZGRyX2VxdWFsKCZwZngsICZucHQtPmRzdF9wZnguaW42KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShucHQtPnNyY19wZnguaW42LnM2X2FkZHIxNik7IGkrKykgeworCQlzcmNfc3VtID0gY3N1bV9hZGQoc3JjX3N1bSwKKwkJCQkoX19mb3JjZSBfX3dzdW0pbnB0LT5zcmNfcGZ4LmluNi5zNl9hZGRyMTZbaV0pOworCQlkc3Rfc3VtID0gY3N1bV9hZGQoZHN0X3N1bSwKKwkJCQkoX19mb3JjZSBfX3dzdW0pbnB0LT5kc3RfcGZ4LmluNi5zNl9hZGRyMTZbaV0pOworCX0KKworCW5wdC0+YWRqdXN0bWVudCA9IH5jc3VtX2ZvbGQoY3N1bV9zdWIoc3JjX3N1bSwgZHN0X3N1bSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBpcDZ0X25wdF9tYXBfcGZ4KGNvbnN0IHN0cnVjdCBpcDZ0X25wdF90Z2luZm8gKm5wdCwKKwkJCSAgICAgc3RydWN0IGluNl9hZGRyICphZGRyKQoreworCXVuc2lnbmVkIGludCBwZnhfbGVuOworCXVuc2lnbmVkIGludCBpLCBpZHg7CisJX19iZTMyIG1hc2s7CisJX19zdW0xNiBzdW07CisKKwlwZnhfbGVuID0gbWF4KG5wdC0+c3JjX3BmeF9sZW4sIG5wdC0+ZHN0X3BmeF9sZW4pOworCWZvciAoaSA9IDA7IGkgPCBwZnhfbGVuOyBpICs9IDMyKSB7CisJCWlmIChwZnhfbGVuIC0gaSA+PSAzMikKKwkJCW1hc2sgPSAwOworCQllbHNlCisJCQltYXNrID0gaHRvbmwofigoMSA8PCAocGZ4X2xlbiAtIGkpKSAtIDEpKTsKKworCQlpZHggPSBpIC8gMzI7CisJCWFkZHItPnM2X2FkZHIzMltpZHhdICY9IG1hc2s7CisJCWFkZHItPnM2X2FkZHIzMltpZHhdIHw9IH5tYXNrICYgbnB0LT5kc3RfcGZ4LmluNi5zNl9hZGRyMzJbaWR4XTsKKwl9CisKKwlpZiAocGZ4X2xlbiA8PSA0OCkKKwkJaWR4ID0gMzsKKwllbHNlIHsKKwkJZm9yIChpZHggPSA0OyBpZHggPCBBUlJBWV9TSVpFKGFkZHItPnM2X2FkZHIxNik7IGlkeCsrKSB7CisJCQlpZiAoKF9fZm9yY2UgX19zdW0xNilhZGRyLT5zNl9hZGRyMTZbaWR4XSAhPQorCQkJICAgIENTVU1fTUFOR0xFRF8wKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChpZHggPT0gQVJSQVlfU0laRShhZGRyLT5zNl9hZGRyMTYpKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXN1bSA9IH5jc3VtX2ZvbGQoY3N1bV9hZGQoY3N1bV91bmZvbGQoKF9fZm9yY2UgX19zdW0xNilhZGRyLT5zNl9hZGRyMTZbaWR4XSksCisJCQkJICBjc3VtX3VuZm9sZChucHQtPmFkanVzdG1lbnQpKSk7CisJaWYgKHN1bSA9PSBDU1VNX01BTkdMRURfMCkKKwkJc3VtID0gMDsKKwkqKF9fZm9yY2UgX19zdW0xNiAqKSZhZGRyLT5zNl9hZGRyMTZbaWR4XSA9IHN1bTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitpcDZ0X3NucHRfdGcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCBpcDZ0X25wdF90Z2luZm8gKm5wdCA9IHBhci0+dGFyZ2luZm87CisJc3RydWN0IG5mX2Nvbm4gKmN0OworCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOworCisJaWYgKCFpcDZ0X25wdF9tYXBfcGZ4KG5wdCwgJmlwdjZfaGRyKHNrYiktPnNhZGRyKSkgeworCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QQVJBTVBST0IsIElDTVBWNl9IRFJfRklFTEQsCisJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIHNhZGRyKSk7CisJCXJldHVybiBORl9EUk9QOworCX0KKyNpZmRlZiBDT05GSUdfQ09NQ0VSVE9fRlAKKwljdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOworCWlmIChjdCAmJiAoKGN0aW5mbyA9PSBJUF9DVF9ORVcpIHx8IChjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRCkpKSB7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJbWVtY3B5KCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuZHN0LnUzLmluNiwgJmlwdjZfaGRyKHNrYiktPnNhZGRyLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCX0KKyNlbmRpZgorCXJldHVybiBYVF9DT05USU5VRTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAoraXA2dF9kbnB0X3RnKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9hY3Rpb25fcGFyYW0gKnBhcikKK3sKKwljb25zdCBzdHJ1Y3QgaXA2dF9ucHRfdGdpbmZvICpucHQgPSBwYXItPnRhcmdpbmZvOworCXN0cnVjdCBuZl9jb25uICpjdDsKKwllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKworCWlmICghaXA2dF9ucHRfbWFwX3BmeChucHQsICZpcHY2X2hkcihza2IpLT5kYWRkcikpIHsKKwkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEFSQU1QUk9CLCBJQ01QVjZfSERSX0ZJRUxELAorCQkJICAgIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBkYWRkcikpOworCQlyZXR1cm4gTkZfRFJPUDsKKwl9CisjaWZkZWYgQ09ORklHX0NPTUNFUlRPX0ZQCisJY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKKwlpZiAoY3QgJiYgKChjdGluZm8gPT0gSVBfQ1RfTkVXKSB8fCAoY3RpbmZvID09IElQX0NUX1JFTEFURUQpKSkgeworCQlyY3VfcmVhZF9sb2NrKCk7CisJCW1lbWNweSgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlLnNyYy51My5pbjYsICZpcHY2X2hkcihza2IpLT5kYWRkciwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworCQlyY3VfcmVhZF91bmxvY2soKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gWFRfQ09OVElOVUU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IGlwNnRfbnB0X3RhcmdldF9yZWdbXSBfX3JlYWRfbW9zdGx5ID0geworCXsKKwkJLm5hbWUJCT0gIlNOUFQiLAorCQkudGFyZ2V0CQk9IGlwNnRfc25wdF90ZywKKwkJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGlwNnRfbnB0X3RnaW5mbyksCisJCS5jaGVja2VudHJ5CT0gaXA2dF9ucHRfY2hlY2tlbnRyeSwKKwkJLmZhbWlseQkJPSBORlBST1RPX0lQVjYsCisJCS5ob29rcwkJPSAoMSA8PCBORl9JTkVUX0xPQ0FMX0lOKSB8CisJCQkJICAoMSA8PCBORl9JTkVUX1BPU1RfUk9VVElORyksCisJCS5tZQkJPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUJCT0gIkROUFQiLAorCQkudGFyZ2V0CQk9IGlwNnRfZG5wdF90ZywKKwkJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGlwNnRfbnB0X3RnaW5mbyksCisJCS5jaGVja2VudHJ5CT0gaXA2dF9ucHRfY2hlY2tlbnRyeSwKKwkJLmZhbWlseQkJPSBORlBST1RPX0lQVjYsCisJCS5ob29rcwkJPSAoMSA8PCBORl9JTkVUX1BSRV9ST1VUSU5HKSB8CisJCQkJICAoMSA8PCBORl9JTkVUX0xPQ0FMX09VVCksCisJCS5tZQkJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaXA2dF9ucHRfaW5pdCh2b2lkKQoreworCXJldHVybiB4dF9yZWdpc3Rlcl90YXJnZXRzKGlwNnRfbnB0X3RhcmdldF9yZWcsCisJCQkJICAgQVJSQVlfU0laRShpcDZ0X25wdF90YXJnZXRfcmVnKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpcDZ0X25wdF9leGl0KHZvaWQpCit7CisJeHRfdW5yZWdpc3Rlcl90YXJnZXRzKGlwNnRfbnB0X3RhcmdldF9yZWcsCisJCQkgICAgICBBUlJBWV9TSVpFKGlwNnRfbnB0X3RhcmdldF9yZWcpKTsKK30KKworbW9kdWxlX2luaXQoaXA2dF9ucHRfaW5pdCk7Cittb2R1bGVfZXhpdChpcDZ0X25wdF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJUHY2LXRvLUlQdjYgTmV0d29yayBQcmVmaXggVHJhbnNsYXRpb24gKFJGQyA2Mjk2KSIpOworTU9EVUxFX0FVVEhPUigiUGF0cmljayBNY0hhcmR5IDxrYWJlckB0cmFzaC5uZXQ+Iik7CitNT0RVTEVfQUxJQVMoImlwNnRfU05QVCIpOworTU9EVUxFX0FMSUFTKCJpcDZ0X0ROUFQiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggOGMyNTQxOS4uMmJlMWRlZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKKysrIGIvbmV0L2lwdjYvdWRwLmMKQEAgLTUxNSw2ICs1MTUsMzYgQEAKIAlpZiAoIXhmcm02X3BvbGljeV9jaGVjayhzaywgWEZSTV9QT0xJQ1lfSU4sIHNrYikpCiAJCWdvdG8gZHJvcDsKIAorCisJLyogTkFULVQgY2hhbmdlcyBTdGFydCAqLworCWlmICggdXAtPmVuY2FwX3R5cGUgKSB7CisJCS8qCisJCSAqIFRoaXMgaXMgYW4gZW5jYXBzdWxhdGlvbiBzb2NrZXQsIHNvIHBhc3MgdGhlIHNrYiB0bworCQkgKiB0aGUgc29ja2V0J3MgdWRwNl9lbmNhcF9yY3YoKSBob29rLk90aGVyd2lzZSwganVzdAorCQkgKiBmYWxsIHRocm91Z2ggYW5kIHBhc3MgdGhpcyB1cCB0aGUgVURQIHNvY2tldC4KKwkJICogdXAtPmVuY2FwX3JjdigpIHJldHVybnMgdGhlIGZvbGxvd2luZyB2YWx1ZToKKwkJICogPTAgaWYgc2tiIHdhcyBzdWNjZXNzZnVsbHkgcGFzc2VkIHRvIHRoZSBlbmNhcAorCQkgKiBoYW5kbGVyIG9yIHdhcyBkaXNjYXJkZWQgYnkgaXQuCisJCSAqID4wIGlmIHNrYiBzaG91bGQgYmUgcGFzc2VkIG9uIHRvIFVEUC4KKwkJICogPDAgaWYgc2tiIHNob3VsZCBiZSByZXN1Ym1pdHRlZCBhcyBwcm90byAtTgorCQkgKi8KKworCQkvKiBpZiB3ZSdyZSBvdmVybHkgc2hvcnQsIGxldCBVRFAgaGFuZGxlIGl0ICovCisJCWlmIChza2ItPmxlbiA+IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSAmJgorCQkgICAgdXAtPmVuY2FwX3JjdiAhPSBOVUxMKSB7CisJCQlpbnQgcmV0OworCisJCQlyZXQgPSAoKnVwLT5lbmNhcF9yY3YpKHNrLCBza2IpOworCQkJaWYgKHJldCA8PSAwKSB7CisJCQkJVURQX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksCisJCQkJCQlVRFBfTUlCX0lOREFUQUdSQU1TLAorCQkJCQkJaXNfdWRwbGl0ZSk7CisJCQkJcmV0dXJuIC1yZXQ7CisJCQl9CisJCQkgLyogRkFMTFRIUk9VR0ggLS0gaXQncyBhIFVEUCBQYWNrZXQgKi8KKwkJfQorCX0KKwogCS8qCiAJICogVURQLUxpdGUgc3BlY2lmaWMgdGVzdHMsIGlnbm9yZWQgb24gVURQIHNvY2tldHMgKHNlZSBuZXQvaXB2NC91ZHAuYykuCiAJICovCkBAIC0xMjQwLDI0ICsxMjcwLDExMSBAQAogfQogCiAvKgorKglTb2NrZXQgb3B0aW9uIGNvZGUgZm9yIFVEUCBmb3IgSVBWNgorKi8KK2ludCB1ZHA2X2xpYl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJICAgICAgIGNoYXIgX191c2VyICpvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4sCisJCSAgICAgICBpbnQgKCpwdXNoX3BlbmRpbmdfZnJhbWVzKShzdHJ1Y3Qgc29jayAqKSkKK3sKKwlzdHJ1Y3QgdWRwX3NvY2sgKnVwID0gdWRwX3NrKHNrKTsKKwlpbnQgdmFsOworCWludCBlcnIgPSAwOworCWludCBpc191ZHBsaXRlID0gSVNfVURQTElURShzayk7CisKKwlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGdldF91c2VyKHZhbCwgKGludCBfX3VzZXIgKilvcHR2YWwpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXN3aXRjaCAob3B0bmFtZSkgeworCQljYXNlIFVEUF9DT1JLOgorCQkJaWYgKHZhbCAhPSAwKSB7CisJCQkJdXAtPmNvcmtmbGFnID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJdXAtPmNvcmtmbGFnID0gMDsKKwkJCQlsb2NrX3NvY2soc2spOworCQkJCSgqcHVzaF9wZW5kaW5nX2ZyYW1lcykoc2spOworCQkJCXJlbGVhc2Vfc29jayhzayk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFVEUF9FTkNBUDoKKwkJCXN3aXRjaCAodmFsKSB7CisJCQkJY2FzZSAwOgorCQkJCWNhc2UgVURQX0VOQ0FQX0VTUElOVURQOgorCQkJCWNhc2UgVURQX0VOQ0FQX0VTUElOVURQX05PTl9JS0U6CisJCQkJCXVwLT5lbmNhcF9yY3YgPSB4ZnJtNl91ZHBfZW5jYXBfcmN2OworCQkJCQkvKiBGQUxMVEhST1VHSCAqLworCQkJCWNhc2UgVURQX0VOQ0FQX0wyVFBJTlVEUDoKKwkJCQkJdXAtPmVuY2FwX3R5cGUgPSB2YWw7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWVyciA9IC1FTk9QUk9UT09QVDsKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKworCQkJLyoKKwkJCSAqIAlVRFAtTGl0ZSdzIHBhcnRpYWwgY2hlY2tzdW0gY292ZXJhZ2UgKFJGQyAzODI4KS4KKwkJCSAqLworCQkJLyogVGhlIHNlbmRlciBzZXRzIGFjdHVhbCBjaGVja3N1bSBjb3ZlcmFnZSBsZW5ndGggdmlhIHRoaXMgb3B0aW9uLgorCQkJICogVGhlIGNhc2UgY292ZXJhZ2UgPiBwYWNrZXQgbGVuZ3RoIGlzIGhhbmRsZWQgYnkgc2VuZCBtb2R1bGUuICovCisJCWNhc2UgVURQTElURV9TRU5EX0NTQ09WOgorCQkJaWYgKCFpc191ZHBsaXRlKSAgICAgICAgIC8qIERpc2FibGUgdGhlIG9wdGlvbiBvbiBVRFAgc29ja2V0cyAqLworCQkJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisJCQlpZiAodmFsICE9IDAgJiYgdmFsIDwgOCkgLyogSWxsZWdhbCBjb3ZlcmFnZTogdXNlIGRlZmF1bHQgKDgpICovCisJCQkJdmFsID0gODsKKwkJCWVsc2UgaWYgKHZhbCA+IFVTSFJUX01BWCkKKwkJCQl2YWwgPSBVU0hSVF9NQVg7CisJCQl1cC0+cGNzbGVuID0gdmFsOworCQkJdXAtPnBjZmxhZyB8PSBVRFBMSVRFX1NFTkRfQ0M7CisJCQlicmVhazsKKworCQkJLyogVGhlIHJlY2VpdmVyIHNwZWNpZmllcyBhIG1pbmltdW0gY2hlY2tzdW0gY292ZXJhZ2UgdmFsdWUuIFRvIG1ha2UKKwkJCSAqIHNlbnNlLCB0aGlzIHNob3VsZCBiZSBzZXQgdG8gYXQgbGVhc3QgOCAoYXMgZG9uZSBiZWxvdykuIElmIHplcm8gaXMKKwkJCSAqIHVzZWQsIHRoaXMgYWdhaW4gbWVhbnMgZnVsbCBjaGVja3N1bSBjb3ZlcmFnZS4gICAgICAgICAgICAgICAgICAgICAqLworCQljYXNlIFVEUExJVEVfUkVDVl9DU0NPVjoKKwkJCWlmICghaXNfdWRwbGl0ZSkgICAgICAgICAvKiBEaXNhYmxlIHRoZSBvcHRpb24gb24gVURQIHNvY2tldHMgKi8KKwkJCQlyZXR1cm4gLUVOT1BST1RPT1BUOworCQkJaWYgKHZhbCAhPSAwICYmIHZhbCA8IDgpIC8qIEF2b2lkIHNpbGx5IG1pbmltYWwgdmFsdWVzLiAgICAgICAqLworCQkJCXZhbCA9IDg7CisJCQllbHNlIGlmICh2YWwgPiBVU0hSVF9NQVgpCisJCQkJdmFsID0gVVNIUlRfTUFYOworCQkJdXAtPnBjcmxlbiA9IHZhbDsKKwkJCXVwLT5wY2ZsYWcgfD0gVURQTElURV9SRUNWX0NDOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVyciA9IC1FTk9QUk9UT09QVDsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK0VYUE9SVF9TWU1CT0wodWRwNl9saWJfc2V0c29ja29wdCk7CisKKworLyoKICAqCVNvY2tldCBvcHRpb24gY29kZSBmb3IgVURQCiAgKi8KIGludCB1ZHB2Nl9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKLQkJICAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKQorCQljaGFyIF9fdXNlciAqb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKQogewogCWlmIChsZXZlbCA9PSBTT0xfVURQICB8fCAgbGV2ZWwgPT0gU09MX1VEUExJVEUpCi0JCXJldHVybiB1ZHBfbGliX3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbiwKLQkJCQkJICB1ZHBfdjZfcHVzaF9wZW5kaW5nX2ZyYW1lcyk7CisJCXJldHVybiB1ZHA2X2xpYl9zZXRzb2Nrb3B0KHNrLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4sCisJCQkJdWRwX3Y2X3B1c2hfcGVuZGluZ19mcmFtZXMpOwogCXJldHVybiBpcHY2X3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiB9CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiBpbnQgY29tcGF0X3VkcHY2X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAotCQkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pCisJCWNoYXIgX191c2VyICpvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pCiB7CiAJaWYgKGxldmVsID09IFNPTF9VRFAgIHx8ICBsZXZlbCA9PSBTT0xfVURQTElURSkKLQkJcmV0dXJuIHVkcF9saWJfc2V0c29ja29wdChzaywgbGV2ZWwsIG9wdG5hbWUsIG9wdHZhbCwgb3B0bGVuLAotCQkJCQkgIHVkcF92Nl9wdXNoX3BlbmRpbmdfZnJhbWVzKTsKKwkJcmV0dXJuIHVkcDZfbGliX3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbiwKKwkJCQl1ZHBfdjZfcHVzaF9wZW5kaW5nX2ZyYW1lcyk7CiAJcmV0dXJuIGNvbXBhdF9pcHY2X3NldHNvY2tvcHQoc2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X2lucHV0LmMgYi9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jCmluZGV4IGY4YzNjZjguLmUyM2I3ZWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X2lucHV0LmMKKysrIGIvbmV0L2lwdjYveGZybTZfaW5wdXQuYwpAQCAtMjEsNiArMjEsMTUgQEAKIAlyZXR1cm4geGZybTZfZXh0cmFjdF9oZWFkZXIoc2tiKTsKIH0KIAoraW50IHhmcm02X3Jjdl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwKKwkJICAgIGludCBlbmNhcF90eXBlKQoreworCVhGUk1fU1BJX1NLQl9DQihza2IpLT5mYW1pbHkgPSBBRl9JTkVUNjsKKwlYRlJNX1NQSV9TS0JfQ0Ioc2tiKS0+ZGFkZHJvZmYgPSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgZGFkZHIpOworCXJldHVybiB4ZnJtX2lucHV0KHNrYiwgbmV4dGhkciwgc3BpLCBlbmNhcF90eXBlKTsKK30KK0VYUE9SVF9TWU1CT0woeGZybTZfcmN2X2VuY2FwKTsKKwogaW50IHhmcm02X3Jjdl9zcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGkpCiB7CiAJWEZSTV9TUElfU0tCX0NCKHNrYiktPmZhbWlseSA9IEFGX0lORVQ2OwpAQCAtNDYsNiArNTUsMTA2IEBACiAJCWlwNl9yY3ZfZmluaXNoKTsKIAlyZXR1cm4gLTE7CiB9CisvKiBJZiBpdCdzIGEga2VlcGFsaXZlIHBhY2tldCwgdGhlbiBqdXN0IGVhdCBpdC4KKyAqIElmIGl0J3MgYW4gZW5jYXBzdWxhdGVkIHBhY2tldCwgdGhlbiBwYXNzIGl0IHRvIHRoZQorICogSVBzZWMgeGZybSBpbnB1dC4KKyAqIFJldHVybnMgMCBpZiBza2IgcGFzc2VkIHRvIHhmcm0gb3Igd2FzIGRyb3BwZWQuCisgKiBSZXR1cm5zID4wIGlmIHNrYiBzaG91bGQgYmUgcGFzc2VkIHRvIFVEUC4KKyAqIFJldHVybnMgPDAgaWYgc2tiIHNob3VsZCBiZSByZXN1Ym1pdHRlZCAoLXJldCBpcyBwcm90b2NvbCkKKyAqLworaW50IHhmcm02X3VkcF9lbmNhcF9yY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCisjaWZuZGVmIENPTkZJR19YRlJNCisJcmV0dXJuIDE7CisjZWxzZQorCXN0cnVjdCB1ZHBfc29jayAqdXAgPSB1ZHBfc2soc2spOworCXN0cnVjdCB1ZHBoZHIgKnVoOworCXN0cnVjdCBpcHY2aGRyICppcGg7CisJaW50IGlwaGxlbiwgbGVuOworCisJX191OCAqdWRwZGF0YTsKKwlfX2JlMzIgKnVkcGRhdGEzMjsKKwlfX3UxNiBlbmNhcF90eXBlID0gdXAtPmVuY2FwX3R5cGU7CisKKworCisJLyogaWYgdGhpcyBpcyBub3QgZW5jYXBzdWxhdGVkIHNvY2tldCwgdGhlbiBqdXN0IHJldHVybiBub3cgKi8KKwlpZiAoIWVuY2FwX3R5cGUpCisJCXJldHVybiAxOworCisJLyogSWYgdGhpcyBpcyBhIHBhZ2VkIHNrYiwgbWFrZSBzdXJlIHdlIHB1bGwgdXAKKwkgKiB3aGF0ZXZlciBkYXRhIHdlIG5lZWQgdG8gbG9vayBhdC4gKi8KKwlsZW4gPSBza2ItPmxlbiAtIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkcikgKyBtaW4obGVuLCA4KSkpCisJCXJldHVybiAxOworCisJLyogTm93IHdlIGNhbiBnZXQgdGhlIHBvaW50ZXJzICovCisJdWggPSB1ZHBfaGRyKHNrYik7CisJdWRwZGF0YSA9IChfX3U4ICopdWggKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7CisJdWRwZGF0YTMyID0gKF9fYmUzMiAqKXVkcGRhdGE7CisKKwlzd2l0Y2ggKGVuY2FwX3R5cGUpIHsKKwlkZWZhdWx0OgorCWNhc2UgVURQX0VOQ0FQX0VTUElOVURQOgorCQkvKiBDaGVjayBpZiB0aGlzIGlzIGEga2VlcGFsaXZlIHBhY2tldC4gIElmIHNvLCBlYXQgaXQuICovCisJCWlmIChsZW4gPT0gMSAmJiB1ZHBkYXRhWzBdID09IDB4ZmYpIHsKKwkJCWdvdG8gZHJvcDsKKwkJfSBlbHNlIGlmIChsZW4gPiBzaXplb2Yoc3RydWN0IGlwX2VzcF9oZHIpICYmIHVkcGRhdGEzMlswXSAhPSAwKSB7CisJCQkvKiBFU1AgUGFja2V0IHdpdGhvdXQgTm9uLUVTUCBoZWFkZXIgKi8KKwkJCWxlbiA9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKwkJfSBlbHNlCisJCQkvKiBNdXN0IGJlIGFuIElLRSBwYWNrZXQuLiBwYXNzIGl0IHRocm91Z2ggKi8KKwkJCXJldHVybiAxOworCQlicmVhazsKKwljYXNlIFVEUF9FTkNBUF9FU1BJTlVEUF9OT05fSUtFOgorCQkvKiBDaGVjayBpZiB0aGlzIGlzIGEga2VlcGFsaXZlIHBhY2tldC4gIElmIHNvLCBlYXQgaXQuICovCisJCWlmIChsZW4gPT0gMSAmJiB1ZHBkYXRhWzBdID09IDB4ZmYpIHsKKwkJCWdvdG8gZHJvcDsKKwkJfSBlbHNlIGlmIChsZW4gPiAyICogc2l6ZW9mKHUzMikgKyBzaXplb2Yoc3RydWN0IGlwX2VzcF9oZHIpICYmCisJCQkgICB1ZHBkYXRhMzJbMF0gPT0gMCAmJiB1ZHBkYXRhMzJbMV0gPT0gMCkgeworCisJCQkvKiBFU1AgUGFja2V0IHdpdGggTm9uLUlLRSBtYXJrZXIgKi8KKwkJCWxlbiA9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArIDIgKiAoc2l6ZW9mKHUzMikgKiA0KTsKKwkJfSBlbHNlCisJCQkvKiBNdXN0IGJlIGFuIElLRSBwYWNrZXQuLiBwYXNzIGl0IHRocm91Z2ggKi8KKwkJCXJldHVybiAxOworCQlicmVhazsKKwl9CisKKwkvKiBBdCB0aGlzIHBvaW50IHdlIGFyZSBzdXJlIHRoYXQgdGhpcyBpcyBhbiBFU1BpblVEUCBwYWNrZXQsCisJICogc28gd2UgbmVlZCB0byByZW1vdmUgJ2xlbicgYnl0ZXMgZnJvbSB0aGUgcGFja2V0ICh0aGUgVURQCisJICogaGVhZGVyIGFuZCBvcHRpb25hbCBFU1AgbWFya2VyIGJ5dGVzKSBhbmQgdGhlbiBtb2RpZnkgdGhlCisJICogcHJvdG9jb2wgdG8gRVNQLCBhbmQgdGhlbiBjYWxsIGludG8gdGhlIHRyYW5zZm9ybSByZWNlaXZlci4KKwkgKi8KKwlpZiAoc2tiX2Nsb25lZChza2IpICYmIHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKSl7CisJCWdvdG8gZHJvcDsKKwl9CisKKwkvKiBOb3cgd2UgY2FuIHVwZGF0ZSBhbmQgdmVyaWZ5IHRoZSBwYWNrZXQgbGVuZ3RoLi4uICovCisJaXBoID0gaXB2Nl9oZHIoc2tiKTsKKwlpcGhsZW4gPSBudG9ocyhpcGgtPnBheWxvYWRfbGVuKTsKKwlpZiAoc2tiLT5sZW4gPCBpcGhsZW4pIHsKKwkJLyogcGFja2V0IGlzIHRvbyBzbWFsbCE/ISAqLworCQlnb3RvIGRyb3A7CisJfQorCisJLyogcHVsbCB0aGUgZGF0YSBidWZmZXIgdXAgdG8gdGhlIEVTUCBoZWFkZXIgYW5kIHNldCB0aGUKKwkgKiB0cmFuc3BvcnQgaGVhZGVyIHRvIHBvaW50IHRvIEVTUC4gIEtlZXAgVURQIG9uIHRoZSBzdGFjaworCSAqIGZvciBsYXRlci4KKwkgKi8KKwlfX3NrYl9wdWxsKHNrYiwgbGVuKTsKKwlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOworCisJLyogcHJvY2VzcyBFU1AgKi8KKwlyZXR1cm4geGZybTZfcmN2X2VuY2FwKHNrYiwgSVBQUk9UT19FU1AsIDAsIGVuY2FwX3R5cGUpOworCitkcm9wOgorCWtmcmVlX3NrYihza2IpOworCXJldHVybiAwOworI2VuZGlmCit9CisKIAogaW50IHhmcm02X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpkaWZmIC0tZ2l0IGEvbmV0L2tleS9hZl9rZXkuYyBiL25ldC9rZXkvYWZfa2V5LmMKaW5kZXggNGVkZWZiZC4uMWE3MmViMiAxMDA2NDQKLS0tIGEvbmV0L2tleS9hZl9rZXkuYworKysgYi9uZXQva2V5L2FmX2tleS5jCkBAIC0xNjEwLDExICsxNjEwLDcgQEAKIH0KIAogLyogQUREL1VQRC9ERUwgKi8KLSNpZiBOTEtFWV9TVVBQT1JUCi1zdGF0aWMgaW50IGtleV9ub3RpZnlfc2Eoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKQotI2Vsc2UKIHN0YXRpYyBpbnQga2V5X25vdGlmeV9zYShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKQotI2VuZGlmCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3Qgc2FkYl9tc2cgKmhkcjsKQEAgLTE2MzUsMTAgKzE2MzEsNiBAQAogCiAJcGZrZXlfYnJvYWRjYXN0KHNrYiwgR0ZQX0FUT01JQywgQlJPQURDQVNUX0FMTCwgTlVMTCwgeHNfbmV0KHgpKTsKIAotI2lmZGVmIE5MS0VZX1NVUFBPUlQKLQkvKiBub3cgc2VudCBtZXNzYWdlIGFsc28gdG8gdGhlIHVzZXIgc3BhY2UgdGhyb3VnaCBORVRMSU5LX0tFWSBzb2NrZXQqLwotCWlwc2VjX25sa2V5X3NlbmQobmV0LCB4LCBjKTsKLSNlbmRpZgogCXJldHVybiAwOwogfQogCkBAIC0xODc3LDExICsxODY5LDcgQEAKIAlyZXR1cm4gcGZrZXlfYnJvYWRjYXN0KHNrYiwgR0ZQX0FUT01JQywgQlJPQURDQVNUX09ORSwgc2ssIHNvY2tfbmV0KHNrKSk7CiB9CiAKLSNpZiBkZWZpbmVkKE5MS0VZX1NVUFBPUlQpCi1zdGF0aWMgaW50IGtleV9ub3RpZnlfc2FfZmx1c2goc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3Qga21fZXZlbnQgKmMpCi0jZWxzZQogc3RhdGljIGludCBrZXlfbm90aWZ5X3NhX2ZsdXNoKGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYykKLSNlbmRpZgogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IHNhZGJfbXNnICpoZHI7CkBAIC0xOTAwLDExICsxODg4LDYgQEAKIAogCXBma2V5X2Jyb2FkY2FzdChza2IsIEdGUF9BVE9NSUMsIEJST0FEQ0FTVF9BTEwsIE5VTEwsIGMtPm5ldCk7CiAKLSNpZmRlZiBOTEtFWV9TVVBQT1JUCi0JLyogbm93IHNlbnQgbWVzc2FnZSBhbHNvIHRvIHRoZSB1c2VyIHNwYWNlIHRocm91Z2ggTkVUTElOS19LRVkgc29ja2V0Ki8KLQlpcHNlY19ubGtleV9zZW5kKG5ldCwgTlVMTCwgYyk7Ci0jZW5kaWYKLQogCXJldHVybiAwOwogfQogCkBAIC0zMTI5LDExICszMTEyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIGRlZmluZWQoTkxLRVlfU1VQUE9SVCkKLXN0YXRpYyBpbnQga2V5X25vdGlmeV9zYV9leHBpcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKQotI2Vsc2UKIHN0YXRpYyBpbnQga2V5X25vdGlmeV9zYV9leHBpcmUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYykKLSNlbmRpZgogewogCXN0cnVjdCBza19idWZmICpvdXRfc2tiOwogCXN0cnVjdCBzYWRiX21zZyAqb3V0X2hkcjsKQEAgLTMxNjEsMTAgKzMxNDAsNiBAQAogCiAJcGZrZXlfYnJvYWRjYXN0KG91dF9za2IsIEdGUF9BVE9NSUMsIEJST0FEQ0FTVF9SRUdJU1RFUkVELCBOVUxMLCB4c19uZXQoeCkpOwogCi0jaWZkZWYgTkxLRVlfU1VQUE9SVAotCS8qIG5vdyBzZW50IG1lc3NhZ2UgYWxzbyB0byB0aGUgdXNlciBzcGFjZSB0aHJvdWdoIE5FVExJTktfS0VZIHNvY2tldCovCi0JaXBzZWNfbmxrZXlfc2VuZChuZXQsIHgsIGMpOwotI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMxNzMsMzAgKzMxNDgsMjQgQEAKIAlzdHJ1Y3QgbmV0ICpuZXQgPSB4ID8geHNfbmV0KHgpIDogYy0+bmV0OwogCXN0cnVjdCBuZXRuc19wZmtleSAqbmV0X3Bma2V5ID0gbmV0X2dlbmVyaWMobmV0LCBwZmtleV9uZXRfaWQpOwogCisKKyNpZmRlZiBOTEtFWV9TVVBQT1JUCisJLyogc2VuZCBtZXNzYWdlIHRvIHRoZSB1c2VyIHNwYWNlIHRocm91Z2ggTkVUTElOS19LRVkgc29ja2V0Ki8KKwlpcHNlY19ubGtleV9zZW5kKG5ldCwgeCwgYyk7CisjZW5kaWYKKwogCWlmIChhdG9taWNfcmVhZCgmbmV0X3Bma2V5LT5zb2Nrc19ucikgPT0gMCkKIAkJcmV0dXJuIDA7CiAKIAlzd2l0Y2ggKGMtPmV2ZW50KSB7CiAJY2FzZSBYRlJNX01TR19FWFBJUkU6Ci0jaWYgTkxLRVlfU1VQUE9SVAotCQlyZXR1cm4ga2V5X25vdGlmeV9zYV9leHBpcmUobmV0LCB4LCBjKTsKLSNlbHNlCiAJCXJldHVybiBrZXlfbm90aWZ5X3NhX2V4cGlyZSh4LCBjKTsKLSNlbmRpZgogCWNhc2UgWEZSTV9NU0dfREVMU0E6CiAJY2FzZSBYRlJNX01TR19ORVdTQToKIAljYXNlIFhGUk1fTVNHX1VQRFNBOgotI2lmIE5MS0VZX1NVUFBPUlQKLQkJcmV0dXJuIGtleV9ub3RpZnlfc2EobmV0LCB4LCBjKTsKLSNlbHNlCi0JcmV0dXJuIGtleV9ub3RpZnlfc2EoeCwgYyk7Ci0jZW5kaWYKKwkJcmV0dXJuIGtleV9ub3RpZnlfc2EoeCwgYyk7CiAJY2FzZSBYRlJNX01TR19GTFVTSFNBOgotI2lmIE5MS0VZX1NVUFBPUlQKLQkJcmV0dXJuIGtleV9ub3RpZnlfc2FfZmx1c2gobmV0LCBjKTsKLSNlbHNlCiAJCXJldHVybiBrZXlfbm90aWZ5X3NhX2ZsdXNoKGMpOwotI2VuZGlmCiAJY2FzZSBYRlJNX01TR19ORVdBRTogLyogbm90IHlldCBzdXBwb3J0ZWQgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTQ0ODksNiArNDQ1OCw2MCBAQAogRVhQT1JUX1NZTUJPTChpcHNlY19ubGtleV9mbG93KTsKIAogCitpbnQgaXBzZWNfbmxrZXlfZmxvd19yZW1vdmUoc3RydWN0IGZsb3dpICpmbCwgdTE2IGZhbWlseSwgdTE2IGRpcikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBubGtleV9tc2cgbXNnOworCXN0cnVjdCBubG1zZ2hkciAqbmxoID0gTlVMTDsKKwl1bnNpZ25lZCBzaG9ydCAqcDsKKwlnZnBfdCBhbGxvY2F0aW9uID0gaW5faW50ZXJydXB0KCkgPyBHRlBfQVRPTUlDIDogR0ZQX0tFUk5FTDsKKworCQorCS8vcHJpbnRrKEtFUk5fSU5GTyAiaXBzZWNfbmxrZXlfZmxvd19yZW1vdmVcbiIpOworCisJLyogbmV4dCBtZXNzYWdlIHRvIGJ1aWxkICovCisJbWVtc2V0KCZtc2csIDAsIHNpemVvZihzdHJ1Y3QgbmxrZXlfbXNnKSk7CisJbXNnLmZjb2RlID0gTkxLRVlfRkxPV19SRU1PVkU7CisKKwlwID0gbXNnLnBheWxvYWQ7CisJLy8gZmxvdyBmYW1pbHkKKwkqcCsrID0gZmFtaWx5OworCW1zZy5sZW5ndGggKz0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKwkvLyBmbG93IGZhbWlseQorCSpwKysgPSBkaXI7CisJbXNnLmxlbmd0aCArPSBzaXplb2YodW5zaWduZWQgc2hvcnQpOworCS8vIGZsb3cgZGVzY3JpcHRvcgorCW1lbWNweShwLCBmbCwgc2l6ZW9mKHN0cnVjdCBmbG93aSkpOworCW1zZy5sZW5ndGggKz1zaXplb2Yoc3RydWN0IGZsb3dpKTsKKwlwKz1zaXplb2Yoc3RydWN0IGZsb3dpKSAvIHNpemVvZih1MTYpOworCisJc2tiID0gYWxsb2Nfc2tiKE5MTVNHX1NQQUNFKE5MS0VZX01TR19MRU4gKyBOTEtFWV9IRFJfTEVOKSwgYWxsb2NhdGlvbik7CisJaWYgKHNrYiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIHByZXBhcmUgbmV0bGluayBtZXNzYWdlIGZvciBrZXJuZWwgdG8gdXNlciBzcGFjZSBkaXJlY3Rpb24gKi8KKwlubGggPSAoc3RydWN0IG5sbXNnaGRyICopc2tiX3B1dChza2IsIE5MTVNHX1NQQUNFKE5MS0VZX0hEUl9MRU4gKyBtc2cubGVuZ3RoKSk7CisJbWVtY3B5KE5MTVNHX0RBVEEobmxoKSwgKHVuc2lnbmVkIGNoYXIgKikmbXNnLCAoTkxLRVlfSERSX0xFTiArIG1zZy5sZW5ndGgpKTsKKwkKKwkvKiB3aG9sZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgaS5lLiBoZWFkZXIgKyBwYXlsb2FkICovCisJbmxoLT5ubG1zZ19sZW4gPSBOTE1TR19TUEFDRShOTEtFWV9IRFJfTEVOICsgbXNnLmxlbmd0aCk7CisKKwkvKiBmcm9tIGtlcm5lbCAqLworCW5saC0+bmxtc2dfcGlkID0gMDsgCisJbmxoLT5ubG1zZ19mbGFncyA9IDA7CisgICAgICAgIG5saC0+bmxtc2dfdHlwZSA9IDA7CisJTkVUTElOS19DQihza2IpLnBpZCA9IDA7CisJTkVUTElOS19DQihza2IpLmRzdF9ncm91cCA9IDE7CQorCisJCQorICAgICAgICByZXR1cm4obmV0bGlua19icm9hZGNhc3QobmxrZXlfc29ja2V0LCBza2IsIDAsIDEsIGFsbG9jYXRpb24pKTsKKworCQorfQorRVhQT1JUX1NZTUJPTChpcHNlY19ubGtleV9mbG93X3JlbW92ZSk7CisKKworCiBzdGF0aWMgdm9pZCBpcHNlY19ubGtleV9pbml0KHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAiSW5pdGlhbGl6aW5nIE5FVExJTktfS0VZIHNvY2tldFxuIik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2NvbWNlcnRvX2ZwX25ldGZpbHRlci5jIGIvbmV0L25ldGZpbHRlci9jb21jZXJ0b19mcF9uZXRmaWx0ZXIuYwppbmRleCA1MzhjM2Q1Li5iYzZlZjY4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2NvbWNlcnRvX2ZwX25ldGZpbHRlci5jCisrKyBiL25ldC9uZXRmaWx0ZXIvY29tY2VydG9fZnBfbmV0ZmlsdGVyLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAkJZ290byBkb25lOwogCiAJcHJvdG9udW0gPSBuZl9jdF9wcm90b251bShjdCk7Ci0JaWYgKChwcm90b251bSAhPSBJUFBST1RPX1RDUCkgJiYgKHByb3RvbnVtICE9IElQUFJPVE9fVURQKSkKKwlpZiAoKHByb3RvbnVtICE9IElQUFJPVE9fVENQKSAmJiAocHJvdG9udW0gIT0gSVBQUk9UT19VRFApICYmIChwcm90b251bSAhPSBJUFBST1RPX0lQSVApKQogCQlnb3RvIGRvbmU7CiAKIAlkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKaW5kZXggMWM2YTQwMy4uM2Q3ZmUwMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwpAQCAtMTQwNyw2ICsxNDA3LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2FsbG9jX2hhc2h0YWJsZSk7CiAKKyNpZmRlZiBDT05GSUdfQ09NQ0VSVE9fRlAKIGludCBuZl9jb25udHJhY2tfc2V0X2RwaV9hbGxvd19yZXBvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgZXJyID0gMDsKQEAgLTE0MzMsNyArMTQzNCw5IEBACiAKIAlzZXRfYml0KElQU19EUElfQUxMT1dFRF9CSVQsICZjdC0+c3RhdHVzKTsKIAorI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSwogCWN0LT5tYXJrID0gbWFyazsKKyNlbmRpZgogCiAJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfUFJPVE9JTkZPLCBjdCk7CiAKQEAgLTE0NDIsNiArMTQ0NSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0wobmZfY29ubnRyYWNrX3NldF9kcGlfYWxsb3dfYW5kX21hcmspOworI2VuZGlmCiAKIGludCBuZl9jb25udHJhY2tfc2V0X2hhc2hzaXplKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCiB7Cg==