ZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLmggYi9pbmNsdWRlL2xpbnV4L2kyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViY2Q3NDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy5oCkBAIC0wLDAgKzEsNTk0IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAJCQkJCQkJCQkgICAgICovCisvKiBpMmMuaCAtIGRlZmluaXRpb25zIGZvciB0aGUgaTJjLWJ1cyBpbnRlcmZhY2UJCQkgICAgICovCisvKiAJCQkJCQkJCQkgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgIENvcHlyaWdodCAoQykgMTk5NS0yMDAwIFNpbW9uIEcuIFZvZ2wKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgkJICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBXaXRoIHNvbWUgY2hhbmdlcyBmcm9tIEt59nN0aSBN5Gxra2kgPGttYWxra2lAY2MuaHV0LmZpPiBhbmQKKyAgIEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4gKi8KKworLyogJElkOiBpMmMuaCx2IDEuNjggMjAwMy8wMS8yMSAwODowODoxNiBrbWFsa2tpIEV4cCAkICovCisKKyNpZm5kZWYgX0xJTlVYX0kyQ19ICisjZGVmaW5lIF9MSU5VWF9JMkNfSAorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4JLyogZm9yIHN0cnVjdCBkZXZpY2UgKi8KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisKKy8qIC0tLSBHZW5lcmFsIG9wdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSovCisKK3N0cnVjdCBpMmNfbXNnOworc3RydWN0IGkyY19hbGdvcml0aG07CitzdHJ1Y3QgaTJjX2FkYXB0ZXI7CitzdHJ1Y3QgaTJjX2NsaWVudDsKK3N0cnVjdCBpMmNfZHJpdmVyOworc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhOwordW5pb24gaTJjX3NtYnVzX2RhdGE7CisKKy8qCisgKiBUaGUgbWFzdGVyIHJvdXRpbmVzIGFyZSB0aGUgb25lcyBub3JtYWxseSB1c2VkIHRvIHRyYW5zbWl0IGRhdGEgdG8gZGV2aWNlcworICogb24gYSBidXMgKG9yIHJlYWQgZnJvbSB0aGVtKS4gQXBhcnQgZnJvbSB0d28gYmFzaWMgdHJhbnNmZXIgZnVuY3Rpb25zIHRvIAorICogdHJhbnNtaXQgb25lIG1lc3NhZ2UgYXQgYSB0aW1lLCBhIG1vcmUgY29tcGxleCB2ZXJzaW9uIGNhbiBiZSB1c2VkIHRvIAorICogdHJhbnNtaXQgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBtZXNzYWdlcyB3aXRob3V0IGludGVycnVwdGlvbi4KKyAqLworZXh0ZXJuIGludCBpMmNfbWFzdGVyX3NlbmQoc3RydWN0IGkyY19jbGllbnQgKixjb25zdCBjaGFyKiAsaW50KTsKK2V4dGVybiBpbnQgaTJjX21hc3Rlcl9yZWN2KHN0cnVjdCBpMmNfY2xpZW50ICosY2hhciogLGludCk7CisKKy8qIFRyYW5zZmVyIG51bSBtZXNzYWdlcy4KKyAqLworZXh0ZXJuIGludCBpMmNfdHJhbnNmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSk7CisKKy8qCisgKiBTb21lIGFkYXB0ZXIgdHlwZXMgKGkuZS4gUENGIDg1ODQgYmFzZWQgb25lcykgbWF5IHN1cHBvcnQgc2xhdmUgYmVoYXZpdW9yLiAKKyAqIFRoaXMgaXMgbm90IHRlc3RlZC9pbXBsZW1lbnRlZCB5ZXQgYW5kIHdpbGwgY2hhbmdlIGluIHRoZSBmdXR1cmUuCisgKi8KK2V4dGVybiBpbnQgaTJjX3NsYXZlX3NlbmQoc3RydWN0IGkyY19jbGllbnQgKixjaGFyKixpbnQpOworZXh0ZXJuIGludCBpMmNfc2xhdmVfcmVjdihzdHJ1Y3QgaTJjX2NsaWVudCAqLGNoYXIqLGludCk7CisKKworCisvKiBUaGlzIGlzIHRoZSB2ZXJ5IGdlbmVyYWxpemVkIFNNQnVzIGFjY2VzcyByb3V0aW5lLiBZb3UgcHJvYmFibHkgZG8gbm90CisgICB3YW50IHRvIHVzZSB0aGlzLCB0aG91Z2g7IG9uZSBvZiB0aGUgZnVuY3Rpb25zIGJlbG93IG1heSBiZSBtdWNoIGVhc2llciwKKyAgIGFuZCBwcm9iYWJseSBqdXN0IGFzIGZhc3QuIAorICAgTm90ZSB0aGF0IHdlIHVzZSBpMmNfYWRhcHRlciBoZXJlLCBiZWNhdXNlIHlvdSBkbyBub3QgbmVlZCBhIHNwZWNpZmljCisgICBzbWJ1cyBhZGFwdGVyIHRvIGNhbGwgdGhpcyBmdW5jdGlvbi4gKi8KK2V4dGVybiBzMzIgaTJjX3NtYnVzX3hmZXIgKHN0cnVjdCBpMmNfYWRhcHRlciAqIGFkYXB0ZXIsIHUxNiBhZGRyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciByZWFkX3dyaXRlLCB1OCBjb21tYW5kLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGkyY19zbWJ1c19kYXRhICogZGF0YSk7CisKKy8qIE5vdyBmb2xsb3cgdGhlICduaWNlJyBhY2Nlc3Mgcm91dGluZXMuIFRoZXNlIGFsc28gZG9jdW1lbnQgdGhlIGNhbGxpbmcKKyAgIGNvbnZlbnRpb25zIG9mIHNtYnVzX2FjY2Vzcy4gKi8KKworZXh0ZXJuIHMzMiBpMmNfc21idXNfd3JpdGVfcXVpY2soc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsIHU4IHZhbHVlKTsKK2V4dGVybiBzMzIgaTJjX3NtYnVzX3JlYWRfYnl0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCk7CitleHRlcm4gczMyIGkyY19zbWJ1c193cml0ZV9ieXRlKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LCB1OCB2YWx1ZSk7CitleHRlcm4gczMyIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwgdTggY29tbWFuZCk7CitleHRlcm4gczMyIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgdTggdmFsdWUpOworZXh0ZXJuIHMzMiBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsIHU4IGNvbW1hbmQpOworZXh0ZXJuIHMzMiBpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICogY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIHUxNiB2YWx1ZSk7CisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgKi8KK2V4dGVybiBzMzIgaTJjX3NtYnVzX3dyaXRlX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKiBjbGllbnQsCisJCQkJICAgICAgdTggY29tbWFuZCwgdTggbGVuZ3RoLAorCQkJCSAgICAgIHU4ICp2YWx1ZXMpOworZXh0ZXJuIHMzMiBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqIGNsaWVudCwKKwkJCQkJIHU4IGNvbW1hbmQsIHU4ICp2YWx1ZXMpOworCisvKgorICogQSBkcml2ZXIgaXMgY2FwYWJsZSBvZiBoYW5kbGluZyBvbmUgb3IgbW9yZSBwaHlzaWNhbCBkZXZpY2VzIHByZXNlbnQgb24KKyAqIEkyQyBhZGFwdGVycy4gVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIGluZm9ybSB0aGUgZHJpdmVyIG9mIGFkYXB0ZXIKKyAqIGV2ZW50cy4KKyAqLworCitzdHJ1Y3QgaTJjX2RyaXZlciB7CisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJY2hhciBuYW1lWzMyXTsKKwlpbnQgaWQ7CisJdW5zaWduZWQgaW50IGNsYXNzOworCXVuc2lnbmVkIGludCBmbGFnczsJCS8qIGRpdi4sIHNlZSBiZWxvdwkJKi8KKworCS8qIE5vdGlmaWVzIHRoZSBkcml2ZXIgdGhhdCBhIG5ldyBidXMgaGFzIGFwcGVhcmVkLiBUaGlzIHJvdXRpbmUKKwkgKiBjYW4gYmUgdXNlZCBieSB0aGUgZHJpdmVyIHRvIHRlc3QgaWYgdGhlIGJ1cyBtZWV0cyBpdHMgY29uZGl0aW9ucworCSAqICYgc2VlayBmb3IgdGhlIHByZXNlbmNlIG9mIHRoZSBjaGlwKHMpIGl0IHN1cHBvcnRzLiBJZiBmb3VuZCwgaXQgCisJICogcmVnaXN0ZXJzIHRoZSBjbGllbnQocykgdGhhdCBhcmUgb24gdGhlIGJ1cyB0byB0aGUgaTJjIGFkbWluLiB2aWEKKwkgKiBpMmNfYXR0YWNoX2NsaWVudC4KKwkgKi8KKwlpbnQgKCphdHRhY2hfYWRhcHRlcikoc3RydWN0IGkyY19hZGFwdGVyICopOworCWludCAoKmRldGFjaF9hZGFwdGVyKShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKik7CisKKwkvKiB0ZWxscyB0aGUgZHJpdmVyIHRoYXQgYSBjbGllbnQgaXMgYWJvdXQgdG8gYmUgZGVsZXRlZCAmIGdpdmVzIGl0IAorCSAqIHRoZSBjaGFuY2UgdG8gcmVtb3ZlIGl0cyBwcml2YXRlIGRhdGEuIEFsc28sIGlmIHRoZSBjbGllbnQgc3RydWN0CisJICogaGFzIGJlZW4gZHluYW1pY2FsbHkgYWxsb2NhdGVkIGJ5IHRoZSBkcml2ZXIgaW4gdGhlIGZ1bmN0aW9uIGFib3ZlLAorCSAqIGl0IG11c3QgYmUgZnJlZWQgaGVyZS4KKwkgKi8KKwlpbnQgKCpkZXRhY2hfY2xpZW50KShzdHJ1Y3QgaTJjX2NsaWVudCAqKTsKKwkKKwkvKiBhIGlvY3RsIGxpa2UgY29tbWFuZCB0aGF0IGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gc3BlY2lmaWMgZnVuY3Rpb25zCisJICogd2l0aCB0aGUgZGV2aWNlLgorCSAqLworCWludCAoKmNvbW1hbmQpKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKKworCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworI2RlZmluZSB0b19pMmNfZHJpdmVyKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgaTJjX2RyaXZlciwgZHJpdmVyKQorCisjZGVmaW5lIEkyQ19OQU1FX1NJWkUJNTAKKworLyoKKyAqIGkyY19jbGllbnQgaWRlbnRpZmllcyBhIHNpbmdsZSBkZXZpY2UgKGkuZS4gY2hpcCkgdGhhdCBpcyBjb25uZWN0ZWQgdG8gYW4gCisgKiBpMmMgYnVzLiBUaGUgYmVoYXZpb3VyIGlzIGRlZmluZWQgYnkgdGhlIHJvdXRpbmVzIG9mIHRoZSBkcml2ZXIuIFRoaXMKKyAqIGZ1bmN0aW9uIGlzIG1haW5seSB1c2VkIGZvciBsb29rdXAgJiBvdGhlciBhZG1pbi4gZnVuY3Rpb25zLgorICovCitzdHJ1Y3QgaTJjX2NsaWVudCB7CisJdW5zaWduZWQgaW50IGZsYWdzOwkJLyogZGl2Liwgc2VlIGJlbG93CQkqLworCXVuc2lnbmVkIGludCBhZGRyOwkJLyogY2hpcCBhZGRyZXNzIC0gTk9URTogN2JpdCAJKi8KKwkJCQkJLyogYWRkcmVzc2VzIGFyZSBzdG9yZWQgaW4gdGhlCSovCisJCQkJCS8qIF9MT1dFUl8gNyBiaXRzIG9mIHRoaXMgY2hhcgkqLworCS8qIGFkZHI6IHVuc2lnbmVkIGludCB0byBtYWtlIGxtX3NlbnNvcnMgaTJjLWlzYSBhZGFwdGVyIHdvcmsKKwkgIG1vcmUgY2xlYW5seS4gSXQgZG9lcyBub3QgdGFrZSBhbnkgbW9yZSBtZW1vcnkgc3BhY2UsIGR1ZSB0bworCSAgYWxpZ25tZW50IGNvbnNpZGVyYXRpb25zICovCisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOwkvKiB0aGUgYWRhcHRlciB3ZSBzaXQgb24JKi8KKwlzdHJ1Y3QgaTJjX2RyaXZlciAqZHJpdmVyOwkvKiBhbmQgb3VyIGFjY2VzcyByb3V0aW5lcwkqLworCWludCB1c2FnZV9jb3VudDsJCS8qIEhvdyBtYW55IGFjY2Vzc2VzIGN1cnJlbnRseSAgKi8KKwkJCQkJLyogdG8gdGhlIGNsaWVudAkJKi8KKwlzdHJ1Y3QgZGV2aWNlIGRldjsJCS8qIHRoZSBkZXZpY2Ugc3RydWN0dXJlCQkqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljaGFyIG5hbWVbSTJDX05BTUVfU0laRV07CisJc3RydWN0IGNvbXBsZXRpb24gcmVsZWFzZWQ7Cit9OworI2RlZmluZSB0b19pMmNfY2xpZW50KGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgaTJjX2NsaWVudCwgZGV2KQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmkyY19nZXRfY2xpZW50ZGF0YSAoc3RydWN0IGkyY19jbGllbnQgKmRldikKK3sKKwlyZXR1cm4gZGV2X2dldF9kcnZkYXRhICgmZGV2LT5kZXYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaTJjX3NldF9jbGllbnRkYXRhIChzdHJ1Y3QgaTJjX2NsaWVudCAqZGV2LCB2b2lkICpkYXRhKQoreworCWRldl9zZXRfZHJ2ZGF0YSAoJmRldi0+ZGV2LCBkYXRhKTsKK30KKworI2RlZmluZSBJMkNfREVWTkFNRShzdHIpCS5uYW1lID0gc3RyCisKK3N0YXRpYyBpbmxpbmUgY2hhciAqaTJjX2NsaWVudG5hbWUoc3RydWN0IGkyY19jbGllbnQgKmMpCit7CisJcmV0dXJuICZjLT5uYW1lWzBdOworfQorCisvKgorICogVGhlIGZvbGxvd2luZyBzdHJ1Y3RzIGFyZSBmb3IgdGhvc2Ugd2hvIGxpa2UgdG8gaW1wbGVtZW50IG5ldyBidXMgZHJpdmVyczoKKyAqIGkyY19hbGdvcml0aG0gaXMgdGhlIGludGVyZmFjZSB0byBhIGNsYXNzIG9mIGhhcmR3YXJlIHNvbHV0aW9ucyB3aGljaCBjYW4KKyAqIGJlIGFkZHJlc3NlZCB1c2luZyB0aGUgc2FtZSBidXMgYWxnb3JpdGhtcyAtIGkuZS4gYml0LWJhbmdpbmcgb3IgdGhlIFBDRjg1ODQKKyAqIHRvIG5hbWUgdHdvIG9mIHRoZSBtb3N0IGNvbW1vbi4KKyAqLworc3RydWN0IGkyY19hbGdvcml0aG0geworCWNoYXIgbmFtZVszMl07CQkJCS8qIHRleHR1YWwgZGVzY3JpcHRpb24gCSovCisJdW5zaWduZWQgaW50IGlkOworCisJLyogSWYgYW4gYWRhcHRlciBhbGdvcml0aG0gY2FuJ3QgZG8gSTJDLWxldmVsIGFjY2Vzcywgc2V0IG1hc3Rlcl94ZmVyCisJICAgdG8gTlVMTC4gSWYgYW4gYWRhcHRlciBhbGdvcml0aG0gY2FuIGRvIFNNQnVzIGFjY2Vzcywgc2V0IAorCSAgIHNtYnVzX3hmZXIuIElmIHNldCB0byBOVUxMLCB0aGUgU01CdXMgcHJvdG9jb2wgaXMgc2ltdWxhdGVkCisJICAgdXNpbmcgY29tbW9uIEkyQyBtZXNzYWdlcyAqLworCWludCAoKm1hc3Rlcl94ZmVyKShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsc3RydWN0IGkyY19tc2cgKm1zZ3MsIAorCSAgICAgICAgICAgICAgICAgICBpbnQgbnVtKTsKKwlpbnQgKCpzbWJ1c194ZmVyKSAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCB1MTYgYWRkciwgCisJICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzLCBjaGFyIHJlYWRfd3JpdGUsCisJICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIGludCBzaXplLCB1bmlvbiBpMmNfc21idXNfZGF0YSAqIGRhdGEpOworCisJLyogLS0tIHRoZXNlIG9wdGlvbmFsL2Z1dHVyZSB1c2UgZm9yIHNvbWUgYWRhcHRlciB0eXBlcy4qLworCWludCAoKnNsYXZlX3NlbmQpKHN0cnVjdCBpMmNfYWRhcHRlciAqLGNoYXIqLGludCk7CisJaW50ICgqc2xhdmVfcmVjdikoc3RydWN0IGkyY19hZGFwdGVyICosY2hhciosaW50KTsKKworCS8qIC0tLSBpb2N0bCBsaWtlIGNhbGwgdG8gc2V0IGRpdi4gcGFyYW1ldGVycy4gKi8KKwlpbnQgKCphbGdvX2NvbnRyb2wpKHN0cnVjdCBpMmNfYWRhcHRlciAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworCisJLyogVG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgKi8KKwl1MzIgKCpmdW5jdGlvbmFsaXR5KSAoc3RydWN0IGkyY19hZGFwdGVyICopOworfTsKKworLyoKKyAqIGkyY19hZGFwdGVyIGlzIHRoZSBzdHJ1Y3R1cmUgdXNlZCB0byBpZGVudGlmeSBhIHBoeXNpY2FsIGkyYyBidXMgYWxvbmcKKyAqIHdpdGggdGhlIGFjY2VzcyBhbGdvcml0aG1zIG5lY2Vzc2FyeSB0byBhY2Nlc3MgaXQuCisgKi8KK3N0cnVjdCBpMmNfYWRhcHRlciB7CisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJdW5zaWduZWQgaW50IGlkOy8qID09IGlzIGFsZ28tPmlkIHwgaHdkZXAuc3RydWN0LT5pZCwgCQkqLworCQkJLyogZm9yIHJlZ2lzdGVyZWQgdmFsdWVzIHNlZSBiZWxvdwkJKi8KKwl1bnNpZ25lZCBpbnQgY2xhc3M7CisJc3RydWN0IGkyY19hbGdvcml0aG0gKmFsZ287LyogdGhlIGFsZ29yaXRobSB0byBhY2Nlc3MgdGhlIGJ1cwkqLworCXZvaWQgKmFsZ29fZGF0YTsKKworCS8qIC0tLSBhZG1pbmlzdHJhdGlvbiBzdHVmZi4gKi8KKwlpbnQgKCpjbGllbnRfcmVnaXN0ZXIpKHN0cnVjdCBpMmNfY2xpZW50ICopOworCWludCAoKmNsaWVudF91bnJlZ2lzdGVyKShzdHJ1Y3QgaTJjX2NsaWVudCAqKTsKKworCS8qIGRhdGEgZmllbGRzIHRoYXQgYXJlIHZhbGlkIGZvciBhbGwgZGV2aWNlcwkqLworCXN0cnVjdCBzZW1hcGhvcmUgYnVzX2xvY2s7CisJc3RydWN0IHNlbWFwaG9yZSBjbGlzdF9sb2NrOworCisJaW50IHRpbWVvdXQ7CisJaW50IHJldHJpZXM7CisJc3RydWN0IGRldmljZSBkZXY7CQkvKiB0aGUgYWRhcHRlciBkZXZpY2UgKi8KKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlIGNsYXNzX2RldjsJLyogdGhlIGNsYXNzIGRldmljZSAqLworCisjaWZkZWYgQ09ORklHX1BST0NfRlMgCisJLyogTm8gbmVlZCB0byBzZXQgdGhpcyB3aGVuIHlvdSBpbml0aWFsaXplIHRoZSBhZGFwdGVyICAgICAgICAgICovCisJaW50IGlub2RlOworI2VuZGlmIC8qIGRlZiBDT05GSUdfUFJPQ19GUyAqLworCisJaW50IG5yOworCXN0cnVjdCBsaXN0X2hlYWQgY2xpZW50czsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY2hhciBuYW1lW0kyQ19OQU1FX1NJWkVdOworCXN0cnVjdCBjb21wbGV0aW9uIGRldl9yZWxlYXNlZDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjbGFzc19kZXZfcmVsZWFzZWQ7Cit9OworI2RlZmluZSBkZXZfdG9faTJjX2FkYXB0ZXIoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBpMmNfYWRhcHRlciwgZGV2KQorI2RlZmluZSBjbGFzc19kZXZfdG9faTJjX2FkYXB0ZXIoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBpMmNfYWRhcHRlciwgY2xhc3NfZGV2KQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmkyY19nZXRfYWRhcGRhdGEgKHN0cnVjdCBpMmNfYWRhcHRlciAqZGV2KQoreworCXJldHVybiBkZXZfZ2V0X2RydmRhdGEgKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpMmNfc2V0X2FkYXBkYXRhIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlkZXZfc2V0X2RydmRhdGEgKCZkZXYtPmRldiwgZGF0YSk7Cit9CisKKy8qZmxhZ3MgZm9yIHRoZSBkcml2ZXIgc3RydWN0OiAqLworI2RlZmluZSBJMkNfREZfTk9USUZZCTB4MDEJCS8qIG5vdGlmeSBvbiBidXMgKGRlL2EpdHRhY2hlcyAJKi8KKyNpZiAwCisvKiB0aGlzIGZsYWcgaXMgZ29uZSAtLSB0aGVyZSBpcyBhIChvcHRpb25hbCkgZHJpdmVyLT5kZXRhY2hfYWRhcHRlcgorICogY2FsbGJhY2sgbm93IHdoaWNoIGNhbiBiZSB1c2VkIGluc3RlYWQgKi8KKyMgZGVmaW5lIEkyQ19ERl9EVU1NWQkweDAyCisjZW5kaWYKKworLypmbGFncyBmb3IgdGhlIGNsaWVudCBzdHJ1Y3Q6ICovCisjZGVmaW5lIEkyQ19DTElFTlRfQUxMT1dfVVNFCQkweDAxCS8qIENsaWVudCBhbGxvd3MgYWNjZXNzICovCisjZGVmaW5lIEkyQ19DTElFTlRfQUxMT1dfTVVMVElQTEVfVVNFIAkweDAyICAJLyogQWxsb3cgbXVsdGlwbGUgYWNjZXNzLWxvY2tzICovCisJCQkJCQkvKiBvbiBhbiBpMmNfY2xpZW50ICovCisjZGVmaW5lIEkyQ19DTElFTlRfUEVDICAweDA0CQkJLyogVXNlIFBhY2tldCBFcnJvciBDaGVja2luZyAqLworI2RlZmluZSBJMkNfQ0xJRU5UX1RFTgkweDEwCQkJLyogd2UgaGF2ZSBhIHRlbiBiaXQgY2hpcCBhZGRyZXNzCSovCisJCQkJCQkvKiBNdXN0IGVxdWFsIEkyQ19NX1RFTiBiZWxvdyAqLworCisvKiBpMmMgYWRhcHRlciBjbGFzc2VzIChiaXRtYXNrKSAqLworI2RlZmluZSBJMkNfQ0xBU1NfSFdNT04JCSgxPDwwKQkvKiBsbV9zZW5zb3JzLCAuLi4gKi8KKyNkZWZpbmUgSTJDX0NMQVNTX1RWX0FOQUxPRwkoMTw8MSkJLyogYnR0diArIGZyaWVuZHMgKi8KKyNkZWZpbmUgSTJDX0NMQVNTX1RWX0RJR0lUQUwJKDE8PDIpCS8qIGR2YiBjYXJkcyAqLworI2RlZmluZSBJMkNfQ0xBU1NfRERDCQkoMTw8MykJLyogaTJjLW1hdHJveGZiID8gKi8KKyNkZWZpbmUgSTJDX0NMQVNTX0NBTV9BTkFMT0cJKDE8PDQpCS8qIGNhbWVyYSB3aXRoIGFuYWxvZyBDQ0QgKi8KKyNkZWZpbmUgSTJDX0NMQVNTX0NBTV9ESUdJVEFMCSgxPDw1KQkvKiBtb3N0IHdlYmNhbXMgKi8KKyNkZWZpbmUgSTJDX0NMQVNTX1NPVU5ECQkoMTw8NikJLyogc291bmQgZGV2aWNlcyAqLworI2RlZmluZSBJMkNfQ0xBU1NfQUxMCQkoVUlOVF9NQVgpIC8qIGFsbCBvZiB0aGUgYWJvdmUgKi8KKworLyogaTJjX2NsaWVudF9hZGRyZXNzX2RhdGEgaXMgdGhlIHN0cnVjdCBmb3IgaG9sZGluZyBkZWZhdWx0IGNsaWVudAorICogYWRkcmVzc2VzIGZvciBhIGRyaXZlciBhbmQgZm9yIHRoZSBwYXJhbWV0ZXJzIHN1cHBsaWVkIG9uIHRoZQorICogY29tbWFuZCBsaW5lCisgKi8KK3N0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSB7CisJdW5zaWduZWQgc2hvcnQgKm5vcm1hbF9pMmM7CisJdW5zaWduZWQgc2hvcnQgKm5vcm1hbF9pMmNfcmFuZ2U7CisJdW5zaWduZWQgc2hvcnQgKnByb2JlOworCXVuc2lnbmVkIHNob3J0ICpwcm9iZV9yYW5nZTsKKwl1bnNpZ25lZCBzaG9ydCAqaWdub3JlOworCXVuc2lnbmVkIHNob3J0ICppZ25vcmVfcmFuZ2U7CisJdW5zaWduZWQgc2hvcnQgKmZvcmNlOworfTsKKworLyogSW50ZXJuYWwgbnVtYmVycyB0byB0ZXJtaW5hdGUgbGlzdHMgKi8KKyNkZWZpbmUgSTJDX0NMSUVOVF9FTkQJCTB4ZmZmZVUKKyNkZWZpbmUgSTJDX0NMSUVOVF9JU0FfRU5ECTB4ZmZmZWZmZmVVCisKKy8qIFRoZSBudW1iZXJzIHRvIHVzZSB0byBzZXQgSTJDIGJ1cyBhZGRyZXNzICovCisjZGVmaW5lIEFOWV9JMkNfQlVTCQkweGZmZmYKKyNkZWZpbmUgQU5ZX0kyQ19JU0FfQlVTCQk5MTkxCisKKworLyogLS0tLS0gZnVuY3Rpb25zIGV4cG9ydGVkIGJ5IGkyYy5vICovCisKKy8qIGFkbWluaXN0cmF0aW9uLi4uCisgKi8KK2V4dGVybiBpbnQgaTJjX2FkZF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqKTsKK2V4dGVybiBpbnQgaTJjX2RlbF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqKTsKKworZXh0ZXJuIGludCBpMmNfYWRkX2RyaXZlcihzdHJ1Y3QgaTJjX2RyaXZlciAqKTsKK2V4dGVybiBpbnQgaTJjX2RlbF9kcml2ZXIoc3RydWN0IGkyY19kcml2ZXIgKik7CisKK2V4dGVybiBpbnQgaTJjX2F0dGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKik7CitleHRlcm4gaW50IGkyY19kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICopOworCisvKiBOZXcgZnVuY3Rpb246IFRoaXMgaXMgdG8gZ2V0IGFuIGkyY19jbGllbnQtc3RydWN0IGZvciBjb250cm9sbGluZyB0aGUgCisgICBjbGllbnQgZWl0aGVyIGJ5IHVzaW5nIGkyY19jb250cm9sLWZ1bmN0aW9uIG9yIGhhdmluZyB0aGUgCisgICBjbGllbnQtbW9kdWxlIGV4cG9ydCBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIHRoZSBpMmNfY2xpZW50CisgICAtc3RydWN0LiAqLworZXh0ZXJuIHN0cnVjdCBpMmNfY2xpZW50ICppMmNfZ2V0X2NsaWVudChpbnQgZHJpdmVyX2lkLCBpbnQgYWRhcHRlcl9pZCwgCisJCQkJCXN0cnVjdCBpMmNfY2xpZW50ICpwcmV2KTsKKworLyogU2hvdWxkIGJlIHVzZWQgd2l0aCBuZXcgZnVuY3Rpb24KKyAgIGV4dGVybiBzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2dldF9jbGllbnQoaW50LGludCxzdHJ1Y3QgaTJjX2NsaWVudCAqKTsKKyAgIHRvIG1ha2Ugc3VyZSB0aGF0IGNsaWVudC1zdHJ1Y3QgaXMgdmFsaWQgYW5kIHRoYXQgaXQgaXMgb2theSB0byBhY2Nlc3MKKyAgIHRoZSBpMmMtY2xpZW50LiAKKyAgIHJldHVybnMgLUVBQ0NFUyBpZiBjbGllbnQgZG9lc24ndCBhbGxvdyB1c2UgKGRlZmF1bHQpCisgICByZXR1cm5zIC1FQlVTWSBpZiBjbGllbnQgZG9lc24ndCBhbGxvdyBtdWx0aXBsZSB1c2UgKGRlZmF1bHQpIGFuZCAKKyAgIHVzYWdlX2NvdW50ID4wICovCitleHRlcm4gaW50IGkyY191c2VfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICopOworZXh0ZXJuIGludCBpMmNfcmVsZWFzZV9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKik7CisKKy8qIGNhbGwgdGhlIGkyY19jbGllbnQtPmNvbW1hbmQoKSBvZiBhbGwgYXR0YWNoZWQgY2xpZW50cyB3aXRoCisgKiB0aGUgZ2l2ZW4gYXJndW1lbnRzICovCitleHRlcm4gdm9pZCBpMmNfY2xpZW50c19jb21tYW5kKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwKKwkJCQl1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOworCisvKiByZXR1cm5zIC1FQlVTWSBpZiBhZGRyZXNzIGhhcyBiZWVuIHRha2VuLCAwIGlmIG5vdC4gTm90ZSB0aGF0IHRoZSBvbmx5CisgICBvdGhlciBwbGFjZSBhdCB3aGljaCB0aGlzIGlzIGNhbGxlZCBpcyB3aXRoaW4gaTJjX2F0dGFjaF9jbGllbnQ7IHNvCisgICB5b3UgY2FuIGNoZWF0IGJ5IHNpbXBseSBub3QgcmVnaXN0ZXJpbmcuIE5vdCByZWNvbW1lbmRlZCwgb2YgY291cnNlISAqLworZXh0ZXJuIGludCBpMmNfY2hlY2tfYWRkciAoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcik7CisKKy8qIERldGVjdCBmdW5jdGlvbi4gSXQgaXRlcmF0ZXMgb3ZlciBhbGwgcG9zc2libGUgYWRkcmVzc2VzIGl0c2VsZi4KKyAqIEl0IHdpbGwgb25seSBjYWxsIGZvdW5kX3Byb2MgaWYgc29tZSBjbGllbnQgaXMgY29ubmVjdGVkIGF0IHRoZQorICogc3BlY2lmaWMgYWRkcmVzcyAodW5sZXNzIGEgJ2ZvcmNlJyBtYXRjaGVkKTsKKyAqLworZXh0ZXJuIGludCBpMmNfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCAKKwkJc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhICphZGRyZXNzX2RhdGEsCisJCWludCAoKmZvdW5kX3Byb2MpIChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiwgaW50LCBpbnQpKTsKKworLyogQW4gaW9jdGwgbGlrZSBjYWxsIHRvIHNldCBkaXYuIHBhcmFtZXRlcnMgb2YgdGhlIGFkYXB0ZXIuCisgKi8KK2V4dGVybiBpbnQgaTJjX2NvbnRyb2woc3RydWN0IGkyY19jbGllbnQgKix1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworCisvKiBUaGlzIGNhbGwgcmV0dXJucyBhIHVuaXF1ZSBsb3cgaWRlbnRpZmllciBmb3IgZWFjaCByZWdpc3RlcmVkIGFkYXB0ZXIsCisgKiBvciAtMSBpZiB0aGUgYWRhcHRlciB3YXMgbm90IHJlZ2lzdGVyZWQuIAorICovCitleHRlcm4gaW50IGkyY19hZGFwdGVyX2lkKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCk7CitleHRlcm4gc3RydWN0IGkyY19hZGFwdGVyKiBpMmNfZ2V0X2FkYXB0ZXIoaW50IGlkKTsKK2V4dGVybiB2b2lkIGkyY19wdXRfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApOworCisKKy8qIFJldHVybiB0aGUgZnVuY3Rpb25hbGl0eSBtYXNrICovCitzdGF0aWMgaW5saW5lIHUzMiBpMmNfZ2V0X2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCXJldHVybiBhZGFwLT5hbGdvLT5mdW5jdGlvbmFsaXR5KGFkYXApOworfQorCisvKiBSZXR1cm4gMSBpZiBhZGFwdGVyIHN1cHBvcnRzIGV2ZXJ5dGhpbmcgd2UgbmVlZCwgMCBpZiBub3QuICovCitzdGF0aWMgaW5saW5lIGludCBpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHUzMiBmdW5jKQoreworCXJldHVybiAoZnVuYyAmIGkyY19nZXRfZnVuY3Rpb25hbGl0eShhZGFwKSkgPT0gZnVuYzsKK30KKworLyoKKyAqIEkyQyBNZXNzYWdlIC0gdXNlZCBmb3IgcHVyZSBpMmMgdHJhbnNhY3Rpb24sIGFsc28gZnJvbSAvZGV2IGludGVyZmFjZQorICovCitzdHJ1Y3QgaTJjX21zZyB7CisJX191MTYgYWRkcjsJLyogc2xhdmUgYWRkcmVzcwkJCSovCisgCV9fdTE2IGZsYWdzOwkJCisjZGVmaW5lIEkyQ19NX1RFTgkweDEwCS8qIHdlIGhhdmUgYSB0ZW4gYml0IGNoaXAgYWRkcmVzcwkqLworI2RlZmluZSBJMkNfTV9SRAkweDAxCisjZGVmaW5lIEkyQ19NX05PU1RBUlQJMHg0MDAwCisjZGVmaW5lIEkyQ19NX1JFVl9ESVJfQUREUgkweDIwMDAKKyNkZWZpbmUgSTJDX01fSUdOT1JFX05BSwkweDEwMDAKKyNkZWZpbmUgSTJDX01fTk9fUkRfQUNLCQkweDA4MDAKKyAJX191MTYgbGVuOwkJLyogbXNnIGxlbmd0aAkJCQkqLworIAlfX3U4ICpidWY7CQkvKiBwb2ludGVyIHRvIG1zZyBkYXRhCQkJKi8KK307CisKKy8qIFRvIGRldGVybWluZSB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgcHJlc2VudCAqLworCisjZGVmaW5lIEkyQ19GVU5DX0kyQwkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgSTJDX0ZVTkNfMTBCSVRfQUREUgkJMHgwMDAwMDAwMgorI2RlZmluZSBJMkNfRlVOQ19QUk9UT0NPTF9NQU5HTElORwkweDAwMDAwMDA0IC8qIEkyQ19NX3tSRVZfRElSX0FERFIsTk9TVEFSVCwuLn0gKi8KKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfSFdQRUNfQ0FMQwkweDAwMDAwMDA4IC8qIFNNQnVzIDIuMCAqLworI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX1dPUkRfREFUQV9QRUMgIDB4MDAwMDA4MDAgLyogU01CdXMgMi4wICovIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9XT1JEX0RBVEFfUEVDIDB4MDAwMDEwMDAgLyogU01CdXMgMi4wICovIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19QUk9DX0NBTExfUEVDCTB4MDAwMDIwMDAgLyogU01CdXMgMi4wICovCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0JMT0NLX1BST0NfQ0FMTF9QRUMgMHgwMDAwNDAwMCAvKiBTTUJ1cyAyLjAgKi8KKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfQkxPQ0tfUFJPQ19DQUxMCTB4MDAwMDgwMDAgLyogU01CdXMgMi4wICovCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1FVSUNLCQkweDAwMDEwMDAwIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEUJMHgwMDAyMDAwMCAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURQkweDAwMDQwMDAwIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEVfREFUQQkweDAwMDgwMDAwIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEEJMHgwMDEwMDAwMCAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUkVBRF9XT1JEX0RBVEEJMHgwMDIwMDAwMCAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfV1JJVEVfV09SRF9EQVRBCTB4MDA0MDAwMDAgCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1BST0NfQ0FMTAkweDAwODAwMDAwIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX0JMT0NLX0RBVEEJMHgwMTAwMDAwMCAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQkxPQ0tfREFUQSAweDAyMDAwMDAwIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX0kyQ19CTE9DSwkweDA0MDAwMDAwIC8qIEkyQy1saWtlIGJsb2NrIHhmZXIgICovCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0kyQ19CTE9DSwkweDA4MDAwMDAwIC8qIHcvIDEtYnl0ZSByZWcuIGFkZHIuICovCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLXzIJIDB4MTAwMDAwMDAgLyogSTJDLWxpa2UgYmxvY2sgeGZlciAgKi8KKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfV1JJVEVfSTJDX0JMT0NLXzIgMHgyMDAwMDAwMCAvKiB3LyAyLWJ5dGUgcmVnLiBhZGRyLiAqLworI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX0JMT0NLX0RBVEFfUEVDICAweDQwMDAwMDAwIC8qIFNNQnVzIDIuMCAqLworI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9CTE9DS19EQVRBX1BFQyAweDgwMDAwMDAwIC8qIFNNQnVzIDIuMCAqLworCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0JZVEUgKEkyQ19GVU5DX1NNQlVTX1JFQURfQllURSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURSkKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBIChJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEVfREFUQSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEEpCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSAoSTJDX0ZVTkNfU01CVVNfUkVBRF9XT1JEX0RBVEEgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfV09SRF9EQVRBKQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19CTE9DS19EQVRBIChJMkNfRlVOQ19TTUJVU19SRUFEX0JMT0NLX0RBVEEgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JMT0NLX0RBVEEpCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0kyQ19CTE9DSyAoSTJDX0ZVTkNfU01CVVNfUkVBRF9JMkNfQkxPQ0sgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfSTJDX0JMT0NLKQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0tfMiAoSTJDX0ZVTkNfU01CVVNfUkVBRF9JMkNfQkxPQ0tfMiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0kyQ19CTE9DS18yKQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19CTE9DS19EQVRBX1BFQyAoSTJDX0ZVTkNfU01CVVNfUkVBRF9CTE9DS19EQVRBX1BFQyB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JMT0NLX0RBVEFfUEVDKQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEFfUEVDICAoSTJDX0ZVTkNfU01CVVNfUkVBRF9XT1JEX0RBVEFfUEVDIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfV09SRF9EQVRBX1BFQykKKworI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEVfUEVDCQlJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEVfREFUQQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX1BFQwkJSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfQllURV9EQVRBX1BFQwlJMkNfRlVOQ19TTUJVU19SRUFEX1dPUkRfREFUQQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEFfUEVDCUkyQ19GVU5DX1NNQlVTX1dSSVRFX1dPUkRfREFUQQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19CWVRFX1BFQwkJCUkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEFfUEVDCQlJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEKKworI2RlZmluZSBJMkNfRlVOQ19TTUJVU19FTVVMIChJMkNfRlVOQ19TTUJVU19RVUlDSyB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfQllURSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19GVU5DX1NNQlVTX1BST0NfQ0FMTCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQkxPQ0tfREFUQSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQkxPQ0tfREFUQV9QRUMgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19GVU5DX1NNQlVTX0kyQ19CTE9DSykKKworLyogCisgKiBEYXRhIGZvciBTTUJ1cyBNZXNzYWdlcyAKKyAqLworI2RlZmluZSBJMkNfU01CVVNfQkxPQ0tfTUFYCTMyCS8qIEFzIHNwZWNpZmllZCBpbiBTTUJ1cyBzdGFuZGFyZCAqLwkKKyNkZWZpbmUgSTJDX1NNQlVTX0kyQ19CTE9DS19NQVgJMzIJLyogTm90IHNwZWNpZmllZCBidXQgd2UgdXNlIHNhbWUgc3RydWN0dXJlICovCit1bmlvbiBpMmNfc21idXNfZGF0YSB7CisJX191OCBieXRlOworCV9fdTE2IHdvcmQ7CisJX191OCBibG9ja1tJMkNfU01CVVNfQkxPQ0tfTUFYICsgM107IC8qIGJsb2NrWzBdIGlzIHVzZWQgZm9yIGxlbmd0aCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvbmUgbW9yZSBmb3IgcmVhZCBsZW5ndGggaW4gYmxvY2sgcHJvY2VzcyBjYWxsICovCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbmQgb25lIG1vcmUgZm9yIFBFQyAqLworfTsKKworLyogc21idXNfYWNjZXNzIHJlYWQgb3Igd3JpdGUgbWFya2VycyAqLworI2RlZmluZSBJMkNfU01CVVNfUkVBRAkxCisjZGVmaW5lIEkyQ19TTUJVU19XUklURQkwCisKKy8qIFNNQnVzIHRyYW5zYWN0aW9uIHR5cGVzIChzaXplIHBhcmFtZXRlciBpbiB0aGUgYWJvdmUgZnVuY3Rpb25zKSAKKyAgIE5vdGU6IHRoZXNlIG5vIGxvbmdlciBjb3JyZXNwb25kIHRvIHRoZSAoYXJiaXRyYXJ5KSBQSUlYNCBpbnRlcm5hbCBjb2RlcyEgKi8KKyNkZWZpbmUgSTJDX1NNQlVTX1FVSUNLCQkgICAgMAorI2RlZmluZSBJMkNfU01CVVNfQllURQkJICAgIDEKKyNkZWZpbmUgSTJDX1NNQlVTX0JZVEVfREFUQQkgICAgMiAKKyNkZWZpbmUgSTJDX1NNQlVTX1dPUkRfREFUQQkgICAgMworI2RlZmluZSBJMkNfU01CVVNfUFJPQ19DQUxMCSAgICA0CisjZGVmaW5lIEkyQ19TTUJVU19CTE9DS19EQVRBCSAgICA1CisjZGVmaW5lIEkyQ19TTUJVU19JMkNfQkxPQ0tfREFUQSAgICA2CisjZGVmaW5lIEkyQ19TTUJVU19CTE9DS19QUk9DX0NBTEwgICA3CQkvKiBTTUJ1cyAyLjAgKi8KKyNkZWZpbmUgSTJDX1NNQlVTX0JMT0NLX0RBVEFfUEVDICAgIDgJCS8qIFNNQnVzIDIuMCAqLworI2RlZmluZSBJMkNfU01CVVNfUFJPQ19DQUxMX1BFQyAgICAgOQkJLyogU01CdXMgMi4wICovCisjZGVmaW5lIEkyQ19TTUJVU19CTE9DS19QUk9DX0NBTExfUEVDICAxMAkvKiBTTUJ1cyAyLjAgKi8KKyNkZWZpbmUgSTJDX1NNQlVTX1dPUkRfREFUQV9QRUMJICAgMTEJCS8qIFNNQnVzIDIuMCAqLworCisKKy8qIC0tLS0tIGNvbW1hbmRzIGZvciB0aGUgaW9jdGwgbGlrZSBpMmNfY29tbWFuZCBjYWxsOgorICogbm90ZSB0aGF0IGFkZGl0aW9uYWwgY2FsbHMgYXJlIGRlZmluZWQgaW4gdGhlIGFsZ29yaXRobSBhbmQgaHcgCisgKglkZXBlbmRlbnQgbGF5ZXJzIC0gdGhlc2UgY2FuIGJlIGxpc3RlZCBoZXJlLCBvciBzZWUgdGhlIAorICoJY29ycmVzcG9uZGluZyBoZWFkZXIgZmlsZXMuCisgKi8KKwkJCQkvKiAtPiBiaXQtYWRhcHRlciBzcGVjaWZpYyBpb2N0bHMJKi8KKyNkZWZpbmUgSTJDX1JFVFJJRVMJMHgwNzAxCS8qIG51bWJlciBvZiB0aW1lcyBhIGRldmljZSBhZGRyZXNzICAgICAgKi8KKwkJCQkvKiBzaG91bGQgYmUgcG9sbGVkIHdoZW4gbm90ICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWNrbm93bGVkZ2luZyAJCQkqLworI2RlZmluZSBJMkNfVElNRU9VVAkweDA3MDIJLyogc2V0IHRpbWVvdXQgLSBjYWxsIHdpdGggaW50IAkJKi8KKworCisvKiB0aGlzIGlzIGZvciBpMmMtZGV2LmMJKi8KKyNkZWZpbmUgSTJDX1NMQVZFCTB4MDcwMwkvKiBDaGFuZ2Ugc2xhdmUgYWRkcmVzcwkJCSovCisJCQkJLyogQXR0bi46IFNsYXZlIGFkZHJlc3MgaXMgNyBvciAxMCBiaXRzICovCisjZGVmaW5lIEkyQ19TTEFWRV9GT1JDRQkweDA3MDYJLyogQ2hhbmdlIHNsYXZlIGFkZHJlc3MJCQkqLworCQkJCS8qIEF0dG4uOiBTbGF2ZSBhZGRyZXNzIGlzIDcgb3IgMTAgYml0cyAqLworCQkJCS8qIFRoaXMgY2hhbmdlcyB0aGUgYWRkcmVzcywgZXZlbiBpZiBpdCAqLworCQkJCS8qIGlzIGFscmVhZHkgdGFrZW4hCQkJKi8KKyNkZWZpbmUgSTJDX1RFTkJJVAkweDA3MDQJLyogMCBmb3IgNyBiaXQgYWRkcnMsICE9IDAgZm9yIDEwIGJpdAkqLworCisjZGVmaW5lIEkyQ19GVU5DUwkweDA3MDUJLyogR2V0IHRoZSBhZGFwdGVyIGZ1bmN0aW9uYWxpdHkgKi8KKyNkZWZpbmUgSTJDX1JEV1IJMHgwNzA3CS8qIENvbWJpbmVkIFIvVyB0cmFuc2ZlciAob25lIHN0b3Agb25seSkqLworI2RlZmluZSBJMkNfUEVDCQkweDA3MDgJLyogIT0gMCBmb3IgU01CdXMgUEVDICAgICAgICAgICAgICAgICAgICovCisjaWYgMAorI2RlZmluZSBJMkNfQUNLX1RFU1QJMHgwNzEwCS8qIFNlZSBpZiBhIHNsYXZlIGlzIGF0IGEgc3BlY2lmaWMgYWRkcmVzcyAqLworI2VuZGlmCisKKyNkZWZpbmUgSTJDX1NNQlVTCTB4MDcyMAkvKiBTTUJ1cy1sZXZlbCBhY2Nlc3MgKi8KKworLyogLi4uIGFsZ28tYml0LmMgcmVjb2duaXplcyAqLworI2RlZmluZSBJMkNfVURFTEFZCTB4MDcwNQkvKiBzZXQgZGVsYXkgaW4gbWljcm9zZWNzIGJldHdlZW4gZWFjaAkqLworCQkJCS8qIHdyaXR0ZW4gYnl0ZSAoZXhjZXB0IGFkZHJlc3MpCSovCisjZGVmaW5lIEkyQ19NREVMQVkJMHgwNzA2CS8qIG1pbGxpc2VjIGRlbGF5IGJldHdlZW4gd3JpdHRlbiBieXRlcyAqLworCisvKiAtLS0tLSBJMkMtREVWOiBjaGFyIGRldmljZSBpbnRlcmZhY2Ugc3R1ZmYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEkyQ19NQUpPUgk4OQkJLyogRGV2aWNlIG1ham9yIG51bWJlcgkJKi8KKworLyogVGhlc2UgZGVmaW5lcyBhcmUgdXNlZCBmb3IgcHJvYmluZyBpMmMgY2xpZW50IGFkZHJlc3NlcyAqLworLyogVGhlIGxlbmd0aCBvZiB0aGUgb3B0aW9uIGxpc3RzICovCisjZGVmaW5lIEkyQ19DTElFTlRfTUFYX09QVFMgNDgKKworLyogRGVmYXVsdCBmaWxsIG9mIG1hbnkgdmFyaWFibGVzICovCisjZGVmaW5lIEkyQ19DTElFTlRfREVGQVVMVFMge0kyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkQsIEkyQ19DTElFTlRfRU5ELCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19DTElFTlRfRU5ELCBJMkNfQ0xJRU5UX0VORCwgSTJDX0NMSUVOVF9FTkR9CisKKy8qIEkyQ19DTElFTlRfTU9EVUxFX1BBUk0gY3JlYXRlcyBhIG1vZHVsZSBwYXJhbWV0ZXIsIGFuZCBwdXRzIGl0IGluIHRoZQorICAgbW9kdWxlIGhlYWRlciAqLworCisjZGVmaW5lIEkyQ19DTElFTlRfTU9EVUxFX1BBUk0odmFyLGRlc2MpIFwKKyAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHZhcltJMkNfQ0xJRU5UX01BWF9PUFRTXSA9IEkyQ19DTElFTlRfREVGQVVMVFM7IFwKKyAgc3RhdGljIHVuc2lnbmVkIGludCB2YXIjI19udW07IFwKKyAgbW9kdWxlX3BhcmFtX2FycmF5KHZhciwgc2hvcnQsICZ2YXIjI19udW0sIDApOyBcCisgIE1PRFVMRV9QQVJNX0RFU0ModmFyLGRlc2MpCisKKy8qIFRoaXMgaXMgdGhlIG9uZSB5b3Ugd2FudCB0byB1c2UgaW4geW91ciBvd24gbW9kdWxlcyAqLworI2RlZmluZSBJMkNfQ0xJRU5UX0lOU01PRCBcCisgIEkyQ19DTElFTlRfTU9EVUxFX1BBUk0ocHJvYmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAiTGlzdCBvZiBhZGFwdGVyLGFkZHJlc3MgcGFpcnMgdG8gc2NhbiBhZGRpdGlvbmFsbHkiKTsgXAorICBJMkNfQ0xJRU5UX01PRFVMRV9QQVJNKHByb2JlX3JhbmdlLCBcCisgICAgICAgICAgICAgICAgICAgICAgIkxpc3Qgb2YgYWRhcHRlcixzdGFydC1hZGRyLGVuZC1hZGRyIHRyaXBsZXMgdG8gc2NhbiAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAiYWRkaXRpb25hbGx5Iik7IFwKKyAgSTJDX0NMSUVOVF9NT0RVTEVfUEFSTShpZ25vcmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAiTGlzdCBvZiBhZGFwdGVyLGFkZHJlc3MgcGFpcnMgbm90IHRvIHNjYW4iKTsgXAorICBJMkNfQ0xJRU5UX01PRFVMRV9QQVJNKGlnbm9yZV9yYW5nZSwgXAorICAgICAgICAgICAgICAgICAgICAgICJMaXN0IG9mIGFkYXB0ZXIsc3RhcnQtYWRkcixlbmQtYWRkciB0cmlwbGVzIG5vdCB0byAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAic2NhbiIpOyBcCisgIEkyQ19DTElFTlRfTU9EVUxFX1BBUk0oZm9yY2UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAiTGlzdCBvZiBhZGFwdGVyLGFkZHJlc3MgcGFpcnMgdG8gYm9sZGx5IGFzc3VtZSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAidG8gYmUgcHJlc2VudCIpOyBcCisJc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50X2FkZHJlc3NfZGF0YSBhZGRyX2RhdGEgPSB7CQlcCisJCQkubm9ybWFsX2kyYyA9IAkJbm9ybWFsX2kyYywJCVwKKwkJCS5ub3JtYWxfaTJjX3JhbmdlID0Jbm9ybWFsX2kyY19yYW5nZSwJXAorCQkJLnByb2JlID0JCXByb2JlLAkJCVwKKwkJCS5wcm9iZV9yYW5nZSA9CQlwcm9iZV9yYW5nZSwJCVwKKwkJCS5pZ25vcmUgPQkJaWdub3JlLAkJCVwKKwkJCS5pZ25vcmVfcmFuZ2UgPQkJaWdub3JlX3JhbmdlLAkJXAorCQkJLmZvcmNlID0JCWZvcmNlLAkJCVwKKwkJfQorCisvKiBEZXRlY3Qgd2hldGhlciB3ZSBhcmUgb24gdGhlIGlzYSBidXMuIElmIHRoaXMgcmV0dXJucyB0cnVlLCBhbGwgaTJjCisgICBhY2Nlc3Mgd2lsbCBmYWlsISAqLworI2RlZmluZSBpMmNfaXNfaXNhX2NsaWVudChjbGllbnRwdHIpIFwKKyAgICAgICAgKChjbGllbnRwdHIpLT5hZGFwdGVyLT5hbGdvLT5pZCA9PSBJMkNfQUxHT19JU0EpCisjZGVmaW5lIGkyY19pc19pc2FfYWRhcHRlcihhZGFwcHRyKSBcCisgICAgICAgICgoYWRhcHB0ciktPmFsZ28tPmlkID09IEkyQ19BTEdPX0lTQSkKKworI2VuZGlmIC8qIF9MSU5VWF9JMkNfSCAqLwo=